@simplysm/solid 13.0.69 → 13.0.70

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 (477) 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 +24 -24
  30. package/dist/components/disclosure/Tabs.js +1 -1
  31. package/dist/components/disclosure/Tabs.js.map +1 -1
  32. package/dist/components/disclosure/dialogZIndex.d.ts +7 -7
  33. package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -1
  34. package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
  35. package/dist/components/features/crud-detail/CrudDetail.js +19 -16
  36. package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
  37. package/dist/components/features/crud-sheet/CrudSheet.d.ts.map +1 -1
  38. package/dist/components/features/crud-sheet/CrudSheet.js +34 -28
  39. package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
  40. package/dist/components/features/data-select-button/DataSelectButton.d.ts +14 -14
  41. package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
  42. package/dist/components/features/data-select-button/DataSelectButton.js +27 -9
  43. package/dist/components/features/data-select-button/DataSelectButton.js.map +2 -2
  44. package/dist/components/features/permission-table/PermissionTable.d.ts +3 -3
  45. package/dist/components/features/permission-table/PermissionTable.d.ts.map +1 -1
  46. package/dist/components/features/permission-table/PermissionTable.js +6 -2
  47. package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
  48. package/dist/components/features/shared-data/SharedDataSelect.d.ts +12 -12
  49. package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
  50. package/dist/components/features/shared-data/SharedDataSelect.js +8 -2
  51. package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
  52. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts +10 -10
  53. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
  54. package/dist/components/features/shared-data/SharedDataSelectList.d.ts +23 -13
  55. package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
  56. package/dist/components/features/shared-data/SharedDataSelectList.js +219 -58
  57. package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
  58. package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts +15 -0
  59. package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts.map +1 -0
  60. package/dist/components/features/shared-data/SharedDataSelectListContext.js +27 -0
  61. package/dist/components/features/shared-data/SharedDataSelectListContext.js.map +6 -0
  62. package/dist/components/feedback/Progress.d.ts +1 -1
  63. package/dist/components/feedback/Progress.d.ts.map +1 -1
  64. package/dist/components/feedback/busy/BusyContainer.d.ts +2 -2
  65. package/dist/components/feedback/busy/BusyContainer.d.ts.map +1 -1
  66. package/dist/components/feedback/busy/BusyContext.d.ts +11 -11
  67. package/dist/components/feedback/busy/BusyContext.d.ts.map +1 -1
  68. package/dist/components/feedback/busy/BusyContext.js +1 -1
  69. package/dist/components/feedback/busy/BusyContext.js.map +1 -1
  70. package/dist/components/feedback/busy/BusyProvider.d.ts +6 -6
  71. package/dist/components/feedback/busy/BusyProvider.d.ts.map +1 -1
  72. package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -1
  73. package/dist/components/feedback/notification/NotificationBanner.js +7 -3
  74. package/dist/components/feedback/notification/NotificationBanner.js.map +2 -2
  75. package/dist/components/feedback/notification/NotificationBell.js +2 -2
  76. package/dist/components/feedback/notification/NotificationBell.js.map +1 -1
  77. package/dist/components/feedback/notification/NotificationContext.d.ts +22 -22
  78. package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -1
  79. package/dist/components/feedback/notification/NotificationContext.js +1 -1
  80. package/dist/components/feedback/notification/NotificationContext.js.map +1 -1
  81. package/dist/components/feedback/notification/NotificationProvider.d.ts +5 -5
  82. package/dist/components/feedback/notification/NotificationProvider.js +1 -1
  83. package/dist/components/feedback/notification/NotificationProvider.js.map +1 -1
  84. package/dist/components/feedback/print/PrintContext.js +1 -1
  85. package/dist/components/feedback/print/PrintContext.js.map +1 -1
  86. package/dist/components/form-control/DropdownTrigger.styles.d.ts +1 -1
  87. package/dist/components/form-control/DropdownTrigger.styles.d.ts.map +1 -1
  88. package/dist/components/form-control/ThemeToggle.d.ts +7 -7
  89. package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
  90. package/dist/components/form-control/ThemeToggle.js +3 -3
  91. package/dist/components/form-control/checkbox/Checkbox.js +1 -1
  92. package/dist/components/form-control/checkbox/CheckboxGroup.js +1 -1
  93. package/dist/components/form-control/checkbox/Radio.js +1 -1
  94. package/dist/components/form-control/checkbox/RadioGroup.js +1 -1
  95. package/dist/components/form-control/color-picker/ColorPicker.d.ts +12 -12
  96. package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
  97. package/dist/components/form-control/color-picker/ColorPicker.js +2 -2
  98. package/dist/components/form-control/combobox/Combobox.d.ts +22 -22
  99. package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
  100. package/dist/components/form-control/combobox/Combobox.js +2 -2
  101. package/dist/components/form-control/combobox/ComboboxContext.d.ts +4 -4
  102. package/dist/components/form-control/combobox/ComboboxContext.d.ts.map +1 -1
  103. package/dist/components/form-control/combobox/ComboboxContext.js +1 -1
  104. package/dist/components/form-control/combobox/ComboboxContext.js.map +1 -1
  105. package/dist/components/form-control/combobox/ComboboxItem.d.ts +3 -3
  106. package/dist/components/form-control/combobox/ComboboxItem.d.ts.map +1 -1
  107. package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts +14 -14
  108. package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts.map +1 -1
  109. package/dist/components/form-control/date-range-picker/DateRangePicker.js +20 -9
  110. package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
  111. package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -1
  112. package/dist/components/form-control/editor/EditorToolbar.js +65 -20
  113. package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
  114. package/dist/components/form-control/editor/RichTextEditor.d.ts +6 -6
  115. package/dist/components/form-control/editor/RichTextEditor.d.ts.map +1 -1
  116. package/dist/components/form-control/editor/RichTextEditor.js +1 -1
  117. package/dist/components/form-control/editor/editor.css +5 -5
  118. package/dist/components/form-control/field/DatePicker.d.ts +22 -22
  119. package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
  120. package/dist/components/form-control/field/DatePicker.js +4 -4
  121. package/dist/components/form-control/field/DatePicker.js.map +1 -1
  122. package/dist/components/form-control/field/DateTimePicker.d.ts +21 -21
  123. package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
  124. package/dist/components/form-control/field/DateTimePicker.js +4 -4
  125. package/dist/components/form-control/field/DateTimePicker.js.map +1 -1
  126. package/dist/components/form-control/field/FieldPlaceholder.d.ts +1 -1
  127. package/dist/components/form-control/field/FieldPlaceholder.d.ts.map +1 -1
  128. package/dist/components/form-control/field/NumberInput.d.ts +23 -23
  129. package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
  130. package/dist/components/form-control/field/NumberInput.js +4 -4
  131. package/dist/components/form-control/field/NumberInput.js.map +1 -1
  132. package/dist/components/form-control/field/TextInput.d.ts +25 -25
  133. package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
  134. package/dist/components/form-control/field/TextInput.js +5 -5
  135. package/dist/components/form-control/field/TextInput.js.map +1 -1
  136. package/dist/components/form-control/field/Textarea.d.ts +19 -19
  137. package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
  138. package/dist/components/form-control/field/Textarea.js +4 -4
  139. package/dist/components/form-control/field/Textarea.js.map +1 -1
  140. package/dist/components/form-control/field/TimePicker.d.ts +20 -20
  141. package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
  142. package/dist/components/form-control/field/TimePicker.js +4 -4
  143. package/dist/components/form-control/field/TimePicker.js.map +1 -1
  144. package/dist/components/form-control/numpad/Numpad.d.ts +11 -11
  145. package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -1
  146. package/dist/components/form-control/select/Select.d.ts +26 -26
  147. package/dist/components/form-control/select/Select.d.ts.map +1 -1
  148. package/dist/components/form-control/select/Select.js +34 -23
  149. package/dist/components/form-control/select/Select.js.map +2 -2
  150. package/dist/components/form-control/select/SelectContext.d.ts +7 -7
  151. package/dist/components/form-control/select/SelectContext.d.ts.map +1 -1
  152. package/dist/components/form-control/select/SelectContext.js +1 -1
  153. package/dist/components/form-control/select/SelectContext.js.map +1 -1
  154. package/dist/components/form-control/select/SelectItem.d.ts +4 -4
  155. package/dist/components/form-control/select/SelectItem.d.ts.map +1 -1
  156. package/dist/components/form-control/state-preset/StatePreset.js +8 -8
  157. package/dist/components/form-control/state-preset/StatePreset.js.map +1 -1
  158. package/dist/components/layout/FormTable.js +4 -4
  159. package/dist/components/layout/sidebar/Sidebar.d.ts +5 -5
  160. package/dist/components/layout/sidebar/SidebarContainer.d.ts +11 -11
  161. package/dist/components/layout/sidebar/SidebarContainer.d.ts.map +1 -1
  162. package/dist/components/layout/sidebar/SidebarContainer.js +6 -1
  163. package/dist/components/layout/sidebar/SidebarContainer.js.map +2 -2
  164. package/dist/components/layout/sidebar/SidebarContext.d.ts +7 -7
  165. package/dist/components/layout/sidebar/SidebarContext.js +1 -1
  166. package/dist/components/layout/sidebar/SidebarContext.js.map +1 -1
  167. package/dist/components/layout/sidebar/SidebarMenu.d.ts +11 -11
  168. package/dist/components/layout/sidebar/SidebarUser.d.ts +14 -14
  169. package/dist/components/layout/topbar/Topbar.d.ts +6 -6
  170. package/dist/components/layout/topbar/Topbar.d.ts.map +1 -1
  171. package/dist/components/layout/topbar/Topbar.js +11 -6
  172. package/dist/components/layout/topbar/Topbar.js.map +2 -2
  173. package/dist/components/layout/topbar/TopbarContainer.d.ts +6 -6
  174. package/dist/components/layout/topbar/TopbarContext.js +2 -2
  175. package/dist/components/layout/topbar/TopbarContext.js.map +1 -1
  176. package/dist/components/layout/topbar/TopbarMenu.d.ts +11 -11
  177. package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -1
  178. package/dist/components/layout/topbar/TopbarMenu.js +5 -1
  179. package/dist/components/layout/topbar/TopbarMenu.js.map +2 -2
  180. package/dist/components/layout/topbar/TopbarUser.d.ts +9 -9
  181. package/dist/directives/ripple.d.ts +5 -5
  182. package/dist/helpers/createAppStructure.d.ts.map +1 -1
  183. package/dist/helpers/createAppStructure.js +4 -1
  184. package/dist/helpers/createAppStructure.js.map +1 -1
  185. package/dist/helpers/createSlotComponent.d.ts +3 -3
  186. package/dist/helpers/mergeStyles.d.ts +8 -8
  187. package/dist/hooks/createControllableSignal.d.ts +10 -10
  188. package/dist/hooks/createControllableStore.d.ts +6 -6
  189. package/dist/hooks/createIMEHandler.d.ts +7 -7
  190. package/dist/hooks/createMountTransition.d.ts +4 -4
  191. package/dist/hooks/createSelectionGroup.js +1 -1
  192. package/dist/hooks/createSelectionGroup.js.map +1 -1
  193. package/dist/hooks/createSlotSignal.d.ts +2 -2
  194. package/dist/hooks/useLocalStorage.d.ts +11 -11
  195. package/dist/hooks/useLogger.d.ts +1 -1
  196. package/dist/hooks/useLogger.d.ts.map +1 -1
  197. package/dist/hooks/useLogger.js +1 -1
  198. package/dist/hooks/useLogger.js.map +1 -1
  199. package/dist/hooks/useRouterLink.d.ts +10 -10
  200. package/dist/hooks/useRouterLink.d.ts.map +1 -1
  201. package/dist/index.d.ts +2 -1
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +2 -1
  204. package/dist/index.js.map +1 -1
  205. package/dist/providers/ClipboardProvider.d.ts +5 -5
  206. package/dist/providers/ConfigContext.d.ts +6 -6
  207. package/dist/providers/ConfigContext.js +2 -2
  208. package/dist/providers/ConfigContext.js.map +1 -1
  209. package/dist/providers/ErrorLoggerProvider.d.ts +3 -3
  210. package/dist/providers/LoggerContext.d.ts +13 -13
  211. package/dist/providers/PwaUpdateProvider.d.ts +4 -4
  212. package/dist/providers/PwaUpdateProvider.js +2 -2
  213. package/dist/providers/PwaUpdateProvider.js.map +1 -1
  214. package/dist/providers/ServiceClientContext.d.ts +8 -8
  215. package/dist/providers/ServiceClientContext.d.ts.map +1 -1
  216. package/dist/providers/ServiceClientContext.js +1 -1
  217. package/dist/providers/ServiceClientContext.js.map +1 -1
  218. package/dist/providers/ServiceClientProvider.d.ts +6 -6
  219. package/dist/providers/ServiceClientProvider.js +7 -7
  220. package/dist/providers/ServiceClientProvider.js.map +1 -1
  221. package/dist/providers/SyncStorageContext.d.ts +14 -14
  222. package/dist/providers/SystemProvider.d.ts.map +1 -1
  223. package/dist/providers/SystemProvider.js +21 -16
  224. package/dist/providers/SystemProvider.js.map +2 -2
  225. package/dist/providers/ThemeContext.d.ts +20 -20
  226. package/dist/providers/ThemeContext.d.ts.map +1 -1
  227. package/dist/providers/ThemeContext.js +1 -1
  228. package/dist/providers/ThemeContext.js.map +1 -1
  229. package/dist/providers/i18n/I18nContext.d.ts +44 -0
  230. package/dist/providers/i18n/I18nContext.d.ts.map +1 -0
  231. package/dist/providers/i18n/I18nContext.js +73 -0
  232. package/dist/providers/i18n/I18nContext.js.map +6 -0
  233. package/dist/providers/i18n/I18nContext.types.d.ts +28 -0
  234. package/dist/providers/i18n/I18nContext.types.d.ts.map +1 -0
  235. package/dist/providers/i18n/I18nContext.types.js +1 -0
  236. package/dist/providers/i18n/I18nContext.types.js.map +6 -0
  237. package/dist/providers/i18n/i18nUtils.d.ts +18 -0
  238. package/dist/providers/i18n/i18nUtils.d.ts.map +1 -0
  239. package/dist/providers/i18n/i18nUtils.js +25 -0
  240. package/dist/providers/i18n/i18nUtils.js.map +6 -0
  241. package/dist/providers/i18n/locales/en.d.ts +163 -0
  242. package/dist/providers/i18n/locales/en.d.ts.map +1 -0
  243. package/dist/providers/i18n/locales/en.js +165 -0
  244. package/dist/providers/i18n/locales/en.js.map +6 -0
  245. package/dist/providers/i18n/locales/ko.d.ts +163 -0
  246. package/dist/providers/i18n/locales/ko.d.ts.map +1 -0
  247. package/dist/providers/i18n/locales/ko.js +165 -0
  248. package/dist/providers/i18n/locales/ko.js.map +6 -0
  249. package/dist/providers/shared-data/SharedDataChangeEvent.d.ts +4 -4
  250. package/dist/providers/shared-data/SharedDataContext.d.ts +28 -28
  251. package/dist/providers/shared-data/SharedDataContext.d.ts.map +1 -1
  252. package/dist/providers/shared-data/SharedDataContext.js +1 -1
  253. package/dist/providers/shared-data/SharedDataContext.js.map +1 -1
  254. package/dist/providers/shared-data/SharedDataProvider.d.ts +9 -9
  255. package/dist/providers/shared-data/SharedDataProvider.js +4 -4
  256. package/dist/providers/shared-data/SharedDataProvider.js.map +1 -1
  257. package/package.json +8 -8
  258. package/src/components/data/calendar/Calendar.tsx +10 -4
  259. package/src/components/data/kanban/Kanban.tsx +14 -14
  260. package/src/components/data/kanban/KanbanContext.ts +3 -3
  261. package/src/components/data/list/List.tsx +10 -10
  262. package/src/components/data/list/ListContext.ts +1 -1
  263. package/src/components/data/list/ListItem.styles.ts +8 -8
  264. package/src/components/data/list/ListItem.tsx +15 -15
  265. package/src/components/data/sheet/DataSheet.styles.ts +22 -22
  266. package/src/components/data/sheet/DataSheet.tsx +52 -48
  267. package/src/components/data/sheet/DataSheetColumn.tsx +1 -1
  268. package/src/components/data/sheet/DataSheetConfigDialog.tsx +9 -9
  269. package/src/components/data/sheet/sheetUtils.ts +7 -7
  270. package/src/components/data/sheet/types.ts +16 -16
  271. package/src/components/disclosure/Collapse.tsx +11 -11
  272. package/src/components/disclosure/Dialog.tsx +60 -57
  273. package/src/components/disclosure/DialogContext.ts +26 -26
  274. package/src/components/disclosure/DialogInstanceContext.ts +7 -7
  275. package/src/components/disclosure/DialogProvider.tsx +5 -5
  276. package/src/components/disclosure/Dropdown.tsx +64 -64
  277. package/src/components/disclosure/Tabs.tsx +1 -1
  278. package/src/components/disclosure/dialogZIndex.ts +11 -11
  279. package/src/components/display/Echarts.tsx +4 -4
  280. package/src/components/features/address/AddressSearch.tsx +2 -2
  281. package/src/components/features/crud-detail/CrudDetail.tsx +18 -16
  282. package/src/components/features/crud-detail/CrudDetailAfter.tsx +1 -1
  283. package/src/components/features/crud-detail/CrudDetailBefore.tsx +1 -1
  284. package/src/components/features/crud-detail/CrudDetailTools.tsx +1 -1
  285. package/src/components/features/crud-sheet/CrudSheet.tsx +39 -37
  286. package/src/components/features/crud-sheet/CrudSheetColumn.tsx +1 -1
  287. package/src/components/features/crud-sheet/CrudSheetFilter.tsx +1 -1
  288. package/src/components/features/crud-sheet/CrudSheetHeader.tsx +1 -1
  289. package/src/components/features/crud-sheet/CrudSheetTools.tsx +1 -1
  290. package/src/components/features/data-select-button/DataSelectButton.tsx +34 -32
  291. package/src/components/features/permission-table/PermissionTable.tsx +22 -19
  292. package/src/components/features/shared-data/SharedDataSelect.tsx +22 -20
  293. package/src/components/features/shared-data/SharedDataSelectButton.tsx +10 -10
  294. package/src/components/features/shared-data/SharedDataSelectList.tsx +245 -48
  295. package/src/components/features/shared-data/SharedDataSelectListContext.ts +39 -0
  296. package/src/components/feedback/Progress.tsx +1 -1
  297. package/src/components/feedback/busy/BusyContainer.tsx +6 -6
  298. package/src/components/feedback/busy/BusyContext.ts +12 -12
  299. package/src/components/feedback/busy/BusyProvider.tsx +6 -6
  300. package/src/components/feedback/notification/NotificationBanner.tsx +3 -1
  301. package/src/components/feedback/notification/NotificationBell.tsx +4 -4
  302. package/src/components/feedback/notification/NotificationContext.ts +28 -28
  303. package/src/components/feedback/notification/NotificationProvider.tsx +9 -9
  304. package/src/components/feedback/print/PrintContext.ts +1 -1
  305. package/src/components/form-control/Button.tsx +1 -1
  306. package/src/components/form-control/DropdownTrigger.styles.ts +1 -1
  307. package/src/components/form-control/Invalid.tsx +5 -5
  308. package/src/components/form-control/ThemeToggle.tsx +10 -10
  309. package/src/components/form-control/checkbox/Checkbox.styles.ts +8 -8
  310. package/src/components/form-control/checkbox/Checkbox.tsx +2 -2
  311. package/src/components/form-control/checkbox/CheckboxGroup.tsx +1 -1
  312. package/src/components/form-control/checkbox/Radio.tsx +2 -2
  313. package/src/components/form-control/checkbox/RadioGroup.tsx +1 -1
  314. package/src/components/form-control/color-picker/ColorPicker.tsx +17 -17
  315. package/src/components/form-control/combobox/Combobox.tsx +55 -55
  316. package/src/components/form-control/combobox/ComboboxContext.ts +5 -5
  317. package/src/components/form-control/combobox/ComboboxItem.tsx +3 -3
  318. package/src/components/form-control/date-range-picker/DateRangePicker.tsx +40 -26
  319. package/src/components/form-control/editor/EditorToolbar.tsx +52 -50
  320. package/src/components/form-control/editor/RichTextEditor.tsx +16 -16
  321. package/src/components/form-control/editor/editor.css +5 -5
  322. package/src/components/form-control/field/DatePicker.tsx +39 -39
  323. package/src/components/form-control/field/DateTimePicker.tsx +38 -38
  324. package/src/components/form-control/field/Field.styles.ts +11 -11
  325. package/src/components/form-control/field/FieldPlaceholder.tsx +1 -1
  326. package/src/components/form-control/field/NumberInput.tsx +63 -63
  327. package/src/components/form-control/field/TextInput.tsx +48 -48
  328. package/src/components/form-control/field/Textarea.tsx +32 -32
  329. package/src/components/form-control/field/TimePicker.tsx +37 -37
  330. package/src/components/form-control/numpad/Numpad.tsx +26 -26
  331. package/src/components/form-control/select/Select.tsx +84 -84
  332. package/src/components/form-control/select/SelectContext.ts +8 -8
  333. package/src/components/form-control/select/SelectItem.tsx +5 -5
  334. package/src/components/form-control/state-preset/StatePreset.tsx +13 -13
  335. package/src/components/layout/FormTable.tsx +4 -4
  336. package/src/components/layout/sidebar/Sidebar.tsx +8 -8
  337. package/src/components/layout/sidebar/SidebarContainer.tsx +19 -17
  338. package/src/components/layout/sidebar/SidebarContext.ts +8 -8
  339. package/src/components/layout/sidebar/SidebarMenu.tsx +19 -19
  340. package/src/components/layout/sidebar/SidebarUser.tsx +14 -14
  341. package/src/components/layout/topbar/Topbar.tsx +15 -13
  342. package/src/components/layout/topbar/TopbarContainer.tsx +6 -6
  343. package/src/components/layout/topbar/TopbarContext.ts +2 -2
  344. package/src/components/layout/topbar/TopbarMenu.tsx +18 -16
  345. package/src/components/layout/topbar/TopbarUser.tsx +9 -9
  346. package/src/directives/ripple.ts +8 -8
  347. package/src/helpers/createAppStructure.ts +12 -6
  348. package/src/helpers/createSlotComponent.ts +4 -4
  349. package/src/helpers/mergeStyles.ts +11 -11
  350. package/src/hooks/createControllableSignal.ts +11 -11
  351. package/src/hooks/createControllableStore.ts +8 -8
  352. package/src/hooks/createIMEHandler.ts +7 -7
  353. package/src/hooks/createMountTransition.ts +4 -4
  354. package/src/hooks/createSelectionGroup.tsx +1 -1
  355. package/src/hooks/createSlotSignal.ts +2 -2
  356. package/src/hooks/useLocalStorage.ts +13 -13
  357. package/src/hooks/useLogger.ts +2 -2
  358. package/src/hooks/useRouterLink.ts +15 -15
  359. package/src/index.ts +4 -3
  360. package/src/providers/ClipboardProvider.tsx +19 -19
  361. package/src/providers/ConfigContext.tsx +8 -8
  362. package/src/providers/ErrorLoggerProvider.tsx +3 -3
  363. package/src/providers/LoggerContext.tsx +13 -13
  364. package/src/providers/PwaUpdateProvider.tsx +6 -6
  365. package/src/providers/ServiceClientContext.ts +9 -9
  366. package/src/providers/ServiceClientProvider.tsx +15 -15
  367. package/src/providers/SyncStorageContext.tsx +15 -15
  368. package/src/providers/SystemProvider.tsx +15 -12
  369. package/src/providers/ThemeContext.tsx +26 -26
  370. package/src/providers/i18n/I18nContext.tsx +129 -0
  371. package/src/providers/i18n/I18nContext.types.ts +30 -0
  372. package/src/providers/i18n/i18nUtils.ts +38 -0
  373. package/src/providers/i18n/locales/en.ts +161 -0
  374. package/src/providers/i18n/locales/ko.ts +161 -0
  375. package/src/providers/shared-data/SharedDataChangeEvent.ts +4 -4
  376. package/src/providers/shared-data/SharedDataContext.ts +29 -29
  377. package/src/providers/shared-data/SharedDataProvider.tsx +21 -21
  378. package/src/styles/patterns.styles.ts +6 -6
  379. package/src/styles/tokens.styles.ts +5 -5
  380. package/tailwind.config.ts +1 -1
  381. package/tailwind.css +4 -4
  382. package/tests/components/data/List.spec.tsx +689 -0
  383. package/tests/components/data/Pagination.spec.tsx +336 -0
  384. package/tests/components/data/Table.spec.tsx +55 -0
  385. package/tests/components/data/kanban/Kanban.selection.spec.tsx +213 -0
  386. package/tests/components/data/sheet/DataSheet.spec.tsx +645 -0
  387. package/tests/components/disclosure/Collapse.spec.tsx +173 -0
  388. package/tests/components/disclosure/Dialog.spec.tsx +438 -0
  389. package/tests/components/disclosure/DialogProvider.spec.tsx +142 -0
  390. package/tests/components/disclosure/Dropdown.spec.tsx +213 -0
  391. package/tests/components/disclosure/Tabs.spec.tsx +220 -0
  392. package/tests/components/display/Alert.spec.tsx +47 -0
  393. package/tests/components/display/Barcode.spec.tsx +61 -0
  394. package/tests/components/display/Card.spec.tsx +41 -0
  395. package/tests/components/display/Link.spec.tsx +62 -0
  396. package/tests/components/display/Tag.spec.tsx +47 -0
  397. package/tests/components/features/address/AddressSearch.spec.tsx +45 -0
  398. package/tests/components/features/crud-detail/CrudDetail.spec.tsx +537 -0
  399. package/tests/components/features/crud-sheet/CrudSheet.spec.tsx +491 -0
  400. package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +482 -0
  401. package/tests/components/features/permission-table/PermissionTable.spec.tsx +288 -0
  402. package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +463 -0
  403. package/tests/components/feedback/busy/BusyContainer.spec.tsx +80 -0
  404. package/tests/components/feedback/notification/LiveRegion.spec.tsx +52 -0
  405. package/tests/components/feedback/notification/NotificationBanner.spec.tsx +187 -0
  406. package/tests/components/feedback/notification/NotificationBell.spec.tsx +226 -0
  407. package/tests/components/feedback/notification/NotificationContext.spec.tsx +362 -0
  408. package/tests/components/feedback/print/Print.spec.tsx +45 -0
  409. package/tests/components/form-control/Button.spec.tsx +119 -0
  410. package/tests/components/form-control/Invalid.spec.tsx +131 -0
  411. package/tests/components/form-control/checkbox/Checkbox.spec.tsx +137 -0
  412. package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +108 -0
  413. package/tests/components/form-control/checkbox/Radio.spec.tsx +138 -0
  414. package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +108 -0
  415. package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +94 -0
  416. package/tests/components/form-control/combobox/Combobox.spec.tsx +253 -0
  417. package/tests/components/form-control/combobox/ComboboxItem.spec.tsx +88 -0
  418. package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +208 -0
  419. package/tests/components/form-control/field/DatePicker.spec.tsx +381 -0
  420. package/tests/components/form-control/field/DateTimePicker.spec.tsx +383 -0
  421. package/tests/components/form-control/field/NumberInput.spec.tsx +371 -0
  422. package/tests/components/form-control/field/TextInput.spec.tsx +341 -0
  423. package/tests/components/form-control/field/Textarea.spec.tsx +224 -0
  424. package/tests/components/form-control/field/TimePicker.spec.tsx +315 -0
  425. package/tests/components/form-control/numpad/Numpad.spec.tsx +248 -0
  426. package/tests/components/form-control/select/Select.spec.tsx +676 -0
  427. package/tests/components/form-control/select/SelectItem.spec.tsx +174 -0
  428. package/tests/components/layout/FormGroup.spec.tsx +104 -0
  429. package/tests/components/layout/FormTable.spec.tsx +43 -0
  430. package/tests/components/layout/sidebar/Sidebar.spec.tsx +192 -0
  431. package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +261 -0
  432. package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +219 -0
  433. package/tests/components/layout/sidebar/SidebarUser.spec.tsx +133 -0
  434. package/tests/components/layout/topbar/TopbarActions.spec.tsx +77 -0
  435. package/tests/components/layout/topbar/TopbarContainer.spec.tsx +38 -0
  436. package/tests/components/layout/topbar/createTopbarActions.spec.tsx +66 -0
  437. package/tests/directives/ripple.spec.tsx +130 -0
  438. package/tests/helpers/createAppStructure.spec.tsx +843 -0
  439. package/tests/helpers/mergeStyles.spec.ts +172 -0
  440. package/tests/hooks/createControllableSignal.spec.ts +194 -0
  441. package/tests/hooks/createIMEHandler.spec.ts +80 -0
  442. package/tests/hooks/createMountTransition.spec.ts +86 -0
  443. package/tests/hooks/useLocalStorage.spec.tsx +223 -0
  444. package/tests/hooks/useLogger.spec.tsx +116 -0
  445. package/tests/hooks/usePrint.spec.tsx +134 -0
  446. package/tests/hooks/useRouterLink.spec.tsx +183 -0
  447. package/tests/hooks/useSyncConfig.spec.tsx +304 -0
  448. package/tests/providers/ClipboardProvider.spec.tsx +20 -0
  449. package/tests/providers/ConfigContext.spec.tsx +42 -0
  450. package/tests/providers/ErrorLoggerProvider.spec.tsx +73 -0
  451. package/tests/providers/LoggerContext.spec.tsx +76 -0
  452. package/tests/providers/PwaUpdateProvider.spec.tsx +22 -0
  453. package/tests/providers/ServiceClientContext.spec.tsx +88 -0
  454. package/tests/providers/SyncStorageContext.spec.tsx +77 -0
  455. package/tests/providers/i18n/I18nContext.spec.tsx +110 -0
  456. package/tests/providers/shared-data/SharedDataProvider.spec.tsx +401 -0
  457. package/tests/vitest-env.d.ts +1 -0
  458. package/dist/components/form-control/select-list/SelectList.d.ts +0 -54
  459. package/dist/components/form-control/select-list/SelectList.d.ts.map +0 -1
  460. package/dist/components/form-control/select-list/SelectList.js +0 -280
  461. package/dist/components/form-control/select-list/SelectList.js.map +0 -6
  462. package/dist/components/form-control/select-list/SelectListContext.d.ts +0 -13
  463. package/dist/components/form-control/select-list/SelectListContext.d.ts.map +0 -1
  464. package/dist/components/form-control/select-list/SelectListContext.js +0 -14
  465. package/dist/components/form-control/select-list/SelectListContext.js.map +0 -6
  466. package/docs/data-components.md +0 -782
  467. package/docs/disclosure.md +0 -254
  468. package/docs/display.md +0 -153
  469. package/docs/feedback.md +0 -238
  470. package/docs/form-controls.md +0 -1068
  471. package/docs/helpers.md +0 -54
  472. package/docs/hooks.md +0 -588
  473. package/docs/layout.md +0 -384
  474. package/docs/providers.md +0 -211
  475. package/docs/styling.md +0 -184
  476. package/src/components/form-control/select-list/SelectList.tsx +0 -385
  477. package/src/components/form-control/select-list/SelectListContext.ts +0 -23
