sellmate-design-system-react 9.0.0-beta.7 → 9.0.0-beta.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 (387) hide show
  1. package/AGENTS.md +1873 -250
  2. package/README.md +76 -24
  3. package/dist/components/SAccountListBox/AccountListBoxPortal.d.ts +31 -0
  4. package/dist/components/SAccountListBox/README.md +86 -0
  5. package/dist/components/SAccountListBox/SAccountListBox.d.ts +79 -0
  6. package/dist/components/SAccountListBox/SystemMenuPortal.d.ts +58 -0
  7. package/dist/components/SAccountListBox/accountListBox.config.d.ts +64 -0
  8. package/dist/components/SAccountListBox/index.d.ts +2 -0
  9. package/dist/components/SActionModal/README.md +1 -0
  10. package/dist/components/SActionModal/SActionModal.d.ts +9 -1
  11. package/dist/components/SBadge/README.md +27 -0
  12. package/dist/components/SBadge/SBadge.d.ts +1 -1
  13. package/dist/components/SBarChart/README.md +122 -0
  14. package/dist/components/SBarChart/SBarChart.d.ts +99 -0
  15. package/dist/components/SBarChart/barChart.config.d.ts +85 -0
  16. package/dist/components/SBarChart/index.d.ts +2 -0
  17. package/dist/components/SBarcodeInput/README.md +13 -4
  18. package/dist/components/SBarcodeInput/SBarcodeInput.d.ts +18 -3
  19. package/dist/components/SButton/README.md +40 -0
  20. package/dist/components/SCalendar/README.md +13 -0
  21. package/dist/components/SCalendarBoard/CalendarDayCard.d.ts +53 -0
  22. package/dist/components/SCalendarBoard/CalendarDayEventListBox.d.ts +26 -0
  23. package/dist/components/SCalendarBoard/CalendarEventButton.d.ts +20 -0
  24. package/dist/components/SCalendarBoard/CalendarMoreButton.d.ts +18 -0
  25. package/dist/components/SCalendarBoard/README.md +148 -0
  26. package/dist/components/SCalendarBoard/SCalendarBoard.d.ts +83 -0
  27. package/dist/components/SCalendarBoard/calendar-board-layout.d.ts +59 -0
  28. package/dist/components/SCalendarBoard/calendarBoard.config.d.ts +38 -0
  29. package/dist/components/SCalendarBoard/index.d.ts +3 -0
  30. package/dist/components/SCalendarBoard/types.d.ts +40 -0
  31. package/dist/components/SCallout/README.md +17 -1
  32. package/dist/components/SCallout/SCallout.d.ts +14 -4
  33. package/dist/components/SCard/README.md +17 -0
  34. package/dist/components/SCard/SCard.d.ts +26 -2
  35. package/dist/components/SChatAttachedFile/README.md +33 -0
  36. package/dist/components/SChatAttachedFile/SChatAttachedFile.d.ts +13 -0
  37. package/dist/components/SChatAttachedFile/chatAttachedFile.config.d.ts +23 -0
  38. package/dist/components/SChatAttachedFile/index.d.ts +2 -0
  39. package/dist/components/SChatFile/README.md +33 -0
  40. package/dist/components/SChatFile/SChatFile.d.ts +37 -0
  41. package/dist/components/SChatFile/chatFile.config.d.ts +56 -0
  42. package/dist/components/SChatFile/index.d.ts +2 -0
  43. package/dist/components/SChatInput/README.md +44 -0
  44. package/dist/components/SChatInput/SChatInput.d.ts +60 -0
  45. package/dist/components/SChatInput/index.d.ts +1 -0
  46. package/dist/components/SChatMessage/README.md +86 -0
  47. package/dist/components/SChatMessage/SChatMessage.d.ts +123 -0
  48. package/dist/components/SChatMessage/index.d.ts +1 -0
  49. package/dist/components/SChatSystemMessage/README.md +12 -0
  50. package/dist/components/SChatSystemMessage/SChatSystemMessage.d.ts +18 -0
  51. package/dist/components/SChatSystemMessage/index.d.ts +1 -0
  52. package/dist/components/SCheckbox/README.md +8 -0
  53. package/dist/components/SChip/README.md +25 -0
  54. package/dist/components/SChip/SChip.d.ts +8 -0
  55. package/dist/components/SChip/index.d.ts +1 -1
  56. package/dist/components/SChipFilter/README.md +369 -14
  57. package/dist/components/SChipFilter/SChipFilter.d.ts +169 -60
  58. package/dist/components/SChipFilter/index.d.ts +1 -1
  59. package/dist/components/SChipInput/README.md +17 -2
  60. package/dist/components/SChipInput/SChipInput.d.ts +16 -3
  61. package/dist/components/SChipInput/index.d.ts +1 -1
  62. package/dist/components/SCircleProgress/README.md +8 -0
  63. package/dist/components/SConfirmModal/README.md +13 -4
  64. package/dist/components/SConfirmModal/SConfirmModal.d.ts +46 -9
  65. package/dist/components/SContextAlert/README.md +52 -0
  66. package/dist/components/SContextAlert/SContextAlert.d.ts +51 -0
  67. package/dist/components/SContextAlert/contextAlert.config.d.ts +22 -0
  68. package/dist/components/SContextAlert/index.d.ts +2 -0
  69. package/dist/components/SDatePicker/README.md +21 -2
  70. package/dist/components/SDatePicker/SDatePicker.d.ts +35 -5
  71. package/dist/components/SDateRangePicker/README.md +21 -4
  72. package/dist/components/SDateRangePicker/SDateRangePicker.d.ts +37 -7
  73. package/dist/components/SDivider/README.md +7 -0
  74. package/dist/components/SDivider/SDivider.d.ts +11 -0
  75. package/dist/components/SDonutChart/README.md +105 -0
  76. package/dist/components/SDonutChart/SDonutChart.d.ts +82 -0
  77. package/dist/components/SDonutChart/index.d.ts +1 -0
  78. package/dist/components/SDraggableItem/README.md +37 -0
  79. package/dist/components/SDraggableItem/SDraggableItem.d.ts +2 -0
  80. package/dist/components/SDraggableItem/index.d.ts +1 -1
  81. package/dist/components/SDraggableList/README.md +33 -3
  82. package/dist/components/SDraggableList/SDraggableList.d.ts +18 -3
  83. package/dist/components/SDraggableList/index.d.ts +1 -1
  84. package/dist/components/SDrawer/README.md +8 -0
  85. package/dist/components/SDropdownButton/README.md +19 -0
  86. package/dist/components/SEditor/EditorBody.d.ts +36 -0
  87. package/dist/components/SEditor/EditorToolbar.d.ts +93 -0
  88. package/dist/components/SEditor/README.md +204 -0
  89. package/dist/components/SEditor/SEditor.d.ts +121 -0
  90. package/dist/components/SEditor/editor-icons.d.ts +63 -0
  91. package/dist/components/SEditor/editor.config.d.ts +119 -0
  92. package/dist/components/SEditor/index.d.ts +8 -0
  93. package/dist/components/SEditor/tiptap-api.d.ts +29 -0
  94. package/dist/components/SEditor/use-is-mobile.d.ts +14 -0
  95. package/dist/components/SExpansionItem/README.md +36 -0
  96. package/dist/components/SExpansionItem/index.d.ts +1 -1
  97. package/dist/components/SField/README.md +36 -5
  98. package/dist/components/SField/SField.d.ts +33 -8
  99. package/dist/components/SField/index.d.ts +1 -1
  100. package/dist/components/SFilePicker/README.md +19 -4
  101. package/dist/components/SFilePicker/SFilePicker.d.ts +19 -6
  102. package/dist/components/SFooter/README.md +44 -0
  103. package/dist/components/SFooter/SFooter.d.ts +29 -13
  104. package/dist/components/SFooter/index.d.ts +1 -1
  105. package/dist/components/SForm/README.md +12 -1
  106. package/dist/components/SForm/SForm.d.ts +2 -2
  107. package/dist/components/SGhostButton/README.md +28 -4
  108. package/dist/components/SGhostButton/SGhostButton.d.ts +4 -1
  109. package/dist/components/SGnb/README.md +97 -7
  110. package/dist/components/SGnb/SGnb.d.ts +94 -10
  111. package/dist/components/SGnb/gnb.config.d.ts +18 -5
  112. package/dist/components/SGnb/index.d.ts +1 -1
  113. package/dist/components/SGnbSystem/README.md +186 -0
  114. package/dist/components/SGnbSystem/SGnbSystem.d.ts +179 -0
  115. package/dist/components/SGnbSystem/gnbSystem.config.d.ts +122 -0
  116. package/dist/components/SGnbSystem/index.d.ts +2 -0
  117. package/dist/components/SGuide/README.md +16 -1
  118. package/dist/components/SGuide/SGuide.d.ts +5 -2
  119. package/dist/components/SIcon/README.md +20 -0
  120. package/dist/components/SIcon/SIcon.d.ts +1 -1
  121. package/dist/components/SIcon/icons.gen.d.ts +20 -1
  122. package/dist/components/SImage/README.md +23 -1
  123. package/dist/components/SImage/SImage.d.ts +11 -8
  124. package/dist/components/SInput/README.md +7 -4
  125. package/dist/components/SInput/SInput.d.ts +13 -5
  126. package/dist/components/SKeyValueTable/README.md +88 -0
  127. package/dist/components/SKeyValueTable/SKeyValueTable.d.ts +30 -3
  128. package/dist/components/SKeyValueTable/index.d.ts +1 -1
  129. package/dist/components/SLauncherListBox/README.md +81 -0
  130. package/dist/components/SLauncherListBox/SLauncherListBox.d.ts +67 -0
  131. package/dist/components/SLauncherListBox/index.d.ts +2 -0
  132. package/dist/components/SLauncherListBox/launcherListBox.config.d.ts +118 -0
  133. package/dist/components/SLayout/README.md +22 -1
  134. package/dist/components/SLayout/SLayout.d.ts +6 -2
  135. package/dist/components/SLayout/index.d.ts +1 -1
  136. package/dist/components/SLineChart/README.md +131 -0
  137. package/dist/components/SLineChart/SLineChart.d.ts +110 -0
  138. package/dist/components/SLineChart/index.d.ts +1 -0
  139. package/dist/components/SLineChart/lineChart.config.d.ts +95 -0
  140. package/dist/components/SLinearProgress/README.md +15 -0
  141. package/dist/components/SLinearProgress/SLinearProgress.d.ts +3 -0
  142. package/dist/components/SLinearProgress/index.d.ts +1 -1
  143. package/dist/components/SList/README.md +15 -2
  144. package/dist/components/SList/SList.d.ts +7 -3
  145. package/dist/components/SList/index.d.ts +1 -1
  146. package/dist/components/SListItem/README.md +41 -0
  147. package/dist/components/SListItem/index.d.ts +1 -1
  148. package/dist/components/SLoadingContainer/index.d.ts +1 -1
  149. package/dist/components/SLoadingContainer/loading.d.ts +41 -6
  150. package/dist/components/SLoadingModal/README.md +10 -2
  151. package/dist/components/SLoadingModal/SLoadingModal.d.ts +4 -4
  152. package/dist/components/SLoadingModal/index.d.ts +1 -1
  153. package/dist/components/SLoginCard/README.md +37 -0
  154. package/dist/components/SLoginCard/SLoginCard.d.ts +39 -0
  155. package/dist/components/SLoginCard/index.d.ts +1 -0
  156. package/dist/components/SLogo/README.md +54 -0
  157. package/dist/components/SLogo/SLogo.d.ts +47 -0
  158. package/dist/components/SLogo/index.d.ts +2 -0
  159. package/dist/components/SLogo/logo.config.d.ts +14 -0
  160. package/dist/components/SLogo/sellmate-wordmark.d.ts +20 -0
  161. package/dist/components/SMeatballButton/README.md +67 -0
  162. package/dist/components/SMeatballButton/SMeatballButton.d.ts +36 -0
  163. package/dist/components/SMeatballButton/index.d.ts +1 -0
  164. package/dist/components/SModal/README.md +15 -5
  165. package/dist/components/SModal/SModal.d.ts +1 -1
  166. package/dist/components/SNumberInput/README.md +18 -8
  167. package/dist/components/SNumberInput/SNumberInput.d.ts +42 -7
  168. package/dist/components/SPage/README.md +105 -5
  169. package/dist/components/SPage/SPage.d.ts +34 -10
  170. package/dist/components/SPage/SPageHeader.d.ts +31 -13
  171. package/dist/components/SPage/index.d.ts +2 -2
  172. package/dist/components/SPage/page-column.d.ts +34 -0
  173. package/dist/components/SPage/page-width.d.ts +23 -0
  174. package/dist/components/SPage/page.config.d.ts +26 -0
  175. package/dist/components/SPieChart/README.md +93 -0
  176. package/dist/components/SPieChart/SPieChart.d.ts +73 -0
  177. package/dist/components/SPieChart/index.d.ts +1 -0
  178. package/dist/components/SPopover/README.md +15 -0
  179. package/dist/components/SPopup/README.md +26 -2
  180. package/dist/components/SPopup/SPopup.d.ts +13 -10
  181. package/dist/components/SPopup/index.d.ts +1 -1
  182. package/dist/components/SPortal/README.md +20 -0
  183. package/dist/components/SRadio/README.md +20 -0
  184. package/dist/components/SRadioButton/README.md +18 -0
  185. package/dist/components/SRadioButton/SRadioButton.d.ts +1 -1
  186. package/dist/components/SRadioCard/README.md +78 -0
  187. package/dist/components/SRadioCard/SRadioCard.d.ts +29 -0
  188. package/dist/components/SRadioCard/SRadioCardGroup.d.ts +36 -0
  189. package/dist/components/SRadioCard/index.d.ts +2 -0
  190. package/dist/components/SScrollArea/README.md +28 -0
  191. package/dist/components/SScrollArea/SScrollArea.d.ts +17 -0
  192. package/dist/components/SSearchInput/README.md +63 -0
  193. package/dist/components/SSearchInput/SSearchInput.d.ts +52 -0
  194. package/dist/components/SSearchInput/index.d.ts +1 -0
  195. package/dist/components/SSectionHeaderCard/README.md +38 -0
  196. package/dist/components/SSectionHeaderCard/SSectionHeaderCard.d.ts +19 -0
  197. package/dist/components/SSelect/README.md +38 -11
  198. package/dist/components/SSelect/SSelect.d.ts +80 -9
  199. package/dist/components/SSelect/select.config.d.ts +15 -0
  200. package/dist/components/SSplitter/README.md +17 -2
  201. package/dist/components/SSplitter/SSplitter.d.ts +7 -3
  202. package/dist/components/SStepper/README.md +26 -0
  203. package/dist/components/SSwitch/README.md +13 -1
  204. package/dist/components/SSwitch/SSwitch.d.ts +1 -3
  205. package/dist/components/SSystemActionButton/README.md +246 -0
  206. package/dist/components/SSystemActionButton/SSystemActionButton.d.ts +167 -0
  207. package/dist/components/SSystemActionButton/index.d.ts +2 -0
  208. package/dist/components/SSystemActionButton/systemActionButton.config.d.ts +93 -0
  209. package/dist/components/STable/README.md +116 -11
  210. package/dist/components/STable/STable.d.ts +243 -23
  211. package/dist/components/STable/index.d.ts +1 -1
  212. package/dist/components/STableBar/README.md +1 -0
  213. package/dist/components/STableBar/STableBar.d.ts +8 -1
  214. package/dist/components/STabs/README.md +13 -2
  215. package/dist/components/STabs/STabs.d.ts +3 -5
  216. package/dist/components/STabs/index.d.ts +1 -1
  217. package/dist/components/STabs/tabs.config.d.ts +3 -4
  218. package/dist/components/STag/README.md +55 -0
  219. package/dist/components/STag/STag.d.ts +3 -1
  220. package/dist/components/STag/tag.config.d.ts +1 -1
  221. package/dist/components/STextLink/README.md +19 -1
  222. package/dist/components/STextLink/STextLink.d.ts +5 -1
  223. package/dist/components/STextarea/README.md +11 -5
  224. package/dist/components/STextarea/STextarea.d.ts +42 -6
  225. package/dist/components/STimePicker/README.md +18 -2
  226. package/dist/components/STimePicker/STimePicker.d.ts +29 -6
  227. package/dist/components/STimePicker/timepicker.config.d.ts +4 -2
  228. package/dist/components/STimeRangePicker/README.md +30 -2
  229. package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +28 -6
  230. package/dist/components/SToast/README.md +25 -1
  231. package/dist/components/SToast/SToast.d.ts +2 -2
  232. package/dist/components/SToggle/README.md +8 -0
  233. package/dist/components/SToggle/index.d.ts +1 -1
  234. package/dist/components/STooltip/README.md +25 -1
  235. package/dist/components/STooltip/STooltip.d.ts +1 -1
  236. package/dist/components/STree/README.md +42 -4
  237. package/dist/components/STree/STree.d.ts +18 -6
  238. package/dist/components/STree/STree.examples.d.ts +2 -0
  239. package/dist/docs/Gallery.d.ts +9 -0
  240. package/dist/docs/RecipeGallery.d.ts +13 -0
  241. package/dist/docs/gallery-previews.d.ts +24 -0
  242. package/dist/fonts/LICENSE.txt +94 -0
  243. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.0.woff2 +0 -0
  244. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.1.woff2 +0 -0
  245. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.10.woff2 +0 -0
  246. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.11.woff2 +0 -0
  247. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.12.woff2 +0 -0
  248. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.13.woff2 +0 -0
  249. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.14.woff2 +0 -0
  250. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.15.woff2 +0 -0
  251. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.16.woff2 +0 -0
  252. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.17.woff2 +0 -0
  253. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.18.woff2 +0 -0
  254. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.19.woff2 +0 -0
  255. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.2.woff2 +0 -0
  256. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.20.woff2 +0 -0
  257. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.21.woff2 +0 -0
  258. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.22.woff2 +0 -0
  259. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.23.woff2 +0 -0
  260. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.24.woff2 +0 -0
  261. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.25.woff2 +0 -0
  262. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.26.woff2 +0 -0
  263. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.27.woff2 +0 -0
  264. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.28.woff2 +0 -0
  265. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.29.woff2 +0 -0
  266. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.3.woff2 +0 -0
  267. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.30.woff2 +0 -0
  268. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.31.woff2 +0 -0
  269. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.32.woff2 +0 -0
  270. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.33.woff2 +0 -0
  271. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.34.woff2 +0 -0
  272. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.35.woff2 +0 -0
  273. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.36.woff2 +0 -0
  274. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.37.woff2 +0 -0
  275. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.38.woff2 +0 -0
  276. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.39.woff2 +0 -0
  277. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.4.woff2 +0 -0
  278. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.40.woff2 +0 -0
  279. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.41.woff2 +0 -0
  280. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.42.woff2 +0 -0
  281. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.43.woff2 +0 -0
  282. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.44.woff2 +0 -0
  283. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.45.woff2 +0 -0
  284. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.46.woff2 +0 -0
  285. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.47.woff2 +0 -0
  286. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.48.woff2 +0 -0
  287. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.49.woff2 +0 -0
  288. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.5.woff2 +0 -0
  289. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.50.woff2 +0 -0
  290. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.51.woff2 +0 -0
  291. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.52.woff2 +0 -0
  292. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.53.woff2 +0 -0
  293. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.54.woff2 +0 -0
  294. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.55.woff2 +0 -0
  295. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.56.woff2 +0 -0
  296. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.57.woff2 +0 -0
  297. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.58.woff2 +0 -0
  298. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.59.woff2 +0 -0
  299. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.6.woff2 +0 -0
  300. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.60.woff2 +0 -0
  301. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.61.woff2 +0 -0
  302. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.62.woff2 +0 -0
  303. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.63.woff2 +0 -0
  304. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.64.woff2 +0 -0
  305. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.65.woff2 +0 -0
  306. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.66.woff2 +0 -0
  307. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.67.woff2 +0 -0
  308. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.68.woff2 +0 -0
  309. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.69.woff2 +0 -0
  310. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.7.woff2 +0 -0
  311. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.70.woff2 +0 -0
  312. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.71.woff2 +0 -0
  313. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.72.woff2 +0 -0
  314. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.73.woff2 +0 -0
  315. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.74.woff2 +0 -0
  316. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.75.woff2 +0 -0
  317. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.76.woff2 +0 -0
  318. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.77.woff2 +0 -0
  319. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.78.woff2 +0 -0
  320. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.79.woff2 +0 -0
  321. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.8.woff2 +0 -0
  322. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.80.woff2 +0 -0
  323. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.81.woff2 +0 -0
  324. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.82.woff2 +0 -0
  325. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.83.woff2 +0 -0
  326. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.84.woff2 +0 -0
  327. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.85.woff2 +0 -0
  328. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.86.woff2 +0 -0
  329. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.87.woff2 +0 -0
  330. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.88.woff2 +0 -0
  331. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.89.woff2 +0 -0
  332. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.9.woff2 +0 -0
  333. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.90.woff2 +0 -0
  334. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.91.woff2 +0 -0
  335. package/dist/index.cjs +20559 -10373
  336. package/dist/index.cjs.map +1 -1
  337. package/dist/index.d.ts +22 -0
  338. package/dist/index.js +20482 -10372
  339. package/dist/index.js.map +1 -1
  340. package/dist/lib/chart/cartesian.d.ts +56 -0
  341. package/dist/lib/chart/frame.d.ts +21 -0
  342. package/dist/lib/chart/hover-dim.d.ts +19 -0
  343. package/dist/lib/chart/legend.d.ts +21 -0
  344. package/dist/lib/chart/palette.d.ts +28 -0
  345. package/dist/lib/chart/radial.d.ts +99 -0
  346. package/dist/lib/chart/scale.d.ts +26 -0
  347. package/dist/lib/chart/tooltip.d.ts +60 -0
  348. package/dist/lib/chart/types.d.ts +29 -0
  349. package/dist/lib/chart/use-element-size.d.ts +39 -0
  350. package/dist/lib/date.d.ts +2 -1
  351. package/dist/lib/depth-filter.d.ts +27 -0
  352. package/dist/lib/doc-sections.d.ts +35 -0
  353. package/dist/lib/dropdown-menu.d.ts +19 -0
  354. package/dist/lib/field-width.d.ts +31 -0
  355. package/dist/lib/floating-height.d.ts +15 -0
  356. package/dist/lib/global-overlay.d.ts +5 -0
  357. package/dist/lib/hover-preview.d.ts +32 -0
  358. package/dist/lib/inert.d.ts +11 -0
  359. package/dist/lib/overlay-scrollbar.d.ts +32 -0
  360. package/dist/lib/row-metrics.d.ts +61 -0
  361. package/dist/lib/story-docs.d.ts +19 -3
  362. package/dist/llms-full.txt +5901 -550
  363. package/dist/llms.txt +1915 -267
  364. package/dist/playground/categories.d.ts +19 -0
  365. package/dist/pretendard.css +937 -0
  366. package/dist/recipes/AppShell.d.ts +21 -0
  367. package/dist/recipes/ExcelFilePopupPage.d.ts +5 -0
  368. package/dist/recipes/LoginPage.d.ts +6 -0
  369. package/dist/recipes/ProductCreatePage.d.ts +1 -0
  370. package/dist/recipes/ProductCreateSectionsPage.d.ts +5 -0
  371. package/dist/recipes/ProductDetailInlineEditPage.d.ts +9 -0
  372. package/dist/recipes/ProductDetailPage.d.ts +1 -0
  373. package/dist/recipes/ProductListChipFilterPage.d.ts +1 -0
  374. package/dist/recipes/ProductListPage.d.ts +1 -0
  375. package/dist/recipes/TransferOrderPopupPage.d.ts +2 -0
  376. package/dist/recipes/api.d.ts +91 -0
  377. package/dist/recipes/recipe-story.d.ts +33 -0
  378. package/dist/recipes/router.d.ts +9 -0
  379. package/dist/styles.css +3328 -273
  380. package/dist/theme.css +571 -33
  381. package/eslint/index.mjs +9 -0
  382. package/eslint/lib/table-column.mjs +26 -0
  383. package/eslint/rules/divider-vertical-height.mjs +137 -0
  384. package/eslint/rules/field-width-grade.mjs +27 -10
  385. package/eslint/rules/table-column-width.mjs +110 -0
  386. package/eslint/scale.gen.mjs +6 -3
  387. package/package.json +17 -3
