@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
@@ -8,52 +8,52 @@ import { PlaceholderFallback } from "./FieldPlaceholder";
8
8
  import { Invalid } from "../../form-control/Invalid";
9
9
 
10
10
  export interface TextareaProps {
11
- /** 입력 */
11
+ /** Input value */
12
12
  value?: string;
13
13
 
14
- /** 변경 콜백 */
14
+ /** Value change callback */
15
15
  onValueChange?: (value: string) => void;
16
16
 
17
- /** 플레이스홀더 */
17
+ /** Placeholder */
18
18
  placeholder?: string;
19
19
 
20
- /** 타이틀 (툴팁) */
20
+ /** Title (tooltip) */
21
21
  title?: string;
22
22
 
23
- /** 비활성화 */
23
+ /** Disabled state */
24
24
  disabled?: boolean;
25
25
 
26
- /** 읽기 전용 */
26
+ /** Read-only */
27
27
  readonly?: boolean;
28
28
 
29
- /** 사이즈 */
29
+ /** Size */
30
30
  size?: FieldSize;
31
31
 
32
- /** 테두리 없는 스타일 */
32
+ /** Borderless style */
33
33
  inset?: boolean;
34
34
 
35
- /** 최소 (기본값: 1) */
35
+ /** Minimum rows (default: 1) */
36
36
  minRows?: number;
37
37
 
38
- /** 필수 입력 여부 */
38
+ /** Required input */
39
39
  required?: boolean;
40
40
 
41
- /** 최소 길이 */
41
+ /** Minimum length */
42
42
  minLength?: number;
43
43
 
44
- /** 최대 길이 */
44
+ /** Maximum length */
45
45
  maxLength?: number;
46
46
 
47
- /** 커스텀 유효성 검사 함수 */
47
+ /** Custom validation function */
48
48
  validate?: (value: string) => string | undefined;
49
49
 
50
- /** touchMode: 포커스 해제 후에만 에러 표시 */
50
+ /** touchMode: Show error only after blur */
51
51
  touchMode?: boolean;
52
52
 
53
- /** 커스텀 class */
53
+ /** Custom class */
54
54
  class?: string;
55
55
 
56
- /** 커스텀 style */
56
+ /** Custom style */
57
57
  style?: JSX.CSSProperties;
58
58
  }
59
59
 
@@ -67,14 +67,14 @@ const textareaBaseClass = clsx(
67
67
  );
68
68
 
69
69
  /**
70
- * Textarea 컴포넌트
70
+ * Textarea component
71
71
  *
72
72
  * @example
73
73
  * ```tsx
74
- * // 기본 사용
74
+ * // Basic usage
75
75
  * <Textarea value={text()} onValueChange={setText} />
76
76
  *
77
- * // 최소 수 지정
77
+ * // Specify minimum rows
78
78
  * <Textarea minRows={3} value={text()} onValueChange={setText} />
79
79
  * ```
80
80
  */
@@ -103,10 +103,10 @@ export const Textarea: Component<TextareaProps> = (props) => {
103
103
  onChange: () => local.onValueChange,
104
104
  });
105
105
 
106
- // IME 조합 onValueChange를 지연하여 DOM 재생성(한글 조합 끊김) 방지
106
+ // Delay onValueChange during IME composition to prevent DOM recreation (Korean composition break)
107
107
  const ime = createIMEHandler((v) => setValue(v));
108
108
 
109
- // content div 표시 값 (composingValue 포함 너비/높이 결정)
109
+ // Display value for content div (includes composingValue — determines cell width/height)
110
110
  const displayValue = () => ime.composingValue() ?? value();
111
111
 
112
112
  const handleCompositionStart = () => ime.handleCompositionStart();
@@ -135,7 +135,7 @@ export const Textarea: Component<TextareaProps> = (props) => {
135
135
  el.selectionStart = start + 1;
136
136
  el.selectionEnd = start + 1;
137
137
 
138
- // input 이벤트를 수동 발행하여 값 동기화
138
+ // Manually dispatch input event to sync value
139
139
  el.dispatchEvent(new InputEvent("input", { bubbles: true }));
140
140
  }
141
141
  };
