@simplysm/solid 13.0.0-beta.6 → 13.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (782) hide show
  1. package/README.md +103 -1544
  2. package/dist/components/data/Pagination.d.ts.map +1 -0
  3. package/dist/components/data/Pagination.js +102 -56
  4. package/dist/components/data/Pagination.js.map +2 -3
  5. package/dist/components/data/Table.d.ts.map +1 -0
  6. package/dist/components/data/Table.js +16 -8
  7. package/dist/components/data/Table.js.map +2 -3
  8. package/dist/components/data/calendar/Calendar.d.ts.map +1 -0
  9. package/dist/components/data/calendar/Calendar.js +73 -21
  10. package/dist/components/data/calendar/Calendar.js.map +2 -3
  11. package/dist/components/data/kanban/Kanban.css +12 -0
  12. package/dist/components/data/kanban/Kanban.d.ts.map +1 -0
  13. package/dist/components/data/kanban/Kanban.js +181 -103
  14. package/dist/components/data/kanban/Kanban.js.map +2 -3
  15. package/dist/components/data/kanban/KanbanContext.d.ts.map +1 -0
  16. package/dist/components/data/kanban/KanbanContext.js.map +0 -1
  17. package/dist/components/data/list/List.d.ts.map +1 -0
  18. package/dist/components/data/list/List.js +32 -23
  19. package/dist/components/data/list/List.js.map +2 -3
  20. package/dist/components/data/list/ListContext.d.ts.map +1 -0
  21. package/dist/components/data/list/ListContext.js.map +0 -1
  22. package/dist/components/data/list/ListItem.d.ts.map +1 -0
  23. package/dist/components/data/list/ListItem.js +108 -59
  24. package/dist/components/data/list/ListItem.js.map +2 -3
  25. package/dist/components/data/list/ListItem.styles.d.ts.map +1 -0
  26. package/dist/components/data/list/ListItem.styles.js +3 -3
  27. package/dist/components/data/list/ListItem.styles.js.map +0 -1
  28. package/dist/components/data/permission-table/PermissionTable.d.ts.map +1 -0
  29. package/dist/components/data/permission-table/PermissionTable.js +105 -38
  30. package/dist/components/data/permission-table/PermissionTable.js.map +2 -3
  31. package/dist/components/data/sheet/DataSheet.css +26 -0
  32. package/dist/components/data/sheet/DataSheet.d.ts.map +1 -0
  33. package/dist/components/data/sheet/DataSheet.js +654 -438
  34. package/dist/components/data/sheet/DataSheet.js.map +2 -3
  35. package/dist/components/data/sheet/DataSheet.styles.d.ts.map +1 -0
  36. package/dist/components/data/sheet/DataSheet.styles.js +1 -1
  37. package/dist/components/data/sheet/DataSheet.styles.js.map +0 -1
  38. package/dist/components/data/sheet/DataSheetColumn.d.ts.map +1 -0
  39. package/dist/components/data/sheet/DataSheetColumn.js +1 -1
  40. package/dist/components/data/sheet/DataSheetColumn.js.map +2 -3
  41. package/dist/components/data/sheet/DataSheetConfigDialog.d.ts.map +1 -0
  42. package/dist/components/data/sheet/DataSheetConfigDialog.js +92 -18
  43. package/dist/components/data/sheet/DataSheetConfigDialog.js.map +2 -3
  44. package/dist/components/data/sheet/sheetUtils.d.ts.map +1 -0
  45. package/dist/components/data/sheet/sheetUtils.js.map +0 -1
  46. package/dist/components/data/sheet/types.d.ts.map +1 -0
  47. package/dist/components/data/sheet/types.js.map +0 -1
  48. package/dist/components/disclosure/Collapse.d.ts.map +1 -0
  49. package/dist/components/disclosure/Collapse.js +40 -23
  50. package/dist/components/disclosure/Collapse.js.map +2 -3
  51. package/dist/components/disclosure/Dialog.d.ts.map +1 -0
  52. package/dist/components/disclosure/Dialog.js +133 -141
  53. package/dist/components/disclosure/Dialog.js.map +2 -3
  54. package/dist/components/disclosure/DialogContext.d.ts.map +1 -0
  55. package/dist/components/disclosure/DialogContext.js.map +0 -1
  56. package/dist/components/disclosure/DialogInstanceContext.d.ts.map +1 -0
  57. package/dist/components/disclosure/DialogInstanceContext.js.map +0 -1
  58. package/dist/components/disclosure/DialogProvider.d.ts.map +1 -0
  59. package/dist/components/disclosure/DialogProvider.js +92 -40
  60. package/dist/components/disclosure/DialogProvider.js.map +2 -3
  61. package/dist/components/disclosure/Dropdown.d.ts.map +1 -0
  62. package/dist/components/disclosure/Dropdown.js +62 -47
  63. package/dist/components/disclosure/Dropdown.js.map +2 -3
  64. package/dist/components/disclosure/Tabs.d.ts.map +1 -0
  65. package/dist/components/disclosure/Tabs.js +57 -29
  66. package/dist/components/disclosure/Tabs.js.map +2 -3
  67. package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -0
  68. package/dist/components/disclosure/dialogZIndex.js.map +0 -1
  69. package/dist/components/display/Alert.d.ts.map +1 -0
  70. package/dist/components/display/Alert.js +16 -2
  71. package/dist/components/display/Alert.js.map +2 -3
  72. package/dist/components/display/Barcode.d.ts.map +1 -0
  73. package/dist/components/display/Barcode.js +16 -1
  74. package/dist/components/display/Barcode.js.map +2 -3
  75. package/dist/components/display/Card.css +15 -0
  76. package/dist/components/display/Card.d.ts.map +1 -0
  77. package/dist/components/display/Card.js +16 -10
  78. package/dist/components/display/Card.js.map +2 -3
  79. package/dist/{solid/src/components → components}/display/Echarts.d.ts +2 -2
  80. package/dist/components/display/Echarts.d.ts.map +1 -0
  81. package/dist/components/display/Echarts.js +28 -6
  82. package/dist/components/display/Echarts.js.map +2 -3
  83. package/dist/components/display/Icon.d.ts.map +1 -0
  84. package/dist/components/display/Icon.js +12 -1
  85. package/dist/components/display/Icon.js.map +2 -3
  86. package/dist/components/display/Tag.d.ts.map +1 -0
  87. package/dist/components/display/Tag.js +17 -5
  88. package/dist/components/display/Tag.js.map +2 -3
  89. package/dist/components/feedback/Progress.d.ts.map +1 -0
  90. package/dist/components/feedback/Progress.js +43 -12
  91. package/dist/components/feedback/Progress.js.map +2 -3
  92. package/dist/components/feedback/loading/LoadingContainer.css +21 -0
  93. package/dist/components/feedback/loading/LoadingContainer.d.ts.map +1 -0
  94. package/dist/components/feedback/loading/LoadingContainer.js +109 -45
  95. package/dist/components/feedback/loading/LoadingContainer.js.map +2 -3
  96. package/dist/components/feedback/loading/LoadingContext.d.ts.map +1 -0
  97. package/dist/components/feedback/loading/LoadingContext.js.map +0 -1
  98. package/dist/components/feedback/loading/LoadingProvider.d.ts.map +1 -0
  99. package/dist/components/feedback/loading/LoadingProvider.js +32 -12
  100. package/dist/components/feedback/loading/LoadingProvider.js.map +2 -3
  101. package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -0
  102. package/dist/components/feedback/notification/NotificationBanner.js +64 -30
  103. package/dist/components/feedback/notification/NotificationBanner.js.map +2 -3
  104. package/dist/components/feedback/notification/NotificationBell.d.ts.map +1 -0
  105. package/dist/components/feedback/notification/NotificationBell.js +118 -50
  106. package/dist/components/feedback/notification/NotificationBell.js.map +2 -3
  107. package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -0
  108. package/dist/components/feedback/notification/NotificationContext.js.map +0 -1
  109. package/dist/components/feedback/notification/NotificationProvider.d.ts.map +1 -0
  110. package/dist/components/feedback/notification/NotificationProvider.js +41 -17
  111. package/dist/components/feedback/notification/NotificationProvider.js.map +2 -3
  112. package/dist/components/feedback/notification/index.d.ts.map +1 -0
  113. package/dist/components/feedback/notification/index.js +4 -4
  114. package/dist/components/feedback/notification/index.js.map +0 -1
  115. package/dist/components/feedback/print/Print.d.ts.map +1 -0
  116. package/dist/components/feedback/print/Print.js +10 -2
  117. package/dist/components/feedback/print/Print.js.map +2 -3
  118. package/dist/components/feedback/print/PrintInstanceContext.d.ts.map +1 -0
  119. package/dist/components/feedback/print/PrintInstanceContext.js.map +0 -1
  120. package/dist/components/form-control/Button.d.ts.map +1 -0
  121. package/dist/components/form-control/Button.js +35 -56
  122. package/dist/components/form-control/Button.js.map +2 -3
  123. package/dist/components/form-control/DropdownTrigger.styles.d.ts.map +1 -0
  124. package/dist/components/form-control/DropdownTrigger.styles.js +2 -2
  125. package/dist/components/form-control/DropdownTrigger.styles.js.map +0 -1
  126. package/dist/components/form-control/Invalid.d.ts +10 -0
  127. package/dist/components/form-control/Invalid.d.ts.map +1 -0
  128. package/dist/components/form-control/Invalid.js +51 -0
  129. package/dist/components/form-control/Invalid.js.map +6 -0
  130. package/dist/components/form-control/ThemeToggle.d.ts.map +1 -0
  131. package/dist/components/form-control/ThemeToggle.js +75 -30
  132. package/dist/components/form-control/ThemeToggle.js.map +2 -3
  133. package/dist/{solid/src/components/form-control/checkbox/Radio.d.ts.map → components/form-control/checkbox/Checkbox.d.ts.map} +1 -1
  134. package/dist/components/form-control/checkbox/Checkbox.js +60 -50
  135. package/dist/components/form-control/checkbox/Checkbox.js.map +2 -3
  136. package/dist/components/form-control/checkbox/Checkbox.styles.d.ts.map +1 -0
  137. package/dist/components/form-control/checkbox/Checkbox.styles.js +2 -2
  138. package/dist/components/form-control/checkbox/Checkbox.styles.js.map +0 -1
  139. package/dist/components/form-control/checkbox/CheckboxGroup.d.ts.map +1 -0
  140. package/dist/components/form-control/checkbox/CheckboxGroup.js +49 -27
  141. package/dist/components/form-control/checkbox/CheckboxGroup.js.map +2 -3
  142. package/dist/components/form-control/checkbox/Radio.d.ts.map +1 -0
  143. package/dist/components/form-control/checkbox/Radio.js +58 -49
  144. package/dist/components/form-control/checkbox/Radio.js.map +2 -3
  145. package/dist/components/form-control/checkbox/RadioGroup.d.ts.map +1 -0
  146. package/dist/components/form-control/checkbox/RadioGroup.js +49 -27
  147. package/dist/components/form-control/checkbox/RadioGroup.js.map +2 -3
  148. package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -0
  149. package/dist/components/form-control/color-picker/ColorPicker.js +30 -21
  150. package/dist/components/form-control/color-picker/ColorPicker.js.map +2 -3
  151. package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -0
  152. package/dist/components/form-control/combobox/Combobox.js +172 -84
  153. package/dist/components/form-control/combobox/Combobox.js.map +2 -3
  154. package/dist/components/form-control/combobox/ComboboxContext.d.ts.map +1 -0
  155. package/dist/components/form-control/combobox/ComboboxContext.js.map +0 -1
  156. package/dist/components/form-control/combobox/ComboboxItem.d.ts.map +1 -0
  157. package/dist/components/form-control/combobox/ComboboxItem.js +38 -31
  158. package/dist/components/form-control/combobox/ComboboxItem.js.map +2 -3
  159. package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts.map +1 -0
  160. package/dist/components/form-control/date-range-picker/DateRangePicker.js +105 -67
  161. package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -3
  162. package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -0
  163. package/dist/components/form-control/editor/EditorToolbar.js +211 -248
  164. package/dist/components/form-control/editor/EditorToolbar.js.map +2 -3
  165. package/dist/{solid/src/components → components}/form-control/editor/RichTextEditor.d.ts +0 -2
  166. package/dist/components/form-control/editor/RichTextEditor.d.ts.map +1 -0
  167. package/dist/components/form-control/editor/RichTextEditor.js +73 -58
  168. package/dist/components/form-control/editor/RichTextEditor.js.map +2 -3
  169. package/dist/components/form-control/editor/editor.css +81 -0
  170. package/dist/{solid/src/components → components}/form-control/field/DatePicker.d.ts +0 -2
  171. package/dist/components/form-control/field/DatePicker.d.ts.map +1 -0
  172. package/dist/components/form-control/field/DatePicker.js +123 -91
  173. package/dist/components/form-control/field/DatePicker.js.map +2 -3
  174. package/dist/{solid/src/components → components}/form-control/field/DateTimePicker.d.ts +0 -2
  175. package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -0
  176. package/dist/components/form-control/field/DateTimePicker.js +123 -108
  177. package/dist/components/form-control/field/DateTimePicker.js.map +2 -3
  178. package/dist/{solid/src/components → components}/form-control/field/Field.styles.d.ts +0 -1
  179. package/dist/components/form-control/field/Field.styles.d.ts.map +1 -0
  180. package/dist/components/form-control/field/Field.styles.js +2 -4
  181. package/dist/components/form-control/field/Field.styles.js.map +1 -2
  182. package/dist/{solid/src/components → components}/form-control/field/NumberInput.d.ts +0 -2
  183. package/dist/components/form-control/field/NumberInput.d.ts.map +1 -0
  184. package/dist/components/form-control/field/NumberInput.js +137 -102
  185. package/dist/components/form-control/field/NumberInput.js.map +2 -3
  186. package/dist/{solid/src/components → components}/form-control/field/TextInput.d.ts +0 -2
  187. package/dist/components/form-control/field/TextInput.d.ts.map +1 -0
  188. package/dist/components/form-control/field/TextInput.js +133 -98
  189. package/dist/components/form-control/field/TextInput.js.map +2 -3
  190. package/dist/{solid/src/components → components}/form-control/field/Textarea.d.ts +0 -2
  191. package/dist/components/form-control/field/Textarea.d.ts.map +1 -0
  192. package/dist/components/form-control/field/Textarea.js +147 -128
  193. package/dist/components/form-control/field/Textarea.js.map +2 -3
  194. package/dist/{solid/src/components → components}/form-control/field/TimePicker.d.ts +0 -2
  195. package/dist/components/form-control/field/TimePicker.d.ts.map +1 -0
  196. package/dist/components/form-control/field/TimePicker.js +115 -87
  197. package/dist/components/form-control/field/TimePicker.js.map +2 -3
  198. package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -0
  199. package/dist/components/form-control/numpad/Numpad.js +189 -31
  200. package/dist/components/form-control/numpad/Numpad.js.map +2 -3
  201. package/dist/components/form-control/select/Select.d.ts.map +1 -0
  202. package/dist/components/form-control/select/Select.js +188 -86
  203. package/dist/components/form-control/select/Select.js.map +2 -3
  204. package/dist/components/form-control/select/SelectContext.d.ts.map +1 -0
  205. package/dist/components/form-control/select/SelectContext.js.map +0 -1
  206. package/dist/components/form-control/select/SelectItem.d.ts.map +1 -0
  207. package/dist/components/form-control/select/SelectItem.js +79 -38
  208. package/dist/components/form-control/select/SelectItem.js.map +2 -3
  209. package/dist/components/form-control/state-preset/StatePreset.d.ts.map +1 -0
  210. package/dist/components/form-control/state-preset/StatePreset.js +95 -80
  211. package/dist/components/form-control/state-preset/StatePreset.js.map +2 -3
  212. package/dist/components/layout/FormGroup.d.ts.map +1 -0
  213. package/dist/components/layout/FormGroup.js +47 -11
  214. package/dist/components/layout/FormGroup.js.map +2 -3
  215. package/dist/components/layout/FormTable.d.ts.map +1 -0
  216. package/dist/components/layout/FormTable.js +15 -1
  217. package/dist/components/layout/FormTable.js.map +2 -3
  218. package/dist/components/layout/sidebar/Sidebar.d.ts.map +1 -0
  219. package/dist/components/layout/sidebar/Sidebar.js +37 -36
  220. package/dist/components/layout/sidebar/Sidebar.js.map +2 -3
  221. package/dist/{solid/src/components → components}/layout/sidebar/SidebarContainer.d.ts +1 -1
  222. package/dist/components/layout/sidebar/SidebarContainer.d.ts.map +1 -0
  223. package/dist/components/layout/sidebar/SidebarContainer.js +48 -35
  224. package/dist/components/layout/sidebar/SidebarContainer.js.map +2 -3
  225. package/dist/components/layout/sidebar/SidebarContext.d.ts.map +1 -0
  226. package/dist/components/layout/sidebar/SidebarContext.js.map +0 -1
  227. package/dist/components/layout/sidebar/SidebarMenu.d.ts.map +1 -0
  228. package/dist/components/layout/sidebar/SidebarMenu.js +91 -25
  229. package/dist/components/layout/sidebar/SidebarMenu.js.map +2 -3
  230. package/dist/components/layout/sidebar/SidebarUser.d.ts +48 -0
  231. package/dist/components/layout/sidebar/SidebarUser.d.ts.map +1 -0
  232. package/dist/components/layout/sidebar/SidebarUser.js +99 -26
  233. package/dist/components/layout/sidebar/SidebarUser.js.map +2 -3
  234. package/dist/components/layout/topbar/Topbar.d.ts.map +1 -0
  235. package/dist/components/layout/topbar/Topbar.js +40 -7
  236. package/dist/components/layout/topbar/Topbar.js.map +2 -3
  237. package/dist/components/layout/topbar/TopbarContainer.d.ts.map +1 -0
  238. package/dist/components/layout/topbar/TopbarContainer.js +16 -1
  239. package/dist/components/layout/topbar/TopbarContainer.js.map +2 -3
  240. package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -0
  241. package/dist/components/layout/topbar/TopbarMenu.js +200 -28
  242. package/dist/components/layout/topbar/TopbarMenu.js.map +2 -3
  243. package/dist/components/layout/topbar/TopbarUser.d.ts.map +1 -0
  244. package/dist/components/layout/topbar/TopbarUser.js +83 -16
  245. package/dist/components/layout/topbar/TopbarUser.js.map +2 -3
  246. package/dist/directives/ripple.d.ts.map +1 -0
  247. package/dist/directives/ripple.js.map +0 -1
  248. package/dist/helpers/createAppStructure.d.ts.map +1 -0
  249. package/dist/helpers/createAppStructure.js.map +0 -1
  250. package/dist/helpers/mergeStyles.d.ts.map +1 -0
  251. package/dist/helpers/mergeStyles.js.map +0 -1
  252. package/dist/helpers/splitSlots.d.ts.map +1 -0
  253. package/dist/helpers/splitSlots.js.map +0 -1
  254. package/dist/hooks/createControllableSignal.d.ts.map +1 -0
  255. package/dist/hooks/createControllableSignal.js.map +0 -1
  256. package/dist/hooks/createIMEHandler.d.ts.map +1 -0
  257. package/dist/hooks/createIMEHandler.js.map +0 -1
  258. package/dist/hooks/createMountTransition.d.ts.map +1 -0
  259. package/dist/hooks/createMountTransition.js.map +0 -1
  260. package/dist/hooks/createPwaUpdate.d.ts +14 -0
  261. package/dist/hooks/createPwaUpdate.d.ts.map +1 -0
  262. package/dist/hooks/createPwaUpdate.js +50 -0
  263. package/dist/hooks/createPwaUpdate.js.map +6 -0
  264. package/dist/hooks/useClipboardValueCopy.d.ts.map +1 -0
  265. package/dist/hooks/useClipboardValueCopy.js +1 -2
  266. package/dist/hooks/useClipboardValueCopy.js.map +1 -2
  267. package/dist/hooks/useLocalStorage.d.ts +29 -0
  268. package/dist/hooks/useLocalStorage.d.ts.map +1 -0
  269. package/dist/hooks/useLocalStorage.js +36 -0
  270. package/dist/hooks/useLocalStorage.js.map +6 -0
  271. package/dist/hooks/useLogger.d.ts +9 -0
  272. package/dist/hooks/useLogger.d.ts.map +1 -0
  273. package/dist/hooks/useLogger.js +24 -0
  274. package/dist/hooks/useLogger.js.map +6 -0
  275. package/dist/hooks/usePrint.d.ts.map +1 -0
  276. package/dist/hooks/usePrint.js +2 -2
  277. package/dist/hooks/usePrint.js.map +0 -1
  278. package/dist/hooks/useRouterLink.d.ts.map +1 -0
  279. package/dist/hooks/useRouterLink.js.map +0 -1
  280. package/dist/hooks/useSyncConfig.d.ts +24 -0
  281. package/dist/hooks/useSyncConfig.d.ts.map +1 -0
  282. package/dist/hooks/useSyncConfig.js +60 -0
  283. package/dist/hooks/useSyncConfig.js.map +6 -0
  284. package/dist/{solid/src/index.d.ts → index.d.ts} +9 -4
  285. package/dist/index.d.ts.map +1 -0
  286. package/dist/index.js +90 -84
  287. package/dist/index.js.map +1 -2
  288. package/dist/{solid/src/providers → providers}/ConfigContext.d.ts +20 -2
  289. package/dist/providers/ConfigContext.d.ts.map +1 -0
  290. package/dist/providers/ConfigContext.js.map +1 -2
  291. package/dist/{solid/src/providers → providers}/InitializeProvider.d.ts +6 -3
  292. package/dist/providers/InitializeProvider.d.ts.map +1 -0
  293. package/dist/providers/InitializeProvider.js +58 -3
  294. package/dist/providers/InitializeProvider.js.map +2 -3
  295. package/dist/providers/ServiceClientContext.d.ts.map +1 -0
  296. package/dist/providers/ServiceClientContext.js.map +0 -1
  297. package/dist/providers/ServiceClientProvider.d.ts.map +1 -0
  298. package/dist/providers/ServiceClientProvider.js +30 -24
  299. package/dist/providers/ServiceClientProvider.js.map +2 -3
  300. package/dist/{solid/src/providers → providers}/ThemeContext.d.ts +1 -1
  301. package/dist/providers/ThemeContext.d.ts.map +1 -0
  302. package/dist/providers/ThemeContext.js +10 -6
  303. package/dist/providers/ThemeContext.js.map +2 -3
  304. package/dist/providers/shared-data/SharedDataChangeEvent.d.ts +5 -0
  305. package/dist/providers/shared-data/SharedDataChangeEvent.d.ts.map +1 -0
  306. package/dist/providers/shared-data/SharedDataChangeEvent.js +4 -4
  307. package/dist/providers/shared-data/SharedDataChangeEvent.js.map +1 -2
  308. package/dist/providers/shared-data/SharedDataContext.d.ts.map +1 -0
  309. package/dist/providers/shared-data/SharedDataContext.js.map +0 -1
  310. package/dist/providers/shared-data/SharedDataProvider.d.ts.map +1 -0
  311. package/dist/providers/shared-data/SharedDataProvider.js +20 -17
  312. package/dist/providers/shared-data/SharedDataProvider.js.map +2 -3
  313. package/dist/styles/patterns.styles.d.ts.map +1 -0
  314. package/dist/styles/patterns.styles.js +1 -1
  315. package/dist/styles/patterns.styles.js.map +0 -1
  316. package/dist/styles/tokens.styles.d.ts.map +1 -0
  317. package/dist/styles/tokens.styles.js.map +0 -1
  318. package/docs/data-components.md +304 -0
  319. package/docs/disclosure.md +208 -0
  320. package/docs/display.md +136 -0
  321. package/docs/feedback.md +188 -0
  322. package/docs/form-controls.md +535 -0
  323. package/docs/helpers.md +46 -0
  324. package/docs/hooks.md +313 -0
  325. package/docs/layout.md +289 -0
  326. package/docs/providers.md +35 -0
  327. package/docs/styling.md +67 -0
  328. package/package.json +20 -10
  329. package/src/components/data/kanban/Kanban.css +3 -1
  330. package/src/components/data/list/ListItem.styles.ts +2 -2
  331. package/src/components/data/sheet/DataSheet.css +11 -11
  332. package/src/components/data/sheet/DataSheet.tsx +3 -3
  333. package/src/components/display/Card.css +1 -0
  334. package/src/components/display/Echarts.tsx +18 -11
  335. package/src/components/feedback/loading/LoadingContainer.css +2 -0
  336. package/src/components/form-control/Invalid.tsx +61 -0
  337. package/src/components/form-control/editor/RichTextEditor.tsx +2 -9
  338. package/src/components/form-control/editor/editor.css +5 -5
  339. package/src/components/form-control/field/DatePicker.tsx +0 -6
  340. package/src/components/form-control/field/DateTimePicker.tsx +0 -6
  341. package/src/components/form-control/field/Field.styles.ts +0 -3
  342. package/src/components/form-control/field/NumberInput.tsx +0 -6
  343. package/src/components/form-control/field/TextInput.tsx +0 -6
  344. package/src/components/form-control/field/Textarea.tsx +0 -6
  345. package/src/components/form-control/field/TimePicker.tsx +0 -6
  346. package/src/components/form-control/state-preset/StatePreset.tsx +2 -2
  347. package/src/components/layout/sidebar/SidebarContainer.tsx +3 -4
  348. package/src/components/layout/sidebar/SidebarUser.tsx +44 -16
  349. package/src/hooks/createPwaUpdate.ts +73 -0
  350. package/src/hooks/useClipboardValueCopy.ts +1 -1
  351. package/src/hooks/useLocalStorage.ts +68 -0
  352. package/src/hooks/useLogger.ts +32 -0
  353. package/src/hooks/useSyncConfig.ts +99 -0
  354. package/src/index.ts +9 -4
  355. package/src/providers/ConfigContext.ts +23 -2
  356. package/src/providers/InitializeProvider.tsx +59 -5
  357. package/src/providers/ServiceClientProvider.tsx +2 -2
  358. package/src/providers/ThemeContext.tsx +3 -3
  359. package/src/providers/shared-data/SharedDataChangeEvent.ts +4 -7
  360. package/src/providers/shared-data/SharedDataProvider.tsx +3 -0
  361. package/{src/base.css → tailwind.css} +9 -8
  362. package/.cache/typecheck-browser.tsbuildinfo +0 -1
  363. package/.cache/typecheck-tests-browser.tsbuildinfo +0 -1
  364. package/dist/core-browser/src/extensions/element-ext.d.ts +0 -98
  365. package/dist/core-browser/src/extensions/element-ext.d.ts.map +0 -1
  366. package/dist/core-browser/src/extensions/html-element-ext.d.ts +0 -54
  367. package/dist/core-browser/src/extensions/html-element-ext.d.ts.map +0 -1
  368. package/dist/core-browser/src/index.d.ts +0 -7
  369. package/dist/core-browser/src/index.d.ts.map +0 -1
  370. package/dist/core-browser/src/utils/blob.d.ts +0 -10
  371. package/dist/core-browser/src/utils/blob.d.ts.map +0 -1
  372. package/dist/core-browser/src/utils/download.d.ts +0 -11
  373. package/dist/core-browser/src/utils/download.d.ts.map +0 -1
  374. package/dist/core-common/src/common.types.d.ts +0 -74
  375. package/dist/core-common/src/common.types.d.ts.map +0 -1
  376. package/dist/core-common/src/env.d.ts +0 -6
  377. package/dist/core-common/src/env.d.ts.map +0 -1
  378. package/dist/core-common/src/errors/argument-error.d.ts +0 -25
  379. package/dist/core-common/src/errors/argument-error.d.ts.map +0 -1
  380. package/dist/core-common/src/errors/not-implemented-error.d.ts +0 -29
  381. package/dist/core-common/src/errors/not-implemented-error.d.ts.map +0 -1
  382. package/dist/core-common/src/errors/sd-error.d.ts +0 -27
  383. package/dist/core-common/src/errors/sd-error.d.ts.map +0 -1
  384. package/dist/core-common/src/errors/timeout-error.d.ts +0 -31
  385. package/dist/core-common/src/errors/timeout-error.d.ts.map +0 -1
  386. package/dist/core-common/src/extensions/arr-ext.d.ts +0 -15
  387. package/dist/core-common/src/extensions/arr-ext.d.ts.map +0 -1
  388. package/dist/core-common/src/extensions/arr-ext.helpers.d.ts +0 -19
  389. package/dist/core-common/src/extensions/arr-ext.helpers.d.ts.map +0 -1
  390. package/dist/core-common/src/extensions/arr-ext.types.d.ts +0 -215
  391. package/dist/core-common/src/extensions/arr-ext.types.d.ts.map +0 -1
  392. package/dist/core-common/src/extensions/map-ext.d.ts +0 -57
  393. package/dist/core-common/src/extensions/map-ext.d.ts.map +0 -1
  394. package/dist/core-common/src/extensions/set-ext.d.ts +0 -36
  395. package/dist/core-common/src/extensions/set-ext.d.ts.map +0 -1
  396. package/dist/core-common/src/features/debounce-queue.d.ts +0 -53
  397. package/dist/core-common/src/features/debounce-queue.d.ts.map +0 -1
  398. package/dist/core-common/src/features/event-emitter.d.ts +0 -66
  399. package/dist/core-common/src/features/event-emitter.d.ts.map +0 -1
  400. package/dist/core-common/src/features/serial-queue.d.ts +0 -47
  401. package/dist/core-common/src/features/serial-queue.d.ts.map +0 -1
  402. package/dist/core-common/src/index.d.ts +0 -32
  403. package/dist/core-common/src/index.d.ts.map +0 -1
  404. package/dist/core-common/src/types/date-only.d.ts +0 -152
  405. package/dist/core-common/src/types/date-only.d.ts.map +0 -1
  406. package/dist/core-common/src/types/date-time.d.ts +0 -96
  407. package/dist/core-common/src/types/date-time.d.ts.map +0 -1
  408. package/dist/core-common/src/types/lazy-gc-map.d.ts +0 -80
  409. package/dist/core-common/src/types/lazy-gc-map.d.ts.map +0 -1
  410. package/dist/core-common/src/types/time.d.ts +0 -68
  411. package/dist/core-common/src/types/time.d.ts.map +0 -1
  412. package/dist/core-common/src/types/uuid.d.ts +0 -35
  413. package/dist/core-common/src/types/uuid.d.ts.map +0 -1
  414. package/dist/core-common/src/utils/bytes.d.ts +0 -51
  415. package/dist/core-common/src/utils/bytes.d.ts.map +0 -1
  416. package/dist/core-common/src/utils/date-format.d.ts +0 -90
  417. package/dist/core-common/src/utils/date-format.d.ts.map +0 -1
  418. package/dist/core-common/src/utils/json.d.ts +0 -34
  419. package/dist/core-common/src/utils/json.d.ts.map +0 -1
  420. package/dist/core-common/src/utils/num.d.ts +0 -60
  421. package/dist/core-common/src/utils/num.d.ts.map +0 -1
  422. package/dist/core-common/src/utils/obj.d.ts +0 -258
  423. package/dist/core-common/src/utils/obj.d.ts.map +0 -1
  424. package/dist/core-common/src/utils/path.d.ts +0 -23
  425. package/dist/core-common/src/utils/path.d.ts.map +0 -1
  426. package/dist/core-common/src/utils/primitive.d.ts +0 -18
  427. package/dist/core-common/src/utils/primitive.d.ts.map +0 -1
  428. package/dist/core-common/src/utils/str.d.ts +0 -103
  429. package/dist/core-common/src/utils/str.d.ts.map +0 -1
  430. package/dist/core-common/src/utils/template-strings.d.ts +0 -84
  431. package/dist/core-common/src/utils/template-strings.d.ts.map +0 -1
  432. package/dist/core-common/src/utils/transferable.d.ts +0 -47
  433. package/dist/core-common/src/utils/transferable.d.ts.map +0 -1
  434. package/dist/core-common/src/utils/wait.d.ts +0 -19
  435. package/dist/core-common/src/utils/wait.d.ts.map +0 -1
  436. package/dist/core-common/src/utils/xml.d.ts +0 -36
  437. package/dist/core-common/src/utils/xml.d.ts.map +0 -1
  438. package/dist/core-common/src/zip/sd-zip.d.ts +0 -80
  439. package/dist/core-common/src/zip/sd-zip.d.ts.map +0 -1
  440. package/dist/hooks/usePersisted.js +0 -25
  441. package/dist/hooks/usePersisted.js.map +0 -7
  442. package/dist/orm-common/src/db-context.d.ts +0 -669
  443. package/dist/orm-common/src/db-context.d.ts.map +0 -1
  444. package/dist/orm-common/src/errors/db-transaction-error.d.ts +0 -51
  445. package/dist/orm-common/src/errors/db-transaction-error.d.ts.map +0 -1
  446. package/dist/orm-common/src/exec/executable.d.ts +0 -79
  447. package/dist/orm-common/src/exec/executable.d.ts.map +0 -1
  448. package/dist/orm-common/src/exec/queryable.d.ts +0 -708
  449. package/dist/orm-common/src/exec/queryable.d.ts.map +0 -1
  450. package/dist/orm-common/src/exec/search-parser.d.ts +0 -72
  451. package/dist/orm-common/src/exec/search-parser.d.ts.map +0 -1
  452. package/dist/orm-common/src/expr/expr-unit.d.ts +0 -25
  453. package/dist/orm-common/src/expr/expr-unit.d.ts.map +0 -1
  454. package/dist/orm-common/src/expr/expr.d.ts +0 -1369
  455. package/dist/orm-common/src/expr/expr.d.ts.map +0 -1
  456. package/dist/orm-common/src/index.d.ts +0 -32
  457. package/dist/orm-common/src/index.d.ts.map +0 -1
  458. package/dist/orm-common/src/models/system-migration.d.ts +0 -10
  459. package/dist/orm-common/src/models/system-migration.d.ts.map +0 -1
  460. package/dist/orm-common/src/query-builder/base/expr-renderer-base.d.ts +0 -95
  461. package/dist/orm-common/src/query-builder/base/expr-renderer-base.d.ts.map +0 -1
  462. package/dist/orm-common/src/query-builder/base/query-builder-base.d.ts +0 -66
  463. package/dist/orm-common/src/query-builder/base/query-builder-base.d.ts.map +0 -1
  464. package/dist/orm-common/src/query-builder/mssql/mssql-expr-renderer.d.ts +0 -84
  465. package/dist/orm-common/src/query-builder/mssql/mssql-expr-renderer.d.ts.map +0 -1
  466. package/dist/orm-common/src/query-builder/mssql/mssql-query-builder.d.ts +0 -45
  467. package/dist/orm-common/src/query-builder/mssql/mssql-query-builder.d.ts.map +0 -1
  468. package/dist/orm-common/src/query-builder/mysql/mysql-expr-renderer.d.ts +0 -84
  469. package/dist/orm-common/src/query-builder/mysql/mysql-expr-renderer.d.ts.map +0 -1
  470. package/dist/orm-common/src/query-builder/mysql/mysql-query-builder.d.ts +0 -54
  471. package/dist/orm-common/src/query-builder/mysql/mysql-query-builder.d.ts.map +0 -1
  472. package/dist/orm-common/src/query-builder/postgresql/postgresql-expr-renderer.d.ts +0 -84
  473. package/dist/orm-common/src/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +0 -1
  474. package/dist/orm-common/src/query-builder/postgresql/postgresql-query-builder.d.ts +0 -52
  475. package/dist/orm-common/src/query-builder/postgresql/postgresql-query-builder.d.ts.map +0 -1
  476. package/dist/orm-common/src/query-builder/query-builder.d.ts +0 -7
  477. package/dist/orm-common/src/query-builder/query-builder.d.ts.map +0 -1
  478. package/dist/orm-common/src/schema/factory/column-builder.d.ts +0 -394
  479. package/dist/orm-common/src/schema/factory/column-builder.d.ts.map +0 -1
  480. package/dist/orm-common/src/schema/factory/index-builder.d.ts +0 -151
  481. package/dist/orm-common/src/schema/factory/index-builder.d.ts.map +0 -1
  482. package/dist/orm-common/src/schema/factory/relation-builder.d.ts +0 -337
  483. package/dist/orm-common/src/schema/factory/relation-builder.d.ts.map +0 -1
  484. package/dist/orm-common/src/schema/procedure-builder.d.ts +0 -202
  485. package/dist/orm-common/src/schema/procedure-builder.d.ts.map +0 -1
  486. package/dist/orm-common/src/schema/table-builder.d.ts +0 -259
  487. package/dist/orm-common/src/schema/table-builder.d.ts.map +0 -1
  488. package/dist/orm-common/src/schema/view-builder.d.ts +0 -183
  489. package/dist/orm-common/src/schema/view-builder.d.ts.map +0 -1
  490. package/dist/orm-common/src/types/column.d.ts +0 -172
  491. package/dist/orm-common/src/types/column.d.ts.map +0 -1
  492. package/dist/orm-common/src/types/db.d.ts +0 -175
  493. package/dist/orm-common/src/types/db.d.ts.map +0 -1
  494. package/dist/orm-common/src/types/expr.d.ts +0 -474
  495. package/dist/orm-common/src/types/expr.d.ts.map +0 -1
  496. package/dist/orm-common/src/types/query-def.d.ts +0 -351
  497. package/dist/orm-common/src/types/query-def.d.ts.map +0 -1
  498. package/dist/orm-common/src/utils/result-parser.d.ts +0 -38
  499. package/dist/orm-common/src/utils/result-parser.d.ts.map +0 -1
  500. package/dist/service-client/src/features/event-client.d.ts +0 -14
  501. package/dist/service-client/src/features/event-client.d.ts.map +0 -1
  502. package/dist/service-client/src/features/file-client.d.ts +0 -13
  503. package/dist/service-client/src/features/file-client.d.ts.map +0 -1
  504. package/dist/service-client/src/features/orm/orm-client-connector.d.ts +0 -10
  505. package/dist/service-client/src/features/orm/orm-client-connector.d.ts.map +0 -1
  506. package/dist/service-client/src/features/orm/orm-client-db-context-executor.d.ts +0 -26
  507. package/dist/service-client/src/features/orm/orm-client-db-context-executor.d.ts.map +0 -1
  508. package/dist/service-client/src/features/orm/orm-connect-config.d.ts +0 -13
  509. package/dist/service-client/src/features/orm/orm-connect-config.d.ts.map +0 -1
  510. package/dist/service-client/src/index.d.ts +0 -12
  511. package/dist/service-client/src/index.d.ts.map +0 -1
  512. package/dist/service-client/src/protocol/client-protocol-wrapper.d.ts +0 -23
  513. package/dist/service-client/src/protocol/client-protocol-wrapper.d.ts.map +0 -1
  514. package/dist/service-client/src/service-client.d.ts +0 -41
  515. package/dist/service-client/src/service-client.d.ts.map +0 -1
  516. package/dist/service-client/src/transport/service-transport.d.ts +0 -24
  517. package/dist/service-client/src/transport/service-transport.d.ts.map +0 -1
  518. package/dist/service-client/src/transport/socket-provider.d.ts +0 -31
  519. package/dist/service-client/src/transport/socket-provider.d.ts.map +0 -1
  520. package/dist/service-client/src/types/connection-config.d.ts +0 -8
  521. package/dist/service-client/src/types/connection-config.d.ts.map +0 -1
  522. package/dist/service-client/src/types/progress.types.d.ts +0 -10
  523. package/dist/service-client/src/types/progress.types.d.ts.map +0 -1
  524. package/dist/service-common/src/index.d.ts +0 -8
  525. package/dist/service-common/src/index.d.ts.map +0 -1
  526. package/dist/service-common/src/protocol/protocol.types.d.ts +0 -100
  527. package/dist/service-common/src/protocol/protocol.types.d.ts.map +0 -1
  528. package/dist/service-common/src/protocol/service-protocol.d.ts +0 -63
  529. package/dist/service-common/src/protocol/service-protocol.d.ts.map +0 -1
  530. package/dist/service-common/src/service-types/auto-update-service.types.d.ts +0 -17
  531. package/dist/service-common/src/service-types/auto-update-service.types.d.ts.map +0 -1
  532. package/dist/service-common/src/service-types/crypto-service.types.d.ts +0 -22
  533. package/dist/service-common/src/service-types/crypto-service.types.d.ts.map +0 -1
  534. package/dist/service-common/src/service-types/orm-service.types.d.ts +0 -30
  535. package/dist/service-common/src/service-types/orm-service.types.d.ts.map +0 -1
  536. package/dist/service-common/src/service-types/smtp-service.types.d.ts +0 -55
  537. package/dist/service-common/src/service-types/smtp-service.types.d.ts.map +0 -1
  538. package/dist/service-common/src/types.d.ts +0 -43
  539. package/dist/service-common/src/types.d.ts.map +0 -1
  540. package/dist/solid/src/components/data/Pagination.d.ts.map +0 -1
  541. package/dist/solid/src/components/data/Table.d.ts.map +0 -1
  542. package/dist/solid/src/components/data/calendar/Calendar.d.ts.map +0 -1
  543. package/dist/solid/src/components/data/kanban/Kanban.d.ts.map +0 -1
  544. package/dist/solid/src/components/data/kanban/KanbanContext.d.ts.map +0 -1
  545. package/dist/solid/src/components/data/list/List.d.ts.map +0 -1
  546. package/dist/solid/src/components/data/list/ListContext.d.ts.map +0 -1
  547. package/dist/solid/src/components/data/list/ListItem.d.ts.map +0 -1
  548. package/dist/solid/src/components/data/list/ListItem.styles.d.ts.map +0 -1
  549. package/dist/solid/src/components/data/permission-table/PermissionTable.d.ts.map +0 -1
  550. package/dist/solid/src/components/data/sheet/DataSheet.d.ts.map +0 -1
  551. package/dist/solid/src/components/data/sheet/DataSheet.styles.d.ts.map +0 -1
  552. package/dist/solid/src/components/data/sheet/DataSheetColumn.d.ts.map +0 -1
  553. package/dist/solid/src/components/data/sheet/DataSheetConfigDialog.d.ts.map +0 -1
  554. package/dist/solid/src/components/data/sheet/sheetUtils.d.ts.map +0 -1
  555. package/dist/solid/src/components/data/sheet/types.d.ts.map +0 -1
  556. package/dist/solid/src/components/disclosure/Collapse.d.ts.map +0 -1
  557. package/dist/solid/src/components/disclosure/Dialog.d.ts.map +0 -1
  558. package/dist/solid/src/components/disclosure/DialogContext.d.ts.map +0 -1
  559. package/dist/solid/src/components/disclosure/DialogInstanceContext.d.ts.map +0 -1
  560. package/dist/solid/src/components/disclosure/DialogProvider.d.ts.map +0 -1
  561. package/dist/solid/src/components/disclosure/Dropdown.d.ts.map +0 -1
  562. package/dist/solid/src/components/disclosure/Tabs.d.ts.map +0 -1
  563. package/dist/solid/src/components/disclosure/dialogZIndex.d.ts.map +0 -1
  564. package/dist/solid/src/components/display/Alert.d.ts.map +0 -1
  565. package/dist/solid/src/components/display/Barcode.d.ts.map +0 -1
  566. package/dist/solid/src/components/display/Card.d.ts.map +0 -1
  567. package/dist/solid/src/components/display/Echarts.d.ts.map +0 -1
  568. package/dist/solid/src/components/display/Icon.d.ts.map +0 -1
  569. package/dist/solid/src/components/display/Tag.d.ts.map +0 -1
  570. package/dist/solid/src/components/feedback/Progress.d.ts.map +0 -1
  571. package/dist/solid/src/components/feedback/loading/LoadingContainer.d.ts.map +0 -1
  572. package/dist/solid/src/components/feedback/loading/LoadingContext.d.ts.map +0 -1
  573. package/dist/solid/src/components/feedback/loading/LoadingProvider.d.ts.map +0 -1
  574. package/dist/solid/src/components/feedback/notification/NotificationBanner.d.ts.map +0 -1
  575. package/dist/solid/src/components/feedback/notification/NotificationBell.d.ts.map +0 -1
  576. package/dist/solid/src/components/feedback/notification/NotificationContext.d.ts.map +0 -1
  577. package/dist/solid/src/components/feedback/notification/NotificationProvider.d.ts.map +0 -1
  578. package/dist/solid/src/components/feedback/notification/index.d.ts.map +0 -1
  579. package/dist/solid/src/components/feedback/print/Print.d.ts.map +0 -1
  580. package/dist/solid/src/components/feedback/print/PrintInstanceContext.d.ts.map +0 -1
  581. package/dist/solid/src/components/form-control/Button.d.ts.map +0 -1
  582. package/dist/solid/src/components/form-control/DropdownTrigger.styles.d.ts.map +0 -1
  583. package/dist/solid/src/components/form-control/ThemeToggle.d.ts.map +0 -1
  584. package/dist/solid/src/components/form-control/checkbox/Checkbox.d.ts.map +0 -1
  585. package/dist/solid/src/components/form-control/checkbox/Checkbox.styles.d.ts.map +0 -1
  586. package/dist/solid/src/components/form-control/checkbox/CheckboxGroup.d.ts.map +0 -1
  587. package/dist/solid/src/components/form-control/checkbox/RadioGroup.d.ts.map +0 -1
  588. package/dist/solid/src/components/form-control/color-picker/ColorPicker.d.ts.map +0 -1
  589. package/dist/solid/src/components/form-control/combobox/Combobox.d.ts.map +0 -1
  590. package/dist/solid/src/components/form-control/combobox/ComboboxContext.d.ts.map +0 -1
  591. package/dist/solid/src/components/form-control/combobox/ComboboxItem.d.ts.map +0 -1
  592. package/dist/solid/src/components/form-control/date-range-picker/DateRangePicker.d.ts.map +0 -1
  593. package/dist/solid/src/components/form-control/editor/EditorToolbar.d.ts.map +0 -1
  594. package/dist/solid/src/components/form-control/editor/RichTextEditor.d.ts.map +0 -1
  595. package/dist/solid/src/components/form-control/field/DatePicker.d.ts.map +0 -1
  596. package/dist/solid/src/components/form-control/field/DateTimePicker.d.ts.map +0 -1
  597. package/dist/solid/src/components/form-control/field/Field.styles.d.ts.map +0 -1
  598. package/dist/solid/src/components/form-control/field/NumberInput.d.ts.map +0 -1
  599. package/dist/solid/src/components/form-control/field/TextInput.d.ts.map +0 -1
  600. package/dist/solid/src/components/form-control/field/Textarea.d.ts.map +0 -1
  601. package/dist/solid/src/components/form-control/field/TimePicker.d.ts.map +0 -1
  602. package/dist/solid/src/components/form-control/numpad/Numpad.d.ts.map +0 -1
  603. package/dist/solid/src/components/form-control/select/Select.d.ts.map +0 -1
  604. package/dist/solid/src/components/form-control/select/SelectContext.d.ts.map +0 -1
  605. package/dist/solid/src/components/form-control/select/SelectItem.d.ts.map +0 -1
  606. package/dist/solid/src/components/form-control/state-preset/StatePreset.d.ts.map +0 -1
  607. package/dist/solid/src/components/layout/FormGroup.d.ts.map +0 -1
  608. package/dist/solid/src/components/layout/FormTable.d.ts.map +0 -1
  609. package/dist/solid/src/components/layout/sidebar/Sidebar.d.ts.map +0 -1
  610. package/dist/solid/src/components/layout/sidebar/SidebarContainer.d.ts.map +0 -1
  611. package/dist/solid/src/components/layout/sidebar/SidebarContext.d.ts.map +0 -1
  612. package/dist/solid/src/components/layout/sidebar/SidebarMenu.d.ts.map +0 -1
  613. package/dist/solid/src/components/layout/sidebar/SidebarUser.d.ts +0 -36
  614. package/dist/solid/src/components/layout/sidebar/SidebarUser.d.ts.map +0 -1
  615. package/dist/solid/src/components/layout/topbar/Topbar.d.ts.map +0 -1
  616. package/dist/solid/src/components/layout/topbar/TopbarContainer.d.ts.map +0 -1
  617. package/dist/solid/src/components/layout/topbar/TopbarMenu.d.ts.map +0 -1
  618. package/dist/solid/src/components/layout/topbar/TopbarUser.d.ts.map +0 -1
  619. package/dist/solid/src/directives/ripple.d.ts.map +0 -1
  620. package/dist/solid/src/helpers/createAppStructure.d.ts.map +0 -1
  621. package/dist/solid/src/helpers/mergeStyles.d.ts.map +0 -1
  622. package/dist/solid/src/helpers/splitSlots.d.ts.map +0 -1
  623. package/dist/solid/src/hooks/createControllableSignal.d.ts.map +0 -1
  624. package/dist/solid/src/hooks/createIMEHandler.d.ts.map +0 -1
  625. package/dist/solid/src/hooks/createMountTransition.d.ts.map +0 -1
  626. package/dist/solid/src/hooks/useClipboardValueCopy.d.ts.map +0 -1
  627. package/dist/solid/src/hooks/usePersisted.d.ts +0 -26
  628. package/dist/solid/src/hooks/usePersisted.d.ts.map +0 -1
  629. package/dist/solid/src/hooks/usePrint.d.ts.map +0 -1
  630. package/dist/solid/src/hooks/useRouterLink.d.ts.map +0 -1
  631. package/dist/solid/src/index.d.ts.map +0 -1
  632. package/dist/solid/src/providers/ConfigContext.d.ts.map +0 -1
  633. package/dist/solid/src/providers/InitializeProvider.d.ts.map +0 -1
  634. package/dist/solid/src/providers/ServiceClientContext.d.ts.map +0 -1
  635. package/dist/solid/src/providers/ServiceClientProvider.d.ts.map +0 -1
  636. package/dist/solid/src/providers/ThemeContext.d.ts.map +0 -1
  637. package/dist/solid/src/providers/shared-data/SharedDataChangeEvent.d.ts +0 -8
  638. package/dist/solid/src/providers/shared-data/SharedDataChangeEvent.d.ts.map +0 -1
  639. package/dist/solid/src/providers/shared-data/SharedDataContext.d.ts.map +0 -1
  640. package/dist/solid/src/providers/shared-data/SharedDataProvider.d.ts.map +0 -1
  641. package/dist/solid/src/styles/patterns.styles.d.ts.map +0 -1
  642. package/dist/solid/src/styles/tokens.styles.d.ts.map +0 -1
  643. package/src/hooks/usePersisted.ts +0 -51
  644. package/tests/components/data/List.spec.tsx +0 -683
  645. package/tests/components/data/Pagination.spec.tsx +0 -317
  646. package/tests/components/data/Table.spec.tsx +0 -55
  647. package/tests/components/data/kanban/Kanban.selection.spec.tsx +0 -209
  648. package/tests/components/data/permission-table/PermissionTable.spec.tsx +0 -280
  649. package/tests/components/data/sheet/DataSheet.spec.tsx +0 -564
  650. package/tests/components/disclosure/Collapse.spec.tsx +0 -162
  651. package/tests/components/disclosure/Dialog.spec.tsx +0 -319
  652. package/tests/components/disclosure/DialogProvider.spec.tsx +0 -110
  653. package/tests/components/disclosure/Dropdown.spec.tsx +0 -410
  654. package/tests/components/disclosure/Tabs.spec.tsx +0 -220
  655. package/tests/components/display/Alert.spec.tsx +0 -47
  656. package/tests/components/display/Barcode.spec.tsx +0 -61
  657. package/tests/components/display/Card.spec.tsx +0 -41
  658. package/tests/components/display/Tag.spec.tsx +0 -47
  659. package/tests/components/feedback/notification/LiveRegion.spec.tsx +0 -41
  660. package/tests/components/feedback/notification/NotificationBanner.spec.tsx +0 -164
  661. package/tests/components/feedback/notification/NotificationBell.spec.tsx +0 -207
  662. package/tests/components/feedback/notification/NotificationContext.spec.tsx +0 -331
  663. package/tests/components/feedback/print/Print.spec.tsx +0 -45
  664. package/tests/components/form-control/Button.spec.tsx +0 -119
  665. package/tests/components/form-control/checkbox/Checkbox.spec.tsx +0 -120
  666. package/tests/components/form-control/checkbox/Radio.spec.tsx +0 -112
  667. package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +0 -67
  668. package/tests/components/form-control/combobox/Combobox.spec.tsx +0 -174
  669. package/tests/components/form-control/combobox/ComboboxItem.spec.tsx +0 -85
  670. package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +0 -172
  671. package/tests/components/form-control/field/DatePicker.spec.tsx +0 -305
  672. package/tests/components/form-control/field/DateTimePicker.spec.tsx +0 -287
  673. package/tests/components/form-control/field/NumberInput.spec.tsx +0 -276
  674. package/tests/components/form-control/field/TextInput.spec.tsx +0 -258
  675. package/tests/components/form-control/field/Textarea.spec.tsx +0 -181
  676. package/tests/components/form-control/field/TimePicker.spec.tsx +0 -243
  677. package/tests/components/form-control/numpad/Numpad.spec.tsx +0 -238
  678. package/tests/components/form-control/select/Select.spec.tsx +0 -239
  679. package/tests/components/form-control/select/SelectItem.spec.tsx +0 -149
  680. package/tests/components/layout/FormGroup.spec.tsx +0 -104
  681. package/tests/components/layout/FormTable.spec.tsx +0 -43
  682. package/tests/components/layout/sidebar/Sidebar.spec.tsx +0 -190
  683. package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +0 -203
  684. package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +0 -213
  685. package/tests/components/layout/sidebar/SidebarUser.spec.tsx +0 -171
  686. package/tests/directives/ripple.spec.tsx +0 -130
  687. package/tests/helpers/createAppStructure.spec.tsx +0 -338
  688. package/tests/helpers/mergeStyles.spec.ts +0 -163
  689. package/tests/helpers/splitSlots.spec.tsx +0 -188
  690. package/tests/hooks/createControllableSignal.spec.ts +0 -194
  691. package/tests/hooks/createIMEHandler.spec.ts +0 -80
  692. package/tests/hooks/createMountTransition.spec.ts +0 -86
  693. package/tests/hooks/usePersisted.spec.tsx +0 -191
  694. package/tests/hooks/usePrint.spec.tsx +0 -123
  695. package/tests/hooks/useRouterLink.spec.tsx +0 -183
  696. package/tests/providers/ConfigContext.spec.ts +0 -40
  697. package/tests/providers/ServiceClientContext.spec.tsx +0 -83
  698. package/tests/providers/shared-data/SharedDataProvider.spec.tsx +0 -233
  699. /package/dist/{solid/src/components → components}/data/Pagination.d.ts +0 -0
  700. /package/dist/{solid/src/components → components}/data/Table.d.ts +0 -0
  701. /package/dist/{solid/src/components → components}/data/calendar/Calendar.d.ts +0 -0
  702. /package/dist/{solid/src/components → components}/data/kanban/Kanban.d.ts +0 -0
  703. /package/dist/{solid/src/components → components}/data/kanban/KanbanContext.d.ts +0 -0
  704. /package/dist/{solid/src/components → components}/data/list/List.d.ts +0 -0
  705. /package/dist/{solid/src/components → components}/data/list/ListContext.d.ts +0 -0
  706. /package/dist/{solid/src/components → components}/data/list/ListItem.d.ts +0 -0
  707. /package/dist/{solid/src/components → components}/data/list/ListItem.styles.d.ts +0 -0
  708. /package/dist/{solid/src/components → components}/data/permission-table/PermissionTable.d.ts +0 -0
  709. /package/dist/{solid/src/components → components}/data/sheet/DataSheet.d.ts +0 -0
  710. /package/dist/{solid/src/components → components}/data/sheet/DataSheet.styles.d.ts +0 -0
  711. /package/dist/{solid/src/components → components}/data/sheet/DataSheetColumn.d.ts +0 -0
  712. /package/dist/{solid/src/components → components}/data/sheet/DataSheetConfigDialog.d.ts +0 -0
  713. /package/dist/{solid/src/components → components}/data/sheet/sheetUtils.d.ts +0 -0
  714. /package/dist/{solid/src/components → components}/data/sheet/types.d.ts +0 -0
  715. /package/dist/{solid/src/components → components}/disclosure/Collapse.d.ts +0 -0
  716. /package/dist/{solid/src/components → components}/disclosure/Dialog.d.ts +0 -0
  717. /package/dist/{solid/src/components → components}/disclosure/DialogContext.d.ts +0 -0
  718. /package/dist/{solid/src/components → components}/disclosure/DialogInstanceContext.d.ts +0 -0
  719. /package/dist/{solid/src/components → components}/disclosure/DialogProvider.d.ts +0 -0
  720. /package/dist/{solid/src/components → components}/disclosure/Dropdown.d.ts +0 -0
  721. /package/dist/{solid/src/components → components}/disclosure/Tabs.d.ts +0 -0
  722. /package/dist/{solid/src/components → components}/disclosure/dialogZIndex.d.ts +0 -0
  723. /package/dist/{solid/src/components → components}/display/Alert.d.ts +0 -0
  724. /package/dist/{solid/src/components → components}/display/Barcode.d.ts +0 -0
  725. /package/dist/{solid/src/components → components}/display/Card.d.ts +0 -0
  726. /package/dist/{solid/src/components → components}/display/Icon.d.ts +0 -0
  727. /package/dist/{solid/src/components → components}/display/Tag.d.ts +0 -0
  728. /package/dist/{solid/src/components → components}/feedback/Progress.d.ts +0 -0
  729. /package/dist/{solid/src/components → components}/feedback/loading/LoadingContainer.d.ts +0 -0
  730. /package/dist/{solid/src/components → components}/feedback/loading/LoadingContext.d.ts +0 -0
  731. /package/dist/{solid/src/components → components}/feedback/loading/LoadingProvider.d.ts +0 -0
  732. /package/dist/{solid/src/components → components}/feedback/notification/NotificationBanner.d.ts +0 -0
  733. /package/dist/{solid/src/components → components}/feedback/notification/NotificationBell.d.ts +0 -0
  734. /package/dist/{solid/src/components → components}/feedback/notification/NotificationContext.d.ts +0 -0
  735. /package/dist/{solid/src/components → components}/feedback/notification/NotificationProvider.d.ts +0 -0
  736. /package/dist/{solid/src/components → components}/feedback/notification/index.d.ts +0 -0
  737. /package/dist/{solid/src/components → components}/feedback/print/Print.d.ts +0 -0
  738. /package/dist/{solid/src/components → components}/feedback/print/PrintInstanceContext.d.ts +0 -0
  739. /package/dist/{solid/src/components → components}/form-control/Button.d.ts +0 -0
  740. /package/dist/{solid/src/components → components}/form-control/DropdownTrigger.styles.d.ts +0 -0
  741. /package/dist/{solid/src/components → components}/form-control/ThemeToggle.d.ts +0 -0
  742. /package/dist/{solid/src/components → components}/form-control/checkbox/Checkbox.d.ts +0 -0
  743. /package/dist/{solid/src/components → components}/form-control/checkbox/Checkbox.styles.d.ts +0 -0
  744. /package/dist/{solid/src/components → components}/form-control/checkbox/CheckboxGroup.d.ts +0 -0
  745. /package/dist/{solid/src/components → components}/form-control/checkbox/Radio.d.ts +0 -0
  746. /package/dist/{solid/src/components → components}/form-control/checkbox/RadioGroup.d.ts +0 -0
  747. /package/dist/{solid/src/components → components}/form-control/color-picker/ColorPicker.d.ts +0 -0
  748. /package/dist/{solid/src/components → components}/form-control/combobox/Combobox.d.ts +0 -0
  749. /package/dist/{solid/src/components → components}/form-control/combobox/ComboboxContext.d.ts +0 -0
  750. /package/dist/{solid/src/components → components}/form-control/combobox/ComboboxItem.d.ts +0 -0
  751. /package/dist/{solid/src/components → components}/form-control/date-range-picker/DateRangePicker.d.ts +0 -0
  752. /package/dist/{solid/src/components → components}/form-control/editor/EditorToolbar.d.ts +0 -0
  753. /package/dist/{solid/src/components → components}/form-control/numpad/Numpad.d.ts +0 -0
  754. /package/dist/{solid/src/components → components}/form-control/select/Select.d.ts +0 -0
  755. /package/dist/{solid/src/components → components}/form-control/select/SelectContext.d.ts +0 -0
  756. /package/dist/{solid/src/components → components}/form-control/select/SelectItem.d.ts +0 -0
  757. /package/dist/{solid/src/components → components}/form-control/state-preset/StatePreset.d.ts +0 -0
  758. /package/dist/{solid/src/components → components}/layout/FormGroup.d.ts +0 -0
  759. /package/dist/{solid/src/components → components}/layout/FormTable.d.ts +0 -0
  760. /package/dist/{solid/src/components → components}/layout/sidebar/Sidebar.d.ts +0 -0
  761. /package/dist/{solid/src/components → components}/layout/sidebar/SidebarContext.d.ts +0 -0
  762. /package/dist/{solid/src/components → components}/layout/sidebar/SidebarMenu.d.ts +0 -0
  763. /package/dist/{solid/src/components → components}/layout/topbar/Topbar.d.ts +0 -0
  764. /package/dist/{solid/src/components → components}/layout/topbar/TopbarContainer.d.ts +0 -0
  765. /package/dist/{solid/src/components → components}/layout/topbar/TopbarMenu.d.ts +0 -0
  766. /package/dist/{solid/src/components → components}/layout/topbar/TopbarUser.d.ts +0 -0
  767. /package/dist/{solid/src/directives → directives}/ripple.d.ts +0 -0
  768. /package/dist/{solid/src/helpers → helpers}/createAppStructure.d.ts +0 -0
  769. /package/dist/{solid/src/helpers → helpers}/mergeStyles.d.ts +0 -0
  770. /package/dist/{solid/src/helpers → helpers}/splitSlots.d.ts +0 -0
  771. /package/dist/{solid/src/hooks → hooks}/createControllableSignal.d.ts +0 -0
  772. /package/dist/{solid/src/hooks → hooks}/createIMEHandler.d.ts +0 -0
  773. /package/dist/{solid/src/hooks → hooks}/createMountTransition.d.ts +0 -0
  774. /package/dist/{solid/src/hooks → hooks}/useClipboardValueCopy.d.ts +0 -0
  775. /package/dist/{solid/src/hooks → hooks}/usePrint.d.ts +0 -0
  776. /package/dist/{solid/src/hooks → hooks}/useRouterLink.d.ts +0 -0
  777. /package/dist/{solid/src/providers → providers}/ServiceClientContext.d.ts +0 -0
  778. /package/dist/{solid/src/providers → providers}/ServiceClientProvider.d.ts +0 -0
  779. /package/dist/{solid/src/providers → providers}/shared-data/SharedDataContext.d.ts +0 -0
  780. /package/dist/{solid/src/providers → providers}/shared-data/SharedDataProvider.d.ts +0 -0
  781. /package/dist/{solid/src/styles → styles}/patterns.styles.d.ts +0 -0
  782. /package/dist/{solid/src/styles → styles}/tokens.styles.d.ts +0 -0
