x4js 1.6.4 → 2.0.1

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 (282) hide show
  1. package/README.md +3 -14
  2. package/lib/README.txt +3 -14
  3. package/lib/src/assets/house-light.svg +1 -0
  4. package/lib/src/assets/radio.svg +4 -0
  5. package/lib/src/components/base.scss +26 -0
  6. package/lib/src/components/boxes/boxes.module.scss +37 -0
  7. package/lib/src/components/boxes/boxes.ts +125 -0
  8. package/lib/src/components/btngroup/btngroup.module.scss +29 -0
  9. package/lib/src/components/btngroup/btngroup.ts +106 -0
  10. package/lib/src/components/button/button.module.scss +154 -0
  11. package/lib/src/components/button/button.ts +117 -0
  12. package/lib/src/components/calendar/calendar-check-sharp-light.svg +1 -0
  13. package/lib/src/components/calendar/calendar.module.scss +163 -0
  14. package/lib/src/{calendar.ts → components/calendar/calendar.ts} +81 -83
  15. package/lib/src/components/calendar/chevron-left-sharp-light.svg +1 -0
  16. package/lib/src/components/calendar/chevron-right-sharp-light.svg +1 -0
  17. package/lib/src/components/checkbox/check.svg +4 -0
  18. package/lib/src/components/checkbox/checkbox.module.scss +142 -0
  19. package/lib/src/components/checkbox/checkbox.ts +125 -0
  20. package/lib/src/components/colorinput/colorinput.module.scss +65 -0
  21. package/lib/src/components/colorinput/colorinput.ts +88 -0
  22. package/lib/src/components/colorinput/crosshairs-simple-sharp-light.svg +1 -0
  23. package/lib/src/components/colorpicker/colorpicker.module.scss +133 -0
  24. package/lib/src/components/colorpicker/colorpicker.ts +477 -0
  25. package/lib/src/components/combobox/combobox.module.scss +121 -0
  26. package/lib/src/components/combobox/combobox.ts +190 -0
  27. package/lib/src/components/combobox/updown.svg +4 -0
  28. package/lib/src/components/dialog/dialog.module.scss +71 -0
  29. package/lib/src/components/dialog/dialog.ts +91 -0
  30. package/lib/src/components/dialog/xmark-sharp-light.svg +1 -0
  31. package/lib/src/components/form/form.module.scss +34 -0
  32. package/lib/src/components/form/form.ts +36 -0
  33. package/lib/src/components/header/header.module.scss +40 -0
  34. package/lib/src/components/header/header.ts +124 -0
  35. package/lib/src/components/icon/icon.module.scss +30 -0
  36. package/lib/src/components/icon/icon.ts +134 -0
  37. package/lib/src/components/image/image.module.scss +21 -0
  38. package/lib/src/components/image/image.ts +67 -0
  39. package/lib/src/components/input/input.module.scss +69 -0
  40. package/lib/src/components/input/input.ts +274 -0
  41. package/lib/src/components/label/label.module.scss +52 -0
  42. package/lib/src/components/label/label.ts +55 -0
  43. package/lib/src/components/listbox/listbox.module.scss +103 -0
  44. package/lib/src/components/listbox/listbox.ts +427 -0
  45. package/lib/src/components/menu/caret-right-solid.svg +1 -0
  46. package/lib/src/components/menu/menu.module.scss +108 -0
  47. package/lib/src/components/menu/menu.ts +168 -0
  48. package/lib/src/components/messages/circle-exclamation.svg +1 -0
  49. package/lib/src/components/messages/messages.module.scss +47 -0
  50. package/lib/src/components/messages/messages.ts +64 -0
  51. package/lib/src/components/normalize.scss +386 -0
  52. package/lib/src/components/notification/circle-check-solid.svg +1 -0
  53. package/lib/src/components/notification/circle-exclamation-solid.svg +1 -0
  54. package/lib/src/components/notification/circle-notch-light.svg +1 -0
  55. package/lib/src/components/notification/notification.module.scss +82 -0
  56. package/lib/src/components/notification/notification.ts +108 -0
  57. package/lib/src/components/notification/xmark-sharp-light.svg +1 -0
  58. package/lib/src/components/panel/panel.module.scss +48 -0
  59. package/lib/src/components/panel/panel.ts +57 -0
  60. package/lib/src/components/popup/popup.module.scss +43 -0
  61. package/lib/src/components/popup/popup.ts +395 -0
  62. package/lib/src/components/progress/progress.module.scss +57 -0
  63. package/lib/src/components/progress/progress.ts +43 -0
  64. package/lib/src/components/rating/rating.module.scss +23 -0
  65. package/lib/src/components/rating/rating.ts +125 -0
  66. package/lib/src/components/rating/star-sharp-light.svg +1 -0
  67. package/lib/src/components/rating/star-sharp-solid.svg +1 -0
  68. package/lib/src/components/shared.scss +76 -0
  69. package/lib/src/components/sizers/sizer.module.scss +90 -0
  70. package/lib/src/components/sizers/sizer.ts +120 -0
  71. package/lib/src/components/slider/slider.module.scss +71 -0
  72. package/lib/src/components/slider/slider.ts +143 -0
  73. package/lib/src/components/switch/switch.module.scss +127 -0
  74. package/lib/src/components/switch/switch.ts +56 -0
  75. package/lib/src/components/tabs/tabs.module.scss +46 -0
  76. package/lib/src/components/tabs/tabs.ts +157 -0
  77. package/lib/src/components/textarea/textarea.module.scss +59 -0
  78. package/lib/src/components/textarea/textarea.ts +54 -0
  79. package/lib/src/components/textedit/textedit.module.scss +114 -0
  80. package/lib/src/components/textedit/textedit.ts +82 -0
  81. package/lib/src/components/themes.scss +77 -0
  82. package/lib/src/components/tooltips/circle-info-sharp-light.svg +1 -0
  83. package/lib/src/components/tooltips/tooltips.scss +51 -0
  84. package/lib/src/components/tooltips/tooltips.ts +103 -0
  85. package/lib/src/components/treeview/chevron-down-light.svg +1 -0
  86. package/lib/src/components/treeview/treeview.module.scss +116 -0
  87. package/lib/src/components/treeview/treeview.ts +403 -0
  88. package/lib/src/components/viewport/viewport.module.scss +25 -0
  89. package/lib/src/components/viewport/viewport.ts +38 -0
  90. package/lib/src/core/component.ts +979 -0
  91. package/lib/src/core/core_colors.ts +250 -0
  92. package/lib/src/{dom_events.ts → core/core_dom.ts} +195 -39
  93. package/lib/src/{drag_manager.ts → core/core_dragdrop.ts} +29 -44
  94. package/lib/src/core/core_element.ts +98 -0
  95. package/lib/src/core/core_events.ts +149 -0
  96. package/lib/src/{i18n.ts → core/core_i18n.ts} +43 -42
  97. package/lib/src/{router.ts → core/core_router.ts} +27 -40
  98. package/lib/src/core/core_styles.ts +215 -0
  99. package/lib/src/core/core_svg.ts +550 -0
  100. package/lib/src/core/core_tools.ts +673 -0
  101. package/lib/src/main.scss +21 -0
  102. package/lib/src/main.tsx +323 -0
  103. package/lib/src/x4.scss +19 -0
  104. package/lib/types/x4.d.ts +2624 -0
  105. package/package.json +67 -59
  106. package/scripts/build.mjs +351 -0
  107. package/scripts/prepack.mjs +15 -0
  108. package/src/assets/house-light.svg +1 -0
  109. package/src/assets/radio.svg +4 -0
  110. package/src/components/base.scss +26 -0
  111. package/src/components/boxes/boxes.module.scss +37 -0
  112. package/src/components/boxes/boxes.ts +125 -0
  113. package/src/components/btngroup/btngroup.module.scss +29 -0
  114. package/src/components/btngroup/btngroup.ts +106 -0
  115. package/src/components/button/button.module.scss +154 -0
  116. package/src/components/button/button.ts +117 -0
  117. package/src/components/calendar/calendar-check-sharp-light.svg +1 -0
  118. package/src/components/calendar/calendar.module.scss +163 -0
  119. package/src/components/calendar/calendar.ts +326 -0
  120. package/src/components/calendar/chevron-left-sharp-light.svg +1 -0
  121. package/src/components/calendar/chevron-right-sharp-light.svg +1 -0
  122. package/src/components/checkbox/check.svg +4 -0
  123. package/src/components/checkbox/checkbox.module.scss +142 -0
  124. package/src/components/checkbox/checkbox.ts +125 -0
  125. package/src/components/colorinput/colorinput.module.scss +65 -0
  126. package/src/components/colorinput/colorinput.ts +88 -0
  127. package/src/components/colorinput/crosshairs-simple-sharp-light.svg +1 -0
  128. package/src/components/colorpicker/colorpicker.module.scss +133 -0
  129. package/src/components/colorpicker/colorpicker.ts +477 -0
  130. package/src/components/combobox/combobox.module.scss +121 -0
  131. package/src/components/combobox/combobox.ts +190 -0
  132. package/src/components/combobox/updown.svg +4 -0
  133. package/src/components/dialog/dialog.module.scss +71 -0
  134. package/src/components/dialog/dialog.ts +91 -0
  135. package/src/components/dialog/xmark-sharp-light.svg +1 -0
  136. package/src/components/form/form.module.scss +34 -0
  137. package/src/components/form/form.ts +36 -0
  138. package/src/components/header/header.module.scss +40 -0
  139. package/src/components/header/header.ts +124 -0
  140. package/src/components/icon/icon.module.scss +30 -0
  141. package/src/components/icon/icon.ts +134 -0
  142. package/src/components/image/image.module.scss +21 -0
  143. package/src/components/image/image.ts +67 -0
  144. package/src/components/input/input.module.scss +69 -0
  145. package/src/components/input/input.ts +274 -0
  146. package/src/components/label/label.module.scss +52 -0
  147. package/src/components/label/label.ts +55 -0
  148. package/src/components/listbox/listbox.module.scss +103 -0
  149. package/src/components/listbox/listbox.ts +427 -0
  150. package/src/components/menu/caret-right-solid.svg +1 -0
  151. package/src/components/menu/menu.module.scss +108 -0
  152. package/src/components/menu/menu.ts +168 -0
  153. package/src/components/messages/circle-exclamation.svg +1 -0
  154. package/src/components/messages/messages.module.scss +47 -0
  155. package/src/components/messages/messages.ts +64 -0
  156. package/src/components/normalize.scss +386 -0
  157. package/src/components/notification/circle-check-solid.svg +1 -0
  158. package/src/components/notification/circle-exclamation-solid.svg +1 -0
  159. package/src/components/notification/circle-notch-light.svg +1 -0
  160. package/src/components/notification/notification.module.scss +82 -0
  161. package/src/components/notification/notification.ts +108 -0
  162. package/src/components/notification/xmark-sharp-light.svg +1 -0
  163. package/src/components/panel/panel.module.scss +48 -0
  164. package/src/components/panel/panel.ts +57 -0
  165. package/src/components/popup/popup.module.scss +43 -0
  166. package/src/components/popup/popup.ts +395 -0
  167. package/src/components/progress/progress.module.scss +57 -0
  168. package/src/components/progress/progress.ts +43 -0
  169. package/src/components/rating/rating.module.scss +23 -0
  170. package/src/components/rating/rating.ts +125 -0
  171. package/src/components/rating/star-sharp-light.svg +1 -0
  172. package/src/components/rating/star-sharp-solid.svg +1 -0
  173. package/src/components/shared.scss +76 -0
  174. package/src/components/sizers/sizer.module.scss +90 -0
  175. package/src/components/sizers/sizer.ts +120 -0
  176. package/src/components/slider/slider.module.scss +71 -0
  177. package/src/components/slider/slider.ts +143 -0
  178. package/src/components/switch/switch.module.scss +127 -0
  179. package/src/components/switch/switch.ts +56 -0
  180. package/src/components/tabs/tabs.module.scss +46 -0
  181. package/src/components/tabs/tabs.ts +157 -0
  182. package/src/components/textarea/textarea.module.scss +59 -0
  183. package/src/components/textarea/textarea.ts +54 -0
  184. package/src/components/textedit/textedit.module.scss +114 -0
  185. package/src/components/textedit/textedit.ts +82 -0
  186. package/src/components/themes.scss +77 -0
  187. package/src/components/tooltips/circle-info-sharp-light.svg +1 -0
  188. package/src/components/tooltips/tooltips.scss +51 -0
  189. package/src/components/tooltips/tooltips.ts +103 -0
  190. package/src/components/treeview/chevron-down-light.svg +1 -0
  191. package/src/components/treeview/treeview.module.scss +116 -0
  192. package/src/components/treeview/treeview.ts +403 -0
  193. package/src/components/viewport/viewport.module.scss +25 -0
  194. package/src/components/viewport/viewport.ts +38 -0
  195. package/src/core/component.ts +979 -0
  196. package/src/core/core_colors.ts +250 -0
  197. package/src/core/core_dom.ts +471 -0
  198. package/src/core/core_dragdrop.ts +201 -0
  199. package/src/core/core_element.ts +98 -0
  200. package/src/core/core_events.ts +149 -0
  201. package/src/core/core_i18n.ts +377 -0
  202. package/src/core/core_router.ts +221 -0
  203. package/src/core/core_styles.ts +215 -0
  204. package/src/core/core_svg.ts +550 -0
  205. package/src/core/core_tools.ts +673 -0
  206. package/src/main.scss +21 -0
  207. package/src/main.tsx +323 -0
  208. package/src/x4.scss +19 -0
  209. package/tsconfig.json +14 -0
  210. package/types/scss.d.ts +4 -0
  211. package/types/svg.d.ts +4 -0
  212. package/types/x4react.d.ts +9 -0
  213. package/lib/changelog.txt +0 -23
  214. package/lib/cjs/x4js.js +0 -39
  215. package/lib/cjs/x4js.js.map +0 -7
  216. package/lib/esm/x4js.mjs +0 -15972
  217. package/lib/esm/x4js.mjs.map +0 -7
  218. package/lib/licence.md +0 -21
  219. package/lib/src/MIT-license.md +0 -14
  220. package/lib/src/action.ts +0 -88
  221. package/lib/src/alpha.jpg +0 -0
  222. package/lib/src/app_sockets.ts +0 -81
  223. package/lib/src/application.ts +0 -262
  224. package/lib/src/autocomplete.ts +0 -232
  225. package/lib/src/base64.ts +0 -166
  226. package/lib/src/base_component.ts +0 -152
  227. package/lib/src/button.ts +0 -355
  228. package/lib/src/canvas.ts +0 -510
  229. package/lib/src/cardview.ts +0 -228
  230. package/lib/src/checkbox.ts +0 -188
  231. package/lib/src/color.ts +0 -752
  232. package/lib/src/colorpicker.ts +0 -1649
  233. package/lib/src/combobox.ts +0 -512
  234. package/lib/src/component.ts +0 -2367
  235. package/lib/src/copyright.txt +0 -27
  236. package/lib/src/datastore.ts +0 -1302
  237. package/lib/src/dialog.ts +0 -656
  238. package/lib/src/drawtext.ts +0 -355
  239. package/lib/src/fileupload.ts +0 -213
  240. package/lib/src/form.ts +0 -413
  241. package/lib/src/formatters.ts +0 -105
  242. package/lib/src/gridview.ts +0 -1185
  243. package/lib/src/icon.ts +0 -362
  244. package/lib/src/image.ts +0 -225
  245. package/lib/src/index.ts +0 -89
  246. package/lib/src/input.ts +0 -297
  247. package/lib/src/label.ts +0 -153
  248. package/lib/src/layout.ts +0 -442
  249. package/lib/src/link.ts +0 -86
  250. package/lib/src/listview.ts +0 -765
  251. package/lib/src/md5.ts +0 -438
  252. package/lib/src/menu.ts +0 -425
  253. package/lib/src/messagebox.ts +0 -224
  254. package/lib/src/panel.ts +0 -86
  255. package/lib/src/popup.ts +0 -494
  256. package/lib/src/property_editor.ts +0 -337
  257. package/lib/src/radiobtn.ts +0 -197
  258. package/lib/src/rating.ts +0 -135
  259. package/lib/src/request.ts +0 -300
  260. package/lib/src/settings.ts +0 -77
  261. package/lib/src/sidebarview.ts +0 -108
  262. package/lib/src/spreadsheet.ts +0 -1449
  263. package/lib/src/styles.ts +0 -343
  264. package/lib/src/svgcomponent.ts +0 -592
  265. package/lib/src/tabbar.ts +0 -151
  266. package/lib/src/tabview.ts +0 -110
  267. package/lib/src/textarea.ts +0 -235
  268. package/lib/src/textedit.ts +0 -533
  269. package/lib/src/toaster.ts +0 -80
  270. package/lib/src/tools.ts +0 -1473
  271. package/lib/src/tooltips.ts +0 -191
  272. package/lib/src/treeview.ts +0 -716
  273. package/lib/src/version.ts +0 -30
  274. package/lib/src/x4.less +0 -2242
  275. package/lib/src/x4dom.ts +0 -57
  276. package/lib/src/x4events.ts +0 -585
  277. package/lib/src/x4js.ts +0 -89
  278. package/lib/src/x4react.ts +0 -90
  279. package/lib/styles/x4.css +0 -1785
  280. package/lib/styles/x4.less +0 -2242
  281. package/lib/types/x4js.d.ts +0 -6728
  282. package/license.md +0 -21
