@hua-labs/ui 2.1.1 → 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 (193) hide show
  1. package/README.md +1 -1
  2. package/dist/{ComponentLayout-DrZpz0yv.d.mts → ComponentLayout-BhM4VSoq.d.mts} +1 -1
  3. package/dist/advanced-dashboard.d.mts +1 -1
  4. package/dist/advanced-dashboard.mjs +3 -3
  5. package/dist/advanced-dashboard.mjs.map +1 -1
  6. package/dist/advanced-emotion.mjs +1 -1
  7. package/dist/advanced-motion.d.mts +9 -6
  8. package/dist/advanced-motion.mjs +1 -1
  9. package/dist/advanced.d.mts +3 -3
  10. package/dist/advanced.mjs +2 -2
  11. package/dist/advanced.mjs.map +1 -1
  12. package/dist/chunk-5DPW7SVD.mjs +4 -0
  13. package/dist/{chunk-AOSXB5JJ.mjs.map → chunk-5DPW7SVD.mjs.map} +1 -1
  14. package/dist/chunk-5L5HIPKA.mjs +3 -0
  15. package/dist/{chunk-3GAUTZXQ.mjs.map → chunk-5L5HIPKA.mjs.map} +1 -1
  16. package/dist/chunk-A5YOVVM5.mjs +3 -0
  17. package/dist/chunk-A5YOVVM5.mjs.map +1 -0
  18. package/dist/chunk-CNW22G24.mjs +13 -0
  19. package/dist/chunk-CNW22G24.mjs.map +1 -0
  20. package/dist/chunk-CW66UBQG.mjs +3 -0
  21. package/dist/{chunk-6HVJFEDA.mjs.map → chunk-CW66UBQG.mjs.map} +1 -1
  22. package/dist/chunk-EAZEI74V.mjs +3 -0
  23. package/dist/chunk-EAZEI74V.mjs.map +1 -0
  24. package/dist/chunk-EPY3432E.mjs +3 -0
  25. package/dist/{chunk-MDLCJASB.mjs.map → chunk-EPY3432E.mjs.map} +1 -1
  26. package/dist/chunk-F2M4YDDQ.mjs +3 -0
  27. package/dist/{chunk-OZNST3EZ.mjs.map → chunk-F2M4YDDQ.mjs.map} +1 -1
  28. package/dist/chunk-FHMFDCX2.mjs +3 -0
  29. package/dist/{chunk-4NJE7D6X.mjs.map → chunk-FHMFDCX2.mjs.map} +1 -1
  30. package/dist/chunk-HBIUCLFL.mjs +3 -0
  31. package/dist/chunk-HBIUCLFL.mjs.map +1 -0
  32. package/dist/chunk-HEBXAFRY.mjs +3 -0
  33. package/dist/{chunk-KJZGOL2Z.mjs.map → chunk-HEBXAFRY.mjs.map} +1 -1
  34. package/dist/chunk-IG47LMOD.mjs +3 -0
  35. package/dist/{chunk-42RGFEL2.mjs.map → chunk-IG47LMOD.mjs.map} +1 -1
  36. package/dist/chunk-J47ZEXEL.mjs +3 -0
  37. package/dist/{chunk-3CCF7U3P.mjs.map → chunk-J47ZEXEL.mjs.map} +1 -1
  38. package/dist/chunk-K2FOFIST.mjs +3 -0
  39. package/dist/{chunk-IJSYSNM5.mjs.map → chunk-K2FOFIST.mjs.map} +1 -1
  40. package/dist/chunk-LL6QPRD7.mjs +3 -0
  41. package/dist/{chunk-TZ4YSHMC.mjs.map → chunk-LL6QPRD7.mjs.map} +1 -1
  42. package/dist/chunk-NMJLOK6M.mjs +3 -0
  43. package/dist/{chunk-KYRIUUQP.mjs.map → chunk-NMJLOK6M.mjs.map} +1 -1
  44. package/dist/chunk-O24K56OS.mjs +3 -0
  45. package/dist/chunk-O24K56OS.mjs.map +1 -0
  46. package/dist/chunk-OIWG3IJ7.mjs +3 -0
  47. package/dist/chunk-OIWG3IJ7.mjs.map +1 -0
  48. package/dist/chunk-OLLU7ZFH.mjs +3 -0
  49. package/dist/{chunk-XL4KTJ4L.mjs.map → chunk-OLLU7ZFH.mjs.map} +1 -1
  50. package/dist/chunk-Q76JW7X5.mjs +73 -0
  51. package/dist/chunk-Q76JW7X5.mjs.map +1 -0
  52. package/dist/chunk-QEMPERUK.mjs +3 -0
  53. package/dist/chunk-QEMPERUK.mjs.map +1 -0
  54. package/dist/chunk-QRM66RQG.mjs +3 -0
  55. package/dist/{chunk-N56BUOCD.mjs.map → chunk-QRM66RQG.mjs.map} +1 -1
  56. package/dist/chunk-QRRP7TGF.mjs +13 -0
  57. package/dist/{chunk-RS6RKW5U.mjs.map → chunk-QRRP7TGF.mjs.map} +1 -1
  58. package/dist/chunk-SD6XGDAC.mjs +3 -0
  59. package/dist/chunk-SD6XGDAC.mjs.map +1 -0
  60. package/dist/chunk-SDFVGFXT.mjs +3 -0
  61. package/dist/{chunk-CVWWS25A.mjs.map → chunk-SDFVGFXT.mjs.map} +1 -1
  62. package/dist/chunk-SMLDNOV3.mjs +8 -0
  63. package/dist/{chunk-ZXZIHU7J.mjs.map → chunk-SMLDNOV3.mjs.map} +1 -1
  64. package/dist/{chunk-FX57OSYG.mjs → chunk-TAP6MYDW.mjs} +2 -2
  65. package/dist/{chunk-FX57OSYG.mjs.map → chunk-TAP6MYDW.mjs.map} +1 -1
  66. package/dist/{chunk-WP7VFE77.mjs → chunk-TBZ645BI.mjs} +2 -2
  67. package/dist/{chunk-WP7VFE77.mjs.map → chunk-TBZ645BI.mjs.map} +1 -1
  68. package/dist/{chunk-TXBZZJNR.mjs → chunk-V2DNYJR6.mjs} +2 -2
  69. package/dist/{chunk-TXBZZJNR.mjs.map → chunk-V2DNYJR6.mjs.map} +1 -1
  70. package/dist/{chunk-Z74YUUVT.mjs → chunk-VBABZXL7.mjs} +2 -2
  71. package/dist/{chunk-Z74YUUVT.mjs.map → chunk-VBABZXL7.mjs.map} +1 -1
  72. package/dist/chunk-WYBSHTGY.mjs +3 -0
  73. package/dist/{chunk-DYNBM24D.mjs.map → chunk-WYBSHTGY.mjs.map} +1 -1
  74. package/dist/chunk-ZQUMJQYV.mjs +3 -0
  75. package/dist/chunk-ZQUMJQYV.mjs.map +1 -0
  76. package/dist/chunk-ZY23NOT4.mjs +3 -0
  77. package/dist/chunk-ZY23NOT4.mjs.map +1 -0
  78. package/dist/components/Action.d.ts.map +1 -1
  79. package/dist/components/Badge.d.ts +1 -1
  80. package/dist/components/Button.d.ts.map +1 -1
  81. package/dist/components/DatePicker.d.ts.map +1 -1
  82. package/dist/components/Dropdown.d.ts +0 -50
  83. package/dist/components/Dropdown.d.ts.map +1 -1
  84. package/dist/components/Icon/Icon.d.ts.map +1 -1
  85. package/dist/components/Modal.d.ts.map +1 -1
  86. package/dist/components/Popover.d.ts.map +1 -1
  87. package/dist/components/Progress.d.ts +2 -2
  88. package/dist/components/advanced/AnimatedGradient.d.ts.map +1 -1
  89. package/dist/components/advanced/Carousel.d.ts.map +1 -1
  90. package/dist/components/advanced/ImageReveal.d.ts.map +1 -1
  91. package/dist/components/advanced/Parallax.d.ts +9 -6
  92. package/dist/components/advanced/Parallax.d.ts.map +1 -1
  93. package/dist/components/advanced/TextReveal.d.ts.map +1 -1
  94. package/dist/data.mjs +2 -2
  95. package/dist/data.mjs.map +1 -1
  96. package/dist/feedback.mjs +1 -1
  97. package/dist/form.mjs +4 -4
  98. package/dist/form.mjs.map +1 -1
  99. package/dist/{icons-DmhQEH_E.d.mts → icons-DcOBy9Hf.d.mts} +4 -0
  100. package/dist/iconsax-extended.mjs +2 -2
  101. package/dist/iconsax-extended.mjs.map +1 -1
  102. package/dist/index.d.mts +6 -87
  103. package/dist/index.mjs +14 -14
  104. package/dist/index.mjs.map +1 -1
  105. package/dist/interactive.mjs +1 -1
  106. package/dist/interactive.mjs.map +1 -1
  107. package/dist/landing.mjs +7 -7
  108. package/dist/landing.mjs.map +1 -1
  109. package/dist/lib/icon-providers.d.ts +9 -25
  110. package/dist/lib/icon-providers.d.ts.map +1 -1
  111. package/dist/lib/icons.d.ts +4 -0
  112. package/dist/lib/icons.d.ts.map +1 -1
  113. package/dist/lib/utils.d.ts.map +1 -1
  114. package/dist/navigation.d.mts +1 -1
  115. package/dist/navigation.mjs +1 -1
  116. package/dist/navigation.mjs.map +1 -1
  117. package/dist/overlay.d.mts +0 -50
  118. package/dist/overlay.mjs +1 -1
  119. package/dist/overlay.mjs.map +1 -1
  120. package/dist/sdui.mjs +1 -1
  121. package/dist/sdui.mjs.map +1 -1
  122. package/dist/theme.d.mts +85 -0
  123. package/dist/theme.d.ts +14 -0
  124. package/dist/theme.d.ts.map +1 -0
  125. package/dist/theme.mjs +3 -0
  126. package/dist/theme.mjs.map +1 -0
  127. package/package.json +18 -14
  128. package/dist/advanced-dashboard.js +0 -39
  129. package/dist/advanced-dashboard.js.map +0 -1
  130. package/dist/advanced-emotion.js +0 -2
  131. package/dist/advanced-emotion.js.map +0 -1
  132. package/dist/advanced-motion.js +0 -82
  133. package/dist/advanced-motion.js.map +0 -1
  134. package/dist/advanced.js +0 -112
  135. package/dist/advanced.js.map +0 -1
  136. package/dist/chunk-3CCF7U3P.mjs +0 -3
  137. package/dist/chunk-3GAUTZXQ.mjs +0 -3
  138. package/dist/chunk-42RGFEL2.mjs +0 -3
  139. package/dist/chunk-4NJE7D6X.mjs +0 -3
  140. package/dist/chunk-6HVJFEDA.mjs +0 -3
  141. package/dist/chunk-7OYT3QSY.mjs +0 -3
  142. package/dist/chunk-7OYT3QSY.mjs.map +0 -1
  143. package/dist/chunk-ANYZ56VB.mjs +0 -3
  144. package/dist/chunk-ANYZ56VB.mjs.map +0 -1
  145. package/dist/chunk-AOSXB5JJ.mjs +0 -4
  146. package/dist/chunk-B544MRF7.mjs +0 -3
  147. package/dist/chunk-B544MRF7.mjs.map +0 -1
  148. package/dist/chunk-CVWWS25A.mjs +0 -3
  149. package/dist/chunk-DYNBM24D.mjs +0 -3
  150. package/dist/chunk-IJSYSNM5.mjs +0 -3
  151. package/dist/chunk-KJZGOL2Z.mjs +0 -3
  152. package/dist/chunk-KYRIUUQP.mjs +0 -3
  153. package/dist/chunk-LSA7DU3N.mjs +0 -73
  154. package/dist/chunk-LSA7DU3N.mjs.map +0 -1
  155. package/dist/chunk-MDLCJASB.mjs +0 -3
  156. package/dist/chunk-N56BUOCD.mjs +0 -3
  157. package/dist/chunk-OFYITQXI.mjs +0 -13
  158. package/dist/chunk-OFYITQXI.mjs.map +0 -1
  159. package/dist/chunk-OZNST3EZ.mjs +0 -3
  160. package/dist/chunk-RS6RKW5U.mjs +0 -13
  161. package/dist/chunk-TZ4YSHMC.mjs +0 -3
  162. package/dist/chunk-U6CTBZ2U.mjs +0 -3
  163. package/dist/chunk-U6CTBZ2U.mjs.map +0 -1
  164. package/dist/chunk-XCZMLKPK.mjs +0 -3
  165. package/dist/chunk-XCZMLKPK.mjs.map +0 -1
  166. package/dist/chunk-XGHT7WMO.mjs +0 -3
  167. package/dist/chunk-XGHT7WMO.mjs.map +0 -1
  168. package/dist/chunk-XL4KTJ4L.mjs +0 -3
  169. package/dist/chunk-ZXZIHU7J.mjs +0 -8
  170. package/dist/data.js +0 -3
  171. package/dist/data.js.map +0 -1
  172. package/dist/feedback.js +0 -12
  173. package/dist/feedback.js.map +0 -1
  174. package/dist/form.js +0 -8
  175. package/dist/form.js.map +0 -1
  176. package/dist/iconsax-extended.js +0 -3
  177. package/dist/iconsax-extended.js.map +0 -1
  178. package/dist/iconsax.js +0 -3
  179. package/dist/iconsax.js.map +0 -1
  180. package/dist/index.js +0 -51
  181. package/dist/index.js.map +0 -1
  182. package/dist/interactive.js +0 -2
  183. package/dist/interactive.js.map +0 -1
  184. package/dist/landing.js +0 -100
  185. package/dist/landing.js.map +0 -1
  186. package/dist/lib/phosphor-icons.d.ts +0 -6
  187. package/dist/lib/phosphor-icons.d.ts.map +0 -1
  188. package/dist/navigation.js +0 -12
  189. package/dist/navigation.js.map +0 -1
  190. package/dist/overlay.js +0 -3
  191. package/dist/overlay.js.map +0 -1
  192. package/dist/sdui.js +0 -9
  193. package/dist/sdui.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/LoadingSpinner.tsx"],"names":["LoadingSpinner","className","size","variant","text","color","sizeClasses","spinnerColors","renderSpinner","jsxs","Fragment","jsx","merge"],"mappings":"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","file":"chunk-RS6RKW5U.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * LoadingSpinner 컴포넌트의 props / LoadingSpinner component props\n * @typedef {Object} LoadingSpinnerProps\n * @property {\"sm\" | \"md\" | \"lg\" | \"xl\"} [size=\"md\"] - Spinner 크기 / Spinner size\n * @property {\"default\" | \"dots\" | \"bars\" | \"ring\" | \"ripple\"} [variant=\"default\"] - Spinner 애니메이션 타입 / Spinner animation type\n * @property {string} [text] - Spinner 아래 표시할 텍스트 / Text to display below spinner\n * @property {\"default\" | \"primary\" | \"secondary\" | \"success\" | \"warning\" | \"error\" | \"glass\"} [color=\"default\"] - Spinner 색상 / Spinner color\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n */\nexport interface LoadingSpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\"\n variant?: \"default\" | \"dots\" | \"bars\" | \"ring\" | \"ripple\"\n text?: string\n color?: \"default\" | \"primary\" | \"secondary\" | \"success\" | \"warning\" | \"error\" | \"glass\"\n className?: string\n}\n\n/**\n * LoadingSpinner 컴포넌트 / LoadingSpinner component\n * \n * 로딩 상태를 표시하는 스피너 컴포넌트입니다.\n * 다양한 애니메이션 타입과 크기를 지원합니다.\n * \n * Spinner component that displays loading state.\n * Supports various animation types and sizes.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <LoadingSpinner />\n * \n * @example\n * // 텍스트와 함께 / With text\n * <LoadingSpinner \n * text=\"로딩 중...\"\n * size=\"lg\"\n * color=\"primary\"\n * />\n * \n * @example\n * // 다양한 애니메이션 / Various animations\n * <LoadingSpinner variant=\"dots\" />\n * <LoadingSpinner variant=\"bars\" color=\"success\" />\n * <LoadingSpinner variant=\"ripple\" size=\"xl\" />\n * \n * @param {LoadingSpinnerProps} props - LoadingSpinner 컴포넌트의 props / LoadingSpinner component props\n * @returns {JSX.Element} LoadingSpinner 컴포넌트 / LoadingSpinner component\n */\nexport function LoadingSpinner({ \n className, \n size = \"md\", \n variant = \"default\", \n text, \n color = \"default\" \n}: LoadingSpinnerProps) {\n const sizeClasses = {\n sm: \"w-6 h-6\", // 24px - 더 넉넉한 크기\n md: \"w-8 h-8\", // 32px - 더 넉넉한 크기\n lg: \"w-12 h-12\", // 48px - 더 넉넉한 크기\n xl: \"w-16 h-16\" // 64px - 더 넉넉한 크기\n }\n\n // LoadingSpinner는 border 색상을 사용하므로 특화 색상 시스템 사용\n // 다크모드: track(배경)은 밝게, spinner(회전부)는 더 밝게 → 대비 확보\n const spinnerColors: Record<string, string> = {\n default: \"border-muted-foreground/30 border-t-muted-foreground dark:border-muted-foreground/20 dark:border-t-muted-foreground/80\",\n primary: \"border-primary/30 border-t-primary dark:border-primary/20 dark:border-t-primary/80\",\n secondary: \"border-muted-foreground/30 border-t-muted-foreground dark:border-muted-foreground/20 dark:border-t-muted-foreground/80\",\n success: \"border-green-300 border-t-green-600 dark:border-green-500/50 dark:border-t-green-300\",\n warning: \"border-yellow-300 border-t-yellow-600 dark:border-yellow-500/50 dark:border-t-yellow-300\",\n error: \"border-red-300 border-t-red-600 dark:border-red-500/50 dark:border-t-red-300\",\n glass: \"border-white/50 border-t-white/90 dark:border-slate-400/60 dark:border-t-slate-100\"\n }\n\n const renderSpinner = () => {\n switch (variant) {\n case \"dots\":\n // 순차 점멸 애니메이션 (... 형태)\n return (\n <>\n <style>{`\n @keyframes dotPulse {\n 0%, 80%, 100% { opacity: 0.3; }\n 40% { opacity: 1; }\n }\n `}</style>\n <div className=\"flex space-x-1 items-center\">\n <div className=\"w-2 h-2 bg-current rounded-full\" style={{ animation: 'dotPulse 1.4s ease-in-out infinite', animationDelay: '0ms' }} />\n <div className=\"w-2 h-2 bg-current rounded-full\" style={{ animation: 'dotPulse 1.4s ease-in-out infinite', animationDelay: '200ms' }} />\n <div className=\"w-2 h-2 bg-current rounded-full\" style={{ animation: 'dotPulse 1.4s ease-in-out infinite', animationDelay: '400ms' }} />\n </div>\n </>\n )\n case \"bars\":\n return (\n <>\n <style>{`\n @keyframes barWave {\n 0%, 40%, 100% { transform: scaleY(0.4); }\n 20% { transform: scaleY(1); }\n }\n `}</style>\n <div className=\"flex space-x-0.5 h-full items-center\">\n <div className=\"w-1 h-full bg-current rounded-sm origin-bottom\" style={{ animation: 'barWave 1.2s ease-in-out infinite', animationDelay: '0ms' }} />\n <div className=\"w-1 h-full bg-current rounded-sm origin-bottom\" style={{ animation: 'barWave 1.2s ease-in-out infinite', animationDelay: '100ms' }} />\n <div className=\"w-1 h-full bg-current rounded-sm origin-bottom\" style={{ animation: 'barWave 1.2s ease-in-out infinite', animationDelay: '200ms' }} />\n <div className=\"w-1 h-full bg-current rounded-sm origin-bottom\" style={{ animation: 'barWave 1.2s ease-in-out infinite', animationDelay: '300ms' }} />\n <div className=\"w-1 h-full bg-current rounded-sm origin-bottom\" style={{ animation: 'barWave 1.2s ease-in-out infinite', animationDelay: '400ms' }} />\n </div>\n </>\n )\n case \"ring\":\n return (\n <div className={merge(\n \"w-full h-full animate-spin rounded-full\",\n size === \"xl\" ? \"border-[3px]\" : size === \"lg\" ? \"border-[2.5px]\" : \"border-2\",\n spinnerColors[color] || spinnerColors.default\n )} />\n )\n case \"ripple\":\n return (\n <div className=\"relative w-full h-full\">\n <div className={merge(\n \"absolute inset-0 rounded-full border-2 animate-ping\",\n spinnerColors[color] || spinnerColors.default\n )} />\n <div className={merge(\n \"w-full h-full rounded-full border-2\",\n spinnerColors[color] || spinnerColors.default\n )} />\n </div>\n )\n default:\n return (\n <div className={merge(\n \"w-full h-full animate-spin rounded-full\",\n size === \"xl\" ? \"border-[3px]\" : size === \"lg\" ? \"border-[2.5px]\" : \"border-2\",\n spinnerColors[color] || spinnerColors.default\n )} />\n )\n }\n }\n\n return (\n <div className={merge(\"flex flex-col items-center justify-center\", className)}>\n <div className={merge(sizeClasses[size], \"text-muted-foreground\")}>\n {renderSpinner()}\n </div>\n {text && (\n <p className=\"mt-3 text-sm text-muted-foreground text-center\">\n {text}\n </p>\n )}\n </div>\n )\n} "]}
