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,23 +8,33 @@
8
8
 
9
9
  | Prop | Type | Default | Description |
10
10
  |------|------|---------|-------------|
11
- | `value?` | `(string \| number \| SSelectOption) \| (string \| number \| SSelectOption)[] \| null` | — | 선택 값. multi 타입이면 배열. emitValue=false(기본) 라운드트립을 위해 SSelectOption 객체도 허용 |
12
- | `emitValue?` | `boolean` | `false` | true면 SSelectOption 대신 원시값(string|number) 방출 |
11
+ | `value?` | `(string \| number \| SSelectOption) \| (string \| number \| SSelectOption)[] \| null` | — | 선택 값. multi 타입이면 배열. 기본(valueAsPrimitive=false) 라운드트립을 위해 SSelectOption 객체도 허용 |
12
+ | `valueAsPrimitive?` | `boolean` | `false` | `value`·`onValueChange` 가 옵션 객체 대신 원시값(string|number)을 주고받는다. **기본값 `false`(옵션 객체)는 유지한다** — 원본(sd-select) 호환 때문이고, 뒤집으면 이 값을 주지 않던 화면이 조용히 다른 모양의 값을 받게 되어 타입으로도 잡히지 않는다. 새로 쓰는 화면은 켜는 쪽이 다루기 쉽다 — 서버로 보내는 것도, 폼 상태에 담는 것도 결국 값 하나이기 때문이다. |
13
13
  | `name?` | `string` | — | 폼 연동용 name 속성 |
14
14
  | `options?` | `SSelectOption[]` | `[]` | 옵션 목록 (children으로 계층 표현) |
15
15
  | `type?` | `SSelectType` | `'default'` | 타입: default | multi | default_depth | multi_depth |
16
- | `useSearch?` | `boolean` | `false` | 검색 입력 사용 |
17
- | `useSelectAll?` | `boolean` | `false` | 전체선택 옵션 사용 (multi 전용) |
16
+ | `valueDisplay?` | `SSelectValueDisplay` | `'text'` | 트리거에 선택값을 보여주는 방식. - `text`: 선택 라벨을 쉼표로 이어 한 줄로 보여준다. 넘치면 말줄임한다. - `chip`: 선택값마다 칩을 낸다. 칩의 × 를 누르면 그 값만 선택에서 빠지고, 드롭다운은 열리지 않는다. 칩이 한 줄을 넘으면 줄바꿈하고 트리거가 그만큼 높아진다. `chip` 은 `multi`·`multi_depth` 에서만 동작한다. 단일 선택 type 에서는 무시하고 `text` 로 보여준다. 전체 선택이면 칩 대신 `allSelectedLabel` 을 보여준다. `multi_depth` 에서 그룹의 하위 리프를 전부 고르면 리프 칩 대신 그룹명 칩 하나로 묶고, 그 칩의 × 는 그룹의 리프를 한꺼번에 뺀다. 비활성(select 자체나 해당 옵션)인 칩에는 × 를 내지 않는다. |
17
+ | `showSearch?` | `boolean` | `false` | 검색 입력 사용 |
18
+ | `showSelectAll?` | `boolean` | `false` | 전체선택 옵션 사용 (multi 전용) |
18
19
  | `allSelectedLabel?` | `string` | `'전체'` | 전체선택 레이블 |
19
20
  | `placeholder?` | `string` | `'선택'` | placeholder |
20
21
  | `disabled?` | `boolean` | `false` | 비활성 |
22
+ | `clearable?` | `boolean` | `false` | 선택값 지우기(×) 버튼 노출. 선택값이 있고 비활성이 아닐 때만 나타나며, 누르면 드롭다운을 열지 않고 값만 비운다. |
21
23
  | `error?` | `boolean` | `false` | 에러 상태 |
22
24
  | `rules?` | `Rule[]` | — | 유효성 규칙 — 닫힐 때 자동 검증 |
23
25
  | `labelTooltipProps?` | `Partial<STooltipProps>` | — | 레이블 툴팁 상세 옵션 |
24
- | `dropdownHeight?` | `string` | `'260px'` | 드롭다운 최대 높이 |
26
+ | `dropdownHeight?` | `string` | `'640px'` | 드롭다운 최대 높이. 기본 640px — 창이 이보다 작으면 창 안에 남는 만큼까지만 채워진다 |
25
27
  | `dropdownWidth?` | `string` | — | 드롭다운 너비 (없으면 트리거 너비). 창보다 넓게 줘도 창 폭까지만 벌어진다. |
26
28
  | `maxDropdownWidth?` | `string` | `'640px'` | 드롭다운 최대 너비. 창이 이보다 좁으면 창 폭이 상한이 된다. |
