@simplysm/solid 13.0.69 → 13.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/README.md +168 -195
  2. package/dist/components/data/calendar/Calendar.d.ts.map +1 -1
  3. package/dist/components/data/calendar/Calendar.js +15 -2
  4. package/dist/components/data/calendar/Calendar.js.map +2 -2
  5. package/dist/components/data/kanban/KanbanContext.js +2 -2
  6. package/dist/components/data/kanban/KanbanContext.js.map +1 -1
  7. package/dist/components/data/list/List.d.ts +8 -8
  8. package/dist/components/data/list/ListContext.d.ts +1 -1
  9. package/dist/components/data/list/ListItem.d.ts +15 -15
  10. package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
  11. package/dist/components/data/sheet/DataSheet.js +6 -4
  12. package/dist/components/data/sheet/DataSheet.js.map +2 -2
  13. package/dist/components/data/sheet/DataSheetConfigDialog.js +8 -8
  14. package/dist/components/data/sheet/DataSheetConfigDialog.js.map +1 -1
  15. package/dist/components/data/sheet/types.d.ts +4 -4
  16. package/dist/components/data/sheet/types.d.ts.map +1 -1
  17. package/dist/components/disclosure/Collapse.d.ts +4 -4
  18. package/dist/components/disclosure/Dialog.d.ts +24 -24
  19. package/dist/components/disclosure/Dialog.d.ts.map +1 -1
  20. package/dist/components/disclosure/Dialog.js +7 -2
  21. package/dist/components/disclosure/Dialog.js.map +2 -2
  22. package/dist/components/disclosure/DialogContext.d.ts +25 -25
  23. package/dist/components/disclosure/DialogContext.d.ts.map +1 -1
  24. package/dist/components/disclosure/DialogContext.js +1 -1
  25. package/dist/components/disclosure/DialogContext.js.map +1 -1
  26. package/dist/components/disclosure/DialogInstanceContext.d.ts +7 -7
  27. package/dist/components/disclosure/DialogInstanceContext.d.ts.map +1 -1
  28. package/dist/components/disclosure/DialogProvider.d.ts +3 -3
  29. package/dist/components/disclosure/Dropdown.d.ts +24 -24
  30. package/dist/components/disclosure/Tabs.js +1 -1
  31. package/dist/components/disclosure/Tabs.js.map +1 -1
  32. package/dist/components/disclosure/dialogZIndex.d.ts +7 -7
  33. package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -1
  34. package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
  35. package/dist/components/features/crud-detail/CrudDetail.js +19 -16
  36. package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
  37. package/dist/components/features/crud-sheet/CrudSheet.d.ts.map +1 -1
  38. package/dist/components/features/crud-sheet/CrudSheet.js +34 -28
  39. package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
  40. package/dist/components/features/data-select-button/DataSelectButton.d.ts +14 -14
  41. package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
  42. package/dist/components/features/data-select-button/DataSelectButton.js +27 -9
  43. package/dist/components/features/data-select-button/DataSelectButton.js.map +2 -2
  44. package/dist/components/features/permission-table/PermissionTable.d.ts +3 -3
  45. package/dist/components/features/permission-table/PermissionTable.d.ts.map +1 -1
  46. package/dist/components/features/permission-table/PermissionTable.js +6 -2
  47. package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
  48. package/dist/components/features/shared-data/SharedDataSelect.d.ts +12 -12
  49. package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
  50. package/dist/components/features/shared-data/SharedDataSelect.js +8 -2
  51. package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
  52. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts +10 -10
  53. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
  54. package/dist/components/features/shared-data/SharedDataSelectList.d.ts +23 -13
  55. package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
  56. package/dist/components/features/shared-data/SharedDataSelectList.js +219 -58
  57. package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
  58. package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts +15 -0
  59. package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts.map +1 -0
  60. package/dist/components/features/shared-data/SharedDataSelectListContext.js +27 -0
  61. package/dist/components/features/shared-data/SharedDataSelectListContext.js.map +6 -0
  62. package/dist/components/feedback/Progress.d.ts +1 -1
  63. package/dist/components/feedback/Progress.d.ts.map +1 -1
  64. package/dist/components/feedback/busy/BusyContainer.d.ts +2 -2
  65. package/dist/components/feedback/busy/BusyContainer.d.ts.map +1 -1
  66. package/dist/components/feedback/busy/BusyContext.d.ts +11 -11
  67. package/dist/components/feedback/busy/BusyContext.d.ts.map +1 -1
  68. package/dist/components/feedback/busy/BusyContext.js +1 -1
  69. package/dist/components/feedback/busy/BusyContext.js.map +1 -1
  70. package/dist/components/feedback/busy/BusyProvider.d.ts +6 -6
  71. package/dist/components/feedback/busy/BusyProvider.d.ts.map +1 -1
  72. package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -1
  73. package/dist/components/feedback/notification/NotificationBanner.js +7 -3
  74. package/dist/components/feedback/notification/NotificationBanner.js.map +2 -2
  75. package/dist/components/feedback/notification/NotificationBell.js +2 -2
  76. package/dist/components/feedback/notification/NotificationBell.js.map +1 -1
  77. package/dist/components/feedback/notification/NotificationContext.d.ts +22 -22
  78. package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -1
  79. package/dist/components/feedback/notification/NotificationContext.js +1 -1
  80. package/dist/components/feedback/notification/NotificationContext.js.map +1 -1
  81. package/dist/components/feedback/notification/NotificationProvider.d.ts +5 -5
  82. package/dist/components/feedback/notification/NotificationProvider.js +1 -1
  83. package/dist/components/feedback/notification/NotificationProvider.js.map +1 -1
  84. package/dist/components/feedback/print/PrintContext.js +1 -1
  85. package/dist/components/feedback/print/PrintContext.js.map +1 -1
  86. package/dist/components/form-control/DropdownTrigger.styles.d.ts +1 -1
  87. package/dist/components/form-control/DropdownTrigger.styles.d.ts.map +1 -1
  88. package/dist/components/form-control/ThemeToggle.d.ts +7 -7
  89. package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
  90. package/dist/components/form-control/ThemeToggle.js +3 -3
  91. package/dist/components/form-control/checkbox/Checkbox.js +1 -1
  92. package/dist/components/form-control/checkbox/CheckboxGroup.js +1 -1
  93. package/dist/components/form-control/checkbox/Radio.js +1 -1
  94. package/dist/components/form-control/checkbox/RadioGroup.js +1 -1
  95. package/dist/components/form-control/color-picker/ColorPicker.d.ts +12 -12
  96. package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
  97. package/dist/components/form-control/color-picker/ColorPicker.js +2 -2
  98. package/dist/components/form-control/combobox/Combobox.d.ts +22 -22
  99. package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
  100. package/dist/components/form-control/combobox/Combobox.js +2 -2
  101. package/dist/components/form-control/combobox/ComboboxContext.d.ts +4 -4
  102. package/dist/components/form-control/combobox/ComboboxContext.d.ts.map +1 -1
  103. package/dist/components/form-control/combobox/ComboboxContext.js +1 -1
  104. package/dist/components/form-control/combobox/ComboboxContext.js.map +1 -1
  105. package/dist/components/form-control/combobox/ComboboxItem.d.ts +3 -3
  106. package/dist/components/form-control/combobox/ComboboxItem.d.ts.map +1 -1
  107. package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts +14 -14
  108. package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts.map +1 -1
  109. package/dist/components/form-control/date-range-picker/DateRangePicker.js +20 -9
  110. package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
  111. package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -1
  112. package/dist/components/form-control/editor/EditorToolbar.js +65 -20
  113. package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
  114. package/dist/components/form-control/editor/RichTextEditor.d.ts +6 -6
  115. package/dist/components/form-control/editor/RichTextEditor.d.ts.map +1 -1
  116. package/dist/components/form-control/editor/RichTextEditor.js +1 -1
  117. package/dist/components/form-control/editor/editor.css +5 -5
  118. package/dist/components/form-control/field/DatePicker.d.ts +22 -22
  119. package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
  120. package/dist/components/form-control/field/DatePicker.js +4 -4
  121. package/dist/components/form-control/field/DatePicker.js.map +1 -1
  122. package/dist/components/form-control/field/DateTimePicker.d.ts +21 -21
  123. package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
  124. package/dist/components/form-control/field/DateTimePicker.js +4 -4
  125. package/dist/components/form-control/field/DateTimePicker.js.map +1 -1
  126. package/dist/components/form-control/field/FieldPlaceholder.d.ts +1 -1
  127. package/dist/components/form-control/field/FieldPlaceholder.d.ts.map +1 -1
  128. package/dist/components/form-control/field/NumberInput.d.ts +23 -23
  129. package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
  130. package/dist/components/form-control/field/NumberInput.js +4 -4
  131. package/dist/components/form-control/field/NumberInput.js.map +1 -1
  132. package/dist/components/form-control/field/TextInput.d.ts +25 -25
  133. package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
  134. package/dist/components/form-control/field/TextInput.js +5 -5
  135. package/dist/components/form-control/field/TextInput.js.map +1 -1
  136. package/dist/components/form-control/field/Textarea.d.ts +19 -19
  137. package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
  138. package/dist/components/form-control/field/Textarea.js +4 -4
  139. package/dist/components/form-control/field/Textarea.js.map +1 -1
  140. package/dist/components/form-control/field/TimePicker.d.ts +20 -20
  141. package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
  142. package/dist/components/form-control/field/TimePicker.js +4 -4
  143. package/dist/components/form-control/field/TimePicker.js.map +1 -1
  144. package/dist/components/form-control/numpad/Numpad.d.ts +11 -11
  145. package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -1
  146. package/dist/components/form-control/select/Select.d.ts +26 -26
  147. package/dist/components/form-control/select/Select.d.ts.map +1 -1
  148. package/dist/components/form-control/select/Select.js +34 -23
  149. package/dist/components/form-control/select/Select.js.map +2 -2
  150. package/dist/components/form-control/select/SelectContext.d.ts +7 -7
  151. package/dist/components/form-control/select/SelectContext.d.ts.map +1 -1
  152. package/dist/components/form-control/select/SelectContext.js +1 -1
  153. package/dist/components/form-control/select/SelectContext.js.map +1 -1
  154. package/dist/components/form-control/select/SelectItem.d.ts +4 -4
  155. package/dist/components/form-control/select/SelectItem.d.ts.map +1 -1
  156. package/dist/components/form-control/state-preset/StatePreset.js +8 -8
  157. package/dist/components/form-control/state-preset/StatePreset.js.map +1 -1
  158. package/dist/components/layout/FormTable.js +4 -4
  159. package/dist/components/layout/sidebar/Sidebar.d.ts +5 -5
  160. package/dist/components/layout/sidebar/SidebarContainer.d.ts +11 -11
  161. package/dist/components/layout/sidebar/SidebarContainer.d.ts.map +1 -1
  162. package/dist/components/layout/sidebar/SidebarContainer.js +6 -1
  163. package/dist/components/layout/sidebar/SidebarContainer.js.map +2 -2
  164. package/dist/components/layout/sidebar/SidebarContext.d.ts +7 -7
  165. package/dist/components/layout/sidebar/SidebarContext.js +1 -1
  166. package/dist/components/layout/sidebar/SidebarContext.js.map +1 -1
  167. package/dist/components/layout/sidebar/SidebarMenu.d.ts +11 -11
  168. package/dist/components/layout/sidebar/SidebarUser.d.ts +14 -14
  169. package/dist/components/layout/topbar/Topbar.d.ts +6 -6
  170. package/dist/components/layout/topbar/Topbar.d.ts.map +1 -1
  171. package/dist/components/layout/topbar/Topbar.js +11 -6
  172. package/dist/components/layout/topbar/Topbar.js.map +2 -2
  173. package/dist/components/layout/topbar/TopbarContainer.d.ts +6 -6
  174. package/dist/components/layout/topbar/TopbarContext.js +2 -2
  175. package/dist/components/layout/topbar/TopbarContext.js.map +1 -1
  176. package/dist/components/layout/topbar/TopbarMenu.d.ts +11 -11
  177. package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -1
  178. package/dist/components/layout/topbar/TopbarMenu.js +5 -1
  179. package/dist/components/layout/topbar/TopbarMenu.js.map +2 -2
  180. package/dist/components/layout/topbar/TopbarUser.d.ts +9 -9
  181. package/dist/directives/ripple.d.ts +5 -5
  182. package/dist/helpers/createAppStructure.d.ts.map +1 -1
  183. package/dist/helpers/createAppStructure.js +4 -1
  184. package/dist/helpers/createAppStructure.js.map +1 -1
  185. package/dist/helpers/createSlotComponent.d.ts +3 -3
  186. package/dist/helpers/mergeStyles.d.ts +8 -8
  187. package/dist/hooks/createControllableSignal.d.ts +10 -10
  188. package/dist/hooks/createControllableStore.d.ts +6 -6
  189. package/dist/hooks/createIMEHandler.d.ts +7 -7
  190. package/dist/hooks/createMountTransition.d.ts +4 -4
  191. package/dist/hooks/createSelectionGroup.js +1 -1
  192. package/dist/hooks/createSelectionGroup.js.map +1 -1
  193. package/dist/hooks/createSlotSignal.d.ts +2 -2
  194. package/dist/hooks/useLocalStorage.d.ts +11 -11
  195. package/dist/hooks/useLogger.d.ts +1 -1
  196. package/dist/hooks/useLogger.d.ts.map +1 -1
  197. package/dist/hooks/useLogger.js +1 -1
  198. package/dist/hooks/useLogger.js.map +1 -1
  199. package/dist/hooks/useRouterLink.d.ts +10 -10
  200. package/dist/hooks/useRouterLink.d.ts.map +1 -1
  201. package/dist/index.d.ts +2 -1
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +2 -1
  204. package/dist/index.js.map +1 -1
  205. package/dist/providers/ClipboardProvider.d.ts +5 -5
  206. package/dist/providers/ConfigContext.d.ts +6 -6
  207. package/dist/providers/ConfigContext.js +2 -2
  208. package/dist/providers/ConfigContext.js.map +1 -1
  209. package/dist/providers/ErrorLoggerProvider.d.ts +3 -3
  210. package/dist/providers/LoggerContext.d.ts +13 -13
  211. package/dist/providers/PwaUpdateProvider.d.ts +4 -4
  212. package/dist/providers/PwaUpdateProvider.js +2 -2
  213. package/dist/providers/PwaUpdateProvider.js.map +1 -1
  214. package/dist/providers/ServiceClientContext.d.ts +8 -8
  215. package/dist/providers/ServiceClientContext.d.ts.map +1 -1
  216. package/dist/providers/ServiceClientContext.js +1 -1
  217. package/dist/providers/ServiceClientContext.js.map +1 -1
  218. package/dist/providers/ServiceClientProvider.d.ts +6 -6
  219. package/dist/providers/ServiceClientProvider.js +7 -7
  220. package/dist/providers/ServiceClientProvider.js.map +1 -1
  221. package/dist/providers/SyncStorageContext.d.ts +14 -14
  222. package/dist/providers/SystemProvider.d.ts.map +1 -1
  223. package/dist/providers/SystemProvider.js +21 -16
  224. package/dist/providers/SystemProvider.js.map +2 -2
  225. package/dist/providers/ThemeContext.d.ts +20 -20
  226. package/dist/providers/ThemeContext.d.ts.map +1 -1
  227. package/dist/providers/ThemeContext.js +1 -1
  228. package/dist/providers/ThemeContext.js.map +1 -1
  229. package/dist/providers/i18n/I18nContext.d.ts +44 -0
  230. package/dist/providers/i18n/I18nContext.d.ts.map +1 -0
  231. package/dist/providers/i18n/I18nContext.js +73 -0
  232. package/dist/providers/i18n/I18nContext.js.map +6 -0
  233. package/dist/providers/i18n/I18nContext.types.d.ts +28 -0
  234. package/dist/providers/i18n/I18nContext.types.d.ts.map +1 -0
  235. package/dist/providers/i18n/I18nContext.types.js +1 -0
  236. package/dist/providers/i18n/I18nContext.types.js.map +6 -0
  237. package/dist/providers/i18n/i18nUtils.d.ts +18 -0
  238. package/dist/providers/i18n/i18nUtils.d.ts.map +1 -0
  239. package/dist/providers/i18n/i18nUtils.js +25 -0
  240. package/dist/providers/i18n/i18nUtils.js.map +6 -0
  241. package/dist/providers/i18n/locales/en.d.ts +163 -0
  242. package/dist/providers/i18n/locales/en.d.ts.map +1 -0
  243. package/dist/providers/i18n/locales/en.js +165 -0
  244. package/dist/providers/i18n/locales/en.js.map +6 -0
  245. package/dist/providers/i18n/locales/ko.d.ts +163 -0
  246. package/dist/providers/i18n/locales/ko.d.ts.map +1 -0
  247. package/dist/providers/i18n/locales/ko.js +165 -0
  248. package/dist/providers/i18n/locales/ko.js.map +6 -0
  249. package/dist/providers/shared-data/SharedDataChangeEvent.d.ts +4 -4
  250. package/dist/providers/shared-data/SharedDataContext.d.ts +28 -28
  251. package/dist/providers/shared-data/SharedDataContext.d.ts.map +1 -1
  252. package/dist/providers/shared-data/SharedDataContext.js +1 -1
  253. package/dist/providers/shared-data/SharedDataContext.js.map +1 -1
  254. package/dist/providers/shared-data/SharedDataProvider.d.ts +9 -9
  255. package/dist/providers/shared-data/SharedDataProvider.js +4 -4
  256. package/dist/providers/shared-data/SharedDataProvider.js.map +1 -1
  257. package/package.json +8 -8
  258. package/src/components/data/calendar/Calendar.tsx +10 -4
  259. package/src/components/data/kanban/Kanban.tsx +14 -14
  260. package/src/components/data/kanban/KanbanContext.ts +3 -3
  261. package/src/components/data/list/List.tsx +10 -10
  262. package/src/components/data/list/ListContext.ts +1 -1
  263. package/src/components/data/list/ListItem.styles.ts +8 -8
  264. package/src/components/data/list/ListItem.tsx +15 -15
  265. package/src/components/data/sheet/DataSheet.styles.ts +22 -22
  266. package/src/components/data/sheet/DataSheet.tsx +52 -48
  267. package/src/components/data/sheet/DataSheetColumn.tsx +1 -1
  268. package/src/components/data/sheet/DataSheetConfigDialog.tsx +9 -9
  269. package/src/components/data/sheet/sheetUtils.ts +7 -7
  270. package/src/components/data/sheet/types.ts +16 -16
  271. package/src/components/disclosure/Collapse.tsx +11 -11
  272. package/src/components/disclosure/Dialog.tsx +60 -57
  273. package/src/components/disclosure/DialogContext.ts +26 -26
  274. package/src/components/disclosure/DialogInstanceContext.ts +7 -7
  275. package/src/components/disclosure/DialogProvider.tsx +5 -5
  276. package/src/components/disclosure/Dropdown.tsx +64 -64
  277. package/src/components/disclosure/Tabs.tsx +1 -1
  278. package/src/components/disclosure/dialogZIndex.ts +11 -11
  279. package/src/components/display/Echarts.tsx +4 -4
  280. package/src/components/features/address/AddressSearch.tsx +2 -2
  281. package/src/components/features/crud-detail/CrudDetail.tsx +18 -16
  282. package/src/components/features/crud-detail/CrudDetailAfter.tsx +1 -1
  283. package/src/components/features/crud-detail/CrudDetailBefore.tsx +1 -1
  284. package/src/components/features/crud-detail/CrudDetailTools.tsx +1 -1
  285. package/src/components/features/crud-sheet/CrudSheet.tsx +39 -37
  286. package/src/components/features/crud-sheet/CrudSheetColumn.tsx +1 -1
  287. package/src/components/features/crud-sheet/CrudSheetFilter.tsx +1 -1
  288. package/src/components/features/crud-sheet/CrudSheetHeader.tsx +1 -1
  289. package/src/components/features/crud-sheet/CrudSheetTools.tsx +1 -1
  290. package/src/components/features/data-select-button/DataSelectButton.tsx +34 -32
  291. package/src/components/features/permission-table/PermissionTable.tsx +22 -19
  292. package/src/components/features/shared-data/SharedDataSelect.tsx +22 -20
  293. package/src/components/features/shared-data/SharedDataSelectButton.tsx +10 -10
  294. package/src/components/features/shared-data/SharedDataSelectList.tsx +245 -48
  295. package/src/components/features/shared-data/SharedDataSelectListContext.ts +39 -0
  296. package/src/components/feedback/Progress.tsx +1 -1
  297. package/src/components/feedback/busy/BusyContainer.tsx +6 -6
  298. package/src/components/feedback/busy/BusyContext.ts +12 -12
  299. package/src/components/feedback/busy/BusyProvider.tsx +6 -6
  300. package/src/components/feedback/notification/NotificationBanner.tsx +3 -1
  301. package/src/components/feedback/notification/NotificationBell.tsx +4 -4
  302. package/src/components/feedback/notification/NotificationContext.ts +28 -28
  303. package/src/components/feedback/notification/NotificationProvider.tsx +9 -9
  304. package/src/components/feedback/print/PrintContext.ts +1 -1
  305. package/src/components/form-control/Button.tsx +1 -1
  306. package/src/components/form-control/DropdownTrigger.styles.ts +1 -1
  307. package/src/components/form-control/Invalid.tsx +5 -5
  308. package/src/components/form-control/ThemeToggle.tsx +10 -10
  309. package/src/components/form-control/checkbox/Checkbox.styles.ts +8 -8
  310. package/src/components/form-control/checkbox/Checkbox.tsx +2 -2
  311. package/src/components/form-control/checkbox/CheckboxGroup.tsx +1 -1
  312. package/src/components/form-control/checkbox/Radio.tsx +2 -2
  313. package/src/components/form-control/checkbox/RadioGroup.tsx +1 -1
  314. package/src/components/form-control/color-picker/ColorPicker.tsx +17 -17
  315. package/src/components/form-control/combobox/Combobox.tsx +55 -55
  316. package/src/components/form-control/combobox/ComboboxContext.ts +5 -5
  317. package/src/components/form-control/combobox/ComboboxItem.tsx +3 -3
  318. package/src/components/form-control/date-range-picker/DateRangePicker.tsx +40 -26
  319. package/src/components/form-control/editor/EditorToolbar.tsx +52 -50
  320. package/src/components/form-control/editor/RichTextEditor.tsx +16 -16
  321. package/src/components/form-control/editor/editor.css +5 -5
  322. package/src/components/form-control/field/DatePicker.tsx +39 -39
  323. package/src/components/form-control/field/DateTimePicker.tsx +38 -38
  324. package/src/components/form-control/field/Field.styles.ts +11 -11
  325. package/src/components/form-control/field/FieldPlaceholder.tsx +1 -1
  326. package/src/components/form-control/field/NumberInput.tsx +63 -63
  327. package/src/components/form-control/field/TextInput.tsx +48 -48
  328. package/src/components/form-control/field/Textarea.tsx +32 -32
  329. package/src/components/form-control/field/TimePicker.tsx +37 -37
  330. package/src/components/form-control/numpad/Numpad.tsx +26 -26
  331. package/src/components/form-control/select/Select.tsx +84 -84
  332. package/src/components/form-control/select/SelectContext.ts +8 -8
  333. package/src/components/form-control/select/SelectItem.tsx +5 -5
  334. package/src/components/form-control/state-preset/StatePreset.tsx +13 -13
  335. package/src/components/layout/FormTable.tsx +4 -4
  336. package/src/components/layout/sidebar/Sidebar.tsx +8 -8
  337. package/src/components/layout/sidebar/SidebarContainer.tsx +19 -17
  338. package/src/components/layout/sidebar/SidebarContext.ts +8 -8
  339. package/src/components/layout/sidebar/SidebarMenu.tsx +19 -19
  340. package/src/components/layout/sidebar/SidebarUser.tsx +14 -14
  341. package/src/components/layout/topbar/Topbar.tsx +15 -13
  342. package/src/components/layout/topbar/TopbarContainer.tsx +6 -6
  343. package/src/components/layout/topbar/TopbarContext.ts +2 -2
  344. package/src/components/layout/topbar/TopbarMenu.tsx +18 -16
  345. package/src/components/layout/topbar/TopbarUser.tsx +9 -9
  346. package/src/directives/ripple.ts +8 -8
  347. package/src/helpers/createAppStructure.ts +12 -6
  348. package/src/helpers/createSlotComponent.ts +4 -4
  349. package/src/helpers/mergeStyles.ts +11 -11
  350. package/src/hooks/createControllableSignal.ts +11 -11
  351. package/src/hooks/createControllableStore.ts +8 -8
  352. package/src/hooks/createIMEHandler.ts +7 -7
  353. package/src/hooks/createMountTransition.ts +4 -4
  354. package/src/hooks/createSelectionGroup.tsx +1 -1
  355. package/src/hooks/createSlotSignal.ts +2 -2
  356. package/src/hooks/useLocalStorage.ts +13 -13
  357. package/src/hooks/useLogger.ts +2 -2
  358. package/src/hooks/useRouterLink.ts +15 -15
  359. package/src/index.ts +4 -3
  360. package/src/providers/ClipboardProvider.tsx +19 -19
  361. package/src/providers/ConfigContext.tsx +8 -8
  362. package/src/providers/ErrorLoggerProvider.tsx +3 -3
  363. package/src/providers/LoggerContext.tsx +13 -13
  364. package/src/providers/PwaUpdateProvider.tsx +6 -6
  365. package/src/providers/ServiceClientContext.ts +9 -9
  366. package/src/providers/ServiceClientProvider.tsx +15 -15
  367. package/src/providers/SyncStorageContext.tsx +15 -15
  368. package/src/providers/SystemProvider.tsx +15 -12
  369. package/src/providers/ThemeContext.tsx +26 -26
  370. package/src/providers/i18n/I18nContext.tsx +129 -0
  371. package/src/providers/i18n/I18nContext.types.ts +30 -0
  372. package/src/providers/i18n/i18nUtils.ts +38 -0
  373. package/src/providers/i18n/locales/en.ts +161 -0
  374. package/src/providers/i18n/locales/ko.ts +161 -0
  375. package/src/providers/shared-data/SharedDataChangeEvent.ts +4 -4
  376. package/src/providers/shared-data/SharedDataContext.ts +29 -29
  377. package/src/providers/shared-data/SharedDataProvider.tsx +21 -21
  378. package/src/styles/patterns.styles.ts +6 -6
  379. package/src/styles/tokens.styles.ts +5 -5
  380. package/tailwind.config.ts +1 -1
  381. package/tailwind.css +4 -4
  382. package/tests/components/data/List.spec.tsx +689 -0
  383. package/tests/components/data/Pagination.spec.tsx +336 -0
  384. package/tests/components/data/Table.spec.tsx +55 -0
  385. package/tests/components/data/kanban/Kanban.selection.spec.tsx +213 -0
  386. package/tests/components/data/sheet/DataSheet.spec.tsx +645 -0
  387. package/tests/components/disclosure/Collapse.spec.tsx +173 -0
  388. package/tests/components/disclosure/Dialog.spec.tsx +438 -0
  389. package/tests/components/disclosure/DialogProvider.spec.tsx +142 -0
  390. package/tests/components/disclosure/Dropdown.spec.tsx +213 -0
  391. package/tests/components/disclosure/Tabs.spec.tsx +220 -0
  392. package/tests/components/display/Alert.spec.tsx +47 -0
  393. package/tests/components/display/Barcode.spec.tsx +61 -0
  394. package/tests/components/display/Card.spec.tsx +41 -0
  395. package/tests/components/display/Link.spec.tsx +62 -0
  396. package/tests/components/display/Tag.spec.tsx +47 -0
  397. package/tests/components/features/address/AddressSearch.spec.tsx +45 -0
  398. package/tests/components/features/crud-detail/CrudDetail.spec.tsx +537 -0
  399. package/tests/components/features/crud-sheet/CrudSheet.spec.tsx +491 -0
  400. package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +482 -0
  401. package/tests/components/features/permission-table/PermissionTable.spec.tsx +288 -0
  402. package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +463 -0
  403. package/tests/components/feedback/busy/BusyContainer.spec.tsx +80 -0
  404. package/tests/components/feedback/notification/LiveRegion.spec.tsx +52 -0
  405. package/tests/components/feedback/notification/NotificationBanner.spec.tsx +187 -0
  406. package/tests/components/feedback/notification/NotificationBell.spec.tsx +226 -0
  407. package/tests/components/feedback/notification/NotificationContext.spec.tsx +362 -0
  408. package/tests/components/feedback/print/Print.spec.tsx +45 -0
  409. package/tests/components/form-control/Button.spec.tsx +119 -0
  410. package/tests/components/form-control/Invalid.spec.tsx +131 -0
  411. package/tests/components/form-control/checkbox/Checkbox.spec.tsx +137 -0
  412. package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +108 -0
  413. package/tests/components/form-control/checkbox/Radio.spec.tsx +138 -0
  414. package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +108 -0
  415. package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +94 -0
  416. package/tests/components/form-control/combobox/Combobox.spec.tsx +253 -0
  417. package/tests/components/form-control/combobox/ComboboxItem.spec.tsx +88 -0
  418. package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +208 -0
  419. package/tests/components/form-control/field/DatePicker.spec.tsx +381 -0
  420. package/tests/components/form-control/field/DateTimePicker.spec.tsx +383 -0
  421. package/tests/components/form-control/field/NumberInput.spec.tsx +371 -0
  422. package/tests/components/form-control/field/TextInput.spec.tsx +341 -0
  423. package/tests/components/form-control/field/Textarea.spec.tsx +224 -0
  424. package/tests/components/form-control/field/TimePicker.spec.tsx +315 -0
  425. package/tests/components/form-control/numpad/Numpad.spec.tsx +248 -0
  426. package/tests/components/form-control/select/Select.spec.tsx +676 -0
  427. package/tests/components/form-control/select/SelectItem.spec.tsx +174 -0
  428. package/tests/components/layout/FormGroup.spec.tsx +104 -0
  429. package/tests/components/layout/FormTable.spec.tsx +43 -0
  430. package/tests/components/layout/sidebar/Sidebar.spec.tsx +192 -0
  431. package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +261 -0
  432. package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +219 -0
  433. package/tests/components/layout/sidebar/SidebarUser.spec.tsx +133 -0
  434. package/tests/components/layout/topbar/TopbarActions.spec.tsx +77 -0
  435. package/tests/components/layout/topbar/TopbarContainer.spec.tsx +38 -0
  436. package/tests/components/layout/topbar/createTopbarActions.spec.tsx +66 -0
  437. package/tests/directives/ripple.spec.tsx +130 -0
  438. package/tests/helpers/createAppStructure.spec.tsx +843 -0
  439. package/tests/helpers/mergeStyles.spec.ts +172 -0
  440. package/tests/hooks/createControllableSignal.spec.ts +194 -0
  441. package/tests/hooks/createIMEHandler.spec.ts +80 -0
  442. package/tests/hooks/createMountTransition.spec.ts +86 -0
  443. package/tests/hooks/useLocalStorage.spec.tsx +223 -0
  444. package/tests/hooks/useLogger.spec.tsx +116 -0
  445. package/tests/hooks/usePrint.spec.tsx +134 -0
  446. package/tests/hooks/useRouterLink.spec.tsx +183 -0
  447. package/tests/hooks/useSyncConfig.spec.tsx +304 -0
  448. package/tests/providers/ClipboardProvider.spec.tsx +20 -0
  449. package/tests/providers/ConfigContext.spec.tsx +42 -0
  450. package/tests/providers/ErrorLoggerProvider.spec.tsx +73 -0
  451. package/tests/providers/LoggerContext.spec.tsx +76 -0
  452. package/tests/providers/PwaUpdateProvider.spec.tsx +22 -0
  453. package/tests/providers/ServiceClientContext.spec.tsx +88 -0
  454. package/tests/providers/SyncStorageContext.spec.tsx +77 -0
  455. package/tests/providers/i18n/I18nContext.spec.tsx +110 -0
  456. package/tests/providers/shared-data/SharedDataProvider.spec.tsx +401 -0
  457. package/tests/vitest-env.d.ts +1 -0
  458. package/dist/components/form-control/select-list/SelectList.d.ts +0 -54
  459. package/dist/components/form-control/select-list/SelectList.d.ts.map +0 -1
  460. package/dist/components/form-control/select-list/SelectList.js +0 -280
  461. package/dist/components/form-control/select-list/SelectList.js.map +0 -6
  462. package/dist/components/form-control/select-list/SelectListContext.d.ts +0 -13
  463. package/dist/components/form-control/select-list/SelectListContext.d.ts.map +0 -1
  464. package/dist/components/form-control/select-list/SelectListContext.js +0 -14
  465. package/dist/components/form-control/select-list/SelectListContext.js.map +0 -6
  466. package/docs/data-components.md +0 -782
  467. package/docs/disclosure.md +0 -254
  468. package/docs/display.md +0 -153
  469. package/docs/feedback.md +0 -238
  470. package/docs/form-controls.md +0 -1068
  471. package/docs/helpers.md +0 -54
  472. package/docs/hooks.md +0 -588
  473. package/docs/layout.md +0 -384
  474. package/docs/providers.md +0 -211
  475. package/docs/styling.md +0 -184
  476. package/src/components/form-control/select-list/SelectList.tsx +0 -385
  477. package/src/components/form-control/select-list/SelectListContext.ts +0 -23
