@simplysm/solid 13.0.69 → 13.0.71

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 (495) hide show
  1. package/README.md +168 -195
  2. package/dist/components/data/calendar/Calendar.d.ts.map +1 -1
  3. package/dist/components/data/calendar/Calendar.js +15 -2
  4. package/dist/components/data/calendar/Calendar.js.map +2 -2
  5. package/dist/components/data/kanban/KanbanContext.js +2 -2
  6. package/dist/components/data/kanban/KanbanContext.js.map +1 -1
  7. package/dist/components/data/list/List.d.ts +8 -8
  8. package/dist/components/data/list/ListContext.d.ts +1 -1
  9. package/dist/components/data/list/ListItem.d.ts +15 -15
  10. package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
  11. package/dist/components/data/sheet/DataSheet.js +6 -4
  12. package/dist/components/data/sheet/DataSheet.js.map +2 -2
  13. package/dist/components/data/sheet/DataSheetConfigDialog.js +8 -8
  14. package/dist/components/data/sheet/DataSheetConfigDialog.js.map +1 -1
  15. package/dist/components/data/sheet/types.d.ts +4 -4
  16. package/dist/components/data/sheet/types.d.ts.map +1 -1
  17. package/dist/components/disclosure/Collapse.d.ts +4 -4
  18. package/dist/components/disclosure/Dialog.d.ts +24 -24
  19. package/dist/components/disclosure/Dialog.d.ts.map +1 -1
  20. package/dist/components/disclosure/Dialog.js +7 -2
  21. package/dist/components/disclosure/Dialog.js.map +2 -2
  22. package/dist/components/disclosure/DialogContext.d.ts +25 -25
  23. package/dist/components/disclosure/DialogContext.d.ts.map +1 -1
  24. package/dist/components/disclosure/DialogContext.js +1 -1
  25. package/dist/components/disclosure/DialogContext.js.map +1 -1
  26. package/dist/components/disclosure/DialogInstanceContext.d.ts +7 -7
  27. package/dist/components/disclosure/DialogInstanceContext.d.ts.map +1 -1
  28. package/dist/components/disclosure/DialogProvider.d.ts +3 -3
  29. package/dist/components/disclosure/Dropdown.d.ts +26 -24
  30. package/dist/components/disclosure/Dropdown.d.ts.map +1 -1
  31. package/dist/components/disclosure/Dropdown.js +24 -8
  32. package/dist/components/disclosure/Dropdown.js.map +2 -2
  33. package/dist/components/disclosure/Tabs.js +1 -1
  34. package/dist/components/disclosure/Tabs.js.map +1 -1
  35. package/dist/components/disclosure/dialogZIndex.d.ts +9 -7
  36. package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -1
  37. package/dist/components/disclosure/dialogZIndex.js +4 -0
  38. package/dist/components/disclosure/dialogZIndex.js.map +1 -1
  39. package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
  40. package/dist/components/features/crud-detail/CrudDetail.js +34 -22
  41. package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
  42. package/dist/components/features/crud-sheet/CrudSheet.d.ts.map +1 -1
  43. package/dist/components/features/crud-sheet/CrudSheet.js +48 -33
  44. package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
  45. package/dist/components/features/crudRegistry.d.ts +16 -0
  46. package/dist/components/features/crudRegistry.d.ts.map +1 -0
  47. package/dist/components/features/crudRegistry.js +37 -0
  48. package/dist/components/features/crudRegistry.js.map +6 -0
  49. package/dist/components/features/data-select-button/DataSelectButton.d.ts +14 -14
  50. package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
  51. package/dist/components/features/data-select-button/DataSelectButton.js +27 -9
  52. package/dist/components/features/data-select-button/DataSelectButton.js.map +2 -2
  53. package/dist/components/features/permission-table/PermissionTable.d.ts +3 -3
  54. package/dist/components/features/permission-table/PermissionTable.d.ts.map +1 -1
  55. package/dist/components/features/permission-table/PermissionTable.js +74 -85
  56. package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
  57. package/dist/components/features/shared-data/SharedDataSelect.d.ts +12 -12
  58. package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
  59. package/dist/components/features/shared-data/SharedDataSelect.js +10 -6
  60. package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
  61. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts +10 -10
  62. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
  63. package/dist/components/features/shared-data/SharedDataSelectList.d.ts +23 -15
  64. package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
  65. package/dist/components/features/shared-data/SharedDataSelectList.js +191 -65
  66. package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
  67. package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts +15 -0
  68. package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts.map +1 -0
  69. package/dist/components/features/shared-data/SharedDataSelectListContext.js +27 -0
  70. package/dist/components/features/shared-data/SharedDataSelectListContext.js.map +6 -0
  71. package/dist/components/feedback/Progress.d.ts +1 -1
  72. package/dist/components/feedback/Progress.d.ts.map +1 -1
  73. package/dist/components/feedback/busy/BusyContainer.d.ts +2 -2
  74. package/dist/components/feedback/busy/BusyContainer.d.ts.map +1 -1
  75. package/dist/components/feedback/busy/BusyContext.d.ts +11 -11
  76. package/dist/components/feedback/busy/BusyContext.d.ts.map +1 -1
  77. package/dist/components/feedback/busy/BusyContext.js +1 -1
  78. package/dist/components/feedback/busy/BusyContext.js.map +1 -1
  79. package/dist/components/feedback/busy/BusyProvider.d.ts +6 -6
  80. package/dist/components/feedback/busy/BusyProvider.d.ts.map +1 -1
  81. package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -1
  82. package/dist/components/feedback/notification/NotificationBanner.js +7 -3
  83. package/dist/components/feedback/notification/NotificationBanner.js.map +2 -2
  84. package/dist/components/feedback/notification/NotificationBell.js +2 -2
  85. package/dist/components/feedback/notification/NotificationBell.js.map +1 -1
  86. package/dist/components/feedback/notification/NotificationContext.d.ts +22 -22
  87. package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -1
  88. package/dist/components/feedback/notification/NotificationContext.js +1 -1
  89. package/dist/components/feedback/notification/NotificationContext.js.map +1 -1
  90. package/dist/components/feedback/notification/NotificationProvider.d.ts +5 -5
  91. package/dist/components/feedback/notification/NotificationProvider.js +1 -1
  92. package/dist/components/feedback/notification/NotificationProvider.js.map +1 -1
  93. package/dist/components/feedback/print/PrintContext.js +1 -1
  94. package/dist/components/feedback/print/PrintContext.js.map +1 -1
  95. package/dist/components/form-control/DropdownTrigger.styles.d.ts +1 -1
  96. package/dist/components/form-control/DropdownTrigger.styles.d.ts.map +1 -1
  97. package/dist/components/form-control/ThemeToggle.d.ts +7 -7
  98. package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
  99. package/dist/components/form-control/ThemeToggle.js +3 -3
  100. package/dist/components/form-control/checkbox/Checkbox.js +1 -1
  101. package/dist/components/form-control/checkbox/CheckboxGroup.js +1 -1
  102. package/dist/components/form-control/checkbox/Radio.js +1 -1
  103. package/dist/components/form-control/checkbox/RadioGroup.js +1 -1
  104. package/dist/components/form-control/color-picker/ColorPicker.d.ts +12 -12
  105. package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
  106. package/dist/components/form-control/color-picker/ColorPicker.js +2 -2
  107. package/dist/components/form-control/combobox/Combobox.d.ts +22 -22
  108. package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
  109. package/dist/components/form-control/combobox/Combobox.js +2 -2
  110. package/dist/components/form-control/combobox/ComboboxContext.d.ts +4 -4
  111. package/dist/components/form-control/combobox/ComboboxContext.d.ts.map +1 -1
  112. package/dist/components/form-control/combobox/ComboboxContext.js +1 -1
  113. package/dist/components/form-control/combobox/ComboboxContext.js.map +1 -1
  114. package/dist/components/form-control/combobox/ComboboxItem.d.ts +3 -3
  115. package/dist/components/form-control/combobox/ComboboxItem.d.ts.map +1 -1
  116. package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts +14 -14
  117. package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts.map +1 -1
  118. package/dist/components/form-control/date-range-picker/DateRangePicker.js +20 -9
  119. package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
  120. package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -1
  121. package/dist/components/form-control/editor/EditorToolbar.js +65 -20
  122. package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
  123. package/dist/components/form-control/editor/RichTextEditor.d.ts +6 -6
  124. package/dist/components/form-control/editor/RichTextEditor.d.ts.map +1 -1
  125. package/dist/components/form-control/editor/RichTextEditor.js +1 -1
  126. package/dist/components/form-control/editor/editor.css +5 -5
  127. package/dist/components/form-control/field/DatePicker.d.ts +22 -22
  128. package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
  129. package/dist/components/form-control/field/DatePicker.js +4 -4
  130. package/dist/components/form-control/field/DatePicker.js.map +1 -1
  131. package/dist/components/form-control/field/DateTimePicker.d.ts +21 -21
  132. package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
  133. package/dist/components/form-control/field/DateTimePicker.js +4 -4
  134. package/dist/components/form-control/field/DateTimePicker.js.map +1 -1
  135. package/dist/components/form-control/field/FieldPlaceholder.d.ts +1 -1
  136. package/dist/components/form-control/field/FieldPlaceholder.d.ts.map +1 -1
  137. package/dist/components/form-control/field/NumberInput.d.ts +23 -23
  138. package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
  139. package/dist/components/form-control/field/NumberInput.js +4 -4
  140. package/dist/components/form-control/field/NumberInput.js.map +1 -1
  141. package/dist/components/form-control/field/TextInput.d.ts +25 -25
  142. package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
  143. package/dist/components/form-control/field/TextInput.js +5 -5
  144. package/dist/components/form-control/field/TextInput.js.map +1 -1
  145. package/dist/components/form-control/field/Textarea.d.ts +19 -19
  146. package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
  147. package/dist/components/form-control/field/Textarea.js +4 -4
  148. package/dist/components/form-control/field/Textarea.js.map +1 -1
  149. package/dist/components/form-control/field/TimePicker.d.ts +20 -20
  150. package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
  151. package/dist/components/form-control/field/TimePicker.js +4 -4
  152. package/dist/components/form-control/field/TimePicker.js.map +1 -1
  153. package/dist/components/form-control/numpad/Numpad.d.ts +11 -11
  154. package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -1
  155. package/dist/components/form-control/select/Select.d.ts +26 -26
  156. package/dist/components/form-control/select/Select.d.ts.map +1 -1
  157. package/dist/components/form-control/select/Select.js +34 -23
  158. package/dist/components/form-control/select/Select.js.map +2 -2
  159. package/dist/components/form-control/select/SelectContext.d.ts +7 -7
  160. package/dist/components/form-control/select/SelectContext.d.ts.map +1 -1
  161. package/dist/components/form-control/select/SelectContext.js +1 -1
  162. package/dist/components/form-control/select/SelectContext.js.map +1 -1
  163. package/dist/components/form-control/select/SelectItem.d.ts +4 -4
  164. package/dist/components/form-control/select/SelectItem.d.ts.map +1 -1
  165. package/dist/components/form-control/state-preset/StatePreset.js +8 -8
  166. package/dist/components/form-control/state-preset/StatePreset.js.map +1 -1
  167. package/dist/components/layout/FormTable.js +4 -4
  168. package/dist/components/layout/sidebar/Sidebar.d.ts +5 -5
  169. package/dist/components/layout/sidebar/SidebarContainer.d.ts +11 -11
  170. package/dist/components/layout/sidebar/SidebarContainer.d.ts.map +1 -1
  171. package/dist/components/layout/sidebar/SidebarContainer.js +6 -1
  172. package/dist/components/layout/sidebar/SidebarContainer.js.map +2 -2
  173. package/dist/components/layout/sidebar/SidebarContext.d.ts +7 -7
  174. package/dist/components/layout/sidebar/SidebarContext.js +1 -1
  175. package/dist/components/layout/sidebar/SidebarContext.js.map +1 -1
  176. package/dist/components/layout/sidebar/SidebarMenu.d.ts +11 -11
  177. package/dist/components/layout/sidebar/SidebarUser.d.ts +14 -14
  178. package/dist/components/layout/topbar/Topbar.d.ts +6 -6
  179. package/dist/components/layout/topbar/Topbar.d.ts.map +1 -1
  180. package/dist/components/layout/topbar/Topbar.js +11 -6
  181. package/dist/components/layout/topbar/Topbar.js.map +2 -2
  182. package/dist/components/layout/topbar/TopbarContainer.d.ts +6 -6
  183. package/dist/components/layout/topbar/TopbarContext.js +2 -2
  184. package/dist/components/layout/topbar/TopbarContext.js.map +1 -1
  185. package/dist/components/layout/topbar/TopbarMenu.d.ts +11 -11
  186. package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -1
  187. package/dist/components/layout/topbar/TopbarMenu.js +5 -1
  188. package/dist/components/layout/topbar/TopbarMenu.js.map +2 -2
  189. package/dist/components/layout/topbar/TopbarUser.d.ts +9 -9
  190. package/dist/directives/ripple.d.ts +5 -5
  191. package/dist/helpers/createAppStructure.d.ts.map +1 -1
  192. package/dist/helpers/createAppStructure.js +7 -3
  193. package/dist/helpers/createAppStructure.js.map +1 -1
  194. package/dist/helpers/createHmrSafeContext.d.ts +3 -0
  195. package/dist/helpers/createHmrSafeContext.d.ts.map +1 -0
  196. package/dist/helpers/createHmrSafeContext.js +10 -0
  197. package/dist/helpers/createHmrSafeContext.js.map +6 -0
  198. package/dist/helpers/createSlotComponent.d.ts +3 -3
  199. package/dist/helpers/mergeStyles.d.ts +8 -8
  200. package/dist/hooks/createControllableSignal.d.ts +10 -10
  201. package/dist/hooks/createControllableStore.d.ts +6 -6
  202. package/dist/hooks/createIMEHandler.d.ts +7 -7
  203. package/dist/hooks/createMountTransition.d.ts +4 -4
  204. package/dist/hooks/createSelectionGroup.d.ts.map +1 -1
  205. package/dist/hooks/createSelectionGroup.js +4 -3
  206. package/dist/hooks/createSelectionGroup.js.map +2 -2
  207. package/dist/hooks/createSlotSignal.d.ts +2 -2
  208. package/dist/hooks/useLocalStorage.d.ts +11 -11
  209. package/dist/hooks/useLogger.d.ts +1 -1
  210. package/dist/hooks/useLogger.d.ts.map +1 -1
  211. package/dist/hooks/useLogger.js +1 -1
  212. package/dist/hooks/useLogger.js.map +1 -1
  213. package/dist/hooks/useRouterLink.d.ts +10 -10
  214. package/dist/hooks/useRouterLink.d.ts.map +1 -1
  215. package/dist/index.d.ts +2 -1
  216. package/dist/index.d.ts.map +1 -1
  217. package/dist/index.js +2 -1
  218. package/dist/index.js.map +1 -1
  219. package/dist/providers/ClipboardProvider.d.ts +5 -5
  220. package/dist/providers/ConfigContext.d.ts +6 -6
  221. package/dist/providers/ConfigContext.js +2 -2
  222. package/dist/providers/ConfigContext.js.map +1 -1
  223. package/dist/providers/ErrorLoggerProvider.d.ts +3 -3
  224. package/dist/providers/LoggerContext.d.ts +13 -13
  225. package/dist/providers/PwaUpdateProvider.d.ts +4 -4
  226. package/dist/providers/PwaUpdateProvider.js +2 -2
  227. package/dist/providers/PwaUpdateProvider.js.map +1 -1
  228. package/dist/providers/ServiceClientContext.d.ts +8 -8
  229. package/dist/providers/ServiceClientContext.d.ts.map +1 -1
  230. package/dist/providers/ServiceClientContext.js +1 -1
  231. package/dist/providers/ServiceClientContext.js.map +1 -1
  232. package/dist/providers/ServiceClientProvider.d.ts +6 -6
  233. package/dist/providers/ServiceClientProvider.js +7 -7
  234. package/dist/providers/ServiceClientProvider.js.map +1 -1
  235. package/dist/providers/SyncStorageContext.d.ts +14 -14
  236. package/dist/providers/SystemProvider.d.ts.map +1 -1
  237. package/dist/providers/SystemProvider.js +21 -16
  238. package/dist/providers/SystemProvider.js.map +2 -2
  239. package/dist/providers/ThemeContext.d.ts +20 -20
  240. package/dist/providers/ThemeContext.d.ts.map +1 -1
  241. package/dist/providers/ThemeContext.js +1 -1
  242. package/dist/providers/ThemeContext.js.map +1 -1
  243. package/dist/providers/i18n/I18nContext.d.ts +44 -0
  244. package/dist/providers/i18n/I18nContext.d.ts.map +1 -0
  245. package/dist/providers/i18n/I18nContext.js +73 -0
  246. package/dist/providers/i18n/I18nContext.js.map +6 -0
  247. package/dist/providers/i18n/I18nContext.types.d.ts +28 -0
  248. package/dist/providers/i18n/I18nContext.types.d.ts.map +1 -0
  249. package/dist/providers/i18n/I18nContext.types.js +1 -0
  250. package/dist/providers/i18n/I18nContext.types.js.map +6 -0
  251. package/dist/providers/i18n/i18nUtils.d.ts +18 -0
  252. package/dist/providers/i18n/i18nUtils.d.ts.map +1 -0
  253. package/dist/providers/i18n/i18nUtils.js +25 -0
  254. package/dist/providers/i18n/i18nUtils.js.map +6 -0
  255. package/dist/providers/i18n/locales/en.d.ts +163 -0
  256. package/dist/providers/i18n/locales/en.d.ts.map +1 -0
  257. package/dist/providers/i18n/locales/en.js +165 -0
  258. package/dist/providers/i18n/locales/en.js.map +6 -0
  259. package/dist/providers/i18n/locales/ko.d.ts +163 -0
  260. package/dist/providers/i18n/locales/ko.d.ts.map +1 -0
  261. package/dist/providers/i18n/locales/ko.js +165 -0
  262. package/dist/providers/i18n/locales/ko.js.map +6 -0
  263. package/dist/providers/shared-data/SharedDataChangeEvent.d.ts +4 -4
  264. package/dist/providers/shared-data/SharedDataContext.d.ts +28 -28
  265. package/dist/providers/shared-data/SharedDataContext.d.ts.map +1 -1
  266. package/dist/providers/shared-data/SharedDataContext.js +1 -1
  267. package/dist/providers/shared-data/SharedDataContext.js.map +1 -1
  268. package/dist/providers/shared-data/SharedDataProvider.d.ts +9 -9
  269. package/dist/providers/shared-data/SharedDataProvider.js +4 -4
  270. package/dist/providers/shared-data/SharedDataProvider.js.map +1 -1
  271. package/package.json +9 -8
  272. package/src/components/data/calendar/Calendar.tsx +10 -4
  273. package/src/components/data/kanban/Kanban.tsx +14 -14
  274. package/src/components/data/kanban/KanbanContext.ts +3 -3
  275. package/src/components/data/list/List.tsx +10 -10
  276. package/src/components/data/list/ListContext.ts +1 -1
  277. package/src/components/data/list/ListItem.styles.ts +8 -8
  278. package/src/components/data/list/ListItem.tsx +15 -15
  279. package/src/components/data/sheet/DataSheet.styles.ts +22 -22
  280. package/src/components/data/sheet/DataSheet.tsx +52 -48
  281. package/src/components/data/sheet/DataSheetColumn.tsx +1 -1
  282. package/src/components/data/sheet/DataSheetConfigDialog.tsx +9 -9
  283. package/src/components/data/sheet/sheetUtils.ts +7 -7
  284. package/src/components/data/sheet/types.ts +16 -16
  285. package/src/components/disclosure/Collapse.tsx +11 -11
  286. package/src/components/disclosure/Dialog.tsx +60 -57
  287. package/src/components/disclosure/DialogContext.ts +26 -26
  288. package/src/components/disclosure/DialogInstanceContext.ts +7 -7
  289. package/src/components/disclosure/DialogProvider.tsx +5 -5
  290. package/src/components/disclosure/Dropdown.tsx +89 -75
  291. package/src/components/disclosure/Tabs.tsx +1 -1
  292. package/src/components/disclosure/dialogZIndex.ts +16 -11
  293. package/src/components/display/Echarts.tsx +4 -4
  294. package/src/components/features/address/AddressSearch.tsx +2 -2
  295. package/src/components/features/crud-detail/CrudDetail.tsx +34 -21
  296. package/src/components/features/crud-detail/CrudDetailAfter.tsx +1 -1
  297. package/src/components/features/crud-detail/CrudDetailBefore.tsx +1 -1
  298. package/src/components/features/crud-detail/CrudDetailTools.tsx +1 -1
  299. package/src/components/features/crud-sheet/CrudSheet.tsx +52 -40
  300. package/src/components/features/crud-sheet/CrudSheetColumn.tsx +1 -1
  301. package/src/components/features/crud-sheet/CrudSheetFilter.tsx +1 -1
  302. package/src/components/features/crud-sheet/CrudSheetHeader.tsx +1 -1
  303. package/src/components/features/crud-sheet/CrudSheetTools.tsx +1 -1
  304. package/src/components/features/crudRegistry.ts +60 -0
  305. package/src/components/features/data-select-button/DataSelectButton.tsx +34 -32
  306. package/src/components/features/permission-table/PermissionTable.tsx +70 -64
  307. package/src/components/features/shared-data/SharedDataSelect.tsx +24 -22
  308. package/src/components/features/shared-data/SharedDataSelectButton.tsx +10 -10
  309. package/src/components/features/shared-data/SharedDataSelectList.tsx +231 -59
  310. package/src/components/features/shared-data/SharedDataSelectListContext.ts +39 -0
  311. package/src/components/feedback/Progress.tsx +1 -1
  312. package/src/components/feedback/busy/BusyContainer.tsx +6 -6
  313. package/src/components/feedback/busy/BusyContext.ts +12 -12
  314. package/src/components/feedback/busy/BusyProvider.tsx +6 -6
  315. package/src/components/feedback/notification/NotificationBanner.tsx +3 -1
  316. package/src/components/feedback/notification/NotificationBell.tsx +4 -4
  317. package/src/components/feedback/notification/NotificationContext.ts +28 -28
  318. package/src/components/feedback/notification/NotificationProvider.tsx +9 -9
  319. package/src/components/feedback/print/PrintContext.ts +1 -1
  320. package/src/components/form-control/Button.tsx +1 -1
  321. package/src/components/form-control/DropdownTrigger.styles.ts +1 -1
  322. package/src/components/form-control/Invalid.tsx +5 -5
  323. package/src/components/form-control/ThemeToggle.tsx +10 -10
  324. package/src/components/form-control/checkbox/Checkbox.styles.ts +8 -8
  325. package/src/components/form-control/checkbox/Checkbox.tsx +2 -2
  326. package/src/components/form-control/checkbox/CheckboxGroup.tsx +1 -1
  327. package/src/components/form-control/checkbox/Radio.tsx +2 -2
  328. package/src/components/form-control/checkbox/RadioGroup.tsx +1 -1
  329. package/src/components/form-control/color-picker/ColorPicker.tsx +17 -17
  330. package/src/components/form-control/combobox/Combobox.tsx +55 -55
  331. package/src/components/form-control/combobox/ComboboxContext.ts +5 -5
  332. package/src/components/form-control/combobox/ComboboxItem.tsx +3 -3
  333. package/src/components/form-control/date-range-picker/DateRangePicker.tsx +40 -26
  334. package/src/components/form-control/editor/EditorToolbar.tsx +52 -50
  335. package/src/components/form-control/editor/RichTextEditor.tsx +16 -16
  336. package/src/components/form-control/editor/editor.css +5 -5
  337. package/src/components/form-control/field/DatePicker.tsx +39 -39
  338. package/src/components/form-control/field/DateTimePicker.tsx +38 -38
  339. package/src/components/form-control/field/Field.styles.ts +11 -11
  340. package/src/components/form-control/field/FieldPlaceholder.tsx +1 -1
  341. package/src/components/form-control/field/NumberInput.tsx +63 -63
  342. package/src/components/form-control/field/TextInput.tsx +48 -48
  343. package/src/components/form-control/field/Textarea.tsx +32 -32
  344. package/src/components/form-control/field/TimePicker.tsx +37 -37
  345. package/src/components/form-control/numpad/Numpad.tsx +26 -26
  346. package/src/components/form-control/select/Select.tsx +82 -86
  347. package/src/components/form-control/select/SelectContext.ts +8 -8
  348. package/src/components/form-control/select/SelectItem.tsx +5 -5
  349. package/src/components/form-control/state-preset/StatePreset.tsx +13 -13
  350. package/src/components/layout/FormTable.tsx +4 -4
  351. package/src/components/layout/sidebar/Sidebar.tsx +8 -8
  352. package/src/components/layout/sidebar/SidebarContainer.tsx +19 -17
  353. package/src/components/layout/sidebar/SidebarContext.ts +8 -8
  354. package/src/components/layout/sidebar/SidebarMenu.tsx +19 -19
  355. package/src/components/layout/sidebar/SidebarUser.tsx +14 -14
  356. package/src/components/layout/topbar/Topbar.tsx +15 -13
  357. package/src/components/layout/topbar/TopbarContainer.tsx +6 -6
  358. package/src/components/layout/topbar/TopbarContext.ts +2 -2
  359. package/src/components/layout/topbar/TopbarMenu.tsx +18 -16
  360. package/src/components/layout/topbar/TopbarUser.tsx +9 -9
  361. package/src/directives/ripple.ts +8 -8
  362. package/src/helpers/createAppStructure.ts +15 -8
  363. package/src/helpers/createHmrSafeContext.ts +8 -0
  364. package/src/helpers/createSlotComponent.ts +4 -4
  365. package/src/helpers/mergeStyles.ts +11 -11
  366. package/src/hooks/createControllableSignal.ts +11 -11
  367. package/src/hooks/createControllableStore.ts +8 -8
  368. package/src/hooks/createIMEHandler.ts +7 -7
  369. package/src/hooks/createMountTransition.ts +4 -4
  370. package/src/hooks/createSelectionGroup.tsx +5 -3
  371. package/src/hooks/createSlotSignal.ts +2 -2
  372. package/src/hooks/useLocalStorage.ts +13 -13
  373. package/src/hooks/useLogger.ts +2 -2
  374. package/src/hooks/useRouterLink.ts +15 -15
  375. package/src/index.ts +4 -3
  376. package/src/providers/ClipboardProvider.tsx +19 -19
  377. package/src/providers/ConfigContext.tsx +8 -8
  378. package/src/providers/ErrorLoggerProvider.tsx +3 -3
  379. package/src/providers/LoggerContext.tsx +13 -13
  380. package/src/providers/PwaUpdateProvider.tsx +6 -6
  381. package/src/providers/ServiceClientContext.ts +9 -9
  382. package/src/providers/ServiceClientProvider.tsx +15 -15
  383. package/src/providers/SyncStorageContext.tsx +15 -15
  384. package/src/providers/SystemProvider.tsx +15 -12
  385. package/src/providers/ThemeContext.tsx +26 -26
  386. package/src/providers/i18n/I18nContext.tsx +129 -0
  387. package/src/providers/i18n/I18nContext.types.ts +30 -0
  388. package/src/providers/i18n/i18nUtils.ts +38 -0
  389. package/src/providers/i18n/locales/en.ts +161 -0
  390. package/src/providers/i18n/locales/ko.ts +161 -0
  391. package/src/providers/shared-data/SharedDataChangeEvent.ts +4 -4
  392. package/src/providers/shared-data/SharedDataContext.ts +29 -29
  393. package/src/providers/shared-data/SharedDataProvider.tsx +21 -21
  394. package/src/styles/patterns.styles.ts +6 -6
  395. package/src/styles/tokens.styles.ts +5 -5
  396. package/tailwind.config.ts +1 -1
  397. package/tailwind.css +4 -4
  398. package/tests/components/data/List.spec.tsx +689 -0
  399. package/tests/components/data/Pagination.spec.tsx +336 -0
  400. package/tests/components/data/Table.spec.tsx +55 -0
  401. package/tests/components/data/kanban/Kanban.selection.spec.tsx +213 -0
  402. package/tests/components/data/sheet/DataSheet.spec.tsx +645 -0
  403. package/tests/components/disclosure/Collapse.spec.tsx +173 -0
  404. package/tests/components/disclosure/Dialog.spec.tsx +438 -0
  405. package/tests/components/disclosure/DialogProvider.spec.tsx +142 -0
  406. package/tests/components/disclosure/Dropdown.spec.tsx +333 -0
  407. package/tests/components/disclosure/Tabs.spec.tsx +220 -0
  408. package/tests/components/disclosure/dialogZIndex.spec.ts +45 -0
  409. package/tests/components/display/Alert.spec.tsx +47 -0
  410. package/tests/components/display/Barcode.spec.tsx +61 -0
  411. package/tests/components/display/Card.spec.tsx +41 -0
  412. package/tests/components/display/Link.spec.tsx +62 -0
  413. package/tests/components/display/Tag.spec.tsx +47 -0
  414. package/tests/components/features/address/AddressSearch.spec.tsx +45 -0
  415. package/tests/components/features/crud-detail/CrudDetail.spec.tsx +537 -0
  416. package/tests/components/features/crud-sheet/CrudSheet.spec.tsx +491 -0
  417. package/tests/components/features/crudRegistry.spec.ts +119 -0
  418. package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +482 -0
  419. package/tests/components/features/permission-table/PermissionTable.spec.tsx +288 -0
  420. package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +448 -0
  421. package/tests/components/feedback/busy/BusyContainer.spec.tsx +80 -0
  422. package/tests/components/feedback/notification/LiveRegion.spec.tsx +52 -0
  423. package/tests/components/feedback/notification/NotificationBanner.spec.tsx +187 -0
  424. package/tests/components/feedback/notification/NotificationBell.spec.tsx +226 -0
  425. package/tests/components/feedback/notification/NotificationContext.spec.tsx +362 -0
  426. package/tests/components/feedback/print/Print.spec.tsx +45 -0
  427. package/tests/components/form-control/Button.spec.tsx +119 -0
  428. package/tests/components/form-control/Invalid.spec.tsx +131 -0
  429. package/tests/components/form-control/checkbox/Checkbox.spec.tsx +137 -0
  430. package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +108 -0
  431. package/tests/components/form-control/checkbox/Radio.spec.tsx +138 -0
  432. package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +108 -0
  433. package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +94 -0
  434. package/tests/components/form-control/combobox/Combobox.spec.tsx +253 -0
  435. package/tests/components/form-control/combobox/ComboboxItem.spec.tsx +88 -0
  436. package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +208 -0
  437. package/tests/components/form-control/field/DatePicker.spec.tsx +381 -0
  438. package/tests/components/form-control/field/DateTimePicker.spec.tsx +383 -0
  439. package/tests/components/form-control/field/NumberInput.spec.tsx +371 -0
  440. package/tests/components/form-control/field/TextInput.spec.tsx +341 -0
  441. package/tests/components/form-control/field/Textarea.spec.tsx +224 -0
  442. package/tests/components/form-control/field/TimePicker.spec.tsx +315 -0
  443. package/tests/components/form-control/numpad/Numpad.spec.tsx +248 -0
  444. package/tests/components/form-control/select/Select.spec.tsx +676 -0
  445. package/tests/components/form-control/select/SelectItem.spec.tsx +174 -0
  446. package/tests/components/layout/FormGroup.spec.tsx +104 -0
  447. package/tests/components/layout/FormTable.spec.tsx +43 -0
  448. package/tests/components/layout/sidebar/Sidebar.spec.tsx +192 -0
  449. package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +261 -0
  450. package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +219 -0
  451. package/tests/components/layout/sidebar/SidebarUser.spec.tsx +133 -0
  452. package/tests/components/layout/topbar/TopbarActions.spec.tsx +77 -0
  453. package/tests/components/layout/topbar/TopbarContainer.spec.tsx +38 -0
  454. package/tests/components/layout/topbar/createTopbarActions.spec.tsx +66 -0
  455. package/tests/directives/ripple.spec.tsx +130 -0
  456. package/tests/helpers/createAppStructure.spec.tsx +843 -0
  457. package/tests/helpers/mergeStyles.spec.ts +172 -0
  458. package/tests/hooks/createControllableSignal.spec.ts +194 -0
  459. package/tests/hooks/createIMEHandler.spec.ts +80 -0
  460. package/tests/hooks/createMountTransition.spec.ts +86 -0
  461. package/tests/hooks/useLocalStorage.spec.tsx +223 -0
  462. package/tests/hooks/useLogger.spec.tsx +116 -0
  463. package/tests/hooks/usePrint.spec.tsx +134 -0
  464. package/tests/hooks/useRouterLink.spec.tsx +183 -0
  465. package/tests/hooks/useSyncConfig.spec.tsx +304 -0
  466. package/tests/providers/ClipboardProvider.spec.tsx +20 -0
  467. package/tests/providers/ConfigContext.spec.tsx +42 -0
  468. package/tests/providers/ErrorLoggerProvider.spec.tsx +73 -0
  469. package/tests/providers/LoggerContext.spec.tsx +76 -0
  470. package/tests/providers/PwaUpdateProvider.spec.tsx +22 -0
  471. package/tests/providers/ServiceClientContext.spec.tsx +88 -0
  472. package/tests/providers/SyncStorageContext.spec.tsx +77 -0
  473. package/tests/providers/i18n/I18nContext.spec.tsx +110 -0
  474. package/tests/providers/shared-data/SharedDataProvider.spec.tsx +401 -0
  475. package/tests/vitest-env.d.ts +1 -0
  476. package/dist/components/form-control/select-list/SelectList.d.ts +0 -54
  477. package/dist/components/form-control/select-list/SelectList.d.ts.map +0 -1
  478. package/dist/components/form-control/select-list/SelectList.js +0 -280
  479. package/dist/components/form-control/select-list/SelectList.js.map +0 -6
  480. package/dist/components/form-control/select-list/SelectListContext.d.ts +0 -13
  481. package/dist/components/form-control/select-list/SelectListContext.d.ts.map +0 -1
  482. package/dist/components/form-control/select-list/SelectListContext.js +0 -14
  483. package/dist/components/form-control/select-list/SelectListContext.js.map +0 -6
  484. package/docs/data-components.md +0 -782
  485. package/docs/disclosure.md +0 -254
  486. package/docs/display.md +0 -153
  487. package/docs/feedback.md +0 -238
  488. package/docs/form-controls.md +0 -1068
  489. package/docs/helpers.md +0 -54
  490. package/docs/hooks.md +0 -588
  491. package/docs/layout.md +0 -384
  492. package/docs/providers.md +0 -211
  493. package/docs/styling.md +0 -184
  494. package/src/components/form-control/select-list/SelectList.tsx +0 -385
  495. package/src/components/form-control/select-list/SelectListContext.ts +0 -23