@@ -0,0 +1,39 @@
1
+ import { createContext, useContext, type JSX, type ParentComponent, onCleanup } from "solid-js";
2
+ import { createSlotComponent } from "../../../helpers/createSlotComponent";
3
+ import type { SlotAccessor } from "../../../hooks/createSlotSignal";
4
+
5
+ // ─── Context ──────────────────────────────────────────────
6
+
7
+ export interface SharedDataSelectListContextValue {
8
+ setItemTemplate: (fn: ((...args: unknown[]) => JSX.Element) | undefined) => void;
9
+ setFilter: (content: SlotAccessor) => void;
10
+ }
11
+
12
+ export const SharedDataSelectListContext = createContext<SharedDataSelectListContextValue>();
13
+
14
+ export function useSharedDataSelectListContext(): SharedDataSelectListContextValue {
15
+ const context = useContext(SharedDataSelectListContext);
16
+ if (!context) {
17
+ throw new Error("useSharedDataSelectListContext can only be used inside SharedDataSelectList");
18
+ }
19
+ return context;
20
+ }
21
+
22
+ // ─── Sub-components ───────────────────────────────────────
23
+
24
+ /** ItemTemplate sub-component — registers item render function */
25
+ export const SharedDataSelectListItemTemplate = <TItem,>(props: {
26
+ children: (item: TItem, index: number) => JSX.Element;
27
+ }) => {
28
+ const ctx = useSharedDataSelectListContext();
29
+ // eslint-disable-next-line solid/reactivity -- Store render function in signal, called from JSX tracked scope
30
+ ctx.setItemTemplate(props.children as (...args: unknown[]) => JSX.Element);
31
+ onCleanup(() => ctx.setItemTemplate(undefined));
32
+ return null;
33
+ };
34
+
35
+ /** Filter sub-component — registers custom filter UI slot */
36
+ export const SharedDataSelectListFilter: ParentComponent = createSlotComponent(
37
+ SharedDataSelectListContext,
38
+ (ctx) => ctx.setFilter,
39
+ );
@@ -10,7 +10,7 @@ import {
10
10
  export type ProgressTheme = SemanticTheme;
11
11
 
12
12
  export interface ProgressProps extends JSX.HTMLAttributes<HTMLDivElement> {
13
- /** 진행률 (0~1 범위, 0 = 0%, 1 = 100%) */
13
+ /** Progress value (range 0-1, 0 = 0%, 1 = 100%) */
14
14
  value: number;
15
15
  theme?: ProgressTheme;
16
16
  size?: ComponentSizeCompact;
@@ -14,9 +14,9 @@ import { createMountTransition } from "../../../hooks/createMountTransition";
14
14
  import "./BusyContainer.css";
15
15
 
16
16
  export interface BusyContainerProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, "children"> {
17
- /** 로딩 오버레이 표시 (children 유지됨) */
17
+ /** Show loading overlay (children are preserved) */
18
18
  busy?: boolean;
19
- /** false이면 children 숨기고 로딩 오버레이 표시. 초기 데이터 로드 사용 */
19
+ /** If false, children are hidden and loading overlay is shown. Used for initial data loading */
20
20
  ready?: boolean;
21
21
  variant?: BusyVariant;
22
22
  message?: string;
@@ -26,7 +26,7 @@ export interface BusyContainerProps extends Omit<JSX.HTMLAttributes<HTMLDivEleme
26
26
 
27
27
  const baseClass = clsx("relative", "size-full", "min-h-[70px] min-w-[70px]", "overflow-auto");
28
28
 
29
- // eslint-disable-next-line tailwindcss/enforces-shorthand -- inset Chrome 87+에서만 지원
29
+ // eslint-disable-next-line tailwindcss/enforces-shorthand -- inset is only supported in Chrome 87+
30
30
  const screenBaseClass = clsx(
31
31
  "absolute bottom-0 left-0 right-0 top-0",
32
32
  "z-busy",
@@ -71,7 +71,7 @@ export const BusyContainer: ParentComponent<BusyContainerProps> = (props) => {
71
71
  const busyCtx = useContext(BusyContext);
72
72
  const currVariant = (): BusyVariant => local.variant ?? busyCtx?.variant() ?? "spinner";
73
73
 
74
- // 애니메이션 상태 (mount transition)
74
+ // Animation state (mount transition)
75
75
  const { mounted, animating, unmount } = createMountTransition(
76
76
  () => local.ready === false || !!local.busy,
77
77
  );
@@ -83,7 +83,7 @@ export const BusyContainer: ParentComponent<BusyContainerProps> = (props) => {
83
83
  }
84
84
  };
85
85
 
86
- // 키보드 입력 차단 (캡처 단계)
86
+ // Block keyboard input (capture phase)
87
87
  let containerRef!: HTMLDivElement;
88
88
 
89
89
  createEffect(() => {
@@ -106,7 +106,7 @@ export const BusyContainer: ParentComponent<BusyContainerProps> = (props) => {
106
106
  animating() ? "pointer-events-auto opacity-100" : "pointer-events-none opacity-0",
107
107
  );
108
108
 
109
- // spinner: 슬라이드 다운 애니메이션
109
+ // spinner: slide down animation
110
110
  const rectClass = () => {
111
111
  if (currVariant() !== "spinner") return "";
112
112
  return clsx(
@@ -1,38 +1,38 @@
1
1
  import { createContext, useContext, type Accessor } from "solid-js";
2
2
 
3
3
  /**
4
- * Busy 오버레이 표시 방식
5
- * - `spinner`: 전체 화면 스피너
6
- * - `bar`: 상단 프로그레스
4
+ * Busy overlay display type
5
+ * - `spinner`: Full-screen spinner
6
+ * - `bar`: Top progress bar
7
7
  */
8
8
  export type BusyVariant = "spinner" | "bar";
9
9
 
10
10
  /**
11
- * Busy 오버레이 Context
11
+ * Busy overlay Context value
12
12
  */
13
13
  export interface BusyContextValue {
14
- /** 현재 표시 방식 */
14
+ /** Current display type */
15
15
  variant: Accessor<BusyVariant>;
16
- /** 오버레이 표시 (중첩 호출 가능, 호출 횟수만큼 hide 필요) */
16
+ /** Show overlay (nestable calls, requires matching hide calls) */
17
17
  show: (message?: string) => void;
18
- /** 오버레이 숨김 (모든 show 대응하는 hide 호출 실제 숨김) */
18
+ /** Hide overlay (actually hides after all show calls have corresponding hide calls) */
19
19
  hide: () => void;
20
- /** 프로그레스 진행률 설정 (0~100, undefined indeterminate) */
20
+ /** Set progress bar progress (0-100, undefined for indeterminate) */
21
21
  setProgress: (percent: number | undefined) => void;
22
22
  }
23
23
 
24
- /** Busy 오버레이 Context */
24
+ /** Busy overlay Context */
25
25
  export const BusyContext = createContext<BusyContextValue>();
26
26
 
27
27
  /**
28
- * Busy 오버레이에 접근하는
28
+ * Hook to access Busy overlay
29
29
  *
30
- * @throws BusyProvider 없으면 에러 발생
30
+ * @throws Error if BusyProvider is not present
31
31
  */
32
32
  export function useBusy(): BusyContextValue {
33
33
  const context = useContext(BusyContext);
34
34
  if (!context) {
35
- throw new Error("useBusy BusyProvider 내부에서만 사용할 있습니다");
35
+ throw new Error("useBusy can only be used inside BusyProvider");
36
36
  }
37
37
  return context;
38
38
  }
@@ -6,19 +6,19 @@ import { BusyContainer } from "./BusyContainer";
6
6
 
7
7
  const overlayClass = clsx("fixed left-0 top-0", "h-screen w-screen", "overflow-hidden");
8
8
 
9
- /** BusyProvider 설정 */
9
+ /** BusyProvider configuration */
10
10
  export interface BusyProviderProps {
11
- /** 표시 방식 (기본값: `"spinner"`) */
11
+ /** Display style (default: `"spinner"`) */
12
12
  variant?: BusyVariant;
13
13
  }
14
14
 
15
15
  /**
16
- * Busy 오버레이 Provider
16
+ * Busy Overlay Provider
17
17
  *
18
18
  * @remarks
19
- * - show/hide 중첩 호출 가능 (내부 카운터로 관리)
20
- * - Portal 렌더링하여 항상 최상위에 표시
21
- * - 독립적으로 동작 (다른 Provider 의존성 없음)
19
+ * - show/hide can be nested (managed with internal counter)
20
+ * - Renders via Portal to always display on top
21
+ * - Works independently (no other Provider dependencies)
22
22
  */
23
23
  export const BusyProvider: ParentComponent<BusyProviderProps> = (props) => {
24
24
  const [busyCount, setBusyCount] = createSignal(0);
@@ -3,6 +3,7 @@ import { Portal } from "solid-js/web";
3
3
  import clsx from "clsx";
4
4
  import { IconX } from "@tabler/icons-solidjs";
5
5
  import { useNotification } from "./NotificationContext";
6
+ import { useI18nOptional } from "../../../providers/i18n/I18nContext";
6
7
  import { Icon } from "../../display/Icon";
7
8
  import { themeTokens } from "../../../styles/tokens.styles";
8
9
 
@@ -38,6 +39,7 @@ const dismissButtonClass = clsx("rounded", "p-1", "hover:bg-white/20");
38
39
 
39
40
  export const NotificationBanner: Component = () => {
40
41
  const notification = useNotification();
42
+ const i18n = useI18nOptional();
41
43
 
42
44
  const handleDismiss = () => {
43
45
  notification.dismissBanner();
@@ -72,7 +74,7 @@ export const NotificationBanner: Component = () => {
72
74
  </Show>
73
75
  <button
74
76
  type="button"
75
- aria-label="알림 닫기"
77
+ aria-label={i18n?.t("notification.close") ?? "Close notification"}
76
78
  class={dismissButtonClass}
77
79
  onClick={handleDismiss}
78
80
  >
@@ -78,7 +78,7 @@ export const NotificationBell: Component<NotificationBellProps> = (props) => {
78
78
  type="button"
79
79
  data-notification-bell
80
80
  class={buttonClass}
81
- aria-label={`알림 ${notification.unreadCount()}개`}
81
+ aria-label={`${notification.unreadCount()} notifications`}
82
82
  aria-haspopup="true"
83
83
  aria-expanded={open()}
84
84
  >
@@ -93,7 +93,7 @@ export const NotificationBell: Component<NotificationBellProps> = (props) => {
93
93
  <Dropdown.Content>
94
94
  <div class="w-80 p-2">
95
95
  <div class={dropdownHeaderClass}>
96
- <span class="font-bold">알림</span>
96
+ <span class="font-bold">Notifications</span>
97
97
  <Show when={notification.items().length > 0}>
98
98
  <button
99
99
  type="button"
@@ -101,14 +101,14 @@ export const NotificationBell: Component<NotificationBellProps> = (props) => {
101
101
  class={clearButtonClass}
102
102
  onClick={handleClear}
103
103
  >
104
- 전체 삭제
104
+ Clear All
105
105
  </button>
106
106
  </Show>
107
107
  </div>
108
108
 
109
109
  <Show
110
110
  when={notification.items().length > 0}
111
- fallback={<div class={emptyClass}>알림이 없습니다</div>}
111
+ fallback={<div class={emptyClass}>No notifications</div>}
112
112
  >
113
113
  <div class={listClass}>
114
114
  <For each={[...notification.items()].reverse()}>
@@ -1,95 +1,95 @@
1
1
  import { type Accessor, createContext, useContext } from "solid-js";
2
2
 
3
- /** 알림 테마 */
3
+ /** Notification theme */
4
4
  export type NotificationTheme = "info" | "success" | "warning" | "danger";
5
5
 
6
- /** 알림 액션 버튼 */
6
+ /** Notification action button */
7
7
  export interface NotificationAction {
8
- /** 버튼 텍스트 */
8
+ /** Button text */
9
9
  label: string;
10
- /** 클릭 핸들러 */
10
+ /** Click handler */
11
11
  onClick: () => void;
12
12
  }
13
13
 
14
- /** 알림 항목 */
14
+ /** Notification item */
15
15
  export interface NotificationItem {
16
- /** 고유 식별자 */
16
+ /** Unique identifier */
17
17
  id: string;
18
- /** 테마 (info, success, warning, danger) */
18
+ /** Theme (info, success, warning, danger) */
19
19
  theme: NotificationTheme;
20
- /** 알림 제목 */
20
+ /** Notification title */
21
21
  title: string;
22
- /** 알림 메시지 (선택) */
22
+ /** Notification message (optional) */
23
23
  message?: string;
24
- /** 액션 버튼 (선택) */
24
+ /** Action button (optional) */
25
25
  action?: NotificationAction;
26
- /** 생성 시각 */
26
+ /** Creation time */
27
27
  createdAt: Date;
28
- /** 읽음 여부 */
28
+ /** Read status */
29
29
  read: boolean;
30
30
  }
31
31
 
32
- /** 알림 생성 옵션 */
32
+ /** Notification creation options */
33
33
  export interface NotificationOptions {
34
- /** 알림에 표시할 액션 버튼 */
34
+ /** Action button to display in notification */
35
35
  action?: NotificationAction;
36
36
  }
37
37
 
38
- /** 알림 수정 옵션 */
38
+ /** Notification update options */
39
39
  export interface NotificationUpdateOptions {
40
- /** true 읽은 알림을 다시 읽지 않음 상태로 변경 (배너 재표시) */
40
+ /** If true, mark read notification as unread (redisplay banner) */
41
41
  renotify?: boolean;
42
42
  }
43
43
 
44
44
  /**
45
- * 알림 시스템 Context
45
+ * Notification system Context value
46
46
  *
47
47
  * @remarks
48
- * 알림 생성, 수정, 삭제 읽음 관리를 위한 메서드 제공.
49
- * 최대 50개까지 유지되며 초과 오래된 항목부터 제거.
48
+ * Provides methods to create, update, delete, and manage read status of notifications.
49
+ * Maintains up to 50 notifications; older items are removed when exceeded.
50
50
  */
51
51
  export interface NotificationContextValue {
52
- // 상태
52
+ // State
53
53
  items: Accessor<NotificationItem[]>;
54
54
  unreadCount: Accessor<number>;
55
55
  latestUnread: Accessor<NotificationItem | undefined>;
56
56
 
57
- // 알림 발생 (id 반환)
57
+ // Create notification (returns id)
58
58
  info: (title: string, message?: string, options?: NotificationOptions) => string;
59
59
  success: (title: string, message?: string, options?: NotificationOptions) => string;
60
60
  warning: (title: string, message?: string, options?: NotificationOptions) => string;
61
61
  danger: (title: string, message?: string, options?: NotificationOptions) => string;
62
62
  error: (err?: any, header?: string) => void;
63
63
 
64
- // 알림 수정
64
+ // Update notification
65
65
  update: (
66
66
  id: string,
67
67
  updates: Partial<Pick<NotificationItem, "title" | "message" | "theme" | "action">>,
68
68
  options?: NotificationUpdateOptions,
69
69
  ) => void;
70
70
 
71
- // 알림 삭제
71
+ // Delete notification
72
72
  remove: (id: string) => void;
73
73
 
74
- // 관리
74
+ // Management
75
75
  markAsRead: (id: string) => void;
76
76
  markAllAsRead: () => void;
77
77
  dismissBanner: () => void;
78
78
  clear: () => void;
79
79
  }
80
80
 
81
- /** 알림 시스템 Context */
81
+ /** Notification system Context */
82
82
  export const NotificationContext = createContext<NotificationContextValue>();
83
83
 
84
84
  /**
85
- * 알림 시스템에 접근하는
85
+ * Hook to access the notification system
86
86
  *
87
- * @throws NotificationProvider가 없으면 에러 발생
87
+ * @throws Error if used outside NotificationProvider
88
88
  */
89
89
  export function useNotification(): NotificationContextValue {
90
90
  const context = useContext(NotificationContext);
91
91
  if (!context) {
92
- throw new Error("useNotification NotificationProvider 내부에서만 사용할 있습니다");
92
+ throw new Error("useNotification can only be used inside NotificationProvider");
93
93
  }
94
94
  return context;
95
95
  }
@@ -12,13 +12,13 @@ import { useLogger } from "../../../hooks/useLogger";
12
12
  const MAX_ITEMS = 50;
13
13
 
14
14
  /**
15
- * 알림 시스템 Provider
15
+ * Notification system Provider
16
16
  *
17
17
  * @remarks
18
- * - 최대 50 알림 유지 (초과 오래된 항목 자동 제거)
19
- * - 읽지 않은 최신 알림을 배너로 표시
20
- * - 스크린 리더용 aria-live region 포함
21
- * - LoggerProvider가 있으면 에러 알림을 로거에도 기록
18
+ * - Maintains up to 50 notifications (older items auto-removed)
19
+ * - Shows latest unread notification in banner
20
+ * - Includes aria-live region for screen readers
21
+ * - Logs errors to logger if LoggerProvider is present
22
22
  */
23
23
  export const NotificationProvider: ParentComponent = (props) => {
24
24
  const logger = useLogger();
@@ -99,10 +99,10 @@ export const NotificationProvider: ParentComponent = (props) => {
99
99
 
100
100
  const updated = { ...item, ...updates };
101
101
 
102
- // renotify: 읽은 상태면 다시 읽지 않음으로 변경
102
+ // renotify: if read, change back to unread
103
103
  if (options?.renotify && item.read) {
104
104
  updated.read = false;
105
- // 배너가 dismiss된 상태에서 renotify되면 다시 보이게
105
+ // if dismissed banner is renotified, show it again
106
106
  setDismissedBannerId(null);
107
107
  }
108
108
 
@@ -155,10 +155,10 @@ export const NotificationProvider: ParentComponent = (props) => {
155
155
 
156
156
  return (
157
157
  <NotificationContext.Provider value={contextValue}>
158
- {/* 스크린 리더용 Live Region */}
158
+ {/* Screen reader Live Region */}
159
159
  <div role="status" aria-live="polite" aria-atomic="true" class="sr-only">
160
160
  <Show when={latestUnread()}>
161
- {(item) => `알림: ${item().title} ${item().message ?? ""}`}
161
+ {(item) => `Notification: ${item().title} ${item().message ?? ""}`}
162
162
  </Show>
163
163
  </div>
164
164
  {props.children}
@@ -15,6 +15,6 @@ export const PrintContext = createContext<PrintContextValue>();
15
15
 
16
16
  export function usePrint(): PrintContextValue {
17
17
  const ctx = useContext(PrintContext);
18
- if (!ctx) throw new Error("usePrint PrintProvider 내부에서만 사용할 있습니다");
18
+ if (!ctx) throw new Error("usePrint can only be used inside PrintProvider");
19
19
  return ctx;
20
20
  }
@@ -9,7 +9,7 @@ import {
9
9
  disabledOpacity,
10
10
  } from "../../styles/tokens.styles";
11
11
 
12
- // Directive 사용 선언 (TypeScript)
12
+ // Directive usage declaration (for TypeScript)
13
13
  void ripple;
14
14
 
15
15
  type ButtonTheme = SemanticTheme;
@@ -38,7 +38,7 @@ export const triggerSizeClasses: Record<ComponentSize, string> = {
38
38
 
39
39
  export const chevronWrapperClass = clsx("opacity-30", "hover:opacity-100");
40
40
 
41
- /** Select/Combobox 공유 트리거 클래스 빌더 */
41
+ /** Select/Combobox shared trigger class builder */
42
42
  export function getTriggerClass(options: {
43
43
  size?: ComponentSize;
44
44
  disabled?: boolean;
@@ -27,13 +27,13 @@ export const Invalid: ParentComponent<InvalidProps> = (props) => {
27
27
 
28
28
  const resolved = children(() => props.children);
29
29
 
30
- // message 변경 setCustomValidity 반응형 업데이트 (touchMode 무관하게 항상)
30
+ // Reactively update setCustomValidity when message changes (always, regardless of touchMode)
31
31
  createEffect(() => {
32
32
  const msg = props.message ?? "";
33
33
  hiddenInputEl.setCustomValidity(msg);
34
34
  });
35
35
 
36
- // target relative 설정 + hidden input target 내부에 삽입
36
+ // Set target to relative + insert hidden input inside target
37
37
  createEffect(() => {
38
38
  const targetEl = resolved.toArray().find((el): el is HTMLElement => el instanceof HTMLElement);
39
39
  if (!targetEl) return;
@@ -52,7 +52,7 @@ export const Invalid: ParentComponent<InvalidProps> = (props) => {
52
52
  });
53
53
  });
54
54
 
55
- // 시각적 표시 처리
55
+ // Handle visual indication
56
56
  createEffect(() => {
57
57
  const variant = props.variant ?? "dot";
58
58
  const message = props.message ?? "";
@@ -102,7 +102,7 @@ export const Invalid: ParentComponent<InvalidProps> = (props) => {
102
102
  }
103
103
  });
104
104
 
105
- // touchMode: target에 focusout 이벤트 등록하여 touched 상태 추적
105
+ // touchMode: register focusout event on target to track touched state
106
106
  createEffect(() => {
107
107
  if (!(props.touchMode ?? false)) return;
108
108
 
@@ -121,7 +121,7 @@ export const Invalid: ParentComponent<InvalidProps> = (props) => {
121
121
  });
122
122
  });
123
123
 
124
- // hidden input 포커스 target의 focusable child 리디렉션
124
+ // Redirect hidden input focus to focusable child of target
125
125
  hiddenInputEl.addEventListener("focus", () => {
126
126
  const targetEl = resolved.toArray().find((el): el is HTMLElement => el instanceof HTMLElement);
127
127
 
@@ -19,33 +19,33 @@ const iconSizes: Record<"sm" | "lg", string> = {
19
19
  };
20
20
 
21
21
  const modeLabels: Record<ThemeMode, string> = {
22
- light: "라이트 모드",
23
- system: "시스템 설정",
24
- dark: "다크 모드",
22
+ light: "Light mode",
23
+ system: "System settings",
24
+ dark: "Dark mode",
25
25
  };
26
26
 
27
27
  export interface ThemeToggleProps extends Omit<
28
28
  JSX.ButtonHTMLAttributes<HTMLButtonElement>,
29
29
  "children"
30
30
  > {
31
- /** 버튼 크기 */
31
+ /** Button size */
32
32
  size?: "sm" | "lg";
33
33
  }
34
34
 
35
35
  /**
36
- * 테마 토글 버튼 컴포넌트
36
+ * Theme toggle button component
37
37
  *
38
38
  * @remarks
39
- * - ThemeProvider 내부에서 사용해야
40
- * - 클릭 light → system → dark → light 순환
41
- * - 현재 모드에 맞는 아이콘 표시 (☀️ / 💻 / 🌙)
39
+ * - Must be used inside ThemeProvider
40
+ * - Cycles through light → system → dark → light on click
41
+ * - Shows appropriate icon for current mode (☀️ / 💻 / 🌙)
42
42
  *
43
43
  * @example
44
44
  * ```tsx
45
- * // 기본 사용
45
+ * // Basic usage
46
46
  * <ThemeToggle />
47
47
  *
48
- * // 크기 조절
48
+ * // Adjust size
49
49
  * <ThemeToggle size="sm" />
50
50
  * <ThemeToggle size="lg" />
51
51
  * ```
@@ -12,7 +12,7 @@ import { insetBase, insetFocusOutlineSelf } from "../../../styles/patterns.style
12
12
 
13
13
  export type CheckboxSize = ComponentSize;
14
14
 
15
- // wrapper 기본 스타일
15
+ // wrapper base styles
16
16
  export const checkboxBaseClass = clsx(
17
17
  "inline-flex items-center gap-2",
18
18
  "whitespace-nowrap",
@@ -25,7 +25,7 @@ export const checkboxBaseClass = clsx(
25
25
  "focus-visible:ring-2",
26
26
  );
27
27
 
28
- // 인디케이터 기본 스타일
28
+ // Indicator base styles
29
29
  export const indicatorBaseClass = clsx(
30
30
  "flex shrink-0 items-center justify-center",
31
31
  "size-4",
@@ -36,10 +36,10 @@ export const indicatorBaseClass = clsx(
36
36
  "transition-colors",
37
37
  );
38
38
 
39
- // 체크 상태 스타일 (primary 고정)
39
+ // Checked state styles (primary fixed)
40
40
  export const checkedClass = clsx("border-primary-500 bg-primary-500", "text-white");
41
41
 
42
- // 사이즈별 스타일
42
+ // Size-specific styles
43
43
  export const checkboxSizeClasses: Record<CheckboxSize, string> = {
44
44
  xs: clsx("h-field-xs", paddingXs),
45
45
  sm: clsx("h-field-sm", paddingSm),
@@ -47,14 +47,14 @@ export const checkboxSizeClasses: Record<CheckboxSize, string> = {
47
47
  xl: clsx("h-field-xl", paddingXl),
48
48
  };
49
49
 
50
- // inset 스타일
50
+ // Inset styles
51
51
  export const checkboxInsetClass = clsx(
52
52
  "h-field-inset justify-center bg-transparent",
53
53
  insetBase,
54
54
  insetFocusOutlineSelf,
55
55
  );
56
56
 
57
- // inset 사이즈별 높이 (border 2px 제외)
57
+ // Inset size-specific heights (excluding 2px border)
58
58
  export const checkboxInsetSizeHeightClasses: Record<CheckboxSize, string> = {
59
59
  xs: "h-field-inset-xs",
60
60
  sm: "h-field-inset-sm",
@@ -62,8 +62,8 @@ export const checkboxInsetSizeHeightClasses: Record<CheckboxSize, string> = {
62
62
  xl: "h-field-inset-xl",
63
63
  };
64
64
 
65
- // inline 스타일
65
+ // Inline styles
66
66
  export const checkboxInlineClass = clsx("!h-auto", "!p-0", "gap-1");
67
67
 
68
- // disabled 스타일
68
+ // Disabled styles
69
69
  export const checkboxDisabledClass = disabledOpacity;
@@ -17,7 +17,7 @@ import {
17
17
  } from "./Checkbox.styles";
18
18
  import { Invalid } from "../Invalid";
19
19
 
20
- // Directive 사용 선언 (TypeScript)
20
+ // Directive usage declaration (for TypeScript)
21
21
  void ripple;
22
22
 
23
23
  export interface CheckboxProps {
@@ -84,7 +84,7 @@ export const Checkbox: ParentComponent<CheckboxProps> = (props) => {
84
84
 
85
85
  const errorMsg = createMemo(() => {
86
86
  const v = local.value ?? false;
87
- if (local.required && !v) return "필수 선택 항목입니다";
87
+ if (local.required && !v) return "This is a required selection";
88
88
  return local.validate?.(v);
89
89
  });
90
90
 
@@ -31,7 +31,7 @@ const { Group } = createSelectionGroup({
31
31
  mode: "multiple",
32
32
  contextName: "CheckboxGroup",
33
33
  ItemComponent: Checkbox,
34
- emptyErrorMsg: "항목을 선택해 주세요",
34
+ emptyErrorMsg: "Please select an item",
35
35
  });
36
36
 
37
37
  export const CheckboxGroup = Group as unknown as CheckboxGroupComponent;
@@ -18,7 +18,7 @@ import { Invalid } from "../Invalid";
18
18
 
19
19
  const radioDotClass = clsx("size-2", "rounded-full", "bg-current");
20
20
 
21
- // Directive 사용 선언 (TypeScript)
21
+ // Directive usage declaration (for TypeScript)
22
22
  void ripple;
23
23
 
24
24
  export interface RadioProps {
@@ -85,7 +85,7 @@ export const Radio: ParentComponent<RadioProps> = (props) => {
85
85
 
86
86
  const errorMsg = createMemo(() => {
87
87
  const v = local.value ?? false;
88
- if (local.required && !v) return "필수 선택 항목입니다";
88
+ if (local.required && !v) return "This is a required selection";
89
89
  return local.validate?.(v);
90
90
  });
91
91
 
@@ -31,7 +31,7 @@ const { Group } = createSelectionGroup({
31
31
  mode: "single",
32
32
  contextName: "RadioGroup",
33
33
  ItemComponent: Radio,
34
- emptyErrorMsg: "항목을 선택해 주세요",
34
+ emptyErrorMsg: "Please select an item",
35
35
  });
36
36
 
37
37
  export const RadioGroup = Group as unknown as RadioGroupComponent;