@hua-labs/ui 2.1.0 → 2.2.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 (242) hide show
  1. package/README.md +55 -67
  2. package/dist/{ComponentLayout-btJq4TjA.d.mts → ComponentLayout-BhM4VSoq.d.mts} +1 -1
  3. package/dist/Section-BWzyshgX.d.mts +67 -0
  4. package/dist/advanced/dashboard.d.ts.map +1 -1
  5. package/dist/advanced-dashboard.d.mts +1 -1
  6. package/dist/advanced-dashboard.mjs +3 -3
  7. package/dist/advanced-dashboard.mjs.map +1 -1
  8. package/dist/advanced-emotion.mjs +1 -1
  9. package/dist/advanced-motion.d.mts +74 -7
  10. package/dist/advanced-motion.mjs +1 -1
  11. package/dist/advanced.d.mts +4 -4
  12. package/dist/advanced.mjs +3 -3
  13. package/dist/advanced.mjs.map +1 -1
  14. package/dist/{chunk-GLZKT7JN.mjs → chunk-5DPW7SVD.mjs} +3 -3
  15. package/dist/{chunk-GLZKT7JN.mjs.map → chunk-5DPW7SVD.mjs.map} +1 -1
  16. package/dist/{chunk-X7ZIWYRC.mjs → chunk-5L5HIPKA.mjs} +2 -2
  17. package/dist/{chunk-X7ZIWYRC.mjs.map → chunk-5L5HIPKA.mjs.map} +1 -1
  18. package/dist/chunk-A5YOVVM5.mjs +3 -0
  19. package/dist/chunk-A5YOVVM5.mjs.map +1 -0
  20. package/dist/chunk-CNW22G24.mjs +13 -0
  21. package/dist/chunk-CNW22G24.mjs.map +1 -0
  22. package/dist/chunk-CW66UBQG.mjs +3 -0
  23. package/dist/chunk-CW66UBQG.mjs.map +1 -0
  24. package/dist/chunk-EAZEI74V.mjs +3 -0
  25. package/dist/chunk-EAZEI74V.mjs.map +1 -0
  26. package/dist/{chunk-LH77I6HO.mjs → chunk-EPY3432E.mjs} +2 -2
  27. package/dist/{chunk-LH77I6HO.mjs.map → chunk-EPY3432E.mjs.map} +1 -1
  28. package/dist/{chunk-SGEP3CQE.mjs → chunk-F2M4YDDQ.mjs} +2 -2
  29. package/dist/{chunk-SGEP3CQE.mjs.map → chunk-F2M4YDDQ.mjs.map} +1 -1
  30. package/dist/chunk-FHMFDCX2.mjs +3 -0
  31. package/dist/chunk-FHMFDCX2.mjs.map +1 -0
  32. package/dist/chunk-HBIUCLFL.mjs +3 -0
  33. package/dist/chunk-HBIUCLFL.mjs.map +1 -0
  34. package/dist/{chunk-LOYAJIWO.mjs → chunk-HEBXAFRY.mjs} +2 -2
  35. package/dist/{chunk-LOYAJIWO.mjs.map → chunk-HEBXAFRY.mjs.map} +1 -1
  36. package/dist/chunk-IG47LMOD.mjs +3 -0
  37. package/dist/chunk-IG47LMOD.mjs.map +1 -0
  38. package/dist/{chunk-IFSEJVOR.mjs → chunk-J47ZEXEL.mjs} +2 -2
  39. package/dist/{chunk-IFSEJVOR.mjs.map → chunk-J47ZEXEL.mjs.map} +1 -1
  40. package/dist/{chunk-IN7RWQCJ.mjs → chunk-K2FOFIST.mjs} +2 -2
  41. package/dist/{chunk-IN7RWQCJ.mjs.map → chunk-K2FOFIST.mjs.map} +1 -1
  42. package/dist/{chunk-UWHCM3S6.mjs → chunk-LL6QPRD7.mjs} +2 -2
  43. package/dist/{chunk-UWHCM3S6.mjs.map → chunk-LL6QPRD7.mjs.map} +1 -1
  44. package/dist/{chunk-PAEKNQWW.mjs → chunk-NMJLOK6M.mjs} +2 -2
  45. package/dist/{chunk-PAEKNQWW.mjs.map → chunk-NMJLOK6M.mjs.map} +1 -1
  46. package/dist/chunk-O24K56OS.mjs +3 -0
  47. package/dist/chunk-O24K56OS.mjs.map +1 -0
  48. package/dist/chunk-OIWG3IJ7.mjs +3 -0
  49. package/dist/chunk-OIWG3IJ7.mjs.map +1 -0
  50. package/dist/{chunk-VWSBJUNI.mjs → chunk-OLLU7ZFH.mjs} +2 -2
  51. package/dist/{chunk-VWSBJUNI.mjs.map → chunk-OLLU7ZFH.mjs.map} +1 -1
  52. package/dist/chunk-Q76JW7X5.mjs +73 -0
  53. package/dist/chunk-Q76JW7X5.mjs.map +1 -0
  54. package/dist/chunk-QEMPERUK.mjs +3 -0
  55. package/dist/chunk-QEMPERUK.mjs.map +1 -0
  56. package/dist/{chunk-XV3Y7QVU.mjs → chunk-QRM66RQG.mjs} +2 -2
  57. package/dist/{chunk-XV3Y7QVU.mjs.map → chunk-QRM66RQG.mjs.map} +1 -1
  58. package/dist/{chunk-6KTHJ3EL.mjs → chunk-QRRP7TGF.mjs} +3 -3
  59. package/dist/{chunk-6KTHJ3EL.mjs.map → chunk-QRRP7TGF.mjs.map} +1 -1
  60. package/dist/chunk-SD6XGDAC.mjs +3 -0
  61. package/dist/chunk-SD6XGDAC.mjs.map +1 -0
  62. package/dist/chunk-SDFVGFXT.mjs +3 -0
  63. package/dist/chunk-SDFVGFXT.mjs.map +1 -0
  64. package/dist/{chunk-N7M6RIN4.mjs → chunk-SMLDNOV3.mjs} +3 -3
  65. package/dist/{chunk-N7M6RIN4.mjs.map → chunk-SMLDNOV3.mjs.map} +1 -1
  66. package/dist/{chunk-NBJUE7NR.mjs → chunk-TAP6MYDW.mjs} +2 -2
  67. package/dist/{chunk-NBJUE7NR.mjs.map → chunk-TAP6MYDW.mjs.map} +1 -1
  68. package/dist/{chunk-PYBYZVSL.mjs → chunk-TBZ645BI.mjs} +2 -2
  69. package/dist/{chunk-PYBYZVSL.mjs.map → chunk-TBZ645BI.mjs.map} +1 -1
  70. package/dist/{chunk-C4OACMTB.mjs → chunk-V2DNYJR6.mjs} +2 -2
  71. package/dist/{chunk-C4OACMTB.mjs.map → chunk-V2DNYJR6.mjs.map} +1 -1
  72. package/dist/chunk-VBABZXL7.mjs +3 -0
  73. package/dist/chunk-VBABZXL7.mjs.map +1 -0
  74. package/dist/{chunk-OSCMSA2Q.mjs → chunk-WYBSHTGY.mjs} +2 -2
  75. package/dist/{chunk-OSCMSA2Q.mjs.map → chunk-WYBSHTGY.mjs.map} +1 -1
  76. package/dist/chunk-ZQUMJQYV.mjs +3 -0
  77. package/dist/chunk-ZQUMJQYV.mjs.map +1 -0
  78. package/dist/chunk-ZY23NOT4.mjs +3 -0
  79. package/dist/chunk-ZY23NOT4.mjs.map +1 -0
  80. package/dist/components/Action.d.ts.map +1 -1
  81. package/dist/components/Badge.d.ts +1 -1
  82. package/dist/components/Button.d.ts.map +1 -1
  83. package/dist/components/Card.d.ts.map +1 -1
  84. package/dist/components/DatePicker.d.ts.map +1 -1
  85. package/dist/components/Dropdown.d.ts +0 -50
  86. package/dist/components/Dropdown.d.ts.map +1 -1
  87. package/dist/components/Icon/Icon.d.ts.map +1 -1
  88. package/dist/components/Modal.d.ts.map +1 -1
  89. package/dist/components/Popover.d.ts +2 -0
  90. package/dist/components/Popover.d.ts.map +1 -1
  91. package/dist/components/Progress.d.ts +3 -2
  92. package/dist/components/Progress.d.ts.map +1 -1
  93. package/dist/components/Section.d.ts +44 -0
  94. package/dist/components/Section.d.ts.map +1 -0
  95. package/dist/components/advanced/AnimatedGradient.d.ts.map +1 -1
  96. package/dist/components/advanced/Carousel.d.ts.map +1 -1
  97. package/dist/components/advanced/DotNav.d.ts +26 -0
  98. package/dist/components/advanced/DotNav.d.ts.map +1 -0
  99. package/dist/components/advanced/HorizontalScroll.d.ts +20 -0
  100. package/dist/components/advanced/HorizontalScroll.d.ts.map +1 -0
  101. package/dist/components/advanced/ImageReveal.d.ts +24 -0
  102. package/dist/components/advanced/ImageReveal.d.ts.map +1 -0
  103. package/dist/components/advanced/Parallax.d.ts +9 -6
  104. package/dist/components/advanced/Parallax.d.ts.map +1 -1
  105. package/dist/components/advanced/TextReveal.d.ts.map +1 -1
  106. package/dist/components/advanced/index.d.ts +6 -0
  107. package/dist/components/advanced/index.d.ts.map +1 -1
  108. package/dist/data.mjs +1 -1
  109. package/dist/data.mjs.map +1 -1
  110. package/dist/feedback.mjs +1 -1
  111. package/dist/form.mjs +3 -3
  112. package/dist/form.mjs.map +1 -1
  113. package/dist/{icons-Bj_nr8Ba.d.mts → icons-DcOBy9Hf.d.mts} +10 -1
  114. package/dist/iconsax-extended.mjs +2 -2
  115. package/dist/iconsax-extended.mjs.map +1 -1
  116. package/dist/index.d.mts +10 -109
  117. package/dist/index.d.ts +4 -0
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.mjs +14 -14
  120. package/dist/index.mjs.map +1 -1
  121. package/dist/interactive.mjs +1 -1
  122. package/dist/interactive.mjs.map +1 -1
  123. package/dist/landing/LandingAbout.d.ts +3 -0
  124. package/dist/landing/LandingAbout.d.ts.map +1 -0
  125. package/dist/landing/LandingCTA.d.ts +3 -0
  126. package/dist/landing/LandingCTA.d.ts.map +1 -0
  127. package/dist/landing/LandingContact.d.ts +3 -0
  128. package/dist/landing/LandingContact.d.ts.map +1 -0
  129. package/dist/landing/LandingExperience.d.ts +3 -0
  130. package/dist/landing/LandingExperience.d.ts.map +1 -0
  131. package/dist/landing/LandingFeatures.d.ts +3 -0
  132. package/dist/landing/LandingFeatures.d.ts.map +1 -0
  133. package/dist/landing/LandingHero.d.ts +3 -0
  134. package/dist/landing/LandingHero.d.ts.map +1 -0
  135. package/dist/landing/LandingLogoCloud.d.ts +3 -0
  136. package/dist/landing/LandingLogoCloud.d.ts.map +1 -0
  137. package/dist/landing/LandingMetrics.d.ts +3 -0
  138. package/dist/landing/LandingMetrics.d.ts.map +1 -0
  139. package/dist/landing/LandingProjects.d.ts +3 -0
  140. package/dist/landing/LandingProjects.d.ts.map +1 -0
  141. package/dist/landing/LandingProvider.d.ts +4 -0
  142. package/dist/landing/LandingProvider.d.ts.map +1 -0
  143. package/dist/landing/LandingShowcase.d.ts +3 -0
  144. package/dist/landing/LandingShowcase.d.ts.map +1 -0
  145. package/dist/landing/LandingSkills.d.ts +3 -0
  146. package/dist/landing/LandingSkills.d.ts.map +1 -0
  147. package/dist/landing/LandingStats.d.ts +3 -0
  148. package/dist/landing/LandingStats.d.ts.map +1 -0
  149. package/dist/landing/LandingTestimonials.d.ts +3 -0
  150. package/dist/landing/LandingTestimonials.d.ts.map +1 -0
  151. package/dist/landing/index.d.ts +47 -0
  152. package/dist/landing/index.d.ts.map +1 -0
  153. package/dist/landing/themes/app.d.ts +3 -0
  154. package/dist/landing/themes/app.d.ts.map +1 -0
  155. package/dist/landing/themes/corporate.d.ts +3 -0
  156. package/dist/landing/themes/corporate.d.ts.map +1 -0
  157. package/dist/landing/themes/dashboard.d.ts +3 -0
  158. package/dist/landing/themes/dashboard.d.ts.map +1 -0
  159. package/dist/landing/themes/immersive.d.ts +3 -0
  160. package/dist/landing/themes/immersive.d.ts.map +1 -0
  161. package/dist/landing/themes/index.d.ts +15 -0
  162. package/dist/landing/themes/index.d.ts.map +1 -0
  163. package/dist/landing/themes/marketing.d.ts +3 -0
  164. package/dist/landing/themes/marketing.d.ts.map +1 -0
  165. package/dist/landing/themes/portfolio.d.ts +3 -0
  166. package/dist/landing/themes/portfolio.d.ts.map +1 -0
  167. package/dist/landing/themes/product.d.ts +3 -0
  168. package/dist/landing/themes/product.d.ts.map +1 -0
  169. package/dist/landing/types.d.ts +346 -0
  170. package/dist/landing/types.d.ts.map +1 -0
  171. package/dist/landing.d.mts +417 -0
  172. package/dist/landing.mjs +31 -0
  173. package/dist/landing.mjs.map +1 -0
  174. package/dist/lib/icon-providers.d.ts +9 -25
  175. package/dist/lib/icon-providers.d.ts.map +1 -1
  176. package/dist/lib/icons.d.ts +10 -1
  177. package/dist/lib/icons.d.ts.map +1 -1
  178. package/dist/lib/utils.d.ts.map +1 -1
  179. package/dist/navigation.d.mts +1 -1
  180. package/dist/navigation.mjs +1 -1
  181. package/dist/navigation.mjs.map +1 -1
  182. package/dist/overlay.d.mts +2 -50
  183. package/dist/overlay.mjs +1 -1
  184. package/dist/overlay.mjs.map +1 -1
  185. package/dist/sdui.mjs +1 -1
  186. package/dist/sdui.mjs.map +1 -1
  187. package/dist/theme.d.mts +85 -0
  188. package/dist/theme.d.ts +14 -0
  189. package/dist/theme.d.ts.map +1 -0
  190. package/dist/theme.mjs +3 -0
  191. package/dist/theme.mjs.map +1 -0
  192. package/package.json +30 -20
  193. package/src/styles/landing.css +107 -0
  194. package/src/styles/utilities.css +58 -0
  195. package/dist/advanced-dashboard.js +0 -39
  196. package/dist/advanced-dashboard.js.map +0 -1
  197. package/dist/advanced-emotion.js +0 -2
  198. package/dist/advanced-emotion.js.map +0 -1
  199. package/dist/advanced-motion.js +0 -82
  200. package/dist/advanced-motion.js.map +0 -1
  201. package/dist/advanced.js +0 -112
  202. package/dist/advanced.js.map +0 -1
  203. package/dist/chunk-BXX2TZUB.mjs +0 -3
  204. package/dist/chunk-BXX2TZUB.mjs.map +0 -1
  205. package/dist/chunk-COR6CDMA.mjs +0 -83
  206. package/dist/chunk-COR6CDMA.mjs.map +0 -1
  207. package/dist/chunk-FFH4ZFKS.mjs +0 -3
  208. package/dist/chunk-FFH4ZFKS.mjs.map +0 -1
  209. package/dist/chunk-HN5LSP6L.mjs +0 -3
  210. package/dist/chunk-HN5LSP6L.mjs.map +0 -1
  211. package/dist/chunk-LPAG7DCA.mjs +0 -3
  212. package/dist/chunk-LPAG7DCA.mjs.map +0 -1
  213. package/dist/chunk-QQCELXFD.mjs +0 -3
  214. package/dist/chunk-QQCELXFD.mjs.map +0 -1
  215. package/dist/chunk-RPUS7G7Q.mjs +0 -3
  216. package/dist/chunk-RPUS7G7Q.mjs.map +0 -1
  217. package/dist/chunk-SDFHJ4GB.mjs +0 -3
  218. package/dist/chunk-SDFHJ4GB.mjs.map +0 -1
  219. package/dist/chunk-UUHAXGMO.mjs +0 -3
  220. package/dist/chunk-UUHAXGMO.mjs.map +0 -1
  221. package/dist/data.js +0 -3
  222. package/dist/data.js.map +0 -1
  223. package/dist/feedback.js +0 -12
  224. package/dist/feedback.js.map +0 -1
  225. package/dist/form.js +0 -8
  226. package/dist/form.js.map +0 -1
  227. package/dist/iconsax-extended.js +0 -3
  228. package/dist/iconsax-extended.js.map +0 -1
  229. package/dist/iconsax.js +0 -3
  230. package/dist/iconsax.js.map +0 -1
  231. package/dist/index.js +0 -51
  232. package/dist/index.js.map +0 -1
  233. package/dist/interactive.js +0 -2
  234. package/dist/interactive.js.map +0 -1
  235. package/dist/lib/phosphor-icons.d.ts +0 -6
  236. package/dist/lib/phosphor-icons.d.ts.map +0 -1
  237. package/dist/navigation.js +0 -12
  238. package/dist/navigation.js.map +0 -1
  239. package/dist/overlay.js +0 -3
  240. package/dist/overlay.js.map +0 -1
  241. package/dist/sdui.js +0 -9
  242. package/dist/sdui.js.map +0 -1
