@nexus-cross/design-system 1.0.0

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 (319) hide show
  1. package/cursor-rules/nexus-project-setup.mdc +292 -0
  2. package/cursor-rules/nexus-ui-api.mdc +698 -0
  3. package/cursor-rules/nexus-ui-components.mdc +136 -0
  4. package/dist/accordion.d.mts +28 -0
  5. package/dist/accordion.d.ts +28 -0
  6. package/dist/accordion.js +28 -0
  7. package/dist/accordion.mjs +3 -0
  8. package/dist/avatar.d.mts +17 -0
  9. package/dist/avatar.d.ts +17 -0
  10. package/dist/avatar.js +16 -0
  11. package/dist/avatar.mjs +3 -0
  12. package/dist/button.d.mts +17 -0
  13. package/dist/button.d.ts +17 -0
  14. package/dist/button.js +16 -0
  15. package/dist/button.mjs +3 -0
  16. package/dist/carousel.d.mts +36 -0
  17. package/dist/carousel.d.ts +36 -0
  18. package/dist/carousel.js +32 -0
  19. package/dist/carousel.mjs +3 -0
  20. package/dist/checkbox.d.mts +21 -0
  21. package/dist/checkbox.d.ts +21 -0
  22. package/dist/checkbox.js +20 -0
  23. package/dist/checkbox.mjs +3 -0
  24. package/dist/chip.d.mts +16 -0
  25. package/dist/chip.d.ts +16 -0
  26. package/dist/chip.js +16 -0
  27. package/dist/chip.mjs +3 -0
  28. package/dist/chunks/chunk-22ULI3BF.js +21 -0
  29. package/dist/chunks/chunk-26BUGBOY.mjs +57 -0
  30. package/dist/chunks/chunk-2JTPRBHZ.mjs +36 -0
  31. package/dist/chunks/chunk-2MC7XJSE.js +98 -0
  32. package/dist/chunks/chunk-2RPRCWKV.mjs +139 -0
  33. package/dist/chunks/chunk-2ZXDXO4I.js +166 -0
  34. package/dist/chunks/chunk-33UFQJIO.mjs +135 -0
  35. package/dist/chunks/chunk-3HHJORN7.mjs +137 -0
  36. package/dist/chunks/chunk-3PCNRCTB.js +61 -0
  37. package/dist/chunks/chunk-3VFBPFZF.mjs +640 -0
  38. package/dist/chunks/chunk-4J3GCZ7W.mjs +102 -0
  39. package/dist/chunks/chunk-54IA2P2Z.mjs +40 -0
  40. package/dist/chunks/chunk-54RBL7J4.mjs +179 -0
  41. package/dist/chunks/chunk-5JHJNN2K.js +83 -0
  42. package/dist/chunks/chunk-5JHN4FCY.mjs +58 -0
  43. package/dist/chunks/chunk-6FMDO6TT.mjs +114 -0
  44. package/dist/chunks/chunk-6H7V2I3X.mjs +270 -0
  45. package/dist/chunks/chunk-7AISZYWL.js +7 -0
  46. package/dist/chunks/chunk-7G65JBTN.js +133 -0
  47. package/dist/chunks/chunk-ADO7PDLY.mjs +66 -0
  48. package/dist/chunks/chunk-AFSEYJZT.js +267 -0
  49. package/dist/chunks/chunk-AOXXE5UQ.mjs +14 -0
  50. package/dist/chunks/chunk-AZ2URLDD.js +39 -0
  51. package/dist/chunks/chunk-B6G5TJRO.js +116 -0
  52. package/dist/chunks/chunk-BLGQHR3M.js +56 -0
  53. package/dist/chunks/chunk-BPUQ2CO2.mjs +48 -0
  54. package/dist/chunks/chunk-BSZ2LN6E.js +129 -0
  55. package/dist/chunks/chunk-CA3SOLI3.mjs +78 -0
  56. package/dist/chunks/chunk-CSJDDREF.js +90 -0
  57. package/dist/chunks/chunk-CVYXRSXT.mjs +8 -0
  58. package/dist/chunks/chunk-CZC76ZD5.js +10 -0
  59. package/dist/chunks/chunk-D6FII7HW.js +202 -0
  60. package/dist/chunks/chunk-DLFV7ZZV.js +112 -0
  61. package/dist/chunks/chunk-DO6VK2QQ.mjs +108 -0
  62. package/dist/chunks/chunk-ECVAVQUY.mjs +243 -0
  63. package/dist/chunks/chunk-EHAUUUWB.mjs +120 -0
  64. package/dist/chunks/chunk-EVOOTSY5.js +59 -0
  65. package/dist/chunks/chunk-GX6GSWX3.mjs +38 -0
  66. package/dist/chunks/chunk-HHXDOKXY.js +108 -0
  67. package/dist/chunks/chunk-HNLI646G.mjs +325 -0
  68. package/dist/chunks/chunk-HUPAHDJ7.js +273 -0
  69. package/dist/chunks/chunk-I252NERB.mjs +21 -0
  70. package/dist/chunks/chunk-IE4DGLMH.js +75 -0
  71. package/dist/chunks/chunk-INP2AH3B.js +27 -0
  72. package/dist/chunks/chunk-IOSIQLZL.js +70 -0
  73. package/dist/chunks/chunk-J5ZKGPBY.js +132 -0
  74. package/dist/chunks/chunk-JNMCYWGY.js +10 -0
  75. package/dist/chunks/chunk-LI7SFBUQ.mjs +89 -0
  76. package/dist/chunks/chunk-LMMON5AU.mjs +81 -0
  77. package/dist/chunks/chunk-LOQXCHKL.js +74 -0
  78. package/dist/chunks/chunk-MA2VCCIY.js +71 -0
  79. package/dist/chunks/chunk-MCKOWMLS.mjs +8 -0
  80. package/dist/chunks/chunk-MRRKW5QN.mjs +108 -0
  81. package/dist/chunks/chunk-MTX7GD3H.js +80 -0
  82. package/dist/chunks/chunk-NFIPQZ4O.js +100 -0
  83. package/dist/chunks/chunk-NHDGKOAM.js +104 -0
  84. package/dist/chunks/chunk-OMN5YQCE.js +143 -0
  85. package/dist/chunks/chunk-OTGS6BDQ.mjs +25 -0
  86. package/dist/chunks/chunk-P2T72N62.mjs +34 -0
  87. package/dist/chunks/chunk-P3DZKXG4.js +116 -0
  88. package/dist/chunks/chunk-QK6NCII4.js +36 -0
  89. package/dist/chunks/chunk-QZ4QR3XV.mjs +142 -0
  90. package/dist/chunks/chunk-RS3SBY3I.js +163 -0
  91. package/dist/chunks/chunk-RX5UKRYK.mjs +76 -0
  92. package/dist/chunks/chunk-SGNRVYYQ.mjs +99 -0
  93. package/dist/chunks/chunk-SJMCPSVH.mjs +76 -0
  94. package/dist/chunks/chunk-T2IY2TSR.js +43 -0
  95. package/dist/chunks/chunk-U53UA76K.js +653 -0
  96. package/dist/chunks/chunk-U56AGSLE.mjs +106 -0
  97. package/dist/chunks/chunk-ULGYTBCT.mjs +47 -0
  98. package/dist/chunks/chunk-V5OTJP6H.mjs +5 -0
  99. package/dist/chunks/chunk-VGO4Z2WH.js +336 -0
  100. package/dist/chunks/chunk-VIGRCJAE.mjs +37 -0
  101. package/dist/chunks/chunk-VVXQZ4XH.mjs +93 -0
  102. package/dist/chunks/chunk-W4GG5A7K.mjs +51 -0
  103. package/dist/chunks/chunk-WKCXACMZ.js +99 -0
  104. package/dist/chunks/chunk-WR55D4ZS.js +80 -0
  105. package/dist/chunks/chunk-X2SHTVZQ.js +89 -0
  106. package/dist/chunks/chunk-XEHFB62A.js +82 -0
  107. package/dist/chunks/chunk-XG6QG65W.mjs +63 -0
  108. package/dist/chunks/chunk-YB5ZKHVB.js +64 -0
  109. package/dist/chunks/chunk-YCG4FZC3.js +167 -0
  110. package/dist/chunks/chunk-YEWKPWK3.mjs +80 -0
  111. package/dist/chunks/chunk-YLO4UKSC.mjs +48 -0
  112. package/dist/chunks/chunk-YZV6FWE7.js +160 -0
  113. package/dist/chunks/chunk-ZWSIIGA3.mjs +58 -0
  114. package/dist/client-only.d.mts +13 -0
  115. package/dist/client-only.d.ts +13 -0
  116. package/dist/client-only.js +11 -0
  117. package/dist/client-only.mjs +2 -0
  118. package/dist/countdown.d.mts +27 -0
  119. package/dist/countdown.d.ts +27 -0
  120. package/dist/countdown.js +16 -0
  121. package/dist/countdown.mjs +3 -0
  122. package/dist/counter.d.mts +15 -0
  123. package/dist/counter.d.ts +15 -0
  124. package/dist/counter.js +11 -0
  125. package/dist/counter.mjs +2 -0
  126. package/dist/data-list.d.mts +33 -0
  127. package/dist/data-list.d.ts +33 -0
  128. package/dist/data-list.js +14 -0
  129. package/dist/data-list.mjs +5 -0
  130. package/dist/divider.d.mts +14 -0
  131. package/dist/divider.d.ts +14 -0
  132. package/dist/divider.js +16 -0
  133. package/dist/divider.mjs +3 -0
  134. package/dist/drawer.d.mts +42 -0
  135. package/dist/drawer.d.ts +42 -0
  136. package/dist/drawer.js +44 -0
  137. package/dist/drawer.mjs +3 -0
  138. package/dist/ellipsis.d.mts +16 -0
  139. package/dist/ellipsis.d.ts +16 -0
  140. package/dist/ellipsis.js +12 -0
  141. package/dist/ellipsis.mjs +3 -0
  142. package/dist/error-boundary.d.mts +20 -0
  143. package/dist/error-boundary.d.ts +20 -0
  144. package/dist/error-boundary.js +11 -0
  145. package/dist/error-boundary.mjs +2 -0
  146. package/dist/hooks/useCheckDevice.d.mts +47 -0
  147. package/dist/hooks/useCheckDevice.d.ts +47 -0
  148. package/dist/hooks/useCheckDevice.js +8 -0
  149. package/dist/hooks/useCheckDevice.mjs +2 -0
  150. package/dist/hooks/useClickOutside.d.mts +12 -0
  151. package/dist/hooks/useClickOutside.d.ts +12 -0
  152. package/dist/hooks/useClickOutside.js +8 -0
  153. package/dist/hooks/useClickOutside.mjs +2 -0
  154. package/dist/hooks/useDraggableBottomSheet.d.mts +24 -0
  155. package/dist/hooks/useDraggableBottomSheet.d.ts +24 -0
  156. package/dist/hooks/useDraggableBottomSheet.js +11 -0
  157. package/dist/hooks/useDraggableBottomSheet.mjs +2 -0
  158. package/dist/hooks/useDraggableWindow.d.mts +21 -0
  159. package/dist/hooks/useDraggableWindow.d.ts +21 -0
  160. package/dist/hooks/useDraggableWindow.js +11 -0
  161. package/dist/hooks/useDraggableWindow.mjs +2 -0
  162. package/dist/hooks/useInView.d.mts +14 -0
  163. package/dist/hooks/useInView.d.ts +14 -0
  164. package/dist/hooks/useInView.js +17 -0
  165. package/dist/hooks/useInView.mjs +2 -0
  166. package/dist/hooks/useModal.d.mts +2 -0
  167. package/dist/hooks/useModal.d.ts +2 -0
  168. package/dist/hooks/useModal.js +11 -0
  169. package/dist/hooks/useModal.mjs +2 -0
  170. package/dist/index.d.mts +76 -0
  171. package/dist/index.d.ts +76 -0
  172. package/dist/index.js +746 -0
  173. package/dist/index.mjs +328 -0
  174. package/dist/infinite-scroll.d.mts +26 -0
  175. package/dist/infinite-scroll.d.ts +26 -0
  176. package/dist/infinite-scroll.js +12 -0
  177. package/dist/infinite-scroll.mjs +3 -0
  178. package/dist/marquee.d.mts +12 -0
  179. package/dist/marquee.d.ts +12 -0
  180. package/dist/marquee.js +12 -0
  181. package/dist/marquee.mjs +3 -0
  182. package/dist/modal/index.d.mts +87 -0
  183. package/dist/modal/index.d.ts +87 -0
  184. package/dist/modal/index.js +54 -0
  185. package/dist/modal/index.mjs +9 -0
  186. package/dist/number-input.d.mts +38 -0
  187. package/dist/number-input.d.ts +38 -0
  188. package/dist/number-input.js +20 -0
  189. package/dist/number-input.mjs +3 -0
  190. package/dist/pagination.d.mts +22 -0
  191. package/dist/pagination.d.ts +22 -0
  192. package/dist/pagination.js +20 -0
  193. package/dist/pagination.mjs +3 -0
  194. package/dist/popover.d.mts +25 -0
  195. package/dist/popover.d.ts +25 -0
  196. package/dist/popover.js +32 -0
  197. package/dist/popover.mjs +3 -0
  198. package/dist/radio-group.d.mts +29 -0
  199. package/dist/radio-group.d.ts +29 -0
  200. package/dist/radio-group.js +24 -0
  201. package/dist/radio-group.mjs +3 -0
  202. package/dist/schemas/_all.json +2250 -0
  203. package/dist/schemas/accordion.json +101 -0
  204. package/dist/schemas/avatar.json +55 -0
  205. package/dist/schemas/button.json +71 -0
  206. package/dist/schemas/carousel.json +32 -0
  207. package/dist/schemas/carouselButton.json +20 -0
  208. package/dist/schemas/carouselDots.json +17 -0
  209. package/dist/schemas/carouselSlide.json +20 -0
  210. package/dist/schemas/checkBox.json +57 -0
  211. package/dist/schemas/chip.json +49 -0
  212. package/dist/schemas/clientOnly.json +19 -0
  213. package/dist/schemas/countdown.json +58 -0
  214. package/dist/schemas/counter.json +57 -0
  215. package/dist/schemas/dataList.json +56 -0
  216. package/dist/schemas/divider.json +40 -0
  217. package/dist/schemas/drawer.json +27 -0
  218. package/dist/schemas/drawerContent.json +50 -0
  219. package/dist/schemas/ellipsis.json +49 -0
  220. package/dist/schemas/errorBoundary.json +22 -0
  221. package/dist/schemas/infiniteScroll.json +65 -0
  222. package/dist/schemas/marquee.json +46 -0
  223. package/dist/schemas/modalCall.json +21 -0
  224. package/dist/schemas/modalTemplate.json +123 -0
  225. package/dist/schemas/numberInput.json +77 -0
  226. package/dist/schemas/pagination.json +50 -0
  227. package/dist/schemas/popover.json +67 -0
  228. package/dist/schemas/radioGroup.json +61 -0
  229. package/dist/schemas/radioItem.json +35 -0
  230. package/dist/schemas/select.json +62 -0
  231. package/dist/schemas/selectItem.json +31 -0
  232. package/dist/schemas/skeleton.json +48 -0
  233. package/dist/schemas/spinner.json +27 -0
  234. package/dist/schemas/switch.json +41 -0
  235. package/dist/schemas/tab.json +89 -0
  236. package/dist/schemas/table.json +75 -0
  237. package/dist/schemas/tableRow.json +32 -0
  238. package/dist/schemas/tdColumn.json +107 -0
  239. package/dist/schemas/textArea.json +44 -0
  240. package/dist/schemas/textInput.json +67 -0
  241. package/dist/schemas/themeProvider.json +65 -0
  242. package/dist/schemas/toaster.json +31 -0
  243. package/dist/schemas/tooltip.json +67 -0
  244. package/dist/schemas/virtualGrid.json +59 -0
  245. package/dist/schemas/virtualList.json +54 -0
  246. package/dist/schemas.d.mts +1263 -0
  247. package/dist/schemas.d.ts +1263 -0
  248. package/dist/schemas.js +513 -0
  249. package/dist/schemas.mjs +469 -0
  250. package/dist/select.d.mts +31 -0
  251. package/dist/select.d.ts +31 -0
  252. package/dist/select.js +24 -0
  253. package/dist/select.mjs +3 -0
  254. package/dist/skeleton.d.mts +15 -0
  255. package/dist/skeleton.d.ts +15 -0
  256. package/dist/skeleton.js +12 -0
  257. package/dist/skeleton.mjs +3 -0
  258. package/dist/spinner.d.mts +9 -0
  259. package/dist/spinner.d.ts +9 -0
  260. package/dist/spinner.js +12 -0
  261. package/dist/spinner.mjs +3 -0
  262. package/dist/styles/layer.d.mts +3 -0
  263. package/dist/styles/layer.d.ts +3 -0
  264. package/dist/styles/layer.js +18 -0
  265. package/dist/styles/layer.mjs +16 -0
  266. package/dist/styles.css +2401 -0
  267. package/dist/styles.d.mts +3 -0
  268. package/dist/styles.d.ts +3 -0
  269. package/dist/styles.js +16 -0
  270. package/dist/styles.layered.css +2404 -0
  271. package/dist/styles.mjs +14 -0
  272. package/dist/switch.d.mts +15 -0
  273. package/dist/switch.d.ts +15 -0
  274. package/dist/switch.js +16 -0
  275. package/dist/switch.mjs +3 -0
  276. package/dist/tab.d.mts +36 -0
  277. package/dist/tab.d.ts +36 -0
  278. package/dist/tab.js +20 -0
  279. package/dist/tab.mjs +3 -0
  280. package/dist/table.d.mts +80 -0
  281. package/dist/table.d.ts +80 -0
  282. package/dist/table.js +33 -0
  283. package/dist/table.mjs +4 -0
  284. package/dist/text-area.d.mts +15 -0
  285. package/dist/text-area.d.ts +15 -0
  286. package/dist/text-area.js +16 -0
  287. package/dist/text-area.mjs +3 -0
  288. package/dist/text-input.d.mts +21 -0
  289. package/dist/text-input.d.ts +21 -0
  290. package/dist/text-input.js +16 -0
  291. package/dist/text-input.mjs +3 -0
  292. package/dist/theme-provider.d.mts +25 -0
  293. package/dist/theme-provider.d.ts +25 -0
  294. package/dist/theme-provider.js +15 -0
  295. package/dist/theme-provider.mjs +2 -0
  296. package/dist/toast.d.mts +42 -0
  297. package/dist/toast.d.ts +42 -0
  298. package/dist/toast.js +20 -0
  299. package/dist/toast.mjs +3 -0
  300. package/dist/tooltip.d.mts +24 -0
  301. package/dist/tooltip.d.ts +24 -0
  302. package/dist/tooltip.js +20 -0
  303. package/dist/tooltip.mjs +3 -0
  304. package/dist/useModal-BsGIcP8t.d.mts +128 -0
  305. package/dist/useModal-BsGIcP8t.d.ts +128 -0
  306. package/dist/utils/cn.d.mts +5 -0
  307. package/dist/utils/cn.d.ts +5 -0
  308. package/dist/utils/cn.js +11 -0
  309. package/dist/utils/cn.mjs +2 -0
  310. package/dist/utils/scroll.d.mts +4 -0
  311. package/dist/utils/scroll.d.ts +4 -0
  312. package/dist/utils/scroll.js +15 -0
  313. package/dist/utils/scroll.mjs +2 -0
  314. package/dist/virtual-scroll.d.mts +34 -0
  315. package/dist/virtual-scroll.d.ts +34 -0
  316. package/dist/virtual-scroll.js +16 -0
  317. package/dist/virtual-scroll.mjs +3 -0
  318. package/package.json +291 -0
  319. package/scripts/setup-cursor-rules.cjs +92 -0