29
+ | `virtualBuffer?` | `number` | `DEFAULT_VIRTUAL_BUFFER` | 화면 위·아래로 더 그려둘 여유 행 수 — 빠르게 스크롤할 때 빈 칸이 보이지 않게 한다. 목록은 **언제나 보이는 범위만 렌더한다**(끄는 prop 은 없다). 그래서 여는 비용이 옵션 수와 무관하고, 이 값만이 DOM 에 남는 행 수를 정한다 — 한 화면 분량 + 앞뒤로 이만큼. |
30
+ | `reachEndThreshold?` | `number` | `DEFAULT_REACH_END_THRESHOLD` | 목록 끝에서 이만큼 행이 남았을 때 `onReachEnd` 를 부른다 — 스크롤이 바닥에 닿기 전에 미리 받아 둔다. **한 페이지 크기보다 충분히 작게 잡는다.** 한 페이지가 드롭다운을 채우고도 이 문턱만큼 남기지 못하면, 페이지가 도착하는 족족 다음 페이지를 다시 청하게 된다 — 사용자가 스크롤을 하지 않아도 목록 전체를 받아 오므로 페이징을 한 의미가 사라진다. (한 페이지 50개 · 드롭다운에 20행이 보인다면 남는 것은 30행이므로, 문턱은 그보다 작아야 한다) |
31
+ | `hasMore?` | `boolean` | `false` | 더 받아올 페이지가 남았는가. `false` 면 `onReachEnd` 를 더 부르지 않는다 |
32
+ | `loading?` | `boolean` | `false` | 옵션을 받는 중 — 트리거의 펼침 아이콘 자리에 스피너를, 드롭다운 하단에 로딩 행을 낸다. 첫 조회(옵션이 아직 없을 때)든 다음 페이지든 같은 prop 이고, 그동안 `onReachEnd` 를 다시 부르지 않는다. 로딩 중에도 열 수 있다 — 서버 검색·페이징은 열린 채로 로딩을 오가므로, 열기를 막으면 닫았다 다시 연 사용자에게 클릭이 먹지 않는 고장으로 보인다. 받는 중에는 "표시할 항목이 없습니다."를 내지 않는다. 비활성이면 트리거 스피너를 내지 않는다 — 열 수 없는데 스피너가 돌면 "기다리면 열린다"로 읽힌다. |
33
+ | `serverSearch?` | `boolean` | `false` | 검색을 서버로 넘긴다 — 내부 필터링을 하지 않고 `options` 를 받은 그대로 보여준다. `onSearchChange` 로 온 검색어에 맞는 목록을 소비 앱이 다시 내려줘야 한다. 켜면 검색바가 옵션 수와 무관하게 항상 나온다 — 검색 결과가 줄었다고 검색바가 사라지면 검색어를 지울 수단이 없어지기 때문이다. |
34
+ | `searchDebounce?` | `number` | `DEFAULT_SEARCH_DEBOUNCE` | `serverSearch` 에서 검색어를 서버로 넘기기 전 기다리는 시간(ms) |
27
35
  | `label?` | `string` | — | |
36
+ | `labelPosition?` | `SFieldLabelPosition` | — | 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다). |
37
+ | `subLabel?` | `string` | — | 보조 레이블 — 레이블 오른쪽 같은 줄에 붙는다 (SField 로 그대로 넘어간다). |
28
38
  | `labelWidth?` | `number \| string` | — | |
29
39
  | `icon?` | `SIconName` | — | 레이블 영역 아이콘 |
30
40
  | `iconColor?` | `SColor` | — | |
@@ -33,7 +43,8 @@
33
43
  | `addonAlign?` | `SFieldAddonAlign` | — | 어드온 정렬 |
34
44
  | `hint?` | `string` | — | |
35
45
  | `errorMessage?` | `string` | — | |
