@nexus-cross/design-system 1.0.4-beta.1 → 1.0.4

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 (327) hide show
  1. package/cursor-rules/nexus-project-setup.mdc +167 -145
  2. package/cursor-rules/nexus-ui-api.mdc +894 -311
  3. package/cursor-rules/nexus-ui-components.mdc +179 -91
  4. package/dist/accordion.js +7 -7
  5. package/dist/accordion.mjs +2 -2
  6. package/dist/alert.d.mts +17 -0
  7. package/dist/alert.d.ts +17 -0
  8. package/dist/alert.js +16 -0
  9. package/dist/alert.mjs +3 -0
  10. package/dist/avatar.js +4 -4
  11. package/dist/avatar.mjs +2 -2
  12. package/dist/badge.d.mts +18 -0
  13. package/dist/badge.d.ts +18 -0
  14. package/dist/badge.js +16 -0
  15. package/dist/badge.mjs +3 -0
  16. package/dist/breadcrumb.d.mts +15 -0
  17. package/dist/breadcrumb.d.ts +15 -0
  18. package/dist/breadcrumb.js +12 -0
  19. package/dist/breadcrumb.mjs +3 -0
  20. package/dist/button.js +4 -4
  21. package/dist/button.mjs +2 -2
  22. package/dist/carousel.js +8 -8
  23. package/dist/carousel.mjs +2 -2
  24. package/dist/checkbox.js +5 -5
  25. package/dist/checkbox.mjs +2 -2
  26. package/dist/chip.d.mts +1 -1
  27. package/dist/chip.d.ts +1 -1
  28. package/dist/chip.js +4 -4
  29. package/dist/chip.mjs +2 -2
  30. package/dist/chunks/{chunk-5TBXVD56.js → chunk-2MC7XJSE.js} +16 -6
  31. package/dist/chunks/chunk-2N2EPBO4.js +120 -0
  32. package/dist/chunks/{chunk-BEA727LO.mjs → chunk-2RPRCWKV.mjs} +57 -26
  33. package/dist/chunks/chunk-2UPGFY6E.mjs +76 -0
  34. package/dist/chunks/{chunk-5I2VRWWU.js → chunk-2ZXDXO4I.js} +32 -38
  35. package/dist/chunks/{chunk-RLP3U52D.mjs → chunk-33UFQJIO.mjs} +22 -40
  36. package/dist/chunks/{chunk-AOVU67NI.mjs → chunk-3HHJORN7.mjs} +23 -25
  37. package/dist/chunks/{chunk-TWHDXCKR.js → chunk-3PCNRCTB.js} +8 -8
  38. package/dist/chunks/chunk-3ZWN66YH.js +53 -0
  39. package/dist/chunks/chunk-4ENXP7WH.js +224 -0
  40. package/dist/chunks/{chunk-YEGPB7A7.js → chunk-5JHJNN2K.js} +4 -4
  41. package/dist/chunks/chunk-5PQ3UCKF.js +99 -0
  42. package/dist/chunks/chunk-6BWOKTVQ.mjs +87 -0
  43. package/dist/chunks/chunk-6DBRL6NA.mjs +81 -0
  44. package/dist/chunks/{chunk-C3E7CSKG.mjs → chunk-6FMDO6TT.mjs} +7 -8
  45. package/dist/chunks/{chunk-76CY4STF.js → chunk-7G65JBTN.js} +34 -66
  46. package/dist/chunks/{chunk-GMIGQ5VP.mjs → chunk-ADO7PDLY.mjs} +15 -35
  47. package/dist/chunks/{chunk-ZINDMFOI.js → chunk-AFSEYJZT.js} +24 -32
  48. package/dist/chunks/chunk-B5O6W3Z4.mjs +73 -0
  49. package/dist/chunks/{chunk-6FHK6CBR.js → chunk-B6G5TJRO.js} +7 -8
  50. package/dist/chunks/chunk-BBLBTOP4.js +205 -0
  51. package/dist/chunks/{chunk-5XVEYVYA.js → chunk-BLGQHR3M.js} +5 -8
  52. package/dist/chunks/{chunk-LVTD2UQN.mjs → chunk-BPUQ2CO2.mjs} +2 -2
  53. package/dist/chunks/{chunk-AWBGWBFS.js → chunk-BSZ2LN6E.js} +21 -27
  54. package/dist/chunks/chunk-C2DSAJTL.js +109 -0
  55. package/dist/chunks/{chunk-KWPIEHD2.mjs → chunk-CA3SOLI3.mjs} +1 -1
  56. package/dist/chunks/{chunk-MPKRXMCJ.js → chunk-CSJDDREF.js} +7 -10
  57. package/dist/chunks/chunk-CUTMLBC3.mjs +86 -0
  58. package/dist/chunks/chunk-CV4GMFWP.js +174 -0
  59. package/dist/chunks/{chunk-SXLMI7CZ.mjs → chunk-CWMLTXOH.mjs} +162 -234
  60. package/dist/chunks/chunk-CZC76ZD5.js +10 -0
  61. package/dist/chunks/chunk-DICN6GKE.js +99 -0
  62. package/dist/chunks/{chunk-TLTEUIBY.js → chunk-DLFV7ZZV.js} +4 -4
  63. package/dist/chunks/chunk-DO6VK2QQ.mjs +108 -0
  64. package/dist/chunks/chunk-DYPPVXQF.js +143 -0
  65. package/dist/chunks/{chunk-GQP7IXH2.mjs → chunk-ECVAVQUY.mjs} +23 -31
  66. package/dist/chunks/{chunk-3CHRUKSJ.mjs → chunk-EHAUUUWB.mjs} +3 -3
  67. package/dist/chunks/chunk-EJY7IVSK.mjs +31 -0
  68. package/dist/chunks/{chunk-G4XJG7XI.js → chunk-EVOOTSY5.js} +3 -10
  69. package/dist/chunks/chunk-FUIBYZZ4.mjs +98 -0
  70. package/dist/chunks/{chunk-VH5FF6DZ.mjs → chunk-GX6GSWX3.mjs} +7 -7
  71. package/dist/chunks/chunk-H2G5FMRN.mjs +75 -0
  72. package/dist/chunks/chunk-H2V7RHYV.mjs +120 -0
  73. package/dist/chunks/{chunk-DDMZSNTG.js → chunk-HFBTS42N.js} +168 -240
  74. package/dist/chunks/{chunk-OGUTGD4J.mjs → chunk-HNLI646G.mjs} +71 -39
  75. package/dist/chunks/{chunk-C6H2UNOX.js → chunk-IE4DGLMH.js} +13 -21
  76. package/dist/chunks/{chunk-U76LT5GE.js → chunk-IOSIQLZL.js} +2 -2
  77. package/dist/chunks/{chunk-ZCMKIB5U.js → chunk-J5ZKGPBY.js} +33 -41
  78. package/dist/chunks/{chunk-JUZHWKGS.mjs → chunk-K2TBLM3F.mjs} +6 -12
  79. package/dist/chunks/chunk-KZ7S5VN2.js +7 -0
  80. package/dist/chunks/{chunk-FHPHDK3O.mjs → chunk-LI7SFBUQ.mjs} +4 -4
  81. package/dist/chunks/{chunk-7OEK2KX3.mjs → chunk-LMMON5AU.mjs} +4 -4
  82. package/dist/chunks/{chunk-6DZVNFVY.js → chunk-LOQXCHKL.js} +4 -12
  83. package/dist/chunks/{chunk-377KBJQG.js → chunk-MA2VCCIY.js} +19 -22
  84. package/dist/chunks/chunk-MCKOWMLS.mjs +8 -0
  85. package/dist/chunks/chunk-MMCA33FW.mjs +85 -0
  86. package/dist/chunks/{chunk-TR5JBBEA.mjs → chunk-MRRKW5QN.mjs} +31 -39
  87. package/dist/chunks/{chunk-76K6KXCT.js → chunk-NFIPQZ4O.js} +1 -1
  88. package/dist/chunks/chunk-NZHK76R3.js +109 -0
  89. package/dist/chunks/{chunk-I7YJB2F5.js → chunk-OMN5YQCE.js} +3 -3
  90. package/dist/chunks/{chunk-B7UU3FSS.mjs → chunk-P2T72N62.mjs} +4 -7
  91. package/dist/chunks/chunk-P3DZKXG4.js +116 -0
  92. package/dist/chunks/chunk-P73MEU7N.mjs +150 -0
  93. package/dist/chunks/chunk-PDJTSQOC.js +59 -0
  94. package/dist/chunks/{chunk-RXVYL4AU.js → chunk-PEIEVKD5.js} +7 -13
  95. package/dist/chunks/chunk-PI464222.mjs +5 -0
  96. package/dist/chunks/{chunk-IJG7J2VU.mjs → chunk-QZ4QR3XV.mjs} +30 -36
  97. package/dist/chunks/{chunk-6NTASYZO.js → chunk-RS3SBY3I.js} +61 -30
  98. package/dist/chunks/{chunk-AKIBUO5A.mjs → chunk-RX5UKRYK.mjs} +19 -26
  99. package/dist/chunks/chunk-S2GMEC43.js +109 -0
  100. package/dist/chunks/{chunk-WJ2OVQD3.mjs → chunk-SGNRVYYQ.mjs} +19 -25
  101. package/dist/chunks/{chunk-IB5UCYQY.mjs → chunk-SJMCPSVH.mjs} +15 -5
  102. package/dist/chunks/chunk-UKRU46PH.mjs +182 -0
  103. package/dist/chunks/{chunk-WNFJ4NJN.mjs → chunk-ULGYTBCT.mjs} +3 -11
  104. package/dist/chunks/{chunk-TXYYBJBQ.js → chunk-VGO4Z2WH.js} +73 -41
  105. package/dist/chunks/{chunk-LBKBCI2K.mjs → chunk-VIGRCJAE.mjs} +3 -10
  106. package/dist/chunks/chunk-VVXQZ4XH.mjs +93 -0
  107. package/dist/chunks/{chunk-Z7OKV6NW.mjs → chunk-W4GG5A7K.mjs} +12 -20
  108. package/dist/chunks/chunk-WGGBE4ZD.mjs +201 -0
  109. package/dist/chunks/{chunk-WSWD5ZUJ.js → chunk-WKCXACMZ.js} +20 -27
  110. package/dist/chunks/{chunk-GSLIY6WW.js → chunk-X2SHTVZQ.js} +17 -37
  111. package/dist/chunks/chunk-X3CTJ7TD.js +108 -0
  112. package/dist/chunks/{chunk-U6KOUYWX.mjs → chunk-XG6QG65W.mjs} +7 -10
  113. package/dist/chunks/chunk-XGIJZ3NZ.js +160 -0
  114. package/dist/chunks/chunk-YB5ZKHVB.js +64 -0
  115. package/dist/chunks/{chunk-Q7H6LCNN.js → chunk-YCG4FZC3.js} +23 -25
  116. package/dist/chunks/{chunk-JZ3PWHKS.mjs → chunk-YLO4UKSC.mjs} +18 -21
  117. package/dist/chunks/chunk-YO5MSDPX.mjs +36 -0
  118. package/dist/chunks/{chunk-Q2TMXHPK.js → chunk-YZV6FWE7.js} +25 -43
  119. package/dist/chunks/chunk-ZI4LN2B2.js +96 -0
  120. package/dist/chunks/chunk-ZU4AWAFT.mjs +137 -0
  121. package/dist/chunks/chunk-ZWSIIGA3.mjs +58 -0
  122. package/dist/countdown.js +4 -4
  123. package/dist/countdown.mjs +2 -2
  124. package/dist/counter.js +2 -2
  125. package/dist/counter.mjs +1 -1
  126. package/dist/data-list.js +5 -5
  127. package/dist/data-list.mjs +4 -4
  128. package/dist/date-picker.d.mts +17 -0
  129. package/dist/date-picker.d.ts +17 -0
  130. package/dist/date-picker.js +12 -0
  131. package/dist/date-picker.mjs +3 -0
  132. package/dist/divider.js +4 -4
  133. package/dist/divider.mjs +2 -2
  134. package/dist/drawer.d.mts +1 -1
  135. package/dist/drawer.d.ts +1 -1
  136. package/dist/drawer.js +11 -11
  137. package/dist/drawer.mjs +2 -2
  138. package/dist/dropdown-menu.d.mts +30 -0
  139. package/dist/dropdown-menu.d.ts +30 -0
  140. package/dist/dropdown-menu.js +32 -0
  141. package/dist/dropdown-menu.mjs +3 -0
  142. package/dist/ellipsis.js +3 -3
  143. package/dist/ellipsis.mjs +2 -2
  144. package/dist/empty-state.d.mts +16 -0
  145. package/dist/empty-state.d.ts +16 -0
  146. package/dist/empty-state.js +16 -0
  147. package/dist/empty-state.mjs +3 -0
  148. package/dist/error-boundary.d.mts +1 -1
  149. package/dist/error-boundary.d.ts +1 -1
  150. package/dist/error-boundary.js +2 -2
  151. package/dist/error-boundary.mjs +1 -1
  152. package/dist/index.d.mts +15 -0
  153. package/dist/index.d.ts +15 -0
  154. package/dist/index.js +322 -200
  155. package/dist/index.mjs +49 -35
  156. package/dist/infinite-scroll.js +3 -3
  157. package/dist/infinite-scroll.mjs +2 -2
  158. package/dist/marquee.js +3 -3
  159. package/dist/marquee.mjs +2 -2
  160. package/dist/modal/index.js +13 -13
  161. package/dist/modal/index.mjs +4 -4
  162. package/dist/number-input.d.mts +1 -1
  163. package/dist/number-input.d.ts +1 -1
  164. package/dist/number-input.js +5 -5
  165. package/dist/number-input.mjs +2 -2
  166. package/dist/nx-image.d.mts +13 -0
  167. package/dist/nx-image.d.ts +13 -0
  168. package/dist/nx-image.js +12 -0
  169. package/dist/nx-image.mjs +3 -0
  170. package/dist/pagination.d.mts +1 -0
  171. package/dist/pagination.d.ts +1 -0
  172. package/dist/pagination.js +5 -5
  173. package/dist/pagination.mjs +2 -2
  174. package/dist/popover.d.mts +1 -1
  175. package/dist/popover.d.ts +1 -1
  176. package/dist/popover.js +8 -8
  177. package/dist/popover.mjs +2 -2
  178. package/dist/price-input.d.mts +36 -0
  179. package/dist/price-input.d.ts +36 -0
  180. package/dist/price-input.js +16 -0
  181. package/dist/price-input.mjs +3 -0
  182. package/dist/progress.d.mts +18 -0
  183. package/dist/progress.d.ts +18 -0
  184. package/dist/progress.js +16 -0
  185. package/dist/progress.mjs +3 -0
  186. package/dist/radio-group.js +6 -6
  187. package/dist/radio-group.mjs +2 -2
  188. package/dist/schemas/_all.json +2356 -404
  189. package/dist/schemas/accordion.json +14 -11
  190. package/dist/schemas/alert.json +49 -0
  191. package/dist/schemas/avatar.json +13 -7
  192. package/dist/schemas/badge.json +76 -0
  193. package/dist/schemas/breadcrumb.json +47 -0
  194. package/dist/schemas/button.json +27 -9
  195. package/dist/schemas/carousel.json +10 -4
  196. package/dist/schemas/carouselButton.json +20 -0
  197. package/dist/schemas/carouselDots.json +17 -0
  198. package/dist/schemas/carouselSlide.json +20 -0
  199. package/dist/schemas/checkBox.json +33 -8
  200. package/dist/schemas/chip.json +15 -6
  201. package/dist/schemas/clientOnly.json +19 -0
  202. package/dist/schemas/countdown.json +10 -7
  203. package/dist/schemas/counter.json +15 -9
  204. package/dist/schemas/dataList.json +10 -10
  205. package/dist/schemas/datePicker.json +56 -0
  206. package/dist/schemas/divider.json +8 -5
  207. package/dist/schemas/drawer.json +24 -2
  208. package/dist/schemas/drawerClose.json +24 -0
  209. package/dist/schemas/drawerContent.json +9 -6
  210. package/dist/schemas/drawerDescription.json +20 -0
  211. package/dist/schemas/drawerTitle.json +20 -0
  212. package/dist/schemas/drawerTrigger.json +24 -0
  213. package/dist/schemas/dropdownMenu.json +83 -0
  214. package/dist/schemas/ellipsis.json +17 -7
  215. package/dist/schemas/emptyState.json +44 -0
  216. package/dist/schemas/errorBoundary.json +22 -0
  217. package/dist/schemas/infiniteScroll.json +18 -9
  218. package/dist/schemas/marquee.json +12 -6
  219. package/dist/schemas/modalCall.json +81 -3
  220. package/dist/schemas/modalTemplate.json +67 -14
  221. package/dist/schemas/numberInput.json +42 -12
  222. package/dist/schemas/nxImage.json +56 -0
  223. package/dist/schemas/pagination.json +13 -6
  224. package/dist/schemas/popover.json +18 -9
  225. package/dist/schemas/priceInput.json +104 -0
  226. package/dist/schemas/progress.json +63 -0
  227. package/dist/schemas/radioGroup.json +19 -9
  228. package/dist/schemas/radioItem.json +12 -5
  229. package/dist/schemas/select.json +15 -9
  230. package/dist/schemas/selectItem.json +7 -4
  231. package/dist/schemas/skeleton.json +12 -6
  232. package/dist/schemas/slider.json +78 -0
  233. package/dist/schemas/spinner.json +11 -4
  234. package/dist/schemas/stepper.json +73 -0
  235. package/dist/schemas/switch.json +23 -5
  236. package/dist/schemas/tab.json +17 -14
  237. package/dist/schemas/table.json +75 -0
  238. package/dist/schemas/tableRow.json +32 -0
  239. package/dist/schemas/tagInput.json +70 -0
  240. package/dist/schemas/tdColumn.json +107 -0
  241. package/dist/schemas/textArea.json +72 -7
  242. package/dist/schemas/textInput.json +72 -10
  243. package/dist/schemas/themeProvider.json +65 -0
  244. package/dist/schemas/toastOptions.json +81 -0
  245. package/dist/schemas/toaster.json +76 -0
  246. package/dist/schemas/toggleGroup.json +88 -0
  247. package/dist/schemas/tooltip.json +12 -9
  248. package/dist/schemas/virtualGrid.json +22 -11
  249. package/dist/schemas/virtualList.json +14 -8
  250. package/dist/schemas.d.mts +1360 -81
  251. package/dist/schemas.d.ts +1360 -81
  252. package/dist/schemas.js +725 -273
  253. package/dist/schemas.mjs +698 -273
  254. package/dist/select.js +6 -6
  255. package/dist/select.mjs +2 -2
  256. package/dist/skeleton.js +3 -3
  257. package/dist/skeleton.mjs +2 -2
  258. package/dist/slider.d.mts +20 -0
  259. package/dist/slider.d.ts +20 -0
  260. package/dist/slider.js +16 -0
  261. package/dist/slider.mjs +3 -0
  262. package/dist/spinner.js +3 -3
  263. package/dist/spinner.mjs +2 -2
  264. package/dist/stepper.d.mts +20 -0
  265. package/dist/stepper.d.ts +20 -0
  266. package/dist/stepper.js +16 -0
  267. package/dist/stepper.mjs +3 -0
  268. package/dist/styles/layer.d.mts +3 -0
  269. package/dist/styles/layer.d.ts +3 -0
  270. package/dist/styles/layer.js +18 -0
  271. package/dist/styles/layer.mjs +16 -0
  272. package/dist/styles.css +3872 -2
  273. package/dist/styles.js +2 -5
  274. package/dist/styles.layered.css +3875 -0
  275. package/dist/styles.mjs +1 -4
  276. package/dist/switch.js +4 -4
  277. package/dist/switch.mjs +2 -2
  278. package/dist/tab.js +5 -5
  279. package/dist/tab.mjs +2 -2
  280. package/dist/table.d.mts +2 -2
  281. package/dist/table.d.ts +2 -2
  282. package/dist/table.js +9 -9
  283. package/dist/table.mjs +3 -3
  284. package/dist/tag-input.d.mts +21 -0
  285. package/dist/tag-input.d.ts +21 -0
  286. package/dist/tag-input.js +16 -0
  287. package/dist/tag-input.mjs +3 -0
  288. package/dist/text-area.d.mts +5 -1
  289. package/dist/text-area.d.ts +5 -1
  290. package/dist/text-area.js +4 -4
  291. package/dist/text-area.mjs +2 -2
  292. package/dist/text-input.d.mts +5 -1
  293. package/dist/text-input.d.ts +5 -1
  294. package/dist/text-input.js +4 -4
  295. package/dist/text-input.mjs +2 -2
  296. package/dist/toast.js +5 -5
  297. package/dist/toast.mjs +2 -2
  298. package/dist/toggle-group.d.mts +36 -0
  299. package/dist/toggle-group.d.ts +36 -0
  300. package/dist/toggle-group.js +16 -0
  301. package/dist/toggle-group.mjs +3 -0
  302. package/dist/tooltip.js +5 -5
  303. package/dist/tooltip.mjs +2 -2
  304. package/dist/utils/cn.d.mts +0 -10
  305. package/dist/utils/cn.d.ts +0 -10
  306. package/dist/utils/cn.js +2 -2
  307. package/dist/utils/cn.mjs +1 -1
  308. package/dist/virtual-scroll.js +4 -4
  309. package/dist/virtual-scroll.mjs +2 -2
  310. package/package.json +90 -17
  311. package/scripts/setup-cursor-rules.cjs +6 -6
  312. package/dist/chunks/chunk-7MT3QYE6.js +0 -92
  313. package/dist/chunks/chunk-FA2OPP3U.mjs +0 -140
  314. package/dist/chunks/chunk-FKZI2HTI.js +0 -104
  315. package/dist/chunks/chunk-NCQDOPBR.mjs +0 -86
  316. package/dist/chunks/chunk-NTN55ZIX.mjs +0 -113
  317. package/dist/chunks/chunk-Q7GQVAYY.js +0 -88
  318. package/dist/chunks/chunk-QJNQCLMV.js +0 -25
  319. package/dist/chunks/chunk-UDQXLI5Y.mjs +0 -81
  320. package/dist/chunks/chunk-UR6JOKVB.mjs +0 -65
  321. package/dist/chunks/chunk-WVIEIRK2.js +0 -136
  322. package/dist/chunks/chunk-XALPBGSC.mjs +0 -23
  323. package/dist/schemas/typography.json +0 -70
  324. package/dist/typography.d.mts +0 -19
  325. package/dist/typography.d.ts +0 -19
  326. package/dist/typography.js +0 -102
  327. package/dist/typography.mjs +0 -79