package/README.md CHANGED
@@ -37,1602 +37,163 @@ export default {
37
37
 
38
38
  ### Provider Setup
39
39
 
40
- Wrap your app root with `InitializeProvider` and `ThemeProvider`. `InitializeProvider` provides app-wide configuration (clientName, storage), and `ThemeProvider` manages dark mode state.
40
+ Wrap your app root with `InitializeProvider`. It automatically sets up all required providers internally: configuration context, theme (dark/light/system), notification system with banner, global error capturing (window.onerror, unhandledrejection), loading overlay, and programmatic dialog support.
41
41
 
42
42
  ```tsx
43
- import { InitializeProvider, ThemeProvider } from "@simplysm/solid";
43
+ import { InitializeProvider } from "@simplysm/solid";
44
44
 
45
45
  function App() {
46
46
  return (
47
47
  <InitializeProvider config={{ clientName: "my-app" }}>
48
- <ThemeProvider>
49
- {/* app content */}
50
- </ThemeProvider>
48
+ {/* app content */}
51
49
  </InitializeProvider>
52
50
  );
53
51
  }
54
52
  ```
55
53
 
56
- Alternatively, you can use `ConfigContext.Provider` directly:
57
-
58
- ```tsx
59
- import { ConfigContext, ThemeProvider } from "@simplysm/solid";
60
-
61
- function App() {
62
- return (
63
- <ConfigContext.Provider value={{ clientName: "my-app" }}>
64
- <ThemeProvider>
65
- {/* app content */}
66
- </ThemeProvider>
67
- </ConfigContext.Provider>
68
- );
69
- }
70
- ```
71
-
72
- ### Base CSS
73
-
74
- Import the base CSS in your entry point:
75
-
76
- ```typescript
77
- // entry point (e.g., index.tsx)
78
- import "@simplysm/solid/base.css";
79
- ```
80
-
81
- ---
82
-
83
- ## Components
84
-
85
- ### Form Control
86
-
87
- #### Button
88
-
89
- Interactive button component with built-in Material Design ripple effect.
90
-
91
- ```tsx
92
- import { Button } from "@simplysm/solid";
93
-
94
- <Button theme="primary" variant="solid">Confirm</Button>
95
- <Button theme="danger" variant="outline" size="sm">Delete</Button>
96
- <Button variant="ghost">Cancel</Button>
97
- <Button disabled>Disabled</Button>
98
- ```
99
-
100
- | Prop | Type | Default | Description |
101
- |------|------|---------|-------------|
102
- | `theme` | `"primary" \| "info" \| "success" \| "warning" \| "danger" \| "base"` | `"base"` | Color theme |
103
- | `variant` | `"solid" \| "outline" \| "ghost"` | `"outline"` | Style variant |
104
- | `size` | `"sm" \| "lg"` | - | Size |
105
- | `inset` | `boolean` | - | Inset style (removes border/rounded corners) |
106
- | `disabled` | `boolean` | - | Disabled state |
107
-
108
- All standard HTML `<button>` element attributes can also be passed.
109
-
110
- ---
111
-
112
- #### TextInput
113
-
114
- Text input field with format mask and IME (Korean, etc.) composition support.
115
-
116
- ```tsx
117
- import { TextInput } from "@simplysm/solid";
118
-
119
- // Basic usage
120
- <TextInput value={name()} onValueChange={setName} placeholder="Enter name" />
121
-
122
- // Password
123
- <TextInput type="password" />
124
-
125
- // Format mask (e.g., phone number)
126
- <TextInput format="XXX-XXXX-XXXX" value={phone()} onValueChange={setPhone} />
127
- ```
128
-
129
- | Prop | Type | Default | Description |
130
- |------|------|---------|-------------|
131
- | `value` | `string` | `""` | Input value |
132
- | `onValueChange` | `(value: string) => void` | - | Value change callback |
133
- | `type` | `"text" \| "password" \| "email"` | `"text"` | Input type |
134
- | `format` | `string` | - | Input format (`X` represents character position, rest are separators) |
135
- | `placeholder` | `string` | - | Placeholder |
136
- | `disabled` | `boolean` | - | Disabled state |
137
- | `readonly` | `boolean` | - | Read-only state |
138
- | `error` | `boolean` | - | Error state (red border) |
139
- | `size` | `"sm" \| "lg"` | - | Size |
140
- | `inset` | `boolean` | - | Inset style |
141
-
142
- ---
143
-
144
- #### NumberInput
145
-
146
- Number input field with thousand separators and minimum decimal places support.
147
-
148
- ```tsx
149
- import { NumberInput } from "@simplysm/solid";
150
-
151
- // Basic usage (thousand separators auto-applied)
152
- <NumberInput value={amount()} onValueChange={setAmount} />
153
-
154
- // Without thousand separators
155
- <NumberInput value={num()} comma={false} />
156
-
157
- // Minimum 2 decimal places
158
- <NumberInput value={price()} minDigits={2} />
159
- ```
160
-
161
- | Prop | Type | Default | Description |
162
- |------|------|---------|-------------|
163
- | `value` | `number` | - | Input value |
164
- | `onValueChange` | `(value: number \| undefined) => void` | - | Value change callback |
165
- | `comma` | `boolean` | `true` | Show thousand separators |
166
- | `minDigits` | `number` | - | Minimum decimal places |
167
- | `placeholder` | `string` | - | Placeholder |
168
- | `disabled` | `boolean` | - | Disabled state |
169
- | `readonly` | `boolean` | - | Read-only state |
170
- | `error` | `boolean` | - | Error state |
171
- | `size` | `"sm" \| "lg"` | - | Size |
172
- | `inset` | `boolean` | - | Inset style |
173
-
174
- ---
175
-
176
- #### DatePicker
177
-
178
- Date input field supporting year, month, and date units. Values are handled using the `DateOnly` type.
179
-
180
- ```tsx
181
- import { DatePicker } from "@simplysm/solid";
182
- import { DateOnly } from "@simplysm/core-common";
183
-
184
- // Date input
185
- <DatePicker unit="date" value={date()} onValueChange={setDate} />
186
-
187
- // Year-month input
188
- <DatePicker unit="month" value={monthDate()} onValueChange={setMonthDate} />
189
-
190
- // Year-only input
191
- <DatePicker unit="year" value={yearDate()} onValueChange={setYearDate} />
192
-
193
- // min/max constraints
194
- <DatePicker
195
- unit="date"
196
- value={date()}
197
- onValueChange={setDate}
198
- min={new DateOnly(2025, 1, 1)}
199
- max={new DateOnly(2025, 12, 31)}
200
- />
201
- ```
202
-
203
- | Prop | Type | Default | Description |
204
- |------|------|---------|-------------|
205
- | `value` | `DateOnly` | - | Input value |
206
- | `onValueChange` | `(value: DateOnly \| undefined) => void` | - | Value change callback |
207
- | `unit` | `"year" \| "month" \| "date"` | `"date"` | Date unit |
208
- | `min` | `DateOnly` | - | Minimum date |
209
- | `max` | `DateOnly` | - | Maximum date |
210
- | `disabled` | `boolean` | - | Disabled state |
211
- | `readonly` | `boolean` | - | Read-only state |
212
- | `error` | `boolean` | - | Error state |
213
- | `size` | `"sm" \| "lg"` | - | Size |
214
- | `inset` | `boolean` | - | Inset style |
215
-
216
- > `DateTimePicker` and `TimePicker` follow the same pattern for datetime (`DateTime`) and time (`Time`) input.
217
-
218
- ---
219
-
220
- #### DateRangePicker
221
-
222
- Component for inputting date ranges with period type selection (day/month/range). The from/to values are automatically adjusted when periodType changes.
223
-
224
- ```tsx
225
- import { DateRangePicker, type DateRangePeriodType } from "@simplysm/solid";
226
- import { createSignal } from "solid-js";
227
- import { DateOnly } from "@simplysm/core-common";
228
-
229
- const [periodType, setPeriodType] = createSignal<DateRangePeriodType>("range");
230
- const [from, setFrom] = createSignal<DateOnly>();
231
- const [to, setTo] = createSignal<DateOnly>();
232
-
233
- <DateRangePicker
234
- periodType={periodType()}
235
- onPeriodTypeChange={setPeriodType}
236
- from={from()}
237
- onFromChange={setFrom}
238
- to={to()}
239
- onToChange={setTo}
240
- />
241
- ```
242
-
243
- | Prop | Type | Default | Description |
244
- |------|------|---------|-------------|
245
- | `periodType` | `"day" \| "month" \| "range"` | `"range"` | Period type |
246
- | `onPeriodTypeChange` | `(value: DateRangePeriodType) => void` | - | Period type change callback |
247
- | `from` | `DateOnly` | - | Start date |
248
- | `onFromChange` | `(value: DateOnly \| undefined) => void` | - | Start date change callback |
249
- | `to` | `DateOnly` | - | End date |
250
- | `onToChange` | `(value: DateOnly \| undefined) => void` | - | End date change callback |
251
- | `disabled` | `boolean` | - | Disabled state |
252
- | `size` | `"sm" \| "lg"` | - | Size |
253
- | `periodLabels` | `Partial<Record<DateRangePeriodType, string>>` | `{ day: "Day", month: "Month", range: "Range" }` | Period type labels |
254
-
255
- ---
256
-
257
- #### Textarea
258
-
259
- Multi-line text input field. Height adjusts automatically based on content, with IME composition support.
260
-
261
- ```tsx
262
- import { Textarea } from "@simplysm/solid";
263
-
264
- <Textarea value={text()} onValueChange={setText} />
265
-
266
- // Minimum 3 rows height
267
- <Textarea minRows={3} value={text()} onValueChange={setText} />
268
- ```
269
-
270
- | Prop | Type | Default | Description |
271
- |------|------|---------|-------------|
272
- | `value` | `string` | `""` | Input value |
273
- | `onValueChange` | `(value: string) => void` | - | Value change callback |
274
- | `placeholder` | `string` | - | Placeholder |
275
- | `minRows` | `number` | `1` | Minimum number of rows |
276
- | `disabled` | `boolean` | - | Disabled state |
277
- | `readonly` | `boolean` | - | Read-only state |
278
- | `error` | `boolean` | - | Error state |
279
- | `size` | `"sm" \| "lg"` | - | Size |
280
- | `inset` | `boolean` | - | Inset style |
281
-
282
- ---
283
-
284
- #### Select
285
-
286
- Dropdown selection component. Supports both items prop approach and children (Compound Components) approach. Single and multiple selection supported.
287
-
288
- ```tsx
289
- import { Select } from "@simplysm/solid";
290
-
291
- // items approach (simple array)
292
- <Select
293
- items={["Apple", "Banana", "Strawberry"]}
294
- value={fruit()}
295
- onValueChange={setFruit}
296
- placeholder="Select fruit"
297
- />
298
-
299
- // children approach (Compound Components)
300
- <Select value={fruit()} onValueChange={setFruit} renderValue={(v) => v.name}>
301
- <Select.Item value={item1}>{item1.name}</Select.Item>
302
- <Select.Item value={item2}>{item2.name}</Select.Item>
303
- </Select>
304
-
305
- // items approach + ItemTemplate for custom rendering
306
- <Select items={users} value={selectedUser()} onValueChange={setSelectedUser}>
307
- <Select.ItemTemplate>
308
- {(user) => <>{user.name} ({user.email})</>}
309
- </Select.ItemTemplate>
310
- </Select>
311
-
312
- // Multiple selection
313
- <Select items={options} value={selected()} onValueChange={setSelected} multiple />
314
-
315
- // With action buttons and header
316
- <Select value={item()} onValueChange={setItem} renderValue={(v) => v.name}>
317
- <Select.Header><div>Custom header</div></Select.Header>
318
- <Select.Action onClick={handleAdd}>+</Select.Action>
319
- <Select.Item value={item1}>{item1.name}</Select.Item>
320
- </Select>
321
- ```
322
-
323
- | Prop | Type | Default | Description |
324
- |------|------|---------|-------------|
325
- | `value` | `T \| T[]` | - | Selected value |
326
- | `onValueChange` | `(value: T \| T[]) => void` | - | Value change callback |
327
- | `items` | `T[]` | - | Items array (items approach) |
328
- | `getChildren` | `(item: T, index: number, depth: number) => T[] \| undefined` | - | Tree structure children getter |
329
- | `renderValue` | `(value: T) => JSX.Element` | - | Value rendering function (required for children approach) |
330
- | `multiple` | `boolean` | `false` | Multiple selection |
331
- | `multiDisplayDirection` | `"horizontal" \| "vertical"` | `"horizontal"` | Display direction for multiple selection |
332
- | `hideSelectAll` | `boolean` | - | Hide select all button (multiple selection) |
333
- | `placeholder` | `string` | - | Placeholder |
334
- | `disabled` | `boolean` | - | Disabled state |
335
- | `required` | `boolean` | - | Required field |
336
- | `size` | `"sm" \| "lg"` | - | Size |
337
- | `inset` | `boolean` | - | Inset style |
338
-
339
- **Sub-components:**
340
- - `Select.Item` -- Selection item
341
- - `Select.Action` -- Right-side action button
342
- - `Select.Header` -- Dropdown top custom area
343
- - `Select.ItemTemplate` -- Item rendering template for items approach
344
-
345
- ---
346
-
347
- #### Combobox
348
-
349
- Autocomplete component with async search and item selection support. Debouncing is built-in.
350
-
351
- ```tsx
352
- import { Combobox } from "@simplysm/solid";
353
-
354
- <Combobox
355
- loadItems={async (query) => {
356
- const response = await fetch(`/api/search?q=${query}`);
357
- return response.json();
358
- }}
359
- renderValue={(item) => item.name}
360
- value={selected()}
361
- onValueChange={setSelected}
362
- placeholder="Search..."
363
- >
364
- <Combobox.ItemTemplate>
365
- {(item) => <>{item.name}</>}
366
- </Combobox.ItemTemplate>
367
- </Combobox>
368
- ```
369
-
370
- | Prop | Type | Default | Description |
371
- |------|------|---------|-------------|
372
- | `value` | `T` | - | Selected value |
373
- | `onValueChange` | `(value: T) => void` | - | Value change callback |
374
- | `loadItems` | `(query: string) => Promise<T[]>` | **(required)** | Item loading function |
375
- | `renderValue` | `(value: T) => JSX.Element` | **(required)** | Value rendering function |
376
- | `debounceMs` | `number` | `300` | Debounce delay (ms) |
377
- | `allowCustomValue` | `boolean` | - | Allow custom values |
378
- | `parseCustomValue` | `(text: string) => T` | - | Custom value parsing function |
379
- | `placeholder` | `string` | - | Placeholder |
380
- | `disabled` | `boolean` | - | Disabled state |
381
- | `size` | `"sm" \| "lg"` | - | Size |
382
- | `inset` | `boolean` | - | Inset style |
383
-
384
- **Sub-components:**
385
- - `Combobox.Item` -- Selection item
386
- - `Combobox.ItemTemplate` -- Item rendering template
387
-
388
- ---
389
-
390
- #### Checkbox / Radio
391
-
392
- Checkbox and radio button components.
393
-
394
- ```tsx
395
- import { Checkbox, Radio } from "@simplysm/solid";
396
-
397
- <Checkbox value={checked()} onValueChange={setChecked}>I agree</Checkbox>
398
- <Checkbox theme="success" value={active()} onValueChange={setActive}>Activate</Checkbox>
399
-
400
- <Radio value={option() === "a"} onValueChange={() => setOption("a")}>Option A</Radio>
401
- <Radio value={option() === "b"} onValueChange={() => setOption("b")}>Option B</Radio>
402
- ```
403
-
404
- | Prop | Type | Default | Description |
405
- |------|------|---------|-------------|
406
- | `value` | `boolean` | `false` | Checked state |
407
- | `onValueChange` | `(value: boolean) => void` | - | Value change callback |
408
- | `theme` | `"primary" \| "info" \| "success" \| "warning" \| "danger" \| "base"` | `"primary"` | Color theme |
409
- | `size` | `"sm" \| "lg"` | - | Size |
410
- | `disabled` | `boolean` | - | Disabled state |
411
- | `inset` | `boolean` | - | Inset style |
412
- | `inline` | `boolean` | - | Inline style |
413
-
414
- ---
415
-
416
- #### CheckboxGroup / RadioGroup
417
-
418
- Group components for managing multiple/single selection across items.
419
-
420
- ```tsx
421
- import { CheckboxGroup, RadioGroup } from "@simplysm/solid";
422
-
423
- // Multiple selection
424
- <CheckboxGroup value={selectedColors()} onValueChange={setSelectedColors}>
425
- <CheckboxGroup.Item value="red">Red</CheckboxGroup.Item>
426
- <CheckboxGroup.Item value="green">Green</CheckboxGroup.Item>
427
- <CheckboxGroup.Item value="blue">Blue</CheckboxGroup.Item>
428
- </CheckboxGroup>
429
-
430
- // Single selection
431
- <RadioGroup value={size()} onValueChange={setSize}>
432
- <RadioGroup.Item value="sm">Small</RadioGroup.Item>
433
- <RadioGroup.Item value="md">Medium</RadioGroup.Item>
434
- <RadioGroup.Item value="lg">Large</RadioGroup.Item>
435
- </RadioGroup>
436
- ```
437
-
438
- **CheckboxGroup Props:**
439
-
440
- | Prop | Type | Default | Description |
441
- |------|------|---------|-------------|
442
- | `value` | `T[]` | `[]` | Selected values array |
443
- | `onValueChange` | `(value: T[]) => void` | - | Value change callback |
444
- | `theme` | `SemanticTheme` | `"primary"` | Color theme |
445
- | `size` | `"sm" \| "lg"` | - | Size |
446
- | `disabled` | `boolean` | - | Disable all items |
447
- | `inline` | `boolean` | - | Inline style |
448
- | `inset` | `boolean` | - | Inset style |
449
-
450
- **RadioGroup Props:**
451
-
452
- | Prop | Type | Default | Description |
453
- |------|------|---------|-------------|
454
- | `value` | `T` | - | Selected value |
455
- | `onValueChange` | `(value: T) => void` | - | Value change callback |
456
- | `theme` | `SemanticTheme` | `"primary"` | Color theme |
457
- | `size` | `"sm" \| "lg"` | - | Size |
458
- | `disabled` | `boolean` | - | Disable all items |
459
- | `inline` | `boolean` | - | Inline style |
460
- | `inset` | `boolean` | - | Inset style |
461
-
462
- ---
463
-
464
- #### ColorPicker
465
-
466
- Color selection component.
467
-
468
- ```tsx
469
- import { ColorPicker } from "@simplysm/solid";
470
-
471
- <ColorPicker value={color()} onValueChange={setColor} />
472
- <ColorPicker value={color()} size="sm" disabled />
473
- ```
474
-
475
- | Prop | Type | Default | Description |
476
- |------|------|---------|-------------|
477
- | `value` | `string` | `"#000000"` | Color value (#RRGGBB format) |
478
- | `onValueChange` | `(value: string) => void` | - | Value change callback |
479
- | `size` | `"sm" \| "lg"` | - | Size |
480
- | `disabled` | `boolean` | - | Disabled state |
481
-
482
- ---
483
-
484
- #### ThemeToggle
485
-
486
- Dark/light/system theme cycle toggle button. Must be used inside `ThemeProvider`.
487
-
488
- ```tsx
489
- import { ThemeToggle } from "@simplysm/solid";
490
-
491
- <ThemeToggle />
492
- <ThemeToggle size="sm" />
493
- <ThemeToggle size="lg" />
494
- ```
495
-
496
- Clicking cycles through `light -> system -> dark -> light`, displaying an icon matching the current mode.
497
-
498
- | Prop | Type | Default | Description |
499
- |------|------|---------|-------------|
500
- | `size` | `"sm" \| "lg"` | - | Button size |
501
-
502
- ---
503
-
504
- #### RichTextEditor
505
-
506
- Tiptap-based rich text editor. Supports text formatting (bold, italic, strikethrough), alignment, colors, highlights, tables, and image insertion.
507
-
508
- ```tsx
509
- import { RichTextEditor } from "@simplysm/solid";
510
-
511
- <RichTextEditor value={html()} onValueChange={setHtml} />
512
- ```
513
-
514
- | Prop | Type | Default | Description |
515
- |------|------|---------|-------------|
516
- | `value` | `string` | - | HTML string value |
517
- | `onValueChange` | `(value: string) => void` | - | Value change callback |
518
- | `disabled` | `boolean` | - | Disabled state |
519
- | `error` | `boolean` | - | Error state |
520
- | `size` | `"sm" \| "lg"` | - | Size |
521
-
522
- ---
523
-
524
- #### Numpad
525
-
526
- Numeric keypad component. Used in environments requiring touch-based number input.
527
-
528
- ```tsx
529
- import { Numpad } from "@simplysm/solid";
530
-
531
- <Numpad value={amount()} onValueChange={setAmount} />
532
-
533
- // With ENT/minus buttons
534
- <Numpad
535
- value={amount()}
536
- onValueChange={setAmount}
537
- useEnterButton
538
- useMinusButton
539
- onEnterButtonClick={handleSubmit}
540
- />
541
- ```
542
-
543
- | Prop | Type | Default | Description |
544
- |------|------|---------|-------------|
545
- | `value` | `number` | - | Input value |
546
- | `onValueChange` | `(value: number \| undefined) => void` | - | Value change callback |
547
- | `placeholder` | `string` | - | Placeholder |
548
- | `required` | `boolean` | - | Required field |
549
- | `inputDisabled` | `boolean` | - | Disable direct text field input |
550
- | `useEnterButton` | `boolean` | - | Show ENT button |
551
- | `useMinusButton` | `boolean` | - | Show minus button |
552
- | `onEnterButtonClick` | `() => void` | - | ENT click callback |
553
- | `size` | `"sm" \| "lg"` | - | Size |
554
-
555
- ---
556
-
557
- #### StatePreset
558
-
559
- Component for saving/loading screen state (search conditions, etc.) as presets. Persisted in localStorage.
560
-
561
- ```tsx
562
- import { StatePreset } from "@simplysm/solid";
563
-
564
- <StatePreset
565
- presetKey="user-search"
566
- value={searchState()}
567
- onValueChange={setSearchState}
568
- />
569
- ```
570
-
571
- | Prop | Type | Default | Description |
572
- |------|------|---------|-------------|
573
- | `presetKey` | `string` | **(required)** | Preset storage key |
574
- | `value` | `T` | **(required)** | Current state value |
575
- | `onValueChange` | `(value: T) => void` | **(required)** | State restore callback |
576
- | `size` | `"sm" \| "lg"` | - | Size |
577
-
578
- ---
579
-
580
- ### Navigation
581
-
582
- #### Tabs
583
-
584
- Tab navigation component.
585
-
586
- ```tsx
587
- import { Tabs } from "@simplysm/solid";
588
-
589
- <Tabs value={activeTab()} onValueChange={setActiveTab}>
590
- <Tabs.Tab value="tab1">Tab 1</Tabs.Tab>
591
- <Tabs.Tab value="tab2">Tab 2</Tabs.Tab>
592
- <Tabs.Tab value="tab3" disabled>Tab 3</Tabs.Tab>
593
- </Tabs>
594
- ```
595
-
596
- | Prop | Type | Default | Description |
597
- |------|------|---------|-------------|
598
- | `value` | `string` | - | Selected tab value |
599
- | `onValueChange` | `(value: string) => void` | - | Tab change callback |
600
- | `size` | `"sm" \| "lg"` | - | Size |
601
-
602
- **Sub-components:**
603
- - `Tabs.Tab` -- Individual tab (`value: string`, `disabled?: boolean`)
604
-
605
- ---
606
-
607
- ### Display
608
-
609
- #### Card
610
-
611
- Container with shadow effect.
612
-
613
- ```tsx
614
- import { Card } from "@simplysm/solid";
615
-
616
- <Card>Card content</Card>
617
- <Card class="p-4">Card with padding</Card>
618
- ```
619
-
620
- ---
621
-
622
- #### Tag
623
-
624
- Inline tag/badge component.
625
-
626
- ```tsx
627
- import { Tag } from "@simplysm/solid";
628
-
629
- <Tag theme="primary">New</Tag>
630
- <Tag theme="success">Complete</Tag>
631
- <Tag theme="danger">Urgent</Tag>
632
- ```
633
-
634
- | Prop | Type | Default | Description |
635
- |------|------|---------|-------------|
636
- | `theme` | `"primary" \| "info" \| "success" \| "warning" \| "danger" \| "base"` | `"base"` | Color theme |
637
-
638
- ---
639
-
640
- #### Alert
641
-
642
- Block-level alert/notice component.
643
-
644
- ```tsx
645
- import { Alert } from "@simplysm/solid";
646
-
647
- <Alert theme="info">This is an information message.</Alert>
648
- <Alert theme="warning">Please pay attention to this.</Alert>
649
- <Alert theme="danger">An error has occurred.</Alert>
650
- ```
651
-
652
- | Prop | Type | Default | Description |
653
- |------|------|---------|-------------|
654
- | `theme` | `"primary" \| "info" \| "success" \| "warning" \| "danger" \| "base"` | `"base"` | Color theme |
655
-
656
- ---
657
-
658
- #### Icon
659
-
660
- Tabler Icons wrapper component. Displayed in `em` units to scale proportionally with surrounding text.
661
-
662
- ```tsx
663
- import { Icon } from "@simplysm/solid";
664
- import { IconCheck, IconAlertTriangle } from "@tabler/icons-solidjs";
665
-
666
- <Icon icon={IconCheck} />
667
- <Icon icon={IconAlertTriangle} size="2em" />
668
- ```
669
-
670
- | Prop | Type | Default | Description |
671
- |------|------|---------|-------------|
672
- | `icon` | `Component` | **(required)** | Tabler icon component |
673
- | `size` | `string \| number` | `"1.25em"` | Icon size |
674
-
675
- ---
676
-
677
- #### Progress
678
-
679
- Progress indicator component.
680
-
681
- ```tsx
682
- import { Progress } from "@simplysm/solid";
683
-
684
- <Progress value={0.65} />
685
- <Progress value={0.8} theme="success" size="lg" />
686
-
687
- // Custom text
688
- <Progress value={progress()}>
689
- {Math.round(progress() * 100)}% complete
690
- </Progress>
691
- ```
692
-
693
- | Prop | Type | Default | Description |
694
- |------|------|---------|-------------|
695
- | `value` | `number` | **(required)** | Progress (0~1) |
696
- | `theme` | `"primary" \| "info" \| "success" \| "warning" \| "danger" \| "base"` | `"primary"` | Color theme |
697
- | `size` | `"sm" \| "lg"` | - | Size |
698
- | `inset` | `boolean` | - | Inset style |
699
-
700
- ---
701
-
702
- #### Barcode
703
-
704
- bwip-js-based barcode/QR code rendering component. Supports over 100 barcode types.
705
-
706
- ```tsx
707
- import { Barcode } from "@simplysm/solid";
708
-
709
- <Barcode type="qrcode" value="https://example.com" />
710
- <Barcode type="code128" value="ABC-12345" />
711
- <Barcode type="ean13" value="4901234567890" />
712
- ```
713
-
714
- | Prop | Type | Default | Description |
715
- |------|------|---------|-------------|
716
- | `type` | `BarcodeType` | **(required)** | Barcode type (`"qrcode"`, `"code128"`, `"ean13"`, etc.) |
717
- | `value` | `string` | - | Barcode value |
718
-
719
- ---
720
-
721
- #### Echarts
722
-
723
- Apache ECharts chart wrapper component. Requires `echarts` peer dependency installation.
724
-
725
- ```tsx
726
- import { Echarts } from "@simplysm/solid";
727
-
728
- <Echarts
729
- option={{
730
- xAxis: { type: "category", data: ["Mon", "Tue", "Wed"] },
731
- yAxis: { type: "value" },
732
- series: [{ data: [120, 200, 150], type: "bar" }],
733
- }}
734
- />
735
-
736
- <Echarts option={chartOption()} loading={isLoading()} />
737
- ```
738
-
739
- | Prop | Type | Default | Description |
740
- |------|------|---------|-------------|
741
- | `option` | `echarts.EChartsOption` | **(required)** | ECharts option object |
742
- | `loading` | `boolean` | - | Show loading state |
743
-
744
- ---
745
-
746
- ### Layout
747
-
748
- #### Sidebar
749
-
750
- Sidebar navigation with responsive support (mobile overlay below 520px). Open/closed state is saved in localStorage.
751
-
752
- ```tsx
753
- import { Sidebar } from "@simplysm/solid";
754
-
755
- <Sidebar.Container>
756
- <Sidebar>
757
- <Sidebar.User name="John Doe" menus={userMenus}>
758
- <span>John Doe</span>
759
- </Sidebar.User>
760
- <Sidebar.Menu menus={menuItems} />
761
- </Sidebar>
762
- <div class="flex flex-1 flex-col">
763
- <Topbar>
764
- <h1>App Name</h1>
765
- </Topbar>
766
- <main class="flex-1 overflow-auto p-4">
767
- {/* main content */}
768
- </main>
769
- </div>
770
- </Sidebar.Container>
771
- ```
772
-
773
- **Sub-components:**
774
- - `Sidebar.Container` -- Container wrapping sidebar and main area (required)
775
- - `Sidebar.Menu` -- Menu items list (`menus: SidebarMenuItem[]`)
776
- - `Sidebar.User` -- User info area
777
-
778
- ---
779
-
780
- #### Topbar
781
-
782
- Top navigation bar. When used inside `Sidebar.Container`, a sidebar toggle button appears automatically.
783
-
784
- ```tsx
785
- import { Topbar } from "@simplysm/solid";
786
-
787
- <Topbar>
788
- <h1 class="text-lg font-bold">App Name</h1>
789
- <Topbar.Menu menus={menuItems} />
790
- <div class="flex-1" />
791
- <Topbar.User menus={userMenus}>User</Topbar.User>
792
- </Topbar>
793
- ```
794
-
795
- **Sub-components:**
796
- - `Topbar.Container` -- Container wrapping main content below topbar
797
- - `Topbar.Menu` -- Menu items list
798
- - `Topbar.User` -- User menu (dropdown)
799
-
800
- ---
801
-
802
- #### FormGroup
803
-
804
- Layout component for arranging form fields with labels vertically or inline.
805
-
806
- ```tsx
807
- import { FormGroup, TextInput } from "@simplysm/solid";
808
-
809
- // Vertical layout (default)
810
- <FormGroup>
811
- <FormGroup.Item label="Name">
812
- <TextInput value={name()} onValueChange={setName} />
813
- </FormGroup.Item>
814
- <FormGroup.Item label="Email">
815
- <TextInput type="email" value={email()} onValueChange={setEmail} />
816
- </FormGroup.Item>
817
- </FormGroup>
818
-
819
- // Inline layout
820
- <FormGroup inline>
821
- <FormGroup.Item label="Search">
822
- <TextInput value={query()} onValueChange={setQuery} />
823
- </FormGroup.Item>
824
- <FormGroup.Item>
825
- <Button theme="primary">Search</Button>
826
- </FormGroup.Item>
827
- </FormGroup>
828
- ```
829
-
830
- | Prop | Type | Default | Description |
831
- |------|------|---------|-------------|
832
- | `inline` | `boolean` | `false` | Inline layout mode |
833
-
834
- **Sub-components:**
835
- - `FormGroup.Item` -- Form item (`label?: JSX.Element`)
836
-
837
- ---
838
-
839
- #### FormTable
840
-
841
- `<table>`-based form layout. Labels go in `<th>`, input fields in `<td>`.
842
-
843
- ```tsx
844
- import { FormTable, TextInput, NumberInput } from "@simplysm/solid";
845
-
846
- <FormTable>
847
- <tbody>
848
- <tr>
849
- <th>Name</th>
850
- <td><TextInput value={name()} onValueChange={setName} /></td>
851
- <th>Age</th>
852
- <td><NumberInput value={age()} onValueChange={setAge} /></td>
853
- </tr>
854
- <tr>
855
- <th>Email</th>
856
- <td colSpan={3}><TextInput type="email" value={email()} onValueChange={setEmail} /></td>
857
- </tr>
858
- </tbody>
859
- </FormTable>
860
- ```
861
-
862
- ---
863
-
864
- #### Kanban
865
-
866
- Kanban board layout component.
867
-
868
- ---
869
-
870
- ### Data
871
-
872
- #### Table
873
-
874
- Basic HTML table wrapper. Provides consistent styling for borders, header backgrounds, etc.
875
-
876
- ```tsx
877
- import { Table } from "@simplysm/solid";
878
-
879
- <Table>
880
- <thead>
881
- <tr><th>Name</th><th>Age</th></tr>
882
- </thead>
883
- <tbody>
884
- <tr><td>John Doe</td><td>30</td></tr>
885
- <tr><td>Jane Smith</td><td>25</td></tr>
886
- </tbody>
887
- </Table>
888
-
889
- // Inset style (removes outer border, fits parent container)
890
- <Table inset>...</Table>
891
- ```
892
-
893
- | Prop | Type | Default | Description |
894
- |------|------|---------|-------------|
895
- | `inset` | `boolean` | - | Inset style |
896
-
897
- ---
898
-
899
- #### DataSheet
900
-
901
- Advanced data table component. Supports sorting, pagination, row selection, tree expansion, column resize, column configuration, and row reordering.
902
-
903
- ```tsx
904
- import { DataSheet } from "@simplysm/solid";
905
-
906
- <DataSheet items={users()} key="user-table">
907
- <DataSheet.Column key="name" header="Name" sortable>
908
- {({ item }) => <>{item.name}</>}
909
- </DataSheet.Column>
910
- <DataSheet.Column key="age" header="Age" sortable width="80px">
911
- {({ item }) => <>{item.age}</>}
912
- </DataSheet.Column>
913
- <DataSheet.Column key="email" header="Email">
914
- {({ item }) => <>{item.email}</>}
915
- </DataSheet.Column>
916
- </DataSheet>
917
-
918
- // With pagination + sorting + selection
919
- <DataSheet
920
- items={data()}
921
- key="data-table"
922
- page={page()}
923
- onPageChange={setPage}
924
- totalPageCount={totalPages()}
925
- sorts={sorts()}
926
- onSortsChange={setSorts}
927
- selectMode="multiple"
928
- selectedItems={selectedItems()}
929
- onSelectedItemsChange={setSelectedItems}
930
- >
931
- {/* columns */}
932
- </DataSheet>
933
- ```
934
-
935
- **DataSheet Props (key items):**
936
-
937
- | Prop | Type | Default | Description |
938
- |------|------|---------|-------------|
939
- | `items` | `T[]` | - | Data array |
940
- | `key` | `string` | - | Column configuration storage key |
941
- | `inset` | `boolean` | - | Inset style |
942
- | `sorts` | `SortingDef[]` | - | Sort definition |
943
- | `onSortsChange` | `(sorts: SortingDef[]) => void` | - | Sort change callback |
944
- | `autoSort` | `boolean` | - | Client-side auto-sorting |
945
- | `page` | `number` | - | Current page (0-based) |
946
- | `onPageChange` | `(page: number) => void` | - | Page change callback |
947
- | `totalPageCount` | `number` | - | Total page count |
948
- | `selectMode` | `"single" \| "multiple"` | - | Selection mode |
949
- | `selectedItems` | `T[]` | - | Selected items |
950
- | `onSelectedItemsChange` | `(items: T[]) => void` | - | Selection change callback |
951
- | `getChildren` | `(item: T, index: number) => T[] \| undefined` | - | Tree structure children getter |
952
- | `hideConfigBar` | `boolean` | - | Hide configuration bar |
953
-
954
- **DataSheet.Column Props:**
955
-
956
- | Prop | Type | Default | Description |
957
- |------|------|---------|-------------|
958
- | `key` | `string` | **(required)** | Column identifier key |
959
- | `header` | `string \| string[]` | - | Header text (array for multi-level headers) |
960
- | `headerContent` | `() => JSX.Element` | - | Custom header rendering |
961
- | `summary` | `() => JSX.Element` | - | Summary row rendering |
962
- | `width` | `string` | - | Column width |
963
- | `fixed` | `boolean` | - | Fixed column |
964
- | `hidden` | `boolean` | - | Hidden column |
965
- | `sortable` | `boolean` | - | Sortable |
966
- | `resizable` | `boolean` | - | Resizable |
967
- | `children` | `(ctx: { item: T, index: number, depth: number }) => JSX.Element` | **(required)** | Cell rendering function |
968
-
969
- ---
970
-
971
- #### List
972
-
973
- Tree-view style list component. Supports keyboard navigation.
974
-
975
- ```tsx
976
- import { List } from "@simplysm/solid";
977
-
978
- <List>
979
- <List.Item>Item 1</List.Item>
980
- <List.Item>Item 2</List.Item>
981
- <List.Item>
982
- Parent item
983
- <List.Item.Children>
984
- <List.Item>Child item 1</List.Item>
985
- <List.Item>Child item 2</List.Item>
986
- </List.Item.Children>
987
- </List.Item>
988
- </List>
989
-
990
- // Inset style
991
- <List inset>
992
- <List.Item>Inset item</List.Item>
993
- </List>
994
- ```
995
-
996
- **Keyboard navigation:**
997
- - `ArrowUp` / `ArrowDown` -- Move focus to previous/next item
998
- - `Space` / `Enter` -- Click current item
999
- - `ArrowRight` -- Expand if collapsed, focus first child if expanded
1000
- - `ArrowLeft` -- Collapse if expanded, focus parent if collapsed
1001
- - `Home` / `End` -- Focus first/last item
1002
-
1003
- | Prop | Type | Default | Description |
1004
- |------|------|---------|-------------|
1005
- | `inset` | `boolean` | - | Transparent background style |
1006
-
1007
- ---
1008
-
1009
- #### Pagination
1010
-
1011
- Page navigation component.
1012
-
1013
- ```tsx
1014
- import { Pagination } from "@simplysm/solid";
1015
-
1016
- <Pagination
1017
- page={currentPage()}
1018
- onPageChange={setCurrentPage}
1019
- totalPageCount={20}
1020
- displayPageCount={10}
1021
- />
1022
- ```
1023
-
1024
- | Prop | Type | Default | Description |
1025
- |------|------|---------|-------------|
1026
- | `page` | `number` | **(required)** | Current page (0-based) |
1027
- | `onPageChange` | `(page: number) => void` | - | Page change callback |
1028
- | `totalPageCount` | `number` | **(required)** | Total page count |
1029
- | `displayPageCount` | `number` | `10` | Number of pages to display at once |
1030
- | `size` | `"sm" \| "lg"` | - | Size |
1031
-
1032
- ---
1033
-
1034
- #### Calendar
1035
-
1036
- Calendar-style data display component.
1037
-
1038
- ```tsx
1039
- import { Calendar } from "@simplysm/solid";
1040
-
1041
- <Calendar
1042
- items={events()}
1043
- getItemDate={(event) => event.date}
1044
- renderItem={(event) => <div>{event.title}</div>}
1045
- yearMonth={yearMonth()}
1046
- onYearMonthChange={setYearMonth}
1047
- />
1048
- ```
1049
-
1050
- | Prop | Type | Default | Description |
1051
- |------|------|---------|-------------|
1052
- | `items` | `T[]` | **(required)** | Data array |
1053
- | `getItemDate` | `(item: T, index: number) => DateOnly` | **(required)** | Item date extraction function |
1054
- | `renderItem` | `(item: T, index: number) => JSX.Element` | **(required)** | Item rendering function |
1055
- | `yearMonth` | `DateOnly` | - | Year-month to display |
1056
- | `onYearMonthChange` | `(value: DateOnly) => void` | - | Year-month change callback |
1057
- | `weekStartDay` | `number` | `0` (Sunday) | Week start day |
1058
-
1059
- ---
1060
-
1061
- #### PermissionTable
1062
-
1063
- Permission management table component.
1064
-
1065
- ---
1066
-
1067
- ### Disclosure
1068
-
1069
- #### Collapse
1070
-
1071
- Content collapse/expand animation component. Uses `margin-top`-based transition for smooth open/close effects.
1072
-
1073
- ```tsx
1074
- import { Collapse, Button } from "@simplysm/solid";
1075
- import { createSignal } from "solid-js";
1076
-
1077
- const [open, setOpen] = createSignal(false);
1078
-
1079
- <Button
1080
- aria-expanded={open()}
1081
- aria-controls="content"
1082
- onClick={() => setOpen(!open())}
1083
- >
1084
- Toggle
1085
- </Button>
1086
- <Collapse id="content" open={open()}>
1087
- <p>Collapsible content</p>
1088
- </Collapse>
1089
- ```
1090
-
1091
- | Prop | Type | Default | Description |
1092
- |------|------|---------|-------------|
1093
- | `open` | `boolean` | `false` | Open state |
1094
-
1095
- Animation is automatically disabled when `prefers-reduced-motion` is set.
1096
-
1097
- ---
1098
-
1099
- #### Dropdown
1100
-
1101
- Positioned dropdown popup. Position is determined relative to trigger element or absolute coordinates.
1102
-
1103
- ```tsx
1104
- import { Dropdown, Button } from "@simplysm/solid";
1105
- import { createSignal } from "solid-js";
1106
-
1107
- const [open, setOpen] = createSignal(false);
1108
- let triggerRef!: HTMLButtonElement;
1109
-
1110
- <Button ref={triggerRef} onClick={() => setOpen(!open())}>Open</Button>
1111
- <Dropdown triggerRef={() => triggerRef} open={open()} onOpenChange={setOpen}>
1112
- <p class="p-3">Dropdown content</p>
1113
- </Dropdown>
1114
-
1115
- // Context menu (absolute position)
1116
- <Dropdown position={{ x: 100, y: 200 }} open={menuOpen()} onOpenChange={setMenuOpen}>
1117
- <List inset>
1118
- <List.Item>Menu item 1</List.Item>
1119
- <List.Item>Menu item 2</List.Item>
1120
- </List>
1121
- </Dropdown>
1122
- ```
1123
-
1124
- | Prop | Type | Default | Description |
1125
- |------|------|---------|-------------|
1126
- | `triggerRef` | `() => HTMLElement \| undefined` | - | Trigger element reference (mutually exclusive with position) |
1127
- | `position` | `{ x: number; y: number }` | - | Absolute position (mutually exclusive with triggerRef) |
1128
- | `open` | `boolean` | - | Open state |
1129
- | `onOpenChange` | `(open: boolean) => void` | - | State change callback |
1130
- | `maxHeight` | `number` | `300` | Maximum height (px) |
1131
- | `keyboardNav` | `boolean` | - | Enable keyboard navigation (used by Select, etc.) |
1132
-
1133
- ---
1134
-
1135
- #### Dialog
1136
-
1137
- Modal dialog component. Supports drag movement, resize, floating mode, and fullscreen mode.
1138
-
1139
- ```tsx
1140
- import { Dialog, Button } from "@simplysm/solid";
1141
- import { createSignal } from "solid-js";
1142
-
1143
- const [open, setOpen] = createSignal(false);
1144
-
1145
- <Button onClick={() => setOpen(true)}>Open</Button>
1146
- <Dialog
1147
- title="Dialog Title"
1148
- open={open()}
1149
- onOpenChange={setOpen}
1150
- closeOnBackdrop
1151
- widthPx={600}
1152
- >
1153
- <div class="p-4">
1154
- Dialog content
1155
- </div>
1156
- </Dialog>
1157
-
1158
- // Floating mode (no backdrop)
1159
- <Dialog
1160
- title="Notification"
1161
- open={open()}
1162
- onOpenChange={setOpen}
1163
- float
1164
- position="bottom-right"
1165
- >
1166
- <div class="p-4">Floating dialog</div>
1167
- </Dialog>
1168
- ```
1169
-
1170
- | Prop | Type | Default | Description |
1171
- |------|------|---------|-------------|
1172
- | `open` | `boolean` | - | Open state |
1173
- | `onOpenChange` | `(open: boolean) => void` | - | State change callback |
1174
- | `title` | `string` | **(required)** | Modal title |
1175
- | `hideHeader` | `boolean` | - | Hide header |
1176
- | `closable` | `boolean` | `true` | Show close button |
1177
- | `closeOnBackdrop` | `boolean` | - | Close on backdrop click |
1178
- | `closeOnEscape` | `boolean` | `true` | Close on Escape key |
1179
- | `resizable` | `boolean` | `false` | Resizable |
1180
- | `movable` | `boolean` | `true` | Draggable |
1181
- | `float` | `boolean` | - | Floating mode (no backdrop) |
1182
- | `fill` | `boolean` | - | Fullscreen mode |
1183
- | `widthPx` | `number` | - | Width (px) |
1184
- | `heightPx` | `number` | - | Height (px) |
1185
- | `minWidthPx` | `number` | - | Minimum width (px) |
1186
- | `minHeightPx` | `number` | - | Minimum height (px) |
1187
- | `position` | `"bottom-right" \| "top-right"` | - | Fixed position |
1188
- | `headerAction` | `JSX.Element` | - | Header action area |
1189
- | `canDeactivate` | `() => boolean` | - | Pre-close confirmation function |
1190
- | `onCloseComplete` | `() => void` | - | Post-close animation callback |
1191
-
1192
- ---
1193
-
1194
- ### Feedback
1195
-
1196
- #### Notification
1197
-
1198
- Notification system. Wrap with `NotificationProvider` and trigger notifications using the `useNotification` hook.
1199
-
1200
- ```tsx
1201
- import {
1202
- NotificationProvider,
1203
- NotificationBanner,
1204
- NotificationBell,
1205
- useNotification,
1206
- } from "@simplysm/solid";
1207
-
1208
- // Set up Provider at app root
1209
- <NotificationProvider>
1210
- <NotificationBanner />
1211
- <header>
1212
- <NotificationBell />
1213
- </header>
1214
- <MyApp />
1215
- </NotificationProvider>
1216
-
1217
- // Trigger notifications within components
1218
- function MyComponent() {
1219
- const notification = useNotification();
1220
-
1221
- const handleSave = () => {
1222
- notification.success("Success", "Saved successfully.");
1223
- };
1224
-
1225
- const handleError = () => {
1226
- notification.danger("Error", "An issue occurred.", {
1227
- action: { label: "Retry", onClick: handleRetry },
1228
- });
1229
- };
1230
-
1231
- return <Button onClick={handleSave}>Save</Button>;
1232
- }
1233
- ```
1234
-
1235
- **useNotification API:**
1236
-
1237
- | Method | Signature | Description |
1238
- |--------|-----------|-------------|
1239
- | `info` | `(title: string, message?: string, options?: NotificationOptions) => string` | Info notification |
1240
- | `success` | `(title: string, message?: string, options?: NotificationOptions) => string` | Success notification |
1241
- | `warning` | `(title: string, message?: string, options?: NotificationOptions) => string` | Warning notification |
1242
- | `danger` | `(title: string, message?: string, options?: NotificationOptions) => string` | Error notification |
1243
- | `update` | `(id: string, updates: Partial<NotificationItem>, options?: { renotify?: boolean }) => void` | Update notification |
1244
- | `remove` | `(id: string) => void` | Remove notification |
1245
- | `markAsRead` | `(id: string) => void` | Mark as read |
1246
- | `markAllAsRead` | `() => void` | Mark all as read |
1247
- | `dismissBanner` | `() => void` | Dismiss banner |
1248
- | `clear` | `() => void` | Clear all |
1249
-
1250
- **Components:**
1251
- - `NotificationProvider` -- Notification state management Provider
1252
- - `NotificationBanner` -- Top-of-screen notification banner
1253
- - `NotificationBell` -- Notification bell icon (shows unread count)
1254
-
1255
- ---
1256
-
1257
- #### Loading
1258
-
1259
- Loading overlay system. Wrap with `LoadingProvider` and control loading state using the `useLoading` hook.
1260
-
1261
- ```tsx
1262
- import {
1263
- LoadingProvider,
1264
- LoadingContainer,
1265
- useLoading,
1266
- } from "@simplysm/solid";
1267
-
1268
- // Set up Provider at app root
1269
- <LoadingProvider>
1270
- <LoadingContainer />
1271
- <MyApp />
1272
- </LoadingProvider>
1273
-
1274
- // Control loading within components
1275
- function MyComponent() {
1276
- const loading = useLoading();
1277
-
1278
- const fetchData = async () => {
1279
- loading.show("Loading data...");
1280
- try {
1281
- await fetch("/api/data");
1282
- } finally {
1283
- loading.hide();
1284
- }
1285
- };
1286
-
1287
- return <Button onClick={fetchData}>Load Data</Button>;
1288
- }
1289
- ```
1290
-
1291
- **useLoading API:**
1292
-
1293
- | Method | Signature | Description |
1294
- |--------|-----------|-------------|
1295
- | `show` | `(message?: string) => void` | Show loading |
1296
- | `hide` | `() => void` | Hide loading |
1297
- | `setProgress` | `(percent: number \| undefined) => void` | Set progress |
1298
-
1299
- ---
1300
-
1301
- ### Print
1302
-
1303
- #### Print / usePrint
1304
-
1305
- Browser printing and PDF generation. Requires `LoadingProvider`.
1306
-
1307
- ```tsx
1308
- import { Print, usePrint } from "@simplysm/solid";
1309
-
1310
- function MyComponent() {
1311
- const { toPrinter, toPdf } = usePrint();
1312
-
1313
- const handlePrint = async () => {
1314
- await toPrinter(
1315
- () => (
1316
- <Print>
1317
- <Print.Page>
1318
- <h1>Print content</h1>
1319
- <p>Page 1</p>
1320
- </Print.Page>
1321
- <Print.Page>
1322
- <p>Page 2</p>
1323
- </Print.Page>
1324
- </Print>
1325
- ),
1326
- { size: "A4", margin: "10mm" },
1327
- );
1328
- };
1329
-
1330
- const handlePdf = async () => {
1331
- const pdfData = await toPdf(
1332
- () => (
1333
- <Print>
1334
- <Print.Page>
1335
- <h1>PDF content</h1>
1336
- </Print.Page>
1337
- </Print>
1338
- ),
1339
- { size: "A4 landscape" },
1340
- );
1341
- // pdfData: Uint8Array
1342
- };
1343
-
1344
- return (
1345
- <>
1346
- <Button onClick={handlePrint}>Print</Button>
1347
- <Button onClick={handlePdf}>Download PDF</Button>
1348
- </>
1349
- );
1350
- }
1351
- ```
1352
-
1353
- **usePrint API:**
1354
-
1355
- | Method | Signature | Description |
1356
- |--------|-----------|-------------|
1357
- | `toPrinter` | `(factory: () => JSX.Element, options?: PrintOptions) => Promise<void>` | Browser print |
1358
- | `toPdf` | `(factory: () => JSX.Element, options?: PrintOptions) => Promise<Uint8Array>` | PDF generation |
1359
-
1360
- **PrintOptions:**
54
+ **AppConfig options:**
1361
55
 
1362
56
  | Option | Type | Default | Description |
1363
57
  |--------|------|---------|-------------|
1364
- | `size` | `string` | `"A4"` | Paper size (`"A4"`, `"A3"`, `"A4 landscape"`, `"210mm 297mm"`, etc.) |
1365
- | `margin` | `string` | `"0"` | Margins (`"10mm"`, `"1cm"`, etc.) |
1366
-
1367
- **Sub-components:**
1368
- - `Print.Page` -- Explicit page breaks (auto-breaks if not used)
1369
-
1370
- ---
58
+ | `clientName` | `string` | **(required)** | Client identifier (used as storage key prefix) |
59
+ | `syncStorage` | `StorageAdapter` | `localStorage` | Custom sync storage adapter (used by `useSyncConfig`) |
60
+ | `logger` | `LogAdapter` | - | Log adapter for remote logging (used by `useLogger`) |
61
+ | `loadingVariant` | `"spinner" \| "bar"` | `"spinner"` | Root loading overlay variant |
1371
62
 
1372
- ## Context & Hooks
63
+ **StorageAdapter interface:**
1373
64
 
1374
- ### useTheme
1375
-
1376
- Hook to access theme (dark/light/system) state. Must be used inside `ThemeProvider`.
1377
-
1378
- ```tsx
1379
- import { useTheme } from "@simplysm/solid";
1380
-
1381
- const theme = useTheme();
1382
- theme.mode(); // "light" | "dark" | "system"
1383
- theme.resolvedTheme(); // "light" | "dark" (follows OS setting when system)
1384
- theme.setMode("dark");
1385
- theme.cycleMode(); // light -> system -> dark -> light
65
+ ```typescript
66
+ interface StorageAdapter {
67
+ getItem(key: string): string | null | Promise<string | null>;
68
+ setItem(key: string, value: string): void | Promise<unknown>;
69
+ removeItem(key: string): void | Promise<void>;
70
+ }
1386
71
  ```
1387
72
 
1388
- | Property/Method | Type | Description |
1389
- |-----------------|------|-------------|
1390
- | `mode` | `() => ThemeMode` | Current theme mode |
1391
- | `resolvedTheme` | `() => ResolvedTheme` | Actual applied theme |
1392
- | `setMode` | `(mode: ThemeMode) => void` | Set theme mode |
1393
- | `cycleMode` | `() => void` | Cycle to next mode |
1394
-
1395
- ---
1396
-
1397
- ### usePersisted
1398
-
1399
- localStorage-based persistent signal. Must be used inside `ConfigContext`, and keys are automatically stored as `{clientName}.{key}`. Supports serialization of `@simplysm/core-common` custom types like `DateTime`, `DateOnly`.
1400
-
1401
- ```tsx
1402
- import { usePersisted } from "@simplysm/solid";
1403
-
1404
- const [value, setValue] = usePersisted("settings.view", "grid");
73
+ **LogAdapter interface:**
1405
74
 
1406
- // loading state (for async storage)
1407
- const [data, setData, loading] = usePersisted("cache.data", defaultData);
75
+ ```typescript
76
+ interface LogAdapter {
77
+ write(severity: "error" | "warn" | "info" | "log", ...data: any[]): Promise<void> | void;
78
+ }
1408
79
  ```
1409
80
 
1410
- | Return value | Type | Description |
1411
- |--------------|------|-------------|
1412
- | `[0]` | `Accessor<T>` | Value getter |
1413
- | `[1]` | `Setter<T>` | Value setter |
1414
- | `[2]` | `Accessor<boolean>` | Loading state (async storage only) |
1415
-
1416
- ---
1417
-
1418
- ### useNotification
1419
-
1420
- Hook to access notification system. Must be used inside `NotificationProvider`. See [Notification](#notification) section for detailed API.
1421
-
1422
- ---
1423
-
1424
- ### useLoading
1425
-
1426
- Hook to access loading overlay. Must be used inside `LoadingProvider`. See [Loading](#loading) section for detailed API.
1427
-
1428
- ---
1429
-
1430
- ### usePrint
1431
-
1432
- Hook for printing and PDF generation. Must be used inside `LoadingProvider`. See [Print](#print--useprint) section for detailed API.
1433
-
1434
- ---
1435
-
1436
- ### useConfig
1437
-
1438
- Hook to access app-wide configuration. Must be used inside `ConfigContext.Provider` or `InitializeProvider`.
81
+ ### Base CSS
1439
82
 
1440
- ```tsx
1441
- import { useConfig } from "@simplysm/solid";
83
+ Import the base CSS in your entry point:
1442
84
 
1443
- const config = useConfig();
1444
- console.log(config.clientName); // "my-app"
85
+ ```typescript
86
+ // entry point (e.g., index.tsx)
87
+ import "@simplysm/solid/tailwind.css";
1445
88
  ```
1446
89
 
1447
90
  ---
1448
91
 
1449
- ### createControllableSignal
1450
-
1451
- Signal hook that automatically handles Controlled/Uncontrolled patterns. Operates in controlled mode when `onChange` is provided, uncontrolled mode otherwise.
1452
-
1453
- ```tsx
1454
- import { createControllableSignal } from "@simplysm/solid";
92
+ ## Components
1455
93
 
1456
- // Use inside components
1457
- const [value, setValue] = createControllableSignal({
1458
- value: () => props.value ?? "",
1459
- onChange: () => props.onValueChange,
1460
- });
94
+ ### Form Controls
95
+
96
+ - [`Button`](docs/form-controls.md#button) - Interactive button with Material Design ripple effect
97
+ - [`TextInput`](docs/form-controls.md#textinput) - Text input with format mask and IME composition support
98
+ - [`NumberInput`](docs/form-controls.md#numberinput) - Number input with thousand separators and decimal places
99
+ - [`DatePicker`](docs/form-controls.md#datepicker) - Date input supporting year, month, and date units (`DateOnly` type)
100
+ - [`DateRangePicker`](docs/form-controls.md#daterangepicker) - Date range input with period type selection (day/month/range)
101
+ - [`Textarea`](docs/form-controls.md#textarea) - Multi-line text input with auto-height and IME support
102
+ - [`Select`](docs/form-controls.md#select) - Dropdown selection with single/multiple, hierarchical items, and compound components
103
+ - [`Combobox`](docs/form-controls.md#combobox) - Autocomplete with async search and debouncing
104
+ - [`Checkbox`](docs/form-controls.md#checkbox--radio) / [`Radio`](docs/form-controls.md#checkbox--radio) - Checkbox and radio button
105
+ - [`CheckboxGroup`](docs/form-controls.md#checkboxgroup--radiogroup) / [`RadioGroup`](docs/form-controls.md#checkboxgroup--radiogroup) - Group components for multiple/single selection
106
+ - [`ColorPicker`](docs/form-controls.md#colorpicker) - Color selection component
107
+ - [`ThemeToggle`](docs/form-controls.md#themetoggle) - Dark/light/system theme cycle toggle
108
+ - [`RichTextEditor`](docs/form-controls.md#richtexteditor) - Tiptap-based rich text editor with formatting, tables, images
109
+ - [`Invalid`](docs/form-controls.md#invalid) - Wrapper component for form validation using native browser validation
110
+ - [`Numpad`](docs/form-controls.md#numpad) - Numeric keypad for touch-based input
111
+ - [`StatePreset`](docs/form-controls.md#statepreset) - Save/load screen state as presets
1461
112
 
1462
- // Supports functional setter
1463
- setValue((prev) => prev + "!");
1464
- ```
113
+ ### Data
1465
114
 
1466
- ---
115
+ - [`Table`](docs/data-components.md#table) - Basic HTML table wrapper with consistent styling
116
+ - [`DataSheet`](docs/data-components.md#datasheet) - Advanced data table with sorting, pagination, selection, tree expansion, column resize, drag reorder
117
+ - [`List`](docs/data-components.md#list) - Tree-view list with keyboard navigation
118
+ - [`Pagination`](docs/data-components.md#pagination) - Page navigation component
119
+ - [`Calendar`](docs/data-components.md#calendar) - Calendar-style data display
120
+ - [`PermissionTable`](docs/data-components.md#permissiontable) - Hierarchical permission management table with cascading checks
1467
121
 
1468
- ### createMountTransition
122
+ ### Layout
1469
123
 
1470
- Mount transition hook for open/close CSS animations. Control DOM rendering with `mounted()` and toggle CSS classes with `animating()`.
124
+ - [`Sidebar`](docs/layout.md#sidebar) - Sidebar navigation with responsive mobile overlay
125
+ - [`Topbar`](docs/layout.md#topbar) - Top navigation bar with menus and user dropdown
126
+ - [`FormGroup`](docs/layout.md#formgroup) - Form fields layout with labels (vertical/inline)
127
+ - [`FormTable`](docs/layout.md#formtable) - Table-based form layout
128
+ - [`Kanban`](docs/layout.md#kanban) - Kanban board with drag-and-drop, lane collapse, multi-select
1471
129
 
1472
- ```tsx
1473
- import { createMountTransition } from "@simplysm/solid";
130
+ ### Display
1474
131
 
1475
- const { mounted, animating, unmount } = createMountTransition(() => open());
1476
- ```
132
+ - [`Card`](docs/display.md#card) - Container with shadow effect
133
+ - [`Tag`](docs/display.md#tag) - Inline tag/badge component
134
+ - [`Alert`](docs/display.md#alert) - Block-level alert/notice component
135
+ - [`Icon`](docs/display.md#icon) - Tabler Icons wrapper (scales with surrounding text)
136
+ - [`Progress`](docs/display.md#progress) - Progress indicator
137
+ - [`Barcode`](docs/display.md#barcode) - Barcode/QR code rendering (100+ barcode types)
138
+ - [`Echarts`](docs/display.md#echarts) - Apache ECharts chart wrapper
1477
139
 
1478
- | Return value | Type | Description |
1479
- |--------------|------|-------------|
1480
- | `mounted` | `() => boolean` | Whether mounted in DOM |
1481
- | `animating` | `() => boolean` | Animation active state |
1482
- | `unmount` | `() => void` | Manual unmount |
140
+ ### Disclosure
1483
141
 
1484
- ---
142
+ - [`Tabs`](docs/disclosure.md#tabs) - Tab navigation component
143
+ - [`Collapse`](docs/disclosure.md#collapse) - Content collapse/expand animation
144
+ - [`Dropdown`](docs/disclosure.md#dropdown) - Positioned dropdown popup
145
+ - [`Dialog`](docs/disclosure.md#dialog) - Modal dialog with drag, resize, floating mode, and programmatic `useDialog`
1485
146
 
1486
- ### createIMEHandler
147
+ ### Feedback
1487
148
 
1488
- Hook that delays `onValueChange` calls during IME (Korean, etc.) composition to prevent interrupted input.
149
+ - [`Notification`](docs/feedback.md#notification) - Notification system with banner and bell (`useNotification`)
150
+ - [`Loading`](docs/feedback.md#loading) - Loading overlay with spinner/bar variants (`useLoading`)
151
+ - [`Print`](docs/feedback.md#print--useprint) - Browser printing and PDF generation (`usePrint`)
1489
152
 
1490
153
  ---
1491
154
 
1492
- ### useRouterLink
1493
-
1494
- `@solidjs/router`-based navigation hook. Automatically handles Ctrl/Alt + click (new tab), Shift + click (new window).
1495
-
1496
- ```tsx
1497
- import { useRouterLink } from "@simplysm/solid";
1498
-
1499
- const navigate = useRouterLink();
155
+ ## Hooks
1500
156
 
1501
- <List.Item onClick={navigate({ href: "/home/dashboard" })}>
1502
- Dashboard
1503
- </List.Item>
1504
-
1505
- // Pass state
1506
- <List.Item onClick={navigate({ href: "/users/123", state: { from: "list" } })}>
1507
- User
1508
- </List.Item>
1509
- ```
157
+ - [`useTheme`](docs/hooks.md#usetheme) - Dark/light/system theme state access
158
+ - [`useLocalStorage`](docs/hooks.md#uselocalstorage) - Local-only persistent storage (never syncs)
159
+ - [`useSyncConfig`](docs/hooks.md#usesyncconfig) - Syncable config storage (cross-device sync support)
160
+ - [`useLogger`](docs/hooks.md#uselogger) - Logging with optional remote adapter
161
+ - [`useConfig`](docs/hooks.md#useconfig) - App-wide configuration access
162
+ - [`useNotification`](docs/hooks.md#usenotification) - Notification system access
163
+ - [`useLoading`](docs/hooks.md#useloading) - Loading overlay control
164
+ - [`usePrint`](docs/hooks.md#useprint) - Printing and PDF generation
165
+ - [`createControllableSignal`](docs/hooks.md#createcontrollablesignal) - Controlled/Uncontrolled signal pattern
166
+ - [`createMountTransition`](docs/hooks.md#createmounttransition) - Mount/unmount CSS animation hook
167
+ - [`createIMEHandler`](docs/hooks.md#createimehandler) - IME composition delay handler
168
+ - [`useRouterLink`](docs/hooks.md#userouterlink) - Navigation with Ctrl/Shift+click support
169
+ - [`createAppStructure`](docs/hooks.md#createappstructure) - Declarative app structure (routing, menus, permissions)
170
+ - [`createPwaUpdate`](docs/hooks.md#createpwaupdate) - PWA Service Worker update detection
1510
171
 
1511
172
  ---
1512
173
 
1513
- ### createAppStructure
174
+ ## Providers
1514
175
 
1515
- Utility for declaratively defining app structure (routing, menus, permissions).
1516
-
1517
- ```tsx
1518
- import { createAppStructure, type AppStructureItem } from "@simplysm/solid";
1519
-
1520
- const items: AppStructureItem<string>[] = [
1521
- {
1522
- code: "home",
1523
- title: "Home",
1524
- component: HomePage,
1525
- perms: ["use"],
1526
- },
1527
- {
1528
- code: "admin",
1529
- title: "Admin",
1530
- children: [
1531
- { code: "users", title: "User Management", component: UsersPage, perms: ["use", "edit"] },
1532
- ],
1533
- },
1534
- ];
1535
-
1536
- const structure = createAppStructure(items, {
1537
- modules: () => activeModules(),
1538
- basePath: "/app",
1539
- });
1540
-
1541
- // structure.routes -- Route array (pass to Route component)
1542
- // structure.usableMenus() -- Sidebar menu array
1543
- // structure.permRecord() -- Permission record (Record<string, boolean>)
1544
- ```
176
+ - [`InitializeProvider`](docs/providers.md#initializeprovider) - Root provider (theme, notification, loading, dialog, error capturing)
177
+ - [`ServiceClientProvider`](docs/providers.md#serviceclientprovider) - WebSocket RPC client provider
178
+ - [`SharedDataProvider`](docs/providers.md#shareddataprovider) - Server-side data subscription provider
1545
179
 
1546
180
  ---
1547
181
 
1548
- ## Directives
1549
-
1550
- ### ripple
1551
-
1552
- Material Design ripple effect directive. Displays ripple effect on click.
182
+ ## Styling
1553
183
 
1554
- ```tsx
1555
- import { ripple } from "@simplysm/solid";
1556
- // Keep reference to register directive
1557
- void ripple;
1558
-
1559
- <button use:ripple={true}>Click</button>
1560
- <button use:ripple={!props.disabled}>Conditional activation</button>
1561
- ```
1562
-
1563
- - Creates internal ripple container, operates without affecting parent element
1564
- - Automatically disabled when `prefers-reduced-motion: reduce` is set
1565
- - Single ripple mode: removes previous ripple on new click
184
+ - [Semantic Colors](docs/styling.md#semantic-colors) - primary, info, success, warning, danger, base
185
+ - [Custom Sizes](docs/styling.md#custom-sizes) - Field height classes (h-field, h-field-sm, h-field-lg)
186
+ - [z-index Layers](docs/styling.md#z-index-layers) - Sidebar, dropdown, modal z-index values
187
+ - [Dark Mode](docs/styling.md#dark-mode) - Class-based dark mode with auto-toggle
188
+ - [Styling Patterns](docs/styling.md#styling-patterns) - clsx + twMerge usage patterns
1566
189
 
1567
190
  ---
1568
191
 
1569
- ## Tailwind Theme
1570
-
1571
- `@simplysm/solid` provides the following custom themes via Tailwind CSS preset.
1572
-
1573
- ### Semantic Colors
1574
-
1575
- | Name | Base Color | Usage |
1576
- |------|------------|-------|
1577
- | `primary` | blue | Primary actions |
1578
- | `info` | sky | Information |
1579
- | `success` | green | Success |
1580
- | `warning` | amber | Warning |
1581
- | `danger` | red | Danger/error |
1582
- | `base` | zinc | Neutral (backgrounds, borders, secondary text, etc.) |
1583
-
1584
- > Use `base-*` instead of directly using `zinc-*`.
192
+ ## Helpers & Directives
1585
193
 
1586
- ### Custom Sizes
1587
-
1588
- | Class | Description |
1589
- |-------|-------------|
1590
- | `h-field` / `size-field` | Default field height (based on `py-1`) |
1591
- | `h-field-sm` / `size-field-sm` | Small field height (based on `py-0.5`) |
1592
- | `h-field-lg` / `size-field-lg` | Large field height (based on `py-2`) |
1593
- | `h-field-inset` / `size-field-inset` | Inset field height (excludes border) |
1594
- | `h-field-inset-sm` / `size-field-inset-sm` | Small inset field height |
1595
- | `h-field-inset-lg` / `size-field-inset-lg` | Large inset field height |
1596
-
1597
- ### z-index Layers
1598
-
1599
- | Class | Value | Description |
1600
- |-------|-------|-------------|
1601
- | `z-sidebar` | 100 | Sidebar |
1602
- | `z-sidebar-backdrop` | 99 | Sidebar backdrop |
1603
- | `z-busy` | 500 | Loading overlay |
1604
- | `z-dropdown` | 1000 | Dropdown popup |
1605
- | `z-modal-backdrop` | 1999 | Modal backdrop |
1606
- | `z-modal` | 2000 | Modal dialog |
1607
-
1608
- ### Dark Mode
1609
-
1610
- Uses Tailwind's `class` strategy. `ThemeProvider` automatically toggles the `dark` class on the `<html>` element.
1611
-
1612
- ```html
1613
- <!-- Light mode -->
1614
- <html>
1615
- <!-- Dark mode -->
1616
- <html class="dark">
1617
- ```
1618
-
1619
- ### Styling Patterns
1620
-
1621
- When using Tailwind classes in components, group them by semantic units with `clsx` and resolve conflicts with `twMerge`:
1622
-
1623
- ```typescript
1624
- import clsx from "clsx";
1625
- import { twMerge } from "tailwind-merge";
1626
-
1627
- const baseClass = clsx(
1628
- "inline-flex items-center",
1629
- "px-2 py-1",
1630
- "rounded",
1631
- "border border-transparent",
1632
- );
1633
-
1634
- const className = twMerge(baseClass, props.class);
1635
- ```
194
+ - [`mergeStyles`](docs/helpers.md#mergestyles) - Merge inline style strings and CSSProperties objects
195
+ - [`splitSlots`](docs/helpers.md#splitslots) - Split children into named slots by component type
196
+ - [`ripple`](docs/helpers.md#ripple-directive) - Material Design ripple effect directive
1636
197
 
1637
198
  ---
1638
199
 
@@ -1645,8 +206,6 @@ pnpm dev
1645
206
  # http://localhost:40081 (port may vary)
1646
207
  ```
1647
208
 
1648
- ---
1649
-
1650
209
  ## License
1651
210
 
1652
211
  Apache-2.0