36
- | `width?` | `number \| string` | — | |
46
+ | `width?` | `SFieldWidth` | — | 컨트롤 너비 — 폭 등급(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`) · 숫자=px · CSS 길이. 등급은 `--cmp-field-width-*` 토큰으로 풀리므로 토큰이 바뀌면 화면이 따라간다. 값 길이에 상한이 없으면 `"100%"` 로 두어 행 전체를 쓴다. 셀렉트는 `maxLength` 개념이 없어 목록 최장값을 담는 등급으로 고른다. |
47
+ | `size?` | `SFieldSize` | `'sm'` | 트리거 크기 (기본값 `'sm'`). 높이·패딩·간격·글자 크기를 `--cmp-select-{size}-*` 토큰으로 바꾼다. 드롭다운 목록은 크기와 무관하게 같다. `valueDisplay="chip"` 이면 `md` 는 SChip 과 같은 칩을, `sm` 은 28px 트리거에 맞춘 낮은 칩을 낸다. |
37
48
  | `className?` | `string` | — | |
38
49
  | `style?` | `CSSProperties` | — | |
39
50
 
@@ -41,8 +52,10 @@
41
52
 
42
53
  | Event | Type | Description |
43
54
  |-------|------|-------------|
44
- | `onValueChange` | `(value: any) => void` | 값 변경 (sdUpdate). emitValue=false(기본)면 SSelectOption(들), true면 원시값 |
55
+ | `onValueChange` | `(value: TValue) => void` | 값 변경. 기본은 SSelectOption(들)이 오고, `valueAsPrimitive` 면 원시값이 온다 |
45
56
  | `onOpenChange` | `(open: boolean) => void` | 열림/닫힘 변경 (sdDropDownShow) |
57
+ | `onReachEnd` | `() => void` | 목록 끝이 가까워지면 부른다 — 다음 페이지를 받아 `options` 뒤에 이어붙이라는 신호다. `hasMore` 가 `false` 이거나 `loading` 중이면 부르지 않고, 같은 목록 길이로 두 번 부르지 않는다. **`options` 는 갈아끼우지 말고 이어붙인다.** depth 타입이면 이미 있는 그룹의 `children` 에 이어야 한다 — 같은 그룹을 새 항목으로 또 밀어 넣으면 목록에 같은 헤더가 두 번 뜬다. 아직 받지 않은 옵션은 라벨을 알 수 없다. 그래서 이 prop 을 쓰는 화면은 `valueAsPrimitive` 를 켜지 않는 편이 안전하다 — 기본값(옵션 객체)이면 선택값이 라벨을 함께 들고 다녀서, 그 옵션이 목록에서 사라져도 트리거에 이름이 그대로 남는다. |
58
+ | `onSearchChange` | `(query: string) => void` | 검색어 변경. `serverSearch` 면 `searchDebounce` 만큼 묶어서 온다 |
46
59
 
47
60
  #### Methods (ref)
48
61
 
@@ -51,30 +64,70 @@
51
64
  | `focus` | `() => void` | 트리거 버튼에 포커스 (sdFocus) |
52
65
  | `open` | `() => void` | 드롭다운 열기 (sdOpen) |
53
66
 
67
+ ## Types
68
+
69
+ ### SSelectChangeValue
70
+
71
+ ```ts
72
+ /**
73
+ * `onValueChange` 로 오는 값의 기본 타입.
74
+ *
75
+ * 실제 모양은 `type`(단일/multi)과 `valueAsPrimitive`(옵션 객체/원시값)의 조합으로 정해져 한 타입으로
76
+ * 적을 수 없다. 화면이 안다면 `<SSelect<string> valueAsPrimitive … />` 처럼 넘겨 좁힌다 — 넘기지 않은
77
+ * 기존 코드는 이 기본값으로 예전처럼 동작한다.
78
+ */
79
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- 값 타입을 넘기지 않은 화면의 의도된 탈출구
80
+ export type SSelectChangeValue = any;
81
+ ```
82
+
83
+ ### SSelectOption
84
+
85
+ ```ts
86
+ export interface SSelectOption {
87
+ value: string | number;
88
+ label: string;
89
+ disabled?: boolean;
90
+ children?: SSelectOption[];
91
+ }
92
+ ```
93
+
94
+ ### SSelectType
95
+
96
+ ```ts
97
+ export type SSelectType = 'default' | 'multi' | 'default_depth' | 'multi_depth';
98
+ ```
99
+
100
+ ### SSelectValueDisplay
101
+
102
+ ```ts
103
+ /** 트리거에 선택값을 보여주는 방식 — 쉼표로 이은 텍스트 | 값마다 칩 */
104
+ export type SSelectValueDisplay = 'text' | 'chip';
105
+ ```
106
+
54
107
  ## Dependencies
55
108
 
56
109
  ### Used by
57
110
 
58
- - [SChipFilter](../SChipFilter)
59
111
  - [SKeyValueTable](../SKeyValueTable)
60
112
  - [STable](../STable)
61
113
 
62
114
  ### Depends on
63
115
 
116
+ - [SCircleProgress](../SCircleProgress)
64
117
  - [SField](../SField)
65
- - [SGhostButton](../SGhostButton)
66
118
  - [SIcon](../SIcon)
67
119
  - [SPortal](../SPortal)
120
+ - [SSearchInput](../SSearchInput)
68
121
 
69
122
  ### Graph
70
123
 
71
124
  ```mermaid
72
125
  graph TD;
126
+ SSelect --> SCircleProgress
73
127
  SSelect --> SField
74
- SSelect --> SGhostButton
75
128
  SSelect --> SIcon
76
129
  SSelect --> SPortal
77
- SChipFilter --> SSelect
130
+ SSelect --> SSearchInput
78
131
  SKeyValueTable --> SSelect
79
132
  STable --> SSelect
80
133
  style SSelect fill:#f9f,stroke:#333,stroke-width:4px
@@ -1,55 +1,157 @@
1
- import { type CSSProperties } from 'react';
1
+ import { type CSSProperties, type ForwardedRef, type ReactElement } from 'react';
2
2
  import { type Rule } from '../../lib/form';
3
- import { type SFieldAddonAlign } from '../SField';
3
+ import { type SFieldAddonAlign, type SFieldLabelPosition, type SFieldSize } from '../SField';
4
4
  import { type SIconName } from '../SIcon';
5
5
  import { type SColor } from '../../lib/color';
6
6
  import { type STooltipProps } from '../STooltip';
7
- import { type SSelectOption, type SSelectType } from './select.config';
8
- export type { SSelectOption, SSelectType } from './select.config';
7
+ import { type SSelectOption, type SSelectType, type SSelectValueDisplay } from './select.config';
8
+ import { type SFieldWidth } from '../../lib/field-width';
9
+ export type { SSelectOption, SSelectType, SSelectValueDisplay } from './select.config';
9
10
  export interface SSelectHandle {
10
11
  /** 트리거 버튼에 포커스 (sdFocus) */
11
12
  focus: () => void;
12
13
  /** 드롭다운 열기 (sdOpen) */
13
14
  open: () => void;
14
15
  }
15
- export interface SSelectProps {
16
- /** 선택 값. multi 타입이면 배열. emitValue=false(기본) 라운드트립을 위해 SSelectOption 객체도 허용 */
16
+ /**
17
+ * `onValueChange` 로 오는 값의 기본 타입.
18
+ *
19
+ * 실제 모양은 `type`(단일/multi)과 `valueAsPrimitive`(옵션 객체/원시값)의 조합으로 정해져 한 타입으로
20
+ * 적을 수 없다. 화면이 안다면 `<SSelect<string> valueAsPrimitive … />` 처럼 넘겨 좁힌다 — 넘기지 않은
21
+ * 기존 코드는 이 기본값으로 예전처럼 동작한다.
22
+ */
23
+ export type SSelectChangeValue = any;
24
+ export interface SSelectProps<TValue extends SSelectChangeValue = SSelectChangeValue> {
25
+ /** 선택 값. multi 타입이면 배열. 기본(valueAsPrimitive=false) 라운드트립을 위해 SSelectOption 객체도 허용 */
17
26
  value?: (string | number | SSelectOption) | (string | number | SSelectOption)[] | null;
18
- /** 값 변경 (sdUpdate). emitValue=false(기본)면 SSelectOption(들), true면 원시값 */
19
- onValueChange?: (value: any) => void;
27
+ /** 값 변경. 기본은 SSelectOption(들)이 오고, `valueAsPrimitive` 면 원시값이 온다 */
28
+ onValueChange?: (value: TValue) => void;
20
29
  /** 열림/닫힘 변경 (sdDropDownShow) */
21
30
  onOpenChange?: (open: boolean) => void;
22
- /** true면 SSelectOption 대신 원시값(string|number) 방출 */
23
- emitValue?: boolean;
31
+ /**
32
+ * `value`·`onValueChange` 가 옵션 객체 대신 원시값(string|number)을 주고받는다.
33
+ *
34
+ * **기본값 `false`(옵션 객체)는 유지한다** — 원본(sd-select) 호환 때문이고, 뒤집으면 이 값을
35
+ * 주지 않던 화면이 조용히 다른 모양의 값을 받게 되어 타입으로도 잡히지 않는다.
36
+ *
37
+ * 새로 쓰는 화면은 켜는 쪽이 다루기 쉽다 — 서버로 보내는 것도, 폼 상태에 담는 것도
38
+ * 결국 값 하나이기 때문이다.
39
+ */
40
+ valueAsPrimitive?: boolean;
24
41
  /** 폼 연동용 name 속성 */
25
42
  name?: string;
26
43
  /** 옵션 목록 (children으로 계층 표현) */
27
44
  options?: SSelectOption[];
28
45
  /** 타입: default | multi | default_depth | multi_depth */
29
46
  type?: SSelectType;
47
+ /**
48
+ * 트리거에 선택값을 보여주는 방식.
49
+ * - `text`: 선택 라벨을 쉼표로 이어 한 줄로 보여준다. 넘치면 말줄임한다.
50
+ * - `chip`: 선택값마다 칩을 낸다. 칩의 × 를 누르면 그 값만 선택에서 빠지고, 드롭다운은 열리지 않는다.
51
+ * 칩이 한 줄을 넘으면 줄바꿈하고 트리거가 그만큼 높아진다.
52
+ *
53
+ * `chip` 은 `multi`·`multi_depth` 에서만 동작한다. 단일 선택 type 에서는 무시하고 `text` 로 보여준다.
54
+ * 전체 선택이면 칩 대신 `allSelectedLabel` 을 보여준다.
55
+ * `multi_depth` 에서 그룹의 하위 리프를 전부 고르면 리프 칩 대신 그룹명 칩 하나로 묶고,
56
+ * 그 칩의 × 는 그룹의 리프를 한꺼번에 뺀다.
57
+ * 비활성(select 자체나 해당 옵션)인 칩에는 × 를 내지 않는다.
58
+ */
59
+ valueDisplay?: SSelectValueDisplay;
30
60
  /** 검색 입력 사용 */
31
- useSearch?: boolean;
61
+ showSearch?: boolean;
32
62
  /** 전체선택 옵션 사용 (multi 전용) */
33
- useSelectAll?: boolean;
63
+ showSelectAll?: boolean;
34
64
  /** 전체선택 레이블 */
35
65
  allSelectedLabel?: string;
36
66
  /** placeholder */
37
67
  placeholder?: string;
38
68
  /** 비활성 */
39
69
  disabled?: boolean;
70
+ /**
71
+ * 선택값 지우기(×) 버튼 노출. 선택값이 있고 비활성이 아닐 때만 나타나며,
72
+ * 누르면 드롭다운을 열지 않고 값만 비운다.
73
+ */
74
+ clearable?: boolean;
40
75
  /** 에러 상태 */
41
76
  error?: boolean;
42
77
  /** 유효성 규칙 — 닫힐 때 자동 검증 */
43
78
  rules?: Rule[];
44
79
  /** 레이블 툴팁 상세 옵션 */
45
80
  labelTooltipProps?: Partial<STooltipProps>;
46
- /** 드롭다운 최대 높이 */
81
+ /** 드롭다운 최대 높이. 기본 640px — 창이 이보다 작으면 창 안에 남는 만큼까지만 채워진다 */
47
82
  dropdownHeight?: string;
48
83
  /** 드롭다운 너비 (없으면 트리거 너비). 창보다 넓게 줘도 창 폭까지만 벌어진다. */
49
84
  dropdownWidth?: string;
50
85
  /** 드롭다운 최대 너비. 창이 이보다 좁으면 창 폭이 상한이 된다. */
51
86
  maxDropdownWidth?: string;
87
+ /**
88
+ * 화면 위·아래로 더 그려둘 여유 행 수 — 빠르게 스크롤할 때 빈 칸이 보이지 않게 한다.
89
+ *
90
+ * 목록은 **언제나 보이는 범위만 렌더한다**(끄는 prop 은 없다). 그래서 여는 비용이 옵션
91
+ * 수와 무관하고, 이 값만이 DOM 에 남는 행 수를 정한다 — 한 화면 분량 + 앞뒤로 이만큼.
92
+ */
93
+ virtualBuffer?: number;
94
+ /**
95
+ * 목록 끝이 가까워지면 부른다 — 다음 페이지를 받아 `options` 뒤에 이어붙이라는 신호다.
96
+ * `hasMore` 가 `false` 이거나 `loading` 중이면 부르지 않고, 같은 목록 길이로 두 번 부르지 않는다.
97
+ *
98
+ * **`options` 는 갈아끼우지 말고 이어붙인다.** depth 타입이면 이미 있는 그룹의 `children`
99
+ * 에 이어야 한다 — 같은 그룹을 새 항목으로 또 밀어 넣으면 목록에 같은 헤더가 두 번 뜬다.
100
+ *
101
+ * 아직 받지 않은 옵션은 라벨을 알 수 없다. 그래서 이 prop 을 쓰는 화면은
102
+ * `valueAsPrimitive` 를 켜지 않는 편이 안전하다 — 기본값(옵션 객체)이면 선택값이 라벨을
103
+ * 함께 들고 다녀서, 그 옵션이 목록에서 사라져도 트리거에 이름이 그대로 남는다.
104
+ */
105
+ onReachEnd?: () => void;
106
+ /**
107
+ * 목록 끝에서 이만큼 행이 남았을 때 `onReachEnd` 를 부른다 — 스크롤이 바닥에 닿기 전에 미리 받아 둔다.
108
+ *
109
+ * **한 페이지 크기보다 충분히 작게 잡는다.** 한 페이지가 드롭다운을 채우고도 이 문턱만큼
110
+ * 남기지 못하면, 페이지가 도착하는 족족 다음 페이지를 다시 청하게 된다 — 사용자가 스크롤을
111
+ * 하지 않아도 목록 전체를 받아 오므로 페이징을 한 의미가 사라진다.
112
+ * (한 페이지 50개 · 드롭다운에 20행이 보인다면 남는 것은 30행이므로, 문턱은 그보다 작아야 한다)
113
+ */
114
+ reachEndThreshold?: number;
115
+ /** 더 받아올 페이지가 남았는가. `false` 면 `onReachEnd` 를 더 부르지 않는다 */
116
+ hasMore?: boolean;
117
+ /**
118
+ * 옵션을 받는 중 — 트리거의 펼침 아이콘 자리에 스피너를, 드롭다운 하단에 로딩 행을 낸다.
119
+ * 첫 조회(옵션이 아직 없을 때)든 다음 페이지든 같은 prop 이고, 그동안 `onReachEnd` 를 다시 부르지 않는다.
120
+ *
121
+ * 로딩 중에도 열 수 있다 — 서버 검색·페이징은 열린 채로 로딩을 오가므로, 열기를 막으면
122
+ * 닫았다 다시 연 사용자에게 클릭이 먹지 않는 고장으로 보인다. 받는 중에는 "표시할 항목이
123
+ * 없습니다."를 내지 않는다.
124
+ *
125
+ * 비활성이면 트리거 스피너를 내지 않는다 — 열 수 없는데 스피너가 돌면 "기다리면 열린다"로 읽힌다.
126
+ */
127
+ loading?: boolean;
128
+ /**
129
+ * 검색을 서버로 넘긴다 — 내부 필터링을 하지 않고 `options` 를 받은 그대로 보여준다.
130
+ * `onSearchChange` 로 온 검색어에 맞는 목록을 소비 앱이 다시 내려줘야 한다.
131
+ *
132
+ * 켜면 검색바가 옵션 수와 무관하게 항상 나온다 — 검색 결과가 줄었다고 검색바가 사라지면
133
+ * 검색어를 지울 수단이 없어지기 때문이다.
134
+ */
135
+ serverSearch?: boolean;
136
+ /** 검색어 변경. `serverSearch` 면 `searchDebounce` 만큼 묶어서 온다 */
137
+ onSearchChange?: (query: string) => void;
138
+ /** `serverSearch` 에서 검색어를 서버로 넘기기 전 기다리는 시간(ms) */
139
+ searchDebounce?: number;
52
140
  label?: string;
141
+ /**
142
+ * 레이블 위치 — `top` 이면 라벨이 컨트롤 위에 선다 (SField 로 그대로 넘어간다).
143
+ *
144
+ * @nodemo SField 에서 내려오는 공통 필드 옵션이다 — 같은 데모를 컨트롤마다 복제하지 않고
145
+ * 대표 컨트롤 `SInput` 과 `SField` 에 한 번 둔다 (scripts/check-docs-coverage.mjs 머리말).
146
+ */
147
+ labelPosition?: SFieldLabelPosition;
148
+ /**
149
+ * 보조 레이블 — 레이블 오른쪽 같은 줄에 붙는다 (SField 로 그대로 넘어간다).
150
+ *
151
+ * @nodemo SField 에서 내려오는 공통 필드 옵션이다 — 같은 데모를 컨트롤마다 복제하지 않고
152
+ * 대표 컨트롤 `SInput` 과 `SField` 에 한 번 둔다 (scripts/check-docs-coverage.mjs 머리말).
153
+ */
154
+ subLabel?: string;
53
155
  labelWidth?: number | string;
54
156
  /** 레이블 영역 아이콘 */
55
157
  icon?: SIconName;
@@ -62,8 +164,26 @@ export interface SSelectProps {
62
164
  addonAlign?: SFieldAddonAlign;
63
165
  hint?: string;
64
166
  errorMessage?: string;
65
- width?: number | string;
167
+ /**
168
+ * 컨트롤 너비 — 폭 등급(`'xs' | 'sm' | 'md' | 'lg' | 'xl'`) · 숫자=px · CSS 길이.
169
+ * 등급은 `--cmp-field-width-*` 토큰으로 풀리므로 토큰이 바뀌면 화면이 따라간다.
170
+ * 값 길이에 상한이 없으면 `"100%"` 로 두어 행 전체를 쓴다.
171
+ * 셀렉트는 `maxLength` 개념이 없어 목록 최장값을 담는 등급으로 고른다.
172
+ */
173
+ width?: SFieldWidth;
174
+ /**
175
+ * 트리거 크기 (기본값 `'sm'`). 높이·패딩·간격·글자 크기를 `--cmp-select-{size}-*` 토큰으로 바꾼다.
176
+ * 드롭다운 목록은 크기와 무관하게 같다.
177
+ * `valueDisplay="chip"` 이면 `md` 는 SChip 과 같은 칩을, `sm` 은 28px 트리거에 맞춘 낮은 칩을 낸다.
178
+ */
179
+ size?: SFieldSize;
66
180
  className?: string;
67
181
  style?: CSSProperties;
68
182
  }
69
- export declare const SSelect: import("react").ForwardRefExoticComponent<SSelectProps & import("react").RefAttributes<SSelectHandle>>;
183
+ /**
184
+ * 값 타입을 받는 제네릭 컴포넌트로 내보낸다 — `forwardRef` 는 타입 파라미터를 지워 버리므로
185
+ * 바깥 시그니처만 다시 씌운다(STable·SDraggableList 와 같은 방식).
186
+ */
187
+ export declare const SSelect: <TValue extends SSelectChangeValue = SSelectChangeValue>(props: SSelectProps<TValue> & {
188
+ ref?: ForwardedRef<SSelectHandle>;
189
+ }) => ReactElement | null;
@@ -1 +1 @@
1
- export { SSelect, type SSelectHandle, type SSelectProps, type SSelectOption, type SSelectType, } from './SSelect';
1
+ export { SSelect, type SSelectHandle, type SSelectProps, type SSelectChangeValue, type SSelectOption, type SSelectType, type SSelectValueDisplay, } from './SSelect';
@@ -5,6 +5,8 @@ export interface SSelectOption {
5
5
  children?: SSelectOption[];
6
6
  }
7
7
  export type SSelectType = 'default' | 'multi' | 'default_depth' | 'multi_depth';
8
+ /** 트리거에 선택값을 보여주는 방식 — 쉼표로 이은 텍스트 | 값마다 칩 */
9
+ export type SSelectValueDisplay = 'text' | 'chip';
8
10
  export interface FlatOption {
9
11
  value: string;
10
12
  label: string;
@@ -29,3 +31,18 @@ export declare function collectGroupLeafValues(flat: FlatOption[], groupIndex: n
29
31
  export declare const isHtmlLabel: (label: string) => boolean;
30
32
  /** HTML 라벨에서 태그를 제거한 텍스트 (검색 매칭용, 원본 extractText) */
31
33
  export declare const extractText: (html: string) => string;
34
+ /**
35
+ * 아직 한 번도 그려지지 않은 행의 **추정** 높이(px). 리프 옵션은 세로 패딩 4px + 행간 20px
36
+ * 이라 보통 이 값이지만, 그룹 헤더나 큰 글씨가 섞인 라벨은 다르다 — 화면에 나온 행은
37
+ * 실측으로 덮이므로(`lib/row-metrics.ts`) 이 값은 처음 스크롤바 길이를 잡는 출발점일 뿐이다.
38
+ */
39
+ export declare const OPTION_ROW_HEIGHT = 28;
40
+ /**
41
+ * 화면 위·아래로 더 그려둘 기본 여유 행 수.
42
+ * 640px 드롭다운이 20행 남짓 보이므로, 앞뒤 10행이면 한 화면을 굴리는 동안 빈 칸이 보이지 않는다.
43
+ */
44
+ export declare const DEFAULT_VIRTUAL_BUFFER = 10;
45
+ /** 목록 끝에서 이만큼 행이 남았을 때 다음 페이지를 청하는 기본값 */
46
+ export declare const DEFAULT_REACH_END_THRESHOLD = 10;
47
+ /** `serverSearch` 에서 검색어를 서버로 넘기기 전 기다리는 기본 시간(ms) */
48
+ export declare const DEFAULT_SEARCH_DEBOUNCE = 300;
@@ -0,0 +1,55 @@
1
+ # SSkeleton
2
+
3
+ > 자동 생성 문서 — `npm run docs:gen`. 소스: 각 컴포넌트의 Props/Handle 인터페이스 + import 의존성.
4
+
5
+ ### SSkeleton
6
+
7
+ #### Props
8
+
9
+ | Prop | Type | Default | Description |
10
+ |------|------|---------|-------------|
11
+ | `type?` | `SSkeletonType` | `'rect'` | 자리표시 모양 - `rect`: 사각형. 폭은 부모를, 높이는 한 줄 높이를 따른다 — 이미지·카드 영역은 `height` 를 준다 - `circle`: 원형(아바타 등) - `text`: 텍스트 한 줄. 부모 타이포의 line-height 를 따르고 세로로 절반만 칠한다 - `button`·`input`·`tag`·`checkbox`·`radio`·`switch`: 해당 컴포넌트 기본 size 의 크기·모서리 |
12
+ | `animation?` | `SSkeletonAnimation` | `'wave'` | 로딩 애니메이션 - `wave`: 하이라이트 띠가 왼쪽에서 오른쪽으로 지나간다 - `pulse`: 크기가 숨쉬듯 줄었다 커진다. 블록 전체가 움직이므로 아바타처럼 작은 모양에만 쓴다 - `fade`: 투명도가 숨쉬듯 바뀐다 - `none`: 애니메이션 없음 OS 의 동작 줄이기 설정이 켜져 있으면 어떤 값이든 멈춘다. |
13
+ | `animationSpeed?` | `number` | `1500` | 애니메이션 한 주기 (ms) |
14
+ | `square?` | `boolean` | `false` | 모서리를 각지게 |
15
+ | `bordered?` | `boolean` | `false` | 테두리 |
16
+ | `size?` | `string \| number` | — | 가로·세로를 한 번에 지정. `width`·`height` 가 있으면 그쪽이 우선한다. 숫자는 px |
17
+ | `width?` | `string \| number` | — | 폭. 숫자는 px |
18
+ | `height?` | `string \| number` | — | 높이. 숫자는 px |
19
+
20
+ ## Types
21
+
22
+ ### SSkeletonType
23
+
24
+ ```ts
25
+ export type SSkeletonType = (typeof SKELETON_TYPES)[number];
26
+ ```
27
+
28
+ ### SSkeletonAnimation
29
+
30
+ ```ts
31
+ export type SSkeletonAnimation = (typeof SKELETON_ANIMATIONS)[number];
32
+ ```
33
+
34
+ ### SKELETON_TYPES
35
+
36
+ ```ts
37
+ export const SKELETON_TYPES = [
38
+ 'rect',
39
+ 'circle',
40
+ 'text',
41
+ 'button',
42
+ 'input',
43
+ 'tag',
44
+ 'checkbox',
45
+ 'radio',
46
+ 'switch',
47
+ ] as const;
48
+ ```
49
+
50
+ ### SKELETON_ANIMATIONS
51
+
52
+ ```ts
53
+ export const SKELETON_ANIMATIONS = ['wave', 'pulse', 'fade', 'none'] as const;
54
+ ```
55
+
@@ -0,0 +1,39 @@
1
+ import { type HTMLAttributes } from 'react';
2
+ import { type SSkeletonAnimation, type SSkeletonType } from './skeleton.config';
3
+ export interface SSkeletonProps extends HTMLAttributes<HTMLDivElement> {
4
+ /**
5
+ * 자리표시 모양
6
+ * - `rect`: 사각형. 폭은 부모를, 높이는 한 줄 높이를 따른다 — 이미지·카드 영역은 `height` 를 준다
7
+ * - `circle`: 원형(아바타 등)
8
+ * - `text`: 텍스트 한 줄. 부모 타이포의 line-height 를 따르고 세로로 절반만 칠한다
9
+ * - `button`·`input`·`tag`·`checkbox`·`radio`·`switch`: 해당 컴포넌트 기본 size 의 크기·모서리
10
+ */
11
+ type?: SSkeletonType;
12
+ /**
13
+ * 로딩 애니메이션
14
+ * - `wave`: 하이라이트 띠가 왼쪽에서 오른쪽으로 지나간다
15
+ * - `pulse`: 크기가 숨쉬듯 줄었다 커진다. 블록 전체가 움직이므로 아바타처럼 작은 모양에만 쓴다
16
+ * - `fade`: 투명도가 숨쉬듯 바뀐다
17
+ * - `none`: 애니메이션 없음
18
+ *
19
+ * OS 의 동작 줄이기 설정이 켜져 있으면 어떤 값이든 멈춘다.
20
+ */
21
+ animation?: SSkeletonAnimation;
22
+ /** 애니메이션 한 주기 (ms) */
23
+ animationSpeed?: number;
24
+ /** 모서리를 각지게 */
25
+ square?: boolean;
26
+ /** 테두리 */
27
+ bordered?: boolean;
28
+ /** 가로·세로를 한 번에 지정. `width`·`height` 가 있으면 그쪽이 우선한다. 숫자는 px */
29
+ size?: string | number;
30
+ /** 폭. 숫자는 px */
31
+ width?: string | number;
32
+ /** 높이. 숫자는 px */
33
+ height?: string | number;
34
+ }
35
+ /**
36
+ * SSkeleton — 데이터가 오기 전 콘텐츠 자리를 같은 모양으로 채워 두는 자리표시. Quasar QSkeleton 모티브.
37
+ * 장식이라 보조기기에는 숨긴다(`aria-hidden`). 로딩 중이라는 사실은 감싸는 영역에 `aria-busy` 로 알린다.
38
+ */
39
+ export declare const SSkeleton: import("react").ForwardRefExoticComponent<SSkeletonProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,2 @@
1
+ export { SSkeleton, type SSkeletonProps } from './SSkeleton';
2
+ export { SKELETON_TYPES, SKELETON_ANIMATIONS, SKELETON_TYPE_CONFIG, type SSkeletonType, type SSkeletonAnimation, } from './skeleton.config';
@@ -0,0 +1,22 @@
1
+ export declare const SKELETON_TYPES: readonly ["rect", "circle", "text", "button", "input", "tag", "checkbox", "radio", "switch"];
2
+ export type SSkeletonType = (typeof SKELETON_TYPES)[number];
3
+ export declare const SKELETON_ANIMATIONS: readonly ["wave", "pulse", "fade", "none"];
4
+ export type SSkeletonAnimation = (typeof SKELETON_ANIMATIONS)[number];
5
+ /**
6
+ * type 별 기본 크기·모서리. 값이 없는 축은 내용(공백 한 글자)과 부모 폭을 따른다.
7
+ * DS 모양(button·input…)은 해당 컴포넌트의 **기본 size** 토큰을 그대로 가리켜
8
+ * 토큰이 바뀌어도 실제 컴포넌트와 어긋나지 않는다. 폭은 토큰이 없어 Quasar 기본값을 따른다.
9
+ */
10
+ export declare const SKELETON_TYPE_CONFIG: Record<SSkeletonType, {
11
+ width?: string;
12
+ height?: string;
13
+ radius: string;
14
+ }>;
15
+ export declare const SKELETON_COLORS: {
16
+ /** Quasar rgba(0,0,0,.12) ≈ 흰 바탕 위 #E1E1E1 */
17
+ bg: string;
18
+ /** Quasar rgba(0,0,0,.05) 테두리 — 배경보다 한 단계 짙게 */
19
+ border: string;
20
+ /** Quasar rgba(255,255,255,.5) 하이라이트 띠 */
21
+ wave: string;
22
+ };
@@ -12,7 +12,7 @@
12
12
  | `defaultValue?` | `number` | — | 첫 패널 초기 크기. uncontrolled. 기본은 '%' 면 50, 'px' 면 240 |
13
13
  | `unit?` | `SSplitterUnit` | `'%'` | 모델·limits 를 읽는 단위 |
14
14
  | `limits?` | `readonly [number, number]` | — | [최소, 최대]. 생략하면 '%' 는 [10, 90], 'px' 는 [50, Infinity] |
15
- | `emitImmediately?` | `boolean` | `false` | 드래그하는 동안에도 onValueChange 를 계속 보낸다 |
15
+ | `updateWhileDragging?` | `boolean` | `false` | 드래그하는 동안에도 `onValueChange` 를 계속 보낸다. 기본은 놓는 순간 한 번만 — 미리보기는 컴포넌트가 내부에서 그리므로, 값을 저장하는 쪽이 프레임마다 불릴 이유가 없다. 패널 크기에 맞춰 밖의 무언가를 실시간으로 다시 그려야 할 때만 켠다. |
16
16
  | `vertical?` | `boolean` | `false` | true면 패널을 위아래로 쌓는다 (Quasar q-splitter 의 horizontal 에 해당) |
17
17
  | `disabled?` | `boolean` | `false` | true면 크기를 바꿀 수 없다. 커서도 구분선도 나오지 않는다 |
18
18
  | `dividerClassName?` | `string` | — | 구분선에 얹을 클래스 |
@@ -23,5 +23,20 @@
23
23
 
24
24
  | Event | Type | Description |
25
25
  |-------|------|-------------|
26
- | `onValueChange` | `(value: number) => void` | 크기가 확정될 때. emitImmediately 가 아니면 드래그를 놓는 순간 한 번만 온다 |
26
+ | `onValueChange` | `(value: number) => void` | 크기가 확정될 때. `updateWhileDragging` 이 아니면 드래그를 놓는 순간 한 번만 온다 |
27
+
28
+ ## Types
29
+
30
+ ### SSplitterUnit
31
+
32
+ ```ts
33
+ /** 모델·limits 를 읽는 단위. Quasar QSplitter 의 `unit` 과 같다. */
34
+ export type SSplitterUnit = (typeof SSPLITTER_UNITS)[number];
35
+ ```
36
+
37
+ ### SSPLITTER_UNITS
38
+
39
+ ```ts
40
+ export const SSPLITTER_UNITS = ['%', 'px'] as const;
41
+ ```
27
42
 
@@ -7,14 +7,18 @@ export interface SSplitterProps extends Omit<HTMLAttributes<HTMLDivElement>, 'de
7
7
  value?: number;
8
8
  /** 첫 패널 초기 크기. uncontrolled. 기본은 '%' 면 50, 'px' 면 240 */
9
9
  defaultValue?: number;
10
- /** 크기가 확정될 때. emitImmediately 가 아니면 드래그를 놓는 순간 한 번만 온다 */
10
+ /** 크기가 확정될 때. `updateWhileDragging` 이 아니면 드래그를 놓는 순간 한 번만 온다 */
11
11
  onValueChange?: (value: number) => void;
12
12
  /** 모델·limits 를 읽는 단위 */
13
13
  unit?: SSplitterUnit;
14
14
  /** [최소, 최대]. 생략하면 '%' 는 [10, 90], 'px' 는 [50, Infinity] */
15
15
  limits?: readonly [number, number];
16
- /** 드래그하는 동안에도 onValueChange 를 계속 보낸다 */
17
- emitImmediately?: boolean;
16
+ /**
17
+ * 드래그하는 동안에도 `onValueChange` 를 계속 보낸다. 기본은 놓는 순간 한 번만 —
18
+ * 미리보기는 컴포넌트가 내부에서 그리므로, 값을 저장하는 쪽이 프레임마다 불릴 이유가 없다.
19
+ * 패널 크기에 맞춰 밖의 무언가를 실시간으로 다시 그려야 할 때만 켠다.
20
+ */
21
+ updateWhileDragging?: boolean;
18
22
  /** true면 패널을 위아래로 쌓는다 (Quasar q-splitter 의 horizontal 에 해당) */
19
23
  vertical?: boolean;
20
24
  /** true면 크기를 바꿀 수 없다. 커서도 구분선도 나오지 않는다 */
@@ -30,6 +30,32 @@
30
30
  | `showItemTooltip` | `() => void` | error 아이템 중 첫 번째에 툴팁을 연다. error 아이템이 없으면 아무 일도 일어나지 않는다. |
31
31
  | `hideItemTooltip` | `() => void` | 열려있는 커스텀 툴팁을 닫는다. 활성 단계(value prop)가 바뀌면 별도 호출 없이도 자동으로 닫힌다. |
32
32
 
33
+ ## Types
34
+
35
+ ### SStepperItem
36
+
37
+ ```ts
38
+ export type SStepperItem = {
39
+ label: string;
40
+ value?: string;
41
+ group?: string;
42
+ completed?: boolean;
43
+ error?: boolean;
44
+ };
45
+ ```
46
+
47
+ ### SStepperSize
48
+
49
+ ```ts
50
+ export type SStepperSize = (typeof STEPPER_SIZES)[number];
51
+ ```
52
+
53
+ ### STEPPER_SIZES
54
+
55
+ ```ts
56
+ export const STEPPER_SIZES = ['sm', 'lg'] as const;
57
+ ```
58
+
33
59
  ## Dependencies
34
60
 
35
61
  ### Depends on
@@ -11,7 +11,6 @@
11
11
  | `value?` | `boolean` | `false` | on/off 상태 |
12
12
  | `leftLabel?` | `string` | — | 스위치 좌측 라벨 |
13
13
  | `rightLabel?` | `string` | — | 스위치 우측 라벨 |
14
- | `label?` | `string` | — | |
15
14
  | `disabled?` | `boolean` | `false` | 비활성 |
16
15
  | `className?` | `string` | — | |
17
16
  | `style?` | `CSSProperties` | — | |
@@ -22,3 +21,16 @@
22
21
  |-------|------|-------------|
23
22
  | `onValueChange` | `(value: boolean) => void` | 변경 (sdUpdate) |
24
23
 
24
+ ## Dependencies
25
+
26
+ ### Used by
27
+
28
+ - [SKeyValueTable](../SKeyValueTable)
29
+
30
+ ### Graph
31
+
32
+ ```mermaid
33
+ graph TD;
34
+ SKeyValueTable --> SSwitch
35
+ style SSwitch fill:#f9f,stroke:#333,stroke-width:4px
36
+ ```
@@ -6,8 +6,6 @@ export interface SSwitchProps {
6
6
  leftLabel?: string;
7
7
  /** 스위치 우측 라벨 */
8
8
  rightLabel?: string;
9
- /** @deprecated `rightLabel` 사용. 우측 라벨(하위호환) */
10
- label?: string;
11
9
  /** 비활성 */
12
10
  disabled?: boolean;
13
11
  /** 변경 (sdUpdate) */
@@ -16,4 +14,4 @@ export interface SSwitchProps {
16
14
  style?: CSSProperties;
17
15
  }
18
16
  /** SSwitch — sd-switch 포팅 (Radix SSwitch). 32×20 트랙, 16 노브. 좌/우 라벨 지원. */
19
- export declare function SSwitch({ value, leftLabel, rightLabel, label, disabled, onValueChange, className, style, }: SSwitchProps): import("react").JSX.Element;
17
+ export declare function SSwitch({ value, leftLabel, rightLabel, disabled, onValueChange, className, style, }: SSwitchProps): import("react").JSX.Element;