@simplysm/solid 13.0.76 → 13.0.77

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 (291) hide show
  1. package/README.md +9 -10
  2. package/dist/components/data/kanban/Kanban.d.ts +31 -38
  3. package/dist/components/data/kanban/Kanban.d.ts.map +1 -1
  4. package/dist/components/data/kanban/Kanban.js.map +1 -1
  5. package/dist/components/data/list/List.d.ts +7 -28
  6. package/dist/components/data/list/List.d.ts.map +1 -1
  7. package/dist/components/data/list/List.js +3 -2
  8. package/dist/components/data/list/List.js.map +2 -2
  9. package/dist/components/data/sheet/DataSheet.d.ts +3 -8
  10. package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
  11. package/dist/components/data/sheet/DataSheet.js +305 -418
  12. package/dist/components/data/sheet/DataSheet.js.map +2 -2
  13. package/dist/components/data/sheet/{types.d.ts → DataSheet.types.d.ts} +9 -3
  14. package/dist/components/data/sheet/DataSheet.types.d.ts.map +1 -0
  15. package/dist/components/data/sheet/DataSheet.types.js +1 -0
  16. package/dist/components/data/sheet/{sheetUtils.d.ts → DataSheet.utils.d.ts} +2 -2
  17. package/dist/components/data/sheet/DataSheet.utils.d.ts.map +1 -0
  18. package/dist/components/data/sheet/{sheetUtils.js → DataSheet.utils.js} +3 -3
  19. package/dist/components/data/sheet/DataSheet.utils.js.map +6 -0
  20. package/dist/components/data/sheet/DataSheetColumn.d.ts +1 -1
  21. package/dist/components/data/sheet/DataSheetColumn.d.ts.map +1 -1
  22. package/dist/components/data/sheet/DataSheetConfigDialog.d.ts +1 -1
  23. package/dist/components/data/sheet/DataSheetConfigDialog.d.ts.map +1 -1
  24. package/dist/components/data/sheet/hooks/useDataSheetExpansion.d.ts +1 -1
  25. package/dist/components/data/sheet/hooks/useDataSheetExpansion.d.ts.map +1 -1
  26. package/dist/components/data/sheet/hooks/useDataSheetExpansion.js +1 -1
  27. package/dist/components/data/sheet/hooks/useDataSheetFixedColumns.d.ts +2 -2
  28. package/dist/components/data/sheet/hooks/useDataSheetFixedColumns.d.ts.map +1 -1
  29. package/dist/components/data/sheet/hooks/useDataSheetHeaderCell.d.ts +27 -0
  30. package/dist/components/data/sheet/hooks/useDataSheetHeaderCell.d.ts.map +1 -0
  31. package/dist/components/data/sheet/hooks/useDataSheetHeaderCell.js +173 -0
  32. package/dist/components/data/sheet/hooks/useDataSheetHeaderCell.js.map +6 -0
  33. package/dist/components/data/sheet/hooks/useDataSheetReorder.d.ts +1 -2
  34. package/dist/components/data/sheet/hooks/useDataSheetReorder.d.ts.map +1 -1
  35. package/dist/components/data/sheet/hooks/useDataSheetReorder.js.map +1 -1
  36. package/dist/components/data/sheet/hooks/useDataSheetSelection.d.ts +2 -2
  37. package/dist/components/data/sheet/hooks/useDataSheetSelection.d.ts.map +1 -1
  38. package/dist/components/data/sheet/hooks/useDataSheetSelection.js +2 -2
  39. package/dist/components/data/sheet/hooks/useDataSheetSelection.js.map +1 -1
  40. package/dist/components/data/sheet/hooks/useDataSheetSorting.d.ts +1 -1
  41. package/dist/components/data/sheet/hooks/useDataSheetSorting.d.ts.map +1 -1
  42. package/dist/components/data/sheet/hooks/useDataSheetSorting.js +1 -1
  43. package/dist/components/disclosure/Dialog.d.ts +6 -10
  44. package/dist/components/disclosure/Dialog.d.ts.map +1 -1
  45. package/dist/components/disclosure/Dialog.js +11 -14
  46. package/dist/components/disclosure/Dialog.js.map +2 -2
  47. package/dist/components/disclosure/Dropdown.d.ts +8 -12
  48. package/dist/components/disclosure/Dropdown.d.ts.map +1 -1
  49. package/dist/components/disclosure/Dropdown.js.map +1 -1
  50. package/dist/components/disclosure/Tabs.d.ts +3 -5
  51. package/dist/components/disclosure/Tabs.d.ts.map +1 -1
  52. package/dist/components/disclosure/Tabs.js.map +1 -1
  53. package/dist/components/display/Barcode.d.ts +1 -1
  54. package/dist/components/display/Barcode.d.ts.map +1 -1
  55. package/dist/components/display/Barcode.js +2 -1
  56. package/dist/components/display/Barcode.js.map +2 -2
  57. package/dist/components/display/Barcode.types.d.ts +2 -0
  58. package/dist/components/display/Barcode.types.d.ts.map +1 -0
  59. package/dist/components/display/Barcode.types.js +1 -0
  60. package/dist/components/display/Echarts.d.ts +2 -2
  61. package/dist/components/display/Echarts.d.ts.map +1 -1
  62. package/dist/components/display/Echarts.js +7 -8
  63. package/dist/components/display/Echarts.js.map +2 -2
  64. package/dist/components/features/address/AddressSearch.d.ts.map +1 -1
  65. package/dist/components/features/address/AddressSearch.js +4 -1
  66. package/dist/components/features/address/AddressSearch.js.map +2 -2
  67. package/dist/components/features/crud-detail/CrudDetail.d.ts +12 -13
  68. package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
  69. package/dist/components/features/crud-detail/CrudDetail.js +18 -15
  70. package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
  71. package/dist/components/features/crud-detail/{types.d.ts → CrudDetail.types.d.ts} +1 -1
  72. package/dist/components/features/crud-detail/CrudDetail.types.d.ts.map +1 -0
  73. package/dist/components/features/crud-detail/CrudDetail.types.js +1 -0
  74. package/dist/components/features/crud-sheet/CrudSheet.d.ts +3 -13
  75. package/dist/components/features/crud-sheet/CrudSheet.d.ts.map +1 -1
  76. package/dist/components/features/crud-sheet/CrudSheet.js +62 -73
  77. package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
  78. package/dist/components/features/crud-sheet/{types.d.ts → CrudSheet.types.d.ts} +10 -10
  79. package/dist/components/features/crud-sheet/CrudSheet.types.d.ts.map +1 -0
  80. package/dist/components/features/crud-sheet/CrudSheet.types.js +1 -0
  81. package/dist/components/features/crud-sheet/CrudSheet.types.js.map +6 -0
  82. package/dist/components/features/crud-sheet/CrudSheetColumn.d.ts +1 -1
  83. package/dist/components/features/crud-sheet/CrudSheetColumn.d.ts.map +1 -1
  84. package/dist/components/features/crud-sheet/CrudSheetTools.d.ts +1 -1
  85. package/dist/components/features/crud-sheet/CrudSheetTools.d.ts.map +1 -1
  86. package/dist/components/features/data-select-button/DataSelectButton.d.ts +2 -2
  87. package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
  88. package/dist/components/features/data-select-button/DataSelectButton.js +3 -3
  89. package/dist/components/features/data-select-button/DataSelectButton.js.map +2 -2
  90. package/dist/components/features/shared-data/SharedDataSelect.d.ts +7 -11
  91. package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
  92. package/dist/components/features/shared-data/SharedDataSelect.js +5 -4
  93. package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
  94. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
  95. package/dist/components/features/shared-data/SharedDataSelectButton.js.map +1 -1
  96. package/dist/components/features/shared-data/SharedDataSelectList.d.ts +8 -15
  97. package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
  98. package/dist/components/features/shared-data/SharedDataSelectList.js +5 -3
  99. package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
  100. package/dist/components/feedback/notification/NotificationProvider.d.ts.map +1 -1
  101. package/dist/components/feedback/notification/NotificationProvider.js +9 -1
  102. package/dist/components/feedback/notification/NotificationProvider.js.map +2 -2
  103. package/dist/components/feedback/print/Print.d.ts +4 -6
  104. package/dist/components/feedback/print/Print.d.ts.map +1 -1
  105. package/dist/components/feedback/print/Print.js +3 -2
  106. package/dist/components/feedback/print/Print.js.map +2 -2
  107. package/dist/components/feedback/print/PrintProvider.d.ts.map +1 -1
  108. package/dist/components/feedback/print/PrintProvider.js +1 -0
  109. package/dist/components/feedback/print/PrintProvider.js.map +1 -1
  110. package/dist/components/form-control/Invalid.d.ts +1 -1
  111. package/dist/components/form-control/Invalid.d.ts.map +1 -1
  112. package/dist/components/form-control/Invalid.js +27 -26
  113. package/dist/components/form-control/Invalid.js.map +2 -2
  114. package/dist/components/form-control/checkbox/Checkbox.d.ts +1 -1
  115. package/dist/components/form-control/checkbox/Checkbox.d.ts.map +1 -1
  116. package/dist/components/form-control/checkbox/CheckboxGroup.d.ts +10 -10
  117. package/dist/components/form-control/checkbox/CheckboxGroup.d.ts.map +1 -1
  118. package/dist/components/form-control/checkbox/CheckboxGroup.js +2 -2
  119. package/dist/components/form-control/checkbox/CheckboxGroup.js.map +2 -2
  120. package/dist/components/form-control/checkbox/Radio.d.ts +1 -1
  121. package/dist/components/form-control/checkbox/Radio.d.ts.map +1 -1
  122. package/dist/components/form-control/checkbox/RadioGroup.d.ts +10 -10
  123. package/dist/components/form-control/checkbox/RadioGroup.d.ts.map +1 -1
  124. package/dist/components/form-control/checkbox/RadioGroup.js +2 -2
  125. package/dist/components/form-control/checkbox/RadioGroup.js.map +2 -2
  126. package/dist/components/form-control/checkbox/SelectableBase.d.ts +1 -1
  127. package/dist/components/form-control/checkbox/SelectableBase.d.ts.map +1 -1
  128. package/dist/components/form-control/checkbox/SelectableBase.js +3 -3
  129. package/dist/components/form-control/checkbox/SelectableBase.js.map +2 -2
  130. package/dist/components/form-control/checkbox/SelectionGroupBase.d.ts +1 -1
  131. package/dist/components/form-control/checkbox/SelectionGroupBase.d.ts.map +1 -1
  132. package/dist/components/form-control/checkbox/SelectionGroupBase.js +3 -3
  133. package/dist/components/form-control/checkbox/SelectionGroupBase.js.map +2 -2
  134. package/dist/components/form-control/color-picker/ColorPicker.d.ts +2 -2
  135. package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
  136. package/dist/components/form-control/color-picker/ColorPicker.js +3 -3
  137. package/dist/components/form-control/color-picker/ColorPicker.js.map +2 -2
  138. package/dist/components/form-control/combobox/Combobox.d.ts +3 -3
  139. package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
  140. package/dist/components/form-control/combobox/Combobox.js +10 -5
  141. package/dist/components/form-control/combobox/Combobox.js.map +2 -2
  142. package/dist/components/form-control/date-range-picker/DateRangePicker.js +4 -4
  143. package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
  144. package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -1
  145. package/dist/components/form-control/editor/EditorToolbar.js +176 -312
  146. package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
  147. package/dist/components/form-control/field/DatePicker.d.ts +2 -2
  148. package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
  149. package/dist/components/form-control/field/DatePicker.js +3 -3
  150. package/dist/components/form-control/field/DatePicker.js.map +2 -2
  151. package/dist/components/form-control/field/DateTimePicker.d.ts +2 -2
  152. package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
  153. package/dist/components/form-control/field/DateTimePicker.js +3 -3
  154. package/dist/components/form-control/field/DateTimePicker.js.map +2 -2
  155. package/dist/components/form-control/field/FieldShell.d.ts +1 -1
  156. package/dist/components/form-control/field/FieldShell.d.ts.map +1 -1
  157. package/dist/components/form-control/field/FieldShell.js +2 -2
  158. package/dist/components/form-control/field/FieldShell.js.map +2 -2
  159. package/dist/components/form-control/field/NumberInput.d.ts +7 -28
  160. package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
  161. package/dist/components/form-control/field/NumberInput.js +7 -5
  162. package/dist/components/form-control/field/NumberInput.js.map +2 -2
  163. package/dist/components/form-control/field/TextInput.d.ts +7 -23
  164. package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
  165. package/dist/components/form-control/field/TextInput.js +6 -5
  166. package/dist/components/form-control/field/TextInput.js.map +2 -2
  167. package/dist/components/form-control/field/Textarea.d.ts +2 -2
  168. package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
  169. package/dist/components/form-control/field/Textarea.js +3 -3
  170. package/dist/components/form-control/field/Textarea.js.map +2 -2
  171. package/dist/components/form-control/field/TimePicker.d.ts +2 -2
  172. package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
  173. package/dist/components/form-control/field/TimePicker.js +3 -3
  174. package/dist/components/form-control/field/TimePicker.js.map +2 -2
  175. package/dist/components/form-control/select/Select.d.ts +22 -44
  176. package/dist/components/form-control/select/Select.d.ts.map +1 -1
  177. package/dist/components/form-control/select/Select.js +8 -6
  178. package/dist/components/form-control/select/Select.js.map +2 -2
  179. package/dist/components/form-control/state-preset/StatePreset.js +5 -5
  180. package/dist/components/form-control/state-preset/StatePreset.js.map +2 -2
  181. package/dist/components/layout/sidebar/Sidebar.d.ts +5 -102
  182. package/dist/components/layout/sidebar/Sidebar.d.ts.map +1 -1
  183. package/dist/components/layout/sidebar/Sidebar.js.map +1 -1
  184. package/dist/components/layout/topbar/Topbar.d.ts +1 -1
  185. package/dist/components/layout/topbar/Topbar.d.ts.map +1 -1
  186. package/dist/components/layout/topbar/Topbar.js +3 -3
  187. package/dist/components/layout/topbar/Topbar.js.map +2 -2
  188. package/dist/helpers/createAppStructure.d.ts.map +1 -1
  189. package/dist/helpers/createAppStructure.js.map +1 -1
  190. package/dist/hooks/createControllableStore.js +5 -5
  191. package/dist/hooks/createControllableStore.js.map +1 -1
  192. package/dist/index.d.ts +4 -3
  193. package/dist/index.d.ts.map +1 -1
  194. package/dist/index.js +4 -3
  195. package/dist/index.js.map +1 -1
  196. package/dist/providers/ServiceClientProvider.d.ts +2 -2
  197. package/dist/providers/ServiceClientProvider.d.ts.map +1 -1
  198. package/dist/providers/ServiceClientProvider.js.map +1 -1
  199. package/dist/providers/shared-data/SharedDataProvider.d.ts +1 -1
  200. package/dist/providers/shared-data/SharedDataProvider.d.ts.map +1 -1
  201. package/dist/providers/shared-data/SharedDataProvider.js +98 -86
  202. package/dist/providers/shared-data/SharedDataProvider.js.map +2 -2
  203. package/package.json +5 -5
  204. package/src/components/data/kanban/Kanban.tsx +37 -32
  205. package/src/components/data/list/List.tsx +3 -6
  206. package/src/components/data/sheet/DataSheet.tsx +224 -334
  207. package/src/components/data/sheet/{types.ts → DataSheet.types.ts} +8 -2
  208. package/src/components/data/sheet/{sheetUtils.ts → DataSheet.utils.ts} +3 -3
  209. package/src/components/data/sheet/DataSheetColumn.tsx +1 -1
  210. package/src/components/data/sheet/DataSheetConfigDialog.tsx +1 -1
  211. package/src/components/data/sheet/hooks/useDataSheetExpansion.ts +2 -2
  212. package/src/components/data/sheet/hooks/useDataSheetFixedColumns.ts +2 -2
  213. package/src/components/data/sheet/hooks/useDataSheetHeaderCell.tsx +168 -0
  214. package/src/components/data/sheet/hooks/useDataSheetReorder.ts +1 -2
  215. package/src/components/data/sheet/hooks/useDataSheetSelection.ts +4 -4
  216. package/src/components/data/sheet/hooks/useDataSheetSorting.ts +2 -2
  217. package/src/components/disclosure/Dialog.tsx +21 -27
  218. package/src/components/disclosure/Dropdown.tsx +1 -6
  219. package/src/components/disclosure/Tabs.tsx +1 -6
  220. package/src/components/display/Barcode.tsx +4 -113
  221. package/src/components/display/Barcode.types.ts +111 -0
  222. package/src/components/display/Echarts.tsx +10 -11
  223. package/src/components/features/address/AddressSearch.tsx +21 -3
  224. package/src/components/features/crud-detail/CrudDetail.tsx +21 -38
  225. package/src/components/features/crud-sheet/CrudSheet.tsx +77 -93
  226. package/src/components/features/crud-sheet/{types.ts → CrudSheet.types.ts} +9 -9
  227. package/src/components/features/crud-sheet/CrudSheetColumn.tsx +1 -1
  228. package/src/components/features/crud-sheet/CrudSheetTools.tsx +1 -1
  229. package/src/components/features/data-select-button/DataSelectButton.tsx +8 -8
  230. package/src/components/features/shared-data/SharedDataSelect.tsx +23 -34
  231. package/src/components/features/shared-data/SharedDataSelectButton.tsx +1 -4
  232. package/src/components/features/shared-data/SharedDataSelectList.tsx +6 -10
  233. package/src/components/feedback/notification/NotificationProvider.tsx +9 -1
  234. package/src/components/feedback/print/Print.tsx +4 -8
  235. package/src/components/feedback/print/PrintProvider.tsx +2 -1
  236. package/src/components/form-control/Invalid.tsx +33 -29
  237. package/src/components/form-control/checkbox/Checkbox.tsx +1 -1
  238. package/src/components/form-control/checkbox/CheckboxGroup.tsx +3 -12
  239. package/src/components/form-control/checkbox/Radio.tsx +1 -1
  240. package/src/components/form-control/checkbox/RadioGroup.tsx +3 -12
  241. package/src/components/form-control/checkbox/SelectableBase.tsx +3 -3
  242. package/src/components/form-control/checkbox/SelectionGroupBase.tsx +3 -3
  243. package/src/components/form-control/color-picker/ColorPicker.tsx +4 -4
  244. package/src/components/form-control/combobox/Combobox.tsx +23 -18
  245. package/src/components/form-control/date-range-picker/DateRangePicker.tsx +5 -5
  246. package/src/components/form-control/editor/EditorToolbar.tsx +82 -202
  247. package/src/components/form-control/field/DatePicker.tsx +4 -4
  248. package/src/components/form-control/field/DateTimePicker.tsx +4 -4
  249. package/src/components/form-control/field/FieldShell.tsx +2 -2
  250. package/src/components/form-control/field/NumberInput.tsx +8 -11
  251. package/src/components/form-control/field/TextInput.tsx +7 -11
  252. package/src/components/form-control/field/Textarea.tsx +4 -4
  253. package/src/components/form-control/field/TimePicker.tsx +4 -4
  254. package/src/components/form-control/select/Select.tsx +33 -42
  255. package/src/components/form-control/state-preset/StatePreset.tsx +5 -5
  256. package/src/components/layout/sidebar/Sidebar.tsx +1 -7
  257. package/src/components/layout/topbar/Topbar.tsx +3 -3
  258. package/src/helpers/createAppStructure.ts +16 -0
  259. package/src/hooks/createControllableStore.ts +5 -5
  260. package/src/index.ts +4 -3
  261. package/src/providers/ServiceClientProvider.tsx +4 -4
  262. package/src/providers/shared-data/SharedDataProvider.tsx +136 -113
  263. package/tests/components/data/sheet/DataSheet.spec.tsx +2 -2
  264. package/tests/components/data/sheet/hooks/useDataSheetFixedColumns.spec.ts +1 -1
  265. package/tests/components/data/sheet/hooks/useDataSheetSelection.spec.ts +34 -17
  266. package/tests/components/data/sheet/hooks/useDataSheetSorting.spec.ts +1 -1
  267. package/tests/components/disclosure/Dialog.spec.tsx +7 -7
  268. package/tests/components/display/Barcode.spec.tsx +15 -1
  269. package/tests/components/features/crud-sheet/CrudSheet.spec.tsx +6 -6
  270. package/tests/components/form-control/Invalid.spec.tsx +5 -5
  271. package/tests/components/form-control/combobox/Combobox.spec.tsx +24 -1
  272. package/tests/components/layout/topbar/TopbarActions.spec.tsx +4 -4
  273. package/tests/components/layout/topbar/{createTopbarActions.spec.tsx → useTopbarActions.spec.tsx} +4 -4
  274. package/tests/providers/shared-data/SharedDataProvider.spec.tsx +130 -8
  275. package/dist/components/data/sheet/sheetUtils.d.ts.map +0 -1
  276. package/dist/components/data/sheet/sheetUtils.js.map +0 -6
  277. package/dist/components/data/sheet/types.d.ts.map +0 -1
  278. package/dist/components/data/sheet/types.js +0 -1
  279. package/dist/components/features/crud-detail/types.d.ts.map +0 -1
  280. package/dist/components/features/crud-detail/types.js +0 -1
  281. package/dist/components/features/crud-sheet/types.d.ts.map +0 -1
  282. package/dist/components/features/crud-sheet/types.js +0 -1
  283. package/dist/components/feedback/notification/index.d.ts +0 -4
  284. package/dist/components/feedback/notification/index.d.ts.map +0 -1
  285. package/dist/components/feedback/notification/index.js +0 -4
  286. package/dist/components/feedback/notification/index.js.map +0 -6
  287. package/src/components/feedback/notification/index.ts +0 -3
  288. /package/dist/components/data/sheet/{types.js.map → DataSheet.types.js.map} +0 -0
  289. /package/dist/components/{features/crud-detail/types.js.map → display/Barcode.types.js.map} +0 -0
  290. /package/dist/components/features/{crud-sheet/types.js.map → crud-detail/CrudDetail.types.js.map} +0 -0
  291. /package/src/components/features/crud-detail/{types.ts → CrudDetail.types.ts} +0 -0
