x4js 2.0.13 → 2.0.14

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.
Files changed (258) hide show
  1. package/.vscode/launch.json +14 -0
  2. package/README.md +5 -0
  3. package/{lib/src/demo → demo}/main.scss +3 -1
  4. package/{lib/src/demo/main.tsx → demo/main.ts} +37 -36
  5. package/demo/package.json +26 -0
  6. package/demo/scss.d.ts +4 -0
  7. package/demo/svg.d.ts +1 -0
  8. package/demo/tsconfig.json +14 -0
  9. package/lib/README.txt +5 -0
  10. package/lib/cjs/x4.css +1 -1
  11. package/lib/cjs/x4.js +2 -1
  12. package/lib/esm/x4.css +1 -1
  13. package/lib/esm/x4.mjs +2 -1
  14. package/lib/src/components/boxes/boxes.module.scss +17 -0
  15. package/lib/src/components/boxes/boxes.ts +162 -13
  16. package/lib/src/components/breadcrumb/breadcrumb.scss +56 -28
  17. package/lib/src/components/breadcrumb/breadcrumb.ts +93 -84
  18. package/lib/src/components/btngroup/btngroup.module.scss +12 -0
  19. package/lib/src/components/btngroup/btngroup.ts +41 -8
  20. package/lib/src/components/button/button.module.scss +23 -5
  21. package/lib/src/components/button/button.ts +72 -4
  22. package/lib/src/components/canvas/canvas.module.scss +25 -0
  23. package/lib/src/components/canvas/canvas.ts +189 -0
  24. package/lib/src/components/canvas/canvas_ex.ts +269 -0
  25. package/lib/src/components/checkbox/checkbox.ts +18 -4
  26. package/lib/src/components/combobox/combobox.module.scss +24 -15
  27. package/lib/src/components/combobox/combobox.ts +107 -24
  28. package/lib/src/components/components.ts +7 -0
  29. package/lib/src/components/dialog/dialog.module.scss +37 -3
  30. package/lib/src/components/dialog/dialog.ts +149 -31
  31. package/lib/src/components/filedrop/cloud-arrow-up.svg +1 -0
  32. package/lib/src/components/filedrop/filedrop.module.scss +70 -0
  33. package/lib/src/components/filedrop/filedrop.ts +131 -0
  34. package/lib/src/components/form/form.module.scss +4 -0
  35. package/lib/src/components/form/form.ts +137 -6
  36. package/lib/src/components/gridview/arrow-down-light.svg +1 -0
  37. package/lib/src/components/gridview/arrow-up-light.svg +1 -0
  38. package/lib/src/components/gridview/gridview.module.scss +324 -0
  39. package/lib/src/components/gridview/gridview.ts +1175 -0
  40. package/lib/src/components/icon/icon.module.scss +1 -1
  41. package/lib/src/components/icon/icon.ts +4 -1
  42. package/lib/src/components/image/image.module.scss +8 -1
  43. package/lib/src/components/image/image.ts +105 -6
  44. package/lib/src/components/input/input.module.scss +8 -3
  45. package/lib/src/components/input/input.ts +137 -14
  46. package/lib/src/components/keyboard/arrow-up.svg +1 -0
  47. package/lib/src/components/keyboard/delete-left.svg +1 -0
  48. package/lib/src/components/keyboard/eye-slash.svg +1 -0
  49. package/lib/src/components/keyboard/keyboard.module.scss +134 -0
  50. package/lib/src/components/keyboard/keyboard.ts +525 -0
  51. package/lib/src/components/label/label.module.scss +22 -4
  52. package/lib/src/components/label/label.ts +33 -0
  53. package/lib/src/components/link/link.ts +81 -78
  54. package/lib/src/components/listbox/listbox.module.scss +61 -3
  55. package/lib/src/components/listbox/listbox.ts +164 -56
  56. package/lib/src/components/menu/menu.module.scss +10 -1
  57. package/lib/src/components/menu/menu.ts +4 -1
  58. package/lib/src/components/messages/messages.module.scss +44 -0
  59. package/lib/src/components/messages/messages.ts +164 -18
  60. package/lib/src/components/messages/pen-field.svg +1 -0
  61. package/lib/src/components/normalize.scss +5 -0
  62. package/lib/src/components/notification/notification.module.scss +4 -2
  63. package/lib/src/components/notification/notification.ts +2 -4
  64. package/lib/src/components/panel/panel.module.scss +12 -0
  65. package/lib/src/components/popup/popup.module.scss +4 -2
  66. package/lib/src/components/popup/popup.ts +136 -92
  67. package/lib/src/components/propgrid/folder-closed.svg +1 -0
  68. package/lib/src/components/propgrid/folder-open.svg +1 -0
  69. package/lib/src/components/propgrid/progrid.module.scss +108 -0
  70. package/lib/src/components/propgrid/propgrid.ts +271 -0
  71. package/lib/src/components/propgrid/updown.svg +4 -0
  72. package/lib/src/components/radio/radio.module.scss +147 -0
  73. package/lib/src/components/radio/radio.svg +4 -0
  74. package/lib/src/components/radio/radio.ts +142 -0
  75. package/lib/src/components/select/select.module.scss +9 -0
  76. package/lib/src/components/select/select.ts +134 -0
  77. package/lib/src/components/shared.scss +47 -0
  78. package/lib/src/components/sizers/sizer.ts +9 -2
  79. package/lib/src/components/slider/slider.module.scss +77 -30
  80. package/lib/src/components/slider/slider.ts +72 -22
  81. package/lib/src/components/tabs/tabs.module.scss +1 -2
  82. package/lib/src/components/tabs/tabs.ts +43 -12
  83. package/lib/src/components/textarea/textarea.module.scss +6 -2
  84. package/lib/src/components/textarea/textarea.ts +73 -8
  85. package/lib/src/components/textedit/textedit.module.scss +3 -1
  86. package/lib/src/components/textedit/textedit.ts +31 -4
  87. package/lib/src/components/themes.scss +7 -0
  88. package/lib/src/components/tickline/tickline.module.scss +26 -0
  89. package/lib/src/components/tickline/tickline.ts +82 -0
  90. package/lib/src/components/tooltips/comments-question.svg +1 -0
  91. package/lib/src/components/tooltips/tooltips.scss +30 -9
  92. package/lib/src/components/tooltips/tooltips.ts +10 -5
  93. package/lib/src/components/treeview/treeview.module.scss +129 -60
  94. package/lib/src/components/treeview/treeview.ts +47 -12
  95. package/lib/src/components/viewport/viewport.module.scss +7 -0
  96. package/lib/src/core/component.ts +102 -32
  97. package/lib/src/core/core_application.ts +222 -2
  98. package/lib/src/core/core_colors.ts +2 -2
  99. package/lib/src/{components/grid/datastore.ts → core/core_data.ts} +261 -250
  100. package/lib/src/core/core_dragdrop.ts +3 -3
  101. package/lib/src/core/core_element.ts +13 -1
  102. package/lib/src/core/core_events.ts +28 -0
  103. package/lib/src/core/core_i18n.ts +18 -2
  104. package/lib/src/core/core_react.ts +79 -0
  105. package/lib/src/core/core_router.ts +23 -7
  106. package/lib/src/core/core_styles.ts +5 -5
  107. package/lib/src/core/core_svg.ts +173 -12
  108. package/lib/src/core/core_tools.ts +305 -87
  109. package/lib/src/x4tsx.d.ts +25 -0
  110. package/lib/styles/x4.css +1 -1
  111. package/lib/types/x4js.d.ts +767 -92
  112. package/package.json +4 -4
  113. package/scripts/build.mjs +378 -0
  114. package/scripts/prepack.mjs +346 -0
  115. package/src/components/base.scss +25 -0
  116. package/src/components/boxes/boxes.module.scss +54 -0
  117. package/src/components/boxes/boxes.ts +278 -0
  118. package/src/components/breadcrumb/breadcrumb.scss +56 -0
  119. package/src/components/breadcrumb/breadcrumb.ts +93 -0
  120. package/src/components/breadcrumb/chevron-right.svg +1 -0
  121. package/src/components/btngroup/btngroup.module.scss +41 -0
  122. package/src/components/btngroup/btngroup.ts +153 -0
  123. package/src/components/button/button.module.scss +173 -0
  124. package/src/components/button/button.ts +185 -0
  125. package/src/components/calendar/calendar-check-sharp-light.svg +1 -0
  126. package/src/components/calendar/calendar.module.scss +163 -0
  127. package/src/components/calendar/calendar.ts +327 -0
  128. package/src/components/calendar/chevron-left-sharp-light.svg +1 -0
  129. package/src/components/calendar/chevron-right-sharp-light.svg +1 -0
  130. package/src/components/canvas/canvas.module.scss +25 -0
  131. package/src/components/canvas/canvas.ts +189 -0
  132. package/src/components/canvas/canvas_ex.ts +269 -0
  133. package/src/components/checkbox/check.svg +4 -0
  134. package/src/components/checkbox/checkbox.module.scss +142 -0
  135. package/src/components/checkbox/checkbox.ts +140 -0
  136. package/src/components/colorinput/colorinput.module.scss +65 -0
  137. package/src/components/colorinput/colorinput.ts +91 -0
  138. package/src/components/colorinput/crosshairs-simple-sharp-light.svg +1 -0
  139. package/src/components/colorpicker/colorpicker.module.scss +133 -0
  140. package/src/components/colorpicker/colorpicker.ts +482 -0
  141. package/src/components/combobox/combobox.module.scss +133 -0
  142. package/src/components/combobox/combobox.ts +275 -0
  143. package/src/components/combobox/updown.svg +4 -0
  144. package/src/components/components.ts +41 -0
  145. package/src/components/dialog/dialog.module.scss +105 -0
  146. package/src/components/dialog/dialog.ts +212 -0
  147. package/src/components/dialog/xmark-sharp-light.svg +1 -0
  148. package/src/components/filedrop/cloud-arrow-up.svg +1 -0
  149. package/src/components/filedrop/filedrop.module.scss +70 -0
  150. package/src/components/filedrop/filedrop.ts +131 -0
  151. package/src/components/form/form.module.scss +38 -0
  152. package/src/components/form/form.ts +172 -0
  153. package/src/components/gridview/arrow-down-light.svg +1 -0
  154. package/src/components/gridview/arrow-up-light.svg +1 -0
  155. package/src/components/gridview/gridview.module.scss +324 -0
  156. package/src/components/gridview/gridview.ts +1175 -0
  157. package/src/components/header/header.module.scss +40 -0
  158. package/src/components/header/header.ts +130 -0
  159. package/src/components/icon/icon.module.scss +30 -0
  160. package/src/components/icon/icon.ts +139 -0
  161. package/src/components/image/image.module.scss +28 -0
  162. package/src/components/image/image.ts +168 -0
  163. package/src/components/input/input.module.scss +74 -0
  164. package/src/components/input/input.ts +398 -0
  165. package/src/components/keyboard/arrow-up.svg +1 -0
  166. package/src/components/keyboard/delete-left.svg +1 -0
  167. package/src/components/keyboard/eye-slash.svg +1 -0
  168. package/src/components/keyboard/keyboard.module.scss +134 -0
  169. package/src/components/keyboard/keyboard.ts +525 -0
  170. package/src/components/label/label.module.scss +76 -0
  171. package/src/components/label/label.ts +97 -0
  172. package/src/components/link/link.ts +81 -0
  173. package/src/components/listbox/listbox.module.scss +161 -0
  174. package/src/components/listbox/listbox.ts +539 -0
  175. package/src/components/menu/caret-right-solid.svg +1 -0
  176. package/src/components/menu/menu.module.scss +117 -0
  177. package/src/components/menu/menu.ts +174 -0
  178. package/src/components/messages/circle-exclamation.svg +1 -0
  179. package/src/components/messages/messages.module.scss +92 -0
  180. package/src/components/messages/messages.ts +215 -0
  181. package/src/components/messages/pen-field.svg +1 -0
  182. package/src/components/normalize.scss +391 -0
  183. package/src/components/notification/circle-check-solid.svg +1 -0
  184. package/src/components/notification/circle-exclamation-solid.svg +1 -0
  185. package/src/components/notification/circle-notch-light.svg +1 -0
  186. package/src/components/notification/notification.module.scss +84 -0
  187. package/src/components/notification/notification.ts +107 -0
  188. package/src/components/notification/xmark-sharp-light.svg +1 -0
  189. package/src/components/panel/panel.module.scss +60 -0
  190. package/src/components/panel/panel.ts +58 -0
  191. package/src/components/popup/popup.module.scss +45 -0
  192. package/src/components/popup/popup.ts +440 -0
  193. package/src/components/progress/progress.module.scss +57 -0
  194. package/src/components/progress/progress.ts +44 -0
  195. package/src/components/propgrid/folder-closed.svg +1 -0
  196. package/src/components/propgrid/folder-open.svg +1 -0
  197. package/src/components/propgrid/progrid.module.scss +108 -0
  198. package/src/components/propgrid/propgrid.ts +271 -0
  199. package/src/components/propgrid/updown.svg +4 -0
  200. package/src/components/radio/radio.module.scss +147 -0
  201. package/src/components/radio/radio.svg +4 -0
  202. package/src/components/radio/radio.ts +142 -0
  203. package/src/components/rating/rating.module.scss +23 -0
  204. package/src/components/rating/rating.ts +131 -0
  205. package/src/components/rating/star-sharp-light.svg +1 -0
  206. package/src/components/rating/star-sharp-solid.svg +1 -0
  207. package/src/components/select/select.module.scss +9 -0
  208. package/src/components/select/select.ts +134 -0
  209. package/src/components/shared.scss +137 -0
  210. package/src/components/sizers/sizer.module.scss +90 -0
  211. package/src/components/sizers/sizer.ts +131 -0
  212. package/src/components/slider/slider.module.scss +118 -0
  213. package/src/components/slider/slider.ts +198 -0
  214. package/src/components/switch/switch.module.scss +127 -0
  215. package/src/components/switch/switch.ts +62 -0
  216. package/src/components/tabs/tabs.module.scss +45 -0
  217. package/src/components/tabs/tabs.ts +199 -0
  218. package/src/components/textarea/textarea.module.scss +63 -0
  219. package/src/components/textarea/textarea.ts +125 -0
  220. package/src/components/textedit/textedit.module.scss +116 -0
  221. package/src/components/textedit/textedit.ts +110 -0
  222. package/src/components/themes.scss +88 -0
  223. package/src/components/tickline/tickline.module.scss +26 -0
  224. package/src/components/tickline/tickline.ts +82 -0
  225. package/src/components/tooltips/circle-info-sharp-light.svg +1 -0
  226. package/src/components/tooltips/comments-question.svg +1 -0
  227. package/src/components/tooltips/tooltips.scss +72 -0
  228. package/src/components/tooltips/tooltips.ts +109 -0
  229. package/src/components/treeview/chevron-down-light.svg +1 -0
  230. package/src/components/treeview/treeview.module.scss +185 -0
  231. package/src/components/treeview/treeview.ts +445 -0
  232. package/src/components/viewport/viewport.module.scss +32 -0
  233. package/src/components/viewport/viewport.ts +41 -0
  234. package/src/core/component.ts +1072 -0
  235. package/src/core/core_application.ts +264 -0
  236. package/src/core/core_colors.ts +250 -0
  237. package/src/core/core_data.ts +1309 -0
  238. package/src/core/core_dom.ts +471 -0
  239. package/src/core/core_dragdrop.ts +201 -0
  240. package/src/core/core_element.ts +110 -0
  241. package/src/core/core_events.ts +177 -0
  242. package/src/core/core_i18n.ts +393 -0
  243. package/src/core/core_react.ts +79 -0
  244. package/src/core/core_router.ts +237 -0
  245. package/src/core/core_styles.ts +214 -0
  246. package/src/core/core_svg.ts +711 -0
  247. package/src/core/core_tools.ts +906 -0
  248. package/src/types/scss.d.ts +4 -0
  249. package/src/types/svg.d.ts +1 -0
  250. package/src/types/x4react.d.ts +9 -0
  251. package/src/x4.scss +19 -0
  252. package/src/x4tsx.d.ts +25 -0
  253. package/tsconfig.json +14 -0
  254. package/lib/src/components/grid/gridview.ts +0 -1108
  255. package/lib/src/components/grid/memdb.ts +0 -325
  256. /package/{lib/src/demo → demo}/assets/house-light.svg +0 -0
  257. /package/{lib/src/demo → demo}/assets/radio.svg +0 -0
  258. /package/{lib/src/demo → demo}/index.html +0 -0