@@ -25,9 +25,13 @@
25
25
  | `items` | `T[]` | — | 현재 순서대로 렌더링할 아이템 목록 |
26
26
  | `getKey` | `(item: T, index: number) => string` | — | 아이템을 식별할 안정적인 key |
27
27
  | `renderItem` | `(item: T, index: number, state: SDraggableListRenderState) => ReactNode` | — | 아이템 렌더링 함수 |
28
- | `selectedKey?` | `string` | — | 외부에서 제어하는 selected 아이템 key |
29
- | `defaultSelectedKey?` | `string` | — | 초기 selected 아이템 key |
28
+ | `selectedKey?` | `string` | — | 외부에서 제어하는 selected 아이템 key. 이 셋(`selectedKey`·`defaultSelectedKey`·`onSelectedKeyChange`) 중 하나라도 주면 **행 선택이 켜진다** — 행이 `role="button"` 이 되어 클릭·Enter·Space 로 선택된다. 아무것도 주지 않으면 행은 아무 상호작용도 갖지 않는다. |
29
+ | `defaultSelectedKey?` | `string` | — | 초기 selected 아이템 key. 주면 행 선택이 켜진다 (`selectedKey` 참조) |
30
30
  | `getDisabled?` | `(item: T, index: number) => boolean` | — | disabled 아이템은 선택 및 드래그에서 제외 |
