@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
@@ -144,10 +144,6 @@ export interface SelectItemProps<TValue = unknown> extends Omit<
144
144
  disabled?: boolean;
145
145
  }
146
146
 
147
- interface SelectItemComponent<TValue = unknown> extends ParentComponent<SelectItemProps<TValue>> {
148
- Children: typeof SelectItemChildren;
149
- }
150
-
151
147
  /**
152
148
  * Selectable item within Select dropdown
153
149
  *
@@ -164,12 +160,12 @@ interface SelectItemComponent<TValue = unknown> extends ParentComponent<SelectIt
164
160
  * </Select.Item>
165
161
  * ```
166
162
  */
167
- const SelectItem: SelectItemComponent = <T,>(
168
- props: SelectItemProps<T> & { children?: JSX.Element },
163
+ const SelectItemInner = <TValue,>(
164
+ props: SelectItemProps<TValue> & { children?: JSX.Element },
169
165
  ) => {
170
166
  const [local, rest] = splitProps(props, ["children", "class", "value", "disabled"]);
171
167
 
172
- const context = useSelectContext<T>();
168
+ const context = useSelectContext<TValue>();
173
169
 
174
170
  const [childrenSlot, ItemChildrenProvider] = createItemChildrenSlotAccessor();
175
171
  const hasChildren = () => childrenSlot() !== undefined;
@@ -231,7 +227,9 @@ const SelectItem: SelectItemComponent = <T,>(
231
227
  );
232
228
  };
233
229
 
234
- SelectItem.Children = SelectItemChildren;
230
+ const SelectItem = Object.assign(SelectItemInner, {
231
+ Children: SelectItemChildren,
232
+ });
235
233
 
236
234
  //#endregion
237
235
 
@@ -257,8 +255,8 @@ interface SelectCommonProps<TValue = unknown> {
257
255
  /** Custom validation function */
258
256
  validate?: (value: unknown) => string | undefined;
259
257
 
260
- /** touchMode: Show error only after blur */
261
- touchMode?: boolean;
258
+ /** lazyValidation: Show error only after blur */
259
+ lazyValidation?: boolean;
262
260
 
263
261
  /** Search text extraction function (shows search input when set) */
264
262
  itemSearchText?: (item: TValue) => string;
@@ -282,10 +280,10 @@ interface SelectSingleBaseProps<TValue> extends SelectCommonProps<TValue> {
282
280
  value?: TValue;
283
281
 
284
282
  /** Value change callback */
285
- onValueChange?: (value: TValue) => void;
283
+ onValueChange?: (value: TValue | undefined) => void;
286
284
 
287
285
  /** Display direction for multiple select (not used in single select) */
288
- multiDisplayDirection?: never;
286
+ tagDirection?: never;
289
287
 
290
288
  /** Hide select all button (not used in single select) */
291
289
  hideSelectAll?: never;
@@ -303,7 +301,7 @@ interface SelectMultipleBaseProps<TValue> extends SelectCommonProps<TValue> {
303
301
  onValueChange?: (value: TValue[]) => void;
304
302
 
305
303
  /** Display direction for multiple select */
306
- multiDisplayDirection?: "horizontal" | "vertical";
304
+ tagDirection?: "horizontal" | "vertical";
307
305
 
308
306
  /** Hide select all button */
309
307
  hideSelectAll?: boolean;
@@ -331,13 +329,6 @@ export type SelectProps<TValue = unknown> =
331
329
  | (SelectMultipleBaseProps<TValue> & SelectWithItemsPropsBase<TValue>)
332
330
  | (SelectMultipleBaseProps<TValue> & SelectWithChildrenPropsBase<TValue>);
333
331
 
334
- interface SelectComponent {
335
- <TValue = unknown>(props: SelectProps<TValue>): JSX.Element;
336
- Item: typeof SelectItem;
337
- Action: typeof SelectAction;
338
- Header: typeof SelectHeader;
339
- ItemTemplate: typeof SelectItemTemplate;
340
- }
341
332
 
342
333
  /**
343
334
  * Select component
@@ -358,8 +349,8 @@ interface SelectComponent {
358
349
  * </Select>
359
350
  * ```
360
351
  */
361
- const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
362
- const [local, rest] = splitProps(props as SelectProps<T> & { children?: JSX.Element }, [
352
+ const SelectInnerComponent = <TValue,>(props: SelectProps<TValue>) => {
353
+ const [local, rest] = splitProps(props as SelectProps<TValue> & { children?: JSX.Element }, [
363
354
  "children",
364
355
  "class",
365
356
  "style",
@@ -371,13 +362,13 @@ const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
371
362
  "placeholder",
372
363
  "size",
373
364
  "inset",
374
- "multiDisplayDirection",
365
+ "tagDirection",
375
366
  "hideSelectAll",
376
367
  "items",
377
368
  "itemChildren",
378
369
  "renderValue",
379
370
  "validate",
380
- "touchMode",
371
+ "lazyValidation",
381
372
  "itemSearchText",
382
373
  "isItemHidden",
383
374
  ]);
@@ -396,14 +387,14 @@ const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
396
387
  });
397
388
 
398
389
  // Manage selected value (controlled/uncontrolled pattern)
399
- type ValueType = T | T[] | undefined;
390
+ type ValueType = TValue | TValue[] | undefined;
400
391
  const [value, setValue] = createControllableSignal<ValueType>({
401
392
  value: () => local.value,
402
393
  onChange: () => local.onValueChange as ((v: ValueType) => void) | undefined,
403
394
  } as Parameters<typeof createControllableSignal<ValueType>>[0]);
404
395
 
405
396
  // Check if value is selected
406
- const isSelected = (itemValue: T): boolean => {
397
+ const isSelected = (itemValue: TValue): boolean => {
407
398
  const current = value();
408
399
  if (current === undefined) return false;
409
400
 
@@ -414,9 +405,9 @@ const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
414
405
  };
415
406
 
416
407
  // Toggle value
417
- const toggleValue = (itemValue: T) => {
408
+ const toggleValue = (itemValue: TValue) => {
418
409
  if (local.multiple) {
419
- const current = (value() as T[] | undefined) ?? [];
410
+ const current = (value() as TValue[] | undefined) ?? [];
420
411
  const idx = current.indexOf(itemValue);
421
412
  if (idx >= 0) {
422
413
  setValue([...current.slice(0, idx), ...current.slice(idx + 1)]);
@@ -443,7 +434,7 @@ const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
443
434
  _setItemTemplate(() => fn);
444
435
 
445
436
  // Context value
446
- const contextValue: SelectContextValue<T> = {
437
+ const contextValue: SelectContextValue<TValue> = {
447
438
  multiple: () => local.multiple ?? false,
448
439
  isSelected,
449
440
  toggleValue,
@@ -479,7 +470,7 @@ const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
479
470
  });
480
471
 
481
472
  // Search filtering (supports hierarchical structure)
482
- const filteredItems = createMemo((): T[] | undefined => {
473
+ const filteredItems = createMemo((): TValue[] | undefined => {
483
474
  if (!local.items) return undefined;
484
475
  if (!local.itemSearchText || !searchText()) return local.items;
485
476
 
@@ -487,7 +478,7 @@ const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
487
478
  if (terms.length === 0) return local.items;
488
479
 
489
480
  // Include parent when child matches in hierarchical structure
490
- const matchesSearch = (item: T): boolean => {
481
+ const matchesSearch = (item: TValue): boolean => {
491
482
  const itemText = local.itemSearchText!(item).toLowerCase();
492
483
  if (terms.every((t) => itemText.includes(t.toLowerCase()))) return true;
493
484
 
@@ -504,7 +495,7 @@ const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
504
495
  });
505
496
 
506
497
  // Items with hidden filter applied
507
- const visibleItems = createMemo((): T[] | undefined => {
498
+ const visibleItems = createMemo((): TValue[] | undefined => {
508
499
  const items = filteredItems();
509
500
  if (!items || !local.isItemHidden) return items;
510
501
 
@@ -526,7 +517,7 @@ const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
526
517
 
527
518
  // Deselect all
528
519
  const handleDeselectAll = () => {
529
- setValue([] as unknown as T[]);
520
+ setValue([] as TValue[]);
530
521
  };
531
522
 
532
523
  // Inner component: resolve children inside Provider to trigger slot registration
@@ -536,13 +527,13 @@ const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
536
527
 
537
528
  // Extract itemTemplate function
538
529
  const getItemTemplate = ():
539
- | ((item: T, index: number, depth: number) => JSX.Element)
530
+ | ((item: TValue, index: number, depth: number) => JSX.Element)
540
531
  | undefined => {
541
- return itemTemplate() as ((item: T, index: number, depth: number) => JSX.Element) | undefined;
532
+ return itemTemplate() as ((item: TValue, index: number, depth: number) => JSX.Element) | undefined;
542
533
  };
543
534
 
544
535
  // Render items recursively
545
- const renderItems = (itemList: T[], depth: number): JSX.Element => {
536
+ const renderItems = (itemList: TValue[], depth: number): JSX.Element => {
546
537
  const tpl = getItemTemplate();
547
538
  return (
548
539
  <For each={itemList}>
@@ -578,7 +569,7 @@ const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
578
569
  };
579
570
 
580
571
  // Render selected value (reuse itemTemplate when in items mode)
581
- const renderValue = (renderVal: T): JSX.Element => {
572
+ const renderValue = (renderVal: TValue): JSX.Element => {
582
573
  if (local.renderValue) {
583
574
  return local.renderValue(renderVal);
584
575
  }
@@ -598,7 +589,7 @@ const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
598
589
  }
599
590
 
600
591
  if (local.multiple && Array.isArray(current)) {
601
- const direction = local.multiDisplayDirection ?? "horizontal";
592
+ const direction = local.tagDirection ?? "horizontal";
602
593
  return (
603
594
  <div class={clsx("flex gap-1", direction === "vertical" ? "flex-col" : "flex-wrap")}>
604
595
  <For each={current}>{(v) => <span class={clsx("rounded px-1", bg.subtle)}>{renderValue(v)}</span>}</For>
@@ -606,7 +597,7 @@ const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
606
597
  );
607
598
  }
608
599
 
609
- return renderValue(current as T);
600
+ return renderValue(current as TValue);
610
601
  };
611
602
 
612
603
  // Show unset item: single select + not required + items mode
@@ -681,7 +672,7 @@ const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
681
672
  <Show when={local.items} fallback={resolved()}>
682
673
  {/* Unset item */}
683
674
  <Show when={showUnsetItem()}>
684
- <SelectItem value={undefined as T}>
675
+ <SelectItem value={undefined as TValue}>
685
676
  <span class={text.muted}>{i18n.t("select.unset")}</span>
686
677
  </SelectItem>
687
678
  </Show>
@@ -706,7 +697,7 @@ const SelectInnerComponent = <T,>(props: SelectProps<T>) => {
706
697
  };
707
698
 
708
699
  return (
709
- <Invalid message={errorMsg()} variant="border" touchMode={local.touchMode}>
700
+ <Invalid message={errorMsg()} variant="border" lazyValidation={local.lazyValidation}>
710
701
  <SelectCtx.Provider value={contextValue as SelectContextValue}>
711
702
  <HeaderProvider>
712
703
  <ActionProvider>
@@ -724,5 +715,5 @@ export const Select = Object.assign(SelectInnerComponent, {
724
715
  Header: SelectHeader,
725
716
  Action: SelectAction,
726
717
  ItemTemplate: SelectItemTemplate,
727
- }) as SelectComponent;
718
+ });
728
719
  //#endregion
@@ -3,7 +3,7 @@ import type { JSX } from "solid-js";
3
3
  import { twMerge } from "tailwind-merge";
4
4
  import clsx from "clsx";
5
5
  import { IconDeviceFloppy, IconStar, IconX } from "@tabler/icons-solidjs";
6
- import { objClone, objEqual } from "@simplysm/core-common";
6
+ import { obj } from "@simplysm/core-common";
7
7
  import { useSyncConfig } from "../../../hooks/useSyncConfig";
8
8
  import { useNotification } from "../../feedback/notification/NotificationProvider";
9
9
  import { Icon } from "../../display/Icon";
@@ -119,7 +119,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
119
119
 
120
120
  const newPreset: StatePresetItem<TValue> = {
121
121
  name,
122
- state: objClone(local.value),
122
+ state: obj.clone(local.value),
123
123
  };
124
124
  setPresets([...presets(), newPreset]);
125
125
  notification.info(i18n.t("statePreset.saved"), i18n.t("statePreset.savedMessage", { name }));
@@ -128,8 +128,8 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
128
128
  }
129
129
 
130
130
  function handleRestore(preset: StatePresetItem<TValue>): void {
131
- if (!objEqual(local.value, preset.state)) {
132
- local.onValueChange(objClone(preset.state));
131
+ if (!obj.equal(local.value, preset.state)) {
132
+ local.onValueChange(obj.clone(preset.state));
133
133
  }
134
134
  }
135
135
 
@@ -138,7 +138,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
138
138
  const presetName = snapshot[index].name;
139
139
 
140
140
  const updated = snapshot.map((p, i) =>
141
- i === index ? { ...p, state: objClone(local.value) } : p,
141
+ i === index ? { ...p, state: obj.clone(local.value) } : p,
142
142
  );
143
143
  setPresets(updated);
144
144
 
@@ -466,12 +466,6 @@ export interface SidebarProps extends JSX.HTMLAttributes<HTMLElement> {
466
466
  * </Sidebar>
467
467
  * ```
468
468
  */
469
- interface SidebarComponent extends ParentComponent<SidebarProps> {
470
- Container: typeof SidebarContainer;
471
- Menu: typeof SidebarMenu;
472
- User: typeof SidebarUser;
473
- }
474
-
475
469
  const SidebarInner: ParentComponent<SidebarProps> = (props) => {
476
470
  const [local, rest] = splitProps(props, ["children", "class", "style"]);
477
471
 
@@ -518,6 +512,6 @@ export const Sidebar = Object.assign(SidebarInner, {
518
512
  Container: SidebarContainer,
519
513
  Menu: SidebarMenu,
520
514
  User: SidebarUser,
521
- }) as unknown as SidebarComponent;
515
+ });
522
516
 
523
517
  //#endregion
@@ -43,10 +43,10 @@ export function useTopbarActionsAccessor(): Accessor<JSX.Element | undefined> {
43
43
  return context.actions;
44
44
  }
45
45
 
46
- export function createTopbarActions(accessor: () => JSX.Element): void {
46
+ export function useTopbarActions(accessor: () => JSX.Element): void {
47
47
  const context = useContext(TopbarContext);
48
48
  if (!context) {
49
- throw new Error("createTopbarActions can only be used inside Topbar.Container");
49
+ throw new Error("useTopbarActions can only be used inside Topbar.Container");
50
50
  }
51
51
 
52
52
  context.setActions(() => accessor());
@@ -450,7 +450,7 @@ const TopbarUser: ParentComponent<TopbarUserProps> = (props) => {
450
450
  *
451
451
  * @remarks
452
452
  * - Used inside TopbarContainer
453
- * - Displays actions set by createTopbarActions()
453
+ * - Displays actions set by useTopbarActions()
454
454
  */
455
455
  const TopbarActions: Component = () => {
456
456
  const context = useContext(TopbarContext);
@@ -2,6 +2,7 @@ import type { Component, ParentComponent } from "solid-js";
2
2
  import { type Accessor, createContext, createMemo, createRoot, useContext } from "solid-js";
3
3
  import type { IconProps } from "@tabler/icons-solidjs";
4
4
 
5
+ //#region Types
5
6
  // ── Input Types ──
6
7
 
7
8
  export interface AppStructureGroupItem<TModule> {
@@ -80,7 +81,9 @@ export interface AppStructure<TModule> {
80
81
  allFlatPerms: AppFlatPerm<TModule>[];
81
82
  getTitleChainByHref(href: string): string[];
82
83
  }
84
+ //#endregion
83
85
 
86
+ //#region Type Inference
84
87
  // ── Perms Type Inference ──
85
88
 
86
89
  type PermKey<TItem> = TItem extends { code: infer C extends string }
@@ -113,7 +116,9 @@ type InferPerms<TItems extends any[]> = {
113
116
  ? InferPerms<C>
114
117
  : InferLeafPerms<Item>;
115
118
  };
119
+ //#endregion
116
120
 
121
+ //#region Internal Helpers
117
122
  // ── Internal Helpers ──
118
123
 
119
124
  function isGroupItem<TModule>(
@@ -139,7 +144,9 @@ function checkModules<TModule>(
139
144
 
140
145
  return true;
141
146
  }
147
+ //#endregion
142
148
 
149
+ //#region Routes
143
150
  // ── Routes ──
144
151
 
145
152
  function buildUsableRoutes<TModule>(
@@ -170,7 +177,9 @@ function buildUsableRoutes<TModule>(
170
177
 
171
178
  return result;
172
179
  }
180
+ //#endregion
173
181
 
182
+ //#region Menus
174
183
  // ── Menus ──
175
184
 
176
185
  function buildMenus<TModule>(
@@ -217,7 +226,9 @@ function flattenMenus(menus: AppMenu[], titleChain: string[] = []): AppFlatMenu[
217
226
 
218
227
  return result;
219
228
  }
229
+ //#endregion
220
230
 
231
+ //#region Perms
221
232
  // ── Perms ──
222
233
 
223
234
  function buildPerms<TModule>(
@@ -396,7 +407,9 @@ function buildPermsObject<TModule>(
396
407
 
397
408
  return obj;
398
409
  }
410
+ //#endregion
399
411
 
412
+ //#region Info
400
413
  // ── Info ──
401
414
 
402
415
  function findItemChainByCodes<TModule>(
@@ -415,7 +428,9 @@ function findItemChainByCodes<TModule>(
415
428
 
416
429
  return result;
417
430
  }
431
+ //#endregion
418
432
 
433
+ //#region createAppStructure
419
434
  // ── Main Function ──
420
435
 
421
436
  function buildAppStructure<TModule, const TItems extends AppStructureItem<TModule>[]>(opts: {
@@ -517,3 +532,4 @@ export function createAppStructure<TModule, const TItems extends AppStructureIte
517
532
 
518
533
  return { AppStructureProvider, useAppStructure };
519
534
  }
535
+ //#endregion
@@ -1,7 +1,7 @@
1
1
  import { createEffect } from "solid-js";
2
2
  import { createStore, reconcile, unwrap } from "solid-js/store";
3
3
  import type { SetStoreFunction } from "solid-js/store";
4
- import { objClone, objEqual } from "@simplysm/core-common";
4
+ import { obj } from "@simplysm/core-common";
5
5
 
6
6
  /**
7
7
  * Store hook that supports the controlled/uncontrolled pattern.
@@ -30,7 +30,7 @@ export function createControllableStore<TValue extends object>(options: {
30
30
  value: () => TValue;
31
31
  onChange: () => ((value: TValue) => void) | undefined;
32
32
  }): [TValue, SetStoreFunction<TValue>] {
33
- const [store, rawSet] = createStore<TValue>(objClone(options.value()));
33
+ const [store, rawSet] = createStore<TValue>(obj.clone(options.value()));
34
34
 
35
35
  // Sync internal store when external value changes
36
36
  createEffect(() => {
@@ -39,10 +39,10 @@ export function createControllableStore<TValue extends object>(options: {
39
39
 
40
40
  // Wrap setter with a function wrapper to add onChange notification
41
41
  const wrappedSet = ((...args: any[]) => {
42
- const before = objClone(unwrap(store));
42
+ const before = obj.clone(unwrap(store));
43
43
  (rawSet as any)(...args);
44
- if (!objEqual(before, unwrap(store))) {
45
- options.onChange()?.(objClone(unwrap(store)));
44
+ if (!obj.equal(before, unwrap(store))) {
45
+ options.onChange()?.(obj.clone(unwrap(store)));
46
46
  }
47
47
  }) as SetStoreFunction<TValue>;
48
48
 
package/src/index.ts CHANGED
@@ -54,7 +54,7 @@ export * from "./components/data/list/ListItem.styles";
54
54
  export * from "./components/data/Pagination";
55
55
  export * from "./components/data/sheet/DataSheet";
56
56
  export * from "./components/data/sheet/DataSheet.styles";
57
- export * from "./components/data/sheet/types";
57
+ export * from "./components/data/sheet/DataSheet.types";
58
58
  export * from "./components/data/calendar/Calendar";
59
59
  export * from "./components/data/kanban/Kanban";
60
60
 
@@ -63,6 +63,7 @@ export * from "./components/data/kanban/Kanban";
63
63
  //#region ========== Display ==========
64
64
 
65
65
  export * from "./components/display/Barcode";
66
+ export * from "./components/display/Barcode.types";
66
67
  export * from "./components/display/Card";
67
68
  export * from "./components/display/Echarts";
68
69
  export * from "./components/display/Icon";
@@ -181,11 +182,11 @@ export * from "./components/features/data-select-button/DataSelectButton";
181
182
 
182
183
  // CrudSheet
183
184
  export * from "./components/features/crud-sheet/CrudSheet";
184
- export * from "./components/features/crud-sheet/types";
185
+ export * from "./components/features/crud-sheet/CrudSheet.types";
185
186
 
186
187
  // CrudDetail
187
188
  export * from "./components/features/crud-detail/CrudDetail";
188
- export * from "./components/features/crud-detail/types";
189
+ export * from "./components/features/crud-detail/CrudDetail.types";
189
190
 
190
191
  // PermissionTable
191
192
  export * from "./components/features/permission-table/PermissionTable";
@@ -2,7 +2,7 @@ import { createContext, type ParentComponent, onCleanup, useContext } from "soli
2
2
  import {
3
3
  createServiceClient,
4
4
  type ServiceClient,
5
- type ServiceConnectionConfig,
5
+ type ServiceConnectionOptions,
6
6
  } from "@simplysm/service-client";
7
7
  import { useConfig } from "./ConfigContext";
8
8
  import { useNotification } from "../components/feedback/notification/NotificationProvider";
@@ -12,7 +12,7 @@ import { useNotification } from "../components/feedback/notification/Notificatio
12
12
  */
13
13
  export interface ServiceClientContextValue {
14
14
  /** Open a WebSocket connection (defaults to "default" if key is omitted) */
15
- connect: (key?: string, options?: Partial<ServiceConnectionConfig>) => Promise<void>;
15
+ connect: (key?: string, options?: Partial<ServiceConnectionOptions>) => Promise<void>;
16
16
  /** Close a connection */
17
17
  close: (key?: string) => Promise<void>;
18
18
  /** Get a connected client instance (throws if the key is not connected) */
@@ -100,7 +100,7 @@ export const ServiceClientProvider: ParentComponent = (props) => {
100
100
 
101
101
  const connect = async (
102
102
  key?: string,
103
- options?: Partial<ServiceConnectionConfig>,
103
+ options?: Partial<ServiceConnectionOptions>,
104
104
  ): Promise<void> => {
105
105
  const resolvedKey = key ?? "default";
106
106
 
@@ -113,7 +113,7 @@ export const ServiceClientProvider: ParentComponent = (props) => {
113
113
  }
114
114
  }
115
115
 
116
- const defaultConfig: ServiceConnectionConfig = {
116
+ const defaultConfig: ServiceConnectionOptions = {
117
117
  host: location.hostname,
118
118
  port: Number(location.port) || (location.protocol.startsWith("https") ? 443 : 80),
119
119
  ssl: location.protocol.startsWith("https"),