sellmate-design-system-react 9.0.0-beta.8 → 9.0.0-beta.80

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 (409) hide show
  1. package/AGENTS.md +3974 -267
  2. package/README.md +76 -24
  3. package/bin/sellmate-ds.mjs +91 -59
  4. package/dist/components/SAccountListBox/AccountListBoxPortal.d.ts +31 -0
  5. package/dist/components/SAccountListBox/README.md +86 -0
  6. package/dist/components/SAccountListBox/SAccountListBox.d.ts +79 -0
  7. package/dist/components/SAccountListBox/SystemMenuPortal.d.ts +58 -0
  8. package/dist/components/SAccountListBox/accountListBox.config.d.ts +64 -0
  9. package/dist/components/SAccountListBox/index.d.ts +2 -0
  10. package/dist/components/SActionModal/README.md +1 -0
  11. package/dist/components/SActionModal/SActionModal.d.ts +9 -1
  12. package/dist/components/SBadge/README.md +27 -0
  13. package/dist/components/SBadge/SBadge.d.ts +1 -1
  14. package/dist/components/SBarChart/README.md +122 -0
  15. package/dist/components/SBarChart/SBarChart.d.ts +99 -0
  16. package/dist/components/SBarChart/barChart.config.d.ts +85 -0
  17. package/dist/components/SBarChart/index.d.ts +2 -0
  18. package/dist/components/SBarcodeInput/README.md +14 -4
  19. package/dist/components/SBarcodeInput/SBarcodeInput.d.ts +25 -3
  20. package/dist/components/SButton/README.md +40 -0
  21. package/dist/components/SCalendar/README.md +13 -0
  22. package/dist/components/SCalendarBoard/CalendarDayCard.d.ts +53 -0
  23. package/dist/components/SCalendarBoard/CalendarDayEventListBox.d.ts +26 -0
  24. package/dist/components/SCalendarBoard/CalendarEventButton.d.ts +20 -0
  25. package/dist/components/SCalendarBoard/CalendarMoreButton.d.ts +18 -0
  26. package/dist/components/SCalendarBoard/README.md +148 -0
  27. package/dist/components/SCalendarBoard/SCalendarBoard.d.ts +83 -0
  28. package/dist/components/SCalendarBoard/calendar-board-layout.d.ts +59 -0
  29. package/dist/components/SCalendarBoard/calendarBoard.config.d.ts +38 -0
  30. package/dist/components/SCalendarBoard/index.d.ts +3 -0
  31. package/dist/components/SCalendarBoard/types.d.ts +40 -0
  32. package/dist/components/SCallout/README.md +17 -1
  33. package/dist/components/SCallout/SCallout.d.ts +14 -4
  34. package/dist/components/SCard/README.md +17 -0
  35. package/dist/components/SCard/SCard.d.ts +26 -2
  36. package/dist/components/SChatAttachedFile/README.md +33 -0
  37. package/dist/components/SChatAttachedFile/SChatAttachedFile.d.ts +13 -0
  38. package/dist/components/SChatAttachedFile/chatAttachedFile.config.d.ts +23 -0
  39. package/dist/components/SChatAttachedFile/index.d.ts +2 -0
  40. package/dist/components/SChatFile/README.md +33 -0
  41. package/dist/components/SChatFile/SChatFile.d.ts +37 -0
  42. package/dist/components/SChatFile/chatFile.config.d.ts +56 -0
  43. package/dist/components/SChatFile/index.d.ts +2 -0
  44. package/dist/components/SChatInput/README.md +44 -0
  45. package/dist/components/SChatInput/SChatInput.d.ts +60 -0
  46. package/dist/components/SChatInput/index.d.ts +1 -0
  47. package/dist/components/SChatMessage/README.md +86 -0
  48. package/dist/components/SChatMessage/SChatMessage.d.ts +123 -0
  49. package/dist/components/SChatMessage/index.d.ts +1 -0
  50. package/dist/components/SChatSystemMessage/README.md +12 -0
  51. package/dist/components/SChatSystemMessage/SChatSystemMessage.d.ts +18 -0
  52. package/dist/components/SChatSystemMessage/index.d.ts +1 -0
  53. package/dist/components/SCheckbox/README.md +8 -0
  54. package/dist/components/SChip/README.md +25 -0
  55. package/dist/components/SChip/SChip.d.ts +8 -0
  56. package/dist/components/SChip/index.d.ts +1 -1
  57. package/dist/components/SChipFilter/README.md +369 -14
  58. package/dist/components/SChipFilter/SChipFilter.d.ts +169 -60
  59. package/dist/components/SChipFilter/index.d.ts +1 -1
  60. package/dist/components/SChipInput/README.md +18 -2
  61. package/dist/components/SChipInput/SChipInput.d.ts +23 -3
  62. package/dist/components/SChipInput/index.d.ts +1 -1
  63. package/dist/components/SCircleProgress/README.md +13 -2
  64. package/dist/components/SCircleProgress/SCircleProgress.d.ts +11 -3
  65. package/dist/components/SConfirmModal/README.md +13 -4
  66. package/dist/components/SConfirmModal/SConfirmModal.d.ts +46 -9
  67. package/dist/components/SContextAlert/README.md +52 -0
  68. package/dist/components/SContextAlert/SContextAlert.d.ts +51 -0
  69. package/dist/components/SContextAlert/contextAlert.config.d.ts +22 -0
  70. package/dist/components/SContextAlert/index.d.ts +2 -0
  71. package/dist/components/SDatePicker/README.md +22 -2
  72. package/dist/components/SDatePicker/SDatePicker.d.ts +42 -5
  73. package/dist/components/SDateRangePicker/README.md +22 -4
  74. package/dist/components/SDateRangePicker/SDateRangePicker.d.ts +44 -7
  75. package/dist/components/SDivider/README.md +7 -0
  76. package/dist/components/SDivider/SDivider.d.ts +11 -0
  77. package/dist/components/SDonutChart/README.md +105 -0
  78. package/dist/components/SDonutChart/SDonutChart.d.ts +82 -0
  79. package/dist/components/SDonutChart/index.d.ts +1 -0
  80. package/dist/components/SDraggableItem/README.md +37 -0
  81. package/dist/components/SDraggableItem/SDraggableItem.d.ts +2 -0
  82. package/dist/components/SDraggableItem/index.d.ts +1 -1
  83. package/dist/components/SDraggableList/README.md +33 -3
  84. package/dist/components/SDraggableList/SDraggableList.d.ts +18 -3
  85. package/dist/components/SDraggableList/index.d.ts +1 -1
  86. package/dist/components/SDrawer/README.md +8 -0
  87. package/dist/components/SDropdownButton/README.md +19 -0
  88. package/dist/components/SEditor/EditorBody.d.ts +36 -0
  89. package/dist/components/SEditor/EditorToolbar.d.ts +93 -0
  90. package/dist/components/SEditor/README.md +205 -0
  91. package/dist/components/SEditor/SEditor.d.ts +128 -0
  92. package/dist/components/SEditor/editor-icons.d.ts +63 -0
  93. package/dist/components/SEditor/editor.config.d.ts +119 -0
  94. package/dist/components/SEditor/index.d.ts +8 -0
  95. package/dist/components/SEditor/tiptap-api.d.ts +29 -0
  96. package/dist/components/SEditor/use-is-mobile.d.ts +14 -0
  97. package/dist/components/SExpansionItem/README.md +38 -2
  98. package/dist/components/SExpansionItem/SExpansionItem.d.ts +8 -2
  99. package/dist/components/SExpansionItem/index.d.ts +1 -1
  100. package/dist/components/SField/README.md +37 -5
  101. package/dist/components/SField/SField.d.ts +40 -8
  102. package/dist/components/SField/index.d.ts +1 -1
  103. package/dist/components/SFilePicker/README.md +20 -4
  104. package/dist/components/SFilePicker/SFilePicker.d.ts +26 -6
  105. package/dist/components/SFooter/README.md +44 -0
  106. package/dist/components/SFooter/SFooter.d.ts +29 -13
  107. package/dist/components/SFooter/index.d.ts +1 -1
  108. package/dist/components/SForm/README.md +12 -1
  109. package/dist/components/SForm/SForm.d.ts +2 -2
  110. package/dist/components/SGhostButton/README.md +28 -4
  111. package/dist/components/SGhostButton/SGhostButton.d.ts +4 -1
  112. package/dist/components/SGnb/README.md +109 -8
  113. package/dist/components/SGnb/SGnb.d.ts +112 -11
  114. package/dist/components/SGnb/gnb.config.d.ts +18 -5
  115. package/dist/components/SGnb/index.d.ts +1 -1
  116. package/dist/components/SGnbSystem/README.md +186 -0
  117. package/dist/components/SGnbSystem/SGnbSystem.d.ts +179 -0
  118. package/dist/components/SGnbSystem/gnbSystem.config.d.ts +122 -0
  119. package/dist/components/SGnbSystem/index.d.ts +2 -0
  120. package/dist/components/SGuide/README.md +16 -1
  121. package/dist/components/SGuide/SGuide.d.ts +5 -2
  122. package/dist/components/SIcon/README.md +20 -0
  123. package/dist/components/SIcon/SIcon.d.ts +1 -1
  124. package/dist/components/SIcon/icons.gen.d.ts +20 -1
  125. package/dist/components/SImage/README.md +23 -1
  126. package/dist/components/SImage/SImage.d.ts +11 -8
  127. package/dist/components/SInput/README.md +8 -4
  128. package/dist/components/SInput/SInput.d.ts +17 -5
  129. package/dist/components/SKeyValueTable/README.md +88 -0
  130. package/dist/components/SKeyValueTable/SKeyValueTable.d.ts +30 -3
  131. package/dist/components/SKeyValueTable/index.d.ts +1 -1
  132. package/dist/components/SLauncherListBox/README.md +82 -0
  133. package/dist/components/SLauncherListBox/SLauncherListBox.d.ts +80 -0
  134. package/dist/components/SLauncherListBox/index.d.ts +2 -0
  135. package/dist/components/SLauncherListBox/launcherListBox.config.d.ts +154 -0
  136. package/dist/components/SLayout/README.md +22 -1
  137. package/dist/components/SLayout/SLayout.d.ts +6 -2
  138. package/dist/components/SLayout/index.d.ts +1 -1
  139. package/dist/components/SLineChart/README.md +131 -0
  140. package/dist/components/SLineChart/SLineChart.d.ts +110 -0
  141. package/dist/components/SLineChart/index.d.ts +1 -0
  142. package/dist/components/SLineChart/lineChart.config.d.ts +95 -0
  143. package/dist/components/SLinearProgress/README.md +16 -1
  144. package/dist/components/SLinearProgress/SLinearProgress.d.ts +11 -2
  145. package/dist/components/SLinearProgress/index.d.ts +1 -1
  146. package/dist/components/SList/README.md +15 -2
  147. package/dist/components/SList/SList.d.ts +7 -3
  148. package/dist/components/SList/index.d.ts +1 -1
  149. package/dist/components/SListItem/README.md +43 -2
  150. package/dist/components/SListItem/SListItem.d.ts +8 -2
  151. package/dist/components/SListItem/index.d.ts +1 -1
  152. package/dist/components/SLoadingContainer/index.d.ts +1 -1
  153. package/dist/components/SLoadingContainer/loading.d.ts +41 -6
  154. package/dist/components/SLoadingModal/README.md +10 -2
  155. package/dist/components/SLoadingModal/SLoadingModal.d.ts +4 -4
  156. package/dist/components/SLoadingModal/index.d.ts +1 -1
  157. package/dist/components/SLoginCard/README.md +37 -0
  158. package/dist/components/SLoginCard/SLoginCard.d.ts +43 -0
  159. package/dist/components/SLoginCard/index.d.ts +1 -0
  160. package/dist/components/SLogo/README.md +103 -0
  161. package/dist/components/SLogo/SLogo.d.ts +72 -0
  162. package/dist/components/SLogo/index.d.ts +2 -0
  163. package/dist/components/SLogo/logo.config.d.ts +29 -0
  164. package/dist/components/SLogo/logos.d.ts +16 -0
  165. package/dist/components/SMeatballButton/README.md +67 -0
  166. package/dist/components/SMeatballButton/SMeatballButton.d.ts +36 -0
  167. package/dist/components/SMeatballButton/index.d.ts +1 -0
  168. package/dist/components/SModal/README.md +15 -5
  169. package/dist/components/SModal/SModal.d.ts +1 -1
  170. package/dist/components/SNumberInput/README.md +19 -8
  171. package/dist/components/SNumberInput/SNumberInput.d.ts +49 -7
  172. package/dist/components/SPage/README.md +105 -5
  173. package/dist/components/SPage/SPage.d.ts +34 -10
  174. package/dist/components/SPage/SPageHeader.d.ts +31 -13
  175. package/dist/components/SPage/index.d.ts +2 -2
  176. package/dist/components/SPage/page-column.d.ts +34 -0
  177. package/dist/components/SPage/page-width.d.ts +23 -0
  178. package/dist/components/SPage/page.config.d.ts +26 -0
  179. package/dist/components/SPieChart/README.md +93 -0
  180. package/dist/components/SPieChart/SPieChart.d.ts +73 -0
  181. package/dist/components/SPieChart/index.d.ts +1 -0
  182. package/dist/components/SPopover/README.md +15 -0
  183. package/dist/components/SPopup/README.md +26 -2
  184. package/dist/components/SPopup/SPopup.d.ts +13 -10
  185. package/dist/components/SPopup/index.d.ts +1 -1
  186. package/dist/components/SPortal/README.md +20 -0
  187. package/dist/components/SRadio/README.md +20 -0
  188. package/dist/components/SRadioButton/README.md +26 -0
  189. package/dist/components/SRadioButton/SRadioButton.d.ts +9 -2
  190. package/dist/components/SRadioCard/README.md +78 -0
  191. package/dist/components/SRadioCard/SRadioCard.d.ts +29 -0
  192. package/dist/components/SRadioCard/SRadioCardGroup.d.ts +36 -0
  193. package/dist/components/SRadioCard/index.d.ts +2 -0
  194. package/dist/components/SScrollArea/README.md +28 -0
  195. package/dist/components/SScrollArea/SScrollArea.d.ts +17 -0
  196. package/dist/components/SSearchInput/README.md +63 -0
  197. package/dist/components/SSearchInput/SSearchInput.d.ts +52 -0
  198. package/dist/components/SSearchInput/index.d.ts +1 -0
  199. package/dist/components/SSectionHeaderCard/README.md +38 -0
  200. package/dist/components/SSectionHeaderCard/SSectionHeaderCard.d.ts +19 -0
  201. package/dist/components/SSelect/README.md +64 -11
  202. package/dist/components/SSelect/SSelect.d.ts +135 -15
  203. package/dist/components/SSelect/index.d.ts +1 -1
  204. package/dist/components/SSelect/select.config.d.ts +17 -0
  205. package/dist/components/SSkeleton/README.md +55 -0
  206. package/dist/components/SSkeleton/SSkeleton.d.ts +39 -0
  207. package/dist/components/SSkeleton/index.d.ts +2 -0
  208. package/dist/components/SSkeleton/skeleton.config.d.ts +22 -0
  209. package/dist/components/SSplitter/README.md +17 -2
  210. package/dist/components/SSplitter/SSplitter.d.ts +7 -3
  211. package/dist/components/SStepper/README.md +26 -0
  212. package/dist/components/SSwitch/README.md +13 -1
  213. package/dist/components/SSwitch/SSwitch.d.ts +1 -3
  214. package/dist/components/SSystemActionButton/README.md +246 -0
  215. package/dist/components/SSystemActionButton/SSystemActionButton.d.ts +167 -0
  216. package/dist/components/SSystemActionButton/index.d.ts +2 -0
  217. package/dist/components/SSystemActionButton/systemActionButton.config.d.ts +93 -0
  218. package/dist/components/STable/README.md +135 -20
  219. package/dist/components/STable/STable.d.ts +292 -46
  220. package/dist/components/STable/index.d.ts +1 -1
  221. package/dist/components/STableBar/README.md +1 -0
  222. package/dist/components/STableBar/STableBar.d.ts +8 -1
  223. package/dist/components/STabs/README.md +13 -1
  224. package/dist/components/STabs/STabs.d.ts +2 -2
  225. package/dist/components/STag/README.md +55 -0
  226. package/dist/components/STag/STag.d.ts +3 -1
  227. package/dist/components/STag/tag.config.d.ts +1 -1
  228. package/dist/components/STextLink/README.md +21 -1
  229. package/dist/components/STextLink/STextLink.d.ts +5 -1
  230. package/dist/components/STextarea/README.md +12 -5
  231. package/dist/components/STextarea/STextarea.d.ts +49 -6
  232. package/dist/components/STimePicker/README.md +19 -2
  233. package/dist/components/STimePicker/STimePicker.d.ts +36 -6
  234. package/dist/components/STimePicker/timepicker.config.d.ts +4 -2
  235. package/dist/components/STimeRangePicker/README.md +31 -2
  236. package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +35 -6
  237. package/dist/components/SToast/README.md +25 -1
  238. package/dist/components/SToast/SToast.d.ts +2 -2
  239. package/dist/components/SToggle/README.md +8 -0
  240. package/dist/components/SToggle/index.d.ts +1 -1
  241. package/dist/components/STooltip/README.md +27 -1
  242. package/dist/components/STooltip/STooltip.d.ts +1 -1
  243. package/dist/components/STree/README.md +42 -4
  244. package/dist/components/STree/STree.d.ts +18 -6
  245. package/dist/components/STree/STree.examples.d.ts +2 -0
  246. package/dist/docs/Gallery.d.ts +9 -0
  247. package/dist/docs/RecipeGallery.d.ts +13 -0
  248. package/dist/docs/gallery-previews.d.ts +24 -0
  249. package/dist/fonts/LICENSE.txt +94 -0
  250. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.0.woff2 +0 -0
  251. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.1.woff2 +0 -0
  252. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.10.woff2 +0 -0
  253. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.11.woff2 +0 -0
  254. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.12.woff2 +0 -0
  255. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.13.woff2 +0 -0
  256. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.14.woff2 +0 -0
  257. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.15.woff2 +0 -0
  258. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.16.woff2 +0 -0
  259. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.17.woff2 +0 -0
  260. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.18.woff2 +0 -0
  261. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.19.woff2 +0 -0
  262. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.2.woff2 +0 -0
  263. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.20.woff2 +0 -0
  264. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.21.woff2 +0 -0
  265. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.22.woff2 +0 -0
  266. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.23.woff2 +0 -0
  267. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.24.woff2 +0 -0
  268. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.25.woff2 +0 -0
  269. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.26.woff2 +0 -0
  270. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.27.woff2 +0 -0
  271. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.28.woff2 +0 -0
  272. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.29.woff2 +0 -0
  273. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.3.woff2 +0 -0
  274. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.30.woff2 +0 -0
  275. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.31.woff2 +0 -0
  276. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.32.woff2 +0 -0
  277. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.33.woff2 +0 -0
  278. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.34.woff2 +0 -0
  279. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.35.woff2 +0 -0
  280. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.36.woff2 +0 -0
  281. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.37.woff2 +0 -0
  282. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.38.woff2 +0 -0
  283. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.39.woff2 +0 -0
  284. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.4.woff2 +0 -0
  285. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.40.woff2 +0 -0
  286. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.41.woff2 +0 -0
  287. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.42.woff2 +0 -0
  288. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.43.woff2 +0 -0
  289. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.44.woff2 +0 -0
  290. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.45.woff2 +0 -0
  291. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.46.woff2 +0 -0
  292. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.47.woff2 +0 -0
  293. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.48.woff2 +0 -0
  294. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.49.woff2 +0 -0
  295. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.5.woff2 +0 -0
  296. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.50.woff2 +0 -0
  297. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.51.woff2 +0 -0
  298. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.52.woff2 +0 -0
  299. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.53.woff2 +0 -0
  300. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.54.woff2 +0 -0
  301. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.55.woff2 +0 -0
  302. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.56.woff2 +0 -0
  303. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.57.woff2 +0 -0
  304. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.58.woff2 +0 -0
  305. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.59.woff2 +0 -0
  306. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.6.woff2 +0 -0
  307. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.60.woff2 +0 -0
  308. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.61.woff2 +0 -0
  309. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.62.woff2 +0 -0
  310. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.63.woff2 +0 -0
  311. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.64.woff2 +0 -0
  312. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.65.woff2 +0 -0
  313. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.66.woff2 +0 -0
  314. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.67.woff2 +0 -0
  315. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.68.woff2 +0 -0
  316. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.69.woff2 +0 -0
  317. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.7.woff2 +0 -0
  318. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.70.woff2 +0 -0
  319. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.71.woff2 +0 -0
  320. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.72.woff2 +0 -0
  321. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.73.woff2 +0 -0
  322. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.74.woff2 +0 -0
  323. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.75.woff2 +0 -0
  324. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.76.woff2 +0 -0
  325. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.77.woff2 +0 -0
  326. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.78.woff2 +0 -0
  327. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.79.woff2 +0 -0
  328. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.8.woff2 +0 -0
  329. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.80.woff2 +0 -0
  330. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.81.woff2 +0 -0
  331. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.82.woff2 +0 -0
  332. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.83.woff2 +0 -0
  333. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.84.woff2 +0 -0
  334. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.85.woff2 +0 -0
  335. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.86.woff2 +0 -0
  336. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.87.woff2 +0 -0
  337. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.88.woff2 +0 -0
  338. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.89.woff2 +0 -0
  339. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.9.woff2 +0 -0
  340. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.90.woff2 +0 -0
  341. package/dist/fonts/woff2-dynamic-subset/PretendardVariable.subset.91.woff2 +0 -0
  342. package/dist/index.cjs +21789 -10666
  343. package/dist/index.cjs.map +1 -1
  344. package/dist/index.d.ts +23 -0
  345. package/dist/index.js +21704 -10665
  346. package/dist/index.js.map +1 -1
  347. package/dist/lib/chart/cartesian.d.ts +56 -0
  348. package/dist/lib/chart/frame.d.ts +21 -0
  349. package/dist/lib/chart/hover-dim.d.ts +19 -0
  350. package/dist/lib/chart/legend.d.ts +21 -0
  351. package/dist/lib/chart/palette.d.ts +28 -0
  352. package/dist/lib/chart/radial.d.ts +99 -0
  353. package/dist/lib/chart/scale.d.ts +26 -0
  354. package/dist/lib/chart/tooltip.d.ts +60 -0
  355. package/dist/lib/chart/types.d.ts +29 -0
  356. package/dist/lib/chart/use-element-size.d.ts +39 -0
  357. package/dist/lib/date.d.ts +2 -1
  358. package/dist/lib/depth-filter.d.ts +27 -0
  359. package/dist/lib/doc-sections.d.ts +35 -0
  360. package/dist/lib/dropdown-menu.d.ts +19 -0
  361. package/dist/lib/field-width.d.ts +31 -0
  362. package/dist/lib/floating-height.d.ts +15 -0
  363. package/dist/lib/global-overlay.d.ts +5 -0
  364. package/dist/lib/hover-preview.d.ts +32 -0
  365. package/dist/lib/inert.d.ts +11 -0
  366. package/dist/lib/overlay-scrollbar.d.ts +32 -0
  367. package/dist/lib/row-metrics.d.ts +61 -0
  368. package/dist/lib/story-docs.d.ts +19 -3
  369. package/dist/llms-full.txt +9674 -2059
  370. package/dist/llms.txt +4062 -326
  371. package/dist/playground/categories.d.ts +19 -0
  372. package/dist/pretendard.css +937 -0
  373. package/dist/recipes/AppShell.d.ts +21 -0
  374. package/dist/recipes/CategoryManagePage.d.ts +1 -0
  375. package/dist/recipes/ConsultConsolePage.d.ts +1 -0
  376. package/dist/recipes/ExcelFilePopupPage.d.ts +5 -0
  377. package/dist/recipes/LoginPage.d.ts +6 -0
  378. package/dist/recipes/ProductBulkUploadPage.d.ts +1 -0
  379. package/dist/recipes/ProductCreatePage.d.ts +1 -0
  380. package/dist/recipes/ProductCreateSectionsPage.d.ts +5 -0
  381. package/dist/recipes/ProductDetailInlineEditPage.d.ts +9 -0
  382. package/dist/recipes/ProductDetailPage.d.ts +1 -0
  383. package/dist/recipes/ProductListChipFilterPage.d.ts +1 -0
  384. package/dist/recipes/ProductListPage.d.ts +1 -0
  385. package/dist/recipes/ProductOverlayPage.d.ts +1 -0
  386. package/dist/recipes/SalesDashboardPage.d.ts +1 -0
  387. package/dist/recipes/SettingsPage.d.ts +1 -0
  388. package/dist/recipes/StoreSetupPage.d.ts +1 -0
  389. package/dist/recipes/TransferOrderPopupPage.d.ts +2 -0
  390. package/dist/recipes/api.d.ts +220 -0
  391. package/dist/recipes/recipe-story.d.ts +33 -0
  392. package/dist/recipes/router.d.ts +9 -0
  393. package/dist/styles.css +3541 -262
  394. package/dist/theme.css +598 -28
  395. package/eslint/index.mjs +44 -35
  396. package/eslint/lib/class-names.mjs +23 -25
  397. package/eslint/lib/table-column.mjs +34 -8
  398. package/eslint/rules/component-group-gap.mjs +32 -30
  399. package/eslint/rules/divider-vertical-height.mjs +137 -0
  400. package/eslint/rules/field-width-grade.mjs +69 -52
  401. package/eslint/rules/no-arbitrary-class.mjs +63 -20
  402. package/eslint/rules/no-off-scale-spacing.mjs +61 -41
  403. package/eslint/rules/no-raw-html-control.mjs +38 -36
  404. package/eslint/rules/prefer-typo-preset.mjs +23 -17
  405. package/eslint/rules/require-locale-number.mjs +14 -19
  406. package/eslint/rules/table-column-width.mjs +114 -0
  407. package/eslint/rules/table-numeric-align.mjs +14 -14
  408. package/eslint/scale.gen.mjs +6 -3
  409. package/package.json +19 -5