31
+ | `getDepth?` | `(item: T, index: number) => number` | — | 아이템의 중첩 단계. 기본값은 1 |
32
+ | `setDepth?` | `(item: T, depth: number) => T` | — | depth 변경이 필요한 드롭에서 다음 아이템을 만드는 함수 |
33
+ | `getCanHaveChildren?` | `(item: T, index: number) => boolean` | — | 하위 depth 를 가질 수 있는 아이템인지 판정 |
34
+ | `maxDepth?` | `number` | `3` | 허용할 최대 depth |
31
35
  | `listId?` | `string` | — | Provider 안에서 사용할 리스트 식별자 |
32
36
  | `group?` | `string` | — | 같은 group 값을 가진 리스트끼리 드래그 이벤트를 공유 |
33
37
 
@@ -36,7 +40,7 @@
36
40
  | Event | Type | Description |
37
41
  |-------|------|-------------|
38
42
  | `onChange` | `(items: T[]) => void` | 단독 리스트에서 드래그가 끝난 뒤 변경된 순서 |
39
- | `onSelectedKeyChange` | `(key: string) => void` | selected 아이템이 변경될 때 호출 |
43
+ | `onSelectedKeyChange` | `(key: string) => void` | selected 아이템이 변경될 때 호출. 주면 행 선택이 켜진다 (`selectedKey` 참조) |
40
44
 
