x4js 1.6.5 → 2.0.2

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 (292) hide show
  1. package/README.md +3 -14
  2. package/lib/README.txt +3 -14
  3. package/lib/esm/x4.css +1 -0
  4. package/lib/esm/x4.js +1 -0
  5. package/lib/src/assets/house-light.svg +1 -0
  6. package/lib/src/assets/radio.svg +4 -0
  7. package/lib/src/components/base.scss +26 -0
  8. package/lib/src/components/boxes/boxes.module.scss +37 -0
  9. package/lib/src/components/boxes/boxes.ts +125 -0
  10. package/lib/src/components/btngroup/btngroup.module.scss +29 -0
  11. package/lib/src/components/btngroup/btngroup.ts +106 -0
  12. package/lib/src/components/button/button.module.scss +154 -0
  13. package/lib/src/components/button/button.ts +117 -0
  14. package/lib/src/components/calendar/calendar-check-sharp-light.svg +1 -0
  15. package/lib/src/components/calendar/calendar.module.scss +163 -0
  16. package/lib/src/{calendar.ts → components/calendar/calendar.ts} +81 -83
  17. package/lib/src/components/calendar/chevron-left-sharp-light.svg +1 -0
  18. package/lib/src/components/calendar/chevron-right-sharp-light.svg +1 -0
  19. package/lib/src/components/checkbox/check.svg +4 -0
  20. package/lib/src/components/checkbox/checkbox.module.scss +142 -0
  21. package/lib/src/components/checkbox/checkbox.ts +125 -0
  22. package/lib/src/components/colorinput/colorinput.module.scss +65 -0
  23. package/lib/src/components/colorinput/colorinput.ts +88 -0
  24. package/lib/src/components/colorinput/crosshairs-simple-sharp-light.svg +1 -0
  25. package/lib/src/components/colorpicker/colorpicker.module.scss +133 -0
  26. package/lib/src/components/colorpicker/colorpicker.ts +477 -0
  27. package/lib/src/components/combobox/combobox.module.scss +121 -0
  28. package/lib/src/components/combobox/combobox.ts +190 -0
  29. package/lib/src/components/combobox/updown.svg +4 -0
  30. package/lib/src/components/dialog/dialog.module.scss +71 -0
  31. package/lib/src/components/dialog/dialog.ts +91 -0
  32. package/lib/src/components/dialog/xmark-sharp-light.svg +1 -0
  33. package/lib/src/components/form/form.module.scss +34 -0
  34. package/lib/src/components/form/form.ts +36 -0
  35. package/lib/src/components/header/header.module.scss +40 -0
  36. package/lib/src/components/header/header.ts +124 -0
  37. package/lib/src/components/icon/icon.module.scss +30 -0
  38. package/lib/src/components/icon/icon.ts +134 -0
  39. package/lib/src/components/image/image.module.scss +21 -0
  40. package/lib/src/components/image/image.ts +67 -0
  41. package/lib/src/components/input/input.module.scss +69 -0
  42. package/lib/src/components/input/input.ts +274 -0
  43. package/lib/src/components/label/label.module.scss +52 -0
  44. package/lib/src/components/label/label.ts +55 -0
  45. package/lib/src/components/listbox/listbox.module.scss +103 -0
  46. package/lib/src/components/listbox/listbox.ts +427 -0
  47. package/lib/src/components/menu/caret-right-solid.svg +1 -0
  48. package/lib/src/components/menu/menu.module.scss +108 -0
  49. package/lib/src/components/menu/menu.ts +168 -0
  50. package/lib/src/components/messages/circle-exclamation.svg +1 -0
  51. package/lib/src/components/messages/messages.module.scss +47 -0
  52. package/lib/src/components/messages/messages.ts +64 -0
  53. package/lib/src/components/normalize.scss +386 -0
  54. package/lib/src/components/notification/circle-check-solid.svg +1 -0
  55. package/lib/src/components/notification/circle-exclamation-solid.svg +1 -0
  56. package/lib/src/components/notification/circle-notch-light.svg +1 -0
  57. package/lib/src/components/notification/notification.module.scss +82 -0
  58. package/lib/src/components/notification/notification.ts +108 -0
  59. package/lib/src/components/notification/xmark-sharp-light.svg +1 -0
  60. package/lib/src/components/panel/panel.module.scss +48 -0
  61. package/lib/src/components/panel/panel.ts +57 -0
  62. package/lib/src/components/popup/popup.module.scss +43 -0
  63. package/lib/src/components/popup/popup.ts +395 -0
  64. package/lib/src/components/progress/progress.module.scss +57 -0
  65. package/lib/src/components/progress/progress.ts +43 -0
  66. package/lib/src/components/rating/rating.module.scss +23 -0
  67. package/lib/src/components/rating/rating.ts +125 -0
  68. package/lib/src/components/rating/star-sharp-light.svg +1 -0
  69. package/lib/src/components/rating/star-sharp-solid.svg +1 -0
  70. package/lib/src/components/shared.scss +76 -0
  71. package/lib/src/components/sizers/sizer.module.scss +90 -0
  72. package/lib/src/components/sizers/sizer.ts +120 -0
  73. package/lib/src/components/slider/slider.module.scss +71 -0
  74. package/lib/src/components/slider/slider.ts +143 -0
  75. package/lib/src/components/switch/switch.module.scss +127 -0
  76. package/lib/src/components/switch/switch.ts +56 -0
  77. package/lib/src/components/tabs/tabs.module.scss +46 -0
  78. package/lib/src/components/tabs/tabs.ts +157 -0
  79. package/lib/src/components/textarea/textarea.module.scss +59 -0
  80. package/lib/src/components/textarea/textarea.ts +54 -0
  81. package/lib/src/components/textedit/textedit.module.scss +114 -0
  82. package/lib/src/components/textedit/textedit.ts +82 -0
  83. package/lib/src/components/themes.scss +77 -0
  84. package/lib/src/components/tooltips/circle-info-sharp-light.svg +1 -0
  85. package/lib/src/components/tooltips/tooltips.scss +51 -0
  86. package/lib/src/components/tooltips/tooltips.ts +103 -0
  87. package/lib/src/components/treeview/chevron-down-light.svg +1 -0
  88. package/lib/src/components/treeview/treeview.module.scss +116 -0
  89. package/lib/src/components/treeview/treeview.ts +403 -0
  90. package/lib/src/components/viewport/viewport.module.scss +25 -0
  91. package/lib/src/components/viewport/viewport.ts +38 -0
  92. package/lib/src/core/component.ts +979 -0
  93. package/lib/src/core/core_colors.ts +250 -0
  94. package/lib/src/{dom_events.ts → core/core_dom.ts} +195 -39
  95. package/lib/src/{drag_manager.ts → core/core_dragdrop.ts} +29 -44
  96. package/lib/src/core/core_element.ts +98 -0
  97. package/lib/src/core/core_events.ts +149 -0
  98. package/lib/src/{i18n.ts → core/core_i18n.ts} +43 -42
  99. package/lib/src/{router.ts → core/core_router.ts} +27 -40
  100. package/lib/src/core/core_styles.ts +215 -0
  101. package/lib/src/core/core_svg.ts +550 -0
  102. package/lib/src/core/core_tools.ts +673 -0
  103. package/lib/src/demo/assets/house-light.svg +1 -0
  104. package/lib/src/demo/assets/radio.svg +4 -0
  105. package/lib/src/demo/index.html +12 -0
  106. package/lib/src/demo/main.scss +21 -0
  107. package/lib/src/demo/main.tsx +323 -0
  108. package/lib/src/main.scss +21 -0
  109. package/lib/src/main.tsx +323 -0
  110. package/lib/src/x4.scss +19 -0
  111. package/lib/src/x4.ts +60 -0
  112. package/lib/types/x4.d.ts +26548 -0
  113. package/package.json +68 -59
  114. package/scripts/build.mjs +351 -0
  115. package/scripts/prepack.mjs +43 -0
  116. package/src/components/base.scss +26 -0
  117. package/src/components/boxes/boxes.module.scss +37 -0
  118. package/src/components/boxes/boxes.ts +125 -0
  119. package/src/components/btngroup/btngroup.module.scss +29 -0
  120. package/src/components/btngroup/btngroup.ts +106 -0
  121. package/src/components/button/button.module.scss +154 -0
  122. package/src/components/button/button.ts +117 -0
  123. package/src/components/calendar/calendar-check-sharp-light.svg +1 -0
  124. package/src/components/calendar/calendar.module.scss +163 -0
  125. package/src/components/calendar/calendar.ts +326 -0
  126. package/src/components/calendar/chevron-left-sharp-light.svg +1 -0
  127. package/src/components/calendar/chevron-right-sharp-light.svg +1 -0
  128. package/src/components/checkbox/check.svg +4 -0
  129. package/src/components/checkbox/checkbox.module.scss +142 -0
  130. package/src/components/checkbox/checkbox.ts +125 -0
  131. package/src/components/colorinput/colorinput.module.scss +65 -0
  132. package/src/components/colorinput/colorinput.ts +88 -0
  133. package/src/components/colorinput/crosshairs-simple-sharp-light.svg +1 -0
  134. package/src/components/colorpicker/colorpicker.module.scss +133 -0
  135. package/src/components/colorpicker/colorpicker.ts +477 -0
  136. package/src/components/combobox/combobox.module.scss +121 -0
  137. package/src/components/combobox/combobox.ts +190 -0
  138. package/src/components/combobox/updown.svg +4 -0
  139. package/src/components/dialog/dialog.module.scss +71 -0
  140. package/src/components/dialog/dialog.ts +91 -0
  141. package/src/components/dialog/xmark-sharp-light.svg +1 -0
  142. package/src/components/form/form.module.scss +34 -0
  143. package/src/components/form/form.ts +36 -0
  144. package/src/components/header/header.module.scss +40 -0
  145. package/src/components/header/header.ts +124 -0
  146. package/src/components/icon/icon.module.scss +30 -0
  147. package/src/components/icon/icon.ts +134 -0
  148. package/src/components/image/image.module.scss +21 -0
  149. package/src/components/image/image.ts +67 -0
  150. package/src/components/input/input.module.scss +69 -0
  151. package/src/components/input/input.ts +274 -0
  152. package/src/components/label/label.module.scss +52 -0
  153. package/src/components/label/label.ts +55 -0
  154. package/src/components/listbox/listbox.module.scss +103 -0
  155. package/src/components/listbox/listbox.ts +427 -0
  156. package/src/components/menu/caret-right-solid.svg +1 -0
  157. package/src/components/menu/menu.module.scss +108 -0
  158. package/src/components/menu/menu.ts +168 -0
  159. package/src/components/messages/circle-exclamation.svg +1 -0
  160. package/src/components/messages/messages.module.scss +47 -0
  161. package/src/components/messages/messages.ts +64 -0
  162. package/src/components/normalize.scss +386 -0
  163. package/src/components/notification/circle-check-solid.svg +1 -0
  164. package/src/components/notification/circle-exclamation-solid.svg +1 -0
  165. package/src/components/notification/circle-notch-light.svg +1 -0
  166. package/src/components/notification/notification.module.scss +82 -0
  167. package/src/components/notification/notification.ts +108 -0
  168. package/src/components/notification/xmark-sharp-light.svg +1 -0
  169. package/src/components/panel/panel.module.scss +48 -0
  170. package/src/components/panel/panel.ts +57 -0
  171. package/src/components/popup/popup.module.scss +43 -0
  172. package/src/components/popup/popup.ts +395 -0
  173. package/src/components/progress/progress.module.scss +57 -0
  174. package/src/components/progress/progress.ts +43 -0
  175. package/src/components/rating/rating.module.scss +23 -0
  176. package/src/components/rating/rating.ts +125 -0
  177. package/src/components/rating/star-sharp-light.svg +1 -0
  178. package/src/components/rating/star-sharp-solid.svg +1 -0
  179. package/src/components/shared.scss +76 -0
  180. package/src/components/sizers/sizer.module.scss +90 -0
  181. package/src/components/sizers/sizer.ts +120 -0
  182. package/src/components/slider/slider.module.scss +71 -0
  183. package/src/components/slider/slider.ts +143 -0
  184. package/src/components/switch/switch.module.scss +127 -0
  185. package/src/components/switch/switch.ts +56 -0
  186. package/src/components/tabs/tabs.module.scss +46 -0
  187. package/src/components/tabs/tabs.ts +157 -0
  188. package/src/components/textarea/textarea.module.scss +59 -0
  189. package/src/components/textarea/textarea.ts +54 -0
  190. package/src/components/textedit/textedit.module.scss +114 -0
  191. package/src/components/textedit/textedit.ts +82 -0
  192. package/src/components/themes.scss +77 -0
  193. package/src/components/tooltips/circle-info-sharp-light.svg +1 -0
  194. package/src/components/tooltips/tooltips.scss +51 -0
  195. package/src/components/tooltips/tooltips.ts +103 -0
  196. package/src/components/treeview/chevron-down-light.svg +1 -0
  197. package/src/components/treeview/treeview.module.scss +116 -0
  198. package/src/components/treeview/treeview.ts +403 -0
  199. package/src/components/viewport/viewport.module.scss +25 -0
  200. package/src/components/viewport/viewport.ts +38 -0
  201. package/src/core/component.ts +979 -0
  202. package/src/core/core_colors.ts +250 -0
  203. package/src/core/core_dom.ts +471 -0
  204. package/src/core/core_dragdrop.ts +201 -0
  205. package/src/core/core_element.ts +98 -0
  206. package/src/core/core_events.ts +149 -0
  207. package/src/core/core_i18n.ts +377 -0
  208. package/src/core/core_router.ts +221 -0
  209. package/src/core/core_styles.ts +215 -0
  210. package/src/core/core_svg.ts +550 -0
  211. package/src/core/core_tools.ts +673 -0
  212. package/src/demo/assets/house-light.svg +1 -0
  213. package/src/demo/assets/radio.svg +4 -0
  214. package/src/demo/index.html +12 -0
  215. package/src/demo/main.scss +21 -0
  216. package/src/demo/main.tsx +323 -0
  217. package/src/x4.scss +19 -0
  218. package/src/x4.ts +60 -0
  219. package/tsconfig.json +14 -0
  220. package/types/scss.d.ts +4 -0
  221. package/types/svg.d.ts +4 -0
  222. package/types/x4react.d.ts +9 -0
  223. package/lib/changelog.txt +0 -23
  224. package/lib/cjs/x4js.js +0 -39
  225. package/lib/cjs/x4js.js.map +0 -7
  226. package/lib/esm/x4js.mjs +0 -15972
  227. package/lib/esm/x4js.mjs.map +0 -7
  228. package/lib/licence.md +0 -21
  229. package/lib/src/MIT-license.md +0 -14
  230. package/lib/src/action.ts +0 -88
  231. package/lib/src/alpha.jpg +0 -0
  232. package/lib/src/app_sockets.ts +0 -81
  233. package/lib/src/application.ts +0 -262
  234. package/lib/src/autocomplete.ts +0 -232
  235. package/lib/src/base64.ts +0 -166
  236. package/lib/src/base_component.ts +0 -152
  237. package/lib/src/button.ts +0 -355
  238. package/lib/src/canvas.ts +0 -510
  239. package/lib/src/cardview.ts +0 -228
  240. package/lib/src/checkbox.ts +0 -188
  241. package/lib/src/color.ts +0 -752
  242. package/lib/src/colorpicker.ts +0 -1649
  243. package/lib/src/combobox.ts +0 -512
  244. package/lib/src/component.ts +0 -2367
  245. package/lib/src/copyright.txt +0 -27
  246. package/lib/src/datastore.ts +0 -1302
  247. package/lib/src/dialog.ts +0 -656
  248. package/lib/src/drawtext.ts +0 -355
  249. package/lib/src/fileupload.ts +0 -213
  250. package/lib/src/form.ts +0 -413
  251. package/lib/src/formatters.ts +0 -105
  252. package/lib/src/gridview.ts +0 -1185
  253. package/lib/src/icon.ts +0 -362
  254. package/lib/src/image.ts +0 -225
  255. package/lib/src/index.ts +0 -89
  256. package/lib/src/input.ts +0 -297
  257. package/lib/src/label.ts +0 -153
  258. package/lib/src/layout.ts +0 -442
  259. package/lib/src/link.ts +0 -86
  260. package/lib/src/listview.ts +0 -765
  261. package/lib/src/md5.ts +0 -438
  262. package/lib/src/menu.ts +0 -425
  263. package/lib/src/messagebox.ts +0 -224
  264. package/lib/src/panel.ts +0 -86
  265. package/lib/src/popup.ts +0 -494
  266. package/lib/src/property_editor.ts +0 -337
  267. package/lib/src/radiobtn.ts +0 -197
  268. package/lib/src/rating.ts +0 -135
  269. package/lib/src/request.ts +0 -300
  270. package/lib/src/settings.ts +0 -77
  271. package/lib/src/sidebarview.ts +0 -108
  272. package/lib/src/spreadsheet.ts +0 -1449
  273. package/lib/src/styles.ts +0 -343
  274. package/lib/src/svgcomponent.ts +0 -592
  275. package/lib/src/tabbar.ts +0 -151
  276. package/lib/src/tabview.ts +0 -110
  277. package/lib/src/textarea.ts +0 -235
  278. package/lib/src/textedit.ts +0 -533
  279. package/lib/src/toaster.ts +0 -80
  280. package/lib/src/tools.ts +0 -1473
  281. package/lib/src/tooltips.ts +0 -191
  282. package/lib/src/treeview.ts +0 -716
  283. package/lib/src/version.ts +0 -30
  284. package/lib/src/x4.less +0 -2242
  285. package/lib/src/x4dom.ts +0 -57
  286. package/lib/src/x4events.ts +0 -585
  287. package/lib/src/x4js.ts +0 -89
  288. package/lib/src/x4react.ts +0 -90
  289. package/lib/styles/x4.css +0 -1785
  290. package/lib/styles/x4.less +0 -2242
  291. package/lib/types/x4js.d.ts +0 -6728
  292. package/license.md +0 -21
