@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
@@ -25,35 +25,32 @@ import {
25
25
  borderSubtle,
26
26
  type ComponentSize,
27
27
  textMuted,
28
- textPlaceholder,
29
28
  } from "../../../styles/tokens.styles";
30
29
  import { createControllableSignal } from "../../../hooks/createControllableSignal";
31
30
  import { createSlotSignal } from "../../../hooks/createSlotSignal";
32
31
  import { chevronWrapperClass, getTriggerClass } from "../DropdownTrigger.styles";
33
32
  import { Invalid } from "../Invalid";
33
+ import { TextInput } from "../field/TextInput";
34
+ import { useI18nOptional } from "../../../providers/i18n/I18nContext";
34
35
 
35
36
  void ripple;
36
37
 
37
- // Select 전용 스타일
38
+ // Select-specific styles
38
39
  const multiTagClass = clsx("rounded", "bg-base-200 px-1", "dark:bg-base-600");
39
40
  const selectedValueClass = clsx("flex-1", "whitespace-nowrap");
40
41
 
41
- // 검색 입력 스타일
42
+ // Search input styles (override TextInput wrapper)
42
43
  const searchInputClass = clsx(
43
44
  "w-full",
44
- "border-b",
45
- borderSubtle,
46
- "bg-transparent",
47
- "px-2 py-1.5",
48
- "text-sm",
49
- "outline-none",
50
- textPlaceholder,
45
+ "rounded-none",
46
+ "border-0 border-b",
47
+ borderSubtle
51
48
  );
52
49
 
53
- // 전체선택/해제 버튼 영역 스타일
50
+ // Select all/deselect all button area styles
54
51
  const selectAllBarClass = clsx("flex gap-2", "border-b", borderSubtle, "px-2 py-1", "text-xs");
55
52
 