41
45
  ### SDraggableProvider
42
46
 
@@ -46,6 +50,32 @@
46
50
  |------|------|---------|-------------|
47
51
  | `children` | `ReactNode` | — | |
48
52
 
53
+ ## Types
54
+
55
+ ### SDraggableGroupMoveEvent
56
+
57
+ ```ts
58
+ export interface SDraggableGroupMoveEvent {
59
+ group: string;
60
+ itemKey: string;
61
+ fromListId: string;
62
+ fromIndex: number;
63
+ toListId: string;
64
+ toIndex: number;
65
+ }
66
+ ```
67
+
68
+ ### SDraggableListRenderState
69
+
70
+ ```ts
71
+ export interface SDraggableListRenderState {
72
+ onDragHandleMouseDown: (event: MouseEvent<HTMLDivElement>) => void;
73
+ selected: boolean;
74
+ disabled: boolean;
75
+ depth: number;
76
+ }
77
+ ```
78
+
49
79
  ## Dependencies
50
80
 
51
81
  ### Depends on
@@ -3,7 +3,10 @@ import { type SListProps } from '../SList';
3
3
  export interface SDraggableListRenderState {
4
4
  onDragHandleMouseDown: (event: MouseEvent<HTMLDivElement>) => void;
5
5
  selected: boolean;
6
+ disabled: boolean;
7
+ depth: number;
6
8
  }