@@ -39,6 +39,7 @@ import { Checkbox } from "../../form-control/checkbox/Checkbox";
39
39
  import { Pagination } from "../Pagination";
40
40
  import { useSyncConfig } from "../../../hooks/useSyncConfig";
41
41
  import { DialogContext } from "../../disclosure/DialogContext";
42
+ import { useI18nOptional } from "../../../providers/i18n/I18nContext";
42
43
  import "./DataSheet.css";
43
44
  import {
44
45
  configButtonClass,
@@ -111,6 +112,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
111
112
  ]);
112
113
 
113
114
  const modal = useContext(DialogContext);
115
+ const i18n = useI18nOptional();
114
116
 
115
117
  // #region Column Collection
116
118
  const resolved = children(() => local.children);
@@ -119,21 +121,21 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
119
121
  );
120
122
 
121
123
  // #region Config (useSyncConfig)
122
- /* eslint-disable solid/reactivity -- persistKey 정적 값으로 컴포넌트 마운트 번만 사용됨 */
124
+ /* eslint-disable solid/reactivity -- persistKey is static and only used once on component mount */
123
125
  const [config, setConfig] =
124
126
  local.persistKey != null && local.persistKey !== ""
125
127
  ? useSyncConfig<DataSheetConfig>(`sheet.${local.persistKey}`, { columnRecord: {} })