56
- // 전체선택/해제 버튼 스타일
53
+ // Select all/deselect all button styles
57
54
  const selectAllBtnClass = clsx(
58
55
  "text-primary-500",
59
56
  "hover:text-primary-600 dark:hover:text-primary-400",
@@ -61,7 +58,7 @@ const selectAllBtnClass = clsx(
61
58
  );
62
59
 
63
60
  /**
64
- * Select 우측 액션 서브 컴포넌트
61
+ * Select right-side action sub-component
65
62
  */
66
63
  interface SelectActionProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {}
67
64
 
@@ -100,11 +97,11 @@ const SelectAction: ParentComponent<SelectActionProps> = (props) => {
100
97
  };
101
98
 
102
99
  /**
103
- * 드롭다운 상단 커스텀 영역 서브 컴포넌트
100
+ * Dropdown top custom area sub-component
104
101
  */
105
102
  const SelectHeader: ParentComponent = (props) => {
106
103
  const ctx = useSelectContext();
107
- // eslint-disable-next-line solid/reactivity -- 슬롯 accessor 저장, JSX tracked scope에서 호출됨
104
+ // eslint-disable-next-line solid/reactivity -- Save as slot accessor, called from JSX tracked scope
108
105
  ctx.setHeader(() => props.children);
109
106
  onCleanup(() => ctx.setHeader(undefined));
110
107
  return null;
@@ -114,87 +111,87 @@ const SelectItemTemplate = <TArgs extends unknown[]>(props: {
114
111
  children: (...args: TArgs) => JSX.Element;
115
112
  }) => {
116
113
  const ctx = useSelectContext();
117
- // eslint-disable-next-line solid/reactivity -- 렌더 함수를 signal 저장, JSX tracked scope에서 호출됨
114
+ // eslint-disable-next-line solid/reactivity -- Store render function in signal, called from JSX tracked scope
118
115
  ctx.setItemTemplate(props.children as (...args: unknown[]) => JSX.Element);
119
116
  onCleanup(() => ctx.setItemTemplate(undefined));
120
117
  return null;
121
118
  };
122
119
 
123
- // Props 정의
120
+ // Props definition
124
121
 
125
- // 공통 Props (value, onValueChange, multiple 제외)
122
+ // Common Props (except value, onValueChange, multiple)
126
123
  interface SelectCommonProps<TValue = unknown> {
127
- /** 비활성화 */
124
+ /** Disabled state */
128
125
  disabled?: boolean;
129
126
 
130
- /** 필수 입력 */
127
+ /** Required input */
131
128
  required?: boolean;
132
129
 
133
- /** 미선택 표시 텍스트 */
130
+ /** Placeholder text when no value selected */
134
131
  placeholder?: string;
135
132
 
136
- /** 트리거 크기 */
133
+ /** Trigger size */
137
134
  size?: ComponentSize;
138
135
 
139
- /** 테두리 없는 스타일 */
136
+ /** Borderless style */
140
137
  inset?: boolean;
141
138
 
142
- /** 커스텀 유효성 검사 함수 */
139
+ /** Custom validation function */
143
140
  validate?: (value: unknown) => string | undefined;
144
141
 
145
- /** touchMode: 포커스 해제 후에만 에러 표시 */
142
+ /** touchMode: Show error only after blur */
146
143
  touchMode?: boolean;
147
144
 
148
- /** 검색 텍스트 추출 함수 (설정 검색 입력 자동 표시) */
145
+ /** Search text extraction function (shows search input when set) */
149
146
  getSearchText?: (item: TValue) => string;
150
147
 
151
- /** 숨김 여부 판별 함수 */
148
+ /** Function to determine if item is hidden */
152
149
  getIsHidden?: (item: TValue) => boolean;
153
150
 
154
- /** 커스텀 class */
151
+ /** Custom class */
155
152
  class?: string;
156
153
 
157
- /** 커스텀 style */
154
+ /** Custom style */
158
155
  style?: JSX.CSSProperties;
159
156
  }
160
157
 
161
- // 단일 선택 Props
158
+ // Single select Props
162
159
  interface SelectSingleBaseProps<TValue> extends SelectCommonProps<TValue> {
163
- /** 다중 선택 모드 */
160
+ /** Single select mode */
164
161
  multiple?: false;
165
162
 
166
- /** 현재 선택된 */
163
+ /** Currently selected value */
167
164
  value?: TValue;
168
165
 
169
- /** 변경 콜백 */
166
+ /** Value change callback */
170
167
  onValueChange?: (value: TValue) => void;
171
168
 
172
- /** 다중 선택 표시 방향 (단일 선택에서는 사용 ) */
169
+ /** Display direction for multiple select (not used in single select) */
173
170
  multiDisplayDirection?: never;
174
171
 
175
- /** 전체 선택 버튼 숨기기 (단일 선택에서는 사용 ) */
172
+ /** Hide select all button (not used in single select) */
176
173
  hideSelectAll?: never;
177
174
  }
178
175
 
179
- // 다중 선택 Props
176
+ // Multiple select Props
180
177
  interface SelectMultipleBaseProps<TValue> extends SelectCommonProps<TValue> {
181
- /** 다중 선택 모드 */
178
+ /** Multiple select mode */
182
179
  multiple: true;
183
180
 
184
- /** 현재 선택된 */
181
+ /** Currently selected values */
185
182
  value?: TValue[];
186
183
 
187
- /** 변경 콜백 */
184
+ /** Value change callback */
188
185
  onValueChange?: (value: TValue[]) => void;
189
186
 
190
- /** 다중 선택 표시 방향 */
187
+ /** Display direction for multiple select */
191
188
  multiDisplayDirection?: "horizontal" | "vertical";
192
189
 
193
- /** 전체 선택 버튼 숨기기 */
190
+ /** Hide select all button */
194
191
  hideSelectAll?: boolean;
195
192
  }
196
193
 
197
- // items 방식
194
+ // items mode
198
195
  interface SelectWithItemsPropsBase<TValue> {
199
196
  items: TValue[];
200
197
  getChildren?: (item: TValue, index: number, depth: number) => TValue[] | undefined;
@@ -202,7 +199,7 @@ interface SelectWithItemsPropsBase<TValue> {
202
199
  children?: JSX.Element;
203
200
  }
204
201
 
205
- // children 방식
202
+ // children mode
206
203
  interface SelectWithChildrenPropsBase<TValue> {
207
204
  items?: never;
208
205
  getChildren?: never;
@@ -225,17 +222,17 @@ interface SelectComponent {
225
222
  }
226
223
 
227
224
  /**
228
- * Select 컴포넌트
225
+ * Select component
229
226
  *
230
227
  * @example
231
228
  * ```tsx
232
- * // children 방식
229
+ * // children mode
233
230
  * <Select value={selected()} onValueChange={setSelected} renderValue={(v) => v.name}>
234
231
  * <Select.Item value={item1}>{item1.name}</Select.Item>
235
232
  * <Select.Item value={item2}>{item2.name}</Select.Item>
236
233
  * </Select>
237
234
  *
238
- * // items prop 방식
235
+ * // items prop mode
239
236
  * <Select items={data} value={selected()} onValueChange={setSelected}>
240
237
  * <Select.ItemTemplate>
241
238
  * {(item) => <>{item.name}</>}
@@ -267,26 +264,27 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
267
264
  "getIsHidden",
268
265
  ]);
269
266
 
267
+ const i18n = useI18nOptional();
270
268
  const [open, setOpen] = createSignal(false);
271
269
 
272
- // 검색 텍스트 signal
270
+ // Search text signal
273
271
  const [searchText, setSearchText] = createSignal("");
274
272
 
275
- // open false searchText 초기화
273
+ // Reset searchText when open becomes false
276
274
  createEffect(() => {
277
275
  if (!open()) {
278
276
  setSearchText("");
279
277
  }
280
278
  });
281
279
 
282
- // 선택된 관리 (controlled/uncontrolled 패턴)
280
+ // Manage selected value (controlled/uncontrolled pattern)
283
281
  type ValueType = T | T[] | undefined;
284
282
  const [value, setValue] = createControllableSignal<ValueType>({
285
283
  value: () => local.value,
286
284
  onChange: () => local.onValueChange as ((v: ValueType) => void) | undefined,
287
285
  } as Parameters<typeof createControllableSignal<ValueType>>[0]);
288
286
 
289
- // 값이 선택되어 있는지 확인
287
+ // Check if value is selected
290
288
  const isSelected = (itemValue: T): boolean => {
291
289
  const current = value();
292
290
  if (current === undefined) return false;
@@ -297,7 +295,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
297
295
  return current === itemValue;
298
296
  };
299
297
 
300
- // 토글
298
+ // Toggle value
301
299
  const toggleValue = (itemValue: T) => {
302
300
  if (local.multiple) {
303
301
  const current = (value() as T[] | undefined) ?? [];
@@ -312,12 +310,12 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
312
310
  }
313
311
  };
314
312
 
315
- // 드롭다운 닫기
313
+ // Close dropdown
316
314
  const closeDropdown = () => {
317
315
  setOpen(false);
318
316
  };
319
317
 
320
- // 슬롯 signals
318
+ // Slot signals
321
319
  const [header, setHeader] = createSlotSignal();
322
320
  const [action, setAction] = createSlotSignal();
323
321
  const [itemTemplate, _setItemTemplate] = createSignal<
@@ -326,7 +324,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
326
324
  const setItemTemplate = (fn: ((...args: unknown[]) => JSX.Element) | undefined) =>
327
325
  _setItemTemplate(() => fn);
328
326
 
329
- // Context
327
+ // Context value
330
328
  const contextValue: SelectContextValue<T> = {
331
329
  multiple: () => local.multiple ?? false,
332
330
  isSelected,
@@ -337,7 +335,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
337
335
  setItemTemplate,
338
336
  };
339
337
 
340
- // 트리거 키보드 처리 (Enter/Space 처리, ArrowUp/Down Dropdown이 처리)
338
+ // Trigger keyboard handling (only Enter/Space, ArrowUp/Down handled by Dropdown)
341
339
  const handleTriggerKeyDown = (e: KeyboardEvent) => {
342
340
  if (local.disabled) return;
343
341
 
@@ -347,15 +345,15 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
347
345
  }
348
346
  };
349
347
 
350
- // 유효성 검사 메시지
348
+ // Validation error message
351
349
  const errorMsg = createMemo(() => {
352
350
  const v = value();
353
351
  if (local.required && (v === undefined || v === null || v === ""))
354
- return "필수 입력 항목입니다";
352
+ return "This is a required field";
355
353
  return local.validate?.(v);
356
354
  });
357
355
 
358
- // 트리거 클래스
356
+ // Trigger class
359
357
  const getTriggerClassName = () =>
360
358
  getTriggerClass({
361
359
  size: local.size,
@@ -364,7 +362,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
364
362
  class: local.class,
365
363
  });
366
364
 
367
- // 검색 필터링 (계층 구조 지원)
365
+ // Search filtering (supports hierarchical structure)
368
366
  const filteredItems = createMemo((): T[] | undefined => {
369
367
  if (!local.items) return undefined;
370
368
  if (!local.getSearchText || !searchText()) return local.items;
@@ -372,12 +370,12 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
372
370
  const terms = searchText().trim().split(" ").filter(Boolean);
373
371
  if (terms.length === 0) return local.items;
374
372
 
375
- // 계층 구조에서 자식 매칭 부모도 포함
373
+ // Include parent when child matches in hierarchical structure
376
374
  const matchesSearch = (item: T): boolean => {
377
375
  const text = local.getSearchText!(item).toLowerCase();
378
376
  if (terms.every((t) => text.includes(t.toLowerCase()))) return true;
379
377
 
380
- // 자식 매칭되는 항목이 있으면 부모도 표시
378
+ // Show parent if any child matches
381
379
  if (local.getChildren) {
382
380
  const itemChildren = local.getChildren(item, 0, 0);
383
381
  if (itemChildren?.some((child) => matchesSearch(child))) return true;
@@ -389,13 +387,13 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
389
387
  return local.items.filter((item) => matchesSearch(item));
390
388
  });
391
389
 
392
- // 숨김 필터링 적용된 items
390
+ // Items with hidden filter applied
393
391
  const visibleItems = createMemo((): T[] | undefined => {
394
392
  const items = filteredItems();
395
393
  if (!items || !local.getIsHidden) return items;
396
394
 
397
395
  return items.filter((item) => {
398
- // 숨김 항목이지만 선택된 경우 표시 (취소선으로)
396
+ // Show hidden item if selected (with strikethrough)
399
397
  if (local.getIsHidden!(item)) {
400
398
  return isSelected(item);
401
399
  }
@@ -403,31 +401,31 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
403
401
  });
404
402
  });
405
403
 
406
- // 전체선택
404
+ // Select all
407
405
  const handleSelectAll = () => {
408
406
  const items = visibleItems();
409
407
  if (!items) return;
410
408
  setValue(items);
411
409
  };
412
410
 
413
- // 전체해제
411
+ // Deselect all
414
412
  const handleDeselectAll = () => {
415
413
  setValue([] as unknown as T[]);
416
414
  };
417
415
 
418
- // 내부 컴포넌트: Provider 안에서 children resolve하여 슬롯 등록을 트리거
416
+ // Inner component: resolve children inside Provider to trigger slot registration
419
417
  const SelectInner: ParentComponent = (innerProps) => {
420
- // children() resolve로 서브 컴포넌트 등록 트리거 (Header, Action, ItemTemplate null 반환)
418
+ // Resolve children() to trigger sub-component registration (Header, Action, ItemTemplate return null)
421
419
  const resolved = children(() => innerProps.children);
422
420
 
423
- // itemTemplate 함수 추출
421
+ // Extract itemTemplate function
424
422
  const getItemTemplate = ():
425
423
  | ((item: T, index: number, depth: number) => JSX.Element)
426
424
  | undefined => {
427
425
  return itemTemplate() as ((item: T, index: number, depth: number) => JSX.Element) | undefined;
428
426
  };
429
427
 
430
- // items 재귀 렌더링
428
+ // Render items recursively
431
429
  const renderItems = (itemList: T[], depth: number): JSX.Element => {
432
430
  const tpl = getItemTemplate();
433
431
  return (
@@ -439,7 +437,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
439
437
  {tpl ? tpl(item, index(), depth) : String(item)}
440
438
  <Show when={local.getChildren?.(item, index(), depth)} keyed>
441
439
  {(itemChildren) => {
442
- // 자식 목록에서 숨김 필터링 적용
440
+ // Apply hidden filter to child list
443
441
  const visibleChildren = () => {
444
442
  if (!local.getIsHidden) return itemChildren;
445
443
  return itemChildren.filter((child) => {
@@ -463,7 +461,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
463
461
  );
464
462
  };
465
463
 
466
- // 선택된 렌더링 (items 방식일 itemTemplate 재사용)
464
+ // Render selected value (reuse itemTemplate when in items mode)
467
465
  const renderValue = (renderVal: T): JSX.Element => {
468
466
  if (local.renderValue) {
469
467
  return local.renderValue(renderVal);
@@ -475,7 +473,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
475
473
  return <>{String(renderVal)}</>;
476
474
  };
477
475
 
478
- // 선택된 표시
476
+ // Display selected value
479
477
  const renderSelectedValue = (): JSX.Element => {
480
478
  const current = value();
481
479
 
@@ -495,10 +493,10 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
495
493
  return renderValue(current as T);
496
494
  };
497
495
 
498
- // 미지정 항목 표시 여부: 단일 선택 + required 아님 + items 모드
496
+ // Show unset item: single select + not required + items mode
499
497
  const showUnsetItem = () => !local.multiple && !local.required && local.items !== undefined;
500
498
 
501
- // 전체선택/해제 버튼 표시 여부: multiple + hideSelectAll 아님 + items 모드
499
+ // Show select all/deselect bar: multiple + not hideSelectAll + items mode
502
500
  const showSelectAllBar = () =>
503
501
  local.multiple === true && !local.hideSelectAll && local.items !== undefined;
504
502
 
@@ -533,18 +531,16 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
533
531
  </Dropdown.Trigger>
534
532
  <Dropdown.Content>
535
533
  <Show when={header()}>{header()!()}</Show>
536
- {/* 검색 입력 */}
534
+ {/* Search input */}
537
535
  <Show when={local.getSearchText && local.items}>
538
- <input
539
- type="text"
540
- data-select-search
541
- class={searchInputClass}
542
- placeholder="검색..."
536
+ <TextInput
543
537
  value={searchText()}
544
- onInput={(e) => setSearchText(e.currentTarget.value)}
538
+ onValueChange={setSearchText}
539
+ placeholder={i18n?.t("select.searchPlaceholder") ?? "Search..."}
540
+ class={searchInputClass}
545
541
  />
546
542
  </Show>
547
- {/* 전체선택/해제 버튼 */}
543
+ {/* Select all/deselect buttons */}
548
544
  <Show when={showSelectAllBar()}>
549
545
  <div class={selectAllBarClass}>
550
546
  <button
@@ -553,7 +549,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
553
549
  class={selectAllBtnClass}
554
550
  onClick={handleSelectAll}
555
551
  >
556
- 전체선택
552
+ {i18n?.t("select.selectAll") ?? "Select all"}
557
553
  </button>
558
554
  <button
559
555
  type="button"
@@ -561,16 +557,16 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
561
557
  class={selectAllBtnClass}
562
558
  onClick={handleDeselectAll}
563
559
  >
564
- 전체해제
560
+ {i18n?.t("select.deselectAll") ?? "Deselect all"}
565
561
  </button>
566
562
  </div>
567
563
  </Show>
568
564
  <List inset role="listbox">
569
565
  <Show when={local.items} fallback={resolved()}>
570
- {/* 미지정 항목 */}
566
+ {/* Unset item */}
571
567
  <Show when={showUnsetItem()}>
572
568
  <SelectItem value={undefined as T}>
573
- <span class={textMuted}>미지정</span>
569
+ <span class={textMuted}>{i18n?.t("select.unset") ?? "Unset"}</span>
574
570
  </SelectItem>
575
571
  </Show>
576
572
  {renderItems(visibleItems() ?? [], 0)}
@@ -2,25 +2,25 @@ import { createContext, useContext, type Accessor, type JSX } from "solid-js";
2
2
  import type { SlotAccessor } from "../../../hooks/createSlotSignal";
3
3
 
4
4
  export interface SelectContextValue<TValue = unknown> {
5
- /** 다중 선택 모드 여부 */
5
+ /** Whether multiple select mode is enabled */
6
6
  multiple: Accessor<boolean>;
7
7
 
8
- /** 값이 선택되어 있는지 확인 */
8
+ /** Check if value is selected */
9
9
  isSelected: (value: TValue) => boolean;
10
10
 
11
- /** 선택/해제 토글 */
11
+ /** Toggle value selection/deselection */
12
12
  toggleValue: (value: TValue) => void;
13
13
 
14
- /** 드롭다운 닫기 */
14
+ /** Close dropdown */
15
15
  closeDropdown: () => void;
16
16
 
17
- /** 헤더 슬롯 등록 */
17
+ /** Register header slot */
18
18
  setHeader: (content: SlotAccessor) => void;
19
19
 
20
- /** 액션 슬롯 등록 */
20
+ /** Register action slot */
21
21
  setAction: (content: SlotAccessor) => void;
22
22
 
23
- /** 아이템 템플릿 등록 */
23
+ /** Register item template */
24
24
  setItemTemplate: (fn: ((...args: unknown[]) => JSX.Element) | undefined) => void;
25
25
  }
26
26
 
@@ -29,7 +29,7 @@ export const SelectContext = createContext<SelectContextValue>();
29
29
  export function useSelectContext<TValue = unknown>(): SelectContextValue<TValue> {
30
30
  const context = useContext(SelectContext);
31
31
  if (!context) {
32
- throw new Error("useSelectContext Select 컴포넌트 내부에서만 사용할 있습니다");
32
+ throw new Error("useSelectContext can only be used inside Select component");
33
33
  }
34
34
  return context as SelectContextValue<TValue>;
35
35
  }
@@ -31,10 +31,10 @@ export interface SelectItemProps<TValue = unknown> extends Omit<
31
31
  JSX.ButtonHTMLAttributes<HTMLButtonElement>,
32
32
  "value" | "onClick"
33
33
  > {
34
- /** 아이템의 */
34
+ /** Item value */
35
35
  value: TValue;
36
36
 
37
- /** 비활성화 */
37
+ /** Disabled state */
38
38
  disabled?: boolean;
39
39
  }
40
40
 
@@ -43,13 +43,13 @@ interface SelectItemComponent<TValue = unknown> extends ParentComponent<SelectIt
43
43
  }
44
44
 
45
45
  /**
46
- * Select 드롭다운 내의 선택 가능한 아이템
46
+ * Selectable item within Select dropdown
47
47
  *
48
48
  * @example
49
49
  * ```tsx
50
50
  * <Select.Item value={item}>{item.name}</Select.Item>
51
51
  *
52
- * // 중첩 아이템
52
+ * // Nested items
53
53
  * <Select.Item value={parent}>
54
54
  * {parent.name}
55
55
  * <Select.Item.Children>
@@ -75,7 +75,7 @@ export const SelectItem: SelectItemComponent = <T,>(
75
75
 
76
76
  context.toggleValue(local.value);
77
77
 
78
- // 단일 선택 모드에서만 드롭다운 닫기
78
+ // Close dropdown only in single select mode
79
79
  if (!context.multiple()) {
80
80
  context.closeDropdown();
81
81
  }
@@ -117,7 +117,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
117
117
 
118
118
  const notification = useNotification();
119
119
 
120
- // presetKey 마운트 번만 설정되는 식별자이므로 즉시 평가하여 캡처
120
+ // presetKey is an identifier set only once at mount, evaluate immediately to capture
121
121
  /* eslint-disable solid/reactivity */
122
122
  const [presets, setPresets] = useSyncConfig<StatePresetItem<TValue>[]>(
123
123
  `state-preset.${local.presetKey}`,
@@ -147,7 +147,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
147
147
  }
148
148
 
149
149
  if (presets().some((p) => p.name === name)) {
150
- notification.warning("이름 중복", "같은 이름의 프리셋이 이미 존재합니다.");
150
+ notification.warning("Duplicate name", "A preset with this name already exists.");
151
151
  return;
152
152
  }
153
153
 
@@ -156,7 +156,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
156
156
  state: objClone(local.value),
157
157
  };
158
158
  setPresets([...presets(), newPreset]);
159
- notification.info("프리셋 저장", `"${name}" 프리셋이 저장되었습니다.`);
159
+ notification.info("Preset saved", `Preset "${name}" has been saved.`);
160
160
  setAdding(false);
161
161
  setInputValue("");
162
162
  }