@@ -145,11 +145,11 @@ export const Textarea: Component<TextareaProps> = (props) => {
145
145
  const val = displayValue();
146
146
  const content =
147
147
  val !== "" && val.split("\n").length >= rows ? val : "\n".repeat(rows - 1) + "\u00A0";
148
- // 마지막이 줄바꿈이면 높이 확보를 위해 공백 추가
148
+ // Add space if ending with newline to ensure empty line height
149
149
  return content.endsWith("\n") ? content + "\u00A0" : content;
150
150
  };
151
151
 
152
- // wrapper 클래스 (includeCustomClass=false일 local.class 제외inset에서 outer에만 적용)
152
+ // Wrapper class (exclude local.class when includeCustomClass=false only apply to outer in inset)
153
153
  const getWrapperClass = (includeCustomClass: boolean) =>
154
154
  getTextareaWrapperClass({
155
155
  size: local.size,
@@ -161,25 +161,25 @@ export const Textarea: Component<TextareaProps> = (props) => {
161
161
  const getTextareaClass = () =>
162
162
  twMerge(textareaBaseClass, local.size && textAreaSizeClasses[local.size], local.inset && "p-0");
163
163
 
164
- // 편집 가능 여부
164
+ // Whether editable
165
165
  const isEditable = () => !local.disabled && !local.readonly;
166
166
 
167
- // disabled 전환 미커밋 조합 flush
167
+ // Flush uncommitted composition value when toggling disabled
168
168
  createEffect(() => {
169
169
  if (!isEditable()) {
170
170
  ime.flushComposition();
171
171
  }
172
172
  });
173
173
 
174
- // 유효성 검사 메시지 (순서대로 검사, 최초 실패 메시지 반환)
174
+ // Validation error message (check in order, return first failure message)
175
175
  const errorMsg = createMemo(() => {
176
176
  const v = value();
177
- if (local.required && !v) return "필수 입력 항목입니다";
177
+ if (local.required && !v) return "This is a required field";
178
178
  if (v) {
179
179
  if (local.minLength != null && v.length < local.minLength)
180
- return `최소 ${local.minLength} 이상 입력하세요`;
180
+ return `Enter at least ${local.minLength} characters`;
181
181
  if (local.maxLength != null && v.length > local.maxLength)
182
- return `최대 ${local.maxLength}자까지 입력 가능합니다`;
182
+ return `Enter up to ${local.maxLength} characters`;
183
183
  }
184
184
  return local.validate?.(v);
185
185
  });
@@ -189,7 +189,7 @@ export const Textarea: Component<TextareaProps> = (props) => {
189
189
  <Show
190
190
  when={local.inset}
191
191
  fallback={
192
- // standalone 모드: 기존 Show 패턴 유지
192
+ // standalone mode: maintain existing Show pattern
193
193
  <Show
194
194
  when={isEditable()}
195
195
  fallback={
@@ -235,7 +235,7 @@ export const Textarea: Component<TextareaProps> = (props) => {
235
235
  </Show>
236
236
  }
237
237
  >
238
- {/* inset 모드: dual-element overlay 패턴 */}
238
+ {/* inset mode: dual-element overlay pattern */}
239
239
  <div
240
240
  {...rest}
241
241
  data-textarea-field
@@ -9,54 +9,54 @@ import { Invalid } from "../../form-control/Invalid";
9
9
  type TimePickerUnit = "minute" | "second";
10
10
 
11
11
  export interface TimePickerProps {
12
- /** 입력 */
12
+ /** Input value */
13
13
  value?: Time;
14
14
 
15
- /** 변경 콜백 */
15
+ /** Value change callback */
16
16
  onValueChange?: (value: Time | undefined) => void;
17
17
 
18
- /** 시간 단위 */
18
+ /** Time unit */
19
19
  unit?: TimePickerUnit;
20
20
 
21
- /** 타이틀 (툴팁) */
21
+ /** Title (tooltip) */
22
22
  title?: string;
23
23
 
24
- /** 비활성화 */
24
+ /** Disable input */
25
25
  disabled?: boolean;
26
26
 
27
- /** 읽기 전용 */
27
+ /** Read-only */
28
28
  readonly?: boolean;
29
29
 
30
- /** 사이즈 */
30
+ /** Size */
31
31
  size?: FieldSize;
32
32
 
33
- /** 테두리 없는 스타일 */
33
+ /** Borderless style */
34
34
  inset?: boolean;
35
35
 
36
- /** 커스텀 class */
36
+ /** Custom class */
37
37
  class?: string;
38
38
 
39
- /** 커스텀 style */
39
+ /** Custom style */
40
40
  style?: JSX.CSSProperties;
41
41
 
42
- /** 최소 시간 */
42
+ /** Minimum time */
43
43
  min?: Time;
44
44
 
45
- /** 최대 시간 */
45
+ /** Maximum time */
46
46
  max?: Time;
47
47
 
48
- /** 필수 입력 여부 */
48
+ /** Required input */
49
49
  required?: boolean;
50
50
 
51
- /** 커스텀 유효성 검사 함수 */
51
+ /** Custom validation function */
52
52
  validate?: (value: Time | undefined) => string | undefined;
53
53
 
54
- /** touchMode: 포커스 해제 후에만 에러 표시 */
54
+ /** touchMode: show errors only after blur */
55
55
  touchMode?: boolean;
56
56
  }
57
57
 
58
58
  /**
59
- * Time 값을 input value 문자열로 변환
59
+ * Convert Time value to input value string
60
60
  */
61
61
  function formatValue(value: Time | undefined, unit: TimePickerUnit): string {
62
62
  if (value == null) return "";
@@ -70,20 +70,20 @@ function formatValue(value: Time | undefined, unit: TimePickerUnit): string {
70
70
  }
71
71
 
72
72
  /**
73
- * 입력 문자열을 Time으로 변환
73
+ * Convert input string to Time
74
74
  */
75
75
  function parseValue(str: string, unit: TimePickerUnit): Time | undefined {
76
76
  if (str === "") return undefined;
77
77
 
78
78
  switch (unit) {
79
79
  case "minute": {
80
- // HH:mm 형식
80
+ // HH:mm format
81
81
  const match = /^(\d{2}):(\d{2})$/.exec(str);
82
82
  if (match == null) return undefined;
83
83
  return new Time(Number(match[1]), Number(match[2]), 0);
84
84
  }
85
85
  case "second": {
86
- // HH:mm:ss 형식
86
+ // HH:mm:ss format
87
87
  const match = /^(\d{2}):(\d{2}):(\d{2})$/.exec(str);
88
88
  if (match == null) return undefined;
89
89
  return new Time(Number(match[1]), Number(match[2]), Number(match[3]));
@@ -92,17 +92,17 @@ function parseValue(str: string, unit: TimePickerUnit): Time | undefined {
92
92
  }
93
93
 
94
94
  /**
95
- * TimePicker 컴포넌트
95
+ * TimePicker component
96
96
  *
97
- * 시간 입력 필드. minute, second 단위를 지원한다.
98
- * 내부적으로 string ↔ Time 타입 변환을 처리한다.
97
+ * Time input field supporting minute and second units.
98
+ * Handles string ↔ Time type conversion internally.
99
99
  *
100
100
  * @example
101
101
  * ```tsx
102
- * // 시간 입력 ( 단위)
102
+ * // Time input (minute unit)
103
103
  * <TimePicker unit="minute" value={time()} onValueChange={setTime} />
104
104
  *
105
- * // 시간 입력 ( 단위)
105
+ * // Time input (second unit)
106
106
  * <TimePicker unit="second" value={time()} onValueChange={setTime} />
107
107
  * ```
108
108
  */
@@ -125,26 +125,26 @@ export const TimePicker: Component<TimePickerProps> = (props) => {
125
125
  "touchMode",
126
126
  ]);
127
127
 
128
- // 기본 단위는 minute
128
+ // Default unit is minute
129
129
  const fieldType = () => local.unit ?? "minute";
130
130
 
131
- // controlled/uncontrolled 패턴 지원
131
+ // Support controlled/uncontrolled pattern
132
132
  const [value, setValue] = createControllableSignal({
133
133
  value: () => local.value,
134
134
  onChange: () => local.onValueChange,
135
135
  });
136
136
 
137
- // 표시
137
+ // Display value
138
138
  const displayValue = () => formatValue(value(), fieldType());
139
139
 
140
- // 확정 핸들러 (포커스 아웃 또는 Enter)
140
+ // Change handler (on blur or Enter)
141
141
  const handleChange: JSX.EventHandler<HTMLInputElement, Event> = (e) => {
142
142
  const newValue = e.currentTarget.value;
143
143
  const parsed = parseValue(newValue, fieldType());
144
144
  setValue(parsed);
145
145
  };
146
146
 
147
- // wrapper 클래스
147
+ // Wrapper class
148
148
  const getWrapperClass = (includeCustomClass: boolean) =>
149
149
  getFieldWrapperClass({
150
150
  size: local.size,
@@ -154,21 +154,21 @@ export const TimePicker: Component<TimePickerProps> = (props) => {
154
154
  extra: "min-w-24",
155
155
  });
156
156
 
157
- // 편집 가능 여부
157
+ // Editable check
158
158
  const isEditable = () => !local.disabled && !local.readonly;
159
159
 
160
- // step 속성 (second일 1)
160
+ // Step attribute (1 when second)
161
161
  const getStep = () => (fieldType() === "second" ? "1" : undefined);
162
162
 
163
- // 유효성 검사 메시지 (순서대로 검사, 최초 실패 메시지 반환)
163
+ // Validation message (check in order, return first error)
164
164
  const errorMsg = createMemo(() => {
165
165
  const v = value();
166
- if (local.required && v === undefined) return "필수 입력 항목입니다";
166
+ if (local.required && v === undefined) return "This field is required";
167
167
  if (v !== undefined) {
168
168
  if (local.min !== undefined && v.tick < local.min.tick)
169
- return `${local.min.toFormatString("HH:mm:ss")}보다 크거나 같아야 합니다`;
169
+ return `Must be greater than or equal to ${local.min.toFormatString("HH:mm:ss")}`;
170
170
  if (local.max !== undefined && v.tick > local.max.tick)
171
- return `${local.max.toFormatString("HH:mm:ss")}보다 작거나 같아야 합니다`;
171
+ return `Must be less than or equal to ${local.max.toFormatString("HH:mm:ss")}`;
172
172
  }
173
173
  return local.validate?.(v);
174
174
  });
@@ -182,7 +182,7 @@ export const TimePicker: Component<TimePickerProps> = (props) => {
182
182
  <Show
183
183
  when={local.inset}
184
184
  fallback={
185
- // standalone 모드
185
+ // standalone mode
186
186
  <Show
187
187
  when={isEditable()}
188
188
  fallback={
@@ -211,7 +211,7 @@ export const TimePicker: Component<TimePickerProps> = (props) => {
211
211
  </Show>
212
212
  }
213
213
  >
214
- {/* inset 모드: dual-element overlay 패턴 */}
214
+ {/* inset mode: dual-element overlay pattern */}
215
215
  <div {...rest} data-time-field class={clsx("relative", local.class)} style={local.style}>
216
216
  <div
217
217
  data-time-field-content
@@ -9,35 +9,35 @@ import { IconEraser, IconArrowLeft } from "@tabler/icons-solidjs";
9
9
  import type { ComponentSize } from "../../../styles/tokens.styles";
10
10
 
11
11
  export interface NumpadProps {
12
- /** 입력 */
12
+ /** Input value */
13
13
  value?: number;
14
- /** 변경 콜백 */
14
+ /** Value change callback */
15
15
  onValueChange?: (value: number | undefined) => void;
16
- /** 플레이스홀더 */
16
+ /** Placeholder */
17
17
  placeholder?: string;
18
- /** 필수 입력 여부 */
18
+ /** Whether input is required */
19
19
  required?: boolean;
20
- /** 텍스트 필드 직접 입력 비활성화 */
20
+ /** Disable direct text field input */
21
21
  inputDisabled?: boolean;
22
- /** ENT 버튼 표시 */
22
+ /** Show Enter button */
23
23
  useEnterButton?: boolean;
24
- /** - 버튼 표시 */
24
+ /** Show minus button */
25
25
  useMinusButton?: boolean;
26
- /** ENT 클릭 콜백 */
26
+ /** Enter button click callback */
27
27
  onEnterButtonClick?: () => void;
28
- /** 사이즈 */
28
+ /** Size */
29
29
  size?: ComponentSize;
30
- /** 커스텀 class */
30
+ /** Custom class */
31
31
  class?: string;
32
- /** 커스텀 style */
32
+ /** Custom style */
33
33
  style?: JSX.CSSProperties;
34
34
  }
35
35
 
36
36
  const baseClass = clsx("grid grid-cols-3", "gap-0.5", "w-auto");
37
37
 
38
38
  /**
39
- * inputStr 파싱하여 숫자로 변환한다.
40
- * 문자열이나 "-" 있는 경우 undefined를 반환한다.
39
+ * Parse inputStr and convert to number.
40
+ * Returns undefined for empty string or "-" only.
41
41
  */
42
42
  function parseInputStr(str: string): number | undefined {
43
43
  if (str === "" || str === "-" || str === "." || str === "-.") return undefined;
@@ -46,7 +46,7 @@ function parseInputStr(str: string): number | undefined {
46
46
  }
47
47
 
48
48
  /**
49
- * 숫자를 inputStr로 변환한다.
49
+ * Convert number to inputStr.
50
50
  */
51
51
  function valueToInputStr(value: number | undefined): string {
52
52
  if (value == null) return "";
@@ -54,18 +54,18 @@ function valueToInputStr(value: number | undefined): string {
54
54
  }
55
55
 
56
56
  export const Numpad: Component<NumpadProps> = (props) => {
57
- // controlled/uncontrolled 패턴
57
+ // Controlled/uncontrolled pattern
58
58
  const [value, setValue] = createControllableSignal({
59
59
  value: () => props.value,
60
60
  onChange: () => props.onValueChange,
61
61
  });
62
62
 
63
- // 내부 입력 문자열 상태
63
+ // Internal input string state
64
64
  const [inputStr, setInputStr] = createSignal<string>("");
65
- // 버튼 입력 중에는 외부 value → inputStr 동기화를 방지
65
+ // Prevent external value → inputStr sync when button input is in progress
66
66
  let isButtonInput = false;
67
67
 
68
- // 외부 변경 inputStr 동기화 (버튼 입력 중이 아닐 때만)
68
+ // Sync inputStr when external value changes (only when not in button input)
69
69
  createEffect(() => {
70
70
  const val = value();
71
71
  if (!isButtonInput) {
@@ -74,38 +74,38 @@ export const Numpad: Component<NumpadProps> = (props) => {
74
74
  isButtonInput = false;
75
75
  });
76
76
 
77
- // inputStr 파싱하여 value로 반영
77
+ // Parse inputStr and apply to value
78
78
  const applyInputStr = (str: string) => {
79
79
  isButtonInput = true;
80
80
  setInputStr(str);
81
81
  setValue(parseInputStr(str));
82
82
  };
83
83
 
84
- // 숫자 버튼 (0-9)
84
+ // Digit buttons (0-9)
85
85
  const handleDigit = (digit: string) => {
86
86
  applyInputStr(inputStr() + digit);
87
87
  };
88
88
 
89
- // 소수점 버튼
89
+ // Decimal point button
90
90
  const handleDot = () => {
91
91
  const current = inputStr();
92
92
  if (current.includes(".")) return;
93
93
  applyInputStr(current + ".");
94
94
  };
95
95
 
96
- // C (클리어) 버튼
96
+ // C (Clear) button
97
97
  const handleClear = () => {
98
98
  applyInputStr("");
99
99
  };
100
100
 
101
- // BS (백스페이스) 버튼
101
+ // BS (Backspace) button
102
102
  const handleBackspace = () => {
103
103
  const current = inputStr();
104
104
  if (current.length === 0) return;
105
105
  applyInputStr(current.slice(0, -1));
106
106
  };
107
107
 
108
- // - (마이너스 토글) 버튼
108
+ // - (Minus toggle) button
109
109
  const handleMinus = () => {
110
110
  const current = inputStr();
111
111
  if (current.startsWith("-")) {
@@ -115,12 +115,12 @@ export const Numpad: Component<NumpadProps> = (props) => {
115
115
  }
116
116
  };
117
117
 
118
- // ENT 버튼
118
+ // ENT button
119
119
  const handleEnter = () => {
120
120
  props.onEnterButtonClick?.();
121
121
  };
122
122
 
123
- // NumberInput 변경 핸들러
123
+ // NumberInput value change handler
124
124
  const handleFieldValueChange = (val: number | undefined) => {
125
125
  setValue(val);
126
126
  setInputStr(valueToInputStr(val));