@@ -15,17 +15,17 @@
15
15
  "properties": {
16
16
  "id": {
17
17
  "type": "string",
18
- "description": "고유 ID"
18
+ "description": "Unique ID"
19
19
  },
20
20
  "trigger": {
21
- "description": "트리거 내용 (ReactNode)"
21
+ "description": "Trigger content (ReactNode)"
22
22
  },
23
23
  "content": {
24
- "description": "펼침 내용 (ReactNode)"
24
+ "description": "Expandable content (ReactNode)"
25
25
  },
26
26
  "disabled": {
27
27
  "type": "boolean",
28
- "description": "비활성"
28
+ "description": "Disabled"
29
29
  },
30
30
  "className": {
31
31
  "type": "string"
@@ -42,7 +42,7 @@
42
42
  ],
43
43
  "additionalProperties": false
44
44
  },
45
- "description": "아코디언 항목 배열 (필수)"
45
+ "description": "Accordion item array (required)"
46
46
  },
47
47
  "type": {
48
48
  "type": "string",
@@ -51,12 +51,12 @@
51
51
  "multiple"
52
52
  ],
53
53
  "default": "single",
54
- "description": "단일/다중 열기"
54
+ "description": "Single/multiple open mode"
55
55
  },
56
56
  "collapsible": {
57
57
  "type": "boolean",
58
58
  "default": true,
59
- "description": "전부 접기 가능"
59
+ "description": "Allow collapsing all"
60
60
  },
61
61
  "value": {
62
62
  "anyOf": [
@@ -70,7 +70,7 @@
70
70
  }
71
71
  }
72
72
  ],
73
- "description": "제어 모드"
73
+ "description": "Controlled mode"
74
74
  },
75
75
  "defaultValue": {
76
76
  "anyOf": [
@@ -84,18 +84,70 @@
84
84
  }
85
85
  }
86
86
  ],
87
- "description": "비제어 초기값"
87
+ "description": "Uncontrolled initial value"
88
+ },
89
+ "onValueChange": {
90
+ "description": "Open item change callback (value: string | string[]) => void"
88
91
  },
89
92
  "className": {
90
93
  "type": "string",
91
- "description": "Root 스타일"
94
+ "description": "Root style"
92
95
  }
93
96
  },
94
97
  "required": [
95
98
  "items"
96
99
  ],
97
100
  "additionalProperties": false,
98
- "description": "아코디언. items 배열 방식과 컴포저블 방식 모두 지원."
101
+ "description": "Accordion. Supports both items array and composable patterns."
102
+ }
103
+ },
104
+ "$schema": "http://json-schema.org/draft-07/schema#"
105
+ },
106
+ "alert": {
107
+ "$ref": "#/definitions/alertPropsSchema",
108
+ "definitions": {
109
+ "alertPropsSchema": {
110
+ "type": "object",
111
+ "properties": {
112
+ "variant": {
113
+ "type": "string",
114
+ "enum": [
115
+ "info",
116
+ "success",
117
+ "warning",
118
+ "danger"
119
+ ],
120
+ "default": "info",
121
+ "description": "Alert type / color"
122
+ },
123
+ "title": {
124
+ "type": "string",
125
+ "description": "Alert title (bold)"
126
+ },
127
+ "children": {
128
+ "description": "Alert description (ReactNode)"
129
+ },
130
+ "icon": {
131
+ "description": "Custom icon (ReactNode). Auto icon by variant if omitted"
132
+ },
133
+ "closable": {
134
+ "type": "boolean",
135
+ "default": false,
136
+ "description": "Show close button"
137
+ },
138
+ "onClose": {
139
+ "description": "Close callback () => void"
140
+ },
141
+ "action": {
142
+ "description": "Action area (ReactNode, e.g. Button)"
143
+ },
144
+ "className": {
145
+ "type": "string",
146
+ "description": "Style override"
147
+ }
148
+ },
149
+ "additionalProperties": false,
150
+ "description": "Alert / Banner. Inline notification with icon, title, description."
99
151
  }
100
152
  },
101
153
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -108,14 +160,14 @@
108
160
  "properties": {
109
161
  "src": {
110
162
  "type": "string",
111
- "description": "이미지 URL"
163
+ "description": "Image URL"
112
164
  },
113
165
  "alt": {
114
166
  "type": "string",
115
- "description": "대체 텍스트"
167
+ "description": "Alt text"
116
168
  },
117
169
  "fallback": {
118
- "description": "이미지 로드 실패 표시 (ReactNode)"
170
+ "description": "Displayed on image load failure (ReactNode)"
119
171
  },
120
172
  "size": {
121
173
  "type": "string",
@@ -127,7 +179,7 @@
127
179
  "xl"
128
180
  ],
129
181
  "default": "md",
130
- "description": "크기"
182
+ "description": "Size"
131
183
  },
132
184
  "shape": {
133
185
  "type": "string",
@@ -136,15 +188,144 @@
136
188
  "square"
137
189
  ],
138
190
  "default": "circle",
139
- "description": "형태"
191
+ "description": "Shape"
192
+ },
193
+ "children": {
194
+ "description": "Custom image element (e.g. Next.js Image)"
195
+ },
196
+ "onImageError": {
197
+ "description": "Image load error callback () => void"
198
+ },
199
+ "className": {
200
+ "type": "string",
201
+ "description": "Style override"
202
+ }
203
+ },
204
+ "additionalProperties": false,
205
+ "description": "Avatar. Supports image, fallback text, and children."
206
+ }
207
+ },
208
+ "$schema": "http://json-schema.org/draft-07/schema#"
209
+ },
210
+ "badge": {
211
+ "$ref": "#/definitions/badgePropsSchema",
212
+ "definitions": {
213
+ "badgePropsSchema": {
214
+ "type": "object",
215
+ "properties": {
216
+ "count": {
217
+ "type": "number",
218
+ "description": "Badge count number"
219
+ },
220
+ "max": {
221
+ "type": "number",
222
+ "default": 99,
223
+ "description": "Max count (shows \"99+\" when exceeded)"
224
+ },
225
+ "dot": {
226
+ "type": "boolean",
227
+ "default": false,
228
+ "description": "Show as dot instead of count"
229
+ },
230
+ "showZero": {
231
+ "type": "boolean",
232
+ "default": false,
233
+ "description": "Show badge when count is 0"
234
+ },
235
+ "variant": {
236
+ "type": "string",
237
+ "enum": [
238
+ "danger",
239
+ "primary",
240
+ "secondary",
241
+ "info",
242
+ "success",
243
+ "warning"
244
+ ],
245
+ "default": "danger",
246
+ "description": "Color variant"
247
+ },
248
+ "size": {
249
+ "type": "string",
250
+ "enum": [
251
+ "sm",
252
+ "md",
253
+ "lg"
254
+ ],
255
+ "default": "md",
256
+ "description": "Size"
257
+ },
258
+ "offset": {
259
+ "type": "array",
260
+ "minItems": 2,
261
+ "maxItems": 2,
262
+ "items": [
263
+ {
264
+ "type": "number"
265
+ },
266
+ {
267
+ "type": "number"
268
+ }
269
+ ],
270
+ "description": "Position offset [x, y] in px"
271
+ },
272
+ "children": {
273
+ "description": "Anchor element to attach badge to (ReactNode)"
274
+ },
275
+ "className": {
276
+ "type": "string",
277
+ "description": "Style override"
278
+ }
279
+ },
280
+ "additionalProperties": false,
281
+ "description": "Badge indicator. Dot or count display. Wraps children when provided."
282
+ }
283
+ },
284
+ "$schema": "http://json-schema.org/draft-07/schema#"
285
+ },
286
+ "breadcrumb": {
287
+ "$ref": "#/definitions/breadcrumbPropsSchema",
288
+ "definitions": {
289
+ "breadcrumbPropsSchema": {
290
+ "type": "object",
291
+ "properties": {
292
+ "items": {
293
+ "type": "array",
294
+ "items": {
295
+ "type": "object",
296
+ "properties": {
297
+ "label": {
298
+ "description": "Display text or element (ReactNode)"
299
+ },
300
+ "href": {
301
+ "type": "string",
302
+ "description": "Link URL"
303
+ },
304
+ "onClick": {
305
+ "description": "Click handler () => void"
306
+ }
307
+ },
308
+ "additionalProperties": false
309
+ },
310
+ "description": "Breadcrumb items array (required)"
311
+ },
312
+ "separator": {
313
+ "description": "Custom separator (ReactNode). Default: chevron"
314
+ },
315
+ "maxItems": {
316
+ "type": "number",
317
+ "description": "Max visible items (collapses middle with \"...\")"
140
318
  },
141
319
  "className": {
142
320
  "type": "string",
143
- "description": "스타일 오버라이드"
321
+ "description": "Style override"
144
322
  }
145
323
  },
324
+ "required": [
325
+ "items"
326
+ ],
146
327
  "additionalProperties": false,
147
- "description": "아바타. 이미지, 폴백 텍스트, children 지원."
328
+ "description": "Breadcrumb navigation. Shows current location path."
148
329
  }
149
330
  },
150
331
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -164,7 +345,7 @@
164
345
  "danger"
165
346
  ],
166
347
  "default": "primary",
167
- "description": "색상 테마 (primary=주요, secondary=보조, normal=중립, danger=위험)"
348
+ "description": "Color theme (primary=main, secondary=sub, normal=neutral, danger=danger)"
168
349
  },
169
350
  "variant": {
170
351
  "type": "string",
@@ -175,7 +356,7 @@
175
356
  "ghost"
176
357
  ],
177
358
  "default": "contained",
178
- "description": "시각 스타일 (contained=채움, outlined=테두리, subtle=연한배경, ghost=투명)"
359
+ "description": "Visual style (contained=filled, outlined=border, subtle=light bg, ghost=transparent)"
179
360
  },
180
361
  "size": {
181
362
  "type": "string",
@@ -186,7 +367,7 @@
186
367
  "sm"
187
368
  ],
188
369
  "default": "md",
189
- "description": "크기"
370
+ "description": "Size"
190
371
  },
191
372
  "radius": {
192
373
  "type": "string",
@@ -195,27 +376,45 @@
195
376
  "circle"
196
377
  ],
197
378
  "default": "default",
198
- "description": "모서리 (default=size radius, circle=pill 형태)"
379
+ "description": "Corner radius (default=size-based radius, circle=pill shape)"
199
380
  },
200
381
  "asChild": {
201
382
  "type": "boolean",
202
- "description": "true 자식 요소로 렌더링 (Slot 패턴)"
383
+ "description": "If true, renders as child element (Slot pattern)"
203
384
  },
204
385
  "detectDoubleClick": {
205
386
  "type": "boolean",
206
- "description": "500ms 더블 클릭 방지"
387
+ "description": "Prevent double click within 500ms"
207
388
  },
208
389
  "disabled": {
209
390
  "type": "boolean",
210
- "description": "비활성 (aria-disabled 자동)"
391
+ "description": "Disabled (auto aria-disabled)"
392
+ },
393
+ "children": {
394
+ "description": "Button content (ReactNode)"
395
+ },
396
+ "onClick": {
397
+ "description": "Click event handler"
398
+ },
399
+ "type": {
400
+ "type": "string",
401
+ "enum": [
402
+ "button",
403
+ "submit",
404
+ "reset"
405
+ ],
406
+ "description": "HTML button type (default: button)"
407
+ },
408
+ "style": {
409
+ "description": "Inline style (CSSProperties)"
211
410
  },
212
411
  "className": {
213
412
  "type": "string",
214
- "description": "스타일 오버라이드"
413
+ "description": "Style override"
215
414
  }
216
415
  },
217
416
  "additionalProperties": false,
218
- "description": "인터랙티브 버튼. semantic(색상)×variant(스타일) 2 시스템. asChild로 렌더링 요소 변경 가능."
417
+ "description": "Interactive button. semantic(color) x variant(style) 2-axis system. Rendering element changeable via asChild."
219
418
  }
220
419
  },
221
420
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -229,19 +428,82 @@
229
428
  "opts": {
230
429
  "type": "object",
231
430
  "additionalProperties": {},
232
- "description": "Embla 옵션 (loop, align )"
431
+ "description": "Embla options (loop, align, etc.)"
233
432
  },
234
433
  "plugins": {
235
434
  "type": "array",
236
- "description": "Embla 플러그인"
435
+ "description": "Embla plugins"
237
436
  },
437
+ "onApiChange": {
438
+ "description": "Embla API change callback (api: CarouselApi) => void"
439
+ },
440
+ "children": {
441
+ "description": "Carousel slides and sub-components (ReactNode)"
442
+ },
443
+ "className": {
444
+ "type": "string",
445
+ "description": "Style override"
446
+ }
447
+ },
448
+ "additionalProperties": false,
449
+ "description": "Carousel. Based on Embla Carousel. Sub-components: CarouselSlide, CarouselPrev, CarouselNext, CarouselDots."
450
+ }
451
+ },
452
+ "$schema": "http://json-schema.org/draft-07/schema#"
453
+ },
454
+ "carouselSlide": {
455
+ "$ref": "#/definitions/carouselSlidePropsSchema",
456
+ "definitions": {
457
+ "carouselSlidePropsSchema": {
458
+ "type": "object",
459
+ "properties": {
460
+ "className": {
461
+ "type": "string",
462
+ "description": "Slide style (use basis-1/3 etc. for multi-slide view)"
463
+ },
464
+ "children": {
465
+ "description": "Slide content (ReactNode, required)"
466
+ }
467
+ },
468
+ "additionalProperties": false,
469
+ "description": "Carousel slide. Used inside Carousel."
470
+ }
471
+ },
472
+ "$schema": "http://json-schema.org/draft-07/schema#"
473
+ },
474
+ "carouselButton": {
475
+ "$ref": "#/definitions/carouselButtonPropsSchema",
476
+ "definitions": {
477
+ "carouselButtonPropsSchema": {
478
+ "type": "object",
479
+ "properties": {
480
+ "className": {
481
+ "type": "string",
482
+ "description": "Button style override"
483
+ },
484
+ "children": {
485
+ "description": "Custom icon (ReactNode, default: chevron)"
486
+ }
487
+ },
488
+ "additionalProperties": false,
489
+ "description": "CarouselPrev / CarouselNext. Previous/next navigation buttons."
490
+ }
491
+ },
492
+ "$schema": "http://json-schema.org/draft-07/schema#"
493
+ },
494
+ "carouselDots": {
495
+ "$ref": "#/definitions/carouselDotsPropsSchema",
496
+ "definitions": {
497
+ "carouselDotsPropsSchema": {
498
+ "type": "object",
499
+ "properties": {
238
500
  "className": {
239
501
  "type": "string",
240
- "description": "스타일 오버라이드"
502
+ "description": "Dot container style"
241
503
  }
242
504
  },
243
505
  "additionalProperties": false,
244
- "description": "캐러셀. Embla Carousel 기반. CarouselSlide, CarouselPrev, CarouselNext, CarouselDots 서브 컴포넌트."
506
+ "description": "CarouselDots. Slide indicator dots."
245
507
  }
246
508
  },
247
509
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -259,7 +521,7 @@
259
521
  "md"
260
522
  ],
