@simplysm/solid 13.0.28 → 13.0.30

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 (379) hide show
  1. package/README.md +15 -9
  2. package/dist/components/data/Pagination.d.ts +4 -5
  3. package/dist/components/data/Pagination.d.ts.map +1 -1
  4. package/dist/components/data/Pagination.js +14 -14
  5. package/dist/components/data/Pagination.js.map +2 -2
  6. package/dist/components/data/Table.js +1 -1
  7. package/dist/components/data/calendar/Calendar.d.ts.map +1 -1
  8. package/dist/components/data/calendar/Calendar.js +1 -1
  9. package/dist/components/data/calendar/Calendar.js.map +1 -1
  10. package/dist/components/data/kanban/Kanban.d.ts +9 -9
  11. package/dist/components/data/kanban/Kanban.d.ts.map +1 -1
  12. package/dist/components/data/kanban/Kanban.js +6 -6
  13. package/dist/components/data/kanban/Kanban.js.map +2 -2
  14. package/dist/components/data/list/List.d.ts.map +1 -1
  15. package/dist/components/data/list/List.js.map +1 -1
  16. package/dist/components/data/list/ListItem.d.ts.map +1 -1
  17. package/dist/components/data/list/ListItem.js.map +1 -1
  18. package/dist/components/data/permission-table/PermissionTable.d.ts.map +1 -1
  19. package/dist/components/data/permission-table/PermissionTable.js.map +1 -1
  20. package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
  21. package/dist/components/data/sheet/DataSheet.js +102 -107
  22. package/dist/components/data/sheet/DataSheet.js.map +2 -2
  23. package/dist/components/data/sheet/DataSheet.styles.d.ts.map +1 -1
  24. package/dist/components/data/sheet/DataSheet.styles.js +24 -6
  25. package/dist/components/data/sheet/DataSheet.styles.js.map +1 -1
  26. package/dist/components/data/sheet/DataSheetColumn.d.ts.map +1 -1
  27. package/dist/components/data/sheet/DataSheetColumn.js.map +1 -1
  28. package/dist/components/data/sheet/DataSheetConfigDialog.d.ts.map +1 -1
  29. package/dist/components/data/sheet/DataSheetConfigDialog.js.map +1 -1
  30. package/dist/components/data/sheet/sheetUtils.d.ts.map +1 -1
  31. package/dist/components/data/sheet/sheetUtils.js.map +1 -1
  32. package/dist/components/data/sheet/types.d.ts +2 -2
  33. package/dist/components/data/sheet/types.d.ts.map +1 -1
  34. package/dist/components/disclosure/Collapse.d.ts.map +1 -1
  35. package/dist/components/disclosure/Collapse.js +0 -3
  36. package/dist/components/disclosure/Collapse.js.map +1 -1
  37. package/dist/components/disclosure/Dialog.d.ts +8 -8
  38. package/dist/components/disclosure/Dialog.d.ts.map +1 -1
  39. package/dist/components/disclosure/Dialog.js +64 -69
  40. package/dist/components/disclosure/Dialog.js.map +2 -2
  41. package/dist/components/disclosure/DialogContext.d.ts +4 -4
  42. package/dist/components/disclosure/DialogContext.d.ts.map +1 -1
  43. package/dist/components/disclosure/DialogContext.js.map +1 -1
  44. package/dist/components/disclosure/DialogProvider.d.ts.map +1 -1
  45. package/dist/components/disclosure/DialogProvider.js +8 -8
  46. package/dist/components/disclosure/DialogProvider.js.map +2 -2
  47. package/dist/components/disclosure/Dropdown.d.ts.map +1 -1
  48. package/dist/components/disclosure/Dropdown.js.map +1 -1
  49. package/dist/components/disclosure/Tabs.d.ts.map +1 -1
  50. package/dist/components/disclosure/Tabs.js.map +1 -1
  51. package/dist/components/display/Alert.d.ts.map +1 -1
  52. package/dist/components/display/Alert.js.map +1 -1
  53. package/dist/components/display/Card.d.ts +0 -1
  54. package/dist/components/display/Card.d.ts.map +1 -1
  55. package/dist/components/display/Card.js +1 -2
  56. package/dist/components/display/Card.js.map +1 -1
  57. package/dist/components/display/Echarts.d.ts +1 -1
  58. package/dist/components/display/Echarts.d.ts.map +1 -1
  59. package/dist/components/display/Echarts.js +2 -2
  60. package/dist/components/display/Echarts.js.map +2 -2
  61. package/dist/components/display/Link.d.ts +5 -0
  62. package/dist/components/display/Link.d.ts.map +1 -0
  63. package/dist/components/display/Link.js +26 -0
  64. package/dist/components/display/Link.js.map +6 -0
  65. package/dist/components/feedback/Progress.d.ts +3 -3
  66. package/dist/components/feedback/Progress.d.ts.map +1 -1
  67. package/dist/components/feedback/Progress.js +1 -1
  68. package/dist/components/feedback/Progress.js.map +2 -2
  69. package/dist/components/feedback/busy/BusyContainer.d.ts +13 -0
  70. package/dist/components/feedback/busy/BusyContainer.d.ts.map +1 -0
  71. package/dist/components/feedback/{loading/LoadingContainer.js → busy/BusyContainer.js} +20 -13
  72. package/dist/components/feedback/busy/BusyContainer.js.map +6 -0
  73. package/dist/components/feedback/busy/BusyContext.d.ts +11 -0
  74. package/dist/components/feedback/busy/BusyContext.d.ts.map +1 -0
  75. package/dist/components/feedback/busy/BusyContext.js +14 -0
  76. package/dist/components/feedback/busy/BusyContext.js.map +6 -0
  77. package/dist/components/feedback/busy/BusyProvider.d.ts +7 -0
  78. package/dist/components/feedback/busy/BusyProvider.d.ts.map +1 -0
  79. package/dist/components/feedback/{loading/LoadingProvider.js → busy/BusyProvider.js} +7 -7
  80. package/dist/components/feedback/busy/BusyProvider.js.map +6 -0
  81. package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -1
  82. package/dist/components/feedback/notification/NotificationBanner.js +1 -1
  83. package/dist/components/feedback/notification/NotificationBanner.js.map +1 -1
  84. package/dist/components/feedback/notification/NotificationBell.d.ts.map +1 -1
  85. package/dist/components/feedback/notification/NotificationBell.js +4 -2
  86. package/dist/components/feedback/notification/NotificationBell.js.map +2 -2
  87. package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -1
  88. package/dist/components/feedback/notification/NotificationContext.js.map +1 -1
  89. package/dist/components/feedback/notification/NotificationProvider.d.ts.map +1 -1
  90. package/dist/components/feedback/notification/NotificationProvider.js +1 -0
  91. package/dist/components/feedback/notification/NotificationProvider.js.map +1 -1
  92. package/dist/components/form-control/Button.d.ts.map +1 -1
  93. package/dist/components/form-control/Button.js +2 -2
  94. package/dist/components/form-control/Button.js.map +1 -1
  95. package/dist/components/form-control/DropdownTrigger.styles.d.ts.map +1 -1
  96. package/dist/components/form-control/DropdownTrigger.styles.js +6 -1
  97. package/dist/components/form-control/DropdownTrigger.styles.js.map +1 -1
  98. package/dist/components/form-control/Invalid.d.ts +4 -2
  99. package/dist/components/form-control/Invalid.d.ts.map +1 -1
  100. package/dist/components/form-control/Invalid.js +81 -41
  101. package/dist/components/form-control/Invalid.js.map +2 -2
  102. package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
  103. package/dist/components/form-control/ThemeToggle.js +4 -5
  104. package/dist/components/form-control/ThemeToggle.js.map +2 -2
  105. package/dist/components/form-control/checkbox/Checkbox.d.ts +4 -2
  106. package/dist/components/form-control/checkbox/Checkbox.d.ts.map +1 -1
  107. package/dist/components/form-control/checkbox/Checkbox.js +65 -52
  108. package/dist/components/form-control/checkbox/Checkbox.js.map +2 -2
  109. package/dist/components/form-control/checkbox/Checkbox.styles.d.ts +1 -2
  110. package/dist/components/form-control/checkbox/Checkbox.styles.d.ts.map +1 -1
  111. package/dist/components/form-control/checkbox/Checkbox.styles.js +8 -10
  112. package/dist/components/form-control/checkbox/Checkbox.styles.js.map +1 -1
  113. package/dist/components/form-control/checkbox/CheckboxGroup.d.ts +9 -9
  114. package/dist/components/form-control/checkbox/CheckboxGroup.d.ts.map +1 -1
  115. package/dist/components/form-control/checkbox/CheckboxGroup.js +10 -82
  116. package/dist/components/form-control/checkbox/CheckboxGroup.js.map +2 -2
  117. package/dist/components/form-control/checkbox/Radio.d.ts +4 -2
  118. package/dist/components/form-control/checkbox/Radio.d.ts.map +1 -1
  119. package/dist/components/form-control/checkbox/Radio.js +64 -51
  120. package/dist/components/form-control/checkbox/Radio.js.map +2 -2
  121. package/dist/components/form-control/checkbox/RadioGroup.d.ts +9 -9
  122. package/dist/components/form-control/checkbox/RadioGroup.d.ts.map +1 -1
  123. package/dist/components/form-control/checkbox/RadioGroup.js +10 -77
  124. package/dist/components/form-control/checkbox/RadioGroup.js.map +2 -2
  125. package/dist/components/form-control/color-picker/ColorPicker.d.ts +8 -3
  126. package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
  127. package/dist/components/form-control/color-picker/ColorPicker.js +43 -26
  128. package/dist/components/form-control/color-picker/ColorPicker.js.map +2 -2
  129. package/dist/components/form-control/combobox/Combobox.d.ts +8 -8
  130. package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
  131. package/dist/components/form-control/combobox/Combobox.js +72 -59
  132. package/dist/components/form-control/combobox/Combobox.js.map +2 -2
  133. package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -1
  134. package/dist/components/form-control/editor/EditorToolbar.js +3 -2
  135. package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
  136. package/dist/components/form-control/editor/RichTextEditor.d.ts.map +1 -1
  137. package/dist/components/form-control/editor/RichTextEditor.js.map +1 -1
  138. package/dist/components/form-control/field/DatePicker.d.ts +6 -0
  139. package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
  140. package/dist/components/form-control/field/DatePicker.js +138 -117
  141. package/dist/components/form-control/field/DatePicker.js.map +2 -2
  142. package/dist/components/form-control/field/DateTimePicker.d.ts +6 -0
  143. package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
  144. package/dist/components/form-control/field/DateTimePicker.js +138 -115
  145. package/dist/components/form-control/field/DateTimePicker.js.map +2 -2
  146. package/dist/components/form-control/field/Field.styles.d.ts +14 -0
  147. package/dist/components/form-control/field/Field.styles.d.ts.map +1 -1
  148. package/dist/components/form-control/field/Field.styles.js +47 -3
  149. package/dist/components/form-control/field/Field.styles.js.map +1 -1
  150. package/dist/components/form-control/field/FieldPlaceholder.d.ts +7 -0
  151. package/dist/components/form-control/field/FieldPlaceholder.d.ts.map +1 -0
  152. package/dist/components/form-control/field/FieldPlaceholder.js +34 -0
  153. package/dist/components/form-control/field/FieldPlaceholder.js.map +6 -0
  154. package/dist/components/form-control/field/NumberInput.d.ts +13 -0
  155. package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
  156. package/dist/components/form-control/field/NumberInput.js +163 -111
  157. package/dist/components/form-control/field/NumberInput.js.map +2 -2
  158. package/dist/components/form-control/field/TextInput.d.ts +16 -1
  159. package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
  160. package/dist/components/form-control/field/TextInput.js +177 -114
  161. package/dist/components/form-control/field/TextInput.js.map +2 -2
  162. package/dist/components/form-control/field/Textarea.d.ts +10 -0
  163. package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
  164. package/dist/components/form-control/field/Textarea.js +156 -121
  165. package/dist/components/form-control/field/Textarea.js.map +2 -2
  166. package/dist/components/form-control/field/TimePicker.d.ts +10 -0
  167. package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
  168. package/dist/components/form-control/field/TimePicker.js +126 -94
  169. package/dist/components/form-control/field/TimePicker.js.map +2 -2
  170. package/dist/components/form-control/select/Select.d.ts +7 -9
  171. package/dist/components/form-control/select/Select.d.ts.map +1 -1
  172. package/dist/components/form-control/select/Select.js +71 -60
  173. package/dist/components/form-control/select/Select.js.map +2 -2
  174. package/dist/components/form-control/select/SelectItem.d.ts.map +1 -1
  175. package/dist/components/form-control/select/SelectItem.js.map +1 -1
  176. package/dist/components/form-control/state-preset/StatePreset.d.ts.map +1 -1
  177. package/dist/components/form-control/state-preset/StatePreset.js +2 -1
  178. package/dist/components/form-control/state-preset/StatePreset.js.map +2 -2
  179. package/dist/components/layout/FormGroup.d.ts.map +1 -1
  180. package/dist/components/layout/FormGroup.js.map +1 -1
  181. package/dist/components/layout/sidebar/Sidebar.d.ts.map +1 -1
  182. package/dist/components/layout/sidebar/Sidebar.js +1 -1
  183. package/dist/components/layout/sidebar/Sidebar.js.map +1 -1
  184. package/dist/components/layout/sidebar/SidebarContainer.d.ts.map +1 -1
  185. package/dist/components/layout/sidebar/SidebarContainer.js.map +1 -1
  186. package/dist/components/layout/sidebar/SidebarMenu.js +1 -1
  187. package/dist/components/layout/sidebar/SidebarMenu.js.map +1 -1
  188. package/dist/components/layout/sidebar/SidebarUser.d.ts.map +1 -1
  189. package/dist/components/layout/sidebar/SidebarUser.js +4 -4
  190. package/dist/components/layout/sidebar/SidebarUser.js.map +1 -1
  191. package/dist/components/layout/topbar/Topbar.js +1 -1
  192. package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -1
  193. package/dist/components/layout/topbar/TopbarMenu.js.map +1 -1
  194. package/dist/components/layout/topbar/TopbarUser.d.ts.map +1 -1
  195. package/dist/components/layout/topbar/TopbarUser.js.map +1 -1
  196. package/dist/helpers/createAppStructure.d.ts.map +1 -1
  197. package/dist/helpers/createAppStructure.js +17 -12
  198. package/dist/helpers/createAppStructure.js.map +1 -1
  199. package/dist/helpers/mergeStyles.d.ts.map +1 -1
  200. package/dist/helpers/mergeStyles.js +4 -1
  201. package/dist/helpers/mergeStyles.js.map +1 -1
  202. package/dist/helpers/splitSlots.d.ts.map +1 -1
  203. package/dist/helpers/splitSlots.js.map +1 -1
  204. package/dist/hooks/createControllableSignal.d.ts.map +1 -1
  205. package/dist/hooks/createControllableSignal.js.map +1 -1
  206. package/dist/hooks/createItemTemplate.d.ts +17 -0
  207. package/dist/hooks/createItemTemplate.d.ts.map +1 -0
  208. package/dist/hooks/createItemTemplate.js +40 -0
  209. package/dist/hooks/createItemTemplate.js.map +6 -0
  210. package/dist/hooks/createPointerDrag.d.ts +13 -0
  211. package/dist/hooks/createPointerDrag.d.ts.map +1 -0
  212. package/dist/hooks/createPointerDrag.js +15 -0
  213. package/dist/hooks/createPointerDrag.js.map +6 -0
  214. package/dist/hooks/createSelectionGroup.d.ts +70 -0
  215. package/dist/hooks/createSelectionGroup.d.ts.map +1 -0
  216. package/dist/hooks/createSelectionGroup.js +141 -0
  217. package/dist/hooks/createSelectionGroup.js.map +6 -0
  218. package/dist/hooks/useClipboardValueCopy.js +3 -1
  219. package/dist/hooks/useClipboardValueCopy.js.map +1 -1
  220. package/dist/hooks/useLocalStorage.d.ts +5 -3
  221. package/dist/hooks/useLocalStorage.d.ts.map +1 -1
  222. package/dist/hooks/useLocalStorage.js.map +1 -1
  223. package/dist/hooks/usePrint.d.ts.map +1 -1
  224. package/dist/hooks/usePrint.js +5 -3
  225. package/dist/hooks/usePrint.js.map +1 -1
  226. package/dist/hooks/{createPwaUpdate.d.ts → usePwaUpdate.d.ts} +2 -2
  227. package/dist/hooks/usePwaUpdate.d.ts.map +1 -0
  228. package/dist/hooks/{createPwaUpdate.js → usePwaUpdate.js} +3 -3
  229. package/dist/hooks/usePwaUpdate.js.map +6 -0
  230. package/dist/hooks/useRouterLink.d.ts.map +1 -1
  231. package/dist/hooks/useRouterLink.js.map +1 -1
  232. package/dist/hooks/useSyncConfig.d.ts +3 -3
  233. package/dist/hooks/useSyncConfig.d.ts.map +1 -1
  234. package/dist/hooks/useSyncConfig.js +6 -7
  235. package/dist/hooks/useSyncConfig.js.map +1 -1
  236. package/dist/index.d.ts +5 -6
  237. package/dist/index.d.ts.map +1 -1
  238. package/dist/index.js +6 -7
  239. package/dist/index.js.map +1 -1
  240. package/dist/providers/ConfigContext.d.ts +2 -2
  241. package/dist/providers/ConfigContext.d.ts.map +1 -1
  242. package/dist/providers/InitializeProvider.js +5 -5
  243. package/dist/providers/InitializeProvider.js.map +2 -2
  244. package/dist/providers/ServiceClientProvider.d.ts.map +1 -1
  245. package/dist/providers/ServiceClientProvider.js.map +1 -1
  246. package/dist/providers/ThemeContext.d.ts.map +1 -1
  247. package/dist/providers/ThemeContext.js +2 -1
  248. package/dist/providers/ThemeContext.js.map +2 -2
  249. package/dist/providers/shared-data/SharedDataChangeEvent.d.ts.map +1 -1
  250. package/dist/providers/shared-data/SharedDataChangeEvent.js +1 -3
  251. package/dist/providers/shared-data/SharedDataChangeEvent.js.map +1 -1
  252. package/dist/providers/shared-data/SharedDataContext.d.ts +1 -1
  253. package/dist/providers/shared-data/SharedDataContext.d.ts.map +1 -1
  254. package/dist/providers/shared-data/SharedDataProvider.d.ts.map +1 -1
  255. package/dist/providers/shared-data/SharedDataProvider.js +6 -6
  256. package/dist/providers/shared-data/SharedDataProvider.js.map +2 -2
  257. package/dist/styles/patterns.styles.d.ts +1 -0
  258. package/dist/styles/patterns.styles.d.ts.map +1 -1
  259. package/dist/styles/patterns.styles.js +12 -1
  260. package/dist/styles/patterns.styles.js.map +1 -1
  261. package/dist/styles/tokens.styles.d.ts +2 -1
  262. package/dist/styles/tokens.styles.d.ts.map +1 -1
  263. package/dist/styles/tokens.styles.js +1 -1
  264. package/dist/styles/tokens.styles.js.map +1 -1
  265. package/docs/data-components.md +34 -5
  266. package/docs/disclosure.md +28 -8
  267. package/docs/display.md +19 -2
  268. package/docs/feedback.md +35 -12
  269. package/docs/form-controls.md +289 -33
  270. package/docs/hooks.md +21 -9
  271. package/docs/layout.md +15 -3
  272. package/docs/providers.md +120 -8
  273. package/docs/styling.md +90 -0
  274. package/package.json +3 -3
  275. package/src/components/data/Pagination.tsx +26 -22
  276. package/src/components/data/Table.tsx +1 -1
  277. package/src/components/data/calendar/Calendar.tsx +19 -5
  278. package/src/components/data/kanban/Kanban.tsx +72 -35
  279. package/src/components/data/list/List.tsx +11 -4
  280. package/src/components/data/list/ListItem.tsx +12 -2
  281. package/src/components/data/permission-table/PermissionTable.tsx +32 -5
  282. package/src/components/data/sheet/DataSheet.styles.ts +24 -6
  283. package/src/components/data/sheet/DataSheet.tsx +215 -149
  284. package/src/components/data/sheet/DataSheetColumn.tsx +5 -1
  285. package/src/components/data/sheet/DataSheetConfigDialog.tsx +27 -5
  286. package/src/components/data/sheet/sheetUtils.ts +12 -3
  287. package/src/components/data/sheet/types.ts +2 -2
  288. package/src/components/disclosure/Collapse.tsx +14 -3
  289. package/src/components/disclosure/Dialog.tsx +122 -106
  290. package/src/components/disclosure/DialogContext.ts +8 -5
  291. package/src/components/disclosure/DialogProvider.tsx +19 -7
  292. package/src/components/disclosure/Dropdown.tsx +12 -2
  293. package/src/components/disclosure/Tabs.tsx +29 -5
  294. package/src/components/display/Alert.tsx +3 -4
  295. package/src/components/display/Card.tsx +1 -2
  296. package/src/components/display/Echarts.tsx +12 -5
  297. package/src/components/display/Link.tsx +22 -0
  298. package/src/components/feedback/Progress.tsx +9 -5
  299. package/src/components/feedback/{loading/LoadingContainer.tsx → busy/BusyContainer.tsx} +52 -19
  300. package/src/components/feedback/busy/BusyContext.ts +20 -0
  301. package/src/components/feedback/{loading/LoadingProvider.tsx → busy/BusyProvider.tsx} +10 -10
  302. package/src/components/feedback/notification/NotificationBanner.tsx +14 -3
  303. package/src/components/feedback/notification/NotificationBell.tsx +21 -15
  304. package/src/components/feedback/notification/NotificationContext.ts +4 -1
  305. package/src/components/feedback/notification/NotificationProvider.tsx +4 -1
  306. package/src/components/form-control/Button.tsx +8 -3
  307. package/src/components/form-control/DropdownTrigger.styles.ts +7 -1
  308. package/src/components/form-control/Invalid.tsx +114 -48
  309. package/src/components/form-control/ThemeToggle.tsx +9 -18
  310. package/src/components/form-control/checkbox/Checkbox.styles.ts +7 -10
  311. package/src/components/form-control/checkbox/Checkbox.tsx +39 -28
  312. package/src/components/form-control/checkbox/CheckboxGroup.tsx +18 -97
  313. package/src/components/form-control/checkbox/Radio.tsx +39 -28
  314. package/src/components/form-control/checkbox/RadioGroup.tsx +18 -92
  315. package/src/components/form-control/color-picker/ColorPicker.tsx +51 -18
  316. package/src/components/form-control/combobox/Combobox.tsx +53 -35
  317. package/src/components/form-control/editor/EditorToolbar.tsx +19 -19
  318. package/src/components/form-control/editor/RichTextEditor.tsx +22 -4
  319. package/src/components/form-control/field/DatePicker.tsx +99 -93
  320. package/src/components/form-control/field/DateTimePicker.tsx +115 -96
  321. package/src/components/form-control/field/Field.styles.ts +62 -3
  322. package/src/components/form-control/field/FieldPlaceholder.tsx +18 -0
  323. package/src/components/form-control/field/NumberInput.tsx +136 -84
  324. package/src/components/form-control/field/TextInput.tsx +135 -88
  325. package/src/components/form-control/field/Textarea.tsx +126 -99
  326. package/src/components/form-control/field/TimePicker.tsx +101 -71
  327. package/src/components/form-control/select/Select.tsx +75 -42
  328. package/src/components/form-control/select/SelectItem.tsx +3 -1
  329. package/src/components/form-control/state-preset/StatePreset.tsx +41 -22
  330. package/src/components/layout/FormGroup.tsx +11 -2
  331. package/src/components/layout/sidebar/Sidebar.tsx +3 -2
  332. package/src/components/layout/sidebar/SidebarContainer.tsx +8 -1
  333. package/src/components/layout/sidebar/SidebarMenu.tsx +8 -2
  334. package/src/components/layout/sidebar/SidebarUser.tsx +12 -7
  335. package/src/components/layout/topbar/Topbar.tsx +1 -1
  336. package/src/components/layout/topbar/TopbarMenu.tsx +27 -5
  337. package/src/components/layout/topbar/TopbarUser.tsx +5 -1
  338. package/src/helpers/createAppStructure.ts +29 -15
  339. package/src/helpers/mergeStyles.ts +6 -2
  340. package/src/helpers/splitSlots.ts +4 -1
  341. package/src/hooks/createControllableSignal.ts +2 -1
  342. package/src/hooks/createItemTemplate.tsx +42 -0
  343. package/src/hooks/createPointerDrag.ts +28 -0
  344. package/src/hooks/createSelectionGroup.tsx +235 -0
  345. package/src/hooks/useClipboardValueCopy.ts +5 -2
  346. package/src/hooks/useLocalStorage.ts +11 -5
  347. package/src/hooks/usePrint.ts +9 -4
  348. package/src/hooks/{createPwaUpdate.ts → usePwaUpdate.ts} +1 -1
  349. package/src/hooks/useRouterLink.ts +3 -1
  350. package/src/hooks/useSyncConfig.ts +9 -13
  351. package/src/index.ts +6 -7
  352. package/src/providers/ConfigContext.ts +2 -2
  353. package/src/providers/InitializeProvider.tsx +4 -4
  354. package/src/providers/ServiceClientProvider.tsx +14 -3
  355. package/src/providers/ThemeContext.tsx +12 -3
  356. package/src/providers/shared-data/SharedDataChangeEvent.ts +4 -3
  357. package/src/providers/shared-data/SharedDataContext.ts +1 -1
  358. package/src/providers/shared-data/SharedDataProvider.tsx +13 -8
  359. package/src/styles/patterns.styles.ts +13 -1
  360. package/src/styles/tokens.styles.ts +2 -1
  361. package/tailwind.config.ts +9 -0
  362. package/tailwind.css +1 -1
  363. package/dist/components/display/Card.css +0 -15
  364. package/dist/components/feedback/loading/LoadingContainer.d.ts +0 -12
  365. package/dist/components/feedback/loading/LoadingContainer.d.ts.map +0 -1
  366. package/dist/components/feedback/loading/LoadingContainer.js.map +0 -6
  367. package/dist/components/feedback/loading/LoadingContext.d.ts +0 -11
  368. package/dist/components/feedback/loading/LoadingContext.d.ts.map +0 -1
  369. package/dist/components/feedback/loading/LoadingContext.js +0 -14
  370. package/dist/components/feedback/loading/LoadingContext.js.map +0 -6
  371. package/dist/components/feedback/loading/LoadingProvider.d.ts +0 -7
  372. package/dist/components/feedback/loading/LoadingProvider.d.ts.map +0 -1
  373. package/dist/components/feedback/loading/LoadingProvider.js.map +0 -6
  374. package/dist/hooks/createPwaUpdate.d.ts.map +0 -1
  375. package/dist/hooks/createPwaUpdate.js.map +0 -6
  376. package/src/components/display/Card.css +0 -15
  377. package/src/components/feedback/loading/LoadingContext.ts +0 -20
  378. /package/dist/components/feedback/{loading/LoadingContainer.css → busy/BusyContainer.css} +0 -0
  379. /package/src/components/feedback/{loading/LoadingContainer.css → busy/BusyContainer.css} +0 -0
