x4js 2.0.12 → 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 (284) hide show
  1. package/.vscode/launch.json +14 -0
  2. package/README.md +20 -15
  3. package/{lib/src/demo → demo}/assets/radio.svg +3 -3
  4. package/{lib/src/demo → demo}/index.html +11 -11
  5. package/{lib/src/demo → demo}/main.scss +23 -21
  6. package/{lib/src/demo/main.tsx → demo/main.ts} +324 -323
  7. package/demo/package.json +26 -0
  8. package/demo/scss.d.ts +4 -0
  9. package/demo/svg.d.ts +1 -0
  10. package/demo/tsconfig.json +14 -0
  11. package/lib/README.txt +20 -15
  12. package/lib/cjs/x4.css +1 -1
  13. package/lib/cjs/x4.js +2 -1
  14. package/lib/esm/x4.css +1 -1
  15. package/lib/esm/x4.mjs +2 -1
  16. package/lib/src/components/base.scss +25 -26
  17. package/lib/src/components/boxes/boxes.module.scss +54 -37
  18. package/lib/src/components/boxes/boxes.ts +278 -125
  19. package/lib/src/components/breadcrumb/breadcrumb.scss +56 -0
  20. package/lib/src/components/breadcrumb/breadcrumb.ts +93 -0
  21. package/lib/src/components/breadcrumb/chevron-right.svg +1 -0
  22. package/lib/src/components/btngroup/btngroup.module.scss +40 -28
  23. package/lib/src/components/btngroup/btngroup.ts +152 -101
  24. package/lib/src/components/button/button.module.scss +172 -153
  25. package/lib/src/components/button/button.ts +185 -117
  26. package/lib/src/components/calendar/calendar.module.scss +162 -162
  27. package/lib/src/components/calendar/calendar.ts +326 -325
  28. package/lib/src/components/canvas/canvas.module.scss +25 -0
  29. package/lib/src/components/canvas/canvas.ts +189 -0
  30. package/lib/src/components/canvas/canvas_ex.ts +269 -0
  31. package/lib/src/components/checkbox/check.svg +3 -3
  32. package/lib/src/components/checkbox/checkbox.module.scss +141 -141
  33. package/lib/src/components/checkbox/checkbox.ts +139 -124
  34. package/lib/src/components/colorinput/colorinput.module.scss +64 -64
  35. package/lib/src/components/colorinput/colorinput.ts +90 -87
  36. package/lib/src/components/colorpicker/colorpicker.module.scss +132 -132
  37. package/lib/src/components/colorpicker/colorpicker.ts +481 -476
  38. package/lib/src/components/combobox/combobox.module.scss +132 -120
  39. package/lib/src/components/combobox/combobox.ts +275 -190
  40. package/lib/src/components/combobox/updown.svg +3 -3
  41. package/lib/src/components/components.ts +41 -0
  42. package/lib/src/components/dialog/dialog.module.scss +105 -71
  43. package/lib/src/components/dialog/dialog.ts +212 -92
  44. package/lib/src/components/filedrop/cloud-arrow-up.svg +1 -0
  45. package/lib/src/components/filedrop/filedrop.module.scss +70 -0
  46. package/lib/src/components/filedrop/filedrop.ts +131 -0
  47. package/lib/src/components/form/form.module.scss +38 -34
  48. package/lib/src/components/form/form.ts +172 -36
  49. package/lib/src/components/gridview/arrow-down-light.svg +1 -0
  50. package/lib/src/components/gridview/arrow-up-light.svg +1 -0
  51. package/lib/src/components/gridview/gridview.module.scss +324 -0
  52. package/lib/src/components/gridview/gridview.ts +1175 -0
  53. package/lib/src/components/header/header.module.scss +39 -39
  54. package/lib/src/components/header/header.ts +129 -123
  55. package/lib/src/components/icon/icon.module.scss +30 -30
  56. package/lib/src/components/icon/icon.ts +139 -134
  57. package/lib/src/components/image/image.module.scss +27 -20
  58. package/lib/src/components/image/image.ts +168 -67
  59. package/lib/src/components/input/input.module.scss +74 -69
  60. package/lib/src/components/input/input.ts +398 -274
  61. package/lib/src/components/keyboard/arrow-up.svg +1 -0
  62. package/lib/src/components/keyboard/delete-left.svg +1 -0
  63. package/lib/src/components/keyboard/eye-slash.svg +1 -0
  64. package/lib/src/components/keyboard/keyboard.module.scss +134 -0
  65. package/lib/src/components/keyboard/keyboard.ts +525 -0
  66. package/lib/src/components/label/label.module.scss +76 -52
  67. package/lib/src/components/label/label.ts +97 -55
  68. package/lib/src/components/link/link.ts +81 -0
  69. package/lib/src/components/listbox/listbox.module.scss +161 -103
  70. package/lib/src/components/listbox/listbox.ts +539 -427
  71. package/lib/src/components/menu/menu.module.scss +116 -107
  72. package/lib/src/components/menu/menu.ts +174 -168
  73. package/lib/src/components/messages/messages.module.scss +92 -47
  74. package/lib/src/components/messages/messages.ts +215 -64
  75. package/lib/src/components/messages/pen-field.svg +1 -0
  76. package/lib/src/components/normalize.scss +391 -386
  77. package/lib/src/components/notification/notification.module.scss +83 -81
  78. package/lib/src/components/notification/notification.ts +107 -108
  79. package/lib/src/components/panel/panel.module.scss +59 -47
  80. package/lib/src/components/panel/panel.ts +57 -56
  81. package/lib/src/components/popup/popup.module.scss +45 -43
  82. package/lib/src/components/popup/popup.ts +440 -395
  83. package/lib/src/components/progress/progress.module.scss +56 -56
  84. package/lib/src/components/progress/progress.ts +43 -42
  85. package/lib/src/components/propgrid/folder-closed.svg +1 -0
  86. package/lib/src/components/propgrid/folder-open.svg +1 -0
  87. package/lib/src/components/propgrid/progrid.module.scss +108 -0
  88. package/lib/src/components/propgrid/propgrid.ts +271 -0
  89. package/lib/src/components/propgrid/updown.svg +4 -0
  90. package/lib/src/components/radio/radio.module.scss +147 -0
  91. package/lib/src/components/radio/radio.svg +4 -0
  92. package/lib/src/components/radio/radio.ts +142 -0
  93. package/lib/src/components/rating/rating.module.scss +22 -22
  94. package/lib/src/components/rating/rating.ts +131 -125
  95. package/lib/src/components/select/select.module.scss +9 -0
  96. package/lib/src/components/select/select.ts +134 -0
  97. package/lib/src/components/shared.scss +137 -76
  98. package/lib/src/components/sizers/sizer.module.scss +89 -89
  99. package/lib/src/components/sizers/sizer.ts +130 -119
  100. package/lib/src/components/slider/slider.module.scss +117 -70
  101. package/lib/src/components/slider/slider.ts +197 -142
  102. package/lib/src/components/switch/switch.module.scss +126 -126
  103. package/lib/src/components/switch/switch.ts +61 -55
  104. package/lib/src/components/tabs/tabs.module.scss +45 -46
  105. package/lib/src/components/tabs/tabs.ts +199 -157
  106. package/lib/src/components/textarea/textarea.module.scss +63 -59
  107. package/lib/src/components/textarea/textarea.ts +125 -54
  108. package/lib/src/components/textedit/textedit.module.scss +115 -113
  109. package/lib/src/components/textedit/textedit.ts +110 -82
  110. package/lib/src/components/themes.scss +88 -77
  111. package/lib/src/components/tickline/tickline.module.scss +26 -0
  112. package/lib/src/components/tickline/tickline.ts +82 -0
  113. package/lib/src/components/tooltips/comments-question.svg +1 -0
  114. package/lib/src/components/tooltips/tooltips.scss +71 -50
  115. package/lib/src/components/tooltips/tooltips.ts +108 -102
  116. package/lib/src/components/treeview/treeview.module.scss +184 -115
  117. package/lib/src/components/treeview/treeview.ts +445 -403
  118. package/lib/src/components/viewport/viewport.module.scss +31 -24
  119. package/lib/src/components/viewport/viewport.ts +41 -38
  120. package/lib/src/core/component.ts +1072 -979
  121. package/lib/src/core/core_application.ts +264 -0
  122. package/lib/src/core/core_colors.ts +249 -249
  123. package/lib/src/core/core_data.ts +1309 -0
  124. package/lib/src/core/core_dom.ts +471 -471
  125. package/lib/src/core/core_dragdrop.ts +200 -200
  126. package/lib/src/core/core_element.ts +109 -97
  127. package/lib/src/core/core_events.ts +177 -149
  128. package/lib/src/core/core_i18n.ts +393 -377
  129. package/lib/src/core/core_react.ts +79 -0
  130. package/lib/src/core/core_router.ts +237 -221
  131. package/lib/src/core/core_styles.ts +214 -214
  132. package/lib/src/core/core_svg.ts +711 -550
  133. package/lib/src/core/core_tools.ts +906 -673
  134. package/lib/src/types/scss.d.ts +4 -4
  135. package/lib/src/types/x4react.d.ts +8 -8
  136. package/lib/src/x4.scss +18 -18
  137. package/lib/src/x4.ts +31 -62
  138. package/lib/src/x4tsx.d.ts +25 -0
  139. package/lib/styles/x4.css +1 -1
  140. package/lib/types/x4js.d.ts +853 -127
  141. package/package.json +5 -6
  142. package/scripts/build.mjs +378 -0
  143. package/scripts/prepack.mjs +346 -0
  144. package/src/components/base.scss +25 -0
  145. package/src/components/boxes/boxes.module.scss +54 -0
  146. package/src/components/boxes/boxes.ts +278 -0
  147. package/src/components/breadcrumb/breadcrumb.scss +56 -0
  148. package/src/components/breadcrumb/breadcrumb.ts +93 -0
  149. package/src/components/breadcrumb/chevron-right.svg +1 -0
  150. package/src/components/btngroup/btngroup.module.scss +41 -0
  151. package/src/components/btngroup/btngroup.ts +153 -0
  152. package/src/components/button/button.module.scss +173 -0
  153. package/src/components/button/button.ts +185 -0
  154. package/src/components/calendar/calendar-check-sharp-light.svg +1 -0
  155. package/src/components/calendar/calendar.module.scss +163 -0
  156. package/src/components/calendar/calendar.ts +327 -0
  157. package/src/components/calendar/chevron-left-sharp-light.svg +1 -0
  158. package/src/components/calendar/chevron-right-sharp-light.svg +1 -0
  159. package/src/components/canvas/canvas.module.scss +25 -0
  160. package/src/components/canvas/canvas.ts +189 -0
  161. package/src/components/canvas/canvas_ex.ts +269 -0
  162. package/src/components/checkbox/check.svg +4 -0
  163. package/src/components/checkbox/checkbox.module.scss +142 -0
  164. package/src/components/checkbox/checkbox.ts +140 -0
  165. package/src/components/colorinput/colorinput.module.scss +65 -0
  166. package/src/components/colorinput/colorinput.ts +91 -0
  167. package/src/components/colorinput/crosshairs-simple-sharp-light.svg +1 -0
  168. package/src/components/colorpicker/colorpicker.module.scss +133 -0
  169. package/src/components/colorpicker/colorpicker.ts +482 -0
  170. package/src/components/combobox/combobox.module.scss +133 -0
  171. package/src/components/combobox/combobox.ts +275 -0
  172. package/src/components/combobox/updown.svg +4 -0
  173. package/src/components/components.ts +41 -0
  174. package/src/components/dialog/dialog.module.scss +105 -0
  175. package/src/components/dialog/dialog.ts +212 -0
  176. package/src/components/dialog/xmark-sharp-light.svg +1 -0
  177. package/src/components/filedrop/cloud-arrow-up.svg +1 -0
  178. package/src/components/filedrop/filedrop.module.scss +70 -0
  179. package/src/components/filedrop/filedrop.ts +131 -0
  180. package/src/components/form/form.module.scss +38 -0
  181. package/src/components/form/form.ts +172 -0
  182. package/src/components/gridview/arrow-down-light.svg +1 -0
  183. package/src/components/gridview/arrow-up-light.svg +1 -0
  184. package/src/components/gridview/gridview.module.scss +324 -0
  185. package/src/components/gridview/gridview.ts +1175 -0
  186. package/src/components/header/header.module.scss +40 -0
  187. package/src/components/header/header.ts +130 -0
  188. package/src/components/icon/icon.module.scss +30 -0
  189. package/src/components/icon/icon.ts +139 -0
  190. package/src/components/image/image.module.scss +28 -0
  191. package/src/components/image/image.ts +168 -0
  192. package/src/components/input/input.module.scss +74 -0
  193. package/src/components/input/input.ts +398 -0
  194. package/src/components/keyboard/arrow-up.svg +1 -0
  195. package/src/components/keyboard/delete-left.svg +1 -0
  196. package/src/components/keyboard/eye-slash.svg +1 -0
  197. package/src/components/keyboard/keyboard.module.scss +134 -0
  198. package/src/components/keyboard/keyboard.ts +525 -0
  199. package/src/components/label/label.module.scss +76 -0
  200. package/src/components/label/label.ts +97 -0
  201. package/src/components/link/link.ts +81 -0
  202. package/src/components/listbox/listbox.module.scss +161 -0
  203. package/src/components/listbox/listbox.ts +539 -0
  204. package/src/components/menu/caret-right-solid.svg +1 -0
  205. package/src/components/menu/menu.module.scss +117 -0
  206. package/src/components/menu/menu.ts +174 -0
  207. package/src/components/messages/circle-exclamation.svg +1 -0
  208. package/src/components/messages/messages.module.scss +92 -0
  209. package/src/components/messages/messages.ts +215 -0
  210. package/src/components/messages/pen-field.svg +1 -0
  211. package/src/components/normalize.scss +391 -0
  212. package/src/components/notification/circle-check-solid.svg +1 -0
  213. package/src/components/notification/circle-exclamation-solid.svg +1 -0
  214. package/src/components/notification/circle-notch-light.svg +1 -0
  215. package/src/components/notification/notification.module.scss +84 -0
  216. package/src/components/notification/notification.ts +107 -0
  217. package/src/components/notification/xmark-sharp-light.svg +1 -0
  218. package/src/components/panel/panel.module.scss +60 -0
  219. package/src/components/panel/panel.ts +58 -0
  220. package/src/components/popup/popup.module.scss +45 -0
  221. package/src/components/popup/popup.ts +440 -0
  222. package/src/components/progress/progress.module.scss +57 -0
  223. package/src/components/progress/progress.ts +44 -0
  224. package/src/components/propgrid/folder-closed.svg +1 -0
  225. package/src/components/propgrid/folder-open.svg +1 -0
  226. package/src/components/propgrid/progrid.module.scss +108 -0
  227. package/src/components/propgrid/propgrid.ts +271 -0
  228. package/src/components/propgrid/updown.svg +4 -0
  229. package/src/components/radio/radio.module.scss +147 -0
  230. package/src/components/radio/radio.svg +4 -0
  231. package/src/components/radio/radio.ts +142 -0
  232. package/src/components/rating/rating.module.scss +23 -0
  233. package/src/components/rating/rating.ts +131 -0
  234. package/src/components/rating/star-sharp-light.svg +1 -0
  235. package/src/components/rating/star-sharp-solid.svg +1 -0
  236. package/src/components/select/select.module.scss +9 -0
  237. package/src/components/select/select.ts +134 -0
  238. package/src/components/shared.scss +137 -0
  239. package/src/components/sizers/sizer.module.scss +90 -0
  240. package/src/components/sizers/sizer.ts +131 -0
  241. package/src/components/slider/slider.module.scss +118 -0
  242. package/src/components/slider/slider.ts +198 -0
  243. package/src/components/switch/switch.module.scss +127 -0
  244. package/src/components/switch/switch.ts +62 -0
  245. package/src/components/tabs/tabs.module.scss +45 -0
  246. package/src/components/tabs/tabs.ts +199 -0
  247. package/src/components/textarea/textarea.module.scss +63 -0
  248. package/src/components/textarea/textarea.ts +125 -0
  249. package/src/components/textedit/textedit.module.scss +116 -0
  250. package/src/components/textedit/textedit.ts +110 -0
  251. package/src/components/themes.scss +88 -0
  252. package/src/components/tickline/tickline.module.scss +26 -0
  253. package/src/components/tickline/tickline.ts +82 -0
  254. package/src/components/tooltips/circle-info-sharp-light.svg +1 -0
  255. package/src/components/tooltips/comments-question.svg +1 -0
  256. package/src/components/tooltips/tooltips.scss +72 -0
  257. package/src/components/tooltips/tooltips.ts +109 -0
  258. package/src/components/treeview/chevron-down-light.svg +1 -0
  259. package/src/components/treeview/treeview.module.scss +185 -0
  260. package/src/components/treeview/treeview.ts +445 -0
  261. package/src/components/viewport/viewport.module.scss +32 -0
  262. package/src/components/viewport/viewport.ts +41 -0
  263. package/src/core/component.ts +1072 -0
  264. package/src/core/core_application.ts +264 -0
  265. package/src/core/core_colors.ts +250 -0
  266. package/src/core/core_data.ts +1309 -0
  267. package/src/core/core_dom.ts +471 -0
  268. package/src/core/core_dragdrop.ts +201 -0
  269. package/src/core/core_element.ts +110 -0
  270. package/src/core/core_events.ts +177 -0
  271. package/src/core/core_i18n.ts +393 -0
  272. package/src/core/core_react.ts +79 -0
  273. package/src/core/core_router.ts +237 -0
  274. package/src/core/core_styles.ts +214 -0
  275. package/src/core/core_svg.ts +711 -0
  276. package/src/core/core_tools.ts +906 -0
  277. package/src/types/scss.d.ts +4 -0
  278. package/src/types/svg.d.ts +1 -0
  279. package/src/types/x4react.d.ts +9 -0
  280. package/src/x4.scss +19 -0
  281. package/src/x4.ts +31 -62
  282. package/src/x4tsx.d.ts +25 -0
  283. package/tsconfig.json +14 -0
  284. /package/{lib/src/demo → demo}/assets/house-light.svg +0 -0
