@hua-labs/ui 2.0.1 → 2.1.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.
- package/README.md +1 -1
- package/dist/{Switch-O4TpMKfQ.d.mts → Switch-Dzm5TLR3.d.mts} +1 -1
- package/dist/advanced/dashboard.d.ts.map +1 -1
- package/dist/advanced-dashboard.js +1 -1
- package/dist/advanced-dashboard.js.map +1 -1
- package/dist/advanced-dashboard.mjs +1 -1
- package/dist/advanced-emotion.js +1 -1
- package/dist/advanced-emotion.js.map +1 -1
- package/dist/advanced-emotion.mjs +1 -1
- package/dist/advanced-motion.js +5 -5
- package/dist/advanced-motion.js.map +1 -1
- package/dist/advanced-motion.mjs +1 -1
- package/dist/advanced.js +7 -7
- package/dist/advanced.js.map +1 -1
- package/dist/advanced.mjs +1 -1
- package/dist/chunk-BXX2TZUB.mjs +3 -0
- package/dist/chunk-BXX2TZUB.mjs.map +1 -0
- package/dist/{chunk-ECLIPN34.mjs → chunk-COR6CDMA.mjs} +3 -3
- package/dist/{chunk-ECLIPN34.mjs.map → chunk-COR6CDMA.mjs.map} +1 -1
- package/dist/chunk-HN5LSP6L.mjs +3 -0
- package/dist/chunk-HN5LSP6L.mjs.map +1 -0
- package/dist/{chunk-T3GU5BJ3.mjs → chunk-LOYAJIWO.mjs} +2 -2
- package/dist/{chunk-T3GU5BJ3.mjs.map → chunk-LOYAJIWO.mjs.map} +1 -1
- package/dist/{chunk-TOANBEPN.mjs → chunk-NBJUE7NR.mjs} +2 -2
- package/dist/{chunk-TOANBEPN.mjs.map → chunk-NBJUE7NR.mjs.map} +1 -1
- package/dist/{chunk-5BMH7223.mjs → chunk-PYBYZVSL.mjs} +2 -2
- package/dist/{chunk-5BMH7223.mjs.map → chunk-PYBYZVSL.mjs.map} +1 -1
- package/dist/{chunk-PQ3DBOMK.mjs → chunk-QQCELXFD.mjs} +2 -2
- package/dist/{chunk-PQ3DBOMK.mjs.map → chunk-QQCELXFD.mjs.map} +1 -1
- package/dist/{chunk-OI66ZLUB.mjs → chunk-UWHCM3S6.mjs} +2 -2
- package/dist/{chunk-OI66ZLUB.mjs.map → chunk-UWHCM3S6.mjs.map} +1 -1
- package/dist/{chunk-MYFMKCYX.mjs → chunk-XV3Y7QVU.mjs} +2 -2
- package/dist/{chunk-MYFMKCYX.mjs.map → chunk-XV3Y7QVU.mjs.map} +1 -1
- package/dist/components/Avatar.d.ts +1 -1
- package/dist/components/Avatar.d.ts.map +1 -1
- package/dist/components/Badge.d.ts +1 -1
- package/dist/components/Badge.d.ts.map +1 -1
- package/dist/components/Button.variants.d.ts +1 -1
- package/dist/components/Button.variants.d.ts.map +1 -1
- package/dist/components/Card.d.ts +1 -1
- package/dist/components/Card.d.ts.map +1 -1
- package/dist/components/CodeBlock.d.ts +1 -1
- package/dist/components/Container.d.ts +1 -1
- package/dist/components/Container.d.ts.map +1 -1
- package/dist/components/Grid.d.ts +1 -1
- package/dist/components/Grid.d.ts.map +1 -1
- package/dist/components/Icon/Icon.d.ts.map +1 -1
- package/dist/components/Input.d.ts +1 -1
- package/dist/components/Input.d.ts.map +1 -1
- package/dist/components/Label.d.ts +1 -1
- package/dist/components/Label.d.ts.map +1 -1
- package/dist/components/Link.d.ts +1 -1
- package/dist/components/Link.d.ts.map +1 -1
- package/dist/components/Panel.d.ts +1 -1
- package/dist/components/Panel.d.ts.map +1 -1
- package/dist/components/Progress.d.ts +2 -2
- package/dist/components/Progress.d.ts.map +1 -1
- package/dist/components/Select.d.ts +1 -1
- package/dist/components/Select.d.ts.map +1 -1
- package/dist/components/Skeleton.d.ts +1 -1
- package/dist/components/Skeleton.d.ts.map +1 -1
- package/dist/components/Stack.d.ts +1 -1
- package/dist/components/Stack.d.ts.map +1 -1
- package/dist/components/Textarea.d.ts +1 -1
- package/dist/components/Textarea.d.ts.map +1 -1
- package/dist/components/icons/essential.d.ts +68 -0
- package/dist/components/icons/essential.d.ts.map +1 -0
- package/dist/components/icons-bold/essential.d.ts +68 -0
- package/dist/components/icons-bold/essential.d.ts.map +1 -0
- package/dist/data.d.mts +1 -1
- package/dist/data.js.map +1 -1
- package/dist/data.mjs.map +1 -1
- package/dist/form.d.mts +1 -1
- package/dist/form.js +1 -1
- package/dist/form.js.map +1 -1
- package/dist/form.mjs +1 -1
- package/dist/iconsax-extended.d.ts +19 -0
- package/dist/iconsax-extended.d.ts.map +1 -0
- package/dist/iconsax-extended.js +3 -0
- package/dist/iconsax-extended.js.map +1 -0
- package/dist/iconsax-extended.mjs +4 -0
- package/dist/iconsax-extended.mjs.map +1 -0
- package/dist/iconsax.d.ts +10 -11
- package/dist/iconsax.d.ts.map +1 -1
- package/dist/iconsax.js +2 -2
- package/dist/iconsax.js.map +1 -1
- package/dist/iconsax.mjs +2 -2
- package/dist/iconsax.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/interactive.js +1 -1
- package/dist/interactive.js.map +1 -1
- package/dist/interactive.mjs +1 -1
- package/dist/lib/iconsax-loader.d.ts +15 -45
- package/dist/lib/iconsax-loader.d.ts.map +1 -1
- package/dist/navigation.js +2 -2
- package/dist/navigation.js.map +1 -1
- package/dist/navigation.mjs +1 -1
- package/dist/overlay.js +1 -1
- package/dist/overlay.js.map +1 -1
- package/dist/overlay.mjs +1 -1
- package/dist/sdui.js +3 -3
- package/dist/sdui.js.map +1 -1
- package/dist/sdui.mjs +1 -1
- package/package.json +23 -7
- package/src/components/icons/essential.ts +195 -0
- package/src/components/icons-bold/essential.ts +195 -0
- package/LICENSE +0 -21
- package/dist/chunk-AANHUMJ2.mjs +0 -3
- package/dist/chunk-AANHUMJ2.mjs.map +0 -1
- package/dist/chunk-FSL373O6.mjs +0 -3
- package/dist/chunk-FSL373O6.mjs.map +0 -1
- package/dist/components/icons/Frame2.d.ts +0 -4
- package/dist/components/icons/Frame2.d.ts.map +0 -1
- package/dist/components/icons/Group.d.ts +0 -4
- package/dist/components/icons/Group.d.ts.map +0 -1
- package/dist/components/icons/Group1.d.ts +0 -4
- package/dist/components/icons/Group1.d.ts.map +0 -1
- package/dist/components/icons/GroupCopy.d.ts +0 -4
- package/dist/components/icons/GroupCopy.d.ts.map +0 -1
- package/dist/iconsax.d.mts +0 -160
- package/src/components/icons/Frame2.tsx +0 -28
- package/src/components/icons/Group.tsx +0 -35
- package/src/components/icons/Group1.tsx +0 -21
- package/src/components/icons/GroupCopy.tsx +0 -21
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {l}from'./chunk-
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
2
|
+
import {l}from'./chunk-HN5LSP6L.mjs';import {a}from'./chunk-UUHAXGMO.mjs';import f from'react';import {jsx,jsxs}from'react/jsx-runtime';var M=f.forwardRef(({children:s,className:r,type:o="single",defaultValue:a$1,value:n,onValueChange:c,collapsible:u=false,...v},m)=>{let[l,d]=f.useState(n?Array.isArray(n)?n:[n]:a$1?Array.isArray(a$1)?a$1:[a$1]:[]);f.useEffect(()=>{n!==void 0&&d(Array.isArray(n)?n:[n]);},[n]);let y=e=>{let t;o==="single"?l.includes(e)?t=u?[]:l:t=[e]:l.includes(e)?t=l.filter(i=>i!==e):t=[...l,e],d(t),c==null||c(o==="single"?t[0]||"":t);},p=f.useMemo(()=>{let e=[];return f.Children.forEach(s,t=>{if(f.isValidElement(t)){let i=t.props;i.value&&e.push(i.value);}}),e},[s]),h=e=>{var D;let t=e.target;if(!t.hasAttribute("data-accordion-trigger"))return;let i=t.getAttribute("data-accordion-value");if(!i)return;let x=p.indexOf(i);if(x===-1)return;let T=x;if(e.key==="ArrowDown"?(e.preventDefault(),T=x<p.length-1?x+1:0):e.key==="ArrowUp"?(e.preventDefault(),T=x>0?x-1:p.length-1):e.key==="Home"?(e.preventDefault(),T=0):e.key==="End"&&(e.preventDefault(),T=p.length-1),T!==x&&p[T]){let P=(D=t.closest("[data-accordion-item]"))==null?void 0:D.querySelector(`[data-accordion-value="${p[T]}"]`);P==null||P.focus();}};return jsx("div",{ref:m,className:a("space-y-2",r),onKeyDown:h,...v,children:f.Children.map(s,e=>f.isValidElement(e)?f.cloneElement(e,{openItems:l,onToggle:y}):e)})});M.displayName="Accordion";var k=f.forwardRef(({value:s,children:r,className:o,disabled:a$1=false,openItems:n=[],onToggle:c,...u},v)=>{let m=n.includes(s);return jsx("div",{ref:v,"data-accordion-item":true,className:a("border border-border/50 rounded-lg overflow-hidden",a$1&&"opacity-50 pointer-events-none",o),...u,children:f.Children.map(r,l=>f.isValidElement(l)?f.cloneElement(l,{value:s,isOpen:m,disabled:a$1,onToggle:()=>c==null?void 0:c(s),"data-accordion-value":s}):l)})});k.displayName="AccordionItem";var I=f.forwardRef(({children:s,className:r,icon:o,iconPosition:a$1="right",value:n,isOpen:c=false,disabled:u=false,onToggle:v,...m},l$1)=>{let d=jsx(l,{name:"chevronDown",size:20,className:a("transition-transform duration-300 ease-out text-muted-foreground",c&&"rotate-180")}),y=`accordion-content-${n}`,p=`accordion-trigger-${n}`;return jsxs("button",{ref:l$1,id:p,"data-accordion-trigger":true,"data-accordion-value":n,"aria-expanded":c,"aria-controls":y,onClick:v,disabled:u,className:a("flex w-full items-center justify-between px-6 py-4 text-left font-medium transition-all hover:bg-muted/80 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring/50 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",r),...m,children:[jsxs("div",{className:"flex items-center gap-3 flex-1",children:[a$1==="left"&&(o||d),jsx("span",{className:"flex-1",children:s})]}),a$1==="right"&&(o||d)]})});I.displayName="AccordionTrigger";var C=f.forwardRef(({children:s,className:r,isOpen:o=false,value:a$1,"data-accordion-value":n,...c},u)=>{let[v,m]=f.useState(0),l=f.useRef(null),d=a$1||n||"unknown";f.useEffect(()=>{l.current&&m(o?l.current.scrollHeight:0);},[o,s]);let y=`accordion-trigger-${d}`,p=`accordion-content-${d}`;return jsx("div",{ref:u,id:p,role:"region","aria-labelledby":y,hidden:!o,className:"overflow-hidden transition-all duration-300 ease-out",style:{height:`${v}px`},...c,children:jsx("div",{ref:l,className:a("px-6 pt-2 pb-4",r),children:s})})});C.displayName="AccordionContent";var L=f.forwardRef(({className:s,value:r,active:o,children:a$1,...n},c)=>o===false?null:jsx("div",{ref:c,role:"tabpanel",id:`tabpanel-${r}`,"aria-labelledby":`tab-${r}`,hidden:!o,className:a("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2",s),...n,children:a$1}));L.displayName="TabsContent";var A=f.forwardRef(({className:s,value:r,defaultValue:o,onValueChange:a$1,orientation:n="horizontal",variant:c="default",size:u="md",children:v,...m},l)=>{let[d,y]=f.useState(r||o||""),p=r!==void 0,h=p?r:d,e=t=>{p||y(t),a$1==null||a$1(t);};return f.useEffect(()=>{r!==void 0&&y(r);},[r]),jsx("div",{ref:l,className:a("w-full",n==="vertical"&&"flex",s),...m,children:f.Children.map(v,t=>{if(f.isValidElement(t)){if(t.type===L){let i=t.props;return f.cloneElement(t,{active:i.value===h})}if(t.type===N)return f.cloneElement(t,{value:h,onValueChange:e,orientation:n,variant:c,size:u});if(typeof t.type!="string")return f.cloneElement(t,{value:h,onValueChange:e,orientation:n,variant:c,size:u})}return t})})});A.displayName="Tabs";var N=f.forwardRef(({className:s,value:r,onValueChange:o,orientation:a$1="horizontal",variant:n="default",size:c="md",children:u,...v},m)=>{let l=f.useRef(null);f.useImperativeHandle(m,()=>l.current);let d=f.useMemo(()=>{let e=[];return f.Children.forEach(u,t=>{if(f.isValidElement(t)){let i=t.props;i.value&&e.push(i.value);}}),e},[u]),y=e=>{var x;if(!r||d.length===0)return;let t=d.indexOf(r);if(t===-1)return;let i=t;if(a$1==="horizontal"?e.key==="ArrowLeft"?(e.preventDefault(),i=t>0?t-1:d.length-1):e.key==="ArrowRight"?(e.preventDefault(),i=t<d.length-1?t+1:0):e.key==="Home"?(e.preventDefault(),i=0):e.key==="End"&&(e.preventDefault(),i=d.length-1):e.key==="ArrowUp"?(e.preventDefault(),i=t>0?t-1:d.length-1):e.key==="ArrowDown"?(e.preventDefault(),i=t<d.length-1?t+1:0):e.key==="Home"?(e.preventDefault(),i=0):e.key==="End"&&(e.preventDefault(),i=d.length-1),i!==t&&d[i]){o==null||o(d[i]);let T=(x=l.current)==null?void 0:x.querySelector(`[data-tab-value="${d[i]}"]`);T==null||T.focus();}},p=()=>{switch(n){case "pills":return "bg-muted p-3 rounded-xl border border-border/50";case "underline":return "border-b border-border";case "cards":return "bg-muted/80 p-3 rounded-xl border border-border/50";default:return "bg-muted p-3 rounded-xl border border-border/50"}},h=()=>{switch(c){case "sm":return "h-12";case "lg":return "h-16";default:return "h-14"}};return jsx("div",{ref:l,role:"tablist","aria-orientation":a$1,onKeyDown:y,className:a("flex items-center justify-center",a$1==="vertical"&&"flex-col",p(),h(),s),...v,children:f.Children.map(u,e=>{if(f.isValidElement(e)){if(typeof e.type=="string")return e;let t=e.props;return f.cloneElement(e,{onValueChange:o,orientation:a$1,variant:n,size:c,active:t.value===r})}return e})})});N.displayName="TabsList";var z=f.forwardRef(({className:s,value:r,onValueChange:o,orientation:a$1="horizontal",variant:n="default",size:c="md",active:u=false,children:v,...m},l)=>{let d=()=>{switch(n){case "pills":return a("inline-flex items-center justify-center whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",u?"bg-background text-foreground shadow-md":"text-muted-foreground hover:text-foreground hover:bg-muted");case "underline":return a("inline-flex items-center justify-center whitespace-nowrap border-b-2 px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",u?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground");case "cards":return a("inline-flex items-center justify-center whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",u?"bg-background text-foreground shadow-md":"text-muted-foreground hover:text-foreground hover:bg-muted");default:return a("inline-flex items-center justify-center whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",u?"bg-background text-foreground shadow-md":"text-muted-foreground hover:text-foreground hover:bg-muted")}},y=()=>{switch(c){case "sm":return "h-10 px-4 py-2 text-xs";case "lg":return "h-14 px-6 py-3 text-base";default:return "h-12 px-5 py-2.5 text-sm"}},p=()=>{o&&o(r);};return jsx("button",{ref:l,role:"tab","aria-selected":u,"aria-controls":`tabpanel-${r}`,id:`tab-${r}`,"data-tab-value":r,tabIndex:u?0:-1,className:a(d(),y(),s),onClick:p,type:"button",...m,children:v})});z.displayName="TabsTrigger";var $=f.forwardRef((s,r)=>jsx(A,{ref:r,variant:"pills",...s}));$.displayName="TabsPills";var S=f.forwardRef((s,r)=>jsx(A,{ref:r,variant:"underline",...s}));S.displayName="TabsUnderline";var K=f.forwardRef((s,r)=>jsx(A,{ref:r,variant:"cards",...s}));K.displayName="TabsCards";export{M as a,k as b,I as c,C as d,L as e,A as f,N as g,z as h,$ as i,S as j,K as k};//# sourceMappingURL=chunk-XV3Y7QVU.mjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-XV3Y7QVU.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Accordion.tsx","../src/components/Tabs.tsx"],"names":["Accordion","React","children","className","type","defaultValue","value","onValueChange","collapsible","props","ref","openItems","setOpenItems","handleItemToggle","itemValue","newOpenItems","item","itemValues","values","child","childProps","handleKeyDown","_a","target","currentValue","currentIndex","newIndex","triggerElement","jsx","merge","AccordionItem","disabled","onToggle","isOpen","AccordionTrigger","icon","iconPosition","defaultIcon","Icon","contentId","triggerId","jsxs","AccordionContent","dataValue","height","setHeight","contentRef","TabsContent","active","Tabs","orientation","variant","size","activeTab","setActiveTab","isControlled","handleTabChange","newValue","TabsList","listRef","tabValues","getVariantClasses","getSizeClasses","TabsTrigger","_orientation","handleClick","TabsPills","TabsUnderline","TabsCards"],"mappings":"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","file":"chunk-MYFMKCYX.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Icon } from \"./Icon\"\n\n/**\n * Accordion 컴포넌트의 props / Accordion component props\n * @typedef {Object} AccordionProps\n * @property {React.ReactNode} children - AccordionItem 컴포넌트들 / AccordionItem components\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {\"single\" | \"multiple\"} [type=\"single\"] - 단일 또는 다중 아이템 열기 허용 / Allow single or multiple items to be open\n * @property {string | string[]} [defaultValue] - 초기 열린 아이템 값 (비제어 컴포넌트) / Initial open item value (uncontrolled component)\n * @property {string | string[]} [value] - 현재 열린 아이템 값 (제어 컴포넌트) / Current open item value (controlled component)\n * @property {(value: string | string[]) => void} [onValueChange] - 아이템 열림/닫힘 콜백 / Item open/close callback\n * @property {boolean} [collapsible=false] - 단일 모드에서 열린 아이템을 닫을 수 있는지 여부 / Whether open item can be closed in single mode\n */\ninterface AccordionProps {\n children: React.ReactNode\n className?: string\n type?: \"single\" | \"multiple\"\n defaultValue?: string | string[]\n value?: string | string[]\n onValueChange?: (value: string | string[]) => void\n collapsible?: boolean\n}\n\n/**\n * Accordion 컴포넌트 / Accordion component\n * \n * 접을 수 있는 콘텐츠 섹션을 제공하는 컴포넌트입니다.\n * 키보드 네비게이션(Arrow keys, Home/End)을 지원하며, ARIA 속성을 자동으로 설정합니다.\n * \n * Component that provides collapsible content sections.\n * Supports keyboard navigation (Arrow keys, Home/End) and automatically sets ARIA attributes.\n * \n * @component\n * @example\n * // 기본 사용 (단일 열기) / Basic usage (single open)\n * <Accordion type=\"single\">\n * <AccordionItem value=\"item1\">\n * <AccordionTrigger>제목 1</AccordionTrigger>\n * <AccordionContent>내용 1</AccordionContent>\n * </AccordionItem>\n * <AccordionItem value=\"item2\">\n * <AccordionTrigger>제목 2</AccordionTrigger>\n * <AccordionContent>내용 2</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n * \n * @example\n * // 다중 열기 / Multiple open\n * <Accordion type=\"multiple\" defaultValue={[\"item1\", \"item2\"]}>\n * <AccordionItem value=\"item1\">\n * <AccordionTrigger>제목 1</AccordionTrigger>\n * <AccordionContent>내용 1</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n * \n * @example\n * // 제어 컴포넌트 / Controlled component\n * const [openItems, setOpenItems] = useState<string[]>([])\n * <Accordion type=\"multiple\" value={openItems} onValueChange={setOpenItems}>\n * <AccordionItem value=\"item1\">\n * <AccordionTrigger>제목</AccordionTrigger>\n * <AccordionContent>내용</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n * \n * @param {AccordionProps} props - Accordion 컴포넌트의 props / Accordion component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Accordion 컴포넌트 / Accordion component\n */\nconst Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n ({ \n children, \n className,\n type = \"single\",\n defaultValue,\n value,\n onValueChange,\n collapsible = false,\n ...props \n }, ref) => {\n const [openItems, setOpenItems] = React.useState<string[]>(\n value ? (Array.isArray(value) ? value : [value]) : \n defaultValue ? (Array.isArray(defaultValue) ? defaultValue : [defaultValue]) : []\n )\n\n React.useEffect(() => {\n if (value !== undefined) {\n setOpenItems(Array.isArray(value) ? value : [value])\n }\n }, [value])\n\n const handleItemToggle = (itemValue: string) => {\n let newOpenItems: string[]\n\n if (type === \"single\") {\n if (openItems.includes(itemValue)) {\n newOpenItems = collapsible ? [] : openItems\n } else {\n newOpenItems = [itemValue]\n }\n } else {\n if (openItems.includes(itemValue)) {\n newOpenItems = openItems.filter(item => item !== itemValue)\n } else {\n newOpenItems = [...openItems, itemValue]\n }\n }\n\n setOpenItems(newOpenItems)\n onValueChange?.(type === \"single\" ? newOpenItems[0] || \"\" : newOpenItems)\n }\n\n // 모든 아이템의 value를 수집\n const itemValues = React.useMemo(() => {\n const values: string[] = []\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n const childProps = child.props as { value?: string }\n if (childProps.value) {\n values.push(childProps.value)\n }\n }\n })\n return values\n }, [children])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement\n if (!target.hasAttribute('data-accordion-trigger')) return\n\n const currentValue = target.getAttribute('data-accordion-value')\n if (!currentValue) return\n\n const currentIndex = itemValues.indexOf(currentValue)\n if (currentIndex === -1) return\n\n let newIndex = currentIndex\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault()\n newIndex = currentIndex < itemValues.length - 1 ? currentIndex + 1 : 0\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault()\n newIndex = currentIndex > 0 ? currentIndex - 1 : itemValues.length - 1\n } else if (e.key === \"Home\") {\n e.preventDefault()\n newIndex = 0\n } else if (e.key === \"End\") {\n e.preventDefault()\n newIndex = itemValues.length - 1\n }\n\n if (newIndex !== currentIndex && itemValues[newIndex]) {\n const triggerElement = target.closest('[data-accordion-item]')?.querySelector(\n `[data-accordion-value=\"${itemValues[newIndex]}\"]`\n ) as HTMLElement\n triggerElement?.focus()\n }\n }\n\n return (\n <div\n ref={ref}\n className={merge(\"space-y-2\", className)}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n openItems,\n onToggle: handleItemToggle\n } as Partial<AccordionItemProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nAccordion.displayName = \"Accordion\"\n\n/**\n * AccordionItem 컴포넌트의 props / AccordionItem component props\n * @typedef {Object} AccordionItemProps\n * @property {string} value - 아이템의 고유 값 / Item unique value\n * @property {React.ReactNode} children - AccordionTrigger와 AccordionContent / AccordionTrigger and AccordionContent\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {boolean} [disabled=false] - 아이템 비활성화 여부 / Item disabled state\n * @property {string[]} [openItems] - 열린 아이템 목록 (Accordion에서 자동 전달) / Open items list (auto-passed from Accordion)\n * @property {(value: string) => void} [onToggle] - 토글 콜백 (Accordion에서 자동 전달) / Toggle callback (auto-passed from Accordion)\n */\ninterface AccordionItemProps {\n value: string\n children: React.ReactNode\n className?: string\n disabled?: boolean\n openItems?: string[]\n onToggle?: (value: string) => void\n}\n\n/**\n * AccordionItem 컴포넌트 / AccordionItem component\n * 아코디언의 개별 아이템을 감싸는 컨테이너입니다.\n * Container that wraps an individual accordion item.\n * \n * @component\n * @param {AccordionItemProps} props - AccordionItem 컴포넌트의 props / AccordionItem component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} AccordionItem 컴포넌트 / AccordionItem component\n */\nconst AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ \n value, \n children, \n className,\n disabled = false,\n openItems = [],\n onToggle,\n ...props \n }, ref) => {\n const isOpen = openItems.includes(value)\n\n return (\n <div\n ref={ref}\n data-accordion-item\n className={merge(\n \"border border-border/50 rounded-lg overflow-hidden\",\n disabled && \"opacity-50 pointer-events-none\",\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n value,\n isOpen,\n disabled,\n onToggle: () => onToggle?.(value),\n 'data-accordion-value': value\n } as Partial<AccordionTriggerProps | AccordionContentProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nAccordionItem.displayName = \"AccordionItem\"\n\ninterface AccordionTriggerProps {\n children: React.ReactNode\n className?: string\n icon?: React.ReactNode\n iconPosition?: \"left\" | \"right\"\n value?: string // Optional: AccordionItem에서 자동으로 전달됨 / Optional: Auto-passed from AccordionItem\n isOpen?: boolean\n disabled?: boolean\n onToggle?: () => void\n}\n\nconst AccordionTrigger = React.forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n ({ \n children, \n className,\n icon,\n iconPosition = \"right\",\n value,\n isOpen = false,\n disabled = false,\n onToggle,\n ...props \n }, ref) => {\n const defaultIcon = (\n <Icon \n name=\"chevronDown\" \n size={20} \n className={merge(\n \"transition-transform duration-300 ease-out text-muted-foreground\",\n isOpen && \"rotate-180\"\n )} \n />\n )\n\n const contentId = `accordion-content-${value}`\n const triggerId = `accordion-trigger-${value}`\n\n return (\n <button\n ref={ref}\n id={triggerId}\n data-accordion-trigger\n data-accordion-value={value}\n aria-expanded={isOpen}\n aria-controls={contentId}\n onClick={onToggle}\n disabled={disabled}\n className={merge(\n \"flex w-full items-center justify-between px-6 py-4 text-left font-medium transition-all hover:bg-muted/80 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring/50 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <div className=\"flex items-center gap-3 flex-1\">\n {iconPosition === \"left\" && (icon || defaultIcon)}\n <span className=\"flex-1\">{children}</span>\n </div>\n {iconPosition === \"right\" && (icon || defaultIcon)}\n </button>\n )\n }\n)\nAccordionTrigger.displayName = \"AccordionTrigger\"\n\n/**\n * AccordionTrigger 컴포넌트 / AccordionTrigger component\n * 아코디언 아이템을 열고 닫는 트리거 버튼입니다.\n * Button that opens and closes an accordion item.\n * \n * @component\n * @param {AccordionTriggerProps} props - AccordionTrigger 컴포넌트의 props / AccordionTrigger component props\n * @param {React.Ref<HTMLButtonElement>} ref - button 요소 ref / button element ref\n * @returns {JSX.Element} AccordionTrigger 컴포넌트 / AccordionTrigger component\n */\n\n/**\n * AccordionContent 컴포넌트의 props\n * @typedef {Object} AccordionContentProps\n * @property {React.ReactNode} children - 콘텐츠\n * @property {string} [className] - 추가 CSS 클래스\n * @property {boolean} [isOpen] - 열림 상태 (AccordionItem에서 자동 전달)\n * @property {string} [value] - 아이템 값 (AccordionItem에서 자동 전달)\n * @property {string} ['data-accordion-value'] - 아이템 값 (내부 사용)\n */\ninterface AccordionContentProps {\n children: React.ReactNode\n className?: string\n isOpen?: boolean\n value?: string\n 'data-accordion-value'?: string\n}\n\n/**\n * AccordionContent 컴포넌트 / AccordionContent component\n * 아코디언 아이템의 콘텐츠를 표시합니다.\n * Displays the content of an accordion item.\n * \n * @component\n * @param {AccordionContentProps} props - AccordionContent 컴포넌트의 props / AccordionContent component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} AccordionContent 컴포넌트 / AccordionContent component\n */\nconst AccordionContent = React.forwardRef<HTMLDivElement, AccordionContentProps>(\n ({ children, className, isOpen = false, value, 'data-accordion-value': dataValue, ...props }, ref) => {\n const [height, setHeight] = React.useState(0)\n const contentRef = React.useRef<HTMLDivElement>(null)\n const itemValue = value || dataValue || 'unknown'\n\n React.useEffect(() => {\n if (contentRef.current) {\n if (isOpen) {\n setHeight(contentRef.current.scrollHeight)\n } else {\n setHeight(0)\n }\n }\n }, [isOpen, children])\n\n const triggerId = `accordion-trigger-${itemValue}`\n const contentId = `accordion-content-${itemValue}`\n\n return (\n <div\n ref={ref}\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n hidden={!isOpen}\n className=\"overflow-hidden transition-all duration-300 ease-out\"\n style={{ height: `${height}px` }}\n {...props}\n >\n <div\n ref={contentRef}\n className={merge(\"px-6 pt-2 pb-4\", className)}\n >\n {children}\n </div>\n </div>\n )\n }\n)\nAccordionContent.displayName = \"AccordionContent\"\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent } ","\"use client\"\n\nimport React from 'react'\nimport { merge } from '../lib/utils'\n\n/**\n * TabsContent 컴포넌트의 props / TabsContent component props\n * @typedef {Object} TabsContentProps\n * @property {string} value - 탭 패널의 고유 값 (TabsTrigger의 value와 일치해야 함) / Unique value for tab panel (must match TabsTrigger value)\n * @property {boolean} [active] - 탭 패널 활성화 상태 (자동 설정됨) / Tab panel active state (auto-set)\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string\n active?: boolean\n}\n\n/**\n * TabsContent 컴포넌트 / TabsContent component\n * 탭의 콘텐츠 패널을 표시합니다. Tabs 컴포넌트 내부에서 사용됩니다.\n * Displays the tab content panel. Used inside Tabs component.\n * \n * @component\n * @param {TabsContentProps} props - TabsContent 컴포넌트의 props / TabsContent component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} TabsContent 컴포넌트 / TabsContent component\n */\nconst TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, value, active, children, ...props }, ref) => {\n // active prop이 명시적으로 false로 설정된 경우에만 숨김\n if (active === false) return null\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n id={`tabpanel-${value}`}\n aria-labelledby={`tab-${value}`}\n hidden={!active}\n className={merge(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nTabsContent.displayName = \"TabsContent\"\n\n/**\n * Tabs 컴포넌트의 props / Tabs component props\n * @typedef {Object} TabsProps\n * @property {string} [value] - 현재 활성화된 탭 값 (제어 컴포넌트) / Currently active tab value (controlled component)\n * @property {string} [defaultValue] - 초기 활성화된 탭 값 (비제어 컴포넌트) / Initial active tab value (uncontrolled component)\n * @property {(value: string) => void} [onValueChange] - 탭 변경 시 호출되는 콜백 / Callback when tab changes\n * @property {\"horizontal\" | \"vertical\"} [orientation=\"horizontal\"] - 탭 방향 / Tab orientation\n * @property {\"default\" | \"pills\" | \"underline\" | \"cards\"} [variant=\"default\"] - 탭 스타일 변형 / Tab style variant\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - 탭 크기 / Tab size\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n orientation?: \"horizontal\" | \"vertical\"\n variant?: \"default\" | \"pills\" | \"underline\" | \"cards\"\n size?: \"sm\" | \"md\" | \"lg\"\n}\n\n/**\n * Tabs 컴포넌트 / Tabs component\n * \n * 탭 네비게이션을 제공하는 컴포넌트입니다.\n * 키보드 네비게이션(Arrow keys, Home/End)을 지원하며, ARIA 속성을 자동으로 설정합니다.\n * \n * Component that provides tab navigation.\n * Supports keyboard navigation (Arrow keys, Home/End) and automatically sets ARIA attributes.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">탭 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">탭 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">탭 1 내용</TabsContent>\n * <TabsContent value=\"tab2\">탭 2 내용</TabsContent>\n * </Tabs>\n * \n * @example\n * // 제어 컴포넌트 / Controlled component\n * const [activeTab, setActiveTab] = useState(\"tab1\")\n * <Tabs value={activeTab} onValueChange={setActiveTab}>\n * <TabsList>\n * <TabsTrigger value=\"tab1\">탭 1</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">내용</TabsContent>\n * </Tabs>\n * \n * @example\n * // 다양한 변형 / Various variants\n * <Tabs variant=\"pills\" size=\"lg\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Pills 스타일</TabsTrigger>\n * </TabsList>\n * </Tabs>\n * \n * @param {TabsProps} props - Tabs 컴포넌트의 props / Tabs component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Tabs 컴포넌트 / Tabs component\n */\nconst Tabs = React.forwardRef<HTMLDivElement, TabsProps>(\n ({ \n className, \n value,\n defaultValue,\n onValueChange,\n orientation = \"horizontal\",\n variant = \"default\",\n size = \"md\",\n children,\n ...props \n }, ref) => {\n const [activeTab, setActiveTab] = React.useState(value || defaultValue || \"\")\n const isControlled = value !== undefined\n const currentValue = isControlled ? value : activeTab\n\n const handleTabChange = (newValue: string) => {\n if (!isControlled) {\n setActiveTab(newValue)\n }\n onValueChange?.(newValue)\n }\n\n React.useEffect(() => {\n if (value !== undefined) {\n setActiveTab(value)\n }\n }, [value])\n\n return (\n <div\n ref={ref}\n className={merge(\n \"w-full\",\n orientation === \"vertical\" && \"flex\",\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n // TabsContent인 경우 active prop만 설정 (value는 원래 값 유지)\n if (child.type === TabsContent) {\n const childProps = child.props as TabsContentProps\n return React.cloneElement(child, {\n active: childProps.value === currentValue\n } as Partial<TabsContentProps>)\n }\n // TabsList인 경우에만 onValueChange 전달\n if (child.type === TabsList) {\n return React.cloneElement(child, {\n value: currentValue,\n onValueChange: handleTabChange,\n orientation,\n variant,\n size\n } as Partial<TabsListProps>)\n }\n // 다른 React 컴포넌트들 (다른 custom wrapper 등)\n // HTML 요소가 아닌 경우에만 props 전달\n if (typeof child.type !== 'string') {\n return React.cloneElement(child, {\n value: currentValue,\n onValueChange: handleTabChange,\n orientation,\n variant,\n size\n } as Record<string, unknown>)\n }\n }\n return child\n })}\n </div>\n )\n }\n)\nTabs.displayName = \"Tabs\"\n\n/**\n * TabsList 컴포넌트의 props / TabsList component props\n * @typedef {Object} TabsListProps\n * @property {string} [value] - 현재 활성화된 탭 값 (Tabs에서 자동 전달) / Currently active tab value (auto-passed from Tabs)\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 (Tabs에서 자동 전달) / Tab change callback (auto-passed from Tabs)\n * @property {\"horizontal\" | \"vertical\"} [orientation] - 탭 방향 (Tabs에서 자동 전달) / Tab orientation (auto-passed from Tabs)\n * @property {\"default\" | \"pills\" | \"underline\" | \"cards\"} [variant] - 탭 스타일 (Tabs에서 자동 전달) / Tab style (auto-passed from Tabs)\n * @property {\"sm\" | \"md\" | \"lg\"} [size] - 탭 크기 (Tabs에서 자동 전달) / Tab size (auto-passed from Tabs)\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface TabsListProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: string\n onValueChange?: (value: string) => void\n orientation?: \"horizontal\" | \"vertical\"\n variant?: \"default\" | \"pills\" | \"underline\" | \"cards\"\n size?: \"sm\" | \"md\" | \"lg\"\n}\n\n/**\n * TabsList 컴포넌트 / TabsList component\n * 탭 트리거 목록을 표시합니다. Tabs 컴포넌트 내부에서 사용됩니다.\n * Displays the list of tab triggers. Used inside Tabs component.\n * \n * @component\n * @param {TabsListProps} props - TabsList 컴포넌트의 props / TabsList component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} TabsList 컴포넌트 / TabsList component\n */\nconst TabsList = React.forwardRef<HTMLDivElement, TabsListProps>(\n ({ \n className, \n value,\n onValueChange,\n orientation = \"horizontal\",\n variant = \"default\",\n size = \"md\",\n children,\n ...props \n }, ref) => {\n const listRef = React.useRef<HTMLDivElement>(null)\n React.useImperativeHandle(ref, () => listRef.current as HTMLDivElement)\n \n // 모든 탭 트리거의 value를 수집\n const tabValues = React.useMemo(() => {\n const values: string[] = []\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n const childProps = child.props as { value?: string }\n if (childProps.value) {\n values.push(childProps.value)\n }\n }\n })\n return values\n }, [children])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (!value || tabValues.length === 0) return\n\n const currentIndex = tabValues.indexOf(value)\n if (currentIndex === -1) return\n\n let newIndex = currentIndex\n\n if (orientation === \"horizontal\") {\n if (e.key === \"ArrowLeft\") {\n e.preventDefault()\n newIndex = currentIndex > 0 ? currentIndex - 1 : tabValues.length - 1\n } else if (e.key === \"ArrowRight\") {\n e.preventDefault()\n newIndex = currentIndex < tabValues.length - 1 ? currentIndex + 1 : 0\n } else if (e.key === \"Home\") {\n e.preventDefault()\n newIndex = 0\n } else if (e.key === \"End\") {\n e.preventDefault()\n newIndex = tabValues.length - 1\n }\n } else {\n if (e.key === \"ArrowUp\") {\n e.preventDefault()\n newIndex = currentIndex > 0 ? currentIndex - 1 : tabValues.length - 1\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault()\n newIndex = currentIndex < tabValues.length - 1 ? currentIndex + 1 : 0\n } else if (e.key === \"Home\") {\n e.preventDefault()\n newIndex = 0\n } else if (e.key === \"End\") {\n e.preventDefault()\n newIndex = tabValues.length - 1\n }\n }\n\n if (newIndex !== currentIndex && tabValues[newIndex]) {\n onValueChange?.(tabValues[newIndex])\n // 포커스 이동\n const triggerElement = listRef.current?.querySelector(\n `[data-tab-value=\"${tabValues[newIndex]}\"]`\n ) as HTMLElement\n triggerElement?.focus()\n }\n }\n const getVariantClasses = () => {\n switch (variant) {\n case \"pills\":\n return \"bg-muted p-3 rounded-xl border border-border/50\"\n case \"underline\":\n return \"border-b border-border\"\n case \"cards\":\n return \"bg-muted/80 p-3 rounded-xl border border-border/50\"\n default:\n return \"bg-muted p-3 rounded-xl border border-border/50\"\n }\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case \"sm\":\n return \"h-12\"\n case \"lg\":\n return \"h-16\"\n default:\n return \"h-14\"\n }\n }\n\n return (\n <div\n ref={listRef}\n role=\"tablist\"\n aria-orientation={orientation}\n onKeyDown={handleKeyDown}\n className={merge(\n \"flex items-center justify-center\",\n orientation === \"vertical\" && \"flex-col\",\n getVariantClasses(),\n getSizeClasses(),\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n // Only pass tab props to non-HTML elements (React components)\n if (typeof child.type === 'string') {\n return child\n }\n const childProps = child.props as { value?: string }\n return React.cloneElement(child, {\n onValueChange,\n orientation,\n variant,\n size,\n active: childProps.value === value\n } as Partial<TabsTriggerProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nTabsList.displayName = \"TabsList\"\n\n/**\n * TabsTrigger 컴포넌트의 props\n * @typedef {Object} TabsTriggerProps\n * @property {string} value - 탭 트리거의 고유 값 (TabsContent의 value와 일치해야 함)\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 (TabsList에서 자동 전달)\n * @property {\"horizontal\" | \"vertical\"} [orientation] - 탭 방향 (TabsList에서 자동 전달)\n * @property {\"default\" | \"pills\" | \"underline\" | \"cards\"} [variant] - 탭 스타일 (TabsList에서 자동 전달)\n * @property {\"sm\" | \"md\" | \"lg\"} [size] - 탭 크기 (TabsList에서 자동 전달)\n * @property {boolean} [active] - 탭 활성화 상태 (자동 설정됨)\n * @extends {React.ButtonHTMLAttributes<HTMLButtonElement>}\n */\nexport interface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string\n onValueChange?: (value: string) => void\n orientation?: \"horizontal\" | \"vertical\"\n variant?: \"default\" | \"pills\" | \"underline\" | \"cards\"\n size?: \"sm\" | \"md\" | \"lg\"\n active?: boolean\n}\n\n/**\n * TabsTrigger 컴포넌트 / TabsTrigger component\n * 탭을 활성화하는 버튼입니다. TabsList 컴포넌트 내부에서 사용됩니다.\n * Button that activates a tab. Used inside TabsList component.\n * \n * @component\n * @param {TabsTriggerProps} props - TabsTrigger 컴포넌트의 props / TabsTrigger component props\n * @param {React.Ref<HTMLButtonElement>} ref - button 요소 ref / button element ref\n * @returns {JSX.Element} TabsTrigger 컴포넌트 / TabsTrigger component\n */\nconst TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ \n className,\n value,\n onValueChange,\n orientation: _orientation = \"horizontal\",\n variant = \"default\",\n size = \"md\",\n active = false,\n children,\n ...props\n }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"pills\":\n return merge(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n active\n ? \"bg-background text-foreground shadow-md\"\n : \"text-muted-foreground hover:text-foreground hover:bg-muted\"\n )\n case \"underline\":\n return merge(\n \"inline-flex items-center justify-center whitespace-nowrap border-b-2 px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n active\n ? \"border-primary text-primary\"\n : \"border-transparent text-muted-foreground hover:text-foreground\"\n )\n case \"cards\":\n return merge(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n active\n ? \"bg-background text-foreground shadow-md\"\n : \"text-muted-foreground hover:text-foreground hover:bg-muted\"\n )\n default:\n return merge(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n active\n ? \"bg-background text-foreground shadow-md\"\n : \"text-muted-foreground hover:text-foreground hover:bg-muted\"\n )\n }\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case \"sm\":\n return \"h-10 px-4 py-2 text-xs\"\n case \"lg\":\n return \"h-14 px-6 py-3 text-base\"\n default:\n return \"h-12 px-5 py-2.5 text-sm\"\n }\n }\n\n const handleClick = () => {\n if (onValueChange) {\n onValueChange(value)\n }\n }\n\n return (\n <button\n ref={ref}\n role=\"tab\"\n aria-selected={active}\n aria-controls={`tabpanel-${value}`}\n id={`tab-${value}`}\n data-tab-value={value}\n tabIndex={active ? 0 : -1}\n className={merge(\n getVariantClasses(),\n getSizeClasses(),\n className\n )}\n onClick={handleClick}\n type=\"button\"\n {...props}\n >\n {children}\n </button>\n )\n }\n)\nTabsTrigger.displayName = \"TabsTrigger\"\n\n// 편의 컴포넌트들\nconst TabsPills = React.forwardRef<HTMLDivElement, TabsProps>(\n (props, ref) => <Tabs ref={ref} variant=\"pills\" {...props} />\n)\nTabsPills.displayName = \"TabsPills\"\n\nconst TabsUnderline = React.forwardRef<HTMLDivElement, TabsProps>(\n (props, ref) => <Tabs ref={ref} variant=\"underline\" {...props} />\n)\nTabsUnderline.displayName = \"TabsUnderline\"\n\nconst TabsCards = React.forwardRef<HTMLDivElement, TabsProps>(\n (props, ref) => <Tabs ref={ref} variant=\"cards\" {...props} />\n)\nTabsCards.displayName = \"TabsCards\"\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, TabsPills, TabsUnderline, TabsCards } "]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Accordion.tsx","../src/components/Tabs.tsx"],"names":["Accordion","React","children","className","type","defaultValue","value","onValueChange","collapsible","props","ref","openItems","setOpenItems","handleItemToggle","itemValue","newOpenItems","item","itemValues","values","child","childProps","handleKeyDown","_a","target","currentValue","currentIndex","newIndex","triggerElement","jsx","merge","AccordionItem","disabled","onToggle","isOpen","AccordionTrigger","icon","iconPosition","defaultIcon","Icon","contentId","triggerId","jsxs","AccordionContent","dataValue","height","setHeight","contentRef","TabsContent","active","Tabs","orientation","variant","size","activeTab","setActiveTab","isControlled","handleTabChange","newValue","TabsList","listRef","tabValues","getVariantClasses","getSizeClasses","TabsTrigger","_orientation","handleClick","TabsPills","TabsUnderline","TabsCards"],"mappings":"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","file":"chunk-XV3Y7QVU.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Icon } from \"./Icon\"\n\n/**\n * Accordion 컴포넌트의 props / Accordion component props\n * @typedef {Object} AccordionProps\n * @property {React.ReactNode} children - AccordionItem 컴포넌트들 / AccordionItem components\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {\"single\" | \"multiple\"} [type=\"single\"] - 단일 또는 다중 아이템 열기 허용 / Allow single or multiple items to be open\n * @property {string | string[]} [defaultValue] - 초기 열린 아이템 값 (비제어 컴포넌트) / Initial open item value (uncontrolled component)\n * @property {string | string[]} [value] - 현재 열린 아이템 값 (제어 컴포넌트) / Current open item value (controlled component)\n * @property {(value: string | string[]) => void} [onValueChange] - 아이템 열림/닫힘 콜백 / Item open/close callback\n * @property {boolean} [collapsible=false] - 단일 모드에서 열린 아이템을 닫을 수 있는지 여부 / Whether open item can be closed in single mode\n */\ninterface AccordionProps {\n children: React.ReactNode\n className?: string\n type?: \"single\" | \"multiple\"\n defaultValue?: string | string[]\n value?: string | string[]\n onValueChange?: (value: string | string[]) => void\n collapsible?: boolean\n}\n\n/**\n * Accordion 컴포넌트 / Accordion component\n * \n * 접을 수 있는 콘텐츠 섹션을 제공하는 컴포넌트입니다.\n * 키보드 네비게이션(Arrow keys, Home/End)을 지원하며, ARIA 속성을 자동으로 설정합니다.\n * \n * Component that provides collapsible content sections.\n * Supports keyboard navigation (Arrow keys, Home/End) and automatically sets ARIA attributes.\n * \n * @component\n * @example\n * // 기본 사용 (단일 열기) / Basic usage (single open)\n * <Accordion type=\"single\">\n * <AccordionItem value=\"item1\">\n * <AccordionTrigger>제목 1</AccordionTrigger>\n * <AccordionContent>내용 1</AccordionContent>\n * </AccordionItem>\n * <AccordionItem value=\"item2\">\n * <AccordionTrigger>제목 2</AccordionTrigger>\n * <AccordionContent>내용 2</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n * \n * @example\n * // 다중 열기 / Multiple open\n * <Accordion type=\"multiple\" defaultValue={[\"item1\", \"item2\"]}>\n * <AccordionItem value=\"item1\">\n * <AccordionTrigger>제목 1</AccordionTrigger>\n * <AccordionContent>내용 1</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n * \n * @example\n * // 제어 컴포넌트 / Controlled component\n * const [openItems, setOpenItems] = useState<string[]>([])\n * <Accordion type=\"multiple\" value={openItems} onValueChange={setOpenItems}>\n * <AccordionItem value=\"item1\">\n * <AccordionTrigger>제목</AccordionTrigger>\n * <AccordionContent>내용</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n * \n * @param {AccordionProps} props - Accordion 컴포넌트의 props / Accordion component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Accordion 컴포넌트 / Accordion component\n */\nconst Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n ({ \n children, \n className,\n type = \"single\",\n defaultValue,\n value,\n onValueChange,\n collapsible = false,\n ...props \n }, ref) => {\n const [openItems, setOpenItems] = React.useState<string[]>(\n value ? (Array.isArray(value) ? value : [value]) : \n defaultValue ? (Array.isArray(defaultValue) ? defaultValue : [defaultValue]) : []\n )\n\n React.useEffect(() => {\n if (value !== undefined) {\n setOpenItems(Array.isArray(value) ? value : [value])\n }\n }, [value])\n\n const handleItemToggle = (itemValue: string) => {\n let newOpenItems: string[]\n\n if (type === \"single\") {\n if (openItems.includes(itemValue)) {\n newOpenItems = collapsible ? [] : openItems\n } else {\n newOpenItems = [itemValue]\n }\n } else {\n if (openItems.includes(itemValue)) {\n newOpenItems = openItems.filter(item => item !== itemValue)\n } else {\n newOpenItems = [...openItems, itemValue]\n }\n }\n\n setOpenItems(newOpenItems)\n onValueChange?.(type === \"single\" ? newOpenItems[0] || \"\" : newOpenItems)\n }\n\n // 모든 아이템의 value를 수집\n const itemValues = React.useMemo(() => {\n const values: string[] = []\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n const childProps = child.props as { value?: string }\n if (childProps.value) {\n values.push(childProps.value)\n }\n }\n })\n return values\n }, [children])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement\n if (!target.hasAttribute('data-accordion-trigger')) return\n\n const currentValue = target.getAttribute('data-accordion-value')\n if (!currentValue) return\n\n const currentIndex = itemValues.indexOf(currentValue)\n if (currentIndex === -1) return\n\n let newIndex = currentIndex\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault()\n newIndex = currentIndex < itemValues.length - 1 ? currentIndex + 1 : 0\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault()\n newIndex = currentIndex > 0 ? currentIndex - 1 : itemValues.length - 1\n } else if (e.key === \"Home\") {\n e.preventDefault()\n newIndex = 0\n } else if (e.key === \"End\") {\n e.preventDefault()\n newIndex = itemValues.length - 1\n }\n\n if (newIndex !== currentIndex && itemValues[newIndex]) {\n const triggerElement = target.closest('[data-accordion-item]')?.querySelector(\n `[data-accordion-value=\"${itemValues[newIndex]}\"]`\n ) as HTMLElement\n triggerElement?.focus()\n }\n }\n\n return (\n <div\n ref={ref}\n className={merge(\"space-y-2\", className)}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n openItems,\n onToggle: handleItemToggle\n } as Partial<AccordionItemProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nAccordion.displayName = \"Accordion\"\n\n/**\n * AccordionItem 컴포넌트의 props / AccordionItem component props\n * @typedef {Object} AccordionItemProps\n * @property {string} value - 아이템의 고유 값 / Item unique value\n * @property {React.ReactNode} children - AccordionTrigger와 AccordionContent / AccordionTrigger and AccordionContent\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {boolean} [disabled=false] - 아이템 비활성화 여부 / Item disabled state\n * @property {string[]} [openItems] - 열린 아이템 목록 (Accordion에서 자동 전달) / Open items list (auto-passed from Accordion)\n * @property {(value: string) => void} [onToggle] - 토글 콜백 (Accordion에서 자동 전달) / Toggle callback (auto-passed from Accordion)\n */\ninterface AccordionItemProps {\n value: string\n children: React.ReactNode\n className?: string\n disabled?: boolean\n openItems?: string[]\n onToggle?: (value: string) => void\n}\n\n/**\n * AccordionItem 컴포넌트 / AccordionItem component\n * 아코디언의 개별 아이템을 감싸는 컨테이너입니다.\n * Container that wraps an individual accordion item.\n * \n * @component\n * @param {AccordionItemProps} props - AccordionItem 컴포넌트의 props / AccordionItem component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} AccordionItem 컴포넌트 / AccordionItem component\n */\nconst AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ \n value, \n children, \n className,\n disabled = false,\n openItems = [],\n onToggle,\n ...props \n }, ref) => {\n const isOpen = openItems.includes(value)\n\n return (\n <div\n ref={ref}\n data-accordion-item\n className={merge(\n \"border border-border/50 rounded-lg overflow-hidden\",\n disabled && \"opacity-50 pointer-events-none\",\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n value,\n isOpen,\n disabled,\n onToggle: () => onToggle?.(value),\n 'data-accordion-value': value\n } as Partial<AccordionTriggerProps | AccordionContentProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nAccordionItem.displayName = \"AccordionItem\"\n\ninterface AccordionTriggerProps {\n children: React.ReactNode\n className?: string\n icon?: React.ReactNode\n iconPosition?: \"left\" | \"right\"\n value?: string // Optional: AccordionItem에서 자동으로 전달됨 / Optional: Auto-passed from AccordionItem\n isOpen?: boolean\n disabled?: boolean\n onToggle?: () => void\n}\n\nconst AccordionTrigger = React.forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n ({ \n children, \n className,\n icon,\n iconPosition = \"right\",\n value,\n isOpen = false,\n disabled = false,\n onToggle,\n ...props \n }, ref) => {\n const defaultIcon = (\n <Icon \n name=\"chevronDown\" \n size={20} \n className={merge(\n \"transition-transform duration-300 ease-out text-muted-foreground\",\n isOpen && \"rotate-180\"\n )} \n />\n )\n\n const contentId = `accordion-content-${value}`\n const triggerId = `accordion-trigger-${value}`\n\n return (\n <button\n ref={ref}\n id={triggerId}\n data-accordion-trigger\n data-accordion-value={value}\n aria-expanded={isOpen}\n aria-controls={contentId}\n onClick={onToggle}\n disabled={disabled}\n className={merge(\n \"flex w-full items-center justify-between px-6 py-4 text-left font-medium transition-all hover:bg-muted/80 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring/50 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <div className=\"flex items-center gap-3 flex-1\">\n {iconPosition === \"left\" && (icon || defaultIcon)}\n <span className=\"flex-1\">{children}</span>\n </div>\n {iconPosition === \"right\" && (icon || defaultIcon)}\n </button>\n )\n }\n)\nAccordionTrigger.displayName = \"AccordionTrigger\"\n\n/**\n * AccordionTrigger 컴포넌트 / AccordionTrigger component\n * 아코디언 아이템을 열고 닫는 트리거 버튼입니다.\n * Button that opens and closes an accordion item.\n * \n * @component\n * @param {AccordionTriggerProps} props - AccordionTrigger 컴포넌트의 props / AccordionTrigger component props\n * @param {React.Ref<HTMLButtonElement>} ref - button 요소 ref / button element ref\n * @returns {JSX.Element} AccordionTrigger 컴포넌트 / AccordionTrigger component\n */\n\n/**\n * AccordionContent 컴포넌트의 props\n * @typedef {Object} AccordionContentProps\n * @property {React.ReactNode} children - 콘텐츠\n * @property {string} [className] - 추가 CSS 클래스\n * @property {boolean} [isOpen] - 열림 상태 (AccordionItem에서 자동 전달)\n * @property {string} [value] - 아이템 값 (AccordionItem에서 자동 전달)\n * @property {string} ['data-accordion-value'] - 아이템 값 (내부 사용)\n */\ninterface AccordionContentProps {\n children: React.ReactNode\n className?: string\n isOpen?: boolean\n value?: string\n 'data-accordion-value'?: string\n}\n\n/**\n * AccordionContent 컴포넌트 / AccordionContent component\n * 아코디언 아이템의 콘텐츠를 표시합니다.\n * Displays the content of an accordion item.\n * \n * @component\n * @param {AccordionContentProps} props - AccordionContent 컴포넌트의 props / AccordionContent component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} AccordionContent 컴포넌트 / AccordionContent component\n */\nconst AccordionContent = React.forwardRef<HTMLDivElement, AccordionContentProps>(\n ({ children, className, isOpen = false, value, 'data-accordion-value': dataValue, ...props }, ref) => {\n const [height, setHeight] = React.useState(0)\n const contentRef = React.useRef<HTMLDivElement>(null)\n const itemValue = value || dataValue || 'unknown'\n\n React.useEffect(() => {\n if (contentRef.current) {\n if (isOpen) {\n setHeight(contentRef.current.scrollHeight)\n } else {\n setHeight(0)\n }\n }\n }, [isOpen, children])\n\n const triggerId = `accordion-trigger-${itemValue}`\n const contentId = `accordion-content-${itemValue}`\n\n return (\n <div\n ref={ref}\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n hidden={!isOpen}\n className=\"overflow-hidden transition-all duration-300 ease-out\"\n style={{ height: `${height}px` }}\n {...props}\n >\n <div\n ref={contentRef}\n className={merge(\"px-6 pt-2 pb-4\", className)}\n >\n {children}\n </div>\n </div>\n )\n }\n)\nAccordionContent.displayName = \"AccordionContent\"\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent } ","\"use client\"\n\nimport React from 'react'\nimport { merge } from '../lib/utils'\n\n/**\n * TabsContent 컴포넌트의 props / TabsContent component props\n * @typedef {Object} TabsContentProps\n * @property {string} value - 탭 패널의 고유 값 (TabsTrigger의 value와 일치해야 함) / Unique value for tab panel (must match TabsTrigger value)\n * @property {boolean} [active] - 탭 패널 활성화 상태 (자동 설정됨) / Tab panel active state (auto-set)\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string\n active?: boolean\n}\n\n/**\n * TabsContent 컴포넌트 / TabsContent component\n * 탭의 콘텐츠 패널을 표시합니다. Tabs 컴포넌트 내부에서 사용됩니다.\n * Displays the tab content panel. Used inside Tabs component.\n * \n * @component\n * @param {TabsContentProps} props - TabsContent 컴포넌트의 props / TabsContent component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} TabsContent 컴포넌트 / TabsContent component\n */\nconst TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, value, active, children, ...props }, ref) => {\n // active prop이 명시적으로 false로 설정된 경우에만 숨김\n if (active === false) return null\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n id={`tabpanel-${value}`}\n aria-labelledby={`tab-${value}`}\n hidden={!active}\n className={merge(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nTabsContent.displayName = \"TabsContent\"\n\n/**\n * Tabs 컴포넌트의 props / Tabs component props\n * @typedef {Object} TabsProps\n * @property {string} [value] - 현재 활성화된 탭 값 (제어 컴포넌트) / Currently active tab value (controlled component)\n * @property {string} [defaultValue] - 초기 활성화된 탭 값 (비제어 컴포넌트) / Initial active tab value (uncontrolled component)\n * @property {(value: string) => void} [onValueChange] - 탭 변경 시 호출되는 콜백 / Callback when tab changes\n * @property {\"horizontal\" | \"vertical\"} [orientation=\"horizontal\"] - 탭 방향 / Tab orientation\n * @property {\"default\" | \"pills\" | \"underline\" | \"cards\"} [variant=\"default\"] - 탭 스타일 변형 / Tab style variant\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - 탭 크기 / Tab size\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n orientation?: \"horizontal\" | \"vertical\"\n variant?: \"default\" | \"pills\" | \"underline\" | \"cards\"\n size?: \"sm\" | \"md\" | \"lg\"\n}\n\n/**\n * Tabs 컴포넌트 / Tabs component\n * \n * 탭 네비게이션을 제공하는 컴포넌트입니다.\n * 키보드 네비게이션(Arrow keys, Home/End)을 지원하며, ARIA 속성을 자동으로 설정합니다.\n * \n * Component that provides tab navigation.\n * Supports keyboard navigation (Arrow keys, Home/End) and automatically sets ARIA attributes.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">탭 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">탭 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">탭 1 내용</TabsContent>\n * <TabsContent value=\"tab2\">탭 2 내용</TabsContent>\n * </Tabs>\n * \n * @example\n * // 제어 컴포넌트 / Controlled component\n * const [activeTab, setActiveTab] = useState(\"tab1\")\n * <Tabs value={activeTab} onValueChange={setActiveTab}>\n * <TabsList>\n * <TabsTrigger value=\"tab1\">탭 1</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">내용</TabsContent>\n * </Tabs>\n * \n * @example\n * // 다양한 변형 / Various variants\n * <Tabs variant=\"pills\" size=\"lg\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Pills 스타일</TabsTrigger>\n * </TabsList>\n * </Tabs>\n * \n * @param {TabsProps} props - Tabs 컴포넌트의 props / Tabs component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Tabs 컴포넌트 / Tabs component\n */\nconst Tabs = React.forwardRef<HTMLDivElement, TabsProps>(\n ({ \n className, \n value,\n defaultValue,\n onValueChange,\n orientation = \"horizontal\",\n variant = \"default\",\n size = \"md\",\n children,\n ...props \n }, ref) => {\n const [activeTab, setActiveTab] = React.useState(value || defaultValue || \"\")\n const isControlled = value !== undefined\n const currentValue = isControlled ? value : activeTab\n\n const handleTabChange = (newValue: string) => {\n if (!isControlled) {\n setActiveTab(newValue)\n }\n onValueChange?.(newValue)\n }\n\n React.useEffect(() => {\n if (value !== undefined) {\n setActiveTab(value)\n }\n }, [value])\n\n return (\n <div\n ref={ref}\n className={merge(\n \"w-full\",\n orientation === \"vertical\" && \"flex\",\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n // TabsContent인 경우 active prop만 설정 (value는 원래 값 유지)\n if (child.type === TabsContent) {\n const childProps = child.props as TabsContentProps\n return React.cloneElement(child, {\n active: childProps.value === currentValue\n } as Partial<TabsContentProps>)\n }\n // TabsList인 경우에만 onValueChange 전달\n if (child.type === TabsList) {\n return React.cloneElement(child, {\n value: currentValue,\n onValueChange: handleTabChange,\n orientation,\n variant,\n size\n } as Partial<TabsListProps>)\n }\n // 다른 React 컴포넌트들 (다른 custom wrapper 등)\n // HTML 요소가 아닌 경우에만 props 전달\n if (typeof child.type !== 'string') {\n return React.cloneElement(child, {\n value: currentValue,\n onValueChange: handleTabChange,\n orientation,\n variant,\n size\n } as Record<string, unknown>)\n }\n }\n return child\n })}\n </div>\n )\n }\n)\nTabs.displayName = \"Tabs\"\n\n/**\n * TabsList 컴포넌트의 props / TabsList component props\n * @typedef {Object} TabsListProps\n * @property {string} [value] - 현재 활성화된 탭 값 (Tabs에서 자동 전달) / Currently active tab value (auto-passed from Tabs)\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 (Tabs에서 자동 전달) / Tab change callback (auto-passed from Tabs)\n * @property {\"horizontal\" | \"vertical\"} [orientation] - 탭 방향 (Tabs에서 자동 전달) / Tab orientation (auto-passed from Tabs)\n * @property {\"default\" | \"pills\" | \"underline\" | \"cards\"} [variant] - 탭 스타일 (Tabs에서 자동 전달) / Tab style (auto-passed from Tabs)\n * @property {\"sm\" | \"md\" | \"lg\"} [size] - 탭 크기 (Tabs에서 자동 전달) / Tab size (auto-passed from Tabs)\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface TabsListProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: string\n onValueChange?: (value: string) => void\n orientation?: \"horizontal\" | \"vertical\"\n variant?: \"default\" | \"pills\" | \"underline\" | \"cards\"\n size?: \"sm\" | \"md\" | \"lg\"\n}\n\n/**\n * TabsList 컴포넌트 / TabsList component\n * 탭 트리거 목록을 표시합니다. Tabs 컴포넌트 내부에서 사용됩니다.\n * Displays the list of tab triggers. Used inside Tabs component.\n * \n * @component\n * @param {TabsListProps} props - TabsList 컴포넌트의 props / TabsList component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} TabsList 컴포넌트 / TabsList component\n */\nconst TabsList = React.forwardRef<HTMLDivElement, TabsListProps>(\n ({ \n className, \n value,\n onValueChange,\n orientation = \"horizontal\",\n variant = \"default\",\n size = \"md\",\n children,\n ...props \n }, ref) => {\n const listRef = React.useRef<HTMLDivElement>(null)\n React.useImperativeHandle(ref, () => listRef.current as HTMLDivElement)\n \n // 모든 탭 트리거의 value를 수집\n const tabValues = React.useMemo(() => {\n const values: string[] = []\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n const childProps = child.props as { value?: string }\n if (childProps.value) {\n values.push(childProps.value)\n }\n }\n })\n return values\n }, [children])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (!value || tabValues.length === 0) return\n\n const currentIndex = tabValues.indexOf(value)\n if (currentIndex === -1) return\n\n let newIndex = currentIndex\n\n if (orientation === \"horizontal\") {\n if (e.key === \"ArrowLeft\") {\n e.preventDefault()\n newIndex = currentIndex > 0 ? currentIndex - 1 : tabValues.length - 1\n } else if (e.key === \"ArrowRight\") {\n e.preventDefault()\n newIndex = currentIndex < tabValues.length - 1 ? currentIndex + 1 : 0\n } else if (e.key === \"Home\") {\n e.preventDefault()\n newIndex = 0\n } else if (e.key === \"End\") {\n e.preventDefault()\n newIndex = tabValues.length - 1\n }\n } else {\n if (e.key === \"ArrowUp\") {\n e.preventDefault()\n newIndex = currentIndex > 0 ? currentIndex - 1 : tabValues.length - 1\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault()\n newIndex = currentIndex < tabValues.length - 1 ? currentIndex + 1 : 0\n } else if (e.key === \"Home\") {\n e.preventDefault()\n newIndex = 0\n } else if (e.key === \"End\") {\n e.preventDefault()\n newIndex = tabValues.length - 1\n }\n }\n\n if (newIndex !== currentIndex && tabValues[newIndex]) {\n onValueChange?.(tabValues[newIndex])\n // 포커스 이동\n const triggerElement = listRef.current?.querySelector(\n `[data-tab-value=\"${tabValues[newIndex]}\"]`\n ) as HTMLElement\n triggerElement?.focus()\n }\n }\n const getVariantClasses = () => {\n switch (variant) {\n case \"pills\":\n return \"bg-muted p-3 rounded-xl border border-border/50\"\n case \"underline\":\n return \"border-b border-border\"\n case \"cards\":\n return \"bg-muted/80 p-3 rounded-xl border border-border/50\"\n default:\n return \"bg-muted p-3 rounded-xl border border-border/50\"\n }\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case \"sm\":\n return \"h-12\"\n case \"lg\":\n return \"h-16\"\n default:\n return \"h-14\"\n }\n }\n\n return (\n <div\n ref={listRef}\n role=\"tablist\"\n aria-orientation={orientation}\n onKeyDown={handleKeyDown}\n className={merge(\n \"flex items-center justify-center\",\n orientation === \"vertical\" && \"flex-col\",\n getVariantClasses(),\n getSizeClasses(),\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n // Only pass tab props to non-HTML elements (React components)\n if (typeof child.type === 'string') {\n return child\n }\n const childProps = child.props as { value?: string }\n return React.cloneElement(child, {\n onValueChange,\n orientation,\n variant,\n size,\n active: childProps.value === value\n } as Partial<TabsTriggerProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nTabsList.displayName = \"TabsList\"\n\n/**\n * TabsTrigger 컴포넌트의 props\n * @typedef {Object} TabsTriggerProps\n * @property {string} value - 탭 트리거의 고유 값 (TabsContent의 value와 일치해야 함)\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 (TabsList에서 자동 전달)\n * @property {\"horizontal\" | \"vertical\"} [orientation] - 탭 방향 (TabsList에서 자동 전달)\n * @property {\"default\" | \"pills\" | \"underline\" | \"cards\"} [variant] - 탭 스타일 (TabsList에서 자동 전달)\n * @property {\"sm\" | \"md\" | \"lg\"} [size] - 탭 크기 (TabsList에서 자동 전달)\n * @property {boolean} [active] - 탭 활성화 상태 (자동 설정됨)\n * @extends {React.ButtonHTMLAttributes<HTMLButtonElement>}\n */\nexport interface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string\n onValueChange?: (value: string) => void\n orientation?: \"horizontal\" | \"vertical\"\n variant?: \"default\" | \"pills\" | \"underline\" | \"cards\"\n size?: \"sm\" | \"md\" | \"lg\"\n active?: boolean\n}\n\n/**\n * TabsTrigger 컴포넌트 / TabsTrigger component\n * 탭을 활성화하는 버튼입니다. TabsList 컴포넌트 내부에서 사용됩니다.\n * Button that activates a tab. Used inside TabsList component.\n * \n * @component\n * @param {TabsTriggerProps} props - TabsTrigger 컴포넌트의 props / TabsTrigger component props\n * @param {React.Ref<HTMLButtonElement>} ref - button 요소 ref / button element ref\n * @returns {JSX.Element} TabsTrigger 컴포넌트 / TabsTrigger component\n */\nconst TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ \n className,\n value,\n onValueChange,\n orientation: _orientation = \"horizontal\",\n variant = \"default\",\n size = \"md\",\n active = false,\n children,\n ...props\n }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"pills\":\n return merge(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n active\n ? \"bg-background text-foreground shadow-md\"\n : \"text-muted-foreground hover:text-foreground hover:bg-muted\"\n )\n case \"underline\":\n return merge(\n \"inline-flex items-center justify-center whitespace-nowrap border-b-2 px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n active\n ? \"border-primary text-primary\"\n : \"border-transparent text-muted-foreground hover:text-foreground\"\n )\n case \"cards\":\n return merge(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n active\n ? \"bg-background text-foreground shadow-md\"\n : \"text-muted-foreground hover:text-foreground hover:bg-muted\"\n )\n default:\n return merge(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-lg px-4 py-2.5 text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n active\n ? \"bg-background text-foreground shadow-md\"\n : \"text-muted-foreground hover:text-foreground hover:bg-muted\"\n )\n }\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case \"sm\":\n return \"h-10 px-4 py-2 text-xs\"\n case \"lg\":\n return \"h-14 px-6 py-3 text-base\"\n default:\n return \"h-12 px-5 py-2.5 text-sm\"\n }\n }\n\n const handleClick = () => {\n if (onValueChange) {\n onValueChange(value)\n }\n }\n\n return (\n <button\n ref={ref}\n role=\"tab\"\n aria-selected={active}\n aria-controls={`tabpanel-${value}`}\n id={`tab-${value}`}\n data-tab-value={value}\n tabIndex={active ? 0 : -1}\n className={merge(\n getVariantClasses(),\n getSizeClasses(),\n className\n )}\n onClick={handleClick}\n type=\"button\"\n {...props}\n >\n {children}\n </button>\n )\n }\n)\nTabsTrigger.displayName = \"TabsTrigger\"\n\n// 편의 컴포넌트들\nconst TabsPills = React.forwardRef<HTMLDivElement, TabsProps>(\n (props, ref) => <Tabs ref={ref} variant=\"pills\" {...props} />\n)\nTabsPills.displayName = \"TabsPills\"\n\nconst TabsUnderline = React.forwardRef<HTMLDivElement, TabsProps>(\n (props, ref) => <Tabs ref={ref} variant=\"underline\" {...props} />\n)\nTabsUnderline.displayName = \"TabsUnderline\"\n\nconst TabsCards = React.forwardRef<HTMLDivElement, TabsProps>(\n (props, ref) => <Tabs ref={ref} variant=\"cards\" {...props} />\n)\nTabsCards.displayName = \"TabsCards\"\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, TabsPills, TabsUnderline, TabsCards } "]}
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
export declare const avatarVariants: (props?: ({
|
|
3
3
|
size?: "sm" | "md" | "lg" | null | undefined;
|
|
4
4
|
variant?: "default" | "glass" | null | undefined;
|
|
5
|
-
} & import("class-variance-authority/
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
/**
|
|
7
7
|
* Avatar 컴포넌트의 props / Avatar component props
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../src/components/Avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAIvC,eAAO,MAAM,cAAc;;;
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../src/components/Avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAIvC,eAAO,MAAM,cAAc;;;8EAmB1B,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACvE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,gBAAiB,SAAQ,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;CAAG;AACtF,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;CAAG;AAEpF;;;;;;;;;GASG;AACH,QAAA,MAAM,MAAM,oFAiCX,CAAA;AAGD,QAAA,MAAM,WAAW,2FAQhB,CAAA;AAGD,QAAA,MAAM,cAAc,4FAWnB,CAAA;AAGD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
export declare const badgeVariants: (props?: ({
|
|
3
3
|
variant?: "default" | "error" | "outline" | "destructive" | "secondary" | "glass" | null | undefined;
|
|
4
|
-
} & import("class-variance-authority/
|
|
4
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
5
5
|
/**
|
|
6
6
|
* Badge 컴포넌트의 props / Badge component props
|
|
7
7
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/components/Badge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,aAAa;;
|
|
1
|
+
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/components/Badge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,aAAa;;8EAiBzB,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACtE,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAA;CAClF;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,KAAK,8EAUT,CAAA;AAGF,OAAO,EAAE,KAAK,EAAE,CAAA"}
|
|
@@ -5,7 +5,7 @@ export declare const buttonVariants: (props?: ({
|
|
|
5
5
|
shadow?: "none" | "sm" | "md" | "lg" | "xl" | null | undefined;
|
|
6
6
|
hover?: "slide" | "scale" | "none" | "springy" | "glow" | null | undefined;
|
|
7
7
|
fullWidth?: boolean | null | undefined;
|
|
8
|
-
} & import("class-variance-authority/
|
|
8
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
9
9
|
/** Gradient 프리셋 */
|
|
10
10
|
export declare const gradientPresets: Record<string, string>;
|
|
11
11
|
export type { VariantProps } from 'class-variance-authority';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.variants.d.ts","sourceRoot":"","sources":["../../src/components/Button.variants.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,cAAc;;;;;;;
|
|
1
|
+
{"version":3,"file":"Button.variants.d.ts","sourceRoot":"","sources":["../../src/components/Button.variants.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,cAAc;;;;;;;8EAyE1B,CAAA;AAED,mBAAmB;AACnB,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMlD,CAAA;AAED,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA"}
|
|
@@ -3,7 +3,7 @@ export declare const cardVariants: (props?: ({
|
|
|
3
3
|
variant?: "default" | "outline" | "elevated" | null | undefined;
|
|
4
4
|
shadow?: "none" | "sm" | "md" | "lg" | null | undefined;
|
|
5
5
|
padding?: "none" | "sm" | "md" | "lg" | null | undefined;
|
|
6
|
-
} & import("class-variance-authority/
|
|
6
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
7
|
/**
|
|
8
8
|
* Card 컴포넌트의 props / Card component props
|
|
9
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/components/Card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,YAAY;;;;
|
|
1
|
+
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/components/Card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,YAAY;;;;8EA2BxB,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACrE,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAA;IAC5C,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACpC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACrC,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;;;;;;;;;GAUG;AACH,QAAA,MAAM,IAAI,kFAeT,CAAA;AAID,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;CAAG;AAEhF,QAAA,MAAM,UAAU,wFAQf,CAAA;AAID,MAAM,WAAW,cAAe,SAAQ,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC;CAAG;AAEnF,QAAA,MAAM,SAAS,6FAWd,CAAA;AAID,MAAM,WAAW,oBAAqB,SAAQ,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC;CAAG;AAE3F,QAAA,MAAM,eAAe,mGAQpB,CAAA;AAID,MAAM,WAAW,gBAAiB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;CAAG;AAEjF,QAAA,MAAM,WAAW,yFAIhB,CAAA;AAID,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;CAAG;AAEhF,QAAA,MAAM,UAAU,wFAQf,CAAA;AAID,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,CAAA"}
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
export declare const containerVariants: (props?: ({
|
|
3
3
|
size?: "sm" | "md" | "lg" | "xl" | "full" | null | undefined;
|
|
4
4
|
padding?: "none" | "sm" | "md" | "lg" | "xl" | null | undefined;
|
|
5
|
-
} & import("class-variance-authority/
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
/**
|
|
7
7
|
* Container 컴포넌트의 props
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/components/Container.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,iBAAiB;;;
|
|
1
|
+
{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/components/Container.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,iBAAiB;;;8EAwB7B,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC1E,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAA;IACzC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;;;;;;;;GAUG;AACH,QAAA,MAAM,SAAS,uFAsBd,CAAA;AAGD,OAAO,EAAE,SAAS,EAAE,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
export declare const gridVariants: (props?: ({
|
|
3
3
|
gap?: "none" | "sm" | "md" | "lg" | "xl" | null | undefined;
|
|
4
|
-
} & import("class-variance-authority/
|
|
4
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
5
5
|
/**
|
|
6
6
|
* Grid 컴포넌트의 props
|
|
7
7
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../src/components/Grid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,YAAY;;
|
|
1
|
+
{"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../src/components/Grid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,YAAY;;8EAgBxB,CAAA;AAqBD;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACrE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;IACvD,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACxC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,IAAI,kFAwBT,CAAA;AAGD,OAAO,EAAE,IAAI,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/components/Icon/Icon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAmB,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAG5E,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEvD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,yBAAyB;IACzB,IAAI,EAAE,WAAW,CAAA;IACjB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,OAAO,YAAY,CAAA;IACnC,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,OAAO,WAAW,CAAA;IACjC,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iCAAiC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,mCAAmC;IACnC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAA;IACrG,gEAAgE;IAChE,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/components/Icon/Icon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAmB,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAG5E,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEvD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,yBAAyB;IACzB,IAAI,EAAE,WAAW,CAAA;IACjB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,OAAO,YAAY,CAAA;IACnC,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,OAAO,WAAW,CAAA;IACjC,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iCAAiC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,mCAAmC;IACnC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAA;IACrG,gEAAgE;IAChE,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,aAAa,mFAoMjB,CAAA;AAuBF,eAAO,MAAM,IAAI,EAAmB,OAAO,aAAa,CAAA;AAGxD,eAAO,MAAM,WAAW;aAA0E,MAAM,OAAO,YAAY;yCAE1H,CAAA;AAGD,eAAO,MAAM,UAAU;YAAyE,MAAM,OAAO,WAAW;yCAEvH,CAAA;AAGD,eAAO,MAAM,WAAW,2GAIvB,CAAA;AAGD,eAAO,MAAM,WAAW,2GAIvB,CAAA;AAGD,eAAO,MAAM,SAAS,2GAIrB,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
export declare const inputVariants: (props?: ({
|
|
3
3
|
variant?: "default" | "filled" | "outline" | "glass" | null | undefined;
|
|
4
|
-
} & import("class-variance-authority/
|
|
4
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
5
5
|
/**
|
|
6
6
|
* Input 컴포넌트의 props / Input component props
|
|
7
7
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../src/components/Input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,eAAO,MAAM,aAAa;;
|
|
1
|
+
{"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../src/components/Input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,eAAO,MAAM,aAAa;;8EAezB,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;IAC7E,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;IACpD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,KAAK,qFAoBV,CAAA;AAGD,OAAO,EAAE,KAAK,EAAE,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
export declare const labelVariants: (props?: ({
|
|
3
3
|
variant?: "default" | "glass" | null | undefined;
|
|
4
|
-
} & import("class-variance-authority/
|
|
4
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
5
5
|
/**
|
|
6
6
|
* Label 컴포넌트의 props / Label component props
|
|
7
7
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Label.d.ts","sourceRoot":"","sources":["../../src/components/Label.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,aAAa;;
|
|
1
|
+
{"version":3,"file":"Label.d.ts","sourceRoot":"","sources":["../../src/components/Label.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,aAAa;;8EAazB,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;CAC9B;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,KAAK,qFA6BV,CAAA;AAGD,OAAO,EAAE,KAAK,EAAE,CAAA"}
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
export declare const linkVariants: (props?: ({
|
|
3
3
|
variant?: "default" | "underline" | "secondary" | "ghost" | "primary" | null | undefined;
|
|
4
4
|
size?: "sm" | "md" | "lg" | null | undefined;
|
|
5
|
-
} & import("class-variance-authority/
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
/**
|
|
7
7
|
* Link 컴포넌트의 props / Link component props
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../src/components/Link.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,YAAY;;;
|
|
1
|
+
{"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../src/components/Link.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,YAAY;;;8EAsBxB,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,CAAA;IACrE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,OAAmB,EACnB,IAAW,EACX,QAAgB,EAChB,OAAO,EACR,EAAE,SAAS,2CAYX"}
|
|
@@ -5,7 +5,7 @@ export declare const panelStyleVariants: (props?: ({
|
|
|
5
5
|
effect?: "none" | "gradient" | "shadow" | "animated" | "glow" | null | undefined;
|
|
6
6
|
padding?: "none" | "small" | "medium" | "large" | "sm" | "md" | "lg" | "xl" | "custom" | null | undefined;
|
|
7
7
|
rounded?: "none" | "sm" | "md" | "lg" | "xl" | "full" | "custom" | null | undefined;
|
|
8
|
-
} & import("class-variance-authority/
|
|
8
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
9
9
|
/**
|
|
10
10
|
* Panel 컴포넌트의 props / Panel component props
|
|
11
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/components/Panel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAQ,SAAS,EAAE,MAAM,QAAQ,CAAA;AAExC,eAAO,MAAM,kBAAkB;;;;;
|
|
1
|
+
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/components/Panel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAQ,SAAS,EAAE,MAAM,QAAQ,CAAA;AAExC,eAAO,MAAM,kBAAkB;;;;;8EAmD9B,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAClF,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAA;IAC5H,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA;IAE7D,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,QAAQ,CAAA;IACtF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAA;IAChE,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB,UAAU,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAA;IACjE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,KAAK,mFAyKV,CAAA;AAID,OAAO,EAAE,KAAK,EAAE,CAAA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
export declare const progressBarVariants: (props?: ({
|
|
3
3
|
variant?: "default" | "error" | "glass" | "success" | "warning" | "info" | null | undefined;
|
|
4
|
-
} & import("class-variance-authority/
|
|
4
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
5
5
|
export declare const progressTrackVariants: (props?: ({
|
|
6
6
|
variant?: "default" | "error" | "glass" | "success" | "warning" | "info" | null | undefined;
|
|
7
7
|
size?: "sm" | "md" | "lg" | null | undefined;
|
|
8
|
-
} & import("class-variance-authority/
|
|
8
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
9
9
|
/**
|
|
10
10
|
* Progress 컴포넌트의 props
|
|
11
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Progress.d.ts","sourceRoot":"","sources":["../../src/components/Progress.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,mBAAmB;;
|
|
1
|
+
{"version":3,"file":"Progress.d.ts","sourceRoot":"","sources":["../../src/components/Progress.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,mBAAmB;;8EAiB/B,CAAA;AAED,eAAO,MAAM,qBAAqB;;;8EAuBjC,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACzE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;IACxE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,QAAQ,sFA0Db,CAAA;AAID,eAAO,MAAM,eAAe,uGAI3B,CAAA;AAGD,eAAO,MAAM,eAAe,uGAI3B,CAAA;AAGD,eAAO,MAAM,aAAa,uGAIzB,CAAA;AAGD,eAAO,MAAM,YAAY,uGAIxB,CAAA;AAID,eAAO,MAAM,eAAe;YAA8D,MAAM;wCAW/F,CAAA;AAGD,eAAO,MAAM,aAAa,6GAUzB,CAAA;AAGD,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
export declare const selectVariants: (props?: ({
|
|
3
3
|
variant?: "default" | "filled" | "outline" | "ghost" | "glass" | null | undefined;
|
|
4
4
|
size?: "sm" | "md" | "lg" | null | undefined;
|
|
5
|
-
} & import("class-variance-authority/
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
/**
|
|
7
7
|
* Select 컴포넌트의 props / Select component props
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../src/components/Select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,eAAO,MAAM,cAAc;;;
|
|
1
|
+
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../src/components/Select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,eAAO,MAAM,cAAc;;;8EAsB1B,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC9F,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAA;IAC9D,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAkB,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;IACtF,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,QAAA,MAAM,MAAM,uFAoFX,CAAA;AAGD,QAAA,MAAM,YAAY,6FAQjB,CAAA;AAGD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
export declare const skeletonVariants: (props?: ({
|
|
3
3
|
variant?: "text" | "rounded" | "circular" | "rectangular" | null | undefined;
|
|
4
4
|
animation?: "pulse" | "wave" | "shimmer" | null | undefined;
|
|
5
|
-
} & import("class-variance-authority/
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
6
|
/**
|
|
7
7
|
* Skeleton 컴포넌트의 props
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../../src/components/Skeleton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,gBAAgB;;;
|
|
1
|
+
{"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../../src/components/Skeleton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,gBAAgB;;;8EAqB5B,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACzE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,CAAA;IACzD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,QAAQ,sFA8Cb,CAAA;AAID,eAAO,MAAM,YAAY,uGAIxB,CAAA;AAGD,eAAO,MAAM,cAAc,uGAI1B,CAAA;AAGD,eAAO,MAAM,iBAAiB,uGAI7B,CAAA;AAGD,eAAO,MAAM,eAAe,uGAI3B,CAAA;AAID,eAAO,MAAM,YAAY,6GAsBxB,CAAA;AAGD,eAAO,MAAM,cAAc,6GAc1B,CAAA;AAGD,eAAO,MAAM,aAAa,6GAWzB,CAAA;AAGD,eAAO,MAAM,mBAAmB,6GAoB/B,CAAA;AAGD,eAAO,MAAM,YAAY,6GAkBxB,CAAA;AAGD,eAAO,MAAM,aAAa,6GAyBzB,CAAA;AAGD,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -3,7 +3,7 @@ export declare const stackVariants: (props?: ({
|
|
|
3
3
|
direction?: "horizontal" | "vertical" | null | undefined;
|
|
4
4
|
align?: "stretch" | "center" | "end" | "start" | null | undefined;
|
|
5
5
|
justify?: "center" | "end" | "start" | "between" | "around" | "evenly" | null | undefined;
|
|
6
|
-
} & import("class-variance-authority/
|
|
6
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
7
|
/**
|
|
8
8
|
* Stack 컴포넌트의 props
|
|
9
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../src/components/Stack.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,aAAa;;;;
|
|
1
|
+
{"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../src/components/Stack.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,aAAa;;;;8EA6BzB,CAAA;AAQD;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACtE,SAAS,CAAC,EAAE,UAAU,GAAG,YAAY,CAAA;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IAC5C,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAA;IAC9C,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACtE,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,KAAK,mFAuBV,CAAA;AAGD,OAAO,EAAE,KAAK,EAAE,CAAA"}
|
|
@@ -3,7 +3,7 @@ export declare const textareaVariants: (props?: ({
|
|
|
3
3
|
variant?: "default" | "filled" | "outline" | "ghost" | "glass" | null | undefined;
|
|
4
4
|
size?: "sm" | "md" | "lg" | null | undefined;
|
|
5
5
|
resize?: "none" | "both" | "horizontal" | "vertical" | null | undefined;
|
|
6
|
-
} & import("class-variance-authority/
|
|
6
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
7
|
/**
|
|
8
8
|
* Textarea 컴포넌트의 props / Textarea component props
|
|
9
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../src/components/Textarea.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,eAAO,MAAM,gBAAgB;;;;
|
|
1
|
+
{"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../src/components/Textarea.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,eAAO,MAAM,gBAAgB;;;;8EA6B5B,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC;IACtF,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAA;IAC9D,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAA;CACrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,QAAA,MAAM,QAAQ,2FA2Bb,CAAA;AAGD,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|