@@ -1,18 +1,10 @@
1
1
  import clsx from "clsx";
2
- import { type Component, type JSX, Show, splitProps } from "solid-js";
2
+ import { type Component, createMemo, type JSX, Show, splitProps } from "solid-js";
3
3
  import { twMerge } from "tailwind-merge";
4
4
  import { Time } from "@simplysm/core-common";
5
5
  import { createControllableSignal } from "../../../hooks/createControllableSignal";
6
- import {
7
- type FieldSize,
8
- fieldBaseClass,
9
- fieldSizeClasses,
10
- fieldInsetClass,
11
- fieldInsetHeightClass,
12
- fieldInsetSizeHeightClasses,
13
- fieldDisabledClass,
14
- fieldInputClass,
15
- } from "./Field.styles";
6
+ import { type FieldSize, fieldInputClass, getFieldWrapperClass } from "./Field.styles";
7
+ import { Invalid } from "../../form-control/Invalid";
16
8
 
17
9
  type TimePickerUnit = "minute" | "second";
18
10
 
@@ -46,6 +38,21 @@ export interface TimePickerProps {
46
38
 
47
39
  /** 커스텀 style */
48
40
  style?: JSX.CSSProperties;
41
+
42
+ /** 최소 시간 */
43
+ min?: Time;
44
+
45
+ /** 최대 시간 */
46
+ max?: Time;
47
+
48
+ /** 필수 입력 여부 */
49
+ required?: boolean;
50
+
51
+ /** 커스텀 유효성 검사 함수 */
52
+ validate?: (value: Time | undefined) => string | undefined;
53
+
54
+ /** touchMode: 포커스 해제 후에만 에러 표시 */
55
+ touchMode?: boolean;
49
56
  }