@@ -0,0 +1,133 @@
1
+ /**
2
+ * ___ ___ __
3
+ * \ \/ / / _
4
+ * \ / /_| |_
5
+ * / \____ _|
6
+ * /__/\__\ |_|
7
+ *
8
+ * @file combobox.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
+ --dropdown-border: var( --border-hover );
21
+ --dropdown-background: var( --background-primary );
22
+
23
+ --combobox-border: var( --border );
24
+ --combobox-border-focus: var( --border-focus );
25
+
26
+ --combobox-btn-background: inherit;
27
+ --combobox-btn-color: var( --text-secondary );
28
+ --combobox-btn-color-hover: var( --text-primary );
29
+ }
30
+
31
+ .x4dropdownlist {
32
+ @extend .shadow-xl;
33
+ @extend .hbox;
34
+
35
+ max-height: 250px;
36
+ position: absolute;
37
+ background-color: var( --dropdown-background );
38
+ border: 1px solid var( --dropdown-border );
39
+
40
+ .x4listbox {
41
+ @extend .flex;
42
+
43
+ border: none;
44
+ margin: 0;
45
+ width: 100%;
46
+ height: 200px;
47
+
48
+ .x4item {
49
+ white-space: nowrap;
50
+ }
51
+ }
52
+ }
53
+
54
+ .x4combobox {
55
+ @extend .hbox;
56
+ margin: 5px;
57
+ gap: 6px;
58
+
59
+ &> #label {
60
+
61
+ &> .x4label {
62
+ padding: 0 6px 0 0;
63
+ border-bottom: 1px solid transparent;
64
+
65
+ height: 100%;
66
+ font-weight: 500;
67
+ gap: 0px;
68
+
69
+ #text:not(.empty) {
70
+ &::after {
71
+ content: ":"
72
+ }
73
+ }
74
+ }
75
+ }
76
+
77
+ &>#edit {
78
+ @extend .flex;
79
+ border-bottom: 1px solid var( --combobox-border );
80
+ &:focus-within {
81
+ border-bottom-color: var( --combobox-border-focus );
82
+ }
83
+
84
+ .x4input {
85
+ @extend .flex;
86
+
87
+ &[readonly] {
88
+ cursor: pointer;
89
+ }
90
+ }
91
+
92
+ .x4button {
93
+ margin: 0;
94
+ padding: 0;
95
+ outline: none;
96
+ background-color: var( --combobox-btn-background );
97
+ color: var( --combobox-btn-color );
98
+
99
+ #icon {
100
+ color: var( --combobox-btn-color );
101
+ }
102
+
103
+ &:hover, &:hover #icon {
104
+ color: var( --combobox-btn-color-hover );
105
+ }
106
+
107
+ //&:focus {
108
+ //background-color: var( --color-30 );
109
+ //color: var( --color-10 );
110
+ //}
111
+ }
112
+ }
113
+
114
+ &[disabled] {
115
+ &, * {
116
+ cursor: not-allowed;
117
+ }
118
+
119
+ #label .x4label {
120
+ color: var( --disabled-color-dark );
121
+ pointer-events: none;
122
+ }
123
+ }
124
+
125
+ &[required] {
126
+ & > #label > .x4label::before {
127
+ content: "*";
128
+ font-weight: bold;
129
+ color: var( --textedit-required );
130
+ margin-right: 2px;
131
+ }
132
+ }
133
+ }
@@ -0,0 +1,275 @@
1
+ /**
2
+ * ___ ___ __
3
+ * \ \/ / / _
4
+ * \ / /_| |_
5
+ * / \____ _|
6
+ * /__/\__\ |_|
7
+ *
8
+ * @file combobox.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, EvSelectionChange, makeUniqueComponentId } from '../../core/component';
18
+ import { class_ns, IComponentInterface, IFormElement, kbNav } from '@core/core_tools';
19
+ import { EventCallback } from '@core/core_events';
20
+
21
+ import { Listbox, ListboxID, ListItem } from '../listbox/listbox';
22
+ import { Popup, PopupEvents, PopupProps } from '../popup/popup.js';
23
+ import { Label } from '../label/label';
24
+ import { Input } from '../input/input';
25
+ import { Button } from '../button/button';
26
+ import { HBox } from '../boxes/boxes';
27
+
28
+ import "./combobox.module.scss";
29
+ import icon from "./updown.svg";
30
+
31
+
32
+
33
+ interface DropdownEvents extends PopupEvents {
34
+ selectionChange: EvSelectionChange;
35
+ }
36
+
37
+
38
+ interface DropdownProps extends Omit<PopupProps,"content"> {
39
+ items: ListItem[];
40
+ }
41
+
42
+
43
+ @class_ns( "x4" )
44
+ export class DropdownList extends Popup<DropdownProps,DropdownEvents> {
45
+
46
+ private _list: Listbox;
47
+
48
+ constructor( props: DropdownProps, content?: ListItem[] ) {
49
+ super( props );
50
+
51
+ this._list = new Listbox( { items: props.items } );
52
+ this.setContent( this._list );
53
+
54
+ this.addDOMEvent( "mousedown", ( ev: Event ) => {
55
+ console.log( "trap" );
56
+ ev.stopImmediatePropagation( );
57
+ ev.stopPropagation( );
58
+ ev.preventDefault( );
59
+ }, true );
60
+
61
+ this._list.on( "selectionChange", ( ev ) => {
62
+ this.fire( "selectionChange", ev );
63
+ })
64
+ }
65
+
66
+ getList( ) {
67
+ return this._list;
68
+ }
69
+ }
70
+
71
+
72
+ /**
73
+ *
74
+ */
75
+
76
+ interface ComboboxEvents extends ComponentEvents {
77
+ selectionChange: EvSelectionChange;
78
+ }
79
+
80
+ interface ComboboxProps extends Omit<ComponentProps,"content"> {
81
+ label?: string;
82
+ name?: string;
83
+ value?: string;
84
+ labelWidth?: number | string;
85
+ readonly?: boolean;
86
+ required?: boolean;
87
+ items: ListItem[];
88
+ selectionChange?: EventCallback<EvSelectionChange>,
89
+ }
90
+
91
+ @class_ns( "x4" )
92
+ export class Combobox extends Component<ComboboxProps,ComboboxEvents> {
93
+
94
+ private _popup: DropdownList;
95
+ //private _label: Label;
96
+ private _input: Input;
97
+ private _button: Button;
98
+ private _prevent_close = false;
99
+ private _edit: HBox;
100
+
101
+ constructor( props: ComboboxProps ) {
102
+ super( props );
103
+
104
+ const id = makeUniqueComponentId( );
105
+
106
+ this.mapPropEvents( props, "selectionChange" );
107
+
108
+ const readonly = props.readonly===false ? false : true; // by default
109
+
110
+ this.setContent( [
111
+ new HBox( { id: "label", content: new Label( { tag: "label", text: props.label, labelFor: id, width: props.labelWidth } ) } ),
112
+ this._edit = new HBox( { id: "edit", content: [
113
+ this._input = new Input( { id, type: "text", value: "", readonly: readonly, required: props.required }),
114
+ this._button = new Button( { icon: icon, tabindex: -1 } )
115
+ ]} ),
116
+ ])
117
+
118
+ if( props.name ) {
119
+ this.setAttribute( "name", props.name );
120
+ }
121
+
122
+ if( props.required ) {
123
+ this.setAttribute( "required", true );
124
+ }
125
+
126
+ this._popup = new DropdownList( { items: props.items } );
127
+ const list = this._popup.getList( );
128
+
129
+ const _select = ( sel: ListboxID ) => {
130
+ const itm = list.getItem(sel);
131
+
132
+ //TODO: unsafehtml
133
+ //@ts-ignore
134
+ this._input.setValue( itm ? itm.text : "" );
135
+
136
+ if( !this._prevent_close ) {
137
+ this._popup.show( false );
138
+ }
139
+ }
140
+
141
+ this._popup.on( "selectionChange", ( ev ) => {
142
+ const [sel] = ev.selection as ListboxID[];
143
+ if( sel!==undefined ) { // no empty sel
144
+ _select( sel );
145
+ this.fire( "selectionChange", ev );
146
+ }
147
+ });
148
+
149
+ if( props.value ) {
150
+ _select( props.value );
151
+ }
152
+
153
+ this._button.addDOMEvent( "click", ( ) => this._on_click( ) );
154
+ this._input.addDOMEvent( "input", ( ) => this._on_input( ) );
155
+ this._input.addDOMEvent( "keydown", ( ev ) => this._on_key( ev ) );
156
+
157
+ this.setDOMEvents( {
158
+ focusout: ( ) => this._on_focusout( ),
159
+ click: ( ) => this._on_click( ),
160
+ })
161
+ }
162
+
163
+ private _on_key( ev: KeyboardEvent ) {
164
+ switch( ev.key ) {
165
+ case "Enter":
166
+ case "Escape": {
167
+ this._popup.show( false );
168
+ break;
169
+ }
170
+
171
+ case "ArrowUp":
172
+ this._prevent_close = true;
173
+ if( !this._popup.isOpen( ) ) {
174
+ this.showDropDown( );
175
+ }
176
+ else {
177
+ this._popup.getList().navigate( kbNav.prev );
178
+ }
179
+
180
+ this._prevent_close = false;
181
+ break;
182
+
183
+ case "ArrowDown":
184
+ this._prevent_close = true;
185
+ if( !this._popup.isOpen( ) ) {
186
+ this.showDropDown( );
187
+ }
188
+ else {
189
+ this._popup.getList().navigate( kbNav.next );
190
+ }
191
+
192
+ this._prevent_close = false;
193
+ break;
194
+
195
+ default: {
196
+ return;
197
+ }
198
+ }
199
+
200
+ ev.preventDefault( );
201
+ ev.stopPropagation( );
202
+ }
203
+
204
+ private _on_input( ) {
205
+ if( !this._popup.isOpen( ) ) {
206
+ this.showDropDown( );
207
+ }
208
+
209
+ this._popup.getList().filter( this._input.getValue( ) );
210
+ }
211
+
212
+ private _on_focusout( ) {
213
+ this._popup.show( false );
214
+ }
215
+
216
+ private _on_click( ) {
217
+ this.showDropDown( );
218
+ }
219
+
220
+ showDropDown( ) {
221
+ if( this.isDisabled() ) {
222
+ return;
223
+ }
224
+
225
+ const rc = this._edit.getBoundingRect( );
226
+ this._popup.setStyleValue( "minWidth", rc.width+"px" );
227
+ this._popup.displayNear( rc, "top left", "bottom left", {x:0,y:6} );
228
+ }
229
+
230
+ setItems( items: ListItem[] ) {
231
+ this._getList().setItems( items );
232
+ }
233
+
234
+ getValue( ) {
235
+ return this._input.getValue( );
236
+ }
237
+
238
+ setValue( value: string ) {
239
+ this._input.setValue( value );
240
+ }
241
+
242
+ selectItem( index: ListboxID ) {
243
+ this._getList( ).select( index );
244
+ }
245
+
246
+ getSelection( ) {
247
+ const [sel] = this._getList( ).getSelection( );
248
+ return sel;
249
+ }
250
+
251
+ private _getList( ) {
252
+ return this._popup.getList( );
253
+ }
254
+
255
+ /**
256
+ *
257
+ */
258
+
259
+ override queryInterface<T extends IComponentInterface>( name: string ): T {
260
+ if( name=="form-element" ) {
261
+ const i: IFormElement = {
262
+ getRawValue: ( ): any => { return this.getSelection(); },
263
+ setRawValue: ( v: any ) => { this.selectItem(v); },
264
+ isValid: ( ) => { return this._input.isValid(); }
265
+ };
266
+
267
+ //@ts-ignore
268
+ return i as T;
269
+ }
270
+
271
+ return super.queryInterface( name );
272
+ }
273
+ }
274
+
275
+
@@ -0,0 +1,4 @@
1
+ <svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M4.93179 5.43179C4.75605 5.60753 4.75605 5.89245 4.93179 6.06819C5.10753 6.24392 5.39245 6.24392 5.56819 6.06819L7.49999 4.13638L9.43179 6.06819C9.60753 6.24392 9.89245 6.24392 10.0682 6.06819C10.2439 5.89245 10.2439 5.60753 10.0682 5.43179L7.81819 3.18179C7.73379 3.0974 7.61933 3.04999 7.49999 3.04999C7.38064 3.04999 7.26618 3.0974 7.18179 3.18179L4.93179 5.43179ZM10.0682 9.56819C10.2439 9.39245 10.2439 9.10753 10.0682 8.93179C9.89245 8.75606 9.60753 8.75606 9.43179 8.93179L7.49999 10.8636L5.56819 8.93179C5.39245 8.75606 5.10753 8.75606 4.93179 8.93179C4.75605 9.10753 4.75605 9.39245 4.93179 9.56819L7.18179 11.8182C7.35753 11.9939 7.64245 11.9939 7.81819 11.8182L10.0682 9.56819Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd">
3
+ </path>
4
+ </svg>
@@ -0,0 +1,41 @@
1
+ export * from "./boxes/boxes"
2
+ export * from "./breadcrumb/breadcrumb"
3
+ export * from "./btngroup/btngroup"
4
+ export * from "./button/button"
5
+ export * from "./calendar/calendar"
6
+ export * from "./checkbox/checkbox"
7
+ export * from "./colorinput/colorinput"
8
+ export * from "./colorpicker/colorpicker"
9
+ export * from "./combobox/combobox"
10
+ export * from "./dialog/dialog"
11
+ export * from "./filedrop/filedrop"
12
+ export * from "./form/form"
13
+ export * from "./gridview/gridview"
14
+ export * from "./header/header"
15
+ export * from "./icon/icon"
16
+ export * from "./image/image"
17
+ export * from "./input/input"
18
+ export * from "./keyboard/keyboard"
19
+ export * from "./label/label"
20
+ export * from "./link/link"
21
+ export * from "./listbox/listbox"
22
+ export * from "./menu/menu"
23
+ export * from "./messages/messages"
24
+ export * from "./notification/notification"
25
+ export * from "./panel/panel"
26
+ export * from "./popup/popup"
27
+ export * from "./progress/progress"
28
+ export * from "./propgrid/propgrid"
29
+ export * from "./radio/radio"
30
+ export * from "./rating/rating"
31
+ export * from "./tickline/tickline"
32
+ export * from "./select/select"
33
+ export * from "./sizers/sizer"
34
+ export * from "./slider/slider"
35
+ export * from "./switch/switch"
36
+ export * from "./tabs/tabs"
37
+ export * from "./textarea/textarea"
38
+ export * from "./textedit/textedit"
39
+ export * from "./tooltips/tooltips"
40
+ export * from "./treeview/treeview"
41
+ export * from "./viewport/viewport"
@@ -0,0 +1,105 @@
1
+ /**
2
+ * ___ ___ __
3
+ * \ \/ / / _
4
+ * \ / /_| |_
5
+ * / \____ _|
6
+ * /__/\__\ |_|
7
+ *
8
+ * @file dialog.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
+ @import "../shared.scss";
18
+
19
+ :root {
20
+ --color-dialog-caption: var( --color-primary-a80 );
21
+ --color-dialog-caption-text: var( --color-primary-a0 );
22
+ }
23
+
24
+ .x4dialog {
25
+ @extend .shadow-xl, .vbox;
26
+
27
+ position: absolute !important;
28
+ background-color: white;
29
+ border: 1px solid var( --border-dark );
30
+ min-width: min-content;
31
+ min-height: min-content;
32
+
33
+ &> .caption {
34
+ padding: 8px;
35
+ background-color: var(--color-dialog-caption);
36
+
37
+ & > #title {
38
+ @extend .flex;
39
+ color: var(--color-dialog-caption-text);
40
+ font-weight: bold;
41
+ font-size: 120%;
42
+
43
+ #icon {
44
+ color: var(--color-dialog-caption-text);
45
+ fill: var(--color-dialog-caption-text);
46
+ }
47
+ }
48
+
49
+ & > #closebox {
50
+ margin: 0;
51
+ padding: 4px;
52
+ }
53
+ }
54
+
55
+ &> .form {
56
+ min-height: 128px;
57
+ min-width: 450px;
58
+ }
59
+
60
+ &> #btnbar {
61
+ border-top: 1px solid var( --border );
62
+ padding: 6px 20px;
63
+ margin: 0;
64
+
65
+ justify-content: end;
66
+ gap: 8px;
67
+
68
+ &> .x4button {
69
+ min-width: 80px;
70
+
71
+ .x-simple-label {
72
+ text-align: center;
73
+ }
74
+
75
+ }
76
+ }
77
+ }
78
+
79
+
80
+ .x4dialog.danger {
81
+
82
+ &> .caption {
83
+ background-color: var( --alert-background );
84
+ color: var( --alert-color );
85
+
86
+ #closebox {
87
+ background-color: transparent;
88
+ color: var( --alert-color );
89
+ }
90
+ }
91
+
92
+ &> #btnbar {
93
+ &> .x4button:not(.outline) {
94
+ &:not(:disabled) {
95
+ background-color: var( --alert-background );
96
+ color: var( --alert-color );
97
+ }
98
+ }
99
+ }
100
+ }
101
+
102
+ .x4dialogex {
103
+ padding: 0;
104
+ margin: 0;
105
+ }