261
523
  "default": "md",
262
- "description": "크기"
524
+ "description": "Size"
263
525
  },
264
526
  "shape": {
265
527
  "type": "string",
@@ -268,30 +530,55 @@
268
530
  "round"
269
531
  ],
270
532
  "default": "square",
271
- "description": "형태"
533
+ "description": "Shape"
272
534
  },
273
535
  "checked": {
274
536
  "type": "boolean",
275
- "description": "체크 상태"
537
+ "description": "Checked state"
276
538
  },
277
539
  "indeterminate": {
278
540
  "type": "boolean",
279
- "description": "불확정 상태 (aria-checked=\"mixed\")"
541
+ "description": "Indeterminate state (aria-checked=\"mixed\")"
280
542
  },
281
543
  "disabled": {
282
544
  "type": "boolean",
283
- "description": "비활성"
545
+ "description": "Disabled"
546
+ },
547
+ "readOnly": {
548
+ "type": "boolean",
549
+ "description": "Read-only"
284
550
  },
285
551
  "label": {
286
- "description": "라벨 텍스트 (ReactNode)"
552
+ "description": "Label text (ReactNode)"
553
+ },
554
+ "children": {
555
+ "description": "Label alternative content (ReactNode)"
556
+ },
557
+ "name": {
558
+ "type": "string",
559
+ "description": "Form field name"
560
+ },
561
+ "id": {
562
+ "type": "string",
563
+ "description": "Element ID"
564
+ },
565
+ "value": {
566
+ "type": "string",
567
+ "description": "Value for form submission"
568
+ },
569
+ "onCheckedChange": {
570
+ "description": "Checked state change callback (checked: boolean) => void"
571
+ },
572
+ "onChange": {
573
+ "description": "Native change event handler"
287
574
  },
288
575
  "className": {
289
576
  "type": "string",
290
- "description": "스타일 오버라이드"
577
+ "description": "Style override"
291
578
  }
292
579
  },
293
580
  "additionalProperties": false,
294
- "description": "체크박스. 네이티브 input 기반, square/round 형태 지원."
581
+ "description": "Checkbox. Native input-based, supports square/round shapes."
295
582
  }
296
583
  },
297
584
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -311,7 +598,7 @@
311
598
  "accent"
312
599
  ],
313
600
  "default": "default",
314
- "description": "스타일"
601
+ "description": "Style"
315
602
  },
316
603
  "size": {
317
604
  "type": "string",
@@ -321,23 +608,51 @@
321
608
  "lg"
322
609
  ],
323
610
  "default": "md",
324
- "description": "크기"
611
+ "description": "Size"
325
612
  },
326
613
  "asChild": {
327
614
  "type": "boolean",
328
- "description": "true 자식 요소로 렌더링 (Slot 패턴)"
615
+ "description": "If true, renders as child element (Slot pattern)"
329
616
  },
330
617
  "disabled": {
331
618
  "type": "boolean",
332
- "description": "비활성 (aria-disabled 자동)"
619
+ "description": "Disabled (auto aria-disabled)"
620
+ },
621
+ "children": {
622
+ "description": "Chip content (ReactNode)"
623
+ },
624
+ "onClose": {
625
+ "description": "Close button click callback (e: MouseEvent) => void. Shows X button when provided"
626
+ },
627
+ "onClick": {
628
+ "description": "Click event handler"
333
629
  },
334
630
  "className": {
335
631
  "type": "string",
336
- "description": "스타일 오버라이드"
632
+ "description": "Style override"
633
+ }
634
+ },
635
+ "additionalProperties": false,
636
+ "description": "Chip/tag/badge. Close button displayed via onClose prop."
637
+ }
638
+ },
639
+ "$schema": "http://json-schema.org/draft-07/schema#"
640
+ },
641
+ "clientOnly": {
642
+ "$ref": "#/definitions/clientOnlyPropsSchema",
643
+ "definitions": {
644
+ "clientOnlyPropsSchema": {
645
+ "type": "object",
646
+ "properties": {
647
+ "children": {
648
+ "description": "Element to render only on client (ReactNode, required)"
649
+ },
650
+ "fallback": {
651
+ "description": "Fallback UI during SSR (ReactNode, default: null)"
337
652
  }
338
653
  },
339
654
  "additionalProperties": false,
340
- "description": "칩/태그/뱃지. onClose prop으로 닫기 버튼 표시."
655
+ "description": "Client-only rendering. Prevents hydration mismatch in SSR environments."
341
656
  }
342
657
  },
343
658
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -350,16 +665,16 @@
350
665
  "properties": {
351
666
  "endTimestamp": {
352
667
  "type": "number",
353
- "description": "종료 시각 (Unix ms, 필수)"
668
+ "description": "End time (Unix ms, required)"
354
669
  },
355
670
  "separator": {
356
671
  "default": ":",
357
- "description": "구분자 (ReactNode)"
672
+ "description": "Separator (ReactNode)"
358
673
  },
359
674
  "showDays": {
360
675
  "type": "boolean",
361
676
  "default": true,
362
- "description": " 단위 표시"
677
+ "description": "Show days unit"
363
678
  },
364
679
  "labels": {
365
680
  "type": "object",
@@ -378,21 +693,24 @@
378
693
  }
379
694
  },
380
695
  "additionalProperties": false,
381
- "description": "단위 라벨"
696
+ "description": "Unit labels"
382
697
  },
383
698
  "render": {
384
- "description": "커스텀 렌더 함수"
699
+ "description": "Custom render function"
700
+ },
701
+ "onEnd": {
702
+ "description": "Countdown end callback () => void"
385
703
  },
386
704
  "className": {
387
705
  "type": "string",
388
- "description": "스타일 오버라이드"
706
+ "description": "Style override"
389
707
  }
390
708
  },
391
709
  "required": [
392
710
  "endTimestamp"
393
711
  ],
394
712
  "additionalProperties": false,
395
- "description": "카운트다운 타이머."
713
+ "description": "Countdown timer."
396
714
  }
397
715
  },
398
716
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -405,48 +723,54 @@
405
723
  "properties": {
406
724
  "endValue": {
407
725
  "type": "number",
408
- "description": "목표 (필수)"
726
+ "description": "Target value (required)"
409
727
  },
410
728
  "startValue": {
411
729
  "type": "number",
412
730
  "default": 0,
413
- "description": "시작 "
731
+ "description": "Start value"
414
732
  },
415
733
  "duration": {
416
734
  "type": "number",
417
735
  "default": 1500,
418
- "description": "애니메이션 시간 (ms)"
736
+ "description": "Animation duration (ms)"
419
737
  },
420
738
  "delay": {
421
739
  "type": "number",
422
740
  "default": 0,
423
- "description": "시작 지연 (ms)"
741
+ "description": "Start delay (ms)"
424
742
  },
425
743
  "separator": {
426
744
  "type": "boolean",
427
745
  "default": true,
428
- "description": " 단위 구분"
746
+ "description": "Thousands separator"
429
747
  },
430
748
  "digits": {
431
749
  "type": "number",
432
750
  "default": 0,
433
- "description": "소수 자릿수"
751
+ "description": "Decimal places"
434
752
  },
435
753
  "triggerOnView": {
436
754
  "type": "boolean",
437
755
  "default": false,
438
- "description": "뷰포트 진입 시작"
756
+ "description": "Start on viewport entry"
757
+ },
758
+ "onEnd": {
759
+ "description": "Count complete callback () => void"
760
+ },
761
+ "style": {
762
+ "description": "Inline style (CSSProperties)"
439
763
  },
440
764
  "className": {
441
765
  "type": "string",
442
- "description": "스타일 오버라이드"
766
+ "description": "Style override"
443
767
  }
444
768
  },
445
769
  "required": [
446
770
  "endValue"
447
771
  ],
448
772
  "additionalProperties": false,
449
- "description": "숫자 카운트 애니메이션."
773
+ "description": "Number count animation."
450
774
  }
451
775
  },
452
776
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -466,43 +790,99 @@
466
790
  "type": "null"
467
791
  }
468
792
  ],
469
- "description": "렌더링할 데이터 배열. null이면 로딩 상태 (필수)"
793
+ "description": "Data array to render. null = loading state (required)"
470
794
  },
471
795
  "noDataMessage": {
472
- "description": " 배열일 표시할 메시지 (string | ReactElement)"
796
+ "description": "Message for empty array (string | ReactElement)"
473
797
  },
474
798
  "errorFallback": {
475
- "description": "에러 발생 표시할 fallback (ReactNode)"
799
+ "description": "Fallback on error (ReactNode)"
476
800
  },
477
801
  "loadingElement": {
478
- "description": "로딩 표시할 커스텀 요소 (기본: Spinner)"
802
+ "description": "Custom loading element (default: Spinner)"
479
803
  },
480
804
  "skeletonElement": {
481
- "description": "로딩 표시할 스켈레톤 요소 (ReactElement)"
805
+ "description": "Skeleton element during loading (ReactElement)"
482
806
  },
483
807
  "skeletonCount": {
484
808
  "type": "number",
485
809
  "default": 3,
486
- "description": "스켈레톤 반복 개수"
810
+ "description": "Skeleton repeat count"
487
811
  },
488
812
  "loading": {
489
813
  "type": "boolean",
490
814
  "default": false,
491
- "description": "강제 로딩 상태"
815
+ "description": "Force loading state"
492
816
  },
493
817
  "children": {
494
- "description": " 아이템 렌더 함수: ({ item, index }) => ReactNode (필수)"
818
+ "description": "Item render function: ({ item, index }) => ReactNode (required)"
495
819
  },
496
820
  "className": {
497
821
  "type": "string",
498
- "description": "루트 요소 스타일"
822
+ "description": "Root element style"
499
823
  }
500
824
  },
501
825
  "required": [
502
826
  "list"
503
827
  ],
504
828
  "additionalProperties": false,
505
- "description": "데이터 리스트. list 상태에 따라 로딩/스켈레톤/빈 상태/데이터를 자동 처리. ErrorBoundary 내장."
829
+ "description": "Data list. Automatically handles loading/skeleton/empty/data states based on list. Built-in ErrorBoundary."
830
+ }
831
+ },
832
+ "$schema": "http://json-schema.org/draft-07/schema#"
833
+ },
834
+ "datePicker": {
835
+ "$ref": "#/definitions/datePickerPropsSchema",
836
+ "definitions": {
837
+ "datePickerPropsSchema": {
838
+ "type": "object",
839
+ "properties": {
840
+ "value": {
841
+ "description": "Controlled date value (Date)"
842
+ },
843
+ "defaultValue": {
844
+ "description": "Default date (Date)"
845
+ },
846
+ "onChange": {
847
+ "description": "Date change callback (date: Date | undefined) => void"
848
+ },
849
+ "placeholder": {
850
+ "type": "string",
851
+ "default": "날짜 선택",
852
+ "description": "Placeholder text"
853
+ },
854
+ "disabled": {
855
+ "type": "boolean",
856
+ "default": false,
857
+ "description": "Disabled"
858
+ },
859
+ "minDate": {
860
+ "description": "Minimum selectable date (Date)"
861
+ },
862
+ "maxDate": {
863
+ "description": "Maximum selectable date (Date)"
864
+ },
865
+ "locale": {
866
+ "type": "string",
867
+ "enum": [
868
+ "ko",
869
+ "en"
870
+ ],
871
+ "default": "ko",
872
+ "description": "Calendar locale"
873
+ },
874
+ "formatStr": {
875
+ "type": "string",
876
+ "default": "yyyy-MM-dd",
877
+ "description": "Date format string (date-fns format)"
878
+ },
879
+ "className": {
880
+ "type": "string",
881
+ "description": "Style override"
882
+ }
883
+ },
884
+ "additionalProperties": false,
885
+ "description": "DatePicker. Calendar popup for date selection. Based on react-day-picker."
506
886
  }
507
887
  },
508
888
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -520,7 +900,7 @@
520
900
  "vertical"
521
901
  ],
522
902
  "default": "horizontal",
523
- "description": "방향"
903
+ "description": "Direction"
524
904
  },
525
905
  "variant": {
526
906
  "type": "string",
@@ -530,19 +910,22 @@
530
910
  "dotted"
531
911
  ],
532
912
  "default": "solid",
533
- "description": " 스타일"
913
+ "description": "Line style"
534
914
  },
535
915
  "color": {
536
916
  "type": "string",
537
- "description": "커스텀 색상 (CSS )"
917
+ "description": "Custom color (CSS value)"
918
+ },
919
+ "style": {
920
+ "description": "Inline style (CSSProperties)"
538
921
  },
539
922
  "className": {
540
923
  "type": "string",
541
- "description": "스타일 오버라이드"
924
+ "description": "Style override"
542
925
  }
543
926
  },
544
927
  "additionalProperties": false,
545
- "description": "구분선. 수평/수직 방향, 실선/점선/파선 지원."
928
+ "description": "Divider. Supports horizontal/vertical, solid/dashed/dotted."
546
929
  }
547
930
  },
548
931
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -562,11 +945,33 @@
562
945
  "right"
563
946
  ],
564
947
  "default": "bottom",
565
- "description": "방향"
948
+ "description": "Direction"
949
+ },
950
+ "open": {
951
+ "type": "boolean",
952
+ "description": "Open state (controlled mode)"
953
+ },
954
+ "onOpenChange": {
955
+ "description": "Open state change callback (open: boolean) => void"
956
+ },
957
+ "dismissible": {
958
+ "type": "boolean",
959
+ "description": "Allow close via swipe/outside click (default true)"
960
+ },
961
+ "modal": {
962
+ "type": "boolean",
963
+ "description": "Modal mode (default true). If false, background is interactive"
964
+ },
965
+ "shouldScaleBackground": {
966
+ "type": "boolean",
967
+ "description": "Background scale effect (default false)"
968
+ },
969
+ "children": {
970
+ "description": "Drawer sub-components (ReactNode, required)"
566
971
  }
567
972
  },
568
973
  "additionalProperties": false,
569
- "description": "드로어/바텀시트. Vaul 기반. 합성 컴포넌트 패턴."
974
+ "description": "Drawer/bottom sheet. Based on Vaul. Compound component pattern."
570
975
  }
571
976
  },
572
977
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -586,7 +991,7 @@
586
991
  "right"
587
992
  ],
588
993
  "default": "bottom",
589
- "description": "방향 (Context 우선)"
994
+ "description": "Direction (Context takes priority)"
590
995
  },
591
996
  "blur": {
592
997
  "type": "string",
@@ -596,63 +1001,313 @@
596
1001
  "md"
597
1002
  ],
598
1003
  "default": "none",
599
- "description": "오버레이 블러"
1004
+ "description": "Overlay blur"
600
1005
  },
601
1006
  "showHandle": {
602
1007
  "type": "boolean",
603
1008
  "default": true,
604
- "description": "핸들 표시"
1009
+ "description": "Show handle bar"
1010
+ },
1011
+ "children": {
1012
+ "description": "Content area (ReactNode)"
605
1013
  },
606
1014
  "overlayClassName": {
607
1015
  "type": "string",
608
- "description": "오버레이 스타일"
1016
+ "description": "Overlay style"
609
1017
  },
610
1018
  "className": {
611
1019
  "type": "string",
612
- "description": "패널 스타일"
1020
+ "description": "Panel style"
613
1021
  }
614
1022
  },
615
1023
  "additionalProperties": false,
616
- "description": "Drawer.Content 영역."
1024
+ "description": "Drawer.Content area."
617
1025
  }
618
1026
  },
619
1027
  "$schema": "http://json-schema.org/draft-07/schema#"
620
1028
  },