@@ -1,323 +1,324 @@
1
- /**
2
- * ___ ___ __
3
- * \ \/ / / _
4
- * \ / /_| |_
5
- * / \____ _|
6
- * /__/\__\ |_|
7
- *
8
- * DEMO FILE
9
- *
10
- **/
11
-
12
- import { wrapDOM, Component } from '@core/component.js'
13
-
14
- import { Button } from "./components/button/button.js"
15
- import { Label } from "./components/label/label.js"
16
- import { Checkbox } from "./components/checkbox/checkbox.js"
17
- import { HBox, VBox } from "./components/boxes/boxes.js"
18
-
19
- import { Listbox, ListItem } from './components/listbox/listbox.js'
20
- import { Panel } from './components/panel/panel.js'
21
- import { TextEdit } from './components/textedit/textedit.js'
22
- import { TextArea } from './components/textarea/textarea.js'
23
- import { Switch } from './components/switch/switch.js'
24
- import { Combobox } from './components/combobox/combobox.js'
25
- import { Slider } from './components/slider/slider.js'
26
- import { Progress } from './components/progress/progress.js'
27
- import { BtnGroup } from './components/btngroup/btngroup.js'
28
- import { Image } from './components/image/image.js'
29
- import { ColorInput } from './components/colorinput/colorinput.js'
30
- import { ColorPicker } from './components/colorpicker/colorpicker.js'
31
- import { Menu } from './components/menu/menu.js'
32
- import { initTooltips } from './components/tooltips/tooltips.js'
33
- import { Treeview, TreeItem } from './components/treeview/treeview.js'
34
- import { Dialog } from './components/dialog/dialog.js'
35
- import { Form } from './components/form/form.js'
36
- import { MessageBox } from './components/messages/messages.js'
37
- import { unsafeHtml } from '@core/core_tools.js'
38
- import { Calendar } from './components/calendar/calendar.js'
39
- import { Notification } from './components/notification/notification.js'
40
- import { SvgBuilder, SvgComponent } from '@core/core_svg.js'
41
- import { Header } from './components/header/header.js'
42
-
43
- import "@fontsource/montserrat"
44
- import "./main.scss"
45
-
46
- import def_icon from "./assets/house-light.svg";
47
- import { Tabs } from './components/tabs/tabs.js'
48
- import { Rating } from './components/rating/rating.js'
49
-
50
-
51
- function main( ) {
52
-
53
- initTooltips( );
54
-
55
- const testMenu = ( ev: MouseEvent ) => {
56
- const sub = new Menu( { items: [
57
- "Sub menu 1",
58
- { text: "sub 1-1" }
59
- ]
60
- })
61
-
62
- const sub3 = new Menu( { items: [
63
- "Sub menu 3",
64
- { text: "sub 3-1" }
65
- ]
66
- })
67
-
68
- const sub2 = new Menu( { items: [
69
- "Sub menu 2",
70
- { text: "sub 2-1" },
71
- { text: "menu e", menu: sub3 }
72
- ]
73
- })
74
-
75
- const pop = new Menu( {items: [
76
- "Title",
77
- { text: "menu a", click: null, icon: def_icon },
78
- "-",
79
- { text: "menu b", click: null },
80
- { text: "menu c", click: null, disabled: true },
81
- "-",
82
- { text: "menu d", menu: sub },
83
- { text: "menu e", menu: sub2 },
84
- ]
85
- });
86
-
87
- pop.displayAt( ev.pageX, ev.pageY );
88
- ev.stopPropagation( );
89
- ev.preventDefault( );
90
- }
91
-
92
- const items: ListItem[] = [
93
- { id: 1, text: "Item 1" },
94
- { id: 2, text: "Item 2" },
95
- { id: 3, text: "Item 3" },
96
- { id: 4, text: "Item 4" },
97
- { id: 5, text: "Item 5" },
98
- { id: 6, text: "Item 6" },
99
- ];
100
-
101
- const tree_items: TreeItem[] = [
102
- { id: 1, text: "root", open: true, children: [
103
- { id: 2, text: "folder 1", children: [
104
- { id: 3, text: "folder 1.1", children: [
105
- { id: 4, text: "value 1.1" },
106
- { id: 5, text: "value 1.2", iconId: def_icon },
107
- { id: 6, text: "value 1.3" }
108
- ] }
109
- ]},
110
- { id: 10, text: "folder 2", open: true, children: [
111
- { id: 11, text: "folder 2.1", open: true, children: [
112
- { id: 12, text: "value 2.1" },
113
- { id: 13, text: "value 2.2" },
114
- { id: 14, text: "value 2.3" }
115
- ] }
116
- ]}
117
- ]}
118
- ]
119
-
120
- const dialog = new Dialog( {
121
- title: "Dialog",
122
- modal: true,
123
- movable: true,
124
- sizable: true,
125
- closable: true,
126
- buttons: ['ok','cancel'],
127
- form: new Form( {
128
- content: [
129
- new Label( { cls: "x4flex", text: unsafeHtml("<h1>Example dialog</h1><p>This dialog is <i>resizable</i>...") } ),
130
- new TextEdit( { label: "title", value: "" } ),
131
- ]
132
- }),
133
- });
134
-
135
- const svg_builder = new SvgBuilder( );
136
-
137
- svg_builder
138
- .ellipse( 45, 45, 40 )
139
- .stroke( "#ccc", 5 )
140
- .fill( "transparent" );
141
-
142
- svg_builder.path( )
143
- .arc( 45, 45, 40, 0, 30*360/100 )
144
- .stroke( "var( --accent-background )", 5 )
145
- .fill( "none" )
146
- .setAttr("tooltip","test")
147
- .strokeCap( "round" )
148
- .addDOMEvent( "mouseenter", ( ev ) => {
149
- console.log( ev.target );
150
- (ev.target as SVGElement).setAttribute( "stroke-width", "10px" );
151
- })
152
- .addDOMEvent( "mouseleave", ( ev ) => {
153
- console.log( ev.target );
154
- (ev.target as SVGElement).setAttribute( "stroke-width", "5px" );
155
- });
156
-
157
- svg_builder.text( 45, 42, "30%" )
158
- .textAlign( "center" )
159
- .verticalAlign( "baseline" )
160
- .fontSize( "150%" )
161
- .fontWeight( "bold" );
162
-
163
- svg_builder.text( 45, 80, "custom control" )
164
- .fontSize( "10px" )
165
- .textAlign( "center" )
166
-
167
- const t = new HBox( {
168
- style: {
169
- alignItems: "start",
170
- gap: "8px",
171
- flexWrap: "wrap",
172
- },
173
- content: [
174
- new Panel( {
175
- title: "Panel",
176
- icon: def_icon,
177
- width: 510,
178
- content: [
179
- new Label( { text: "label", icon: def_icon } ),
180
- new HBox( { content: [
181
- new Button( { label:'OK', icon:def_icon } ),
182
- new Button( { label:'OK', icon:def_icon, disabled: true } ),
183
- new Button( { cls: "outline", label:'OK', icon:def_icon } ),
184
- ]}),
185
- new VBox({ content: [
186
- new HBox({ content: [
187
- new Checkbox( { label: 'Unchecked', checked: false } ),
188
- new Checkbox( { label: 'Checked', checked: true } ),
189
- new Checkbox( { label: 'Disabled', disabled: true, checked: true } ),
190
- ]}),
191
- new HBox({ content: [
192
- new Switch( { label: 'Unchecked', checked: false } ),
193
- new Switch( { label: 'Checked', checked: true } ),
194
- new Switch( { label: 'Disabled', checked: true, disabled: true } ),
195
- ]}),
196
- ]}),
197
- new HBox( {content: [
198
- new Listbox( {
199
- width: 250,
200
- height: 150,
201
- items
202
- }),
203
- new Listbox( {
204
- width: 250,
205
- height: 150,
206
- items,
207
- disabled: true,
208
- })
209
- ]}),
210
- new Treeview( {
211
- items: tree_items,
212
- height: 150,
213
- }),
214
- new Header( {
215
- items: [
216
- { title: "Column ", name: "a1" },
217
- { title: "Column 66%", name: "a2", width: -2 },
218
- { title: "Column 33%", name: "a3", width: -1 },
219
- ]
220
- } ),
221
- ]}),
222
- new Panel( {
223
- title: "Panel",
224
- icon: def_icon,
225
- width: 510,
226
- content: [
227
- new TextEdit( { labelWidth: 90, label: "Login", value: "hello", required: true, disabled: true } ),
228
- new TextEdit( { labelWidth: 90, label: "Password", value: "world", type: "password", inputGadgets: [
229
- new Button( { icon: def_icon })
230
- ] } ),
231
- new TextEdit( { labelWidth: 90, label: "Email", value: "", type: "email", placeholder: "select your email contact" } ),
232
- new TextArea( { label: "Demo", height: 140, tooltip: "This is a small tooltip" } ),
233
- new Combobox( { label: 'ComboBox', items }),
234
- new Combobox( { label: 'Readonly', items, readonly: true }),
235
- new Combobox( { label: 'Disabled', items, disabled: true })
236
- ]
237
- }),
238
- new Panel( {
239
- title: "Another panel",
240
- width: 610,
241
- content: [
242
- new Slider( {min: 0, max: 100, step: 10, value: 50 } ),
243
- new Progress( { min: 0, max: 100, value: 45, cls: "indeterm" } ),
244
- new BtnGroup( { cls: "x4flex", items: [ new Label({text:"group"} ), "ok","cancel","yes","no","-","retry","abort",new Button({cls:"danger",label:"custom"})]}),
245
- new HBox( { content: [
246
- new Image( { src:"https://raw.githubusercontent.com/mantinedev/mantine/master/.demo/images/bg-7.png", lazy: true, width: 250, height: "100%", fit: "contain", position: "50% 50%", alt: "an image" } ),
247
- new ColorPicker( { color: "red", } ),
248
- ]}),
249
- new ColorInput( { color: "red", } ),
250
- new Rating( { value: 3 } ),
251
- new SvgComponent( { svg: svg_builder, id: "", viewbox: "0 0 90 90", width: 90, height: 90, style: { margin: '16px'} } ),
252
-
253
- new HBox( { content: [
254
- new Button( { label:'Dialog...', click: ( ) => dialog.display() } ),
255
- new Button( { label:'Message...', click: ( ) => {MessageBox.show( unsafeHtml( '<b>Care</b><br/>You will delete <i>all data</i>.' ) ) } } ),
256
- new Button( { label:'Notification...', click: ( ) => { new Notification( { mode: "success", text: "Modification saved", title: "Backup" } ).display( 5 ) } } ),
257
- ]}),
258
- ]
259
- }),
260
- new Panel( {
261
- title: "Another panel",
262
- width: 410,
263
- content: [
264
- new Calendar( { } ),
265
- ]
266
- }),
267
- new Tabs( {
268
-
269
- width: 500,
270
- height: 200,
271
-
272
- default: "page1",
273
- items: [
274
- { name: "page1", title: "Tab 1", icon: def_icon, tab: (<Label><h4>tab 1 content</h4><p>lorem ipsum</p></Label>) },
275
- { name: "page2", title: "Tab 2", icon: def_icon, tab: (<Label><h4>tab 2 content</h4><p>ipsum lorem</p></Label>) },
276
- { name: "page3", title: "Tab 3", tab: (<Label><h4>tab 3 content</h4><p>ipsum ++</p></Label>) },
277
- ]
278
- })
279
- ]
280
- } );
281
-
282
- const body = wrapDOM( document.body );
283
- body.appendContent( t );
284
- body.addClass( "fit" );
285
- body.addDOMEvent( "contextmenu", ( ev ) => { testMenu(ev) } );
286
- }
287
-
288
- function waitFontLoading(name: string) {
289
-
290
- // tip for waiting font loading:
291
- // by default, body is created invisible ((opacity = 0)
292
- // we create a div inside with the font we need to wait the loading
293
- // as soon as the font is loaded, it's size will change, the browser end font loading
294
- // we can remove the div.
295
- // pitfall: if the font is already loaded, ne never end.
296
- // @review that
297
-
298
- let ct = document.createElement('div');
299
-
300
- ct.style.position = 'absolute';
301
- ct.style.visibility = 'hidden';
302
- ct.innerText = 'X';
303
-
304
- document.body.appendChild(ct);
305
-
306
- return new Promise<void>((resolve) => {
307
-
308
- //let irc = ct.getBoundingClientRect();
309
- const initialWidth = ct.offsetWidth;
310
-
311
- let tm = setInterval(() => {
312
-
313
- const newWidth = ct.offsetWidth;
314
- if (newWidth!=initialWidth ) {
315
- clearInterval(tm);
316
- document.body.removeChild(ct);
317
- resolve();
318
- }
319
- }, 0);
320
- });
321
- }
322
-
323
- waitFontLoading( "montserrat" ).then( main );
1
+ /**
2
+ * ___ ___ __
3
+ * \ \/ / / _
4
+ * \ / /_| |_
5
+ * / \____ _|
6
+ * /__/\__\ |_|
7
+ *
8
+ * DEMO FILE
9
+ *
10
+ **/
11
+
12
+ import { wrapDOM, Component } from "../src/core/component.ts";
13
+ import { unsafeHtml } from '../src/core/core_tools.js'
14
+ import { SvgBuilder, SvgComponent } from '../src/core/core_svg.js'
15
+
16
+ import { Button } from "../src/components/button/button.js"
17
+ import { Label } from "../src/components/label/label.js"
18
+ import { Checkbox } from "../src/components/checkbox/checkbox.js"
19
+ import { HBox, VBox } from "../src/components/boxes/boxes.js"
20
+
21
+ import { Listbox, ListItem } from '../src/components/listbox/listbox.js'
22
+ import { Panel } from '../src/components/panel/panel.js'
23
+ import { TextEdit } from '../src/components/textedit/textedit.js'
24
+ import { TextArea } from '../src/components/textarea/textarea.js'
25
+ import { Switch } from '../src/components/switch/switch.js'
26
+ import { Combobox } from '../src/components/combobox/combobox.js'
27
+ import { Slider } from '../src/components/slider/slider.js'
28
+ import { Progress } from '../src/components/progress/progress.js'
29
+ import { BtnGroup } from '../src/components/btngroup/btngroup.js'
30
+ import { Image } from '../src/components/image/image.js'
31
+ import { ColorInput } from '../src/components/colorinput/colorinput.js'
32
+ import { ColorPicker } from '../src/components/colorpicker/colorpicker.js'
33
+ import { Menu } from '../src/components/menu/menu.js'
34
+ import { initTooltips } from '../src/components/tooltips/tooltips.js'
35
+ import { Treeview, TreeItem } from '../src/components/treeview/treeview.js'
36
+ import { Dialog } from '../src/components/dialog/dialog.js'
37
+ import { Form } from '../src/components/form/form.js'
38
+ import { MessageBox } from '../src/components/messages/messages.js'
39
+ import { Calendar } from '../src/components/calendar/calendar.js'
40
+ import { Notification } from '../src/components/notification/notification.js'
41
+ import { Header } from '../src/components/header/header.js'
42
+ import { Tabs } from '../src/components/tabs/tabs.js'
43
+ import { Rating } from '../src/components/rating/rating.js'
44
+
45
+ import "@fontsource/montserrat"
46
+ import "./main.scss"
47
+
48
+ import def_icon from "./assets/house-light.svg";
49
+
50
+
51
+ function main( ) {
52
+
53
+ initTooltips( );
54
+
55
+ const testMenu = ( ev: MouseEvent ) => {
56
+ const sub = new Menu( { items: [
57
+ "Sub menu 1",
58
+ { text: "sub 1-1" }
59
+ ]
60
+ })
61
+
62
+ const sub3 = new Menu( { items: [
63
+ "Sub menu 3",
64
+ { text: "sub 3-1" }
65
+ ]
66
+ })
67
+
68
+ const sub2 = new Menu( { items: [
69
+ "Sub menu 2",
70
+ { text: "sub 2-1" },
71
+ { text: "menu e", menu: sub3 }
72
+ ]
73
+ })
74
+
75
+ const pop = new Menu( {items: [
76
+ "Title",
77
+ { text: "menu a", click: null, icon: def_icon },
78
+ "-",
79
+ { text: "menu b", click: null },
80
+ { text: "menu c", click: null, disabled: true },
81
+ "-",
82
+ { text: "menu d", menu: sub },
83
+ { text: "menu e", menu: sub2 },
84
+ ]
85
+ });
86
+
87
+ pop.displayAt( ev.pageX, ev.pageY );
88
+ ev.stopPropagation( );
89
+ ev.preventDefault( );
90
+ }
91
+
92
+ const items: ListItem[] = [
93
+ { id: 1, text: "Item 1" },
94
+ { id: 2, text: "Item 2" },
95
+ { id: 3, text: "Item 3" },
96
+ { id: 4, text: "Item 4" },
97
+ { id: 5, text: "Item 5" },
98
+ { id: 6, text: "Item 6" },
99
+ ];
100
+
101
+ const tree_items: TreeItem[] = [
102
+ { id: 1, text: "root", open: true, children: [
103
+ { id: 2, text: "folder 1", children: [
104
+ { id: 3, text: "folder 1.1", children: [
105
+ { id: 4, text: "value 1.1" },
106
+ { id: 5, text: "value 1.2", iconId: def_icon },
107
+ { id: 6, text: "value 1.3" }
108
+ ] }
109
+ ]},
110
+ { id: 10, text: "folder 2", open: true, children: [
111
+ { id: 11, text: "folder 2.1", open: true, children: [
112
+ { id: 12, text: "value 2.1" },
113
+ { id: 13, text: "value 2.2" },
114
+ { id: 14, text: "value 2.3" }
115
+ ] }
116
+ ]}
117
+ ]}
118
+ ]
119
+
120
+ const dialog = new Dialog( {
121
+ title: "Dialog",
122
+ modal: true,
123
+ movable: true,
124
+ sizable: true,
125
+ closable: true,
126
+ buttons: ['ok','cancel'],
127
+ form: new Form( {
128
+ content: [
129
+ new Label( { cls: "x4flex", text: unsafeHtml("<h1>Example dialog</h1><p>This dialog is <i>resizable</i>...") } ),
130
+ new TextEdit( { label: "title", value: "" } ),
131
+ ]
132
+ }),
133
+ });
134
+
135
+ const svg_builder = new SvgBuilder( );
136
+
137
+ svg_builder
138
+ .ellipse( 45, 45, 40 )
139
+ .stroke( "#ccc", 5 )
140
+ .fill( "transparent" );
141
+
142
+ svg_builder.path( )
143
+ .arc( 45, 45, 40, 0, 30*360/100 )
144
+ .stroke( "var( --accent-background )", 5 )
145
+ .fill( "none" )
146
+ .setAttr("tooltip","test")
147
+ .strokeCap( "round" )
148
+ .addDOMEvent( "mouseenter", ( ev ) => {
149
+ console.log( ev.target );
150
+ (ev.target as SVGElement).setAttribute( "stroke-width", "10px" );
151
+ })
152
+ .addDOMEvent( "mouseleave", ( ev ) => {
153
+ console.log( ev.target );
154
+ (ev.target as SVGElement).setAttribute( "stroke-width", "5px" );
155
+ });
156
+
157
+ svg_builder.text( 45, 42, "30%" )
158
+ .textAlign( "center" )
159
+ .verticalAlign( "baseline" )
160
+ .fontSize( "150%" )
161
+ .fontWeight( "bold" );
162
+
163
+ svg_builder.text( 45, 80, "custom control" )
164
+ .fontSize( "10px" )
165
+ .textAlign( "center" )
166
+
167
+ const t = new HBox( {
168
+ style: {
169
+ alignItems: "start",
170
+ gap: "8px",
171
+ flexWrap: "wrap",
172
+ },
173
+ content: [
174
+ new Panel( {
175
+ title: "Panel",
176
+ icon: def_icon,
177
+ width: 510,
178
+ content: [
179
+ new Label( { text: "label", icon: def_icon } ),
180
+ new HBox( { content: [
181
+ new Button( { label:'OK', icon:def_icon } ),
182
+ new Button( { label:'OK', icon:def_icon, disabled: true } ),
183
+ new Button( { cls: "outline", label:'OK', icon:def_icon } ),
184
+ ]}),
185
+ new VBox({ content: [
186
+ new HBox({ content: [
187
+ new Checkbox( { label: 'Unchecked', checked: false } ),
188
+ new Checkbox( { label: 'Checked', checked: true } ),
189
+ new Checkbox( { label: 'Disabled', disabled: true, checked: true } ),
190
+ ]}),
191
+ new HBox({ content: [
192
+ new Switch( { label: 'Unchecked', checked: false } ),
193
+ new Switch( { label: 'Checked', checked: true } ),
194
+ new Switch( { label: 'Disabled', checked: true, disabled: true } ),
195
+ ]}),
196
+ ]}),
197
+ new HBox( {content: [
198
+ new Listbox( {
199
+ width: 250,
200
+ height: 150,
201
+ items
202
+ }),
203
+ new Listbox( {
204
+ width: 250,
205
+ height: 150,
206
+ items,
207
+ disabled: true,
208
+ })
209
+ ]}),
210
+ new Treeview( {
211
+ items: tree_items,
212
+ height: 150,
213
+ }),
214
+ new Header( {
215
+ items: [
216
+ { title: "Column ", name: "a1" },
217
+ { title: "Column 66%", name: "a2", width: -2 },
218
+ { title: "Column 33%", name: "a3", width: -1 },
219
+ ]
220
+ } ),
221
+ ]}),
222
+ new Panel( {
223
+ title: "Panel",
224
+ icon: def_icon,
225
+ width: 510,
226
+ content: [
227
+ new TextEdit( { labelWidth: 90, label: "Login", value: "hello", required: true, disabled: true } ),
228
+ new TextEdit( { labelWidth: 90, label: "Password", value: "world", type: "password", inputGadgets: [
229
+ new Button( { icon: def_icon })
230
+ ] } ),
231
+ new TextEdit( { labelWidth: 90, label: "Email", value: "", type: "email", placeholder: "select your email contact" } ),
232
+ new TextArea( { label: "Demo", height: 140, tooltip: "This is a small tooltip" } ),
233
+ new Combobox( { label: 'ComboBox', items }),
234
+ new Combobox( { label: 'Readonly', items, readonly: true }),
235
+ new Combobox( { label: 'Disabled', items, disabled: true })
236
+ ]
237
+ }),
238
+ new Panel( {
239
+ title: "Another panel",
240
+ width: 610,
241
+ content: [
242
+ new Slider( {min: 0, max: 100, step: 10, value: 50 } ),
243
+ new Progress( { min: 0, max: 100, value: 45, cls: "indeterm" } ),
244
+ new BtnGroup( { cls: "x4flex", items: [ new Label({text:"group"} ), "ok","cancel","yes","no","-","retry","abort",new Button({cls:"danger",label:"custom"})]}),
245
+ new HBox( { content: [
246
+ new Image( { src:"https://raw.githubusercontent.com/mantinedev/mantine/master/.demo/images/bg-7.png", lazy: true, width: 250, height: "100%", fit: "contain", position: "50% 50%", alt: "an image" } ),
247
+ new ColorPicker( { color: "red", } ),
248
+ ]}),
249
+ new ColorInput( { color: "red", } ),
250
+ new Rating( { value: 3 } ),
251
+ new SvgComponent( { svg: svg_builder, id: "", viewbox: "0 0 90 90", width: 90, height: 90, style: { margin: '16px'} } ),
252
+
253
+ new HBox( { content: [
254
+ new Button( { label:'Dialog...', click: ( ) => dialog.show() } ),
255
+ new Button( { label:'Message...', click: ( ) => {MessageBox.show( unsafeHtml( '<b>Care</b><br/>You will delete <i>all data</i>.' ) ) } } ),
256
+ new Button( { label:'Notification...', click: ( ) => { new Notification( { mode: "success", text: "Modification saved", title: "Backup" } ).display( 5 ) } } ),
257
+ ]}),
258
+ ]
259
+ }),
260
+ new Panel( {
261
+ title: "Another panel",
262
+ width: 410,
263
+ content: [
264
+ new Calendar( { } ),
265
+ ]
266
+ }),
267
+ new Tabs( {
268
+
269
+ width: 500,
270
+ height: 200,
271
+
272
+ default: "page1",
273
+ items: [
274
+ { name: "page1", title: "Tab 1", icon: def_icon, content: new Label( { text: unsafeHtml(`<h4>tab 1 content</h4><p>lorem ipsum</p>`)}) },
275
+ { name: "page2", title: "Tab 2", icon: def_icon, content: new Label( { text: unsafeHtml(`<h4>tab 2 content</h4><p>ipsum lorem</p>` )}) },
276
+ { name: "page3", title: "Tab 3", content: new Label( { text: unsafeHtml(`<h4>tab 3 content</h4><p>ipsum ++</p>` )}) },
277
+ ]
278
+ })
279
+ ]
280
+ } );
281
+
282
+ const body = wrapDOM( document.body );
283
+ body.appendContent( t );
284
+ body.addClass( "fit" );
285
+ body.addDOMEvent( "contextmenu", ( ev ) => { testMenu(ev) } );
286
+ }
287
+
288
+ function waitFontLoading(name: string) {
289
+
290
+ // tip for waiting font loading:
291
+ // by default, body is created invisible ((opacity = 0)
292
+ // we create a div inside with the font we need to wait the loading
293
+ // as soon as the font is loaded, it's size will change, the browser end font loading
294
+ // we can remove the div.
295
+ // pitfall: if the font is already loaded, ne never end.
296
+ // @review that
297
+
298
+ let ct = document.createElement('div');
299
+
300
+ ct.style.position = 'absolute';
301
+ ct.style.visibility = 'hidden';
302
+ ct.innerText = 'X';
303
+
304
+ document.body.appendChild(ct);
305
+
306
+ return new Promise<void>((resolve) => {
307
+
308
+ //let irc = ct.getBoundingClientRect();
309
+ const initialWidth = ct.offsetWidth;
310
+
311
+ let tm = setInterval(() => {
312
+
313
+ const newWidth = ct.offsetWidth;
314
+ if (newWidth!=initialWidth ) {
315
+ clearInterval(tm);
316
+ document.body.removeChild(ct);
317
+ resolve();
318
+ }
319
+ }, 0);
320
+ });
321
+ }
322
+
323
+ waitFontLoading( "montserrat" ).then( main );
324
+ //main( );