@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
@@ -21,7 +21,7 @@ import {
21
21
  import { PlaceholderFallback } from "./FieldPlaceholder";
22
22
  import { Invalid } from "../../form-control/Invalid";
23
23
 
24
- // NumberInput 전용 input 스타일 (우측 정렬 + 스피너 숨김)
24
+ // NumberInput-specific input style (right-aligned + spinner hidden)
25
25
  const numberInputClass = clsx(
26
26
  fieldInputClass,
27
27
  "text-right",
@@ -38,67 +38,67 @@ const NumberInputSlotsContext = createContext<NumberInputSlotsContextValue>();
38
38
  const NumberInputPrefix = createSlotComponent(NumberInputSlotsContext, (ctx) => ctx.setPrefix);
39
39
 
40
40
  export interface NumberInputProps {
41
- /** 입력 */
41
+ /** Input value */
42
42
  value?: number;
43
43
 
44
- /** 변경 콜백 */
44
+ /** Value change callback */
45
45
  onValueChange?: (value: number | undefined) => void;
46
46
 
47
- /** 천단위 콤마 표시 (기본값: true) */
47
+ /** Display thousand separator (default: true) */
48
48
  comma?: boolean;
49
49
 
50
- /** 최소 소수점 자릿수 */
50
+ /** Minimum decimal places */
51
51
  minDigits?: number;
52
52
 
53
- /** 플레이스홀더 */
53
+ /** Placeholder text */
54
54
  placeholder?: string;
55
55
 
56
- /** 타이틀 (툴팁) */
56
+ /** Title (tooltip) */
57
57
  title?: string;
58
58
 
59
- /** 비활성화 */
59
+ /** Disable input */
60
60
  disabled?: boolean;
61
61
 
62
- /** 읽기 전용 */
62
+ /** Read-only */
63
63
  readonly?: boolean;
64
64
 
65
- /** 사이즈 */
65
+ /** Size */
66
66
  size?: FieldSize;
67
67
 
68
- /** 테두리 없는 스타일 */
68
+ /** Borderless style */
69
69
  inset?: boolean;
70
70
 
71
- /** 커스텀 class */
71
+ /** Custom class */
72
72
  class?: string;
73
73
 
74
- /** 커스텀 style */
74
+ /** Custom style */
75
75
  style?: JSX.CSSProperties;
76
76
 
77
- /** 필수 입력 여부 */
77
+ /** Required input */
78
78
  required?: boolean;
79
79
 
80
- /** 최솟값 */
80
+ /** Minimum value */
81
81
  min?: number;
82
82
 
83
- /** 최댓값 */
83
+ /** Maximum value */
84
84
  max?: number;
85
85
 
86
- /** 커스텀 유효성 검사 함수 */
86
+ /** Custom validation function */
87
87
  validate?: (value: number | undefined) => string | undefined;
88
88
 
89
- /** touchMode: 포커스 해제 후에만 에러 표시 */
89
+ /** touchMode: show errors only after blur */
90
90
  touchMode?: boolean;
91
91
 
92
- /** 자식 요소 (Prefix 슬롯 ) */
92
+ /** Children (Prefix slot, etc.) */
93
93
  children?: JSX.Element;
94
94
  }
95
95
 
96
96
  /**
97
- * 숫자를 표시용 문자열로 변환한다
98
- * @param value 숫자
99
- * @param useComma 천단위 콤마 사용 여부
100
- * @param minDigits 최소 소수점 자릿수
101
- * @returns 표시용 문자열
97
+ * Convert number to display string
98
+ * @param value - Numeric value
99
+ * @param useComma - Whether to use thousand separator
100
+ * @param minDigits - Minimum decimal places
101
+ * @returns Display string
102
102
  */
103
103
  function formatNumber(value: number | undefined, useComma: boolean, minDigits?: number): string {
104
104
  if (value == null) return "";
@@ -106,12 +106,12 @@ function formatNumber(value: number | undefined, useComma: boolean, minDigits?:
106
106
  let result: string;
107
107
 
108
108
  if (minDigits != null && minDigits > 0) {
109
- // 현재 소수점 자릿수 확인
109
+ // Check current decimal places
110
110
  const valueStr = String(value);
111
111
  const decimalIndex = valueStr.indexOf(".");
112
112
  const currentDigits = decimalIndex >= 0 ? valueStr.length - decimalIndex - 1 : 0;
113
113
 
114
- // 최소 자릿수보다 작으면 패딩
114
+ // Pad if less than minimum decimal places
115
115
  if (currentDigits < minDigits) {
116
116
  result = value.toFixed(minDigits);
117
117
  } else {
@@ -122,11 +122,11 @@ function formatNumber(value: number | undefined, useComma: boolean, minDigits?:
122
122
  }
123
123
 
124
124
  if (useComma) {
125
- // 정수부와 소수부 분리
125
+ // Separate integer and decimal parts
126
126
  const dotIndex = result.indexOf(".");
127
127
  const integerPart = dotIndex >= 0 ? result.slice(0, dotIndex) : result;
128
128
  const decimalPart = dotIndex >= 0 ? result.slice(dotIndex + 1) : null;
129
- // 정수부에만 콤마 추가
129
+ // Add comma only to integer part
130
130
  const formattedInteger = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
131
131
  result = decimalPart !== null ? `${formattedInteger}.${decimalPart}` : formattedInteger;
132
132
  }
@@ -135,17 +135,17 @@ function formatNumber(value: number | undefined, useComma: boolean, minDigits?:
135
135
  }
136
136
 
137
137
  /**
138
- * 표시용 문자열을 숫자로 변환한다
139
- * @param str 표시용 문자열
140
- * @returns 숫자 또는 undefined
138
+ * Convert display string to number
139
+ * @param str - Display string
140
+ * @returns Numeric value or undefined
141
141
  */
142
142
  function parseNumber(str: string): number | undefined {
143
143
  if (str === "" || str === "-") return undefined;
144
144
 
145
- // 콤마 제거
145
+ // Remove commas
146
146
  const cleanStr = str.replace(/,/g, "");
147
147
 
148
- // 숫자로 변환 시도
148
+ // Attempt number conversion
149
149
  const num = Number(cleanStr);
150
150
 
151
151
  if (Number.isNaN(num)) return undefined;
@@ -154,18 +154,18 @@ function parseNumber(str: string): number | undefined {
154
154
  }
155
155
 
156
156
  /**
157
- * 입력 문자열이 유효한 숫자 형식인지 확인한다
158
- * @param str 입력 문자열
159
- * @returns 유효 여부
157
+ * Check if input string is valid number format
158
+ * @param str - Input string
159
+ * @returns Whether valid
160
160
  */
161
161
  function isValidNumberInput(str: string): boolean {
162
162
  if (str === "" || str === "-" || str === ".") return true;
163
163
 
164
- // 콤마 제거
164
+ // Remove commas
165
165
  const cleanStr = str.replace(/,/g, "");
166
166
 
167
- // 숫자 형식 패턴 (입력 상태 포함)
168
- // 예: "123", "123.", "123.45", "-123", "-", "-.123"
167
+ // Number format pattern (including input-in-progress state)
168
+ // Examples: "123", "123.", "123.45", "-123", "-", "-.123"
169
169
  return /^-?\d*\.?\d*$/.test(cleanStr);
170
170
  }
171
171
 
@@ -175,20 +175,20 @@ interface NumberInputComponent {
175
175
  }
176
176
 
177
177
  /**
178
- * NumberInput 컴포넌트
178
+ * NumberInput component
179
179
  *
180
180
  * @example
181
181
  * ```tsx
182
- * // 기본 사용
182
+ * // Basic usage
183
183
  * <NumberInput value={num()} onValueChange={setNum} />
184
184
  *
185
- * // 천단위 콤마 없이
185
+ * // Without thousand separator
186
186
  * <NumberInput value={num()} comma={false} />
187
187
  *
188
- * // 최소 소수점 자릿수 지정
188
+ * // Specify minimum decimal places
189
189
  * <NumberInput value={price()} minDigits={2} />
190
190
  *
191
- * // Prefix 슬롯
191
+ * // Prefix slot
192
192
  * <NumberInput value={price()}>
193
193
  * <NumberInput.Prefix>₩</NumberInput.Prefix>
194
194
  * </NumberInput>
@@ -216,11 +216,11 @@ export const NumberInput: NumberInputComponent = (props) => {
216
216
  "children",
217
217
  ]);
218
218
 
219
- // 입력 중인 상태를 추적하기 위한 내부 문자열 상태
219
+ // Internal string state to track editing state
220
220
  const [inputStr, setInputStr] = createSignal<string>("");
221
221
  const [isEditing, setIsEditing] = createSignal(false);
222
222
 
223
- // controlled/uncontrolled 패턴 지원
223
+ // Support controlled/uncontrolled pattern
224
224
  const [value, setValue] = createControllableSignal({
225
225
  value: () => local.value,
226
226
  onChange: () => local.onValueChange,
@@ -229,7 +229,7 @@ export const NumberInput: NumberInputComponent = (props) => {
229
229
  const [prefix, setPrefix] = createSlotSignal();
230
230
  const prefixEl = () => prefix() !== undefined;
231
231
 
232
- // 외부 변경 입력 문자열 동기화
232
+ // Sync input string when external value changes
233
233
  createEffect(() => {
234
234
  const val = value();
235
235
  if (!isEditing()) {
@@ -237,7 +237,7 @@ export const NumberInput: NumberInputComponent = (props) => {
237
237
  }
238
238
  });
239
239
 
240
- // 표시 계산
240
+ // Compute display value
241
241
  const displayValue = () => {
242
242
  if (isEditing()) {
243
243
  return inputStr();
@@ -245,13 +245,13 @@ export const NumberInput: NumberInputComponent = (props) => {
245
245
  return formatNumber(value(), local.comma ?? true, local.minDigits);
246
246
  };
247
247
 
248
- // 입력 핸들러
248
+ // Input handler
249
249
  const handleInput: JSX.InputEventHandler<HTMLInputElement, InputEvent> = (e) => {
250
250
  const newValue = e.currentTarget.value;
251
251
 
252
- // 유효한 숫자 형식인지 확인
252
+ // Check if valid number format
253
253
  if (!isValidNumberInput(newValue)) {
254
- // 유효하지 않은 입력은 무시하고 이전 복원
254
+ // Ignore invalid input and restore previous value
255
255
  e.currentTarget.value = inputStr();
256
256
  return;
257
257
  }
@@ -259,15 +259,15 @@ export const NumberInput: NumberInputComponent = (props) => {
259
259
  setInputStr(newValue);
260
260
  setIsEditing(true);
261
261
 
262
- // 숫자로 변환
262
+ // Convert to number
263
263
  const num = parseNumber(newValue);
264
264
  setValue(num);
265
265
  };
266
266
 
267
- // focus 핸들러
267
+ // Focus handler
268
268
  const handleFocus: JSX.FocusEventHandler<HTMLInputElement, FocusEvent> = () => {
269
269
  setIsEditing(true);
270
- // focus 콤마 제거된 값으로 설정
270
+ // On focus, set value without comma
271
271
  const val = value();
272
272
  if (val != null) {
273
273
  setInputStr(String(val));
@@ -276,14 +276,14 @@ export const NumberInput: NumberInputComponent = (props) => {
276
276
  }
277
277
  };
278
278
 
279
- // blur 핸들러
279
+ // Blur handler
280
280
  const handleBlur: JSX.FocusEventHandler<HTMLInputElement, FocusEvent> = () => {
281
281
  setIsEditing(false);
282
- // blur 포맷팅 적용
282
+ // On blur, apply formatting
283
283
  setInputStr(formatNumber(value(), local.comma ?? true, local.minDigits));
284
284
  };
285
285
 
286
- // wrapper 클래스 (inset 분기에서는 local.class 제외)
286
+ // Wrapper class (exclude local.class in inset branch)
287
287
  const getWrapperClass = (includeCustomClass: boolean) =>
288
288
  getFieldWrapperClass({
289
289
  size: local.size,
@@ -295,13 +295,13 @@ export const NumberInput: NumberInputComponent = (props) => {
295
295
 
296
296
  const isEditable = () => !local.disabled && !local.readonly;
297
297
 
298
- // 유효성 검사 메시지 (순서대로 검사, 최초 실패 메시지 반환)
298
+ // Validation message (check in order, return first error)
299
299
  const errorMsg = createMemo(() => {
300
300
  const v = value();
301
- if (local.required && v === undefined) return "필수 입력 항목입니다";
301
+ if (local.required && v === undefined) return "This field is required";
302
302
  if (v !== undefined) {
303
- if (local.min !== undefined && v < local.min) return `최솟값은 ${local.min}입니다`;
304
- if (local.max !== undefined && v > local.max) return `최댓값은 ${local.max}입니다`;
303
+ if (local.min !== undefined && v < local.min) return `Minimum value is ${local.min}`;
304
+ if (local.max !== undefined && v > local.max) return `Maximum value is ${local.max}`;
305
305
  }
306
306
  return local.validate?.(v);
307
307
  });
@@ -317,7 +317,7 @@ export const NumberInput: NumberInputComponent = (props) => {
317
317
  <Show
318
318
  when={local.inset}
319
319
  fallback={
320
- // standalone 모드: 기존 Show 패턴 유지
320
+ // standalone mode: keep existing Show pattern
321
321
  <Show
322
322
  when={isEditable()}
323
323
  fallback={
@@ -358,7 +358,7 @@ export const NumberInput: NumberInputComponent = (props) => {
358
358
  </Show>
359
359
  }
360
360
  >
361
- {/* inset 모드: dual-element overlay 패턴 */}
361
+ {/* inset mode: dual-element overlay pattern */}
362
362
  <div
363
363
  {...rest}
364
364
  data-number-field
@@ -25,72 +25,72 @@ type TextInputType = "text" | "password" | "email";
25
25
  const TextInputPrefix = createSlotComponent(TextInputSlotsContext, (ctx) => ctx.setPrefix);
26
26
 
27
27
  export interface TextInputProps {
28
- /** 입력 */
28
+ /** Input value */
29
29
  value?: string;
30
30
 
31
- /** 변경 콜백 */
31
+ /** Value change callback */
32
32
  onValueChange?: (value: string) => void;
33
33
 
34
- /** 입력 타입 */
34
+ /** Input type */
35
35
  type?: TextInputType;
36
36
 
37
- /** 플레이스홀더 */
37
+ /** Placeholder */
38
38
  placeholder?: string;
39
39
 
40
- /** 타이틀 (툴팁) */
40
+ /** Title (tooltip) */
41
41
  title?: string;
42
42
 
43
- /** 자동완성 */
43
+ /** Autocomplete */
44
44
  autocomplete?: JSX.HTMLAutocomplete;
45
45
 
46
- /** 비활성화 */
46
+ /** Disabled state */
47
47
  disabled?: boolean;
48
48
 
49
- /** 읽기 전용 */
49
+ /** Read-only */
50
50
  readonly?: boolean;
51
51
 
52
- /** 사이즈 */
52
+ /** Size */
53
53
  size?: FieldSize;
54
54
 
55
- /** 테두리 없는 스타일 */
55
+ /** Borderless style */
56
56
  inset?: boolean;
57
57
 
58
- /** 입력 포맷 (예: XXX-XXXX-XXXX) */
58
+ /** Input format (e.g., XXX-XXXX-XXXX) */
59
59
  format?: string;
60
60
 
61
- /** 필수 입력 여부 */
61
+ /** Required input */
62
62
  required?: boolean;
63
63
 
64
- /** 최소 길이 */
64
+ /** Minimum length */
65
65
  minLength?: number;
66
66
 
67
- /** 최대 길이 */
67
+ /** Maximum length */
68
68
  maxLength?: number;
69
69
 
70
- /** 입력 패턴 (정규식 문자열) */
70
+ /** Input pattern (regex string) */
71
71
  pattern?: string;
72
72
 
73
- /** 커스텀 유효성 검사 함수 */
73
+ /** Custom validation function */
74
74
  validate?: (value: string) => string | undefined;
75
75
 
76
- /** touchMode: 포커스 해제 후에만 에러 표시 */
76
+ /** touchMode: Show error only after blur */
77
77
  touchMode?: boolean;
78
78
 
79
- /** 커스텀 class */
79
+ /** Custom class */
80
80
  class?: string;
81
81
 
82
- /** 커스텀 style */
82
+ /** Custom style */
83
83
  style?: JSX.CSSProperties;
84
84
 
85
- /** children (TextInput.Prefix 슬롯) */
85
+ /** children (TextInput.Prefix slot) */
86
86
  children?: JSX.Element;
87
87
  }
88
88
 
89
89
  /**
90
- * 값에 포맷을 적용한다
91
- * @param value 원본
92
- * @param format 포맷 문자열 (예: XXX-XXXX-XXXX)
93
- * @returns 포맷이 적용된 값
90
+ * Apply format to value
91
+ * @param value original value
92
+ * @param format format string (e.g., XXX-XXXX-XXXX)
93
+ * @returns formatted value
94
94
  */
95
95
  function applyFormat(value: string, format: string): string {
96
96
  if (!value || !format) return value;
@@ -111,10 +111,10 @@ function applyFormat(value: string, format: string): string {
111
111
  }
112
112
 
113
113
  /**
114
- * 포맷 문자를 제거하여 원본 값을 추출한다
115
- * @param formattedValue 포맷이 적용된 값
116
- * @param format 포맷 문자열
117
- * @returns 원본
114
+ * Remove format characters to extract original value
115
+ * @param formattedValue formatted value
116
+ * @param format format string
117
+ * @returns original value
118
118
  */
119
119
  function removeFormat(formattedValue: string, format: string): string {
120
120
  if (!formattedValue || !format) return formattedValue;
@@ -135,18 +135,18 @@ function removeFormat(formattedValue: string, format: string): string {
135
135
  }
136
136
 
137
137
  /**
138
- * TextInput 컴포넌트
138
+ * TextInput component
139
139
  *
140
140
  * @example
141
141
  * ```tsx
142
- * // 기본 사용
142
+ * // Basic usage
143
143
  * <TextInput value={text()} onValueChange={setText} />
144
144
  *
145
- * // 포맷 적용
145
+ * // With format
146
146
  * <TextInput format="XXX-XXXX-XXXX" value={phone()} onValueChange={setPhone} />
147
147
  *
148
- * // password 타입
149
- * <TextInput type="password" placeholder="비밀번호 입력" />
148
+ * // Password type
149
+ * <TextInput type="password" placeholder="Enter password" />
150
150
  * ```
151
151
  */
152
152
  interface TextInputComponent {
@@ -178,13 +178,13 @@ const TextInputInner = (props: TextInputProps) => {
178
178
  "children",
179
179
  ]);
180
180
 
181
- // controlled/uncontrolled 패턴 지원
181
+ // Support controlled/uncontrolled pattern
182
182
  const [value, setValue] = createControllableSignal({
183
183
  value: () => local.value ?? "",
184
184
  onChange: () => local.onValueChange,
185
185
  });
186
186
 
187
- // IME 조합 onValueChange를 지연하여 DOM 재생성(한글 조합 끊김) 방지
187
+ // Delay onValueChange during IME composition to prevent DOM recreation (Korean composition break)
188
188
  const ime = createIMEHandler((v) => setValue(v));
189
189
 
190
190
  function extractValue(el: HTMLInputElement): string {
@@ -195,7 +195,7 @@ const TextInputInner = (props: TextInputProps) => {
195
195
  return val;
196
196
  }
197
197
 
198
- // input 요소용 (composingValue 미포함 — IME 조합 방해 방지)
198
+ // Value for input element (excludes composingValue — prevent IME composition disruption)
199
199
  const inputValue = () => {
200
200
  const val = value();
201
201
  if (local.format != null && local.format !== "") {
@@ -204,7 +204,7 @@ const TextInputInner = (props: TextInputProps) => {
204
204
  return val;
205
205
  };
206
206
 
207
- // content div 표시 값 (composingValue 포함 너비 결정)
207
+ // Display value for content div (includes composingValue — determines cell width)
208
208
  const displayValue = () => {
209
209
  const composing = ime.composingValue();
210
210
  if (composing != null) {
@@ -226,11 +226,11 @@ const TextInputInner = (props: TextInputProps) => {
226
226
  ime.handleCompositionEnd(extractValue(e.currentTarget));
227
227
  };
228
228
 
229
- // Prefix 슬롯 Context 등록
229
+ // Register Prefix slot Context
230
230
  const [prefix, setPrefix] = createSlotSignal();
231
231
  const prefixEl = () => prefix() !== undefined;
232
232
 
233
- // wrapper 클래스 (includeCustomClass=false일 local.class 제외inset에서 outer에만 적용)
233
+ // Wrapper class (exclude local.class when includeCustomClass=false only apply to outer in inset)
234
234
  const getWrapperClass = (includeCustomClass: boolean) =>
235
235
  getFieldWrapperClass({
236
236
  size: local.size,
@@ -240,27 +240,27 @@ const TextInputInner = (props: TextInputProps) => {
240
240
  extra: prefixEl() && fieldGapClasses[local.size ?? "default"],
241
241
  });
242
242
 
243
- // 편집 가능 여부
243
+ // Whether editable
244
244
  const isEditable = () => !local.disabled && !local.readonly;
245
245
 
246
- // disabled 전환 미커밋 조합 flush
246
+ // Flush uncommitted composition value when toggling disabled
247
247
  createEffect(() => {
248
248
  if (!isEditable()) {
249
249
  ime.flushComposition();
250
250
  }
251
251
  });
252
252
 
253
- // 유효성 검사 메시지 (순서대로 검사, 최초 실패 메시지 반환)
253
+ // Validation error message (check in order, return first failure message)
254
254
  const errorMsg = createMemo(() => {
255
255
  const v = value();
256
- if (local.required && !v) return "필수 입력 항목입니다";
256
+ if (local.required && !v) return "This is a required field";
257
257
  if (v) {
258
258
  if (local.minLength != null && v.length < local.minLength)
259
- return `최소 ${local.minLength} 이상 입력하세요`;
259
+ return `Enter at least ${local.minLength} characters`;
260
260
  if (local.maxLength != null && v.length > local.maxLength)
261
- return `최대 ${local.maxLength}자까지 입력 가능합니다`;
261
+ return `Enter up to ${local.maxLength} characters`;
262
262
  if (local.pattern != null && !new RegExp(local.pattern).test(v))
263
- return "입력 형식이 올바르지 않습니다";
263
+ return "The input format is invalid";
264
264
  }
265
265
  return local.validate?.(v);
266
266
  });
@@ -276,7 +276,7 @@ const TextInputInner = (props: TextInputProps) => {
276
276
  <Show
277
277
  when={local.inset}
278
278
  fallback={
279
- // standalone 모드: 기존 Show 패턴 유지
279
+ // standalone mode: maintain existing Show pattern
280
280
  <Show
281
281
  when={isEditable()}
282
282
  fallback={
@@ -313,7 +313,7 @@ const TextInputInner = (props: TextInputProps) => {
313
313
  </Show>
314
314
  }
315
315
  >
316
- {/* inset 모드: dual-element overlay 패턴 */}
316
+ {/* inset mode: dual-element overlay pattern */}
317
317
  <div
318
318
  {...rest}
319
319
  data-text-field