621
- "ellipsis": {
622
- "$ref": "#/definitions/ellipsisPropsSchema",
1029
+ "drawerTrigger": {
1030
+ "$ref": "#/definitions/drawerTriggerPropsSchema",
623
1031
  "definitions": {
624
- "ellipsisPropsSchema": {
1032
+ "drawerTriggerPropsSchema": {
625
1033
  "type": "object",
626
1034
  "properties": {
627
- "content": {
1035
+ "asChild": {
1036
+ "type": "boolean",
1037
+ "description": "Render as child element"
1038
+ },
1039
+ "children": {
1040
+ "description": "Trigger element (ReactNode, required)"
1041
+ },
1042
+ "className": {
1043
+ "type": "string",
1044
+ "description": "Style override"
1045
+ }
1046
+ },
1047
+ "additionalProperties": false,
1048
+ "description": "Drawer open trigger."
1049
+ }
1050
+ },
1051
+ "$schema": "http://json-schema.org/draft-07/schema#"
1052
+ },
1053
+ "drawerClose": {
1054
+ "$ref": "#/definitions/drawerClosePropsSchema",
1055
+ "definitions": {
1056
+ "drawerClosePropsSchema": {
1057
+ "type": "object",
1058
+ "properties": {
1059
+ "asChild": {
1060
+ "type": "boolean",
1061
+ "description": "Render as child element"
1062
+ },
1063
+ "children": {
1064
+ "description": "Close element (ReactNode, required)"
1065
+ },
1066
+ "className": {
1067
+ "type": "string",
1068
+ "description": "Style override"
1069
+ }
1070
+ },
1071
+ "additionalProperties": false,
1072
+ "description": "Drawer close button."
1073
+ }
1074
+ },
1075
+ "$schema": "http://json-schema.org/draft-07/schema#"
1076
+ },
1077
+ "drawerTitle": {
1078
+ "$ref": "#/definitions/drawerTitlePropsSchema",
1079
+ "definitions": {
1080
+ "drawerTitlePropsSchema": {
1081
+ "type": "object",
1082
+ "properties": {
1083
+ "children": {
1084
+ "description": "Title text (ReactNode, required)"
1085
+ },
1086
+ "className": {
1087
+ "type": "string",
1088
+ "description": "Style override"
1089
+ }
1090
+ },
1091
+ "additionalProperties": false,
1092
+ "description": "Drawer title (required for accessibility)."
1093
+ }
1094
+ },
1095
+ "$schema": "http://json-schema.org/draft-07/schema#"
1096
+ },
1097
+ "drawerDescription": {
1098
+ "$ref": "#/definitions/drawerDescriptionPropsSchema",
1099
+ "definitions": {
1100
+ "drawerDescriptionPropsSchema": {
1101
+ "type": "object",
1102
+ "properties": {
1103
+ "children": {
1104
+ "description": "Description text (ReactNode, required)"
1105
+ },
1106
+ "className": {
1107
+ "type": "string",
1108
+ "description": "Style override"
1109
+ }
1110
+ },
1111
+ "additionalProperties": false,
1112
+ "description": "Drawer description."
1113
+ }
1114
+ },
1115
+ "$schema": "http://json-schema.org/draft-07/schema#"
1116
+ },
1117
+ "dropdownMenu": {
1118
+ "$ref": "#/definitions/dropdownMenuPropsSchema",
1119
+ "definitions": {
1120
+ "dropdownMenuPropsSchema": {
1121
+ "type": "object",
1122
+ "properties": {
1123
+ "children": {
1124
+ "description": "Trigger element (ReactNode, required)"
1125
+ },
1126
+ "items": {
1127
+ "type": "array",
1128
+ "items": {
1129
+ "type": "object",
1130
+ "properties": {
1131
+ "label": {
1132
+ "description": "Menu item text (ReactNode)"
1133
+ },
1134
+ "value": {
1135
+ "type": "string",
1136
+ "description": "Item identifier"
1137
+ },
1138
+ "icon": {
1139
+ "description": "Left icon (ReactNode)"
1140
+ },
1141
+ "onClick": {
1142
+ "description": "Click handler () => void"
1143
+ },
1144
+ "disabled": {
1145
+ "type": "boolean",
1146
+ "description": "Disabled"
1147
+ },
1148
+ "danger": {
1149
+ "type": "boolean",
1150
+ "description": "Danger/destructive style"
1151
+ },
1152
+ "separator": {
1153
+ "type": "boolean",
1154
+ "description": "If true, renders as separator line"
1155
+ }
1156
+ },
1157
+ "additionalProperties": false
1158
+ },
1159
+ "description": "Menu items array (required)"
1160
+ },
1161
+ "align": {
1162
+ "type": "string",
1163
+ "enum": [
1164
+ "start",
1165
+ "center",
1166
+ "end"
1167
+ ],
1168
+ "default": "start",
1169
+ "description": "Alignment"
1170
+ },
1171
+ "side": {
1172
+ "type": "string",
1173
+ "enum": [
1174
+ "top",
1175
+ "right",
1176
+ "bottom",
1177
+ "left"
1178
+ ],
1179
+ "default": "bottom",
1180
+ "description": "Position"
1181
+ },
1182
+ "className": {
1183
+ "type": "string",
1184
+ "description": "Trigger wrapper style"
1185
+ },
1186
+ "contentClassName": {
1187
+ "type": "string",
1188
+ "description": "Content panel style"
1189
+ }
1190
+ },
1191
+ "required": [
1192
+ "items"
1193
+ ],
1194
+ "additionalProperties": false,
1195
+ "description": "Dropdown menu. Based on Radix DropdownMenu. Action menu for context/more menus."
1196
+ }
1197
+ },
1198
+ "$schema": "http://json-schema.org/draft-07/schema#"
1199
+ },
1200
+ "ellipsis": {
1201
+ "$ref": "#/definitions/ellipsisPropsSchema",
1202
+ "definitions": {
1203
+ "ellipsisPropsSchema": {
1204
+ "type": "object",
1205
+ "properties": {
1206
+ "content": {
628
1207
  "default": "",
629
- "description": "본문 (ReactNode)"
1208
+ "description": "Body text (ReactNode)"
630
1209
  },
631
1210
  "lineClamp": {
632
1211
  "type": "number",
633
1212
  "default": 2,
634
- "description": " 제한"
1213
+ "description": "Line clamp limit"
635
1214
  },
636
1215
  "triggerMore": {
637
1216
  "default": "more",
638
- "description": "더보기 텍스트 (ReactNode)"
1217
+ "description": "Show more text (ReactNode)"
639
1218
  },
640
1219
  "triggerLess": {
641
1220
  "default": "less",
642
- "description": "접기 텍스트 (ReactNode)"
1221
+ "description": "Show less text (ReactNode)"
643
1222
  },
644
1223
  "defaultShortened": {
645
1224
  "type": "boolean",
646
1225
  "default": true,
647
- "description": "초기 접힘 상태"
1226
+ "description": "Initial collapsed state"
1227
+ },
1228
+ "observingEnvs": {
1229
+ "type": "array",
1230
+ "items": {
1231
+ "type": "boolean"
1232
+ },
1233
+ "description": "Re-measure on external condition change"
1234
+ },
1235
+ "onShowMoreLessClick": {
1236
+ "description": "Show more/less click callback () => void"
1237
+ },
1238
+ "className": {
1239
+ "type": "string",
1240
+ "description": "Style override"
1241
+ }
1242
+ },
1243
+ "additionalProperties": false,
1244
+ "description": "Text ellipsis. Built-in show more/less toggle."
1245
+ }
1246
+ },
1247
+ "$schema": "http://json-schema.org/draft-07/schema#"
1248
+ },
1249
+ "emptyState": {
1250
+ "$ref": "#/definitions/emptyStatePropsSchema",
1251
+ "definitions": {
1252
+ "emptyStatePropsSchema": {
1253
+ "type": "object",
1254
+ "properties": {
1255
+ "icon": {
1256
+ "description": "Custom icon (ReactNode). Default inbox icon"
1257
+ },
1258
+ "title": {
1259
+ "type": "string",
1260
+ "description": "Title text"
1261
+ },
1262
+ "description": {
1263
+ "type": "string",
1264
+ "description": "Description text"
1265
+ },
1266
+ "action": {
1267
+ "description": "Action area (ReactNode, e.g. Button)"
1268
+ },
1269
+ "size": {
1270
+ "type": "string",
1271
+ "enum": [
1272
+ "sm",
1273
+ "md",
1274
+ "lg"
1275
+ ],
1276
+ "default": "md",
1277
+ "description": "Overall size"
1278
+ },
1279
+ "children": {
1280
+ "description": "Additional content (ReactNode)"
648
1281
  },
649
1282
  "className": {
650
1283
  "type": "string",
651
- "description": "스타일 오버라이드"
1284
+ "description": "Style override"
652
1285
  }
653
1286
  },
654
1287
  "additionalProperties": false,
655
- "description": "텍스트 말줄임. 더보기/접기 토글 내장."
1288
+ "description": "Empty state placeholder. Shown when data is empty or unavailable."
1289
+ }
1290
+ },
1291
+ "$schema": "http://json-schema.org/draft-07/schema#"
1292
+ },
1293
+ "errorBoundary": {
1294
+ "$ref": "#/definitions/errorBoundaryPropsSchema",
1295
+ "definitions": {
1296
+ "errorBoundaryPropsSchema": {
1297
+ "type": "object",
1298
+ "properties": {
1299
+ "children": {
1300
+ "description": "Child elements to wrap (ReactNode, required)"
1301
+ },
1302
+ "fallback": {
1303
+ "description": "Fallback UI on error (ReactNode)"
1304
+ },
1305
+ "onError": {
1306
+ "description": "Error callback (error: Error, errorInfo: ErrorInfo) => void"
1307
+ }
1308
+ },
1309
+ "additionalProperties": false,
1310
+ "description": "Error boundary. Catches child component render errors and displays fallback UI."
656
1311
  }
657
1312
  },
658
1313
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -672,43 +1327,52 @@
672
1327
  "type": "null"
673
1328
  }
674
1329
  ],
675
- "description": "현재 데이터 배열 (필수)"
1330
+ "description": "Current data array (required)"
676
1331
  },
677
1332
  "totalCount": {
678
1333
  "type": "number",
679
- "description": "전체 개수 (hasMore와 배타적 사용)"
1334
+ "description": "Total count (mutually exclusive with hasMore)"
680
1335
  },
681
1336
  "hasMore": {
682
1337
  "type": "boolean",
683
- "description": " 있는지 (totalCount와 배타적 사용)"
1338
+ "description": "Has more items (mutually exclusive with totalCount)"
684
1339
  },
685
1340
  "tag": {
686
1341
  "type": "string",
687
1342
  "default": "div",
688
- "description": "children 래퍼 태그"
1343
+ "description": "Children wrapper tag"
689
1344
  },
690
1345
  "rootMargin": {
691
1346
  "type": "number",
692
1347
  "default": 100,
693
- "description": "감지 마진 (px)"
1348
+ "description": "Detection margin (px)"
694
1349
  },
695
1350
  "loading": {
696
1351
  "type": "boolean",
697
- "description": "로딩 상태"
1352
+ "description": "Loading state"
698
1353
  },
699
1354
  "loadingElement": {
700
- "description": "커스텀 로딩 요소"
1355
+ "description": "Custom loading element"
1356
+ },
1357
+ "handleLoadMore": {
1358
+ "description": "Load more callback () => void, required"
1359
+ },
1360
+ "scrollTarget": {
1361
+ "description": "Scroll target element (HTMLElement | Document | MutableRefObject)"
1362
+ },
1363
+ "children": {
1364
+ "description": "List item rendering (ReactNode, required)"
701
1365
  },
702
1366
  "className": {
703
1367
  "type": "string",
704
- "description": "스타일 오버라이드"
1368
+ "description": "Style override"
705
1369
  }
706
1370
  },
707
1371
  "required": [
708
1372
  "list"
709
1373
  ],
710
1374
  "additionalProperties": false,
711
- "description": "무한 스크롤. IntersectionObserver 기반."
1375
+ "description": "Infinite scroll. Based on IntersectionObserver."
712
1376
  }
713
1377
  },
714
1378
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -728,30 +1392,36 @@
728
1392
  "down"
729
1393
  ],
730
1394
  "default": "left",
731
- "description": "방향"
1395
+ "description": "Direction"
732
1396
  },
733
1397
  "speed": {
734
1398
  "type": "number",
735
1399
  "default": 40,
736
- "description": "애니메이션 속도 ()"
1400
+ "description": "Animation speed (seconds)"
737
1401
  },
738
1402
  "pauseOnHover": {
739
1403
  "type": "boolean",
740
1404
  "default": false,
741
- "description": "호버 일시정지"
1405
+ "description": "Pause on hover"
742
1406
  },
743
1407
  "gap": {
744
1408
  "type": "number",
745
1409
  "default": 16,
746
- "description": "아이템 간격 (px)"
1410
+ "description": "Item gap (px)"
1411
+ },
1412
+ "children": {
1413
+ "description": "Content to repeat (ReactNode, required)"
1414
+ },
1415
+ "style": {
1416
+ "description": "Inline style (CSSProperties)"
747
1417
  },
748
1418
  "className": {
749
1419
  "type": "string",
750
- "description": "스타일 오버라이드"
1420
+ "description": "Style override"
751
1421
  }
752
1422
  },
753
1423
  "additionalProperties": false,
754
- "description": "마퀴 (흐르는 텍스트/요소)."
1424
+ "description": "Marquee (scrolling text/elements)."
755
1425
  }
756
1426
  },
757
1427
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -763,10 +1433,10 @@
763
1433
  "type": "object",
764
1434
  "properties": {
765
1435
  "title": {
766
- "description": "헤더 제목 (ReactNode)"
1436
+ "description": "Header title (ReactNode)"
767
1437
  },
768
1438
  "desc": {
769
- "description": "헤더 설명 (ReactNode)"
1439
+ "description": "Header description (ReactNode)"
770
1440
  },
771
1441
  "layout": {
772
1442
  "type": "string",
@@ -780,51 +1450,104 @@
780
1450
  "draggable"
781
1451
  ],
782
1452
  "default": "default",
783
- "description": "레이아웃"
1453
+ "description": "Layout"
784
1454
  },
785
1455
  "showDim": {
786
1456
  "type": "boolean",
787
1457
  "default": true,
788
- "description": " 배경 표시"
1458
+ "description": "Show dim overlay"
789
1459
  },
790
1460
  "dimClose": {
791
1461
  "type": "boolean",
792
1462
  "default": true,
793
- "description": " 클릭 닫기"
1463
+ "description": "Close on dim click"
794
1464
  },
795
1465
  "hideHeader": {
796
1466
  "type": "boolean",
797
1467
  "default": false,
798
- "description": "헤더 숨김"
1468
+ "description": "Hide header"
799
1469
  },
800
1470
  "hideFooter": {
801
1471
  "type": "boolean",
802
1472
  "default": true,
803
- "description": "푸터 숨김"
1473
+ "description": "Hide footer"
804
1474
  },
805
1475
  "footer": {
806
- "description": "커스텀 푸터 (ReactElement)"
1476
+ "description": "Custom footer (ReactElement)"
1477
+ },
1478
+ "animation": {
1479
+ "type": "object",
1480
+ "properties": {
1481
+ "name": {
1482
+ "type": "string",
1483
+ "description": "Animation name"
1484
+ },
1485
+ "mobile": {
1486
+ "type": "string",
1487
+ "description": "Mobile animation name"
1488
+ },
1489
+ "delay": {
1490
+ "type": "number",
1491
+ "description": "Delay (ms)"
1492
+ },
1493
+ "duration": {
1494
+ "type": "number",
1495
+ "description": "Duration (ms)"
1496
+ },
1497
+ "timingFunc": {
1498
+ "type": "string",
1499
+ "description": "Timing function"
1500
+ },
1501
+ "leaveTimingFunc": {
1502
+ "type": "string",
1503
+ "description": "Exit timing function"
1504
+ }
1505
+ },
1506
+ "additionalProperties": false,
1507
+ "description": "Modal animation"
807
1508
  },
808
1509
  "enableDrag": {
809
1510
  "type": "boolean",
810
- "default": false,
811
- "description": "드래그 활성화 (draggable 레이아웃)"
1511
+ "default": true,
1512
+ "description": "Enable drag (bottom-sheet/draggable layouts)"
812
1513
  },
813
1514
  "dragPersistKey": {
814
1515
  "type": "string",
815
- "description": "드래그 위치 저장 "
1516
+ "description": "Drag position persistence key"
1517
+ },
1518
+ "close": {
1519
+ "description": "Modal close function (isAnimation?: boolean) => void (auto-injected)"
1520
+ },
1521
+ "children": {
1522
+ "description": "Modal body (ReactNode, required)"
1523
+ },
1524
+ "className": {
1525
+ "type": "string",
1526
+ "description": "Root wrapper style"
816
1527
  },
817
1528
  "innerClassName": {
818
1529
  "type": "string",
819
- "description": "모달 본체 스타일"
1530
+ "description": "Modal body style"
820
1531
  },
821
1532
  "bodyClassName": {
822
1533
  "type": "string",
823
- "description": "바디 영역 스타일"
1534
+ "description": "Body area style"
1535
+ },
1536
+ "footerClassName": {
1537
+ "type": "string",
1538
+ "description": "Footer area style"
1539
+ },
1540
+ "dimClassName": {
1541
+ "type": "string",
1542
+ "description": "Dim overlay style"
1543
+ },
1544
+ "headerClassName": {
1545
+ "type": "string",
1546
+ "description": "Header area style"
824
1547
  }
825
1548
  },
826
1549
  "additionalProperties": false,
827
- "description": "모달 템플릿. 모든 모달 컴포넌트는 반드시 ModalTemplate으로 감싸야 한다."
1550
+ "description": "Modal template. All modal components must be wrapped with ModalTemplate."
828
1551
  }
829
1552
  },
830
1553
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -836,16 +1559,94 @@
836
1559
  "type": "object",
837
1560
  "properties": {
838
1561
  "component": {
839
- "description": "모달 컴포넌트 (필수)"
1562
+ "description": "Modal component (required). Automatically receives close/resolve as props"
840
1563
  },
841
1564
  "props": {
842
1565
  "type": "object",
843
1566
  "additionalProperties": {},
844
- "description": "컴포넌트에 전달할 props"
1567
+ "description": "Props to pass to component"
1568
+ },
1569
+ "id": {
1570
+ "type": "string",
1571
+ "description": "Modal ID (used for duplicate check)"
1572
+ },
1573
+ "layout": {
1574
+ "type": "string",
1575
+ "enum": [
1576
+ "default",
1577
+ "bottom-sheet",
1578
+ "slide-left",
1579
+ "slide-right",
1580
+ "full-page",
1581
+ "full-page-reverse",
1582
+ "draggable"
1583
+ ],
1584
+ "description": "Layout"
1585
+ },
1586
+ "animation": {
1587
+ "type": "object",
1588
+ "properties": {
1589
+ "name": {
1590
+ "type": "string",
1591
+ "description": "Animation name"
1592
+ },
1593
+ "mobile": {
1594
+ "type": "string",
1595
+ "description": "Mobile animation name"
1596
+ },
1597
+ "delay": {
1598
+ "type": "number",
1599
+ "description": "Delay (ms)"
1600
+ },
1601
+ "duration": {
1602
+ "type": "number",
1603
+ "description": "Duration (ms)"
1604
+ },
1605
+ "timingFunc": {
1606
+ "type": "string",
1607
+ "description": "Timing function"
1608
+ },
1609
+ "leaveTimingFunc": {
1610
+ "type": "string",
1611
+ "description": "Exit timing function"
1612
+ }
1613
+ },
1614
+ "additionalProperties": false,
1615
+ "description": "Modal animation"
1616
+ },
1617
+ "scrollEnable": {
1618
+ "type": "boolean",
1619
+ "description": "Allow background scroll"
1620
+ },
1621
+ "isToggle": {
1622
+ "type": "boolean",
1623
+ "description": "Toggle mode (close on re-call of same modal)"
1624
+ },
1625
+ "isAlone": {
1626
+ "type": "boolean",
1627
+ "description": "Alone mode (close all existing modals before opening)"
1628
+ },
1629
+ "duplicateCheck": {
1630
+ "type": "boolean",
1631
+ "description": "Prevent duplicate opening of same component"
1632
+ },
1633
+ "disableEscapeKeyPress": {
1634
+ "type": "boolean",
1635
+ "description": "Disable close via ESC key"
1636
+ },
1637
+ "componentName": {
1638
+ "type": "string",
1639
+ "description": "Modal identifier name (used for duplicate check, modal search)"
1640
+ },
1641
+ "onOpen": {
1642
+ "description": "Callback when modal opens"
1643
+ },
1644
+ "onClose": {
1645
+ "description": "Callback when modal closes"
845
1646
  }
846
1647
  },