9
+ export type SDraggableListDropIntent = 'before' | 'inside' | 'after';
7
10
  export interface SDraggableListProps<T> extends Omit<SListProps, 'children' | 'onChange'> {
8
11
  /** 현재 순서대로 렌더링할 아이템 목록 */
9
12
  items: T[];
@@ -13,14 +16,26 @@ export interface SDraggableListProps<T> extends Omit<SListProps, 'children' | 'o
13
16
  renderItem: (item: T, index: number, state: SDraggableListRenderState) => ReactNode;
14
17
  /** 단독 리스트에서 드래그가 끝난 뒤 변경된 순서 */
15
18
  onChange?: (items: T[]) => void;
16
- /** 외부에서 제어하는 selected 아이템 key */
19
+ /**
20
+ * 외부에서 제어하는 selected 아이템 key.
21
+ * 이 셋(`selectedKey`·`defaultSelectedKey`·`onSelectedKeyChange`) 중 하나라도 주면 **행 선택이 켜진다** —
22
+ * 행이 `role="button"` 이 되어 클릭·Enter·Space 로 선택된다. 아무것도 주지 않으면 행은 아무 상호작용도 갖지 않는다.
23
+ */
17
24
  selectedKey?: string;
18
- /** 초기 selected 아이템 key */
25
+ /** 초기 selected 아이템 key. 주면 행 선택이 켜진다 (`selectedKey` 참조) */
19
26
  defaultSelectedKey?: string;
20
- /** selected 아이템이 변경될 때 호출 */
27
+ /** selected 아이템이 변경될 때 호출. 주면 행 선택이 켜진다 (`selectedKey` 참조) */
21
28
  onSelectedKeyChange?: (key: string) => void;
22
29
  /** disabled 아이템은 선택 및 드래그에서 제외 */
23
30
  getDisabled?: (item: T, index: number) => boolean;
31
+ /** 아이템의 중첩 단계. 기본값은 1 */
32
+ getDepth?: (item: T, index: number) => number;
33
+ /** depth 변경이 필요한 드롭에서 다음 아이템을 만드는 함수 */
34
+ setDepth?: (item: T, depth: number) => T;
35
+ /** 하위 depth 를 가질 수 있는 아이템인지 판정 */
36
+ getCanHaveChildren?: (item: T, index: number) => boolean;
37
+ /** 허용할 최대 depth */
38
+ maxDepth?: number;
24
39
  /** Provider 안에서 사용할 리스트 식별자 */
25
40
  listId?: string;
26
41
  /** 같은 group 값을 가진 리스트끼리 드래그 이벤트를 공유 */
@@ -1,2 +1,2 @@
1
- export { SDraggableList, type SDraggableListProps, type SDraggableListRenderState, } from './SDraggableList';
1
+ export { SDraggableList, type SDraggableListDropIntent, type SDraggableListProps, type SDraggableListRenderState, } from './SDraggableList';
2
2
  export { SDraggableProvider, SDraggableGroup, type SDraggableGroupMoveEvent, type SDraggableGroupProps, type SDraggableProviderProps, } from './SDraggableGroup';
@@ -29,6 +29,14 @@
29
29
  | `onClose` | `() => void` | 닫기(X) 버튼 클릭 |
30
30
  | `onWidthChange` | `(width: number) => void` | 너비가 확정될 때(드래그를 놓거나 방향키 조작). 드래그하는 동안에는 오지 않는다 |
31
31
 
32
+ ## Types
33
+
34
+ ### SDrawerButton
35
+
36
+ ```ts
37
+ export type SDrawerButton = SFooterButton;
38
+ ```
39
+
32
40
  ## Dependencies
33
41
 
34
42
  ### Depends on
@@ -33,6 +33,25 @@
33
33
  | `open` | `() => void` | 드롭다운 열기 (sdOpen) |
34
34
  | `close` | `() => void` | 드롭다운 닫기 (sdClose) |
35
35
 
36
+ ## Types
37
+
38
+ ### SDropdownButtonSize
39
+
40
+ ```ts
41
+ export type SDropdownButtonSize = 'xs' | 'sm' | 'md';
42
+ ```
43
+
44
+ ### SDropdownButtonItem
45
+
46
+ ```ts
47
+ export interface SDropdownButtonItem {
48
+ value: string | number;
49
+ label: string;
50
+ icon?: SIconName;
51
+ disabled?: boolean;
52
+ }
53
+ ```
54
+
36
55
  ## Dependencies
37
56
 
38
57
  ### Depends on
@@ -0,0 +1,36 @@
1
+ import { type CSSProperties, type RefObject } from 'react';
2
+ import { type SEditorToolbarItem } from './editor.config';
3
+ import type { SEditorHandle } from './SEditor';
4
+ import type { TiptapApi } from './tiptap-api';
5
+ export interface EditorBodyProps {
6
+ /** 다 불러온 tiptap — 이 컴포넌트는 준비된 뒤에만 마운트된다 */
7
+ api: TiptapApi;
8
+ value?: string;
9
+ defaultValue?: string;
10
+ /** 지금 화면에 있는 HTML. 껍데기(SEditor)가 규칙 검증·폼 제출에 쓴다 */
11
+ htmlRef: RefObject<string>;
12
+ /** 사용자가 고쳐서 값이 바뀌었다 (setHTML·clear 같은 프로그램 조작은 제외) */
13
+ onInput: (html: string) => void;
14
+ onFocusChange: (focused: boolean) => void;
15
+ /** 에디터 인스턴스가 생겼다 — 껍데기가 밀린 focus() 를 흘려보낸다 */
16
+ onReady: () => void;
17
+ placeholder: string;
18
+ editable: boolean;
19
+ disabled: boolean;
20
+ minHeight?: number | string;
21
+ maxHeight?: number | string;
22
+ toolbar: SEditorToolbarItem[];
23
+ /** 선택 영역 위에 뜨는 서식 판 — 편집할 수 있으면 언제나 뜬다 (SEditor 주석 참고) */
24
+ bubbleMenu: SEditorToolbarItem[];
25
+ onImageUpload?: (file: File) => Promise<string>;
26
+ editorClassName?: string;
27
+ editorStyle?: CSSProperties;
28
+ }
29
+ /**
30
+ * SEditor 의 편집 영역 (내부 전용 — 배럴로 내보내지 않는다).
31
+ *
32
+ * tiptap 을 실제로 부리는 곳은 여기뿐이고, 그 tiptap 조차 `api` prop 으로 받는다.
33
+ * 이 파일이 `@tiptap/*` 을 정적으로 import 하면 그 순간 SEditor 를 쓰지 않는 소비 앱까지
34
+ * tiptap 이 번들에 남는다 (tiptap-api.ts 주석 참고) — 타입만 가져온다.
35
+ */
36
+ export declare const EditorBody: import("react").ForwardRefExoticComponent<EditorBodyProps & import("react").RefAttributes<SEditorHandle>>;
@@ -0,0 +1,93 @@
1
+ import type { Editor } from '@tiptap/core';
2
+ import { type SEditorHeadingLevel, type SEditorToolbarItem } from './editor.config';
3
+ import type { TiptapApi } from './tiptap-api';
4
+ /**
5
+ * 툴바 막대 — 엔진을 불러오는 동안 SEditor 가 같은 높이를 잡아 두는 데도 쓴다.
6
+ *
7
+ * **자리를 고정한다.** 긴 글을 쓰는 동안 막대가 화면 밖으로 나가면 서식을 걸 때마다 위로
8
+ * 되돌아가야 한다. 편집 영역이 자기 안에서 스크롤할 때(`maxHeight`)는 막대가 그 위에 있어
9
+ * 이미 남아 있고, 상한 없이 자라 페이지가 스크롤할 때는 `sticky` 가 화면 위쪽에 붙여 둔다.
10
+ *
11
+ * 글이 막대 아래로 지나가므로 배경을 칠해야 한다 — 필드가 상태(읽기전용·비활성)마다 다른
12
+ * 색을 쓰므로 값을 다시 적지 않고 `bg-inherit` 로 테두리 박스의 색을 그대로 받는다.
13
+ */
14
+ export declare const TOOLBAR_BAR_CLASS = "sticky top-0 z-[1] flex flex-wrap items-center gap-[2px] border-b border-solid bg-inherit px-[8px] py-[4px]";
15
+ export declare const TOOLBAR_BAR_STYLE: {
16
+ borderBottomColor: string;
17
+ };
18
+ /** 버튼의 눌림 표시에 필요한 것만 추린 에디터 상태 */
19
+ declare const readEditorState: (e: Editor) => {
20
+ heading: SEditorHeadingLevel | 0;
21
+ bold: boolean;
22
+ italic: boolean;
23
+ underline: boolean;
24
+ strike: boolean;
25
+ code: boolean;
26
+ alignLeft: boolean;
27
+ alignCenter: boolean;
28
+ alignRight: boolean;
29
+ alignJustify: boolean;
30
+ bulletList: boolean;
31
+ orderedList: boolean;
32
+ taskList: boolean;
33
+ blockquote: boolean;
34
+ codeBlock: boolean;
35
+ link: boolean;
36
+ inTable: boolean;
37
+ canMergeCells: boolean;
38
+ canSplitCell: boolean;
39
+ linkHref: string;
40
+ color: string;
41
+ fontSize: string;
42
+ canUndo: boolean;
43
+ canRedo: boolean;
44
+ };
45
+ export type EditorToolbarState = ReturnType<typeof readEditorState>;
46
+ /** 에디터가 아직 없을 때의 상태 — 아무것도 켜져 있지 않고 되돌릴 것도 없다 */
47
+ export declare const IDLE_TOOLBAR_STATE: EditorToolbarState;
48
+ export interface EditorToolbarBarProps {
49
+ /** 눌림 표시 — 에디터가 아직 없으면 `IDLE_TOOLBAR_STATE` */
50
+ state: EditorToolbarState;
51
+ /** 없으면 버튼을 눌러도 아무 일도 하지 않는다 (그때는 disabled 로 함께 잠근다) */
52
+ editor: Editor | null;
53
+ items: SEditorToolbarItem[];
54
+ /** 이미지 업로드 훅. 없으면 `image` 항목을 그리지 않는다 */
55
+ onImageUpload?: (file: File) => Promise<string>;
56
+ /** 편집 불가(비활성·읽기전용·엔진 로딩 중) — 모든 버튼을 잠근다 */
57
+ disabled: boolean;
58
+ /**
59
+ * `'bar'` 는 편집 영역 위에 붙는 막대, `'bubble'` 은 선택 영역 위에 뜨는 판이다.
60
+ * 그리는 버튼은 같고 담는 상자와 줄바꿈만 다르다.
61
+ */
62
+ variant?: 'bar' | 'bubble';
63
+ }
64
+ interface EditorToolbarProps extends Omit<EditorToolbarBarProps, 'state'> {
65
+ /** 동적으로 불러온 tiptap (useEditorState) */
66
+ api: TiptapApi;
67
+ }
68
+ /**
69
+ * 툴바 막대 (내부 전용 — 배럴로 내보내지 않는다).
70
+ *
71
+ * tiptap 을 모른다 — 눌림 상태는 `state` 로 받고 명령은 `editor` 가 있을 때만 나간다.
72
+ * 그래서 엔진을 불러오는 동안에도 SEditor 가 같은 막대를 그려 자리를 지킬 수 있다.
73
+ * 버튼 개수·아이콘이 같아야 줄바꿈까지 같아, 엔진이 붙는 순간 화면이 밀리지 않는다.
74
+ */
75
+ export declare function EditorToolbarBar({ state, editor, items, onImageUpload, disabled, variant, }: EditorToolbarBarProps): import("react").JSX.Element;
76
+ /**
77
+ * 버블 메뉴 — 글을 선택하면 그 위에 서식 판이 뜬다.
78
+ *
79
+ * tiptap Simple Editor 에는 없는 것이다(템플릿은 막대 하나뿐이다). 막대와 같은 버튼을
80
+ * 같은 코드로 그리고 담는 상자만 바꾼다 — 두 곳의 눌림 표시가 어긋날 일이 없다.
81
+ *
82
+ * 판은 `appendTo` 로 소속 모달(없으면 `body`)에 붙인다. 그대로 두면 tiptap 이 편집 영역의
83
+ * 부모에 붙이는데, 그 부모는 `maxHeight` 를 받으면 스크롤 상자가 되어 판 위쪽이 잘린다.
84
+ */
85
+ export declare function EditorBubbleMenu({ api, editor, ...rest }: EditorToolbarProps): import("react").JSX.Element | null;
86
+ /**
87
+ * SEditor 툴바 — 눌림 상태를 tiptap 에서 구독해 막대에 넘긴다.
88
+ *
89
+ * `useEditorState` 를 거치는 이유: tiptap v3 는 트랜잭션마다 리렌더하지 않으므로, 이걸
90
+ * 거치지 않으면 커서를 굵은 글자 위로 옮겨도 B 버튼이 켜지지 않는다.
91
+ */
92
+ export declare function EditorToolbar({ api, editor, ...rest }: EditorToolbarProps): import("react").JSX.Element;
93
+ export {};
@@ -0,0 +1,204 @@
1
+ # SEditor
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### EditorBody
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `api` | `TiptapApi` | — | 다 불러온 tiptap — 이 컴포넌트는 준비된 뒤에만 마운트된다 |
12
+ | `value?` | `string` | — | |
13
+ | `defaultValue?` | `string` | — | |
14
+ | `htmlRef` | `RefObject<string>` | — | 지금 화면에 있는 HTML. 껍데기(SEditor)가 규칙 검증·폼 제출에 쓴다 |
15
+ | `placeholder` | `string` | — | |
16
+ | `editable` | `boolean` | — | |
17
+ | `disabled` | `boolean` | — | |
18
+ | `minHeight?` | `number \| string` | — | |
19
+ | `maxHeight?` | `number \| string` | — | |
20
+ | `toolbar` | `SEditorToolbarItem[]` | — | |
21
+ | `bubbleMenu` | `SEditorToolbarItem[]` | — | 선택 영역 위에 뜨는 서식 판 — 편집할 수 있으면 언제나 뜬다 (SEditor 주석 참고) |
22
+ | `editorClassName?` | `string` | — | |
23
+ | `editorStyle?` | `CSSProperties` | — | |
24
+
25
+ #### Events
26
+
27
+ | Event | Type | Description |
28
+ |-------|------|-------------|
29
+ | `onInput` | `(html: string) => void` | 사용자가 고쳐서 값이 바뀌었다 (setHTML·clear 같은 프로그램 조작은 제외) |
30
+ | `onFocusChange` | `(focused: boolean) => void` | |
31
+ | `onReady` | `() => void` | 에디터 인스턴스가 생겼다 — 껍데기가 밀린 focus() 를 흘려보낸다 |
32
+ | `onImageUpload` | `(file: File) => Promise<string>` | |
33
+
34
+ ### EditorToolbarBar
35
+
36
+ #### Props
37
+
38
+ | Prop | Type | Default | Description |
39
+ |------|------|---------|-------------|
40
+ | `state` | `EditorToolbarState` | — | 눌림 표시 — 에디터가 아직 없으면 `IDLE_TOOLBAR_STATE` |
41
+ | `editor` | `Editor \| null` | — | 없으면 버튼을 눌러도 아무 일도 하지 않는다 (그때는 disabled 로 함께 잠근다) |
42
+ | `items` | `SEditorToolbarItem[]` | — | |
43
+ | `disabled` | `boolean` | — | 편집 불가(비활성·읽기전용·엔진 로딩 중) — 모든 버튼을 잠근다 |
44
+ | `variant?` | `'bar' \| 'bubble'` | `'bar'` | `'bar'` 는 편집 영역 위에 붙는 막대, `'bubble'` 은 선택 영역 위에 뜨는 판이다. 그리는 버튼은 같고 담는 상자와 줄바꿈만 다르다. |
45
+
46
+ #### Events
47
+
48
+ | Event | Type | Description |
49
+ |-------|------|-------------|
50
+ | `onImageUpload` | `(file: File) => Promise<string>` | 이미지 업로드 훅. 없으면 `image` 항목을 그리지 않는다 |
51
+
52
+ ### SEditor
53
+
54
+ #### Props
55
+
56
+ | Prop | Type | Default | Description |
57
+ |------|------|---------|-------------|
58
+ | `value?` | `string` | — | 값 (제어) — HTML 문자열 |
59
+ | `defaultValue?` | `string` | — | 초기값 (비제어) — HTML 문자열 |
60
+ | `placeholder?` | `string` | `'내용을 입력해 주세요.'` | 빈 문서에 보일 안내 문구 |
61
+ | `minHeight?` | `number \| string` | `200` | 편집 영역 최소 높이 (숫자=px) |
62
+ | `maxHeight?` | `number \| string` | — | 편집 영역 최대 높이 (숫자=px). 넘으면 편집 영역 안에서만 스크롤한다 |
63
+ | `simple?` | `boolean` | `false` | **글자에 거는 서식만** 남긴다 — 목록·정렬·인용·코드·링크·이미지·구분선이 빠진다. 막대와 버블 메뉴 양쪽에 함께 걸린다 (한쪽에만 남으면 아무것도 막지 못한다). 받은 글의 문단 구조까지 작성자를 따라가면 곤란한 자리 — 좁은 칸의 메모·사유·짧은 안내문 — 에 쓴다. 반대로 서식이 아예 필요 없다면 `SEditor` 가 아니라 `STextarea` 다. |
64
+ | `rules?` | `Rule[]` | — | 유효성 규칙 — blur 시 자동 검증 |
65
+ | `status?` | `SFieldStatus` | — | 필드 상태 ('default' | 'pass' | 'error') |
66
+ | `focused?` | `boolean` | — | 포커스 상태를 밖에서 지정한다 — 강조 테두리·링이 즉시 걸린다 (SField 로 그대로 넘어간다) |
67
+ | `hovered?` | `boolean` | — | 호버 상태를 밖에서 지정한다 — 강조는 `focused` 와 같다 (SField 로 그대로 넘어간다) |
68
+ | `name?` | `string` | — | 폼 전송용 name |
69
+ | `editorClassName?` | `string` | — | 편집 영역 className |
70
+ | `editorStyle?` | `CSSProperties` | — | 편집 영역 style |
71
+ | `label?` | `string` | — | |
72
+ | `labelPosition?` | `SFieldLabelPosition` | — | 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다). |
73
+ | `labelWidth?` | `number \| string` | — | |
74
+ | `icon?` | `SIconName` | — | 레이블 영역 아이콘 |
75
+ | `iconColor?` | `SColor` | — | |
76
+ | `labelTooltip?` | `string` | — | 레이블 툴팁 텍스트 |
77
+ | `labelTooltipProps?` | `Partial<STooltipProps>` | — | 레이블 툴팁 상세 옵션 |
78
+ | `addonLabel?` | `string` | — | 우측 어드온 레이블 |
79
+ | `addonAlign?` | `SFieldAddonAlign` | — | 어드온 정렬 |
80
+ | `hint?` | `string` | — | |
81
+ | `error?` | `boolean` | — | |
82
+ | `errorMessage?` | `string` | — | |
83
+ | `width?` | `SFieldWidth` | `'100%'` | 컨트롤 너비 — 폭 등급(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`) · 숫자=px · CSS 길이. 본문 길이에 상한이 없으므로 기본은 `"100%"`(행 전체)다. |
84
+ | `disabled?` | `boolean` | `false` | |
85
+ | `readOnly?` | `boolean` | `false` | |
86
+ | `className?` | `string` | — | |
87
+ | `style?` | `CSSProperties` | — | |
88
+
89
+ #### Events
90
+
91
+ | Event | Type | Description |
92
+ |-------|------|-------------|
93
+ | `onValueChange` | `(html: string) => void` | 값 변경 (sdUpdate) — 빈 문서면 빈 문자열을 준다 |
94
+ | `onImageUpload` | `(file: File) => Promise<string>` | 이미지 업로드 — 고른 파일을 저장하고 **표시할 URL 을 돌려준다.** 저장 위치는 앱마다 다르므로 DS 가 정하지 않는다. 이 훅이 없으면 툴바에서 이미지 항목이 빠진다 (본문에 base64 를 박지 않는다 — HTML 이 그대로 DB 로 실려 간다). |
95
+ | `onFocus` | `() => void` | 포커스 진입 |
96
+ | `onBlur` | `() => void` | 포커스 이탈 |
97
+
98
+ #### Methods (ref)
99
+
100
+ | Method | Type | Description |
101
+ |--------|------|-------------|
102
+ | `focus` | `() => void` | 편집 영역에 포커스 |
103
+ | `blur` | `() => void` | 포커스 해제 |
104
+ | `getHTML` | `() => string` | 현재 내용을 HTML 로 반환 (빈 문서면 빈 문자열) |
105
+ | `getText` | `() => string` | 현재 내용을 서식 없는 텍스트로 반환 |
106
+ | `setHTML` | `(html: string) => void` | 내용을 HTML 로 교체 (onValueChange 를 발생시키지 않는다) |
107
+ | `clear` | `() => void` | 내용을 비운다 |
108
+ | `editor` | `Editor \| null` | tiptap 에디터 인스턴스 — 확장 명령이 필요할 때만 쓴다 |
109
+
110
+ ## Types
111
+
112
+ ### TiptapApi
113
+
114
+ ```ts
115
+ /** 동적으로 불러온 tiptap — 이 객체를 거치지 않고는 에디터 코드가 tiptap 을 만지지 않는다. */
116
+ export interface TiptapApi {
117
+ useEditor: TiptapReact['useEditor'];
118
+ useEditorState: TiptapReact['useEditorState'];
119
+ EditorContent: TiptapReact['EditorContent'];
120
+ /** 선택 영역 위에 뜨는 판 — 자리는 floating-ui 가 잡는다 */
121
+ BubbleMenu: TiptapMenus['BubbleMenu'];
122
+ /** tiptap 확장 구성 — 아래 createExtensions 주석 참고 */
123
+ createExtensions: (options: SEditorExtensionOptions) => AnyExtension[];
124
+ }
125
+ ```
126
+
127
+ ### SEditorToolbarItem
128
+
129
+ ```ts
130
+ export type SEditorToolbarItem = SEditorToolbarAction | '|';
131
+ ```
132
+
133
+ ### EditorToolbarState
134
+
135
+ ```ts
136
+ export type EditorToolbarState = ReturnType<typeof readEditorState>;
137
+ ```
138
+
139
+ ### SEditorExtensionOptions
140
+
141
+ ```ts
142
+ export interface SEditorExtensionOptions {
143
+ /** 빈 문서에 보일 문구를 그때그때 읽어 오는 게터 */
144
+ getPlaceholder: () => string;
145
+ }
146
+ ```
147
+
148
+ ### SEditorToolbarAction
149
+
150
+ ```ts
151
+ export type SEditorToolbarAction = (typeof SEDITOR_TOOLBAR_ITEMS)[number];
152
+ ```
153
+
154
+ ### SEDITOR_TOOLBAR_ITEMS
155
+
156
+ ```ts
157
+ /** 툴바에 놓을 수 있는 항목. `'|'` 는 구분선이다. */
158
+ export const SEDITOR_TOOLBAR_ITEMS = [
159
+ 'heading',
160
+ 'fontSize',
161
+ 'bold',
162
+ 'italic',
163
+ 'underline',
164
+ 'strike',
165
+ 'code',
166
+ 'color',
167
+ 'alignLeft',
168
+ 'alignCenter',
169
+ 'alignRight',
170
+ 'alignJustify',
171
+ 'bulletList',
172
+ 'orderedList',
173
+ 'taskList',
174
+ 'list',
175
+ 'blockquote',
176
+ 'codeBlock',
177
+ 'horizontalRule',
178
+ 'link',
179
+ 'image',
180
+ 'table',
181
+ 'undo',
182
+ 'redo',
183
+ ] as const;
184
+ ```
185
+
186
+ ## Dependencies
187
+
188
+ ### Depends on
189
+
190
+ - [SButton](../SButton)
191
+ - [SField](../SField)
192
+ - [SIcon](../SIcon)
193
+ - [SInput](../SInput)
194
+
195
+ ### Graph
196
+
197
+ ```mermaid
198
+ graph TD;
199
+ SEditor --> SButton
200
+ SEditor --> SField
201
+ SEditor --> SIcon
202
+ SEditor --> SInput
203
+ style SEditor fill:#f9f,stroke:#333,stroke-width:4px
204
+ ```
@@ -0,0 +1,121 @@
1
+ import { type CSSProperties } from 'react';
2
+ import type { Editor } from '@tiptap/core';
3
+ import { type SColor } from '../../lib/color';
4
+ import { type SFieldWidth } from '../../lib/field-width';
5
+ import { type Rule } from '../../lib/form';
6
+ import { type SFieldAddonAlign, type SFieldStatus, type SFieldLabelPosition } from '../SField';
7
+ import { type SIconName } from '../SIcon';
8
+ import { type STooltipProps } from '../STooltip';
9
+ /** ref 로 노출되는 조작 메서드 */
10
+ export interface SEditorHandle {
11
+ /** 편집 영역에 포커스 */
12
+ focus: () => void;
13
+ /** 포커스 해제 */
14
+ blur: () => void;
15
+ /** 현재 내용을 HTML 로 반환 (빈 문서면 빈 문자열) */
16
+ getHTML: () => string;
17
+ /** 현재 내용을 서식 없는 텍스트로 반환 */
18
+ getText: () => string;
19
+ /** 내용을 HTML 로 교체 (onValueChange 를 발생시키지 않는다) */
20
+ setHTML: (html: string) => void;
21
+ /** 내용을 비운다 */
22
+ clear: () => void;
23
+ /** tiptap 에디터 인스턴스 — 확장 명령이 필요할 때만 쓴다 */
24
+ editor: Editor | null;
25
+ }
26
+ export interface SEditorProps {
27
+ /** 값 (제어) — HTML 문자열 */
28
+ value?: string;
29
+ /** 초기값 (비제어) — HTML 문자열 */
30
+ defaultValue?: string;
31
+ /** 값 변경 (sdUpdate) — 빈 문서면 빈 문자열을 준다 */
32
+ onValueChange?: (html: string) => void;
33
+ /** 빈 문서에 보일 안내 문구 */
34
+ placeholder?: string;
35
+ /** 편집 영역 최소 높이 (숫자=px) */
36
+ minHeight?: number | string;
37
+ /** 편집 영역 최대 높이 (숫자=px). 넘으면 편집 영역 안에서만 스크롤한다 */
38
+ maxHeight?: number | string;
39
+ /**
40
+ * **글자에 거는 서식만** 남긴다 — 목록·정렬·인용·코드·링크·이미지·구분선이 빠진다.
41
+ * 막대와 버블 메뉴 양쪽에 함께 걸린다 (한쪽에만 남으면 아무것도 막지 못한다).
42
+ *
43
+ * 받은 글의 문단 구조까지 작성자를 따라가면 곤란한 자리 — 좁은 칸의 메모·사유·짧은
44
+ * 안내문 — 에 쓴다. 반대로 서식이 아예 필요 없다면 `SEditor` 가 아니라 `STextarea` 다.
45
+ */
46
+ simple?: boolean;
47
+ /**
48
+ * 이미지 업로드 — 고른 파일을 저장하고 **표시할 URL 을 돌려준다.**
49
+ * 저장 위치는 앱마다 다르므로 DS 가 정하지 않는다. 이 훅이 없으면 툴바에서
50
+ * 이미지 항목이 빠진다 (본문에 base64 를 박지 않는다 — HTML 이 그대로 DB 로 실려 간다).
51
+ */
52
+ onImageUpload?: (file: File) => Promise<string>;
53
+ /** 유효성 규칙 — blur 시 자동 검증 */
54
+ rules?: Rule[];
55
+ /** 필드 상태 ('default' | 'pass' | 'error') */
56
+ status?: SFieldStatus;
57
+ /** 포커스 상태를 밖에서 지정한다 — 강조 테두리·링이 즉시 걸린다 (SField 로 그대로 넘어간다) */
58
+ focused?: boolean;
59
+ /** 호버 상태를 밖에서 지정한다 — 강조는 `focused` 와 같다 (SField 로 그대로 넘어간다) */
60
+ hovered?: boolean;
61
+ /** 폼 전송용 name */
62
+ name?: string;
63
+ /** 편집 영역 className */
64
+ editorClassName?: string;
65
+ /** 편집 영역 style */
66
+ editorStyle?: CSSProperties;
67
+ /** 포커스 진입 */
68
+ onFocus?: () => void;
69
+ /** 포커스 이탈 */
70
+ onBlur?: () => void;
71
+ label?: string;
72
+ /**
73
+ * 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다).
74
+ *
75
+ * @nodemo SField 에서 내려오는 공통 필드 옵션이다 — 같은 데모를 컨트롤마다 복제하지 않고
76
+ * 대표 컨트롤 `SInput` 과 `SField` 에 한 번 둔다 (scripts/check-docs-coverage.mjs 머리말).
77
+ */
78
+ labelPosition?: SFieldLabelPosition;
79
+ labelWidth?: number | string;
80
+ /** 레이블 영역 아이콘 */
81
+ icon?: SIconName;
82
+ iconColor?: SColor;
83
+ /** 레이블 툴팁 텍스트 */
84
+ labelTooltip?: string;
85
+ /** 레이블 툴팁 상세 옵션 */
86
+ labelTooltipProps?: Partial<STooltipProps>;
87
+ /** 우측 어드온 레이블 */
88
+ addonLabel?: string;
89
+ /** 어드온 정렬 */
90
+ addonAlign?: SFieldAddonAlign;
91
+ hint?: string;
92
+ error?: boolean;
93
+ errorMessage?: string;
94
+ /**
95
+ * 컨트롤 너비 — 폭 등급(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`) · 숫자=px · CSS 길이.
96
+ * 본문 길이에 상한이 없으므로 기본은 `"100%"`(행 전체)다.
97
+ */
98
+ width?: SFieldWidth;
99
+ disabled?: boolean;
100
+ readOnly?: boolean;
101
+ className?: string;
102
+ style?: CSSProperties;
103
+ }
104
+ /**
105
+ * SEditor — tiptap 기반 리치 텍스트 에디터.
106
+ *
107
+ * 값은 **HTML 문자열**로 주고받는다. 들어온 HTML 은 tiptap 스키마가 파싱하므로 스키마에 없는
108
+ * 태그·속성(script·onerror …)은 그 자리에서 떨어져 나간다 — 별도 살균기를 거치지 않는다.
109
+ * 테두리 박스·라벨·에러 표시는 `SField`(multiline) 가 소유하고, 이 컴포넌트는 그 안에
110
+ * 툴바와 편집 영역만 세로로 쌓는다.
111
+ *
112
+ * 글을 선택했을 때 그 위에 뜨는 서식 판(버블 메뉴)은 **끄고 켜는 것이 아니다** — 편집할 수
113
+ * 있으면 언제나 뜬다. 툴바까지 커서를 옮기지 않고 바로 서식을 거는 길이라 화면마다 있고
114
+ * 없고가 달라지면 그 자체가 학습 비용이 된다. 구성은 `simple` 이 툴바와 함께 정한다.
115
+ *
116
+ * tiptap 은 **마운트한 뒤에 불러온다** — 정적으로 묶으면 SEditor 를 한 번도 쓰지 않는 소비
117
+ * 앱까지 tiptap·prosemirror 를 번들에 지고 간다 (`tiptap-api.ts` 주석 참고). 불러오는 동안은
118
+ * 같은 크기의 빈 편집 영역이 자리를 지키므로 화면이 튀지 않고, 그 사이 `ref` 의 메서드는
119
+ * 아무 일도 하지 않는다 — `focus()` 만은 기억해 두었다가 준비되는 순간 흘려보낸다.
120
+ */
121
+ export declare const SEditor: import("react").ForwardRefExoticComponent<SEditorProps & import("react").RefAttributes<SEditorHandle>>;
@@ -0,0 +1,63 @@
1
+ import type { SVGProps } from 'react';
2
+ /**
3
+ * SEditor 서식 툴바 아이콘 (로컬 전용).
4
+ *
5
+ * 공용 아이콘 셋(`SIcon` / `icons.gen.tsx`)은 디자인팀 소유이고 서식(bold·italic·정렬·목록 …)
6
+ * 아이콘이 아직 없다. 여기 있는 것들은 그 자리를 메우는 임시 도형이며, 정식 아이콘이 셋에
7
+ * 들어오면 이 파일을 지우고 `SIcon` 으로 교체한다. **다른 컴포넌트에서 import 하지 않는다.**
8
+ *
9
+ * 도형은 tiptap Simple Editor 템플릿의 아이콘 셋을 그대로 옮겼다
10
+ * (ueberdosis/tiptap-ui-components, MIT © 2025 Tiptap — `apps/web/src/components/tiptap-icons`).
11
+ * 24×24 격자에 획 굵기 2 의 면(fill) 도형이고 색은 전부 `currentColor` 를 따른다 — 버튼이
12
+ * 토큰으로 정한 색이 그대로 내려온다. 새 아이콘을 더할 때도 이 격자·굵기를 지킨다.
13
+ *
14
+ * 템플릿에 없어 직접 그린 것은 `IconTextColor`·`IconHorizontalRule`·`IconTable` 뿐이다
15
+ * (각 주석 참고).
16
+ */
17
+ export type SEditorIconProps = {
18
+ size?: number | string;
19
+ } & SVGProps<SVGSVGElement>;
20
+ /** 제목 — 지금 단계의 도형을 보여 준다 (본문이면 단계 없는 H) */
21
+ export declare const IconHeading: ({ level, ...p }: SEditorIconProps & {
22
+ level?: 0 | 1 | 2 | 3;
23
+ }) => import("react").JSX.Element;
24
+ export declare const IconBold: (p: SEditorIconProps) => import("react").JSX.Element;
25
+ export declare const IconItalic: (p: SEditorIconProps) => import("react").JSX.Element;
26
+ export declare const IconUnderline: (p: SEditorIconProps) => import("react").JSX.Element;
27
+ export declare const IconStrike: (p: SEditorIconProps) => import("react").JSX.Element;
28
+ /** 인라인 코드 */
29
+ export declare const IconCode: (p: SEditorIconProps) => import("react").JSX.Element;
30
+ export declare const IconCodeBlock: (p: SEditorIconProps) => import("react").JSX.Element;
31
+ export declare const IconBlockquote: (p: SEditorIconProps) => import("react").JSX.Element;
32
+ export declare const IconAlignLeft: (p: SEditorIconProps) => import("react").JSX.Element;
33
+ export declare const IconAlignCenter: (p: SEditorIconProps) => import("react").JSX.Element;
34
+ export declare const IconAlignRight: (p: SEditorIconProps) => import("react").JSX.Element;
35
+ export declare const IconAlignJustify: (p: SEditorIconProps) => import("react").JSX.Element;
36
+ export declare const IconBulletList: (p: SEditorIconProps) => import("react").JSX.Element;
37
+ export declare const IconOrderedList: (p: SEditorIconProps) => import("react").JSX.Element;
38
+ export declare const IconTaskList: (p: SEditorIconProps) => import("react").JSX.Element;
39
+ export declare const IconLink: (p: SEditorIconProps) => import("react").JSX.Element;
40
+ /** 좁은 화면 툴바의 하위 뷰에서 되돌아가기 */
41
+ export declare const IconArrowLeft: (p: SEditorIconProps) => import("react").JSX.Element;
42
+ export declare const IconUndo: (p: SEditorIconProps) => import("react").JSX.Element;
43
+ export declare const IconRedo: (p: SEditorIconProps) => import("react").JSX.Element;
44
+ /**
45
+ * 글자색 — 템플릿에 없어 직접 그렸다 (Simple Editor 에는 글자색 항목이 없다).
46
+ *
47
+ * 나머지 아이콘이 면 도형이라 A 도 같은 굵기(2)로 보이도록 획으로 긋고 끝을 둥글렸다 —
48
+ * 템플릿의 막대(`rx=1` 인 2px 사각형)와 같은 인상이다. 지금 고른 색은 툴바 버튼이 아이콘
49
+ * 아래 막대로 따로 보여 준다.
50
+ */
51
+ export declare const IconTextColor: (p: SEditorIconProps) => import("react").JSX.Element;
52
+ /**
53
+ * 표 — 템플릿에 없어 직접 그렸다 (Simple Editor 에는 표가 없다).
54
+ *
55
+ * 테두리를 획으로 긋지 않고 **칸 네 개를 면으로 찍는다** — 다른 아이콘이 모두 면 도형이라
56
+ * 16px 에서 획으로 그린 격자만 유독 흐려 보인다. 첫 줄이 헤더라 한 덩어리로 이어 붙였다.
57
+ */
58
+ export declare const IconTable: (p: SEditorIconProps) => import("react").JSX.Element;
59
+ /**
60
+ * 구분선 — 템플릿에 없어 직접 그렸다 (Simple Editor 는 구분선 노드는 있지만 툴바 항목이 없다).
61
+ * 막대는 템플릿의 정렬 아이콘과 같은 규격(높이 2, `rx=1`)이다.
62
+ */
63
+ export declare const IconHorizontalRule: (p: SEditorIconProps) => import("react").JSX.Element;