@@ -8,12 +8,28 @@
8
8
 
9
9
  | Prop | Type | Default | Description |
10
10
  |------|------|---------|-------------|
11
- | `type?` | `SCalloutType` | `'default'` | 콜아웃 타입 (색상·아이콘·타이틀 결정) |
11
+ | `type?` | `SCalloutType` | `'default'` | 콜아웃 타입 (색상·아이콘·타이틀 결정). - `default` — 옅은 회색 면. 흰 페이지(`background="frame"`) 위의 기본 안내. - `white` — 같은 안내인데 배경만 흰 면. 회색 면(`neutral`·`screen`) 위에서 default 가 묻힐 때. - `danger` — 좌측에 주의사항 타이틀이 붙는 경고. |
12
+ | `showTitle?` | `boolean` | `true` | `danger` 좌측의 주의사항 타이틀(아이콘+라벨) 표시 여부. 기본 `true`. `false` 면 타이틀만 빠지고 danger 의 면·테두리·본문색은 그대로다. 다른 타입에는 영향이 없다. |
12
13
  | `message?` | `SCalloutMessage[]` | `[]` | 표시할 메시지 목록 (배열 중첩으로 depth 표현). 각 문자열은 인라인 HTML(`<b>`, `<a>` 등)을 허용하며 sanitizeInlineHtml 로 살균 후 렌더된다. |