847
1648
  "additionalProperties": false,
848
- "description": "modal() 함수 호출 형태. component close/resolve 자동으로 props로 받는다."
1649
+ "description": "modal() function call options. component automatically receives close/resolve as props."
849
1650
  }
850
1651
  },
851
1652
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -861,57 +1662,143 @@
861
1662
  "number",
862
1663
  "string"
863
1664
  ],
864
- "description": "현재 "
1665
+ "description": "Current value"
865
1666
  },
866
1667
  "size": {
867
1668
  "type": "string",
868
1669
  "enum": [
869
1670
  "sm",
870
1671
  "md",
871
- "lg"
1672
+ "lg",
1673
+ "xl"
872
1674
  ],
873
1675
  "default": "md",
874
- "description": "크기"
1676
+ "description": "Size"
875
1677
  },
876
1678
  "error": {
877
1679
  "type": "boolean",
878
- "description": "에러 상태"
1680
+ "description": "Error state"
879
1681
  },
880
1682
  "min": {
881
1683
  "type": "number",
882
- "description": "최소값"
1684
+ "description": "Minimum value"
883
1685
  },
884
1686
  "max": {
885
1687
  "type": "number",
886
- "description": "최대값"
1688
+ "description": "Maximum value"
887
1689
  },
888
1690
  "step": {
889
1691
  "type": "number",
890
1692
  "default": 1,
891
- "description": "증감 단위"
1693
+ "description": "Step increment"
892
1694
  },
893
1695
  "digit": {
894
1696
  "type": "number",
895
1697
  "default": 0,
896
- "description": "소수 자릿수"
1698
+ "description": "Decimal places"
897
1699
  },
898
1700
  "hideButtons": {
899
1701
  "type": "boolean",
900
1702
  "default": false,
901
- "description": "기본 스핀 버튼 숨김. numberInputBind 외부 버튼에 이벤트 부착 시 사용"
1703
+ "description": "Hide default spin buttons. Use with numberInputBind for external button event binding"
902
1704
  },
903
1705
  "disabled": {
904
1706
  "type": "boolean",
905
- "description": "비활성"
1707
+ "description": "Disabled"
906
1708
  },
907
- "className": {
1709
+ "readOnly": {
1710
+ "type": "boolean",
1711
+ "description": "Read-only (includes hiding spin buttons)"
1712
+ },
1713
+ "placeholder": {
908
1714
  "type": "string",
909
- "description": "스타일 오버라이드"
910
- }
911
- },
912
- "additionalProperties": false,
913
- "description": "숫자 입력. 꾹 누르면 가속 증감. ref로 increment/decrement 메서드 노출. numberInputBind(ref, direction) 함수로 외부 버튼에 동일한 가속 이벤트 바인딩 가능."
914
- }
1715
+ "description": "Placeholder"
1716
+ },
1717
+ "name": {
1718
+ "type": "string",
1719
+ "description": "Form field name"
1720
+ },
1721
+ "id": {
1722
+ "type": "string",
1723
+ "description": "Element ID"
1724
+ },
1725
+ "autoFocus": {
1726
+ "type": "boolean",
1727
+ "description": "Auto focus"
1728
+ },
1729
+ "onValueChange": {
1730
+ "description": "Value change callback (value: number | undefined) => void"
1731
+ },
1732
+ "onBlur": {
1733
+ "description": "Blur callback"
1734
+ },
1735
+ "onFocus": {
1736
+ "description": "Focus callback"
1737
+ },
1738
+ "className": {
1739
+ "type": "string",
1740
+ "description": "Style override"
1741
+ }
1742
+ },
1743
+ "additionalProperties": false,
1744
+ "description": "Number input. Accelerated increment on long press. Exposes increment/decrement methods via ref. numberInputBind(ref, direction) binds same acceleration to external buttons."
1745
+ }
1746
+ },
1747
+ "$schema": "http://json-schema.org/draft-07/schema#"
1748
+ },
1749
+ "nxImage": {
1750
+ "$ref": "#/definitions/nxImagePropsSchema",
1751
+ "definitions": {
1752
+ "nxImagePropsSchema": {
1753
+ "type": "object",
1754
+ "properties": {
1755
+ "src": {
1756
+ "type": "string",
1757
+ "description": "Image source URL"
1758
+ },
1759
+ "alt": {
1760
+ "type": "string",
1761
+ "description": "Alt text"
1762
+ },
1763
+ "fallback": {
1764
+ "description": "Custom fallback element (ReactNode)"
1765
+ },
1766
+ "fallbackSrc": {
1767
+ "type": "string",
1768
+ "description": "Fallback image URL on error"
1769
+ },
1770
+ "aspectRatio": {
1771
+ "type": "string",
1772
+ "description": "CSS aspect-ratio (e.g. \"16/9\", \"1/1\")"
1773
+ },
1774
+ "objectFit": {
1775
+ "type": "string",
1776
+ "enum": [
1777
+ "cover",
1778
+ "contain",
1779
+ "fill",
1780
+ "none"
1781
+ ],
1782
+ "default": "cover",
1783
+ "description": "Object-fit mode"
1784
+ },
1785
+ "lazy": {
1786
+ "type": "boolean",
1787
+ "default": true,
1788
+ "description": "Enable lazy loading (loading=\"lazy\")"
1789
+ },
1790
+ "wrapperClassName": {
1791
+ "type": "string",
1792
+ "description": "Wrapper div style"
1793
+ },
1794
+ "className": {
1795
+ "type": "string",
1796
+ "description": "Image element style"
1797
+ }
1798
+ },
1799
+ "additionalProperties": false,
1800
+ "description": "Enhanced image. Lazy loading, fallback, aspect-ratio support."
1801
+ }
915
1802
  },
916
1803
  "$schema": "http://json-schema.org/draft-07/schema#"
917
1804
  },
@@ -923,16 +1810,20 @@
923
1810
  "properties": {
924
1811
  "currentPage": {
925
1812
  "type": "number",
926
- "description": "현재 페이지 (1부터, 필수)"
1813
+ "description": "Current page (1-based, required)"
927
1814
  },
928
1815
  "totalPages": {
929
1816
  "type": "number",
930
- "description": "전체 페이지 (필수)"
1817
+ "description": "Total page count (required)"
931
1818
  },
932
1819
  "siblingCount": {
933
1820
  "type": "number",
934
1821
  "default": 1,
935
- "description": "현재 페이지 양옆 표시 개수"
1822
+ "description": "Number of pages shown on each side of current"
1823
+ },
1824
+ "showEdges": {
1825
+ "type": "boolean",
1826
+ "description": "Always show first/last page"
936
1827
  },
937
1828
  "size": {
938
1829
  "type": "string",
@@ -941,11 +1832,14 @@
941
1832
  "md"
942
1833
  ],
943
1834
  "default": "md",
944
- "description": "크기"
1835
+ "description": "Size"
1836
+ },
1837
+ "onPageChange": {
1838
+ "description": "Page change callback (page: number) => void, required"
945
1839
  },
946
1840
  "className": {
947
1841
  "type": "string",
948
- "description": "<nav> 스타일"
1842
+ "description": "<nav> style"
949
1843
  }
950
1844
  },
951
1845
  "required": [
@@ -953,7 +1847,7 @@
953
1847
  "totalPages"
954
1848
  ],
955
1849
  "additionalProperties": false,
956
- "description": "페이지네이션. 이전/다음 + 번호 버튼."
1850
+ "description": "Pagination. Previous/next + page number buttons."
957
1851
  }
958
1852
  },
959
1853
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -965,7 +1859,7 @@
965
1859
  "type": "object",
966
1860
  "properties": {
967
1861
  "trigger": {
968
- "description": "트리거 요소 (ReactNode, 필수)"
1862
+ "description": "Trigger element (ReactNode, required)"
969
1863
  },
970
1864
  "side": {
971
1865
  "type": "string",
@@ -976,7 +1870,7 @@
976
1870
  "left"
977
1871
  ],
978
1872
  "default": "bottom",
979
- "description": "위치"
1873
+ "description": "Position"
980
1874
  },
981
1875
  "align": {
982
1876
  "type": "string",
@@ -986,32 +1880,208 @@
986
1880
  "end"
987
1881
  ],
988
1882
  "default": "center",
989
- "description": "정렬"
1883
+ "description": "Alignment"
990
1884
  },
991
1885
  "sideOffset": {
992
1886
  "type": "number",
993
1887
  "default": 4,
994
- "description": "위치 오프셋 (px)"
1888
+ "description": "Position offset (px)"
995
1889
  },
996
1890
  "alignOffset": {
997
1891
  "type": "number",
998
- "description": "정렬 오프셋 (px)"
1892
+ "description": "Alignment offset (px)"
999
1893
  },
1000
1894
  "open": {
1001
1895
  "type": "boolean",
1002
- "description": "제어 모드"
1896
+ "description": "Controlled mode"
1897
+ },
1898
+ "onOpenChange": {
1899
+ "description": "Open/close state change callback (open: boolean) => void"
1900
+ },
1901
+ "onClickTrigger": {
1902
+ "description": "Callback on trigger element click. Passed to PopoverPrimitive.Trigger onClick."
1903
+ },
1904
+ "children": {
1905
+ "description": "Popover body (ReactNode)"
1003
1906
  },
1004
1907
  "className": {
1005
1908
  "type": "string",
1006
- "description": "Content 스타일"
1909
+ "description": "Content style"
1007
1910
  },
1008
1911
  "arrowClassName": {
1009
1912
  "type": "string",
1010
- "description": "Arrow 스타일"
1913
+ "description": "Arrow style"
1914
+ }
1915
+ },
1916
+ "additionalProperties": false,
1917
+ "description": "Popover. Based on Radix Popover."
1918
+ }
1919
+ },
1920
+ "$schema": "http://json-schema.org/draft-07/schema#"
1921
+ },
1922
+ "priceInput": {
1923
+ "$ref": "#/definitions/priceInputPropsSchema",
1924
+ "definitions": {
1925
+ "priceInputPropsSchema": {
1926
+ "type": "object",
1927
+ "properties": {
1928
+ "size": {
1929
+ "type": "string",
1930
+ "enum": [
1931
+ "md",
1932
+ "lg",
1933
+ "xl"
1934
+ ],
1935
+ "default": "md",
1936
+ "description": "Size"
1937
+ },
1938
+ "error": {
1939
+ "type": "boolean",
1940
+ "description": "Error state (shows danger border)"
1941
+ },
1942
+ "prefix": {
1943
+ "anyOf": [
1944
+ {
1945
+ "type": "boolean"
1946
+ },
1947
+ {}
1948
+ ],
1949
+ "default": true,
1950
+ "description": "Prefix element. true = \"$\", ReactNode = custom content, false = hidden"
1951
+ },
1952
+ "suffix": {
1953
+ "description": "Suffix element after the input (e.g. \"CROSSD\", icon, ReactNode)"
1954
+ },
1955
+ "label": {
1956
+ "description": "Label displayed above the input (ReactNode)"
1957
+ },
1958
+ "description": {
1959
+ "description": "Description below the input. Turns red on error (ReactNode)"
1960
+ },
1961
+ "balance": {
1962
+ "type": [
1963
+ "string",
1964
+ "number"
1965
+ ],
1966
+ "description": "Balance value in the header. Clicking fills the input"
1967
+ },
1968
+ "balanceLabel": {
1969
+ "type": "string",
1970
+ "default": "Balance",
1971
+ "description": "Label text for balance display"
1972
+ },
1973
+ "balanceContent": {
1974
+ "description": "Custom balance display (ReactNode). Replaces default text, keeps click-to-fill"
1975
+ },
1976
+ "maxBalance": {
1977
+ "type": "number",
1978
+ "description": "Max allowed value. Exceeding auto-applies error state and turns balance red"
1979
+ },
1980
+ "separator": {
1981
+ "type": "boolean",
1982
+ "default": false,
1983
+ "description": "Display thousands separator (comma). onValueChange receives raw value without commas"
1984
+ },
1985
+ "align": {
1986
+ "type": "string",
1987
+ "enum": [
1988
+ "left",
1989
+ "right"
1990
+ ],
1991
+ "default": "left",
1992
+ "description": "Text alignment inside the input"
1993
+ },
1994
+ "disabled": {
1995
+ "type": "boolean",
1996
+ "description": "Disabled"
1997
+ },
1998
+ "placeholder": {
1999
+ "type": "string",
2000
+ "description": "Placeholder"
2001
+ },
2002
+ "value": {
2003
+ "description": "Controlled value"
2004
+ },
2005
+ "id": {
2006
+ "type": "string",
2007
+ "description": "Element ID"
2008
+ },
2009
+ "onValueChange": {
2010
+ "description": "Value change callback (value: string) => void"
2011
+ },
2012
+ "onBalanceClick": {
2013
+ "description": "Balance click callback (balance: string | number) => void"
2014
+ },
2015
+ "className": {
2016
+ "type": "string",
2017
+ "description": "Style override"
2018
+ }
2019
+ },
2020
+ "additionalProperties": false,
2021
+ "description": "Price/amount input field with prefix, suffix, balance display, and auto-fill on balance click."
2022
+ }
2023
+ },
2024
+ "$schema": "http://json-schema.org/draft-07/schema#"
2025
+ },
2026
+ "progress": {
2027
+ "$ref": "#/definitions/progressPropsSchema",
2028
+ "definitions": {
2029
+ "progressPropsSchema": {
2030
+ "type": "object",
2031
+ "properties": {
2032
+ "value": {
2033
+ "type": "number",
2034
+ "default": 0,
2035
+ "description": "Current progress value"
2036
+ },
2037
+ "max": {
2038
+ "type": "number",
2039
+ "default": 100,
2040
+ "description": "Maximum value"
2041
+ },
2042
+ "variant": {
2043
+ "type": "string",
2044
+ "enum": [
2045
+ "primary",
2046
+ "success",
2047
+ "warning",
2048
+ "danger",
2049
+ "info"
2050
+ ],
2051
+ "default": "primary",
2052
+ "description": "Color variant"
2053
+ },
2054
+ "size": {
2055
+ "type": "string",
2056
+ "enum": [
2057
+ "sm",
2058
+ "md",
2059
+ "lg"
2060
+ ],
2061
+ "default": "md",
2062
+ "description": "Bar height"
2063
+ },
2064
+ "showValue": {
2065
+ "type": "boolean",
2066
+ "default": false,
2067
+ "description": "Show percentage text"
2068
+ },
2069
+ "indeterminate": {
2070
+ "type": "boolean",
2071
+ "default": false,
2072
+ "description": "Indeterminate loading animation"
2073
+ },
2074
+ "label": {
2075
+ "type": "string",
2076
+ "description": "Label text above the bar"
2077
+ },
2078
+ "className": {
2079
+ "type": "string",
2080
+ "description": "Style override"
1011
2081
  }
1012
2082
  },
1013
2083
  "additionalProperties": false,
1014
- "description": "팝오버. Radix Popover 기반."
2084
+ "description": "Progress bar. Linear progress indicator with percentage display."
1015
2085
  }
1016
2086
  },
1017
2087
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -1024,15 +2094,15 @@
1024
2094
  "properties": {
1025
2095
  "name": {
1026
2096
  "type": "string",
1027
- "description": "form name (필수)"
2097
+ "description": "Form name (required)"
1028
2098
  },
1029
2099
  "value": {
1030
2100
  "type": "string",
1031
- "description": "선택된 (제어)"
2101
+ "description": "Selected value (controlled)"
1032
2102
  },
1033
2103
  "defaultValue": {
1034
2104
  "type": "string",
1035
- "description": "초기값 (비제어)"
2105
+ "description": "Initial value (uncontrolled)"
1036
2106
  },
1037
2107
  "size": {
1038
2108
  "type": "string",
@@ -1041,7 +2111,7 @@
1041
2111
  "md"
1042
2112
  ],
1043
2113
  "default": "md",
1044
- "description": "크기"
2114
+ "description": "Size"
1045
2115
  },
1046
2116
  "orientation": {
1047
2117
  "type": "string",
@@ -1050,26 +2120,36 @@
1050
2120
  "vertical"
1051
2121
  ],
1052
2122
  "default": "vertical",
1053
- "description": "배치 방향"
2123
+ "description": "Layout direction"
1054
2124
  },
1055
2125
  "disabled": {
1056
2126
  "type": "boolean",
1057
- "description": "비활성"
2127
+ "description": "Disabled"
2128
+ },
2129
+ "children": {
2130
+ "description": "RadioItem list (ReactNode, required)"
1058
2131
  },
1059
2132
  "aria-label": {
1060
2133
  "type": "string",
1061
- "description": "접근성 라벨"
2134
+ "description": "Accessibility label"
2135
+ },
2136
+ "aria-labelledby": {
2137
+ "type": "string",
2138
+ "description": "Accessibility label reference ID"
2139
+ },
2140
+ "onValueChange": {
2141
+ "description": "Value change callback (value: string) => void"
1062
2142
  },
1063
2143
  "className": {
1064
2144
  "type": "string",
1065
- "description": "스타일 오버라이드"
2145
+ "description": "Style override"
1066
2146
  }
1067
2147
  },
1068
2148
  "required": [
1069
2149
  "name"
1070
2150
  ],
1071
2151
  "additionalProperties": false,
1072
- "description": "라디오 그룹. RadioItem과 함께 사용."
2152
+ "description": "Radio group. Used with RadioItem."
1073
2153
  }
1074
2154
  },
