-
-
Notifications
You must be signed in to change notification settings - Fork 82
/
button.ts
50 lines (43 loc) · 1.4 KB
/
button.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import {BladeApi} from '../../common/api/blade.js';
import {EventListenable} from '../../common/api/event-listenable.js';
import {TpMouseEvent} from '../../common/api/tp-event.js';
import {ButtonBladeController} from '../controller/button-blade.js';
export interface ButtonApiEvents {
click: TpMouseEvent<ButtonApi>;
}
export class ButtonApi
extends BladeApi<ButtonBladeController>
implements EventListenable<ButtonApiEvents>
{
get label(): string | null | undefined {
return this.controller.labelController.props.get('label');
}
set label(label: string | null | undefined) {
this.controller.labelController.props.set('label', label);
}
get title(): string {
return this.controller.buttonController.props.get('title') ?? '';
}
set title(title: string) {
this.controller.buttonController.props.set('title', title);
}
public on<EventName extends keyof ButtonApiEvents>(
eventName: EventName,
handler: (ev: ButtonApiEvents[EventName]) => void,
): this {
const bh = handler.bind(this);
const emitter = this.controller.buttonController.emitter;
emitter.on(eventName, (ev) => {
bh(new TpMouseEvent(this, ev.nativeEvent));
});
return this;
}
public off<EventName extends keyof ButtonApiEvents>(
eventName: EventName,
handler: (ev: ButtonApiEvents[EventName]) => void,
): this {
const emitter = this.controller.buttonController.emitter;
emitter.off(eventName, handler);
return this;
}
}