@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
@@ -15,7 +15,7 @@ import { Invalid } from "../Invalid";
15
15
 
16
16
  void ripple;
17
17
 
18
- // Combobox 전용 스타일
18
+ // Combobox-specific styles
19
19
  const selectedValueClass = clsx("flex-1", "whitespace-nowrap", "overflow-hidden");
20
20
  const inputClass = clsx(
21
21
  "min-w-0 flex-1",
@@ -26,69 +26,69 @@ const inputClass = clsx(
26
26
  const noResultsClass = clsx("px-3 py-2", textMuted);
27
27
 
28
28
  /**
29
- * 아이템 템플릿 서브 컴포넌트
29
+ * Item template sub-component
30
30
  */
31
31
  const ComboboxItemTemplate = <TArgs extends unknown[]>(props: {
32
32
  children: (...args: TArgs) => JSX.Element;
33
33
  }) => {
34
34
  const ctx = useComboboxContext();
35
- // eslint-disable-next-line solid/reactivity -- 렌더 함수를 signal 저장, JSX tracked scope에서 호출됨
35
+ // eslint-disable-next-line solid/reactivity -- Store render function in signal, called from JSX tracked scope
36
36
  ctx.setItemTemplate(props.children as (...args: unknown[]) => JSX.Element);
37
37
  onCleanup(() => ctx.setItemTemplate(undefined));
38
38
  return null;
39
39
  };
40
40
 
41
- // Props 정의
41
+ // Props definition
42
42
  export interface ComboboxProps<TValue = unknown> {
43
- /** 현재 선택된 */
43
+ /** Currently selected value */
44
44
  value?: TValue;
45
45
 
46
- /** 변경 콜백 */
46
+ /** Value change callback */
47
47
  onValueChange?: (value: TValue) => void;
48
48
 
49
- /** 아이템 로드 함수 (필수) */
49
+ /** Item load function (required) */
50
50
  loadItems: (query: string) => TValue[] | Promise<TValue[]>;
51
51
 
52
- /** 디바운스 딜레이 (기본값: 300ms) */
52
+ /** Debounce delay (default: 300ms) */
53
53
  debounceMs?: number;
54
54
 
55
- /** 커스텀 허용 */
55
+ /** Allow custom values */
56
56
  allowCustomValue?: boolean;
57
57
 
58
- /** 커스텀 파싱 함수 */
58
+ /** Custom value parsing function */
59
59
  parseCustomValue?: (text: string) => TValue;
60
60
 
61
- /** 선택된 값을 렌더링하는 함수 (필수) */
61
+ /** Function to render selected value (required) */
62
62
  renderValue: (value: TValue) => JSX.Element;
63
63
 
64
- /** 비활성화 */
64
+ /** Disable input */
65
65
  disabled?: boolean;
66
66
 
67
- /** 필수 입력 */
67
+ /** Required input */
68
68
  required?: boolean;
69
69
 
70
- /** 커스텀 유효성 검사 함수 */
70
+ /** Custom validation function */
71
71
  validate?: (value: TValue | undefined) => string | undefined;
72
72
 
73
- /** touchMode: 포커스 해제 후에만 에러 표시 */
73
+ /** touchMode: show errors only after blur */
74
74
  touchMode?: boolean;
75
75
 
76
- /** 플레이스홀더 */
76
+ /** Placeholder text */
77
77
  placeholder?: string;
78
78
 
79
- /** 트리거 크기 */
79
+ /** Trigger size */
80
80
  size?: ComponentSize;
81
81
 
82
- /** 테두리 없는 스타일 */
82
+ /** Borderless style */
83
83
  inset?: boolean;
84
84
 
85
- /** 커스텀 class */
85
+ /** Custom class */
86
86
  class?: string;
87
87
 
88
- /** 커스텀 style */
88
+ /** Custom style */
89
89
  style?: JSX.CSSProperties;
90
90
 
91
- /** children (Combobox.Item 또는 Combobox.ItemTemplate) */
91
+ /** Children (Combobox.Item or Combobox.ItemTemplate) */
92
92
  children?: JSX.Element;
93
93
  }
94
94
 
@@ -99,13 +99,13 @@ interface ComboboxComponent {
99
99
  }
100
100
 
101
101
  /**
102
- * Combobox 컴포넌트
102
+ * Combobox component
103
103
  *
104
- * 비동기 검색과 아이템 선택을 지원하는 자동완성 컴포넌트입니다.
104
+ * An autocomplete component supporting async search and item selection.
105
105
  *
106
106
  * @example
107
107
  * ```tsx
108
- * // 기본 사용
108
+ * // Basic usage
109
109
  * <Combobox
110
110
  * loadItems={async (query) => {
111
111
  * const response = await fetch(`/api/search?q=${query}`);
@@ -120,7 +120,7 @@ interface ComboboxComponent {
120
120
  * </Combobox.ItemTemplate>
121
121
  * </Combobox>
122
122
  *
123
- * // children 방식
123
+ * // Children approach
124
124
  * <Combobox loadItems={loadItems} renderValue={(v) => v.name}>
125
125
  * <For each={items()}>
126
126
  * {(item) => <Combobox.Item value={item}>{item.name}</Combobox.Item>}
@@ -149,52 +149,52 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
149
149
  "touchMode",
150
150
  ]);
151
151
 
152
- // 상태
152
+ // State
153
153
  const [open, setOpen] = createSignal(false);
154
154
  const [query, setQuery] = createSignal("");
155
155
  const [items, setItems] = createSignal<T[]>([]);
156
156
  const [busyCount, setBusyCount] = createSignal(0);
157
157
 
158
- // 선택된 관리 (controlled/uncontrolled 패턴)
158
+ // Selected value management (controlled/uncontrolled pattern)
159
159
  const [getValue, setInternalValue] = createControllableSignal<T | undefined>({
160
160
  value: () => local.value,
161
161
  onChange: () => local.onValueChange,
162
162
  } as Parameters<typeof createControllableSignal<T | undefined>>[0]);
163
163
 
164
- // 디바운스 (마운트 번만 생성, debounceMs 초기값만 사용)
165
- // eslint-disable-next-line solid/reactivity -- 디바운스 큐는 마운트 시점의 debounceMs 번만 생성
164
+ // Debounce queue (created once on mount, debounceMs only used as initial value)
165
+ // eslint-disable-next-line solid/reactivity -- Debounce queue created once with debounceMs from mount time
166
166
  const debounceQueue = new DebounceQueue(local.debounceMs ?? 300);
167
167
 
168
168
  onCleanup(() => {
169
169
  debounceQueue.dispose();
170
170
  });
171
171
 
172
- // 값이 선택되어 있는지 확인
172
+ // Check if value is selected
173
173
  const isSelected = (value: T): boolean => {
174
174
  const current = getValue();
175
175
  return current === value;
176
176
  };
177
177
 
178
- // 선택
178
+ // Select value
179
179
  const selectValue = (value: T) => {
180
180
  setInternalValue(value);
181
181
  setQuery("");
182
182
  setOpen(false);
183
183
  };
184
184
 
185
- // 드롭다운 닫기
185
+ // Close dropdown
186
186
  const closeDropdown = () => {
187
187
  setOpen(false);
188
188
  };
189
189
 
190
- // 아이템 템플릿 signal
190
+ // Item template signal
191
191
  const [itemTemplate, _setItemTemplate] = createSignal<
192
192
  ((...args: unknown[]) => JSX.Element) | undefined
193
193
  >();
194
194
  const setItemTemplate = (fn: ((...args: unknown[]) => JSX.Element) | undefined) =>
195
195
  _setItemTemplate(() => fn);
196
196
 
197
- // Context
197
+ // Context value
198
198
  const contextValue: ComboboxContextValue<T> = {
199
199
  isSelected,
200
200
  selectValue,
@@ -202,9 +202,9 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
202
202
  setItemTemplate,
203
203
  };
204
204
 
205
- // 검색 실행
205
+ // Perform search
206
206
  const performSearch = (searchQuery: string) => {
207
- // loadItems 함수 참조를 캡처하여 사용
207
+ // Capture loadItems function reference for use
208
208
  const loadItemsFn = local.loadItems;
209
209
  debounceQueue.run(async () => {
210
210
  setBusyCount((c) => c + 1);
@@ -217,7 +217,7 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
217
217
  });
218
218
  };
219
219
 
220
- // 입력 핸들러
220
+ // Input handler
221
221
  const handleInput = (e: InputEvent) => {
222
222
  const target = e.currentTarget as HTMLInputElement;
223
223
  const newQuery = target.value;
@@ -229,7 +229,7 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
229
229
  }
230
230
  };
231
231
 
232
- // Dropdown 열림/닫힘 변경 핸들러
232
+ // Dropdown open/close change handler
233
233
  const handleOpenChange = (isOpen: boolean) => {
234
234
  setOpen(isOpen);
235
235
  if (isOpen) {
@@ -237,7 +237,7 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
237
237
  }
238
238
  };
239
239
 
240
- // 트리거 키보드 처리
240
+ // Trigger keyboard handling
241
241
  const handleTriggerKeyDown = (e: KeyboardEvent) => {
242
242
  if (local.disabled) return;
243
243
 
@@ -255,15 +255,15 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
255
255
  }
256
256
  };
257
257
 
258
- // 유효성 검사 메시지
258
+ // Validation message
259
259
  const errorMsg = createMemo(() => {
260
260
  const v = getValue();
261
261
  if (local.required && (v === undefined || v === null || v === ""))
262
- return "필수 입력 항목입니다";
262
+ return "This field is required";
263
263
  return local.validate?.(v);
264
264
  });
265
265
 
266
- // 트리거 클래스
266
+ // Trigger class
267
267
  const getTriggerClassName = () =>
268
268
  getTriggerClass({
269
269
  size: local.size,
@@ -272,19 +272,19 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
272
272
  class: clsx(!local.inset && "bg-primary-50 dark:bg-primary-950/30", local.class),
273
273
  });
274
274
 
275
- // 참고: 초기 검색은 handleTriggerClick에서 수행됨
276
- // 입력 시에는 handleInput에서 performSearch 호출됨
275
+ // Note: Initial search performed in handleTriggerClick
276
+ // Input triggers performSearch in handleInput
277
277
 
278
- // 선택된 또는 입력 표시
278
+ // Render selected value or input
279
279
  const renderDisplayContent = (): JSX.Element => {
280
280
  const currentValue = getValue();
281
281
 
282
- // 드롭다운이 열려있거나 값이 없으면 입력 필드 표시
282
+ // Show input field if dropdown is open or no value selected
283
283
  if (open() || currentValue === undefined) {
284
284
  return (
285
285
  <input
286
286
  ref={(el) => {
287
- // 드롭다운이 열릴 input에 포커스
287
+ // Focus input when dropdown opens
288
288
  if (open()) {
289
289
  requestAnimationFrame(() => el.focus());
290
290
  }
@@ -300,25 +300,25 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
300
300
  );
301
301
  }
302
302
 
303
- // 값이 있고 드롭다운이 닫혀있으면 표시
303
+ // Show value if selected and dropdown is closed
304
304
  return <div class="truncate">{local.renderValue(currentValue)}</div>;
305
305
  };
306
306
 
307
- // 아이템 렌더링
307
+ // Render items
308
308
  const renderItems = (): JSX.Element => {
309
309
  const template = itemTemplate() as ((item: T, index: number) => JSX.Element) | undefined;
310
310
 
311
- // 로딩 중
311
+ // Loading
312
312
  if (busyCount() > 0) {
313
- return <div class={noResultsClass}>검색 중...</div>;
313
+ return <div class={noResultsClass}>Searching...</div>;
314
314
  }
315
315
 
316
- // items가 비어있는 경우
316
+ // Items empty
317
317
  if (items().length === 0) {
318
- return <div class={noResultsClass}>검색 결과가 없습니다</div>;
318
+ return <div class={noResultsClass}>No results found</div>;
319
319
  }
320
320
 
321
- // ItemTemplate 방식
321
+ // ItemTemplate approach
322
322
  if (template) {
323
323
  return (
324
324
  <For each={items()}>
@@ -327,7 +327,7 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
327
327
  );
328
328
  }
329
329
 
330
- // 기본 렌더링
330
+ // Default rendering
331
331
  return (
332
332
  <For each={items()}>{(item) => <ComboboxItem value={item}>{String(item)}</ComboboxItem>}</For>
333
333
  );
@@ -1,16 +1,16 @@
1
1
  import { type JSX, createContext, useContext } from "solid-js";
2
2
 
3
3
  export interface ComboboxContextValue<TValue = unknown> {
4
- /** 값이 선택되어 있는지 확인 */
4
+ /** Check if value is selected */
5
5
  isSelected: (value: TValue) => boolean;
6
6
 
7
- /** 선택 */
7
+ /** Select value */
8
8
  selectValue: (value: TValue) => void;
9
9
 
10
- /** 드롭다운 닫기 */
10
+ /** Close dropdown */
11
11
  closeDropdown: () => void;
12
12
 
13
- /** 아이템 템플릿 등록 */
13
+ /** Register item template */
14
14
  setItemTemplate: (fn: ((...args: unknown[]) => JSX.Element) | undefined) => void;
15
15
  }
16
16
 
@@ -19,7 +19,7 @@ export const ComboboxContext = createContext<ComboboxContextValue>();
19
19
  export function useComboboxContext<TValue = unknown>(): ComboboxContextValue<TValue> {
20
20
  const context = useContext(ComboboxContext);
21
21
  if (!context) {
22
- throw new Error("useComboboxContext Combobox 컴포넌트 내부에서만 사용할 있습니다");
22
+ throw new Error("useComboboxContext can only be used inside the Combobox component");
23
23
  }
24
24
  return context as ComboboxContextValue<TValue>;
25
25
  }
@@ -15,15 +15,15 @@ export interface ComboboxItemProps<TValue = unknown> extends Omit<
15
15
  JSX.ButtonHTMLAttributes<HTMLButtonElement>,
16
16
  "value" | "onClick"
17
17
  > {
18
- /** 아이템의 */
18
+ /** Item value */
19
19
  value: TValue;
20
20
 
21
- /** 비활성화 */
21
+ /** Disabled */
22
22
  disabled?: boolean;
23
23
  }
24
24
 
25
25
  /**
26
- * Combobox 드롭다운 내의 선택 가능한 아이템
26
+ * Selectable item in Combobox dropdown
27
27
  */
28
28
  export const ComboboxItem: ParentComponent<ComboboxItemProps> = <T,>(
29
29
  props: ComboboxItemProps<T> & { children?: JSX.Element },
@@ -6,58 +6,59 @@ import { createControllableSignal } from "../../../hooks/createControllableSigna
6
6
  import { type FieldSize } from "../field/Field.styles";
7
7
  import { DatePicker } from "../field/DatePicker";
8
8
  import { Select } from "../select/Select";
9
+ import { useI18nOptional } from "../../../providers/i18n/I18nContext";
9
10
 
10
11
  export type DateRangePeriodType = "day" | "month" | "range";
11
12
 
12
13
  const baseClass = clsx("inline-flex items-center", "gap-1");
13
14
 
14
15
  export interface DateRangePickerProps {
15
- /** 기간 타입 */
16
+ /** Period type */
16
17
  periodType?: DateRangePeriodType;
17
18
 
18
- /** 기간 타입 변경 콜백 */
19
+ /** Period type change callback */
19
20
  onPeriodTypeChange?: (value: DateRangePeriodType) => void;
20
21
 
21
- /** 시작 날짜 */
22
+ /** Start date */
22
23
  from?: DateOnly;
23
24
 
24
- /** 시작 날짜 변경 콜백 */
25
+ /** Start date change callback */
25
26
  onFromChange?: (value: DateOnly | undefined) => void;
26
27
 
27
- /** 종료 날짜 */
28
+ /** End date */
28
29
  to?: DateOnly;
29
30
 
30
- /** 종료 날짜 변경 콜백 */
31
+ /** End date change callback */
31
32
  onToChange?: (value: DateOnly | undefined) => void;
32
33
 
33
- /** 필수 입력 */
34
+ /** Required input */
34
35
  required?: boolean;
35
36
 
36
- /** 비활성화 */
37
+ /** Disabled */
37
38
  disabled?: boolean;
38
39
 
39
- /** 사이즈 */
40
+ /** Size */
40
41
  size?: FieldSize;
41
42
 
42
- /** 커스텀 class */
43
+ /** Custom class */
43
44
  class?: string;
44
45
 
45
- /** 커스텀 style */
46
+ /** Custom style */
46
47
  style?: JSX.CSSProperties;
47
48
  }
48
49
 
49
50
  /**
50
- * 월의 마지막 날을 구한다.
51
+ * Get the last day of the month.
51
52
  */
52
53
  function getLastDayOfMonth(date: DateOnly): DateOnly {
53
54
  return date.addMonths(1).setDay(1).addDays(-1);
54
55
  }
55
56
 
56
57
  /**
57
- * DateRangePicker 컴포넌트
58
+ * DateRangePicker component
58
59
  *
59
- * 기간 타입(일/월/범위) 선택에 따라 날짜 범위를 입력한다.
60
- * periodType 변경 from/to 자동으로 보정한다.
60
+ * Input date range based on selected period type (day/month/range).
61
+ * Automatically adjusts from/to when periodType changes.
61
62
  *
62
63
  * @example
63
64
  * ```tsx
@@ -77,6 +78,8 @@ function getLastDayOfMonth(date: DateOnly): DateOnly {
77
78
  * ```
78
79
  */
79
80
  export const DateRangePicker: Component<DateRangePickerProps> = (props) => {
81
+ const i18n = useI18nOptional();
82
+
80
83
  const [local, rest] = splitProps(props, [
81
84
  "periodType",
82
85
  "onPeriodTypeChange",
@@ -91,7 +94,7 @@ export const DateRangePicker: Component<DateRangePickerProps> = (props) => {
91
94
  "style",
92
95
  ]);
93
96
 
94
- // controlled/uncontrolled 패턴
97
+ // Controlled/uncontrolled pattern
95
98
  const [periodType, setPeriodType] = createControllableSignal({
96
99
  value: () => local.periodType ?? ("range" as DateRangePeriodType),
97
100
  onChange: () => local.onPeriodTypeChange,
@@ -107,7 +110,7 @@ export const DateRangePicker: Component<DateRangePickerProps> = (props) => {
107
110
  onChange: () => local.onToChange,
108
111
  });
109
112
 
110
- // periodType 변경 핸들러
113
+ // Handle period type change
111
114
  const handlePeriodTypeChange = (newType: DateRangePeriodType | DateRangePeriodType[]) => {
112
115
  const type = Array.isArray(newType) ? newType[0] : newType;
113
116
  setPeriodType(type);
@@ -127,7 +130,7 @@ export const DateRangePicker: Component<DateRangePickerProps> = (props) => {
127
130
  }
128
131
  };
129
132
 
130
- // from 변경 핸들러
133
+ // Handle from date change
131
134
  const handleFromChange = (newFrom: DateOnly | undefined) => {
132
135
  setFrom(newFrom);
133
136
 
@@ -145,12 +148,12 @@ export const DateRangePicker: Component<DateRangePickerProps> = (props) => {
145
148
  }
146
149
  };
147
150
 
148
- // to 변경 핸들러
151
+ // Handle to date change
149
152
  const handleToChange = (newTo: DateOnly | undefined) => {
150
153
  setTo(newTo);
151
154
  };
152
155
 
153
- // wrapper 클래스
156
+ // Wrapper CSS class
154
157
  const getWrapperClass = () => twMerge(baseClass, local.class);
155
158
 
156
159
  return (
@@ -158,17 +161,28 @@ export const DateRangePicker: Component<DateRangePickerProps> = (props) => {
158
161
  <Select
159
162
  value={periodType()}
160
163
  onValueChange={handlePeriodTypeChange}
161
- renderValue={(v: DateRangePeriodType) => (
162
- <>{{ day: "일", month: "월", range: "범위" }[v]}</>
163
- )}
164
+ renderValue={(v: DateRangePeriodType) => {
165
+ const labels = {
166
+ day: i18n?.t("dateRangePicker.day") ?? "Day",
167
+ month: i18n?.t("dateRangePicker.month") ?? "Month",
168
+ range: i18n?.t("dateRangePicker.range") ?? "Range"
169
+ };
170
+ return <>{labels[v]}</>;
171
+ }}
164
172
  required
165
173
  disabled={local.disabled}
166
174
  size={local.size}
167
175
  inset
168
176
  >
169
- <Select.Item value={"day" as DateRangePeriodType}>일</Select.Item>
170
- <Select.Item value={"month" as DateRangePeriodType}>월</Select.Item>
171
- <Select.Item value={"range" as DateRangePeriodType}>범위</Select.Item>
177
+ <Select.Item value={"day" as DateRangePeriodType}>
178
+ {i18n?.t("dateRangePicker.day") ?? "Day"}
179
+ </Select.Item>
180
+ <Select.Item value={"month" as DateRangePeriodType}>
181
+ {i18n?.t("dateRangePicker.month") ?? "Month"}
182
+ </Select.Item>
183
+ <Select.Item value={"range" as DateRangePeriodType}>
184
+ {i18n?.t("dateRangePicker.range") ?? "Range"}
185
+ </Select.Item>
172
186
  </Select>
173
187
 
174
188
  <Show