126
128
  : createSignal<DataSheetConfig>({ columnRecord: {} });
127
129
  /* eslint-enable solid/reactivity */
128
130
 
129
- // 설정이 적용된 최종 컬럼 — config hidden/fixed/width/displayOrder 오버라이드 적용
131
+ // Final columns with config applied — config's hidden/fixed/width/displayOrder overrides are applied
130
132
  const effectiveColumns = createMemo(() => {
131
133
  const cols = columnDefs();
132
134
  const record = config().columnRecord ?? {};
133
135
 
134
136
  return cols
135
137
  .filter((col) => {
136
- // config 오버라이드가 있으면 config 우선, 없으면 원래 col.hidden 사용
138
+ // If config override exists, use config priority, otherwise use original col.hidden
137
139
  const saved = record[col.key];
138
140
  const isHidden = saved?.hidden ?? col.hidden;
139
141
  return !isHidden;
@@ -186,7 +188,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
186
188
  const result = await modal.show<DataSheetConfig>(
187
189
  () => <DataSheetConfigDialog columnInfos={columnInfos} currentConfig={currentConfig} />,
188
190
  {
189
- header: "시트 설정",
191
+ header: "Sheet Settings",
190
192
  closeOnBackdrop: true,
191
193
  closeOnEscape: true,
192
194
  },
@@ -217,12 +219,12 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
217
219
  const updated = current.map((s) => (s.key === key ? { ...s, desc: true } : s));
218
220
  setSorts(multiple ? updated : [{ key, desc: true }]);
219
221
  } else {
220
- // desc → 제거
222
+ // desc → remove
221
223
  const updated = current.filter((s) => s.key !== key);
222
224
  setSorts(multiple ? updated : []);
223
225
  }
224
226
  } else {
225
- // 없음 → asc 추가
227
+ // noneadd asc
226
228
  const newSort: SortingDef = { key, desc: false };
227
229
  setSorts(multiple ? [...current, newSort] : [newSort]);
228
230
  }
@@ -272,12 +274,12 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
272
274
  return map;
273
275
  });
274
276
 
275
- // #region Feature Column Setup (확장/선택 기능 컬럼 공통)
277
+ // #region Feature Column Setup (expand/select feature columns common)
276
278
  const hasExpandFeature = () => local.getChildren != null;
277
279
  const hasSelectFeature = () => local.selectMode != null;
278
280
  const hasReorderFeature = () => local.onItemsReorder != null;
279
281
 
280
- // 기능 컬럼 너비 추적 헬퍼
282
+ // Feature column width tracking helper
281
283
  function createTrackedWidth(): [() => number, (el: HTMLElement) => void] {
282
284
  const [width, setWidth] = createSignal(0);
283
285
  const register = (el: HTMLElement) => {
@@ -292,7 +294,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
292
294
  const [selectColWidth, registerSelectColRef] = createTrackedWidth();
293
295
  const [reorderColWidth, registerReorderColRef] = createTrackedWidth();
294
296
 
295
- // 기능 컬럼 left 위치 (선택/재정렬 컬럼의 style에 사용)
297
+ // Feature column left position (used in select/reorder column style)
296
298
  const selectColLeft = createMemo(() => (hasExpandFeature() ? `${expandColWidth()}px` : "0"));
297
299
 
298
300
  const reorderColLeft = createMemo(() => {
@@ -303,13 +305,13 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
303
305
  });
304
306
 
305
307
  // #region ColumnFixing
306
- // 컬럼 셀의 ref 너비 측정용
308
+ // Column cell refsfor width measurement
307
309
  const columnRefs = new Map<number, HTMLElement>();
308
310
 
309
- // 컬럼의 측정된 너비
311
+ // Measured width of each column
310
312
  const [columnWidths, setColumnWidths] = createSignal<Map<number, number>>(new Map());
311
313
 
312
- // 기능 컬럼(확장 ) 너비 고정 컬럼 left 오프셋에 사용
314
+ // Total width of feature columns (expand, etc.) used for fixed column left offset
313
315
  const featureColTotalWidth = createMemo(() => {
314
316
  let w = 0;
315
317
  if (hasExpandFeature()) w += expandColWidth();
@@ -318,21 +320,21 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
318
320
  return w;
319
321
  });
320
322
 
321
- // 고정 컬럼의 left 위치 계산
323
+ // Calculate left position of fixed columns
322
324
  const fixedLeftMap = createMemo(() => {
323
325
  const map = new Map<number, number>();
324
326
  const cols = effectiveColumns();
325
327
  const widths = columnWidths();
326
328
  let left = featureColTotalWidth();
327
329
  for (let c = 0; c < cols.length; c++) {
328
- if (!cols[c].fixed) break; // 고정 컬럼은 앞쪽에 연속 배치
330
+ if (!cols[c].fixed) break; // Fixed columns are placed continuously at front
329
331
  map.set(c, left);
330
332
  left += widths.get(c) ?? 0;
331
333
  }
332
334
  return map;
333
335
  });
334
336
 
335
- // 마지막 고정 컬럼 인덱스
337
+ // Last fixed column index
336
338
  const lastFixedIndex = createMemo(() => {
337
339
  const cols = effectiveColumns();
338
340
  let last = -1;
@@ -353,7 +355,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
353
355
  return colIndex === lastFixedIndex();
354
356
  }
355
357
 
356
- // 고정 컬럼 셀에 ResizeObserver 등록
358
+ // Register ResizeObserver for fixed column cells
357
359
  function registerColumnRef(colIndex: number, el: HTMLElement): void {
358
360
  columnRefs.set(colIndex, el);
359
361
  createResizeObserver(el, () => {
@@ -381,7 +383,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
381
383
  const startX = event.clientX;
382
384
  const startWidth = th.offsetWidth;
383
385
 
384
- // 리사이즈 인디케이터 표시
386
+ // Show resize indicator
385
387
  const containerRect = container.getBoundingClientRect();
386
388
  setResizeIndicatorStyle({
387
389
  display: "block",
@@ -404,7 +406,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
404
406
  },
405
407
  onEnd(e) {
406
408
  const delta = e.clientX - startX;
407
- // 실제 드래그가 발생한 경우에만 너비 저장 (더블클릭 DOM 재생성으로 dblclick 유실 방지)
409
+ // Only save width if actual drag occurred (prevent dblclick DOM recreation from losing dblclick)
408
410
  if (delta !== 0) {
409
411
  const newWidth = Math.max(30, startWidth + delta);
410
412
  saveColumnWidth(colKey, `${newWidth}px`);
@@ -419,7 +421,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
419
421
  }
420
422
 
421
423
  // #region HeaderSticky
422
- // 헤더 행의 높이를 추적하여 누적 top 값 계산
424
+ // Track header row heights to calculate cumulative top values
423
425
  const [headerRowHeights, setHeaderRowHeights] = createSignal<number[]>([]);
424
426
 
425
427
  function registerHeaderRow(rowIndex: number, el: HTMLElement): void {
@@ -432,7 +434,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
432
434
  });
433
435
  }
434
436
 
435
- // 헤더 행의 누적 top
437
+ // Cumulative top value for each header row
436
438
  const headerRowTops = createMemo(() => {
437
439
  const heights = headerRowHeights();
438
440
  const tops: number[] = [];
@@ -444,7 +446,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
444
446
  return tops;
445
447
  });
446
448
 
447
- // 합계 행의 top (모든 헤더 높이 )
449
+ // Top value of summary row (sum of all header row heights)
448
450
  const summaryRowTop = createMemo(() => {
449
451
  const heights = headerRowHeights();
450
452
  return heights.reduce((sum, h) => sum + h, 0);
@@ -600,7 +602,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
600
602
  const flat = displayItems()[i];
601
603
  if (flat.item === item) break;
602
604
 
603
- // 자기 자신의 하위 항목으로는 드롭 불가
605
+ // Cannot drop to child items of self
604
606
  if (isDescendant(item, flat.item)) break;
605
607
 
606
608
  const relY = ev.clientY - rect.top;
@@ -623,7 +625,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
623
625
 
624
626
  setDragState({ draggingItem: item, targetItem: foundTarget, position: foundPosition });
625
627
 
626
- // 인디케이터 DOM 업데이트
628
+ // Update indicator DOM
627
629
  for (let i = 0; i < rows.length; i++) {
628
630
  rows[i].removeAttribute("data-dragging");
629
631
  rows[i].removeAttribute("data-drag-over");
@@ -639,7 +641,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
639
641
  }
640
642
  }
641
643
 
642
- // before/after 인디케이터
644
+ // before/after indicator
643
645
  const indicatorEl = tableEl
644
646
  .closest("[data-sheet-scroll]")
645
647
  ?.querySelector("[data-reorder-indicator]") as HTMLElement | null;
@@ -675,7 +677,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
675
677
  } as DataSheetReorderEvent<T>);
676
678
  }
677
679
 
678
- // 클린업
680
+ // Clean up
679
681
  for (const row of rows) {
680
682
  row.removeAttribute("data-dragging");
681
683
  row.removeAttribute("data-drag-over");
@@ -692,7 +694,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
692
694
  });
693
695
  }
694
696
 
695
- // #region Keyboard Navigation (Enter/Shift+Enter로 행 이동)
697
+ // #region Keyboard Navigation (move rows with Enter/Shift+Enter)
696
698
  function onTableKeyDown(e: KeyboardEvent): void {
697
699
  if (e.key !== "Enter" || e.altKey || e.ctrlKey || e.metaKey) return;
698
700
 
@@ -728,24 +730,24 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
728
730
  // #region Display
729
731
  const displayItems = flatItems;
730
732
 
731
- // 확장 기능 컬럼이 "마지막 고정"인지 (일반 고정 컬럼이 없고, 선택 컬럼도 없을 )
733
+ // Is expand feature column "last fixed" (no regular fixed columns and no select feature)
732
734
  const isExpandColLastFixed = () =>
733
735
  hasExpandFeature() && !hasSelectFeature() && !hasReorderFeature() && lastFixedIndex() < 0;
734
736
 
735
- // 선택 기능 컬럼이 "마지막 고정"인지 (일반 고정 컬럼이 없고, 선택 컬럼이 가장 오른쪽 기능 컬럼일 때)
737
+ // Is select feature column "last fixed" (no regular fixed columns and select is rightmost feature)
736
738
  const isSelectColLastFixed = () =>
737
739
  hasSelectFeature() && !hasReorderFeature() && lastFixedIndex() < 0;
738
740
 
739
741
  const isReorderColLastFixed = () => hasReorderFeature() && lastFixedIndex() < 0;
740
742
 
741
- // 전체 헤더 + 합계 (기능 컬럼의 rowspan에 사용)
743
+ // Total header row count + summary row count (used for feature column rowspan)
742
744
  const featureHeaderRowspan = createMemo(() => {
743
745
  const headerRows = headerTable().length;
744
746
  const summaryRow = hasSummary() ? 1 : 0;
745
747
  return headerRows + summaryRow;
746
748
  });
747
749
 
748
- // 전체 확장 상태인지
750
+ // Is all expanded
749
751
  const isAllExpanded = createMemo(() => {
750
752
  if (!local.getChildren) return false;
751
753
  const indexMap = originalIndexMap();
@@ -784,7 +786,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
784
786
  <button
785
787
  class={configButtonClass}
786
788
  onClick={openConfigModal}
787
- title="시트 설정"
789
+ title="Sheet Settings"
788
790
  type="button"
789
791
  >
790
792
  <Icon icon={IconSettings} size="1em" />
@@ -824,7 +826,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
824
826
  <For each={headerTable()}>
825
827
  {(row, rowIndex) => (
826
828
  <tr ref={(el: HTMLElement) => registerHeaderRow(rowIndex(), el)}>
827
- {/* 확장 기능 컬럼 헤더 번째 행에만 표시 (rowspan으로 전체 덮기) */}
829
+ {/* Expand feature column headershow only in first row (cover all with rowspan) */}
828
830
  <Show when={hasExpandFeature() && rowIndex() === 0}>
829
831
  <th
830
832
  class={twMerge(
@@ -842,7 +844,9 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
842
844
  type="button"
843
845
  class={expandToggleClass}
844
846
  onClick={toggleExpandAll}
845
- title={isAllExpanded() ? "전체 접기" : "전체 펼치기"}
847
+ title={isAllExpanded()
848
+ ? (i18n?.t("dataSheet.collapseAll") ?? "Collapse all")
849
+ : (i18n?.t("dataSheet.expandAll") ?? "Expand all")}
846
850
  >
847
851
  <Icon
848
852
  icon={IconChevronDown}
@@ -856,7 +860,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
856
860
  </div>
857
861
  </th>
858
862
  </Show>
859
- {/* 선택 기능 컬럼 헤더 번째 행에만 표시 (rowspan으로 전체 덮기) */}
863
+ {/* Select feature column headershow only in first row (cover all with rowspan) */}
860
864
  <Show when={hasSelectFeature() && rowIndex() === 0}>
861
865
  <th
862
866
  class={twMerge(
@@ -891,7 +895,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
891
895
  </Show>
892
896
  </th>
893
897
  </Show>
894
- {/* 드래그 재정렬 기능 컬럼 헤더 번째 행에만 표시 */}
898
+ {/* Drag reorder feature column headershow only in first row */}
895
899
  <Show when={hasReorderFeature() && rowIndex() === 0}>
896
900
  <th
897
901
  class={twMerge(
@@ -921,7 +925,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
921
925
  ? effectiveColumns()[c().colIndex!].key
922
926
  : undefined;
923
927
 
924
- // 그룹 헤더의 고정 여부: colspan 범위 모든 컬럼이 fixed인지
928
+ // Group header fixed status: all columns in colspan range are fixed
925
929
  const isGroupFixed = (): boolean => {
926
930
  if (c().isLastRow) return false;
927
931
  const start = cellColIndex();
@@ -933,14 +937,14 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
933
937
  return true;
934
938
  };
935
939
 
936
- // 셀의 고정 컬럼 여부 (마지막 행이면 colIndex 기반, 그룹 기반)
940
+ // Cell fixed column status (based on colIndex if last row, group-based otherwise)
937
941
  const isCellFixed = () =>
938
942
  (c().isLastRow &&
939
943
  c().colIndex != null &&
940
944
  effectiveColumns()[c().colIndex!].fixed) ||
941
945
  isGroupFixed();
942
946
 
943
- // 셀의 마지막 고정 여부
947
+ // Cell's last fixed status
944
948
  const isCellLastFixed = () => {
945
949
  if (c().isLastRow && c().colIndex != null)
946
950
  return isLastFixed(c().colIndex!);
@@ -951,17 +955,17 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
951
955
  return false;
952
956
  };
953
957
 
954
- // 고정 셀의 left + top 인라인 style
958
+ // Fixed cell left + top inline style
955
959
  const cellStyle = (): string | undefined => {
956
960
  const parts: string[] = [];
957
- // top: 모든 th 적용 (헤더 상단 고정)
961
+ // top: apply to all th (fix header to top)
958
962
  const top = headerRowTops()[rowIndex()];
959
963
  parts.push(`top: ${top}px`);
960
- // left: 고정 컬럼에만 적용
964
+ // left: apply only to fixed columns
961
965
  if (c().isLastRow && c().colIndex != null) {
962
966
  const left = getFixedStyle(c().colIndex!);
963
967
  if (left != null) parts.push(left);
964
- // max-width: 명시적 너비가 있으면 적용 (컬럼이 내용물보다 작아질 있도록)
968
+ // max-width: apply if explicit width exists (allow column to shrink below content)
965
969
  const col = effectiveColumns()[c().colIndex!];
966
970
  if (col.width != null) parts.push(`max-width: ${col.width}`);
967
971
  } else if (isGroupFixed()) {
@@ -1063,7 +1067,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
1063
1067
  </For>
1064
1068
  <Show when={hasSummary()}>
1065
1069
  <tr>
1066
- {/* 확장 기능 컬럼의 합계 셀은 rowspan으로 이미 덮여있으므로 제외 */}
1070
+ {/* Expand feature column summary cell already covered by rowspan, skip */}
1067
1071
  <For each={effectiveColumns()}>
1068
1072
  {(col, colIndex) => {
1069
1073
  const summaryStyle = (): string | undefined => {
@@ -1105,7 +1109,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
1105
1109
  }}
1106
1110
  class={local.autoSelect === "click" ? "cursor-pointer" : undefined}
1107
1111
  >
1108
- {/* 확장 기능 컬럼 바디 */}
1112
+ {/* Expand feature column body cell */}
1109
1113
  <Show when={hasExpandFeature()}>
1110
1114
  <td
1111
1115
  class={twMerge(
@@ -1143,7 +1147,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
1143
1147
  </div>
1144
1148
  </td>
1145
1149
  </Show>
1146
- {/* 선택 기능 컬럼 바디 */}
1150
+ {/* Select feature column body cell */}
1147
1151
  <Show when={hasSelectFeature()}>
1148
1152
  {(() => {
1149
1153
  const selectable = () => getItemSelectable(flat.item);
@@ -1165,7 +1169,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
1165
1169
  <Show
1166
1170
  when={local.selectMode === "multiple"}
1167
1171
  fallback={
1168
- /* single 모드 */
1172
+ /* single mode */
1169
1173
  <Show when={selectable() === true}>
1170
1174
  <div
1171
1175
  class={featureCellBodyClickableClass}
@@ -1185,7 +1189,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
1185
1189
  </Show>
1186
1190
  }
1187
1191
  >
1188
- {/* multi 모드 */}
1192
+ {/* multi mode */}
1189
1193
  <div
1190
1194
  class={featureCellBodyClickableClass}
1191
1195
  onClick={(e) => {
@@ -1219,7 +1223,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
1219
1223
  );
1220
1224
  })()}
1221
1225
  </Show>
1222
- {/* 드래그 재정렬 기능 컬럼 바디 */}
1226
+ {/* Drag reorder feature column body cell */}
1223
1227
  <Show when={hasReorderFeature()}>
1224
1228
  <td
1225
1229
  class={twMerge(
@@ -10,7 +10,7 @@ export function isDataSheetColumnDef(value: unknown): value is DataSheetColumnDe
10
10
  );
11
11
  }
12
12
 
13
- /* eslint-disable solid/reactivity -- plain object 반환 패턴으로 reactive context 불필요 */
13
+ /* eslint-disable solid/reactivity -- plain object return pattern does not require reactive context */
14
14
  export function DataSheetColumn<TItem>(props: DataSheetColumnProps<TItem>): JSX.Element {
15
15
  return {
16
16
  __type: "sheet-column",
@@ -35,7 +35,7 @@ export interface DataSheetConfigDialogProps {
35
35
  export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (props) => {
36
36
  const dialog = useDialogInstance<DataSheetConfig>();
37
37
 
38
- /* eslint-disable solid/reactivity -- 모달 props 마운트 번만 사용되는 정적 */
38
+ /* eslint-disable solid/reactivity -- modal props are static values only used once at mount time */
39
39
  const initialItems: EditColumnItem[] = props.columnInfos
40
40
  .filter((info) => !info.collapse)
41
41
  .map((info) => {
@@ -105,7 +105,7 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
105
105
  }
106
106
 
107
107
  function handleReset(): void {
108
- if (!confirm("모든 시트 설정을 초기화하시겠습니까?")) return;
108
+ if (!confirm("Are you sure you want to reset all sheet settings?")) return;
109
109
  dialog?.close({ columnRecord: {} });
110
110
  }
111
111
 
@@ -115,13 +115,13 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
115
115
  <DataSheet items={editItems} inset hideConfigBar onItemsReorder={handleReorder}>
116
116
  <DataSheet.Column<EditColumnItem>
117
117
  key="header"
118
- header="컬럼"
118
+ header="Column"
119
119
  class="px-2 py-1"
120
120
  sortable={false}
121
121
  >
122
122
  {(ctx) => ctx.item.headerText}
123
123
  </DataSheet.Column>
124
- <DataSheet.Column<EditColumnItem> key="fixed" header="고정" sortable={false}>
124
+ <DataSheet.Column<EditColumnItem> key="fixed" header="Fixed" sortable={false}>
125
125
  {(ctx) => (
126
126
  <Checkbox
127
127
  inset
@@ -130,7 +130,7 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
130
130
  />
131
131
  )}
132
132
  </DataSheet.Column>
133
- <DataSheet.Column<EditColumnItem> key="hidden" header="숨김" sortable={false}>
133
+ <DataSheet.Column<EditColumnItem> key="hidden" header="Hidden" sortable={false}>
134
134
  {(ctx) => (
135
135
  <Checkbox
136
136
  inset
@@ -139,7 +139,7 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
139
139
  />
140
140
  )}
141
141
  </DataSheet.Column>
142
- <DataSheet.Column<EditColumnItem> key="width" header="너비" sortable={false}>
142
+ <DataSheet.Column<EditColumnItem> key="width" header="Width" sortable={false}>
143
143
  {(ctx) => (
144
144
  <TextInput
145
145
  value={ctx.item.width}
@@ -154,12 +154,12 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
154
154
 
155
155
  <div class={footerClass}>
156
156
  <Button onClick={handleReset} theme="warning" variant="solid">
157
- 초기화
157
+ Reset
158
158
  </Button>
159
159
  <div class={footerActionsClass}>
160
- <Button onClick={() => dialog?.close(undefined)}>취소</Button>
160
+ <Button onClick={() => dialog?.close(undefined)}>Cancel</Button>
161
161
  <Button onClick={handleOk} theme="primary" variant="solid">
162
- 확인
162
+ Confirm
163
163
  </Button>
164
164
  </div>
165
165
  </div>
@@ -15,7 +15,7 @@ export function buildHeaderTable<TItem>(
15
15
  const maxDepth = Math.max(...columns.map((c) => c.header.length));
16
16
  if (maxDepth === 0) return [];
17
17
 
18
- // occupied[r][c] = true이면 이미 다른 셀의 병합 영역
18
+ // occupied[r][c] = true indicates already merged area of another cell
19
19
  const occupied: boolean[][] = Array.from({ length: maxDepth }, () =>
20
20
  Array.from({ length: columns.length }, () => false),
21
21
  );
@@ -23,7 +23,7 @@ export function buildHeaderTable<TItem>(
23
23
  Array.from({ length: columns.length }, () => null),
24
24
  );
25
25
 
26
- // 컬럼의 헤더를 maxDepth까지 패딩
26
+ // Pad header of each column to maxDepth
27
27
  const padded = columns.map((col) => {
28
28
  const h = col.header;
29
29
  const result: string[] = [];
@@ -38,10 +38,10 @@ export function buildHeaderTable<TItem>(
38
38
  if (occupied[r][c]) continue;
39
39
 
40
40
  const text = padded[c][r];
41
- // 원본 header 길이 기반으로 판별: 현재 행이 원본 header 마지막 레벨 이상이면 leaf
41
+ // Determined based on original header length: if current row is at or beyond the last level of original header, it's a leaf
42
42
  const isLastRow = r >= columns[c].header.length - 1;
43
43
 
44
- // colspan: 같은 행에서 같은 텍스트 + 같은 상위 그룹 + 고정 경계를 넘지 않음
44
+ // colspan: same text in same row + same parent group + does not cross fixed boundary
45
45
  let colspan = 1;
46
46
  if (!isLastRow) {
47
47
  const startFixed = columns[c].fixed;
@@ -56,7 +56,7 @@ export function buildHeaderTable<TItem>(
56
56
  }
57
57
  }
58
58
 
59
- // rowspan: isLastRow이면 남은 깊이만큼
59
+ // rowspan: if isLastRow, span the remaining depth
60
60
  const rowspan = isLastRow ? maxDepth - r : 1;
61
61
 
62
62
  const col = columns[c];
@@ -72,7 +72,7 @@ export function buildHeaderTable<TItem>(
72
72
  headerContent: isLastRow ? col.headerContent : undefined,
73
73
  };
74
74
 
75
- // 병합 영역 마킹
75
+ // Mark merged area
76
76
  for (let dr = 0; dr < rowspan; dr++) {
77
77
  for (let dc = 0; dc < colspan; dc++) {
78
78
  if (dr === 0 && dc === 0) continue;
@@ -85,7 +85,7 @@ export function buildHeaderTable<TItem>(
85
85
  return table;
86
86
  }
87
87
 
88
- // 같은 병합 그룹에 속하는지 확인 ( 0~endRow까지 같은 텍스트 시퀀스)
88
+ // Check if belongs to same merge group (same text sequence from row 0 to endRow)
89
89
  function isSameGroup(
90
90
  padded: string[][],
91
91
  colA: number,
@@ -1,46 +1,46 @@
1
1
  import type { JSX } from "solid-js";
2
2
 
3
3
  export interface DataSheetProps<TItem> {
4
- // 데이터
4
+ // Data
5
5
  items?: TItem[];
6
- // 설정
6
+ // Config
7
7
  persistKey?: string;
8
8
  hideConfigBar?: boolean;
9
9
  inset?: boolean;
10
10
  contentStyle?: JSX.CSSProperties | string;
11
11
 
12
- // 정렬
12
+ // Sorting
13
13
  sorts?: SortingDef[];
14
14
  onSortsChange?: (sorts: SortingDef[]) => void;
15
15
  autoSort?: boolean;
16
16
 
17
- // 페이지네이션
17
+ // Pagination
18
18
  page?: number;
19
19
  onPageChange?: (page: number) => void;
20
20
  totalPageCount?: number;
21
21
  itemsPerPage?: number;
22
22
  displayPageCount?: number;
23
23
 
24
- // 선택
24
+ // Selection
25
25
  selectMode?: "single" | "multiple";
26
26
  selectedItems?: TItem[];
27
27
  onSelectedItemsChange?: (items: TItem[]) => void;
28
28
  autoSelect?: "click";
29
29
  isItemSelectable?: (item: TItem) => boolean | string;
30
30
 
31
- // 트리 확장
31
+ // Tree expansion
32
32
  expandedItems?: TItem[];
33
33
  onExpandedItemsChange?: (items: TItem[]) => void;
34
34
  getChildren?: (item: TItem, index: number) => TItem[] | undefined;
35
35
 
36
- // 스타일
36
+ // Cell styling
37
37
  cellClass?: (item: TItem, colKey: string) => string | undefined;
38
38
  cellStyle?: (item: TItem, colKey: string) => string | undefined;
39
39
 
40
- // 재정렬
40
+ // Reordering
41
41
  onItemsReorder?: (event: DataSheetReorderEvent<TItem>) => void;
42
42
 
43
- // 기타
43
+ // Other
44
44
  class?: string;
45
45
  children: JSX.Element;
46
46
  }
@@ -64,9 +64,9 @@ export interface DataSheetColumnProps<TItem> {
64
64
 
65
65
  export interface DataSheetCellContext<TItem> {
66
66
  item: TItem;
67
- /** 소속 배열 위치 (루트: items[], 자식: parent.children[]) */
67
+ /** Position within belonging array (root: items[], children: parent.children[]) */
68
68
  index: number;
69
- /** 플랫 표시 위치 (현재 페이지 순번) */
69
+ /** Flat display row position (sequence number within current page) */
70
70
  row: number;
71
71
  depth: number;
72
72
  }
@@ -119,26 +119,26 @@ export interface HeaderDef {
119
119
 
120
120
  export interface FlatItem<TItem> {
121
121
  item: TItem;
122
- /** 소속 배열 위치 (루트: items[], 자식: parent.children[]) */
122
+ /** Position within belonging array (root: items[], children: parent.children[]) */
123
123
  index: number;
124
- /** 플랫 표시 위치 (현재 페이지 순번) */
124
+ /** Flat display row position (sequence number within current page) */
125
125
  row: number;
126
126
  depth: number;
127
127
  hasChildren: boolean;
128
128
  parent?: TItem;
129
129
  }
130
130
 
131
- // 드래그 드롭 위치
131
+ // Drag and drop position
132
132
  export type DataSheetDragPosition = "before" | "after" | "inside";
133
133
 
134
- // 재정렬 이벤트
134
+ // Reorder event
135
135
  export interface DataSheetReorderEvent<TItem> {
136
136
  item: TItem;
137
137
  targetItem: TItem;
138
138
  position: DataSheetDragPosition;
139
139
  }
140
140
 
141
- // 설정 모달에 전달할 컬럼 정보
141
+ // Column information passed to config modal
142
142
  export interface DataSheetConfigColumnInfo {
143
143
  key: string;
144
144
  header: string[];