50
57
 
51
58
  /**
@@ -111,6 +118,11 @@ export const TimePicker: Component<TimePickerProps> = (props) => {
111
118
  "inset",
112
119
  "class",
113
120
  "style",
121
+ "min",
122
+ "max",
123
+ "required",
124
+ "validate",
125
+ "touchMode",
114
126
  ]);
115
127
 
116
128
  // 기본 단위는 minute
@@ -134,15 +146,12 @@ export const TimePicker: Component<TimePickerProps> = (props) => {
134
146
 
135
147
  // wrapper 클래스
136
148
  const getWrapperClass = (includeCustomClass: boolean) =>
137
- twMerge(
138
- fieldBaseClass,
139
- local.size && fieldSizeClasses[local.size],
140
- local.disabled && fieldDisabledClass,
141
- local.inset && fieldInsetClass + " block",
142
- local.inset && (local.size ? fieldInsetSizeHeightClasses[local.size] : fieldInsetHeightClass),
143
-
144
- includeCustomClass && local.class,
145
- );
149
+ getFieldWrapperClass({
150
+ size: local.size,
151
+ disabled: local.disabled,
152
+ inset: local.inset,
153
+ includeCustomClass: includeCustomClass && local.class,
154
+ });
146
155
 
147
156
  // 편집 가능 여부
148
157
  const isEditable = () => !local.disabled && !local.readonly;
@@ -150,60 +159,81 @@ export const TimePicker: Component<TimePickerProps> = (props) => {
150
159
  // step 속성 (second일 때 1)
151
160
  const getStep = () => (fieldType() === "second" ? "1" : undefined);
152
161
 
162
+ // 유효성 검사 메시지 (순서대로 검사, 최초 실패 메시지 반환)
163
+ const errorMsg = createMemo(() => {
164
+ const v = value();
165
+ if (local.required && v === undefined) return "필수 입력 항목입니다";
166
+ if (v !== undefined) {
167
+ if (local.min !== undefined && v.tick < local.min.tick)
168
+ return `${local.min.toFormatString("HH:mm:ss")}보다 크거나 같아야 합니다`;
169
+ if (local.max !== undefined && v.tick > local.max.tick)
170
+ return `${local.max.toFormatString("HH:mm:ss")}보다 작거나 같아야 합니다`;
171
+ }
172
+ return local.validate?.(v);
173
+ });
174
+
153
175
  return (
154
- <Show
155
- when={local.inset}
156
- fallback={
157
- // standalone 모드
158
- <Show
159
- when={isEditable()}
160
- fallback={
161
- <div
162
- {...rest}
163
- data-time-field
164
- class={twMerge(getWrapperClass(true), "sd-time-field")}
165
- style={local.style}
166
- title={local.title}
167
- >
168
- {displayValue() || "\u00A0"}
169
- </div>
170
- }
171
- >
172
- <div {...rest} data-time-field class={getWrapperClass(true)} style={local.style}>
173
- <input
174
- type="time"
175
- class={fieldInputClass}
176
- value={displayValue()}
177
- title={local.title}
178
- step={getStep()}
179
- onChange={handleChange}
180
- />
181
- </div>
182
- </Show>
183
- }
176
+ <Invalid
177
+ message={errorMsg()}
178
+ variant={local.inset ? "dot" : "border"}
179
+ touchMode={local.touchMode}
184
180
  >
185
- {/* inset 모드: dual-element overlay 패턴 */}
186
- <div
187
- {...rest}
188
- data-time-field
189
- class={twMerge(getWrapperClass(false), "relative", local.class)}
190
- style={local.style}
181
+ <Show
182
+ when={local.inset}
183
+ fallback={
184
+ // standalone 모드
185
+ <Show
186
+ when={isEditable()}
187
+ fallback={
188
+ <div
189
+ {...rest}
190
+ data-time-field
191
+ class={twMerge(getWrapperClass(true), "sd-time-field")}
192
+ style={local.style}
193
+ title={local.title}
194
+ >
195
+ {displayValue() || "\u00A0"}
196
+ </div>
197
+ }
198
+ >
199
+ <div {...rest} data-time-field class={getWrapperClass(true)} style={local.style}>
200
+ <input
201
+ type="time"
202
+ class={fieldInputClass}
203
+ value={displayValue()}
204
+ title={local.title}
205
+ step={getStep()}
206
+ onChange={handleChange}
207
+ />
208
+ </div>
209
+ </Show>
210
+ }
191
211
  >
