@simplysm/solid 13.0.69 → 13.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/README.md +168 -195
  2. package/dist/components/data/calendar/Calendar.d.ts.map +1 -1
  3. package/dist/components/data/calendar/Calendar.js +15 -2
  4. package/dist/components/data/calendar/Calendar.js.map +2 -2
  5. package/dist/components/data/kanban/KanbanContext.js +2 -2
  6. package/dist/components/data/kanban/KanbanContext.js.map +1 -1
  7. package/dist/components/data/list/List.d.ts +8 -8
  8. package/dist/components/data/list/ListContext.d.ts +1 -1
  9. package/dist/components/data/list/ListItem.d.ts +15 -15
  10. package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
  11. package/dist/components/data/sheet/DataSheet.js +6 -4
  12. package/dist/components/data/sheet/DataSheet.js.map +2 -2
  13. package/dist/components/data/sheet/DataSheetConfigDialog.js +8 -8
  14. package/dist/components/data/sheet/DataSheetConfigDialog.js.map +1 -1
  15. package/dist/components/data/sheet/types.d.ts +4 -4
  16. package/dist/components/data/sheet/types.d.ts.map +1 -1
  17. package/dist/components/disclosure/Collapse.d.ts +4 -4
  18. package/dist/components/disclosure/Dialog.d.ts +24 -24
  19. package/dist/components/disclosure/Dialog.d.ts.map +1 -1
  20. package/dist/components/disclosure/Dialog.js +7 -2
  21. package/dist/components/disclosure/Dialog.js.map +2 -2
  22. package/dist/components/disclosure/DialogContext.d.ts +25 -25
  23. package/dist/components/disclosure/DialogContext.d.ts.map +1 -1
  24. package/dist/components/disclosure/DialogContext.js +1 -1
  25. package/dist/components/disclosure/DialogContext.js.map +1 -1
  26. package/dist/components/disclosure/DialogInstanceContext.d.ts +7 -7
  27. package/dist/components/disclosure/DialogInstanceContext.d.ts.map +1 -1
  28. package/dist/components/disclosure/DialogProvider.d.ts +3 -3
  29. package/dist/components/disclosure/Dropdown.d.ts +24 -24
  30. package/dist/components/disclosure/Tabs.js +1 -1
  31. package/dist/components/disclosure/Tabs.js.map +1 -1
  32. package/dist/components/disclosure/dialogZIndex.d.ts +7 -7
  33. package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -1
  34. package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
  35. package/dist/components/features/crud-detail/CrudDetail.js +19 -16
  36. package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
  37. package/dist/components/features/crud-sheet/CrudSheet.d.ts.map +1 -1
  38. package/dist/components/features/crud-sheet/CrudSheet.js +34 -28
  39. package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
  40. package/dist/components/features/data-select-button/DataSelectButton.d.ts +14 -14
  41. package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
  42. package/dist/components/features/data-select-button/DataSelectButton.js +27 -9
  43. package/dist/components/features/data-select-button/DataSelectButton.js.map +2 -2
  44. package/dist/components/features/permission-table/PermissionTable.d.ts +3 -3
  45. package/dist/components/features/permission-table/PermissionTable.d.ts.map +1 -1
  46. package/dist/components/features/permission-table/PermissionTable.js +6 -2
  47. package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
  48. package/dist/components/features/shared-data/SharedDataSelect.d.ts +12 -12
  49. package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
  50. package/dist/components/features/shared-data/SharedDataSelect.js +8 -2
  51. package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
  52. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts +10 -10
  53. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
  54. package/dist/components/features/shared-data/SharedDataSelectList.d.ts +23 -13
  55. package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
  56. package/dist/components/features/shared-data/SharedDataSelectList.js +219 -58
  57. package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
  58. package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts +15 -0
  59. package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts.map +1 -0
  60. package/dist/components/features/shared-data/SharedDataSelectListContext.js +27 -0
  61. package/dist/components/features/shared-data/SharedDataSelectListContext.js.map +6 -0
  62. package/dist/components/feedback/Progress.d.ts +1 -1
  63. package/dist/components/feedback/Progress.d.ts.map +1 -1
  64. package/dist/components/feedback/busy/BusyContainer.d.ts +2 -2
  65. package/dist/components/feedback/busy/BusyContainer.d.ts.map +1 -1
  66. package/dist/components/feedback/busy/BusyContext.d.ts +11 -11
  67. package/dist/components/feedback/busy/BusyContext.d.ts.map +1 -1
  68. package/dist/components/feedback/busy/BusyContext.js +1 -1
  69. package/dist/components/feedback/busy/BusyContext.js.map +1 -1
  70. package/dist/components/feedback/busy/BusyProvider.d.ts +6 -6
  71. package/dist/components/feedback/busy/BusyProvider.d.ts.map +1 -1
  72. package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -1
  73. package/dist/components/feedback/notification/NotificationBanner.js +7 -3
  74. package/dist/components/feedback/notification/NotificationBanner.js.map +2 -2
  75. package/dist/components/feedback/notification/NotificationBell.js +2 -2
  76. package/dist/components/feedback/notification/NotificationBell.js.map +1 -1
  77. package/dist/components/feedback/notification/NotificationContext.d.ts +22 -22
  78. package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -1
  79. package/dist/components/feedback/notification/NotificationContext.js +1 -1
  80. package/dist/components/feedback/notification/NotificationContext.js.map +1 -1
  81. package/dist/components/feedback/notification/NotificationProvider.d.ts +5 -5
  82. package/dist/components/feedback/notification/NotificationProvider.js +1 -1
  83. package/dist/components/feedback/notification/NotificationProvider.js.map +1 -1
  84. package/dist/components/feedback/print/PrintContext.js +1 -1
  85. package/dist/components/feedback/print/PrintContext.js.map +1 -1
  86. package/dist/components/form-control/DropdownTrigger.styles.d.ts +1 -1
  87. package/dist/components/form-control/DropdownTrigger.styles.d.ts.map +1 -1
  88. package/dist/components/form-control/ThemeToggle.d.ts +7 -7
  89. package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
  90. package/dist/components/form-control/ThemeToggle.js +3 -3
  91. package/dist/components/form-control/checkbox/Checkbox.js +1 -1
  92. package/dist/components/form-control/checkbox/CheckboxGroup.js +1 -1
  93. package/dist/components/form-control/checkbox/Radio.js +1 -1
  94. package/dist/components/form-control/checkbox/RadioGroup.js +1 -1
  95. package/dist/components/form-control/color-picker/ColorPicker.d.ts +12 -12
  96. package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
  97. package/dist/components/form-control/color-picker/ColorPicker.js +2 -2
  98. package/dist/components/form-control/combobox/Combobox.d.ts +22 -22
  99. package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
  100. package/dist/components/form-control/combobox/Combobox.js +2 -2
  101. package/dist/components/form-control/combobox/ComboboxContext.d.ts +4 -4
  102. package/dist/components/form-control/combobox/ComboboxContext.d.ts.map +1 -1
  103. package/dist/components/form-control/combobox/ComboboxContext.js +1 -1
  104. package/dist/components/form-control/combobox/ComboboxContext.js.map +1 -1
  105. package/dist/components/form-control/combobox/ComboboxItem.d.ts +3 -3
  106. package/dist/components/form-control/combobox/ComboboxItem.d.ts.map +1 -1
  107. package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts +14 -14
  108. package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts.map +1 -1
  109. package/dist/components/form-control/date-range-picker/DateRangePicker.js +20 -9
  110. package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
  111. package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -1
  112. package/dist/components/form-control/editor/EditorToolbar.js +65 -20
  113. package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
  114. package/dist/components/form-control/editor/RichTextEditor.d.ts +6 -6
  115. package/dist/components/form-control/editor/RichTextEditor.d.ts.map +1 -1
  116. package/dist/components/form-control/editor/RichTextEditor.js +1 -1
  117. package/dist/components/form-control/editor/editor.css +5 -5
  118. package/dist/components/form-control/field/DatePicker.d.ts +22 -22
  119. package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
  120. package/dist/components/form-control/field/DatePicker.js +4 -4
  121. package/dist/components/form-control/field/DatePicker.js.map +1 -1
  122. package/dist/components/form-control/field/DateTimePicker.d.ts +21 -21
  123. package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
  124. package/dist/components/form-control/field/DateTimePicker.js +4 -4
  125. package/dist/components/form-control/field/DateTimePicker.js.map +1 -1
  126. package/dist/components/form-control/field/FieldPlaceholder.d.ts +1 -1
  127. package/dist/components/form-control/field/FieldPlaceholder.d.ts.map +1 -1
  128. package/dist/components/form-control/field/NumberInput.d.ts +23 -23
  129. package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
  130. package/dist/components/form-control/field/NumberInput.js +4 -4
  131. package/dist/components/form-control/field/NumberInput.js.map +1 -1
  132. package/dist/components/form-control/field/TextInput.d.ts +25 -25
  133. package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
  134. package/dist/components/form-control/field/TextInput.js +5 -5
  135. package/dist/components/form-control/field/TextInput.js.map +1 -1
  136. package/dist/components/form-control/field/Textarea.d.ts +19 -19
  137. package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
  138. package/dist/components/form-control/field/Textarea.js +4 -4
  139. package/dist/components/form-control/field/Textarea.js.map +1 -1
  140. package/dist/components/form-control/field/TimePicker.d.ts +20 -20
  141. package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
  142. package/dist/components/form-control/field/TimePicker.js +4 -4
  143. package/dist/components/form-control/field/TimePicker.js.map +1 -1
  144. package/dist/components/form-control/numpad/Numpad.d.ts +11 -11
  145. package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -1
  146. package/dist/components/form-control/select/Select.d.ts +26 -26
  147. package/dist/components/form-control/select/Select.d.ts.map +1 -1
  148. package/dist/components/form-control/select/Select.js +34 -23
  149. package/dist/components/form-control/select/Select.js.map +2 -2
  150. package/dist/components/form-control/select/SelectContext.d.ts +7 -7
  151. package/dist/components/form-control/select/SelectContext.d.ts.map +1 -1
  152. package/dist/components/form-control/select/SelectContext.js +1 -1
  153. package/dist/components/form-control/select/SelectContext.js.map +1 -1
  154. package/dist/components/form-control/select/SelectItem.d.ts +4 -4
  155. package/dist/components/form-control/select/SelectItem.d.ts.map +1 -1
  156. package/dist/components/form-control/state-preset/StatePreset.js +8 -8
  157. package/dist/components/form-control/state-preset/StatePreset.js.map +1 -1
  158. package/dist/components/layout/FormTable.js +4 -4
  159. package/dist/components/layout/sidebar/Sidebar.d.ts +5 -5
  160. package/dist/components/layout/sidebar/SidebarContainer.d.ts +11 -11
  161. package/dist/components/layout/sidebar/SidebarContainer.d.ts.map +1 -1
  162. package/dist/components/layout/sidebar/SidebarContainer.js +6 -1
  163. package/dist/components/layout/sidebar/SidebarContainer.js.map +2 -2
  164. package/dist/components/layout/sidebar/SidebarContext.d.ts +7 -7
  165. package/dist/components/layout/sidebar/SidebarContext.js +1 -1
  166. package/dist/components/layout/sidebar/SidebarContext.js.map +1 -1
  167. package/dist/components/layout/sidebar/SidebarMenu.d.ts +11 -11
  168. package/dist/components/layout/sidebar/SidebarUser.d.ts +14 -14
  169. package/dist/components/layout/topbar/Topbar.d.ts +6 -6
  170. package/dist/components/layout/topbar/Topbar.d.ts.map +1 -1
  171. package/dist/components/layout/topbar/Topbar.js +11 -6
  172. package/dist/components/layout/topbar/Topbar.js.map +2 -2
  173. package/dist/components/layout/topbar/TopbarContainer.d.ts +6 -6
  174. package/dist/components/layout/topbar/TopbarContext.js +2 -2
  175. package/dist/components/layout/topbar/TopbarContext.js.map +1 -1
  176. package/dist/components/layout/topbar/TopbarMenu.d.ts +11 -11
  177. package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -1
  178. package/dist/components/layout/topbar/TopbarMenu.js +5 -1
  179. package/dist/components/layout/topbar/TopbarMenu.js.map +2 -2
  180. package/dist/components/layout/topbar/TopbarUser.d.ts +9 -9
  181. package/dist/directives/ripple.d.ts +5 -5
  182. package/dist/helpers/createAppStructure.d.ts.map +1 -1
  183. package/dist/helpers/createAppStructure.js +4 -1
  184. package/dist/helpers/createAppStructure.js.map +1 -1
  185. package/dist/helpers/createSlotComponent.d.ts +3 -3
  186. package/dist/helpers/mergeStyles.d.ts +8 -8
  187. package/dist/hooks/createControllableSignal.d.ts +10 -10
  188. package/dist/hooks/createControllableStore.d.ts +6 -6
  189. package/dist/hooks/createIMEHandler.d.ts +7 -7
  190. package/dist/hooks/createMountTransition.d.ts +4 -4
  191. package/dist/hooks/createSelectionGroup.js +1 -1
  192. package/dist/hooks/createSelectionGroup.js.map +1 -1
  193. package/dist/hooks/createSlotSignal.d.ts +2 -2
  194. package/dist/hooks/useLocalStorage.d.ts +11 -11
  195. package/dist/hooks/useLogger.d.ts +1 -1
  196. package/dist/hooks/useLogger.d.ts.map +1 -1
  197. package/dist/hooks/useLogger.js +1 -1
  198. package/dist/hooks/useLogger.js.map +1 -1
  199. package/dist/hooks/useRouterLink.d.ts +10 -10
  200. package/dist/hooks/useRouterLink.d.ts.map +1 -1
  201. package/dist/index.d.ts +2 -1
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +2 -1
  204. package/dist/index.js.map +1 -1
  205. package/dist/providers/ClipboardProvider.d.ts +5 -5
  206. package/dist/providers/ConfigContext.d.ts +6 -6
  207. package/dist/providers/ConfigContext.js +2 -2
  208. package/dist/providers/ConfigContext.js.map +1 -1
  209. package/dist/providers/ErrorLoggerProvider.d.ts +3 -3
  210. package/dist/providers/LoggerContext.d.ts +13 -13
  211. package/dist/providers/PwaUpdateProvider.d.ts +4 -4
  212. package/dist/providers/PwaUpdateProvider.js +2 -2
  213. package/dist/providers/PwaUpdateProvider.js.map +1 -1
  214. package/dist/providers/ServiceClientContext.d.ts +8 -8
  215. package/dist/providers/ServiceClientContext.d.ts.map +1 -1
  216. package/dist/providers/ServiceClientContext.js +1 -1
  217. package/dist/providers/ServiceClientContext.js.map +1 -1
  218. package/dist/providers/ServiceClientProvider.d.ts +6 -6
  219. package/dist/providers/ServiceClientProvider.js +7 -7
  220. package/dist/providers/ServiceClientProvider.js.map +1 -1
  221. package/dist/providers/SyncStorageContext.d.ts +14 -14
  222. package/dist/providers/SystemProvider.d.ts.map +1 -1
  223. package/dist/providers/SystemProvider.js +21 -16
  224. package/dist/providers/SystemProvider.js.map +2 -2
  225. package/dist/providers/ThemeContext.d.ts +20 -20
  226. package/dist/providers/ThemeContext.d.ts.map +1 -1
  227. package/dist/providers/ThemeContext.js +1 -1
  228. package/dist/providers/ThemeContext.js.map +1 -1
  229. package/dist/providers/i18n/I18nContext.d.ts +44 -0
  230. package/dist/providers/i18n/I18nContext.d.ts.map +1 -0
  231. package/dist/providers/i18n/I18nContext.js +73 -0
  232. package/dist/providers/i18n/I18nContext.js.map +6 -0
  233. package/dist/providers/i18n/I18nContext.types.d.ts +28 -0
  234. package/dist/providers/i18n/I18nContext.types.d.ts.map +1 -0
  235. package/dist/providers/i18n/I18nContext.types.js +1 -0
  236. package/dist/providers/i18n/I18nContext.types.js.map +6 -0
  237. package/dist/providers/i18n/i18nUtils.d.ts +18 -0
  238. package/dist/providers/i18n/i18nUtils.d.ts.map +1 -0
  239. package/dist/providers/i18n/i18nUtils.js +25 -0
  240. package/dist/providers/i18n/i18nUtils.js.map +6 -0
  241. package/dist/providers/i18n/locales/en.d.ts +163 -0
  242. package/dist/providers/i18n/locales/en.d.ts.map +1 -0
  243. package/dist/providers/i18n/locales/en.js +165 -0
  244. package/dist/providers/i18n/locales/en.js.map +6 -0
  245. package/dist/providers/i18n/locales/ko.d.ts +163 -0
  246. package/dist/providers/i18n/locales/ko.d.ts.map +1 -0
  247. package/dist/providers/i18n/locales/ko.js +165 -0
  248. package/dist/providers/i18n/locales/ko.js.map +6 -0
  249. package/dist/providers/shared-data/SharedDataChangeEvent.d.ts +4 -4
  250. package/dist/providers/shared-data/SharedDataContext.d.ts +28 -28
  251. package/dist/providers/shared-data/SharedDataContext.d.ts.map +1 -1
  252. package/dist/providers/shared-data/SharedDataContext.js +1 -1
  253. package/dist/providers/shared-data/SharedDataContext.js.map +1 -1
  254. package/dist/providers/shared-data/SharedDataProvider.d.ts +9 -9
  255. package/dist/providers/shared-data/SharedDataProvider.js +4 -4
  256. package/dist/providers/shared-data/SharedDataProvider.js.map +1 -1
  257. package/package.json +8 -8
  258. package/src/components/data/calendar/Calendar.tsx +10 -4
  259. package/src/components/data/kanban/Kanban.tsx +14 -14
  260. package/src/components/data/kanban/KanbanContext.ts +3 -3
  261. package/src/components/data/list/List.tsx +10 -10
  262. package/src/components/data/list/ListContext.ts +1 -1
  263. package/src/components/data/list/ListItem.styles.ts +8 -8
  264. package/src/components/data/list/ListItem.tsx +15 -15
  265. package/src/components/data/sheet/DataSheet.styles.ts +22 -22
  266. package/src/components/data/sheet/DataSheet.tsx +52 -48
  267. package/src/components/data/sheet/DataSheetColumn.tsx +1 -1
  268. package/src/components/data/sheet/DataSheetConfigDialog.tsx +9 -9
  269. package/src/components/data/sheet/sheetUtils.ts +7 -7
  270. package/src/components/data/sheet/types.ts +16 -16
  271. package/src/components/disclosure/Collapse.tsx +11 -11
  272. package/src/components/disclosure/Dialog.tsx +60 -57
  273. package/src/components/disclosure/DialogContext.ts +26 -26
  274. package/src/components/disclosure/DialogInstanceContext.ts +7 -7
  275. package/src/components/disclosure/DialogProvider.tsx +5 -5
  276. package/src/components/disclosure/Dropdown.tsx +64 -64
  277. package/src/components/disclosure/Tabs.tsx +1 -1
  278. package/src/components/disclosure/dialogZIndex.ts +11 -11
  279. package/src/components/display/Echarts.tsx +4 -4
  280. package/src/components/features/address/AddressSearch.tsx +2 -2
  281. package/src/components/features/crud-detail/CrudDetail.tsx +18 -16
  282. package/src/components/features/crud-detail/CrudDetailAfter.tsx +1 -1
  283. package/src/components/features/crud-detail/CrudDetailBefore.tsx +1 -1
  284. package/src/components/features/crud-detail/CrudDetailTools.tsx +1 -1
  285. package/src/components/features/crud-sheet/CrudSheet.tsx +39 -37
  286. package/src/components/features/crud-sheet/CrudSheetColumn.tsx +1 -1
  287. package/src/components/features/crud-sheet/CrudSheetFilter.tsx +1 -1
  288. package/src/components/features/crud-sheet/CrudSheetHeader.tsx +1 -1
  289. package/src/components/features/crud-sheet/CrudSheetTools.tsx +1 -1
  290. package/src/components/features/data-select-button/DataSelectButton.tsx +34 -32
  291. package/src/components/features/permission-table/PermissionTable.tsx +22 -19
  292. package/src/components/features/shared-data/SharedDataSelect.tsx +22 -20
  293. package/src/components/features/shared-data/SharedDataSelectButton.tsx +10 -10
  294. package/src/components/features/shared-data/SharedDataSelectList.tsx +245 -48
  295. package/src/components/features/shared-data/SharedDataSelectListContext.ts +39 -0
  296. package/src/components/feedback/Progress.tsx +1 -1
  297. package/src/components/feedback/busy/BusyContainer.tsx +6 -6
  298. package/src/components/feedback/busy/BusyContext.ts +12 -12
  299. package/src/components/feedback/busy/BusyProvider.tsx +6 -6
  300. package/src/components/feedback/notification/NotificationBanner.tsx +3 -1
  301. package/src/components/feedback/notification/NotificationBell.tsx +4 -4
  302. package/src/components/feedback/notification/NotificationContext.ts +28 -28
  303. package/src/components/feedback/notification/NotificationProvider.tsx +9 -9
  304. package/src/components/feedback/print/PrintContext.ts +1 -1
  305. package/src/components/form-control/Button.tsx +1 -1
  306. package/src/components/form-control/DropdownTrigger.styles.ts +1 -1
  307. package/src/components/form-control/Invalid.tsx +5 -5
  308. package/src/components/form-control/ThemeToggle.tsx +10 -10
  309. package/src/components/form-control/checkbox/Checkbox.styles.ts +8 -8
  310. package/src/components/form-control/checkbox/Checkbox.tsx +2 -2
  311. package/src/components/form-control/checkbox/CheckboxGroup.tsx +1 -1
  312. package/src/components/form-control/checkbox/Radio.tsx +2 -2
  313. package/src/components/form-control/checkbox/RadioGroup.tsx +1 -1
  314. package/src/components/form-control/color-picker/ColorPicker.tsx +17 -17
  315. package/src/components/form-control/combobox/Combobox.tsx +55 -55
  316. package/src/components/form-control/combobox/ComboboxContext.ts +5 -5
  317. package/src/components/form-control/combobox/ComboboxItem.tsx +3 -3
  318. package/src/components/form-control/date-range-picker/DateRangePicker.tsx +40 -26
  319. package/src/components/form-control/editor/EditorToolbar.tsx +52 -50
  320. package/src/components/form-control/editor/RichTextEditor.tsx +16 -16
  321. package/src/components/form-control/editor/editor.css +5 -5
  322. package/src/components/form-control/field/DatePicker.tsx +39 -39
  323. package/src/components/form-control/field/DateTimePicker.tsx +38 -38
  324. package/src/components/form-control/field/Field.styles.ts +11 -11
  325. package/src/components/form-control/field/FieldPlaceholder.tsx +1 -1
  326. package/src/components/form-control/field/NumberInput.tsx +63 -63
  327. package/src/components/form-control/field/TextInput.tsx +48 -48
  328. package/src/components/form-control/field/Textarea.tsx +32 -32
  329. package/src/components/form-control/field/TimePicker.tsx +37 -37
  330. package/src/components/form-control/numpad/Numpad.tsx +26 -26
  331. package/src/components/form-control/select/Select.tsx +84 -84
  332. package/src/components/form-control/select/SelectContext.ts +8 -8
  333. package/src/components/form-control/select/SelectItem.tsx +5 -5
  334. package/src/components/form-control/state-preset/StatePreset.tsx +13 -13
  335. package/src/components/layout/FormTable.tsx +4 -4
  336. package/src/components/layout/sidebar/Sidebar.tsx +8 -8
  337. package/src/components/layout/sidebar/SidebarContainer.tsx +19 -17
  338. package/src/components/layout/sidebar/SidebarContext.ts +8 -8
  339. package/src/components/layout/sidebar/SidebarMenu.tsx +19 -19
  340. package/src/components/layout/sidebar/SidebarUser.tsx +14 -14
  341. package/src/components/layout/topbar/Topbar.tsx +15 -13
  342. package/src/components/layout/topbar/TopbarContainer.tsx +6 -6
  343. package/src/components/layout/topbar/TopbarContext.ts +2 -2
  344. package/src/components/layout/topbar/TopbarMenu.tsx +18 -16
  345. package/src/components/layout/topbar/TopbarUser.tsx +9 -9
  346. package/src/directives/ripple.ts +8 -8
  347. package/src/helpers/createAppStructure.ts +12 -6
  348. package/src/helpers/createSlotComponent.ts +4 -4
  349. package/src/helpers/mergeStyles.ts +11 -11
  350. package/src/hooks/createControllableSignal.ts +11 -11
  351. package/src/hooks/createControllableStore.ts +8 -8
  352. package/src/hooks/createIMEHandler.ts +7 -7
  353. package/src/hooks/createMountTransition.ts +4 -4
  354. package/src/hooks/createSelectionGroup.tsx +1 -1
  355. package/src/hooks/createSlotSignal.ts +2 -2
  356. package/src/hooks/useLocalStorage.ts +13 -13
  357. package/src/hooks/useLogger.ts +2 -2
  358. package/src/hooks/useRouterLink.ts +15 -15
  359. package/src/index.ts +4 -3
  360. package/src/providers/ClipboardProvider.tsx +19 -19
  361. package/src/providers/ConfigContext.tsx +8 -8
  362. package/src/providers/ErrorLoggerProvider.tsx +3 -3
  363. package/src/providers/LoggerContext.tsx +13 -13
  364. package/src/providers/PwaUpdateProvider.tsx +6 -6
  365. package/src/providers/ServiceClientContext.ts +9 -9
  366. package/src/providers/ServiceClientProvider.tsx +15 -15
  367. package/src/providers/SyncStorageContext.tsx +15 -15
  368. package/src/providers/SystemProvider.tsx +15 -12
  369. package/src/providers/ThemeContext.tsx +26 -26
  370. package/src/providers/i18n/I18nContext.tsx +129 -0
  371. package/src/providers/i18n/I18nContext.types.ts +30 -0
  372. package/src/providers/i18n/i18nUtils.ts +38 -0
  373. package/src/providers/i18n/locales/en.ts +161 -0
  374. package/src/providers/i18n/locales/ko.ts +161 -0
  375. package/src/providers/shared-data/SharedDataChangeEvent.ts +4 -4
  376. package/src/providers/shared-data/SharedDataContext.ts +29 -29
  377. package/src/providers/shared-data/SharedDataProvider.tsx +21 -21
  378. package/src/styles/patterns.styles.ts +6 -6
  379. package/src/styles/tokens.styles.ts +5 -5
  380. package/tailwind.config.ts +1 -1
  381. package/tailwind.css +4 -4
  382. package/tests/components/data/List.spec.tsx +689 -0
  383. package/tests/components/data/Pagination.spec.tsx +336 -0
  384. package/tests/components/data/Table.spec.tsx +55 -0
  385. package/tests/components/data/kanban/Kanban.selection.spec.tsx +213 -0
  386. package/tests/components/data/sheet/DataSheet.spec.tsx +645 -0
  387. package/tests/components/disclosure/Collapse.spec.tsx +173 -0
  388. package/tests/components/disclosure/Dialog.spec.tsx +438 -0
  389. package/tests/components/disclosure/DialogProvider.spec.tsx +142 -0
  390. package/tests/components/disclosure/Dropdown.spec.tsx +213 -0
  391. package/tests/components/disclosure/Tabs.spec.tsx +220 -0
  392. package/tests/components/display/Alert.spec.tsx +47 -0
  393. package/tests/components/display/Barcode.spec.tsx +61 -0
  394. package/tests/components/display/Card.spec.tsx +41 -0
  395. package/tests/components/display/Link.spec.tsx +62 -0
  396. package/tests/components/display/Tag.spec.tsx +47 -0
  397. package/tests/components/features/address/AddressSearch.spec.tsx +45 -0
  398. package/tests/components/features/crud-detail/CrudDetail.spec.tsx +537 -0
  399. package/tests/components/features/crud-sheet/CrudSheet.spec.tsx +491 -0
  400. package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +482 -0
  401. package/tests/components/features/permission-table/PermissionTable.spec.tsx +288 -0
  402. package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +463 -0
  403. package/tests/components/feedback/busy/BusyContainer.spec.tsx +80 -0
  404. package/tests/components/feedback/notification/LiveRegion.spec.tsx +52 -0
  405. package/tests/components/feedback/notification/NotificationBanner.spec.tsx +187 -0
  406. package/tests/components/feedback/notification/NotificationBell.spec.tsx +226 -0
  407. package/tests/components/feedback/notification/NotificationContext.spec.tsx +362 -0
  408. package/tests/components/feedback/print/Print.spec.tsx +45 -0
  409. package/tests/components/form-control/Button.spec.tsx +119 -0
  410. package/tests/components/form-control/Invalid.spec.tsx +131 -0
  411. package/tests/components/form-control/checkbox/Checkbox.spec.tsx +137 -0
  412. package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +108 -0
  413. package/tests/components/form-control/checkbox/Radio.spec.tsx +138 -0
  414. package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +108 -0
  415. package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +94 -0
  416. package/tests/components/form-control/combobox/Combobox.spec.tsx +253 -0
  417. package/tests/components/form-control/combobox/ComboboxItem.spec.tsx +88 -0
  418. package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +208 -0
  419. package/tests/components/form-control/field/DatePicker.spec.tsx +381 -0
  420. package/tests/components/form-control/field/DateTimePicker.spec.tsx +383 -0
  421. package/tests/components/form-control/field/NumberInput.spec.tsx +371 -0
  422. package/tests/components/form-control/field/TextInput.spec.tsx +341 -0
  423. package/tests/components/form-control/field/Textarea.spec.tsx +224 -0
  424. package/tests/components/form-control/field/TimePicker.spec.tsx +315 -0
  425. package/tests/components/form-control/numpad/Numpad.spec.tsx +248 -0
  426. package/tests/components/form-control/select/Select.spec.tsx +676 -0
  427. package/tests/components/form-control/select/SelectItem.spec.tsx +174 -0
  428. package/tests/components/layout/FormGroup.spec.tsx +104 -0
  429. package/tests/components/layout/FormTable.spec.tsx +43 -0
  430. package/tests/components/layout/sidebar/Sidebar.spec.tsx +192 -0
  431. package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +261 -0
  432. package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +219 -0
  433. package/tests/components/layout/sidebar/SidebarUser.spec.tsx +133 -0
  434. package/tests/components/layout/topbar/TopbarActions.spec.tsx +77 -0
  435. package/tests/components/layout/topbar/TopbarContainer.spec.tsx +38 -0
  436. package/tests/components/layout/topbar/createTopbarActions.spec.tsx +66 -0
  437. package/tests/directives/ripple.spec.tsx +130 -0
  438. package/tests/helpers/createAppStructure.spec.tsx +843 -0
  439. package/tests/helpers/mergeStyles.spec.ts +172 -0
  440. package/tests/hooks/createControllableSignal.spec.ts +194 -0
  441. package/tests/hooks/createIMEHandler.spec.ts +80 -0
  442. package/tests/hooks/createMountTransition.spec.ts +86 -0
  443. package/tests/hooks/useLocalStorage.spec.tsx +223 -0
  444. package/tests/hooks/useLogger.spec.tsx +116 -0
  445. package/tests/hooks/usePrint.spec.tsx +134 -0
  446. package/tests/hooks/useRouterLink.spec.tsx +183 -0
  447. package/tests/hooks/useSyncConfig.spec.tsx +304 -0
  448. package/tests/providers/ClipboardProvider.spec.tsx +20 -0
  449. package/tests/providers/ConfigContext.spec.tsx +42 -0
  450. package/tests/providers/ErrorLoggerProvider.spec.tsx +73 -0
  451. package/tests/providers/LoggerContext.spec.tsx +76 -0
  452. package/tests/providers/PwaUpdateProvider.spec.tsx +22 -0
  453. package/tests/providers/ServiceClientContext.spec.tsx +88 -0
  454. package/tests/providers/SyncStorageContext.spec.tsx +77 -0
  455. package/tests/providers/i18n/I18nContext.spec.tsx +110 -0
  456. package/tests/providers/shared-data/SharedDataProvider.spec.tsx +401 -0
  457. package/tests/vitest-env.d.ts +1 -0
  458. package/dist/components/form-control/select-list/SelectList.d.ts +0 -54
  459. package/dist/components/form-control/select-list/SelectList.d.ts.map +0 -1
  460. package/dist/components/form-control/select-list/SelectList.js +0 -280
  461. package/dist/components/form-control/select-list/SelectList.js.map +0 -6
  462. package/dist/components/form-control/select-list/SelectListContext.d.ts +0 -13
  463. package/dist/components/form-control/select-list/SelectListContext.d.ts.map +0 -1
  464. package/dist/components/form-control/select-list/SelectListContext.js +0 -14
  465. package/dist/components/form-control/select-list/SelectListContext.js.map +0 -6
  466. package/docs/data-components.md +0 -782
  467. package/docs/disclosure.md +0 -254
  468. package/docs/display.md +0 -153
  469. package/docs/feedback.md +0 -238
  470. package/docs/form-controls.md +0 -1068
  471. package/docs/helpers.md +0 -54
  472. package/docs/hooks.md +0 -588
  473. package/docs/layout.md +0 -384
  474. package/docs/providers.md +0 -211
  475. package/docs/styling.md +0 -184
  476. package/src/components/form-control/select-list/SelectList.tsx +0 -385
  477. package/src/components/form-control/select-list/SelectListContext.ts +0 -23