package/dist/sdui.mjs CHANGED
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- import {a as a$8,b as b$6,c as c$3,d as d$3,f as f$1,g,h,e as e$2}from'./chunk-XV3Y7QVU.mjs';import {b as b$2,a as a$6}from'./chunk-RPUS7G7Q.mjs';import {a,b}from'./chunk-GLZKT7JN.mjs';import {c as c$2,b as b$3,a as a$4}from'./chunk-IN7RWQCJ.mjs';import {a as a$3}from'./chunk-N7M6RIN4.mjs';import {f,e,d,c,b as b$1,a as a$2}from'./chunk-BXX2TZUB.mjs';import {a as a$5}from'./chunk-IFSEJVOR.mjs';import {b as b$4,a as a$7}from'./chunk-UWHCM3S6.mjs';import {c as c$1,d as d$2,b as b$5}from'./chunk-SGEP3CQE.mjs';import {d as d$1}from'./chunk-FFH4ZFKS.mjs';import {l}from'./chunk-HN5LSP6L.mjs';import {a as a$1}from'./chunk-C4OACMTB.mjs';import {e as e$1}from'./chunk-UUHAXGMO.mjs';import {createContext,useState,useContext,useMemo,useCallback}from'react';import {jsx,jsxs}from'react/jsx-runtime';var fe=({children:e,justify:t,align:r,className:n="",style:o,backgroundColor:s,padding:a,margin:c,borderRadius:i,border:u,...m})=>{let d={...o,...s&&{backgroundColor:s},...a!==void 0&&{padding:typeof a=="number"?`${a}px`:a},...c!==void 0&&{margin:typeof c=="number"?`${c}px`:c},...i!==void 0&&{borderRadius:typeof i=="number"?`${i}px`:i},...u&&{border:u}};return jsx("div",{className:e$1((t||r)&&"flex",t&&oe[t],r&&ae[r],n),style:Object.keys(d).length>0?d:void 0,...m,children:e})},ye=({size:e=16,className:t=""})=>jsx("div",{className:t,style:{width:e,height:e,flexShrink:0}}),oe={start:"justify-start",center:"justify-center",end:"justify-end",between:"justify-between"},ae={start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch"},Se=({children:e,direction:t="row",gap:r=0,justify:n="start",align:o="stretch",className:s="",style:a,backgroundColor:c,padding:i,...u})=>{let m={gap:`${r*4}px`,...a,...c&&{backgroundColor:c},...i!==void 0&&{padding:typeof i=="number"?`${i}px`:i}};return jsx("div",{className:`flex ${t==="column"?"flex-col":"flex-row"} ${oe[n]} ${ae[o]} ${s}`,style:m,...u,children:e})},be=({children:e,cols:t=1,gap:r=4,className:n="",style:o,backgroundColor:s,padding:a,...c})=>{let i={gridTemplateColumns:`repeat(${t}, 1fr)`,gap:`${r*4}px`,...o,...s&&{backgroundColor:s},...a!==void 0&&{padding:typeof a=="number"?`${a}px`:a}};return jsx("div",{className:`grid ${n}`,style:i,...c,children:e})},y={left:"text-left",center:"text-center",right:"text-right"};function S(e){let t={};return e.fontSize&&(t.fontSize=e.fontSize),e.lineHeight&&(t.lineHeight=e.lineHeight),e.fontWeight&&(t.fontWeight=e.fontWeight),e.letterSpacing&&(t.letterSpacing=e.letterSpacing),t}var he=({children:e,variant:t="body",align:r="center",className:n="",style:o,fontSize:s,lineHeight:a,fontWeight:c,letterSpacing:i,...u})=>{let m={body:"text-foreground",muted:"text-muted-foreground text-sm",lead:"text-xl text-muted-foreground"},d=S({fontSize:s,lineHeight:a,fontWeight:c,letterSpacing:i}),g=Object.keys(d).length>0?{...o,...d}:o;return jsx("p",{className:`${m[t]} ${y[r]} ${n}`,style:g,...u,children:e})},xe=({children:e,align:t="center",className:r="",style:n,fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c,...i})=>{let u=S({fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c}),m=Object.keys(u).length>0?{...n,...u}:n;return jsx("h1",{className:`text-4xl md:text-5xl font-bold ${y[t]} ${r}`,style:m,...i,children:e})},Re=({children:e,align:t="center",className:r="",style:n,fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c,...i})=>{let u=S({fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c}),m=Object.keys(u).length>0?{...n,...u}:n;return jsx("h2",{className:`text-3xl md:text-4xl font-bold ${y[t]} ${r}`,style:m,...i,children:e})},ve=({children:e,align:t="center",className:r="",style:n,fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c,...i})=>{let u=S({fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c}),m=Object.keys(u).length>0?{...n,...u}:n;return jsx("h3",{className:`text-2xl md:text-3xl font-semibold ${y[t]} ${r}`,style:m,...i,children:e})},Ie=({children:e,align:t="center",className:r="",style:n,fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c,...i})=>{let u=S({fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c}),m=Object.keys(u).length>0?{...n,...u}:n;return jsx("h4",{className:`text-xl md:text-2xl font-semibold ${y[t]} ${r}`,style:m,...i,children:e})},ke=({children:e,href:t="#",className:r="",...n})=>{let o=t.startsWith("http://")||t.startsWith("https://");return jsx("a",{href:t,className:`text-primary hover:underline ${r}`,...o?{target:"_blank",rel:"noopener noreferrer"}:{},...n,children:e})},Ce=({className:e="",alt:t="",...r})=>jsx("img",{className:`max-w-full h-auto ${e}`,alt:t,...r}),De=({name:e="star",size:t=24,className:r=""})=>jsx(l,{name:e,size:t,className:r}),Ue=({children:e,className:t="",...r})=>jsx("section",{className:`py-10 ${t}`,...r,children:e}),we=({className:e="",...t})=>jsx("hr",{className:`border-border ${e}`,...t}),Te=({children:e,sticky:t=true,transparent:r=false,blur:n=true,overlay:o=false,className:s="",...a})=>jsx("header",{className:e$1("w-full px-4 py-3 z-50",o?"absolute top-0 left-0 right-0":t&&"sticky top-0",r?"bg-transparent":"bg-background/80",n&&!r&&"backdrop-blur-md",!r&&"border-b border-border",s),...a,children:jsx("div",{className:"max-w-7xl mx-auto",children:e})}),Pe=({defaultChecked:e=false,onChange:t,...r})=>{let[n,o]=useState(e);return jsx(b$4,{...r,checked:n,onChange:s=>{o(s.target.checked),t==null||t(s);}})},He=({defaultChecked:e=false,onChange:t,...r})=>{let[n,o]=useState(e);return jsx(d$2,{...r,checked:n,onChange:s=>{o(s.target.checked),t==null||t(s);}})},Ne=({defaultValue:e="",onChange:t,...r})=>{let[n,o]=useState(e);return jsx(b$5,{...r,value:n,onChange:s=>{o(s.target.value),t==null||t(s);}})},$e=({defaultValue:e="",onChange:t,resize:r="vertical",...n})=>{let[o,s]=useState(e);return jsx(a$7,{...n,resize:r,value:o,onChange:a=>{s(a.target.value),t==null||t(a);}})},Fe=({items:e=[],type:t="single",collapsible:r=true,defaultValue:n,className:o=""})=>jsx(a$8,{type:t,collapsible:r,defaultValue:n,className:o,children:e.map((s,a)=>{let c=s.value||`item-${a}`;return jsxs(b$6,{value:c,children:[jsx(c$3,{children:s.title}),jsx(d$3,{children:s.content})]},c)})}),Me=({tabs:e=[],defaultValue:t,variant:r="default",className:n=""})=>{var s;let o=((s=e[0])==null?void 0:s.value)||"tab-0";return jsxs(f$1,{defaultValue:t||o,variant:r,className:n,children:[jsx(g,{children:e.map((a,c)=>{let i=a.value||`tab-${c}`;return jsx(h,{value:i,children:a.label},i)})}),e.map((a,c)=>{let i=a.value||`tab-${c}`;return jsx(e$2,{value:i,children:a.content},i)})]})},R={Box:fe,Spacer:ye,Flex:Se,Grid:be,Section:Ue,Container:a$6,Divider:we,Text:he,H1:xe,H2:Re,H3:ve,H4:Ie,Link:ke,Image:Ce,Icon:De,Button:d$1,Badge:a$5,Avatar:a$4,AvatarImage:b$3,AvatarFallback:c$2,Input:Ne,Textarea:$e,Label:c$1,Checkbox:Pe,Switch:He,Skeleton:a$3,Progress:b$2,Card:a$2,CardHeader:b$1,CardTitle:c,CardDescription:d,CardContent:e,CardFooter:f,Alert:a$1,Header:Te,HeroSection:b,ScrollProgress:a,Accordion:Fe,Tabs:Me};function Le(e){return {...R,...e}}function Ae(e,t){return t in e}var le=createContext(null);function ue(){let e=useContext(le);if(!e)throw new Error("useSDUI must be used within SDUIRenderer");return e}function v(e,t){return t.split(".").reduce((r,n)=>{if(r&&typeof r=="object"&&n in r)return r[n]},e)}function Ve(e,t,r){let n=t.split("."),o={...e},s=o;for(let a=0;a<n.length-1;a++){let c=n[a];s[c]={...s[c]||{}},s=s[c];}return s[n[n.length-1]]=r,o}function ze(e,t){let r=v(t,e.path);switch(e.operator){case "eq":return r===e.value;case "neq":return r!==e.value;case "gt":return typeof r=="number"&&r>e.value;case "lt":return typeof r=="number"&&r<e.value;case "gte":return typeof r=="number"&&r>=e.value;case "lte":return typeof r=="number"&&r<=e.value;case "exists":return r!=null;case "notExists":return r==null;default:return true}}function C(e,t){let r={};for(let[n,o]of Object.entries(e))if(typeof o=="string"){let s=o.match(/^\{\{\s*(.+?)\s*\}\}$/);s?r[n]=v(t,s[1]):r[n]=o.replace(/\{\{\s*(.+?)\s*\}\}/g,(a,c)=>{let i=v(t,c);return i!==void 0?String(i):""});}else Array.isArray(o)?r[n]=o.map(s=>typeof s=="object"&&s!==null?C(s,t):s):typeof o=="object"&&o!==null?r[n]=C(o,t):r[n]=o;return r}function me({node:e,registry:t}){let{data:r,handleAction:n}=ue();if(e.when&&!ze(e.when,r))return null;let o=t[e.type];if(!o)return console.warn(`[SDUI] Unknown component type: ${e.type}`),jsxs("div",{className:"p-4 border border-destructive/50 bg-destructive/10 rounded text-sm text-destructive",children:["Unknown component: ",e.type]});let s=e.props?C(e.props,r):{},a={};e.on&&(e.on.click&&(a.onClick=()=>n(e.on.click)),e.on.submit&&(a.onSubmit=m=>{m.preventDefault(),n(e.on.submit);}));let c=null;return e.children&&(typeof e.children=="string"?c=e.children.replace(/\{\{\s*(.+?)\s*\}\}/g,(m,d)=>{let g=v(r,d);return g!==void 0?String(g):""}):Array.isArray(e.children)&&(c=e.children.map((m,d)=>jsx(me,{node:m,registry:t},m.key||`child-${d}`)))),["Divider","Input","Textarea","Checkbox","Switch","Progress","Skeleton","Image","ScrollProgress"].includes(e.type)||c===null?jsx(o,{...s,...a}):jsx(o,{...s,...a,children:c})}function de({schema:e,components:t,data:r={},onAction:n,onNavigate:o}){let s="root"in e,a=s?e.root:e,c=s?e.data:{},[i,u]=useState({...c,...r}),m=useMemo(()=>({...R,...t}),[t]),d=useCallback((p,b)=>{u(h=>Ve(h,p,b));},[]),g=useCallback(p=>{o?o(p):typeof window!="undefined"&&(window.location.href=p);},[o]),D=useCallback(p=>{var b,h,U;switch(p.type){case "navigate":g((b=p.payload)==null?void 0:b.path);break;case "setState":(h=p.payload)!=null&&h.path&&((U=p.payload)==null?void 0:U.value)!==void 0&&d(p.payload.path,p.payload.value);break;case "api":n==null||n(p);break;case "custom":n==null||n(p);break;default:n==null||n(p);}},[g,d,n]),ge=useMemo(()=>({data:i,setData:d,handleAction:D,navigate:g}),[i,d,D,g]);return jsx(le.Provider,{value:ge,children:jsx(me,{node:a,registry:m})})}function We({json:e,...t}){try{let r=JSON.parse(e);return jsx(de,{schema:r,...t})}catch(r){return jsxs("div",{className:"p-4 border border-destructive bg-destructive/10 rounded",children:[jsx("p",{className:"font-semibold text-destructive",children:"SDUI Parse Error"}),jsx("pre",{className:"text-sm mt-2 text-destructive/80",children:r.message})]})}}
2
+ import {a as a$9,b as b$5,c as c$3,d as d$3,f as f$1,g,h,e as e$2}from'./chunk-QRM66RQG.mjs';import {a as a$3}from'./chunk-IG47LMOD.mjs';import {a as a$1}from'./chunk-V2DNYJR6.mjs';import {a as a$7}from'./chunk-SDFVGFXT.mjs';import {a,b}from'./chunk-5DPW7SVD.mjs';import {c as c$2,b as b$2,a as a$5}from'./chunk-K2FOFIST.mjs';import {a as a$4}from'./chunk-SMLDNOV3.mjs';import {f,e,d,c,b as b$1,a as a$2}from'./chunk-CW66UBQG.mjs';import {a as a$6}from'./chunk-J47ZEXEL.mjs';import {b as b$3,a as a$8}from'./chunk-LL6QPRD7.mjs';import {c as c$1,d as d$2,b as b$4}from'./chunk-F2M4YDDQ.mjs';import {d as d$1}from'./chunk-O24K56OS.mjs';import'./chunk-SD6XGDAC.mjs';import {l}from'./chunk-ZQUMJQYV.mjs';import {e as e$1}from'./chunk-QEMPERUK.mjs';import'./chunk-EAZEI74V.mjs';import {createContext,useState,useContext,useMemo,useCallback}from'react';import {jsx,jsxs}from'react/jsx-runtime';var fe=({children:e,justify:t,align:r,className:n="",style:o,backgroundColor:s,padding:a,margin:c,borderRadius:i,border:u,...m})=>{let d={...o,...s&&{backgroundColor:s},...a!==void 0&&{padding:typeof a=="number"?`${a}px`:a},...c!==void 0&&{margin:typeof c=="number"?`${c}px`:c},...i!==void 0&&{borderRadius:typeof i=="number"?`${i}px`:i},...u&&{border:u}};return jsx("div",{className:e$1((t||r)&&"flex",t&&oe[t],r&&ae[r],n),style:Object.keys(d).length>0?d:void 0,...m,children:e})},ye=({size:e=16,className:t=""})=>jsx("div",{className:t,style:{width:e,height:e,flexShrink:0}}),oe={start:"justify-start",center:"justify-center",end:"justify-end",between:"justify-between"},ae={start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch"},Se=({children:e,direction:t="row",gap:r=0,justify:n="start",align:o="stretch",className:s="",style:a,backgroundColor:c,padding:i,...u})=>{let m={gap:`${r*4}px`,...a,...c&&{backgroundColor:c},...i!==void 0&&{padding:typeof i=="number"?`${i}px`:i}};return jsx("div",{className:`flex ${t==="column"?"flex-col":"flex-row"} ${oe[n]} ${ae[o]} ${s}`,style:m,...u,children:e})},be=({children:e,cols:t=1,gap:r=4,className:n="",style:o,backgroundColor:s,padding:a,...c})=>{let i={gridTemplateColumns:`repeat(${t}, 1fr)`,gap:`${r*4}px`,...o,...s&&{backgroundColor:s},...a!==void 0&&{padding:typeof a=="number"?`${a}px`:a}};return jsx("div",{className:`grid ${n}`,style:i,...c,children:e})},y={left:"text-left",center:"text-center",right:"text-right"};function S(e){let t={};return e.fontSize&&(t.fontSize=e.fontSize),e.lineHeight&&(t.lineHeight=e.lineHeight),e.fontWeight&&(t.fontWeight=e.fontWeight),e.letterSpacing&&(t.letterSpacing=e.letterSpacing),t}var he=({children:e,variant:t="body",align:r="center",className:n="",style:o,fontSize:s,lineHeight:a,fontWeight:c,letterSpacing:i,...u})=>{let m={body:"text-foreground",muted:"text-muted-foreground text-sm",lead:"text-xl text-muted-foreground"},d=S({fontSize:s,lineHeight:a,fontWeight:c,letterSpacing:i}),g=Object.keys(d).length>0?{...o,...d}:o;return jsx("p",{className:`${m[t]} ${y[r]} ${n}`,style:g,...u,children:e})},xe=({children:e,align:t="center",className:r="",style:n,fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c,...i})=>{let u=S({fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c}),m=Object.keys(u).length>0?{...n,...u}:n;return jsx("h1",{className:`text-4xl md:text-5xl font-bold ${y[t]} ${r}`,style:m,...i,children:e})},Re=({children:e,align:t="center",className:r="",style:n,fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c,...i})=>{let u=S({fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c}),m=Object.keys(u).length>0?{...n,...u}:n;return jsx("h2",{className:`text-3xl md:text-4xl font-bold ${y[t]} ${r}`,style:m,...i,children:e})},ve=({children:e,align:t="center",className:r="",style:n,fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c,...i})=>{let u=S({fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c}),m=Object.keys(u).length>0?{...n,...u}:n;return jsx("h3",{className:`text-2xl md:text-3xl font-semibold ${y[t]} ${r}`,style:m,...i,children:e})},Ie=({children:e,align:t="center",className:r="",style:n,fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c,...i})=>{let u=S({fontSize:o,lineHeight:s,fontWeight:a,letterSpacing:c}),m=Object.keys(u).length>0?{...n,...u}:n;return jsx("h4",{className:`text-xl md:text-2xl font-semibold ${y[t]} ${r}`,style:m,...i,children:e})},ke=({children:e,href:t="#",className:r="",...n})=>{let o=t.startsWith("http://")||t.startsWith("https://");return jsx("a",{href:t,className:`text-primary hover:underline ${r}`,...o?{target:"_blank",rel:"noopener noreferrer"}:{},...n,children:e})},Ce=({className:e="",alt:t="",...r})=>jsx("img",{className:`max-w-full h-auto ${e}`,alt:t,...r}),De=({name:e="star",size:t=24,className:r=""})=>jsx(l,{name:e,size:t,className:r}),Ue=({children:e,className:t="",...r})=>jsx("section",{className:`py-10 ${t}`,...r,children:e}),we=({className:e="",...t})=>jsx("hr",{className:`border-border ${e}`,...t}),Te=({children:e,sticky:t=true,transparent:r=false,blur:n=true,overlay:o=false,className:s="",...a})=>jsx("header",{className:e$1("w-full px-4 py-3 z-50",o?"absolute top-0 left-0 right-0":t&&"sticky top-0",r?"bg-transparent":"bg-background/80",n&&!r&&"backdrop-blur-md",!r&&"border-b border-border",s),...a,children:jsx("div",{className:"max-w-7xl mx-auto",children:e})}),Pe=({defaultChecked:e=false,onChange:t,...r})=>{let[n,o]=useState(e);return jsx(b$3,{...r,checked:n,onChange:s=>{o(s.target.checked),t==null||t(s);}})},He=({defaultChecked:e=false,onChange:t,...r})=>{let[n,o]=useState(e);return jsx(d$2,{...r,checked:n,onChange:s=>{o(s.target.checked),t==null||t(s);}})},Ne=({defaultValue:e="",onChange:t,...r})=>{let[n,o]=useState(e);return jsx(b$4,{...r,value:n,onChange:s=>{o(s.target.value),t==null||t(s);}})},$e=({defaultValue:e="",onChange:t,resize:r="vertical",...n})=>{let[o,s]=useState(e);return jsx(a$8,{...n,resize:r,value:o,onChange:a=>{s(a.target.value),t==null||t(a);}})},Fe=({items:e=[],type:t="single",collapsible:r=true,defaultValue:n,className:o=""})=>jsx(a$9,{type:t,collapsible:r,defaultValue:n,className:o,children:e.map((s,a)=>{let c=s.value||`item-${a}`;return jsxs(b$5,{value:c,children:[jsx(c$3,{children:s.title}),jsx(d$3,{children:s.content})]},c)})}),Me=({tabs:e=[],defaultValue:t,variant:r="default",className:n=""})=>{var s;let o=((s=e[0])==null?void 0:s.value)||"tab-0";return jsxs(f$1,{defaultValue:t||o,variant:r,className:n,children:[jsx(g,{children:e.map((a,c)=>{let i=a.value||`tab-${c}`;return jsx(h,{value:i,children:a.label},i)})}),e.map((a,c)=>{let i=a.value||`tab-${c}`;return jsx(e$2,{value:i,children:a.content},i)})]})},R={Box:fe,Spacer:ye,Flex:Se,Grid:be,Section:Ue,Container:a$7,Divider:we,Text:he,H1:xe,H2:Re,H3:ve,H4:Ie,Link:ke,Image:Ce,Icon:De,Button:d$1,Badge:a$6,Avatar:a$5,AvatarImage:b$2,AvatarFallback:c$2,Input:Ne,Textarea:$e,Label:c$1,Checkbox:Pe,Switch:He,Skeleton:a$4,Progress:a$3,Card:a$2,CardHeader:b$1,CardTitle:c,CardDescription:d,CardContent:e,CardFooter:f,Alert:a$1,Header:Te,HeroSection:b,ScrollProgress:a,Accordion:Fe,Tabs:Me};function Le(e){return {...R,...e}}function Ae(e,t){return t in e}var le=createContext(null);function ue(){let e=useContext(le);if(!e)throw new Error("useSDUI must be used within SDUIRenderer");return e}function v(e,t){return t.split(".").reduce((r,n)=>{if(r&&typeof r=="object"&&n in r)return r[n]},e)}function Ve(e,t,r){let n=t.split("."),o={...e},s=o;for(let a=0;a<n.length-1;a++){let c=n[a];s[c]={...s[c]||{}},s=s[c];}return s[n[n.length-1]]=r,o}function ze(e,t){let r=v(t,e.path);switch(e.operator){case "eq":return r===e.value;case "neq":return r!==e.value;case "gt":return typeof r=="number"&&r>e.value;case "lt":return typeof r=="number"&&r<e.value;case "gte":return typeof r=="number"&&r>=e.value;case "lte":return typeof r=="number"&&r<=e.value;case "exists":return r!=null;case "notExists":return r==null;default:return true}}function C(e,t){let r={};for(let[n,o]of Object.entries(e))if(typeof o=="string"){let s=o.match(/^\{\{\s*(.+?)\s*\}\}$/);s?r[n]=v(t,s[1]):r[n]=o.replace(/\{\{\s*(.+?)\s*\}\}/g,(a,c)=>{let i=v(t,c);return i!==void 0?String(i):""});}else Array.isArray(o)?r[n]=o.map(s=>typeof s=="object"&&s!==null?C(s,t):s):typeof o=="object"&&o!==null?r[n]=C(o,t):r[n]=o;return r}function me({node:e,registry:t}){let{data:r,handleAction:n}=ue();if(e.when&&!ze(e.when,r))return null;let o=t[e.type];if(!o)return console.warn(`[SDUI] Unknown component type: ${e.type}`),jsxs("div",{className:"p-4 border border-destructive/50 bg-destructive/10 rounded text-sm text-destructive",children:["Unknown component: ",e.type]});let s=e.props?C(e.props,r):{},a={};e.on&&(e.on.click&&(a.onClick=()=>n(e.on.click)),e.on.submit&&(a.onSubmit=m=>{m.preventDefault(),n(e.on.submit);}));let c=null;return e.children&&(typeof e.children=="string"?c=e.children.replace(/\{\{\s*(.+?)\s*\}\}/g,(m,d)=>{let g=v(r,d);return g!==void 0?String(g):""}):Array.isArray(e.children)&&(c=e.children.map((m,d)=>jsx(me,{node:m,registry:t},m.key||`child-${d}`)))),["Divider","Input","Textarea","Checkbox","Switch","Progress","Skeleton","Image","ScrollProgress"].includes(e.type)||c===null?jsx(o,{...s,...a}):jsx(o,{...s,...a,children:c})}function de({schema:e,components:t,data:r={},onAction:n,onNavigate:o}){let s="root"in e,a=s?e.root:e,c=s?e.data:{},[i,u]=useState({...c,...r}),m=useMemo(()=>({...R,...t}),[t]),d=useCallback((p,b)=>{u(h=>Ve(h,p,b));},[]),g=useCallback(p=>{o?o(p):typeof window!="undefined"&&(window.location.href=p);},[o]),D=useCallback(p=>{var b,h,U;switch(p.type){case "navigate":g((b=p.payload)==null?void 0:b.path);break;case "setState":(h=p.payload)!=null&&h.path&&((U=p.payload)==null?void 0:U.value)!==void 0&&d(p.payload.path,p.payload.value);break;case "api":n==null||n(p);break;case "custom":n==null||n(p);break;default:n==null||n(p);}},[g,d,n]),ge=useMemo(()=>({data:i,setData:d,handleAction:D,navigate:g}),[i,d,D,g]);return jsx(le.Provider,{value:ge,children:jsx(me,{node:a,registry:m})})}function We({json:e,...t}){try{let r=JSON.parse(e);return jsx(de,{schema:r,...t})}catch(r){return jsxs("div",{className:"p-4 border border-destructive bg-destructive/10 rounded",children:[jsx("p",{className:"font-semibold text-destructive",children:"SDUI Parse Error"}),jsx("pre",{className:"text-sm mt-2 text-destructive/80",children:r.message})]})}}
3
3
  export{We as SDUIFromJSON,de as SDUIRenderer,R as defaultRegistry,Le as extendRegistry,Ae as hasComponent,ue as useSDUI};//# sourceMappingURL=sdui.mjs.map
4
4
  //# sourceMappingURL=sdui.mjs.map
package/dist/sdui.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/sdui/registry.tsx","../src/sdui/SDUIRenderer.tsx"],"names":["Box","children","justify","align","className","style","backgroundColor","padding","margin","borderRadius","border","props","customStyle","jsx","cn","justifyMap","alignMap","Spacer","size","Flex","direction","gap","Grid","cols","textAlignMap","getTypographyStyle","Text","variant","fontSize","lineHeight","fontWeight","letterSpacing","variantClasses","typoStyle","mergedStyle","H1","H2","H3","H4","Link","href","isExternal","Image","alt","SDUIIcon","name","Icon","Section","Divider","Header","sticky","transparent","blur","overlay","SDUICheckbox","defaultChecked","onChange","checked","setChecked","useState","Checkbox","e","SDUISwitch","Switch","SDUIInput","defaultValue","value","setValue","Input","SDUITextarea","resize","Textarea","SDUIAccordion","items","type","collapsible","Accordion","item","index","jsxs","AccordionItem","AccordionTrigger","AccordionContent","SDUITabs","tabs","_a","firstValue","Tabs","TabsList","tab","TabsTrigger","TabsContent","defaultRegistry","Container","Button","Badge","Avatar","AvatarImage","AvatarFallback","Label","Skeleton","Progress","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Alert","HeroSection","ScrollProgress","extendRegistry","customComponents","hasComponent","registry","SDUIContextInternal","createContext","useSDUI","context","useContext","getByPath","obj","path","acc","key","setByPath","keys","result","current","i","evaluateCondition","condition","data","resolveProps","resolved","bindingMatch","_","val","NodeRenderer","node","handleAction","Component","resolvedProps","eventProps","child","SDUIRenderer","schema","components","initialData","onAction","onNavigate","isPageSchema","rootNode","schemaData","setDataState","useMemo","setData","useCallback","prev","navigate","action","_b","_c","contextValue","SDUIFromJSON","json","error"],"mappings":"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","file":"sdui.mjs","sourcesContent":["\"use client\";\n\n/**\n * SDUI Component Registry\n *\n * 컴포넌트 타입 문자열 → 실제 React 컴포넌트 매핑\n */\n\nimport React, { useState } from \"react\";\nimport type { SDUIComponentRegistry } from \"./types\";\nimport { cn } from \"../lib/utils\";\n\n// 기본 컴포넌트들\nimport { Button } from \"../components/Button\";\nimport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from \"../components/Card\";\nimport { Badge } from \"../components/Badge\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"../components/Avatar\";\nimport { Container } from \"../components/Container\";\nimport { Input } from \"../components/Input\";\nimport { Textarea } from \"../components/Textarea\";\nimport { Label } from \"../components/Label\";\nimport { Checkbox, type CheckboxProps } from \"../components/Checkbox\";\nimport { Switch, type SwitchProps } from \"../components/Switch\";\nimport { type InputProps } from \"../components/Input\";\nimport { type TextareaProps } from \"../components/Textarea\";\nimport { Skeleton } from \"../components/Skeleton\";\nimport { Progress } from \"../components/Progress\";\nimport { Alert } from \"../components/Alert\";\nimport { Icon } from \"../components/Icon\";\nimport type { IconName } from \"../lib/icons\";\n\n// Advanced 컴포넌트들\nimport { HeroSection } from \"../components/HeroSection\";\nimport { ScrollProgress } from \"../components/ScrollProgress\";\n\n// Interactive 컴포넌트들\nimport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n} from \"../components/Accordion\";\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from \"../components/Tabs\";\n\n// 레이아웃 프리미티브\nconst Box: React.FC<React.HTMLAttributes<HTMLDivElement> & {\n justify?: \"start\" | \"center\" | \"end\" | \"between\";\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n // 커스텀 스타일 props (DOM에 직접 전달하지 않음)\n backgroundColor?: string;\n padding?: string | number;\n margin?: string | number;\n borderRadius?: string | number;\n border?: string;\n}> = ({\n children,\n justify,\n align,\n className = \"\",\n style,\n // 커스텀 props 분리 (DOM에 전달 X)\n backgroundColor,\n padding,\n margin,\n borderRadius,\n border,\n ...props\n}) => {\n // 커스텀 props를 style 객체로 병합\n const customStyle: React.CSSProperties = {\n ...style,\n ...(backgroundColor && { backgroundColor }),\n ...(padding !== undefined && { padding: typeof padding === 'number' ? `${padding}px` : padding }),\n ...(margin !== undefined && { margin: typeof margin === 'number' ? `${margin}px` : margin }),\n ...(borderRadius !== undefined && { borderRadius: typeof borderRadius === 'number' ? `${borderRadius}px` : borderRadius }),\n ...(border && { border }),\n };\n\n return (\n <div\n className={cn(\n (justify || align) && \"flex\",\n justify && justifyMap[justify],\n align && alignMap[align],\n className\n )}\n style={Object.keys(customStyle).length > 0 ? customStyle : undefined}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n// Spacer - 공백용 void 컴포넌트\nconst Spacer: React.FC<{ size?: number; className?: string }> = ({ size = 16, className = \"\" }) => (\n <div className={className} style={{ width: size, height: size, flexShrink: 0 }} />\n);\n\n// 정렬 매핑\nconst justifyMap = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n};\nconst alignMap = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n};\n\nconst Flex: React.FC<React.HTMLAttributes<HTMLDivElement> & {\n direction?: \"row\" | \"column\";\n gap?: number;\n justify?: \"start\" | \"center\" | \"end\" | \"between\";\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n backgroundColor?: string;\n padding?: string | number;\n}> = ({\n children,\n direction = \"row\",\n gap = 0,\n justify = \"start\",\n align = \"stretch\",\n className = \"\",\n style,\n backgroundColor,\n padding,\n ...props\n}) => {\n const customStyle: React.CSSProperties = {\n gap: `${gap * 4}px`,\n ...style,\n ...(backgroundColor && { backgroundColor }),\n ...(padding !== undefined && { padding: typeof padding === 'number' ? `${padding}px` : padding }),\n };\n\n return (\n <div\n className={`flex ${direction === \"column\" ? \"flex-col\" : \"flex-row\"} ${justifyMap[justify]} ${alignMap[align]} ${className}`}\n style={customStyle}\n {...props}\n >\n {children}\n </div>\n );\n};\n\nconst Grid: React.FC<React.HTMLAttributes<HTMLDivElement> & {\n cols?: number;\n gap?: number;\n backgroundColor?: string;\n padding?: string | number;\n}> = ({\n children,\n cols = 1,\n gap = 4,\n className = \"\",\n style,\n backgroundColor,\n padding,\n ...props\n}) => {\n const customStyle: React.CSSProperties = {\n gridTemplateColumns: `repeat(${cols}, 1fr)`,\n gap: `${gap * 4}px`,\n ...style,\n ...(backgroundColor && { backgroundColor }),\n ...(padding !== undefined && { padding: typeof padding === 'number' ? `${padding}px` : padding }),\n };\n\n return (\n <div\n className={`grid ${className}`}\n style={customStyle}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n// 텍스트 정렬 매핑\nconst textAlignMap = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n};\n\n// 타이포그래피 스타일 props 타입\ninterface TypographyStyleProps {\n fontSize?: string;\n lineHeight?: string;\n fontWeight?: string;\n letterSpacing?: string;\n}\n\n// 타이포그래피 스타일 props를 style 객체로 변환\nfunction getTypographyStyle(props: TypographyStyleProps): React.CSSProperties {\n const style: React.CSSProperties = {};\n if (props.fontSize) style.fontSize = props.fontSize;\n if (props.lineHeight) style.lineHeight = props.lineHeight;\n if (props.fontWeight) style.fontWeight = props.fontWeight;\n if (props.letterSpacing) style.letterSpacing = props.letterSpacing;\n return style;\n}\n\nconst Text: React.FC<React.HTMLAttributes<HTMLParagraphElement> & {\n variant?: \"body\" | \"muted\" | \"lead\";\n align?: \"left\" | \"center\" | \"right\";\n} & TypographyStyleProps> = ({\n children,\n variant = \"body\",\n align = \"center\",\n className = \"\",\n style,\n fontSize,\n lineHeight,\n fontWeight,\n letterSpacing,\n ...props\n}) => {\n const variantClasses = {\n body: \"text-foreground\",\n muted: \"text-muted-foreground text-sm\",\n lead: \"text-xl text-muted-foreground\",\n };\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n\n return (\n <p\n className={`${variantClasses[variant]} ${textAlignMap[align]} ${className}`}\n style={mergedStyle}\n {...props}\n >\n {children}\n </p>\n );\n};\n\n// Heading 컴포넌트들 (정렬 + 타이포그래피 스타일 지원)\ntype HeadingProps = React.HTMLAttributes<HTMLHeadingElement> & {\n align?: \"left\" | \"center\" | \"right\";\n} & TypographyStyleProps;\n\nconst H1: React.FC<HeadingProps> = ({\n children, align = \"center\", className = \"\", style,\n fontSize, lineHeight, fontWeight, letterSpacing,\n ...props\n}) => {\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n return (\n <h1 className={`text-4xl md:text-5xl font-bold ${textAlignMap[align]} ${className}`} style={mergedStyle} {...props}>{children}</h1>\n );\n};\n\nconst H2: React.FC<HeadingProps> = ({\n children, align = \"center\", className = \"\", style,\n fontSize, lineHeight, fontWeight, letterSpacing,\n ...props\n}) => {\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n return (\n <h2 className={`text-3xl md:text-4xl font-bold ${textAlignMap[align]} ${className}`} style={mergedStyle} {...props}>{children}</h2>\n );\n};\n\nconst H3: React.FC<HeadingProps> = ({\n children, align = \"center\", className = \"\", style,\n fontSize, lineHeight, fontWeight, letterSpacing,\n ...props\n}) => {\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n return (\n <h3 className={`text-2xl md:text-3xl font-semibold ${textAlignMap[align]} ${className}`} style={mergedStyle} {...props}>{children}</h3>\n );\n};\n\nconst H4: React.FC<HeadingProps> = ({\n children, align = \"center\", className = \"\", style,\n fontSize, lineHeight, fontWeight, letterSpacing,\n ...props\n}) => {\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n return (\n <h4 className={`text-xl md:text-2xl font-semibold ${textAlignMap[align]} ${className}`} style={mergedStyle} {...props}>{children}</h4>\n );\n};\n\nconst Link: React.FC<React.AnchorHTMLAttributes<HTMLAnchorElement>> = ({\n children,\n href = \"#\",\n className = \"\",\n ...props\n}) => {\n // 절대 경로 처리: http/https로 시작하지 않으면 그대로, 시작하면 외부 링크\n const isExternal = href.startsWith(\"http://\") || href.startsWith(\"https://\");\n\n return (\n <a\n href={href}\n className={`text-primary hover:underline ${className}`}\n {...(isExternal ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {})}\n {...props}\n >\n {children}\n </a>\n );\n};\n\nconst Image: React.FC<React.ImgHTMLAttributes<HTMLImageElement>> = ({ className = \"\", alt = \"\", ...props }) => (\n <img className={`max-w-full h-auto ${className}`} alt={alt} {...props} />\n);\n\n// SDUI용 Icon 래퍼 (name을 string으로 받음)\nconst SDUIIcon: React.FC<{ name?: string; size?: number; className?: string }> = ({\n name = \"star\",\n size = 24,\n className = \"\",\n}) => <Icon name={name as IconName} size={size} className={className} />;\n\nconst Section: React.FC<React.HTMLAttributes<HTMLElement>> = ({\n children,\n className = \"\",\n ...props\n}) => (\n <section className={`py-10 ${className}`} {...props}>\n {children}\n </section>\n);\n\nconst Divider: React.FC<React.HTMLAttributes<HTMLHRElement>> = ({ className = \"\", ...props }) => (\n <hr className={`border-border ${className}`} {...props} />\n);\n\n// Header - 네비게이션 헤더 (GNB)\nconst Header: React.FC<React.HTMLAttributes<HTMLElement> & {\n sticky?: boolean;\n transparent?: boolean;\n blur?: boolean;\n overlay?: boolean;\n}> = ({\n children,\n sticky = true,\n transparent = false,\n blur = true,\n overlay = false,\n className = \"\",\n ...props\n}) => (\n <header\n className={cn(\n \"w-full px-4 py-3 z-50\",\n overlay ? \"absolute top-0 left-0 right-0\" : sticky && \"sticky top-0\",\n transparent ? \"bg-transparent\" : \"bg-background/80\",\n blur && !transparent && \"backdrop-blur-md\",\n !transparent && \"border-b border-border\",\n className\n )}\n {...props}\n >\n <div className=\"max-w-7xl mx-auto\">\n {children}\n </div>\n </header>\n);\n\n/**\n * SDUI용 Uncontrolled 래퍼 컴포넌트들\n * 프리뷰에서 인터랙션이 동작하도록 자체 상태 관리\n */\n\n// Uncontrolled Checkbox - 클릭하면 상태 토글\nconst SDUICheckbox: React.FC<CheckboxProps> = ({ defaultChecked = false, onChange, ...props }) => {\n const [checked, setChecked] = useState(defaultChecked);\n return (\n <Checkbox\n {...props}\n checked={checked}\n onChange={(e) => {\n setChecked(e.target.checked);\n onChange?.(e);\n }}\n />\n );\n};\n\n// Uncontrolled Switch - 클릭하면 상태 토글\nconst SDUISwitch: React.FC<SwitchProps> = ({ defaultChecked = false, onChange, ...props }) => {\n const [checked, setChecked] = useState(defaultChecked);\n return (\n <Switch\n {...props}\n checked={checked}\n onChange={(e) => {\n setChecked(e.target.checked);\n onChange?.(e);\n }}\n />\n );\n};\n\n// Uncontrolled Input - 자체 상태 관리\nconst SDUIInput: React.FC<InputProps> = ({ defaultValue = \"\", onChange, ...props }) => {\n const [value, setValue] = useState(defaultValue);\n return (\n <Input\n {...props}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n onChange?.(e);\n }}\n />\n );\n};\n\n// Uncontrolled Textarea - 자체 상태 관리 + resize 지원\nconst SDUITextarea: React.FC<TextareaProps> = ({ defaultValue = \"\", onChange, resize = \"vertical\", ...props }) => {\n const [value, setValue] = useState(defaultValue);\n return (\n <Textarea\n {...props}\n resize={resize}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n onChange?.(e);\n }}\n />\n );\n};\n\n/**\n * SDUI용 간단한 Accordion - 데이터 기반\n * items 배열로 아코디언 생성\n */\ninterface SimpleAccordionItem {\n title: string;\n content: string;\n value?: string;\n}\n\nconst SDUIAccordion: React.FC<{\n items?: SimpleAccordionItem[];\n type?: \"single\" | \"multiple\";\n collapsible?: boolean;\n defaultValue?: string;\n className?: string;\n}> = ({\n items = [],\n type = \"single\",\n collapsible = true,\n defaultValue,\n className = \"\",\n}) => {\n return (\n <Accordion\n type={type}\n collapsible={collapsible}\n defaultValue={defaultValue}\n className={className}\n >\n {items.map((item, index) => {\n const value = item.value || `item-${index}`;\n return (\n <AccordionItem key={value} value={value}>\n <AccordionTrigger>{item.title}</AccordionTrigger>\n <AccordionContent>{item.content}</AccordionContent>\n </AccordionItem>\n );\n })}\n </Accordion>\n );\n};\n\n/**\n * SDUI용 간단한 Tabs - 데이터 기반\n * tabs 배열로 탭 생성\n */\ninterface SimpleTabItem {\n label: string;\n content: string;\n value?: string;\n}\n\nconst SDUITabs: React.FC<{\n tabs?: SimpleTabItem[];\n defaultValue?: string;\n variant?: \"default\" | \"pills\" | \"underline\" | \"cards\";\n className?: string;\n}> = ({\n tabs = [],\n defaultValue,\n variant = \"default\",\n className = \"\",\n}) => {\n const firstValue = tabs[0]?.value || \"tab-0\";\n\n return (\n <Tabs\n defaultValue={defaultValue || firstValue}\n variant={variant}\n className={className}\n >\n <TabsList>\n {tabs.map((tab, index) => {\n const value = tab.value || `tab-${index}`;\n return (\n <TabsTrigger key={value} value={value}>\n {tab.label}\n </TabsTrigger>\n );\n })}\n </TabsList>\n {tabs.map((tab, index) => {\n const value = tab.value || `tab-${index}`;\n return (\n <TabsContent key={value} value={value}>\n {tab.content}\n </TabsContent>\n );\n })}\n </Tabs>\n );\n};\n\n/**\n * 기본 컴포넌트 레지스트리\n */\nexport const defaultRegistry: SDUIComponentRegistry = {\n // 레이아웃\n Box,\n Spacer,\n Flex,\n Grid,\n Section,\n Container,\n Divider,\n\n // 타이포그래피\n Text,\n H1,\n H2,\n H3,\n H4,\n Link,\n\n // 미디어\n Image,\n Icon: SDUIIcon,\n\n // 기본 UI\n Button,\n Badge,\n Avatar,\n AvatarImage,\n AvatarFallback,\n Input: SDUIInput,\n Textarea: SDUITextarea,\n Label,\n Checkbox: SDUICheckbox,\n Switch: SDUISwitch,\n Skeleton,\n Progress,\n\n // 카드\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n\n // 피드백\n Alert,\n\n // Advanced (Pro)\n Header,\n HeroSection,\n ScrollProgress,\n\n // Interactive (Pro)\n Accordion: SDUIAccordion,\n Tabs: SDUITabs,\n};\n\n/**\n * 레지스트리 확장 헬퍼\n */\nexport function extendRegistry(\n customComponents: SDUIComponentRegistry\n): SDUIComponentRegistry {\n return {\n ...defaultRegistry,\n ...customComponents,\n };\n}\n\n/**\n * 컴포넌트 존재 여부 확인\n */\nexport function hasComponent(registry: SDUIComponentRegistry, type: string): boolean {\n return type in registry;\n}\n","\"use client\";\n\n/**\n * SDUI Renderer\n *\n * JSON 스키마를 받아서 실제 React 컴포넌트로 렌더링\n */\n\nimport React, { createContext, useContext, useState, useCallback, useMemo } from \"react\";\nimport type {\n SDUINode,\n SDUIPageSchema,\n SDUIRendererProps,\n SDUIContext,\n SDUIAction,\n SDUICondition,\n SDUIComponentRegistry,\n} from \"./types\";\nimport { defaultRegistry } from \"./registry\";\n\n// SDUI Context\nconst SDUIContextInternal = createContext<SDUIContext | null>(null);\n\n/**\n * SDUI Context Hook\n */\nexport function useSDUI(): SDUIContext {\n const context = useContext(SDUIContextInternal);\n if (!context) {\n throw new Error(\"useSDUI must be used within SDUIRenderer\");\n }\n return context;\n}\n\n/**\n * 데이터 경로로 값 가져오기\n * 예: \"user.profile.name\" → data.user.profile.name\n */\nfunction getByPath(obj: Record<string, unknown>, path: string): unknown {\n return path.split(\".\").reduce((acc: unknown, key) => {\n if (acc && typeof acc === \"object\" && key in acc) {\n return (acc as Record<string, unknown>)[key];\n }\n return undefined;\n }, obj);\n}\n\n/**\n * 데이터 경로로 값 설정하기\n */\nfunction setByPath(\n obj: Record<string, unknown>,\n path: string,\n value: unknown\n): Record<string, unknown> {\n const keys = path.split(\".\");\n const result = { ...obj };\n let current: Record<string, unknown> = result;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n current[key] = { ...(current[key] as Record<string, unknown> || {}) };\n current = current[key] as Record<string, unknown>;\n }\n\n current[keys[keys.length - 1]] = value;\n return result;\n}\n\n/**\n * 조건 평가\n */\nfunction evaluateCondition(\n condition: SDUICondition,\n data: Record<string, unknown>\n): boolean {\n const value = getByPath(data, condition.path);\n\n switch (condition.operator) {\n case \"eq\":\n return value === condition.value;\n case \"neq\":\n return value !== condition.value;\n case \"gt\":\n return typeof value === \"number\" && value > (condition.value as number);\n case \"lt\":\n return typeof value === \"number\" && value < (condition.value as number);\n case \"gte\":\n return typeof value === \"number\" && value >= (condition.value as number);\n case \"lte\":\n return typeof value === \"number\" && value <= (condition.value as number);\n case \"exists\":\n return value !== undefined && value !== null;\n case \"notExists\":\n return value === undefined || value === null;\n default:\n return true;\n }\n}\n\n/**\n * Props에서 데이터 바인딩 처리\n * {{ path }} 형식을 실제 데이터로 치환\n */\nfunction resolveProps(\n props: Record<string, unknown>,\n data: Record<string, unknown>\n): Record<string, unknown> {\n const resolved: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(props)) {\n if (typeof value === \"string\") {\n // {{ path }} 패턴 처리\n const bindingMatch = value.match(/^\\{\\{\\s*(.+?)\\s*\\}\\}$/);\n if (bindingMatch) {\n resolved[key] = getByPath(data, bindingMatch[1]);\n } else {\n // 문자열 내 부분 바인딩: \"Hello, {{ user.name }}!\"\n resolved[key] = value.replace(/\\{\\{\\s*(.+?)\\s*\\}\\}/g, (_, path) => {\n const val = getByPath(data, path);\n return val !== undefined ? String(val) : \"\";\n });\n }\n } else if (Array.isArray(value)) {\n resolved[key] = value.map((item) =>\n typeof item === \"object\" && item !== null\n ? resolveProps(item as Record<string, unknown>, data)\n : item\n );\n } else if (typeof value === \"object\" && value !== null) {\n resolved[key] = resolveProps(value as Record<string, unknown>, data);\n } else {\n resolved[key] = value;\n }\n }\n\n return resolved;\n}\n\n/**\n * 단일 노드 렌더러\n */\ninterface NodeRendererProps {\n node: SDUINode;\n registry: SDUIComponentRegistry;\n}\n\nfunction NodeRenderer({ node, registry }: NodeRendererProps) {\n const { data, handleAction } = useSDUI();\n\n // 조건부 렌더링 체크\n if (node.when && !evaluateCondition(node.when, data)) {\n return null;\n }\n\n // 컴포넌트 찾기\n const Component = registry[node.type];\n if (!Component) {\n console.warn(`[SDUI] Unknown component type: ${node.type}`);\n return (\n <div className=\"p-4 border border-destructive/50 bg-destructive/10 rounded text-sm text-destructive\">\n Unknown component: {node.type}\n </div>\n );\n }\n\n // Props 처리\n const resolvedProps = node.props ? resolveProps(node.props, data) : {};\n\n // 이벤트 핸들러 처리\n const eventProps: Record<string, unknown> = {};\n if (node.on) {\n if (node.on.click) {\n eventProps.onClick = () => handleAction(node.on!.click!);\n }\n if (node.on.submit) {\n eventProps.onSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n handleAction(node.on!.submit!);\n };\n }\n }\n\n // Children 처리\n let children: React.ReactNode = null;\n if (node.children) {\n if (typeof node.children === \"string\") {\n // 문자열 바인딩 처리\n children = node.children.replace(/\\{\\{\\s*(.+?)\\s*\\}\\}/g, (_, path) => {\n const val = getByPath(data, path);\n return val !== undefined ? String(val) : \"\";\n });\n } else if (Array.isArray(node.children)) {\n children = node.children.map((child, index) => (\n <NodeRenderer\n key={child.key || `child-${index}`}\n node={child}\n registry={registry}\n />\n ));\n }\n }\n\n // void 엘리먼트는 children을 받지 않음\n const voidElements = ['Divider', 'Input', 'Textarea', 'Checkbox', 'Switch', 'Progress', 'Skeleton', 'Image', 'ScrollProgress'];\n const isVoidElement = voidElements.includes(node.type);\n\n if (isVoidElement || children === null) {\n return <Component {...resolvedProps} {...eventProps} />;\n }\n\n return (\n <Component {...resolvedProps} {...eventProps}>\n {children}\n </Component>\n );\n}\n\n/**\n * SDUI Renderer 메인 컴포넌트\n */\nexport function SDUIRenderer({\n schema,\n components,\n data: initialData = {},\n onAction,\n onNavigate,\n}: SDUIRendererProps) {\n // 페이지 스키마인지 노드인지 확인\n const isPageSchema = \"root\" in schema;\n const rootNode = isPageSchema ? (schema as SDUIPageSchema).root : (schema as SDUINode);\n const schemaData = isPageSchema ? (schema as SDUIPageSchema).data : {};\n\n // 데이터 상태\n const [data, setDataState] = useState<Record<string, unknown>>({\n ...schemaData,\n ...initialData,\n });\n\n // 레지스트리 병합\n const registry = useMemo(\n () => ({ ...defaultRegistry, ...components }),\n [components]\n );\n\n // 데이터 업데이트\n const setData = useCallback((path: string, value: unknown) => {\n setDataState((prev) => setByPath(prev, path, value));\n }, []);\n\n // 네비게이션\n const navigate = useCallback(\n (path: string) => {\n if (onNavigate) {\n onNavigate(path);\n } else if (typeof window !== \"undefined\") {\n window.location.href = path;\n }\n },\n [onNavigate]\n );\n\n // 액션 핸들러\n const handleAction = useCallback(\n (action: SDUIAction) => {\n switch (action.type) {\n case \"navigate\":\n navigate(action.payload?.path as string);\n break;\n case \"setState\":\n if (action.payload?.path && action.payload?.value !== undefined) {\n setData(action.payload.path as string, action.payload.value);\n }\n break;\n case \"api\":\n // API 호출은 외부에서 처리\n onAction?.(action);\n break;\n case \"custom\":\n onAction?.(action);\n break;\n default:\n onAction?.(action);\n }\n },\n [navigate, setData, onAction]\n );\n\n // Context 값\n const contextValue: SDUIContext = useMemo(\n () => ({\n data,\n setData,\n handleAction,\n navigate,\n }),\n [data, setData, handleAction, navigate]\n );\n\n return (\n <SDUIContextInternal.Provider value={contextValue}>\n <NodeRenderer node={rootNode} registry={registry} />\n </SDUIContextInternal.Provider>\n );\n}\n\n/**\n * JSON 문자열에서 렌더링 (편의용)\n */\nexport function SDUIFromJSON({\n json,\n ...props\n}: Omit<SDUIRendererProps, \"schema\"> & { json: string }) {\n try {\n const schema = JSON.parse(json);\n return <SDUIRenderer schema={schema} {...props} />;\n } catch (error) {\n return (\n <div className=\"p-4 border border-destructive bg-destructive/10 rounded\">\n <p className=\"font-semibold text-destructive\">SDUI Parse Error</p>\n <pre className=\"text-sm mt-2 text-destructive/80\">\n {(error as Error).message}\n </pre>\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/sdui/registry.tsx","../src/sdui/SDUIRenderer.tsx"],"names":["Box","children","justify","align","className","style","backgroundColor","padding","margin","borderRadius","border","props","customStyle","jsx","cn","justifyMap","alignMap","Spacer","size","Flex","direction","gap","Grid","cols","textAlignMap","getTypographyStyle","Text","variant","fontSize","lineHeight","fontWeight","letterSpacing","variantClasses","typoStyle","mergedStyle","H1","H2","H3","H4","Link","href","isExternal","Image","alt","SDUIIcon","name","Icon","Section","Divider","Header","sticky","transparent","blur","overlay","SDUICheckbox","defaultChecked","onChange","checked","setChecked","useState","Checkbox","e","SDUISwitch","Switch","SDUIInput","defaultValue","value","setValue","Input","SDUITextarea","resize","Textarea","SDUIAccordion","items","type","collapsible","Accordion","item","index","jsxs","AccordionItem","AccordionTrigger","AccordionContent","SDUITabs","tabs","_a","firstValue","Tabs","TabsList","tab","TabsTrigger","TabsContent","defaultRegistry","Container","Button","Badge","Avatar","AvatarImage","AvatarFallback","Label","Skeleton","Progress","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Alert","HeroSection","ScrollProgress","extendRegistry","customComponents","hasComponent","registry","SDUIContextInternal","createContext","useSDUI","context","useContext","getByPath","obj","path","acc","key","setByPath","keys","result","current","i","evaluateCondition","condition","data","resolveProps","resolved","bindingMatch","_","val","NodeRenderer","node","handleAction","Component","resolvedProps","eventProps","child","SDUIRenderer","schema","components","initialData","onAction","onNavigate","isPageSchema","rootNode","schemaData","setDataState","useMemo","setData","useCallback","prev","navigate","action","_b","_c","contextValue","SDUIFromJSON","json","error"],"mappings":"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","file":"sdui.mjs","sourcesContent":["\"use client\";\n\n/**\n * SDUI Component Registry\n *\n * 컴포넌트 타입 문자열 → 실제 React 컴포넌트 매핑\n */\n\nimport React, { useState } from \"react\";\nimport type { SDUIComponentRegistry } from \"./types\";\nimport { cn } from \"../lib/utils\";\n\n// 기본 컴포넌트들\nimport { Button } from \"../components/Button\";\nimport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from \"../components/Card\";\nimport { Badge } from \"../components/Badge\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"../components/Avatar\";\nimport { Container } from \"../components/Container\";\nimport { Input } from \"../components/Input\";\nimport { Textarea } from \"../components/Textarea\";\nimport { Label } from \"../components/Label\";\nimport { Checkbox, type CheckboxProps } from \"../components/Checkbox\";\nimport { Switch, type SwitchProps } from \"../components/Switch\";\nimport { type InputProps } from \"../components/Input\";\nimport { type TextareaProps } from \"../components/Textarea\";\nimport { Skeleton } from \"../components/Skeleton\";\nimport { Progress } from \"../components/Progress\";\nimport { Alert } from \"../components/Alert\";\nimport { Icon } from \"../components/Icon\";\nimport type { IconName } from \"../lib/icons\";\n\n// Advanced 컴포넌트들\nimport { HeroSection } from \"../components/HeroSection\";\nimport { ScrollProgress } from \"../components/ScrollProgress\";\n\n// Interactive 컴포넌트들\nimport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n} from \"../components/Accordion\";\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from \"../components/Tabs\";\n\n// 레이아웃 프리미티브\nconst Box: React.FC<React.HTMLAttributes<HTMLDivElement> & {\n justify?: \"start\" | \"center\" | \"end\" | \"between\";\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n // 커스텀 스타일 props (DOM에 직접 전달하지 않음)\n backgroundColor?: string;\n padding?: string | number;\n margin?: string | number;\n borderRadius?: string | number;\n border?: string;\n}> = ({\n children,\n justify,\n align,\n className = \"\",\n style,\n // 커스텀 props 분리 (DOM에 전달 X)\n backgroundColor,\n padding,\n margin,\n borderRadius,\n border,\n ...props\n}) => {\n // 커스텀 props를 style 객체로 병합\n const customStyle: React.CSSProperties = {\n ...style,\n ...(backgroundColor && { backgroundColor }),\n ...(padding !== undefined && { padding: typeof padding === 'number' ? `${padding}px` : padding }),\n ...(margin !== undefined && { margin: typeof margin === 'number' ? `${margin}px` : margin }),\n ...(borderRadius !== undefined && { borderRadius: typeof borderRadius === 'number' ? `${borderRadius}px` : borderRadius }),\n ...(border && { border }),\n };\n\n return (\n <div\n className={cn(\n (justify || align) && \"flex\",\n justify && justifyMap[justify],\n align && alignMap[align],\n className\n )}\n style={Object.keys(customStyle).length > 0 ? customStyle : undefined}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n// Spacer - 공백용 void 컴포넌트\nconst Spacer: React.FC<{ size?: number; className?: string }> = ({ size = 16, className = \"\" }) => (\n <div className={className} style={{ width: size, height: size, flexShrink: 0 }} />\n);\n\n// 정렬 매핑\nconst justifyMap = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n};\nconst alignMap = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n};\n\nconst Flex: React.FC<React.HTMLAttributes<HTMLDivElement> & {\n direction?: \"row\" | \"column\";\n gap?: number;\n justify?: \"start\" | \"center\" | \"end\" | \"between\";\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n backgroundColor?: string;\n padding?: string | number;\n}> = ({\n children,\n direction = \"row\",\n gap = 0,\n justify = \"start\",\n align = \"stretch\",\n className = \"\",\n style,\n backgroundColor,\n padding,\n ...props\n}) => {\n const customStyle: React.CSSProperties = {\n gap: `${gap * 4}px`,\n ...style,\n ...(backgroundColor && { backgroundColor }),\n ...(padding !== undefined && { padding: typeof padding === 'number' ? `${padding}px` : padding }),\n };\n\n return (\n <div\n className={`flex ${direction === \"column\" ? \"flex-col\" : \"flex-row\"} ${justifyMap[justify]} ${alignMap[align]} ${className}`}\n style={customStyle}\n {...props}\n >\n {children}\n </div>\n );\n};\n\nconst Grid: React.FC<React.HTMLAttributes<HTMLDivElement> & {\n cols?: number;\n gap?: number;\n backgroundColor?: string;\n padding?: string | number;\n}> = ({\n children,\n cols = 1,\n gap = 4,\n className = \"\",\n style,\n backgroundColor,\n padding,\n ...props\n}) => {\n const customStyle: React.CSSProperties = {\n gridTemplateColumns: `repeat(${cols}, 1fr)`,\n gap: `${gap * 4}px`,\n ...style,\n ...(backgroundColor && { backgroundColor }),\n ...(padding !== undefined && { padding: typeof padding === 'number' ? `${padding}px` : padding }),\n };\n\n return (\n <div\n className={`grid ${className}`}\n style={customStyle}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n// 텍스트 정렬 매핑\nconst textAlignMap = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n};\n\n// 타이포그래피 스타일 props 타입\ninterface TypographyStyleProps {\n fontSize?: string;\n lineHeight?: string;\n fontWeight?: string;\n letterSpacing?: string;\n}\n\n// 타이포그래피 스타일 props를 style 객체로 변환\nfunction getTypographyStyle(props: TypographyStyleProps): React.CSSProperties {\n const style: React.CSSProperties = {};\n if (props.fontSize) style.fontSize = props.fontSize;\n if (props.lineHeight) style.lineHeight = props.lineHeight;\n if (props.fontWeight) style.fontWeight = props.fontWeight;\n if (props.letterSpacing) style.letterSpacing = props.letterSpacing;\n return style;\n}\n\nconst Text: React.FC<React.HTMLAttributes<HTMLParagraphElement> & {\n variant?: \"body\" | \"muted\" | \"lead\";\n align?: \"left\" | \"center\" | \"right\";\n} & TypographyStyleProps> = ({\n children,\n variant = \"body\",\n align = \"center\",\n className = \"\",\n style,\n fontSize,\n lineHeight,\n fontWeight,\n letterSpacing,\n ...props\n}) => {\n const variantClasses = {\n body: \"text-foreground\",\n muted: \"text-muted-foreground text-sm\",\n lead: \"text-xl text-muted-foreground\",\n };\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n\n return (\n <p\n className={`${variantClasses[variant]} ${textAlignMap[align]} ${className}`}\n style={mergedStyle}\n {...props}\n >\n {children}\n </p>\n );\n};\n\n// Heading 컴포넌트들 (정렬 + 타이포그래피 스타일 지원)\ntype HeadingProps = React.HTMLAttributes<HTMLHeadingElement> & {\n align?: \"left\" | \"center\" | \"right\";\n} & TypographyStyleProps;\n\nconst H1: React.FC<HeadingProps> = ({\n children, align = \"center\", className = \"\", style,\n fontSize, lineHeight, fontWeight, letterSpacing,\n ...props\n}) => {\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n return (\n <h1 className={`text-4xl md:text-5xl font-bold ${textAlignMap[align]} ${className}`} style={mergedStyle} {...props}>{children}</h1>\n );\n};\n\nconst H2: React.FC<HeadingProps> = ({\n children, align = \"center\", className = \"\", style,\n fontSize, lineHeight, fontWeight, letterSpacing,\n ...props\n}) => {\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n return (\n <h2 className={`text-3xl md:text-4xl font-bold ${textAlignMap[align]} ${className}`} style={mergedStyle} {...props}>{children}</h2>\n );\n};\n\nconst H3: React.FC<HeadingProps> = ({\n children, align = \"center\", className = \"\", style,\n fontSize, lineHeight, fontWeight, letterSpacing,\n ...props\n}) => {\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n return (\n <h3 className={`text-2xl md:text-3xl font-semibold ${textAlignMap[align]} ${className}`} style={mergedStyle} {...props}>{children}</h3>\n );\n};\n\nconst H4: React.FC<HeadingProps> = ({\n children, align = \"center\", className = \"\", style,\n fontSize, lineHeight, fontWeight, letterSpacing,\n ...props\n}) => {\n const typoStyle = getTypographyStyle({ fontSize, lineHeight, fontWeight, letterSpacing });\n const mergedStyle = Object.keys(typoStyle).length > 0 ? { ...style, ...typoStyle } : style;\n return (\n <h4 className={`text-xl md:text-2xl font-semibold ${textAlignMap[align]} ${className}`} style={mergedStyle} {...props}>{children}</h4>\n );\n};\n\nconst Link: React.FC<React.AnchorHTMLAttributes<HTMLAnchorElement>> = ({\n children,\n href = \"#\",\n className = \"\",\n ...props\n}) => {\n // 절대 경로 처리: http/https로 시작하지 않으면 그대로, 시작하면 외부 링크\n const isExternal = href.startsWith(\"http://\") || href.startsWith(\"https://\");\n\n return (\n <a\n href={href}\n className={`text-primary hover:underline ${className}`}\n {...(isExternal ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {})}\n {...props}\n >\n {children}\n </a>\n );\n};\n\nconst Image: React.FC<React.ImgHTMLAttributes<HTMLImageElement>> = ({ className = \"\", alt = \"\", ...props }) => (\n <img className={`max-w-full h-auto ${className}`} alt={alt} {...props} />\n);\n\n// SDUI용 Icon 래퍼 (name을 string으로 받음)\nconst SDUIIcon: React.FC<{ name?: string; size?: number; className?: string }> = ({\n name = \"star\",\n size = 24,\n className = \"\",\n}) => <Icon name={name as IconName} size={size} className={className} />;\n\nconst Section: React.FC<React.HTMLAttributes<HTMLElement>> = ({\n children,\n className = \"\",\n ...props\n}) => (\n <section className={`py-10 ${className}`} {...props}>\n {children}\n </section>\n);\n\nconst Divider: React.FC<React.HTMLAttributes<HTMLHRElement>> = ({ className = \"\", ...props }) => (\n <hr className={`border-border ${className}`} {...props} />\n);\n\n// Header - 네비게이션 헤더 (GNB)\nconst Header: React.FC<React.HTMLAttributes<HTMLElement> & {\n sticky?: boolean;\n transparent?: boolean;\n blur?: boolean;\n overlay?: boolean;\n}> = ({\n children,\n sticky = true,\n transparent = false,\n blur = true,\n overlay = false,\n className = \"\",\n ...props\n}) => (\n <header\n className={cn(\n \"w-full px-4 py-3 z-50\",\n overlay ? \"absolute top-0 left-0 right-0\" : sticky && \"sticky top-0\",\n transparent ? \"bg-transparent\" : \"bg-background/80\",\n blur && !transparent && \"backdrop-blur-md\",\n !transparent && \"border-b border-border\",\n className\n )}\n {...props}\n >\n <div className=\"max-w-7xl mx-auto\">\n {children}\n </div>\n </header>\n);\n\n/**\n * SDUI용 Uncontrolled 래퍼 컴포넌트들\n * 프리뷰에서 인터랙션이 동작하도록 자체 상태 관리\n */\n\n// Uncontrolled Checkbox - 클릭하면 상태 토글\nconst SDUICheckbox: React.FC<CheckboxProps> = ({ defaultChecked = false, onChange, ...props }) => {\n const [checked, setChecked] = useState(defaultChecked);\n return (\n <Checkbox\n {...props}\n checked={checked}\n onChange={(e) => {\n setChecked(e.target.checked);\n onChange?.(e);\n }}\n />\n );\n};\n\n// Uncontrolled Switch - 클릭하면 상태 토글\nconst SDUISwitch: React.FC<SwitchProps> = ({ defaultChecked = false, onChange, ...props }) => {\n const [checked, setChecked] = useState(defaultChecked);\n return (\n <Switch\n {...props}\n checked={checked}\n onChange={(e) => {\n setChecked(e.target.checked);\n onChange?.(e);\n }}\n />\n );\n};\n\n// Uncontrolled Input - 자체 상태 관리\nconst SDUIInput: React.FC<InputProps> = ({ defaultValue = \"\", onChange, ...props }) => {\n const [value, setValue] = useState(defaultValue);\n return (\n <Input\n {...props}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n onChange?.(e);\n }}\n />\n );\n};\n\n// Uncontrolled Textarea - 자체 상태 관리 + resize 지원\nconst SDUITextarea: React.FC<TextareaProps> = ({ defaultValue = \"\", onChange, resize = \"vertical\", ...props }) => {\n const [value, setValue] = useState(defaultValue);\n return (\n <Textarea\n {...props}\n resize={resize}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n onChange?.(e);\n }}\n />\n );\n};\n\n/**\n * SDUI용 간단한 Accordion - 데이터 기반\n * items 배열로 아코디언 생성\n */\ninterface SimpleAccordionItem {\n title: string;\n content: string;\n value?: string;\n}\n\nconst SDUIAccordion: React.FC<{\n items?: SimpleAccordionItem[];\n type?: \"single\" | \"multiple\";\n collapsible?: boolean;\n defaultValue?: string;\n className?: string;\n}> = ({\n items = [],\n type = \"single\",\n collapsible = true,\n defaultValue,\n className = \"\",\n}) => {\n return (\n <Accordion\n type={type}\n collapsible={collapsible}\n defaultValue={defaultValue}\n className={className}\n >\n {items.map((item, index) => {\n const value = item.value || `item-${index}`;\n return (\n <AccordionItem key={value} value={value}>\n <AccordionTrigger>{item.title}</AccordionTrigger>\n <AccordionContent>{item.content}</AccordionContent>\n </AccordionItem>\n );\n })}\n </Accordion>\n );\n};\n\n/**\n * SDUI용 간단한 Tabs - 데이터 기반\n * tabs 배열로 탭 생성\n */\ninterface SimpleTabItem {\n label: string;\n content: string;\n value?: string;\n}\n\nconst SDUITabs: React.FC<{\n tabs?: SimpleTabItem[];\n defaultValue?: string;\n variant?: \"default\" | \"pills\" | \"underline\" | \"cards\";\n className?: string;\n}> = ({\n tabs = [],\n defaultValue,\n variant = \"default\",\n className = \"\",\n}) => {\n const firstValue = tabs[0]?.value || \"tab-0\";\n\n return (\n <Tabs\n defaultValue={defaultValue || firstValue}\n variant={variant}\n className={className}\n >\n <TabsList>\n {tabs.map((tab, index) => {\n const value = tab.value || `tab-${index}`;\n return (\n <TabsTrigger key={value} value={value}>\n {tab.label}\n </TabsTrigger>\n );\n })}\n </TabsList>\n {tabs.map((tab, index) => {\n const value = tab.value || `tab-${index}`;\n return (\n <TabsContent key={value} value={value}>\n {tab.content}\n </TabsContent>\n );\n })}\n </Tabs>\n );\n};\n\n/**\n * 기본 컴포넌트 레지스트리\n */\nexport const defaultRegistry: SDUIComponentRegistry = {\n // 레이아웃\n Box,\n Spacer,\n Flex,\n Grid,\n Section,\n Container,\n Divider,\n\n // 타이포그래피\n Text,\n H1,\n H2,\n H3,\n H4,\n Link,\n\n // 미디어\n Image,\n Icon: SDUIIcon,\n\n // 기본 UI\n Button,\n Badge,\n Avatar,\n AvatarImage,\n AvatarFallback,\n Input: SDUIInput,\n Textarea: SDUITextarea,\n Label,\n Checkbox: SDUICheckbox,\n Switch: SDUISwitch,\n Skeleton,\n Progress,\n\n // 카드\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n\n // 피드백\n Alert,\n\n // Advanced (Pro)\n Header,\n HeroSection,\n ScrollProgress,\n\n // Interactive (Pro)\n Accordion: SDUIAccordion,\n Tabs: SDUITabs,\n};\n\n/**\n * 레지스트리 확장 헬퍼\n */\nexport function extendRegistry(\n customComponents: SDUIComponentRegistry\n): SDUIComponentRegistry {\n return {\n ...defaultRegistry,\n ...customComponents,\n };\n}\n\n/**\n * 컴포넌트 존재 여부 확인\n */\nexport function hasComponent(registry: SDUIComponentRegistry, type: string): boolean {\n return type in registry;\n}\n","\"use client\";\n\n/**\n * SDUI Renderer\n *\n * JSON 스키마를 받아서 실제 React 컴포넌트로 렌더링\n */\n\nimport React, { createContext, useContext, useState, useCallback, useMemo } from \"react\";\nimport type {\n SDUINode,\n SDUIPageSchema,\n SDUIRendererProps,\n SDUIContext,\n SDUIAction,\n SDUICondition,\n SDUIComponentRegistry,\n} from \"./types\";\nimport { defaultRegistry } from \"./registry\";\n\n// SDUI Context\nconst SDUIContextInternal = createContext<SDUIContext | null>(null);\n\n/**\n * SDUI Context Hook\n */\nexport function useSDUI(): SDUIContext {\n const context = useContext(SDUIContextInternal);\n if (!context) {\n throw new Error(\"useSDUI must be used within SDUIRenderer\");\n }\n return context;\n}\n\n/**\n * 데이터 경로로 값 가져오기\n * 예: \"user.profile.name\" → data.user.profile.name\n */\nfunction getByPath(obj: Record<string, unknown>, path: string): unknown {\n return path.split(\".\").reduce((acc: unknown, key) => {\n if (acc && typeof acc === \"object\" && key in acc) {\n return (acc as Record<string, unknown>)[key];\n }\n return undefined;\n }, obj);\n}\n\n/**\n * 데이터 경로로 값 설정하기\n */\nfunction setByPath(\n obj: Record<string, unknown>,\n path: string,\n value: unknown\n): Record<string, unknown> {\n const keys = path.split(\".\");\n const result = { ...obj };\n let current: Record<string, unknown> = result;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n current[key] = { ...(current[key] as Record<string, unknown> || {}) };\n current = current[key] as Record<string, unknown>;\n }\n\n current[keys[keys.length - 1]] = value;\n return result;\n}\n\n/**\n * 조건 평가\n */\nfunction evaluateCondition(\n condition: SDUICondition,\n data: Record<string, unknown>\n): boolean {\n const value = getByPath(data, condition.path);\n\n switch (condition.operator) {\n case \"eq\":\n return value === condition.value;\n case \"neq\":\n return value !== condition.value;\n case \"gt\":\n return typeof value === \"number\" && value > (condition.value as number);\n case \"lt\":\n return typeof value === \"number\" && value < (condition.value as number);\n case \"gte\":\n return typeof value === \"number\" && value >= (condition.value as number);\n case \"lte\":\n return typeof value === \"number\" && value <= (condition.value as number);\n case \"exists\":\n return value !== undefined && value !== null;\n case \"notExists\":\n return value === undefined || value === null;\n default:\n return true;\n }\n}\n\n/**\n * Props에서 데이터 바인딩 처리\n * {{ path }} 형식을 실제 데이터로 치환\n */\nfunction resolveProps(\n props: Record<string, unknown>,\n data: Record<string, unknown>\n): Record<string, unknown> {\n const resolved: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(props)) {\n if (typeof value === \"string\") {\n // {{ path }} 패턴 처리\n const bindingMatch = value.match(/^\\{\\{\\s*(.+?)\\s*\\}\\}$/);\n if (bindingMatch) {\n resolved[key] = getByPath(data, bindingMatch[1]);\n } else {\n // 문자열 내 부분 바인딩: \"Hello, {{ user.name }}!\"\n resolved[key] = value.replace(/\\{\\{\\s*(.+?)\\s*\\}\\}/g, (_, path) => {\n const val = getByPath(data, path);\n return val !== undefined ? String(val) : \"\";\n });\n }\n } else if (Array.isArray(value)) {\n resolved[key] = value.map((item) =>\n typeof item === \"object\" && item !== null\n ? resolveProps(item as Record<string, unknown>, data)\n : item\n );\n } else if (typeof value === \"object\" && value !== null) {\n resolved[key] = resolveProps(value as Record<string, unknown>, data);\n } else {\n resolved[key] = value;\n }\n }\n\n return resolved;\n}\n\n/**\n * 단일 노드 렌더러\n */\ninterface NodeRendererProps {\n node: SDUINode;\n registry: SDUIComponentRegistry;\n}\n\nfunction NodeRenderer({ node, registry }: NodeRendererProps) {\n const { data, handleAction } = useSDUI();\n\n // 조건부 렌더링 체크\n if (node.when && !evaluateCondition(node.when, data)) {\n return null;\n }\n\n // 컴포넌트 찾기\n const Component = registry[node.type];\n if (!Component) {\n console.warn(`[SDUI] Unknown component type: ${node.type}`);\n return (\n <div className=\"p-4 border border-destructive/50 bg-destructive/10 rounded text-sm text-destructive\">\n Unknown component: {node.type}\n </div>\n );\n }\n\n // Props 처리\n const resolvedProps = node.props ? resolveProps(node.props, data) : {};\n\n // 이벤트 핸들러 처리\n const eventProps: Record<string, unknown> = {};\n if (node.on) {\n if (node.on.click) {\n eventProps.onClick = () => handleAction(node.on!.click!);\n }\n if (node.on.submit) {\n eventProps.onSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n handleAction(node.on!.submit!);\n };\n }\n }\n\n // Children 처리\n let children: React.ReactNode = null;\n if (node.children) {\n if (typeof node.children === \"string\") {\n // 문자열 바인딩 처리\n children = node.children.replace(/\\{\\{\\s*(.+?)\\s*\\}\\}/g, (_, path) => {\n const val = getByPath(data, path);\n return val !== undefined ? String(val) : \"\";\n });\n } else if (Array.isArray(node.children)) {\n children = node.children.map((child, index) => (\n <NodeRenderer\n key={child.key || `child-${index}`}\n node={child}\n registry={registry}\n />\n ));\n }\n }\n\n // void 엘리먼트는 children을 받지 않음\n const voidElements = ['Divider', 'Input', 'Textarea', 'Checkbox', 'Switch', 'Progress', 'Skeleton', 'Image', 'ScrollProgress'];\n const isVoidElement = voidElements.includes(node.type);\n\n if (isVoidElement || children === null) {\n return <Component {...resolvedProps} {...eventProps} />;\n }\n\n return (\n <Component {...resolvedProps} {...eventProps}>\n {children}\n </Component>\n );\n}\n\n/**\n * SDUI Renderer 메인 컴포넌트\n */\nexport function SDUIRenderer({\n schema,\n components,\n data: initialData = {},\n onAction,\n onNavigate,\n}: SDUIRendererProps) {\n // 페이지 스키마인지 노드인지 확인\n const isPageSchema = \"root\" in schema;\n const rootNode = isPageSchema ? (schema as SDUIPageSchema).root : (schema as SDUINode);\n const schemaData = isPageSchema ? (schema as SDUIPageSchema).data : {};\n\n // 데이터 상태\n const [data, setDataState] = useState<Record<string, unknown>>({\n ...schemaData,\n ...initialData,\n });\n\n // 레지스트리 병합\n const registry = useMemo(\n () => ({ ...defaultRegistry, ...components }),\n [components]\n );\n\n // 데이터 업데이트\n const setData = useCallback((path: string, value: unknown) => {\n setDataState((prev) => setByPath(prev, path, value));\n }, []);\n\n // 네비게이션\n const navigate = useCallback(\n (path: string) => {\n if (onNavigate) {\n onNavigate(path);\n } else if (typeof window !== \"undefined\") {\n window.location.href = path;\n }\n },\n [onNavigate]\n );\n\n // 액션 핸들러\n const handleAction = useCallback(\n (action: SDUIAction) => {\n switch (action.type) {\n case \"navigate\":\n navigate(action.payload?.path as string);\n break;\n case \"setState\":\n if (action.payload?.path && action.payload?.value !== undefined) {\n setData(action.payload.path as string, action.payload.value);\n }\n break;\n case \"api\":\n // API 호출은 외부에서 처리\n onAction?.(action);\n break;\n case \"custom\":\n onAction?.(action);\n break;\n default:\n onAction?.(action);\n }\n },\n [navigate, setData, onAction]\n );\n\n // Context 값\n const contextValue: SDUIContext = useMemo(\n () => ({\n data,\n setData,\n handleAction,\n navigate,\n }),\n [data, setData, handleAction, navigate]\n );\n\n return (\n <SDUIContextInternal.Provider value={contextValue}>\n <NodeRenderer node={rootNode} registry={registry} />\n </SDUIContextInternal.Provider>\n );\n}\n\n/**\n * JSON 문자열에서 렌더링 (편의용)\n */\nexport function SDUIFromJSON({\n json,\n ...props\n}: Omit<SDUIRendererProps, \"schema\"> & { json: string }) {\n try {\n const schema = JSON.parse(json);\n return <SDUIRenderer schema={schema} {...props} />;\n } catch (error) {\n return (\n <div className=\"p-4 border border-destructive bg-destructive/10 rounded\">\n <p className=\"font-semibold text-destructive\">SDUI Parse Error</p>\n <pre className=\"text-sm mt-2 text-destructive/80\">\n {(error as Error).message}\n </pre>\n </div>\n );\n }\n}\n"]}
@@ -0,0 +1,85 @@
1
+ import React from 'react';
2
+
3
+ type Theme = "light" | "dark" | "system";
4
+ /**
5
+ * ThemeProvider 컴포넌트의 props / ThemeProvider component props
6
+ * @typedef {Object} ThemeProviderProps
7
+ * @property {React.ReactNode} children - 자식 컴포넌트 / Child components
8
+ * @property {"light" | "dark" | "system"} [defaultTheme="light"] - 기본 테마 / Default theme
9
+ * @property {string} [storageKey="hua-ui-theme"] - localStorage 키 / localStorage key
10
+ * @property {boolean} [enableSystem=true] - 시스템 테마 감지 활성화 / Enable system theme detection
11
+ * @property {boolean} [enableTransition=true] - 테마 전환 애니메이션 활성화 / Enable theme transition animation
12
+ */
13
+ interface ThemeProviderProps {
14
+ children: React.ReactNode;
15
+ defaultTheme?: Theme;
16
+ storageKey?: string;
17
+ enableSystem?: boolean;
18
+ enableTransition?: boolean;
19
+ }
20
+ /**
21
+ * ThemeProvider의 상태 타입 / ThemeProvider state type
22
+ * @typedef {Object} ThemeProviderState
23
+ * @property {"light" | "dark" | "system"} theme - 현재 테마 / Current theme
24
+ * @property {(theme: "light" | "dark" | "system") => void} setTheme - 테마 설정 함수 / Theme setter function
25
+ * @property {"light" | "dark"} resolvedTheme - 실제 적용된 테마 (system일 경우 시스템 테마) / Actually applied theme (system theme when system is selected)
26
+ * @property {() => void} toggleTheme - 테마 토글 함수 / Theme toggle function
27
+ */
28
+ interface ThemeProviderState {
29
+ theme: Theme;
30
+ setTheme: (theme: Theme) => void;
31
+ resolvedTheme: "light" | "dark";
32
+ toggleTheme: () => void;
33
+ }
34
+ /**
35
+ * ThemeProvider 컴포넌트 / ThemeProvider component
36
+ *
37
+ * 테마 관리를 위한 Context Provider 컴포넌트입니다.
38
+ * localStorage에 테마를 저장하고, 시스템 테마를 감지할 수 있습니다.
39
+ * useTheme 훅을 통해 테마 상태에 접근할 수 있습니다.
40
+ *
41
+ * Context Provider component for theme management.
42
+ * Saves theme to localStorage and can detect system theme.
43
+ * Access theme state through useTheme hook.
44
+ *
45
+ * @component
46
+ * @example
47
+ * // 기본 사용 / Basic usage
48
+ * <ThemeProvider>
49
+ * <App />
50
+ * </ThemeProvider>
51
+ *
52
+ * @example
53
+ * // 커스텀 설정 / Custom settings
54
+ * <ThemeProvider
55
+ * defaultTheme="dark"
56
+ * storageKey="my-app-theme"
57
+ * enableSystem={true}
58
+ * enableTransition={true}
59
+ * >
60
+ * <App />
61
+ * </ThemeProvider>
62
+ *
63
+ * @param {ThemeProviderProps} props - ThemeProvider 컴포넌트의 props / ThemeProvider component props
64
+ * @returns {JSX.Element} ThemeProvider 컴포넌트 / ThemeProvider component
65
+ */
66
+ declare function ThemeProvider({ children, defaultTheme, // system에서 light로 변경
67
+ storageKey, enableSystem, enableTransition, ...props }: ThemeProviderProps): React.ReactElement;
68
+ /**
69
+ * useTheme 훅 / useTheme hook
70
+ *
71
+ * ThemeProvider의 테마 상태에 접근하는 훅입니다.
72
+ * ThemeProvider 내부에서만 사용할 수 있습니다.
73
+ *
74
+ * Hook to access ThemeProvider's theme state.
75
+ * Can only be used inside ThemeProvider.
76
+ *
77
+ * @example
78
+ * const { theme, setTheme, resolvedTheme, toggleTheme } = useTheme()
79
+ *
80
+ * @returns {ThemeProviderState} 테마 상태와 함수들 / Theme state and functions
81
+ * @throws {Error} ThemeProvider 외부에서 사용 시 에러 발생 / Error when used outside ThemeProvider
82
+ */
83
+ declare const useTheme: () => ThemeProviderState;
84
+
85
+ export { ThemeProvider, type ThemeProviderProps, type ThemeProviderState, useTheme };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @hua-labs/ui/theme — Lightweight theme subpath
3
+ *
4
+ * ThemeProvider와 useTheme만 포함합니다.
5
+ * Phosphor Icons 등 무거운 의존성 없이 테마 기능만 필요한 경우 사용하세요.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { ThemeProvider, useTheme } from '@hua-labs/ui/theme'
10
+ * ```
11
+ */
12
+ export { ThemeProvider, useTheme } from './components/ThemeProvider';
13
+ export type { ThemeProviderProps, ThemeProviderState } from './components/ThemeProvider';
14
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACpE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA"}
package/dist/theme.mjs ADDED
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ export{a as ThemeProvider,b as useTheme}from'./chunk-A5YOVVM5.mjs';import'./chunk-EAZEI74V.mjs';//# sourceMappingURL=theme.mjs.map
3
+ //# sourceMappingURL=theme.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"theme.mjs"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@hua-labs/ui",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "HUA Labs - Modern React UI Component Library - Beautiful, accessible, and customizable components for React applications",
5
- "main": "./dist/index.js",
5
+ "main": "./dist/index.mjs",
6
6
  "module": "./dist/index.mjs",
7
7
  "types": "./dist/index.d.ts",
8
8
  "exports": {
@@ -11,6 +11,11 @@
11
11
  "import": "./dist/index.mjs",
12
12
  "default": "./dist/index.mjs"
13
13
  },
14
+ "./theme": {
15
+ "types": "./dist/theme.d.ts",
16
+ "import": "./dist/theme.mjs",
17
+ "default": "./dist/theme.mjs"
18
+ },
14
19
  "./advanced": {
15
20
  "types": "./dist/advanced.d.ts",
16
21
  "import": "./dist/advanced.mjs",
@@ -66,11 +71,17 @@
66
71
  "import": "./dist/sdui.mjs",
67
72
  "default": "./dist/sdui.mjs"
68
73
  },
74
+ "./landing": {
75
+ "types": "./dist/landing.d.ts",
76
+ "import": "./dist/landing.mjs",
77
+ "default": "./dist/landing.mjs"
78
+ },
69
79
  "./styles/base.css": "./src/styles/base.css",
70
80
  "./styles/toast.css": "./src/styles/toast.css",
71
81
  "./styles/codeblock.css": "./src/styles/codeblock.css",
72
82
  "./styles/recommended-theme.css": "./src/styles/recommended-theme.css",
73
- "./styles/component-vars.css": "./src/styles/component-vars.css",
83
+ "./styles/utilities.css": "./src/styles/utilities.css",
84
+ "./styles/landing.css": "./src/styles/landing.css",
74
85
  "./icons": {
75
86
  "types": "./src/components/icons/index.ts",
76
87
  "import": "./src/components/icons/index.ts",
@@ -99,40 +110,41 @@
99
110
  "src/components/icons-bold"
100
111
  ],
101
112
  "dependencies": {
113
+ "@floating-ui/react": "^0.27.18",
102
114
  "@phosphor-icons/react": "^2.1.10",
103
115
  "class-variance-authority": "^0.7.1",
104
- "clsx": "^2.0.0",
116
+ "clsx": "^2.1.1",
105
117
  "sugar-high": "^0.9.5",
106
- "tailwind-merge": "^2.0.0"
118
+ "tailwind-merge": "^3.5.0"
107
119
  },
108
120
  "devDependencies": {
109
- "@eslint/js": "^9.39.2",
121
+ "@eslint/js": "^10.0.1",
110
122
  "@testing-library/jest-dom": "^6.9.1",
111
123
  "@testing-library/react": "^16.3.2",
112
124
  "@testing-library/user-event": "^14.6.1",
113
- "@types/node": "^25.2.0",
114
- "@types/react": "^19.2.10",
125
+ "@types/node": "^25.3.0",
126
+ "@types/react": "^19.2.14",
115
127
  "@types/react-dom": "^19.2.3",
116
- "@vitejs/plugin-react": "^5.1.2",
117
- "eslint": "^10.0.0",
128
+ "@vitejs/plugin-react": "^5.1.4",
129
+ "eslint": "^10.0.1",
118
130
  "eslint-plugin-react-hooks": "^5.2.0",
119
- "globals": "^16.3.0",
120
- "jsdom": "^27.4.0",
121
- "lucide-react": "^0.563.0",
131
+ "globals": "^17.3.0",
132
+ "jsdom": "^28.1.0",
133
+ "lucide-react": "^0.575.0",
122
134
  "react": "^19.2.4",
123
135
  "react-dom": "^19.2.4",
124
- "rollup-plugin-visualizer": "^6.0.5",
136
+ "rollup-plugin-visualizer": "^7.0.0",
125
137
  "tsup": "^8.5.1",
126
138
  "tsx": "^4.21.0",
127
139
  "typescript": "^5.9.3",
128
- "typescript-eslint": "^8.54.0",
140
+ "typescript-eslint": "^8.56.0",
129
141
  "vitest": "^4.0.18"
130
142
  },
131
143
  "peerDependencies": {
132
144
  "@dnd-kit/core": "^6.3.1",
133
145
  "@dnd-kit/sortable": "^10.0.0",
134
146
  "@dnd-kit/utilities": "^3.2.2",
135
- "lucide-react": ">=0.400.0",
147
+ "@hua-labs/motion-core": ">=2.2.3",
136
148
  "react": ">=19.0.0",
137
149
  "react-dom": ">=19.0.0"
138
150
  },
@@ -146,7 +158,7 @@
146
158
  "@dnd-kit/utilities": {
147
159
  "optional": true
148
160
  },
149
- "lucide-react": {
161
+ "@hua-labs/motion-core": {
150
162
  "optional": true
151
163
  }
152
164
  },
@@ -177,9 +189,7 @@
177
189
  "sideEffects": [
178
190
  "./src/styles/*.css",
179
191
  "./dist/iconsax.mjs",
180
- "./dist/iconsax.js",
181
- "./dist/iconsax-extended.mjs",
182
- "./dist/iconsax-extended.js"
192
+ "./dist/iconsax-extended.mjs"
183
193
  ],
184
194
  "engines": {
185
195
  "node": ">=20.0.0"