1075
2155
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -1082,7 +2162,7 @@
1082
2162
  "properties": {
1083
2163
  "value": {
1084
2164
  "type": "string",
1085
- "description": "항목 (필수)"
2165
+ "description": "Item value (required)"
1086
2166
  },
1087
2167
  "size": {
1088
2168
  "type": "string",
@@ -1090,21 +2170,28 @@
1090
2170
  "sm",
1091
2171
  "md"
1092
2172
  ],
1093
- "description": "크기 (그룹보다 우선)"
2173
+ "description": "Size (overrides group)"
1094
2174
  },
1095
2175
  "label": {
1096
- "description": "라벨 텍스트 (ReactNode)"
2176
+ "description": "Label text (ReactNode)"
2177
+ },
2178
+ "children": {
2179
+ "description": "Label alternative content (ReactNode)"
1097
2180
  },
1098
2181
  "disabled": {
1099
2182
  "type": "boolean",
1100
- "description": "비활성"
2183
+ "description": "Disabled"
2184
+ },
2185
+ "className": {
2186
+ "type": "string",
2187
+ "description": "Style override"
1101
2188
  }
1102
2189
  },
1103
2190
  "required": [
1104
2191
  "value"
1105
2192
  ],
1106
2193
  "additionalProperties": false,
1107
- "description": "RadioGroup 개별 옵션."
2194
+ "description": "Individual option within RadioGroup."
1108
2195
  }
1109
2196
  },
1110
2197
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -1117,11 +2204,11 @@
1117
2204
  "properties": {
1118
2205
  "value": {
1119
2206
  "type": "string",
1120
- "description": "선택된 "
2207
+ "description": "Selected value"
1121
2208
  },
1122
2209
  "placeholder": {
1123
2210
  "type": "string",
1124
- "description": "플레이스홀더"
2211
+ "description": "Placeholder"
1125
2212
  },
1126
2213
  "variant": {
1127
2214
  "type": "string",
@@ -1130,7 +2217,7 @@
1130
2217
  "outline"
1131
2218
  ],
1132
2219
  "default": "default",
1133
- "description": "트리거 스타일"
2220
+ "description": "Trigger style"
1134
2221
  },
1135
2222
  "size": {
1136
2223
  "type": "string",
@@ -1141,26 +2228,32 @@
1141
2228
  "full"
1142
2229
  ],
1143
2230
  "default": "full",
1144
- "description": "너비"
2231
+ "description": "Width"
1145
2232
  },
1146
2233
  "disabled": {
1147
2234
  "type": "boolean",
1148
- "description": "비활성"
2235
+ "description": "Disabled"
2236
+ },
2237
+ "onValueChange": {
2238
+ "description": "Value change callback (value: string) => void"
1149
2239
  },
1150
2240
  "displayComponent": {
1151
- "description": "트리거에 커스텀 표시 (ReactNode)"
2241
+ "description": "Custom display in trigger (ReactNode)"
2242
+ },
2243
+ "children": {
2244
+ "description": "SelectItem list (ReactNode, required)"
1152
2245
  },
1153
2246
  "className": {
1154
2247
  "type": "string",
1155
- "description": "래퍼 스타일"
2248
+ "description": "Wrapper style"
1156
2249
  },
1157
2250
  "triggerClassName": {
1158
2251
  "type": "string",
1159
- "description": "트리거 스타일 오버라이드"
2252
+ "description": "Trigger style override"
1160
2253
  }
1161
2254
  },
1162
2255
  "additionalProperties": false,
1163
- "description": "드롭다운 선택. Radix Select 기반. SelectItem과 함께 사용."
2256
+ "description": "Dropdown select. Based on Radix Select. Used with SelectItem."
1164
2257
  }
1165
2258
  },
1166
2259
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -1173,22 +2266,25 @@
1173
2266
  "properties": {
1174
2267
  "value": {
1175
2268
  "type": "string",
1176
- "description": "항목 "
2269
+ "description": "Item value"
2270
+ },
2271
+ "children": {
2272
+ "description": "Item content (ReactNode, required)"
1177
2273
  },
1178
2274
  "disabled": {
1179
2275
  "type": "boolean",
1180
- "description": "비활성"
2276
+ "description": "Disabled"
1181
2277
  },
1182
2278
  "className": {
1183
2279
  "type": "string",
1184
- "description": "스타일 오버라이드"
2280
+ "description": "Style override"
1185
2281
  }
1186
2282
  },
1187
2283
  "required": [
1188
2284
  "value"
1189
2285
  ],
1190
2286
  "additionalProperties": false,
1191
- "description": "Select 개별 옵션."
2287
+ "description": "Individual option within Select."
1192
2288
  }
1193
2289
  },
1194
2290
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -1206,123 +2302,305 @@
1206
2302
  "span"
1207
2303
  ],
1208
2304
  "default": "div",
1209
- "description": "렌더링 태그"
2305
+ "description": "Rendered tag"
1210
2306
  },
1211
2307
  "circle": {
1212
2308
  "type": "boolean",
1213
2309
  "default": false,
1214
- "description": "원형 스켈레톤 (rounded-full)"
2310
+ "description": "Circle skeleton (rounded-full)"
1215
2311
  },
1216
2312
  "width": {
1217
2313
  "type": [
1218
2314
  "string",
1219
2315
  "number"
1220
2316
  ],
1221
- "description": "너비 (예: '100px', '50%', 200)"
2317
+ "description": "Width (e.g. '100px', '50%', 200)"
1222
2318
  },
1223
2319
  "height": {
1224
2320
  "type": [
1225
2321
  "string",
1226
2322
  "number"
1227
2323
  ],
1228
- "description": "높이 (예: '16px', 40)"
2324
+ "description": "Height (e.g. '16px', 40)"
2325
+ },
2326
+ "children": {
2327
+ "description": "Inner content (shown when loaded, maintains actual size)"
2328
+ },
2329
+ "style": {
2330
+ "description": "Inline style (CSSProperties)"
1229
2331
  },
1230
2332
  "className": {
1231
2333
  "type": "string",
1232
- "description": "스타일 오버라이드"
2334
+ "description": "Style override"
1233
2335
  }
1234
2336
  },
1235
2337
  "additionalProperties": false,
1236
- "description": "스켈레톤 로딩 플레이스홀더. className으로 크기/모양 조절. children 있으면 투명하게 감싸서 실제 크기 유지."
2338
+ "description": "Skeleton loading placeholder. Size/shape via className. With children, wraps transparently to maintain actual size."
1237
2339
  }
1238
2340
  },
1239
2341
  "$schema": "http://json-schema.org/draft-07/schema#"
1240
2342
  },