192
- <div data-time-field-content style={{ visibility: isEditable() ? "hidden" : undefined }} title={local.title}>
193
- {displayValue() || "\u00A0"}
194
- </div>
195
-
196
- <Show when={isEditable()}>
197
- <input
198
- type="time"
199
- class={clsx(fieldInputClass, "absolute left-0 top-0 size-full", "px-2 py-1")}
200
- value={displayValue()}
212
+ {/* inset 모드: dual-element overlay 패턴 */}
213
+ <div {...rest} data-time-field class={clsx("relative", local.class)} style={local.style}>
214
+ <div
215
+ data-time-field-content
216
+ class={getWrapperClass(false)}
217
+ style={{ visibility: isEditable() ? "hidden" : undefined }}
201
218
  title={local.title}
202
- step={getStep()}
203
- onChange={handleChange}
204
- />
205
- </Show>
206
- </div>
207
- </Show>
219
+ >
220
+ {displayValue() || "\u00A0"}
221
+ </div>
222
+
223
+ <Show when={isEditable()}>
224
+ <div class={twMerge(getWrapperClass(false), "absolute left-0 top-0 size-full")}>
225
+ <input
226
+ type="time"
227
+ class={fieldInputClass}
228
+ value={displayValue()}
229
+ title={local.title}
230
+ step={getStep()}
231
+ onChange={handleChange}
232
+ />
233
+ </div>
234
+ </Show>
235
+ </div>
236
+ </Show>
237
+ </Invalid>
208
238
  );