1
+ {"version":3,"sources":["../src/components/LoadingSpinner.tsx"],"names":["LoadingSpinner","className","size","variant","text","color","sizeClasses","spinnerColors","renderSpinner","jsxs","Fragment","jsx","merge"],"mappings":"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","file":"chunk-QRRP7TGF.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * LoadingSpinner 컴포넌트의 props / LoadingSpinner component props\n * @typedef {Object} LoadingSpinnerProps\n * @property {\"sm\" | \"md\" | \"lg\" | \"xl\"} [size=\"md\"] - Spinner 크기 / Spinner size\n * @property {\"default\" | \"dots\" | \"bars\" | \"ring\" | \"ripple\"} [variant=\"default\"] - Spinner 애니메이션 타입 / Spinner animation type\n * @property {string} [text] - Spinner 아래 표시할 텍스트 / Text to display below spinner\n * @property {\"default\" | \"primary\" | \"secondary\" | \"success\" | \"warning\" | \"error\" | \"glass\"} [color=\"default\"] - Spinner 색상 / Spinner color\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n */\nexport interface LoadingSpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\"\n variant?: \"default\" | \"dots\" | \"bars\" | \"ring\" | \"ripple\"\n text?: string\n color?: \"default\" | \"primary\" | \"secondary\" | \"success\" | \"warning\" | \"error\" | \"glass\"\n className?: string\n}\n\n/**\n * LoadingSpinner 컴포넌트 / LoadingSpinner component\n * \n * 로딩 상태를 표시하는 스피너 컴포넌트입니다.\n * 다양한 애니메이션 타입과 크기를 지원합니다.\n * \n * Spinner component that displays loading state.\n * Supports various animation types and sizes.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <LoadingSpinner />\n * \n * @example\n * // 텍스트와 함께 / With text\n * <LoadingSpinner \n * text=\"로딩 중...\"\n * size=\"lg\"\n * color=\"primary\"\n * />\n * \n * @example\n * // 다양한 애니메이션 / Various animations\n * <LoadingSpinner variant=\"dots\" />\n * <LoadingSpinner variant=\"bars\" color=\"success\" />\n * <LoadingSpinner variant=\"ripple\" size=\"xl\" />\n * \n * @param {LoadingSpinnerProps} props - LoadingSpinner 컴포넌트의 props / LoadingSpinner component props\n * @returns {JSX.Element} LoadingSpinner 컴포넌트 / LoadingSpinner component\n */\nexport function LoadingSpinner({ \n className, \n size = \"md\", \n variant = \"default\", \n text, \n color = \"default\" \n}: LoadingSpinnerProps) {\n const sizeClasses = {\n sm: \"w-6 h-6\", // 24px - 더 넉넉한 크기\n md: \"w-8 h-8\", // 32px - 더 넉넉한 크기\n lg: \"w-12 h-12\", // 48px - 더 넉넉한 크기\n xl: \"w-16 h-16\" // 64px - 더 넉넉한 크기\n }\n\n // LoadingSpinner는 border 색상을 사용하므로 특화 색상 시스템 사용\n // 다크모드: track(배경)은 밝게, spinner(회전부)는 더 밝게 → 대비 확보\n const spinnerColors: Record<string, string> = {\n default: \"border-muted-foreground/30 border-t-muted-foreground dark:border-muted-foreground/20 dark:border-t-muted-foreground/80\",\n primary: \"border-primary/30 border-t-primary dark:border-primary/20 dark:border-t-primary/80\",\n secondary: \"border-muted-foreground/30 border-t-muted-foreground dark:border-muted-foreground/20 dark:border-t-muted-foreground/80\",\n success: \"border-green-300 border-t-green-600 dark:border-green-500/50 dark:border-t-green-300\",\n warning: \"border-yellow-300 border-t-yellow-600 dark:border-yellow-500/50 dark:border-t-yellow-300\",\n error: \"border-red-300 border-t-red-600 dark:border-red-500/50 dark:border-t-red-300\",\n glass: \"border-white/50 border-t-white/90 dark:border-slate-400/60 dark:border-t-slate-100\"\n }\n\n const renderSpinner = () => {\n switch (variant) {\n case \"dots\":\n // 순차 점멸 애니메이션 (... 형태)\n return (\n <>\n <style>{`\n @keyframes dotPulse {\n 0%, 80%, 100% { opacity: 0.3; }\n 40% { opacity: 1; }\n }\n `}</style>\n <div className=\"flex space-x-1 items-center\">\n <div className=\"w-2 h-2 bg-current rounded-full\" style={{ animation: 'dotPulse 1.4s ease-in-out infinite', animationDelay: '0ms' }} />\n <div className=\"w-2 h-2 bg-current rounded-full\" style={{ animation: 'dotPulse 1.4s ease-in-out infinite', animationDelay: '200ms' }} />\n <div className=\"w-2 h-2 bg-current rounded-full\" style={{ animation: 'dotPulse 1.4s ease-in-out infinite', animationDelay: '400ms' }} />\n </div>\n </>\n )\n case \"bars\":\n return (\n <>\n <style>{`\n @keyframes barWave {\n 0%, 40%, 100% { transform: scaleY(0.4); }\n 20% { transform: scaleY(1); }\n }\n `}</style>\n <div className=\"flex space-x-0.5 h-full items-center\">\n <div className=\"w-1 h-full bg-current rounded-sm origin-bottom\" style={{ animation: 'barWave 1.2s ease-in-out infinite', animationDelay: '0ms' }} />\n <div className=\"w-1 h-full bg-current rounded-sm origin-bottom\" style={{ animation: 'barWave 1.2s ease-in-out infinite', animationDelay: '100ms' }} />\n <div className=\"w-1 h-full bg-current rounded-sm origin-bottom\" style={{ animation: 'barWave 1.2s ease-in-out infinite', animationDelay: '200ms' }} />\n <div className=\"w-1 h-full bg-current rounded-sm origin-bottom\" style={{ animation: 'barWave 1.2s ease-in-out infinite', animationDelay: '300ms' }} />\n <div className=\"w-1 h-full bg-current rounded-sm origin-bottom\" style={{ animation: 'barWave 1.2s ease-in-out infinite', animationDelay: '400ms' }} />\n </div>\n </>\n )\n case \"ring\":\n return (\n <div className={merge(\n \"w-full h-full animate-spin rounded-full\",\n size === \"xl\" ? \"border-[3px]\" : size === \"lg\" ? \"border-[2.5px]\" : \"border-2\",\n spinnerColors[color] || spinnerColors.default\n )} />\n )\n case \"ripple\":\n return (\n <div className=\"relative w-full h-full\">\n <div className={merge(\n \"absolute inset-0 rounded-full border-2 animate-ping\",\n spinnerColors[color] || spinnerColors.default\n )} />\n <div className={merge(\n \"w-full h-full rounded-full border-2\",\n spinnerColors[color] || spinnerColors.default\n )} />\n </div>\n )\n default:\n return (\n <div className={merge(\n \"w-full h-full animate-spin rounded-full\",\n size === \"xl\" ? \"border-[3px]\" : size === \"lg\" ? \"border-[2.5px]\" : \"border-2\",\n spinnerColors[color] || spinnerColors.default\n )} />\n )\n }\n }\n\n return (\n <div className={merge(\"flex flex-col items-center justify-center\", className)}>\n <div className={merge(sizeClasses[size], \"text-muted-foreground\")}>\n {renderSpinner()}\n </div>\n {text && (\n <p className=\"mt-3 text-sm text-muted-foreground text-center\">\n {text}\n </p>\n )}\n </div>\n )\n} "]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {useState,useEffect}from'react';function u(){let[r,t]=useState(false);return useEffect(()=>{if(typeof window=="undefined")return;let e=window.matchMedia("(prefers-reduced-motion: reduce)");t(e.matches);let n=o=>{t(o.matches);};return e.addEventListener("change",n),()=>{e.removeEventListener("change",n);}},[]),r}export{u as a};//# sourceMappingURL=chunk-SD6XGDAC.mjs.map
3
+ //# sourceMappingURL=chunk-SD6XGDAC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useReducedMotion.ts"],"names":["useReducedMotion","prefersReducedMotion","setPrefersReducedMotion","useState","useEffect","mediaQuery","handleChange","e"],"mappings":"uCAoCO,SAASA,CAAAA,EAA4B,CAC1C,GAAM,CAACC,CAAAA,CAAsBC,CAAuB,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAEtE,OAAAC,SAAAA,CAAU,IAAM,CAEd,GAAI,OAAO,MAAA,EAAW,WAAA,CAAa,OAEnC,IAAMC,CAAAA,CAAa,MAAA,CAAO,WAAW,kCAAkC,CAAA,CAGvEH,CAAAA,CAAwBG,CAAAA,CAAW,OAAO,CAAA,CAG1C,IAAMC,CAAAA,CAAgBC,CAAAA,EAA2B,CAC/CL,CAAAA,CAAwBK,CAAAA,CAAE,OAAO,EACnC,CAAA,CAEA,OAAAF,CAAAA,CAAW,gBAAA,CAAiB,QAAA,CAAUC,CAAY,CAAA,CAE3C,IAAM,CACXD,CAAAA,CAAW,mBAAA,CAAoB,QAAA,CAAUC,CAAY,EACvD,CACF,CAAA,CAAG,EAAE,EAEEL,CACT","file":"chunk-SD6XGDAC.mjs","sourcesContent":["\"use client\";\n\nimport { useState, useEffect } from \"react\";\n\n/**\n * useReducedMotion 훅 / useReducedMotion hook\n *\n * 사용자의 모션 감소 선호 설정을 감지하는 훅입니다.\n * 접근성을 위해 애니메이션을 조건부로 적용할 때 사용합니다.\n *\n * Hook that detects user's reduced motion preference.\n * Used for conditionally applying animations for accessibility.\n *\n * @returns {boolean} 모션 감소 선호 여부 / Whether reduced motion is preferred\n *\n * @example\n * const prefersReducedMotion = useReducedMotion();\n *\n * return (\n * <div\n * className={prefersReducedMotion ? \"\" : \"animate-bounce\"}\n * style={{ transition: prefersReducedMotion ? \"none\" : \"all 0.3s\" }}\n * >\n * Content\n * </div>\n * );\n *\n * @example\n * // 조건부 애니메이션 / Conditional animation\n * const prefersReducedMotion = useReducedMotion();\n *\n * const variants = {\n * initial: { opacity: 0, y: prefersReducedMotion ? 0 : 20 },\n * animate: { opacity: 1, y: 0 },\n * };\n */\nexport function useReducedMotion(): boolean {\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(false);\n\n useEffect(() => {\n // Check if window is available (SSR safety)\n if (typeof window === \"undefined\") return;\n\n const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n\n // Set initial value\n setPrefersReducedMotion(mediaQuery.matches);\n\n // Listen for changes\n const handleChange = (e: MediaQueryListEvent) => {\n setPrefersReducedMotion(e.matches);\n };\n\n mediaQuery.addEventListener(\"change\", handleChange);\n\n return () => {\n mediaQuery.removeEventListener(\"change\", handleChange);\n };\n }, []);\n\n return prefersReducedMotion;\n}\n\nexport default useReducedMotion;\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {a}from'./chunk-QEMPERUK.mjs';import x from'react';import {cva}from'class-variance-authority';import {jsx}from'react/jsx-runtime';var o=cva("w-full",{variants:{size:{sm:"max-w-2xl",md:"max-w-4xl",lg:"max-w-6xl",xl:"max-w-7xl",full:"max-w-full"},padding:{none:"",sm:"px-3 sm:px-4 py-6 sm:py-8",md:"px-4 sm:px-6 py-8 sm:py-12",lg:"px-4 sm:px-6 lg:px-8 py-10 sm:py-16",xl:"px-6 sm:px-8 lg:px-12 py-12 sm:py-20"}},defaultVariants:{size:"lg",padding:"md"}}),i=x.forwardRef(({className:m,size:a$1="lg",padding:n="md",centered:p=true,fluid:e=false,...s},t)=>jsx("div",{ref:t,className:a(o({size:e?void 0:a$1,padding:n}),e&&"max-w-full",p&&"mx-auto",m),...s}));i.displayName="Container";export{i as a};//# sourceMappingURL=chunk-SDFVGFXT.mjs.map
3
+ //# sourceMappingURL=chunk-SDFVGFXT.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Container.tsx"],"names":["containerVariants","cva","Container","React","className","size","padding","centered","fluid","props","ref","jsx","merge"],"mappings":"yIAMO,IAAMA,CAAAA,CAAoBC,IAC/B,QAAA,CACA,CACE,SAAU,CACR,IAAA,CAAM,CACJ,EAAA,CAAI,WAAA,CACJ,EAAA,CAAI,WAAA,CACJ,EAAA,CAAI,WAAA,CACJ,GAAI,WAAA,CACJ,IAAA,CAAM,YACR,CAAA,CACA,OAAA,CAAS,CACP,IAAA,CAAM,EAAA,CACN,EAAA,CAAI,2BAAA,CACJ,EAAA,CAAI,4BAAA,CACJ,GAAI,qCAAA,CACJ,EAAA,CAAI,sCACN,CACF,CAAA,CACA,eAAA,CAAiB,CACf,IAAA,CAAM,IAAA,CACN,OAAA,CAAS,IACX,CACF,CACF,EAuBMC,CAAAA,CAAYC,CAAAA,CAAM,WACtB,CAAC,CACC,UAAAC,CAAAA,CACA,IAAA,CAAAC,CAAAA,CAAO,IAAA,CACP,OAAA,CAAAC,CAAAA,CAAU,KACV,QAAA,CAAAC,CAAAA,CAAW,KACX,KAAA,CAAAC,CAAAA,CAAQ,MACR,GAAGC,CACL,CAAA,CAAGC,CAAAA,GAECC,GAAAA,CAAC,KAAA,CAAA,CACC,IAAKD,CAAAA,CACL,SAAA,CAAWE,EACTZ,CAAAA,CAAkB,CAAE,KAAMQ,CAAAA,CAAQ,MAAA,CAAYH,CAAAA,CAAM,OAAA,CAAAC,CAAQ,CAAC,EAC7DE,CAAAA,EAAS,YAAA,CACTD,CAAAA,EAAY,SAAA,CACZH,CACF,CAAA,CACC,GAAGK,CAAAA,CACN,CAGN,EACAP,CAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-CVWWS25A.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { cva } from \"class-variance-authority\"\nimport { merge } from \"../lib/utils\"\n\nexport const containerVariants = cva(\n \"w-full\",\n {\n variants: {\n size: {\n sm: \"max-w-2xl\",\n md: \"max-w-4xl\",\n lg: \"max-w-6xl\",\n xl: \"max-w-7xl\",\n full: \"max-w-full\",\n },\n padding: {\n none: \"\",\n sm: \"px-3 sm:px-4 py-6 sm:py-8\",\n md: \"px-4 sm:px-6 py-8 sm:py-12\",\n lg: \"px-4 sm:px-6 lg:px-8 py-10 sm:py-16\",\n xl: \"px-6 sm:px-8 lg:px-12 py-12 sm:py-20\",\n },\n },\n defaultVariants: {\n size: \"lg\",\n padding: \"md\",\n },\n }\n)\n\n/**\n * Container 컴포넌트의 props\n */\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\"\n padding?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\n centered?: boolean\n fluid?: boolean\n}\n\n/**\n * Container 컴포넌트\n *\n * 콘텐츠를 감싸는 컨테이너 컴포넌트입니다.\n * 반응형 최대 너비와 패딩을 제공하여 일관된 레이아웃을 구성합니다.\n *\n * @example\n * <Container><h1>제목</h1></Container>\n * <Container size=\"sm\" padding=\"none\"><div>콘텐츠</div></Container>\n * <Container fluid padding=\"xl\"><div>전체 너비</div></Container>\n */\nconst Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({\n className,\n size = \"lg\",\n padding = \"md\",\n centered = true,\n fluid = false,\n ...props\n }, ref) => {\n return (\n <div\n ref={ref}\n className={merge(\n containerVariants({ size: fluid ? undefined : size, padding }),\n fluid && \"max-w-full\",\n centered && \"mx-auto\",\n className\n )}\n {...props}\n />\n )\n }\n)\nContainer.displayName = \"Container\"\n\nexport { Container } "]}
1
+ {"version":3,"sources":["../src/components/Container.tsx"],"names":["containerVariants","cva","Container","React","className","size","padding","centered","fluid","props","ref","jsx","merge"],"mappings":"yIAMO,IAAMA,CAAAA,CAAoBC,IAC/B,QAAA,CACA,CACE,SAAU,CACR,IAAA,CAAM,CACJ,EAAA,CAAI,WAAA,CACJ,EAAA,CAAI,WAAA,CACJ,EAAA,CAAI,WAAA,CACJ,GAAI,WAAA,CACJ,IAAA,CAAM,YACR,CAAA,CACA,OAAA,CAAS,CACP,IAAA,CAAM,EAAA,CACN,EAAA,CAAI,2BAAA,CACJ,EAAA,CAAI,4BAAA,CACJ,GAAI,qCAAA,CACJ,EAAA,CAAI,sCACN,CACF,CAAA,CACA,eAAA,CAAiB,CACf,IAAA,CAAM,IAAA,CACN,OAAA,CAAS,IACX,CACF,CACF,EAuBMC,CAAAA,CAAYC,CAAAA,CAAM,WACtB,CAAC,CACC,UAAAC,CAAAA,CACA,IAAA,CAAAC,GAAAA,CAAO,IAAA,CACP,OAAA,CAAAC,CAAAA,CAAU,KACV,QAAA,CAAAC,CAAAA,CAAW,KACX,KAAA,CAAAC,CAAAA,CAAQ,MACR,GAAGC,CACL,CAAA,CAAGC,CAAAA,GAECC,GAAAA,CAAC,KAAA,CAAA,CACC,IAAKD,CAAAA,CACL,SAAA,CAAWE,EACTZ,CAAAA,CAAkB,CAAE,KAAMQ,CAAAA,CAAQ,MAAA,CAAYH,GAAAA,CAAM,OAAA,CAAAC,CAAQ,CAAC,EAC7DE,CAAAA,EAAS,YAAA,CACTD,CAAAA,EAAY,SAAA,CACZH,CACF,CAAA,CACC,GAAGK,CAAAA,CACN,CAGN,EACAP,CAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-SDFVGFXT.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { cva } from \"class-variance-authority\"\nimport { merge } from \"../lib/utils\"\n\nexport const containerVariants = cva(\n \"w-full\",\n {\n variants: {\n size: {\n sm: \"max-w-2xl\",\n md: \"max-w-4xl\",\n lg: \"max-w-6xl\",\n xl: \"max-w-7xl\",\n full: \"max-w-full\",\n },\n padding: {\n none: \"\",\n sm: \"px-3 sm:px-4 py-6 sm:py-8\",\n md: \"px-4 sm:px-6 py-8 sm:py-12\",\n lg: \"px-4 sm:px-6 lg:px-8 py-10 sm:py-16\",\n xl: \"px-6 sm:px-8 lg:px-12 py-12 sm:py-20\",\n },\n },\n defaultVariants: {\n size: \"lg\",\n padding: \"md\",\n },\n }\n)\n\n/**\n * Container 컴포넌트의 props\n */\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\"\n padding?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\n centered?: boolean\n fluid?: boolean\n}\n\n/**\n * Container 컴포넌트\n *\n * 콘텐츠를 감싸는 컨테이너 컴포넌트입니다.\n * 반응형 최대 너비와 패딩을 제공하여 일관된 레이아웃을 구성합니다.\n *\n * @example\n * <Container><h1>제목</h1></Container>\n * <Container size=\"sm\" padding=\"none\"><div>콘텐츠</div></Container>\n * <Container fluid padding=\"xl\"><div>전체 너비</div></Container>\n */\nconst Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({\n className,\n size = \"lg\",\n padding = \"md\",\n centered = true,\n fluid = false,\n ...props\n }, ref) => {\n return (\n <div\n ref={ref}\n className={merge(\n containerVariants({ size: fluid ? undefined : size, padding }),\n fluid && \"max-w-full\",\n centered && \"mx-auto\",\n className\n )}\n {...props}\n />\n )\n }\n)\nContainer.displayName = \"Container\"\n\nexport { Container } "]}
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import {a}from'./chunk-QEMPERUK.mjs';import i from'react';import {cva}from'class-variance-authority';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var x=cva("block",{variants:{variant:{text:"rounded w-full h-4",circular:"rounded-full w-10 h-10",rounded:"rounded-lg w-full h-[200px]",rectangular:"rounded-none w-full h-[200px]"},animation:{pulse:"animate-pulse bg-muted",wave:"bg-muted",shimmer:"bg-muted"}},defaultVariants:{variant:"text",animation:"pulse"}}),o=i.forwardRef(({className:t,variant:l="text",width:a$1,height:c,animation:m="pulse",...p},f)=>{let N=()=>m==="wave"||m==="shimmer"?{background:"linear-gradient(90deg, hsl(var(--muted)) 0%, hsl(var(--muted-foreground) / 0.2) 50%, hsl(var(--muted)) 100%)",backgroundSize:"200% 100%",animation:"shimmer 1.5s ease-in-out infinite"}:{};return jsxs(Fragment,{children:[(m==="wave"||m==="shimmer")&&jsx("style",{children:`
3
+ @keyframes shimmer {
4
+ 0% { background-position: 200% 0; }
5
+ 100% { background-position: -200% 0; }
6
+ }
7
+ `}),jsx("div",{ref:f,className:a(x({variant:l,animation:m}),t),style:{...a$1!=null?{width:typeof a$1=="number"?`${a$1}px`:a$1}:{},...c!=null?{height:typeof c=="number"?`${c}px`:c}:{},...N()},...p})]})});o.displayName="Skeleton";var s=i.forwardRef(({className:t,...l},a)=>jsx(o,{ref:a,variant:"text",className:t,...l}));s.displayName="SkeletonText";var d=i.forwardRef(({className:t,...l},a)=>jsx(o,{ref:a,variant:"circular",className:t,...l}));d.displayName="SkeletonCircle";var w=i.forwardRef(({className:t,...l},a)=>jsx(o,{ref:a,variant:"rectangular",className:t,...l}));w.displayName="SkeletonRectangle";var v=i.forwardRef(({className:t,...l},a)=>jsx(o,{ref:a,variant:"rounded",className:t,...l}));v.displayName="SkeletonRounded";var h=i.forwardRef(({className:t,...l},a$1)=>jsxs("div",{ref:a$1,className:a("space-y-4 p-6",t),...l,children:[jsxs("div",{className:"flex items-center space-x-4",children:[" ",jsx(d,{className:"w-12 h-12"})," ",jsxs("div",{className:"space-y-2 flex-1",children:[" ",jsx(s,{className:"h-4 w-3/4"})," ",jsx(s,{className:"h-3 w-1/2"})," "]})]}),jsx(v,{className:"w-full h-32"})," ",jsxs("div",{className:"space-y-2",children:[" ",jsx(s,{className:"h-4 w-full"}),jsx(s,{className:"h-4 w-5/6"}),jsx(s,{className:"h-4 w-4/6"})]})]}));h.displayName="SkeletonCard";var k=i.forwardRef(({className:t,...l},a$1)=>jsxs("div",{ref:a$1,className:a("flex items-center space-x-4",t),...l,children:[jsx(d,{className:"w-12 h-12"})," ",jsxs("div",{className:"space-y-2 flex-1",children:[" ",jsx(s,{className:"h-4 w-3/4"}),jsx(s,{className:"h-3 w-1/2"})]})]}));k.displayName="SkeletonAvatar";var y=i.forwardRef(({className:t,...l},a$1)=>jsxs("div",{ref:a$1,className:a("space-y-2",t),...l,children:[jsx(v,{className:"w-full h-48"})," ",jsx(s,{className:"h-4 w-1/2"})]}));y.displayName="SkeletonImage";var S=i.forwardRef(({className:t,...l},a$1)=>jsxs("div",{ref:a$1,className:a("space-y-4",t),...l,children:[jsxs("div",{className:"flex items-center space-x-4",children:[" ",jsx(d,{className:"w-16 h-16"})," ",jsxs("div",{className:"space-y-2 flex-1",children:[" ",jsx(s,{className:"h-5 w-1/2"}),jsx(s,{className:"h-3 w-1/3"})]})]}),jsxs("div",{className:"space-y-2",children:[" ",jsx(s,{className:"h-4 w-full"}),jsx(s,{className:"h-4 w-5/6"})]})]}));S.displayName="SkeletonUserProfile";var T=i.forwardRef(({className:t,...l},a$1)=>jsx("div",{ref:a$1,className:a("space-y-4",t),...l,children:Array.from({length:3}).map((c,m)=>jsxs("div",{className:"flex items-center space-x-4",children:[" ",jsx(d,{className:"w-10 h-10"})," ",jsxs("div",{className:"space-y-2 flex-1",children:[" ",jsx(s,{className:"h-4 w-3/4"}),jsx(s,{className:"h-3 w-1/2"})]})]},m))}));T.displayName="SkeletonList";var L=i.forwardRef(({className:t,...l},a$1)=>jsxs("div",{ref:a$1,className:a("space-y-4",t),...l,children:[jsxs("div",{className:"flex space-x-4",children:[" ",jsx(s,{className:"h-4 w-1/4"}),jsx(s,{className:"h-4 w-1/4"}),jsx(s,{className:"h-4 w-1/4"}),jsx(s,{className:"h-4 w-1/4"})]}),Array.from({length:5}).map((c,m)=>jsxs("div",{className:"flex space-x-4",children:[" ",jsx(s,{className:"h-4 w-1/4"}),jsx(s,{className:"h-4 w-1/4"}),jsx(s,{className:"h-4 w-1/4"}),jsx(s,{className:"h-4 w-1/4"})]},m))]}));L.displayName="SkeletonTable";export{o as a,s as b,d as c,w as d,v as e,h as f,k as g,y as h,S as i,T as j,L as k};//# sourceMappingURL=chunk-SMLDNOV3.mjs.map
8
+ //# sourceMappingURL=chunk-SMLDNOV3.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Skeleton.tsx"],"names":["skeletonVariants","cva","Skeleton","React","className","variant","width","height","animation","props","ref","getAnimationStyle","jsxs","Fragment","jsx","merge","SkeletonText","SkeletonCircle","SkeletonRectangle","SkeletonRounded","SkeletonCard","SkeletonAvatar","SkeletonImage","SkeletonUserProfile","SkeletonList","_","index","SkeletonTable"],"mappings":"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","file":"chunk-ZXZIHU7J.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { cva } from \"class-variance-authority\"\nimport { merge } from \"../lib/utils\"\n\nexport const skeletonVariants = cva(\n \"block\",\n {\n variants: {\n variant: {\n text: \"rounded w-full h-4\",\n circular: \"rounded-full w-10 h-10\",\n rounded: \"rounded-lg w-full h-[200px]\",\n rectangular: \"rounded-none w-full h-[200px]\",\n },\n animation: {\n pulse: \"animate-pulse bg-muted\",\n wave: \"bg-muted\",\n shimmer: \"bg-muted\",\n },\n },\n defaultVariants: {\n variant: \"text\",\n animation: \"pulse\",\n },\n }\n)\n\n/**\n * Skeleton 컴포넌트의 props\n */\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"text\" | \"circular\" | \"rectangular\" | \"rounded\"\n width?: string | number\n height?: string | number\n animation?: \"pulse\" | \"wave\" | \"shimmer\"\n className?: string\n}\n\n/**\n * Skeleton 컴포넌트 / Skeleton component\n *\n * 로딩 중 콘텐츠의 플레이스홀더를 표시하는 스켈레톤 컴포넌트입니다.\n *\n * @example\n * <Skeleton />\n * <Skeleton variant=\"circular\" width={40} height={40} />\n * <Skeleton variant=\"rounded\" width=\"100%\" height={200} animation=\"wave\" />\n */\nconst Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n ({\n className,\n variant = \"text\",\n width,\n height,\n animation = \"pulse\",\n ...props\n }, ref) => {\n const getAnimationStyle = (): React.CSSProperties => {\n if (animation === \"wave\" || animation === \"shimmer\") {\n return {\n background: \"linear-gradient(90deg, hsl(var(--muted)) 0%, hsl(var(--muted-foreground) / 0.2) 50%, hsl(var(--muted)) 100%)\",\n backgroundSize: \"200% 100%\",\n animation: \"shimmer 1.5s ease-in-out infinite\",\n }\n }\n return {}\n }\n\n return (\n <>\n {(animation === \"wave\" || animation === \"shimmer\") && (\n <style>{`\n @keyframes shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n }\n `}</style>\n )}\n <div\n ref={ref}\n className={merge(\n skeletonVariants({ variant, animation }),\n className\n )}\n style={{\n ...(width != null ? { width: typeof width === \"number\" ? `${width}px` : width } : {}),\n ...(height != null ? { height: typeof height === \"number\" ? `${height}px` : height } : {}),\n ...getAnimationStyle(),\n }}\n {...props}\n />\n </>\n )\n }\n)\nSkeleton.displayName = \"Skeleton\"\n\n// 편의 컴포넌트들\nexport const SkeletonText = React.forwardRef<HTMLDivElement, Omit<SkeletonProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"text\" className={className} {...props} />\n )\n)\nSkeletonText.displayName = \"SkeletonText\"\n\nexport const SkeletonCircle = React.forwardRef<HTMLDivElement, Omit<SkeletonProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"circular\" className={className} {...props} />\n )\n)\nSkeletonCircle.displayName = \"SkeletonCircle\"\n\nexport const SkeletonRectangle = React.forwardRef<HTMLDivElement, Omit<SkeletonProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"rectangular\" className={className} {...props} />\n )\n)\nSkeletonRectangle.displayName = \"SkeletonRectangle\"\n\nexport const SkeletonRounded = React.forwardRef<HTMLDivElement, Omit<SkeletonProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"rounded\" className={className} {...props} />\n )\n)\nSkeletonRounded.displayName = \"SkeletonRounded\"\n\n// 복합 스켈레톤 컴포넌트들\nexport const SkeletonCard = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-4 p-6\", className)} // 16px 간격, 24px 패딩\n {...props}\n >\n <div className=\"flex items-center space-x-4\"> {/* 16px 간격 */}\n <SkeletonCircle className=\"w-12 h-12\" /> {/* 48px 크기 */}\n <div className=\"space-y-2 flex-1\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-3/4\" /> {/* 16px 높이, 75% 너비 */}\n <SkeletonText className=\"h-3 w-1/2\" /> {/* 12px 높이, 50% 너비 */}\n </div>\n </div>\n <SkeletonRounded className=\"w-full h-32\" /> {/* 128px 높이 */}\n <div className=\"space-y-2\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-full\" />\n <SkeletonText className=\"h-4 w-5/6\" />\n <SkeletonText className=\"h-4 w-4/6\" />\n </div>\n </div>\n )\n)\nSkeletonCard.displayName = \"SkeletonCard\"\n\nexport const SkeletonAvatar = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"flex items-center space-x-4\", className)} // 16px 간격\n {...props}\n >\n <SkeletonCircle className=\"w-12 h-12\" /> {/* 48px 크기 */}\n <div className=\"space-y-2 flex-1\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-3/4\" />\n <SkeletonText className=\"h-3 w-1/2\" />\n </div>\n </div>\n )\n)\nSkeletonAvatar.displayName = \"SkeletonAvatar\"\n\nexport const SkeletonImage = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-2\", className)} // 8px 간격\n {...props}\n >\n <SkeletonRounded className=\"w-full h-48\" /> {/* 192px 높이 */}\n <SkeletonText className=\"h-4 w-1/2\" />\n </div>\n )\n)\nSkeletonImage.displayName = \"SkeletonImage\"\n\nexport const SkeletonUserProfile = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-4\", className)} // 16px 간격\n {...props}\n >\n <div className=\"flex items-center space-x-4\"> {/* 16px 간격 */}\n <SkeletonCircle className=\"w-16 h-16\" /> {/* 64px 크기 */}\n <div className=\"space-y-2 flex-1\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-5 w-1/2\" />\n <SkeletonText className=\"h-3 w-1/3\" />\n </div>\n </div>\n <div className=\"space-y-2\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-full\" />\n <SkeletonText className=\"h-4 w-5/6\" />\n </div>\n </div>\n )\n)\nSkeletonUserProfile.displayName = \"SkeletonUserProfile\"\n\nexport const SkeletonList = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-4\", className)} // 16px 간격\n {...props}\n >\n {Array.from({ length: 3 }).map((_, index) => (\n <div key={index} className=\"flex items-center space-x-4\"> {/* 16px 간격 */}\n <SkeletonCircle className=\"w-10 h-10\" /> {/* 40px 크기 */}\n <div className=\"space-y-2 flex-1\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-3/4\" />\n <SkeletonText className=\"h-3 w-1/2\" />\n </div>\n </div>\n ))}\n </div>\n )\n)\nSkeletonList.displayName = \"SkeletonList\"\n\nexport const SkeletonTable = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-4\", className)} // 16px 간격\n {...props}\n >\n {/* 헤더 */}\n <div className=\"flex space-x-4\"> {/* 16px 간격 */}\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n </div>\n {/* 행들 */}\n {Array.from({ length: 5 }).map((_, index) => (\n <div key={index} className=\"flex space-x-4\"> {/* 16px 간격 */}\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n </div>\n ))}\n </div>\n )\n)\nSkeletonTable.displayName = \"SkeletonTable\"\n\nexport { Skeleton } "]}
1
+ {"version":3,"sources":["../src/components/Skeleton.tsx"],"names":["skeletonVariants","cva","Skeleton","React","className","variant","width","height","animation","props","ref","getAnimationStyle","jsxs","Fragment","jsx","merge","SkeletonText","SkeletonCircle","SkeletonRectangle","SkeletonRounded","SkeletonCard","SkeletonAvatar","SkeletonImage","SkeletonUserProfile","SkeletonList","_","index","SkeletonTable"],"mappings":"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","file":"chunk-SMLDNOV3.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { cva } from \"class-variance-authority\"\nimport { merge } from \"../lib/utils\"\n\nexport const skeletonVariants = cva(\n \"block\",\n {\n variants: {\n variant: {\n text: \"rounded w-full h-4\",\n circular: \"rounded-full w-10 h-10\",\n rounded: \"rounded-lg w-full h-[200px]\",\n rectangular: \"rounded-none w-full h-[200px]\",\n },\n animation: {\n pulse: \"animate-pulse bg-muted\",\n wave: \"bg-muted\",\n shimmer: \"bg-muted\",\n },\n },\n defaultVariants: {\n variant: \"text\",\n animation: \"pulse\",\n },\n }\n)\n\n/**\n * Skeleton 컴포넌트의 props\n */\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"text\" | \"circular\" | \"rectangular\" | \"rounded\"\n width?: string | number\n height?: string | number\n animation?: \"pulse\" | \"wave\" | \"shimmer\"\n className?: string\n}\n\n/**\n * Skeleton 컴포넌트 / Skeleton component\n *\n * 로딩 중 콘텐츠의 플레이스홀더를 표시하는 스켈레톤 컴포넌트입니다.\n *\n * @example\n * <Skeleton />\n * <Skeleton variant=\"circular\" width={40} height={40} />\n * <Skeleton variant=\"rounded\" width=\"100%\" height={200} animation=\"wave\" />\n */\nconst Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n ({\n className,\n variant = \"text\",\n width,\n height,\n animation = \"pulse\",\n ...props\n }, ref) => {\n const getAnimationStyle = (): React.CSSProperties => {\n if (animation === \"wave\" || animation === \"shimmer\") {\n return {\n background: \"linear-gradient(90deg, hsl(var(--muted)) 0%, hsl(var(--muted-foreground) / 0.2) 50%, hsl(var(--muted)) 100%)\",\n backgroundSize: \"200% 100%\",\n animation: \"shimmer 1.5s ease-in-out infinite\",\n }\n }\n return {}\n }\n\n return (\n <>\n {(animation === \"wave\" || animation === \"shimmer\") && (\n <style>{`\n @keyframes shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n }\n `}</style>\n )}\n <div\n ref={ref}\n className={merge(\n skeletonVariants({ variant, animation }),\n className\n )}\n style={{\n ...(width != null ? { width: typeof width === \"number\" ? `${width}px` : width } : {}),\n ...(height != null ? { height: typeof height === \"number\" ? `${height}px` : height } : {}),\n ...getAnimationStyle(),\n }}\n {...props}\n />\n </>\n )\n }\n)\nSkeleton.displayName = \"Skeleton\"\n\n// 편의 컴포넌트들\nexport const SkeletonText = React.forwardRef<HTMLDivElement, Omit<SkeletonProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"text\" className={className} {...props} />\n )\n)\nSkeletonText.displayName = \"SkeletonText\"\n\nexport const SkeletonCircle = React.forwardRef<HTMLDivElement, Omit<SkeletonProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"circular\" className={className} {...props} />\n )\n)\nSkeletonCircle.displayName = \"SkeletonCircle\"\n\nexport const SkeletonRectangle = React.forwardRef<HTMLDivElement, Omit<SkeletonProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"rectangular\" className={className} {...props} />\n )\n)\nSkeletonRectangle.displayName = \"SkeletonRectangle\"\n\nexport const SkeletonRounded = React.forwardRef<HTMLDivElement, Omit<SkeletonProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"rounded\" className={className} {...props} />\n )\n)\nSkeletonRounded.displayName = \"SkeletonRounded\"\n\n// 복합 스켈레톤 컴포넌트들\nexport const SkeletonCard = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-4 p-6\", className)} // 16px 간격, 24px 패딩\n {...props}\n >\n <div className=\"flex items-center space-x-4\"> {/* 16px 간격 */}\n <SkeletonCircle className=\"w-12 h-12\" /> {/* 48px 크기 */}\n <div className=\"space-y-2 flex-1\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-3/4\" /> {/* 16px 높이, 75% 너비 */}\n <SkeletonText className=\"h-3 w-1/2\" /> {/* 12px 높이, 50% 너비 */}\n </div>\n </div>\n <SkeletonRounded className=\"w-full h-32\" /> {/* 128px 높이 */}\n <div className=\"space-y-2\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-full\" />\n <SkeletonText className=\"h-4 w-5/6\" />\n <SkeletonText className=\"h-4 w-4/6\" />\n </div>\n </div>\n )\n)\nSkeletonCard.displayName = \"SkeletonCard\"\n\nexport const SkeletonAvatar = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"flex items-center space-x-4\", className)} // 16px 간격\n {...props}\n >\n <SkeletonCircle className=\"w-12 h-12\" /> {/* 48px 크기 */}\n <div className=\"space-y-2 flex-1\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-3/4\" />\n <SkeletonText className=\"h-3 w-1/2\" />\n </div>\n </div>\n )\n)\nSkeletonAvatar.displayName = \"SkeletonAvatar\"\n\nexport const SkeletonImage = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-2\", className)} // 8px 간격\n {...props}\n >\n <SkeletonRounded className=\"w-full h-48\" /> {/* 192px 높이 */}\n <SkeletonText className=\"h-4 w-1/2\" />\n </div>\n )\n)\nSkeletonImage.displayName = \"SkeletonImage\"\n\nexport const SkeletonUserProfile = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-4\", className)} // 16px 간격\n {...props}\n >\n <div className=\"flex items-center space-x-4\"> {/* 16px 간격 */}\n <SkeletonCircle className=\"w-16 h-16\" /> {/* 64px 크기 */}\n <div className=\"space-y-2 flex-1\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-5 w-1/2\" />\n <SkeletonText className=\"h-3 w-1/3\" />\n </div>\n </div>\n <div className=\"space-y-2\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-full\" />\n <SkeletonText className=\"h-4 w-5/6\" />\n </div>\n </div>\n )\n)\nSkeletonUserProfile.displayName = \"SkeletonUserProfile\"\n\nexport const SkeletonList = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-4\", className)} // 16px 간격\n {...props}\n >\n {Array.from({ length: 3 }).map((_, index) => (\n <div key={index} className=\"flex items-center space-x-4\"> {/* 16px 간격 */}\n <SkeletonCircle className=\"w-10 h-10\" /> {/* 40px 크기 */}\n <div className=\"space-y-2 flex-1\"> {/* 8px 간격 */}\n <SkeletonText className=\"h-4 w-3/4\" />\n <SkeletonText className=\"h-3 w-1/2\" />\n </div>\n </div>\n ))}\n </div>\n )\n)\nSkeletonList.displayName = \"SkeletonList\"\n\nexport const SkeletonTable = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"space-y-4\", className)} // 16px 간격\n {...props}\n >\n {/* 헤더 */}\n <div className=\"flex space-x-4\"> {/* 16px 간격 */}\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n </div>\n {/* 행들 */}\n {Array.from({ length: 5 }).map((_, index) => (\n <div key={index} className=\"flex space-x-4\"> {/* 16px 간격 */}\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n <SkeletonText className=\"h-4 w-1/4\" />\n </div>\n ))}\n </div>\n )\n)\nSkeletonTable.displayName = \"SkeletonTable\"\n\nexport { Skeleton } "]}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import {a,b}from'./chunk-KJZGOL2Z.mjs';import {b as b$1}from'./chunk-U6CTBZ2U.mjs';import g from'react';import {jsxs,jsx}from'react/jsx-runtime';var p=g.forwardRef(({className:c,title:m,description:h,children:u,prevPage:t,nextPage:r,breadcrumbItems:i=[{label:"Components",href:"/components"}],...f},v)=>jsxs("div",{className:"relative min-h-screen",children:[jsx("div",{className:"fixed right-4 top-4 z-50 hidden lg:block",children:jsx("div",{className:"flex flex-col space-y-4",children:t&&jsx("a",{href:t.href,className:"group p-3 bg-white/80 backdrop-blur-sm border border-border rounded-full shadow-lg hover:shadow-2xl hover:bg-white/90 active:scale-95 transition-all duration-200",title:`\uC774\uC804: ${t.title}`,children:jsx("svg",{className:"w-5 h-5 text-muted-foreground group-hover:text-indigo-600 group-active:text-indigo-800 transition-colors",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 15l7-7 7 7"})})})})}),jsx("div",{className:"fixed right-4 bottom-4 z-50 hidden lg:block",children:jsx("div",{className:"flex flex-col space-y-4",children:r&&jsx("a",{href:r.href,className:"group p-3 bg-white/80 backdrop-blur-sm border border-border rounded-full shadow-lg hover:shadow-2xl hover:bg-white/90 active:scale-95 transition-all duration-200",title:`\uB2E4\uC74C: ${r.title}`,children:jsx("svg",{className:"w-5 h-5 text-muted-foreground group-hover:text-indigo-600 group-active:text-indigo-800 transition-colors",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})})})}),jsx("div",{ref:v,className:b$1("container mx-auto px-4 py-8",c),...f,children:jsxs("div",{className:"max-w-4xl mx-auto",children:[jsx(a,{className:"mb-6",children:i.map((s,a)=>jsx(b,{href:s.href,isCurrent:a===i.length-1,children:s.label},a))}),jsxs("div",{className:"mb-8",children:[jsx("h1",{className:"text-4xl font-bold mb-4",children:m}),jsx("p",{className:"text-lg text-muted-foreground",children:h})]}),jsx("div",{className:"space-y-8",children:u}),jsx("div",{className:"mt-12 lg:hidden",children:jsxs("div",{className:"flex items-center justify-between py-4 border-t border-border",children:[t&&jsxs("a",{href:t.href,className:"flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors",children:[jsx("svg",{className:"w-4 h-4 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"})}),t.title]}),r&&jsxs("a",{href:r.href,className:"flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors",children:[r.title,jsx("svg",{className:"w-4 h-4 ml-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})})]})]})})]})})]}));p.displayName="ComponentLayout";export{p as a};//# sourceMappingURL=chunk-FX57OSYG.mjs.map
3
- //# sourceMappingURL=chunk-FX57OSYG.mjs.map
2
+ import {a,b}from'./chunk-HEBXAFRY.mjs';import {a as a$1}from'./chunk-QEMPERUK.mjs';import g from'react';import {jsxs,jsx}from'react/jsx-runtime';var p=g.forwardRef(({className:c,title:m,description:h,children:u,prevPage:t,nextPage:r,breadcrumbItems:i=[{label:"Components",href:"/components"}],...f},v)=>jsxs("div",{className:"relative min-h-screen",children:[jsx("div",{className:"fixed right-4 top-4 z-50 hidden lg:block",children:jsx("div",{className:"flex flex-col space-y-4",children:t&&jsx("a",{href:t.href,className:"group p-3 bg-white/80 backdrop-blur-sm border border-border rounded-full shadow-lg hover:shadow-2xl hover:bg-white/90 active:scale-95 transition-all duration-200",title:`\uC774\uC804: ${t.title}`,children:jsx("svg",{className:"w-5 h-5 text-muted-foreground group-hover:text-indigo-600 group-active:text-indigo-800 transition-colors",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 15l7-7 7 7"})})})})}),jsx("div",{className:"fixed right-4 bottom-4 z-50 hidden lg:block",children:jsx("div",{className:"flex flex-col space-y-4",children:r&&jsx("a",{href:r.href,className:"group p-3 bg-white/80 backdrop-blur-sm border border-border rounded-full shadow-lg hover:shadow-2xl hover:bg-white/90 active:scale-95 transition-all duration-200",title:`\uB2E4\uC74C: ${r.title}`,children:jsx("svg",{className:"w-5 h-5 text-muted-foreground group-hover:text-indigo-600 group-active:text-indigo-800 transition-colors",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})})})}),jsx("div",{ref:v,className:a$1("container mx-auto px-4 py-8",c),...f,children:jsxs("div",{className:"max-w-4xl mx-auto",children:[jsx(a,{className:"mb-6",children:i.map((s,a)=>jsx(b,{href:s.href,isCurrent:a===i.length-1,children:s.label},a))}),jsxs("div",{className:"mb-8",children:[jsx("h1",{className:"text-4xl font-bold mb-4",children:m}),jsx("p",{className:"text-lg text-muted-foreground",children:h})]}),jsx("div",{className:"space-y-8",children:u}),jsx("div",{className:"mt-12 lg:hidden",children:jsxs("div",{className:"flex items-center justify-between py-4 border-t border-border",children:[t&&jsxs("a",{href:t.href,className:"flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors",children:[jsx("svg",{className:"w-4 h-4 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"})}),t.title]}),r&&jsxs("a",{href:r.href,className:"flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors",children:[r.title,jsx("svg",{className:"w-4 h-4 ml-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})})]})]})})]})})]}));p.displayName="ComponentLayout";export{p as a};//# sourceMappingURL=chunk-TAP6MYDW.mjs.map
3
+ //# sourceMappingURL=chunk-TAP6MYDW.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ComponentLayout.tsx"],"names":["ComponentLayout","React","className","title","description","children","prevPage","nextPage","breadcrumbItems","props","ref","jsxs","jsx","merge","Breadcrumb","item","index","BreadcrumbItem"],"mappings":"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","file":"chunk-FX57OSYG.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Breadcrumb, BreadcrumbItem } from \"./Breadcrumb\"\n\n/**\n * ComponentLayout 컴포넌트의 props / ComponentLayout component props\n * @typedef {Object} ComponentLayoutProps\n * @property {string} title - 페이지 제목 / Page title\n * @property {string} description - 페이지 설명 / Page description\n * @property {React.ReactNode} children - 페이지 내용 / Page content\n * @property {Object} [prevPage] - 이전 페이지 정보 / Previous page information\n * @property {string} prevPage.title - 이전 페이지 제목 / Previous page title\n * @property {string} prevPage.href - 이전 페이지 링크 / Previous page link\n * @property {Object} [nextPage] - 다음 페이지 정보 / Next page information\n * @property {string} nextPage.title - 다음 페이지 제목 / Next page title\n * @property {string} nextPage.href - 다음 페이지 링크 / Next page link\n * @property {Array<Object>} [breadcrumbItems] - Breadcrumb 항목들 / Breadcrumb items\n * @property {string} breadcrumbItems[].label - Breadcrumb 라벨 / Breadcrumb label\n * @property {string} [breadcrumbItems[].href] - Breadcrumb 링크 / Breadcrumb link\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface ComponentLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string\n description: string\n children: React.ReactNode\n prevPage?: {\n title: string\n href: string\n }\n nextPage?: {\n title: string\n href: string\n }\n breadcrumbItems?: Array<{\n label: string\n href?: string\n }>\n}\n\n/**\n * ComponentLayout 컴포넌트 / ComponentLayout component\n * \n * 컴포넌트 문서 페이지 레이아웃을 제공하는 컴포넌트입니다.\n * 제목, 설명, Breadcrumb, 이전/다음 페이지 네비게이션을 포함합니다.\n * \n * Component that provides layout for component documentation pages.\n * Includes title, description, Breadcrumb, and previous/next page navigation.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <ComponentLayout\n * title=\"Button 컴포넌트\"\n * description=\"버튼 컴포넌트 사용법\"\n * >\n * <Button>예제</Button>\n * </ComponentLayout>\n * \n * @example\n * // 이전/다음 페이지 네비게이션 포함 / With previous/next page navigation\n * <ComponentLayout\n * title=\"Input 컴포넌트\"\n * description=\"입력 컴포넌트 사용법\"\n * prevPage={{ title: \"Button\", href: \"/components/button\" }}\n * nextPage={{ title: \"Select\", href: \"/components/select\" }}\n * >\n * <Input placeholder=\"입력하세요\" />\n * </ComponentLayout>\n * \n * @param {ComponentLayoutProps} props - ComponentLayout 컴포넌트의 props / ComponentLayout component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ComponentLayout 컴포넌트 / ComponentLayout component\n */\nconst ComponentLayout = React.forwardRef<HTMLDivElement, ComponentLayoutProps>(\n ({ \n className, \n title, \n description, \n children, \n prevPage, \n nextPage,\n breadcrumbItems = [\n { label: \"Components\", href: \"/components\" }\n ],\n ...props \n }, ref) => {\n return (\n <div className=\"relative min-h-screen\">\n {/* 고정된 페이지 네비게이션 - 위쪽 */}\n <div className=\"fixed right-4 top-4 z-50 hidden lg:block\">\n <div className=\"flex flex-col space-y-4\">\n {prevPage && (\n <a\n href={prevPage.href}\n className=\"group p-3 bg-white/80 backdrop-blur-sm border border-border rounded-full shadow-lg hover:shadow-2xl hover:bg-white/90 active:scale-95 transition-all duration-200\"\n title={`이전: ${prevPage.title}`}\n >\n <svg\n className=\"w-5 h-5 text-muted-foreground group-hover:text-indigo-600 group-active:text-indigo-800 transition-colors\" \n fill=\"none\" \n stroke=\"currentColor\" \n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 15l7-7 7 7\" />\n </svg>\n </a>\n )}\n </div>\n </div>\n\n {/* 고정된 페이지 네비게이션 - 아래쪽 */}\n <div className=\"fixed right-4 bottom-4 z-50 hidden lg:block\">\n <div className=\"flex flex-col space-y-4\">\n {nextPage && (\n <a\n href={nextPage.href}\n className=\"group p-3 bg-white/80 backdrop-blur-sm border border-border rounded-full shadow-lg hover:shadow-2xl hover:bg-white/90 active:scale-95 transition-all duration-200\"\n title={`다음: ${nextPage.title}`}\n >\n <svg\n className=\"w-5 h-5 text-muted-foreground group-hover:text-indigo-600 group-active:text-indigo-800 transition-colors\" \n fill=\"none\" \n stroke=\"currentColor\" \n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </a>\n )}\n </div>\n </div>\n\n {/* 메인 콘텐츠 */}\n <div\n ref={ref}\n className={merge(\"container mx-auto px-4 py-8\", className)}\n {...props}\n >\n <div className=\"max-w-4xl mx-auto\">\n {/* 브레드크럼 */}\n <Breadcrumb className=\"mb-6\">\n {breadcrumbItems.map((item, index) => (\n <BreadcrumbItem \n key={index}\n href={item.href}\n isCurrent={index === breadcrumbItems.length - 1}\n >\n {item.label}\n </BreadcrumbItem>\n ))}\n </Breadcrumb>\n\n {/* 페이지 헤더 */}\n <div className=\"mb-8\">\n <h1 className=\"text-4xl font-bold mb-4\">{title}</h1>\n <p className=\"text-lg text-muted-foreground\">\n {description}\n </p>\n </div>\n\n {/* 페이지 콘텐츠 */}\n <div className=\"space-y-8\">\n {children}\n </div>\n\n {/* 모바일 페이지 네비게이션 */}\n <div className=\"mt-12 lg:hidden\">\n <div className=\"flex items-center justify-between py-4 border-t border-border\">\n {prevPage && (\n <a\n href={prevPage.href}\n className=\"flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n <svg className=\"w-4 h-4 mr-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n {prevPage.title}\n </a>\n )}\n {nextPage && (\n <a\n href={nextPage.href}\n className=\"flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n {nextPage.title}\n <svg className=\"w-4 h-4 ml-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </a>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n }\n)\nComponentLayout.displayName = \"ComponentLayout\"\n\nexport { ComponentLayout } "]}
1
+ {"version":3,"sources":["../src/components/ComponentLayout.tsx"],"names":["ComponentLayout","React","className","title","description","children","prevPage","nextPage","breadcrumbItems","props","ref","jsxs","jsx","merge","Breadcrumb","item","index","BreadcrumbItem"],"mappings":"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","file":"chunk-TAP6MYDW.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Breadcrumb, BreadcrumbItem } from \"./Breadcrumb\"\n\n/**\n * ComponentLayout 컴포넌트의 props / ComponentLayout component props\n * @typedef {Object} ComponentLayoutProps\n * @property {string} title - 페이지 제목 / Page title\n * @property {string} description - 페이지 설명 / Page description\n * @property {React.ReactNode} children - 페이지 내용 / Page content\n * @property {Object} [prevPage] - 이전 페이지 정보 / Previous page information\n * @property {string} prevPage.title - 이전 페이지 제목 / Previous page title\n * @property {string} prevPage.href - 이전 페이지 링크 / Previous page link\n * @property {Object} [nextPage] - 다음 페이지 정보 / Next page information\n * @property {string} nextPage.title - 다음 페이지 제목 / Next page title\n * @property {string} nextPage.href - 다음 페이지 링크 / Next page link\n * @property {Array<Object>} [breadcrumbItems] - Breadcrumb 항목들 / Breadcrumb items\n * @property {string} breadcrumbItems[].label - Breadcrumb 라벨 / Breadcrumb label\n * @property {string} [breadcrumbItems[].href] - Breadcrumb 링크 / Breadcrumb link\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface ComponentLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string\n description: string\n children: React.ReactNode\n prevPage?: {\n title: string\n href: string\n }\n nextPage?: {\n title: string\n href: string\n }\n breadcrumbItems?: Array<{\n label: string\n href?: string\n }>\n}\n\n/**\n * ComponentLayout 컴포넌트 / ComponentLayout component\n * \n * 컴포넌트 문서 페이지 레이아웃을 제공하는 컴포넌트입니다.\n * 제목, 설명, Breadcrumb, 이전/다음 페이지 네비게이션을 포함합니다.\n * \n * Component that provides layout for component documentation pages.\n * Includes title, description, Breadcrumb, and previous/next page navigation.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <ComponentLayout\n * title=\"Button 컴포넌트\"\n * description=\"버튼 컴포넌트 사용법\"\n * >\n * <Button>예제</Button>\n * </ComponentLayout>\n * \n * @example\n * // 이전/다음 페이지 네비게이션 포함 / With previous/next page navigation\n * <ComponentLayout\n * title=\"Input 컴포넌트\"\n * description=\"입력 컴포넌트 사용법\"\n * prevPage={{ title: \"Button\", href: \"/components/button\" }}\n * nextPage={{ title: \"Select\", href: \"/components/select\" }}\n * >\n * <Input placeholder=\"입력하세요\" />\n * </ComponentLayout>\n * \n * @param {ComponentLayoutProps} props - ComponentLayout 컴포넌트의 props / ComponentLayout component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ComponentLayout 컴포넌트 / ComponentLayout component\n */\nconst ComponentLayout = React.forwardRef<HTMLDivElement, ComponentLayoutProps>(\n ({ \n className, \n title, \n description, \n children, \n prevPage, \n nextPage,\n breadcrumbItems = [\n { label: \"Components\", href: \"/components\" }\n ],\n ...props \n }, ref) => {\n return (\n <div className=\"relative min-h-screen\">\n {/* 고정된 페이지 네비게이션 - 위쪽 */}\n <div className=\"fixed right-4 top-4 z-50 hidden lg:block\">\n <div className=\"flex flex-col space-y-4\">\n {prevPage && (\n <a\n href={prevPage.href}\n className=\"group p-3 bg-white/80 backdrop-blur-sm border border-border rounded-full shadow-lg hover:shadow-2xl hover:bg-white/90 active:scale-95 transition-all duration-200\"\n title={`이전: ${prevPage.title}`}\n >\n <svg\n className=\"w-5 h-5 text-muted-foreground group-hover:text-indigo-600 group-active:text-indigo-800 transition-colors\" \n fill=\"none\" \n stroke=\"currentColor\" \n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 15l7-7 7 7\" />\n </svg>\n </a>\n )}\n </div>\n </div>\n\n {/* 고정된 페이지 네비게이션 - 아래쪽 */}\n <div className=\"fixed right-4 bottom-4 z-50 hidden lg:block\">\n <div className=\"flex flex-col space-y-4\">\n {nextPage && (\n <a\n href={nextPage.href}\n className=\"group p-3 bg-white/80 backdrop-blur-sm border border-border rounded-full shadow-lg hover:shadow-2xl hover:bg-white/90 active:scale-95 transition-all duration-200\"\n title={`다음: ${nextPage.title}`}\n >\n <svg\n className=\"w-5 h-5 text-muted-foreground group-hover:text-indigo-600 group-active:text-indigo-800 transition-colors\" \n fill=\"none\" \n stroke=\"currentColor\" \n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </a>\n )}\n </div>\n </div>\n\n {/* 메인 콘텐츠 */}\n <div\n ref={ref}\n className={merge(\"container mx-auto px-4 py-8\", className)}\n {...props}\n >\n <div className=\"max-w-4xl mx-auto\">\n {/* 브레드크럼 */}\n <Breadcrumb className=\"mb-6\">\n {breadcrumbItems.map((item, index) => (\n <BreadcrumbItem \n key={index}\n href={item.href}\n isCurrent={index === breadcrumbItems.length - 1}\n >\n {item.label}\n </BreadcrumbItem>\n ))}\n </Breadcrumb>\n\n {/* 페이지 헤더 */}\n <div className=\"mb-8\">\n <h1 className=\"text-4xl font-bold mb-4\">{title}</h1>\n <p className=\"text-lg text-muted-foreground\">\n {description}\n </p>\n </div>\n\n {/* 페이지 콘텐츠 */}\n <div className=\"space-y-8\">\n {children}\n </div>\n\n {/* 모바일 페이지 네비게이션 */}\n <div className=\"mt-12 lg:hidden\">\n <div className=\"flex items-center justify-between py-4 border-t border-border\">\n {prevPage && (\n <a\n href={prevPage.href}\n className=\"flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n <svg className=\"w-4 h-4 mr-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n {prevPage.title}\n </a>\n )}\n {nextPage && (\n <a\n href={nextPage.href}\n className=\"flex items-center text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n {nextPage.title}\n <svg className=\"w-4 h-4 ml-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </a>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n }\n)\nComponentLayout.displayName = \"ComponentLayout\"\n\nexport { ComponentLayout } "]}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import {a as a$1,b as b$1,c,d,e}from'./chunk-6HVJFEDA.mjs';import {a}from'./chunk-3CCF7U3P.mjs';import {b}from'./chunk-U6CTBZ2U.mjs';import S from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var g=S.forwardRef(({className:u,value:r,max:c=100,size:l="md",color:m="blue",...o},d)=>{let v={sm:"h-2",md:"h-3",lg:"h-4"},N={blue:"bg-indigo-500",green:"bg-green-500",yellow:"bg-yellow-500",red:"bg-red-500",purple:"bg-purple-500",orange:"bg-orange-500",indigo:"bg-indigo-500",pink:"bg-pink-500",gray:"bg-gray-500"},p=Math.min(Math.max(r/c*100,0),100);return jsx("div",{ref:d,className:b("w-full bg-muted rounded-full",v[l],u),...o,children:jsx("div",{className:b("h-full rounded-full transition-all duration-300",N[m]||N.blue),style:{width:`${p}%`}})})});g.displayName="EmotionMeter";var C=S.forwardRef(({className:u,emotion:r,isSelected:c=false,size:l="md",...m},o)=>jsx("button",{ref:o,className:b("rounded-full border-2 transition-all duration-200 hover:scale-105 focus:outline-none focus:ring-1 focus:ring-ring",{sm:"w-8 h-8 text-sm",md:"w-12 h-12 text-lg",lg:"w-16 h-16 text-xl"}[l],c?"border-indigo-500 bg-indigo-50 dark:bg-indigo-900/20":"border-border bg-background",u),...m,children:r}));C.displayName="EmotionButton";var F=[{key:"joy",label:"\uAE30\uC068",icon:"smile",color:"yellow"},{key:"sadness",label:"\uC2AC\uD514",icon:"frown",color:"blue"},{key:"anger",label:"\uD654\uB0A8",icon:"angry",color:"red"},{key:"calm",label:"\uD3C9\uC628",icon:"heart",color:"green"},{key:"excitement",label:"\uC124\uB818",icon:"star",color:"pink"},{key:"worry",label:"\uAC71\uC815",icon:"meh",color:"gray"},{key:"gratitude",label:"\uAC10\uC0AC",icon:"heart",color:"purple"},{key:"loneliness",label:"\uC678\uB85C\uC6C0",icon:"user",color:"indigo"}],T=S.forwardRef(({className:u,selectedEmotion:r,onEmotionSelect:c,layout:l="grid",showIntensity:m=false,intensity:o=50,onIntensityChange:d,emotions:v=F,size:N="md",variant:p="button",...y},w)=>{let x=s=>{c==null||c(s);},h=s=>{let f=r===s.key;return p==="button"?jsx(C,{emotion:s.key,isSelected:f,size:N,onClick:()=>x(s.key),className:b("transition-all duration-200",f&&"ring-1 ring-offset-2 ring-primary"),children:s.label},s.key):p==="card"?jsx("div",{className:b("p-4 rounded-lg border-2 cursor-pointer transition-all duration-200 hover:shadow-md",f?"border-primary bg-primary/5":"border-border hover:border-primary/50"),onClick:()=>x(s.key),children:jsxs("div",{className:"flex items-center space-x-3",children:[jsx("div",{className:b("w-8 h-8 rounded-full flex items-center justify-center",f?"bg-primary text-primary-foreground":"bg-muted"),children:s.icon&&jsxs("span",{className:"text-lg",children:[s.icon==="smile"&&"\u{1F60A}",s.icon==="frown"&&"\u{1F622}",s.icon==="angry"&&"\u{1F620}",s.icon==="heart"&&"\u2764\uFE0F",s.icon==="star"&&"\u2B50",s.icon==="meh"&&"\u{1F610}",s.icon==="user"&&"\u{1F464}"]})}),jsx("span",{className:"font-medium truncate max-w-[120px]",children:s.label})]})},s.key):p==="chip"?jsx("div",{className:b("px-3 py-1 rounded-full cursor-pointer transition-all duration-200 text-sm font-medium",f?"bg-primary text-primary-foreground":"bg-muted hover:bg-muted/80"),onClick:()=>x(s.key),children:jsx("span",{className:"truncate max-w-[100px]",children:s.label})},s.key):null},E={grid:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-2 md:gap-3",list:"space-y-2",compact:"flex flex-wrap gap-1"};return jsxs("div",{ref:w,className:b("space-y-4",u),...y,children:[jsx("div",{className:E[l],children:v.map(h)}),m&&r&&jsxs("div",{className:"space-y-3",children:[jsxs("div",{className:"flex items-center justify-between",children:[jsx("span",{className:"text-sm font-medium",children:"\uAC10\uC815 \uAC15\uB3C4"}),jsxs("span",{className:"text-sm text-muted-foreground",children:[o,"%"]})]}),jsx("input",{type:"range",min:"0",max:"100",value:o,onChange:s=>d==null?void 0:d(Number(s.target.value)),className:"w-full h-2 bg-muted rounded-lg appearance-none cursor-pointer slider"}),jsxs("div",{className:"flex justify-between text-xs text-muted-foreground",children:[jsx("span",{children:"\uC57D\uD568"}),jsx("span",{children:"\uBCF4\uD1B5"}),jsx("span",{children:"\uAC15\uD568"})]})]}),r&&m&&jsx("div",{className:"flex justify-center",children:jsx(g,{value:o,size:"md",color:"blue"})})]})});T.displayName="EmotionSelector";var z=S.forwardRef(({className:u,primaryEmotion:r,emotionDistribution:c$1=[],keywords:l=[],intensity:m=50,positivity:o=70,energy:d$1=60,showMeter:v=true,showDistribution:N=true,showKeywords:p=true,showMetrics:y=true,layout:w="detailed",...x},h)=>{let E=a=>a<30?"\uC57D\uD568":a<70?"\uBCF4\uD1B5":"\uAC15\uD568",s=a=>a<30?"\uBD80\uC815\uC801":a<70?"\uC911\uB9BD\uC801":"\uAE0D\uC815\uC801",f=a=>a<30?"\uB0AE\uC74C":a<70?"\uBCF4\uD1B5":"\uB192\uC74C";return w==="compact"?jsxs("div",{ref:h,className:b("space-y-3",u),...x,children:[r&&jsxs("div",{className:"flex items-center justify-between",children:[jsx("span",{className:"text-sm font-medium",children:"\uC8FC\uC694 \uAC10\uC815:"}),jsxs("div",{className:"flex items-center space-x-2",children:[jsxs("span",{className:"text-sm text-muted-foreground",children:[r.name," (",r.intensity,"%)"]}),v&&jsx(g,{value:r.intensity,size:"sm",color:"blue"})]})]}),y&&jsxs(Fragment,{children:[jsxs("div",{className:"flex items-center justify-between",children:[jsx("span",{className:"text-sm font-medium",children:"\uAC10\uC815 \uAC15\uB3C4:"}),jsx("span",{className:"text-sm text-muted-foreground",children:E(m)})]}),jsxs("div",{className:"flex items-center justify-between",children:[jsx("span",{className:"text-sm font-medium",children:"\uAE0D\uC815\uC131:"}),jsx("span",{className:"text-sm text-muted-foreground",children:s(o)})]}),jsxs("div",{className:"flex items-center justify-between",children:[jsx("span",{className:"text-sm font-medium",children:"\uC5D0\uB108\uC9C0:"}),jsx("span",{className:"text-sm text-muted-foreground",children:f(d$1)})]})]}),p&&l.length>0&&jsxs("div",{children:[jsx("span",{className:"text-sm font-medium",children:"\uD0A4\uC6CC\uB4DC:"}),jsx("div",{className:"flex flex-wrap gap-1 mt-1",children:l.map(a$1=>jsx(a,{variant:"secondary",className:"text-xs",children:a$1},a$1))})]})]}):w==="card"?jsxs(a$1,{ref:h,className:b("",u),...x,children:[jsxs(b$1,{children:[jsxs(c,{className:"flex items-center",children:[jsx("span",{className:"text-2xl mr-2",children:"\u2728"}),"AI \uBD84\uC11D"]}),jsx(d,{children:"\uAC10\uC815 \uBD84\uC11D \uACB0\uACFC"})]}),jsxs(e,{className:"space-y-4",children:[r&&jsxs("div",{className:"space-y-3",children:[jsxs("div",{className:"text-sm",children:[jsx("span",{className:"font-medium",children:"\uC8FC\uC694 \uAC10\uC815:"}),jsxs("span",{className:"ml-2 text-muted-foreground",children:[r.name," (",r.intensity,"%)"]})]}),v&&jsx("div",{className:"flex justify-center",children:jsx(g,{value:r.intensity,size:"md",color:"blue"})})]}),y&&jsxs(Fragment,{children:[jsxs("div",{className:"text-sm",children:[jsx("span",{className:"font-medium",children:"\uAC10\uC815 \uAC15\uB3C4:"}),jsx("span",{className:"ml-2 text-muted-foreground",children:E(m)})]}),jsxs("div",{className:"text-sm",children:[jsx("span",{className:"font-medium",children:"\uAE0D\uC815\uC131:"}),jsx("span",{className:"ml-2 text-muted-foreground",children:s(o)})]}),jsxs("div",{className:"text-sm",children:[jsx("span",{className:"font-medium",children:"\uC5D0\uB108\uC9C0:"}),jsx("span",{className:"ml-2 text-muted-foreground",children:f(d$1)})]})]}),p&&l.length>0&&jsxs("div",{className:"text-sm",children:[jsx("span",{className:"font-medium",children:"\uD0A4\uC6CC\uB4DC:"}),jsx("div",{className:"flex flex-wrap gap-1 mt-1",children:l.map(a$1=>jsx(a,{variant:"secondary",className:"text-xs",children:a$1},a$1))})]})]})]}):jsxs("div",{ref:h,className:b("space-y-6",u),...x,children:[r&&jsxs("div",{className:"space-y-4",children:[jsx("h3",{className:"text-lg font-semibold",children:"\uC8FC\uC694 \uAC10\uC815"}),jsxs("div",{className:"flex items-center space-x-4",children:[jsxs("div",{className:"text-center",children:[jsx("div",{className:"text-2xl font-bold text-primary",children:r.name}),jsxs("div",{className:"text-sm text-muted-foreground",children:[r.intensity,"% \uAC15\uB3C4"]})]}),v&&jsx(g,{value:r.intensity,size:"lg",color:"blue"})]})]}),N&&c$1.length>0&&jsxs("div",{className:"space-y-4",children:[jsx("h3",{className:"text-lg font-semibold",children:"\uAC10\uC815 \uBD84\uD3EC"}),jsx("div",{className:"space-y-3",children:c$1.map((a,D)=>jsxs("div",{className:"space-y-2",children:[jsxs("div",{className:"flex items-center justify-between",children:[jsx("span",{className:"text-sm font-medium",children:a.emotion}),jsxs("span",{className:"text-sm text-muted-foreground",children:[a.percentage,"%"]})]}),jsx("div",{className:"w-full bg-muted rounded-full h-2",children:jsx("div",{className:`${a.color} h-2 rounded-full transition-all duration-300`,style:{width:`${a.percentage}%`}})})]},D))})]}),y&&jsxs("div",{className:"space-y-4",children:[jsx("h3",{className:"text-lg font-semibold",children:"\uBD84\uC11D \uC9C0\uD45C"}),jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[jsxs("div",{className:"space-y-2",children:[jsx("div",{className:"text-sm font-medium",children:"\uAC10\uC815 \uAC15\uB3C4"}),jsx("div",{className:"text-2xl font-bold text-primary",children:E(m)}),jsx("div",{className:"w-full bg-muted rounded-full h-2",children:jsx("div",{className:"bg-primary h-2 rounded-full transition-all duration-300",style:{width:`${m}%`}})})]}),jsxs("div",{className:"space-y-2",children:[jsx("div",{className:"text-sm font-medium",children:"\uAE0D\uC815\uC131"}),jsx("div",{className:"text-2xl font-bold text-green-600",children:s(o)}),jsx("div",{className:"w-full bg-muted rounded-full h-2",children:jsx("div",{className:"bg-green-500 h-2 rounded-full transition-all duration-300",style:{width:`${o}%`}})})]}),jsxs("div",{className:"space-y-2",children:[jsx("div",{className:"text-sm font-medium",children:"\uC5D0\uB108\uC9C0"}),jsx("div",{className:"text-2xl font-bold text-orange-600",children:f(d$1)}),jsx("div",{className:"w-full bg-muted rounded-full h-2",children:jsx("div",{className:"bg-orange-500 h-2 rounded-full transition-all duration-300",style:{width:`${d$1}%`}})})]})]})]}),p&&l.length>0&&jsxs("div",{className:"space-y-4",children:[jsx("h3",{className:"text-lg font-semibold",children:"\uAC10\uC815 \uD0A4\uC6CC\uB4DC"}),jsx("div",{className:"flex flex-wrap gap-2",children:l.map(a$1=>jsx(a,{variant:"outline",className:"text-sm",children:a$1},a$1))})]})]})});z.displayName="EmotionAnalysis";export{g as a,C as b,T as c,z as d};//# sourceMappingURL=chunk-WP7VFE77.mjs.map
3
- //# sourceMappingURL=chunk-WP7VFE77.mjs.map
2
+ import {a as a$2,b,c,d,e}from'./chunk-CW66UBQG.mjs';import {a as a$1}from'./chunk-J47ZEXEL.mjs';import {a}from'./chunk-QEMPERUK.mjs';import S from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var g=S.forwardRef(({className:u,value:r,max:c=100,size:l="md",color:m="blue",...o},d)=>{let v={sm:"h-2",md:"h-3",lg:"h-4"},N={blue:"bg-indigo-500",green:"bg-green-500",yellow:"bg-yellow-500",red:"bg-red-500",purple:"bg-purple-500",orange:"bg-orange-500",indigo:"bg-indigo-500",pink:"bg-pink-500",gray:"bg-gray-500"},p=Math.min(Math.max(r/c*100,0),100);return jsx("div",{ref:d,className:a("w-full bg-muted rounded-full",v[l],u),...o,children:jsx("div",{className:a("h-full rounded-full transition-all duration-300",N[m]||N.blue),style:{width:`${p}%`}})})});g.displayName="EmotionMeter";var C=S.forwardRef(({className:u,emotion:r,isSelected:c=false,size:l="md",...m},o)=>jsx("button",{ref:o,className:a("rounded-full border-2 transition-all duration-200 hover:scale-105 focus:outline-none focus:ring-1 focus:ring-ring",{sm:"w-8 h-8 text-sm",md:"w-12 h-12 text-lg",lg:"w-16 h-16 text-xl"}[l],c?"border-indigo-500 bg-indigo-50 dark:bg-indigo-900/20":"border-border bg-background",u),...m,children:r}));C.displayName="EmotionButton";var F=[{key:"joy",label:"\uAE30\uC068",icon:"smile",color:"yellow"},{key:"sadness",label:"\uC2AC\uD514",icon:"frown",color:"blue"},{key:"anger",label:"\uD654\uB0A8",icon:"angry",color:"red"},{key:"calm",label:"\uD3C9\uC628",icon:"heart",color:"green"},{key:"excitement",label:"\uC124\uB818",icon:"star",color:"pink"},{key:"worry",label:"\uAC71\uC815",icon:"meh",color:"gray"},{key:"gratitude",label:"\uAC10\uC0AC",icon:"heart",color:"purple"},{key:"loneliness",label:"\uC678\uB85C\uC6C0",icon:"user",color:"indigo"}],T=S.forwardRef(({className:u,selectedEmotion:r,onEmotionSelect:c,layout:l="grid",showIntensity:m=false,intensity:o=50,onIntensityChange:d,emotions:v=F,size:N="md",variant:p="button",...y},w)=>{let x=s=>{c==null||c(s);},h=s=>{let f=r===s.key;return p==="button"?jsx(C,{emotion:s.key,isSelected:f,size:N,onClick:()=>x(s.key),className:a("transition-all duration-200",f&&"ring-1 ring-offset-2 ring-primary"),children:s.label},s.key):p==="card"?jsx("div",{className:a("p-4 rounded-lg border-2 cursor-pointer transition-all duration-200 hover:shadow-md",f?"border-primary bg-primary/5":"border-border hover:border-primary/50"),onClick:()=>x(s.key),children:jsxs("div",{className:"flex items-center space-x-3",children:[jsx("div",{className:a("w-8 h-8 rounded-full flex items-center justify-center",f?"bg-primary text-primary-foreground":"bg-muted"),children:s.icon&&jsxs("span",{className:"text-lg",children:[s.icon==="smile"&&"\u{1F60A}",s.icon==="frown"&&"\u{1F622}",s.icon==="angry"&&"\u{1F620}",s.icon==="heart"&&"\u2764\uFE0F",s.icon==="star"&&"\u2B50",s.icon==="meh"&&"\u{1F610}",s.icon==="user"&&"\u{1F464}"]})}),jsx("span",{className:"font-medium truncate max-w-[120px]",children:s.label})]})},s.key):p==="chip"?jsx("div",{className:a("px-3 py-1 rounded-full cursor-pointer transition-all duration-200 text-sm font-medium",f?"bg-primary text-primary-foreground":"bg-muted hover:bg-muted/80"),onClick:()=>x(s.key),children:jsx("span",{className:"truncate max-w-[100px]",children:s.label})},s.key):null},E={grid:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-2 md:gap-3",list:"space-y-2",compact:"flex flex-wrap gap-1"};return jsxs("div",{ref:w,className:a("space-y-4",u),...y,children:[jsx("div",{className:E[l],children:v.map(h)}),m&&r&&jsxs("div",{className:"space-y-3",children:[jsxs("div",{className:"flex items-center justify-between",children:[jsx("span",{className:"text-sm font-medium",children:"\uAC10\uC815 \uAC15\uB3C4"}),jsxs("span",{className:"text-sm text-muted-foreground",children:[o,"%"]})]}),jsx("input",{type:"range",min:"0",max:"100",value:o,onChange:s=>d==null?void 0:d(Number(s.target.value)),className:"w-full h-2 bg-muted rounded-lg appearance-none cursor-pointer slider"}),jsxs("div",{className:"flex justify-between text-xs text-muted-foreground",children:[jsx("span",{children:"\uC57D\uD568"}),jsx("span",{children:"\uBCF4\uD1B5"}),jsx("span",{children:"\uAC15\uD568"})]})]}),r&&m&&jsx("div",{className:"flex justify-center",children:jsx(g,{value:o,size:"md",color:"blue"})})]})});T.displayName="EmotionSelector";var z=S.forwardRef(({className:u,primaryEmotion:r,emotionDistribution:c$1=[],keywords:l=[],intensity:m=50,positivity:o=70,energy:d$1=60,showMeter:v=true,showDistribution:N=true,showKeywords:p=true,showMetrics:y=true,layout:w="detailed",...x},h)=>{let E=a=>a<30?"\uC57D\uD568":a<70?"\uBCF4\uD1B5":"\uAC15\uD568",s=a=>a<30?"\uBD80\uC815\uC801":a<70?"\uC911\uB9BD\uC801":"\uAE0D\uC815\uC801",f=a=>a<30?"\uB0AE\uC74C":a<70?"\uBCF4\uD1B5":"\uB192\uC74C";return w==="compact"?jsxs("div",{ref:h,className:a("space-y-3",u),...x,children:[r&&jsxs("div",{className:"flex items-center justify-between",children:[jsx("span",{className:"text-sm font-medium",children:"\uC8FC\uC694 \uAC10\uC815:"}),jsxs("div",{className:"flex items-center space-x-2",children:[jsxs("span",{className:"text-sm text-muted-foreground",children:[r.name," (",r.intensity,"%)"]}),v&&jsx(g,{value:r.intensity,size:"sm",color:"blue"})]})]}),y&&jsxs(Fragment,{children:[jsxs("div",{className:"flex items-center justify-between",children:[jsx("span",{className:"text-sm font-medium",children:"\uAC10\uC815 \uAC15\uB3C4:"}),jsx("span",{className:"text-sm text-muted-foreground",children:E(m)})]}),jsxs("div",{className:"flex items-center justify-between",children:[jsx("span",{className:"text-sm font-medium",children:"\uAE0D\uC815\uC131:"}),jsx("span",{className:"text-sm text-muted-foreground",children:s(o)})]}),jsxs("div",{className:"flex items-center justify-between",children:[jsx("span",{className:"text-sm font-medium",children:"\uC5D0\uB108\uC9C0:"}),jsx("span",{className:"text-sm text-muted-foreground",children:f(d$1)})]})]}),p&&l.length>0&&jsxs("div",{children:[jsx("span",{className:"text-sm font-medium",children:"\uD0A4\uC6CC\uB4DC:"}),jsx("div",{className:"flex flex-wrap gap-1 mt-1",children:l.map(a=>jsx(a$1,{variant:"secondary",className:"text-xs",children:a},a))})]})]}):w==="card"?jsxs(a$2,{ref:h,className:a("",u),...x,children:[jsxs(b,{children:[jsxs(c,{className:"flex items-center",children:[jsx("span",{className:"text-2xl mr-2",children:"\u2728"}),"AI \uBD84\uC11D"]}),jsx(d,{children:"\uAC10\uC815 \uBD84\uC11D \uACB0\uACFC"})]}),jsxs(e,{className:"space-y-4",children:[r&&jsxs("div",{className:"space-y-3",children:[jsxs("div",{className:"text-sm",children:[jsx("span",{className:"font-medium",children:"\uC8FC\uC694 \uAC10\uC815:"}),jsxs("span",{className:"ml-2 text-muted-foreground",children:[r.name," (",r.intensity,"%)"]})]}),v&&jsx("div",{className:"flex justify-center",children:jsx(g,{value:r.intensity,size:"md",color:"blue"})})]}),y&&jsxs(Fragment,{children:[jsxs("div",{className:"text-sm",children:[jsx("span",{className:"font-medium",children:"\uAC10\uC815 \uAC15\uB3C4:"}),jsx("span",{className:"ml-2 text-muted-foreground",children:E(m)})]}),jsxs("div",{className:"text-sm",children:[jsx("span",{className:"font-medium",children:"\uAE0D\uC815\uC131:"}),jsx("span",{className:"ml-2 text-muted-foreground",children:s(o)})]}),jsxs("div",{className:"text-sm",children:[jsx("span",{className:"font-medium",children:"\uC5D0\uB108\uC9C0:"}),jsx("span",{className:"ml-2 text-muted-foreground",children:f(d$1)})]})]}),p&&l.length>0&&jsxs("div",{className:"text-sm",children:[jsx("span",{className:"font-medium",children:"\uD0A4\uC6CC\uB4DC:"}),jsx("div",{className:"flex flex-wrap gap-1 mt-1",children:l.map(a=>jsx(a$1,{variant:"secondary",className:"text-xs",children:a},a))})]})]})]}):jsxs("div",{ref:h,className:a("space-y-6",u),...x,children:[r&&jsxs("div",{className:"space-y-4",children:[jsx("h3",{className:"text-lg font-semibold",children:"\uC8FC\uC694 \uAC10\uC815"}),jsxs("div",{className:"flex items-center space-x-4",children:[jsxs("div",{className:"text-center",children:[jsx("div",{className:"text-2xl font-bold text-primary",children:r.name}),jsxs("div",{className:"text-sm text-muted-foreground",children:[r.intensity,"% \uAC15\uB3C4"]})]}),v&&jsx(g,{value:r.intensity,size:"lg",color:"blue"})]})]}),N&&c$1.length>0&&jsxs("div",{className:"space-y-4",children:[jsx("h3",{className:"text-lg font-semibold",children:"\uAC10\uC815 \uBD84\uD3EC"}),jsx("div",{className:"space-y-3",children:c$1.map((a,D)=>jsxs("div",{className:"space-y-2",children:[jsxs("div",{className:"flex items-center justify-between",children:[jsx("span",{className:"text-sm font-medium",children:a.emotion}),jsxs("span",{className:"text-sm text-muted-foreground",children:[a.percentage,"%"]})]}),jsx("div",{className:"w-full bg-muted rounded-full h-2",children:jsx("div",{className:`${a.color} h-2 rounded-full transition-all duration-300`,style:{width:`${a.percentage}%`}})})]},D))})]}),y&&jsxs("div",{className:"space-y-4",children:[jsx("h3",{className:"text-lg font-semibold",children:"\uBD84\uC11D \uC9C0\uD45C"}),jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[jsxs("div",{className:"space-y-2",children:[jsx("div",{className:"text-sm font-medium",children:"\uAC10\uC815 \uAC15\uB3C4"}),jsx("div",{className:"text-2xl font-bold text-primary",children:E(m)}),jsx("div",{className:"w-full bg-muted rounded-full h-2",children:jsx("div",{className:"bg-primary h-2 rounded-full transition-all duration-300",style:{width:`${m}%`}})})]}),jsxs("div",{className:"space-y-2",children:[jsx("div",{className:"text-sm font-medium",children:"\uAE0D\uC815\uC131"}),jsx("div",{className:"text-2xl font-bold text-green-600",children:s(o)}),jsx("div",{className:"w-full bg-muted rounded-full h-2",children:jsx("div",{className:"bg-green-500 h-2 rounded-full transition-all duration-300",style:{width:`${o}%`}})})]}),jsxs("div",{className:"space-y-2",children:[jsx("div",{className:"text-sm font-medium",children:"\uC5D0\uB108\uC9C0"}),jsx("div",{className:"text-2xl font-bold text-orange-600",children:f(d$1)}),jsx("div",{className:"w-full bg-muted rounded-full h-2",children:jsx("div",{className:"bg-orange-500 h-2 rounded-full transition-all duration-300",style:{width:`${d$1}%`}})})]})]})]}),p&&l.length>0&&jsxs("div",{className:"space-y-4",children:[jsx("h3",{className:"text-lg font-semibold",children:"\uAC10\uC815 \uD0A4\uC6CC\uB4DC"}),jsx("div",{className:"flex flex-wrap gap-2",children:l.map(a=>jsx(a$1,{variant:"outline",className:"text-sm",children:a},a))})]})]})});z.displayName="EmotionAnalysis";export{g as a,C as b,T as c,z as d};//# sourceMappingURL=chunk-TBZ645BI.mjs.map
3
+ //# sourceMappingURL=chunk-TBZ645BI.mjs.map