1241
- "spinner": {
1242
- "$ref": "#/definitions/spinnerPropsSchema",
2343
+ "slider": {
2344
+ "$ref": "#/definitions/sliderPropsSchema",
1243
2345
  "definitions": {
1244
- "spinnerPropsSchema": {
2346
+ "sliderPropsSchema": {
1245
2347
  "type": "object",
1246
2348
  "properties": {
1247
- "size": {
2349
+ "value": {
2350
+ "type": "array",
2351
+ "items": {
2352
+ "type": "number"
2353
+ },
2354
+ "description": "Controlled value (number[]). Use [50] for single, [20, 80] for range"
2355
+ },
2356
+ "defaultValue": {
2357
+ "type": "array",
2358
+ "items": {
2359
+ "type": "number"
2360
+ },
2361
+ "description": "Default value"
2362
+ },
2363
+ "min": {
1248
2364
  "type": "number",
1249
- "default": 20,
1250
- "description": "px 크기"
2365
+ "default": 0,
2366
+ "description": "Minimum"
1251
2367
  },
1252
- "aria-label": {
1253
- "type": "string",
1254
- "default": "Loading",
1255
- "description": "접근성 라벨"
2368
+ "max": {
2369
+ "type": "number",
2370
+ "default": 100,
2371
+ "description": "Maximum"
2372
+ },
2373
+ "step": {
2374
+ "type": "number",
2375
+ "default": 1,
2376
+ "description": "Step increment"
1256
2377
  },
1257
- "className": {
1258
- "type": "string",
1259
- "description": "색상 등 오버라이드"
1260
- }
1261
- },
1262
- "additionalProperties": false,
1263
- "description": "로딩 인디케이터. SVG 기반. role=\"status\" 내장."
1264
- }
1265
- },
1266
- "$schema": "http://json-schema.org/draft-07/schema#"
1267
- },
1268
- "switch": {
1269
- "$ref": "#/definitions/switchPropsSchema",
1270
- "definitions": {
1271
- "switchPropsSchema": {
1272
- "type": "object",
1273
- "properties": {
1274
2378
  "size": {
1275
2379
  "type": "string",
1276
2380
  "enum": [
1277
2381
  "sm",
1278
- "md"
2382
+ "md",
2383
+ "lg"
1279
2384
  ],
1280
2385
  "default": "md",
1281
- "description": "크기"
2386
+ "description": "Track height / thumb size"
1282
2387
  },
1283
- "checked": {
2388
+ "showValue": {
1284
2389
  "type": "boolean",
1285
- "description": "on/off 상태"
2390
+ "default": false,
2391
+ "description": "Show current value text"
2392
+ },
2393
+ "formatValue": {
2394
+ "description": "Value format function (value: number) => string"
2395
+ },
2396
+ "label": {
2397
+ "type": "string",
2398
+ "description": "Label text"
1286
2399
  },
1287
2400
  "disabled": {
1288
2401
  "type": "boolean",
1289
- "description": "비활성"
2402
+ "description": "Disabled"
2403
+ },
2404
+ "onValueChange": {
2405
+ "description": "Value change callback (value: number[]) => void"
2406
+ },
2407
+ "onValueCommit": {
2408
+ "description": "Committed value callback (on pointer up)"
1290
2409
  },
1291
2410
  "className": {
1292
2411
  "type": "string",
1293
- "description": "스타일 오버라이드"
2412
+ "description": "Style override"
1294
2413
  }
1295
2414
  },
1296
2415
  "additionalProperties": false,
1297
- "description": "토글 스위치. 네이티브 checkbox 기반, role=\"switch\"."
2416
+ "description": "Slider / Range input. Based on Radix Slider. Supports single and range mode."
1298
2417
  }
1299
2418
  },
1300
2419
  "$schema": "http://json-schema.org/draft-07/schema#"
1301
2420
  },
1302
- "tab": {
1303
- "$ref": "#/definitions/tabPropsSchema",
2421
+ "spinner": {
2422
+ "$ref": "#/definitions/spinnerPropsSchema",
1304
2423
  "definitions": {
1305
- "tabPropsSchema": {
2424
+ "spinnerPropsSchema": {
1306
2425
  "type": "object",
1307
2426
  "properties": {
1308
- "items": {
1309
- "type": "array",
1310
- "items": {
1311
- "type": "object",
1312
- "properties": {
2427
+ "size": {
2428
+ "type": "number",
2429
+ "default": 20,
2430
+ "description": "Size in px"
2431
+ },
2432
+ "color": {
2433
+ "type": "string",
2434
+ "description": "Color (CSS color value, default currentColor)"
2435
+ },
2436
+ "aria-label": {
2437
+ "type": "string",
2438
+ "default": "Loading",
2439
+ "description": "Accessibility label"
2440
+ },
2441
+ "style": {
2442
+ "description": "Inline style (CSSProperties)"
2443
+ },
2444
+ "className": {
2445
+ "type": "string",
2446
+ "description": "Color override etc."
2447
+ }
2448
+ },
2449
+ "additionalProperties": false,
2450
+ "description": "Loading indicator. SVG-based. Built-in role=\"status\"."
2451
+ }
2452
+ },
2453
+ "$schema": "http://json-schema.org/draft-07/schema#"
2454
+ },
2455
+ "stepper": {
2456
+ "$ref": "#/definitions/stepperPropsSchema",
2457
+ "definitions": {
2458
+ "stepperPropsSchema": {
2459
+ "type": "object",
2460
+ "properties": {
2461
+ "steps": {
2462
+ "type": "array",
2463
+ "items": {
2464
+ "type": "object",
2465
+ "properties": {
2466
+ "label": {
2467
+ "type": "string",
2468
+ "description": "Step title"
2469
+ },
2470
+ "description": {
2471
+ "type": "string",
2472
+ "description": "Step description"
2473
+ }
2474
+ },
2475
+ "required": [
2476
+ "label"
2477
+ ],
2478
+ "additionalProperties": false
2479
+ },
2480
+ "description": "Step items array (required)"
2481
+ },
2482
+ "current": {
2483
+ "type": "number",
2484
+ "default": 0,
2485
+ "description": "Current step index (0-based)"
2486
+ },
2487
+ "status": {
2488
+ "type": "string",
2489
+ "enum": [
2490
+ "process",
2491
+ "error"
2492
+ ],
2493
+ "default": "process",
2494
+ "description": "Current step status"
2495
+ },
2496
+ "orientation": {
2497
+ "type": "string",
2498
+ "enum": [
2499
+ "horizontal",
2500
+ "vertical"
2501
+ ],
2502
+ "default": "horizontal",
2503
+ "description": "Layout direction"
2504
+ },
2505
+ "size": {
2506
+ "type": "string",
2507
+ "enum": [
2508
+ "sm",
2509
+ "md"
2510
+ ],
2511
+ "default": "md",
2512
+ "description": "Size"
2513
+ },
2514
+ "className": {
2515
+ "type": "string",
2516
+ "description": "Style override"
2517
+ }
2518
+ },
2519
+ "required": [
2520
+ "steps"
2521
+ ],
2522
+ "additionalProperties": false,
2523
+ "description": "Stepper. Step-by-step progress indicator."
2524
+ }
2525
+ },
2526
+ "$schema": "http://json-schema.org/draft-07/schema#"
2527
+ },
2528
+ "switch": {
2529
+ "$ref": "#/definitions/switchPropsSchema",
2530
+ "definitions": {
2531
+ "switchPropsSchema": {
2532
+ "type": "object",
2533
+ "properties": {
2534
+ "size": {
2535
+ "type": "string",
2536
+ "enum": [
2537
+ "sm",
2538
+ "md"
2539
+ ],
2540
+ "default": "md",
2541
+ "description": "Size"
2542
+ },
2543
+ "checked": {
2544
+ "type": "boolean",
2545
+ "description": "On/off state"
2546
+ },
2547
+ "disabled": {
2548
+ "type": "boolean",
2549
+ "description": "Disabled"
2550
+ },
2551
+ "readOnly": {
2552
+ "type": "boolean",
2553
+ "description": "Read-only"
2554
+ },
2555
+ "name": {
2556
+ "type": "string",
2557
+ "description": "Form field name"
2558
+ },
2559
+ "id": {
2560
+ "type": "string",
2561
+ "description": "Element ID"
2562
+ },
2563
+ "onCheckedChange": {
2564
+ "description": "Toggle state change callback (checked: boolean) => void"
2565
+ },
2566
+ "onChange": {
2567
+ "description": "Native change event handler (ChangeEvent)"
2568
+ },
2569
+ "className": {
2570
+ "type": "string",
2571
+ "description": "Style override"
2572
+ }
2573
+ },
2574
+ "additionalProperties": false,
2575
+ "description": "Toggle switch. Native checkbox-based, role=\"switch\"."
2576
+ }
2577
+ },
2578
+ "$schema": "http://json-schema.org/draft-07/schema#"
2579
+ },
2580
+ "tab": {
2581
+ "$ref": "#/definitions/tabPropsSchema",
2582
+ "definitions": {
2583
+ "tabPropsSchema": {
2584
+ "type": "object",
2585
+ "properties": {
2586
+ "items": {
2587
+ "type": "array",
2588
+ "items": {
2589
+ "type": "object",
2590
+ "properties": {
1313
2591
  "key": {
1314
2592
  "type": "string",
1315
- "description": " 고유 "
2593
+ "description": "Tab unique key"
1316
2594
  },
1317
2595
  "label": {
1318
- "description": " 라벨 (ReactNode)"
2596
+ "description": "Tab label (ReactNode)"
1319
2597
  },
1320
2598
  "children": {
1321
- "description": " 패널 내용 (ReactNode)"
2599
+ "description": "Tab panel content (ReactNode)"
1322
2600
  },
1323
2601
  "disabled": {
1324
2602
  "type": "boolean",
1325
- "description": "비활성"
2603
+ "description": "Disabled"
1326
2604
  }
1327
2605
  },
1328
2606
  "required": [
@@ -1330,139 +2608,863 @@
1330
2608
  ],
1331
2609
  "additionalProperties": false
1332
2610
  },
1333
- "description": " 항목 배열 (필수)"
2611
+ "description": "Tab item array (required)"
2612
+ },
2613
+ "activeKey": {
2614
+ "type": "string",
2615
+ "description": "Controlled mode active key"
2616
+ },
2617
+ "defaultActiveKey": {
2618
+ "type": "string",
2619
+ "description": "Uncontrolled initial key"
2620
+ },
2621
+ "variant": {
2622
+ "type": "string",
2623
+ "enum": [
2624
+ "line",
2625
+ "pill"
2626
+ ],
2627
+ "default": "line",
2628
+ "description": "Style"
2629
+ },
2630
+ "size": {
2631
+ "type": "string",
2632
+ "enum": [
2633
+ "sm",
2634
+ "md"
2635
+ ],
2636
+ "default": "md",
2637
+ "description": "Size"
2638
+ },
2639
+ "destroyInactive": {
2640
+ "type": "boolean",
2641
+ "default": false,
2642
+ "description": "Unmount inactive panels"
2643
+ },
2644
+ "onTabChange": {
2645
+ "description": "Tab change callback (key: string) => void"
2646
+ },
2647
+ "className": {
2648
+ "type": "string",
2649
+ "description": "Root style"
2650
+ },
2651
+ "tabListClassName": {
2652
+ "type": "string",
2653
+ "description": "Tab list style"
2654
+ },
2655
+ "tabPanelClassName": {
2656
+ "type": "string",
2657
+ "description": "Tab panel style"
2658
+ }
2659
+ },
2660
+ "required": [
2661
+ "items"
2662
+ ],
2663
+ "additionalProperties": false,
2664
+ "description": "Tab navigation. line/pill variants."
2665
+ }
2666
+ },
2667
+ "$schema": "http://json-schema.org/draft-07/schema#"
2668
+ },
2669
+ "table": {
2670
+ "$ref": "#/definitions/tablePropsSchema",
2671
+ "definitions": {
2672
+ "tablePropsSchema": {
2673
+ "type": "object",
2674
+ "properties": {
2675
+ "list": {
2676
+ "anyOf": [
2677
+ {
2678
+ "type": "array"
2679
+ },
2680
+ {
2681
+ "type": "null"
2682
+ }
2683
+ ],
2684
+ "description": "Data array. null/undefined = loading state (required)"
2685
+ },
2686
+ "children": {
2687
+ "description": "Row render function ({ item, index }) => ReactNode (required)"
2688
+ },
2689
+ "hideThead": {
2690
+ "type": "boolean",
2691
+ "description": "Hide table header"
2692
+ },
2693
+ "loading": {
2694
+ "type": "boolean",
2695
+ "description": "Force loading state"
2696
+ },
2697
+ "loadingType": {
2698
+ "type": "string",
2699
+ "enum": [
2700
+ "loading",
2701
+ "skeleton"
2702
+ ],
2703
+ "default": "skeleton",
2704
+ "description": "Loading display type"
2705
+ },
2706
+ "loadingElement": {
2707
+ "description": "Custom loading element (ReactElement)"
2708
+ },
2709
+ "skeletonCount": {
2710
+ "type": "number",
2711
+ "default": 10,
2712
+ "description": "Skeleton row count"
2713
+ },
2714
+ "noDataMsg": {
2715
+ "description": "No data message (ReactElement | string)"
2716
+ },
2717
+ "notification": {
2718
+ "description": "Table top notification area (ReactNode)"
2719
+ },
2720
+ "sortUpElement": {
2721
+ "description": "Ascending sort icon (ReactElement)"
2722
+ },
2723
+ "sortDownElement": {
2724
+ "description": "Descending sort icon (ReactElement)"
2725
+ },
2726
+ "className": {
2727
+ "type": "string",
2728
+ "description": "Table wrapper style"
2729
+ },
2730
+ "theadClassName": {
2731
+ "type": "string",
2732
+ "description": "Header row style"
2733
+ }
2734
+ },
2735
+ "required": [
2736
+ "list"
2737
+ ],
2738
+ "additionalProperties": false,
2739
+ "description": "Table. Column definitions via TdColumn, row wrapping via TableRow. Built-in sorting/skeleton loading."
2740
+ }
2741
+ },
2742
+ "$schema": "http://json-schema.org/draft-07/schema#"
2743
+ },
2744
+ "tableRow": {
2745
+ "$ref": "#/definitions/tableRowPropsSchema",
2746
+ "definitions": {
2747
+ "tableRowPropsSchema": {
2748
+ "type": "object",
2749
+ "properties": {
2750
+ "variant": {
2751
+ "type": "string",
2752
+ "enum": [
2753
+ "default",
2754
+ "accent"
2755
+ ],
2756
+ "default": "default",
2757
+ "description": "Row style"
2758
+ },
2759
+ "className": {
2760
+ "type": "string",
2761
+ "description": "Style override"
2762
+ },
2763
+ "children": {
2764
+ "description": "TdColumn list (ReactNode, required)"
2765
+ },
2766
+ "onClick": {
2767
+ "description": "Row click callback (e: MouseEvent) => void"
2768
+ }
2769
+ },
2770
+ "additionalProperties": false,
2771
+ "description": "Table row. Used inside Table."
2772
+ }
2773
+ },
2774
+ "$schema": "http://json-schema.org/draft-07/schema#"
2775
+ },
2776
+ "tdColumn": {
2777
+ "$ref": "#/definitions/tdColumnPropsSchema",
2778
+ "definitions": {
2779
+ "tdColumnPropsSchema": {
2780
+ "type": "object",
2781
+ "properties": {
2782
+ "label": {
2783
+ "description": "Header label (ReactElement | string)"
2784
+ },
2785
+ "fieldId": {
2786
+ "type": [
2787
+ "string",
2788
+ "null"
2789
+ ],
2790
+ "description": "Column identifier (sort key, required)"
2791
+ },
2792
+ "size": {
2793
+ "type": [
2794
+ "number",
2795
+ "string"
2796
+ ],
2797
+ "description": "Column width (number → px, string → CSS value)"
2798
+ },
2799
+ "align": {
2800
+ "type": "string",
2801
+ "enum": [
2802
+ "left",
2803
+ "center",
2804
+ "right"
2805
+ ],
2806
+ "default": "left",
2807
+ "description": "Text alignment"
2808
+ },
2809
+ "textOverflow": {
2810
+ "type": "string",
2811
+ "enum": [
2812
+ "auto",
2813
+ "truncate",
2814
+ "wrap",
2815
+ "break-all"
2816
+ ],
2817
+ "default": "truncate",
2818
+ "description": "Text overflow handling"
2819
+ },
2820
+ "highlightKey": {
2821
+ "type": [
2822
+ "string",
2823
+ "null"
2824
+ ],
2825
+ "description": "Hover highlight group key"
2826
+ },
2827
+ "colSpan": {
2828
+ "type": "number",
2829
+ "description": "Column span"
2830
+ },
2831
+ "rowSpan": {
2832
+ "type": "number",
2833
+ "description": "Row span"
2834
+ },
2835
+ "thColSpan": {
2836
+ "type": "number",
2837
+ "description": "Header colSpan (<th>)"
2838
+ },
2839
+ "thRowSpan": {
2840
+ "type": "number",
2841
+ "description": "Header rowSpan (<th>)"
2842
+ },
2843
+ "enableSorting": {
2844
+ "type": "boolean",
2845
+ "description": "Enable sorting"
2846
+ },
2847
+ "order": {
2848
+ "type": "string",
2849
+ "enum": [
2850
+ "desc",
2851
+ "asc",
2852
+ ""
2853
+ ],
2854
+ "description": "Current sort direction"
2855
+ },
2856
+ "sortValue": {
2857
+ "type": [
2858
+ "string",
2859
+ "number"
2860
+ ],
2861
+ "description": "Sort criterion value"
2862
+ },
2863
+ "handleClickSort": {
2864
+ "description": "Sort click callback ({ index, fieldId, order }) => void"
2865
+ },
2866
+ "children": {
2867
+ "description": "Cell content (ReactNode, required)"
2868
+ },
2869
+ "className": {
2870
+ "type": "string",
2871
+ "description": "Style override"
2872
+ }
2873
+ },
2874
+ "required": [
2875
+ "fieldId"
2876
+ ],
2877
+ "additionalProperties": false,
2878
+ "description": "Table cell/column definition. Used inside TableRow."
2879
+ }
2880
+ },
2881
+ "$schema": "http://json-schema.org/draft-07/schema#"
2882
+ },
2883
+ "tagInput": {
2884
+ "$ref": "#/definitions/tagInputPropsSchema",
2885
+ "definitions": {
2886
+ "tagInputPropsSchema": {
2887
+ "type": "object",
2888
+ "properties": {
2889
+ "value": {
2890
+ "type": "array",
2891
+ "items": {
2892
+ "type": "string"
2893
+ },
2894
+ "description": "Controlled tags array"
2895
+ },
2896
+ "defaultValue": {
2897
+ "type": "array",
2898
+ "items": {
2899
+ "type": "string"
2900
+ },
2901
+ "description": "Default tags"
2902
+ },
2903
+ "onChange": {
2904
+ "description": "Tags change callback (tags: string[]) => void"
2905
+ },
2906
+ "placeholder": {
2907
+ "type": "string",
2908
+ "default": "태그 입력 후 Enter",
2909
+ "description": "Input placeholder"
2910
+ },
2911
+ "max": {
2912
+ "type": "number",
2913
+ "description": "Maximum number of tags"
2914
+ },
2915
+ "disabled": {
2916
+ "type": "boolean",
2917
+ "description": "Disabled"
2918
+ },
2919
+ "allowDuplicates": {
2920
+ "type": "boolean",
2921
+ "default": false,
2922
+ "description": "Allow duplicate tags"
2923
+ },
2924
+ "label": {
2925
+ "type": "string",
2926
+ "description": "Label text"
2927
+ },
2928
+ "description": {
2929
+ "type": "string",
2930
+ "description": "Helper text below input"
2931
+ },
2932
+ "size": {
2933
+ "type": "string",
2934
+ "enum": [
2935
+ "sm",
2936
+ "md",
2937
+ "lg"
2938
+ ],
2939
+ "default": "md",
2940
+ "description": "Size"
2941
+ },
2942
+ "className": {
2943
+ "type": "string",
2944
+ "description": "Style override"
2945
+ }
2946
+ },
2947
+ "additionalProperties": false,
2948
+ "description": "Tag input. Enter key to add, Backspace to delete last tag."
2949
+ }
2950
+ },
2951
+ "$schema": "http://json-schema.org/draft-07/schema#"
2952
+ },
2953
+ "textArea": {
2954
+ "$ref": "#/definitions/textAreaPropsSchema",
2955
+ "definitions": {
2956
+ "textAreaPropsSchema": {
2957
+ "type": "object",
2958
+ "properties": {
2959
+ "label": {
2960
+ "type": "string",
2961
+ "description": "Label text above the textarea"
2962
+ },
2963
+ "description": {
2964
+ "type": "string",
2965
+ "description": "Helper/error description below the textarea"
2966
+ },
2967
+ "size": {
2968
+ "type": "string",
2969
+ "enum": [
2970
+ "lg",
2971
+ "md"
2972
+ ],
2973
+ "description": "Font size variant (lg: 16px, md: 14px)"
2974
+ },
2975
+ "resize": {
2976
+ "type": "string",
2977
+ "enum": [
2978
+ "default",
2979
+ "auto",
2980
+ "none"
2981
+ ],
2982
+ "description": "Resize mode (default: manual, auto: auto-grow, none: fixed)"
2983
+ },
2984
+ "error": {
2985
+ "type": "boolean",
2986
+ "description": "Error state (auto aria-invalid)"
2987
+ },
2988
+ "showCount": {
2989
+ "type": "boolean",
2990
+ "description": "Show character count (requires maxLength)"
2991
+ },
2992
+ "maxLength": {
2993
+ "type": "number",
2994
+ "description": "Maximum character count"
2995
+ },
2996
+ "placeholder": {
2997
+ "type": "string",
2998
+ "description": "Placeholder"
2999
+ },
3000
+ "rows": {
3001
+ "type": "number",
3002
+ "description": "Visible row count"
3003
+ },
3004
+ "disabled": {
3005
+ "type": "boolean",
3006
+ "description": "Disabled"
3007
+ },
3008
+ "readOnly": {
3009
+ "type": "boolean",
3010
+ "description": "Read-only"
3011
+ },
3012
+ "value": {
3013
+ "type": "string",
3014
+ "description": "Input value (controlled mode)"
3015
+ },
3016
+ "defaultValue": {
3017
+ "type": "string",
3018
+ "description": "Initial value (uncontrolled mode)"
3019
+ },
3020
+ "name": {
3021
+ "type": "string",
3022
+ "description": "Form field name"
3023
+ },
3024
+ "id": {
3025
+ "type": "string",
3026
+ "description": "Element ID"
3027
+ },
3028
+ "autoFocus": {
3029
+ "type": "boolean",
3030
+ "description": "Auto focus"
3031
+ },
3032
+ "onValueChange": {
3033
+ "description": "Value change callback (value: string) => void"
3034
+ },
3035
+ "onChange": {
3036
+ "description": "Native change event handler"
3037
+ },
3038
+ "onBlur": {
3039
+ "description": "Blur callback"
3040
+ },
3041
+ "onFocus": {
3042
+ "description": "Focus callback"
3043
+ },
3044
+ "className": {
3045
+ "type": "string",
3046
+ "description": "Style override"
3047
+ }
3048
+ },
3049
+ "additionalProperties": false,
3050
+ "description": "Multi-line text input with label, description, character counter, and resize modes."
3051
+ }
3052
+ },
3053
+ "$schema": "http://json-schema.org/draft-07/schema#"
3054
+ },
3055
+ "textInput": {
3056
+ "$ref": "#/definitions/textInputPropsSchema",
3057
+ "definitions": {
3058
+ "textInputPropsSchema": {
3059
+ "type": "object",
3060
+ "properties": {
3061
+ "size": {
3062
+ "type": "string",
3063
+ "enum": [
3064
+ "md",
3065
+ "lg",
3066
+ "xl"
3067
+ ],
3068
+ "default": "md",
3069
+ "description": "Size"
3070
+ },
3071
+ "error": {
3072
+ "type": "boolean",
3073
+ "description": "Error state (auto aria-invalid)"
3074
+ },
3075
+ "prefixIcon": {
3076
+ "description": "Prefix icon (ReactNode)"
3077
+ },
3078
+ "suffixIcon": {
3079
+ "description": "Suffix icon (ReactNode)"
3080
+ },
3081
+ "label": {
3082
+ "description": "Label above input field (ReactNode)"
3083
+ },
3084
+ "description": {
3085
+ "description": "Description below input field (ReactNode, red on error)"
3086
+ },
3087
+ "showCount": {
3088
+ "type": "boolean",
3089
+ "description": "Show character count (requires maxLength)"
3090
+ },
3091
+ "maxLength": {
3092
+ "type": "number",
3093
+ "description": "Maximum character count"
1334
3094
  },
1335
- "activeKey": {
3095
+ "clearable": {
3096
+ "type": "boolean",
3097
+ "description": "Clear input via X button"
3098
+ },
3099
+ "placeholder": {
1336
3100
  "type": "string",
1337
- "description": "제어 모드 활성 키"
3101
+ "description": "Placeholder"
1338
3102
  },
1339
- "defaultActiveKey": {
3103
+ "disabled": {
3104
+ "type": "boolean",
3105
+ "description": "Disabled"
3106
+ },
3107
+ "readOnly": {
3108
+ "type": "boolean",
3109
+ "description": "Read-only"
3110
+ },
3111
+ "value": {
1340
3112
  "type": "string",
1341
- "description": "비제어 초기 "
3113
+ "description": "Input value (controlled mode)"
1342
3114
  },
1343
- "variant": {
3115
+ "defaultValue": {
1344
3116
  "type": "string",
1345
- "enum": [
1346
- "line",
1347
- "pill"
1348
- ],
1349
- "default": "line",
1350
- "description": "스타일"
3117
+ "description": "Initial value (uncontrolled mode)"
1351
3118
  },
1352
- "size": {
3119
+ "type": {
1353
3120
  "type": "string",
1354
- "enum": [
1355
- "sm",
1356
- "md"
1357
- ],
1358
- "default": "md",
1359
- "description": "크기"
3121
+ "description": "Input type (text, password, email, url, etc.)"
1360
3122
  },
1361
- "destroyInactive": {
3123
+ "name": {
3124
+ "type": "string",
3125
+ "description": "Form field name"
3126
+ },
3127
+ "id": {
3128
+ "type": "string",
3129
+ "description": "Element ID (for label htmlFor binding)"
3130
+ },
3131
+ "autoFocus": {
1362
3132
  "type": "boolean",
1363
- "default": false,
1364
- "description": "비활성 패널 언마운트"
3133
+ "description": "Auto focus"
3134
+ },
3135
+ "autoComplete": {
3136
+ "type": "string",
3137
+ "description": "Autocomplete hint (on, off, email, etc.)"
3138
+ },
3139
+ "onValueChange": {
3140
+ "description": "Value change callback (value: string) => void"
3141
+ },
3142
+ "onChange": {
3143
+ "description": "Native change event handler"
3144
+ },
3145
+ "onBlur": {
3146
+ "description": "Blur callback"
3147
+ },
3148
+ "onFocus": {
3149
+ "description": "Focus callback"
1365
3150
  },
1366
3151
  "className": {
1367
3152
  "type": "string",
1368
- "description": "루트 스타일"
3153
+ "description": "Style override"
3154
+ }
3155
+ },
3156
+ "additionalProperties": false,
3157
+ "description": "Text input field. Supports label, description, prefix/suffix icons, clearable, character counter."
3158
+ }
3159
+ },
3160
+ "$schema": "http://json-schema.org/draft-07/schema#"
3161
+ },
3162
+ "themeProvider": {
3163
+ "$ref": "#/definitions/themeProviderPropsSchema",
3164
+ "definitions": {
3165
+ "themeProviderPropsSchema": {
3166
+ "type": "object",
3167
+ "properties": {
3168
+ "children": {
3169
+ "description": "App root element (ReactNode, required)"
3170
+ },
3171
+ "defaultTheme": {
3172
+ "type": "string",
3173
+ "description": "Default theme (e.g. \"dark\", \"light\")"
1369
3174
  },
1370
- "tabListClassName": {
3175
+ "storageKey": {
1371
3176
  "type": "string",
1372
- "description": " 리스트 스타일"
3177
+ "description": "localStorage storage key (default: \"theme\")"
1373
3178
  },
1374
- "tabPanelClassName": {
3179
+ "themes": {
3180
+ "type": "array",
3181
+ "items": {
3182
+ "type": "string"
3183
+ },
3184
+ "description": "Available theme list (default: [\"light\", \"dark\"])"
3185
+ },
3186
+ "attribute": {
3187
+ "anyOf": [
3188
+ {
3189
+ "type": "string"
3190
+ },
3191
+ {
3192
+ "type": "array",
3193
+ "items": {
3194
+ "type": "string"
3195
+ }
3196
+ }
3197
+ ],
3198
+ "description": "Theme HTML attribute (default: \"data-theme\")"
3199
+ },
3200
+ "enableSystem": {
3201
+ "type": "boolean",
3202
+ "description": "Enable system theme detection"
3203
+ },
3204
+ "disableTransitionOnChange": {
3205
+ "type": "boolean",
3206
+ "description": "Disable transitions on theme change"
3207
+ },
3208
+ "forcedTheme": {
3209
+ "type": "string",
3210
+ "description": "Forced theme (user cannot change)"
3211
+ },
3212
+ "enableColorScheme": {
3213
+ "type": "boolean",
3214
+ "description": "Auto-set color-scheme CSS property"
3215
+ },
3216
+ "nonce": {
1375
3217
  "type": "string",
1376
- "description": " 패널 스타일"
3218
+ "description": "CSP nonce"
1377
3219
  }
1378
3220
  },
1379
- "required": [
1380
- "items"
1381
- ],
1382
3221
  "additionalProperties": false,
1383
- "description": " 네비게이션. line/pill 변형."
3222
+ "description": "Theme provider. Based on next-themes. Access theme state via useTheme() hook."
1384
3223
  }
1385
3224
  },
1386
3225
  "$schema": "http://json-schema.org/draft-07/schema#"
1387
3226
  },
1388
- "textArea": {
1389
- "$ref": "#/definitions/textAreaPropsSchema",
3227
+ "toastOptions": {
3228
+ "$ref": "#/definitions/toastOptionsSchema",
1390
3229
  "definitions": {
1391
- "textAreaPropsSchema": {
3230
+ "toastOptionsSchema": {
1392
3231
  "type": "object",
1393
3232
  "properties": {
1394
- "error": {
3233
+ "description": {
3234
+ "description": "Toast subtitle (ReactNode)"
3235
+ },
3236
+ "duration": {
3237
+ "type": "number",
3238
+ "description": "Auto-dismiss duration (ms). Default 4000"
3239
+ },
3240
+ "icon": {
3241
+ "description": "Custom icon (ReactNode)"
3242
+ },
3243
+ "action": {
3244
+ "description": "Action button. { label: ReactNode, onClick: () => void }"
3245
+ },
3246
+ "cancel": {
3247
+ "description": "Cancel button. { label: ReactNode, onClick: () => void }"
3248
+ },
3249
+ "closeButton": {
1395
3250
  "type": "boolean",
1396
- "description": "에러 상태 (aria-invalid 자동)"
3251
+ "description": "Show close (X) button"
1397
3252
  },
1398
- "showCount": {
3253
+ "dismissible": {
1399
3254
  "type": "boolean",
1400
- "description": "글자 표시 (maxLength 필요)"
3255
+ "description": "Allow dismiss via swipe/click"
1401
3256
  },
1402
- "maxLength": {
1403
- "type": "number",
1404
- "description": "최대 글자 "
3257
+ "richColors": {
3258
+ "type": "boolean",
3259
+ "description": "Apply strong colors for success/error/warning/info"
1405
3260
  },
1406
- "placeholder": {
3261
+ "invert": {
3262
+ "type": "boolean",
3263
+ "description": "Invert colors (dark↔light)"
3264
+ },
3265
+ "position": {
1407
3266
  "type": "string",
1408
- "description": "플레이스홀더"
3267
+ "enum": [
3268
+ "top-left",
3269
+ "top-center",
3270
+ "top-right",
3271
+ "bottom-left",
3272
+ "bottom-center",
3273
+ "bottom-right"
3274
+ ],
3275
+ "description": "Individual position for this toast"
1409
3276
  },
1410
- "rows": {
1411
- "type": "number",
1412
- "description": "표시 줄 수"
3277
+ "onDismiss": {
3278
+ "description": "Dismiss callback (toast: ToastT) => void"
3279
+ },
3280
+ "onAutoClose": {
3281
+ "description": "Auto-close callback (toast: ToastT) => void"
1413
3282
  },
1414
3283
  "className": {
1415
3284
  "type": "string",
1416
- "description": "스타일 오버라이드"
3285
+ "description": "Toast custom class"
3286
+ },
3287
+ "style": {
3288
+ "description": "Toast inline style (CSSProperties)"
3289
+ },
3290
+ "unstyled": {
3291
+ "type": "boolean",
3292
+ "description": "Remove default styles (for custom styling)"
3293
+ },
3294
+ "id": {
3295
+ "type": [
3296
+ "string",
3297
+ "number"
3298
+ ],
3299
+ "description": "Toast ID (for deduplication or updates)"
1417
3300
  }
1418
3301
  },
1419
3302
  "additionalProperties": false,
1420
- "description": "여러 텍스트 입력. 글자 카운터 내장."
3303
+ "description": "toast() call options. Used as toast(message, options). Fully customizable via toast.custom(jsx)."
1421
3304
  }
1422
3305
  },
1423
3306
  "$schema": "http://json-schema.org/draft-07/schema#"
1424
3307
  },
1425
- "textInput": {
1426
- "$ref": "#/definitions/textInputPropsSchema",
3308
+ "toaster": {
3309
+ "$ref": "#/definitions/toasterPropsSchema",
1427
3310
  "definitions": {
1428
- "textInputPropsSchema": {
3311
+ "toasterPropsSchema": {
1429
3312
  "type": "object",
1430
3313
  "properties": {
1431
- "size": {
3314
+ "position": {
1432
3315
  "type": "string",
1433
3316
  "enum": [
1434
- "sm",
1435
- "md",
1436
- "lg"
3317
+ "top-left",
3318
+ "top-center",
3319
+ "top-right",
3320
+ "bottom-left",
3321
+ "bottom-center",
3322
+ "bottom-right"
1437
3323
  ],
1438
- "default": "md",
1439
- "description": "크기"
3324
+ "default": "top-center",
3325
+ "description": "Default toast position"
1440
3326
  },
1441
- "error": {
3327
+ "unstyled": {
1442
3328
  "type": "boolean",
1443
- "description": "에러 상태 (aria-invalid 자동)"
3329
+ "default": false,
3330
+ "description": "Remove default styles (for custom styling)"
1444
3331
  },
1445
- "prefixIcon": {
1446
- "description": "앞쪽 아이콘 (ReactNode)"
3332
+ "theme": {
3333
+ "type": "string",
3334
+ "enum": [
3335
+ "light",
3336
+ "dark",
3337
+ "system"
3338
+ ],
3339
+ "description": "Theme setting"
1447
3340
  },
1448
- "suffixIcon": {
1449
- "description": "뒤쪽 아이콘 (ReactNode)"
3341
+ "richColors": {
3342
+ "type": "boolean",
3343
+ "description": "Apply strong colors for success/error/warning/info"
1450
3344
  },
1451
- "placeholder": {
3345
+ "expand": {
3346
+ "type": "boolean",
3347
+ "description": "Always show toasts in expanded state"
3348
+ },
3349
+ "duration": {
3350
+ "type": "number",
3351
+ "description": "Global auto-dismiss duration (ms). Default 4000"
3352
+ },
3353
+ "visibleToasts": {
3354
+ "type": "number",
3355
+ "description": "Maximum visible toasts at once"
3356
+ },
3357
+ "closeButton": {
3358
+ "type": "boolean",
3359
+ "description": "Show close button on all toasts"
3360
+ },
3361
+ "gap": {
3362
+ "type": "number",
3363
+ "description": "Gap between toasts (px)"
3364
+ },
3365
+ "offset": {
3366
+ "description": "Offset from screen edge. string | number | { top, right, bottom, left }"
3367
+ },
3368
+ "dir": {
3369
+ "type": "string",
3370
+ "enum": [
3371
+ "ltr",
3372
+ "rtl",
3373
+ "auto"
3374
+ ],
3375
+ "description": "Text direction"
3376
+ }
3377
+ },
3378
+ "additionalProperties": false,
3379
+ "description": "Toaster config. Place once at app root. Display notifications via toast(). Based on sonner."
3380
+ }
3381
+ },
3382
+ "$schema": "http://json-schema.org/draft-07/schema#"
3383
+ },
3384
+ "toggleGroup": {
3385
+ "$ref": "#/definitions/toggleGroupPropsSchema",
3386
+ "definitions": {
3387
+ "toggleGroupPropsSchema": {
3388
+ "type": "object",
3389
+ "properties": {
3390
+ "type": {
3391
+ "type": "string",
3392
+ "enum": [
3393
+ "single",
3394
+ "multiple"
3395
+ ],
3396
+ "default": "single",
3397
+ "description": "Selection mode"
3398
+ },
3399
+ "items": {
3400
+ "type": "array",
3401
+ "items": {
3402
+ "type": "object",
3403
+ "properties": {
3404
+ "value": {
3405
+ "type": "string",
3406
+ "description": "Item value"
3407
+ },
3408
+ "label": {
3409
+ "description": "Display label (ReactNode)"
3410
+ },
3411
+ "icon": {
3412
+ "description": "Icon (ReactNode)"
3413
+ },
3414
+ "disabled": {
3415
+ "type": "boolean",
3416
+ "description": "Disabled"
3417
+ }
3418
+ },
3419
+ "required": [
3420
+ "value"
3421
+ ],
3422
+ "additionalProperties": false
3423
+ },
3424
+ "description": "Toggle items array (required)"
3425
+ },
3426
+ "value": {
3427
+ "description": "Controlled value (string | string[])"
3428
+ },
3429
+ "defaultValue": {
3430
+ "description": "Default value"
3431
+ },
3432
+ "onValueChange": {
3433
+ "description": "Value change callback"
3434
+ },
3435
+ "variant": {
3436
+ "type": "string",
3437
+ "enum": [
3438
+ "default",
3439
+ "outline"
3440
+ ],
3441
+ "default": "default",
3442
+ "description": "Style variant"
3443
+ },
3444
+ "size": {
1452
3445
  "type": "string",
1453
- "description": "플레이스홀더"
3446
+ "enum": [
3447
+ "sm",
3448
+ "md",
3449
+ "lg"
3450
+ ],
3451
+ "default": "md",
3452
+ "description": "Size"
1454
3453
  },
1455
3454
  "disabled": {
1456
3455
  "type": "boolean",
1457
- "description": "비활성"
3456
+ "description": "Disable all items"
1458
3457
  },
1459
3458
  "className": {
1460
3459
  "type": "string",
1461
- "description": "스타일 오버라이드"
3460
+ "description": "Style override"
1462
3461
  }
1463
3462
  },
3463
+ "required": [
3464
+ "items"
3465
+ ],
1464
3466
  "additionalProperties": false,
1465
- "description": "텍스트 입력 필드. prefix/suffix 아이콘 지원."
3467
+ "description": "Toggle group / Segment control. Based on Radix ToggleGroup."
1466
3468
  }
1467
3469
  },
1468
3470
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -1473,8 +3475,11 @@
1473
3475
  "tooltipPropsSchema": {
1474
3476
  "type": "object",
1475
3477
  "properties": {
3478
+ "children": {
3479
+ "description": "Trigger element (ReactNode, required)"
3480
+ },
1476
3481
  "content": {
1477
- "description": "툴팁 내용 (ReactNode, 필수)"
3482
+ "description": "Tooltip content (ReactNode, required)"
1478
3483
  },
1479
3484
  "variant": {
1480
3485
  "type": "string",
@@ -1483,7 +3488,7 @@
1483
3488
  "light"
1484
3489
  ],
1485
3490
  "default": "dark",
1486
- "description": "스타일"
3491
+ "description": "Style"
1487
3492
  },
1488
3493
  "side": {
1489
3494
  "type": "string",
@@ -1494,7 +3499,7 @@
1494
3499
  "left"
1495
3500
  ],
1496
3501
  "default": "top",
1497
- "description": "위치"
3502
+ "description": "Position"
1498
3503
  },
1499
3504
  "align": {
1500
3505
  "type": "string",
@@ -1504,99 +3509,29 @@
1504
3509
  "end"
1505
3510
  ],
1506
3511
  "default": "center",
1507
- "description": "정렬"
3512
+ "description": "Alignment"
1508
3513
  },
1509
3514
  "delayDuration": {
1510
3515
  "type": "number",
1511
3516
  "default": 200,
1512
- "description": "표시 지연 (ms)"
3517
+ "description": "Show delay (ms)"
1513
3518
  },
1514
3519
  "disabled": {
1515
3520
  "type": "boolean",
1516
3521
  "default": false,
1517
- "description": "비활성"
3522
+ "description": "Disabled"
1518
3523
  },
1519
3524
  "className": {
1520
3525
  "type": "string",
1521
- "description": "Content 스타일"
3526
+ "description": "Content style"
1522
3527
  },
1523
3528
  "triggerClassName": {
1524
3529
  "type": "string",
1525
- "description": "Trigger 스타일"
1526
- }
1527
- },
1528
- "additionalProperties": false,
1529
- "description": "툴팁. Radix Tooltip 기반. Provider 내장."
1530
- }
1531
- },
1532
- "$schema": "http://json-schema.org/draft-07/schema#"
1533
- },
1534
- "typography": {
1535
- "$ref": "#/definitions/typographyPropsSchema",
1536
- "definitions": {
1537
- "typographyPropsSchema": {
1538
- "type": "object",
1539
- "properties": {
1540
- "variant": {
1541
- "type": "string",
1542
- "enum": [
1543
- "h1",
1544
- "h2",
1545
- "h3",
1546
- "h4",
1547
- "h5",
1548
- "h6",
1549
- "body1",
1550
- "body2",
1551
- "caption",
1552
- "overline",
1553
- "label"
1554
- ],
1555
- "default": "body1",
1556
- "description": "타이포그래피 변형"
1557
- },
1558
- "color": {
1559
- "type": "string",
1560
- "enum": [
1561
- "primary",
1562
- "secondary",
1563
- "tertiary",
1564
- "muted",
1565
- "accent",
1566
- "danger",
1567
- "success",
1568
- "inherit"
1569
- ],
1570
- "default": "primary",
1571
- "description": "텍스트 색상"
1572
- },
1573
- "as": {
1574
- "type": "string",
1575
- "enum": [
1576
- "h1",
1577
- "h2",
1578
- "h3",
1579
- "h4",
1580
- "h5",
1581
- "h6",
1582
- "p",
1583
- "span",
1584
- "label",
1585
- "div"
1586
- ],
1587
- "description": "렌더링 태그 (variant별 기본 태그 자동)"
1588
- },
1589
- "asChild": {
1590
- "type": "boolean",
1591
- "description": "true면 자식 요소로 렌더링 (Slot 패턴)"
1592
- },
1593
- "className": {
1594
- "type": "string",
1595
- "description": "스타일 오버라이드"
3530
+ "description": "Trigger style"
1596
3531
  }
1597
3532
  },
1598
3533
  "additionalProperties": false,
1599
- "description": "타이포그래피. 시맨틱 태그 + CVA 변형."
3534
+ "description": "Tooltip. Based on Radix Tooltip. Built-in Provider."
1600
3535
  }
1601
3536
  },
1602
3537
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -1609,7 +3544,7 @@
1609
3544
  "properties": {
1610
3545
  "items": {
1611
3546
  "type": "array",
1612
- "description": "데이터 배열 (필수)"
3547
+ "description": "Data array (required)"
1613
3548
  },
1614
3549
  "estimateSize": {
1615
3550
  "anyOf": [
@@ -1618,36 +3553,42 @@
1618
3553
  },
1619
3554
  {}
1620
3555
  ],
1621
- "description": "예상 아이템 높이 (number 또는 함수, 필수)"
3556
+ "description": "Estimated item height (number or (index) => number, required)"
1622
3557
  },
1623
3558
  "renderItem": {
1624
- "description": "아이템 렌더러 (필수)"
3559
+ "description": "Item renderer (item, index, virtualItem) => ReactNode (required)"
1625
3560
  },
1626
3561
  "overscan": {
1627
3562
  "type": "number",
1628
3563
  "default": 5,
1629
- "description": "오버스캔 "
3564
+ "description": "Overscan count"
1630
3565
  },
1631
3566
  "gap": {
1632
3567
  "type": "number",
1633
3568
  "default": 0,
1634
- "description": "아이템 간격 (px)"
3569
+ "description": "Item gap (px)"
1635
3570
  },
1636
3571
  "className": {
1637
3572
  "type": "string",
1638
- "description": "스크롤 컨테이너 스타일"
3573
+ "description": "Scroll container style"
3574
+ },
3575
+ "style": {
3576
+ "description": "Inline style (CSSProperties)"
1639
3577
  },
1640
3578
  "endReachedThreshold": {
1641
3579
  "type": "number",
1642
3580
  "default": 200,
1643
- "description": " 감지 임계값 (px)"
3581
+ "description": "End detection threshold (px)"
3582
+ },
3583
+ "onEndReached": {
3584
+ "description": "End reached callback () => void"
1644
3585
  }
1645
3586
  },
1646
3587
  "required": [
1647
3588
  "items"
1648
3589
  ],
1649
3590
  "additionalProperties": false,
1650
- "description": "가상 스크롤 리스트. @tanstack/react-virtual 기반."
3591
+ "description": "Virtual scroll list. Based on @tanstack/react-virtual."
1651
3592
  }
1652
3593
  },
1653
3594
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -1660,7 +3601,11 @@
1660
3601
  "properties": {
1661
3602
  "items": {
1662
3603
  "type": "array",
1663
- "description": "데이터 배열 (필수)"
3604
+ "description": "Data array (required)"
3605
+ },
3606
+ "columns": {
3607
+ "type": "number",
3608
+ "description": "Column count (required)"
1664
3609
  },
1665
3610
  "estimateSize": {
1666
3611
  "anyOf": [
@@ -1669,28 +3614,35 @@
1669
3614
  },
1670
3615
  {}
1671
3616
  ],
1672
- "description": "예상 아이템 높이 (필수)"
1673
- },
1674
- "columns": {
1675
- "type": "number",
1676
- "description": "열 수 (필수)"
3617
+ "description": "Estimated item height (required)"
1677
3618
  },
1678
3619
  "renderItem": {
1679
- "description": "아이템 렌더러 (필수)"
3620
+ "description": "Item renderer (item, index) => ReactNode (required)"
1680
3621
  },
1681
3622
  "overscan": {
1682
3623
  "type": "number",
1683
3624
  "default": 3,
1684
- "description": "오버스캔 "
3625
+ "description": "Overscan count"
1685
3626
  },
1686
3627
  "gap": {
1687
3628
  "type": "number",
1688
3629
  "default": 0,
1689
- "description": "아이템 간격 (px)"
3630
+ "description": "Item gap (px)"
1690
3631
  },
1691
3632
  "className": {
1692
3633
  "type": "string",
1693
- "description": "스크롤 컨테이너 스타일"
3634
+ "description": "Scroll container style"
3635
+ },
3636
+ "style": {
3637
+ "description": "Inline style (CSSProperties)"
3638
+ },
3639
+ "endReachedThreshold": {
3640
+ "type": "number",
3641
+ "default": 200,
3642
+ "description": "End detection threshold (px)"
3643
+ },
3644
+ "onEndReached": {
3645
+ "description": "End reached callback () => void"
1694
3646
  }
1695
3647
  },
1696
3648
  "required": [
@@ -1698,7 +3650,7 @@
1698
3650
  "columns"
1699
3651
  ],
1700
3652
  "additionalProperties": false,
1701
- "description": "가상 스크롤 그리드. @tanstack/react-virtual 기반."
3653
+ "description": "Virtual scroll grid. Based on @tanstack/react-virtual."
1702
3654
  }
1703
3655
  },
1704
3656
  "$schema": "http://json-schema.org/draft-07/schema#"