@@ -26,44 +26,46 @@ import {
26
26
  IconClearFormatting,
27
27
  } from "@tabler/icons-solidjs";
28
28
  import { Icon } from "../../display/Icon";
29
+ import { useI18nOptional } from "../../../providers/i18n/I18nContext";
29
30
 
30
31
  export interface EditorToolbarProps {
31
32
  editor: Editor;
32
33
  class?: string;
33
34
  }
34
35
 
35
- // 툴바 컨테이너 스타일
36
+ // Toolbar container style
36
37
  const toolbarClass = clsx(
37
38
  "flex flex-wrap items-center gap-0.5",
38
39
  "border-b border-base-300 dark:border-base-700",
39
40
  "px-2 py-1",
40
41
  );
41
42
 
42
- // 툴바 버튼 기본 스타일
43
+ // Toolbar button base style
43
44
  const toolbarBtnClass = twMerge(iconButtonBase, "size-7");
44
45
 
45
- // 툴바 버튼 활성 스타일
46
+ // Toolbar button active style
46
47
  const toolbarBtnActiveClass = clsx(
47
48
  "bg-primary-100 text-primary-700",
48
49
  "dark:bg-primary-900/40 dark:text-primary-300",
49
50
  );
50
51
 
51
- // 구분선 스타일
52
+ // Separator style
52
53
  const separatorClass = clsx("mx-1 h-5 w-px", "bg-base-300 dark:bg-base-700");