@@ -0,0 +1,163 @@
1
+ /**
2
+ * ___ ___ __
3
+ * \ \/ / / _
4
+ * \ / /_| |_
5
+ * / \____ _|
6
+ * /__/\__\ |_|
7
+ *
8
+ * @file calendar.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
+ --calendar-btn-background: inherit;
21
+ --calendar-btn-color: var( --text-secondary );
22
+ --calendar-btn-color-hover: var( --text-primary );
23
+
24
+ --calendar-week-color: var( --accent-background );
25
+ --calendar-week-color-hover: var( --accent-background-hover );
26
+
27
+ --calendard-day-background-hover: var( --accent-background-hover );
28
+ --calendard-day-color-hover: var( --accent-color-hover );
29
+
30
+ --calendar-sel-background: var( --accent-background );
31
+ --calendar-sel-color: var( --accent-color );
32
+
33
+ --calendar-today-background: var( --alert-background );
34
+ --calendar-today-color: var( --alert-color );
35
+ --calendar-today-border: var( --accent-background );
36
+
37
+ --calendar-header-color: var( --text-primary );
38
+ --calendar-out-color: var( --disabled-color-dark );
39
+ }
40
+
41
+ .x4calendar {
42
+ border: 1px solid var( --border );
43
+ padding: 4px;
44
+
45
+ .month-sel {
46
+ height: 2em;
47
+ align-items: center;
48
+ padding-left: 2em;
49
+
50
+ .month {
51
+ padding-right: 4px;
52
+ }
53
+
54
+ .year {
55
+ cursor: pointer;
56
+ }
57
+
58
+ .month,
59
+ .year {
60
+ cursor: pointer;
61
+ &:hover {
62
+ text-decoration: underline;
63
+ }
64
+ }
65
+
66
+ .x4label {
67
+ font-weight: bold;
68
+ }
69
+
70
+ .x4button {
71
+ height: auto;
72
+ background-color: var( --calendar-btn-background );
73
+ color: var( --calendar-btn-color );
74
+
75
+ &:hover {
76
+ color: var( --calendar-btn-color-hover );
77
+ }
78
+ }
79
+
80
+ margin-bottom: 8px;
81
+ }
82
+
83
+ .week {
84
+ @extend .flex;
85
+ align-items: center;
86
+ padding: 2px;
87
+
88
+ .cell {
89
+ @extend .flex;
90
+ min-width: 28px;
91
+ min-height: 28px;
92
+
93
+ color: var( --gray-900 );
94
+ text-align: center;
95
+
96
+ .text {
97
+ @extend .hbox;
98
+
99
+ transition: background-color 0.3s, color 0.3s;
100
+ justify-content: center;
101
+ border: 1px solid transparent;
102
+ margin: auto;
103
+ border-radius: 14px;
104
+ width: 28px;
105
+ height: 28px;
106
+ }
107
+ }
108
+
109
+ .today {
110
+ .text {
111
+ font-weight: bold;
112
+ background-color: var( --calendar-today-background );
113
+ color: var( --calendar-today-color );
114
+ //border-color: var( --calendar-today-border );
115
+ }
116
+ }
117
+
118
+ .selection {
119
+ .text {
120
+ background-color: var( --calendar-sel-background );
121
+ color: var( --calendar-sel-color );
122
+ }
123
+ }
124
+
125
+ .weeknum {
126
+ width: 2em;
127
+ color: var( --calendar-week-color );
128
+ font-size: 70%;
129
+ }
130
+
131
+ &:hover .weeknum {
132
+ font-weight: bold;
133
+ }
134
+
135
+ .day {
136
+ cursor: pointer;
137
+ }
138
+
139
+ .out {
140
+ color: var( --calendar-out-color );
141
+ font-size: 80%;
142
+ }
143
+
144
+ .day:hover {
145
+ .text {
146
+ background-color: var( --calendard-day-background-hover );
147
+ color: var( --calendard-day-color-hover );
148
+ }
149
+ }
150
+ }
151
+
152
+ .header {
153
+ .cell {
154
+ color: var( --calendar-header-color );
155
+ height: 1.5em;
156
+ justify-content: center;
157
+ }
158
+
159
+ &:hover {
160
+ background-color: inherit;
161
+ }
162
+ }
163
+ }
@@ -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
+ }