@@ -25,35 +25,36 @@ 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
+ "rounded-none",
46
+ "border-0 border-b",
45
47
  borderSubtle,
46
- "bg-transparent",
47
- "px-2 py-1.5",
48
+ "bg-transparent dark:bg-transparent",
49
+ "h-auto",
50
+ "py-1.5",
48
51
  "text-sm",
49
- "outline-none",
50
- textPlaceholder,
51
52
  );
52
53
 
53
- // 전체선택/해제 버튼 영역 스타일
54
+ // Select all/deselect all button area styles
54
55
  const selectAllBarClass = clsx("flex gap-2", "border-b", borderSubtle, "px-2 py-1", "text-xs");
55
56
 
56
- // 전체선택/해제 버튼 스타일
57
+ // Select all/deselect all button styles
57
58
  const selectAllBtnClass = clsx(
58
59
  "text-primary-500",
59
60
  "hover:text-primary-600 dark:hover:text-primary-400",
@@ -61,7 +62,7 @@ const selectAllBtnClass = clsx(
61
62
  );
62
63
 
63
64
  /**
64
- * Select 우측 액션 서브 컴포넌트
65
+ * Select right-side action sub-component
65
66
  */
66
67
  interface SelectActionProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {}
67
68
 
@@ -100,11 +101,11 @@ const SelectAction: ParentComponent<SelectActionProps> = (props) => {
100
101
  };
101
102
 
102
103
  /**
103
- * 드롭다운 상단 커스텀 영역 서브 컴포넌트
104
+ * Dropdown top custom area sub-component
104
105
  */
105
106
  const SelectHeader: ParentComponent = (props) => {
106
107
  const ctx = useSelectContext();
107
- // eslint-disable-next-line solid/reactivity -- 슬롯 accessor 저장, JSX tracked scope에서 호출됨
108
+ // eslint-disable-next-line solid/reactivity -- Save as slot accessor, called from JSX tracked scope
108
109
  ctx.setHeader(() => props.children);
109
110
  onCleanup(() => ctx.setHeader(undefined));
110
111
  return null;
@@ -114,87 +115,87 @@ const SelectItemTemplate = <TArgs extends unknown[]>(props: {
114
115
  children: (...args: TArgs) => JSX.Element;
115
116
  }) => {
116
117
  const ctx = useSelectContext();
117
- // eslint-disable-next-line solid/reactivity -- 렌더 함수를 signal 저장, JSX tracked scope에서 호출됨
118
+ // eslint-disable-next-line solid/reactivity -- Store render function in signal, called from JSX tracked scope
118
119
  ctx.setItemTemplate(props.children as (...args: unknown[]) => JSX.Element);
119
120
  onCleanup(() => ctx.setItemTemplate(undefined));
120
121
  return null;
121
122
  };
122
123
 
123
- // Props 정의
124
+ // Props definition
124
125
 
125
- // 공통 Props (value, onValueChange, multiple 제외)
126
+ // Common Props (except value, onValueChange, multiple)
126
127
  interface SelectCommonProps<TValue = unknown> {
127
- /** 비활성화 */
128
+ /** Disabled state */
128
129
  disabled?: boolean;
129
130
 
130
- /** 필수 입력 */
131
+ /** Required input */
131
132
  required?: boolean;
132
133
 
133
- /** 미선택 표시 텍스트 */
134
+ /** Placeholder text when no value selected */
134
135
  placeholder?: string;
135
136
 
136
- /** 트리거 크기 */
137
+ /** Trigger size */
137
138
  size?: ComponentSize;
138
139
 
139
- /** 테두리 없는 스타일 */
140
+ /** Borderless style */
140
141
  inset?: boolean;
141
142
 
142
- /** 커스텀 유효성 검사 함수 */
143
+ /** Custom validation function */
143
144
  validate?: (value: unknown) => string | undefined;
144
145
 
145
- /** touchMode: 포커스 해제 후에만 에러 표시 */
146
+ /** touchMode: Show error only after blur */
146
147
  touchMode?: boolean;
147
148
 
148
- /** 검색 텍스트 추출 함수 (설정 검색 입력 자동 표시) */
149
+ /** Search text extraction function (shows search input when set) */
149
150
  getSearchText?: (item: TValue) => string;
150
151
 
151
- /** 숨김 여부 판별 함수 */
152
+ /** Function to determine if item is hidden */
152
153
  getIsHidden?: (item: TValue) => boolean;
153
154
 
154
- /** 커스텀 class */
155
+ /** Custom class */
155
156
  class?: string;
156
157
 
157
- /** 커스텀 style */
158
+ /** Custom style */
158
159
  style?: JSX.CSSProperties;
159
160
  }
160
161
 
161
- // 단일 선택 Props
162
+ // Single select Props
162
163
  interface SelectSingleBaseProps<TValue> extends SelectCommonProps<TValue> {
163
- /** 다중 선택 모드 */
164
+ /** Single select mode */
164
165
  multiple?: false;
165
166
 
166
- /** 현재 선택된 */
167
+ /** Currently selected value */
167
168
  value?: TValue;
168
169
 
169
- /** 변경 콜백 */
170
+ /** Value change callback */
170
171
  onValueChange?: (value: TValue) => void;
171
172
 
172
- /** 다중 선택 표시 방향 (단일 선택에서는 사용 ) */
173
+ /** Display direction for multiple select (not used in single select) */
173
174
  multiDisplayDirection?: never;
174
175
 
175
- /** 전체 선택 버튼 숨기기 (단일 선택에서는 사용 ) */
176
+ /** Hide select all button (not used in single select) */
176
177
  hideSelectAll?: never;
177
178
  }
178
179
 
179
- // 다중 선택 Props
180
+ // Multiple select Props
180
181
  interface SelectMultipleBaseProps<TValue> extends SelectCommonProps<TValue> {
181
- /** 다중 선택 모드 */
182
+ /** Multiple select mode */
182
183
  multiple: true;
183
184
 
184
- /** 현재 선택된 */
185
+ /** Currently selected values */
185
186
  value?: TValue[];
186
187
 
187
- /** 변경 콜백 */
188
+ /** Value change callback */
188
189
  onValueChange?: (value: TValue[]) => void;
189
190
 
190
- /** 다중 선택 표시 방향 */
191
+ /** Display direction for multiple select */
191
192
  multiDisplayDirection?: "horizontal" | "vertical";
192
193
 
193
- /** 전체 선택 버튼 숨기기 */
194
+ /** Hide select all button */
194
195
  hideSelectAll?: boolean;
195
196
  }
196
197
 
197
- // items 방식
198
+ // items mode
198
199
  interface SelectWithItemsPropsBase<TValue> {
199
200
  items: TValue[];
200
201
  getChildren?: (item: TValue, index: number, depth: number) => TValue[] | undefined;
@@ -202,7 +203,7 @@ interface SelectWithItemsPropsBase<TValue> {
202
203
  children?: JSX.Element;
203
204
  }
204
205
 
205
- // children 방식
206
+ // children mode
206
207
  interface SelectWithChildrenPropsBase<TValue> {
207
208
  items?: never;
208
209
  getChildren?: never;
@@ -225,17 +226,17 @@ interface SelectComponent {
225
226
  }
226
227
 
227
228
  /**
228
- * Select 컴포넌트
229
+ * Select component
229
230
  *
230
231
  * @example
231
232
  * ```tsx
232
- * // children 방식
233
+ * // children mode
233
234
  * <Select value={selected()} onValueChange={setSelected} renderValue={(v) => v.name}>
234
235
  * <Select.Item value={item1}>{item1.name}</Select.Item>
235
236
  * <Select.Item value={item2}>{item2.name}</Select.Item>
236
237
  * </Select>
237
238
  *
238
- * // items prop 방식
239
+ * // items prop mode
239
240
  * <Select items={data} value={selected()} onValueChange={setSelected}>
240
241
  * <Select.ItemTemplate>
241
242
  * {(item) => <>{item.name}</>}
@@ -267,26 +268,27 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
267
268
  "getIsHidden",
268
269
  ]);
269
270
 
271
+ const i18n = useI18nOptional();
270
272
  const [open, setOpen] = createSignal(false);
271
273
 
272
- // 검색 텍스트 signal
274
+ // Search text signal
273
275
  const [searchText, setSearchText] = createSignal("");
274
276
 
275
- // open false searchText 초기화
277
+ // Reset searchText when open becomes false
276
278
  createEffect(() => {
277
279
  if (!open()) {
278
280
  setSearchText("");
279
281
  }
280
282
  });
281
283
 
282
- // 선택된 관리 (controlled/uncontrolled 패턴)
284
+ // Manage selected value (controlled/uncontrolled pattern)
283
285
  type ValueType = T | T[] | undefined;
284
286
  const [value, setValue] = createControllableSignal<ValueType>({
285
287
  value: () => local.value,
286
288
  onChange: () => local.onValueChange as ((v: ValueType) => void) | undefined,
287
289
  } as Parameters<typeof createControllableSignal<ValueType>>[0]);
288
290
 
289
- // 값이 선택되어 있는지 확인
291
+ // Check if value is selected
290
292
  const isSelected = (itemValue: T): boolean => {
291
293
  const current = value();
292
294
  if (current === undefined) return false;
@@ -297,7 +299,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
297
299
  return current === itemValue;
298
300
  };
299
301
 
300
- // 토글
302
+ // Toggle value
301
303
  const toggleValue = (itemValue: T) => {
302
304
  if (local.multiple) {
303
305
  const current = (value() as T[] | undefined) ?? [];
@@ -312,12 +314,12 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
312
314
  }
313
315
  };
314
316
 
315
- // 드롭다운 닫기
317
+ // Close dropdown
316
318
  const closeDropdown = () => {
317
319
  setOpen(false);
318
320
  };
319
321
 
320
- // 슬롯 signals
322
+ // Slot signals
321
323
  const [header, setHeader] = createSlotSignal();
322
324
  const [action, setAction] = createSlotSignal();
323
325
  const [itemTemplate, _setItemTemplate] = createSignal<
@@ -326,7 +328,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
326
328
  const setItemTemplate = (fn: ((...args: unknown[]) => JSX.Element) | undefined) =>
327
329
  _setItemTemplate(() => fn);
328
330
 
329
- // Context
331
+ // Context value
330
332
  const contextValue: SelectContextValue<T> = {
331
333
  multiple: () => local.multiple ?? false,
332
334
  isSelected,
@@ -337,7 +339,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
337
339
  setItemTemplate,
338
340
  };
339
341
 
340
- // 트리거 키보드 처리 (Enter/Space 처리, ArrowUp/Down Dropdown이 처리)
342
+ // Trigger keyboard handling (only Enter/Space, ArrowUp/Down handled by Dropdown)
341
343
  const handleTriggerKeyDown = (e: KeyboardEvent) => {
342
344
  if (local.disabled) return;
343
345
 
@@ -347,15 +349,15 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
347
349
  }
348
350
  };
349
351
 
350
- // 유효성 검사 메시지
352
+ // Validation error message
351
353
  const errorMsg = createMemo(() => {
352
354
  const v = value();
353
355
  if (local.required && (v === undefined || v === null || v === ""))
354
- return "필수 입력 항목입니다";
356
+ return "This is a required field";
355
357
  return local.validate?.(v);
356
358
  });
357
359
 
358
- // 트리거 클래스
360
+ // Trigger class
359
361
  const getTriggerClassName = () =>
360
362
  getTriggerClass({
361
363
  size: local.size,
@@ -364,7 +366,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
364
366
  class: local.class,
365
367
  });
366
368
 
367
- // 검색 필터링 (계층 구조 지원)
369
+ // Search filtering (supports hierarchical structure)
368
370
  const filteredItems = createMemo((): T[] | undefined => {
369
371
  if (!local.items) return undefined;
370
372
  if (!local.getSearchText || !searchText()) return local.items;
@@ -372,12 +374,12 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
372
374
  const terms = searchText().trim().split(" ").filter(Boolean);
373
375
  if (terms.length === 0) return local.items;
374
376
 
375
- // 계층 구조에서 자식 매칭 부모도 포함
377
+ // Include parent when child matches in hierarchical structure
376
378
  const matchesSearch = (item: T): boolean => {
377
379
  const text = local.getSearchText!(item).toLowerCase();
378
380
  if (terms.every((t) => text.includes(t.toLowerCase()))) return true;
379
381
 
380
- // 자식 매칭되는 항목이 있으면 부모도 표시
382
+ // Show parent if any child matches
381
383
  if (local.getChildren) {
382
384
  const itemChildren = local.getChildren(item, 0, 0);
383
385
  if (itemChildren?.some((child) => matchesSearch(child))) return true;
@@ -389,13 +391,13 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
389
391
  return local.items.filter((item) => matchesSearch(item));
390
392
  });
391
393
 
392
- // 숨김 필터링 적용된 items
394
+ // Items with hidden filter applied
393
395
  const visibleItems = createMemo((): T[] | undefined => {
394
396
  const items = filteredItems();
395
397
  if (!items || !local.getIsHidden) return items;
396
398
 
397
399
  return items.filter((item) => {
398
- // 숨김 항목이지만 선택된 경우 표시 (취소선으로)
400
+ // Show hidden item if selected (with strikethrough)
399
401
  if (local.getIsHidden!(item)) {
400
402
  return isSelected(item);
401
403
  }
@@ -403,31 +405,31 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
403
405
  });
404
406
  });
405
407
 
406
- // 전체선택
408
+ // Select all
407
409
  const handleSelectAll = () => {
408
410
  const items = visibleItems();
409
411
  if (!items) return;
410
412
  setValue(items);
411
413
  };
412
414
 
413
- // 전체해제
415
+ // Deselect all
414
416
  const handleDeselectAll = () => {
415
417
  setValue([] as unknown as T[]);
416
418
  };
417
419
 
418
- // 내부 컴포넌트: Provider 안에서 children resolve하여 슬롯 등록을 트리거
420
+ // Inner component: resolve children inside Provider to trigger slot registration
419
421
  const SelectInner: ParentComponent = (innerProps) => {
420
- // children() resolve로 서브 컴포넌트 등록 트리거 (Header, Action, ItemTemplate null 반환)
422
+ // Resolve children() to trigger sub-component registration (Header, Action, ItemTemplate return null)
421
423
  const resolved = children(() => innerProps.children);
422
424
 
423
- // itemTemplate 함수 추출
425
+ // Extract itemTemplate function
424
426
  const getItemTemplate = ():
425
427
  | ((item: T, index: number, depth: number) => JSX.Element)
426
428
  | undefined => {
427
429
  return itemTemplate() as ((item: T, index: number, depth: number) => JSX.Element) | undefined;
428
430
  };
429
431
 
430
- // items 재귀 렌더링
432
+ // Render items recursively
431
433
  const renderItems = (itemList: T[], depth: number): JSX.Element => {
432
434
  const tpl = getItemTemplate();
433
435
  return (
@@ -439,7 +441,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
439
441
  {tpl ? tpl(item, index(), depth) : String(item)}
440
442
  <Show when={local.getChildren?.(item, index(), depth)} keyed>
441
443
  {(itemChildren) => {
442
- // 자식 목록에서 숨김 필터링 적용
444
+ // Apply hidden filter to child list
443
445
  const visibleChildren = () => {
444
446
  if (!local.getIsHidden) return itemChildren;
445
447
  return itemChildren.filter((child) => {
@@ -463,7 +465,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
463
465
  );
464
466
  };
465
467
 
466
- // 선택된 렌더링 (items 방식일 itemTemplate 재사용)
468
+ // Render selected value (reuse itemTemplate when in items mode)
467
469
  const renderValue = (renderVal: T): JSX.Element => {
468
470
  if (local.renderValue) {
469
471
  return local.renderValue(renderVal);
@@ -475,7 +477,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
475
477
  return <>{String(renderVal)}</>;
476
478
  };
477
479
 
478
- // 선택된 표시
480
+ // Display selected value
479
481
  const renderSelectedValue = (): JSX.Element => {
480
482
  const current = value();
481
483
 
@@ -495,10 +497,10 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
495
497
  return renderValue(current as T);
496
498
  };
497
499
 
498
- // 미지정 항목 표시 여부: 단일 선택 + required 아님 + items 모드
500
+ // Show unset item: single select + not required + items mode
499
501
  const showUnsetItem = () => !local.multiple && !local.required && local.items !== undefined;
500
502
 
501
- // 전체선택/해제 버튼 표시 여부: multiple + hideSelectAll 아님 + items 모드
503
+ // Show select all/deselect bar: multiple + not hideSelectAll + items mode
502
504
  const showSelectAllBar = () =>
503
505
  local.multiple === true && !local.hideSelectAll && local.items !== undefined;
504
506
 
@@ -533,18 +535,16 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
533
535
  </Dropdown.Trigger>
534
536
  <Dropdown.Content>
535
537
  <Show when={header()}>{header()!()}</Show>
536
- {/* 검색 입력 */}
538
+ {/* Search input */}
537
539
  <Show when={local.getSearchText && local.items}>
538
- <input
539
- type="text"
540
- data-select-search
541
- class={searchInputClass}
542
- placeholder="검색..."
540
+ <TextInput
543
541
  value={searchText()}
544
- onInput={(e) => setSearchText(e.currentTarget.value)}
542
+ onValueChange={setSearchText}
543
+ placeholder={i18n?.t("select.searchPlaceholder") ?? "Search..."}
544
+ class={searchInputClass}
545
545
  />
546
546
  </Show>
547
- {/* 전체선택/해제 버튼 */}
547
+ {/* Select all/deselect buttons */}
548
548
  <Show when={showSelectAllBar()}>
549
549
  <div class={selectAllBarClass}>
550
550
  <button
@@ -553,7 +553,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
553
553
  class={selectAllBtnClass}
554
554
  onClick={handleSelectAll}
555
555
  >
556
- 전체선택
556
+ {i18n?.t("select.selectAll") ?? "Select all"}
557
557
  </button>
558
558
  <button
559
559
  type="button"
@@ -561,16 +561,16 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
561
561
  class={selectAllBtnClass}
562
562
  onClick={handleDeselectAll}
563
563
  >
564
- 전체해제
564
+ {i18n?.t("select.deselectAll") ?? "Deselect all"}
565
565
  </button>
566
566
  </div>
567
567
  </Show>
568
568
  <List inset role="listbox">
569
569
  <Show when={local.items} fallback={resolved()}>
570
- {/* 미지정 항목 */}
570
+ {/* Unset item */}
571
571
  <Show when={showUnsetItem()}>
572
572
  <SelectItem value={undefined as T}>
573
- <span class={textMuted}>미지정</span>
573
+ <span class={textMuted}>{i18n?.t("select.unset") ?? "Unset"}</span>
574
574
  </SelectItem>
575
575
  </Show>
576
576
  {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)}