x4js 2.0.34 → 2.1.0-manual
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -21
- package/package.json +39 -26
- package/src/components/base.scss +25 -89
- package/src/components/boxes/boxes.module.scss +54 -54
- package/src/components/boxes/boxes.ts +513 -513
- package/src/components/breadcrumb/breadcrumb.scss +56 -56
- package/src/components/breadcrumb/breadcrumb.ts +93 -93
- package/src/components/btngroup/btngroup.module.scss +40 -40
- package/src/components/btngroup/btngroup.ts +152 -152
- package/src/components/button/button.module.scss +172 -172
- package/src/components/button/button.ts +232 -232
- package/src/components/calendar/calendar.module.scss +162 -162
- package/src/components/calendar/calendar.ts +326 -326
- package/src/components/canvas/canvas.module.scss +24 -24
- package/src/components/canvas/canvas.ts +195 -195
- package/src/components/canvas/canvas_ex.ts +275 -275
- package/src/components/checkbox/check.svg +3 -3
- package/src/components/checkbox/checkbox.module.scss +141 -141
- package/src/components/checkbox/checkbox.ts +139 -139
- package/src/components/colorinput/colorinput.module.scss +64 -64
- package/src/components/colorinput/colorinput.ts +90 -90
- package/src/components/colorpicker/colorpicker.module.scss +132 -132
- package/src/components/colorpicker/colorpicker.ts +481 -481
- package/src/components/combobox/combobox.module.scss +145 -145
- package/src/components/combobox/combobox.ts +282 -282
- package/src/components/combobox/updown.svg +3 -3
- package/src/components/components.ts +45 -44
- package/src/components/dialog/dialog.module.scss +103 -105
- package/src/components/dialog/dialog.ts +233 -233
- package/src/components/filedrop/filedrop.module.scss +69 -69
- package/src/components/filedrop/filedrop.ts +130 -130
- package/src/components/form/form.module.scss +38 -38
- package/src/components/form/form.ts +172 -172
- package/src/components/gridview/gridview.module.scss +323 -337
- package/src/components/gridview/gridview.ts +1276 -1315
- package/src/components/header/header.module.scss +40 -40
- package/src/components/header/header.ts +141 -141
- package/src/components/icon/icon.module.scss +32 -32
- package/src/components/icon/icon.ts +165 -165
- package/src/components/image/image.module.scss +27 -27
- package/src/components/image/image.ts +168 -168
- package/src/components/input/input.module.scss +74 -74
- package/src/components/input/input.ts +537 -537
- package/src/components/keyboard/keyboard.module.scss +136 -136
- package/src/components/keyboard/keyboard.ts +549 -549
- package/src/components/label/label.module.scss +90 -91
- package/src/components/label/label.ts +101 -101
- package/src/components/link/link.module.scss +44 -44
- package/src/components/link/link.ts +87 -87
- package/src/components/listbox/listbox.module.scss +179 -179
- package/src/components/listbox/listbox.ts +596 -596
- package/src/components/menu/menu.module.scss +128 -128
- package/src/components/menu/menu.ts +174 -174
- package/src/components/messages/messages.module.scss +92 -146
- package/src/components/messages/messages.ts +237 -303
- package/src/components/normalize.scss +391 -391
- package/src/components/notification/notification.module.scss +83 -83
- package/src/components/notification/notification.ts +107 -107
- package/src/components/panel/panel.module.scss +66 -71
- package/src/components/panel/panel.ts +57 -57
- package/src/components/popup/popup.module.scss +51 -51
- package/src/components/popup/popup.ts +457 -457
- package/src/components/progress/progress.module.scss +56 -56
- package/src/components/progress/progress.ts +43 -43
- package/src/components/propgrid/progrid.module.scss +111 -111
- package/src/components/propgrid/propgrid.ts +300 -300
- package/src/components/propgrid/updown.svg +3 -3
- package/src/components/radio/radio.module.scss +163 -163
- package/src/components/radio/radio.svg +3 -3
- package/src/components/radio/radio.ts +141 -141
- package/src/components/rating/rating.module.scss +22 -22
- package/src/components/rating/rating.ts +131 -131
- package/src/components/select/select.module.scss +8 -8
- package/src/components/select/select.ts +134 -134
- package/src/components/shared.scss +141 -71
- package/src/components/sizers/sizer.module.scss +90 -107
- package/src/components/sizers/sizer.ts +131 -134
- package/src/components/slider/slider.module.scss +117 -117
- package/src/components/slider/slider.ts +197 -197
- package/src/components/spreadsheet/spreadsheet.module.scss +307 -307
- package/src/components/spreadsheet/spreadsheet.ts +1223 -1223
- package/src/components/switch/switch.module.scss +126 -126
- package/src/components/switch/switch.ts +61 -61
- package/src/components/tabs/tabs.module.scss +46 -67
- package/src/components/tabs/tabs.ts +229 -234
- package/src/components/textarea/textarea.module.scss +63 -63
- package/src/components/textarea/textarea.ts +131 -131
- package/src/components/textedit/textedit.module.scss +115 -115
- package/src/components/textedit/textedit.ts +122 -122
- package/src/components/themes.scss +90 -90
- package/src/components/tickline/tickline.module.scss +25 -25
- package/src/components/tickline/tickline.ts +81 -81
- package/src/components/tooltips/tooltips.scss +71 -71
- package/src/components/tooltips/tooltips.ts +120 -120
- package/src/components/treeview/treeview.module.scss +192 -192
- package/src/components/treeview/treeview.ts +484 -484
- package/src/components/viewport/viewport.module.scss +31 -31
- package/src/components/viewport/viewport.ts +41 -41
- package/src/core/component.ts +1299 -1299
- package/src/core/core_application.ts +361 -361
- package/src/core/core_colors.ts +512 -512
- package/src/core/core_data.ts +1297 -1297
- package/src/core/core_dom.ts +481 -481
- package/src/core/core_dragdrop.ts +225 -225
- package/src/core/core_element.ts +221 -221
- package/src/core/core_events.ts +214 -214
- package/src/core/core_i18n.ts +395 -395
- package/src/core/core_pdf.ts +454 -454
- package/src/core/core_react.ts +78 -78
- package/src/core/core_router.ts +296 -296
- package/src/core/core_state.ts +62 -62
- package/src/core/core_styles.ts +213 -213
- package/src/core/core_svg.ts +1042 -1042
- package/src/core/core_tools.ts +996 -996
- package/src/types/scss.d.ts +4 -4
- package/src/types/x4react.d.ts +8 -8
- package/src/x4.scss +19 -19
- package/src/x4.ts +36 -36
- package/src/x4tsx.d.ts +26 -26
- package/.vscode/launch.json +0 -14
- package/.vscode/settings.json +0 -2
- package/demo/assets/house-light.svg +0 -1
- package/demo/assets/radio.svg +0 -4
- package/demo/index.html +0 -12
- package/demo/main.scss +0 -23
- package/demo/main.ts +0 -324
- package/demo/package.json +0 -26
- package/demo/scss.d.ts +0 -4
- package/demo/svg.d.ts +0 -1
- package/demo/tsconfig.json +0 -14
- package/src/components/gridview/folder-open.svg +0 -1
- package/src/components/messages/spinner.svg +0 -1
- package/src/x4.d.ts +0 -10
- package/tsconfig.json +0 -11
|
@@ -1,232 +1,232 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ___ ___ __
|
|
3
|
-
* \ \/ / / _
|
|
4
|
-
* \ / /_| |_
|
|
5
|
-
* / \____ _|
|
|
6
|
-
* /__/\__\ |_|
|
|
7
|
-
*
|
|
8
|
-
* @file button.ts
|
|
9
|
-
* @author Etienne Cochard
|
|
10
|
-
*
|
|
11
|
-
* @copyright (c) 2024 R-libre ingenierie
|
|
12
|
-
*
|
|
13
|
-
* Use of this source code is governed by an MIT-style license
|
|
14
|
-
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
import { Component, ComponentEvents, ComponentProps, EvClick } from "../../core/component"
|
|
18
|
-
import { EventCallback } from '../../core/core_events';
|
|
19
|
-
import { class_ns, UnsafeHtml } from '../../core/core_tools';
|
|
20
|
-
|
|
21
|
-
import { Icon } from "../icon/icon"
|
|
22
|
-
|
|
23
|
-
import "./button.module.scss";
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Button events
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
interface ButtonEvents extends ComponentEvents {
|
|
31
|
-
/**
|
|
32
|
-
* Fired when the button is clicked
|
|
33
|
-
* ex: myButton.on( "click", ( e: EvClick ) => { console.log( "click") } );
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
click: EvClick;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Button properties.
|
|
41
|
-
*/
|
|
42
|
-
|
|
43
|
-
export interface ButtonProps extends ComponentProps {
|
|
44
|
-
/** Text or HTML content of the button */
|
|
45
|
-
label?: string | UnsafeHtml;
|
|
46
|
-
|
|
47
|
-
/** Icon identifier to display */
|
|
48
|
-
icon?: string;
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Tab index for keyboard navigation.
|
|
52
|
-
* - `false` to exclude from tab order
|
|
53
|
-
* - `number` to set specific tab index
|
|
54
|
-
*/
|
|
55
|
-
tabindex?: boolean | number;
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Enable auto-repeat behavior when button is held down.
|
|
59
|
-
* - `true` uses default 200ms repeat interval
|
|
60
|
-
* - `number` specifies custom repeat interval in milliseconds
|
|
61
|
-
*
|
|
62
|
-
* First click triggers after 500ms, then repeats at specified interval.
|
|
63
|
-
*/
|
|
64
|
-
autorepeat?: number | boolean;
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Callback function invoked when button is clicked
|
|
68
|
-
* cf. ButtonEvents
|
|
69
|
-
*/
|
|
70
|
-
click?: EventCallback<EvClick>;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Represents a clickable button component.
|
|
75
|
-
*
|
|
76
|
-
* Generates the CSS class **x4button** based on the class name.
|
|
77
|
-
* The button can contain an optional icon and label, supports keyboard activation,
|
|
78
|
-
* and may trigger auto-repeated click events while pointer is held down.
|
|
79
|
-
*
|
|
80
|
-
*/
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
@class_ns( "x4" )
|
|
84
|
-
export class Button extends Component<ButtonProps,ButtonEvents> {
|
|
85
|
-
|
|
86
|
-
#text: Component;
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Create a new Button.
|
|
90
|
-
*
|
|
91
|
-
* @param {ButtonProps} props - Configuration options such as `label`, `icon`, `tabindex`, `autorepeat`, and `click`.
|
|
92
|
-
*
|
|
93
|
-
* @example
|
|
94
|
-
* const btn = new Button({
|
|
95
|
-
* label: "Save",
|
|
96
|
-
* icon: "check",
|
|
97
|
-
* click: () => console.log("clicked"),
|
|
98
|
-
* });
|
|
99
|
-
*/
|
|
100
|
-
|
|
101
|
-
constructor( props: ButtonProps ) {
|
|
102
|
-
super( { ...props, tag: 'button', content: null } );
|
|
103
|
-
|
|
104
|
-
this.mapPropEvents( props, 'click' );
|
|
105
|
-
|
|
106
|
-
if( props.autorepeat ) {
|
|
107
|
-
this.addDOMEvent('pointerdown', (e) => this._on_mouse(e) );
|
|
108
|
-
this.addDOMEvent('pointerup', (e) => this._on_mouse(e) );
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
this.addDOMEvent('click', (e) => this._on_click(e));
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
this.addDOMEvent('keydown', (e) => this._on_keydown(e) );
|
|
115
|
-
|
|
116
|
-
this.setContent( [
|
|
117
|
-
new Icon( { id: "icon", iconId: this.props.icon } ),
|
|
118
|
-
this.#text = new Component( { id: "label" } ),
|
|
119
|
-
] );
|
|
120
|
-
|
|
121
|
-
this.setText( props.label );
|
|
122
|
-
|
|
123
|
-
if( props.tabindex!==false ) {
|
|
124
|
-
this.setAttribute( 'tabindex', props.tabindex );
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* @internal
|
|
130
|
-
*/
|
|
131
|
-
|
|
132
|
-
protected _on_click( ev: MouseEvent ) {
|
|
133
|
-
|
|
134
|
-
//if (this.m_props.menu) {
|
|
135
|
-
// let menu = new Menu({
|
|
136
|
-
// items: isFunction(this.m_props.menu) ? this.m_props.menu() : this.m_props.menu
|
|
137
|
-
// });
|
|
138
|
-
//
|
|
139
|
-
// let rc = this.getBoundingRect();
|
|
140
|
-
// menu.displayAt(rc.left, rc.bottom, 'tl');
|
|
141
|
-
//}
|
|
142
|
-
//else {
|
|
143
|
-
this.fire('click', {} );
|
|
144
|
-
//}
|
|
145
|
-
|
|
146
|
-
ev.preventDefault();
|
|
147
|
-
ev.stopPropagation();
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* @internal
|
|
152
|
-
*/
|
|
153
|
-
|
|
154
|
-
protected _on_mouse( e: PointerEvent ) {
|
|
155
|
-
|
|
156
|
-
let count = 0;
|
|
157
|
-
|
|
158
|
-
if( e.type=='pointerdown' ) {
|
|
159
|
-
this.dom.setPointerCapture( e.pointerId );
|
|
160
|
-
|
|
161
|
-
const rt = this.props.autorepeat===true ? 200 : this.props.autorepeat as number;
|
|
162
|
-
|
|
163
|
-
this.setTimeout( 'repeat', 500, ( ) => {
|
|
164
|
-
this.fire( "click", {} );
|
|
165
|
-
this.setInterval( 'repeat', rt, ( ) => {
|
|
166
|
-
count++;
|
|
167
|
-
this.fire( "click", {repeat:count} );
|
|
168
|
-
})
|
|
169
|
-
} );
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
this.clearTimeout( 'repeat' );
|
|
173
|
-
|
|
174
|
-
if( !count ) {
|
|
175
|
-
this.fire("click", {} );
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Activate the button as if it was clicked by a user.
|
|
182
|
-
*
|
|
183
|
-
* @example
|
|
184
|
-
* button.click();
|
|
185
|
-
*/
|
|
186
|
-
|
|
187
|
-
click( ) {
|
|
188
|
-
(this.dom as HTMLButtonElement).click( );
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* @internal
|
|
193
|
-
*/
|
|
194
|
-
|
|
195
|
-
protected _on_keydown( e: KeyboardEvent ) {
|
|
196
|
-
if( e.key=='Enter' ) {
|
|
197
|
-
this.click( );
|
|
198
|
-
e.preventDefault( );
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Set or change the button label.
|
|
204
|
-
*
|
|
205
|
-
* @param {string | UnsafeHtml} text - Text content or unsafe HTML.
|
|
206
|
-
*
|
|
207
|
-
* @example
|
|
208
|
-
* button.setText("Confirm");
|
|
209
|
-
* button.setText(new UnsafeHtml("<strong>OK</strong>"));
|
|
210
|
-
* button.setText( unsafe`<strong>OK</strong>` );
|
|
211
|
-
*/
|
|
212
|
-
|
|
213
|
-
public setText( text: string | UnsafeHtml ) {
|
|
214
|
-
this.#text.setContent( text );
|
|
215
|
-
this.#text.setClass( "empty", !text );
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* Set or change the icon displayed by the button.
|
|
220
|
-
*
|
|
221
|
-
* @param {string} icon - Icon identifier to associate with the button.
|
|
222
|
-
*
|
|
223
|
-
* @example
|
|
224
|
-
* button.setIcon("arrow-right");
|
|
225
|
-
*/
|
|
226
|
-
|
|
227
|
-
public setIcon( icon: string ) {
|
|
228
|
-
this.query<Icon>( "#icon" ).setIcon( icon );
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
}
|
|
232
|
-
|
|
1
|
+
/**
|
|
2
|
+
* ___ ___ __
|
|
3
|
+
* \ \/ / / _
|
|
4
|
+
* \ / /_| |_
|
|
5
|
+
* / \____ _|
|
|
6
|
+
* /__/\__\ |_|
|
|
7
|
+
*
|
|
8
|
+
* @file button.ts
|
|
9
|
+
* @author Etienne Cochard
|
|
10
|
+
*
|
|
11
|
+
* @copyright (c) 2024 R-libre ingenierie
|
|
12
|
+
*
|
|
13
|
+
* Use of this source code is governed by an MIT-style license
|
|
14
|
+
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
+
**/
|
|
16
|
+
|
|
17
|
+
import { Component, ComponentEvents, ComponentProps, EvClick } from "../../core/component.ts"
|
|
18
|
+
import { EventCallback } from '../../core/core_events.ts';
|
|
19
|
+
import { class_ns, UnsafeHtml } from '../../core/core_tools.ts';
|
|
20
|
+
|
|
21
|
+
import { Icon } from "../icon/icon.ts"
|
|
22
|
+
|
|
23
|
+
import "./button.module.scss";
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Button events
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
interface ButtonEvents extends ComponentEvents {
|
|
31
|
+
/**
|
|
32
|
+
* Fired when the button is clicked
|
|
33
|
+
* ex: myButton.on( "click", ( e: EvClick ) => { console.log( "click") } );
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
click: EvClick;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Button properties.
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
export interface ButtonProps extends ComponentProps {
|
|
44
|
+
/** Text or HTML content of the button */
|
|
45
|
+
label?: string | UnsafeHtml;
|
|
46
|
+
|
|
47
|
+
/** Icon identifier to display */
|
|
48
|
+
icon?: string;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Tab index for keyboard navigation.
|
|
52
|
+
* - `false` to exclude from tab order
|
|
53
|
+
* - `number` to set specific tab index
|
|
54
|
+
*/
|
|
55
|
+
tabindex?: boolean | number;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Enable auto-repeat behavior when button is held down.
|
|
59
|
+
* - `true` uses default 200ms repeat interval
|
|
60
|
+
* - `number` specifies custom repeat interval in milliseconds
|
|
61
|
+
*
|
|
62
|
+
* First click triggers after 500ms, then repeats at specified interval.
|
|
63
|
+
*/
|
|
64
|
+
autorepeat?: number | boolean;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Callback function invoked when button is clicked
|
|
68
|
+
* cf. ButtonEvents
|
|
69
|
+
*/
|
|
70
|
+
click?: EventCallback<EvClick>;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Represents a clickable button component.
|
|
75
|
+
*
|
|
76
|
+
* Generates the CSS class **x4button** based on the class name.
|
|
77
|
+
* The button can contain an optional icon and label, supports keyboard activation,
|
|
78
|
+
* and may trigger auto-repeated click events while pointer is held down.
|
|
79
|
+
*
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
@class_ns( "x4" )
|
|
84
|
+
export class Button extends Component<ButtonProps,ButtonEvents> {
|
|
85
|
+
|
|
86
|
+
#text: Component;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Create a new Button.
|
|
90
|
+
*
|
|
91
|
+
* @param {ButtonProps} props - Configuration options such as `label`, `icon`, `tabindex`, `autorepeat`, and `click`.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* const btn = new Button({
|
|
95
|
+
* label: "Save",
|
|
96
|
+
* icon: "check",
|
|
97
|
+
* click: () => console.log("clicked"),
|
|
98
|
+
* });
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
constructor( props: ButtonProps ) {
|
|
102
|
+
super( { ...props, tag: 'button', content: null } );
|
|
103
|
+
|
|
104
|
+
this.mapPropEvents( props, 'click' );
|
|
105
|
+
|
|
106
|
+
if( props.autorepeat ) {
|
|
107
|
+
this.addDOMEvent('pointerdown', (e) => this._on_mouse(e) );
|
|
108
|
+
this.addDOMEvent('pointerup', (e) => this._on_mouse(e) );
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
this.addDOMEvent('click', (e) => this._on_click(e));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
this.addDOMEvent('keydown', (e) => this._on_keydown(e) );
|
|
115
|
+
|
|
116
|
+
this.setContent( [
|
|
117
|
+
new Icon( { id: "icon", iconId: this.props.icon } ),
|
|
118
|
+
this.#text = new Component( { id: "label" } ),
|
|
119
|
+
] );
|
|
120
|
+
|
|
121
|
+
this.setText( props.label );
|
|
122
|
+
|
|
123
|
+
if( props.tabindex!==false ) {
|
|
124
|
+
this.setAttribute( 'tabindex', props.tabindex );
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* @internal
|
|
130
|
+
*/
|
|
131
|
+
|
|
132
|
+
protected _on_click( ev: MouseEvent ) {
|
|
133
|
+
|
|
134
|
+
//if (this.m_props.menu) {
|
|
135
|
+
// let menu = new Menu({
|
|
136
|
+
// items: isFunction(this.m_props.menu) ? this.m_props.menu() : this.m_props.menu
|
|
137
|
+
// });
|
|
138
|
+
//
|
|
139
|
+
// let rc = this.getBoundingRect();
|
|
140
|
+
// menu.displayAt(rc.left, rc.bottom, 'tl');
|
|
141
|
+
//}
|
|
142
|
+
//else {
|
|
143
|
+
this.fire('click', {} );
|
|
144
|
+
//}
|
|
145
|
+
|
|
146
|
+
ev.preventDefault();
|
|
147
|
+
ev.stopPropagation();
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* @internal
|
|
152
|
+
*/
|
|
153
|
+
|
|
154
|
+
protected _on_mouse( e: PointerEvent ) {
|
|
155
|
+
|
|
156
|
+
let count = 0;
|
|
157
|
+
|
|
158
|
+
if( e.type=='pointerdown' ) {
|
|
159
|
+
this.dom.setPointerCapture( e.pointerId );
|
|
160
|
+
|
|
161
|
+
const rt = this.props.autorepeat===true ? 200 : this.props.autorepeat as number;
|
|
162
|
+
|
|
163
|
+
this.setTimeout( 'repeat', 500, ( ) => {
|
|
164
|
+
this.fire( "click", {} );
|
|
165
|
+
this.setInterval( 'repeat', rt, ( ) => {
|
|
166
|
+
count++;
|
|
167
|
+
this.fire( "click", {repeat:count} );
|
|
168
|
+
})
|
|
169
|
+
} );
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
this.clearTimeout( 'repeat' );
|
|
173
|
+
|
|
174
|
+
if( !count ) {
|
|
175
|
+
this.fire("click", {} );
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Activate the button as if it was clicked by a user.
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* button.click();
|
|
185
|
+
*/
|
|
186
|
+
|
|
187
|
+
click( ) {
|
|
188
|
+
(this.dom as HTMLButtonElement).click( );
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* @internal
|
|
193
|
+
*/
|
|
194
|
+
|
|
195
|
+
protected _on_keydown( e: KeyboardEvent ) {
|
|
196
|
+
if( e.key=='Enter' ) {
|
|
197
|
+
this.click( );
|
|
198
|
+
e.preventDefault( );
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Set or change the button label.
|
|
204
|
+
*
|
|
205
|
+
* @param {string | UnsafeHtml} text - Text content or unsafe HTML.
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* button.setText("Confirm");
|
|
209
|
+
* button.setText(new UnsafeHtml("<strong>OK</strong>"));
|
|
210
|
+
* button.setText( unsafe`<strong>OK</strong>` );
|
|
211
|
+
*/
|
|
212
|
+
|
|
213
|
+
public setText( text: string | UnsafeHtml ) {
|
|
214
|
+
this.#text.setContent( text );
|
|
215
|
+
this.#text.setClass( "empty", !text );
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Set or change the icon displayed by the button.
|
|
220
|
+
*
|
|
221
|
+
* @param {string} icon - Icon identifier to associate with the button.
|
|
222
|
+
*
|
|
223
|
+
* @example
|
|
224
|
+
* button.setIcon("arrow-right");
|
|
225
|
+
*/
|
|
226
|
+
|
|
227
|
+
public setIcon( icon: string ) {
|
|
228
|
+
this.query<Icon>( "#icon" ).setIcon( icon );
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
}
|
|
232
|
+
|