@@ -75,13 +75,7 @@ export interface SharedDataSelectListProps<TItem> {
75
75
 
76
76
  // ─── Component ───────────────────────────────────────────
77
77
 
78
- export interface SharedDataSelectListComponent {
79
- <TItem>(props: SharedDataSelectListProps<TItem>): JSX.Element;
80
- ItemTemplate: typeof SharedDataSelectListItemTemplate;
81
- Filter: typeof SharedDataSelectListFilter;
82
- }
83
-
84
- export const SharedDataSelectList: SharedDataSelectListComponent = (<TItem,>(
78
+ const SharedDataSelectListInner = (<TItem,>(
85
79
  props: SharedDataSelectListProps<TItem>,
86
80
  ): JSX.Element => {
87
81
  const [local, rest] = splitProps(props, [
@@ -274,7 +268,9 @@ export const SharedDataSelectList: SharedDataSelectListComponent = (<TItem,>(
274
268
  </SharedDataSelectListContext.Provider>
275
269
  </FilterProvider>
276
270
  );
277
- }) as SharedDataSelectListComponent;
271
+ });
278
272
 
279
- SharedDataSelectList.ItemTemplate = SharedDataSelectListItemTemplate;
280
- SharedDataSelectList.Filter = SharedDataSelectListFilter;
273
+ export const SharedDataSelectList = Object.assign(SharedDataSelectListInner, {
274
+ ItemTemplate: SharedDataSelectListItemTemplate,
275
+ Filter: SharedDataSelectListFilter,
276
+ });
@@ -173,7 +173,15 @@ export const NotificationProvider: ParentComponent = (props) => {
173
173
  logger.error(err.stack ?? err.message);
174
174
  return;
175
175
  }
176
- throw err;
176
+ if (typeof err === "string") {
177
+ danger(header ?? err, header != null ? err : undefined);
178
+ logger.error(err);
179
+ return;
180
+ }
181
+ danger(header ?? "Unknown error");
182
+ if (err != null) {
183
+ logger.error(String(err));
184
+ }
177
185
  };
178
186
 
179
187
  const update = (
@@ -1,4 +1,4 @@
1
- import type { JSX, ParentProps } from "solid-js";
1
+ import type { ParentProps } from "solid-js";
2
2
 
3
3
  // --- Print.Page ---
4
4
 
@@ -8,14 +8,10 @@ function PrintPage(props: ParentProps) {
8
8
 
9
9
  // --- Print ---
10
10
 
11
- interface PrintComponent {
12
- (props: ParentProps): JSX.Element;
13
- Page: typeof PrintPage;
14
- }
15
-
16
11
  const PrintInner = (props: ParentProps) => {
17
12
  return <>{props.children}</>;
18
13
  };
19
14
 
20
- export const Print = PrintInner as unknown as PrintComponent;
21
- Print.Page = PrintPage;
15
+ export const Print = Object.assign(PrintInner, {
16
+ Page: PrintPage,
17
+ });
@@ -247,7 +247,8 @@ export const PrintProvider: ParentComponent = (props) => {
247
247
  sliceCanvas.width = canvas.width;
248
248
  sliceCanvas.height = Math.min(pageHeightPx, canvas.height - i * pageHeightPx);
249
249
 
250
- const ctx = sliceCanvas.getContext("2d")!;
250
+ const ctx = sliceCanvas.getContext("2d");
251
+ if (!ctx) throw new Error("Failed to get 2D canvas context");
251
252
  ctx.drawImage(
252
253
  canvas,
253
254
  0,
@@ -1,4 +1,4 @@
1
- import { children, createEffect, createSignal, onCleanup, type ParentComponent } from "solid-js";
1
+ import { children, createEffect, createMemo, createSignal, onCleanup, type ParentComponent } from "solid-js";
2
2
  import clsx from "clsx";
3
3
  import "@simplysm/core-browser";
4
4
 
@@ -8,7 +8,7 @@ export interface InvalidProps {
8
8
  /** Visual indicator variant */
9
9
  variant?: "border" | "dot";
10
10
  /** When true, visual display only appears after target loses focus */
11
- touchMode?: boolean;
11
+ lazyValidation?: boolean;
12
12
  }
13
13
 
14
14
  export const Invalid: ParentComponent<InvalidProps> = (props) => {
@@ -27,7 +27,11 @@ export const Invalid: ParentComponent<InvalidProps> = (props) => {
27
27
 
28
28
  const resolved = children(() => props.children);
29
29
 
30
- // Reactively update setCustomValidity when message changes (always, regardless of touchMode)
30
+ const targetEl = createMemo(() =>
31
+ resolved.toArray().find((el): el is HTMLElement => el instanceof HTMLElement),
32
+ );
33
+
34
+ // Reactively update setCustomValidity when message changes (always, regardless of lazyValidation)
31
35
  createEffect(() => {
32
36
  const msg = props.message ?? "";
33
37
  hiddenInputEl.setCustomValidity(msg);
@@ -35,19 +39,19 @@ export const Invalid: ParentComponent<InvalidProps> = (props) => {
35
39
 
36
40
  // Set target to relative + insert hidden input inside target
37
41
  createEffect(() => {
38
- const targetEl = resolved.toArray().find((el): el is HTMLElement => el instanceof HTMLElement);
39
- if (!targetEl) return;
42
+ const el = targetEl();
43
+ if (!el) return;
40
44
 
41
- const computedPosition = getComputedStyle(targetEl).position;
45
+ const computedPosition = getComputedStyle(el).position;
42
46
  if (computedPosition === "static") {
43
- targetEl.style.position = "relative";
47
+ el.style.position = "relative";
44
48
  }
45
49
 
46
- targetEl.appendChild(hiddenInputEl);
50
+ el.appendChild(hiddenInputEl);
47
51
 
48
52
  onCleanup(() => {
49
- if (hiddenInputEl.parentElement === targetEl) {
50
- targetEl.removeChild(hiddenInputEl);
53
+ if (hiddenInputEl.parentElement === el) {
54
+ el.removeChild(hiddenInputEl);
51
55
  }
52
56
  });
53
57
  });
@@ -56,28 +60,28 @@ export const Invalid: ParentComponent<InvalidProps> = (props) => {
56
60
  createEffect(() => {
57
61
  const variant = props.variant ?? "dot";
58
62
  const message = props.message ?? "";
59
- const touchMode = props.touchMode ?? false;
63
+ const lazyValidation = props.lazyValidation ?? false;
60
64
  const isTouched = touched();
61
65
 
62
- const targetEl = resolved.toArray().find((el): el is HTMLElement => el instanceof HTMLElement);
66
+ const el = targetEl();
63
67
 
64
- if (!targetEl) return;
68
+ if (!el) return;
65
69
 
66
- const shouldShow = message !== "" && (!touchMode || isTouched);
70
+ const shouldShow = message !== "" && (!lazyValidation || isTouched);
67
71
 
68
72
  if (variant === "border") {
69
73
  if (shouldShow) {
70
- targetEl.classList.add("border-danger-500");
74
+ el.classList.add("border-danger-500");
71
75
  } else {
72
- targetEl.classList.remove("border-danger-500");
76
+ el.classList.remove("border-danger-500");
73
77
  }
74
78
 
75
79
  onCleanup(() => {
76
- targetEl.classList.remove("border-danger-500");
80
+ el.classList.remove("border-danger-500");
77
81
  });
78
82
  } else {
79
83
  // variant === "dot"
80
- const existingDot = targetEl.querySelector("[data-invalid-dot]");
84
+ const existingDot = el.querySelector("[data-invalid-dot]");
81
85
  if (existingDot) {
82
86
  existingDot.remove();
83
87
  }
@@ -90,11 +94,11 @@ export const Invalid: ParentComponent<InvalidProps> = (props) => {
90
94
  "size-1.5 rounded-full",
91
95
  "pointer-events-none bg-danger-500",
92
96
  );
93
- targetEl.appendChild(dot);
97
+ el.appendChild(dot);
94
98
  }
95
99
 
96
100
  onCleanup(() => {
97
- const dot = targetEl.querySelector("[data-invalid-dot]");
101
+ const dot = el.querySelector("[data-invalid-dot]");
98
102
  if (dot) {
99
103
  dot.remove();
100
104
  }
@@ -102,32 +106,32 @@ export const Invalid: ParentComponent<InvalidProps> = (props) => {
102
106
  }
103
107
  });
104
108
 
105
- // touchMode: register focusout event on target to track touched state
109
+ // lazyValidation: register focusout event on target to track touched state
106
110
  createEffect(() => {
107
- if (!(props.touchMode ?? false)) return;
111
+ if (!(props.lazyValidation ?? false)) return;
108
112
 
109
- const targetEl = resolved.toArray().find((el): el is HTMLElement => el instanceof HTMLElement);
113
+ const el = targetEl();
110
114
 
111
- if (!targetEl) return;
115
+ if (!el) return;
112
116
 
113
117
  const handleFocusOut = () => {
114
118
  setTouched(true);
115
119
  };
116
120
 
117
- targetEl.addEventListener("focusout", handleFocusOut);
121
+ el.addEventListener("focusout", handleFocusOut);
118
122
 
119
123
  onCleanup(() => {
120
- targetEl.removeEventListener("focusout", handleFocusOut);
124
+ el.removeEventListener("focusout", handleFocusOut);
121
125
  });
122
126
  });
123
127
 
124
128
  // Redirect hidden input focus to focusable child of target
125
129
  hiddenInputEl.addEventListener("focus", () => {
126
- const targetEl = resolved.toArray().find((el): el is HTMLElement => el instanceof HTMLElement);
130
+ const el = targetEl();
127
131
 
128
- if (targetEl) {
132
+ if (el) {
129
133
  const focusable =
130
- targetEl.findFirstFocusableChild() ?? (targetEl.tabIndex >= 0 ? targetEl : undefined);
134
+ el.findFirstFocusableChild() ?? (el.tabIndex >= 0 ? el : undefined);
131
135
  if (focusable && focusable !== hiddenInputEl) {
132
136
  focusable.focus();
133
137
  }
@@ -13,7 +13,7 @@ export interface CheckboxProps {
13
13
  inline?: boolean;
14
14
  required?: boolean;
15
15
  validate?: (value: boolean) => string | undefined;
16
- touchMode?: boolean;
16
+ lazyValidation?: boolean;
17
17
  class?: string;
18
18
  style?: JSX.CSSProperties;
19
19
  children?: JSX.Element;
@@ -24,7 +24,7 @@ interface CheckboxGroupProps<TValue> {
24
24
  inset?: boolean;
25
25
  required?: boolean;
26
26
  validate?: (value: TValue[]) => string | undefined;
27
- touchMode?: boolean;
27
+ lazyValidation?: boolean;
28
28
  class?: string;
29
29
  style?: JSX.CSSProperties;
30
30
  children?: JSX.Element;
@@ -61,7 +61,7 @@ function CheckboxGroupInner<TValue = unknown>(props: CheckboxGroupProps<TValue>)
61
61
  isEmpty={(v) => (v as unknown[]).length === 0}
62
62
  validate={props.validate as ((value: any) => string | undefined) | undefined}
63
63
  required={props.required}
64
- touchMode={props.touchMode}
64
+ lazyValidation={props.lazyValidation}
65
65
  class={props.class}
66
66
  style={props.style}
67
67
  >
@@ -98,15 +98,6 @@ function CheckboxGroupItem<TValue = unknown>(props: {
98
98
  );
99
99
  }
100
100
 
101
- interface CheckboxGroupComponent {
102
- <TValue = unknown>(props: CheckboxGroupProps<TValue>): JSX.Element;
103
- Item: <TValue = unknown>(props: {
104
- value: TValue;
105
- disabled?: boolean;
106
- children?: JSX.Element;
107
- }) => JSX.Element;
108
- }
109
-
110
101
  export const CheckboxGroup = Object.assign(CheckboxGroupInner, {
111
102
  Item: CheckboxGroupItem,
112
- }) as CheckboxGroupComponent;
103
+ });
@@ -11,7 +11,7 @@ export interface RadioProps {
11
11
  inline?: boolean;
12
12
  required?: boolean;
13
13
  validate?: (value: boolean) => string | undefined;
14
- touchMode?: boolean;
14
+ lazyValidation?: boolean;
15
15
  class?: string;
16
16
  style?: JSX.CSSProperties;
17
17
  children?: JSX.Element;
@@ -24,7 +24,7 @@ interface RadioGroupProps<TValue> {
24
24
  inset?: boolean;
25
25
  required?: boolean;
26
26
  validate?: (value: TValue | undefined) => string | undefined;
27
- touchMode?: boolean;
27
+ lazyValidation?: boolean;
28
28
  class?: string;
29
29
  style?: JSX.CSSProperties;
30
30
  children?: JSX.Element;
@@ -58,7 +58,7 @@ function RadioGroupInner<TValue = unknown>(props: RadioGroupProps<TValue>): JSX.
58
58
  isEmpty={(v) => v === undefined || v === null}
59
59
  validate={props.validate as ((value: any) => string | undefined) | undefined}
60
60
  required={props.required}
61
- touchMode={props.touchMode}
61
+ lazyValidation={props.lazyValidation}
62
62
  class={props.class}
63
63
  style={props.style}
64
64
  >
@@ -95,15 +95,6 @@ function RadioGroupItem<TValue = unknown>(props: {
95
95
  );
96
96
  }
97
97
 
98
- interface RadioGroupComponent {
99
- <TValue = unknown>(props: RadioGroupProps<TValue>): JSX.Element;
100
- Item: <TValue = unknown>(props: {
101
- value: TValue;
102
- disabled?: boolean;
103
- children?: JSX.Element;
104
- }) => JSX.Element;
105
- }
106
-
107
98
  export const RadioGroup = Object.assign(RadioGroupInner, {
108
99
  Item: RadioGroupItem,
109
- }) as RadioGroupComponent;
100
+ });
@@ -27,7 +27,7 @@ export interface SelectableBaseProps {
27
27
  inline?: boolean;
28
28
  required?: boolean;
29
29
  validate?: (value: boolean) => string | undefined;
30
- touchMode?: boolean;
30
+ lazyValidation?: boolean;
31
31
  class?: string;
32
32
  style?: JSX.CSSProperties;
33
33
  children?: JSX.Element;
@@ -50,7 +50,7 @@ export const SelectableBase: ParentComponent<SelectableBaseProps & { config: Sel
50
50
  "inline",
51
51
  "required",
52
52
  "validate",
53
- "touchMode",
53
+ "lazyValidation",
54
54
  "class",
55
55
  "style",
56
56
  "children",
@@ -97,7 +97,7 @@ export const SelectableBase: ParentComponent<SelectableBaseProps & { config: Sel
97
97
  });
98
98
 
99
99
  return (
100
- <Invalid message={errorMsg()} variant="border" touchMode={local.touchMode}>
100
+ <Invalid message={errorMsg()} variant="border" lazyValidation={local.lazyValidation}>
101
101
  <div
102
102
  {...rest}
103
103
  use:ripple={!local.disabled}
@@ -10,7 +10,7 @@ import { useI18n } from "../../../providers/i18n/I18nProvider";
10
10
 
11
11
  export interface SelectionGroupBaseProps {
12
12
  required?: boolean;
13
- touchMode?: boolean;
13
+ lazyValidation?: boolean;
14
14
  class?: string;
15
15
  style?: JSX.CSSProperties;
16
16
  children?: JSX.Element;
@@ -34,7 +34,7 @@ export function SelectionGroupBase<TContextValue>(props: SelectionGroupBaseProps
34
34
  "isEmpty",
35
35
  "validate",
36
36
  "required",
37
- "touchMode",
37
+ "lazyValidation",
38
38
  "class",
39
39
  "style",
40
40
  "children",
@@ -46,7 +46,7 @@ export function SelectionGroupBase<TContextValue>(props: SelectionGroupBaseProps
46
46
  });
47
47
 
48
48
  return (
49
- <Invalid message={errorMsg()} variant="dot" touchMode={local.touchMode}>
49
+ <Invalid message={errorMsg()} variant="dot" lazyValidation={local.lazyValidation}>
50
50
  <local.context.Provider value={local.contextValue}>
51
51
  <div {...rest} class={twMerge("inline-flex", local.class)} style={local.style}>
52
52
  {local.children}
@@ -40,8 +40,8 @@ export interface ColorPickerProps {
40
40
  /** Custom validation function */
41
41
  validate?: (value: string | undefined) => string | undefined;
42
42
 
43
- /** touchMode: show errors only after blur */
44
- touchMode?: boolean;
43
+ /** lazyValidation: show errors only after blur */
44
+ lazyValidation?: boolean;
45
45
 
46
46
  /** Custom class */
47
47
  class?: string;
@@ -68,7 +68,7 @@ export const ColorPicker: Component<ColorPickerProps> = (props) => {
68
68
  "inset",
69
69
  "required",
70
70
  "validate",
71
- "touchMode",
71
+ "lazyValidation",
72
72
  "class",
73
73
  "style",
74
74
  ]);
@@ -104,7 +104,7 @@ export const ColorPicker: Component<ColorPickerProps> = (props) => {
104
104
  <Invalid
105
105
  variant={local.inset ? "dot" : "border"}
106
106
  message={errorMsg()}
107
- touchMode={local.touchMode}
107
+ lazyValidation={local.lazyValidation}
108
108
  >
109
109
  <input
110
110
  {...rest}
@@ -91,12 +91,12 @@ export interface ComboboxItemProps<TValue = unknown> extends Omit<
91
91
  /**
92
92
  * Selectable item in Combobox dropdown
93
93
  */
94
- const ComboboxItem: ParentComponent<ComboboxItemProps> = <T,>(
95
- props: ComboboxItemProps<T> & { children?: JSX.Element },
94
+ const ComboboxItem: ParentComponent<ComboboxItemProps> = <TValue,>(
95
+ props: ComboboxItemProps<TValue> & { children?: JSX.Element },
96
96
  ) => {
97
97
  const [local, rest] = splitProps(props, ["children", "class", "value", "disabled"]);
98
98
 
99
- const context = useComboboxContext<T>();
99
+ const context = useComboboxContext<TValue>();
100
100
 
101
101
  const isSelected = () => context.isSelected(local.value);
102
102
  const useRipple = () => !local.disabled;
@@ -168,8 +168,8 @@ export interface ComboboxProps<TValue = unknown> {
168
168
  /** Custom validation function */
169
169
  validate?: (value: TValue | undefined) => string | undefined;
170
170
 
171
- /** touchMode: show errors only after blur */
172
- touchMode?: boolean;
171
+ /** lazyValidation: show errors only after blur */
172
+ lazyValidation?: boolean;
173
173
 
174
174
  /** Placeholder text */
175
175
  placeholder?: string;
@@ -220,8 +220,8 @@ export interface ComboboxProps<TValue = unknown> {
220
220
  * </Combobox>
221
221
  * ```
222
222
  */
223
- const ComboboxInner = <T,>(props: ComboboxProps<T>) => {
224
- const [local, rest] = splitProps(props as ComboboxProps<T> & { children?: JSX.Element }, [
223
+ const ComboboxInner = <TValue,>(props: ComboboxProps<TValue>) => {
224
+ const [local, rest] = splitProps(props as ComboboxProps<TValue> & { children?: JSX.Element }, [
225
225
  "children",
226
226
  "class",
227
227
  "style",
@@ -238,7 +238,7 @@ const ComboboxInner = <T,>(props: ComboboxProps<T>) => {
238
238
  "size",
239
239
  "inset",
240
240
  "validate",
241
- "touchMode",
241
+ "lazyValidation",
242
242
  ]);
243
243
 
244
244
  const i18n = useI18n();
@@ -246,14 +246,14 @@ const ComboboxInner = <T,>(props: ComboboxProps<T>) => {
246
246
  // State
247
247
  const [open, setOpen] = createSignal(false);
248
248
  const [query, setQuery] = createSignal("");
249
- const [items, setItems] = createSignal<T[]>([]);
249
+ const [items, setItems] = createSignal<TValue[]>([]);
250
250
  const [busyCount, setBusyCount] = createSignal(0);
251
251
 
252
252
  // Selected value management (controlled/uncontrolled pattern)
253
- const [getValue, setInternalValue] = createControllableSignal<T | undefined>({
253
+ const [getValue, setInternalValue] = createControllableSignal<TValue | undefined>({
254
254
  value: () => local.value,
255
255
  onChange: () => local.onValueChange,
256
- } as Parameters<typeof createControllableSignal<T | undefined>>[0]);
256
+ } as Parameters<typeof createControllableSignal<TValue | undefined>>[0]);
257
257
 
258
258
  // Debounce queue (created once on mount, debounceMs only used as initial value)
259
259
  const debounceQueue = new DebounceQueue(local.debounceMs ?? 300);
@@ -263,13 +263,13 @@ const ComboboxInner = <T,>(props: ComboboxProps<T>) => {
263
263
  });
264
264
 
265
265
  // Check if value is selected
266
- const isSelected = (value: T): boolean => {
266
+ const isSelected = (value: TValue): boolean => {
267
267
  const current = getValue();
268
268
  return current === value;
269
269
  };
270
270
 
271
271
  // Select value
272
- const selectValue = (value: T) => {
272
+ const selectValue = (value: TValue) => {
273
273
  setInternalValue(value as any);
274
274
  setQuery("");
275
275
  setOpen(false);
@@ -288,7 +288,7 @@ const ComboboxInner = <T,>(props: ComboboxProps<T>) => {
288
288
  _setItemTemplate(() => fn);
289
289
 
290
290
  // Context value
291
- const contextValue: ComboboxContextValue<T> = {
291
+ const contextValue: ComboboxContextValue<TValue> = {
292
292
  isSelected,
293
293
  selectValue,
294
294
  closeDropdown,
@@ -343,8 +343,13 @@ const ComboboxInner = <T,>(props: ComboboxProps<T>) => {
343
343
  setOpen(false);
344
344
  } else if (e.key === "Enter" && local.allowsCustomValue && query().trim() !== "") {
345
345
  e.preventDefault();
346
- const customValue = local.parseCustomValue ? local.parseCustomValue(query()) : (query() as T);
347
- selectValue(customValue);
346
+ if (local.parseCustomValue) {
347
+ selectValue(local.parseCustomValue(query()));
348
+ } else {
349
+ setInternalValue(undefined as any);
350
+ setQuery("");
351
+ setOpen(false);
352
+ }
348
353
  }
349
354
  };
350
355
 
@@ -399,7 +404,7 @@ const ComboboxInner = <T,>(props: ComboboxProps<T>) => {
399
404
 
400
405
  // Render items
401
406
  const renderItems = (): JSX.Element => {
402
- const template = itemTemplate() as ((item: T, index: number) => JSX.Element) | undefined;
407
+ const template = itemTemplate() as ((item: TValue, index: number) => JSX.Element) | undefined;
403
408
 
404
409
  // Loading
405
410
  if (busyCount() > 0) {
@@ -427,7 +432,7 @@ const ComboboxInner = <T,>(props: ComboboxProps<T>) => {
427
432
  };
428
433
 
429
434
  return (
430
- <Invalid message={errorMsg()} variant="border" touchMode={local.touchMode}>
435
+ <Invalid message={errorMsg()} variant="border" lazyValidation={local.lazyValidation}>
431
436
  <ComboboxContext.Provider value={contextValue as ComboboxContextValue}>
432
437
  <div {...rest} data-combobox class={local.inset ? "flex" : "inline-flex"}>
433
438
  <Dropdown
@@ -111,13 +111,13 @@ export const DateRangePicker: Component<DateRangePickerProps> = (props) => {
111
111
  });
112
112
 
113
113
  // Handle period type change
114
- const handlePeriodTypeChange = (newType: DateRangePeriodType | DateRangePeriodType[]) => {
115
- const type = Array.isArray(newType) ? newType[0] : newType;
116
- setPeriodType(type);
114
+ const handlePeriodTypeChange = (newType: DateRangePeriodType | undefined) => {
115
+ if (newType == null) return;
116
+ setPeriodType(newType);
117
117
 
118
118
  const currentFrom = from();
119
119
 
120
- if (type === "month") {
120
+ if (newType === "month") {
121
121
  if (currentFrom) {
122
122
  const adjusted = currentFrom.setDay(1);
123
123
  setFrom(adjusted);
@@ -125,7 +125,7 @@ export const DateRangePicker: Component<DateRangePickerProps> = (props) => {
125
125
  } else {
126
126
  setTo(undefined as DateOnly | undefined);
127
127
  }
128
- } else if (type === "day") {
128
+ } else if (newType === "day") {
129
129
  setTo(currentFrom);
130
130
  }
131
131
  };