@@ -1,53 +1,41 @@
1
- /**
2
- * ___ ___ __
3
- * \ \/ / / _
4
- * \ / /_| |_
5
- * / \____ _|
6
- * /__/\__\ |_|
7
- *
8
- * @file calendar.ts
9
- * @author Etienne Cochard
10
- *
11
- * Copyright (c) 2019-2023 R-libre ingenierie
12
- *
13
- * Permission is hereby granted, free of charge, to any person obtaining a copy
14
- * of this software and associated documentation files (the "Software"), to deal
15
- * in the Software without restriction, including without limitation the rights
16
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
17
- * of the Software, and to permit persons to whom the Software is furnished to do so,
18
- * subject to the following conditions:
19
- * The above copyright notice and this permission notice shall be included in all copies
20
- * or substantial portions of the Software.
21
- *
22
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
23
- * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
24
- * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
25
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
- **/
29
-
30
- import { x4document } from './x4dom'
31
-
32
- import { Button } from './button';
33
- import { Popup } from './popup';
34
- import { Component, CProps, ContainerEventMap, Flex } from './component'
35
- import { EvChange, EventCallback } from './x4events'
36
- import { Point } from "./tools"
37
-
38
- import { _tr } from './i18n';
39
- import { Label } from './label';
40
- import { HLayout, VLayout } from './layout'
41
- import { date_hash, date_clone, formatIntlDate } from './tools'
42
- import { Menu, MenuItem } from './menu';
43
-
44
-
45
- interface CalendarEventMap extends ContainerEventMap {
1
+ /**
2
+ * ___ ___ __
3
+ * \ \/ / / _
4
+ * \ / /_| |_
5
+ * / \____ _|
6
+ * /__/\__\ |_|
7
+ *
8
+ * @file calendar.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, EvChange, Flex } from '@core/component'
18
+ import { date_clone, date_hash, formatIntlDate, Point, unsafeHtml } from "@core/core_tools"
19
+ import { _tr } from '@core/core_i18n';
20
+ import { EventCallback } from '@core/core_events.js';
21
+
22
+ import { Button } from '../button/button';
23
+ import { Popup } from '../popup/popup';
24
+ import { Label } from '../label/label';
25
+ import { HBox, VBox } from '../boxes/boxes'
26
+ import { Menu, MenuItem } from '../menu/menu';
27
+
28
+ import "./calendar.module.scss"
29
+ import icon_prev from "./chevron-left-sharp-light.svg";
30
+ import icon_today from "./calendar-check-sharp-light.svg";
31
+ import icon_next from "./chevron-right-sharp-light.svg";
32
+
33
+ interface CalendarEventMap extends ComponentEvents {
46
34
  change?: EvChange;
47
35
  }
48
36
 
49
37
 
50
- interface CalendarProps extends CProps<CalendarEventMap> {
38
+ interface CalendarProps extends ComponentProps {
51
39
  date?: Date; // initial date to display
52
40
  minDate?: Date; // minimal date before the user cannot go
53
41
  maxDate?: Date; // maximal date after the user cannot go
@@ -63,7 +51,7 @@ interface CalendarProps extends CProps<CalendarEventMap> {
63
51
  * EventChange ( value = Date )
64
52
  */
65
53
 
66
- export class Calendar extends VLayout<CalendarProps, CalendarEventMap>
54
+ export class Calendar extends VBox<CalendarProps, CalendarEventMap>
67
55
  {
68
56
  private m_date: Date;
69
57
 
@@ -71,12 +59,14 @@ export class Calendar extends VLayout<CalendarProps, CalendarEventMap>
71
59
  super(props);
72
60
 
73
61
  this.mapPropEvents( props, 'change' );
74
- this.m_date = props.date?.clone() ?? new Date();
62
+ this.m_date = props.date ? date_clone( props.date ) : new Date();
63
+
64
+ this._update( );
75
65
  }
76
66
 
77
67
  /** @ignore */
78
68
 
79
- render(props: CalendarProps) {
69
+ private _update( ) {
80
70
 
81
71
  let month_start = date_clone(this.m_date);
82
72
  month_start.setDate(1);
@@ -89,7 +79,8 @@ export class Calendar extends VLayout<CalendarProps, CalendarEventMap>
89
79
  month_start.setDate(-day + 1 + 1);
90
80
  let dte = date_clone(month_start);
91
81
 
92
- let today = this.m_date.hash();
82
+ let selection = date_hash( this.m_date );
83
+ let today = date_hash( new Date() );
93
84
 
94
85
  let month_end = date_clone(this.m_date);
95
86
  month_end.setDate(1);
@@ -98,10 +89,10 @@ export class Calendar extends VLayout<CalendarProps, CalendarEventMap>
98
89
 
99
90
  let end_of_month = date_hash(month_end);
100
91
 
101
- let rows: HLayout[] = [];
92
+ let rows: HBox[] = [];
102
93
 
103
94
  // month selector
104
- let header = new HLayout({
95
+ let header = new HBox({
105
96
  cls: 'month-sel',
106
97
  content: [
107
98
  new Label({
@@ -118,9 +109,10 @@ export class Calendar extends VLayout<CalendarProps, CalendarEventMap>
118
109
  click: () => this._choose('year')
119
110
  }
120
111
  }),
121
- new Flex(),
122
- new Button({ text: '<', click: () => this._next(false) } ),
123
- new Button({ text: '>', click: () => this._next(true) } )
112
+ new Flex( ),
113
+ new Button({ icon: icon_prev, click: () => this._next(false) } ),
114
+ new Button({ icon: icon_today, click: () => this.setDate(new Date()), tooltip: _tr.global.today } ),
115
+ new Button({ icon: icon_next, click: () => this._next(true) } )
124
116
  ]
125
117
  });
126
118
 
@@ -131,19 +123,18 @@ export class Calendar extends VLayout<CalendarProps, CalendarEventMap>
131
123
 
132
124
  // day names
133
125
  // empty week num
134
- day_names.push(new HLayout({
126
+ day_names.push(new HBox({
135
127
  cls: 'weeknum cell',
136
128
  }));
137
129
 
138
130
  for (let d = 0; d < 7; d++) {
139
131
  day_names.push(new Label({
140
132
  cls: 'cell',
141
- flex: 1,
142
133
  text: _tr.global.day_short[(d + 1) % 7]
143
134
  }));
144
135
  }
145
136
 
146
- rows.push(new HLayout({
137
+ rows.push(new HBox({
147
138
  cls: 'week header',
148
139
  content: day_names
149
140
  }));
@@ -155,14 +146,18 @@ export class Calendar extends VLayout<CalendarProps, CalendarEventMap>
155
146
  while (date_hash(dte) <= end_of_month) {
156
147
 
157
148
  let days = [
158
- new HLayout({ cls: 'weeknum cell', content: new Component({ tag: 'span', content: formatIntlDate(dte, 'w') }) })
149
+ new HBox({ cls: 'weeknum cell', content: new Component({ tag: 'span', content: formatIntlDate(dte, 'w') }) })
159
150
  ];
160
151
 
161
152
  // days
162
153
  for (let d = 0; d < 7; d++) {
163
154
 
164
155
  let cls = 'cell day';
165
- if (dte.hash() == today) {
156
+ if (date_hash(dte) == selection) {
157
+ cls += ' selection';
158
+ }
159
+
160
+ if (date_hash(dte) == today) {
166
161
  cls += ' today';
167
162
  }
168
163
 
@@ -171,12 +166,12 @@ export class Calendar extends VLayout<CalendarProps, CalendarEventMap>
171
166
  }
172
167
 
173
168
  const mkItem = ( dte: Date ) => {
174
- return new HLayout({
169
+ return new HBox({
175
170
  cls,
176
171
  flex: 1,
177
172
  content: new Component({
178
- tag: 'span',
179
- content: formatIntlDate(dte, 'd'),
173
+ cls: "text",
174
+ content: unsafeHtml( `<span>${formatIntlDate(dte, 'd')}</span>` ),
180
175
  }),
181
176
  dom_events: {
182
177
  click: () => this.select(dte)
@@ -184,13 +179,13 @@ export class Calendar extends VLayout<CalendarProps, CalendarEventMap>
184
179
  })
185
180
  }
186
181
 
187
- days.push( mkItem( dte.clone() ) );
182
+ days.push( mkItem( date_clone( dte ) ) );
188
183
 
189
184
  dte.setDate(dte.getDate() + 1);
190
185
  first = false;
191
186
  }
192
187
 
193
- rows.push(new HLayout({
188
+ rows.push(new HBox({
194
189
  cls: 'week',
195
190
  flex: 1,
196
191
  content: days
@@ -207,8 +202,8 @@ export class Calendar extends VLayout<CalendarProps, CalendarEventMap>
207
202
 
208
203
  private select(date: Date) {
209
204
  this.m_date = date;
210
- this.emit('change', EvChange(date));
211
- this.update();
205
+ this.fire('change', {value:date} );
206
+ this._update();
212
207
  }
213
208
 
214
209
  /**
@@ -217,7 +212,7 @@ export class Calendar extends VLayout<CalendarProps, CalendarEventMap>
217
212
 
218
213
  private _next(n: boolean) {
219
214
  this.m_date.setMonth(this.m_date.getMonth() + (n ? 1 : -1));
220
- this.update();
215
+ this._update();
221
216
  }
222
217
 
223
218
  /**
@@ -230,22 +225,22 @@ export class Calendar extends VLayout<CalendarProps, CalendarEventMap>
230
225
 
231
226
  if (type == 'month') {
232
227
  for (let m = 0; m < 12; m++) {
233
- items.push(new MenuItem({
228
+ items.push(({
234
229
  text: _tr.global.month_long[m],
235
- click: () => { this.m_date.setMonth(m); this.update(); }
230
+ click: () => { this.m_date.setMonth(m); this._update(); }
236
231
  }));
237
232
  }
238
233
  }
239
234
  else if (type == 'year') {
240
235
 
241
- let min = this.m_props.minDate?.getFullYear() ?? 1900;
242
- let max = this.m_props.maxDate?.getFullYear() ?? 2037;
236
+ let min = this.props.minDate?.getFullYear() ?? 1900;
237
+ let max = this.props.maxDate?.getFullYear() ?? 2037;
243
238
 
244
239
  for (let m = max; m >= min; m--) {
245
- items.push(new MenuItem({
240
+ items.push({
246
241
  text: '' + m,
247
- click: () => { this.m_date.setFullYear(m); this.update(); }
248
- }));
242
+ click: () => { this.m_date.setFullYear(m); this._update(); }
243
+ });
249
244
  }
250
245
  }
251
246
 
@@ -257,19 +252,22 @@ export class Calendar extends VLayout<CalendarProps, CalendarEventMap>
257
252
  menu.displayAt(rc.left, rc.top);
258
253
  }
259
254
 
260
- get date() {
255
+ getDate() {
261
256
  return this.m_date;
262
257
  }
263
258
 
264
- set date(date: Date) {
259
+ setDate(date: Date) {
265
260
  this.m_date = date;
266
- this.update();
261
+ this._update();
267
262
  }
268
263
  }
269
264
 
265
+
266
+
267
+
270
268
  /**
271
269
  * default popup calendar
272
- */
270
+ * /
273
271
 
274
272
  export class PopupCalendar extends Popup {
275
273
 
@@ -308,7 +306,7 @@ export class PopupCalendar extends Popup {
308
306
  this.close();
309
307
  }
310
308
 
311
- /** @ignore */
309
+ / ** @ignore * /
312
310
  show(modal?: boolean, at?: Point ) {
313
311
  x4document.addEventListener('mousedown', this._handleClick);
314
312
  if( at ) {
@@ -319,10 +317,10 @@ export class PopupCalendar extends Popup {
319
317
  }
320
318
  }
321
319
 
322
- /** @ignore */
320
+ / ** @ignore * /
323
321
  close() {
324
322
  x4document.removeEventListener('mousedown', this._handleClick);
325
323
  super.close();
326
324
  }
327
-
328
- }
325
+ }
326
+ */
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512" fill="currentColor"><!--!Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.--><path d="M9.4 256l11.3-11.3 192-192L224 41.4 246.6 64 235.3 75.3 54.6 256 235.3 436.7 246.6 448 224 470.6l-11.3-11.3-192-192L9.4 256z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512" fill="currentColor"><!--!Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.--><path d="M310.6 256l-11.3 11.3-192 192L96 470.6 73.4 448l11.3-11.3L265.4 256 84.7 75.3 73.4 64 96 41.4l11.3 11.3 192 192L310.6 256z"/></svg>
@@ -0,0 +1,4 @@
1
+ <svg viewBox="0 0 10 7" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
2
+ <path d="M4 4.586L1.707 2.293A1 1 0 1 0 .293 3.707l3 3a.997.997 0 0 0 1.414 0l5-5A1 1 0 1 0 8.293.293L4 4.586z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd">
3
+ </path>
4
+ </svg>
@@ -0,0 +1,142 @@
1
+ /**
2
+ * ___ ___ __
3
+ * \ \/ / / _
4
+ * \ / /_| |_
5
+ * / \____ _|
6
+ * /__/\__\ |_|
7
+ *
8
+ * @file checkbox.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
+ --checkbox-background-check: var( --accent-background );
21
+ --checkbox-background-check-hover: var( --accent-background-hover );
22
+ --checkbox-background-disabled: var( --disabled-color );
23
+ --checkbox-background-disabled-check: var( --disabled-background );
24
+ --checkbox-color-disabled: var( --disabled-background );
25
+ --checkbox-check-border: var( --border );
26
+ --checkbox-check-border-hover: var( --border-hover );
27
+ }
28
+
29
+ .x4checkbox {
30
+ @extend .hbox;
31
+
32
+ display: flex;
33
+ flex-direction: row;
34
+ align-items: center;
35
+
36
+ margin: 5px;
37
+ padding: 4px;
38
+ gap: 4px;
39
+ cursor: pointer;
40
+
41
+ .inner {
42
+ height: 1rem;
43
+ width: 1rem;
44
+ color: white;
45
+ position: relative;
46
+ order: 1;
47
+
48
+ input {
49
+ appearance: none;
50
+ outline: none;
51
+
52
+ cursor: pointer;
53
+ display: block;
54
+ margin: 0;
55
+ padding: 0;
56
+ left: 0;
57
+ top: 0;
58
+ width: 100%;
59
+ height: 100%;
60
+ transition: opacity .1s ease;
61
+
62
+ &:checked {
63
+ background-color: var( --checkbox-background-check );
64
+ }
65
+
66
+ &:checked:hover {
67
+ background-color: var( --checkbox-background-check-hover );
68
+ }
69
+
70
+ &:not(:checked) {
71
+ border: 1px solid var( --checkbox-check-border );
72
+ }
73
+
74
+ &:not(:checked):hover {
75
+ border: 1px solid var( --checkbox-check-border-hover );
76
+ }
77
+ }
78
+
79
+ svg {
80
+ margin: auto;
81
+ pointer-events: none;
82
+ position: absolute;
83
+ opacity: 0;
84
+ left: 0;
85
+ right: 0;
86
+ top: 0;
87
+ bottom: 0;
88
+ width: 100%;
89
+ height: 50%;
90
+ }
91
+
92
+ &:has(input:checked) {
93
+ input {
94
+ opacity: 1;
95
+ }
96
+
97
+ svg {
98
+ opacity: 1;
99
+ }
100
+ }
101
+ }
102
+
103
+ &:focus-within {
104
+ label #text {
105
+ text-decoration: underline;
106
+ }
107
+ }
108
+
109
+ &[disabled] {
110
+ &, * {
111
+ cursor: not-allowed;
112
+ }
113
+
114
+ label {
115
+
116
+ pointer-events: none;
117
+ color: var( --checkbox-color-disabled );
118
+ }
119
+
120
+ .inner {
121
+ pointer-events: none;
122
+ input {
123
+ background-color: var( --checkbox-background-disabled );
124
+
125
+ &:checked {
126
+ background-color: var( --checkbox-background-disabled-check );
127
+ }
128
+ }
129
+ }
130
+ }
131
+
132
+ label {
133
+ text-align: right;
134
+ cursor: inherit;
135
+ order: 2;
136
+ }
137
+
138
+ &.left #label {
139
+ order: 0;
140
+ text-align: left;
141
+ }
142
+ }
@@ -0,0 +1,125 @@
1
+ import { Component, ComponentEvents, ComponentProps, EvChange, makeUniqueComponentId } from '@core/component.js';
2
+ import { EventCallback } from '@core/core_events.js';
3
+
4
+ import { Input } from '../input/input';
5
+ import { Label } from '../label/label';
6
+
7
+ import { svgLoader } from '../icon/icon.js';
8
+
9
+ import "./checkbox.module.scss"
10
+ import icon from "./check.svg";
11
+
12
+ /**
13
+ * Checkbox events
14
+ */
15
+
16
+ interface CheckBoxEvents extends ComponentEvents {
17
+ change?: EvChange;
18
+ }
19
+
20
+ /**
21
+ * Checkbox properties.
22
+ */
23
+
24
+ interface CheckboxProps extends ComponentProps {
25
+ label: string; // The text label for the checkbox.
26
+ checked?: boolean; // Optional boolean indicating if the checkbox is checked by default.
27
+ value?: string; // Optional value associated with the checkbox.
28
+ change?: EventCallback<EvChange>;
29
+ }
30
+
31
+ /**
32
+ * Checkbox component that can be checked or unchecked.
33
+ */
34
+
35
+ export class Checkbox extends Component<CheckboxProps,CheckBoxEvents> {
36
+
37
+ readonly _input: Input;
38
+
39
+ /**
40
+ * Creates an instance of the Checkbox component.
41
+ *
42
+ * @param {CheckboxProps} props - The properties for the checkbox component, including label, checked state, and value.
43
+ * @example
44
+ * const checkbox = new Checkbox({ label: 'Accept Terms', checked: true });
45
+ */
46
+
47
+ constructor( props: CheckboxProps ) {
48
+ super( props );
49
+
50
+ const inputId = makeUniqueComponentId( );
51
+
52
+ this.mapPropEvents( props, 'change' );
53
+
54
+ this.setContent( [
55
+ new Component( {
56
+ cls: 'inner',
57
+ content: [
58
+ this._input = new Input( {
59
+ type:"checkbox",
60
+ id: inputId,
61
+ checked: props.checked,
62
+ dom_events: {
63
+ change: ( ) => this._on_change( ),
64
+ }
65
+ })
66
+ ]
67
+ }),
68
+ new Label( {
69
+ tag: 'label',
70
+ text: props.label,
71
+ labelFor: inputId,
72
+ id: undefined
73
+ } ),
74
+ ])
75
+
76
+ svgLoader.load( icon ).then( svg => {
77
+ this.query<Label>( '.inner' ).dom.insertAdjacentHTML( "beforeend", svg );
78
+ });
79
+ }
80
+
81
+ /**
82
+ * check state changed
83
+ */
84
+
85
+ private _on_change() {
86
+ this.fire('change', { value:this.getCheck() } );
87
+ }
88
+
89
+ /**
90
+ * @return the checked value
91
+ */
92
+
93
+ public getCheck() {
94
+ const d = this._input.dom as HTMLInputElement;
95
+ return d.checked;
96
+ }
97
+
98
+ /**
99
+ * change the checked value
100
+ * @param {boolean} ck new checked value
101
+ */
102
+
103
+ public setCheck(ck: boolean) {
104
+ const d = this._input.dom as HTMLInputElement;
105
+ d.checked = ck;
106
+ }
107
+
108
+ /**
109
+ * change the checkbox label
110
+ * @param text
111
+ */
112
+
113
+ public setLabel(text: string) {
114
+ this.query<Label>('label').setText( text );
115
+ }
116
+
117
+ /**
118
+ * toggle the checkbox
119
+ */
120
+
121
+ public toggle() {
122
+ this.setCheck( !this.getCheck() );
123
+ }
124
+
125
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * ___ ___ __
3
+ * \ \/ / / _
4
+ * \ / /_| |_
5
+ * / \____ _|
6
+ * /__/\__\ |_|
7
+ *
8
+ * @file colorinput.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
+ :root {
18
+ --colorinput-btn-background: inherit;
19
+ --colorinput-btn-color: var( --text-secondary );
20
+ --colorinput-btn-color-hover: var( --text-primary );
21
+ }
22
+
23
+ .x4colorinput {
24
+ margin: 5px;
25
+ border-bottom: 1px solid var( --border );
26
+ outline: none;
27
+
28
+ &:focus-within {
29
+ border-bottom-color: var( --border-focus );
30
+ }
31
+
32
+ .swatch {
33
+ margin: 4px;
34
+ width: 1rem;
35
+ height: 1rem;
36
+ }
37
+
38
+ input {
39
+ outline: none;
40
+ margin: 0;
41
+ height: 100%;
42
+ flex-grow: 1;
43
+ }
44
+
45
+ .x4button {
46
+ margin: 0;
47
+ padding: 0;
48
+ outline: none;
49
+ background-color: var( --combobox-btn-background );
50
+ color: var( --colorinput-btn-color );
51
+
52
+ #icon {
53
+ color: var( --colorinput-btn-color );
54
+ }
55
+
56
+ &:hover, &:hover #icon {
57
+ color: var( --colorinput-btn-color-hover );
58
+ }
59
+
60
+ &:focus {
61
+ //background-color: var( --color-30 );
62
+ //color: var( --color-10 );
63
+ }
64
+ }
65
+ }