@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,4 +1,13 @@
1
- import { children, createMemo, createSignal, For, type JSX, Show, splitProps, useContext } from "solid-js";
1
+ import {
2
+ children,
3
+ createMemo,
4
+ createSignal,
5
+ For,
6
+ type JSX,
7
+ Show,
8
+ splitProps,
9
+ useContext,
10
+ } from "solid-js";
2
11
  import { createResizeObserver } from "@solid-primitives/resize-observer";
3
12
  import clsx from "clsx";
4
13
  import { twMerge } from "tailwind-merge";
@@ -24,6 +33,7 @@ import type {
24
33
  import { isDataSheetColumnDef, DataSheetColumn } from "./DataSheetColumn";
25
34
  import { applySorting, buildHeaderTable, collectAllExpandable, flattenTree } from "./sheetUtils";
26
35
  import { createControllableSignal } from "../../../hooks/createControllableSignal";
36
+ import { createPointerDrag } from "../../../hooks/createPointerDrag";
27
37
  import { Icon } from "../../display/Icon";
28
38
  import { Checkbox } from "../../form-control/checkbox/Checkbox";
29
39
  import { Pagination } from "../Pagination";
@@ -80,8 +90,8 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
80
90
  "sorts",
81
91
  "onSortsChange",
82
92
  "autoSort",
83
- "pageIndex",
84
- "onPageIndexChange",
93
+ "page",
94
+ "onPageChange",
85
95
  "totalPageCount",
86
96
  "itemsPerPage",
87
97
  "displayPageCount",
@@ -157,7 +167,9 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
157
167
 
158
168
  const { DataSheetConfigDialog } = await import("./DataSheetConfigDialog");
159
169
 
160
- const allCols = resolved.toArray().filter(isDataSheetColumnDef) as unknown as DataSheetColumnDef<T>[];
170
+ const allCols = resolved
171
+ .toArray()
172
+ .filter(isDataSheetColumnDef) as unknown as DataSheetColumnDef<T>[];
161
173
 
162
174
  const columnInfos: DataSheetConfigColumnInfo[] = allCols
163
175
  .filter((col) => !col.collapse)
@@ -234,8 +246,8 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
234
246
 
235
247
  // #region Paging
236
248
  const [currentPage, setCurrentPage] = createControllableSignal({
237
- value: () => local.pageIndex ?? 0,
238
- onChange: () => local.onPageIndexChange,
249
+ value: () => local.page ?? 1,
250
+ onChange: () => local.onPageChange,
239
251
  });
240
252
 
241
253
  const effectivePageCount = createMemo(() => {
@@ -252,7 +264,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
252
264
  if ((local.items ?? []).length <= 0) return sortedItems();
253
265
 
254
266
  const page = currentPage();
255
- return sortedItems().slice(page * ipp, (page + 1) * ipp);
267
+ return sortedItems().slice((page - 1) * ipp, page * ipp);
256
268
  });
257
269
 
258
270
  // #region Feature Column Setup (확장/선택 기능 컬럼 공통)
@@ -356,10 +368,11 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
356
368
  function onResizerPointerdown(event: PointerEvent, colKey: string): void {
357
369
  event.preventDefault();
358
370
  const target = event.target as HTMLElement;
359
- target.setPointerCapture(event.pointerId);
360
371
 
361
372
  const th = target.closest("th")!;
362
- const container = th.closest("[data-sheet]")!.querySelector("[data-sheet-scroll]") as HTMLElement;
373
+ const container = th
374
+ .closest("[data-sheet]")!
375
+ .querySelector("[data-sheet-scroll]") as HTMLElement;
363
376
  const startX = event.clientX;
364
377
  const startWidth = th.offsetWidth;
365
378
 
@@ -372,32 +385,28 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
372
385
  height: `${container.scrollHeight}px`,
373
386
  });
374
387
 
