@_jinu/liquid-glass-ui 0.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 jinu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,141 @@
1
+ # Liquid Glass UI
2
+
3
+ Apple Liquid Glass에서 영감받은 React UI 컴포넌트 라이브러리입니다.
4
+ Glassmorphism 효과(backdrop blur, 반투명 배경, 유리 광택, 글로우)를 React 컴포넌트로 제공합니다.
5
+
6
+ ## Installation
7
+
8
+ ```bash
9
+ npm install liquid-glass-ui
10
+ ```
11
+
12
+ ## Setup
13
+
14
+ CSS 파일을 프로젝트 진입점에서 import하세요:
15
+
16
+ ```tsx
17
+ import 'liquid-glass-ui/dist/style.css';
18
+ ```
19
+
20
+ ## Components
21
+
22
+ ### Button
23
+
24
+ ```tsx
25
+ import { Button } from 'liquid-glass-ui';
26
+
27
+ <Button variant="accent" size="md" glow>
28
+ Click me
29
+ </Button>
30
+ ```
31
+
32
+ **Props**: `variant` (solid / outline / ghost / accent), `size` (sm / md / lg), `shape` (rounded / pill), `loading`, `glow`, `intensity`, `color`
33
+
34
+ ### Input
35
+
36
+ ```tsx
37
+ import { Input } from 'liquid-glass-ui';
38
+
39
+ <Input label="Email" placeholder="you@example.com" variant="solid" />
40
+ ```
41
+
42
+ **Props**: `variant` (solid / outline / ghost), `size` (sm / md / lg), `state` (default / error / success), `label`, `hint`, `errorMessage`
43
+
44
+ ### Badge
45
+
46
+ ```tsx
47
+ import { Badge } from 'liquid-glass-ui';
48
+
49
+ <Badge status="success" dot pulse>Active</Badge>
50
+ ```
51
+
52
+ **Props**: `variant` (solid / outline / ghost / accent), `size` (sm / md / lg), `shape` (rounded / pill), `status` (default / info / success / warning / error), `dot`, `pulse`, `closable`, `onClose`, `interactive`
53
+
54
+ ### Tabs
55
+
56
+ Compound Component 패턴으로 구성됩니다.
57
+
58
+ ```tsx
59
+ import { Tabs, TabList, Tab, TabPanel } from 'liquid-glass-ui';
60
+
61
+ <Tabs defaultValue="tab1">
62
+ <TabList>
63
+ <Tab value="tab1">First</Tab>
64
+ <Tab value="tab2">Second</Tab>
65
+ </TabList>
66
+ <TabPanel value="tab1">First content</TabPanel>
67
+ <TabPanel value="tab2" minHeight={200}>Second content</TabPanel>
68
+ </Tabs>
69
+ ```
70
+
71
+ **Tabs Props**: `value`, `defaultValue`, `onChange`, `variant` (solid / outline / pill), `size`, `intensity`
72
+
73
+ ### Toggle
74
+
75
+ ```tsx
76
+ import { Toggle } from 'liquid-glass-ui';
77
+
78
+ <Toggle label="Dark mode" size="md" color="139, 92, 246" />
79
+ ```
80
+
81
+ **Props**: `checked`, `defaultChecked`, `onChange`, `size` (sm / md / lg), `label`, `labelPosition` (left / right), `color`, `disabled`
82
+
83
+ ### Card
84
+
85
+ ```tsx
86
+ import { Card, CardHeader, CardBody, CardFooter } from 'liquid-glass-ui';
87
+
88
+ <Card variant="solid" hoverable glow>
89
+ <CardHeader>Title</CardHeader>
90
+ <CardBody>Content goes here</CardBody>
91
+ <CardFooter align="right">
92
+ <Button variant="accent">Action</Button>
93
+ </CardFooter>
94
+ </Card>
95
+ ```
96
+
97
+ **Card Props**: `variant` (solid / outline / ghost), `size` (sm / md / lg), `hoverable`, `glow`, `intensity`, `color`
98
+
99
+ ### Tooltip
100
+
101
+ ```tsx
102
+ import { Tooltip } from 'liquid-glass-ui';
103
+
104
+ <Tooltip content="Help text" placement="top" arrow>
105
+ <button>Hover me</button>
106
+ </Tooltip>
107
+ ```
108
+
109
+ **Props**: `content`, `placement` (top / bottom / left / right), `trigger` (hover / click), `arrow`, `delay`, `closeDelay`, `disabled`, `intensity`
110
+
111
+ ### Modal
112
+
113
+ ```tsx
114
+ import { Modal, ModalHeader, ModalBody, ModalFooter } from 'liquid-glass-ui';
115
+
116
+ const [open, setOpen] = useState(false);
117
+
118
+ <Modal open={open} onClose={() => setOpen(false)} size="md">
119
+ <ModalHeader>Title</ModalHeader>
120
+ <ModalBody>Modal content</ModalBody>
121
+ <ModalFooter align="right">
122
+ <Button variant="accent">Confirm</Button>
123
+ </ModalFooter>
124
+ </Modal>
125
+ ```
126
+
127
+ **Modal Props**: `open`, `onClose`, `size` (sm / md / lg), `closeOnOverlay`, `closeOnEsc`, `bgColor`, `intensity`
128
+
129
+ ## Features
130
+
131
+ - React 18 / 19 지원
132
+ - TypeScript 완벽 지원 (타입 선언 포함)
133
+ - CSS Modules 기반 스타일링 (전역 스타일 오염 없음)
134
+ - 접근성 (ARIA roles, keyboard navigation, focus management)
135
+ - Controlled / Uncontrolled 패턴 지원
136
+ - Tree-shaking 지원
137
+ - forwardRef 지원
138
+
139
+ ## License
140
+
141
+ MIT
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react"),ue=require("react-dom"),be="_btn_1sfqc_2",he="_glassShine_1sfqc_46",pe="_glassEdge_1sfqc_55",fe="_glow_1sfqc_165",me="_loading_1sfqc_179",ge="_spinner_1sfqc_181",xe="_spin_1sfqc_181",ve="_icon_1sfqc_193",ye="_label_1sfqc_198",B={btn:be,glassShine:he,glassEdge:pe,"size-sm":"_size-sm_1sfqc_64","size-md":"_size-md_1sfqc_70","size-lg":"_size-lg_1sfqc_76","shape-pill":"_shape-pill_1sfqc_84","shape-rounded":"_shape-rounded_1sfqc_85","variant-solid":"_variant-solid_1sfqc_88","variant-outline":"_variant-outline_1sfqc_107","variant-ghost":"_variant-ghost_1sfqc_124","variant-accent":"_variant-accent_1sfqc_146",glow:fe,loading:me,spinner:ge,spin:xe,icon:ve,label:ye},D=a.forwardRef(({variant:s="solid",size:o="md",shape:t="rounded",loading:n=!1,leftIcon:l,rightIcon:r,intensity:c=1,color:_,glow:d=!1,disabled:u,className:v,children:g,style:h,...p},m)=>{const f=u||n,x=`${Math.round(20*c)}px`,b=.08+.14*c,y={"--glass-blur":x,"--glass-bg-opacity":b,..._?{"--glass-accent-color":_}:{},...h},i=[B.btn,B[`variant-${s}`],B[`size-${o}`],B[`shape-${t}`],d?B.glow:"",n?B.loading:"",v??""].filter(Boolean).join(" ");return e.jsxs("button",{ref:m,className:i,disabled:f,style:y,...p,children:[e.jsx("span",{className:B.glassShine,"aria-hidden":"true"}),e.jsx("span",{className:B.glassEdge,"aria-hidden":"true"}),n&&e.jsx("span",{className:B.spinner,"aria-hidden":"true"}),!n&&l&&e.jsx("span",{className:B.icon,children:l}),g&&e.jsx("span",{className:B.label,children:g}),!n&&r&&e.jsx("span",{className:B.icon,children:r})]})});D.displayName="Button";const we="_wrapper_1lbwl_2",je="_disabled_1lbwl_10",$e="_label_1lbwl_17",Ne="_fieldWrap_1lbwl_25",ze="_input_1lbwl_32",Ce="_hasLeft_1lbwl_74",ke="_hasRight_1lbwl_75",Se="_icon_1lbwl_139",Be="_iconLeft_1lbwl_148",Me="_iconRight_1lbwl_149",Te="_iconBtn_1lbwl_151",Re="_hint_1lbwl_163",Ee="_errorMsg_1lbwl_168",Le="_successMsg_1lbwl_173",j={wrapper:we,disabled:je,label:$e,fieldWrap:Ne,input:ze,"size-sm":"_size-sm_1lbwl_54","size-md":"_size-md_1lbwl_60","size-lg":"_size-lg_1lbwl_66",hasLeft:Ce,hasRight:ke,"variant-solid":"_variant-solid_1lbwl_78","variant-outline":"_variant-outline_1lbwl_94","variant-ghost":"_variant-ghost_1lbwl_105","state-error":"_state-error_1lbwl_119","state-success":"_state-success_1lbwl_129",icon:Se,iconLeft:Be,iconRight:Me,iconBtn:Te,hint:Re,errorMsg:Ee,successMsg:Le},K=a.forwardRef(({variant:s="solid",size:o="md",state:t="default",label:n,hint:l,errorMessage:r,successMessage:c,leftIcon:_,rightIcon:d,numeric:u=!1,intensity:v=1,type:g="text",disabled:h,className:p,style:m,onChange:f,...x},b)=>{const[y,i]=a.useState(!1),w=g==="password",N=w?y?"text":"password":g,I={"--glass-blur":`${Math.round(20*v)}px`,...m},$=z=>{if(u){const q=z.target.value;if(q!==""&&!/^\d*\.?\d*$/.test(q)){z.target.value=q.replace(/[^\d.]/g,"");return}}f?.(z)},L=z=>{if(u){const q=["Backspace","Delete","Tab","Escape","Enter","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End",".","Process"],ce=/^\d$/.test(z.key),de=q.includes(z.key),_e=z.ctrlKey||z.metaKey;!ce&&!de&&!_e&&z.preventDefault()}x.onKeyDown?.(z)},S=z=>{u&&(z.currentTarget.blur(),z.currentTarget.focus())},A=[j.wrapper,h?j.disabled:""].filter(Boolean).join(" "),re=[j.input,j[`variant-${s}`],j[`size-${o}`],t!=="default"?j[`state-${t}`]:"",_?j.hasLeft:"",d||w?j.hasRight:"",p??""].filter(Boolean).join(" "),ie=t==="error"&&r?e.jsx("span",{className:j.errorMsg,children:r}):t==="success"&&c?e.jsx("span",{className:j.successMsg,children:c}):l?e.jsx("span",{className:j.hint,children:l}):null;return e.jsxs("div",{className:A,style:I,children:[n&&e.jsx("label",{className:j.label,children:n}),e.jsxs("div",{className:j.fieldWrap,children:[_&&e.jsx("span",{className:`${j.icon} ${j.iconLeft}`,children:_}),e.jsx("input",{ref:b,type:N,inputMode:u?"decimal":void 0,disabled:h,className:re,onChange:$,onKeyDown:L,onCompositionStart:S,...x}),w&&e.jsx("button",{type:"button",className:`${j.icon} ${j.iconRight} ${j.iconBtn}`,onClick:()=>i(z=>!z),tabIndex:-1,"aria-label":y?"비밀번호 숨기기":"비밀번호 보기",children:y?e.jsxs("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"}),e.jsx("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]}):e.jsxs("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),e.jsx("circle",{cx:"12",cy:"12",r:"3"})]})}),!w&&d&&e.jsx("span",{className:`${j.icon} ${j.iconRight}`,children:d})]}),ie]})});K.displayName="Input";const Pe="_badge_1nxby_2",Ie="_interactive_1nxby_29",qe="_glassShine_1nxby_48",Ae="_glassEdge_1nxby_57",Ve="_glow_1nxby_195",De="_dot_1nxby_203",Ke="_pulse_1nxby_223",Fe="_dotPulse_1nxby_1",We="_icon_1nxby_240",He="_label_1nxby_247",Oe="_closeBtn_1nxby_254",C={badge:Pe,interactive:Ie,glassShine:qe,glassEdge:Ae,"size-sm":"_size-sm_1nxby_68","size-md":"_size-md_1nxby_76","size-lg":"_size-lg_1nxby_84","shape-pill":"_shape-pill_1nxby_93","shape-rounded":"_shape-rounded_1nxby_97","variant-solid":"_variant-solid_1nxby_102","variant-outline":"_variant-outline_1nxby_122","variant-ghost":"_variant-ghost_1nxby_140","variant-accent":"_variant-accent_1nxby_175",glow:Ve,dot:De,pulse:Ke,dotPulse:Fe,icon:We,label:He,closeBtn:Oe},Ue={default:"139, 92, 246",info:"59, 130, 246",success:"34, 197, 94",warning:"245, 158, 11",error:"239, 68, 68"},F=a.forwardRef(({variant:s="solid",size:o="md",shape:t="pill",status:n="default",leftIcon:l,rightIcon:r,dot:c=!1,pulse:_=!1,intensity:d=1,color:u,glow:v=!1,interactive:g=!1,closable:h=!1,onClose:p,className:m,children:f,style:x,onClick:b,...y},i)=>{const w=`${Math.round(16*d)}px`,N=.06+.12*d,E=u||Ue[n],I={"--glass-blur":w,"--glass-bg-opacity":N,"--badge-color":E,...x},$=g||!!b,L=[C.badge,C[`variant-${s}`],C[`size-${o}`],C[`shape-${t}`],v?C.glow:"",$?C.interactive:"",m??""].filter(Boolean).join(" ");return e.jsxs("span",{ref:i,className:L,style:I,role:$?"button":void 0,tabIndex:$?0:void 0,onClick:b,onKeyDown:$?S=>{(S.key==="Enter"||S.key===" ")&&(S.preventDefault(),b?.(S))}:void 0,...y,children:[e.jsx("span",{className:C.glassShine,"aria-hidden":"true"}),e.jsx("span",{className:C.glassEdge,"aria-hidden":"true"}),c&&e.jsx("span",{className:`${C.dot} ${_?C.pulse:""}`,"aria-hidden":"true"}),l&&e.jsx("span",{className:C.icon,children:l}),f&&e.jsx("span",{className:C.label,children:f}),r&&!h&&e.jsx("span",{className:C.icon,children:r}),h&&e.jsx("button",{type:"button",className:C.closeBtn,onClick:S=>{S.stopPropagation(),p?.(S)},tabIndex:-1,"aria-label":"닫기",children:e.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})});F.displayName="Badge";const Ge="_tabs_1ccrt_2",Je="_tabList_1ccrt_9",Qe="_tab_1ccrt_2",Xe="_active_1ccrt_101",Ye="_icon_1ccrt_179",Ze="_label_1ccrt_186",es="_tabPanel_1ccrt_193",ss="_fadeIn_1ccrt_1",k={tabs:Ge,tabList:Je,"list-variant-solid":"_list-variant-solid_1ccrt_27","list-variant-outline":"_list-variant-outline_1ccrt_38","list-variant-pill":"_list-variant-pill_1ccrt_49","list-size-sm":"_list-size-sm_1ccrt_58","list-size-md":"_list-size-md_1ccrt_59","list-size-lg":"_list-size-lg_1ccrt_60",tab:Qe,active:Xe,"tab-size-sm":"_tab-size-sm_1ccrt_106","tab-size-md":"_tab-size-md_1ccrt_112","tab-size-lg":"_tab-size-lg_1ccrt_118","tab-variant-solid":"_tab-variant-solid_1ccrt_125","tab-variant-outline":"_tab-variant-outline_1ccrt_143","tab-variant-pill":"_tab-variant-pill_1ccrt_162",icon:Ye,label:Ze,tabPanel:es,fadeIn:ss},W=a.createContext(null);function V(){const s=a.useContext(W);if(!s)throw new Error("Tabs 컴포넌트 안에서 사용해야 합니다.");return s}const H=a.forwardRef(({defaultValue:s="",value:o,onValueChange:t,variant:n="solid",size:l="md",intensity:r=1,className:c,children:_,...d},u)=>{const[v,g]=a.useState(s),h=o!==void 0,p=h?o:v,m=a.useCallback(b=>{h||g(b),t?.(b)},[h,t]),f=a.useId(),x=a.useMemo(()=>({activeValue:p,setActiveValue:m,variant:n,size:l,intensity:r,idPrefix:f}),[p,m,n,l,r,f]);return e.jsx(W.Provider,{value:x,children:e.jsx("div",{ref:u,className:`${k.tabs} ${c??""}`,...d,children:_})})});H.displayName="Tabs";const O=a.forwardRef(({className:s,children:o,...t},n)=>{const{variant:l,size:r,intensity:c}=V(),d={"--glass-blur":`${Math.round(18*c)}px`,...t.style},u=[k.tabList,k[`list-variant-${l}`],k[`list-size-${r}`],s??""].filter(Boolean).join(" ");return e.jsx("div",{ref:n,role:"tablist",className:u,style:d,...t,children:o})});O.displayName="TabList";const U=a.forwardRef(({value:s,leftIcon:o,rightIcon:t,disabled:n,className:l,children:r,...c},_)=>{const{activeValue:d,setActiveValue:u,variant:v,size:g,idPrefix:h}=V(),p=d===s,m=()=>{n||u(s)},f=b=>{const y=b.currentTarget.parentElement;if(!y)return;const i=Array.from(y.querySelectorAll('[role="tab"]:not([disabled])')),w=i.indexOf(b.currentTarget);let N=-1;b.key==="ArrowRight"?N=(w+1)%i.length:b.key==="ArrowLeft"?N=(w-1+i.length)%i.length:b.key==="Home"?N=0:b.key==="End"&&(N=i.length-1),N>=0&&(b.preventDefault(),i[N].focus(),u(i[N].dataset.value))},x=[k.tab,k[`tab-variant-${v}`],k[`tab-size-${g}`],p?k.active:"",l??""].filter(Boolean).join(" ");return e.jsxs("button",{ref:_,role:"tab",type:"button",id:`${h}-tab-${s}`,"aria-controls":`${h}-panel-${s}`,"aria-selected":p,tabIndex:p?0:-1,"data-value":s,disabled:n,className:x,onClick:m,onKeyDown:f,...c,children:[o&&e.jsx("span",{className:k.icon,children:o}),r&&e.jsx("span",{className:k.label,children:r}),t&&e.jsx("span",{className:k.icon,children:t})]})});U.displayName="Tab";const G=a.forwardRef(({value:s,keepMounted:o=!1,minHeight:t,className:n,style:l,children:r,...c},_)=>{const{activeValue:d,idPrefix:u}=V(),v=d===s;if(!v&&!o)return null;const g={...t!==void 0?{minHeight:typeof t=="number"?`${t}px`:t}:{},...l};return e.jsx("div",{ref:_,role:"tabpanel",id:`${u}-panel-${s}`,"aria-labelledby":`${u}-tab-${s}`,hidden:!v,className:`${k.tabPanel} ${v?k.panelActive:""} ${n??""}`,style:g,tabIndex:0,...c,children:r})});G.displayName="TabPanel";const ts="_wrapper_wjadh_2",as="_disabled_wjadh_12",ns="_label_wjadh_19",os="_track_wjadh_28",ls="_checked_wjadh_56",rs="_glassShine_wjadh_85",is="_thumb_wjadh_94",cs="_thumbShine_wjadh_110",R={wrapper:ts,disabled:as,label:ns,track:os,checked:ls,"size-sm":"_size-sm_wjadh_66","size-md":"_size-md_wjadh_72","size-lg":"_size-lg_wjadh_78",glassShine:rs,thumb:is,thumbShine:cs},J=a.forwardRef(({checked:s,defaultChecked:o=!1,onChange:t,size:n="md",label:l,labelPosition:r="right",intensity:c=1,color:_,disabled:d,className:u,style:v,...g},h)=>{const[p,m]=a.useState(o),f=s!==void 0,x=f?s:p,b=a.useId(),y=a.useCallback(()=>{if(d)return;const L=!x;f||m(L),t?.(L)},[d,x,f,t]),i=`${Math.round(14*c)}px`,w=.06+.1*c,N={"--glass-blur":i,"--glass-bg-opacity":w,..._?{"--toggle-active-color":_}:{},...v},E=[R.wrapper,d?R.disabled:"",u??""].filter(Boolean).join(" "),I=[R.track,R[`size-${n}`],x?R.checked:""].filter(Boolean).join(" "),$=l?e.jsx("span",{id:b,className:R.label,children:l}):null;return e.jsxs("div",{className:E,style:N,children:[r==="left"&&$,e.jsxs("button",{ref:h,type:"button",role:"switch","aria-checked":x,"aria-labelledby":l?b:void 0,disabled:d,className:I,onClick:y,...g,children:[e.jsx("span",{className:R.glassShine,"aria-hidden":"true"}),e.jsx("span",{className:R.thumb,children:e.jsx("span",{className:R.thumbShine,"aria-hidden":"true"})})]}),r==="right"&&$]})});J.displayName="Toggle";const ds="_card_179ui_2",_s="_glassShine_179ui_17",us="_glassEdge_179ui_26",bs="_hoverable_179ui_72",hs="_glow_179ui_101",ps="_header_179ui_111",fs="_body_179ui_112",ms="_footer_179ui_113",gs="_headerCover_179ui_114",M={card:ds,glassShine:_s,glassEdge:us,"variant-solid":"_variant-solid_179ui_38","variant-outline":"_variant-outline_179ui_51","variant-ghost":"_variant-ghost_179ui_63",hoverable:bs,glow:hs,"size-sm":"_size-sm_179ui_111",header:ps,body:fs,footer:ms,headerCover:gs,"size-md":"_size-md_179ui_117","size-lg":"_size-lg_179ui_123","footer-align-left":"_footer-align-left_179ui_162","footer-align-center":"_footer-align-center_179ui_163","footer-align-right":"_footer-align-right_179ui_164","footer-align-between":"_footer-align-between_179ui_165"},xs=a.createContext({variant:"solid",size:"md"}),Q=a.forwardRef(({variant:s="solid",size:o="md",hoverable:t=!1,glow:n=!1,intensity:l=1,color:r,className:c,children:_,style:d,...u},v)=>{const g=`${Math.round(20*l)}px`,h=.04+.1*l,p={"--glass-blur":g,"--glass-bg-opacity":h,...r?{"--card-glow-color":r}:{},...d},m=[M.card,M[`variant-${s}`],M[`size-${o}`],t?M.hoverable:"",n?M.glow:"",c??""].filter(Boolean).join(" "),f=a.useMemo(()=>({variant:s,size:o}),[s,o]);return e.jsx(xs.Provider,{value:f,children:e.jsxs("div",{ref:v,className:m,style:p,...u,children:[s!=="ghost"&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:M.glassShine,"aria-hidden":"true"}),e.jsx("span",{className:M.glassEdge,"aria-hidden":"true"})]}),_]})})});Q.displayName="Card";const X=a.forwardRef(({cover:s=!1,className:o,children:t,...n},l)=>{const r=[M.header,s?M.headerCover:"",o??""].filter(Boolean).join(" ");return e.jsx("div",{ref:l,className:r,...n,children:t})});X.displayName="CardHeader";const Y=a.forwardRef(({className:s,children:o,...t},n)=>e.jsx("div",{ref:n,className:`${M.body} ${s??""}`,...t,children:o}));Y.displayName="CardBody";const Z=a.forwardRef(({align:s="right",className:o,children:t,...n},l)=>{const r=[M.footer,M[`footer-align-${s}`],o??""].filter(Boolean).join(" ");return e.jsx("div",{ref:l,className:r,...n,children:t})});Z.displayName="CardFooter";const vs="_wrapper_xai1o_2",ys="_tooltip_xai1o_8",ws="_visible_xai1o_33",js="_glassShine_xai1o_39",$s="_content_xai1o_48",Ns="_arrow_xai1o_58",P={wrapper:vs,tooltip:ys,visible:ws,glassShine:js,content:$s,arrow:Ns,"placement-top":"_placement-top_xai1o_73","placement-bottom":"_placement-bottom_xai1o_92","placement-left":"_placement-left_xai1o_111","placement-right":"_placement-right_xai1o_130"},ee=({content:s,placement:o="top",trigger:t="hover",arrow:n=!0,delay:l=200,closeDelay:r=100,open:c,onOpenChange:_,disabled:d=!1,intensity:u=1,children:v})=>{const[g,h]=a.useState(!1),p=c!==void 0,m=p?c:g,f=a.useRef(null),x=a.useRef(null),b=a.useId(),y=a.useCallback(()=>{f.current&&(clearTimeout(f.current),f.current=null),x.current&&(clearTimeout(x.current),x.current=null)},[]),i=a.useCallback(()=>{d||(y(),f.current=setTimeout(()=>{p||h(!0),_?.(!0)},l))},[d,y,l,p,_]),w=a.useCallback(()=>{y(),x.current=setTimeout(()=>{p||h(!1),_?.(!1)},r)},[y,r,p,_]),N=a.useCallback(()=>{m?w():i()},[m,i,w]),E=a.useRef(null);a.useEffect(()=>{if(t!=="click"||!m)return;const S=A=>{E.current&&!E.current.contains(A.target)&&w()};return document.addEventListener("mousedown",S),()=>document.removeEventListener("mousedown",S)},[t,m,w]),a.useEffect(()=>y,[y]);const I=`${Math.round(20*u)}px`,$={"aria-describedby":m?b:void 0};t==="hover"?($.onMouseEnter=i,$.onMouseLeave=w,$.onFocus=i,$.onBlur=w):$.onClick=N;const L=[P.tooltip,P[`placement-${o}`],n?P.withArrow:"",m?P.visible:""].filter(Boolean).join(" ");return e.jsxs("div",{ref:E,className:P.wrapper,...t==="hover"?{onMouseEnter:i,onMouseLeave:w}:{},children:[a.cloneElement(v,$),e.jsxs("div",{id:b,role:"tooltip",className:L,style:{"--glass-blur":I},children:[e.jsx("span",{className:P.glassShine,"aria-hidden":"true"}),n&&e.jsx("span",{className:P.arrow,"aria-hidden":"true"}),e.jsx("span",{className:P.content,children:s})]})]})};ee.displayName="Tooltip";const zs="_overlay_1plz5_2",Cs="_overlayIn_1plz5_1",ks="_modal_1plz5_24",Ss="_modalIn_1plz5_1",Bs="_glassShine_1plz5_61",Ms="_glassEdge_1plz5_70",Ts="_header_1plz5_82",Rs="_headerContent_1plz5_92",Es="_closeBtn_1plz5_98",Ls="_body_1plz5_126",Ps="_footer_1plz5_133",T={overlay:zs,overlayIn:Cs,modal:ks,modalIn:Ss,"size-sm":"_size-sm_1plz5_56","size-md":"_size-md_1plz5_57","size-lg":"_size-lg_1plz5_58",glassShine:Bs,glassEdge:Ms,header:Ts,headerContent:Rs,closeBtn:Es,body:Ls,footer:Ps,"footer-align-left":"_footer-align-left_1plz5_142","footer-align-center":"_footer-align-center_1plz5_143","footer-align-right":"_footer-align-right_1plz5_144"},se=({open:s,onClose:o,size:t="md",closeOnOverlay:n=!0,closeOnEsc:l=!0,intensity:r=1,bgColor:c,portalTarget:_,className:d,style:u,children:v})=>{const g=a.useRef(null),h=a.useRef(null),p=a.useId();a.useEffect(()=>{if(!s||!l)return;const i=w=>{w.key==="Escape"&&o()};return document.addEventListener("keydown",i),()=>document.removeEventListener("keydown",i)},[s,l,o]),a.useEffect(()=>{if(!s)return;const i=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=i}},[s]),a.useEffect(()=>{if(!s||!h.current)return;const i=document.activeElement;return h.current.focus(),()=>{i?.focus()}},[s]);const m=a.useCallback(i=>{n&&i.target===g.current&&o()},[n,o]),f=`${Math.round(24*r)}px`,x=`${Math.round(6*r)}px`,b={"--modal-blur":f,"--overlay-blur":x,...c?{"--modal-bg":c}:{},...u};if(!s)return null;const y=e.jsx("div",{ref:g,className:`${T.overlay} ${s?T.open:""}`,onClick:m,"aria-hidden":!s,children:e.jsxs("div",{ref:h,role:"dialog","aria-modal":"true","aria-labelledby":p,tabIndex:-1,className:`${T.modal} ${T[`size-${t}`]} ${d??""}`,style:b,children:[e.jsx("span",{className:T.glassShine,"aria-hidden":"true"}),e.jsx("span",{className:T.glassEdge,"aria-hidden":"true"}),e.jsx(te.Provider,{value:{titleId:p,onClose:o},children:v})]})});return ue.createPortal(y,_||document.body)};se.displayName="Modal";const te=a.createContext({titleId:"",onClose:()=>{}}),Is=()=>a.useContext(te),ae=a.forwardRef(({showClose:s=!0,className:o,children:t,...n},l)=>{const{titleId:r,onClose:c}=Is();return e.jsxs("div",{ref:l,className:`${T.header} ${o??""}`,...n,children:[e.jsx("div",{id:r,className:T.headerContent,children:t}),s&&e.jsx("button",{type:"button",className:T.closeBtn,onClick:c,"aria-label":"닫기",children:e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})});ae.displayName="ModalHeader";const ne=a.forwardRef(({className:s,children:o,...t},n)=>e.jsx("div",{ref:n,className:`${T.body} ${s??""}`,...t,children:o}));ne.displayName="ModalBody";const oe=a.forwardRef(({align:s="right",className:o,children:t,...n},l)=>{const r=[T.footer,T[`footer-align-${s}`],o??""].filter(Boolean).join(" ");return e.jsx("div",{ref:l,className:r,...n,children:t})});oe.displayName="ModalFooter";const le=({theme:s,children:o,style:t,...n})=>e.jsx("div",{"data-theme":s==="default"?void 0:s,style:{display:"contents",...t},...n,children:o});le.displayName="ThemeProvider";exports.Badge=F;exports.Button=D;exports.Card=Q;exports.CardBody=Y;exports.CardFooter=Z;exports.CardHeader=X;exports.Input=K;exports.Modal=se;exports.ModalBody=ne;exports.ModalFooter=oe;exports.ModalHeader=ae;exports.Tab=U;exports.TabList=O;exports.TabPanel=G;exports.Tabs=H;exports.ThemeProvider=le;exports.Toggle=J;exports.Tooltip=ee;
@@ -0,0 +1 @@
1
+ ._btn_1sfqc_2{--glass-blur: 20px;--glass-bg-opacity: .14;--glass-accent-color: 139, 92, 246;display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:inherit;font-weight:500;border:none;cursor:pointer;position:relative;overflow:hidden;transition:transform .25s cubic-bezier(.34,1.56,.64,1),box-shadow .25s ease,background .2s ease,opacity .2s ease,border-color .2s ease;-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));white-space:nowrap;-webkit-user-select:none;user-select:none;text-decoration:none;outline:none}._btn_1sfqc_2:focus-visible{outline:2px solid rgba(255,255,255,.5);outline-offset:2px}._btn_1sfqc_2:hover{transform:translateY(-2px)}._btn_1sfqc_2:active{transform:translateY(0) scale(.97)}._btn_1sfqc_2:disabled{opacity:.35;cursor:not-allowed;transform:none!important;pointer-events:none}._glassShine_1sfqc_46{position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.18) 0%,transparent 60%);pointer-events:none;border-radius:inherit;transition:opacity .25s ease}._glassEdge_1sfqc_55{position:absolute;top:0;left:10%;right:10%;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent);pointer-events:none}._size-sm_1sfqc_64{height:32px;padding:0 14px;font-size:13px;border-radius:10px}._size-md_1sfqc_70{height:42px;padding:0 20px;font-size:14.5px;border-radius:14px}._size-lg_1sfqc_76{height:54px;padding:0 28px;font-size:16px;border-radius:18px}._shape-pill_1sfqc_84{border-radius:9999px!important}._variant-solid_1sfqc_88{background:rgba(255,255,255,var(--glass-bg-opacity));border:1px solid rgba(255,255,255,.28);color:#ffffffeb;box-shadow:0 4px 16px #0003,0 1px 4px #00000026,inset 0 1px #ffffff1f}._variant-solid_1sfqc_88:hover:not(:disabled){background:#ffffff38;border-color:#fff6;box-shadow:0 8px 28px #00000040,0 2px 8px #00000026,inset 0 1px #fff3}._variant-outline_1sfqc_107{background:#ffffff0a;border:1.5px solid rgba(255,255,255,.35);color:#ffffffd9;box-shadow:0 2px 12px #0000001f,inset 0 1px #ffffff14}._variant-outline_1sfqc_107:hover:not(:disabled){background:#ffffff1a;border-color:#ffffff8c;box-shadow:0 6px 20px #0000002e,inset 0 1px #ffffff26}._variant-ghost_1sfqc_124{background:transparent;border:1px solid transparent;color:#ffffffb3;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none}._variant-ghost_1sfqc_124 ._glassShine_1sfqc_46,._variant-ghost_1sfqc_124 ._glassEdge_1sfqc_55{opacity:0}._variant-ghost_1sfqc_124:hover:not(:disabled){background:#ffffff1a;border-color:#fff3;color:#ffffffeb;-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));box-shadow:0 4px 16px #00000026}._variant-ghost_1sfqc_124:hover ._glassShine_1sfqc_46,._variant-ghost_1sfqc_124:hover ._glassEdge_1sfqc_55{opacity:1}._variant-accent_1sfqc_146{background:rgba(var(--glass-accent-color),.3);border:1px solid rgba(var(--glass-accent-color),.45);color:#fffffff2;box-shadow:0 4px 20px rgba(var(--glass-accent-color),.25),0 1px 4px #00000026,inset 0 1px #ffffff26}._variant-accent_1sfqc_146:hover:not(:disabled){background:rgba(var(--glass-accent-color),.45);border-color:rgba(var(--glass-accent-color),.65);box-shadow:0 8px 32px rgba(var(--glass-accent-color),.35),0 2px 8px #0003,inset 0 1px #fff3}._glow_1sfqc_165:hover:not(:disabled){box-shadow:0 0 20px #ffffff26,0 0 40px #ffffff14,0 8px 28px #00000040}._variant-accent_1sfqc_146._glow_1sfqc_165:hover:not(:disabled){box-shadow:0 0 20px rgba(var(--glass-accent-color),.4),0 0 40px rgba(var(--glass-accent-color),.2),0 8px 32px rgba(var(--glass-accent-color),.3)}._loading_1sfqc_179{pointer-events:none;opacity:.75}._spinner_1sfqc_181{width:14px;height:14px;border:2px solid rgba(255,255,255,.25);border-top-color:#ffffffe6;border-radius:50%;animation:_spin_1sfqc_181 .7s linear infinite;flex-shrink:0}@keyframes _spin_1sfqc_181{to{transform:rotate(360deg)}}._icon_1sfqc_193{display:inline-flex;align-items:center;flex-shrink:0}._label_1sfqc_198{display:inline-flex;align-items:center}@media(max-width:480px){._size-lg_1sfqc_76{height:48px;padding:0 22px;font-size:15px}}._wrapper_1lbwl_2{--glass-blur: 20px;display:flex;flex-direction:column;gap:6px;width:100%}._wrapper_1lbwl_2._disabled_1lbwl_10{opacity:.35;cursor:not-allowed;pointer-events:none}._label_1lbwl_17{font-size:13px;font-weight:500;color:#fff9;padding-left:2px}._fieldWrap_1lbwl_25{position:relative;display:flex;align-items:center}._input_1lbwl_32{width:100%;font-family:inherit;font-weight:400;color:#ffffffeb;background:transparent;border:none;outline:none;caret-color:#a78bfa;transition:background .2s ease,border-color .2s ease,box-shadow .2s ease;-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur))}._input_1lbwl_32::placeholder{color:#ffffff47}._size-sm_1lbwl_54{height:36px;padding:0 14px;font-size:13px;border-radius:10px}._size-md_1lbwl_60{height:44px;padding:0 16px;font-size:14.5px;border-radius:14px}._size-lg_1lbwl_66{height:54px;padding:0 20px;font-size:16px;border-radius:18px}._hasLeft_1lbwl_74{padding-left:40px!important}._hasRight_1lbwl_75{padding-right:40px!important}._variant-solid_1lbwl_78{background:#ffffff1a;border:1px solid rgba(255,255,255,.18);box-shadow:inset 0 1px #ffffff0f,0 2px 8px #00000026}._variant-solid_1lbwl_78:focus{background:#ffffff24;border-color:#a78bfa99;box-shadow:inset 0 1px #ffffff14,0 0 0 3px #8b5cf626}._variant-outline_1lbwl_94{background:#ffffff08;border:1.5px solid rgba(255,255,255,.25)}._variant-outline_1lbwl_94:focus{background:#ffffff12;border-color:#a78bfab3;box-shadow:0 0 0 3px #8b5cf626}._variant-ghost_1lbwl_105{background:transparent;border:1px solid transparent;border-bottom:1px solid rgba(255,255,255,.2);border-radius:0!important;-webkit-backdrop-filter:none;backdrop-filter:none}._variant-ghost_1lbwl_105:focus{border-bottom-color:#a78bfacc;box-shadow:0 1px #8b5cf666}._state-error_1lbwl_119{border-color:#f8717199!important;box-shadow:0 0 0 3px #ef444426!important}._state-error_1lbwl_119:focus{border-color:#f87171cc!important;box-shadow:0 0 0 3px #ef444433!important}._state-success_1lbwl_129{border-color:#4ade8099!important;box-shadow:0 0 0 3px #22c55e26!important}._state-success_1lbwl_129:focus{border-color:#4ade80cc!important;box-shadow:0 0 0 3px #22c55e33!important}._icon_1lbwl_139{position:absolute;display:flex;align-items:center;justify-content:center;color:#ffffff59;pointer-events:none;transition:color .2s ease}._iconLeft_1lbwl_148{left:12px}._iconRight_1lbwl_149{right:12px}._iconBtn_1lbwl_151{background:none;border:none;cursor:pointer;pointer-events:all;padding:0;color:#ffffff59;transition:color .2s ease}._iconBtn_1lbwl_151:hover{color:#ffffffb3}._hint_1lbwl_163{font-size:12px;color:#ffffff59;padding-left:2px}._errorMsg_1lbwl_168{font-size:12px;color:#f87171e6;padding-left:2px}._successMsg_1lbwl_173{font-size:12px;color:#4ade80e6;padding-left:2px}@media(max-width:480px){._size-lg_1lbwl_66{height:48px;padding:0 16px;font-size:15px}}._badge_1nxby_2{--glass-blur: 16px;--glass-bg-opacity: .12;--badge-color: 139, 92, 246;display:inline-flex;align-items:center;justify-content:center;gap:6px;font-family:inherit;font-weight:500;border:none;position:relative;overflow:hidden;white-space:nowrap;-webkit-user-select:none;user-select:none;vertical-align:middle;transition:transform .2s cubic-bezier(.34,1.56,.64,1),box-shadow .2s ease,background .2s ease,border-color .2s ease;-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur))}._interactive_1nxby_29{cursor:pointer;outline:none}._interactive_1nxby_29:hover{transform:translateY(-1px)}._interactive_1nxby_29:active{transform:translateY(0) scale(.96)}._interactive_1nxby_29:focus-visible{outline:2px solid rgba(255,255,255,.5);outline-offset:2px}._glassShine_1nxby_48{position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.15) 0%,transparent 60%);pointer-events:none;border-radius:inherit;transition:opacity .2s ease}._glassEdge_1nxby_57{position:absolute;top:0;left:15%;right:15%;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);pointer-events:none}._size-sm_1nxby_68{height:22px;padding:0 8px;font-size:11px;border-radius:6px;gap:4px}._size-md_1nxby_76{height:28px;padding:0 12px;font-size:12.5px;border-radius:8px;gap:5px}._size-lg_1nxby_84{height:34px;padding:0 16px;font-size:14px;border-radius:10px;gap:6px}._shape-pill_1nxby_93{border-radius:9999px!important}._variant-solid_1nxby_102{background:rgba(var(--badge-color),var(--glass-bg-opacity));border:1px solid rgba(var(--badge-color),.25);color:#ffffffe6;box-shadow:0 2px 8px #00000026,0 1px 2px #0000001a,inset 0 1px #ffffff1a}._variant-solid_1nxby_102._interactive_1nxby_29:hover{background:rgba(var(--badge-color),.25);border-color:rgba(var(--badge-color),.4);box-shadow:0 4px 16px rgba(var(--badge-color),.2),0 2px 4px #0000001f,inset 0 1px #ffffff26}._variant-outline_1nxby_122{background:rgba(var(--badge-color),.04);border:1.5px solid rgba(var(--badge-color),.35);color:#ffffffd9;box-shadow:0 1px 4px #00000014,inset 0 1px #ffffff0d}._variant-outline_1nxby_122._interactive_1nxby_29:hover{background:rgba(var(--badge-color),.12);border-color:rgba(var(--badge-color),.55);box-shadow:0 4px 12px rgba(var(--badge-color),.15),inset 0 1px #ffffff1a}._variant-ghost_1nxby_140{background:transparent;border:1px solid transparent;color:#ffffffa6;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none}._variant-ghost_1nxby_140 ._glassShine_1nxby_48,._variant-ghost_1nxby_140 ._glassEdge_1nxby_57{opacity:0}._variant-ghost_1nxby_140._interactive_1nxby_29:hover{background:rgba(var(--badge-color),.1);border-color:rgba(var(--badge-color),.2);color:#ffffffe6;-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));box-shadow:0 2px 8px #0000001a}._variant-ghost_1nxby_140._interactive_1nxby_29:hover ._glassShine_1nxby_48,._variant-ghost_1nxby_140._interactive_1nxby_29:hover ._glassEdge_1nxby_57{opacity:1}._variant-accent_1nxby_175{background:rgba(var(--badge-color),.3);border:1px solid rgba(var(--badge-color),.45);color:#fffffff2;box-shadow:0 2px 10px rgba(var(--badge-color),.2),0 1px 2px #0000001a,inset 0 1px #ffffff1f}._variant-accent_1nxby_175._interactive_1nxby_29:hover{background:rgba(var(--badge-color),.42);border-color:rgba(var(--badge-color),.65);box-shadow:0 4px 20px rgba(var(--badge-color),.3),0 2px 4px #00000026,inset 0 1px #ffffff2e}._glow_1nxby_195._interactive_1nxby_29:hover{box-shadow:0 0 14px rgba(var(--badge-color),.35),0 0 28px rgba(var(--badge-color),.15),0 4px 16px #0003}._dot_1nxby_203{width:6px;height:6px;border-radius:50%;background:rgb(var(--badge-color));flex-shrink:0;box-shadow:0 0 4px rgba(var(--badge-color),.6)}._size-sm_1nxby_68 ._dot_1nxby_203{width:5px;height:5px}._size-lg_1nxby_84 ._dot_1nxby_203{width:7px;height:7px}._pulse_1nxby_223{animation:_dotPulse_1nxby_1 1.8s ease-in-out infinite}@keyframes _dotPulse_1nxby_1{0%,to{opacity:1;box-shadow:0 0 4px rgba(var(--badge-color),.6)}50%{opacity:.5;box-shadow:0 0 8px rgba(var(--badge-color),.9)}}._icon_1nxby_240{display:inline-flex;align-items:center;flex-shrink:0;line-height:0}._label_1nxby_247{display:inline-flex;align-items:center;line-height:1}._closeBtn_1nxby_254{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;cursor:pointer;padding:0;margin-left:2px;color:#fff6;border-radius:50%;width:14px;height:14px;flex-shrink:0;transition:color .15s ease,background .15s ease}._closeBtn_1nxby_254:hover{color:#ffffffd9;background:#ffffff1f}._size-sm_1nxby_68 ._closeBtn_1nxby_254{width:12px;height:12px;margin-left:1px}._size-lg_1nxby_84 ._closeBtn_1nxby_254{width:16px;height:16px;margin-left:3px}@media(max-width:480px){._size-lg_1nxby_84{height:30px;padding:0 14px;font-size:13px}}._tabs_1ccrt_2{display:flex;flex-direction:column;width:100%}._tabList_1ccrt_9{--glass-blur: 18px;display:flex;align-items:center;gap:2px;position:relative;-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));overflow-x:auto;scrollbar-width:none}._tabList_1ccrt_9::-webkit-scrollbar{display:none}._list-variant-solid_1ccrt_27{background:#ffffff0f;border:1px solid rgba(255,255,255,.12);border-radius:16px;padding:4px;box-shadow:0 2px 12px #00000026,inset 0 1px #ffffff0f}._list-variant-outline_1ccrt_38{background:transparent;border-bottom:1px solid rgba(255,255,255,.12);border-radius:0;padding:0;-webkit-backdrop-filter:none;backdrop-filter:none;gap:0}._list-variant-pill_1ccrt_49{background:#ffffff0a;border:1px solid rgba(255,255,255,.1);border-radius:9999px;padding:4px;box-shadow:0 2px 8px #0000001a}._list-size-sm_1ccrt_58{gap:1px}._list-size-md_1ccrt_59{gap:2px}._list-size-lg_1ccrt_60{gap:4px}._list-variant-outline_1ccrt_38._list-size-sm_1ccrt_58,._list-variant-outline_1ccrt_38._list-size-md_1ccrt_59,._list-variant-outline_1ccrt_38._list-size-lg_1ccrt_60{gap:0}._tab_1ccrt_2{display:inline-flex;align-items:center;justify-content:center;gap:6px;font-family:inherit;font-weight:500;border:none;background:transparent;color:#ffffff80;cursor:pointer;position:relative;white-space:nowrap;-webkit-user-select:none;user-select:none;outline:none;flex-shrink:0;transition:color .2s ease,background .2s ease,box-shadow .2s ease,border-color .2s ease}._tab_1ccrt_2:focus-visible{outline:2px solid rgba(255,255,255,.4);outline-offset:-2px}._tab_1ccrt_2:disabled{opacity:.3;cursor:not-allowed;pointer-events:none}._tab_1ccrt_2:hover:not(:disabled):not(._active_1ccrt_101){color:#ffffffbf}._tab-size-sm_1ccrt_106{height:30px;padding:0 12px;font-size:12.5px}._tab-size-md_1ccrt_112{height:36px;padding:0 16px;font-size:13.5px}._tab-size-lg_1ccrt_118{height:44px;padding:0 22px;font-size:15px}._tab-variant-solid_1ccrt_125{border-radius:12px}._tab-variant-solid_1ccrt_125:hover:not(:disabled):not(._active_1ccrt_101){background:#ffffff0f}._tab-variant-solid_1ccrt_125._active_1ccrt_101{background:#ffffff24;color:#fffffff2;box-shadow:0 2px 8px #0000002e,0 1px 2px #0000001f,inset 0 1px #ffffff1a}._tab-variant-outline_1ccrt_143{border-radius:0;border-bottom:2px solid transparent;margin-bottom:-1px;padding-left:16px;padding-right:16px}._tab-variant-outline_1ccrt_143:hover:not(:disabled):not(._active_1ccrt_101){border-bottom-color:#fff3}._tab-variant-outline_1ccrt_143._active_1ccrt_101{color:#fffffff2;border-bottom-color:#a78bfacc;box-shadow:0 1px #a78bfa66}._tab-variant-pill_1ccrt_162{border-radius:9999px}._tab-variant-pill_1ccrt_162:hover:not(:disabled):not(._active_1ccrt_101){background:#ffffff0f}._tab-variant-pill_1ccrt_162._active_1ccrt_101{background:#ffffff29;color:#fffffff2;box-shadow:0 2px 8px #00000026,inset 0 1px #ffffff1a}._icon_1ccrt_179{display:inline-flex;align-items:center;flex-shrink:0;line-height:0}._label_1ccrt_186{display:inline-flex;align-items:center;line-height:1}._tabPanel_1ccrt_193{outline:none;animation:_fadeIn_1ccrt_1 .2s ease}._tabPanel_1ccrt_193:focus-visible{outline:2px solid rgba(255,255,255,.3);outline-offset:2px;border-radius:8px}@keyframes _fadeIn_1ccrt_1{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}._list-variant-solid_1ccrt_27 ._tab-size-sm_1ccrt_106{border-radius:8px}._list-variant-solid_1ccrt_27 ._tab-size-md_1ccrt_112{border-radius:12px}._list-variant-solid_1ccrt_27 ._tab-size-lg_1ccrt_118{border-radius:14px}@media(max-width:480px){._tab-size-lg_1ccrt_118{height:40px;padding:0 18px;font-size:14px}}._wrapper_wjadh_2{--glass-blur: 14px;--glass-bg-opacity: .1;--toggle-active-color: 139, 92, 246;display:inline-flex;align-items:center;gap:10px}._wrapper_wjadh_2._disabled_wjadh_12{opacity:.35;cursor:not-allowed;pointer-events:none}._label_wjadh_19{font-size:14px;font-weight:500;color:#ffffffb3;-webkit-user-select:none;user-select:none;line-height:1}._track_wjadh_28{position:relative;display:inline-flex;align-items:center;padding:0;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,var(--glass-bg-opacity));cursor:pointer;outline:none;overflow:hidden;flex-shrink:0;-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));transition:background .3s ease,border-color .3s ease,box-shadow .3s ease;box-shadow:0 2px 8px #00000026,inset 0 1px #ffffff0f}._track_wjadh_28:focus-visible{outline:2px solid rgba(255,255,255,.5);outline-offset:2px}._track_wjadh_28._checked_wjadh_56{background:rgba(var(--toggle-active-color),.35);border-color:rgba(var(--toggle-active-color),.5);box-shadow:0 2px 12px rgba(var(--toggle-active-color),.25),0 1px 4px #0000001f,inset 0 1px #ffffff1a}._size-sm_wjadh_66{width:36px;height:20px;border-radius:10px}._size-md_wjadh_72{width:44px;height:24px;border-radius:12px}._size-lg_wjadh_78{width:56px;height:30px;border-radius:15px}._glassShine_wjadh_85{position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.12) 0%,transparent 60%);pointer-events:none;border-radius:inherit}._thumb_wjadh_94{position:relative;background:#ffffffd9;border-radius:50%;box-shadow:0 1px 4px #00000040,0 0 1px #00000026;transition:transform .3s cubic-bezier(.34,1.56,.64,1),background .2s ease,box-shadow .2s ease;overflow:hidden;flex-shrink:0}._thumbShine_wjadh_110{position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.6) 0%,transparent 50%);border-radius:inherit;pointer-events:none}._size-sm_wjadh_66 ._thumb_wjadh_94{width:16px;height:16px;margin:0 2px;transform:translate(0)}._size-sm_wjadh_66._checked_wjadh_56 ._thumb_wjadh_94{transform:translate(16px)}._size-md_wjadh_72 ._thumb_wjadh_94{width:20px;height:20px;margin:0 2px;transform:translate(0)}._size-md_wjadh_72._checked_wjadh_56 ._thumb_wjadh_94{transform:translate(20px)}._size-lg_wjadh_78 ._thumb_wjadh_94{width:26px;height:26px;margin:0 2px;transform:translate(0)}._size-lg_wjadh_78._checked_wjadh_56 ._thumb_wjadh_94{transform:translate(26px)}._checked_wjadh_56 ._thumb_wjadh_94{background:#fffffff2;box-shadow:0 1px 6px rgba(var(--toggle-active-color),.4),0 0 2px #00000026}._track_wjadh_28:hover:not(:disabled) ._thumb_wjadh_94{box-shadow:0 2px 8px #0000004d,0 0 1px #00000026}._track_wjadh_28:active:not(:disabled) ._thumb_wjadh_94{transform:translate(0) scale(.92)}._size-sm_wjadh_66:active:not(:disabled) ._thumb_wjadh_94{transform:translate(0) scale(.9)}._size-sm_wjadh_66._checked_wjadh_56:active:not(:disabled) ._thumb_wjadh_94{transform:translate(16px) scale(.9)}._size-md_wjadh_72:active:not(:disabled) ._thumb_wjadh_94{transform:translate(0) scale(.9)}._size-md_wjadh_72._checked_wjadh_56:active:not(:disabled) ._thumb_wjadh_94{transform:translate(20px) scale(.9)}._size-lg_wjadh_78:active:not(:disabled) ._thumb_wjadh_94{transform:translate(0) scale(.9)}._size-lg_wjadh_78._checked_wjadh_56:active:not(:disabled) ._thumb_wjadh_94{transform:translate(26px) scale(.9)}@media(max-width:480px){._size-lg_wjadh_78{width:50px;height:28px}._size-lg_wjadh_78 ._thumb_wjadh_94{width:24px;height:24px}._size-lg_wjadh_78._checked_wjadh_56 ._thumb_wjadh_94{transform:translate(22px)}}._card_179ui_2{--glass-blur: 20px;--glass-bg-opacity: .1;--card-glow-color: 139, 92, 246;display:flex;flex-direction:column;position:relative;overflow:hidden;transition:transform .25s cubic-bezier(.34,1.56,.64,1),box-shadow .25s ease}._glassShine_179ui_17{position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.1) 0%,transparent 50%);pointer-events:none;border-radius:inherit;z-index:0}._glassEdge_179ui_26{position:absolute;top:0;left:12%;right:12%;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent);pointer-events:none;z-index:0}._variant-solid_179ui_38{background:rgba(255,255,255,var(--glass-bg-opacity));border:1px solid rgba(255,255,255,.15);border-radius:20px;-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));box-shadow:0 4px 24px #0003,0 1px 4px #0000001f,inset 0 1px #ffffff14}._variant-outline_179ui_51{background:#ffffff08;border:1.5px solid rgba(255,255,255,.2);border-radius:20px;-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));box-shadow:0 2px 12px #0000001a,inset 0 1px #ffffff0d}._variant-ghost_179ui_63{background:transparent;border:1px solid transparent;border-radius:20px;-webkit-backdrop-filter:none;backdrop-filter:none;box-shadow:none}._hoverable_179ui_72{cursor:pointer}._hoverable_179ui_72:hover{transform:translateY(-4px)}._variant-solid_179ui_38._hoverable_179ui_72:hover{box-shadow:0 12px 40px #0000004d,0 4px 12px #00000026,inset 0 1px #ffffff1f}._variant-outline_179ui_51._hoverable_179ui_72:hover{border-color:#ffffff59;box-shadow:0 12px 40px #0003,0 4px 12px #0000001a,inset 0 1px #ffffff14}._variant-ghost_179ui_63._hoverable_179ui_72:hover{background:#ffffff0d;border-color:#ffffff1a}._glow_179ui_101:hover{box-shadow:0 0 24px rgba(var(--card-glow-color),.25),0 0 48px rgba(var(--card-glow-color),.1),0 12px 40px #0000004d,inset 0 1px #ffffff1f}._size-sm_179ui_111 ._header_179ui_111{padding:16px 18px 0}._size-sm_179ui_111 ._body_179ui_112{padding:12px 18px}._size-sm_179ui_111 ._footer_179ui_113{padding:0 18px 16px}._size-sm_179ui_111 ._headerCover_179ui_114{padding:0}._size-md_179ui_117 ._header_179ui_111{padding:20px 24px 0}._size-md_179ui_117 ._body_179ui_112{padding:16px 24px}._size-md_179ui_117 ._footer_179ui_113{padding:0 24px 20px}._size-md_179ui_117 ._headerCover_179ui_114{padding:0}._size-lg_179ui_123 ._header_179ui_111{padding:28px 32px 0}._size-lg_179ui_123 ._body_179ui_112{padding:20px 32px}._size-lg_179ui_123 ._footer_179ui_113{padding:0 32px 28px}._size-lg_179ui_123 ._headerCover_179ui_114{padding:0}._header_179ui_111{position:relative;z-index:1}._headerCover_179ui_114{overflow:hidden;border-radius:20px 20px 0 0;padding:0!important}._headerCover_179ui_114 img{width:100%;display:block;object-fit:cover}._body_179ui_112{position:relative;z-index:1;flex:1}._footer_179ui_113{position:relative;z-index:1;display:flex;align-items:center;gap:8px}._footer-align-left_179ui_162{justify-content:flex-start}._footer-align-center_179ui_163{justify-content:center}._footer-align-right_179ui_164{justify-content:flex-end}._footer-align-between_179ui_165{justify-content:space-between}@media(max-width:480px){._variant-solid_179ui_38,._variant-outline_179ui_51,._variant-ghost_179ui_63{border-radius:16px}._headerCover_179ui_114{border-radius:16px 16px 0 0}._size-lg_179ui_123 ._header_179ui_111{padding:22px 24px 0}._size-lg_179ui_123 ._body_179ui_112{padding:16px 24px}._size-lg_179ui_123 ._footer_179ui_113{padding:0 24px 22px}}._wrapper_xai1o_2{display:inline-flex;position:relative}._tooltip_xai1o_8{--glass-blur: 20px;--tooltip-bg: rgba(30, 25, 55, .75);position:absolute;z-index:9999;padding:8px 14px;border-radius:10px;background:var(--tooltip-bg);border:1px solid rgba(255,255,255,.15);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));box-shadow:0 4px 20px #0000004d,0 1px 4px #0003,inset 0 1px #ffffff14;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .15s ease,transform .15s cubic-bezier(.34,1.56,.64,1)}._visible_xai1o_33{opacity:1;pointer-events:auto}._glassShine_xai1o_39{position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.08) 0%,transparent 50%);border-radius:inherit;pointer-events:none}._content_xai1o_48{position:relative;z-index:1;font-size:12.5px;font-weight:500;color:#ffffffe6;line-height:1.4}._arrow_xai1o_58{position:absolute;width:8px;height:8px;background:var(--tooltip-bg);border:1px solid rgba(255,255,255,.15);transform:rotate(45deg);z-index:0}._placement-top_xai1o_73{bottom:calc(100% + 10px);left:50%;transform:translate(-50%) translateY(4px)}._placement-top_xai1o_73._visible_xai1o_33{transform:translate(-50%) translateY(0)}._placement-top_xai1o_73 ._arrow_xai1o_58{bottom:-5px;left:50%;transform:translate(-50%) rotate(45deg);border-top:none;border-left:none}._placement-bottom_xai1o_92{top:calc(100% + 10px);left:50%;transform:translate(-50%) translateY(-4px)}._placement-bottom_xai1o_92._visible_xai1o_33{transform:translate(-50%) translateY(0)}._placement-bottom_xai1o_92 ._arrow_xai1o_58{top:-5px;left:50%;transform:translate(-50%) rotate(45deg);border-bottom:none;border-right:none}._placement-left_xai1o_111{right:calc(100% + 10px);top:50%;transform:translateY(-50%) translate(4px)}._placement-left_xai1o_111._visible_xai1o_33{transform:translateY(-50%) translate(0)}._placement-left_xai1o_111 ._arrow_xai1o_58{right:-5px;top:50%;transform:translateY(-50%) rotate(45deg);border-bottom:none;border-left:none}._placement-right_xai1o_130{left:calc(100% + 10px);top:50%;transform:translateY(-50%) translate(-4px)}._placement-right_xai1o_130._visible_xai1o_33{transform:translateY(-50%) translate(0)}._placement-right_xai1o_130 ._arrow_xai1o_58{left:-5px;top:50%;transform:translateY(-50%) rotate(45deg);border-top:none;border-right:none}._overlay_1plz5_2{--overlay-blur: 6px;position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;background:#0006;-webkit-backdrop-filter:blur(var(--overlay-blur));backdrop-filter:blur(var(--overlay-blur));padding:24px;animation:_overlayIn_1plz5_1 .25s ease forwards}@keyframes _overlayIn_1plz5_1{0%{opacity:0}to{opacity:1}}._modal_1plz5_24{--modal-blur: 24px;--modal-bg: rgba(30, 25, 55, .8);position:relative;width:100%;background:var(--modal-bg);border:1px solid rgba(255,255,255,.15);border-radius:24px;-webkit-backdrop-filter:blur(var(--modal-blur));backdrop-filter:blur(var(--modal-blur));box-shadow:0 16px 64px #0006,0 4px 16px #00000040,inset 0 1px #ffffff14;overflow:hidden;outline:none;animation:_modalIn_1plz5_1 .3s cubic-bezier(.34,1.56,.64,1) forwards}@keyframes _modalIn_1plz5_1{0%{opacity:0;transform:translateY(16px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}._size-sm_1plz5_56{max-width:360px}._size-md_1plz5_57{max-width:460px}._size-lg_1plz5_58{max-width:600px}._glassShine_1plz5_61{position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.08) 0%,transparent 45%);pointer-events:none;border-radius:inherit;z-index:0}._glassEdge_1plz5_70{position:absolute;top:0;left:10%;right:10%;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent);pointer-events:none;z-index:0}._header_1plz5_82{position:relative;z-index:1;padding:24px 28px 0;display:flex;align-items:flex-start;justify-content:space-between;gap:16px}._headerContent_1plz5_92{flex:1;min-width:0}._closeBtn_1plz5_98{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:#ffffff0f;border:1px solid rgba(255,255,255,.1);border-radius:8px;color:#fff6;cursor:pointer;flex-shrink:0;transition:background .15s ease,color .15s ease}._closeBtn_1plz5_98:hover{background:#ffffff1f;color:#fffc}._closeBtn_1plz5_98:focus-visible{outline:2px solid rgba(255,255,255,.4);outline-offset:2px}._body_1plz5_126{position:relative;z-index:1;padding:20px 28px}._footer_1plz5_133{position:relative;z-index:1;padding:0 28px 24px;display:flex;align-items:center;gap:10px}._footer-align-left_1plz5_142{justify-content:flex-start}._footer-align-center_1plz5_143{justify-content:center}._footer-align-right_1plz5_144{justify-content:flex-end}@media(max-width:480px){._modal_1plz5_24{border-radius:20px}._header_1plz5_82{padding:20px 20px 0}._body_1plz5_126{padding:16px 20px}._footer_1plz5_133{padding:0 20px 20px}}
@@ -0,0 +1,902 @@
1
+ import { jsxs as N, jsx as e, Fragment as se } from "react/jsx-runtime";
2
+ import x, { useState as W, useCallback as A, useId as F, useMemo as U, useContext as ae, createContext as G, useRef as D, useEffect as K } from "react";
3
+ import { createPortal as ne } from "react-dom";
4
+ const oe = "_btn_1sfqc_2", le = "_glassShine_1sfqc_46", re = "_glassEdge_1sfqc_55", ie = "_glow_1sfqc_165", ce = "_loading_1sfqc_179", de = "_spinner_1sfqc_181", _e = "_spin_1sfqc_181", ue = "_icon_1sfqc_193", he = "_label_1sfqc_198", R = {
5
+ btn: oe,
6
+ glassShine: le,
7
+ glassEdge: re,
8
+ "size-sm": "_size-sm_1sfqc_64",
9
+ "size-md": "_size-md_1sfqc_70",
10
+ "size-lg": "_size-lg_1sfqc_76",
11
+ "shape-pill": "_shape-pill_1sfqc_84",
12
+ "shape-rounded": "_shape-rounded_1sfqc_85",
13
+ "variant-solid": "_variant-solid_1sfqc_88",
14
+ "variant-outline": "_variant-outline_1sfqc_107",
15
+ "variant-ghost": "_variant-ghost_1sfqc_124",
16
+ "variant-accent": "_variant-accent_1sfqc_146",
17
+ glow: ie,
18
+ loading: ce,
19
+ spinner: de,
20
+ spin: _e,
21
+ icon: ue,
22
+ label: he
23
+ }, be = x.forwardRef(
24
+ ({
25
+ variant: t = "solid",
26
+ size: n = "md",
27
+ shape: s = "rounded",
28
+ loading: a = !1,
29
+ leftIcon: o,
30
+ rightIcon: l,
31
+ intensity: i = 1,
32
+ color: d,
33
+ glow: c = !1,
34
+ disabled: _,
35
+ className: v,
36
+ children: f,
37
+ style: h,
38
+ ...b
39
+ }, m) => {
40
+ const p = _ || a, g = `${Math.round(20 * i)}px`, u = 0.08 + 0.14 * i, y = {
41
+ "--glass-blur": g,
42
+ "--glass-bg-opacity": u,
43
+ ...d ? { "--glass-accent-color": d } : {},
44
+ ...h
45
+ }, r = [
46
+ R.btn,
47
+ R[`variant-${t}`],
48
+ R[`size-${n}`],
49
+ R[`shape-${s}`],
50
+ c ? R.glow : "",
51
+ a ? R.loading : "",
52
+ v ?? ""
53
+ ].filter(Boolean).join(" ");
54
+ return /* @__PURE__ */ N(
55
+ "button",
56
+ {
57
+ ref: m,
58
+ className: r,
59
+ disabled: p,
60
+ style: y,
61
+ ...b,
62
+ children: [
63
+ /* @__PURE__ */ e("span", { className: R.glassShine, "aria-hidden": "true" }),
64
+ /* @__PURE__ */ e("span", { className: R.glassEdge, "aria-hidden": "true" }),
65
+ a && /* @__PURE__ */ e("span", { className: R.spinner, "aria-hidden": "true" }),
66
+ !a && o && /* @__PURE__ */ e("span", { className: R.icon, children: o }),
67
+ f && /* @__PURE__ */ e("span", { className: R.label, children: f }),
68
+ !a && l && /* @__PURE__ */ e("span", { className: R.icon, children: l })
69
+ ]
70
+ }
71
+ );
72
+ }
73
+ );
74
+ be.displayName = "Button";
75
+ const pe = "_wrapper_1lbwl_2", me = "_disabled_1lbwl_10", fe = "_label_1lbwl_17", ge = "_fieldWrap_1lbwl_25", ve = "_input_1lbwl_32", ye = "_hasLeft_1lbwl_74", we = "_hasRight_1lbwl_75", $e = "_icon_1lbwl_139", xe = "_iconLeft_1lbwl_148", Ne = "_iconRight_1lbwl_149", ze = "_iconBtn_1lbwl_151", ke = "_hint_1lbwl_163", Ce = "_errorMsg_1lbwl_168", Se = "_successMsg_1lbwl_173", $ = {
76
+ wrapper: pe,
77
+ disabled: me,
78
+ label: fe,
79
+ fieldWrap: ge,
80
+ input: ve,
81
+ "size-sm": "_size-sm_1lbwl_54",
82
+ "size-md": "_size-md_1lbwl_60",
83
+ "size-lg": "_size-lg_1lbwl_66",
84
+ hasLeft: ye,
85
+ hasRight: we,
86
+ "variant-solid": "_variant-solid_1lbwl_78",
87
+ "variant-outline": "_variant-outline_1lbwl_94",
88
+ "variant-ghost": "_variant-ghost_1lbwl_105",
89
+ "state-error": "_state-error_1lbwl_119",
90
+ "state-success": "_state-success_1lbwl_129",
91
+ icon: $e,
92
+ iconLeft: xe,
93
+ iconRight: Ne,
94
+ iconBtn: ze,
95
+ hint: ke,
96
+ errorMsg: Ce,
97
+ successMsg: Se
98
+ }, Be = x.forwardRef(
99
+ ({
100
+ variant: t = "solid",
101
+ size: n = "md",
102
+ state: s = "default",
103
+ label: a,
104
+ hint: o,
105
+ errorMessage: l,
106
+ successMessage: i,
107
+ leftIcon: d,
108
+ rightIcon: c,
109
+ numeric: _ = !1,
110
+ intensity: v = 1,
111
+ type: f = "text",
112
+ disabled: h,
113
+ className: b,
114
+ style: m,
115
+ onChange: p,
116
+ ...g
117
+ }, u) => {
118
+ const [y, r] = W(!1), w = f === "password", k = w ? y ? "text" : "password" : f, I = {
119
+ "--glass-blur": `${Math.round(20 * v)}px`,
120
+ ...m
121
+ }, z = (C) => {
122
+ if (_) {
123
+ const V = C.target.value;
124
+ if (V !== "" && !/^\d*\.?\d*$/.test(V)) {
125
+ C.target.value = V.replace(/[^\d.]/g, "");
126
+ return;
127
+ }
128
+ }
129
+ p?.(C);
130
+ }, P = (C) => {
131
+ if (_) {
132
+ const V = [
133
+ "Backspace",
134
+ "Delete",
135
+ "Tab",
136
+ "Escape",
137
+ "Enter",
138
+ "ArrowLeft",
139
+ "ArrowRight",
140
+ "ArrowUp",
141
+ "ArrowDown",
142
+ "Home",
143
+ "End",
144
+ ".",
145
+ "Process"
146
+ ], Z = /^\d$/.test(C.key), ee = V.includes(C.key), te = C.ctrlKey || C.metaKey;
147
+ !Z && !ee && !te && C.preventDefault();
148
+ }
149
+ g.onKeyDown?.(C);
150
+ }, M = (C) => {
151
+ _ && (C.currentTarget.blur(), C.currentTarget.focus());
152
+ }, O = [
153
+ $.wrapper,
154
+ h ? $.disabled : ""
155
+ ].filter(Boolean).join(" "), X = [
156
+ $.input,
157
+ $[`variant-${t}`],
158
+ $[`size-${n}`],
159
+ s !== "default" ? $[`state-${s}`] : "",
160
+ d ? $.hasLeft : "",
161
+ c || w ? $.hasRight : "",
162
+ b ?? ""
163
+ ].filter(Boolean).join(" "), Y = s === "error" && l ? /* @__PURE__ */ e("span", { className: $.errorMsg, children: l }) : s === "success" && i ? /* @__PURE__ */ e("span", { className: $.successMsg, children: i }) : o ? /* @__PURE__ */ e("span", { className: $.hint, children: o }) : null;
164
+ return /* @__PURE__ */ N("div", { className: O, style: I, children: [
165
+ a && /* @__PURE__ */ e("label", { className: $.label, children: a }),
166
+ /* @__PURE__ */ N("div", { className: $.fieldWrap, children: [
167
+ d && /* @__PURE__ */ e("span", { className: `${$.icon} ${$.iconLeft}`, children: d }),
168
+ /* @__PURE__ */ e(
169
+ "input",
170
+ {
171
+ ref: u,
172
+ type: k,
173
+ inputMode: _ ? "decimal" : void 0,
174
+ disabled: h,
175
+ className: X,
176
+ onChange: z,
177
+ onKeyDown: P,
178
+ onCompositionStart: M,
179
+ ...g
180
+ }
181
+ ),
182
+ w && /* @__PURE__ */ e(
183
+ "button",
184
+ {
185
+ type: "button",
186
+ className: `${$.icon} ${$.iconRight} ${$.iconBtn}`,
187
+ onClick: () => r((C) => !C),
188
+ tabIndex: -1,
189
+ "aria-label": y ? "비밀번호 숨기기" : "비밀번호 보기",
190
+ children: y ? /* @__PURE__ */ N("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
191
+ /* @__PURE__ */ e("path", { d: "M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24" }),
192
+ /* @__PURE__ */ e("line", { x1: "1", y1: "1", x2: "23", y2: "23" })
193
+ ] }) : /* @__PURE__ */ N("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
194
+ /* @__PURE__ */ e("path", { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" }),
195
+ /* @__PURE__ */ e("circle", { cx: "12", cy: "12", r: "3" })
196
+ ] })
197
+ }
198
+ ),
199
+ !w && c && /* @__PURE__ */ e("span", { className: `${$.icon} ${$.iconRight}`, children: c })
200
+ ] }),
201
+ Y
202
+ ] });
203
+ }
204
+ );
205
+ Be.displayName = "Input";
206
+ const Me = "_badge_1nxby_2", Re = "_interactive_1nxby_29", Ee = "_glassShine_1nxby_48", Le = "_glassEdge_1nxby_57", Te = "_glow_1nxby_195", je = "_dot_1nxby_203", Pe = "_pulse_1nxby_223", qe = "_dotPulse_1nxby_1", Ie = "_icon_1nxby_240", Ae = "_label_1nxby_247", Ve = "_closeBtn_1nxby_254", S = {
207
+ badge: Me,
208
+ interactive: Re,
209
+ glassShine: Ee,
210
+ glassEdge: Le,
211
+ "size-sm": "_size-sm_1nxby_68",
212
+ "size-md": "_size-md_1nxby_76",
213
+ "size-lg": "_size-lg_1nxby_84",
214
+ "shape-pill": "_shape-pill_1nxby_93",
215
+ "shape-rounded": "_shape-rounded_1nxby_97",
216
+ "variant-solid": "_variant-solid_1nxby_102",
217
+ "variant-outline": "_variant-outline_1nxby_122",
218
+ "variant-ghost": "_variant-ghost_1nxby_140",
219
+ "variant-accent": "_variant-accent_1nxby_175",
220
+ glow: Te,
221
+ dot: je,
222
+ pulse: Pe,
223
+ dotPulse: qe,
224
+ icon: Ie,
225
+ label: Ae,
226
+ closeBtn: Ve
227
+ }, De = {
228
+ default: "139, 92, 246",
229
+ // 보라
230
+ info: "59, 130, 246",
231
+ // 파랑
232
+ success: "34, 197, 94",
233
+ // 초록
234
+ warning: "245, 158, 11",
235
+ // 주황
236
+ error: "239, 68, 68"
237
+ // 빨강
238
+ }, Ke = x.forwardRef(
239
+ ({
240
+ variant: t = "solid",
241
+ size: n = "md",
242
+ shape: s = "pill",
243
+ status: a = "default",
244
+ leftIcon: o,
245
+ rightIcon: l,
246
+ dot: i = !1,
247
+ pulse: d = !1,
248
+ intensity: c = 1,
249
+ color: _,
250
+ glow: v = !1,
251
+ interactive: f = !1,
252
+ closable: h = !1,
253
+ onClose: b,
254
+ className: m,
255
+ children: p,
256
+ style: g,
257
+ onClick: u,
258
+ ...y
259
+ }, r) => {
260
+ const w = `${Math.round(16 * c)}px`, k = 0.06 + 0.12 * c, j = _ || De[a], I = {
261
+ "--glass-blur": w,
262
+ "--glass-bg-opacity": k,
263
+ "--badge-color": j,
264
+ ...g
265
+ }, z = f || !!u, P = [
266
+ S.badge,
267
+ S[`variant-${t}`],
268
+ S[`size-${n}`],
269
+ S[`shape-${s}`],
270
+ v ? S.glow : "",
271
+ z ? S.interactive : "",
272
+ m ?? ""
273
+ ].filter(Boolean).join(" ");
274
+ return /* @__PURE__ */ N(
275
+ "span",
276
+ {
277
+ ref: r,
278
+ className: P,
279
+ style: I,
280
+ role: z ? "button" : void 0,
281
+ tabIndex: z ? 0 : void 0,
282
+ onClick: u,
283
+ onKeyDown: z ? (M) => {
284
+ (M.key === "Enter" || M.key === " ") && (M.preventDefault(), u?.(M));
285
+ } : void 0,
286
+ ...y,
287
+ children: [
288
+ /* @__PURE__ */ e("span", { className: S.glassShine, "aria-hidden": "true" }),
289
+ /* @__PURE__ */ e("span", { className: S.glassEdge, "aria-hidden": "true" }),
290
+ i && /* @__PURE__ */ e("span", { className: `${S.dot} ${d ? S.pulse : ""}`, "aria-hidden": "true" }),
291
+ o && /* @__PURE__ */ e("span", { className: S.icon, children: o }),
292
+ p && /* @__PURE__ */ e("span", { className: S.label, children: p }),
293
+ l && !h && /* @__PURE__ */ e("span", { className: S.icon, children: l }),
294
+ h && /* @__PURE__ */ e(
295
+ "button",
296
+ {
297
+ type: "button",
298
+ className: S.closeBtn,
299
+ onClick: (M) => {
300
+ M.stopPropagation(), b?.(M);
301
+ },
302
+ tabIndex: -1,
303
+ "aria-label": "닫기",
304
+ children: /* @__PURE__ */ N(
305
+ "svg",
306
+ {
307
+ width: "10",
308
+ height: "10",
309
+ viewBox: "0 0 24 24",
310
+ fill: "none",
311
+ stroke: "currentColor",
312
+ strokeWidth: "2.5",
313
+ strokeLinecap: "round",
314
+ strokeLinejoin: "round",
315
+ children: [
316
+ /* @__PURE__ */ e("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
317
+ /* @__PURE__ */ e("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
318
+ ]
319
+ }
320
+ )
321
+ }
322
+ )
323
+ ]
324
+ }
325
+ );
326
+ }
327
+ );
328
+ Ke.displayName = "Badge";
329
+ const We = "_tabs_1ccrt_2", Fe = "_tabList_1ccrt_9", Oe = "_tab_1ccrt_2", He = "_active_1ccrt_101", Ue = "_icon_1ccrt_179", Ge = "_label_1ccrt_186", Je = "_tabPanel_1ccrt_193", Qe = "_fadeIn_1ccrt_1", B = {
330
+ tabs: We,
331
+ tabList: Fe,
332
+ "list-variant-solid": "_list-variant-solid_1ccrt_27",
333
+ "list-variant-outline": "_list-variant-outline_1ccrt_38",
334
+ "list-variant-pill": "_list-variant-pill_1ccrt_49",
335
+ "list-size-sm": "_list-size-sm_1ccrt_58",
336
+ "list-size-md": "_list-size-md_1ccrt_59",
337
+ "list-size-lg": "_list-size-lg_1ccrt_60",
338
+ tab: Oe,
339
+ active: He,
340
+ "tab-size-sm": "_tab-size-sm_1ccrt_106",
341
+ "tab-size-md": "_tab-size-md_1ccrt_112",
342
+ "tab-size-lg": "_tab-size-lg_1ccrt_118",
343
+ "tab-variant-solid": "_tab-variant-solid_1ccrt_125",
344
+ "tab-variant-outline": "_tab-variant-outline_1ccrt_143",
345
+ "tab-variant-pill": "_tab-variant-pill_1ccrt_162",
346
+ icon: Ue,
347
+ label: Ge,
348
+ tabPanel: Je,
349
+ fadeIn: Qe
350
+ }, J = G(null);
351
+ function H() {
352
+ const t = ae(J);
353
+ if (!t)
354
+ throw new Error("Tabs 컴포넌트 안에서 사용해야 합니다.");
355
+ return t;
356
+ }
357
+ const Xe = x.forwardRef(
358
+ ({
359
+ defaultValue: t = "",
360
+ value: n,
361
+ onValueChange: s,
362
+ variant: a = "solid",
363
+ size: o = "md",
364
+ intensity: l = 1,
365
+ className: i,
366
+ children: d,
367
+ ...c
368
+ }, _) => {
369
+ const [v, f] = W(t), h = n !== void 0, b = h ? n : v, m = A(
370
+ (u) => {
371
+ h || f(u), s?.(u);
372
+ },
373
+ [h, s]
374
+ ), p = F(), g = U(
375
+ () => ({ activeValue: b, setActiveValue: m, variant: a, size: o, intensity: l, idPrefix: p }),
376
+ [b, m, a, o, l, p]
377
+ );
378
+ return /* @__PURE__ */ e(J.Provider, { value: g, children: /* @__PURE__ */ e(
379
+ "div",
380
+ {
381
+ ref: _,
382
+ className: `${B.tabs} ${i ?? ""}`,
383
+ ...c,
384
+ children: d
385
+ }
386
+ ) });
387
+ }
388
+ );
389
+ Xe.displayName = "Tabs";
390
+ const Ye = x.forwardRef(
391
+ ({ className: t, children: n, ...s }, a) => {
392
+ const { variant: o, size: l, intensity: i } = H(), c = {
393
+ "--glass-blur": `${Math.round(18 * i)}px`,
394
+ ...s.style
395
+ }, _ = [
396
+ B.tabList,
397
+ B[`list-variant-${o}`],
398
+ B[`list-size-${l}`],
399
+ t ?? ""
400
+ ].filter(Boolean).join(" ");
401
+ return /* @__PURE__ */ e(
402
+ "div",
403
+ {
404
+ ref: a,
405
+ role: "tablist",
406
+ className: _,
407
+ style: c,
408
+ ...s,
409
+ children: n
410
+ }
411
+ );
412
+ }
413
+ );
414
+ Ye.displayName = "TabList";
415
+ const Ze = x.forwardRef(
416
+ ({ value: t, leftIcon: n, rightIcon: s, disabled: a, className: o, children: l, ...i }, d) => {
417
+ const { activeValue: c, setActiveValue: _, variant: v, size: f, idPrefix: h } = H(), b = c === t, m = () => {
418
+ a || _(t);
419
+ }, p = (u) => {
420
+ const y = u.currentTarget.parentElement;
421
+ if (!y) return;
422
+ const r = Array.from(
423
+ y.querySelectorAll('[role="tab"]:not([disabled])')
424
+ ), w = r.indexOf(u.currentTarget);
425
+ let k = -1;
426
+ u.key === "ArrowRight" ? k = (w + 1) % r.length : u.key === "ArrowLeft" ? k = (w - 1 + r.length) % r.length : u.key === "Home" ? k = 0 : u.key === "End" && (k = r.length - 1), k >= 0 && (u.preventDefault(), r[k].focus(), _(r[k].dataset.value));
427
+ }, g = [
428
+ B.tab,
429
+ B[`tab-variant-${v}`],
430
+ B[`tab-size-${f}`],
431
+ b ? B.active : "",
432
+ o ?? ""
433
+ ].filter(Boolean).join(" ");
434
+ return /* @__PURE__ */ N(
435
+ "button",
436
+ {
437
+ ref: d,
438
+ role: "tab",
439
+ type: "button",
440
+ id: `${h}-tab-${t}`,
441
+ "aria-controls": `${h}-panel-${t}`,
442
+ "aria-selected": b,
443
+ tabIndex: b ? 0 : -1,
444
+ "data-value": t,
445
+ disabled: a,
446
+ className: g,
447
+ onClick: m,
448
+ onKeyDown: p,
449
+ ...i,
450
+ children: [
451
+ n && /* @__PURE__ */ e("span", { className: B.icon, children: n }),
452
+ l && /* @__PURE__ */ e("span", { className: B.label, children: l }),
453
+ s && /* @__PURE__ */ e("span", { className: B.icon, children: s })
454
+ ]
455
+ }
456
+ );
457
+ }
458
+ );
459
+ Ze.displayName = "Tab";
460
+ const et = x.forwardRef(
461
+ ({ value: t, keepMounted: n = !1, minHeight: s, className: a, style: o, children: l, ...i }, d) => {
462
+ const { activeValue: c, idPrefix: _ } = H(), v = c === t;
463
+ if (!v && !n) return null;
464
+ const f = {
465
+ ...s !== void 0 ? { minHeight: typeof s == "number" ? `${s}px` : s } : {},
466
+ ...o
467
+ };
468
+ return /* @__PURE__ */ e(
469
+ "div",
470
+ {
471
+ ref: d,
472
+ role: "tabpanel",
473
+ id: `${_}-panel-${t}`,
474
+ "aria-labelledby": `${_}-tab-${t}`,
475
+ hidden: !v,
476
+ className: `${B.tabPanel} ${v ? B.panelActive : ""} ${a ?? ""}`,
477
+ style: f,
478
+ tabIndex: 0,
479
+ ...i,
480
+ children: l
481
+ }
482
+ );
483
+ }
484
+ );
485
+ et.displayName = "TabPanel";
486
+ const tt = "_wrapper_wjadh_2", st = "_disabled_wjadh_12", at = "_label_wjadh_19", nt = "_track_wjadh_28", ot = "_checked_wjadh_56", lt = "_glassShine_wjadh_85", rt = "_thumb_wjadh_94", it = "_thumbShine_wjadh_110", T = {
487
+ wrapper: tt,
488
+ disabled: st,
489
+ label: at,
490
+ track: nt,
491
+ checked: ot,
492
+ "size-sm": "_size-sm_wjadh_66",
493
+ "size-md": "_size-md_wjadh_72",
494
+ "size-lg": "_size-lg_wjadh_78",
495
+ glassShine: lt,
496
+ thumb: rt,
497
+ thumbShine: it
498
+ }, ct = x.forwardRef(
499
+ ({
500
+ checked: t,
501
+ defaultChecked: n = !1,
502
+ onChange: s,
503
+ size: a = "md",
504
+ label: o,
505
+ labelPosition: l = "right",
506
+ intensity: i = 1,
507
+ color: d,
508
+ disabled: c,
509
+ className: _,
510
+ style: v,
511
+ ...f
512
+ }, h) => {
513
+ const [b, m] = W(n), p = t !== void 0, g = p ? t : b, u = F(), y = A(() => {
514
+ if (c) return;
515
+ const P = !g;
516
+ p || m(P), s?.(P);
517
+ }, [c, g, p, s]), r = `${Math.round(14 * i)}px`, w = 0.06 + 0.1 * i, k = {
518
+ "--glass-blur": r,
519
+ "--glass-bg-opacity": w,
520
+ ...d ? { "--toggle-active-color": d } : {},
521
+ ...v
522
+ }, j = [
523
+ T.wrapper,
524
+ c ? T.disabled : "",
525
+ _ ?? ""
526
+ ].filter(Boolean).join(" "), I = [
527
+ T.track,
528
+ T[`size-${a}`],
529
+ g ? T.checked : ""
530
+ ].filter(Boolean).join(" "), z = o ? /* @__PURE__ */ e("span", { id: u, className: T.label, children: o }) : null;
531
+ return /* @__PURE__ */ N("div", { className: j, style: k, children: [
532
+ l === "left" && z,
533
+ /* @__PURE__ */ N(
534
+ "button",
535
+ {
536
+ ref: h,
537
+ type: "button",
538
+ role: "switch",
539
+ "aria-checked": g,
540
+ "aria-labelledby": o ? u : void 0,
541
+ disabled: c,
542
+ className: I,
543
+ onClick: y,
544
+ ...f,
545
+ children: [
546
+ /* @__PURE__ */ e("span", { className: T.glassShine, "aria-hidden": "true" }),
547
+ /* @__PURE__ */ e("span", { className: T.thumb, children: /* @__PURE__ */ e("span", { className: T.thumbShine, "aria-hidden": "true" }) })
548
+ ]
549
+ }
550
+ ),
551
+ l === "right" && z
552
+ ] });
553
+ }
554
+ );
555
+ ct.displayName = "Toggle";
556
+ const dt = "_card_179ui_2", _t = "_glassShine_179ui_17", ut = "_glassEdge_179ui_26", ht = "_hoverable_179ui_72", bt = "_glow_179ui_101", pt = "_header_179ui_111", mt = "_body_179ui_112", ft = "_footer_179ui_113", gt = "_headerCover_179ui_114", E = {
557
+ card: dt,
558
+ glassShine: _t,
559
+ glassEdge: ut,
560
+ "variant-solid": "_variant-solid_179ui_38",
561
+ "variant-outline": "_variant-outline_179ui_51",
562
+ "variant-ghost": "_variant-ghost_179ui_63",
563
+ hoverable: ht,
564
+ glow: bt,
565
+ "size-sm": "_size-sm_179ui_111",
566
+ header: pt,
567
+ body: mt,
568
+ footer: ft,
569
+ headerCover: gt,
570
+ "size-md": "_size-md_179ui_117",
571
+ "size-lg": "_size-lg_179ui_123",
572
+ "footer-align-left": "_footer-align-left_179ui_162",
573
+ "footer-align-center": "_footer-align-center_179ui_163",
574
+ "footer-align-right": "_footer-align-right_179ui_164",
575
+ "footer-align-between": "_footer-align-between_179ui_165"
576
+ }, vt = G({ variant: "solid", size: "md" }), yt = x.forwardRef(
577
+ ({
578
+ variant: t = "solid",
579
+ size: n = "md",
580
+ hoverable: s = !1,
581
+ glow: a = !1,
582
+ intensity: o = 1,
583
+ color: l,
584
+ className: i,
585
+ children: d,
586
+ style: c,
587
+ ..._
588
+ }, v) => {
589
+ const f = `${Math.round(20 * o)}px`, h = 0.04 + 0.1 * o, b = {
590
+ "--glass-blur": f,
591
+ "--glass-bg-opacity": h,
592
+ ...l ? { "--card-glow-color": l } : {},
593
+ ...c
594
+ }, m = [
595
+ E.card,
596
+ E[`variant-${t}`],
597
+ E[`size-${n}`],
598
+ s ? E.hoverable : "",
599
+ a ? E.glow : "",
600
+ i ?? ""
601
+ ].filter(Boolean).join(" "), p = U(
602
+ () => ({ variant: t, size: n }),
603
+ [t, n]
604
+ );
605
+ return /* @__PURE__ */ e(vt.Provider, { value: p, children: /* @__PURE__ */ N("div", { ref: v, className: m, style: b, ..._, children: [
606
+ t !== "ghost" && /* @__PURE__ */ N(se, { children: [
607
+ /* @__PURE__ */ e("span", { className: E.glassShine, "aria-hidden": "true" }),
608
+ /* @__PURE__ */ e("span", { className: E.glassEdge, "aria-hidden": "true" })
609
+ ] }),
610
+ d
611
+ ] }) });
612
+ }
613
+ );
614
+ yt.displayName = "Card";
615
+ const wt = x.forwardRef(
616
+ ({ cover: t = !1, className: n, children: s, ...a }, o) => {
617
+ const l = [
618
+ E.header,
619
+ t ? E.headerCover : "",
620
+ n ?? ""
621
+ ].filter(Boolean).join(" ");
622
+ return /* @__PURE__ */ e("div", { ref: o, className: l, ...a, children: s });
623
+ }
624
+ );
625
+ wt.displayName = "CardHeader";
626
+ const $t = x.forwardRef(
627
+ ({ className: t, children: n, ...s }, a) => /* @__PURE__ */ e("div", { ref: a, className: `${E.body} ${t ?? ""}`, ...s, children: n })
628
+ );
629
+ $t.displayName = "CardBody";
630
+ const xt = x.forwardRef(
631
+ ({ align: t = "right", className: n, children: s, ...a }, o) => {
632
+ const l = [
633
+ E.footer,
634
+ E[`footer-align-${t}`],
635
+ n ?? ""
636
+ ].filter(Boolean).join(" ");
637
+ return /* @__PURE__ */ e("div", { ref: o, className: l, ...a, children: s });
638
+ }
639
+ );
640
+ xt.displayName = "CardFooter";
641
+ const Nt = "_wrapper_xai1o_2", zt = "_tooltip_xai1o_8", kt = "_visible_xai1o_33", Ct = "_glassShine_xai1o_39", St = "_content_xai1o_48", Bt = "_arrow_xai1o_58", q = {
642
+ wrapper: Nt,
643
+ tooltip: zt,
644
+ visible: kt,
645
+ glassShine: Ct,
646
+ content: St,
647
+ arrow: Bt,
648
+ "placement-top": "_placement-top_xai1o_73",
649
+ "placement-bottom": "_placement-bottom_xai1o_92",
650
+ "placement-left": "_placement-left_xai1o_111",
651
+ "placement-right": "_placement-right_xai1o_130"
652
+ }, Mt = ({
653
+ content: t,
654
+ placement: n = "top",
655
+ trigger: s = "hover",
656
+ arrow: a = !0,
657
+ delay: o = 200,
658
+ closeDelay: l = 100,
659
+ open: i,
660
+ onOpenChange: d,
661
+ disabled: c = !1,
662
+ intensity: _ = 1,
663
+ children: v
664
+ }) => {
665
+ const [f, h] = W(!1), b = i !== void 0, m = b ? i : f, p = D(null), g = D(null), u = F(), y = A(() => {
666
+ p.current && (clearTimeout(p.current), p.current = null), g.current && (clearTimeout(g.current), g.current = null);
667
+ }, []), r = A(() => {
668
+ c || (y(), p.current = setTimeout(() => {
669
+ b || h(!0), d?.(!0);
670
+ }, o));
671
+ }, [c, y, o, b, d]), w = A(() => {
672
+ y(), g.current = setTimeout(() => {
673
+ b || h(!1), d?.(!1);
674
+ }, l);
675
+ }, [y, l, b, d]), k = A(() => {
676
+ m ? w() : r();
677
+ }, [m, r, w]), j = D(null);
678
+ K(() => {
679
+ if (s !== "click" || !m) return;
680
+ const M = (O) => {
681
+ j.current && !j.current.contains(O.target) && w();
682
+ };
683
+ return document.addEventListener("mousedown", M), () => document.removeEventListener("mousedown", M);
684
+ }, [s, m, w]), K(() => y, [y]);
685
+ const I = `${Math.round(20 * _)}px`, z = {
686
+ "aria-describedby": m ? u : void 0
687
+ };
688
+ s === "hover" ? (z.onMouseEnter = r, z.onMouseLeave = w, z.onFocus = r, z.onBlur = w) : z.onClick = k;
689
+ const P = [
690
+ q.tooltip,
691
+ q[`placement-${n}`],
692
+ a ? q.withArrow : "",
693
+ m ? q.visible : ""
694
+ ].filter(Boolean).join(" ");
695
+ return /* @__PURE__ */ N(
696
+ "div",
697
+ {
698
+ ref: j,
699
+ className: q.wrapper,
700
+ ...s === "hover" ? { onMouseEnter: r, onMouseLeave: w } : {},
701
+ children: [
702
+ x.cloneElement(v, z),
703
+ /* @__PURE__ */ N(
704
+ "div",
705
+ {
706
+ id: u,
707
+ role: "tooltip",
708
+ className: P,
709
+ style: { "--glass-blur": I },
710
+ children: [
711
+ /* @__PURE__ */ e("span", { className: q.glassShine, "aria-hidden": "true" }),
712
+ a && /* @__PURE__ */ e("span", { className: q.arrow, "aria-hidden": "true" }),
713
+ /* @__PURE__ */ e("span", { className: q.content, children: t })
714
+ ]
715
+ }
716
+ )
717
+ ]
718
+ }
719
+ );
720
+ };
721
+ Mt.displayName = "Tooltip";
722
+ const Rt = "_overlay_1plz5_2", Et = "_overlayIn_1plz5_1", Lt = "_modal_1plz5_24", Tt = "_modalIn_1plz5_1", jt = "_glassShine_1plz5_61", Pt = "_glassEdge_1plz5_70", qt = "_header_1plz5_82", It = "_headerContent_1plz5_92", At = "_closeBtn_1plz5_98", Vt = "_body_1plz5_126", Dt = "_footer_1plz5_133", L = {
723
+ overlay: Rt,
724
+ overlayIn: Et,
725
+ modal: Lt,
726
+ modalIn: Tt,
727
+ "size-sm": "_size-sm_1plz5_56",
728
+ "size-md": "_size-md_1plz5_57",
729
+ "size-lg": "_size-lg_1plz5_58",
730
+ glassShine: jt,
731
+ glassEdge: Pt,
732
+ header: qt,
733
+ headerContent: It,
734
+ closeBtn: At,
735
+ body: Vt,
736
+ footer: Dt,
737
+ "footer-align-left": "_footer-align-left_1plz5_142",
738
+ "footer-align-center": "_footer-align-center_1plz5_143",
739
+ "footer-align-right": "_footer-align-right_1plz5_144"
740
+ }, Kt = ({
741
+ open: t,
742
+ onClose: n,
743
+ size: s = "md",
744
+ closeOnOverlay: a = !0,
745
+ closeOnEsc: o = !0,
746
+ intensity: l = 1,
747
+ bgColor: i,
748
+ portalTarget: d,
749
+ className: c,
750
+ style: _,
751
+ children: v
752
+ }) => {
753
+ const f = D(null), h = D(null), b = F();
754
+ K(() => {
755
+ if (!t || !o) return;
756
+ const r = (w) => {
757
+ w.key === "Escape" && n();
758
+ };
759
+ return document.addEventListener("keydown", r), () => document.removeEventListener("keydown", r);
760
+ }, [t, o, n]), K(() => {
761
+ if (!t) return;
762
+ const r = document.body.style.overflow;
763
+ return document.body.style.overflow = "hidden", () => {
764
+ document.body.style.overflow = r;
765
+ };
766
+ }, [t]), K(() => {
767
+ if (!t || !h.current) return;
768
+ const r = document.activeElement;
769
+ return h.current.focus(), () => {
770
+ r?.focus();
771
+ };
772
+ }, [t]);
773
+ const m = A(
774
+ (r) => {
775
+ a && r.target === f.current && n();
776
+ },
777
+ [a, n]
778
+ ), p = `${Math.round(24 * l)}px`, g = `${Math.round(6 * l)}px`, u = {
779
+ "--modal-blur": p,
780
+ "--overlay-blur": g,
781
+ ...i ? { "--modal-bg": i } : {},
782
+ ..._
783
+ };
784
+ if (!t) return null;
785
+ const y = /* @__PURE__ */ e(
786
+ "div",
787
+ {
788
+ ref: f,
789
+ className: `${L.overlay} ${t ? L.open : ""}`,
790
+ onClick: m,
791
+ "aria-hidden": !t,
792
+ children: /* @__PURE__ */ N(
793
+ "div",
794
+ {
795
+ ref: h,
796
+ role: "dialog",
797
+ "aria-modal": "true",
798
+ "aria-labelledby": b,
799
+ tabIndex: -1,
800
+ className: `${L.modal} ${L[`size-${s}`]} ${c ?? ""}`,
801
+ style: u,
802
+ children: [
803
+ /* @__PURE__ */ e("span", { className: L.glassShine, "aria-hidden": "true" }),
804
+ /* @__PURE__ */ e("span", { className: L.glassEdge, "aria-hidden": "true" }),
805
+ /* @__PURE__ */ e(Q.Provider, { value: { titleId: b, onClose: n }, children: v })
806
+ ]
807
+ }
808
+ )
809
+ }
810
+ );
811
+ return ne(y, d || document.body);
812
+ };
813
+ Kt.displayName = "Modal";
814
+ const Q = x.createContext({
815
+ titleId: "",
816
+ onClose: () => {
817
+ }
818
+ }), Wt = () => x.useContext(Q), Ft = x.forwardRef(
819
+ ({ showClose: t = !0, className: n, children: s, ...a }, o) => {
820
+ const { titleId: l, onClose: i } = Wt();
821
+ return /* @__PURE__ */ N("div", { ref: o, className: `${L.header} ${n ?? ""}`, ...a, children: [
822
+ /* @__PURE__ */ e("div", { id: l, className: L.headerContent, children: s }),
823
+ t && /* @__PURE__ */ e(
824
+ "button",
825
+ {
826
+ type: "button",
827
+ className: L.closeBtn,
828
+ onClick: i,
829
+ "aria-label": "닫기",
830
+ children: /* @__PURE__ */ N(
831
+ "svg",
832
+ {
833
+ width: "14",
834
+ height: "14",
835
+ viewBox: "0 0 24 24",
836
+ fill: "none",
837
+ stroke: "currentColor",
838
+ strokeWidth: "2.5",
839
+ strokeLinecap: "round",
840
+ strokeLinejoin: "round",
841
+ children: [
842
+ /* @__PURE__ */ e("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
843
+ /* @__PURE__ */ e("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
844
+ ]
845
+ }
846
+ )
847
+ }
848
+ )
849
+ ] });
850
+ }
851
+ );
852
+ Ft.displayName = "ModalHeader";
853
+ const Ot = x.forwardRef(
854
+ ({ className: t, children: n, ...s }, a) => /* @__PURE__ */ e("div", { ref: a, className: `${L.body} ${t ?? ""}`, ...s, children: n })
855
+ );
856
+ Ot.displayName = "ModalBody";
857
+ const Ht = x.forwardRef(
858
+ ({ align: t = "right", className: n, children: s, ...a }, o) => {
859
+ const l = [
860
+ L.footer,
861
+ L[`footer-align-${t}`],
862
+ n ?? ""
863
+ ].filter(Boolean).join(" ");
864
+ return /* @__PURE__ */ e("div", { ref: o, className: l, ...a, children: s });
865
+ }
866
+ );
867
+ Ht.displayName = "ModalFooter";
868
+ const Ut = ({
869
+ theme: t,
870
+ children: n,
871
+ style: s,
872
+ ...a
873
+ }) => /* @__PURE__ */ e(
874
+ "div",
875
+ {
876
+ "data-theme": t === "default" ? void 0 : t,
877
+ style: { display: "contents", ...s },
878
+ ...a,
879
+ children: n
880
+ }
881
+ );
882
+ Ut.displayName = "ThemeProvider";
883
+ export {
884
+ Ke as Badge,
885
+ be as Button,
886
+ yt as Card,
887
+ $t as CardBody,
888
+ xt as CardFooter,
889
+ wt as CardHeader,
890
+ Be as Input,
891
+ Kt as Modal,
892
+ Ot as ModalBody,
893
+ Ht as ModalFooter,
894
+ Ft as ModalHeader,
895
+ Ze as Tab,
896
+ Ye as TabList,
897
+ et as TabPanel,
898
+ Xe as Tabs,
899
+ Ut as ThemeProvider,
900
+ ct as Toggle,
901
+ Mt as Tooltip
902
+ };
package/dist/vite.svg ADDED
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
package/package.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "@_jinu/liquid-glass-ui",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Apple Liquid Glass inspired React UI components with glassmorphism effects",
6
+ "keywords": [
7
+ "react",
8
+ "ui",
9
+ "components",
10
+ "glassmorphism",
11
+ "liquid-glass",
12
+ "apple",
13
+ "design-system"
14
+ ],
15
+ "author": "Jinu",
16
+ "license": "MIT",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/sogom/liquid-glass-ui"
20
+ },
21
+ "homepage": "https://github.com/sogom/liquid-glass-ui#readme",
22
+ "main": "./dist/liquid-glass-ui.cjs",
23
+ "module": "./dist/liquid-glass-ui.js",
24
+ "types": "./dist/index.d.ts",
25
+ "exports": {
26
+ ".": {
27
+ "import": "./dist/liquid-glass-ui.js",
28
+ "require": "./dist/liquid-glass-ui.cjs",
29
+ "types": "./dist/index.d.ts"
30
+ },
31
+ "./dist/style.css": "./dist/style.css",
32
+ "./themes/ey.css": "./src/themes/ey.css"
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "src/themes/*.css",
37
+ "README.md",
38
+ "LICENSE"
39
+ ],
40
+ "sideEffects": [
41
+ "**/*.css"
42
+ ],
43
+ "scripts": {
44
+ "dev": "vite",
45
+ "build": "tsc -p tsconfig.build.json && vite build",
46
+ "lint": "eslint .",
47
+ "preview": "vite preview",
48
+ "prepublishOnly": "npm run build",
49
+ "storybook": "storybook dev -p 6006",
50
+ "build-storybook": "storybook build"
51
+ },
52
+ "peerDependencies": {
53
+ "react": "^18.0.0 || ^19.0.0",
54
+ "react-dom": "^18.0.0 || ^19.0.0"
55
+ },
56
+ "devDependencies": {
57
+ "react": "^19.2.0",
58
+ "react-dom": "^19.2.0",
59
+ "@eslint/js": "^9.39.1",
60
+ "@types/node": "^24.10.1",
61
+ "@types/react": "^19.2.7",
62
+ "@types/react-dom": "^19.2.3",
63
+ "@vitejs/plugin-react": "^5.1.1",
64
+ "eslint": "^9.39.1",
65
+ "eslint-plugin-react-hooks": "^7.0.1",
66
+ "eslint-plugin-react-refresh": "^0.4.24",
67
+ "globals": "^16.5.0",
68
+ "typescript": "~5.9.3",
69
+ "typescript-eslint": "^8.48.0",
70
+ "vite": "^7.3.1",
71
+ "storybook": "^10.2.12",
72
+ "@storybook/react-vite": "^10.2.12",
73
+ "@chromatic-com/storybook": "^5.0.1",
74
+ "@storybook/addon-vitest": "^10.2.12",
75
+ "@storybook/addon-a11y": "^10.2.12",
76
+ "@storybook/addon-docs": "^10.2.12",
77
+ "@storybook/addon-onboarding": "^10.2.12",
78
+ "eslint-plugin-storybook": "^10.2.12",
79
+ "vitest": "^4.0.18",
80
+ "playwright": "^1.58.2",
81
+ "@vitest/browser-playwright": "^4.0.18",
82
+ "@vitest/coverage-v8": "^4.0.18"
83
+ }
84
+ }
@@ -0,0 +1,29 @@
1
+ /* ══════════════════════════════════════════════════
2
+ Liquid Glass UI — EY (Ernst & Young) Theme
3
+
4
+ EY Brand Colors:
5
+ Primary Yellow: #FFE600 → RGB 255, 230, 0
6
+ Dark: #2E2E38 → RGB 46, 46, 56
7
+ Gray: #747480 → RGB 116, 116, 128
8
+ White: #FFFFFF
9
+ ══════════════════════════════════════════════════ */
10
+
11
+ [data-theme="ey"] {
12
+ /* ── Button ── */
13
+ --glass-accent-color: 255, 230, 0;
14
+
15
+ /* ── Badge ── */
16
+ --badge-color: 255, 230, 0;
17
+
18
+ /* ── Toggle ── */
19
+ --toggle-active-color: 255, 230, 0;
20
+
21
+ /* ── Card ── */
22
+ --card-glow-color: 255, 230, 0;
23
+
24
+ /* ── Modal ── */
25
+ --modal-bg: rgba(46, 46, 56, 0.85);
26
+
27
+ /* ── Tooltip ── */
28
+ --tooltip-bg: rgba(46, 46, 56, 0.85);
29
+ }