x4js 2.0.11 → 2.0.13
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 +15 -15
- package/lib/README.txt +15 -15
- package/lib/cjs/x4.css +1 -1
- package/lib/cjs/x4.js +1 -1
- package/lib/esm/x4.css +1 -1
- package/lib/esm/x4.mjs +1 -1
- package/lib/src/components/base.scss +25 -26
- package/lib/src/components/boxes/boxes.module.scss +37 -37
- package/lib/src/components/boxes/boxes.ts +129 -125
- package/lib/src/components/breadcrumb/breadcrumb.scss +28 -0
- package/lib/src/components/breadcrumb/breadcrumb.ts +84 -0
- package/lib/src/components/breadcrumb/chevron-right.svg +1 -0
- package/lib/src/components/btngroup/btngroup.module.scss +28 -28
- package/lib/src/components/btngroup/btngroup.ts +119 -101
- package/lib/src/components/button/button.module.scss +154 -153
- package/lib/src/components/button/button.ts +117 -117
- package/lib/src/components/calendar/calendar.module.scss +162 -162
- package/lib/src/components/calendar/calendar.ts +326 -325
- package/lib/src/components/checkbox/check.svg +3 -3
- package/lib/src/components/checkbox/checkbox.module.scss +141 -141
- package/lib/src/components/checkbox/checkbox.ts +125 -124
- package/lib/src/components/colorinput/colorinput.module.scss +64 -64
- package/lib/src/components/colorinput/colorinput.ts +90 -87
- package/lib/src/components/colorpicker/colorpicker.module.scss +132 -132
- package/lib/src/components/colorpicker/colorpicker.ts +481 -476
- package/lib/src/components/combobox/combobox.module.scss +123 -120
- package/lib/src/components/combobox/combobox.ts +192 -190
- package/lib/src/components/combobox/updown.svg +3 -3
- package/lib/src/components/components.ts +34 -0
- package/lib/src/components/dialog/dialog.module.scss +71 -71
- package/lib/src/components/dialog/dialog.ts +94 -92
- package/lib/src/components/form/form.module.scss +34 -34
- package/lib/src/components/form/form.ts +41 -36
- package/lib/src/components/grid/datastore.ts +1298 -0
- package/lib/src/components/grid/gridview.ts +1108 -0
- package/lib/src/components/grid/memdb.ts +325 -0
- package/lib/src/components/header/header.module.scss +39 -39
- package/lib/src/components/header/header.ts +129 -123
- package/lib/src/components/icon/icon.module.scss +29 -29
- package/lib/src/components/icon/icon.ts +136 -134
- package/lib/src/components/image/image.module.scss +20 -20
- package/lib/src/components/image/image.ts +68 -66
- package/lib/src/components/input/input.module.scss +69 -69
- package/lib/src/components/input/input.ts +275 -274
- package/lib/src/components/label/label.module.scss +58 -52
- package/lib/src/components/label/label.ts +64 -55
- package/lib/src/components/link/link.ts +78 -0
- package/lib/src/components/listbox/listbox.module.scss +103 -103
- package/lib/src/components/listbox/listbox.ts +431 -427
- package/lib/src/components/menu/menu.module.scss +107 -107
- package/lib/src/components/menu/menu.ts +171 -168
- package/lib/src/components/messages/messages.module.scss +48 -47
- package/lib/src/components/messages/messages.ts +68 -63
- package/lib/src/components/normalize.scss +386 -386
- package/lib/src/components/notification/notification.module.scss +81 -81
- package/lib/src/components/notification/notification.ts +109 -108
- package/lib/src/components/panel/panel.module.scss +47 -47
- package/lib/src/components/panel/panel.ts +57 -56
- package/lib/src/components/popup/popup.module.scss +43 -43
- package/lib/src/components/popup/popup.ts +396 -395
- package/lib/src/components/progress/progress.module.scss +56 -56
- package/lib/src/components/progress/progress.ts +43 -42
- package/lib/src/components/rating/rating.module.scss +22 -22
- package/lib/src/components/rating/rating.ts +131 -125
- package/lib/src/components/shared.scss +90 -76
- package/lib/src/components/sizers/sizer.module.scss +89 -89
- package/lib/src/components/sizers/sizer.ts +123 -119
- package/lib/src/components/slider/slider.module.scss +70 -70
- package/lib/src/components/slider/slider.ts +147 -142
- package/lib/src/components/switch/switch.module.scss +126 -126
- package/lib/src/components/switch/switch.ts +61 -55
- package/lib/src/components/tabs/tabs.module.scss +46 -46
- package/lib/src/components/tabs/tabs.ts +168 -157
- package/lib/src/components/textarea/textarea.module.scss +59 -59
- package/lib/src/components/textarea/textarea.ts +60 -54
- package/lib/src/components/textedit/textedit.module.scss +113 -113
- package/lib/src/components/textedit/textedit.ts +83 -82
- package/lib/src/components/themes.scss +81 -77
- package/lib/src/components/tooltips/tooltips.scss +50 -50
- package/lib/src/components/tooltips/tooltips.ts +103 -102
- package/lib/src/components/treeview/treeview.module.scss +115 -115
- package/lib/src/components/treeview/treeview.ts +410 -403
- package/lib/src/components/viewport/viewport.module.scss +24 -24
- package/lib/src/components/viewport/viewport.ts +41 -38
- package/lib/src/core/component.ts +1002 -979
- package/lib/src/core/core_application.ts +44 -0
- package/lib/src/core/core_colors.ts +249 -249
- package/lib/src/core/core_dom.ts +471 -471
- package/lib/src/core/core_dragdrop.ts +200 -200
- package/lib/src/core/core_element.ts +97 -97
- package/lib/src/core/core_events.ts +149 -149
- package/lib/src/core/core_i18n.ts +377 -377
- package/lib/src/core/core_router.ts +221 -221
- package/lib/src/core/core_styles.ts +214 -214
- package/lib/src/core/core_svg.ts +550 -550
- package/lib/src/core/core_tools.ts +688 -673
- package/lib/src/demo/assets/radio.svg +3 -3
- package/lib/src/demo/index.html +11 -11
- package/lib/src/demo/main.scss +21 -21
- package/lib/src/demo/main.tsx +323 -323
- package/lib/src/types/scss.d.ts +4 -4
- package/lib/src/types/x4react.d.ts +8 -8
- package/lib/src/x4.scss +18 -18
- package/lib/src/x4.ts +31 -60
- package/lib/styles/x4.css +1 -1
- package/lib/types/x4js.d.ts +100 -49
- package/package.json +2 -3
- package/src/x4.ts +31 -60
- package/lib/output.d.ts +0 -1472
|
@@ -1,154 +1,155 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ___ ___ __
|
|
3
|
-
* \ \/ / / _
|
|
4
|
-
* \ / /_| |_
|
|
5
|
-
* / \____ _|
|
|
6
|
-
* /__/\__\ |_|
|
|
7
|
-
*
|
|
8
|
-
* @file button.module.scss
|
|
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
|
-
@use "../shared.scss";
|
|
18
|
-
|
|
19
|
-
:root {
|
|
20
|
-
--button-background: var( --accent-background );
|
|
21
|
-
--button-color: var( --accent-color );
|
|
22
|
-
|
|
23
|
-
--button-background-hover: var( --accent-background-hover );
|
|
24
|
-
--button-color-hover: var( --accent-color-hover );
|
|
25
|
-
|
|
26
|
-
--button-background-active: var( --accent-background-active );
|
|
27
|
-
--button-color-active: var( --accent-color-active );
|
|
28
|
-
|
|
29
|
-
--button-background-focus: var( --accent-background-focus );
|
|
30
|
-
--button-color-focus: var( --accent-color-focus );
|
|
31
|
-
|
|
32
|
-
--button-background-disabled: var( --disabled-background );
|
|
33
|
-
--button-color-disabled: var( --disabled-color );
|
|
34
|
-
|
|
35
|
-
--button-icon-color: rgb(255 255 255 / 64%);
|
|
36
|
-
|
|
37
|
-
// outline
|
|
38
|
-
--ol-button-background: var( --background-primary );
|
|
39
|
-
--ol-button-background-active: #eee;
|
|
40
|
-
--ol-button-color: var( --text-primary );
|
|
41
|
-
--ol-button-
|
|
42
|
-
--ol-button-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
--ol-button-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
font-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
color: var( --button-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
color: var( --button-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
color: var( --button-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
color: var( --button-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
color: var( --button-
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
color: var( --ol-button-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
color: var( --button-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
color: var( --alert-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
1
|
+
/**
|
|
2
|
+
* ___ ___ __
|
|
3
|
+
* \ \/ / / _
|
|
4
|
+
* \ / /_| |_
|
|
5
|
+
* / \____ _|
|
|
6
|
+
* /__/\__\ |_|
|
|
7
|
+
*
|
|
8
|
+
* @file button.module.scss
|
|
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
|
+
@use "../shared.scss";
|
|
18
|
+
|
|
19
|
+
:root {
|
|
20
|
+
--button-background: var( --accent-background );
|
|
21
|
+
--button-color: var( --accent-color );
|
|
22
|
+
|
|
23
|
+
--button-background-hover: var( --accent-background-hover );
|
|
24
|
+
--button-color-hover: var( --accent-color-hover );
|
|
25
|
+
|
|
26
|
+
--button-background-active: var( --accent-background-active );
|
|
27
|
+
--button-color-active: var( --accent-color-active );
|
|
28
|
+
|
|
29
|
+
--button-background-focus: var( --accent-background-focus );
|
|
30
|
+
--button-color-focus: var( --accent-color-focus );
|
|
31
|
+
|
|
32
|
+
--button-background-disabled: var( --disabled-background );
|
|
33
|
+
--button-color-disabled: var( --disabled-color );
|
|
34
|
+
|
|
35
|
+
--button-icon-color: rgb(255 255 255 / 64%);
|
|
36
|
+
|
|
37
|
+
// outline
|
|
38
|
+
--ol-button-background: var( --background-primary );
|
|
39
|
+
--ol-button-background-active: #eee;
|
|
40
|
+
--ol-button-color-active: var( --text-primary );
|
|
41
|
+
--ol-button-color: var( --text-primary );
|
|
42
|
+
--ol-button-border: var( --border );
|
|
43
|
+
--ol-button-icon-color: var( --text-primary );
|
|
44
|
+
|
|
45
|
+
--ol-button-border-focus: var( --accent-background-focus );
|
|
46
|
+
--ol-button-color-focus: var( --accent-background );
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.x4button {
|
|
50
|
+
@extend .hbox;
|
|
51
|
+
|
|
52
|
+
margin: 5px;
|
|
53
|
+
gap: 4px;
|
|
54
|
+
|
|
55
|
+
font-size: inherit;
|
|
56
|
+
font-family: inherit;
|
|
57
|
+
|
|
58
|
+
padding: 8px;
|
|
59
|
+
margin: 2px;
|
|
60
|
+
transition: background-color 0.3s, color 0.3s;
|
|
61
|
+
|
|
62
|
+
border: none;
|
|
63
|
+
outline: none;
|
|
64
|
+
cursor: pointer;
|
|
65
|
+
|
|
66
|
+
background-color: var( --button-background );
|
|
67
|
+
color: var( --button-color );
|
|
68
|
+
|
|
69
|
+
gap: 0.4em;
|
|
70
|
+
|
|
71
|
+
&> #icon {
|
|
72
|
+
transition: color 0.3s;
|
|
73
|
+
width: 1em;
|
|
74
|
+
height: 1em;
|
|
75
|
+
//color: var( --button-icon-color );
|
|
76
|
+
|
|
77
|
+
&.empty {
|
|
78
|
+
display: none;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
&> #label {
|
|
83
|
+
@extend .flex;
|
|
84
|
+
|
|
85
|
+
padding: 0;
|
|
86
|
+
color: inherit;
|
|
87
|
+
|
|
88
|
+
&:empty {
|
|
89
|
+
display: none;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
&:focus {
|
|
94
|
+
background-color: var( --button-background-focus );
|
|
95
|
+
color: var( --button-color-focus );
|
|
96
|
+
#icon {
|
|
97
|
+
color: var( --button-color-focus );
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
#label {
|
|
101
|
+
text-decoration: underline;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
&:hover {
|
|
106
|
+
background-color: var( --button-background-hover );
|
|
107
|
+
color: var( --button-color-hover );
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
&:active{
|
|
111
|
+
background-color: var( --button-background-active );
|
|
112
|
+
color: var( --button-color-active );
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
&[disabled] {
|
|
116
|
+
cursor: not-allowed;
|
|
117
|
+
background-color: var( --button-background-disabled );
|
|
118
|
+
color: var( --button-color-disabled );
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.x4button.outline {
|
|
123
|
+
background-color: var( --ol-button-background );
|
|
124
|
+
border: 1px solid var( --ol-button-border );
|
|
125
|
+
color: var( --ol-button-color );
|
|
126
|
+
|
|
127
|
+
#icon {
|
|
128
|
+
color: var( --ol-button-icon-color );
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
&:focus{
|
|
132
|
+
border-color: var( --ol-button-border-focus );
|
|
133
|
+
color: var( --ol-button-color-focus );
|
|
134
|
+
#icon {
|
|
135
|
+
color: var( --ol-button-color-focus );
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
&:active{
|
|
140
|
+
background-color: var( --ol-button-background-active );
|
|
141
|
+
color: var( --ol-button-color-active );
|
|
142
|
+
#icon {
|
|
143
|
+
color: var( --button-icon-color );
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.x4button.danger {
|
|
149
|
+
background-color: var( --alert-background );
|
|
150
|
+
color: var( --alert-color );
|
|
151
|
+
|
|
152
|
+
&:active {
|
|
153
|
+
background-color: var( --alert-background-active );
|
|
154
|
+
}
|
|
154
155
|
}
|
|
@@ -1,117 +1,117 @@
|
|
|
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.js';
|
|
19
|
-
import { UnsafeHtml } from '../../core/core_tools.js';
|
|
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
|
-
click: EvClick;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Button properties.
|
|
36
|
-
*/
|
|
37
|
-
|
|
38
|
-
export interface ButtonProps extends ComponentProps {
|
|
39
|
-
label?: string;
|
|
40
|
-
icon?: string;
|
|
41
|
-
click?: EventCallback<EvClick>;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Button component.
|
|
46
|
-
*/
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Creates an instance of Button.
|
|
52
|
-
*
|
|
53
|
-
* @param props - The properties for the button component, including label and icon.
|
|
54
|
-
* @example
|
|
55
|
-
* const button = new Button({ label: 'Submit', icon: 'check-icon' });
|
|
56
|
-
*/
|
|
57
|
-
|
|
58
|
-
constructor( props: ButtonProps ) {
|
|
59
|
-
super( { ...props, tag: 'button', content: null } );
|
|
60
|
-
|
|
61
|
-
this.mapPropEvents( props, 'click' );
|
|
62
|
-
this.addDOMEvent('click', (e) => this._on_click(e));
|
|
63
|
-
|
|
64
|
-
this.setContent( [
|
|
65
|
-
new Icon( { id: "icon", iconId: this.props.icon } ),
|
|
66
|
-
new Component( { id: "label", content: this.props.label } ),
|
|
67
|
-
] );
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* called by the system on click event
|
|
72
|
-
*/
|
|
73
|
-
|
|
74
|
-
protected _on_click( ev: MouseEvent ) {
|
|
75
|
-
|
|
76
|
-
//if (this.m_props.menu) {
|
|
77
|
-
// let menu = new Menu({
|
|
78
|
-
// items: isFunction(this.m_props.menu) ? this.m_props.menu() : this.m_props.menu
|
|
79
|
-
// });
|
|
80
|
-
//
|
|
81
|
-
// let rc = this.getBoundingRect();
|
|
82
|
-
// menu.displayAt(rc.left, rc.bottom, 'tl');
|
|
83
|
-
//}
|
|
84
|
-
//else {
|
|
85
|
-
this.fire('click', {} );
|
|
86
|
-
//}
|
|
87
|
-
|
|
88
|
-
ev.preventDefault();
|
|
89
|
-
ev.stopPropagation();
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Sets the text content of the button's label.
|
|
94
|
-
*
|
|
95
|
-
* @param text - The new text or HTML content for the label.
|
|
96
|
-
* @example
|
|
97
|
-
* button.setText('Click Me');
|
|
98
|
-
* button.setText(new UnsafeHtml('<b>Bold Text</b>'));
|
|
99
|
-
*/
|
|
100
|
-
|
|
101
|
-
public setText( text: string | UnsafeHtml ) {
|
|
102
|
-
this.query( "#label" ).setContent( text );
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Sets the icon of the button.
|
|
107
|
-
*
|
|
108
|
-
* @param icon - The new icon ID to set on the button.
|
|
109
|
-
* @example
|
|
110
|
-
* button.setIcon('new-icon-id');
|
|
111
|
-
*/
|
|
112
|
-
|
|
113
|
-
public setIcon( icon: string ) {
|
|
114
|
-
this.query<Icon>( "#icon" ).setIcon( icon );
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
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.js';
|
|
19
|
+
import { class_ns, UnsafeHtml } from '../../core/core_tools.js';
|
|
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
|
+
click: EvClick;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Button properties.
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
export interface ButtonProps extends ComponentProps {
|
|
39
|
+
label?: string;
|
|
40
|
+
icon?: string;
|
|
41
|
+
click?: EventCallback<EvClick>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Button component.
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
@class_ns( "x4" )
|
|
49
|
+
export class Button extends Component<ButtonProps,ButtonEvents> {
|
|
50
|
+
/**
|
|
51
|
+
* Creates an instance of Button.
|
|
52
|
+
*
|
|
53
|
+
* @param props - The properties for the button component, including label and icon.
|
|
54
|
+
* @example
|
|
55
|
+
* const button = new Button({ label: 'Submit', icon: 'check-icon' });
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
constructor( props: ButtonProps ) {
|
|
59
|
+
super( { ...props, tag: 'button', content: null } );
|
|
60
|
+
|
|
61
|
+
this.mapPropEvents( props, 'click' );
|
|
62
|
+
this.addDOMEvent('click', (e) => this._on_click(e));
|
|
63
|
+
|
|
64
|
+
this.setContent( [
|
|
65
|
+
new Icon( { id: "icon", iconId: this.props.icon } ),
|
|
66
|
+
new Component( { id: "label", content: this.props.label } ),
|
|
67
|
+
] );
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* called by the system on click event
|
|
72
|
+
*/
|
|
73
|
+
|
|
74
|
+
protected _on_click( ev: MouseEvent ) {
|
|
75
|
+
|
|
76
|
+
//if (this.m_props.menu) {
|
|
77
|
+
// let menu = new Menu({
|
|
78
|
+
// items: isFunction(this.m_props.menu) ? this.m_props.menu() : this.m_props.menu
|
|
79
|
+
// });
|
|
80
|
+
//
|
|
81
|
+
// let rc = this.getBoundingRect();
|
|
82
|
+
// menu.displayAt(rc.left, rc.bottom, 'tl');
|
|
83
|
+
//}
|
|
84
|
+
//else {
|
|
85
|
+
this.fire('click', {} );
|
|
86
|
+
//}
|
|
87
|
+
|
|
88
|
+
ev.preventDefault();
|
|
89
|
+
ev.stopPropagation();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Sets the text content of the button's label.
|
|
94
|
+
*
|
|
95
|
+
* @param text - The new text or HTML content for the label.
|
|
96
|
+
* @example
|
|
97
|
+
* button.setText('Click Me');
|
|
98
|
+
* button.setText(new UnsafeHtml('<b>Bold Text</b>'));
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
public setText( text: string | UnsafeHtml ) {
|
|
102
|
+
this.query( "#label" ).setContent( text );
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Sets the icon of the button.
|
|
107
|
+
*
|
|
108
|
+
* @param icon - The new icon ID to set on the button.
|
|
109
|
+
* @example
|
|
110
|
+
* button.setIcon('new-icon-id');
|
|
111
|
+
*/
|
|
112
|
+
|
|
113
|
+
public setIcon( icon: string ) {
|
|
114
|
+
this.query<Icon>( "#icon" ).setIcon( icon );
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|