53
54
 
54
- // 색상 선택 label 스타일
55
+ // Color picker label style
55
56
  const colorLabelClass = twMerge(iconButtonBase, "relative", "size-7");
56
57
 
57
- // 색상 input 숨기기 스타일
58
+ // Color input hide style
58
59
  const colorInputClass = clsx("absolute opacity-0", "size-0");
59
60
 
60
- // 색상 indicator 스타일
61
+ // Color indicator style
61
62
  const colorIndicatorClass = clsx("absolute inset-x-1 bottom-0.5", "h-0.5 rounded-full");
62
63
 
63
64
  export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
64
65
  const e = () => props.editor;
66
+ const i18n = useI18nOptional();
65
67
 
66
- // createEditorTransaction으로 반응적 활성 상태 추적
68
+ // Track active state reactively with createEditorTransaction
67
69
  const isBold = createEditorTransaction(e, (editor) => editor.isActive("bold"));
68
70
  const isItalic = createEditorTransaction(e, (editor) => editor.isActive("italic"));
69
71
  const isUnderline = createEditorTransaction(e, (editor) => editor.isActive("underline"));
@@ -87,13 +89,13 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
87
89
  editor.isActive({ textAlign: "justify" } as unknown as string),
88
90
  );
89
91
 
90
- // 현재 텍스트 색상
92
+ // Current text color
91
93
  const currentColor = createEditorTransaction(
92
94
  e,
93
95
  (editor) => (editor.getAttributes("textStyle")["color"] as string | undefined) ?? "#000000",
94
96
  );