@@ -177,11 +177,11 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
177
177
  setPresets(updated);
178
178
 
179
179
  const notiId = notification.info(
180
- "프리셋 덮어쓰기",
181
- `"${presetName}" 프리셋이 현재 상태로 업데이트되었습니다.`,
180
+ "Preset overwritten",
181
+ `Preset "${presetName}" has been updated with the current state.`,
182
182
  {
183
183
  action: {
184
- label: "실행 취소",
184
+ label: "Undo",
185
185
  onClick: () => {
186
186
  setPresets(snapshot);
187
187
  notification.remove(notiId);
@@ -198,9 +198,9 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
198
198
  const updated = snapshot.filter((_, i) => i !== index);
199
199
  setPresets(updated);
200
200
 
201
- const notiId = notification.info("프리셋 삭제", `"${presetName}" 프리셋이 삭제되었습니다.`, {
201
+ const notiId = notification.info("Preset deleted", `Preset "${presetName}" has been deleted.`, {
202
202
  action: {
203
- label: "실행 취소",
203
+ label: "Undo",
204
204
  onClick: () => {
205
205
  setPresets(snapshot);
206
206
  notification.remove(notiId);
@@ -242,7 +242,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
242
242
  type="button"
243
243
  class={resolvedStarBtnClass()}
244
244
  onClick={handleStartAdd}
245
- title="프리셋 추가"
245
+ title="Add preset"
246
246
  >
247
247
  <Icon icon={IconStar} size={iconSize} />
248
248
  </button>
@@ -255,7 +255,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
255
255
  type="button"
256
256
  class={chipNameBtnClass}
257
257
  onClick={() => handleRestore(preset)}
258
- title={`"${preset.name}" 프리셋 적용`}
258
+ title={`Apply preset "${preset.name}"`}
259
259
  >
260
260
  {preset.name}
261
261
  </button>
@@ -263,7 +263,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
263
263
  type="button"
264
264
  class={resolvedIconBtnClass()}
265
265
  onClick={() => handleOverwrite(index())}
266
- title="현재 상태로 덮어쓰기"
266
+ title="Overwrite with current state"
267
267
  >
268
268
  <Icon icon={IconDeviceFloppy} size={iconSize} />
269
269
  </button>
@@ -271,7 +271,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
271
271
  type="button"
272
272
  class={resolvedIconBtnClass()}
273
273
  onClick={() => handleDelete(index())}
274
- title="프리셋 삭제"
274
+ title="Delete preset"
275
275
  >
276
276
  <Icon icon={IconX} size={iconSize} />
277
277
  </button>
@@ -288,7 +288,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
288
288
  }}
289
289
  type="text"
290
290
  class={resolvedInputClass()}
291
- placeholder="이름..."
291
+ placeholder="Name..."
292
292
  autocomplete="one-time-code"
293
293
  value={inputValue()}
294
294
  onInput={(e) => setInputValue(e.currentTarget.value)}