375
- const onPointerMove = (e: PointerEvent) => {
376
- const delta = e.clientX - startX;
377
- const newWidth = Math.max(30, startWidth + delta);
378
- const currentRect = container.getBoundingClientRect();
379
- setResizeIndicatorStyle({
380
- display: "block",
381
- left: `${th.getBoundingClientRect().left - currentRect.left + container.scrollLeft + newWidth}px`,
382
- top: "0",
383
- height: `${container.scrollHeight}px`,
384
- });
385
- };
386
-
387
- const onPointerUp = (e: PointerEvent) => {
388
- const delta = e.clientX - startX;
389
- // 실제 드래그가 발생한 경우에만 너비 저장 (더블클릭 시 DOM 재생성으로 dblclick 유실 방지)
390
- if (delta !== 0) {
388
+ createPointerDrag(target, event.pointerId, {
389
+ onMove(e) {
390
+ const delta = e.clientX - startX;
391
391
  const newWidth = Math.max(30, startWidth + delta);
392
- saveColumnWidth(colKey, `${newWidth}px`);
393
- }
394
- setResizeIndicatorStyle({ display: "none" });
395
- target.removeEventListener("pointermove", onPointerMove);
396
- target.removeEventListener("pointerup", onPointerUp);
397
- };
398
-
399
- target.addEventListener("pointermove", onPointerMove);
400
- target.addEventListener("pointerup", onPointerUp);
392
+ const currentRect = container.getBoundingClientRect();
393
+ setResizeIndicatorStyle({
394
+ display: "block",
395
+ left: `${th.getBoundingClientRect().left - currentRect.left + container.scrollLeft + newWidth}px`,
396
+ top: "0",
397
+ height: `${container.scrollHeight}px`,
398
+ });
399
+ },
400
+ onEnd(e) {
401
+ const delta = e.clientX - startX;
402
+ // 실제 드래그가 발생한 경우에만 너비 저장 (더블클릭 시 DOM 재생성으로 dblclick 유실 방지)
403
+ if (delta !== 0) {
404
+ const newWidth = Math.max(30, startWidth + delta);
405
+ saveColumnWidth(colKey, `${newWidth}px`);
406
+ }
407
+ setResizeIndicatorStyle({ display: "none" });
408
+ },
409
+ });
401
410
  }
402
411
 
403
412
  function onResizerDoubleClick(colKey: string): void {
@@ -484,7 +493,9 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
484
493
  if (local.selectMode === "single") {
485
494
  setSelectedItems(isSelected ? [] : [item]);
486
495
  } else {
487
- setSelectedItems(isSelected ? selectedItems().filter((i) => i !== item) : [...selectedItems(), item]);
496
+ setSelectedItems(
497
+ isSelected ? selectedItems().filter((i) => i !== item) : [...selectedItems(), item],
498
+ );
488
499
  }
489
500
  }
490
501
 