95
97
 
96
- // 현재 하이라이트 색상
98
+ // Current highlight color
97
99
  const currentHighlight = createEditorTransaction(
98
100
  e,
99
101
  (editor) => (editor.getAttributes("highlight")["color"] as string | undefined) ?? "#ffff00",
@@ -102,7 +104,7 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
102
104
  const btnClass = (active: () => boolean) =>
103
105
  twMerge(toolbarBtnClass, active() && toolbarBtnActiveClass);
104
106
 
105
- // 이미지 삽입 핸들러
107
+ // Image insert handler
106
108
  const handleImageInsert = () => {
107
109
  const input = document.createElement("input");
108
110
  input.type = "file";
@@ -125,11 +127,11 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
125
127
 
126
128
  return (
127
129
  <div class={twMerge(toolbarClass, props.class)}>
128
- {/* 1. 헤더 (H1, H2) */}
130
+ {/* 1. Header (H1, H2) */}
129
131
  <button
130
132
  type="button"
131
133
  class={btnClass(isH1)}
132
- title="제목 1"
134
+ title={i18n?.t("editorToolbar.heading1") ?? "Heading 1"}
133
135
  onClick={() => props.editor.chain().focus().toggleHeading({ level: 1 }).run()}
134
136
  >
135
137
  <Icon icon={IconH1} size="1em" />
@@ -137,20 +139,20 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
137
139
  <button
138
140
  type="button"
139
141
  class={btnClass(isH2)}
140
- title="제목 2"
142
+ title={i18n?.t("editorToolbar.heading2") ?? "Heading 2"}
141
143
  onClick={() => props.editor.chain().focus().toggleHeading({ level: 2 }).run()}
142
144
  >
143
145
  <Icon icon={IconH2} size="1em" />
144
146
  </button>
145
147
 
146
- {/* 2. 구분선 */}
148
+ {/* 2. Separator */}
147
149
  <div class={separatorClass} />
148
150
 
149
- {/* 3. 텍스트 서식 (Bold, Italic, Underline, Strike) */}
151
+ {/* 3. Text format (Bold, Italic, Underline, Strike) */}
150
152
  <button
151
153
  type="button"
152
154
  class={btnClass(isBold)}
153
- title="굵게"
155
+ title={i18n?.t("editorToolbar.bold") ?? "Bold"}
154
156
  onClick={() => props.editor.chain().focus().toggleBold().run()}
155
157
  >
156
158
  <Icon icon={IconBold} size="1em" />
@@ -158,7 +160,7 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
158
160
  <button
159
161
  type="button"
160
162
  class={btnClass(isItalic)}
161
- title="기울임"
163
+ title={i18n?.t("editorToolbar.italic") ?? "Italic"}
162
164
  onClick={() => props.editor.chain().focus().toggleItalic().run()}
163
165
  >
164
166
  <Icon icon={IconItalic} size="1em" />
@@ -166,7 +168,7 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
166
168
  <button
167
169
  type="button"
168
170
  class={btnClass(isUnderline)}
169
- title="밑줄"
171
+ title={i18n?.t("editorToolbar.underline") ?? "Underline"}
170
172
  onClick={() => props.editor.chain().focus().toggleUnderline().run()}
171
173
  >
172
174
  <Icon icon={IconUnderline} size="1em" />
@@ -174,17 +176,17 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
174
176
  <button
175
177
  type="button"
176
178
  class={btnClass(isStrike)}
177
- title="취소선"
179
+ title={i18n?.t("editorToolbar.strikethrough") ?? "Strikethrough"}
178
180
  onClick={() => props.editor.chain().focus().toggleStrike().run()}
179
181
  >
180
182
  <Icon icon={IconStrikethrough} size="1em" />
181
183
  </button>
182
184
 
183
- {/* 4. 구분선 */}
185
+ {/* 4. Separator */}
184
186
  <div class={separatorClass} />
185
187
 
186
- {/* 5. 텍스트 색상 + 배경색 (input[type=color] 사용) */}
187
- <label class={colorLabelClass} title="텍스트 색상">
188
+ {/* 5. Text color + background color (using input[type=color]) */}
189
+ <label class={colorLabelClass} title={i18n?.t("editorToolbar.textColor") ?? "Text color"}>
188
190
  <span class={clsx("text-sm font-bold")}>A</span>
189
191
  <div class={colorIndicatorClass} style={{ "background-color": currentColor() }} />
190
192
  <input
@@ -194,7 +196,7 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
194
196
  onInput={(ev) => props.editor.chain().focus().setColor(ev.currentTarget.value).run()}
195
197
  />
196
198
  </label>
197
- <label class={colorLabelClass} title="배경색">
199
+ <label class={colorLabelClass} title={i18n?.t("editorToolbar.bgColor") ?? "Background color"}>
198
200
  <span
199
201
  class={clsx("rounded px-0.5 text-sm font-bold")}
200
202
  style={{ "background-color": currentHighlight() }}
@@ -211,14 +213,14 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
211
213
  />
212
214
  </label>
213
215
 
214
- {/* 6. 구분선 */}
216
+ {/* 6. Separator */}
215
217
  <div class={separatorClass} />
216
218
 
217
- {/* 7. 리스트 (Bullet, Ordered) */}
219
+ {/* 7. List (Bullet, Ordered) */}
218
220
  <button
219
221
  type="button"
220
222
  class={btnClass(isBulletList)}
221
- title="글머리 기호 목록"
223
+ title={i18n?.t("editorToolbar.bulletList") ?? "Bullet list"}
222
224
  onClick={() => props.editor.chain().focus().toggleBulletList().run()}
223
225
  >
224
226
  <Icon icon={IconList} size="1em" />
@@ -226,20 +228,20 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
226
228
  <button
227
229
  type="button"
228
230
  class={btnClass(isOrderedList)}
229
- title="번호 매기기 목록"
231
+ title={i18n?.t("editorToolbar.numberedList") ?? "Numbered list"}
230
232
  onClick={() => props.editor.chain().focus().toggleOrderedList().run()}
231
233
  >
232
234
  <Icon icon={IconListNumbers} size="1em" />
233
235
  </button>
234
236
 
235
- {/* 8. 구분선 */}
237
+ {/* 8. Separator */}
236
238
  <div class={separatorClass} />
237
239
 
238
- {/* 9. 들여쓰기 (Increase, Decrease) */}
240
+ {/* 9. Indentation (Increase, Decrease) */}
239
241
  <button
240
242
  type="button"
241
243
  class={toolbarBtnClass}
242
- title="들여쓰기"
244
+ title={i18n?.t("editorToolbar.increaseIndent") ?? "Increase indent"}
243
245
  onClick={() => props.editor.chain().focus().sinkListItem("listItem").run()}
244
246
  >
245
247
  <Icon icon={IconIndentIncrease} size="1em" />
@@ -247,20 +249,20 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
247
249
  <button
248
250
  type="button"
249
251
  class={toolbarBtnClass}
250
- title="내어쓰기"
252
+ title={i18n?.t("editorToolbar.decreaseIndent") ?? "Decrease indent"}
251
253
  onClick={() => props.editor.chain().focus().liftListItem("listItem").run()}
252
254
  >
253
255
  <Icon icon={IconIndentDecrease} size="1em" />
254
256
  </button>
255
257
 
256
- {/* 10. 구분선 */}
258
+ {/* 10. Separator */}
257
259
  <div class={separatorClass} />
258
260
 
259
- {/* 11. 블록 (Blockquote, CodeBlock) */}
261
+ {/* 11. Block (Blockquote, CodeBlock) */}
260
262
  <button
261
263
  type="button"
262
264
  class={btnClass(isBlockquote)}
263
- title="인용"
265
+ title={i18n?.t("editorToolbar.blockquote") ?? "Blockquote"}
264
266
  onClick={() => props.editor.chain().focus().toggleBlockquote().run()}
265
267
  >
266
268
  <Icon icon={IconQuote} size="1em" />
@@ -268,20 +270,20 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
268
270
  <button
269
271
  type="button"
270
272
  class={btnClass(isCodeBlock)}
271
- title="코드 블록"
273
+ title={i18n?.t("editorToolbar.codeBlock") ?? "Code block"}
272
274
  onClick={() => props.editor.chain().focus().toggleCodeBlock().run()}
273
275
  >
274
276
  <Icon icon={IconCode} size="1em" />
275
277
  </button>
276
278
 
277
- {/* 12. 구분선 */}
279
+ {/* 12. Separator */}
278
280
  <div class={separatorClass} />
279
281
 
280
- {/* 13. 정렬 (Left, Center, Right, Justify) */}
282
+ {/* 13. Alignment (Left, Center, Right, Justify) */}
281
283
  <button
282
284
  type="button"
283
285
  class={btnClass(isAlignLeft)}
284
- title="왼쪽 정렬"
286
+ title={i18n?.t("editorToolbar.alignLeft") ?? "Align left"}
285
287
  onClick={() => props.editor.chain().focus().setTextAlign("left").run()}
286
288
  >
287
289
  <Icon icon={IconAlignLeft} size="1em" />
@@ -289,7 +291,7 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
289
291
  <button
290
292
  type="button"
291
293
  class={btnClass(isAlignCenter)}
292
- title="가운데 정렬"
294
+ title={i18n?.t("editorToolbar.alignCenter") ?? "Align center"}
293
295
  onClick={() => props.editor.chain().focus().setTextAlign("center").run()}
294
296
  >
295
297
  <Icon icon={IconAlignCenter} size="1em" />
@@ -297,7 +299,7 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
297
299
  <button
298
300
  type="button"
299
301
  class={btnClass(isAlignRight)}
300
- title="오른쪽 정렬"
302
+ title={i18n?.t("editorToolbar.alignRight") ?? "Align right"}
301
303
  onClick={() => props.editor.chain().focus().setTextAlign("right").run()}
302
304
  >
303
305
  <Icon icon={IconAlignRight} size="1em" />
@@ -305,20 +307,20 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
305
307
  <button
306
308
  type="button"
307
309
  class={btnClass(isAlignJustify)}
308
- title="양쪽 정렬"
310
+ title={i18n?.t("editorToolbar.justify") ?? "Justify"}
309
311
  onClick={() => props.editor.chain().focus().setTextAlign("justify").run()}
310
312
  >
311
313
  <Icon icon={IconAlignJustified} size="1em" />
312
314
  </button>
313
315
 
314
- {/* 14. 구분선 */}
316
+ {/* 14. Separator */}
315
317
  <div class={separatorClass} />
316
318
 
317
- {/* 15. 테이블 삽입 */}
319
+ {/* 15. Insert table */}
318
320
  <button
319
321
  type="button"
320
322
  class={toolbarBtnClass}
321
- title="테이블 삽입"
323
+ title={i18n?.t("editorToolbar.insertTable") ?? "Insert table"}
322
324
  onClick={() =>
323
325
  props.editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run()
324
326
  }
@@ -326,19 +328,19 @@ export const EditorToolbar: Component<EditorToolbarProps> = (props) => {
326
328
  <Icon icon={IconTablePlus} size="1em" />
327
329
  </button>
328
330
 
329
- {/* 16. 이미지 삽입 */}
330
- <button type="button" class={toolbarBtnClass} title="이미지 삽입" onClick={handleImageInsert}>
331
+ {/* 16. Insert image */}
332
+ <button type="button" class={toolbarBtnClass} title={i18n?.t("editorToolbar.insertImage") ?? "Insert image"} onClick={handleImageInsert}>
331
333
  <Icon icon={IconPhoto} size="1em" />
332
334
  </button>
333
335
 
334
- {/* 17. 구분선 */}
336
+ {/* 17. Separator */}
335
337
  <div class={separatorClass} />
336
338
 
337
- {/* 18. 서식 지우기 */}
339
+ {/* 18. Clear formatting */}
338
340
  <button
339
341
  type="button"
340
342
  class={toolbarBtnClass}
341
- title="서식 지우기"
343
+ title={i18n?.t("editorToolbar.clearFormatting") ?? "Clear formatting"}
342
344
  onClick={() => props.editor.chain().focus().clearNodes().unsetAllMarks().run()}
343
345
  >
344
346
  <Icon icon={IconClearFormatting} size="1em" />
@@ -27,26 +27,26 @@ import type { FieldSize } from "../field/Field.styles";
27
27
  import { EditorToolbar } from "./EditorToolbar";
28
28
 
29
29
  export interface RichTextEditorProps {
30
- /** HTML 문자열 */
30
+ /** HTML string value */
31
31
  value?: string;
32
32
 
33
- /** 변경 콜백 */
33
+ /** Value change callback */
34
34
  onValueChange?: (value: string) => void;
35
35
 
36
- /** 비활성화 */
36
+ /** Disabled */
37
37
  disabled?: boolean;
38
38
 
39
- /** 사이즈 */
39
+ /** Size */
40
40
  size?: FieldSize;
41
41
 
42
- /** 커스텀 class */
42
+ /** Custom class */
43
43
  class?: string;
44
44
 
45
- /** 커스텀 style */
45
+ /** Custom style */
46
46
  style?: JSX.CSSProperties;
47
47
  }
48
48
 
49
- // 에디터 wrapper 스타일
49
+ // Editor wrapper style
50
50
  const editorWrapperClass = clsx(
51
51
  "flex flex-col",
52
52
  "bg-primary-50 dark:bg-primary-950/30",
@@ -56,10 +56,10 @@ const editorWrapperClass = clsx(
56
56
  "focus-within:border-primary-500",
57
57
  );
58
58
 
59
- // 에디터 disabled 스타일
59
+ // Editor disabled style
60
60
  const editorDisabledClass = clsx("bg-base-100 dark:bg-base-800", "text-base-500");
61
61
 
62
- // 에디터 콘텐츠 영역 스타일
62
+ // Editor content area style
63
63
  const editorContentClass = clsx(
64
64
  "px-4 py-3",
65
65
  "min-h-32",
@@ -68,7 +68,7 @@ const editorContentClass = clsx(
68
68
  "dark:prose-invert",
69
69
  );
70
70
 
71
- // 에디터 콘텐츠 사이즈별 스타일
71
+ // Editor content size-based style
72
72
  const editorContentSizeClasses: Record<FieldSize, string> = {
73
73
  xs: clsx("px-1.5 py-1", "min-h-12"),
74
74
  sm: clsx("px-3 py-2", "min-h-24"),
@@ -91,7 +91,7 @@ export const RichTextEditor: Component<RichTextEditorProps> = (props) => {
91
91
  onChange: () => local.onValueChange,
92
92
  });
93
93
 
94
- // 에디터 내부 업데이트(onUpdate) 외부 value 변경을 구분하기 위한 플래그
94
+ // Flag to distinguish editor internal update (onUpdate) from external value change
95
95
  let isInternalUpdate = false;
96
96
 
97
97
  let editorRef!: HTMLDivElement;
@@ -119,7 +119,7 @@ export const RichTextEditor: Component<RichTextEditorProps> = (props) => {
119
119
  allowBase64: true,
120
120
  }),
121
121
  ],
122
- // untrack: value/editable 변경 에디터 재생성 방지 (createEffect에서 동기화)
122
+ // untrack: prevent editor recreation on value/editable change (synced in createEffect)
123
123
  content: untrack(() => value()),
124
124
  editable: untrack(() => !local.disabled),
125
125
  onUpdate({ editor: e }) {
@@ -132,7 +132,7 @@ export const RichTextEditor: Component<RichTextEditorProps> = (props) => {
132
132
  },
133
133
  }));
134
134
 
135
- // disabled 변경 에디터 editable 상태 동기화
135
+ // Sync editor editable state when disabled changes
136
136
  createEffect(() => {
137
137
  const e = editor();
138
138
  if (e) {
@@ -140,12 +140,12 @@ export const RichTextEditor: Component<RichTextEditorProps> = (props) => {
140
140
  }
141
141
  });
142
142
 
143
- // 외부에서 value가 변경될 때만 에디터 콘텐츠 동기화
143
+ // Sync editor content only when external value changes
144
144
  createEffect(
145
145
  on(
146
146
  () => value(),
147
147
  (newValue) => {
148
- // 에디터 내부 업데이트로 인한 value 변경은 무시
148
+ // Ignore value change from editor internal update
149
149
  if (isInternalUpdate) return;
150
150
 
151
151
  const e = editor();
@@ -160,7 +160,7 @@ export const RichTextEditor: Component<RichTextEditorProps> = (props) => {
160
160
  ),
161
161
  );
162
162
 
163
- // 클린업
163
+ // Cleanup
164
164
  onCleanup(() => {
165
165
  editor()?.destroy();
166
166
  });
@@ -1,4 +1,4 @@
1
- /* 에디터 콘텐츠 영역 기본 스타일 */
1
+ /* Editor content area default styles */
2
2
  [data-rich-text-editor] .tiptap {
3
3
  outline: none;
4
4
  }
@@ -11,7 +11,7 @@
11
11
  pointer-events: none;
12
12
  }
13
13
 
14
- /* 테이블 스타일 */
14
+ /* Table styles */
15
15
  [data-rich-text-editor] .tiptap table {
16
16
  border-collapse: collapse;
17
17
  width: 100%;
@@ -40,7 +40,7 @@
40
40
  background-color: #374151;
41
41
  }
42
42
 
43
- /* 이미지 스타일 */
43
+ /* Image styles */
44
44
  [data-rich-text-editor] .tiptap img {
45
45
  max-width: 100%;
46
46
  height: auto;
@@ -51,7 +51,7 @@
51
51
  outline: 2px solid #3b82f6;
52
52
  }
53
53
 
54
- /* 코드 블록 스타일 */
54
+ /* Code block styles */
55
55
  [data-rich-text-editor] .tiptap pre {
56
56
  background-color: #1e293b;
57
57
  color: #e2e8f0;
@@ -68,7 +68,7 @@
68
68
  padding: 0;
69
69
  }
70
70
 
71
- /* 인용 블록 */
71
+ /* Block quote */
72
72
  [data-rich-text-editor] .tiptap blockquote {
73
73
  border-left: 3px solid #d1d5db;
74
74
  padding-left: 1rem;