209
239
  };
@@ -1,4 +1,13 @@
1
- import { children, createSignal, For, type JSX, type ParentComponent, Show, splitProps } from "solid-js";
1
+ import {
2
+ children,
3
+ createMemo,
4
+ createSignal,
5
+ For,
6
+ type JSX,
7
+ type ParentComponent,
8
+ Show,
9
+ splitProps,
10
+ } from "solid-js";
2
11
  import clsx from "clsx";
3
12
  import { twMerge } from "tailwind-merge";
4
13
  import { IconChevronDown } from "@tabler/icons-solidjs";
@@ -11,7 +20,9 @@ import { ripple } from "../../../directives/ripple";
11
20
  import { splitSlots } from "../../../helpers/splitSlots";
12
21
  import { borderDefault, type ComponentSize, textMuted } from "../../../styles/tokens.styles";
13
22
  import { createControllableSignal } from "../../../hooks/createControllableSignal";
23
+ import { createItemTemplate } from "../../../hooks/createItemTemplate";
14
24
  import { chevronWrapperClass, getTriggerClass } from "../DropdownTrigger.styles";
25
+ import { Invalid } from "../Invalid";
15
26
 
16
27
  void ripple;
17
28
 
@@ -32,23 +43,23 @@ const SelectAction: ParentComponent<SelectActionProps> = (props) => {
32
43
  {...rest}
33
44
  type="button"
34
45
  data-select-action
46
+ use:ripple
35
47
  class={twMerge(
36
48
  clsx(
37
49
  "border",
38
50
  borderDefault,
39
51
  "px-1.5",
40
- "rounded-r",
41
52
  "font-bold text-primary-500",
42
53
  "hover:bg-base-100 dark:hover:bg-base-700",
54
+ "group-focus-within:border-y-primary-400",
55
+ "last:group-focus-within:border-r-primary-400",
56
+ "dark:group-focus-within:border-y-primary-400",
57
+ "dark:last:group-focus-within:border-r-primary-400",
58
+ "focus:relative focus:z-10 focus:border-primary-400",
59
+ "dark:focus:border-primary-400",
43
60
  ),
44
61
  local.class,
45
62
  )}
46
- onClick={(e) => {
47
- e.stopPropagation();
48
- if (typeof rest.onClick === "function") {
49
- rest.onClick(e);
50
- }
51
- }}
52
63
  >
53
64
  {local.children}
54
65
  </button>
@@ -60,27 +71,9 @@ const SelectAction: ParentComponent<SelectActionProps> = (props) => {
60
71
  */
61
72
  const SelectHeader: ParentComponent = (props) => <div data-select-header>{props.children}</div>;
62
73
 
63
- /**
64
- * items prop 방식일 때 아이템 렌더링 템플릿
65
- *
66
- * 함수 참조를 저장하기 위해 전역 Map 사용
67
- */
68
- interface SelectItemTemplateProps<TValue> {
69
- children: (item: TValue, index: number, depth: number) => JSX.Element;
70
- }
71
-
72
- // 템플릿 함수를 저장하는 전역 Map (WeakMap 사용하여 메모리 누수 방지)
73
- const templateFnMap = new WeakMap<HTMLElement, (item: unknown, index: number, depth: number) => JSX.Element>();
74
-
75
- const SelectItemTemplate = <T,>(props: SelectItemTemplateProps<T>) => (
76
- <span
77
- ref={(el) => {
78
- templateFnMap.set(el, props.children as (item: unknown, index: number, depth: number) => JSX.Element);
79
- }}
80
- data-select-item-template
81
- style={{ display: "none" }}
82
- />
83
- );
74
+ const { TemplateSlot: SelectItemTemplate, getTemplate: getSelectItemTemplate } = createItemTemplate<
75
+ [item: unknown, index: number, depth: number]
76
+ >("data-select-item-template");
84
77
 
85
78
  // Props 정의
86
79
 
@@ -101,6 +94,12 @@ interface SelectCommonProps {
101
94
  /** 테두리 없는 스타일 */
102
95
  inset?: boolean;
103
96
 
97
+ /** 커스텀 유효성 검사 함수 */
98
+ validate?: (value: unknown) => string | undefined;
99
+
100
+ /** touchMode: 포커스 해제 후에만 에러 표시 */
101
+ touchMode?: boolean;
102
+
104
103
  /** 커스텀 class */
105
104
  class?: string;
106
105
 
@@ -211,6 +210,8 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
211
210
  "items",
212
211
  "getChildren",
213
212
  "renderValue",
213
+ "validate",
214
+ "touchMode",
214
215
  ]);
215
216
 
216
217
  let triggerRef!: HTMLDivElement;
@@ -279,6 +280,14 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
279
280
  }