13
14
  | `children?` | `ReactNode` | — | message 대신 직접 본문을 넣을 때 |
14
15
  | `className?` | `string` | — | |
15
16
  | `style?` | `CSSProperties` | — | |
16
17
 
18
+ ## Types
19
+
20
+ ### SCalloutType
21
+
22
+ ```ts
23
+ export type SCalloutType = 'default' | 'danger' | 'white';
24
+ ```
25
+
26
+ ### SCalloutMessage
27
+
28
+ ```ts
29
+ /** 중첩 메시지: 문자열 또는 (한 단계 더 들어간) 문자열 배열 */
30
+ export type SCalloutMessage = string | SCalloutMessage[];
31
+ ```
32
+
17
33
  ## Dependencies
18
34
 
19
35
  ### Depends on
@@ -1,10 +1,20 @@
1
1
  import { type CSSProperties, type ReactNode } from 'react';
2
- export type SCalloutType = 'default' | 'danger';
2
+ export type SCalloutType = 'default' | 'danger' | 'white';
3
3
  /** 중첩 메시지: 문자열 또는 (한 단계 더 들어간) 문자열 배열 */
4
4
  export type SCalloutMessage = string | SCalloutMessage[];
5
5
  export interface SCalloutProps {
6
- /** 콜아웃 타입 (색상·아이콘·타이틀 결정) */
6
+ /**
7
+ * 콜아웃 타입 (색상·아이콘·타이틀 결정).
8
+ * - `default` — 옅은 회색 면. 흰 페이지(`background="frame"`) 위의 기본 안내.
9
+ * - `white` — 같은 안내인데 배경만 흰 면. 회색 면(`neutral`·`screen`) 위에서 default 가 묻힐 때.
10
+ * - `danger` — 좌측에 주의사항 타이틀이 붙는 경고.
11
+ */
7
12
  type?: SCalloutType;
13
+ /**
14
+ * `danger` 좌측의 주의사항 타이틀(아이콘+라벨) 표시 여부. 기본 `true`.
15
+ * `false` 면 타이틀만 빠지고 danger 의 면·테두리·본문색은 그대로다. 다른 타입에는 영향이 없다.
16
+ */
17
+ showTitle?: boolean;
8
18
  /**
9
19
  * 표시할 메시지 목록 (배열 중첩으로 depth 표현).
10
20
  * 각 문자열은 인라인 HTML(`<b>`, `<a>` 등)을 허용하며 sanitizeInlineHtml 로 살균 후 렌더된다.
@@ -17,8 +27,8 @@ export interface SCalloutProps {
17
27
  }
18
28
  /**
19
29
  * SCallout — sd-callout 포팅.
20
- * default/danger 타입, 중첩 리스트(불릿은 span으로 렌더), danger는 좌측 타이틀 표시.
21
- * 색상은 `--cmp-callout-*` 토큰 참조.
30
+ * default/white/danger 타입, 중첩 리스트(불릿은 span으로 렌더), danger는 좌측 타이틀 표시(showTitle 로 끌 수 있다).
31
+ * 색상은 `--cmp-callout-*` 토큰 참조(white 만 예외 — SURFACE 주석 참고).
22
32
  * message 각 항목은 sanitizeInlineHtml 로 살균한 뒤 innerHTML 로 렌더한다 (원본 sd-callout 과 동일).
23
33
  */
24
34
  export declare const SCallout: import("react").ForwardRefExoticComponent<SCalloutProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -9,4 +9,21 @@
9
9
  | Prop | Type | Default | Description |
10
10
  |------|------|---------|-------------|
11
11
  | `bordered?` | `boolean` | `false` | 테두리 표시 여부 |
12
+ | `footerLeft?` | `ReactNode` | — | 하단 액션 영역 좌측 슬롯. 보조 버튼(취소·목록 등)이 오는 자리다. `footerLeft` 또는 `button` 중 하나라도 있으면 하단 액션 영역이 렌더된다. |
13
+ | `button?` | `SFooterButton` | — | 하단 액션 영역 우측 주 액션 버튼 |
14
+ | `footerSize?` | `SFooterSize` | `'md'` | 하단 액션 영역 크기. 기본은 `md`. 한 화면 안에서 **부분만 확정하는 카드**(옆 패널·분할 영역처럼 화면의 일부를 맡는 카드)일 때만 `sm`. 카드가 화면의 주 액션을 쥐고 있으면 모달·페이지와 같은 `md` 다 (AGENTS.md §3-5-2). `footerLeft` 슬롯의 버튼도 같이 맞춘다 — `sm` 이면 슬롯 버튼도 `size="sm"`. |
15
+ | `footerClassName?` | `string` | — | 하단 액션 영역 클래스 |
12
16
 
17
+ ## Dependencies
18
+
19
+ ### Depends on
20
+
21
+ - [SFooter](../SFooter)
22
+
23
+ ### Graph
24
+
25
+ ```mermaid
26
+ graph TD;
27
+ SCard --> SFooter
28
+ style SCard fill:#f9f,stroke:#333,stroke-width:4px
29
+ ```
@@ -1,7 +1,31 @@
1
- import { type HTMLAttributes } from 'react';
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ import { type SFooterButton, type SFooterSize } from '../SFooter';
2
3
  export interface SCardProps extends HTMLAttributes<HTMLDivElement> {
3
4
  /** 테두리 표시 여부 */
4
5
  bordered?: boolean;
6
+ /**
7
+ * 하단 액션 영역 좌측 슬롯. 보조 버튼(취소·목록 등)이 오는 자리다.
8
+ * `footerLeft` 또는 `button` 중 하나라도 있으면 하단 액션 영역이 렌더된다.
9
+ */
10
+ footerLeft?: ReactNode;
11
+ /** 하단 액션 영역 우측 주 액션 버튼 */
12
+ button?: SFooterButton;
13
+ /**
14
+ * 하단 액션 영역 크기. 기본은 `md`.
15
+ *
16
+ * 한 화면 안에서 **부분만 확정하는 카드**(옆 패널·분할 영역처럼 화면의 일부를 맡는 카드)일 때만
17
+ * `sm`. 카드가 화면의 주 액션을 쥐고 있으면 모달·페이지와 같은 `md` 다 (AGENTS.md §3-5-2).
18
+ *
19
+ * `footerLeft` 슬롯의 버튼도 같이 맞춘다 — `sm` 이면 슬롯 버튼도 `size="sm"`.
20
+ */
21
+ footerSize?: SFooterSize;
22
+ /** 하단 액션 영역 클래스 */
23
+ footerClassName?: string;
5
24
  }
6
- /** SCard — sd-card 포팅. 라운드 8px, 흰 배경, 옵션 테두리. */
25
+ /**
26
+ * SCard — sd-card 포팅. 라운드 8px, 흰 배경, 옵션 테두리. 콘텐츠는 라운드 경계에서 잘린다.
27
+ *
28
+ * 하단 액션은 `children` 에 직접 두지 않고 `footerLeft`·`button` 으로 넘긴다 — 배경·구분선·여백과
29
+ * 양끝 분리가 컴포넌트 규칙대로 잡히는 자리다.
30
+ */
7
31
  export declare const SCard: import("react").ForwardRefExoticComponent<SCardProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,33 @@
1
+ # SChatAttachedFile
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### SChatAttachedFile
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `name` | `string` | — | 파일명. 칸을 넘치면 말줄임된다 — 칸의 폭은 부모가 정한다. |
12
+
13
+ #### Events
14
+
15
+ | Event | Type | Description |
16
+ |-------|------|-------------|
17
+ | `onRemove` | `() => void` | 제거 버튼을 눌렀을 때. 주지 않으면 버튼이 서지 않는다. 입력창 위의 첨부는 보내기 전까지 뺄 수 있어야 하므로 대개 준다 — 버튼을 세우지 않는 것은 보내는 중처럼 무를 수 없는 짧은 순간뿐이다. |
18
+
19
+ ## Dependencies
20
+
21
+ ### Depends on
22
+
23
+ - [SGhostButton](../SGhostButton)
24
+ - [SIcon](../SIcon)
25
+
26
+ ### Graph
27
+
28
+ ```mermaid
29
+ graph TD;
30
+ SChatAttachedFile --> SGhostButton
31
+ SChatAttachedFile --> SIcon
32
+ style SChatAttachedFile fill:#f9f,stroke:#333,stroke-width:4px
33
+ ```
@@ -0,0 +1,13 @@
1
+ import { type HTMLAttributes } from 'react';
2
+ export interface SChatAttachedFileProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
3
+ /** 파일명. 칸을 넘치면 말줄임된다 — 칸의 폭은 부모가 정한다. */
4
+ name: string;
5
+ /**
6
+ * 제거 버튼을 눌렀을 때. 주지 않으면 버튼이 서지 않는다.
7
+ *
8
+ * 입력창 위의 첨부는 보내기 전까지 뺄 수 있어야 하므로 대개 준다 —
9
+ * 버튼을 세우지 않는 것은 보내는 중처럼 무를 수 없는 짧은 순간뿐이다.
10
+ */
11
+ onRemove?: () => void;
12
+ }
13
+ export declare const SChatAttachedFile: import("react").ForwardRefExoticComponent<SChatAttachedFileProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 보내기 전 첨부 칸이 쓰는 값. `component.chatAttachedFile` 토큰 한 세트가 여백·면·선·칩을
3
+ * 모두 쥔다.
4
+ *
5
+ * 높이는 고정하지 않고 세로 패딩(`paddingY`)과 내용이 정한다 — 예전에 스케일에 안 떨어져
6
+ * 값으로 두던 높이(30)·타일(20)은 `paddingY` + `icon.wrapper.padding` + 아이콘 크기로 따라온다.
7
+ */
8
+ export declare const CHAT_ATTACHED_FILE_CONFIG: {
9
+ /** 바깥 상자 — 좌우·상하 여백·면·선·라운드 */
10
+ readonly box: "px-(--cmp-chatAttachedFile-paddingX) py-(--cmp-chatAttachedFile-paddingY) rounded-(--cmp-chatAttachedFile-radius) border-(length:--cmp-chatAttachedFile-border-width) border-(--cmp-chatAttachedFile-border-color) bg-(--cmp-chatAttachedFile-bg)";
11
+ /** 콘텐츠 묶음 ↔ 제거 버튼 간격 */
12
+ readonly outerGap: "gap-(--cmp-chatAttachedFile-gap)";
13
+ /** 아이콘 칩 ↔ 파일명 간격 */
14
+ readonly contentGap: "gap-(--cmp-chatAttachedFile-content-gap)";
15
+ /** 클립 아이콘이 앉는 칩 — 내부 패딩·면·라운드 (높이는 아이콘+패딩이 정한다) */
16
+ readonly tile: "p-(--cmp-chatAttachedFile-icon-wrapper-padding) rounded-(--cmp-chatAttachedFile-icon-wrapper-radius) bg-(--cmp-chatAttachedFile-icon-wrapper-bg)";
17
+ /** 칩 안 클립 아이콘 크기(px). SVG width/height 는 속성값이라 CSS 변수를 못 받아 값으로 둔다 (토큰 값과 동일) */
18
+ readonly iconSize: 16;
19
+ /** 파일명 타이포 프리셋 */
20
+ readonly nameTypo: "typo-body-sm-default";
21
+ /** 파일명 텍스트색 */
22
+ readonly textColor: "text-(--cmp-chatAttachedFile-filename-color)";
23
+ };
@@ -0,0 +1,2 @@
1
+ export { SChatAttachedFile, type SChatAttachedFileProps } from './SChatAttachedFile';
2
+ export { CHAT_ATTACHED_FILE_CONFIG } from './chatAttachedFile.config';
@@ -0,0 +1,33 @@
1
+ # SChatFile
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### SChatFile
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `name` | `string` | — | 파일명. 칸을 넘치면 말줄임된다 — 칸의 폭은 부모가 정한다. |
12
+ | `extension?` | `string` | — | 보조 줄에 쓸 형식. 주지 않으면 **파일명의 마지막 점 뒤**를 쓴다. 파일명에서 뽑는 것이 틀리는 자리에서만 준다 — 확장자가 없거나(`README`), 확장자처럼 안 생겼거나(`backup.2026` → `2026`), 두 마디인 경우(`archive.tar.gz` → `gz`). 그 밖에는 주지 않는 편이 낫다. 파일명과 어긋난 형식이 적히는 일을 막는다. 앞의 점과 대소문자는 알아서 정리한다 — `'.CSV'` 와 `'csv'` 가 같게 나온다. |
13
+ | `size` | `number` | — | 파일 크기(바이트). 형식(`extension`)과 묶어 `csv / 9.4KB` 로 그린다. **바이트 수를 그대로 넘긴다** — `'9.4KB'` 같은 완성된 문자열이 아니다. 표기를 앱이 만들면 같은 파일이 화면마다 다른 크기로 읽히므로 서식은 디자인 시스템이 쥔다. 서버가 준 바이트 수를 그대로 넘기면 된다. **필수다** — 보낸 파일은 확장자와 크기를 반드시 밝힌다. 선택으로 두면 빠뜨려도 타입이 통과하고 화면에서 보조 줄만 조용히 사라진다. |
14
+
15
+ #### Events
16
+
17
+ | Event | Type | Description |
18
+ |-------|------|-------------|
19
+ | `onFileClick` | `() => void` | 칸을 눌렀을 때 — 파일을 여는 자리다. **필수다** — 보낸 파일은 언제나 열 수 있다. 선택으로 두면 빠뜨려도 타입이 통과하고, 커서·hover 면까지 갖춘 칸이 눌러도 아무 일이 없는 화면이 조용히 나간다. 루트가 `div` 라 `role="button"`·`tabIndex`·Enter/Space 를 DS 가 함께 붙인다 — 앱이 `onClick` 만 직접 달면 키보드로 닿지 않는 칸이 되므로 그 대신 이걸 쓴다. |
20
+
21
+ ## Dependencies
22
+
23
+ ### Depends on
24
+
25
+ - [SIcon](../SIcon)
26
+
27
+ ### Graph
28
+
29
+ ```mermaid
30
+ graph TD;
31
+ SChatFile --> SIcon
32
+ style SChatFile fill:#f9f,stroke:#333,stroke-width:4px
33
+ ```
@@ -0,0 +1,37 @@
1
+ import { type HTMLAttributes } from 'react';
2
+ export interface SChatFileProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
3
+ /** 파일명. 칸을 넘치면 말줄임된다 — 칸의 폭은 부모가 정한다. */
4
+ name: string;
5
+ /**
6
+ * 보조 줄에 쓸 형식. 주지 않으면 **파일명의 마지막 점 뒤**를 쓴다.
7
+ *
8
+ * 파일명에서 뽑는 것이 틀리는 자리에서만 준다 — 확장자가 없거나(`README`),
9
+ * 확장자처럼 안 생겼거나(`backup.2026` → `2026`), 두 마디인 경우(`archive.tar.gz` → `gz`).
10
+ * 그 밖에는 주지 않는 편이 낫다. 파일명과 어긋난 형식이 적히는 일을 막는다.
11
+ *
12
+ * 앞의 점과 대소문자는 알아서 정리한다 — `'.CSV'` 와 `'csv'` 가 같게 나온다.
13
+ */
14
+ extension?: string;
15
+ /**
16
+ * 파일 크기(바이트). 형식(`extension`)과 묶어 `csv / 9.4KB` 로 그린다.
17
+ *
18
+ * **바이트 수를 그대로 넘긴다** — `'9.4KB'` 같은 완성된 문자열이 아니다. 표기를 앱이 만들면
19
+ * 같은 파일이 화면마다 다른 크기로 읽히므로 서식은 디자인 시스템이 쥔다. 서버가 준 바이트 수를
20
+ * 그대로 넘기면 된다.
21
+ *
22
+ * **필수다** — 보낸 파일은 확장자와 크기를 반드시 밝힌다. 선택으로 두면 빠뜨려도 타입이
23
+ * 통과하고 화면에서 보조 줄만 조용히 사라진다.
24
+ */
25
+ size: number;
26
+ /**
27
+ * 칸을 눌렀을 때 — 파일을 여는 자리다.
28
+ *
29
+ * **필수다** — 보낸 파일은 언제나 열 수 있다. 선택으로 두면 빠뜨려도 타입이 통과하고,
30
+ * 커서·hover 면까지 갖춘 칸이 눌러도 아무 일이 없는 화면이 조용히 나간다.
31
+ *
32
+ * 루트가 `div` 라 `role="button"`·`tabIndex`·Enter/Space 를 DS 가 함께 붙인다 — 앱이
33
+ * `onClick` 만 직접 달면 키보드로 닿지 않는 칸이 되므로 그 대신 이걸 쓴다.
34
+ */
35
+ onFileClick: () => void;
36
+ }
37
+ export declare const SChatFile: import("react").ForwardRefExoticComponent<SChatFileProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * 보낸 파일 칸이 쓰는 값. `component.chatFile` 토큰 한 세트가 여백·면·선·칩을 모두 쥔다.
3
+ *
4
+ * 높이는 고정하지 않고 세로 패딩(`paddingY`)과 내용이 정한다 — 예전에 스케일에 안 떨어져
5
+ * 값으로 두던 높이(56)·타일(28)은 `paddingY` + `icon.wrapper.padding` + 아이콘 크기로 따라온다.
6
+ */
7
+ export declare const CHAT_FILE_CONFIG: {
8
+ /** 바깥 상자 — 좌우 비대칭 여백·상하 여백·면·선·라운드 */
9
+ readonly box: "pl-(--cmp-chatFile-paddingLeft) pr-(--cmp-chatFile-paddingRight) py-(--cmp-chatFile-paddingY) rounded-(--cmp-chatFile-radius) border-(length:--cmp-chatFile-border-width) border-(--cmp-chatFile-border-color) bg-(--cmp-chatFile-bg-default)";
10
+ /** 아이콘 칩 ↔ 파일명 간격 */
11
+ readonly contentGap: "gap-(--cmp-chatFile-gap)";
12
+ /**
13
+ * 클립 아이콘이 앉는 칩 — 내부 패딩·면·라운드 (높이는 아이콘+패딩이 정한다).
14
+ *
15
+ * hover 면은 상자가 아니라 여기에도 걸린다 — 카드가 어두워질 때 칩은 반대로 밝아져
16
+ * 칩이 배경에 묻히지 않는다. 상자의 hover 를 따라가야 하므로 group-hover 로 받는다.
17
+ *
18
+ * **`--sys-color-bg-frame` 은 임시다.** 시안의 hover 칩 색(`#FFFFFF`)에 대응하는
19
+ * 컴포넌트 토큰이 없다 — `component.chatMessage.chatFile.icon.wrapper.bg` 는 값이 하나뿐이라
20
+ * hover 를 담지 못한다. 상자의 `bg.default` 가 참조하는 것과 같은 시스템 토큰으로 대신 걸어 둔다.
21
+ * 디자인팀에 `icon.wrapper.bg.hover` 를 요청해 나오는 대로 갈아끼운다.
22
+ */
23
+ readonly tile: "p-(--cmp-chatFile-icon-wrapper-padding) rounded-(--cmp-chatFile-icon-wrapper-radius) bg-(--cmp-chatFile-icon-wrapper-bg) group-hover/chat-file:bg-(--sys-color-bg-frame)";
24
+ /** 칩 안 클립 아이콘 크기(px). SVG width/height 는 속성값이라 CSS 변수를 못 받아 값으로 둔다 (토큰 값과 동일) */
25
+ readonly iconSize: 20;
26
+ /** 파일명 타이포 프리셋 */
27
+ readonly nameTypo: "typo-body-md-bold";
28
+ /** 파일명·부가정보 텍스트색 */
29
+ readonly textColor: "text-(--cmp-chatFile-text-color)";
30
+ /**
31
+ * 눌리는 모양 — 커서·hover 면·포커스 링. 보낸 파일은 언제나 열 수 있으므로 늘 붙는다
32
+ * (`onFileClick` 이 필수다).
33
+ *
34
+ * 상자의 여백·면·선과 따로 두는 이유: 이건 상호작용을 드러내는 값이라 성격이 다르다.
35
+ * 링은 `SExpansionItem`·`SStepper` 와 같은 accent outline.
36
+ */
37
+ readonly interactive: "cursor-pointer hover:bg-(--cmp-chatFile-bg-hover) focus-visible:outline focus-visible:outline-2 focus-visible:outline-(--sys-color-border-accent)";
38
+ };
39
+ /**
40
+ * 바이트 수 → `9.4KB` 표기.
41
+ *
42
+ * **표기를 앱이 아니라 여기서 정하는 이유**: 문자열로 받으면 제품마다 `9.4KB`·`9.4 KB`·
43
+ * `9,626B` 로 갈린다. 같은 파일이 화면마다 다른 크기로 읽히는 것을 막으려면 한 곳에서 만든다.
44
+ *
45
+ * 1024 배수로 올리고, 바이트는 소수점이 뜻이 없어 정수로, 그 위는 한 자리까지 쓴다(시안 표기).
46
+ * 금액·수량의 세 자리 콤마 규칙(AGENTS.md §1-4)과는 별개다 — 용량은 단위가 자리를 대신한다.
47
+ */
48
+ export declare function formatFileSize(bytes: number): string;
49
+ /** 앱이 준 확장자를 표기 형태로 맞춘다 — 앞의 점을 떼고 소문자로. `'.CSV'` → `'csv'` */
50
+ export declare function normalizeExtension(extension: string): string;
51
+ /**
52
+ * 파일명 → 소문자 확장자. 확장자가 없으면 빈 문자열.
53
+ *
54
+ * 맨 앞의 점은 확장자가 아니다(`.gitignore` 는 이름 전체가 이름이다).
55
+ */
56
+ export declare function fileExtension(name: string): string;
@@ -0,0 +1,2 @@
1
+ export { SChatFile, type SChatFileProps } from './SChatFile';
2
+ export { CHAT_FILE_CONFIG, formatFileSize, fileExtension, normalizeExtension, } from './chatFile.config';
@@ -0,0 +1,44 @@
1
+ # SChatInput
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### SChatInput
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `value?` | `string` | `''` | 입력값 (제어) |
12
+ | `placeholder?` | `string` | `DEFAULT_PLACEHOLDER` | 안내 문구. 세 제품이 같은 말로 서도록 기본값을 쥐고 있다 |
13
+ | `disabled?` | `boolean` | `false` | 비활성 |
14
+ | `busy?` | `boolean` | `false` | 응답을 기다리는 중인지. 켜면 전송 버튼 자리에 정지 버튼이 서고 Enter 전송이 잠긴다 — 답이 오는 동안 또 보내지 못하게 막는 자리다. |
15
+ | `footerAction?` | `ReactNode` | — | 입력창 아래 보조 액션 슬롯. 없으면 그 줄이 통째로 빠진다. 상담 종료처럼 **대화 자체를 끝내는, 전송과 층이 다른 동작**이 오는 자리다. 무엇을 놓을지는 앱이 정하고, 입력창은 가운데에 세우는 것까지만 한다 — `STextLink` 를 넣는 것이 보통이다. |
16
+ | `maxRows?` | `number` | `DEFAULT_MAX_ROWS` | 입력창이 자랄 수 있는 최대 줄 수. 여기 닿으면 더 자라지 않고 그 안에서 스크롤한다. |
17
+ | `className?` | `string` | — | 바깥 컨테이너 className (안쪽 textarea 가 아니다) |
18
+ | `style?` | `CSSProperties` | — | 바깥 컨테이너 style |
19
+ | `textareaClassName?` | `string` | — | 안쪽 textarea className |
20
+
21
+ #### Events
22
+
23
+ | Event | Type | Description |
24
+ |-------|------|-------------|
25
+ | `onValueChange` | `(value: string) => void` | 값 변경 |
26
+ | `onSend` | `(value: string) => void` | 전송. 전송 버튼을 누르거나 Enter 를 쳤을 때 현재 값을 넘긴다. **값이 비면 전송 버튼이 잠긴다** — 빈 메시지는 보낼 수 없다. |
27
+ | `onAttach` | `() => void` | 파일 첨부. **주면 입력창 왼쪽에 첨부 버튼이 선다** |
28
+ | `onStop` | `() => void` | 정지. `busy` 일 때 정지 버튼을 누르면 불린다 |
29
+
30
+ ## Dependencies
31
+
32
+ ### Depends on
33
+
34
+ - [SGhostButton](../SGhostButton)
35
+ - [STextarea](../STextarea)
36
+
37
+ ### Graph
38
+
39
+ ```mermaid
40
+ graph TD;
41
+ SChatInput --> SGhostButton
42
+ SChatInput --> STextarea
43
+ style SChatInput fill:#f9f,stroke:#333,stroke-width:4px
44
+ ```
@@ -0,0 +1,60 @@
1
+ import { type CSSProperties, type ReactNode, type TextareaHTMLAttributes } from 'react';
2
+ /**
3
+ * 안쪽 textarea 로 그대로 흘러가는 네이티브 속성 — `SInput`·`STextarea` 와 같은 방식이다.
4
+ * 컴포넌트가 직접 다루는 것만 뺀다.
5
+ */
6
+ export interface SChatInputProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onChange' | 'placeholder' | 'disabled' | 'rows' | 'className' | 'style'> {
7
+ /** 입력값 (제어) */
8
+ value?: string;
9
+ /** 값 변경 */
10
+ onValueChange?: (value: string) => void;
11
+ /** 안내 문구. 세 제품이 같은 말로 서도록 기본값을 쥐고 있다 */
12
+ placeholder?: string;
13
+ /** 비활성 */
14
+ disabled?: boolean;
15
+ /**
16
+ * 전송. 전송 버튼을 누르거나 Enter 를 쳤을 때 현재 값을 넘긴다.
17
+ *
18
+ * **값이 비면 전송 버튼이 잠긴다** — 빈 메시지는 보낼 수 없다.
19
+ */
20
+ onSend?: (value: string) => void;
21
+ /** 파일 첨부. **주면 입력창 왼쪽에 첨부 버튼이 선다** */
22
+ onAttach?: () => void;
23
+ /**
24
+ * 응답을 기다리는 중인지. 켜면 전송 버튼 자리에 정지 버튼이 서고 Enter 전송이 잠긴다 —
25
+ * 답이 오는 동안 또 보내지 못하게 막는 자리다.
26
+ */
27
+ busy?: boolean;
28
+ /** 정지. `busy` 일 때 정지 버튼을 누르면 불린다 */
29
+ onStop?: () => void;
30
+ /**
31
+ * 입력창 아래 보조 액션 슬롯. 없으면 그 줄이 통째로 빠진다.
32
+ *
33
+ * 상담 종료처럼 **대화 자체를 끝내는, 전송과 층이 다른 동작**이 오는 자리다. 무엇을 놓을지는
34
+ * 앱이 정하고, 입력창은 가운데에 세우는 것까지만 한다 — `STextLink` 를 넣는 것이 보통이다.
35
+ */
36
+ footerAction?: ReactNode;
37
+ /**
38
+ * 입력창이 자랄 수 있는 최대 줄 수. 여기 닿으면 더 자라지 않고 그 안에서 스크롤한다.
39
+ */
40
+ maxRows?: number;
41
+ /** 바깥 컨테이너 className (안쪽 textarea 가 아니다) */
42
+ className?: string;
43
+ /** 바깥 컨테이너 style */
44
+ style?: CSSProperties;
45
+ /** 안쪽 textarea className */
46
+ textareaClassName?: string;
47
+ }
48
+ /**
49
+ * SChatInput — 대화 화면 맨 아래에 서는 입력창.
50
+ *
51
+ * 첨부·입력·전송을 한 줄로 세우고, 필요하면 그 아래 보조 액션(상담 종료 등)을 붙인다.
52
+ * Enter 로 보내고 Shift+Enter 로 줄을 바꾼다 — 한글 조합 중의 Enter 는 보내지 않는다.
53
+ *
54
+ * **글이 길어지면 입력창이 자란다** — `maxRows` 줄까지 늘어나고, 거기 닿으면 그 안에서
55
+ * 스크롤한다. 상한이 없으면 대화가 화면 밖으로 밀려난다.
56
+ *
57
+ * **응답을 기다리는 동안에는 `busy` 를 켠다** — 전송 버튼이 정지 버튼으로 바뀌고 Enter 전송이
58
+ * 잠겨, 답이 오는 중에 또 보내는 일이 막힌다.
59
+ */
60
+ export declare const SChatInput: import("react").ForwardRefExoticComponent<SChatInputProps & import("react").RefAttributes<HTMLTextAreaElement>>;
@@ -0,0 +1 @@
1
+ export { SChatInput, type SChatInputProps } from './SChatInput';
@@ -0,0 +1,86 @@
1
+ # SChatMessage
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### SChatMessage
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `direction` | `SChatMessageDirection` | `'incoming'` | 받은 메시지(왼쪽)인지 보낸 메시지(오른쪽)인지. **아바타와 이름 유무도 여기서 갈린다** — 받은 메시지에만 아바타와 `sender` 가 선다. 보낸 메시지는 내가 보냈다는 것이 자리로 이미 드러나 얼굴도 이름도 필요 없다. |
12
+ | `sender?` | `ReactNode` | — | 말풍선 위에 붙는 보낸 사람 이름. 없으면 자리째 빠진다. **받은 메시지에만 쓰인다** — 보낸 메시지에는 넘겨도 그리지 않는다(`direction` 참고). 앱이 데이터를 한 번만 매핑해 방향과 무관하게 넘길 수 있도록 막지 않고 무시한다. |
13
+ | `time?` | `ReactNode` | — | 말풍선 아래에 붙는 시각. 표기는 앱이 정해 문자열로 넘긴다 — 대화 화면의 시각은 `오후 5:52` 처럼 읽는 표기를 쓰므로 카드가 서식을 강제하지 않는다 (AGENTS.md §1-4 예외). |
14
+ | `readStatus?` | `SChatMessageReadStatus` | — | 상대가 읽었는지. 시각 왼쪽에 `읽음`·`안 읽음` 으로 붙고, 주지 않으면 표시하지 않는다. **내가 보낸 메시지에만 붙인다** — 받은 메시지에 읽음 표시를 다는 것은 뜻이 없다. |
15
+ | `avatarSrc?` | `string` | — | 아바타 이미지 경로. 없으면 사람 아이콘 자리표시가 선다. **받은 메시지에만 쓰인다** — 보낸 메시지에는 아바타가 서지 않는다(`direction` 참고). |
16
+ | `avatarAlt?` | `string` | — | 아바타 대체 텍스트 |
17
+ | `continued?` | `boolean` | `false` | 같은 사람이 이어서 말한 묶음인지. 켜면 **아바타와 `sender` 를 그리지 않는다** — 말풍선이 위 묶음과 같은 선에서 시작해 한 사람의 말로 이어 읽힌다. 받은 메시지에서는 아바타 자리를 비워 둔 채 남긴다 — 안 남기면 말풍선이 44px 왼쪽으로 밀려 위 묶음과 어긋난다. 보낸 메시지는 아바타가 없으므로 이름만 숨긴다. `time`·`readStatus` 는 그대로 나온다. 시간이 벌어져 묶음을 나눴어도 얼굴은 한 번만 보이면 되고 시각은 묶음마다 필요하기 때문이다. **얼마나 벌어져야 묶음을 나눌지는 앱이 정한다** — 30분이든 하루든 대화의 성격에 달렸으므로 컴포넌트는 기준을 갖지 않고 스위치만 연다. |
18
+ | `variant?` | `SChatMessageVariant` | `'default'` | 말풍선 종류. `template` 은 미리 등록된 서식으로, `admin` 은 관리자·시스템이 보낸 메시지임을 각각 다른 면으로 드러낸다. 면 색은 토큰이 정하므로 여기서 색을 정하지 않는다. **보낸 메시지(`direction="outgoing"`)에만 쓰인다** — 받은 메시지에는 넘겨도 그리지 않는다. 셋 다 사업자 쪽이 보내는 것이라 받은 쪽에는 뜻이 없다. 앱이 메시지를 한 번만 매핑해 방향과 무관하게 넘길 수 있도록 막지 않고 무시한다. |
19
+ | `actions?` | `ReactNode` | — | 시각 아래에 붙는 동작 슬롯. 없으면 그 줄이 통째로 빠진다. 「상담원 연결」처럼 **이 메시지에 이어서 할 수 있는 동작**이 오는 자리다. 무엇을 놓을지는 앱이 정하고, 메시지는 줄로 세우고 방향에 맞춰 정렬하는 것까지만 한다. 시각과 같은 선에서 시작한다 — 말풍선 끝에서 한 칸 안이다. |
20
+ | `messages?` | `ReactNode[]` | — | 말풍선 목록. **한 항목이 말풍선 하나**가 되어 위에서 아래로 쌓인다. 한 사람이 연달아 말하면 아바타·이름·시각은 한 번만 서고 말풍선만 늘어난다 — 그 묶음이 이 컴포넌트 한 개다. 말풍선 안에는 글뿐 아니라 버튼 같은 요소도 올 수 있다. |
21
+ | `attachments?` | `ReactNode[]` | — | 말풍선 아래에 붙는 파일 목록. **한 항목이 칸 하나**가 되어 위에서 아래로 쌓인다. `SChatFile` 을 넣는 자리다 — 말풍선과 달리 면으로 감싸지 않고 넘긴 것을 그대로 세운다. 파일 칸은 제 면·선·라운드를 이미 갖고 있어 한 번 더 감싸면 칸이 두 겹으로 보인다. **`messages` 대신 여기로 넘긴다.** `messages` 로 넘기면 말풍선 면에 감싸여 그렇게 된다. 아바타·이름·시각·읽음 표시는 글 메시지와 똑같이 이 컴포넌트가 그린다 — 파일을 보낸 것도 대화의 한 줄이므로 행 규칙을 따로 갖지 않는다. |
22
+
23
+ ## Types
24
+
25
+ ### SChatMessageDirection
26
+
27
+ ```ts
28
+ export type SChatMessageDirection = (typeof CHAT_MESSAGE_DIRECTIONS)[number];
29
+ ```
30
+
31
+ ### SChatMessageReadStatus
32
+
33
+ ```ts
34
+ export type SChatMessageReadStatus = (typeof CHAT_MESSAGE_READ_STATUSES)[number];
35
+ ```
36
+
37
+ ### SChatMessageVariant
38
+
39
+ ```ts
40
+ export type SChatMessageVariant = (typeof CHAT_MESSAGE_VARIANTS)[number];
41
+ ```
42
+
43
+ ### CHAT_MESSAGE_DIRECTIONS
44
+
45
+ ```ts
46
+ /** 메시지가 오는 쪽 — 받은 메시지(incoming)는 왼쪽, 보낸 메시지(outgoing)는 오른쪽에 선다. */
47
+ export const CHAT_MESSAGE_DIRECTIONS = ['incoming', 'outgoing'] as const;
48
+ ```
49
+
50
+ ### CHAT_MESSAGE_READ_STATUSES
51
+
52
+ ```ts
53
+ /** 상대가 내 메시지를 읽었는지. 시각 왼쪽에 붙는다. */
54
+ export const CHAT_MESSAGE_READ_STATUSES = ['read', 'unread'] as const;
55
+ ```
56
+
57
+ ### CHAT_MESSAGE_VARIANTS
58
+
59
+ ```ts
60
+ /**
61
+ * 말풍선의 종류.
62
+ * - `default` 사람이 직접 쓴 메시지
63
+ * - `template` 미리 등록된 서식으로 보내진 메시지
64
+ * - `admin` 관리자·시스템이 보낸 메시지
65
+ *
66
+ * **보낸 메시지에서만 면이 갈린다.** 셋 다 사업자 쪽이 보내는 것이라 받은 메시지에는
67
+ * 뜻이 없고, 받은 메시지는 무엇으로 보냈든 같은 면으로 선다.
68
+ */
69
+ export const CHAT_MESSAGE_VARIANTS = ['default', 'template', 'admin'] as const;
70
+ ```
71
+
72
+ ## Dependencies
73
+
74
+ ### Depends on
75
+
76
+ - [SIcon](../SIcon)
77
+ - [SImage](../SImage)
78
+
79
+ ### Graph
80
+
81
+ ```mermaid
82
+ graph TD;
83
+ SChatMessage --> SIcon
84
+ SChatMessage --> SImage
85
+ style SChatMessage fill:#f9f,stroke:#333,stroke-width:4px
86
+ ```