@@ -0,0 +1,2250 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "description": "@nexus-cross/design-system component schemas",
4
+ "components": {
5
+ "accordion": {
6
+ "$ref": "#/definitions/accordionPropsSchema",
7
+ "definitions": {
8
+ "accordionPropsSchema": {
9
+ "type": "object",
10
+ "properties": {
11
+ "items": {
12
+ "type": "array",
13
+ "items": {
14
+ "type": "object",
15
+ "properties": {
16
+ "id": {
17
+ "type": "string",
18
+ "description": "고유 ID"
19
+ },
20
+ "trigger": {
21
+ "description": "트리거 내용 (ReactNode)"
22
+ },
23
+ "content": {
24
+ "description": "펼침 내용 (ReactNode)"
25
+ },
26
+ "disabled": {
27
+ "type": "boolean",
28
+ "description": "비활성"
29
+ },
30
+ "className": {
31
+ "type": "string"
32
+ },
33
+ "triggerClassName": {
34
+ "type": "string"
35
+ },
36
+ "contentClassName": {
37
+ "type": "string"
38
+ }
39
+ },
40
+ "required": [
41
+ "id"
42
+ ],
43
+ "additionalProperties": false
44
+ },
45
+ "description": "아코디언 항목 배열 (필수)"
46
+ },
47
+ "type": {
48
+ "type": "string",
49
+ "enum": [
50
+ "single",
51
+ "multiple"
52
+ ],
53
+ "default": "single",
54
+ "description": "단일/다중 열기"
55
+ },
56
+ "collapsible": {
57
+ "type": "boolean",
58
+ "default": true,
59
+ "description": "전부 접기 가능"
60
+ },
61
+ "value": {
62
+ "anyOf": [
63
+ {
64
+ "type": "string"
65
+ },
66
+ {
67
+ "type": "array",
68
+ "items": {
69
+ "type": "string"
70
+ }
71
+ }
72
+ ],
73
+ "description": "제어 모드"
74
+ },
75
+ "defaultValue": {
76
+ "anyOf": [
77
+ {
78
+ "type": "string"
79
+ },
80
+ {
81
+ "type": "array",
82
+ "items": {
83
+ "type": "string"
84
+ }
85
+ }
86
+ ],
87
+ "description": "비제어 초기값"
88
+ },
89
+ "onValueChange": {
90
+ "description": "열린 항목 변경 콜백 (value: string | string[]) => void"
91
+ },
92
+ "className": {
93
+ "type": "string",
94
+ "description": "Root 스타일"
95
+ }
96
+ },
97
+ "required": [
98
+ "items"
99
+ ],
100
+ "additionalProperties": false,
101
+ "description": "아코디언. items 배열 방식과 컴포저블 방식 모두 지원."
102
+ }
103
+ },
104
+ "$schema": "http://json-schema.org/draft-07/schema#"
105
+ },
106
+ "avatar": {
107
+ "$ref": "#/definitions/avatarPropsSchema",
108
+ "definitions": {
109
+ "avatarPropsSchema": {
110
+ "type": "object",
111
+ "properties": {
112
+ "src": {
113
+ "type": "string",
114
+ "description": "이미지 URL"
115
+ },
116
+ "alt": {
117
+ "type": "string",
118
+ "description": "대체 텍스트"
119
+ },
120
+ "fallback": {
121
+ "description": "이미지 로드 실패 시 표시 (ReactNode)"
122
+ },
123
+ "size": {
124
+ "type": "string",
125
+ "enum": [
126
+ "xs",
127
+ "sm",
128
+ "md",
129
+ "lg",
130
+ "xl"
131
+ ],
132
+ "default": "md",
133
+ "description": "크기"
134
+ },
135
+ "shape": {
136
+ "type": "string",
137
+ "enum": [
138
+ "circle",
139
+ "square"
140
+ ],
141
+ "default": "circle",
142
+ "description": "형태"
143
+ },
144
+ "children": {
145
+ "description": "커스텀 이미지 요소 (예: Next.js Image)"
146
+ },
147
+ "onImageError": {
148
+ "description": "이미지 로드 실패 콜백 () => void"
149
+ },
150
+ "className": {
151
+ "type": "string",
152
+ "description": "스타일 오버라이드"
153
+ }
154
+ },
155
+ "additionalProperties": false,
156
+ "description": "아바타. 이미지, 폴백 텍스트, children 지원."
157
+ }
158
+ },
159
+ "$schema": "http://json-schema.org/draft-07/schema#"
160
+ },
161
+ "button": {
162
+ "$ref": "#/definitions/buttonPropsSchema",
163
+ "definitions": {
164
+ "buttonPropsSchema": {
165
+ "type": "object",
166
+ "properties": {
167
+ "semantic": {
168
+ "type": "string",
169
+ "enum": [
170
+ "primary",
171
+ "secondary",
172
+ "normal",
173
+ "danger"
174
+ ],
175
+ "default": "primary",
176
+ "description": "색상 테마 (primary=주요, secondary=보조, normal=중립, danger=위험)"
177
+ },
178
+ "variant": {
179
+ "type": "string",
180
+ "enum": [
181
+ "contained",
182
+ "outlined",
183
+ "subtle",
184
+ "ghost"
185
+ ],
186
+ "default": "contained",
187
+ "description": "시각 스타일 (contained=채움, outlined=테두리, subtle=연한배경, ghost=투명)"
188
+ },
189
+ "size": {
190
+ "type": "string",
191
+ "enum": [
192
+ "xl",
193
+ "lg",
194
+ "md",
195
+ "sm"
196
+ ],
197
+ "default": "md",
198
+ "description": "크기"
199
+ },
200
+ "radius": {
201
+ "type": "string",
202
+ "enum": [
203
+ "default",
204
+ "circle"
205
+ ],
206
+ "default": "default",
207
+ "description": "모서리 (default=size별 radius, circle=pill 형태)"
208
+ },
209
+ "asChild": {
210
+ "type": "boolean",
211
+ "description": "true면 자식 요소로 렌더링 (Slot 패턴)"
212
+ },
213
+ "detectDoubleClick": {
214
+ "type": "boolean",
215
+ "description": "500ms 내 더블 클릭 방지"
216
+ },
217
+ "disabled": {
218
+ "type": "boolean",
219
+ "description": "비활성 (aria-disabled 자동)"
220
+ },
221
+ "className": {
222
+ "type": "string",
223
+ "description": "스타일 오버라이드"
224
+ }
225
+ },
226
+ "additionalProperties": false,
227
+ "description": "인터랙티브 버튼. semantic(색상)×variant(스타일) 2축 시스템. asChild로 렌더링 요소 변경 가능."
228
+ }
229
+ },
230
+ "$schema": "http://json-schema.org/draft-07/schema#"
231
+ },
232
+ "carousel": {
233
+ "$ref": "#/definitions/carouselPropsSchema",
234
+ "definitions": {
235
+ "carouselPropsSchema": {
236
+ "type": "object",
237
+ "properties": {
238
+ "opts": {
239
+ "type": "object",
240
+ "additionalProperties": {},
241
+ "description": "Embla 옵션 (loop, align 등)"
242
+ },
243
+ "plugins": {
244
+ "type": "array",
245
+ "description": "Embla 플러그인"
246
+ },
247
+ "onApiChange": {
248
+ "description": "Embla API 변경 콜백 (api: CarouselApi) => void"
249
+ },
250
+ "children": {
251
+ "description": "캐러셀 슬라이드 및 서브 컴포넌트 (ReactNode)"
252
+ },
253
+ "className": {
254
+ "type": "string",
255
+ "description": "스타일 오버라이드"
256
+ }
257
+ },
258
+ "additionalProperties": false,
259
+ "description": "캐러셀. Embla Carousel 기반. CarouselSlide, CarouselPrev, CarouselNext, CarouselDots 서브 컴포넌트."
260
+ }
261
+ },
262
+ "$schema": "http://json-schema.org/draft-07/schema#"
263
+ },
264
+ "carouselSlide": {
265
+ "$ref": "#/definitions/carouselSlidePropsSchema",
266
+ "definitions": {
267
+ "carouselSlidePropsSchema": {
268
+ "type": "object",
269
+ "properties": {
270
+ "className": {
271
+ "type": "string",
272
+ "description": "슬라이드 스타일 (basis-1/3 등으로 복수 노출)"
273
+ },
274
+ "children": {
275
+ "description": "슬라이드 내용 (ReactNode, 필수)"
276
+ }
277
+ },
278
+ "additionalProperties": false,
279
+ "description": "캐러셀 슬라이드. Carousel 내부에서 사용."
280
+ }
281
+ },
282
+ "$schema": "http://json-schema.org/draft-07/schema#"
283
+ },
284
+ "carouselButton": {
285
+ "$ref": "#/definitions/carouselButtonPropsSchema",
286
+ "definitions": {
287
+ "carouselButtonPropsSchema": {
288
+ "type": "object",
289
+ "properties": {
290
+ "className": {
291
+ "type": "string",
292
+ "description": "버튼 스타일 오버라이드"
293
+ },
294
+ "children": {
295
+ "description": "커스텀 아이콘 (ReactNode, 기본: chevron)"
296
+ }
297
+ },
298
+ "additionalProperties": false,
299
+ "description": "CarouselPrev / CarouselNext. 이전/다음 내비게이션 버튼."
300
+ }
301
+ },
302
+ "$schema": "http://json-schema.org/draft-07/schema#"
303
+ },
304
+ "carouselDots": {
305
+ "$ref": "#/definitions/carouselDotsPropsSchema",
306
+ "definitions": {
307
+ "carouselDotsPropsSchema": {
308
+ "type": "object",
309
+ "properties": {
310
+ "className": {
311
+ "type": "string",
312
+ "description": "도트 컨테이너 스타일"
313
+ }
314
+ },
315
+ "additionalProperties": false,
316
+ "description": "CarouselDots. 슬라이드 인디케이터 도트."
317
+ }
318
+ },
319
+ "$schema": "http://json-schema.org/draft-07/schema#"
320
+ },
321
+ "checkBox": {
322
+ "$ref": "#/definitions/checkBoxPropsSchema",
323
+ "definitions": {
324
+ "checkBoxPropsSchema": {
325
+ "type": "object",
326
+ "properties": {
327
+ "size": {
328
+ "type": "string",
329
+ "enum": [
330
+ "sm",
331
+ "md"
332
+ ],
333
+ "default": "md",
334
+ "description": "크기"
335
+ },
336
+ "shape": {
337
+ "type": "string",
338
+ "enum": [
339
+ "square",
340
+ "round"
341
+ ],
342
+ "default": "square",
343
+ "description": "형태"
344
+ },
345
+ "checked": {
346
+ "type": "boolean",
347
+ "description": "체크 상태"
348
+ },
349
+ "indeterminate": {
350
+ "type": "boolean",
351
+ "description": "불확정 상태 (aria-checked=\"mixed\")"
352
+ },
353
+ "disabled": {
354
+ "type": "boolean",
355
+ "description": "비활성"
356
+ },
357
+ "readOnly": {
358
+ "type": "boolean",
359
+ "description": "읽기 전용. 네이티브 input readOnly와 동일하게 체크 상태 변경 불가"
360
+ },
361
+ "label": {
362
+ "description": "라벨 텍스트 (ReactNode)"
363
+ },
364
+ "onCheckedChange": {
365
+ "description": "체크 상태 변경 콜백 (checked: boolean) => void"
366
+ },
367
+ "className": {
368
+ "type": "string",
369
+ "description": "스타일 오버라이드"
370
+ }
371
+ },
372
+ "additionalProperties": false,
373
+ "description": "체크박스. 네이티브 input 기반, square/round 형태 지원."
374
+ }
375
+ },
376
+ "$schema": "http://json-schema.org/draft-07/schema#"
377
+ },
378
+ "chip": {
379
+ "$ref": "#/definitions/chipPropsSchema",
380
+ "definitions": {
381
+ "chipPropsSchema": {
382
+ "type": "object",
383
+ "properties": {
384
+ "variant": {
385
+ "type": "string",
386
+ "enum": [
387
+ "default",
388
+ "filled",
389
+ "outline",
390
+ "accent"
391
+ ],
392
+ "default": "default",
393
+ "description": "스타일"
394
+ },
395
+ "size": {
396
+ "type": "string",
397
+ "enum": [
398
+ "sm",
399
+ "md",
400
+ "lg"
401
+ ],
402
+ "default": "md",
403
+ "description": "크기"
404
+ },
405
+ "asChild": {
406
+ "type": "boolean",
407
+ "description": "true면 자식 요소로 렌더링 (Slot 패턴)"
408
+ },
409
+ "disabled": {
410
+ "type": "boolean",
411
+ "description": "비활성 (aria-disabled 자동)"
412
+ },
413
+ "onClose": {
414
+ "description": "닫기 버튼 클릭 콜백 () => void"
415
+ },
416
+ "className": {
417
+ "type": "string",
418
+ "description": "스타일 오버라이드"
419
+ }
420
+ },
421
+ "additionalProperties": false,
422
+ "description": "칩/태그/뱃지. onClose prop으로 닫기 버튼 표시."
423
+ }
424
+ },
425
+ "$schema": "http://json-schema.org/draft-07/schema#"
426
+ },
427
+ "clientOnly": {
428
+ "$ref": "#/definitions/clientOnlyPropsSchema",
429
+ "definitions": {
430
+ "clientOnlyPropsSchema": {
431
+ "type": "object",
432
+ "properties": {
433
+ "children": {
434
+ "description": "클라이언트에서만 렌더링할 요소 (ReactNode, 필수)"
435
+ },
436
+ "fallback": {
437
+ "description": "SSR 중 표시할 대체 UI (ReactNode, 기본: null)"
438
+ }
439
+ },
440
+ "additionalProperties": false,
441
+ "description": "클라이언트 전용 렌더링. SSR 환경에서 hydration mismatch 방지."
442
+ }
443
+ },
444
+ "$schema": "http://json-schema.org/draft-07/schema#"
445
+ },
446
+ "countdown": {
447
+ "$ref": "#/definitions/countdownPropsSchema",
448
+ "definitions": {
449
+ "countdownPropsSchema": {
450
+ "type": "object",
451
+ "properties": {
452
+ "endTimestamp": {
453
+ "type": "number",
454
+ "description": "종료 시각 (Unix ms, 필수)"
455
+ },
456
+ "separator": {
457
+ "default": ":",
458
+ "description": "구분자 (ReactNode)"
459
+ },
460
+ "showDays": {
461
+ "type": "boolean",
462
+ "default": true,
463
+ "description": "일 단위 표시"
464
+ },
465
+ "labels": {
466
+ "type": "object",
467
+ "properties": {
468
+ "days": {
469
+ "type": "string"
470
+ },
471
+ "hours": {
472
+ "type": "string"
473
+ },
474
+ "minutes": {
475
+ "type": "string"
476
+ },
477
+ "seconds": {
478
+ "type": "string"
479
+ }
480
+ },
481
+ "additionalProperties": false,
482
+ "description": "단위 라벨"
483
+ },
484
+ "render": {
485
+ "description": "커스텀 렌더 함수"
486
+ },
487
+ "onEnd": {
488
+ "description": "카운트다운 종료 콜백 () => void"
489
+ },
490
+ "className": {
491
+ "type": "string",
492
+ "description": "스타일 오버라이드"
493
+ }
494
+ },
495
+ "required": [
496
+ "endTimestamp"
497
+ ],
498
+ "additionalProperties": false,
499
+ "description": "카운트다운 타이머."
500
+ }
501
+ },
502
+ "$schema": "http://json-schema.org/draft-07/schema#"
503
+ },
504
+ "counter": {
505
+ "$ref": "#/definitions/counterPropsSchema",
506
+ "definitions": {
507
+ "counterPropsSchema": {
508
+ "type": "object",
509
+ "properties": {
510
+ "endValue": {
511
+ "type": "number",
512
+ "description": "목표 값 (필수)"
513
+ },
514
+ "startValue": {
515
+ "type": "number",
516
+ "default": 0,
517
+ "description": "시작 값"
518
+ },
519
+ "duration": {
520
+ "type": "number",
521
+ "default": 1500,
522
+ "description": "애니메이션 시간 (ms)"
523
+ },
524
+ "delay": {
525
+ "type": "number",
526
+ "default": 0,
527
+ "description": "시작 지연 (ms)"
528
+ },
529
+ "separator": {
530
+ "type": "boolean",
531
+ "default": true,
532
+ "description": "천 단위 구분"
533
+ },
534
+ "digits": {
535
+ "type": "number",
536
+ "default": 0,
537
+ "description": "소수 자릿수"
538
+ },
539
+ "triggerOnView": {
540
+ "type": "boolean",
541
+ "default": false,
542
+ "description": "뷰포트 진입 시 시작"
543
+ },
544
+ "onEnd": {
545
+ "description": "카운트 완료 콜백 () => void"
546
+ },
547
+ "className": {
548
+ "type": "string",
549
+ "description": "스타일 오버라이드"
550
+ }
551
+ },
552
+ "required": [
553
+ "endValue"
554
+ ],
555
+ "additionalProperties": false,
556
+ "description": "숫자 카운트 애니메이션."
557
+ }
558
+ },
559
+ "$schema": "http://json-schema.org/draft-07/schema#"
560
+ },
561
+ "dataList": {
562
+ "$ref": "#/definitions/dataListPropsSchema",
563
+ "definitions": {
564
+ "dataListPropsSchema": {
565
+ "type": "object",
566
+ "properties": {
567
+ "list": {
568
+ "anyOf": [
569
+ {
570
+ "type": "array"
571
+ },
572
+ {
573
+ "type": "null"
574
+ }
575
+ ],
576
+ "description": "렌더링할 데이터 배열. null이면 로딩 상태 (필수)"
577
+ },
578
+ "noDataMessage": {
579
+ "description": "빈 배열일 때 표시할 메시지 (string | ReactElement)"
580
+ },
581
+ "errorFallback": {
582
+ "description": "에러 발생 시 표시할 fallback (ReactNode)"
583
+ },
584
+ "loadingElement": {
585
+ "description": "로딩 중 표시할 커스텀 요소 (기본: Spinner)"
586
+ },
587
+ "skeletonElement": {
588
+ "description": "로딩 중 표시할 스켈레톤 요소 (ReactElement)"
589
+ },
590
+ "skeletonCount": {
591
+ "type": "number",
592
+ "default": 3,
593
+ "description": "스켈레톤 반복 개수"
594
+ },
595
+ "loading": {
596
+ "type": "boolean",
597
+ "default": false,
598
+ "description": "강제 로딩 상태"
599
+ },
600
+ "children": {
601
+ "description": "각 아이템 렌더 함수: ({ item, index }) => ReactNode (필수)"
602
+ },
603
+ "className": {
604
+ "type": "string",
605
+ "description": "루트 요소 스타일"
606
+ }
607
+ },
608
+ "required": [
609
+ "list"
610
+ ],
611
+ "additionalProperties": false,
612
+ "description": "데이터 리스트. list 상태에 따라 로딩/스켈레톤/빈 상태/데이터를 자동 처리. ErrorBoundary 내장."
613
+ }
614
+ },
615
+ "$schema": "http://json-schema.org/draft-07/schema#"
616
+ },
617
+ "divider": {
618
+ "$ref": "#/definitions/dividerPropsSchema",
619
+ "definitions": {
620
+ "dividerPropsSchema": {
621
+ "type": "object",
622
+ "properties": {
623
+ "orientation": {
624
+ "type": "string",
625
+ "enum": [
626
+ "horizontal",
627
+ "vertical"
628
+ ],
629
+ "default": "horizontal",
630
+ "description": "방향"
631
+ },
632
+ "variant": {
633
+ "type": "string",
634
+ "enum": [
635
+ "solid",
636
+ "dashed",
637
+ "dotted"
638
+ ],
639
+ "default": "solid",
640
+ "description": "선 스타일"
641
+ },
642
+ "color": {
643
+ "type": "string",
644
+ "description": "커스텀 색상 (CSS 값)"
645
+ },
646
+ "className": {
647
+ "type": "string",
648
+ "description": "스타일 오버라이드"
649
+ }
650
+ },
651
+ "additionalProperties": false,
652
+ "description": "구분선. 수평/수직 방향, 실선/점선/파선 지원."
653
+ }
654
+ },
655
+ "$schema": "http://json-schema.org/draft-07/schema#"
656
+ },
657
+ "drawer": {
658
+ "$ref": "#/definitions/drawerPropsSchema",
659
+ "definitions": {
660
+ "drawerPropsSchema": {
661
+ "type": "object",
662
+ "properties": {
663
+ "direction": {
664
+ "type": "string",
665
+ "enum": [
666
+ "bottom",
667
+ "top",
668
+ "left",
669
+ "right"
670
+ ],
671
+ "default": "bottom",
672
+ "description": "방향"
673
+ },
674
+ "children": {
675
+ "description": "Drawer 하위 컴포넌트 (ReactNode)"
676
+ }
677
+ },
678
+ "additionalProperties": false,
679
+ "description": "드로어/바텀시트. Vaul 기반. 합성 컴포넌트 패턴."
680
+ }
681
+ },
682
+ "$schema": "http://json-schema.org/draft-07/schema#"
683
+ },
684
+ "drawerContent": {
685
+ "$ref": "#/definitions/drawerContentPropsSchema",
686
+ "definitions": {
687
+ "drawerContentPropsSchema": {
688
+ "type": "object",
689
+ "properties": {
690
+ "direction": {
691
+ "type": "string",
692
+ "enum": [
693
+ "bottom",
694
+ "top",
695
+ "left",
696
+ "right"
697
+ ],
698
+ "default": "bottom",
699
+ "description": "방향 (Context 우선)"
700
+ },
701
+ "blur": {
702
+ "type": "string",
703
+ "enum": [
704
+ "none",
705
+ "sm",
706
+ "md"
707
+ ],
708
+ "default": "none",
709
+ "description": "오버레이 블러"
710
+ },
711
+ "showHandle": {
712
+ "type": "boolean",
713
+ "default": true,
714
+ "description": "핸들 바 표시"
715
+ },
716
+ "children": {
717
+ "description": "컨텐츠 영역 (ReactNode)"
718
+ },
719
+ "overlayClassName": {
720
+ "type": "string",
721
+ "description": "오버레이 스타일"
722
+ },
723
+ "className": {
724
+ "type": "string",
725
+ "description": "패널 스타일"
726
+ }
727
+ },
728
+ "additionalProperties": false,
729
+ "description": "Drawer.Content 영역."
730
+ }
731
+ },
732
+ "$schema": "http://json-schema.org/draft-07/schema#"
733
+ },
734
+ "ellipsis": {
735
+ "$ref": "#/definitions/ellipsisPropsSchema",
736
+ "definitions": {
737
+ "ellipsisPropsSchema": {
738
+ "type": "object",
739
+ "properties": {
740
+ "content": {
741
+ "default": "",
742
+ "description": "본문 (ReactNode)"
743
+ },
744
+ "lineClamp": {
745
+ "type": "number",
746
+ "default": 2,
747
+ "description": "줄 수 제한"
748
+ },
749
+ "triggerMore": {
750
+ "default": "more",
751
+ "description": "더보기 텍스트 (ReactNode)"
752
+ },
753
+ "triggerLess": {
754
+ "default": "less",
755
+ "description": "접기 텍스트 (ReactNode)"
756
+ },
757
+ "defaultShortened": {
758
+ "type": "boolean",
759
+ "default": true,
760
+ "description": "초기 접힘 상태"
761
+ },
762
+ "observingEnvs": {
763
+ "type": "array",
764
+ "items": {
765
+ "type": "boolean"
766
+ },
767
+ "description": "외부 조건 변경 시 리사이즈 재측정"
768
+ },
769
+ "onShowMoreLessClick": {
770
+ "description": "더보기/접기 클릭 콜백 () => void"
771
+ },
772
+ "className": {
773
+ "type": "string",
774
+ "description": "스타일 오버라이드"
775
+ }
776
+ },
777
+ "additionalProperties": false,
778
+ "description": "텍스트 말줄임. 더보기/접기 토글 내장."
779
+ }
780
+ },
781
+ "$schema": "http://json-schema.org/draft-07/schema#"
782
+ },
783
+ "errorBoundary": {
784
+ "$ref": "#/definitions/errorBoundaryPropsSchema",
785
+ "definitions": {
786
+ "errorBoundaryPropsSchema": {
787
+ "type": "object",
788
+ "properties": {
789
+ "children": {
790
+ "description": "감싸질 자식 요소 (ReactNode, 필수)"
791
+ },
792
+ "fallback": {
793
+ "description": "에러 발생 시 대체 UI (ReactNode)"
794
+ },
795
+ "onError": {
796
+ "description": "에러 발생 콜백 (error: Error, errorInfo: ErrorInfo) => void"
797
+ }
798
+ },
799
+ "additionalProperties": false,
800
+ "description": "에러 경계. 하위 컴포넌트 렌더링 에러를 잡아 fallback UI 표시."
801
+ }
802
+ },
803
+ "$schema": "http://json-schema.org/draft-07/schema#"
804
+ },
805
+ "infiniteScroll": {
806
+ "$ref": "#/definitions/infiniteScrollPropsSchema",
807
+ "definitions": {
808
+ "infiniteScrollPropsSchema": {
809
+ "type": "object",
810
+ "properties": {
811
+ "list": {
812
+ "anyOf": [
813
+ {
814
+ "type": "array"
815
+ },
816
+ {
817
+ "type": "null"
818
+ }
819
+ ],
820
+ "description": "현재 데이터 배열 (필수)"
821
+ },
822
+ "totalCount": {
823
+ "type": "number",
824
+ "description": "전체 개수 (hasMore와 배타적 사용)"
825
+ },
826
+ "hasMore": {
827
+ "type": "boolean",
828
+ "description": "더 있는지 (totalCount와 배타적 사용)"
829
+ },
830
+ "tag": {
831
+ "type": "string",
832
+ "default": "div",
833
+ "description": "children 래퍼 태그"
834
+ },
835
+ "rootMargin": {
836
+ "type": "number",
837
+ "default": 100,
838
+ "description": "감지 마진 (px)"
839
+ },
840
+ "loading": {
841
+ "type": "boolean",
842
+ "description": "로딩 상태"
843
+ },
844
+ "loadingElement": {
845
+ "description": "커스텀 로딩 요소"
846
+ },
847
+ "handleLoadMore": {
848
+ "description": "추가 로딩 콜백 () => void, 필수"
849
+ },
850
+ "scrollTarget": {
851
+ "description": "스크롤 대상 요소 (HTMLElement | Document | MutableRefObject)"
852
+ },
853
+ "children": {
854
+ "description": "리스트 아이템 렌더링 (ReactNode, 필수)"
855
+ },
856
+ "className": {
857
+ "type": "string",
858
+ "description": "스타일 오버라이드"
859
+ }
860
+ },
861
+ "required": [
862
+ "list"
863
+ ],
864
+ "additionalProperties": false,
865
+ "description": "무한 스크롤. IntersectionObserver 기반."
866
+ }
867
+ },
868
+ "$schema": "http://json-schema.org/draft-07/schema#"
869
+ },
870
+ "marquee": {
871
+ "$ref": "#/definitions/marqueePropsSchema",
872
+ "definitions": {
873
+ "marqueePropsSchema": {
874
+ "type": "object",
875
+ "properties": {
876
+ "direction": {
877
+ "type": "string",
878
+ "enum": [
879
+ "left",
880
+ "right",
881
+ "up",
882
+ "down"
883
+ ],
884
+ "default": "left",
885
+ "description": "방향"
886
+ },
887
+ "speed": {
888
+ "type": "number",
889
+ "default": 40,
890
+ "description": "애니메이션 속도 (초)"
891
+ },
892
+ "pauseOnHover": {
893
+ "type": "boolean",
894
+ "default": false,
895
+ "description": "호버 시 일시정지"
896
+ },
897
+ "gap": {
898
+ "type": "number",
899
+ "default": 16,
900
+ "description": "아이템 간격 (px)"
901
+ },
902
+ "children": {
903
+ "description": "반복 표시할 콘텐츠 (ReactNode, 필수)"
904
+ },
905
+ "className": {
906
+ "type": "string",
907
+ "description": "스타일 오버라이드"
908
+ }
909
+ },
910
+ "additionalProperties": false,
911
+ "description": "마퀴 (흐르는 텍스트/요소)."
912
+ }
913
+ },
914
+ "$schema": "http://json-schema.org/draft-07/schema#"
915
+ },
916
+ "modalTemplate": {
917
+ "$ref": "#/definitions/modalTemplatePropsSchema",
918
+ "definitions": {
919
+ "modalTemplatePropsSchema": {
920
+ "type": "object",
921
+ "properties": {
922
+ "title": {
923
+ "description": "헤더 제목 (ReactNode)"
924
+ },
925
+ "desc": {
926
+ "description": "헤더 설명 (ReactNode)"
927
+ },
928
+ "layout": {
929
+ "type": "string",
930
+ "enum": [
931
+ "default",
932
+ "bottom-sheet",
933
+ "slide-left",
934
+ "slide-right",
935
+ "full-page",
936
+ "full-page-reverse",
937
+ "draggable"
938
+ ],
939
+ "default": "default",
940
+ "description": "레이아웃"
941
+ },
942
+ "showDim": {
943
+ "type": "boolean",
944
+ "default": true,
945
+ "description": "딤 배경 표시"
946
+ },
947
+ "dimClose": {
948
+ "type": "boolean",
949
+ "default": true,
950
+ "description": "딤 클릭 시 닫기"
951
+ },
952
+ "hideHeader": {
953
+ "type": "boolean",
954
+ "default": false,
955
+ "description": "헤더 숨김"
956
+ },
957
+ "hideFooter": {
958
+ "type": "boolean",
959
+ "default": true,
960
+ "description": "푸터 숨김"
961
+ },
962
+ "footer": {
963
+ "description": "커스텀 푸터 (ReactElement)"
964
+ },
965
+ "animation": {
966
+ "type": "object",
967
+ "properties": {
968
+ "name": {
969
+ "type": "string",
970
+ "description": "애니메이션 이름"
971
+ },
972
+ "mobile": {
973
+ "type": "string",
974
+ "description": "모바일용 애니메이션 이름"
975
+ },
976
+ "delay": {
977
+ "type": "number",
978
+ "description": "지연 (ms)"
979
+ },
980
+ "duration": {
981
+ "type": "number",
982
+ "description": "지속 시간 (ms)"
983
+ },
984
+ "timingFunc": {
985
+ "type": "string",
986
+ "description": "타이밍 함수"
987
+ },
988
+ "leaveTimingFunc": {
989
+ "type": "string",
990
+ "description": "퇴장 타이밍 함수"
991
+ }
992
+ },
993
+ "additionalProperties": false,
994
+ "description": "모달 애니메이션 (ModalTemplatePropsType)"
995
+ },
996
+ "enableDrag": {
997
+ "type": "boolean",
998
+ "default": true,
999
+ "description": "드래그 활성화 (바텀시트·드래그 가능 레이아웃)"
1000
+ },
1001
+ "dragPersistKey": {
1002
+ "type": "string",
1003
+ "description": "드래그 위치 저장 키"
1004
+ },
1005
+ "children": {
1006
+ "description": "모달 본문 (ReactNode, 필수)"
1007
+ },
1008
+ "className": {
1009
+ "type": "string",
1010
+ "description": "루트 래퍼 스타일"
1011
+ },
1012
+ "innerClassName": {
1013
+ "type": "string",
1014
+ "description": "모달 본체 스타일"
1015
+ },
1016
+ "bodyClassName": {
1017
+ "type": "string",
1018
+ "description": "바디 영역 스타일"
1019
+ },
1020
+ "footerClassName": {
1021
+ "type": "string",
1022
+ "description": "푸터 영역 스타일"
1023
+ },
1024
+ "dimClassName": {
1025
+ "type": "string",
1026
+ "description": "딤 배경 스타일"
1027
+ },
1028
+ "headerClassName": {
1029
+ "type": "string",
1030
+ "description": "헤더 영역 스타일"
1031
+ }
1032
+ },
1033
+ "additionalProperties": false,
1034
+ "description": "모달 템플릿. 모든 모달 컴포넌트는 반드시 ModalTemplate으로 감싸야 한다."
1035
+ }
1036
+ },
1037
+ "$schema": "http://json-schema.org/draft-07/schema#"
1038
+ },
1039
+ "modalCall": {
1040
+ "$ref": "#/definitions/modalCallSchema",
1041
+ "definitions": {
1042
+ "modalCallSchema": {
1043
+ "type": "object",
1044
+ "properties": {
1045
+ "component": {
1046
+ "description": "모달 컴포넌트 (필수)"
1047
+ },
1048
+ "props": {
1049
+ "type": "object",
1050
+ "additionalProperties": {},
1051
+ "description": "컴포넌트에 전달할 props"
1052
+ }
1053
+ },
1054
+ "additionalProperties": false,
1055
+ "description": "modal() 함수 호출 형태. component는 close/resolve를 자동으로 props로 받는다."
1056
+ }
1057
+ },
1058
+ "$schema": "http://json-schema.org/draft-07/schema#"
1059
+ },
1060
+ "numberInput": {
1061
+ "$ref": "#/definitions/numberInputPropsSchema",
1062
+ "definitions": {
1063
+ "numberInputPropsSchema": {
1064
+ "type": "object",
1065
+ "properties": {
1066
+ "value": {
1067
+ "type": [
1068
+ "number",
1069
+ "string"
1070
+ ],
1071
+ "description": "현재 값"
1072
+ },
1073
+ "size": {
1074
+ "type": "string",
1075
+ "enum": [
1076
+ "sm",
1077
+ "md",
1078
+ "lg",
1079
+ "xl"
1080
+ ],
1081
+ "default": "md",
1082
+ "description": "크기"
1083
+ },
1084
+ "error": {
1085
+ "type": "boolean",
1086
+ "description": "에러 상태"
1087
+ },
1088
+ "min": {
1089
+ "type": "number",
1090
+ "description": "최소값"
1091
+ },
1092
+ "max": {
1093
+ "type": "number",
1094
+ "description": "최대값"
1095
+ },
1096
+ "step": {
1097
+ "type": "number",
1098
+ "default": 1,
1099
+ "description": "증감 단위"
1100
+ },
1101
+ "digit": {
1102
+ "type": "number",
1103
+ "default": 0,
1104
+ "description": "소수 자릿수"
1105
+ },
1106
+ "hideButtons": {
1107
+ "type": "boolean",
1108
+ "default": false,
1109
+ "description": "기본 스핀 버튼 숨김. numberInputBind로 외부 버튼에 이벤트 부착 시 사용"
1110
+ },
1111
+ "disabled": {
1112
+ "type": "boolean",
1113
+ "description": "비활성"
1114
+ },
1115
+ "readOnly": {
1116
+ "type": "boolean",
1117
+ "description": "읽기 전용. 입력·스핀 버튼으로 값 변경 불가(스핀 버튼은 숨김)"
1118
+ },
1119
+ "placeholder": {
1120
+ "type": "string",
1121
+ "description": "플레이스홀더"
1122
+ },
1123
+ "onValueChange": {
1124
+ "description": "값 변경 콜백 (value: number | undefined) => void"
1125
+ },
1126
+ "className": {
1127
+ "type": "string",
1128
+ "description": "스타일 오버라이드"
1129
+ }
1130
+ },
1131
+ "additionalProperties": false,
1132
+ "description": "숫자 입력. 꾹 누르면 가속 증감. ref로 increment/decrement 메서드 노출. numberInputBind(ref, direction) 함수로 외부 버튼에 동일한 가속 이벤트 바인딩 가능."
1133
+ }
1134
+ },
1135
+ "$schema": "http://json-schema.org/draft-07/schema#"
1136
+ },
1137
+ "pagination": {
1138
+ "$ref": "#/definitions/paginationPropsSchema",
1139
+ "definitions": {
1140
+ "paginationPropsSchema": {
1141
+ "type": "object",
1142
+ "properties": {
1143
+ "currentPage": {
1144
+ "type": "number",
1145
+ "description": "현재 페이지 (1부터, 필수)"
1146
+ },
1147
+ "totalPages": {
1148
+ "type": "number",
1149
+ "description": "전체 페이지 수 (필수)"
1150
+ },
1151
+ "siblingCount": {
1152
+ "type": "number",
1153
+ "default": 1,
1154
+ "description": "현재 페이지 양옆 표시 개수"
1155
+ },
1156
+ "showEdges": {
1157
+ "type": "boolean",
1158
+ "description": "첫/끝 페이지 항상 표시"
1159
+ },
1160
+ "size": {
1161
+ "type": "string",
1162
+ "enum": [
1163
+ "sm",
1164
+ "md"
1165
+ ],
1166
+ "default": "md",
1167
+ "description": "크기"
1168
+ },
1169
+ "onPageChange": {
1170
+ "description": "페이지 변경 콜백 (page: number) => void, 필수"
1171
+ },
1172
+ "className": {
1173
+ "type": "string",
1174
+ "description": "<nav> 스타일"
1175
+ }
1176
+ },
1177
+ "required": [
1178
+ "currentPage",
1179
+ "totalPages"
1180
+ ],
1181
+ "additionalProperties": false,
1182
+ "description": "페이지네이션. 이전/다음 + 번호 버튼."
1183
+ }
1184
+ },
1185
+ "$schema": "http://json-schema.org/draft-07/schema#"
1186
+ },
1187
+ "popover": {
1188
+ "$ref": "#/definitions/popoverPropsSchema",
1189
+ "definitions": {
1190
+ "popoverPropsSchema": {
1191
+ "type": "object",
1192
+ "properties": {
1193
+ "trigger": {
1194
+ "description": "트리거 요소 (ReactNode, 필수)"
1195
+ },
1196
+ "side": {
1197
+ "type": "string",
1198
+ "enum": [
1199
+ "top",
1200
+ "right",
1201
+ "bottom",
1202
+ "left"
1203
+ ],
1204
+ "default": "bottom",
1205
+ "description": "위치"
1206
+ },
1207
+ "align": {
1208
+ "type": "string",
1209
+ "enum": [
1210
+ "start",
1211
+ "center",
1212
+ "end"
1213
+ ],
1214
+ "default": "center",
1215
+ "description": "정렬"
1216
+ },
1217
+ "sideOffset": {
1218
+ "type": "number",
1219
+ "default": 4,
1220
+ "description": "위치 오프셋 (px)"
1221
+ },
1222
+ "alignOffset": {
1223
+ "type": "number",
1224
+ "description": "정렬 오프셋 (px)"
1225
+ },
1226
+ "open": {
1227
+ "type": "boolean",
1228
+ "description": "제어 모드"
1229
+ },
1230
+ "onOpenChange": {
1231
+ "description": "열림/닫힘 상태 변경 콜백 (open: boolean) => void"
1232
+ },
1233
+ "onClickTrigger": {
1234
+ "description": "트리거 요소 클릭 시 호출되는 콜백. PopoverPrimitive.Trigger의 onClick에 전달됨."
1235
+ },
1236
+ "children": {
1237
+ "description": "팝오버 본문 (ReactNode)"
1238
+ },
1239
+ "className": {
1240
+ "type": "string",
1241
+ "description": "Content 스타일"
1242
+ },
1243
+ "arrowClassName": {
1244
+ "type": "string",
1245
+ "description": "Arrow 스타일"
1246
+ }
1247
+ },
1248
+ "additionalProperties": false,
1249
+ "description": "팝오버. Radix Popover 기반."
1250
+ }
1251
+ },
1252
+ "$schema": "http://json-schema.org/draft-07/schema#"
1253
+ },
1254
+ "radioGroup": {
1255
+ "$ref": "#/definitions/radioGroupPropsSchema",
1256
+ "definitions": {
1257
+ "radioGroupPropsSchema": {
1258
+ "type": "object",
1259
+ "properties": {
1260
+ "name": {
1261
+ "type": "string",
1262
+ "description": "form name (필수)"
1263
+ },
1264
+ "value": {
1265
+ "type": "string",
1266
+ "description": "선택된 값 (제어)"
1267
+ },
1268
+ "defaultValue": {
1269
+ "type": "string",
1270
+ "description": "초기값 (비제어)"
1271
+ },
1272
+ "size": {
1273
+ "type": "string",
1274
+ "enum": [
1275
+ "sm",
1276
+ "md"
1277
+ ],
1278
+ "default": "md",
1279
+ "description": "크기"
1280
+ },
1281
+ "orientation": {
1282
+ "type": "string",
1283
+ "enum": [
1284
+ "horizontal",
1285
+ "vertical"
1286
+ ],
1287
+ "default": "vertical",
1288
+ "description": "배치 방향"
1289
+ },
1290
+ "disabled": {
1291
+ "type": "boolean",
1292
+ "description": "비활성"
1293
+ },
1294
+ "aria-label": {
1295
+ "type": "string",
1296
+ "description": "접근성 라벨"
1297
+ },
1298
+ "onValueChange": {
1299
+ "description": "값 변경 콜백 (value: string) => void"
1300
+ },
1301
+ "className": {
1302
+ "type": "string",
1303
+ "description": "스타일 오버라이드"
1304
+ }
1305
+ },
1306
+ "required": [
1307
+ "name"
1308
+ ],
1309
+ "additionalProperties": false,
1310
+ "description": "라디오 그룹. RadioItem과 함께 사용."
1311
+ }
1312
+ },
1313
+ "$schema": "http://json-schema.org/draft-07/schema#"
1314
+ },
1315
+ "radioItem": {
1316
+ "$ref": "#/definitions/radioItemPropsSchema",
1317
+ "definitions": {
1318
+ "radioItemPropsSchema": {
1319
+ "type": "object",
1320
+ "properties": {
1321
+ "value": {
1322
+ "type": "string",
1323
+ "description": "항목 값 (필수)"
1324
+ },
1325
+ "size": {
1326
+ "type": "string",
1327
+ "enum": [
1328
+ "sm",
1329
+ "md"
1330
+ ],
1331
+ "description": "크기 (그룹보다 우선)"
1332
+ },
1333
+ "label": {
1334
+ "description": "라벨 텍스트 (ReactNode)"
1335
+ },
1336
+ "disabled": {
1337
+ "type": "boolean",
1338
+ "description": "비활성"
1339
+ }
1340
+ },
1341
+ "required": [
1342
+ "value"
1343
+ ],
1344
+ "additionalProperties": false,
1345
+ "description": "RadioGroup 내 개별 옵션."
1346
+ }
1347
+ },
1348
+ "$schema": "http://json-schema.org/draft-07/schema#"
1349
+ },
1350
+ "select": {
1351
+ "$ref": "#/definitions/selectPropsSchema",
1352
+ "definitions": {
1353
+ "selectPropsSchema": {
1354
+ "type": "object",
1355
+ "properties": {
1356
+ "value": {
1357
+ "type": "string",
1358
+ "description": "선택된 값"
1359
+ },
1360
+ "placeholder": {
1361
+ "type": "string",
1362
+ "description": "플레이스홀더"
1363
+ },
1364
+ "variant": {
1365
+ "type": "string",
1366
+ "enum": [
1367
+ "default",
1368
+ "outline"
1369
+ ],
1370
+ "default": "default",
1371
+ "description": "트리거 스타일"
1372
+ },
1373
+ "size": {
1374
+ "type": "string",
1375
+ "enum": [
1376
+ "sm",
1377
+ "md",
1378
+ "lg",
1379
+ "full"
1380
+ ],
1381
+ "default": "full",
1382
+ "description": "너비"
1383
+ },
1384
+ "disabled": {
1385
+ "type": "boolean",
1386
+ "description": "비활성"
1387
+ },
1388
+ "onValueChange": {
1389
+ "description": "값 변경 콜백 (value: string) => void"
1390
+ },
1391
+ "displayComponent": {
1392
+ "description": "트리거에 커스텀 표시 (ReactNode)"
1393
+ },
1394
+ "children": {
1395
+ "description": "SelectItem 목록 (ReactNode, 필수)"
1396
+ },
1397
+ "className": {
1398
+ "type": "string",
1399
+ "description": "래퍼 스타일"
1400
+ },
1401
+ "triggerClassName": {
1402
+ "type": "string",
1403
+ "description": "트리거 스타일 오버라이드"
1404
+ }
1405
+ },
1406
+ "additionalProperties": false,
1407
+ "description": "드롭다운 선택. Radix Select 기반. SelectItem과 함께 사용."
1408
+ }
1409
+ },
1410
+ "$schema": "http://json-schema.org/draft-07/schema#"
1411
+ },
1412
+ "selectItem": {
1413
+ "$ref": "#/definitions/selectItemPropsSchema",
1414
+ "definitions": {
1415
+ "selectItemPropsSchema": {
1416
+ "type": "object",
1417
+ "properties": {
1418
+ "value": {
1419
+ "type": "string",
1420
+ "description": "항목 값"
1421
+ },
1422
+ "children": {
1423
+ "description": "항목 내용 (ReactNode, 필수)"
1424
+ },
1425
+ "disabled": {
1426
+ "type": "boolean",
1427
+ "description": "비활성"
1428
+ },
1429
+ "className": {
1430
+ "type": "string",
1431
+ "description": "스타일 오버라이드"
1432
+ }
1433
+ },
1434
+ "required": [
1435
+ "value"
1436
+ ],
1437
+ "additionalProperties": false,
1438
+ "description": "Select 내 개별 옵션."
1439
+ }
1440
+ },
1441
+ "$schema": "http://json-schema.org/draft-07/schema#"
1442
+ },
1443
+ "skeleton": {
1444
+ "$ref": "#/definitions/skeletonPropsSchema",
1445
+ "definitions": {
1446
+ "skeletonPropsSchema": {
1447
+ "type": "object",
1448
+ "properties": {
1449
+ "as": {
1450
+ "type": "string",
1451
+ "enum": [
1452
+ "div",
1453
+ "span"
1454
+ ],
1455
+ "default": "div",
1456
+ "description": "렌더링 태그"
1457
+ },
1458
+ "circle": {
1459
+ "type": "boolean",
1460
+ "default": false,
1461
+ "description": "원형 스켈레톤 (rounded-full)"
1462
+ },
1463
+ "width": {
1464
+ "type": [
1465
+ "string",
1466
+ "number"
1467
+ ],
1468
+ "description": "너비 (예: '100px', '50%', 200)"
1469
+ },
1470
+ "height": {
1471
+ "type": [
1472
+ "string",
1473
+ "number"
1474
+ ],
1475
+ "description": "높이 (예: '16px', 40)"
1476
+ },
1477
+ "children": {
1478
+ "description": "내부 콘텐츠 (로딩 완료 시 표시, 실제 크기 유지용)"
1479
+ },
1480
+ "className": {
1481
+ "type": "string",
1482
+ "description": "스타일 오버라이드"
1483
+ }
1484
+ },
1485
+ "additionalProperties": false,
1486
+ "description": "스켈레톤 로딩 플레이스홀더. className으로 크기/모양 조절. children이 있으면 투명하게 감싸서 실제 크기 유지."
1487
+ }
1488
+ },
1489
+ "$schema": "http://json-schema.org/draft-07/schema#"
1490
+ },
1491
+ "spinner": {
1492
+ "$ref": "#/definitions/spinnerPropsSchema",
1493
+ "definitions": {
1494
+ "spinnerPropsSchema": {
1495
+ "type": "object",
1496
+ "properties": {
1497
+ "size": {
1498
+ "type": "number",
1499
+ "default": 20,
1500
+ "description": "px 크기"
1501
+ },
1502
+ "aria-label": {
1503
+ "type": "string",
1504
+ "default": "Loading",
1505
+ "description": "접근성 라벨"
1506
+ },
1507
+ "className": {
1508
+ "type": "string",
1509
+ "description": "색상 등 오버라이드"
1510
+ }
1511
+ },
1512
+ "additionalProperties": false,
1513
+ "description": "로딩 인디케이터. SVG 기반. role=\"status\" 내장."
1514
+ }
1515
+ },
1516
+ "$schema": "http://json-schema.org/draft-07/schema#"
1517
+ },
1518
+ "switch": {
1519
+ "$ref": "#/definitions/switchPropsSchema",
1520
+ "definitions": {
1521
+ "switchPropsSchema": {
1522
+ "type": "object",
1523
+ "properties": {
1524
+ "size": {
1525
+ "type": "string",
1526
+ "enum": [
1527
+ "sm",
1528
+ "md"
1529
+ ],
1530
+ "default": "md",
1531
+ "description": "크기"
1532
+ },
1533
+ "checked": {
1534
+ "type": "boolean",
1535
+ "description": "on/off 상태"
1536
+ },
1537
+ "disabled": {
1538
+ "type": "boolean",
1539
+ "description": "비활성"
1540
+ },
1541
+ "readOnly": {
1542
+ "type": "boolean",
1543
+ "description": "읽기 전용. 네이티브 input readOnly와 동일하게 on/off 상태 변경 불가"
1544
+ },
1545
+ "onCheckedChange": {
1546
+ "description": "토글 상태 변경 콜백 (checked: boolean) => void"
1547
+ },
1548
+ "className": {
1549
+ "type": "string",
1550
+ "description": "스타일 오버라이드"
1551
+ }
1552
+ },
1553
+ "additionalProperties": false,
1554
+ "description": "토글 스위치. 네이티브 checkbox 기반, role=\"switch\"."
1555
+ }
1556
+ },
1557
+ "$schema": "http://json-schema.org/draft-07/schema#"
1558
+ },
1559
+ "tab": {
1560
+ "$ref": "#/definitions/tabPropsSchema",
1561
+ "definitions": {
1562
+ "tabPropsSchema": {
1563
+ "type": "object",
1564
+ "properties": {
1565
+ "items": {
1566
+ "type": "array",
1567
+ "items": {
1568
+ "type": "object",
1569
+ "properties": {
1570
+ "key": {
1571
+ "type": "string",
1572
+ "description": "탭 고유 키"
1573
+ },
1574
+ "label": {
1575
+ "description": "탭 라벨 (ReactNode)"
1576
+ },
1577
+ "children": {
1578
+ "description": "탭 패널 내용 (ReactNode)"
1579
+ },
1580
+ "disabled": {
1581
+ "type": "boolean",
1582
+ "description": "비활성"
1583
+ }
1584
+ },
1585
+ "required": [
1586
+ "key"
1587
+ ],
1588
+ "additionalProperties": false
1589
+ },
1590
+ "description": "탭 항목 배열 (필수)"
1591
+ },
1592
+ "activeKey": {
1593
+ "type": "string",
1594
+ "description": "제어 모드 활성 키"
1595
+ },
1596
+ "defaultActiveKey": {
1597
+ "type": "string",
1598
+ "description": "비제어 초기 키"
1599
+ },
1600
+ "variant": {
1601
+ "type": "string",
1602
+ "enum": [
1603
+ "line",
1604
+ "pill"
1605
+ ],
1606
+ "default": "line",
1607
+ "description": "스타일"
1608
+ },
1609
+ "size": {
1610
+ "type": "string",
1611
+ "enum": [
1612
+ "sm",
1613
+ "md"
1614
+ ],
1615
+ "default": "md",
1616
+ "description": "크기"
1617
+ },
1618
+ "destroyInactive": {
1619
+ "type": "boolean",
1620
+ "default": false,
1621
+ "description": "비활성 패널 언마운트"
1622
+ },
1623
+ "onTabChange": {
1624
+ "description": "탭 변경 콜백 (key: string) => void"
1625
+ },
1626
+ "className": {
1627
+ "type": "string",
1628
+ "description": "루트 스타일"
1629
+ },
1630
+ "tabListClassName": {
1631
+ "type": "string",
1632
+ "description": "탭 리스트 스타일"
1633
+ },
1634
+ "tabPanelClassName": {
1635
+ "type": "string",
1636
+ "description": "탭 패널 스타일"
1637
+ }
1638
+ },
1639
+ "required": [
1640
+ "items"
1641
+ ],
1642
+ "additionalProperties": false,
1643
+ "description": "탭 네비게이션. line/pill 변형."
1644
+ }
1645
+ },
1646
+ "$schema": "http://json-schema.org/draft-07/schema#"
1647
+ },
1648
+ "table": {
1649
+ "$ref": "#/definitions/tablePropsSchema",
1650
+ "definitions": {
1651
+ "tablePropsSchema": {
1652
+ "type": "object",
1653
+ "properties": {
1654
+ "list": {
1655
+ "anyOf": [
1656
+ {
1657
+ "type": "array"
1658
+ },
1659
+ {
1660
+ "type": "null"
1661
+ }
1662
+ ],
1663
+ "description": "데이터 배열. null/undefined이면 로딩 상태 (필수)"
1664
+ },
1665
+ "children": {
1666
+ "description": "행 렌더 함수 ({ item, index }) => ReactNode (필수)"
1667
+ },
1668
+ "hideThead": {
1669
+ "type": "boolean",
1670
+ "description": "테이블 헤더 숨김"
1671
+ },
1672
+ "loading": {
1673
+ "type": "boolean",
1674
+ "description": "로딩 상태 강제"
1675
+ },
1676
+ "loadingType": {
1677
+ "type": "string",
1678
+ "enum": [
1679
+ "loading",
1680
+ "skeleton"
1681
+ ],
1682
+ "default": "skeleton",
1683
+ "description": "로딩 표시 방식"
1684
+ },
1685
+ "loadingElement": {
1686
+ "description": "커스텀 로딩 요소 (ReactElement)"
1687
+ },
1688
+ "skeletonCount": {
1689
+ "type": "number",
1690
+ "default": 10,
1691
+ "description": "스켈레톤 행 수"
1692
+ },
1693
+ "noDataMsg": {
1694
+ "description": "데이터 없을 때 메시지 (ReactElement | string)"
1695
+ },
1696
+ "notification": {
1697
+ "description": "테이블 상단 알림 영역 (ReactNode)"
1698
+ },
1699
+ "sortUpElement": {
1700
+ "description": "오름차순 정렬 아이콘 (ReactElement)"
1701
+ },
1702
+ "sortDownElement": {
1703
+ "description": "내림차순 정렬 아이콘 (ReactElement)"
1704
+ },
1705
+ "className": {
1706
+ "type": "string",
1707
+ "description": "테이블 래퍼 스타일"
1708
+ },
1709
+ "theadClassName": {
1710
+ "type": "string",
1711
+ "description": "헤더 행 스타일"
1712
+ }
1713
+ },
1714
+ "required": [
1715
+ "list"
1716
+ ],
1717
+ "additionalProperties": false,
1718
+ "description": "테이블. TdColumn으로 컬럼 정의, TableRow로 행 래핑. 정렬/스켈레톤 로딩 내장."
1719
+ }
1720
+ },
1721
+ "$schema": "http://json-schema.org/draft-07/schema#"
1722
+ },
1723
+ "tableRow": {
1724
+ "$ref": "#/definitions/tableRowPropsSchema",
1725
+ "definitions": {
1726
+ "tableRowPropsSchema": {
1727
+ "type": "object",
1728
+ "properties": {
1729
+ "variant": {
1730
+ "type": "string",
1731
+ "enum": [
1732
+ "default",
1733
+ "accent"
1734
+ ],
1735
+ "default": "default",
1736
+ "description": "행 스타일"
1737
+ },
1738
+ "className": {
1739
+ "type": "string",
1740
+ "description": "스타일 오버라이드"
1741
+ },
1742
+ "children": {
1743
+ "description": "TdColumn 목록 (ReactNode, 필수)"
1744
+ },
1745
+ "onClick": {
1746
+ "description": "행 클릭 콜백 (e: MouseEvent) => void"
1747
+ }
1748
+ },
1749
+ "additionalProperties": false,
1750
+ "description": "테이블 행. Table 내부에서 사용."
1751
+ }
1752
+ },
1753
+ "$schema": "http://json-schema.org/draft-07/schema#"
1754
+ },
1755
+ "tdColumn": {
1756
+ "$ref": "#/definitions/tdColumnPropsSchema",
1757
+ "definitions": {
1758
+ "tdColumnPropsSchema": {
1759
+ "type": "object",
1760
+ "properties": {
1761
+ "label": {
1762
+ "description": "헤더 라벨 (ReactElement | string)"
1763
+ },
1764
+ "fieldId": {
1765
+ "type": [
1766
+ "string",
1767
+ "null"
1768
+ ],
1769
+ "description": "컬럼 식별자 (정렬 키, 필수)"
1770
+ },
1771
+ "size": {
1772
+ "type": [
1773
+ "number",
1774
+ "string"
1775
+ ],
1776
+ "description": "컬럼 너비 (number → px, string → CSS값)"
1777
+ },
1778
+ "align": {
1779
+ "type": "string",
1780
+ "enum": [
1781
+ "left",
1782
+ "center",
1783
+ "right"
1784
+ ],
1785
+ "default": "left",
1786
+ "description": "텍스트 정렬"
1787
+ },
1788
+ "textOverflow": {
1789
+ "type": "string",
1790
+ "enum": [
1791
+ "auto",
1792
+ "truncate",
1793
+ "wrap",
1794
+ "break-all"
1795
+ ],
1796
+ "default": "truncate",
1797
+ "description": "텍스트 넘침 처리"
1798
+ },
1799
+ "highlightKey": {
1800
+ "type": [
1801
+ "string",
1802
+ "null"
1803
+ ],
1804
+ "description": "호버 하이라이트 그룹 키"
1805
+ },
1806
+ "colSpan": {
1807
+ "type": "number",
1808
+ "description": "열 병합"
1809
+ },
1810
+ "rowSpan": {
1811
+ "type": "number",
1812
+ "description": "행 병합"
1813
+ },
1814
+ "thColSpan": {
1815
+ "type": "number",
1816
+ "description": "헤더 colSpan (<th>)"
1817
+ },
1818
+ "thRowSpan": {
1819
+ "type": "number",
1820
+ "description": "헤더 rowSpan (<th>)"
1821
+ },
1822
+ "enableSorting": {
1823
+ "type": "boolean",
1824
+ "description": "정렬 활성화"
1825
+ },
1826
+ "order": {
1827
+ "type": "string",
1828
+ "enum": [
1829
+ "desc",
1830
+ "asc",
1831
+ ""
1832
+ ],
1833
+ "description": "현재 정렬 방향"
1834
+ },
1835
+ "sortValue": {
1836
+ "type": [
1837
+ "string",
1838
+ "number"
1839
+ ],
1840
+ "description": "정렬 기준 값"
1841
+ },
1842
+ "handleClickSort": {
1843
+ "description": "정렬 클릭 콜백 ({ index, fieldId, order }) => void"
1844
+ },
1845
+ "children": {
1846
+ "description": "셀 내용 (ReactNode, 필수)"
1847
+ },
1848
+ "className": {
1849
+ "type": "string",
1850
+ "description": "스타일 오버라이드"
1851
+ }
1852
+ },
1853
+ "required": [
1854
+ "fieldId"
1855
+ ],
1856
+ "additionalProperties": false,
1857
+ "description": "테이블 셀/컬럼 정의. TableRow 내부에서 사용."
1858
+ }
1859
+ },
1860
+ "$schema": "http://json-schema.org/draft-07/schema#"
1861
+ },
1862
+ "textArea": {
1863
+ "$ref": "#/definitions/textAreaPropsSchema",
1864
+ "definitions": {
1865
+ "textAreaPropsSchema": {
1866
+ "type": "object",
1867
+ "properties": {
1868
+ "error": {
1869
+ "type": "boolean",
1870
+ "description": "에러 상태 (aria-invalid 자동)"
1871
+ },
1872
+ "showCount": {
1873
+ "type": "boolean",
1874
+ "description": "글자 수 표시 (maxLength 필요)"
1875
+ },
1876
+ "maxLength": {
1877
+ "type": "number",
1878
+ "description": "최대 글자 수"
1879
+ },
1880
+ "placeholder": {
1881
+ "type": "string",
1882
+ "description": "플레이스홀더"
1883
+ },
1884
+ "rows": {
1885
+ "type": "number",
1886
+ "description": "표시 줄 수"
1887
+ },
1888
+ "disabled": {
1889
+ "type": "boolean",
1890
+ "description": "비활성"
1891
+ },
1892
+ "onValueChange": {
1893
+ "description": "값 변경 콜백 (value: string) => void"
1894
+ },
1895
+ "className": {
1896
+ "type": "string",
1897
+ "description": "스타일 오버라이드"
1898
+ }
1899
+ },
1900
+ "additionalProperties": false,
1901
+ "description": "여러 줄 텍스트 입력. 글자 수 카운터 내장."
1902
+ }
1903
+ },
1904
+ "$schema": "http://json-schema.org/draft-07/schema#"
1905
+ },
1906
+ "textInput": {
1907
+ "$ref": "#/definitions/textInputPropsSchema",
1908
+ "definitions": {
1909
+ "textInputPropsSchema": {
1910
+ "type": "object",
1911
+ "properties": {
1912
+ "size": {
1913
+ "type": "string",
1914
+ "enum": [
1915
+ "sm",
1916
+ "md",
1917
+ "lg",
1918
+ "xl"
1919
+ ],
1920
+ "default": "md",
1921
+ "description": "크기"
1922
+ },
1923
+ "error": {
1924
+ "type": "boolean",
1925
+ "description": "에러 상태 (aria-invalid 자동)"
1926
+ },
1927
+ "prefixIcon": {
1928
+ "description": "앞쪽 아이콘 (ReactNode)"
1929
+ },
1930
+ "suffixIcon": {
1931
+ "description": "뒤쪽 아이콘 (ReactNode)"
1932
+ },
1933
+ "label": {
1934
+ "description": "입력 필드 위 라벨 (ReactNode)"
1935
+ },
1936
+ "description": {
1937
+ "description": "입력 필드 아래 설명 텍스트 (ReactNode, error 시 빨간색)"
1938
+ },
1939
+ "showCount": {
1940
+ "type": "boolean",
1941
+ "description": "글자 수 카운트 표시 (maxLength 필요)"
1942
+ },
1943
+ "maxLength": {
1944
+ "type": "number",
1945
+ "description": "최대 글자 수"
1946
+ },
1947
+ "clearable": {
1948
+ "type": "boolean",
1949
+ "description": "X 버튼으로 입력값 초기화"
1950
+ },
1951
+ "placeholder": {
1952
+ "type": "string",
1953
+ "description": "플레이스홀더"
1954
+ },
1955
+ "disabled": {
1956
+ "type": "boolean",
1957
+ "description": "비활성"
1958
+ },
1959
+ "onValueChange": {
1960
+ "description": "값 변경 콜백 (value: string) => void"
1961
+ },
1962
+ "className": {
1963
+ "type": "string",
1964
+ "description": "스타일 오버라이드"
1965
+ }
1966
+ },
1967
+ "additionalProperties": false,
1968
+ "description": "텍스트 입력 필드. label, description, prefix/suffix 아이콘, clearable, 글자 수 카운트 지원."
1969
+ }
1970
+ },
1971
+ "$schema": "http://json-schema.org/draft-07/schema#"
1972
+ },
1973
+ "themeProvider": {
1974
+ "$ref": "#/definitions/themeProviderPropsSchema",
1975
+ "definitions": {
1976
+ "themeProviderPropsSchema": {
1977
+ "type": "object",
1978
+ "properties": {
1979
+ "children": {
1980
+ "description": "앱 루트 요소 (ReactNode, 필수)"
1981
+ },
1982
+ "defaultTheme": {
1983
+ "type": "string",
1984
+ "description": "기본 테마 (예: \"dark\", \"light\")"
1985
+ },
1986
+ "storageKey": {
1987
+ "type": "string",
1988
+ "description": "localStorage 저장 키 (기본: \"theme\")"
1989
+ },
1990
+ "themes": {
1991
+ "type": "array",
1992
+ "items": {
1993
+ "type": "string"
1994
+ },
1995
+ "description": "사용 가능한 테마 목록 (기본: [\"light\", \"dark\"])"
1996
+ },
1997
+ "attribute": {
1998
+ "anyOf": [
1999
+ {
2000
+ "type": "string"
2001
+ },
2002
+ {
2003
+ "type": "array",
2004
+ "items": {
2005
+ "type": "string"
2006
+ }
2007
+ }
2008
+ ],
2009
+ "description": "테마 적용 HTML 속성 (기본: \"data-theme\")"
2010
+ },
2011
+ "enableSystem": {
2012
+ "type": "boolean",
2013
+ "description": "시스템 테마 감지 활성화"
2014
+ },
2015
+ "disableTransitionOnChange": {
2016
+ "type": "boolean",
2017
+ "description": "테마 전환 시 트랜지션 비활성화"
2018
+ },
2019
+ "forcedTheme": {
2020
+ "type": "string",
2021
+ "description": "강제 테마 (사용자 변경 불가)"
2022
+ },
2023
+ "enableColorScheme": {
2024
+ "type": "boolean",
2025
+ "description": "color-scheme CSS 속성 자동 설정"
2026
+ },
2027
+ "nonce": {
2028
+ "type": "string",
2029
+ "description": "CSP nonce"
2030
+ }
2031
+ },
2032
+ "additionalProperties": false,
2033
+ "description": "테마 제공자. next-themes 기반. useTheme() 훅으로 테마 상태 접근."
2034
+ }
2035
+ },
2036
+ "$schema": "http://json-schema.org/draft-07/schema#"
2037
+ },
2038
+ "toaster": {
2039
+ "$ref": "#/definitions/toasterPropsSchema",
2040
+ "definitions": {
2041
+ "toasterPropsSchema": {
2042
+ "type": "object",
2043
+ "properties": {
2044
+ "position": {
2045
+ "type": "string",
2046
+ "enum": [
2047
+ "top-left",
2048
+ "top-center",
2049
+ "top-right",
2050
+ "bottom-left",
2051
+ "bottom-center",
2052
+ "bottom-right"
2053
+ ],
2054
+ "default": "top-center",
2055
+ "description": "토스트 위치"
2056
+ },
2057
+ "unstyled": {
2058
+ "type": "boolean",
2059
+ "default": false,
2060
+ "description": "기본 스타일 제거 (커스텀 스타일링 시)"
2061
+ }
2062
+ },
2063
+ "additionalProperties": false,
2064
+ "description": "Toaster 설정. 앱 루트에 한 번 배치. toast() 함수로 알림 표시. sonner 기반."
2065
+ }
2066
+ },
2067
+ "$schema": "http://json-schema.org/draft-07/schema#"
2068
+ },
2069
+ "tooltip": {
2070
+ "$ref": "#/definitions/tooltipPropsSchema",
2071
+ "definitions": {
2072
+ "tooltipPropsSchema": {
2073
+ "type": "object",
2074
+ "properties": {
2075
+ "children": {
2076
+ "description": "트리거 요소 (ReactNode, 필수)"
2077
+ },
2078
+ "content": {
2079
+ "description": "툴팁 내용 (ReactNode, 필수)"
2080
+ },
2081
+ "variant": {
2082
+ "type": "string",
2083
+ "enum": [
2084
+ "dark",
2085
+ "light"
2086
+ ],
2087
+ "default": "dark",
2088
+ "description": "스타일"
2089
+ },
2090
+ "side": {
2091
+ "type": "string",
2092
+ "enum": [
2093
+ "top",
2094
+ "right",
2095
+ "bottom",
2096
+ "left"
2097
+ ],
2098
+ "default": "top",
2099
+ "description": "위치"
2100
+ },
2101
+ "align": {
2102
+ "type": "string",
2103
+ "enum": [
2104
+ "start",
2105
+ "center",
2106
+ "end"
2107
+ ],
2108
+ "default": "center",
2109
+ "description": "정렬"
2110
+ },
2111
+ "delayDuration": {
2112
+ "type": "number",
2113
+ "default": 200,
2114
+ "description": "표시 지연 (ms)"
2115
+ },
2116
+ "disabled": {
2117
+ "type": "boolean",
2118
+ "default": false,
2119
+ "description": "비활성"
2120
+ },
2121
+ "className": {
2122
+ "type": "string",
2123
+ "description": "Content 스타일"
2124
+ },
2125
+ "triggerClassName": {
2126
+ "type": "string",
2127
+ "description": "Trigger 스타일"
2128
+ }
2129
+ },
2130
+ "additionalProperties": false,
2131
+ "description": "툴팁. Radix Tooltip 기반. Provider 내장."
2132
+ }
2133
+ },
2134
+ "$schema": "http://json-schema.org/draft-07/schema#"
2135
+ },
2136
+ "virtualList": {
2137
+ "$ref": "#/definitions/virtualListPropsSchema",
2138
+ "definitions": {
2139
+ "virtualListPropsSchema": {
2140
+ "type": "object",
2141
+ "properties": {
2142
+ "items": {
2143
+ "type": "array",
2144
+ "description": "데이터 배열 (필수)"
2145
+ },
2146
+ "estimateSize": {
2147
+ "anyOf": [
2148
+ {
2149
+ "type": "number"
2150
+ },
2151
+ {}
2152
+ ],
2153
+ "description": "예상 아이템 높이 (number 또는 함수, 필수)"
2154
+ },
2155
+ "renderItem": {
2156
+ "description": "아이템 렌더러 (필수)"
2157
+ },
2158
+ "overscan": {
2159
+ "type": "number",
2160
+ "default": 5,
2161
+ "description": "오버스캔 수"
2162
+ },
2163
+ "gap": {
2164
+ "type": "number",
2165
+ "default": 0,
2166
+ "description": "아이템 간격 (px)"
2167
+ },
2168
+ "className": {
2169
+ "type": "string",
2170
+ "description": "스크롤 컨테이너 스타일"
2171
+ },
2172
+ "endReachedThreshold": {
2173
+ "type": "number",
2174
+ "default": 200,
2175
+ "description": "끝 감지 임계값 (px)"
2176
+ },
2177
+ "onEndReached": {
2178
+ "description": "끝 도달 콜백 () => void"
2179
+ }
2180
+ },
2181
+ "required": [
2182
+ "items"
2183
+ ],
2184
+ "additionalProperties": false,
2185
+ "description": "가상 스크롤 리스트. @tanstack/react-virtual 기반."
2186
+ }
2187
+ },
2188
+ "$schema": "http://json-schema.org/draft-07/schema#"
2189
+ },
2190
+ "virtualGrid": {
2191
+ "$ref": "#/definitions/virtualGridPropsSchema",
2192
+ "definitions": {
2193
+ "virtualGridPropsSchema": {
2194
+ "type": "object",
2195
+ "properties": {
2196
+ "items": {
2197
+ "type": "array",
2198
+ "description": "데이터 배열 (필수)"
2199
+ },
2200
+ "estimateSize": {
2201
+ "anyOf": [
2202
+ {
2203
+ "type": "number"
2204
+ },
2205
+ {}
2206
+ ],
2207
+ "description": "예상 아이템 높이 (필수)"
2208
+ },
2209
+ "columns": {
2210
+ "type": "number",
2211
+ "description": "열 수 (필수)"
2212
+ },
2213
+ "renderItem": {
2214
+ "description": "아이템 렌더러 (필수)"
2215
+ },
2216
+ "overscan": {
2217
+ "type": "number",
2218
+ "default": 3,
2219
+ "description": "오버스캔 수"
2220
+ },
2221
+ "gap": {
2222
+ "type": "number",
2223
+ "default": 0,
2224
+ "description": "아이템 간격 (px)"
2225
+ },
2226
+ "endReachedThreshold": {
2227
+ "type": "number",
2228
+ "default": 200,
2229
+ "description": "끝 감지 임계값 (px)"
2230
+ },
2231
+ "onEndReached": {
2232
+ "description": "끝 도달 콜백 () => void"
2233
+ },
2234
+ "className": {
2235
+ "type": "string",
2236
+ "description": "스크롤 컨테이너 스타일"
2237
+ }
2238
+ },
2239
+ "required": [
2240
+ "items",
2241
+ "columns"
2242
+ ],
2243
+ "additionalProperties": false,
2244
+ "description": "가상 스크롤 그리드. @tanstack/react-virtual 기반."
2245
+ }
2246
+ },
2247
+ "$schema": "http://json-schema.org/draft-07/schema#"
2248
+ }
2249
+ }
2250
+ }