280
281
  };
281
282
 
283
+ // 유효성 검사 메시지
284
+ const errorMsg = createMemo(() => {
285
+ const v = getValue();
286
+ if (local.required && (v === undefined || v === null || v === ""))
287
+ return "필수 입력 항목입니다";
288
+ return local.validate?.(v);
289
+ });
290
+
282
291
  // 트리거 클래스
283
292
  const getTriggerClassName = () =>
284
293
  getTriggerClass({
@@ -291,14 +300,17 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
291
300
  // 내부 컴포넌트: Provider 안에서 children을 resolve
292
301
  const SelectInner: ParentComponent = (innerProps) => {
293
302
  const resolved = children(() => innerProps.children);
294
- const [slots, items] = splitSlots(resolved, ["selectHeader", "selectAction", "selectItemTemplate"] as const);
303
+ const [slots, items] = splitSlots(resolved, [
304
+ "selectHeader",
305
+ "selectAction",
306
+ "selectItemTemplate",
307
+ ] as const);
295
308
 
296
309
  // itemTemplate 함수 추출
297
- const getItemTemplate = (): ((item: T, index: number, depth: number) => JSX.Element) | undefined => {
298
- const templateSlots = slots().selectItemTemplate;
299
- if (templateSlots.length === 0) return undefined;
300
- // WeakMap에서 함수 참조 가져오기
301
- return templateFnMap.get(templateSlots[0]) as
310
+ const getItemTemplate = ():
311
+ | ((item: T, index: number, depth: number) => JSX.Element)
312
+ | undefined => {
313
+ return getSelectItemTemplate(slots().selectItemTemplate) as
302
314
  | ((item: T, index: number, depth: number) => JSX.Element)
303
315
  | undefined;
304
316
  };
@@ -314,7 +326,9 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
314
326
  <Show when={local.getChildren?.(item, index(), depth)} keyed>
315
327
  {(itemChildren) => (
316
328
  <Show when={itemChildren.length > 0}>
317
- <SelectItem.Children>{renderItems(itemChildren, depth + 1)}</SelectItem.Children>
329
+ <SelectItem.Children>
330
+ {renderItems(itemChildren, depth + 1)}
331
+ </SelectItem.Children>
318
332
  </Show>
319
333
  )}
320
334
  </Show>
@@ -357,7 +371,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
357
371
  };
358
372
 
359
373
  return (
360
- <div {...rest} data-select class={local.inset ? "flex" : "inline-flex"}>
374
+ <div {...rest} data-select class={clsx("group", local.inset ? "flex" : "inline-flex")}>
361
375
  <div
362
376
  ref={triggerRef}
363
377
  use:ripple={!local.disabled}
@@ -367,7 +381,14 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
367
381
  aria-disabled={local.disabled || undefined}
368
382
  aria-required={local.required || undefined}
369
383
  tabIndex={local.disabled ? -1 : 0}
370
- class={twMerge(getTriggerClassName(), slots().selectAction.length > 0 && "rounded-r-none border-r-0")}
384
+ class={twMerge(
385
+ getTriggerClassName(),
386
+ slots().selectAction.length > 0 &&
387
+ clsx(
388
+ "rounded-r-none border-r-0",
389
+ "group-focus-within:border-primary-400 dark:group-focus-within:border-primary-400",
390
+ ),
391
+ )}
371
392
  style={local.style}
372
393
  onClick={handleTriggerClick}
373
394
  onKeyDown={handleTriggerKeyDown}
@@ -377,7 +398,17 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
377
398
  <Icon icon={IconChevronDown} size="1em" />
378
399
  </div>
379
400
  </div>
380
- <Show when={slots().selectAction.length > 0}>{slots().selectAction}</Show>
401
+ <Show when={slots().selectAction.length > 0}>
402
+ <div
403
+ class={clsx(
404
+ "contents",
405
+ "[&>[data-select-action]:last-child]:rounded-r",
406
+ "[&>[data-select-action]+[data-select-action]]:-ml-px",
407
+ )}
408
+ >
409
+ {slots().selectAction}
410
+ </div>
411
+ </Show>
381
412
 
382
413
  <Dropdown triggerRef={() => triggerRef} open={open()} onOpenChange={setOpen} keyboardNav>
383
414
  <Show when={slots().selectHeader.length > 0}>{slots().selectHeader.single()}</Show>
@@ -392,9 +423,11 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
392
423
  };
393
424
 
394
425
  return (
395
- <SelectContext.Provider value={contextValue as SelectContextValue}>
396
- <SelectInner>{local.children}</SelectInner>
397
- </SelectContext.Provider>
426
+ <Invalid message={errorMsg()} variant="border" touchMode={local.touchMode}>
427
+ <SelectContext.Provider value={contextValue as SelectContextValue}>
428
+ <SelectInner>{local.children}</SelectInner>
429
+ </SelectContext.Provider>
430
+ </Invalid>
398
431
  );
399
432
  };
400
433
 
@@ -61,7 +61,9 @@ interface SelectItemComponent<TValue = unknown> extends ParentComponent<SelectIt
61
61
  * </Select.Item>
62
62
  * ```
63
63
  */
64
- export const SelectItem: SelectItemComponent = <T,>(props: SelectItemProps<T> & { children?: JSX.Element }) => {
64
+ export const SelectItem: SelectItemComponent = <T,>(
65
+ props: SelectItemProps<T> & { children?: JSX.Element },
66
+ ) => {
65
67
  const [local, rest] = splitProps(props, ["children", "class", "value", "disabled"]);
66
68
 
67
69
  const context = useSelectContext<T>();
@@ -9,6 +9,7 @@ import { useNotification } from "../../feedback/notification/NotificationContext
9
9
  import { Icon } from "../../display/Icon";
10
10
  import { textPlaceholder } from "../../../styles/tokens.styles";
11
11
  import type { ComponentSize } from "../../../styles/tokens.styles";
12
+ import { iconButtonBase } from "../../../styles/patterns.styles";
12
13
 
13
14
  // ── Types ──
14
15
 
@@ -50,14 +51,7 @@ const chipSizeClasses: Record<StatePresetSize, string> = {
50
51
 
51
52
  const chipNameBtnClass = clsx("cursor-pointer", "hover:underline", "focus:outline-none");
52
53
 
53
- const iconBtnClass = clsx(
54
- "inline-flex items-center justify-center",
55
- "rounded-full",
56
- "cursor-pointer",
57
- "transition-colors",
58
- "focus:outline-none",
59
- "hover:bg-base-300 dark:hover:bg-base-600",
60
- );
54
+ const iconBtnClass = twMerge(iconButtonBase, "rounded-full");
61
55
 
62
56
  const iconBtnDefaultClass = "p-0.5";
63
57
 
@@ -108,13 +102,23 @@ const iconSize = "0.85em";
108
102
  // ── Component ──
109
103
 
110
104
  function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element {
111
- const [local] = splitProps(props, ["presetKey", "value", "onValueChange", "size", "class", "style"]);
105
+ const [local] = splitProps(props, [
106
+ "presetKey",
107
+ "value",
108
+ "onValueChange",
109
+ "size",
110
+ "class",
111
+ "style",
112
+ ]);
112
113
 
113
114
  const notification = useNotification();
114
115
 
115
116
  // presetKey는 마운트 시 한 번만 설정되는 식별자이므로 즉시 평가하여 캡처
116
117
  /* eslint-disable solid/reactivity */
117
- const [presets, setPresets] = useSyncConfig<StatePresetItem<TValue>[]>(`state-preset.${local.presetKey}`, []);
118
+ const [presets, setPresets] = useSyncConfig<StatePresetItem<TValue>[]>(
119
+ `state-preset.${local.presetKey}`,
120
+ [],
121
+ );
118
122
  /* eslint-enable solid/reactivity */
119
123
  const [adding, setAdding] = createSignal(false);
120
124
  const [inputValue, setInputValue] = createSignal("");
@@ -163,18 +167,24 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
163
167
  const snapshot = [...presets()];
164
168
  const presetName = snapshot[index].name;
165
169
 
166
- const updated = snapshot.map((p, i) => (i === index ? { ...p, state: objClone(local.value) } : p));
170
+ const updated = snapshot.map((p, i) =>
171
+ i === index ? { ...p, state: objClone(local.value) } : p,
172
+ );
167
173
  setPresets(updated);
168
174
 
169
- const notiId = notification.info("프리셋 덮어쓰기", `"${presetName}" 프리셋이 현재 상태로 업데이트되었습니다.`, {
170
- action: {
171
- label: "실행 취소",
172
- onClick: () => {
173
- setPresets(snapshot);
174
- notification.remove(notiId);
175
+ const notiId = notification.info(
176
+ "프리셋 덮어쓰기",
177
+ `"${presetName}" 프리셋이 현재 상태로 업데이트되었습니다.`,
178
+ {
179
+ action: {
180
+ label: "실행 취소",
181
+ onClick: () => {
182
+ setPresets(snapshot);
183
+ notification.remove(notiId);
184
+ },
175
185
  },
176
186
  },
177
- });
187
+ );
178
188
  }
179
189
 
180
190
  function handleDelete(index: number): void {
@@ -209,7 +219,8 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
209
219
 
210
220
  const containerClass = () => twMerge(baseClass, local.class);
211
221
 
212
- const resolvedChipClass = () => twMerge(chipClass, local.size ? chipSizeClasses[local.size] : chipDefaultClass);
222
+ const resolvedChipClass = () =>
223
+ twMerge(chipClass, local.size ? chipSizeClasses[local.size] : chipDefaultClass);
213
224
 
214
225
  const resolvedIconBtnClass = () =>
215
226
  twMerge(iconBtnClass, local.size ? iconBtnSizeClasses[local.size] : iconBtnDefaultClass);
@@ -217,12 +228,18 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
217
228
  const resolvedStarBtnClass = () =>
218
229
  twMerge(starBtnClass, local.size ? starBtnSizeClasses[local.size] : starBtnDefaultClass);
219
230
 
220
- const resolvedInputClass = () => twMerge(inputClass, local.size ? inputSizeClasses[local.size] : inputDefaultClass);
231
+ const resolvedInputClass = () =>
232
+ twMerge(inputClass, local.size ? inputSizeClasses[local.size] : inputDefaultClass);
221
233
 
222
234
  return (
223
235
  <div class={containerClass()} style={local.style}>
224
236
  {/* Star button - add preset */}
225
- <button type="button" class={resolvedStarBtnClass()} onClick={handleStartAdd} title="프리셋 추가">
237
+ <button
238
+ type="button"
239
+ class={resolvedStarBtnClass()}
240
+ onClick={handleStartAdd}
241
+ title="프리셋 추가"
242
+ >
226
243
  <Icon icon={IconStar} size={iconSize} />
227
244
  </button>
228
245
 
@@ -278,4 +295,6 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
278
295
  );
279
296
  }
280
297
 
281
- export const StatePreset = StatePresetInner as <TValue>(props: StatePresetProps<TValue>) => JSX.Element;
298
+ export const StatePreset = StatePresetInner as <TValue>(
299
+ props: StatePresetProps<TValue>,
300
+ ) => JSX.Element;
@@ -1,4 +1,11 @@
1
- import { type JSX, type ParentComponent, Show, splitProps, createContext, useContext } from "solid-js";
1
+ import {
2
+ type JSX,
3
+ type ParentComponent,
4
+ Show,
5
+ splitProps,
6
+ createContext,
7
+ useContext,
8
+ } from "solid-js";
2
9
  import clsx from "clsx";
3
10
  import { twMerge } from "tailwind-merge";
4
11
 
@@ -26,7 +33,9 @@ const FormGroupItem: ParentComponent<FormGroupItemProps> = (props) => {
26
33
  return (
27
34
  <div class={getClassName()} data-form-group-item {...rest}>
28
35
  <Show when={local.label}>
29
- <label class={ctx.inline ? clsx("whitespace-nowrap font-bold", "pr-2") : "mb-1 block font-bold"}>
36
+ <label
37
+ class={ctx.inline ? clsx("whitespace-nowrap font-bold", "pr-2") : "mb-1 block font-bold"}
38
+ >
30
39
  {local.label}
31
40
  </label>
32
41
  </Show>
@@ -22,7 +22,7 @@ const baseClass = clsx(
22
22
  "flex",
23
23
  "flex-col",
24
24
  "bg-base-100",
25
- "dark:bg-base-900",
25
+ "dark:bg-base-800",
26
26
  "border-r",
27
27
  "border-base-200",
28
28
  "dark:border-base-700",
@@ -82,7 +82,8 @@ const SidebarBase: ParentComponent<SidebarProps> = (props) => {
82
82
  return isOpen() ? "translateX(0)" : "translateX(-100%)";
83
83
  };
84
84
 
85
- const getClassName = () => twMerge(baseClass, !isDesktop() && isOpen() && mobileOpenClass, local.class);
85
+ const getClassName = () =>
86
+ twMerge(baseClass, !isDesktop() && isOpen() && mobileOpenClass, local.class);
86
87
 
87
88
  return (
88
89
  <aside
@@ -1,4 +1,11 @@
1
- import { type JSX, type ParentComponent, Show, splitProps, createMemo, createSignal } from "solid-js";
1
+ import {
2
+ type JSX,
3
+ type ParentComponent,
4
+ Show,
5
+ splitProps,
6
+ createMemo,
7
+ createSignal,
8
+ } from "solid-js";
2
9
  import { useBeforeLeave } from "@solidjs/router";
3
10
  import { createMediaQuery } from "@solid-primitives/media";
4
11
  import clsx from "clsx";
@@ -24,7 +24,7 @@ const headerClass = clsx(
24
24
  "px-4",
25
25
  "py-2",
26
26
  "text-xs",
27
- "font-semibold",
27
+ "font-bold",
28
28
  "text-base-500",
29
29
  "dark:text-base-400",
30
30
  "uppercase",
@@ -166,7 +166,13 @@ const MenuItem: Component<MenuItemProps> = (props) => {
166
166
  };
167
167
 
168
168
  return (
169
- <ListItem selected={isSelected()} open={open()} onOpenChange={setOpen} onClick={handleClick} size={props.size}>
169
+ <ListItem
170
+ selected={isSelected()}
171
+ open={open()}
172
+ onOpenChange={setOpen}
173
+ onClick={handleClick}
174
+ size={props.size}
175
+ >
170
176
  <Show when={props.menu.icon}>
171
177
  <Icon icon={props.menu.icon!} />
172
178
  </Show>