@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
@@ -1,17 +1,17 @@
1
1
  import { onCleanup, onMount, type ParentComponent } from "solid-js";
2
2
 
3
3
  /**
4
- * 컨트롤의 value를 클립보드 복사에 포함시키는 Provider
4
+ * Provider that includes form control values in clipboard copy.
5
5
  *
6
6
  * @remarks
7
- * 브라우저 기본 동작에서는 드래그 선택 복사 시 `<input>`, `<textarea>`, `<select>`의
8
- * 값이 포함되지 않는 문제를 해결한다.
7
+ * Fixes the browser default behavior where `<input>`, `<textarea>`, `<select>` values
8
+ * are not included when copying after drag selection.
9
9
  *
10
10
  * - `<input type="text|number|...">` → `.value`
11
11
  * - `<textarea>` → `.value`
12
- * - `<select>` → 선택된 옵션 텍스트
12
+ * - `<select>` → selected option text
13
13
  * - `<input type="checkbox|radio">` → `.checked` ? "Y" : ""
14
- * - 테이블 내에서는 간 탭(`\t`), 간 개행(`\n`) 구분 (Excel 호환)
14
+ * - Within tables: tab (`\t`) between cells, newline (`\n`) between rows (Excel compatible)
15
15
  */
16
16
  export const ClipboardProvider: ParentComponent = (props) => {
17
17
  onMount(() => {
@@ -35,10 +35,10 @@ export const ClipboardProvider: ParentComponent = (props) => {
35
35
  };
36
36
 
37
37
  /**
38
- * Selection Range 내의 텍스트를 추출한다.
39
- * 컨트롤은 value로 치환하고, 테이블 구조는 TSV 형식으로 변환한다.
38
+ * Extracts text from a Selection Range.
39
+ * Substitutes form controls with their values and converts table structures to TSV format.
40
40
  *
41
- * @returns 추출된 텍스트. 컨트롤이 없으면 `null` (브라우저 기본 동작 유지)
41
+ * @returns Extracted text. Returns `null` if no form controls are present (preserves browser default behavior)
42
42
  */
43
43
  function extractTextFromRange(range: Range): string | null {
44
44
  const root =
@@ -47,7 +47,7 @@ function extractTextFromRange(range: Range): string | null {
47
47
  : range.commonAncestorContainer.parentElement;
48
48
  if (!root) return null;
49
49
 
50
- // 선택 범위에 컨트롤이 없으면 브라우저 기본 동작 사용
50
+ // Use browser default behavior if no form controls in selection range
51
51
  const formSelector =
52
52
  'input:not([type=hidden]), textarea, select, [role="checkbox"], [role="radio"]';
53
53
  const hasFormElements = [...root.querySelectorAll(formSelector)].some((el) =>
@@ -60,7 +60,7 @@ function extractTextFromRange(range: Range): string | null {
60
60
  const walk = (node: Node) => {
61
61
  if (!range.intersectsNode(node)) return;
62
62
 
63
- // ARIA checkbox/radio: role="checkbox" 또는 role="radio" 요소
63
+ // ARIA checkbox/radio: elements with role="checkbox" or role="radio"
64
64
  if (node instanceof Element) {
65
65
  const role = node.getAttribute("role");
66
66
  if (role === "checkbox" || role === "radio") {
@@ -69,7 +69,7 @@ function extractTextFromRange(range: Range): string | null {
69
69
  }
70
70
  }
71
71
 
72
- // 컨트롤: value 추출
72
+ // Form control: extract value
73
73
  if (node instanceof HTMLInputElement) {
74
74
  if (node.type === "hidden") return;
75
75
  if (node.type === "checkbox" || node.type === "radio") {
@@ -81,7 +81,7 @@ function extractTextFromRange(range: Range): string | null {
81
81
  }
82
82
  if (node instanceof HTMLTextAreaElement) {
83
83
  const v = node.value;
84
- // 개행 포함 큰따옴표로 감싸서 Excel 줄바꿈 유지
84
+ // Wrap in double quotes when containing newlines to preserve line breaks within Excel cells
85
85
  parts.push(v.includes("\n") ? `"${v.replace(/"/g, '""')}"` : v);
86
86
  return;
87
87
  }
@@ -92,9 +92,9 @@ function extractTextFromRange(range: Range): string | null {
92
92
  return;
93
93
  }
94
94
 
95
- // 텍스트 노드
95
+ // Text node
96
96
  if (node.nodeType === Node.TEXT_NODE) {
97
- // 숨겨진 텍스트 건너뛰기 (dual-element overlay 패턴 )
97
+ // Skip hidden text (dual-element overlay pattern, etc.)
98
98
  const parent = node.parentElement;
99
99
  if (parent) {
100
100
  const style = getComputedStyle(parent);
@@ -115,7 +115,7 @@ function extractTextFromRange(range: Range): string | null {
115
115
  return;
116
116
  }
117
117
 
118
- // Element 아닌 노드
118
+ // Non-Element node
119
119
  if (!(node instanceof Element)) {
120
120
  for (const child of node.childNodes) walk(child);
121
121
  return;
@@ -127,7 +127,7 @@ function extractTextFromRange(range: Range): string | null {
127
127
  return;
128
128
  }
129
129
 
130
- // 테이블 행: 구분, 개행
130
+ // Table row: tab-separated cells, newline at end of row
131
131
  if (node.tagName === "TR") {
132
132
  let firstCell = true;
133
133
  for (const child of node.childNodes) {
@@ -142,7 +142,7 @@ function extractTextFromRange(range: Range): string | null {
142
142
  return;
143
143
  }
144
144
 
145
- // 기본: 자식 순회
145
+ // Default: traverse children
146
146
  for (const child of node.childNodes) {
147
147
  walk(child);
148
148
  }
@@ -154,11 +154,11 @@ function extractTextFromRange(range: Range): string | null {
154
154
  }
155
155
 
156
156
  /**
157
- * input value 로캘 형식으로 변환한다.
157
+ * Converts input value to locale format.
158
158
  * - `date` → `toLocaleDateString()`
159
159
  * - `time` → `toLocaleTimeString()`
160
160
  * - `datetime-local` → `toLocaleString()`
161
- * - 원래 그대로
161
+ * - Othersoriginal value as-is
162
162
  */
163
163
  function formatInputValue(input: HTMLInputElement): string {
164
164
  const { type, value } = input;
@@ -1,35 +1,35 @@
1
1
  import { createContext, useContext, type ParentComponent } from "solid-js";
2
2
 
3
3
  /**
4
- * 전역 설정
4
+ * App-wide configuration.
5
5
  */
6
6
  export interface AppConfig {
7
7
  /**
8
- * 클라이언트 식별자 (저장소 key prefix로 사용)
8
+ * Client identifier (used as storage key prefix)
9
9
  */
10
10
  clientName: string;
11
11
  }
12
12
 
13
13
  /**
14
- * 전역 설정 Context
14
+ * App-wide configuration Context.
15
15
  */
16
16
  export const ConfigContext = createContext<AppConfig>();
17
17
 
18
18
  /**
19
- * 전역 설정에 접근하는
19
+ * Hook to access app-wide configuration.
20
20
  *
21
- * @throws ConfigProvider 없으면 에러 발생
21
+ * @throws Throws an error if ConfigProvider is not present
22
22
  */
23
23
  export function useConfig(): AppConfig {
24
24
  const context = useContext(ConfigContext);
25
25
  if (!context) {
26
- throw new Error("useConfig ConfigProvider 내부에서만 사용할 있습니다");
26
+ throw new Error("useConfig can only be used inside ConfigProvider");
27
27
  }
28
28
  return context;
29
29
  }
30
30
 
31
31
  /**
32
- * 전역 설정 Provider
32
+ * App-wide configuration Provider.
33
33
  *
34
34
  * @example
35
35
  * ```tsx
@@ -40,7 +40,7 @@ export function useConfig(): AppConfig {
40
40
  */
41
41
  export const ConfigProvider: ParentComponent<{ clientName: string }> = (props) => {
42
42
  return (
43
- // eslint-disable-next-line solid/reactivity -- clientName 초기 설정값으로 변경되지 않음
43
+ // eslint-disable-next-line solid/reactivity -- clientName is an initial config value that does not change
44
44
  <ConfigContext.Provider value={{ clientName: props.clientName }}>
45
45
  {props.children}
46
46
  </ConfigContext.Provider>
@@ -2,11 +2,11 @@ import { onCleanup, type ParentComponent } from "solid-js";
2
2
  import { useLogger } from "../hooks/useLogger";
3
3
 
4
4
  /**
5
- * 전역 에러 캡처 Provider
5
+ * Global error capture Provider.
6
6
  *
7
7
  * @remarks
8
- * window.onerror, unhandledrejection 이벤트를 캡처하여 useLogger를 통해 로깅한다.
9
- * LoggerProvider가 없으면 consola fallback.
8
+ * Captures window.onerror and unhandledrejection events and logs them via useLogger.
9
+ * Falls back to consola if LoggerProvider is not present.
10
10
  */
11
11
  export const ErrorLoggerProvider: ParentComponent = (props) => {
12
12
  const logger = useLogger();
@@ -2,11 +2,11 @@ import { type Accessor, createContext, createSignal, type ParentComponent } from
2
2
  import { consola } from "consola";
3
3
 
4
4
  /**
5
- * 로그 어댑터 인터페이스
5
+ * Log adapter interface.
6
6
  *
7
7
  * @remarks
8
- * - `useLogger`에서 사용하는 로그 전송 어댑터 (DB, 서버 )
9
- * - adapter 설정되면 consola 대신 adapter 사용됨
8
+ * - Log transport adapter used by `useLogger` (DB, server, etc.)
9
+ * - When an adapter is set, only the adapter is used instead of consola
10
10
  */
11
11
  export interface LogAdapter {
12
12
  write(severity: "error" | "warn" | "info" | "log", ...data: any[]): Promise<void> | void;
@@ -17,11 +17,11 @@ const defaultLogAdapter: LogAdapter = {
17
17
  };
18
18
 
19
19
  /**
20
- * 로그 어댑터 Context 값
20
+ * Logger context value.
21
21
  *
22
22
  * @remarks
23
- * - `adapter`: 현재 설정된 LogAdapter (signal). 기본값은 consola 기반 adapter
24
- * - `configure`: decorator function으로 adapter 설정/체이닝하는 함수
23
+ * - `adapter`: Currently configured LogAdapter (signal). Defaults to consola-based adapter
24
+ * - `configure`: Function that sets/chains adapter via decorator function
25
25
  */
26
26
  export interface LoggerContextValue {
27
27
  adapter: Accessor<LogAdapter>;
@@ -29,20 +29,20 @@ export interface LoggerContextValue {
29
29
  }
30
30
 
31
31
  /**
32
- * 로그 어댑터 Context
32
+ * Log adapter Context.
33
33
  *
34
34
  * @remarks
35
- * Provider가 없으면 `undefined` (useLogger에서 consola 기본 adapter 사용)
35
+ * Returns `undefined` without Provider (useLogger uses consola default adapter)
36
36
  */
37
37
  export const LoggerContext = createContext<LoggerContextValue>();
38
38
 
39
39
  /**
40
- * 로그 어댑터 Provider
40
+ * Log adapter Provider.
41
41
  *
42
42
  * @remarks
43
- * - prop 없이 사용. adapter는 `useLogger().configure()`로 나중에 주입
44
- * - 기본값은 consola 기반 adapter
45
- * - configure decorator function 받아 기존 adapter를 감싸거나 교체
43
+ * - Used without props. Adapter is injected later via `useLogger().configure()`
44
+ * - Defaults to consola-based adapter
45
+ * - configure accepts a decorator function to wrap or replace the existing adapter
46
46
  *
47
47
  * @example
48
48
  * ```tsx
@@ -50,7 +50,7 @@ export const LoggerContext = createContext<LoggerContextValue>();
50
50
  * <App />
51
51
  * </LoggerProvider>
52
52
  *
53
- * // 자식 컴포넌트에서 decorator 설정:
53
+ * // Configure with a decorator in a child component:
54
54
  * useLogger().configure((origin) => ({
55
55
  * write: (...args) => {
56
56
  * origin.write(...args);
@@ -4,13 +4,13 @@ import { useNotification } from "../components/feedback/notification/Notificatio
4
4
  const UPDATE_INTERVAL = 5 * 60 * 1000; // 5 minutes
5
5
 
6
6
  /**
7
- * PWA Service Worker 업데이트 감지 Provider
7
+ * PWA Service Worker update detection Provider.
8
8
  *
9
9
  * @remarks
10
- * 5분마다 SW 업데이트를 폴링하며, 버전 감지 알림을 표시한다.
11
- * NotificationProvider 내부에서 사용해야 한다.
10
+ * Polls for SW updates every 5 minutes and displays a notification when a new version is detected.
11
+ * Must be used inside NotificationProvider.
12
12
  *
13
- * navigator.serviceWorker 없거나 등록된 SW 없으면 graceful no-op.
13
+ * Graceful no-op if navigator.serviceWorker is unavailable or no SW is registered.
14
14
  */
15
15
  export const PwaUpdateProvider: ParentComponent = (props) => {
16
16
  if (typeof navigator !== "undefined" && "serviceWorker" in navigator) {
@@ -53,9 +53,9 @@ export const PwaUpdateProvider: ParentComponent = (props) => {
53
53
  });
54
54
 
55
55
  function promptUpdate(waitingSW: ServiceWorker): void {
56
- notification.info("앱이 업데이트되었습니다", "새로고침하면 최신 버전을 사용할 있습니다", {
56
+ notification.info("App updated", "Refresh to use the latest version", {
57
57
  action: {
58
- label: "새로고침",
58
+ label: "Refresh",
59
59
  onClick: () => {
60
60
  waitingSW.postMessage({ type: "SKIP_WAITING" });
61
61
  },
@@ -2,31 +2,31 @@ import { createContext, useContext } from "solid-js";
2
2
  import type { ServiceClient, ServiceConnectionConfig } from "@simplysm/service-client";
3
3
 
4
4
  /**
5
- * WebSocket 서비스 클라이언트 Context
5
+ * WebSocket service client context value.
6
6
  */
7
7
  export interface ServiceClientContextValue {
8
- /** WebSocket 연결 열기 (key 생략 "default") */
8
+ /** Open a WebSocket connection (defaults to "default" if key is omitted) */
9
9
  connect: (key?: string, options?: Partial<ServiceConnectionConfig>) => Promise<void>;
10
- /** 연결 닫기 */
10
+ /** Close a connection */
11
11
  close: (key?: string) => Promise<void>;
12
- /** 연결된 클라이언트 인스턴스 가져오기 (연결되지 않은 key 에러 발생) */
12
+ /** Get a connected client instance (throws if the key is not connected) */
13
13
  get: (key?: string) => ServiceClient;
14
- /** 연결 상태 확인 */
14
+ /** Check connection status */
15
15
  isConnected: (key?: string) => boolean;
16
16
  }
17
17
 
18
- /** WebSocket 서비스 클라이언트 Context */
18
+ /** WebSocket service client Context */
19
19
  export const ServiceClientContext = createContext<ServiceClientContextValue>();
20
20
 
21
21
  /**
22
- * WebSocket 서비스 클라이언트에 접근하는
22
+ * Hook to access the WebSocket service client.
23
23
  *
24
- * @throws ServiceClientProvider 없으면 에러 발생
24
+ * @throws Throws an error if ServiceClientProvider is not present
25
25
  */
26
26
  export function useServiceClient(): ServiceClientContextValue {
27
27
  const context = useContext(ServiceClientContext);
28
28
  if (!context) {
29
- throw new Error("useServiceClient ServiceClientProvider 내부에서만 사용할 있습니다");
29
+ throw new Error("useServiceClient can only be used inside ServiceClientProvider");
30
30
  }
31
31
  return context;
32
32
  }
@@ -9,14 +9,14 @@ import { useConfig } from "./ConfigContext";
9
9
  import { useNotification } from "../components/feedback/notification/NotificationContext";
10
10
 
11
11
  /**
12
- * WebSocket 서비스 클라이언트 Provider
12
+ * WebSocket service client Provider.
13
13
  *
14
14
  * @remarks
15
- * - ConfigProvider와 NotificationProvider 내부에서 사용해야
16
- * - key 기반 다중 연결 관리
17
- * - 요청/응답 진행률을 NotificationProvider 알림으로 표시
18
- * - host, port, ssl 미지정 window.location에서 자동 추론
19
- * - cleanup 모든 연결 자동 종료
15
+ * - Must be used inside ConfigProvider and NotificationProvider
16
+ * - Key-based multi-connection management
17
+ * - Displays request/response progress as NotificationProvider alerts
18
+ * - Auto-infers host, port, ssl from window.location when not specified
19
+ * - Automatically closes all connections on cleanup
20
20
  *
21
21
  * @example
22
22
  * ```tsx
@@ -53,9 +53,9 @@ export const ServiceClientProvider: ParentComponent = (props) => {
53
53
  if (clientMap.has(resolvedKey)) {
54
54
  const existing = clientMap.get(resolvedKey)!;
55
55
  if (!existing.connected) {
56
- throw new Error("이미 연결이 끊긴 클라이언트와 같은 키로 연결을 시도하였습니다.");
56
+ throw new Error("Attempted to connect with the same key as a disconnected client.");
57
57
  } else {
58
- throw new Error("이미 연결된 클라이언트와 같은 키로 연결을 시도하였습니다.");
58
+ throw new Error("Attempted to connect with the same key as an already connected client.");
59
59
  }
60
60
  }
61
61
 
@@ -70,12 +70,12 @@ export const ServiceClientProvider: ParentComponent = (props) => {
70
70
  ...options,
71
71
  });
72
72
 
73
- // 요청 진행률 이벤트
73
+ // Request progress event
74
74
  client.on("request-progress", (state) => {
75
75
  const existing = reqProgressMap.get(state.uuid);
76
76
 
77
77
  if (existing == null) {
78
- const id = notification.info("요청을 전송하는 중입니다.", "0%");
78
+ const id = notification.info("Sending request", "0%");
79
79
  reqProgressMap.set(state.uuid, id);
80
80
  } else {
81
81
  const percent = Math.round((state.completedSize / state.totalSize) * 100);
@@ -88,7 +88,7 @@ export const ServiceClientProvider: ParentComponent = (props) => {
88
88
  notification.update(
89
89
  id,
90
90
  {
91
- title: "요청 전송 완료",
91
+ title: "Request transmission completed",
92
92
  message: "100%",
93
93
  },
94
94
  { renotify: true },
@@ -98,12 +98,12 @@ export const ServiceClientProvider: ParentComponent = (props) => {
98
98
  }
99
99
  });
100
100
 
101
- // 응답 진행률 이벤트
101
+ // Response progress event
102
102
  client.on("response-progress", (state) => {
103
103
  const existing = resProgressMap.get(state.uuid);
104
104
 
105
105
  if (existing == null) {
106
- const id = notification.info("응답을 전송받는 중입니다.", "0%");
106
+ const id = notification.info("Receiving response", "0%");
107
107
  resProgressMap.set(state.uuid, id);
108
108
  } else {
109
109
  const percent = Math.round((state.completedSize / state.totalSize) * 100);
@@ -116,7 +116,7 @@ export const ServiceClientProvider: ParentComponent = (props) => {
116
116
  notification.update(
117
117
  id,
118
118
  {
119
- title: "응답 전송 완료",
119
+ title: "Response reception completed",
120
120
  message: "100%",
121
121
  },
122
122
  { renotify: true },
@@ -143,7 +143,7 @@ export const ServiceClientProvider: ParentComponent = (props) => {
143
143
  const resolvedKey = key ?? "default";
144
144
  const client = clientMap.get(resolvedKey);
145
145
  if (!client) {
146
- throw new Error(`연결하지 않은 클라이언트 키입니다. ${resolvedKey}`);
146
+ throw new Error(`Client key not connected: ${resolvedKey}`);
147
147
  }
148
148
  return client;
149
149
  };
@@ -7,11 +7,11 @@ import {
7
7
  } from "solid-js";
8
8
 
9
9
  /**
10
- * 커스텀 동기화 저장소 어댑터 인터페이스
10
+ * Custom sync storage adapter interface.
11
11
  *
12
12
  * @remarks
13
- * - 동기 저장소: `localStorage`, `sessionStorage` 그대로 전달 가능
14
- * - 비동기 저장소: `getItem`이 `Promise`를 반환하는 구현체 전달
13
+ * - Sync storage: can pass `localStorage`, `sessionStorage`, etc. directly
14
+ * - Async storage: pass an implementation where `getItem` returns a `Promise`
15
15
  */
16
16
  export interface StorageAdapter {
17
17
  getItem(key: string): string | null | Promise<string | null>;
@@ -20,7 +20,7 @@ export interface StorageAdapter {
20
20
  }
21
21
 
22
22
  /**
23
- * 기본 localStorage 기반 어댑터
23
+ * Default localStorage-based adapter.
24
24
  */
25
25
  const defaultStorageAdapter: StorageAdapter = {
26
26
  getItem: (key) => localStorage.getItem(key),
@@ -29,11 +29,11 @@ const defaultStorageAdapter: StorageAdapter = {
29
29
  };
30
30
 
31
31
  /**
32
- * 동기화 저장소 Context
32
+ * Sync storage context value.
33
33
  *
34
34
  * @remarks
35
- * - `adapter`: 현재 설정된 StorageAdapter (signal). 기본값은 localStorage 기반 어댑터
36
- * - `configure`: decorator 함수를 받아 기존 adapter 감싸서 adapter를 설정하는 함수
35
+ * - `adapter`: Currently configured StorageAdapter (signal). Defaults to localStorage-based adapter
36
+ * - `configure`: Function that accepts a decorator function to wrap the existing adapter into a new one
37
37
  */
38
38
  export interface SyncStorageContextValue {
39
39
  adapter: Accessor<StorageAdapter>;
@@ -41,28 +41,28 @@ export interface SyncStorageContextValue {
41
41
  }
42
42
 
43
43
  /**
44
- * 동기화 저장소 Context
44
+ * Sync storage Context.
45
45
  *
46
46
  * @remarks
47
- * Provider가 없으면 `undefined` (useSyncConfig에서 localStorage로 fallback)
47
+ * Returns `undefined` without Provider (useSyncConfig falls back to localStorage)
48
48
  */
49
49
  export const SyncStorageContext = createContext<SyncStorageContextValue>();
50
50
 
51
51
  /**
52
- * 동기화 저장소 Context에 접근하는
52
+ * Hook to access the sync storage Context.
53
53
  *
54
- * @returns SyncStorageContextValue 또는 undefined (Provider 없으면)
54
+ * @returns SyncStorageContextValue or undefined (if Provider is not present)
55
55
  */
56
56
  export function useSyncStorage(): SyncStorageContextValue | undefined {
57
57
  return useContext(SyncStorageContext);
58
58
  }
59
59
 
60
60
  /**
61
- * 동기화 저장소 Provider
61
+ * Sync storage Provider.
62
62
  *
63
63
  * @remarks
64
- * - prop 없이 사용. 기본적으로 localStorage 기반 어댑터가 설정됨
65
- * - `configure()`로 decorator 함수를 전달하여 기존 adapter를 감싸거나 교체 가능
64
+ * - Used without props. localStorage-based adapter is set by default
65
+ * - Use `configure()` to pass a decorator function to wrap or replace the existing adapter
66
66
  *
67
67
  * @example
68
68
  * ```tsx
@@ -70,7 +70,7 @@ export function useSyncStorage(): SyncStorageContextValue | undefined {
70
70
  * <App />
71
71
  * </SyncStorageProvider>
72
72
  *
73
- * // 자식 컴포넌트에서 decorator 패턴으로 adapter 커스터마이징:
73
+ * // Customize adapter with decorator pattern in a child component:
74
74
  * useSyncStorage()!.configure((origin) => ({
75
75
  * getItem: (key) => myCustomGetItem(key),
76
76
  * setItem: origin.setItem,
@@ -1,5 +1,6 @@
1
1
  import { type ParentComponent } from "solid-js";
2
2
  import { ConfigProvider } from "./ConfigContext";
3
+ import { I18nProvider } from "./i18n/I18nContext";
3
4
  import { SyncStorageProvider } from "./SyncStorageContext";
4
5
  import { LoggerProvider } from "./LoggerContext";
5
6
  import { NotificationProvider } from "../components/feedback/notification/NotificationProvider";
@@ -21,17 +22,18 @@ export const SystemProvider: ParentComponent<{
21
22
  }> = (props) => {
22
23
  return (
23
24
  <ConfigProvider clientName={props.clientName}>
24
- <SyncStorageProvider>
25
- <LoggerProvider>
26
- <NotificationProvider>
27
- <NotificationBanner />
28
- <ErrorLoggerProvider>
29
- <PwaUpdateProvider>
30
- <ClipboardProvider>
31
- <ThemeProvider>
32
- <ServiceClientProvider>
33
- <SharedDataProvider>
34
- <BusyProvider variant={props.busyVariant}>{props.children}</BusyProvider>
25
+ <I18nProvider>
26
+ <SyncStorageProvider>
27
+ <LoggerProvider>
28
+ <NotificationProvider>
29
+ <NotificationBanner />
30
+ <ErrorLoggerProvider>
31
+ <PwaUpdateProvider>
32
+ <ClipboardProvider>
33
+ <ThemeProvider>
34
+ <ServiceClientProvider>
35
+ <SharedDataProvider>
36
+ <BusyProvider variant={props.busyVariant}>{props.children}</BusyProvider>
35
37
  </SharedDataProvider>
36
38
  </ServiceClientProvider>
37
39
  </ThemeProvider>
@@ -40,7 +42,8 @@ export const SystemProvider: ParentComponent<{
40
42
  </ErrorLoggerProvider>
41
43
  </NotificationProvider>
42
44
  </LoggerProvider>
43
- </SyncStorageProvider>
45
+ </SyncStorageProvider>
46
+ </I18nProvider>
44
47
  </ConfigProvider>
45
48
  );
46
49
  };