@simplysm/solid 13.0.76 → 13.0.78

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
@@ -25,8 +25,14 @@ export interface DataSheetProps<TItem> {
25
25
  selectionMode?: "single" | "multiple";
26
26
  selection?: TItem[];
27
27
  onSelectionChange?: (items: TItem[]) => void;
28
- autoSelect?: "click";
29
- itemSelectable?: (item: TItem) => boolean | string;
28
+ autoSelect?: boolean;
29
+ /**
30
+ * Determines if an item can be selected.
31
+ * - `true` → selectable
32
+ * - `false` → not selectable
33
+ * - `string` → not selectable, string shown as tooltip explaining why
34
+ */
35
+ isItemSelectable?: (item: TItem) => boolean | string;
30
36
 
31
37
  // Tree expansion
32
38
  expandedItems?: TItem[];
@@ -1,5 +1,5 @@
1
- import type { DataSheetColumnDef, FlatItem, HeaderDef, SortingDef } from "./types";
2
- import { objGetChainValue } from "@simplysm/core-common";
1
+ import type { DataSheetColumnDef, FlatItem, HeaderDef, SortingDef } from "./DataSheet.types";
2
+ import { obj } from "@simplysm/core-common";
3
3
 
4
4
  export function normalizeHeader(header?: string | string[]): string[] {
5
5
  if (header == null) return [""];
@@ -166,7 +166,7 @@ export function applySorting<TItem>(items: TItem[], sorts: SortingDef[]): TItem[
166
166
  let result = [...items];
167
167
  for (const sort of [...sorts].reverse()) {
168
168
  const selector = (item: TItem) =>
169
- objGetChainValue(item, sort.key) as string | number | undefined;
169
+ obj.getChainValue(item, sort.key) as string | number | undefined;
170
170
  result = sort.desc ? result.orderByDesc(selector) : result.orderBy(selector);
171
171
  }
172
172
  return result;
@@ -1,6 +1,6 @@
1
1
  import type { JSX } from "solid-js";
2
2
  import { createSlots } from "../../../helpers/createSlots";
3
- import type { DataSheetColumnProps } from "./types";
3
+ import type { DataSheetColumnProps } from "./DataSheet.types";
4
4
 
5
5
  const [SlotComponent, createColumnSlotsAccessor] = createSlots<DataSheetColumnProps<any>>();
6
6
 
@@ -6,7 +6,7 @@ import type {
6
6
  DataSheetConfigColumn,
7
7
  DataSheetConfigColumnInfo,
8
8
  DataSheetReorderEvent,
9
- } from "./types";
9
+ } from "./DataSheet.types";
10
10
  import { DataSheet } from "./DataSheet";
11
11
  import { Checkbox } from "../../form-control/checkbox/Checkbox";
12
12
  import { TextInput } from "../../form-control/field/TextInput";
@@ -1,6 +1,6 @@
1
1
  import { createMemo, type Accessor } from "solid-js";
2
- import type { FlatItem } from "../types";
3
- import { collectAllExpandable, flattenTree } from "../sheetUtils";
2
+ import type { FlatItem } from "../DataSheet.types";
3
+ import { collectAllExpandable, flattenTree } from "../DataSheet.utils";
4
4
  import { createControllableSignal } from "../../../../hooks/createControllableSignal";
5
5
 
6
6
  export interface UseDataSheetExpansionProps<TItem> {
@@ -1,11 +1,11 @@
1
1
  import { createMemo, createSignal, type Accessor } from "solid-js";
2
2
  import { createResizeObserver } from "@solid-primitives/resize-observer";
3
- import type { DataSheetColumnDef } from "../types";
3
+ import type { DataSheetColumnDef, DataSheetReorderEvent } from "../DataSheet.types";
4
4
 
5
5
  export interface UseDataSheetFixedColumnsProps<TItem> {
6
6
  itemChildren?: (item: TItem, index: number) => TItem[] | undefined;
7
7
  selectionMode?: "single" | "multiple";
8
- onItemsReorder?: (event: any) => void;
8
+ onItemsReorder?: (event: DataSheetReorderEvent<TItem>) => void;
9
9
  }
10
10
 
11
11
  export function useDataSheetFixedColumns<TItem>(
@@ -0,0 +1,168 @@
1
+ import type { JSX } from "solid-js";
2
+ import { Show } from "solid-js";
3
+ import clsx from "clsx";
4
+ import { twMerge } from "tailwind-merge";
5
+ import { Icon } from "../../../display/Icon";
6
+ import { IconArrowsSort, IconSortAscending, IconSortDescending } from "@tabler/icons-solidjs";
7
+ import type { HeaderDef, DataSheetColumnDef } from "../DataSheet.types";
8
+
9
+ export interface UseDataSheetHeaderCellProps<TItem> {
10
+ effectiveColumns: () => DataSheetColumnDef<TItem>[];
11
+ headerRowTops: () => number[];
12
+ getFixedStyle: (colIndex: number) => string | undefined;
13
+ isLastFixed: (colIndex: number) => boolean;
14
+ registerColumnRef: (colIndex: number, el: HTMLElement) => void;
15
+ toggleSort: (key: string, multi: boolean) => void;
16
+ getSortDef: (key: string) => { desc: boolean } | undefined;
17
+ sortIndex: (key: string) => number | undefined;
18
+ onResizerPointerdown: (e: PointerEvent, key: string) => void;
19
+ onResizerDoubleClick: (key: string) => void;
20
+ thClass: string;
21
+ fixedClass: string;
22
+ sortableThClass: string;
23
+ fixedLastClass: string;
24
+ thContentClass: string;
25
+ resizerClass: string;
26
+ sortIconClass: string;
27
+ }
28
+
29
+ export function useDataSheetHeaderCell<TItem>(props: UseDataSheetHeaderCellProps<TItem>) {
30
+ function renderHeaderCell(header: HeaderDef, colIndex: number, rowIndex: number): JSX.Element {
31
+ const isSortable = () =>
32
+ header.isLastRow &&
33
+ header.colIndex != null &&
34
+ props.effectiveColumns()[header.colIndex].sortable;
35
+ const colKey = () =>
36
+ header.colIndex != null
37
+ ? props.effectiveColumns()[header.colIndex].key
38
+ : undefined;
39
+
40
+ const isGroupFixed = (): boolean => {
41
+ if (header.isLastRow) return false;
42
+ const start = colIndex;
43
+ const span = header.colspan;
44
+ const cols = props.effectiveColumns();
45
+ for (let i = start; i < start + span && i < cols.length; i++) {
46
+ if (!cols[i].fixed) return false;
47
+ }
48
+ return true;
49
+ };
50
+
51
+ const isCellFixed = () =>
52
+ (header.isLastRow &&
53
+ header.colIndex != null &&
54
+ props.effectiveColumns()[header.colIndex].fixed) ||
55
+ isGroupFixed();
56
+
57
+ const isCellLastFixed = () => {
58
+ if (header.isLastRow && header.colIndex != null)
59
+ return props.isLastFixed(header.colIndex);
60
+ if (isGroupFixed()) {
61
+ const lastCol = colIndex + header.colspan - 1;
62
+ return props.isLastFixed(lastCol);
63
+ }
64
+ return false;
65
+ };
66
+
67
+ const cellStyle = (): string | undefined => {
68
+ const parts: string[] = [];
69
+ const top = props.headerRowTops()[rowIndex];
70
+ parts.push(`top: ${top}px`);
71
+ if (header.isLastRow && header.colIndex != null) {
72
+ const left = props.getFixedStyle(header.colIndex);
73
+ if (left != null) parts.push(left);
74
+ const col = props.effectiveColumns()[header.colIndex];
75
+ if (col.width != null) parts.push(`max-width: ${col.width.replace(/;/g, "")}`);
76
+ } else if (isGroupFixed()) {
77
+ const left = props.getFixedStyle(colIndex);
78
+ if (left != null) parts.push(left);
79
+ }
80
+ return parts.length > 0 ? parts.join("; ") : undefined;
81
+ };
82
+
83
+ return (
84
+ <th
85
+ class={twMerge(
86
+ props.thClass,
87
+ props.fixedClass,
88
+ isSortable() ? props.sortableThClass : undefined,
89
+ isCellFixed() ? "z-[5]" : "z-[3]",
90
+ isCellLastFixed() ? props.fixedLastClass : undefined,
91
+ )}
92
+ colspan={header.colspan > 1 ? header.colspan : undefined}
93
+ rowspan={header.rowspan > 1 ? header.rowspan : undefined}
94
+ style={cellStyle()}
95
+ title={
96
+ header.isLastRow && header.colIndex != null
97
+ ? (props.effectiveColumns()[header.colIndex].tooltip ?? header.text)
98
+ : header.text
99
+ }
100
+ ref={(el: HTMLElement) => {
101
+ if (
102
+ header.isLastRow &&
103
+ header.colIndex != null &&
104
+ props.effectiveColumns()[header.colIndex].fixed
105
+ ) {
106
+ props.registerColumnRef(header.colIndex, el);
107
+ }
108
+ }}
109
+ onClick={(e) => {
110
+ if (!isSortable()) return;
111
+ const key = colKey();
112
+ if (key == null) return;
113
+ props.toggleSort(key, e.shiftKey || e.ctrlKey);
114
+ }}
115
+ >
116
+ <div class={clsx("flex items-center gap-2", props.thContentClass)}>
117
+ <div class="flex-1">{header.headerContent?.() ?? header.text}</div>
118
+ <Show when={isSortable() && colKey()}>
119
+ {(key) => {
120
+ const sortDef = () => props.getSortDef(key());
121
+ const sortIdx = () => props.sortIndex(key());
122
+ return (
123
+ <div class={props.sortIconClass}>
124
+ <Show when={sortDef()?.desc === false}>
125
+ <Icon icon={IconSortAscending} />
126
+ </Show>
127
+ <Show when={sortDef()?.desc === true}>
128
+ <Icon icon={IconSortDescending} />
129
+ </Show>
130
+ <Show when={sortDef() == null}>
131
+ <Icon
132
+ icon={IconArrowsSort}
133
+ class="opacity-30"
134
+ />
135
+ </Show>
136
+ <Show when={sortIdx()}>
137
+ {(idx) => <sub>{idx()}</sub>}
138
+ </Show>
139
+ </div>
140
+ );
141
+ }}
142
+ </Show>
143
+ </div>
144
+ <Show
145
+ when={
146
+ header.isLastRow &&
147
+ header.colIndex != null &&
148
+ props.effectiveColumns()[header.colIndex].resizable
149
+ }
150
+ >
151
+ <div
152
+ class={props.resizerClass}
153
+ onClick={(e) => e.stopPropagation()}
154
+ onPointerDown={(e) =>
155
+ props.onResizerPointerdown(e, props.effectiveColumns()[header.colIndex!].key)
156
+ }
157
+ onDblClick={(e) => {
158
+ e.stopPropagation();
159
+ props.onResizerDoubleClick(props.effectiveColumns()[header.colIndex!].key);
160
+ }}
161
+ />
162
+ </Show>
163
+ </th>
164
+ );
165
+ }
166
+
167
+ return { renderHeaderCell };
168
+ }
@@ -1,7 +1,6 @@
1
1
  import { createSignal, type Accessor } from "solid-js";
2
2
  import { startPointerDrag } from "../../../../helpers/startPointerDrag";
3
- import type { DataSheetReorderEvent } from "../types";
4
- import type { FlatItem } from "../types";
3
+ import type { DataSheetReorderEvent, FlatItem } from "../DataSheet.types";
5
4
 
6
5
  export interface UseDataSheetReorderProps<TItem> {
7
6
  onItemsReorder?: (event: DataSheetReorderEvent<TItem>) => void;
@@ -1,12 +1,12 @@
1
1
  import { createSignal, type Accessor } from "solid-js";
2
- import type { FlatItem } from "../types";
2
+ import type { FlatItem } from "../DataSheet.types";
3
3
  import { createControllableSignal } from "../../../../hooks/createControllableSignal";
4
4
 
5
5
  export interface UseDataSheetSelectionProps<TItem> {
6
6
  selectionMode?: "single" | "multiple";
7
7
  selection?: TItem[];
8
8
  onSelectionChange?: (items: TItem[]) => void;
9
- itemSelectable?: (item: TItem) => boolean | string;
9
+ isItemSelectable?: (item: TItem) => boolean | string;
10
10
  }
11
11
 
12
12
  export interface UseDataSheetSelectionReturn<TItem> {
@@ -35,8 +35,8 @@ export function useDataSheetSelection<TItem>(
35
35
  const [lastClickAction, setLastClickAction] = createSignal<"select" | "deselect">("select");
36
36
 
37
37
  function getItemSelectable(item: TItem): boolean | string {
38
- if (!props.itemSelectable) return true;
39
- return props.itemSelectable(item);
38
+ if (!props.isItemSelectable) return true;
39
+ return props.isItemSelectable(item);
40
40
  }
41
41
 
42
42
  function toggleSelect(item: TItem): void {
@@ -1,7 +1,7 @@
1
1
  import { createMemo, type Accessor } from "solid-js";
2
2
  import { createControllableSignal } from "../../../../hooks/createControllableSignal";
3
- import { applySorting } from "../sheetUtils";
4
- import type { SortingDef } from "../types";
3
+ import { applySorting } from "../DataSheet.utils";
4
+ import type { SortingDef } from "../DataSheet.types";
5
5
 
6
6
  export interface UseDataSheetSortingOptions<TItem> {
7
7
  sorts: Accessor<SortingDef[] | undefined>;
@@ -55,10 +55,8 @@ export interface DialogShowOptions {
55
55
  resizable?: boolean;
56
56
  /** Draggable */
57
57
  draggable?: boolean;
58
- /** Floating mode (fixed to bottom-right) */
59
- float?: boolean;
60
- /** Fill full screen */
61
- fill?: boolean;
58
+ /** Display mode */
59
+ mode?: "float" | "fill";
62
60
  /** Initial width (px) */
63
61
  width?: number;
64
62
  /** Initial height (px) */
@@ -72,7 +70,7 @@ export interface DialogShowOptions {
72
70
  /** Custom header style */
73
71
  headerStyle?: JSX.CSSProperties | string;
74
72
  /** Confirmation function before closing (return false to cancel) */
75
- canDeactivate?: () => boolean;
73
+ beforeClose?: () => boolean;
76
74
  }
77
75
 
78
76
  /** Extract result type from component's close prop */
@@ -123,10 +121,8 @@ export interface DialogProps {
123
121
  resizable?: boolean;
124
122
  /** Draggable (default: true) */
125
123
  draggable?: boolean;
126
- /** Floating mode (no backdrop) */
127
- float?: boolean;
128
- /** Full-screen mode */
129
- fill?: boolean;
124
+ /** Display mode */
125
+ mode?: "float" | "fill";
130
126
  /** Width */
131
127
  width?: number;
132
128
  /** Height */
@@ -140,7 +136,7 @@ export interface DialogProps {
140
136
  /** Header style */
141
137
  headerStyle?: JSX.CSSProperties | string;
142
138
  /** Confirmation function before closing */
143
- canDeactivate?: () => boolean;
139
+ beforeClose?: () => boolean;
144
140
  /** Callback after close animation completes */
145
141
  onCloseComplete?: () => void;
146
142
  /** Additional CSS class */
@@ -219,15 +215,14 @@ const DialogInner: ParentComponent<DialogProps> = (props) => {
219
215
  "closeOnEscape",
220
216
  "resizable",
221
217
  "draggable",
222
- "float",
223
- "fill",
218
+ "mode",
224
219
  "width",
225
220
  "height",
226
221
  "minWidth",
227
222
  "minHeight",
228
223
  "position",
229
224
  "headerStyle",
230
- "canDeactivate",
225
+ "beforeClose",
231
226
  "onCloseComplete",
232
227
  "class",
233
228
  "children",
@@ -311,9 +306,9 @@ const DialogInner: ParentComponent<DialogProps> = (props) => {
311
306
  onCleanup(() => unregisterDialog(el));
312
307
  });
313
308
 
314
- // Attempt to close (check canDeactivate)
309
+ // Attempt to close (check beforeClose)
315
310
  const tryClose = () => {
316
- if (local.canDeactivate && !local.canDeactivate()) return;
311
+ if (local.beforeClose && !local.beforeClose()) return;
317
312
  setOpen(false);
318
313
  };
319
314
 
@@ -450,7 +445,7 @@ const DialogInner: ParentComponent<DialogProps> = (props) => {
450
445
  const dialogStyle = (): JSX.CSSProperties => {
451
446
  const style: JSX.CSSProperties = {};
452
447
 
453
- if (local.fill) {
448
+ if (local.mode === "fill") {
454
449
  style.width = "100%";
455
450
  style.height = "100%";
456
451
  } else {
@@ -499,8 +494,8 @@ const DialogInner: ParentComponent<DialogProps> = (props) => {
499
494
  clsx(
500
495
  "fixed bottom-0 left-0 right-0 top-0",
501
496
  "flex flex-col items-center",
502
- !local.fill && "pt-[calc(3rem+0.5rem)]",
503
- local.float && "pointer-events-none",
497
+ local.mode !== "fill" && "pt-[calc(3rem+0.5rem)]",
498
+ local.mode === "float" && "pointer-events-none",
504
499
  );
505
500
 
506
501
  // Backdrop class
@@ -523,14 +518,14 @@ const DialogInner: ParentComponent<DialogProps> = (props) => {
523
518
  "mx-auto",
524
519
  "w-fit min-w-[200px]",
525
520
  bg.surface,
526
- local.float
521
+ local.mode === "float"
527
522
  ? clsx("shadow-md dark:shadow-black/30", "border", border.subtle)
528
523
  : "shadow-2xl dark:shadow-black/40",
529
- local.fill ? "rounded-none border-none" : "rounded-lg",
524
+ local.mode === "fill" ? "rounded-none border-none" : "rounded-lg",
530
525
  "overflow-hidden",
531
526
  "flex flex-col",
532
527
  "focus:outline-none",
533
- local.float && "pointer-events-auto",
528
+ local.mode === "float" && "pointer-events-auto",
534
529
  animationClass(),
535
530
  );
536
531
 
@@ -545,7 +540,7 @@ const DialogInner: ParentComponent<DialogProps> = (props) => {
545
540
  <ActionProvider>
546
541
  <div ref={setWrapperRef} data-dialog class={wrapperClass()}>
547
542
  {/* Backdrop */}
548
- <Show when={!local.float}>
543
+ <Show when={local.mode !== "float"}>
549
544
  <div data-dialog-backdrop class={backdropClass()} onClick={handleBackdropClick} />
550
545
  </Show>
551
546
 
@@ -556,7 +551,7 @@ const DialogInner: ParentComponent<DialogProps> = (props) => {
556
551
  }}
557
552
  data-dialog-panel
558
553
  role="dialog"
559
- aria-modal={local.float ? undefined : true}
554
+ aria-modal={local.mode === "float" ? undefined : true}
560
555
  aria-labelledby={hasHeader() ? headerId : undefined}
561
556
  tabIndex={0}
562
557
  class={twMerge(dialogBaseClass(), local.class)}
@@ -637,7 +632,7 @@ export const Dialog = Object.assign(DialogInner, {
637
632
  interface DialogEntry {
638
633
  id: string;
639
634
  component: Component<any>;
640
- props: Record<string, any>;
635
+ props: Record<string, unknown>;
641
636
  options: DialogShowOptions;
642
637
  resolve: (result: unknown) => void;
643
638
  open: Accessor<boolean>;
@@ -736,15 +731,14 @@ export const DialogProvider: ParentComponent<DialogProviderProps> = (props) => {
736
731
  closeOnEscape={entry.options.closeOnEscape}
737
732
  resizable={entry.options.resizable}
738
733
  draggable={entry.options.draggable}
739
- float={entry.options.float}
740
- fill={entry.options.fill}
734
+ mode={entry.options.mode}
741
735
  width={entry.options.width}
742
736
  height={entry.options.height}
743
737
  minWidth={entry.options.minWidth}
744
738
  minHeight={entry.options.minHeight}
745
739
  position={entry.options.position}
746
740
  headerStyle={entry.options.headerStyle}
747
- canDeactivate={entry.options.canDeactivate}
741
+ beforeClose={entry.options.beforeClose}
748
742
  >
749
743
  <Show when={entry.options.header !== undefined}>
750
744
  <Dialog.Header>{entry.options.header}</Dialog.Header>
@@ -85,11 +85,6 @@ export interface DropdownProps {
85
85
  children: JSX.Element;
86
86
  }
87
87
 
88
- interface DropdownComponent extends ParentComponent<DropdownProps> {
89
- Trigger: typeof DropdownTrigger;
90
- Content: typeof DropdownContent;
91
- }
92
-
93
88
  /**
94
89
  * Dropdown popup component
95
90
  *
@@ -480,5 +475,5 @@ const DropdownInner: ParentComponent<DropdownProps> = (props: DropdownProps) =>
480
475
  export const Dropdown = Object.assign(DropdownInner, {
481
476
  Trigger: DropdownTrigger,
482
477
  Content: DropdownContent,
483
- }) as unknown as DropdownComponent;
478
+ });
484
479
  //#endregion
@@ -98,11 +98,6 @@ interface TabsProps {
98
98
  children?: JSX.Element;
99
99
  }
100
100
 
101
- interface TabsComponent {
102
- (props: TabsProps): JSX.Element;
103
- Tab: typeof TabsTabInner;
104
- }
105
-
106
101
  const TabsInner: ParentComponent<TabsProps> = (props) => {
107
102
  const [local, rest] = splitProps(props, [
108
103
  "value",
@@ -138,5 +133,5 @@ const TabsInner: ParentComponent<TabsProps> = (props) => {
138
133
  //#region Export
139
134
  export const Tabs = Object.assign(TabsInner, {
140
135
  Tab: TabsTabInner,
141
- }) as unknown as TabsComponent;
136
+ });
142
137
  //#endregion
@@ -1,118 +1,7 @@
1
1
  import { type Component, createEffect, splitProps, type JSX } from "solid-js";
2
2
  import { twMerge } from "tailwind-merge";
3
3
  import bwipjs from "bwip-js/browser";
4
-
5
- export type BarcodeType =
6
- | "auspost"
7
- | "azteccode"
8
- | "azteccodecompact"
9
- | "aztecrune"
10
- | "bc412"
11
- | "channelcode"
12
- | "codablockf"
13
- | "code11"
14
- | "code128"
15
- | "code16k"
16
- | "code2of5"
17
- | "code32"
18
- | "code39"
19
- | "code39ext"
20
- | "code49"
21
- | "code93"
22
- | "code93ext"
23
- | "codeone"
24
- | "coop2of5"
25
- | "daft"
26
- | "databarexpanded"
27
- | "databarexpandedcomposite"
28
- | "databarexpandedstacked"
29
- | "databarexpandedstackedcomposite"
30
- | "databarlimited"
31
- | "databarlimitedcomposite"
32
- | "databaromni"
33
- | "databaromnicomposite"
34
- | "databarstacked"
35
- | "databarstackedcomposite"
36
- | "databarstackedomni"
37
- | "databarstackedomnicomposite"
38
- | "databartruncated"
39
- | "databartruncatedcomposite"
40
- | "datalogic2of5"
41
- | "datamatrix"
42
- | "datamatrixrectangular"
43
- | "datamatrixrectangularextension"
44
- | "dotcode"
45
- | "ean13"
46
- | "ean13composite"
47
- | "ean14"
48
- | "ean2"
49
- | "ean5"
50
- | "ean8"
51
- | "ean8composite"
52
- | "flattermarken"
53
- | "gs1-128"
54
- | "gs1-128composite"
55
- | "gs1-cc"
56
- | "gs1datamatrix"
57
- | "gs1datamatrixrectangular"
58
- | "gs1dldatamatrix"
59
- | "gs1dlqrcode"
60
- | "gs1dotcode"
61
- | "gs1northamericancoupon"
62
- | "gs1qrcode"
63
- | "hanxin"
64
- | "hibcazteccode"
65
- | "hibccodablockf"
66
- | "hibccode128"
67
- | "hibccode39"
68
- | "hibcdatamatrix"
69
- | "hibcdatamatrixrectangular"
70
- | "hibcmicropdf417"
71
- | "hibcpdf417"
72
- | "hibcqrcode"
73
- | "iata2of5"
74
- | "identcode"
75
- | "industrial2of5"
76
- | "interleaved2of5"
77
- | "isbn"
78
- | "ismn"
79
- | "issn"
80
- | "itf14"
81
- | "japanpost"
82
- | "kix"
83
- | "leitcode"
84
- | "mailmark"
85
- | "mands"
86
- | "matrix2of5"
87
- | "maxicode"
88
- | "micropdf417"
89
- | "microqrcode"
90
- | "msi"
91
- | "onecode"
92
- | "pdf417"
93
- | "pdf417compact"
94
- | "pharmacode"
95
- | "pharmacode2"
96
- | "planet"
97
- | "plessey"
98
- | "posicode"
99
- | "postnet"
100
- | "pzn"
101
- | "qrcode"
102
- | "rationalizedCodabar"
103
- | "raw"
104
- | "rectangularmicroqrcode"
105
- | "royalmail"
106
- | "sscc18"
107
- | "swissqrcode"
108
- | "symbol"
109
- | "telepen"
110
- | "telepennumeric"
111
- | "ultracode"
112
- | "upca"
113
- | "upcacomposite"
114
- | "upce"
115
- | "upcecomposite";
4
+ import type { BarcodeType } from "./Barcode.types";
116
5
 
117
6
  export interface BarcodeProps extends JSX.HTMLAttributes<HTMLDivElement> {
118
7
  type: BarcodeType;
@@ -146,7 +35,9 @@ export const Barcode: Component<BarcodeProps> = (props) => {
146
35
  svgEl.setAttribute("height", parts[3]);
147
36
  }
148
37
  }
149
- } catch {
38
+ } catch (err) {
39
+ // eslint-disable-next-line no-console
40
+ console.warn("Barcode render failed:", err);
150
41
  containerRef.innerHTML = "";
151
42
  }
152
43
  });