@@ -552,7 +563,6 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
552
563
  function onReorderPointerDown(e: PointerEvent, item: T): void {
553
564
  e.preventDefault();
554
565
  const target = e.currentTarget as HTMLElement;
555
- target.setPointerCapture(e.pointerId);
556
566
 
557
567
  const tableEl = target.closest("table")!;
558
568
  const tbody = tableEl.querySelector("tbody")!;
@@ -560,110 +570,110 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
560
570
 
561
571
  setDragState({ draggingItem: item, targetItem: null, position: null });
562
572
 
563
- const onPointerMove = (ev: PointerEvent) => {
564
- let foundTarget: T | null = null;
565
- let foundPosition: "before" | "after" | "inside" | null = null;
566
-
567
- for (let i = 0; i < rows.length; i++) {
568
- const row = rows[i];
569
- const rect = row.getBoundingClientRect();
570
- if (ev.clientY < rect.top || ev.clientY > rect.bottom) continue;
573
+ createPointerDrag(target, e.pointerId, {
574
+ onMove(ev) {
575
+ let foundTarget: T | null = null;
576
+ let foundPosition: "before" | "after" | "inside" | null = null;
571
577
 
572
- if (i >= displayItems().length) break;
573
- const flat = displayItems()[i];
574
- if (flat.item === item) break;
578
+ for (let i = 0; i < rows.length; i++) {
579
+ const row = rows[i];
580
+ const rect = row.getBoundingClientRect();
581
+ if (ev.clientY < rect.top || ev.clientY > rect.bottom) continue;
575
582
 
576
- // 자기 자신의 하위 항목으로는 드롭 불가
577
- if (isDescendant(item, flat.item)) break;
578
-
579
- const relY = ev.clientY - rect.top;
580
- const third = rect.height / 3;
581
-
582
- if (relY < third) {
583
- foundPosition = "before";
584
- } else if (relY > third * 2) {
585
- foundPosition = "after";
586
- } else {
587
- foundPosition = local.getChildren ? "inside" : relY < rect.height / 2 ? "before" : "after";
583
+ if (i >= displayItems().length) break;
584
+ const flat = displayItems()[i];
585
+ if (flat.item === item) break;
586
+
587
+ // 자기 자신의 하위 항목으로는 드롭 불가
588
+ if (isDescendant(item, flat.item)) break;
589
+
590
+ const relY = ev.clientY - rect.top;
591
+ const third = rect.height / 3;
592
+
593
+ if (relY < third) {
594
+ foundPosition = "before";
595
+ } else if (relY > third * 2) {
596
+ foundPosition = "after";
597
+ } else {
598
+ foundPosition = local.getChildren
599
+ ? "inside"
600
+ : relY < rect.height / 2
601
+ ? "before"
602
+ : "after";
603
+ }
604
+ foundTarget = flat.item;
605
+ break;
588
606
  }
589
- foundTarget = flat.item;
590
- break;
591
- }
592
607
 
593
- setDragState({ draggingItem: item, targetItem: foundTarget, position: foundPosition });
608
+ setDragState({ draggingItem: item, targetItem: foundTarget, position: foundPosition });
594
609
 
595
- // 인디케이터 DOM 업데이트
596
- for (let i = 0; i < rows.length; i++) {
597
- rows[i].removeAttribute("data-dragging");
598
- rows[i].removeAttribute("data-drag-over");
610
+ // 인디케이터 DOM 업데이트
611
+ for (let i = 0; i < rows.length; i++) {
612
+ rows[i].removeAttribute("data-dragging");
613
+ rows[i].removeAttribute("data-drag-over");
599
614
 
600
- if (i < displayItems().length) {
601
- const flat = displayItems()[i];
602
- if (flat.item === item) {
603
- rows[i].setAttribute("data-dragging", "");
604
- }
605
- if (flat.item === foundTarget && foundPosition === "inside") {
606
- rows[i].setAttribute("data-drag-over", "inside");
615
+ if (i < displayItems().length) {
616
+ const flat = displayItems()[i];
617
+ if (flat.item === item) {
618
+ rows[i].setAttribute("data-dragging", "");
619
+ }
620
+ if (flat.item === foundTarget && foundPosition === "inside") {
621
+ rows[i].setAttribute("data-drag-over", "inside");
622
+ }
607
623
  }
608
624
  }
609
- }
610
625
 
611
- // before/after 인디케이터
612
- const indicatorEl = tableEl
613
- .closest("[data-sheet-scroll]")
614
- ?.querySelector("[data-reorder-indicator]") as HTMLElement | null;
615
- if (indicatorEl) {
616
- if (foundTarget != null && foundPosition != null && foundPosition !== "inside") {
617
- const targetIdx = displayItems().findIndex((f) => f.item === foundTarget);
618
- if (targetIdx >= 0) {
619
- const targetRow = rows[targetIdx];
620
- const containerRect = tableEl.closest("[data-sheet-scroll]")!.getBoundingClientRect();
621
- const rowRect = targetRow.getBoundingClientRect();
622
- const scrollEl = tableEl.closest("[data-sheet-scroll]") as HTMLElement;
623
-
624
- const top =
625
- foundPosition === "before"
626
- ? rowRect.top - containerRect.top + scrollEl.scrollTop
627
- : rowRect.bottom - containerRect.top + scrollEl.scrollTop;
628
-
629
- indicatorEl.style.display = "block";
630
- indicatorEl.style.top = `${top}px`;
626
+ // before/after 인디케이터
627
+ const indicatorEl = tableEl
628
+ .closest("[data-sheet-scroll]")
629
+ ?.querySelector("[data-reorder-indicator]") as HTMLElement | null;
630
+ if (indicatorEl) {
631
+ if (foundTarget != null && foundPosition != null && foundPosition !== "inside") {
632
+ const targetIdx = displayItems().findIndex((f) => f.item === foundTarget);
633
+ if (targetIdx >= 0) {
634
+ const targetRow = rows[targetIdx];
635
+ const containerRect = tableEl.closest("[data-sheet-scroll]")!.getBoundingClientRect();
636
+ const rowRect = targetRow.getBoundingClientRect();
637
+ const scrollEl = tableEl.closest("[data-sheet-scroll]") as HTMLElement;
638
+
639
+ const top =
640
+ foundPosition === "before"
641
+ ? rowRect.top - containerRect.top + scrollEl.scrollTop
642
+ : rowRect.bottom - containerRect.top + scrollEl.scrollTop;
643
+
644
+ indicatorEl.style.display = "block";
645
+ indicatorEl.style.top = `${top}px`;
646
+ }
647
+ } else {
648
+ indicatorEl.style.display = "none";
631
649
  }
632
- } else {
633
- indicatorEl.style.display = "none";
634
650
  }
635
- }
636
- };
637
-
638
- const onPointerUp = () => {
639
- const state = dragState();
640
- if (state?.targetItem != null && state.position != null) {
641
- local.onItemsReorder?.({
642
- item: state.draggingItem,
643
- targetItem: state.targetItem,
644
- position: state.position,
645
- } as DataSheetReorderEvent<T>);
646
- }
647
-
648
- // 클린업
649
- for (const row of rows) {
650
- row.removeAttribute("data-dragging");
651
- row.removeAttribute("data-drag-over");
652
- }
653
- const indicatorEl = tableEl
654
- .closest("[data-sheet-scroll]")
655
- ?.querySelector("[data-reorder-indicator]") as HTMLElement | null;
656
- if (indicatorEl) {
657
- indicatorEl.style.display = "none";
658
- }
651
+ },
652
+ onEnd() {
653
+ const state = dragState();
654
+ if (state?.targetItem != null && state.position != null) {
655
+ local.onItemsReorder?.({
656
+ item: state.draggingItem,
657
+ targetItem: state.targetItem,
658
+ position: state.position,
659
+ } as DataSheetReorderEvent<T>);
660
+ }
659
661
 
660
- setDragState(null);
661
- target.removeEventListener("pointermove", onPointerMove);
662
- target.removeEventListener("pointerup", onPointerUp);
663
- };
662
+ // 클린업
663
+ for (const row of rows) {
664
+ row.removeAttribute("data-dragging");
665
+ row.removeAttribute("data-drag-over");
666
+ }
667
+ const indicatorEl = tableEl
668
+ .closest("[data-sheet-scroll]")
669
+ ?.querySelector("[data-reorder-indicator]") as HTMLElement | null;
670
+ if (indicatorEl) {
671
+ indicatorEl.style.display = "none";
672
+ }
664
673
 
665
- target.addEventListener("pointermove", onPointerMove);
666
- target.addEventListener("pointerup", onPointerUp);
674
+ setDragState(null);
675
+ },
676
+ });
667
677
  }
668
678
 
669
679
  // #region Keyboard Navigation (Enter/Shift+Enter로 행 이동)
@@ -707,7 +717,8 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
707
717
  hasExpandFeature() && !hasSelectFeature() && !hasReorderFeature() && lastFixedIndex() < 0;
708
718
 
709
719
  // 선택 기능 컬럼이 "마지막 고정"인지 (일반 고정 컬럼이 없고, 선택 컬럼이 가장 오른쪽 기능 컬럼일 때)
710
- const isSelectColLastFixed = () => hasSelectFeature() && !hasReorderFeature() && lastFixedIndex() < 0;
720
+ const isSelectColLastFixed = () =>
721
+ hasSelectFeature() && !hasReorderFeature() && lastFixedIndex() < 0;
711
722
 
712
723
  const isReorderColLastFixed = () => hasReorderFeature() && lastFixedIndex() < 0;
713
724
 
@@ -722,20 +733,26 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
722
733
  const isAllExpanded = createMemo(() => {
723
734
  if (!local.getChildren) return false;
724
735
  const allExpandable = collectAllExpandable(pagedItems(), local.getChildren);
725
- return allExpandable.length > 0 && allExpandable.every((item) => expandedItems().includes(item));
736
+ return (
737
+ allExpandable.length > 0 && allExpandable.every((item) => expandedItems().includes(item))
738
+ );
726
739
  });
727
740
 
728
741
  return (
729
742
  <div
730
743
  data-sheet={local.persistKey ?? ""}
731
- class={twMerge("flex flex-col", local.inset ? insetContainerClass : defaultContainerClass, local.class)}
744
+ class={twMerge(
745
+ "flex flex-col",
746
+ local.inset ? insetContainerClass : defaultContainerClass,
747
+ local.class,
748
+ )}
732
749
  >
733
750
  <Show when={!local.hideConfigBar && (modal != null || effectivePageCount() > 1)}>
734
751
  <div class={toolbarClass}>
735
752
  <Show when={effectivePageCount() > 1}>
736
753
  <Pagination
737
- pageIndex={currentPage()}
738
- onPageIndexChange={setCurrentPage}
754
+ page={currentPage()}
755
+ onPageChange={setCurrentPage}
739
756
  totalPageCount={effectivePageCount()}
740
757
  displayPageCount={local.displayPageCount}
741
758
  size="sm"
@@ -743,13 +760,22 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
743
760
  </Show>
744
761
  <div class="flex-1" />
745
762
  <Show when={modal != null}>
746
- <button class={configButtonClass} onClick={openConfigModal} title="시트 설정" type="button">
763
+ <button
764
+ class={configButtonClass}
765
+ onClick={openConfigModal}
766
+ title="시트 설정"
767
+ type="button"
768
+ >
747
769
  <Icon icon={IconSettings} size="1em" />
748
770
  </button>
749
771
  </Show>
750
772
  </div>
751
773
  </Show>
752
- <div data-sheet-scroll class={twMerge(dataSheetContainerClass, "flex-1 min-h-0")} style={local.contentStyle}>
774
+ <div
775
+ data-sheet-scroll
776
+ class={twMerge(dataSheetContainerClass, "flex-1 min-h-0")}
777
+ style={local.contentStyle}
778
+ >
753
779
  <table
754
780
  class={twMerge(tableClass, local.inset ? insetTableClass : undefined)}
755
781
  onKeyDown={onTableKeyDown}
@@ -800,7 +826,10 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
800
826
  <Icon
801
827
  icon={IconChevronDown}
802
828
  size="1em"
803
- class={clsx("transition-transform", isAllExpanded() ? "rotate-0" : "-rotate-90")}
829
+ class={clsx(
830
+ "transition-transform",
831
+ isAllExpanded() ? "rotate-0" : "-rotate-90",
832
+ )}
804
833
  />
805
834
  </button>
806
835
  </div>
@@ -863,9 +892,13 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
863
892
  <Show when={cell}>
864
893
  {(c) => {
865
894
  const isSortable = () =>
866
- c().isLastRow && c().colIndex != null && effectiveColumns()[c().colIndex!].sortable;
895
+ c().isLastRow &&
896
+ c().colIndex != null &&
897
+ effectiveColumns()[c().colIndex!].sortable;
867
898
  const colKey = () =>
868
- c().colIndex != null ? effectiveColumns()[c().colIndex!].key : undefined;
899
+ c().colIndex != null
900
+ ? effectiveColumns()[c().colIndex!].key
901
+ : undefined;
869
902
 
870
903
  // 그룹 헤더의 고정 여부: colspan 범위 내 모든 컬럼이 fixed인지
871
904
  const isGroupFixed = (): boolean => {
@@ -881,12 +914,15 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
881
914
 
882
915
  // 셀의 고정 컬럼 여부 (마지막 행이면 colIndex 기반, 그 외 그룹 기반)
883
916
  const isCellFixed = () =>
884
- (c().isLastRow && c().colIndex != null && effectiveColumns()[c().colIndex!].fixed) ||
917
+ (c().isLastRow &&
918
+ c().colIndex != null &&
919
+ effectiveColumns()[c().colIndex!].fixed) ||
885
920
  isGroupFixed();
886
921
 
887
922
  // 셀의 마지막 고정 여부
888
923
  const isCellLastFixed = () => {
889
- if (c().isLastRow && c().colIndex != null) return isLastFixed(c().colIndex!);
924
+ if (c().isLastRow && c().colIndex != null)
925
+ return isLastFixed(c().colIndex!);
890
926
  if (isGroupFixed()) {
891
927
  const lastCol = cellColIndex() + c().colspan - 1;
892
928
  return isLastFixed(lastCol);
@@ -932,7 +968,11 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
932
968
  : c().text
933
969
  }
934
970
  ref={(el: HTMLElement) => {
935
- if (c().isLastRow && c().colIndex != null && effectiveColumns()[c().colIndex!].fixed) {
971
+ if (
972
+ c().isLastRow &&
973
+ c().colIndex != null &&
974
+ effectiveColumns()[c().colIndex!].fixed
975
+ ) {
936
976
  registerColumnRef(c().colIndex!, el);
937
977
  }
938
978
  }}
@@ -958,9 +998,15 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
958
998
  <Icon icon={IconSortDescending} size="1em" />
959
999
  </Show>
960
1000
  <Show when={sortDef() == null}>
961
- <Icon icon={IconArrowsSort} size="1em" class="opacity-30" />
1001
+ <Icon
1002
+ icon={IconArrowsSort}
1003
+ size="1em"
1004
+ class="opacity-30"
1005
+ />
1006
+ </Show>
1007
+ <Show when={sortIndex()}>
1008
+ {(idx) => <sub>{idx()}</sub>}
962
1009
  </Show>
963
- <Show when={sortIndex()}>{(idx) => <sub>{idx()}</sub>}</Show>
964
1010
  </div>
965
1011
  );
966
1012
  }}
@@ -968,13 +1014,17 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
968
1014
  </div>
969
1015
  <Show
970
1016
  when={
971
- c().isLastRow && c().colIndex != null && effectiveColumns()[c().colIndex!].resizable
1017
+ c().isLastRow &&
1018
+ c().colIndex != null &&
1019
+ effectiveColumns()[c().colIndex!].resizable
972
1020
  }
973
1021
  >
974
1022
  <div
975
1023
  class={resizerClass}
976
1024
  onClick={(e) => e.stopPropagation()}
977
- onPointerDown={(e) => onResizerPointerdown(e, effectiveColumns()[c().colIndex!].key)}
1025
+ onPointerDown={(e) =>
1026
+ onResizerPointerdown(e, effectiveColumns()[c().colIndex!].key)
1027
+ }
978
1028
  onDblClick={(e) => {
979
1029
  e.stopPropagation();
980
1030
  onResizerDoubleClick(effectiveColumns()[c().colIndex!].key);
@@ -1054,7 +1104,11 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
1054
1104
  )}
1055
1105
  </For>
1056
1106
  <Show when={flat.hasChildren}>
1057
- <button type="button" class={expandToggleClass} onClick={() => toggleExpand(flat.item)}>
1107
+ <button
1108
+ type="button"
1109
+ class={expandToggleClass}
1110
+ onClick={() => toggleExpand(flat.item)}
1111
+ >
1058
1112
  <Icon
1059
1113
  icon={IconChevronDown}
1060
1114
  size="1em"
@@ -1092,11 +1146,16 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
1092
1146
  fallback={
1093
1147
  /* single 모드 */
1094
1148
  <Show when={selectable() === true}>
1095
- <div class={featureCellBodyClickableClass} onClick={() => toggleSelect(flat.item)}>
1149
+ <div
1150
+ class={featureCellBodyClickableClass}
1151
+ onClick={() => toggleSelect(flat.item)}
1152
+ >
1096
1153
  <div
1097
1154
  class={twMerge(
1098
1155
  selectSingleClass,
1099
- isSelected() ? selectSingleSelectedClass : selectSingleUnselectedClass,
1156
+ isSelected()
1157
+ ? selectSingleSelectedClass
1158
+ : selectSingleUnselectedClass,
1100
1159
  )}
1101
1160
  >
1102
1161
  <Icon icon={IconChevronRight} size="1em" />
@@ -1116,7 +1175,11 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
1116
1175
  }
1117
1176
  setLastClickedRow(rowIndex());
1118
1177
  }}
1119
- title={typeof selectable() === "string" ? (selectable() as string) : undefined}
1178
+ title={
1179
+ typeof selectable() === "string"
1180
+ ? (selectable() as string)
1181
+ : undefined
1182
+ }
1120
1183
  >
1121
1184
  <Checkbox
1122
1185
  value={isSelected()}
@@ -1148,7 +1211,10 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
1148
1211
  left: reorderColLeft(),
1149
1212
  }}
1150
1213
  >
1151
- <div class={reorderCellWrapperClass} onPointerDown={(e) => onReorderPointerDown(e, flat.item)}>
1214
+ <div
1215
+ class={reorderCellWrapperClass}
1216
+ onPointerDown={(e) => onReorderPointerDown(e, flat.item)}
1217
+ >
1152
1218
  <div class={reorderHandleClass}>
1153
1219
  <Icon icon={IconGripVertical} size="1em" />
1154
1220
  </div>
@@ -3,7 +3,11 @@ import type { DataSheetColumnDef, DataSheetColumnProps } from "./types";
3
3
  import { normalizeHeader } from "./sheetUtils";
4
4
 
5
5
  export function isDataSheetColumnDef(value: unknown): value is DataSheetColumnDef<unknown> {
6
- return value != null && typeof value === "object" && (value as Record<string, unknown>)["__type"] === "sheet-column";
6
+ return (
7
+ value != null &&
8
+ typeof value === "object" &&
9
+ (value as Record<string, unknown>)["__type"] === "sheet-column"
10
+ );
7
11
  }
8
12
 
9
13
  /* eslint-disable solid/reactivity -- plain object 반환 패턴으로 reactive context 불필요 */
@@ -2,7 +2,12 @@ import { type Component } from "solid-js";
2
2
  import { createStore, reconcile } from "solid-js/store";
3
3
  import clsx from "clsx";
4
4
  import { useDialogInstance } from "../../disclosure/DialogInstanceContext";
5
- import type { DataSheetConfig, DataSheetConfigColumn, DataSheetConfigColumnInfo, DataSheetReorderEvent } from "./types";
5
+ import type {
6
+ DataSheetConfig,
7
+ DataSheetConfigColumn,
8
+ DataSheetConfigColumnInfo,
9
+ DataSheetReorderEvent,
10
+ } from "./types";
6
11
  import { DataSheet } from "./DataSheet";
7
12
  import { Checkbox } from "../../form-control/checkbox/Checkbox";
8
13
  import { TextInput } from "../../form-control/field/TextInput";
@@ -66,7 +71,11 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
66
71
  setEditItems(reconcile(items));
67
72
  }
68
73
 
69
- function updateItem(key: string, field: keyof EditColumnItem, value: EditColumnItem[keyof EditColumnItem]): void {
74
+ function updateItem(
75
+ key: string,
76
+ field: keyof EditColumnItem,
77
+ value: EditColumnItem[keyof EditColumnItem],
78
+ ): void {
70
79
  const index = editItems.findIndex((item) => item.key === key);
71
80
  if (index >= 0) {
72
81
  setEditItems(index, { [field]: value } as Partial<EditColumnItem>);
@@ -104,17 +113,30 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
104
113
  <div class={containerClass}>
105
114
  <div class={sheetWrapperClass}>
106
115
  <DataSheet items={editItems} inset hideConfigBar onItemsReorder={handleReorder}>
107
- <DataSheet.Column<EditColumnItem> key="header" header="컬럼" class="px-2 py-1" sortable={false}>
116
+ <DataSheet.Column<EditColumnItem>
117
+ key="header"
118
+ header="컬럼"
119
+ class="px-2 py-1"
120
+ sortable={false}
121
+ >
108
122
  {(ctx) => ctx.item.headerText}
109
123
  </DataSheet.Column>
110
124
  <DataSheet.Column<EditColumnItem> key="fixed" header="고정" sortable={false}>
111
125
  {(ctx) => (
112
- <Checkbox inset value={ctx.item.fixed} onValueChange={(v) => updateItem(ctx.item.key, "fixed", v)} />
126
+ <Checkbox
127
+ inset
128
+ value={ctx.item.fixed}
129
+ onValueChange={(v) => updateItem(ctx.item.key, "fixed", v)}
130
+ />
113
131
  )}
114
132
  </DataSheet.Column>
115
133
  <DataSheet.Column<EditColumnItem> key="hidden" header="숨김" sortable={false}>
116
134
  {(ctx) => (
117
- <Checkbox inset value={ctx.item.hidden} onValueChange={(v) => updateItem(ctx.item.key, "hidden", v)} />
135
+ <Checkbox
136
+ inset
137
+ value={ctx.item.hidden}
138
+ onValueChange={(v) => updateItem(ctx.item.key, "hidden", v)}
139
+ />
118
140
  )}
119
141
  </DataSheet.Column>
120
142
  <DataSheet.Column<EditColumnItem> key="width" header="너비" sortable={false}>