diff --git a/dist/assets/index-BjVENS-h.js b/dist/assets/index-BsDnb84E.js similarity index 97% rename from dist/assets/index-BjVENS-h.js rename to dist/assets/index-BsDnb84E.js index c208abd..8c0dda1 100644 --- a/dist/assets/index-BjVENS-h.js +++ b/dist/assets/index-BsDnb84E.js @@ -13,4 +13,4 @@ Error generating stack: `+e.message+` `);return e===-1?``:t.stack.slice(e+1)})();try{if(!e.stack)e.stack=n;else if(n){let t=n.indexOf(` `),r=t===-1?-1:n.indexOf(` `,t+1),i=r===-1?``:n.slice(r+1);String(e.stack).endsWith(i)||(e.stack+=` -`+n)}}catch{}}throw e}}_request(e,t){typeof e==`string`?(t||={},t.url=e):t=e||{},t=ds(this.defaults,t);let{transitional:n,paramsSerializer:r,headers:i}=t;n!==void 0&&Bs.assertOptions(n,{silentJSONParsing:Vs.transitional(Vs.boolean),forcedJSONParsing:Vs.transitional(Vs.boolean),clarifyTimeoutError:Vs.transitional(Vs.boolean),legacyInterceptorReqResOrdering:Vs.transitional(Vs.boolean)},!1),r!=null&&(z.isFunction(r)?t.paramsSerializer={serialize:r}:Bs.assertOptions(r,{encode:Vs.function,serialize:Vs.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls===void 0?t.allowAbsoluteUrls=!0:t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls),Bs.assertOptions(t,{baseUrl:Vs.spelling(`baseURL`),withXsrfToken:Vs.spelling(`withXSRFToken`)},!0),t.method=(t.method||this.defaults.method||`get`).toLowerCase();let a=i&&z.merge(i.common,i[t.method]);i&&z.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`,`query`,`common`],e=>{delete i[e]}),t.headers=_o.concat(a,i);let o=[],s=!0;this.interceptors.request.forEach(function(e){if(typeof e.runWhen==`function`&&e.runWhen(t)===!1)return;s&&=e.synchronous;let n=t.transitional||No;n&&n.legacyInterceptorReqResOrdering?o.unshift(e.fulfilled,e.rejected):o.push(e.fulfilled,e.rejected)});let c=[];this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,u=0,d;if(!s){let e=[Is.bind(this),void 0];for(e.unshift(...o),e.push(...c),d=e.length,l=Promise.resolve(t);u{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t,r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,i){n.reason||(n.reason=new Zo(e,r,i),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){let e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}};function Ws(e){return function(t){return e.apply(null,t)}}function Gs(e){return z.isObject(e)&&e.isAxiosError===!0}var Ks={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Ks).forEach(([e,t])=>{Ks[t]=e});function qs(e){let t=new Hs(e),n=Wi(Hs.prototype.request,t);return z.extend(n,Hs.prototype,t,{allOwnKeys:!0}),z.extend(n,t,null,{allOwnKeys:!0}),n.create=function(t){return qs(ds(e,t))},n}var Js=qs(Jo);Js.Axios=Hs,Js.CanceledError=Zo,Js.CancelToken=Us,Js.isCancel=Xo,Js.VERSION=Cs,Js.toFormData=Eo,Js.AxiosError=B,Js.Cancel=Js.CanceledError,Js.all=function(e){return Promise.all(e)},Js.spread=Ws,Js.isAxiosError=Gs,Js.mergeConfig=ds,Js.AxiosHeaders=_o,Js.formToJSON=e=>Go(z.isHTMLForm(e)?new FormData(e):e),Js.getAdapter=Ps.getAdapter,Js.HttpStatusCode=Ks,Js.default=Js;var V=Js.create({baseURL:`http://localhost:8000/api/v1`,headers:{"Content-Type":`application/json`},timeout:15e3});V.interceptors.request.use(e=>{let t=Ui.getState().accessToken;return t&&(e.headers.Authorization=`Bearer ${t}`),e});var Ys=!1,Xs=[],Zs=(e,t=null)=>{Xs.forEach(({resolve:n,reject:r})=>{e?r(e):n(t)}),Xs=[]};V.interceptors.response.use(e=>e,async e=>{let t=e.config;if(e.response?.status!==401||t._retry)return Promise.reject(e);if(Ys)return new Promise((e,t)=>{Xs.push({resolve:e,reject:t})}).then(e=>(t.headers.Authorization=`Bearer ${e}`,V(t)));t._retry=!0,Ys=!0;try{let{refreshToken:n,setTokens:r,logout:i}=Ui.getState();if(!n)return i(),Promise.reject(e);let{data:a}=await Js.post(`http://localhost:8000/api/v1/auth/refresh`,{refresh_token:n}),o=a.access_token;return r(o,a.refresh_token??n),Zs(null,o),t.headers.Authorization=`Bearer ${o}`,V(t)}catch(e){return Zs(e,null),Ui.getState().logout(),Promise.reject(e)}finally{Ys=!1}});var Qs={login:e=>V.post(`/auth/login`,e),signup:e=>V.post(`/auth/signup`,e),refresh:e=>V.post(`/auth/refresh`,{refresh_token:e}),me:()=>V.get(`/auth/me`),logout:()=>V.post(`/auth/logout`)},$s=Bi(e=>({toasts:[],showToast:t=>{let n=Math.random().toString(36).slice(2);e(e=>({toasts:[...e.toasts,{...t,id:n}]})),setTimeout(()=>{e(e=>({toasts:e.toasts.filter(e=>e.id!==n)}))},4e3)},dismiss:t=>e(e=>({toasts:e.toasts.filter(e=>e.id!==t)}))}));function ec(){let{setTokens:e,setUser:t}=Ui(),{showToast:n}=$s(),r=Je();return er({mutationFn:e=>Qs.login(e),onSuccess:({data:i})=>{e(i.access_token,i.refresh_token),t(i.user),n({title:`환영합니다, ${i.user.name} 선생님`,body:`오늘 세션을 확인해보세요.`,kind:`success`}),r(`/dashboard`)},onError:()=>{n({title:`로그인에 실패했습니다`,body:`이메일 또는 비밀번호를 확인해주세요.`,kind:`error`})}})}function tc(){let{setTokens:e,setUser:t}=Ui(),{showToast:n}=$s(),r=Je();return er({mutationFn:e=>Qs.signup(e),onSuccess:({data:i})=>{e(i.access_token,i.refresh_token),t(i.user),n({title:`계정이 생성되었습니다`,body:`환영합니다!`,kind:`success`}),r(`/dashboard`)},onError:()=>{n({title:`회원가입에 실패했습니다`,body:`입력 정보를 다시 확인해주세요.`,kind:`error`})}})}function nc(){let{logout:e}=Ui(),t=Je();return()=>{Qs.logout().catch(()=>{}),e(),t(`/login`)}}var rc=[{to:`/dashboard`,label:`대시보드`,icon:`grid`},{to:`/patients`,label:`환자 관리`,icon:`users`},{to:`/sessions`,label:`세션 관리`,icon:`audio`},{to:`/reports`,label:`리포트`,icon:`report`},{to:`/templates`,label:`템플릿 관리`,icon:`fileText`},{to:`/insight-map`,label:`인사이트맵`,icon:`network`}],ic=()=>(0,j.jsxs)(`svg`,{width:`18`,height:`18`,viewBox:`0 0 64 64`,fill:`none`,"aria-hidden":!0,children:[(0,j.jsx)(`rect`,{x:`6`,y:`26`,width:`6`,height:`12`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`16`,y:`18`,width:`6`,height:`28`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`26`,y:`10`,width:`6`,height:`44`,rx:`3`,fill:`#fff`}),(0,j.jsx)(`rect`,{x:`36`,y:`16`,width:`6`,height:`32`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`46`,y:`24`,width:`6`,height:`16`,rx:`3`,fill:`#B7DEC8`})]});function ac(){let e=Ui(e=>e.user),t=nc(),n=e?.name?.[0]??`?`;return(0,j.jsxs)(`aside`,{className:`w-[248px] flex-shrink-0 bg-white border-r border-ink-200 flex flex-col py-[18px] px-3.5 h-screen sticky top-0`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-2.5 px-2 pb-[18px]`,children:[(0,j.jsx)(`div`,{className:`w-[30px] h-[30px] rounded-lg bg-brand-700 flex items-center justify-center`,children:(0,j.jsx)(ic,{})}),(0,j.jsx)(`span`,{className:`text-base font-bold text-brand-700 tracking-tight`,children:`UtterAI`})]}),(0,j.jsx)(`p`,{className:`text-[10px] font-semibold text-ink-400 tracking-[0.06em] uppercase px-2.5 pt-3 pb-1.5`,children:`메인`}),rc.map(e=>(0,j.jsxs)(Vt,{to:e.to,className:({isActive:e})=>P(`flex items-center gap-2.5 px-2.5 py-2 rounded-lg mb-0.5`,`text-[13px] font-medium transition-colors duration-100`,e?`bg-brand-50 text-brand-700 font-semibold`:`text-ink-600 hover:bg-ink-50`),children:[(0,j.jsx)(I,{name:e.icon,size:16}),e.label]},e.to)),(0,j.jsx)(`p`,{className:`text-[10px] font-semibold text-ink-400 tracking-[0.06em] uppercase px-2.5 pt-3 pb-1.5`,children:`관리`}),(0,j.jsxs)(Vt,{to:`/settings`,className:({isActive:e})=>P(`flex items-center gap-2.5 px-2.5 py-2 rounded-lg mb-0.5`,`text-[13px] font-medium transition-colors duration-100`,e?`bg-brand-50 text-brand-700 font-semibold`:`text-ink-600 hover:bg-ink-50`),children:[(0,j.jsx)(I,{name:`settings`,size:16}),`설정`]}),(0,j.jsxs)(`div`,{className:`mt-auto flex items-center gap-2.5 px-2 pt-2.5 border-t border-ink-100`,children:[(0,j.jsx)(`div`,{className:`w-8 h-8 rounded-full bg-brand-200 text-brand-700 flex items-center justify-center text-xs font-bold flex-shrink-0`,children:n}),(0,j.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,j.jsxs)(`p`,{className:`text-[12px] font-semibold text-ink-800 truncate`,children:[e?.name,` `,(0,j.jsx)(`span`,{className:`font-normal text-ink-500`,children:e?.role})]}),(0,j.jsx)(`p`,{className:`text-[10px] text-ink-500 truncate`,children:e?.email})]}),(0,j.jsx)(`button`,{onClick:t,title:`로그아웃`,className:`w-6.5 h-6.5 rounded-md flex items-center justify-center text-ink-400 hover:bg-red-50 hover:text-red-700 transition-colors flex-shrink-0 ml-0.5`,children:(0,j.jsx)(I,{name:`logout`,size:13})})]})]})}function oc(){let e=new Date,t=`${e.getFullYear()}.${String(e.getMonth()+1).padStart(2,`0`)}.${String(e.getDate()).padStart(2,`0`)} (${[`일`,`월`,`화`,`수`,`목`,`금`,`토`][e.getDay()]})`;return(0,j.jsxs)(`div`,{className:`flex h-screen bg-brand-25`,children:[(0,j.jsx)(ac,{}),(0,j.jsxs)(`div`,{className:`flex-1 flex flex-col min-w-0 overflow-auto`,children:[(0,j.jsxs)(`header`,{className:`h-14 flex-shrink-0 flex items-center justify-end gap-2 px-8 bg-brand-25 border-b border-ink-100 sticky top-0 z-10`,children:[(0,j.jsxs)(`span`,{className:`text-[12px] text-ink-500 bg-white border border-ink-200 rounded-full px-3 py-1 mr-auto`,children:[`📅 `,t]}),(0,j.jsx)(`button`,{className:`w-8 h-8 rounded-lg flex items-center justify-center text-ink-500 hover:bg-white hover:shadow-sm transition-all`,children:(0,j.jsx)(I,{name:`bell`,size:16})}),(0,j.jsx)(`button`,{className:`w-8 h-8 rounded-lg flex items-center justify-center text-ink-500 hover:bg-white hover:shadow-sm transition-all`,children:(0,j.jsx)(I,{name:`search`,size:16})})]}),(0,j.jsx)(`main`,{className:`flex-1 min-h-0`,children:(0,j.jsx)(bt,{})})]})]})}function sc(){let{toasts:e,dismiss:t}=$s();return e.length===0?null:(0,j.jsx)(`div`,{className:`fixed top-5 right-6 z-50 flex flex-col gap-2`,children:e.map(e=>(0,j.jsxs)(`div`,{className:P(`flex items-start gap-3 p-3 bg-white rounded-xl max-w-[340px]`,`shadow-lg border border-brand-100`,`animate-[slideIn_200ms_cubic-bezier(0.22,1,0.36,1)]`),children:[(0,j.jsx)(`div`,{className:P(`w-6 h-6 rounded-full flex items-center justify-center flex-shrink-0`,e.kind===`error`?`bg-red-100 text-red-700`:`bg-brand-100 text-brand-700`),children:(0,j.jsx)(I,{name:e.kind===`error`?`alert`:`check`,size:13,strokeWidth:3})}),(0,j.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,j.jsx)(`p`,{className:`text-[13px] font-semibold text-ink-800`,children:e.title}),e.body&&(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-0.5`,children:e.body})]}),(0,j.jsx)(`button`,{onClick:()=>t(e.id),className:`text-ink-400 hover:text-ink-600 flex-shrink-0 mt-0.5`,children:(0,j.jsx)(I,{name:`x`,size:13})})]},e.id))})}var cc=e=>e.type===`checkbox`,lc=e=>e instanceof Date,uc=e=>e==null,dc=e=>typeof e==`object`,fc=e=>!uc(e)&&!Array.isArray(e)&&dc(e)&&!lc(e),pc=e=>fc(e)&&e.target?cc(e.target)?e.target.checked:e.target.value:e,mc=(e,t)=>t.split(`.`).some((t,n,r)=>!isNaN(Number(t))&&e.has(r.slice(0,n).join(`.`))),hc=e=>{let t=e.constructor&&e.constructor.prototype;return fc(t)&&t.hasOwnProperty(`isPrototypeOf`)},gc=typeof window<`u`&&window.HTMLElement!==void 0&&typeof document<`u`;function _c(e){if(e instanceof Date)return new Date(e);let t=typeof FileList<`u`&&e instanceof FileList;if(gc&&(e instanceof Blob||t))return e;let n=Array.isArray(e);if(!n&&!(fc(e)&&hc(e)))return e;let r=n?[]:Object.create(Object.getPrototypeOf(e));for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[t]=_c(e[t]));return r}var vc=e=>/^\w*$/.test(e),yc=e=>e===void 0,bc=e=>Array.isArray(e)?e.filter(Boolean):[],xc=e=>bc(e.replace(/["|']|\]/g,``).split(/\.|\[/)),H=(e,t,n)=>{if(!t||!fc(e))return n;let r=(vc(t)?[t]:xc(t)).reduce((e,t)=>uc(e)?void 0:e[t],e);return yc(r)||r===e?yc(e[t])?n:e[t]:r},Sc=e=>typeof e==`boolean`,Cc=e=>typeof e==`function`,wc=(e,t,n)=>{let r=-1,i=vc(t)?[t]:xc(t),a=i.length,o=a-1;for(;++r{let i={};for(let a in e)Object.defineProperty(i,a,{get:()=>{let i=a;return t._proxyFormState[i]!==Ec.all&&(t._proxyFormState[i]=!r||Ec.all),n&&(n[i]=!0),e[i]}});return i},Mc=typeof window<`u`?_.useLayoutEffect:_.useEffect,Nc=e=>typeof e==`string`,Pc=(e,t,n,r,i)=>Nc(e)?(r&&t.watch.add(e),H(n,e,i)):Array.isArray(e)?e.map(e=>(r&&t.watch.add(e),H(n,e))):(r&&(t.watchAll=!0),n),Fc=e=>uc(e)||!dc(e);function Ic(e,t,n=new WeakSet){if(e===t)return!0;if(Fc(e)||Fc(t))return Object.is(e,t);if(lc(e)&&lc(t))return Object.is(e.getTime(),t.getTime());let r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;if(n.has(e)||n.has(t))return!0;n.add(e),n.add(t);for(let i of r){let r=e[i];if(!(i in t))return!1;if(i!==`ref`){let e=t[i];if(lc(r)&&lc(e)||(fc(r)||Array.isArray(r))&&(fc(e)||Array.isArray(e))?!Ic(r,e,n):!Object.is(r,e))return!1}}return!0}var Lc=_.createContext(null);Lc.displayName=`HookFormContext`;var Rc=(e,t,n,r,i)=>t?{...n[e],types:{...n[e]&&n[e].types?n[e].types:{},[r]:i||!0}}:{},zc=e=>Array.isArray(e)?e:[e],Bc=()=>{let e=[];return{get observers(){return e},next:t=>{for(let n of e)n.next&&n.next(t)},subscribe:t=>(e.push(t),{unsubscribe:()=>{e=e.filter(e=>e!==t)}}),unsubscribe:()=>{e=[]}}};function Vc(e,t){let n={};for(let r in e)if(e.hasOwnProperty(r)){let i=e[r],a=t[r];if(i&&fc(i)&&a){let e=Vc(i,a);fc(e)&&(n[r]=e)}else e[r]&&(n[r]=a)}return n}var Hc=e=>fc(e)&&!Object.keys(e).length,Uc=e=>e.type===`file`,Wc=e=>{if(!gc)return!1;let t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},Gc=e=>e.type===`select-multiple`,Kc=e=>e.type===`radio`,qc=e=>Kc(e)||cc(e),Jc=e=>Wc(e)&&e.isConnected;function Yc(e,t){let n=t.slice(0,-1).length,r=0;for(;r{for(let t in e)if(Cc(e[t]))return!0;return!1};function Qc(e){return Array.isArray(e)||fc(e)&&!Zc(e)}function $c(e,t={}){for(let n in e){let r=e[n];Qc(r)?(t[n]=Array.isArray(r)?[]:{},$c(r,t[n])):yc(r)||(t[n]=!0)}return t}function el(e){if(e!==!1){if(e===!0)return!0;if(Array.isArray(e)){let t=e.map(e=>el(e));return t.some(e=>e!==void 0)?t:void 0}if(fc(e)){let t={};for(let n in e){let r=el(e[n]);yc(r)||(t[n]=r)}return Object.keys(t).length?t:void 0}}}function tl(e,t,n){n||=$c(t);for(let r in e){let i=e[r];if(Qc(i))yc(t)||Fc(n[r])?n[r]=$c(i,Array.isArray(i)?[]:{}):tl(i,uc(t)?{}:t[r],n[r]);else{let e=t[r];n[r]=!Ic(i,e)}}return el(n)||{}}var nl={value:!1,isValid:!1},rl={value:!0,isValid:!0},il=e=>{if(Array.isArray(e)){if(e.length>1){let t=e.filter(e=>e&&e.checked&&!e.disabled).map(e=>e.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!yc(e[0].attributes.value)?yc(e[0].value)||e[0].value===``?rl:{value:e[0].value,isValid:!0}:rl:nl}return nl},al=(e,{valueAsNumber:t,valueAsDate:n,setValueAs:r})=>yc(e)?e:t?e===``?NaN:e&&+e:n&&Nc(e)?new Date(e):r?r(e):e,ol={isValid:!1,value:null},sl=e=>Array.isArray(e)?e.reduce((e,t)=>t&&t.checked&&!t.disabled?{isValid:!0,value:t.value}:e,ol):ol;function cl(e){let t=e.ref;return Uc(t)?t.files:Kc(t)?sl(e.refs).value:Gc(t)?[...t.selectedOptions].map(({value:e})=>e):cc(t)?il(e.refs).value:al(yc(t.value)?e.ref.value:t.value,e)}var ll=(e,t,n,r)=>{let i={};for(let n of e){let e=H(t,n);e&&wc(i,n,e._f)}return{criteriaMode:n,names:[...e],fields:i,shouldUseNativeValidation:r}},ul=e=>e instanceof RegExp,dl=e=>yc(e)?e:ul(e)?e.source:fc(e)?ul(e.value)?e.value.source:e.value:e,fl=e=>({isOnSubmit:!e||e===Ec.onSubmit,isOnBlur:e===Ec.onBlur,isOnChange:e===Ec.onChange,isOnAll:e===Ec.all,isOnTouch:e===Ec.onTouched}),pl=`AsyncFunction`,ml=e=>!!e&&!!e.validate&&!!(Cc(e.validate)&&e.validate.constructor.name===pl||fc(e.validate)&&Object.values(e.validate).find(e=>e.constructor.name===pl)),hl=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate),gl=(e,t,n)=>!n&&(t.watchAll||t.watch.has(e)||[...t.watch].some(t=>e.startsWith(t)&&/^\.\w+/.test(e.slice(t.length)))),_l=(e,t,n,r)=>{for(let i of n||Object.keys(e)){let n=H(e,i);if(n){let{_f:e,...a}=n;if(e){if(e.refs&&e.refs[0]&&t(e.refs[0],i)&&!r||e.ref&&t(e.ref,e.name)&&!r)return!0;if(_l(a,t))break}else if(fc(a)&&_l(a,t))break}}};function vl(e,t,n){let r=H(e,n);if(r||vc(n))return{error:r,name:n};let i=n.split(`.`);for(;i.length;){let r=i.join(`.`),a=H(t,r),o=H(e,r);if(a&&!Array.isArray(a)&&n!==r)return{name:n};if(o&&o.type)return{name:r,error:o};if(o&&o.root&&o.root.type)return{name:`${r}.root`,error:o.root};i.pop()}return{name:n}}var yl=(e,t,n,r)=>{n(e);let{name:i,...a}=e;return Hc(a)||r&&Object.keys(a).length>=Object.keys(t).length||Object.keys(a).find(e=>t[e]===(!r||Ec.all))},bl=(e,t,n)=>!e||!t||e===t||zc(e).some(e=>e&&(n?e===t:e.startsWith(t)||t.startsWith(e))),xl=(e,t,n,r,i)=>i.isOnAll?!1:!n&&i.isOnTouch?!(t||e):(n?r.isOnBlur:i.isOnBlur)?!e:(n?r.isOnChange:i.isOnChange)?e:!0,Sl=(e,t)=>!bc(H(e,t)).length&&U(e,t),Cl=(e,t,n)=>{let r=zc(H(e,n));return wc(r,kc,t[n]),wc(e,n,r),e};function wl(e,t,n=`validate`){if(Nc(e)||Array.isArray(e)&&e.every(Nc)||Sc(e)&&!e)return{type:n,message:Nc(e)?e:``,ref:t}}var Tl=e=>fc(e)&&!ul(e)?e:{value:e,message:``},El=async(e,t,n,r,i,a)=>{let{ref:o,refs:s,required:c,maxLength:l,minLength:u,min:d,max:f,pattern:p,validate:m,name:h,valueAsNumber:g,mount:_}=e._f,v=H(n,h);if(!_||t.has(h))return{};let y=s?s[0]:o,b=e=>{i&&y.reportValidity&&(y.setCustomValidity(Sc(e)?``:e||``),y.reportValidity())},x={},S=Kc(o),C=cc(o),w=S||C,ee=(g||Uc(o))&&yc(o.value)&&yc(v)||Wc(o)&&o.value===``||v===``||Array.isArray(v)&&!v.length,T=Rc.bind(null,h,r,x),E=(e,t,n,r=Dc.maxLength,i=Dc.minLength)=>{let a=e?t:n;x[h]={type:e?r:i,message:a,ref:o,...T(e?r:i,a)}};if(a?!Array.isArray(v)||!v.length:c&&(!w&&(ee||uc(v))||Sc(v)&&!v||C&&!il(s).isValid||S&&!sl(s).isValid)){let{value:e,message:t}=Nc(c)?{value:!!c,message:c}:Tl(c);if(e&&(x[h]={type:Dc.required,message:t,ref:y,...T(Dc.required,t)},!r))return b(t),x}if(!ee&&(!uc(d)||!uc(f))){let e,t,n=Tl(f),i=Tl(d);if(!uc(v)&&!isNaN(v)){let r=o.valueAsNumber||v&&+v;uc(n.value)||(e=r>n.value),uc(i.value)||(t=rnew Date(new Date().toDateString()+` `+e),s=o.type==`time`,c=o.type==`week`;Nc(n.value)&&v&&(e=s?a(v)>a(n.value):c?v>n.value:r>new Date(n.value)),Nc(i.value)&&v&&(t=s?a(v)+e.value,i=!uc(t.value)&&v.length<+t.value;if((n||i)&&(E(n,e.message,t.message),!r))return b(x[h].message),x}if(p&&!ee&&Nc(v)){let{value:e,message:t}=Tl(p);if(ul(e)&&!v.match(e)&&(x[h]={type:Dc.pattern,message:t,ref:o,...T(Dc.pattern,t)},!r))return b(t),x}if(m){if(Cc(m)){let e=wl(await m(v,n),y);if(e&&(x[h]={...e,...T(Dc.validate,e.message)},!r))return b(e.message),x}else if(fc(m)){let e={};for(let t in m){if(!Hc(e)&&!r)break;let i=wl(await m[t](v,n),y,t);i&&(e={...i,...T(t,i.message)},b(i.message),r&&(x[h]=e))}if(!Hc(e)&&(x[h]={ref:y,...e},!r))return x}}return b(!0),x},Dl={mode:Ec.onSubmit,reValidateMode:Ec.onChange,shouldFocusError:!0},Ol={submitCount:0,isDirty:!1,isReady:!1,isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{}};function kl(e={}){let t={...Dl,...e},n={..._c(Ol),isLoading:Cc(t.defaultValues),errors:t.errors||{},disabled:t.disabled||!1},r={},i=(fc(t.defaultValues)||fc(t.values))&&_c(t.defaultValues||t.values)||{},a=t.shouldUnregister?{}:_c(i),o={action:!1,mount:!1,watch:!1,keepIsValid:!1},s={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set,registerName:new Set},c,l=0,u={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},d={...u},f={...d},p={array:Bc(),state:Bc()},m=t.criteriaMode===Ec.all,h=e=>t=>{clearTimeout(l),l=setTimeout(e,t)},g=async e=>{if(!o.keepIsValid&&!t.disabled&&(d.isValid||f.isValid||e)){let e;t.resolver?(e=Hc((await T()).errors),_()):e=await O({fields:r,onlyCheckValid:!0,eventType:Tc.VALID}),e!==n.isValid&&p.state.next({isValid:e})}},_=(e,r)=>{!t.disabled&&(d.isValidating||d.validatingFields||f.isValidating||f.validatingFields)&&((e||Array.from(s.mount)).forEach(e=>{e&&(r?wc(n.validatingFields,e,r):U(n.validatingFields,e))}),p.state.next({validatingFields:n.validatingFields,isValidating:!Hc(n.validatingFields)}))},v=()=>{n.dirtyFields=tl(i,a)},y=(e,i=[],s,c,l=!0,u=!0)=>{if(c&&s&&!t.disabled){if(o.action=!0,u&&Array.isArray(H(r,e))){let t=s(H(r,e),c.argA,c.argB);l&&wc(r,e,t)}if(u&&Array.isArray(H(n.errors,e))){let t=s(H(n.errors,e),c.argA,c.argB);l&&wc(n.errors,e,t),Sl(n.errors,e)}if((d.touchedFields||f.touchedFields)&&u&&Array.isArray(H(n.touchedFields,e))){let t=s(H(n.touchedFields,e),c.argA,c.argB);l&&wc(n.touchedFields,e,t)}(d.dirtyFields||f.dirtyFields)&&v(),p.state.next({name:e,isDirty:k(e,i),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else wc(a,e,i)},b=(e,t)=>{wc(n.errors,e,t),p.state.next({errors:n.errors})},x=e=>{n.errors=e,p.state.next({errors:n.errors,isValid:!1})},S=e=>{let t=vc(e)?[e]:xc(e),n=a,r=i;for(let e=0;e{let l=H(r,e);if(l){if(S(e))return;let r=yc(H(a,e)),u=H(a,e,yc(s)?H(i,e):s);yc(u)||c&&c.defaultChecked||t?wc(a,e,t?u:cl(l._f)):ie(e,u),o.mount&&!o.action&&(g(),r&&n.isDirty&&(d.isDirty||f.isDirty)&&(k()||(n.isDirty=!1,p.state.next({...n}))))}},w=(e,r,o,s,c)=>{let l=!1,u=!1,m={name:e};if(!t.disabled){if(!o||s){(d.isDirty||f.isDirty)&&(u=n.isDirty,n.isDirty=m.isDirty=k(),l=u!==m.isDirty);let t=Ic(H(i,e),r);u=!!H(n.dirtyFields,e),t===n.isDirty?t?U(n.dirtyFields,e):wc(n.dirtyFields,e,!0):n.dirtyFields=tl(i,a),m.dirtyFields=n.dirtyFields,l||=(d.dirtyFields||f.dirtyFields)&&u!==!t}if(o){let t=H(n.touchedFields,e);t||(wc(n.touchedFields,e,o),m.touchedFields=n.touchedFields,l||=(d.touchedFields||f.touchedFields)&&t!==o)}l&&c&&p.state.next(m)}return l?m:{}},ee=(e,r,i,a)=>{let o=H(n.errors,e),s=(d.isValid||f.isValid)&&Sc(r)&&n.isValid!==r;if(t.delayError&&i?(c=h(()=>b(e,i)),c(t.delayError)):(clearTimeout(l),c=null,i?wc(n.errors,e,i):U(n.errors,e)),(i?!Ic(o,i):o)||!Hc(a)||s){let t={...a,...s&&Sc(r)?{isValid:r}:{},errors:n.errors,name:e};n={...n,...t},p.state.next(t)}},T=async e=>(_(e,!0),await t.resolver(a,t.context,ll(e||s.mount,r,t.criteriaMode,t.shouldUseNativeValidation))),E=async e=>{let{errors:t}=await T(e);if(_(e),e)for(let r of e){let e=H(t,r);e?s.array.has(r)&&fc(e)?Cl(n.errors,{[r]:e},r):wc(n.errors,r,e):U(n.errors,r)}else n.errors=t;return t},D=async({name:t,eventType:r})=>{if(e.validate){let i=await e.validate({formValues:a,formState:n,name:t,eventType:r});if(fc(i))for(let e in i){let t=i[e];t&&he(`${Oc}.${e}`,{message:Nc(t.message)?t.message:``,type:t.type||Dc.validate})}else Nc(i)||!i?he(Oc,{message:i||``,type:Dc.validate}):me(Oc);return i}return!0},O=async({fields:r,onlyCheckValid:i,name:o,eventType:c,context:l={valid:!0,runRootValidation:!1}})=>{if(e.validate&&(l.runRootValidation=!0,!await D({name:o,eventType:c})&&(l.valid=!1,i)))return l.valid;for(let o in r){let u=r[o];if(u){let{_f:r,...p}=u;if(r){let o=s.array.has(r.name),c=u._f&&ml(u._f),p=d.validatingFields||d.isValidating||f.validatingFields||f.isValidating;c&&p&&_([r.name],!0);let h=await El(u,s.disabled,a,m,t.shouldUseNativeValidation&&!i,o);if(c&&p&&_([r.name]),h[r.name]&&(l.valid=!1,i)||(!i&&(H(h,r.name)?o?Cl(n.errors,h,r.name):wc(n.errors,r.name,h[r.name]):U(n.errors,r.name)),e.shouldUseNativeValidation&&h[r.name]))break}!Hc(p)&&await O({context:l,onlyCheckValid:i,fields:p,name:o,eventType:c})}}return l.valid},te=()=>{for(let e of s.unMount){let t=H(r,e);t&&(t._f.refs?t._f.refs.every(e=>!Jc(e)):!Jc(t._f.ref))&&ye(e)}s.unMount=new Set},k=(e,n)=>!t.disabled&&(e&&n&&wc(a,e,n),!Ic(fe(),i)),ne=(e,t,n)=>Pc(e,s,{...o.mount?a:yc(t)?i:Nc(e)?{[e]:t}:t},n,t),re=e=>bc(H(o.mount?a:i,e,t.shouldUnregister?H(i,e,[]):[])),ie=(e,t,n={},i=!1)=>{let o=H(r,e),s=t;if(o){let n=o._f;n&&(!n.disabled&&wc(a,e,al(t,n)),s=Wc(n.ref)&&uc(t)?``:t,Gc(n.ref)?[...n.ref.options].forEach(e=>e.selected=s.includes(e.value)):n.refs?cc(n.ref)?n.refs.forEach(e=>{(!e.defaultChecked||!e.disabled)&&(Array.isArray(s)?e.checked=!!s.find(t=>t===e.value):e.checked=s===e.value||!!s)}):n.refs.forEach(e=>e.checked=e.value===s):Uc(n.ref)?n.ref.value=``:(n.ref.value=s,n.ref.type||p.state.next({name:e,values:i?a:_c(a)})))}(n.shouldDirty||n.shouldTouch)&&w(e,s,n.shouldTouch,n.shouldDirty,!0),n.shouldValidate&&de(e)},ae=(e,t,n,i=!1)=>{for(let a in t){if(!t.hasOwnProperty(a))return;let o=t[a],c=e+`.`+a,l=H(r,c);(s.array.has(e)||fc(o)||l&&!l._f)&&!lc(o)?ae(c,o,n,i):ie(c,o,n,i)}},oe=(e,t,i,c)=>{let l=H(r,e),u=s.array.has(e),m=c?t:_c(t),h=Ic(H(a,e),m);if(h||wc(a,e,m),u)p.array.next({name:e,values:c?a:_c(a)}),(d.isDirty||d.dirtyFields||f.isDirty||f.dirtyFields)&&i.shouldDirty&&(v(),p.state.next({name:e,dirtyFields:n.dirtyFields,isDirty:k(e,m)}));else{let t=Array.isArray(m)&&!m.length||Hc(m);!l||l._f||uc(m)||t?ie(e,m,i,c):ae(e,m,i,c)}if(!h){let t=gl(e,s),r=c?a:_c(a);p.state.next({...t&&n,name:o.mount||t?e:void 0,values:r})}},se=(e,t,n={})=>oe(e,t,n,!1),ce=(e,t={})=>{let r=Cc(e)?e(a):e;if(!Ic(a,r)){a={...a,...r};for(let e of s.mount)oe(e,H(r,e),t,!0);p.state.next({...n,name:void 0,type:void 0,values:a}),t.shouldValidate&&g()}},le=async i=>{o.mount=!0;let l=i.target,u=l.name,h=!0,v=H(r,u),y=e=>{h=Number.isNaN(e)||lc(e)&&isNaN(e.getTime())||Ic(e,H(a,u,e))},b=fl(t.mode),x=fl(t.reValidateMode);if(v){let o,S,C=l.type?cl(v._f):pc(i),E=i.type===Tc.BLUR||i.type===Tc.FOCUS_OUT,te=!hl(v._f)&&!e.validate&&!t.resolver&&!H(n.errors,u)&&!v._f.deps||xl(E,H(n.touchedFields,u),n.isSubmitted,x,b),k=gl(u,s,E);wc(a,u,C),E?(!l||!l.readOnly)&&(v._f.onBlur&&v._f.onBlur(i),c&&c(0)):v._f.onChange&&v._f.onChange(i);let ne=w(u,C,E),re=!Hc(ne)||k;if(!E&&p.state.next({name:u,type:i.type,values:_c(a)}),te)return(d.isValid||f.isValid)&&(t.mode===`onBlur`?E&&g():E||g()),re&&p.state.next({name:u,...k?{}:ne});if(!t.resolver&&e.validate&&await D({name:u,eventType:i.type}),!E&&k&&p.state.next({...n}),t.resolver){let{errors:e}=await T([u]);if(_([u]),y(C),h){let t=vl(n.errors,r,u),i=vl(e,r,t.name||u);o=i.error,u=i.name,S=Hc(e)}}else _([u],!0),o=(await El(v,s.disabled,a,m,t.shouldUseNativeValidation))[u],_([u]),y(C),h&&(o?S=!1:(d.isValid||f.isValid)&&(S=await O({fields:r,onlyCheckValid:!0,name:u,eventType:i.type})));h&&(v._f.deps&&(!Array.isArray(v._f.deps)||v._f.deps.length>0)&&de(v._f.deps),ee(u,S,o,ne))}},ue=(e,t)=>{if(H(n.errors,t)&&e.focus)return e.focus(),1},de=async(e,i={})=>{let a,o,c=zc(e);if(t.resolver){let t=await E(yc(e)?e:c);a=Hc(t),o=e?!c.some(e=>H(t,e)):a}else e?(o=(await Promise.all(c.map(async e=>{let t=H(r,e);return await O({fields:t&&t._f?{[e]:t}:t,eventType:Tc.TRIGGER})}))).every(Boolean),!(!o&&!n.isValid)&&g()):o=a=await O({fields:r,name:e,eventType:Tc.TRIGGER});return p.state.next({...!Nc(e)||(d.isValid||f.isValid)&&a!==n.isValid?{}:{name:e},...t.resolver||!e?{isValid:a}:{},errors:n.errors}),i.shouldFocus&&!o&&_l(r,ue,e?c:s.mount),o},fe=(e,t)=>{let r={...o.mount?a:i};return t&&(r=Vc(t.dirtyFields?n.dirtyFields:n.touchedFields,r)),yc(e)?r:Nc(e)?H(r,e):e.map(e=>H(r,e))},pe=(e,t)=>({invalid:!!H((t||n).errors,e),isDirty:!!H((t||n).dirtyFields,e),error:H((t||n).errors,e),isValidating:!!H(n.validatingFields,e),isTouched:!!H((t||n).touchedFields,e)}),me=e=>{let t=e?zc(e):void 0;t?.forEach(e=>U(n.errors,e)),t?t.forEach(e=>{p.state.next({name:e,errors:n.errors})}):p.state.next({errors:{}})},he=(e,t,i)=>{let a=(H(r,e,{_f:{}})._f||{}).ref,{ref:o,message:s,type:c,...l}=H(n.errors,e)||{};wc(n.errors,e,{...l,...t,ref:a}),p.state.next({name:e,errors:n.errors,isValid:!1}),i&&i.shouldFocus&&a&&a.focus&&a.focus()},ge=(e,t)=>Cc(e)?p.state.subscribe({next:n=>`values`in n&&e(n.values||ne(void 0,t),n)}):ne(e,t,!0),_e=e=>p.state.subscribe({next:t=>{if(bl(e.name,t.name,e.exact)&&yl(t,e.formState||d,ke,e.reRenderRoot)){let r={...a};e.callback({values:r,...n,...t,defaultValues:i})}}}).unsubscribe,ve=e=>(o.mount=!0,f={...f,...e.formState},_e({...e,formState:{...u,...e.formState}})),ye=(e,o={})=>{for(let c of e?zc(e):s.mount)s.mount.delete(c),s.array.delete(c),o.keepValue||(U(r,c),U(a,c)),!o.keepError&&U(n.errors,c),!o.keepDirty&&U(n.dirtyFields,c),!o.keepTouched&&U(n.touchedFields,c),!o.keepIsValidating&&U(n.validatingFields,c),!t.shouldUnregister&&!o.keepDefaultValue&&U(i,c);p.state.next({values:_c(a)}),p.state.next({...n,...o.keepDirty?{isDirty:k()}:{}}),!o.keepIsValid&&g()},be=({disabled:e,name:t})=>{if(Sc(e)&&o.mount||e||s.disabled.has(t)){let n=s.disabled.has(t)!==!!e;e?s.disabled.add(t):s.disabled.delete(t),n&&o.mount&&!o.action&&g()}},xe=(e,n={})=>{let a=H(r,e),c=Sc(n.disabled)||Sc(t.disabled),l=!s.registerName.has(e)&&a&&a._f&&!a._f.mount;return wc(r,e,{...a||{},_f:{...a&&a._f?a._f:{ref:{name:e}},name:e,mount:!0,...n}}),s.mount.add(e),a&&!l?be({disabled:Sc(n.disabled)?n.disabled:t.disabled,name:e}):C(e,!0,n.value),{...c?{disabled:n.disabled||t.disabled}:{},...t.progressive?{required:!!n.required,min:dl(n.min),max:dl(n.max),minLength:dl(n.minLength),maxLength:dl(n.maxLength),pattern:dl(n.pattern)}:{},name:e,onChange:le,onBlur:le,ref:c=>{if(c){s.registerName.add(e),xe(e,n),s.registerName.delete(e),a=H(r,e);let t=yc(c.value)&&c.querySelectorAll&&c.querySelectorAll(`input,select,textarea`)[0]||c,o=qc(t),l=a._f.refs||[];if(o?l.find(e=>e===t):t===a._f.ref)return;wc(r,e,{_f:{...a._f,...o?{refs:[...l.filter(Jc),t,...Array.isArray(H(i,e))?[{}]:[]],ref:{type:t.type,name:e}}:{ref:t}}}),C(e,!1,void 0,t)}else a=H(r,e,{}),a._f&&(a._f.mount=!1),(t.shouldUnregister||n.shouldUnregister)&&!(mc(s.array,e)&&o.action)&&s.unMount.add(e)}}},Se=()=>t.shouldFocusError&&!t.shouldUseNativeValidation&&_l(r,ue,s.mount),Ce=e=>{Sc(e)&&(p.state.next({disabled:e}),_l(r,(t,n)=>{let i=H(r,n);i&&(t.disabled=i._f.disabled||e,Array.isArray(i._f.refs)&&i._f.refs.forEach(t=>{t.disabled=i._f.disabled||e}))},0,!1))},we=(e,i)=>async o=>{let c;o&&(o.preventDefault&&o.preventDefault(),o.persist&&o.persist());let l=_c(a);if(p.state.next({isSubmitting:!0}),t.resolver){let{errors:e,values:t}=await T();_(),n.errors=e,l=_c(t)}else await O({fields:r,eventType:Tc.SUBMIT});if(s.disabled.size)for(let e of s.disabled)U(l,e);if(U(n.errors,kc),Hc(n.errors)){p.state.next({errors:{}});try{await e(l,o)}catch(e){c=e}}else i&&await i({...n.errors},o),Se(),setTimeout(Se);if(p.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:Hc(n.errors)&&!c,submitCount:n.submitCount+1,errors:n.errors}),c)throw c},Te=(e,t={})=>{H(r,e)&&(yc(t.defaultValue)?se(e,_c(H(i,e))):(se(e,t.defaultValue),wc(i,e,_c(t.defaultValue))),t.keepTouched||U(n.touchedFields,e),t.keepDirty||(U(n.dirtyFields,e),n.isDirty=t.defaultValue?k(e,_c(H(i,e))):k()),t.keepError||(U(n.errors,e),d.isValid&&g()),p.state.next({...n}))},Ee=(e,c={})=>{let l=e?_c(e):i,u=_c(l),f=Hc(e),m=f?i:u;if(c.keepDefaultValues||(i=l),!c.keepValues){if(c.keepDirtyValues){let e=new Set([...s.mount,...Object.keys(tl(i,a))]);for(let t of Array.from(e)){let e=H(n.dirtyFields,t),r=H(a,t),i=H(m,t);e&&!yc(r)?wc(m,t,r):!e&&!yc(i)&&se(t,i)}}else{if(gc&&yc(e))for(let e of s.mount){let t=H(r,e);if(t&&t._f){let e=Array.isArray(t._f.refs)?t._f.refs[0]:t._f.ref;if(Wc(e)){let t=e.closest(`form`);if(t){t.reset();break}}}}if(c.keepFieldsRef)for(let e of s.mount)se(e,H(m,e));else r={}}a=t.shouldUnregister?c.keepDefaultValues?_c(i):{}:_c(m),p.array.next({values:{...m}}),p.state.next({values:{...m}})}s={mount:c.keepDirtyValues?s.mount:new Set,unMount:new Set,array:new Set,registerName:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:``},o.mount=!d.isValid||!!c.keepIsValid||!!c.keepDirtyValues||!t.shouldUnregister&&!Hc(m),o.watch=!!t.shouldUnregister,o.keepIsValid=!!c.keepIsValid,o.action=!1,c.keepErrors||(n.errors={}),p.state.next({submitCount:c.keepSubmitCount?n.submitCount:0,isDirty:f?!1:c.keepDirty?n.isDirty:!!(c.keepDefaultValues&&!Ic(e,i)),isSubmitted:c.keepIsSubmitted?n.isSubmitted:!1,dirtyFields:f?{}:c.keepDirtyValues?c.keepDefaultValues&&a?tl(i,a):n.dirtyFields:c.keepDefaultValues&&e?tl(i,e):c.keepDirty?n.dirtyFields:{},touchedFields:c.keepTouched?n.touchedFields:{},errors:c.keepErrors?n.errors:{},isSubmitSuccessful:c.keepIsSubmitSuccessful?n.isSubmitSuccessful:!1,isSubmitting:!1,defaultValues:i})},De=(e,n)=>Ee(Cc(e)?e(a):e,{...t.resetOptions,...n}),Oe=(e,t={})=>{let n=H(r,e),i=n&&n._f;if(i){let e=i.refs?i.refs[0]:i.ref;e.focus&&setTimeout(()=>{e.focus(),t.shouldSelect&&Cc(e.select)&&e.select()})}},ke=e=>{n={...n,...e}},Ae={control:{register:xe,unregister:ye,getFieldState:pe,handleSubmit:we,setError:he,_subscribe:_e,_runSchema:T,_updateIsValidating:_,_focusError:Se,_getWatch:ne,_getDirty:k,_setValid:g,_setFieldArray:y,_setDisabledField:be,_setErrors:x,_getFieldArray:re,_reset:Ee,_resetDefaultValues:()=>Cc(t.defaultValues)&&t.defaultValues().then(e=>{De(e,t.resetOptions),p.state.next({isLoading:!1})}),_removeUnmounted:te,_disableForm:Ce,_subjects:p,_proxyFormState:d,get _fields(){return r},get _formValues(){return a},get _state(){return o},set _state(e){o=e},get _defaultValues(){return i},get _names(){return s},set _names(e){s=e},get _formState(){return n},get _options(){return t},set _options(e){t={...t,...e}}},subscribe:ve,trigger:de,register:xe,handleSubmit:we,watch:ge,setValue:se,setValues:ce,getValues:fe,reset:De,resetField:Te,clearErrors:me,unregister:ye,setError:he,setFocus:Oe,getFieldState:pe};return{...Ae,formControl:Ae}}function Al(e={}){let t=_.useRef(void 0),n=_.useRef(void 0),[r,i]=_.useState(()=>({..._c(Ol),isLoading:Cc(e.defaultValues),errors:e.errors||{},disabled:e.disabled||!1,defaultValues:Cc(e.defaultValues)?void 0:e.defaultValues}));if(!t.current)if(e.formControl)t.current={...e.formControl,formState:r},e.defaultValues&&!Cc(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{let{formControl:n,...i}=kl(e);t.current={...i,formState:r}}let a=t.current.control;return a._options=e,Mc(()=>{let e=a._subscribe({formState:a._proxyFormState,callback:()=>i({...a._formState,defaultValues:a._defaultValues}),reRenderRoot:!0});return i(e=>({...e,isReady:!0})),a._formState.isReady=!0,e},[a]),_.useEffect(()=>a._disableForm(e.disabled),[a,e.disabled]),_.useEffect(()=>{e.mode&&(a._options.mode=e.mode),e.reValidateMode&&(a._options.reValidateMode=e.reValidateMode)},[a,e.mode,e.reValidateMode]),_.useEffect(()=>{e.errors&&(a._setErrors(e.errors),a._focusError())},[a,e.errors]),_.useEffect(()=>{e.shouldUnregister&&a._subjects.state.next({values:a._getWatch()})},[a,e.shouldUnregister]),_.useEffect(()=>{if(a._proxyFormState.isDirty){let e=a._getDirty();e!==r.isDirty&&a._subjects.state.next({isDirty:e})}},[a,r.isDirty]),_.useEffect(()=>{e.values&&!Ic(e.values,n.current)?(a._reset(e.values,{keepFieldsRef:!0,...a._options.resetOptions}),a._options.resetOptions?.keepIsValid||a._setValid(),n.current=e.values,i(e=>({...e}))):a._resetDefaultValues()},[a,e.values]),_.useEffect(()=>{a._state.mount||(a._setValid(),a._state.mount=!0),a._state.watch&&(a._state.watch=!1,a._subjects.state.next({...a._formState})),a._removeUnmounted()}),t.current.formState=_.useMemo(()=>jc(r,a),[a,r]),t.current}var jl=(e,t,n)=>{if(e&&`reportValidity`in e){let r=H(n,t);e.setCustomValidity(r&&r.message||``),e.reportValidity()}},Ml=(e,t)=>{for(let n in t.fields){let r=t.fields[n];r&&r.ref&&`reportValidity`in r.ref?jl(r.ref,n,e):r.refs&&r.refs.forEach(t=>jl(t,n,e))}},Nl=(e,t)=>{t.shouldUseNativeValidation&&Ml(e,t);let n={};for(let r in e){let i=H(t.fields,r),a=Object.assign(e[r]||{},{ref:i&&i.ref});if(Pl(t.names||Object.keys(e),r)){let e=Object.assign({},H(n,r));wc(e,`root`,a),wc(n,r,e)}else wc(n,r,a)}return n},Pl=(e,t)=>e.some(e=>e.startsWith(t+`.`)),Fl=function(e,t){for(var n={};e.length;){var r=e[0],i=r.code,a=r.message,o=r.path.join(`.`);if(!n[o])if(`unionErrors`in r){var s=r.unionErrors[0].errors[0];n[o]={message:s.message,type:s.code}}else n[o]={message:a,type:i};if(`unionErrors`in r&&r.unionErrors.forEach(function(t){return t.errors.forEach(function(t){return e.push(t)})}),t){var c=n[o].types,l=c&&c[r.code];n[o]=Rc(o,t,n,i,l?[].concat(l,r.message):r.message)}e.shift()}return n},Il=function(e,t,n){return n===void 0&&(n={}),function(r,i,a){try{return Promise.resolve(function(i,o){try{var s=Promise.resolve(e[n.mode===`sync`?`parse`:`parseAsync`](r,t)).then(function(e){return a.shouldUseNativeValidation&&Ml({},a),{errors:{},values:n.raw?r:e}})}catch(e){return o(e)}return s&&s.then?s.then(void 0,o):s}(0,function(e){if(function(e){return Array.isArray(e?.errors)}(e))return{values:{},errors:Nl(Fl(e.errors,!a.shouldUseNativeValidation&&a.criteriaMode===`all`),a)};throw e}))}catch(e){return Promise.reject(e)}}},W;(function(e){e.assertEqual=e=>{};function t(e){}e.assertIs=t;function n(e){throw Error()}e.assertNever=n,e.arrayToEnum=e=>{let t={};for(let n of e)t[n]=n;return t},e.getValidEnumValues=t=>{let n=e.objectKeys(t).filter(e=>typeof t[t[e]]!=`number`),r={};for(let e of n)r[e]=t[e];return e.objectValues(r)},e.objectValues=t=>e.objectKeys(t).map(function(e){return t[e]}),e.objectKeys=typeof Object.keys==`function`?e=>Object.keys(e):e=>{let t=[];for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t},e.find=(e,t)=>{for(let n of e)if(t(n))return n},e.isInteger=typeof Number.isInteger==`function`?e=>Number.isInteger(e):e=>typeof e==`number`&&Number.isFinite(e)&&Math.floor(e)===e;function r(e,t=` | `){return e.map(e=>typeof e==`string`?`'${e}'`:e).join(t)}e.joinValues=r,e.jsonStringifyReplacer=(e,t)=>typeof t==`bigint`?t.toString():t})(W||={});var Ll;(function(e){e.mergeShapes=(e,t)=>({...e,...t})})(Ll||={});var G=W.arrayToEnum([`string`,`nan`,`number`,`integer`,`float`,`boolean`,`date`,`bigint`,`symbol`,`function`,`undefined`,`null`,`array`,`object`,`unknown`,`promise`,`void`,`never`,`map`,`set`]),Rl=e=>{switch(typeof e){case`undefined`:return G.undefined;case`string`:return G.string;case`number`:return Number.isNaN(e)?G.nan:G.number;case`boolean`:return G.boolean;case`function`:return G.function;case`bigint`:return G.bigint;case`symbol`:return G.symbol;case`object`:return Array.isArray(e)?G.array:e===null?G.null:e.then&&typeof e.then==`function`&&e.catch&&typeof e.catch==`function`?G.promise:typeof Map<`u`&&e instanceof Map?G.map:typeof Set<`u`&&e instanceof Set?G.set:typeof Date<`u`&&e instanceof Date?G.date:G.object;default:return G.unknown}},K=W.arrayToEnum([`invalid_type`,`invalid_literal`,`custom`,`invalid_union`,`invalid_union_discriminator`,`invalid_enum_value`,`unrecognized_keys`,`invalid_arguments`,`invalid_return_type`,`invalid_date`,`invalid_string`,`too_small`,`too_big`,`invalid_intersection_types`,`not_multiple_of`,`not_finite`]),zl=class e extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name=`ZodError`,this.issues=e}format(e){let t=e||function(e){return e.message},n={_errors:[]},r=e=>{for(let i of e.issues)if(i.code===`invalid_union`)i.unionErrors.map(r);else if(i.code===`invalid_return_type`)r(i.returnTypeError);else if(i.code===`invalid_arguments`)r(i.argumentsError);else if(i.path.length===0)n._errors.push(t(i));else{let e=n,r=0;for(;re.message){let t={},n=[];for(let r of this.issues)if(r.path.length>0){let n=r.path[0];t[n]=t[n]||[],t[n].push(e(r))}else n.push(e(r));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};zl.create=e=>new zl(e);var Bl=(e,t)=>{let n;switch(e.code){case K.invalid_type:n=e.received===G.undefined?`Required`:`Expected ${e.expected}, received ${e.received}`;break;case K.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,W.jsonStringifyReplacer)}`;break;case K.unrecognized_keys:n=`Unrecognized key(s) in object: ${W.joinValues(e.keys,`, `)}`;break;case K.invalid_union:n=`Invalid input`;break;case K.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${W.joinValues(e.options)}`;break;case K.invalid_enum_value:n=`Invalid enum value. Expected ${W.joinValues(e.options)}, received '${e.received}'`;break;case K.invalid_arguments:n=`Invalid function arguments`;break;case K.invalid_return_type:n=`Invalid function return type`;break;case K.invalid_date:n=`Invalid date`;break;case K.invalid_string:typeof e.validation==`object`?`includes`in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position==`number`&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):`startsWith`in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:`endsWith`in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:W.assertNever(e.validation):n=e.validation===`regex`?`Invalid`:`Invalid ${e.validation}`;break;case K.too_small:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at least`:`more than`} ${e.minimum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at least`:`over`} ${e.minimum} character(s)`:e.type===`number`||e.type===`bigint`?`Number must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${e.minimum}`:e.type===`date`?`Date must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${new Date(Number(e.minimum))}`:`Invalid input`;break;case K.too_big:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at most`:`less than`} ${e.maximum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at most`:`under`} ${e.maximum} character(s)`:e.type===`number`?`Number must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`bigint`?`BigInt must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`date`?`Date must be ${e.exact?`exactly`:e.inclusive?`smaller than or equal to`:`smaller than`} ${new Date(Number(e.maximum))}`:`Invalid input`;break;case K.custom:n=`Invalid input`;break;case K.invalid_intersection_types:n=`Intersection results could not be merged`;break;case K.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case K.not_finite:n=`Number must be finite`;break;default:n=t.defaultError,W.assertNever(e)}return{message:n}},Vl=Bl;function Hl(){return Vl}var Ul=e=>{let{data:t,path:n,errorMaps:r,issueData:i}=e,a=[...n,...i.path||[]],o={...i,path:a};if(i.message!==void 0)return{...i,path:a,message:i.message};let s=``,c=r.filter(e=>!!e).slice().reverse();for(let e of c)s=e(o,{data:t,defaultError:s}).message;return{...i,path:a,message:s}};function q(e,t){let n=Hl(),r=Ul({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===Bl?void 0:Bl].filter(e=>!!e)});e.common.issues.push(r)}var J=class e{constructor(){this.value=`valid`}dirty(){this.value===`valid`&&(this.value=`dirty`)}abort(){this.value!==`aborted`&&(this.value=`aborted`)}static mergeArray(e,t){let n=[];for(let r of t){if(r.status===`aborted`)return Y;r.status===`dirty`&&e.dirty(),n.push(r.value)}return{status:e.value,value:n}}static async mergeObjectAsync(t,n){let r=[];for(let e of n){let t=await e.key,n=await e.value;r.push({key:t,value:n})}return e.mergeObjectSync(t,r)}static mergeObjectSync(e,t){let n={};for(let r of t){let{key:t,value:i}=r;if(t.status===`aborted`||i.status===`aborted`)return Y;t.status===`dirty`&&e.dirty(),i.status===`dirty`&&e.dirty(),t.value!==`__proto__`&&(i.value!==void 0||r.alwaysSet)&&(n[t.value]=i.value)}return{status:e.value,value:n}}},Y=Object.freeze({status:`aborted`}),Wl=e=>({status:`dirty`,value:e}),Gl=e=>({status:`valid`,value:e}),Kl=e=>e.status===`aborted`,ql=e=>e.status===`dirty`,Jl=e=>e.status===`valid`,Yl=e=>typeof Promise<`u`&&e instanceof Promise,X;(function(e){e.errToObj=e=>typeof e==`string`?{message:e}:e||{},e.toString=e=>typeof e==`string`?e:e?.message})(X||={});var Xl=class{constructor(e,t,n,r){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=r}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Zl=(e,t)=>{if(Jl(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw Error(`Validation failed but no issues detected.`);return{success:!1,get error(){if(this._error)return this._error;let t=new zl(e.common.issues);return this._error=t,this._error}}};function Z(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(t,i)=>{let{message:a}=e;return t.code===`invalid_enum_value`?{message:a??i.defaultError}:i.data===void 0?{message:a??r??i.defaultError}:t.code===`invalid_type`?{message:a??n??i.defaultError}:{message:i.defaultError}},description:i}}var Q=class{get description(){return this._def.description}_getType(e){return Rl(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:Rl(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new J,ctx:{common:e.parent.common,data:e.data,parsedType:Rl(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(Yl(t))throw Error(`Synchronous parse encountered promise.`);return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Rl(e)};return Zl(n,this._parseSync({data:e,path:n.path,parent:n}))}"~validate"(e){let t={common:{issues:[],async:!!this[`~standard`].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Rl(e)};if(!this[`~standard`].async)try{let n=this._parseSync({data:e,path:[],parent:t});return Jl(n)?{value:n.value}:{issues:t.common.issues}}catch(e){e?.message?.toLowerCase()?.includes(`encountered`)&&(this[`~standard`].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(e=>Jl(e)?{value:e.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Rl(e)},r=this._parse({data:e,path:n.path,parent:n});return Zl(n,await(Yl(r)?r:Promise.resolve(r)))}refine(e,t){let n=e=>typeof t==`string`||t===void 0?{message:t}:typeof t==`function`?t(e):t;return this._refinement((t,r)=>{let i=e(t),a=()=>r.addIssue({code:K.custom,...n(t)});return typeof Promise<`u`&&i instanceof Promise?i.then(e=>e?!0:(a(),!1)):i?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,r)=>e(n)?!0:(r.addIssue(typeof t==`function`?t(n,r):t),!1))}_refinement(e){return new ed({schema:this,typeName:$.ZodEffects,effect:{type:`refinement`,refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this[`~standard`]={version:1,vendor:`zod`,validate:e=>this[`~validate`](e)}}optional(){return td.create(this,this._def)}nullable(){return nd.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Fu.create(this)}promise(){return $u.create(this,this._def)}or(e){return Ru.create([this,e],this._def)}and(e){return Hu.create(this,e,this._def)}transform(e){return new ed({...Z(this._def),schema:this,typeName:$.ZodEffects,effect:{type:`transform`,transform:e}})}default(e){let t=typeof e==`function`?e:()=>e;return new rd({...Z(this._def),innerType:this,defaultValue:t,typeName:$.ZodDefault})}brand(){return new od({typeName:$.ZodBranded,type:this,...Z(this._def)})}catch(e){let t=typeof e==`function`?e:()=>e;return new id({...Z(this._def),innerType:this,catchValue:t,typeName:$.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return sd.create(this,e)}readonly(){return cd.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Ql=/^c[^\s-]{8,}$/i,$l=/^[0-9a-z]+$/,eu=/^[0-9A-HJKMNP-TV-Z]{26}$/i,tu=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,nu=/^[a-z0-9_-]{21}$/i,ru=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,iu=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,au=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,ou=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`,su,cu=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,lu=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,uu=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,du=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,fu=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,pu=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,mu=`((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`,hu=RegExp(`^${mu}$`);function gu(e){let t=`[0-5]\\d`;e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision??(t=`${t}(\\.\\d+)?`);let n=e.precision?`+`:`?`;return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${n}`}function _u(e){return RegExp(`^${gu(e)}$`)}function vu(e){let t=`${mu}T${gu(e)}`,n=[];return n.push(e.local?`Z?`:`Z`),e.offset&&n.push(`([+-]\\d{2}:?\\d{2})`),t=`${t}(${n.join(`|`)})`,RegExp(`^${t}$`)}function yu(e,t){return!!((t===`v4`||!t)&&cu.test(e)||(t===`v6`||!t)&&uu.test(e))}function bu(e,t){if(!ru.test(e))return!1;try{let[n]=e.split(`.`);if(!n)return!1;let r=n.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(n.length+(4-n.length%4)%4,`=`),i=JSON.parse(atob(r));return!(typeof i!=`object`||!i||`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&i.alg!==t)}catch{return!1}}function xu(e,t){return!!((t===`v4`||!t)&&lu.test(e)||(t===`v6`||!t)&&du.test(e))}var Su=class e extends Q{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==G.string){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.string,received:t.parsedType}),Y}let t=new J,n;for(let r of this._def.checks)if(r.kind===`min`)e.data.lengthr.value&&(n=this._getOrReturnCtx(e,n),q(n,{code:K.too_big,maximum:r.value,type:`string`,inclusive:!0,exact:!1,message:r.message}),t.dirty());else if(r.kind===`length`){let i=e.data.length>r.value,a=e.data.lengthe.test(t),{validation:t,code:K.invalid_string,...X.errToObj(n)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(e){return this._addCheck({kind:`email`,...X.errToObj(e)})}url(e){return this._addCheck({kind:`url`,...X.errToObj(e)})}emoji(e){return this._addCheck({kind:`emoji`,...X.errToObj(e)})}uuid(e){return this._addCheck({kind:`uuid`,...X.errToObj(e)})}nanoid(e){return this._addCheck({kind:`nanoid`,...X.errToObj(e)})}cuid(e){return this._addCheck({kind:`cuid`,...X.errToObj(e)})}cuid2(e){return this._addCheck({kind:`cuid2`,...X.errToObj(e)})}ulid(e){return this._addCheck({kind:`ulid`,...X.errToObj(e)})}base64(e){return this._addCheck({kind:`base64`,...X.errToObj(e)})}base64url(e){return this._addCheck({kind:`base64url`,...X.errToObj(e)})}jwt(e){return this._addCheck({kind:`jwt`,...X.errToObj(e)})}ip(e){return this._addCheck({kind:`ip`,...X.errToObj(e)})}cidr(e){return this._addCheck({kind:`cidr`,...X.errToObj(e)})}datetime(e){return typeof e==`string`?this._addCheck({kind:`datetime`,precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:`datetime`,precision:e?.precision===void 0?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...X.errToObj(e?.message)})}date(e){return this._addCheck({kind:`date`,message:e})}time(e){return typeof e==`string`?this._addCheck({kind:`time`,precision:null,message:e}):this._addCheck({kind:`time`,precision:e?.precision===void 0?null:e?.precision,...X.errToObj(e?.message)})}duration(e){return this._addCheck({kind:`duration`,...X.errToObj(e)})}regex(e,t){return this._addCheck({kind:`regex`,regex:e,...X.errToObj(t)})}includes(e,t){return this._addCheck({kind:`includes`,value:e,position:t?.position,...X.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:`startsWith`,value:e,...X.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:`endsWith`,value:e,...X.errToObj(t)})}min(e,t){return this._addCheck({kind:`min`,value:e,...X.errToObj(t)})}max(e,t){return this._addCheck({kind:`max`,value:e,...X.errToObj(t)})}length(e,t){return this._addCheck({kind:`length`,value:e,...X.errToObj(t)})}nonempty(e){return this.min(1,X.errToObj(e))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:`trim`}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toLowerCase`}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toUpperCase`}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind===`datetime`)}get isDate(){return!!this._def.checks.find(e=>e.kind===`date`)}get isTime(){return!!this._def.checks.find(e=>e.kind===`time`)}get isDuration(){return!!this._def.checks.find(e=>e.kind===`duration`)}get isEmail(){return!!this._def.checks.find(e=>e.kind===`email`)}get isURL(){return!!this._def.checks.find(e=>e.kind===`url`)}get isEmoji(){return!!this._def.checks.find(e=>e.kind===`emoji`)}get isUUID(){return!!this._def.checks.find(e=>e.kind===`uuid`)}get isNANOID(){return!!this._def.checks.find(e=>e.kind===`nanoid`)}get isCUID(){return!!this._def.checks.find(e=>e.kind===`cuid`)}get isCUID2(){return!!this._def.checks.find(e=>e.kind===`cuid2`)}get isULID(){return!!this._def.checks.find(e=>e.kind===`ulid`)}get isIP(){return!!this._def.checks.find(e=>e.kind===`ip`)}get isCIDR(){return!!this._def.checks.find(e=>e.kind===`cidr`)}get isBase64(){return!!this._def.checks.find(e=>e.kind===`base64`)}get isBase64url(){return!!this._def.checks.find(e=>e.kind===`base64url`)}get minLength(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuenew Su({checks:[],typeName:$.ZodString,coerce:e?.coerce??!1,...Z(e)});function Cu(e,t){let n=(e.toString().split(`.`)[1]||``).length,r=(t.toString().split(`.`)[1]||``).length,i=n>r?n:r;return Number.parseInt(e.toFixed(i).replace(`.`,``))%Number.parseInt(t.toFixed(i).replace(`.`,``))/10**i}var wu=class e extends Q{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==G.number){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.number,received:t.parsedType}),Y}let t,n=new J;for(let r of this._def.checks)r.kind===`int`?W.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),q(t,{code:K.invalid_type,expected:`integer`,received:`float`,message:r.message}),n.dirty()):r.kind===`min`?(r.inclusive?e.datar.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),q(t,{code:K.too_big,maximum:r.value,type:`number`,inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty()):r.kind===`multipleOf`?Cu(e.data,r.value)!==0&&(t=this._getOrReturnCtx(e,t),q(t,{code:K.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):r.kind===`finite`?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),q(t,{code:K.not_finite,message:r.message}),n.dirty()):W.assertNever(r);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit(`min`,e,!0,X.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,X.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,X.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,X.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:X.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(e){return this._addCheck({kind:`int`,message:X.toString(e)})}positive(e){return this._addCheck({kind:`min`,value:0,inclusive:!1,message:X.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:0,inclusive:!1,message:X.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:0,inclusive:!0,message:X.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:0,inclusive:!0,message:X.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:X.toString(t)})}finite(e){return this._addCheck({kind:`finite`,message:X.toString(e)})}safe(e){return this._addCheck({kind:`min`,inclusive:!0,value:-(2**53-1),message:X.toString(e)})._addCheck({kind:`max`,inclusive:!0,value:2**53-1,message:X.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuee.kind===`int`||e.kind===`multipleOf`&&W.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks)if(n.kind===`finite`||n.kind===`int`||n.kind===`multipleOf`)return!0;else n.kind===`min`?(t===null||n.value>t)&&(t=n.value):n.kind===`max`&&(e===null||n.valuenew wu({checks:[],typeName:$.ZodNumber,coerce:e?.coerce||!1,...Z(e)});var Tu=class e extends Q{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==G.bigint)return this._getInvalidInput(e);let t,n=new J;for(let r of this._def.checks)r.kind===`min`?(r.inclusive?e.datar.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),q(t,{code:K.too_big,type:`bigint`,maximum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty()):r.kind===`multipleOf`?e.data%r.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),q(t,{code:K.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):W.assertNever(r);return{status:n.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.bigint,received:t.parsedType}),Y}gte(e,t){return this.setLimit(`min`,e,!0,X.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,X.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,X.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,X.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:X.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!1,message:X.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!1,message:X.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!0,message:X.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!0,message:X.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:X.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuenew Tu({checks:[],typeName:$.ZodBigInt,coerce:e?.coerce??!1,...Z(e)});var Eu=class extends Q{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==G.boolean){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.boolean,received:t.parsedType}),Y}return Gl(e.data)}};Eu.create=e=>new Eu({typeName:$.ZodBoolean,coerce:e?.coerce||!1,...Z(e)});var Du=class e extends Q{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==G.date){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.date,received:t.parsedType}),Y}if(Number.isNaN(e.data.getTime()))return q(this._getOrReturnCtx(e),{code:K.invalid_date}),Y;let t=new J,n;for(let r of this._def.checks)r.kind===`min`?e.data.getTime()r.value&&(n=this._getOrReturnCtx(e,n),q(n,{code:K.too_big,message:r.message,inclusive:!0,exact:!1,maximum:r.value,type:`date`}),t.dirty()):W.assertNever(r);return{status:t.value,value:new Date(e.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(e,t){return this._addCheck({kind:`min`,value:e.getTime(),message:X.toString(t)})}max(e,t){return this._addCheck({kind:`max`,value:e.getTime(),message:X.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e==null?null:new Date(e)}get maxDate(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuenew Du({checks:[],coerce:e?.coerce||!1,typeName:$.ZodDate,...Z(e)});var Ou=class extends Q{_parse(e){if(this._getType(e)!==G.symbol){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.symbol,received:t.parsedType}),Y}return Gl(e.data)}};Ou.create=e=>new Ou({typeName:$.ZodSymbol,...Z(e)});var ku=class extends Q{_parse(e){if(this._getType(e)!==G.undefined){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.undefined,received:t.parsedType}),Y}return Gl(e.data)}};ku.create=e=>new ku({typeName:$.ZodUndefined,...Z(e)});var Au=class extends Q{_parse(e){if(this._getType(e)!==G.null){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.null,received:t.parsedType}),Y}return Gl(e.data)}};Au.create=e=>new Au({typeName:$.ZodNull,...Z(e)});var ju=class extends Q{constructor(){super(...arguments),this._any=!0}_parse(e){return Gl(e.data)}};ju.create=e=>new ju({typeName:$.ZodAny,...Z(e)});var Mu=class extends Q{constructor(){super(...arguments),this._unknown=!0}_parse(e){return Gl(e.data)}};Mu.create=e=>new Mu({typeName:$.ZodUnknown,...Z(e)});var Nu=class extends Q{_parse(e){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.never,received:t.parsedType}),Y}};Nu.create=e=>new Nu({typeName:$.ZodNever,...Z(e)});var Pu=class extends Q{_parse(e){if(this._getType(e)!==G.undefined){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.void,received:t.parsedType}),Y}return Gl(e.data)}};Pu.create=e=>new Pu({typeName:$.ZodVoid,...Z(e)});var Fu=class e extends Q{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),r=this._def;if(t.parsedType!==G.array)return q(t,{code:K.invalid_type,expected:G.array,received:t.parsedType}),Y;if(r.exactLength!==null){let e=t.data.length>r.exactLength.value,i=t.data.lengthr.maxLength.value&&(q(t,{code:K.too_big,maximum:r.maxLength.value,type:`array`,inclusive:!0,exact:!1,message:r.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((e,n)=>r.type._parseAsync(new Xl(t,e,t.path,n)))).then(e=>J.mergeArray(n,e));let i=[...t.data].map((e,n)=>r.type._parseSync(new Xl(t,e,t.path,n)));return J.mergeArray(n,i)}get element(){return this._def.type}min(t,n){return new e({...this._def,minLength:{value:t,message:X.toString(n)}})}max(t,n){return new e({...this._def,maxLength:{value:t,message:X.toString(n)}})}length(t,n){return new e({...this._def,exactLength:{value:t,message:X.toString(n)}})}nonempty(e){return this.min(1,e)}};Fu.create=(e,t)=>new Fu({type:e,minLength:null,maxLength:null,exactLength:null,typeName:$.ZodArray,...Z(t)});function Iu(e){if(e instanceof Lu){let t={};for(let n in e.shape){let r=e.shape[n];t[n]=td.create(Iu(r))}return new Lu({...e._def,shape:()=>t})}else if(e instanceof Fu)return new Fu({...e._def,type:Iu(e.element)});else if(e instanceof td)return td.create(Iu(e.unwrap()));else if(e instanceof nd)return nd.create(Iu(e.unwrap()));else if(e instanceof Uu)return Uu.create(e.items.map(e=>Iu(e)));else return e}var Lu=class e extends Q{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=W.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==G.object){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.object,received:t.parsedType}),Y}let{status:t,ctx:n}=this._processInputParams(e),{shape:r,keys:i}=this._getCached(),a=[];if(!(this._def.catchall instanceof Nu&&this._def.unknownKeys===`strip`))for(let e in n.data)i.includes(e)||a.push(e);let o=[];for(let e of i){let t=r[e],i=n.data[e];o.push({key:{status:`valid`,value:e},value:t._parse(new Xl(n,i,n.path,e)),alwaysSet:e in n.data})}if(this._def.catchall instanceof Nu){let e=this._def.unknownKeys;if(e===`passthrough`)for(let e of a)o.push({key:{status:`valid`,value:e},value:{status:`valid`,value:n.data[e]}});else if(e===`strict`)a.length>0&&(q(n,{code:K.unrecognized_keys,keys:a}),t.dirty());else if(e!==`strip`)throw Error(`Internal ZodObject error: invalid unknownKeys value.`)}else{let e=this._def.catchall;for(let t of a){let r=n.data[t];o.push({key:{status:`valid`,value:t},value:e._parse(new Xl(n,r,n.path,t)),alwaysSet:t in n.data})}}return n.common.async?Promise.resolve().then(async()=>{let e=[];for(let t of o){let n=await t.key,r=await t.value;e.push({key:n,value:r,alwaysSet:t.alwaysSet})}return e}).then(e=>J.mergeObjectSync(t,e)):J.mergeObjectSync(t,o)}get shape(){return this._def.shape()}strict(t){return X.errToObj,new e({...this._def,unknownKeys:`strict`,...t===void 0?{}:{errorMap:(e,n)=>{let r=this._def.errorMap?.(e,n).message??n.defaultError;return e.code===`unrecognized_keys`?{message:X.errToObj(t).message??r}:{message:r}}}})}strip(){return new e({...this._def,unknownKeys:`strip`})}passthrough(){return new e({...this._def,unknownKeys:`passthrough`})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:$.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let n={};for(let e of W.objectKeys(t))t[e]&&this.shape[e]&&(n[e]=this.shape[e]);return new e({...this._def,shape:()=>n})}omit(t){let n={};for(let e of W.objectKeys(this.shape))t[e]||(n[e]=this.shape[e]);return new e({...this._def,shape:()=>n})}deepPartial(){return Iu(this)}partial(t){let n={};for(let e of W.objectKeys(this.shape)){let r=this.shape[e];t&&!t[e]?n[e]=r:n[e]=r.optional()}return new e({...this._def,shape:()=>n})}required(t){let n={};for(let e of W.objectKeys(this.shape))if(t&&!t[e])n[e]=this.shape[e];else{let t=this.shape[e];for(;t instanceof td;)t=t._def.innerType;n[e]=t}return new e({...this._def,shape:()=>n})}keyof(){return Xu(W.objectKeys(this.shape))}};Lu.create=(e,t)=>new Lu({shape:()=>e,unknownKeys:`strip`,catchall:Nu.create(),typeName:$.ZodObject,...Z(t)}),Lu.strictCreate=(e,t)=>new Lu({shape:()=>e,unknownKeys:`strict`,catchall:Nu.create(),typeName:$.ZodObject,...Z(t)}),Lu.lazycreate=(e,t)=>new Lu({shape:e,unknownKeys:`strip`,catchall:Nu.create(),typeName:$.ZodObject,...Z(t)});var Ru=class extends Q{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function r(e){for(let t of e)if(t.result.status===`valid`)return t.result;for(let n of e)if(n.result.status===`dirty`)return t.common.issues.push(...n.ctx.common.issues),n.result;let n=e.map(e=>new zl(e.ctx.common.issues));return q(t,{code:K.invalid_union,unionErrors:n}),Y}if(t.common.async)return Promise.all(n.map(async e=>{let n={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:n}),ctx:n}})).then(r);{let e,r=[];for(let i of n){let n={...t,common:{...t.common,issues:[]},parent:null},a=i._parseSync({data:t.data,path:t.path,parent:n});if(a.status===`valid`)return a;a.status===`dirty`&&!e&&(e={result:a,ctx:n}),n.common.issues.length&&r.push(n.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;let i=r.map(e=>new zl(e));return q(t,{code:K.invalid_union,unionErrors:i}),Y}}get options(){return this._def.options}};Ru.create=(e,t)=>new Ru({options:e,typeName:$.ZodUnion,...Z(t)});var zu=e=>e instanceof Ju?zu(e.schema):e instanceof ed?zu(e.innerType()):e instanceof Yu?[e.value]:e instanceof Zu?e.options:e instanceof Qu?W.objectValues(e.enum):e instanceof rd?zu(e._def.innerType):e instanceof ku?[void 0]:e instanceof Au?[null]:e instanceof td?[void 0,...zu(e.unwrap())]:e instanceof nd?[null,...zu(e.unwrap())]:e instanceof od||e instanceof cd?zu(e.unwrap()):e instanceof id?zu(e._def.innerType):[],Bu=class e extends Q{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==G.object)return q(t,{code:K.invalid_type,expected:G.object,received:t.parsedType}),Y;let n=this.discriminator,r=t.data[n],i=this.optionsMap.get(r);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(q(t,{code:K.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),Y)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){let i=new Map;for(let e of n){let n=zu(e.shape[t]);if(!n.length)throw Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let r of n){if(i.has(r))throw Error(`Discriminator property ${String(t)} has duplicate value ${String(r)}`);i.set(r,e)}}return new e({typeName:$.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...Z(r)})}};function Vu(e,t){let n=Rl(e),r=Rl(t);if(e===t)return{valid:!0,data:e};if(n===G.object&&r===G.object){let n=W.objectKeys(t),r=W.objectKeys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=Vu(e[n],t[n]);if(!r.valid)return{valid:!1};i[n]=r.data}return{valid:!0,data:i}}else if(n===G.array&&r===G.array){if(e.length!==t.length)return{valid:!1};let n=[];for(let r=0;r{if(Kl(e)||Kl(r))return Y;let i=Vu(e.value,r.value);return i.valid?((ql(e)||ql(r))&&t.dirty(),{status:t.value,value:i.data}):(q(n,{code:K.invalid_intersection_types}),Y)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([e,t])=>r(e,t)):r(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};Hu.create=(e,t,n)=>new Hu({left:e,right:t,typeName:$.ZodIntersection,...Z(n)});var Uu=class e extends Q{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==G.array)return q(n,{code:K.invalid_type,expected:G.array,received:n.parsedType}),Y;if(n.data.lengththis._def.items.length&&(q(n,{code:K.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),t.dirty());let r=[...n.data].map((e,t)=>{let r=this._def.items[t]||this._def.rest;return r?r._parse(new Xl(n,e,n.path,t)):null}).filter(e=>!!e);return n.common.async?Promise.all(r).then(e=>J.mergeArray(t,e)):J.mergeArray(t,r)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};Uu.create=(e,t)=>{if(!Array.isArray(e))throw Error(`You must pass an array of schemas to z.tuple([ ... ])`);return new Uu({items:e,typeName:$.ZodTuple,rest:null,...Z(t)})};var Wu=class e extends Q{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==G.object)return q(n,{code:K.invalid_type,expected:G.object,received:n.parsedType}),Y;let r=[],i=this._def.keyType,a=this._def.valueType;for(let e in n.data)r.push({key:i._parse(new Xl(n,e,n.path,e)),value:a._parse(new Xl(n,n.data[e],n.path,e)),alwaysSet:e in n.data});return n.common.async?J.mergeObjectAsync(t,r):J.mergeObjectSync(t,r)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof Q?new e({keyType:t,valueType:n,typeName:$.ZodRecord,...Z(r)}):new e({keyType:Su.create(),valueType:t,typeName:$.ZodRecord,...Z(n)})}},Gu=class extends Q{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==G.map)return q(n,{code:K.invalid_type,expected:G.map,received:n.parsedType}),Y;let r=this._def.keyType,i=this._def.valueType,a=[...n.data.entries()].map(([e,t],a)=>({key:r._parse(new Xl(n,e,n.path,[a,`key`])),value:i._parse(new Xl(n,t,n.path,[a,`value`]))}));if(n.common.async){let e=new Map;return Promise.resolve().then(async()=>{for(let n of a){let r=await n.key,i=await n.value;if(r.status===`aborted`||i.status===`aborted`)return Y;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}})}else{let e=new Map;for(let n of a){let r=n.key,i=n.value;if(r.status===`aborted`||i.status===`aborted`)return Y;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}}}};Gu.create=(e,t,n)=>new Gu({valueType:t,keyType:e,typeName:$.ZodMap,...Z(n)});var Ku=class e extends Q{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==G.set)return q(n,{code:K.invalid_type,expected:G.set,received:n.parsedType}),Y;let r=this._def;r.minSize!==null&&n.data.sizer.maxSize.value&&(q(n,{code:K.too_big,maximum:r.maxSize.value,type:`set`,inclusive:!0,exact:!1,message:r.maxSize.message}),t.dirty());let i=this._def.valueType;function a(e){let n=new Set;for(let r of e){if(r.status===`aborted`)return Y;r.status===`dirty`&&t.dirty(),n.add(r.value)}return{status:t.value,value:n}}let o=[...n.data.values()].map((e,t)=>i._parse(new Xl(n,e,n.path,t)));return n.common.async?Promise.all(o).then(e=>a(e)):a(o)}min(t,n){return new e({...this._def,minSize:{value:t,message:X.toString(n)}})}max(t,n){return new e({...this._def,maxSize:{value:t,message:X.toString(n)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};Ku.create=(e,t)=>new Ku({valueType:e,minSize:null,maxSize:null,typeName:$.ZodSet,...Z(t)});var qu=class e extends Q{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==G.function)return q(t,{code:K.invalid_type,expected:G.function,received:t.parsedType}),Y;function n(e,n){return Ul({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Hl(),Bl].filter(e=>!!e),issueData:{code:K.invalid_arguments,argumentsError:n}})}function r(e,n){return Ul({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Hl(),Bl].filter(e=>!!e),issueData:{code:K.invalid_return_type,returnTypeError:n}})}let i={errorMap:t.common.contextualErrorMap},a=t.data;if(this._def.returns instanceof $u){let e=this;return Gl(async function(...t){let o=new zl([]),s=await e._def.args.parseAsync(t,i).catch(e=>{throw o.addIssue(n(t,e)),o}),c=await Reflect.apply(a,this,s);return await e._def.returns._def.type.parseAsync(c,i).catch(e=>{throw o.addIssue(r(c,e)),o})})}else{let e=this;return Gl(function(...t){let o=e._def.args.safeParse(t,i);if(!o.success)throw new zl([n(t,o.error)]);let s=Reflect.apply(a,this,o.data),c=e._def.returns.safeParse(s,i);if(!c.success)throw new zl([r(s,c.error)]);return c.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:Uu.create(t).rest(Mu.create())})}returns(t){return new e({...this._def,returns:t})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(t,n,r){return new e({args:t||Uu.create([]).rest(Mu.create()),returns:n||Mu.create(),typeName:$.ZodFunction,...Z(r)})}},Ju=class extends Q{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};Ju.create=(e,t)=>new Ju({getter:e,typeName:$.ZodLazy,...Z(t)});var Yu=class extends Q{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return q(t,{received:t.data,code:K.invalid_literal,expected:this._def.value}),Y}return{status:`valid`,value:e.data}}get value(){return this._def.value}};Yu.create=(e,t)=>new Yu({value:e,typeName:$.ZodLiteral,...Z(t)});function Xu(e,t){return new Zu({values:e,typeName:$.ZodEnum,...Z(t)})}var Zu=class e extends Q{_parse(e){if(typeof e.data!=`string`){let t=this._getOrReturnCtx(e),n=this._def.values;return q(t,{expected:W.joinValues(n),received:t.parsedType,code:K.invalid_type}),Y}if(this._cache||=new Set(this._def.values),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return q(t,{received:t.data,code:K.invalid_enum_value,options:n}),Y}return Gl(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(t,n=this._def){return e.create(t,{...this._def,...n})}exclude(t,n=this._def){return e.create(this.options.filter(e=>!t.includes(e)),{...this._def,...n})}};Zu.create=Xu;var Qu=class extends Q{_parse(e){let t=W.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==G.string&&n.parsedType!==G.number){let e=W.objectValues(t);return q(n,{expected:W.joinValues(e),received:n.parsedType,code:K.invalid_type}),Y}if(this._cache||=new Set(W.getValidEnumValues(this._def.values)),!this._cache.has(e.data)){let e=W.objectValues(t);return q(n,{received:n.data,code:K.invalid_enum_value,options:e}),Y}return Gl(e.data)}get enum(){return this._def.values}};Qu.create=(e,t)=>new Qu({values:e,typeName:$.ZodNativeEnum,...Z(t)});var $u=class extends Q{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);return t.parsedType!==G.promise&&t.common.async===!1?(q(t,{code:K.invalid_type,expected:G.promise,received:t.parsedType}),Y):Gl((t.parsedType===G.promise?t.data:Promise.resolve(t.data)).then(e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap})))}};$u.create=(e,t)=>new $u({type:e,typeName:$.ZodPromise,...Z(t)});var ed=class extends Q{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===$.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),r=this._def.effect||null,i={addIssue:e=>{q(n,e),e.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),r.type===`preprocess`){let e=r.transform(n.data,i);if(n.common.async)return Promise.resolve(e).then(async e=>{if(t.value===`aborted`)return Y;let r=await this._def.schema._parseAsync({data:e,path:n.path,parent:n});return r.status===`aborted`?Y:r.status===`dirty`||t.value===`dirty`?Wl(r.value):r});{if(t.value===`aborted`)return Y;let r=this._def.schema._parseSync({data:e,path:n.path,parent:n});return r.status===`aborted`?Y:r.status===`dirty`||t.value===`dirty`?Wl(r.value):r}}if(r.type===`refinement`){let e=e=>{let t=r.refinement(e,i);if(n.common.async)return Promise.resolve(t);if(t instanceof Promise)throw Error(`Async refinement encountered during synchronous parse operation. Use .parseAsync instead.`);return e};if(n.common.async===!1){let r=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return r.status===`aborted`?Y:(r.status===`dirty`&&t.dirty(),e(r.value),{status:t.value,value:r.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(n=>n.status===`aborted`?Y:(n.status===`dirty`&&t.dirty(),e(n.value).then(()=>({status:t.value,value:n.value}))))}if(r.type===`transform`)if(n.common.async===!1){let e=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!Jl(e))return Y;let a=r.transform(e.value,i);if(a instanceof Promise)throw Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(e=>Jl(e)?Promise.resolve(r.transform(e.value,i)).then(e=>({status:t.value,value:e})):Y);W.assertNever(r)}};ed.create=(e,t,n)=>new ed({schema:e,typeName:$.ZodEffects,effect:t,...Z(n)}),ed.createWithPreprocess=(e,t,n)=>new ed({schema:t,effect:{type:`preprocess`,transform:e},typeName:$.ZodEffects,...Z(n)});var td=class extends Q{_parse(e){return this._getType(e)===G.undefined?Gl(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};td.create=(e,t)=>new td({innerType:e,typeName:$.ZodOptional,...Z(t)});var nd=class extends Q{_parse(e){return this._getType(e)===G.null?Gl(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};nd.create=(e,t)=>new nd({innerType:e,typeName:$.ZodNullable,...Z(t)});var rd=class extends Q{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===G.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};rd.create=(e,t)=>new rd({innerType:e,typeName:$.ZodDefault,defaultValue:typeof t.default==`function`?t.default:()=>t.default,...Z(t)});var id=class extends Q{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},r=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return Yl(r)?r.then(e=>({status:`valid`,value:e.status===`valid`?e.value:this._def.catchValue({get error(){return new zl(n.common.issues)},input:n.data})})):{status:`valid`,value:r.status===`valid`?r.value:this._def.catchValue({get error(){return new zl(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};id.create=(e,t)=>new id({innerType:e,typeName:$.ZodCatch,catchValue:typeof t.catch==`function`?t.catch:()=>t.catch,...Z(t)});var ad=class extends Q{_parse(e){if(this._getType(e)!==G.nan){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.nan,received:t.parsedType}),Y}return{status:`valid`,value:e.data}}};ad.create=e=>new ad({typeName:$.ZodNaN,...Z(e)});var od=class extends Q{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}},sd=class e extends Q{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let e=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?Y:e.status===`dirty`?(t.dirty(),Wl(e.value)):this._def.out._parseAsync({data:e.value,path:n.path,parent:n})})();{let e=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?Y:e.status===`dirty`?(t.dirty(),{status:`dirty`,value:e.value}):this._def.out._parseSync({data:e.value,path:n.path,parent:n})}}static create(t,n){return new e({in:t,out:n,typeName:$.ZodPipeline})}},cd=class extends Q{_parse(e){let t=this._def.innerType._parse(e),n=e=>(Jl(e)&&(e.value=Object.freeze(e.value)),e);return Yl(t)?t.then(e=>n(e)):n(t)}unwrap(){return this._def.innerType}};cd.create=(e,t)=>new cd({innerType:e,typeName:$.ZodReadonly,...Z(t)}),Lu.lazycreate;var $;(function(e){e.ZodString=`ZodString`,e.ZodNumber=`ZodNumber`,e.ZodNaN=`ZodNaN`,e.ZodBigInt=`ZodBigInt`,e.ZodBoolean=`ZodBoolean`,e.ZodDate=`ZodDate`,e.ZodSymbol=`ZodSymbol`,e.ZodUndefined=`ZodUndefined`,e.ZodNull=`ZodNull`,e.ZodAny=`ZodAny`,e.ZodUnknown=`ZodUnknown`,e.ZodNever=`ZodNever`,e.ZodVoid=`ZodVoid`,e.ZodArray=`ZodArray`,e.ZodObject=`ZodObject`,e.ZodUnion=`ZodUnion`,e.ZodDiscriminatedUnion=`ZodDiscriminatedUnion`,e.ZodIntersection=`ZodIntersection`,e.ZodTuple=`ZodTuple`,e.ZodRecord=`ZodRecord`,e.ZodMap=`ZodMap`,e.ZodSet=`ZodSet`,e.ZodFunction=`ZodFunction`,e.ZodLazy=`ZodLazy`,e.ZodLiteral=`ZodLiteral`,e.ZodEnum=`ZodEnum`,e.ZodEffects=`ZodEffects`,e.ZodNativeEnum=`ZodNativeEnum`,e.ZodOptional=`ZodOptional`,e.ZodNullable=`ZodNullable`,e.ZodDefault=`ZodDefault`,e.ZodCatch=`ZodCatch`,e.ZodPromise=`ZodPromise`,e.ZodBranded=`ZodBranded`,e.ZodPipeline=`ZodPipeline`,e.ZodReadonly=`ZodReadonly`})($||={});var ld=Su.create;wu.create,ad.create,Tu.create,Eu.create,Du.create,Ou.create,ku.create,Au.create,ju.create,Mu.create,Nu.create,Pu.create,Fu.create;var ud=Lu.create;Lu.strictCreate,Ru.create,Bu.create,Hu.create,Uu.create,Wu.create,Gu.create,Ku.create,qu.create,Ju.create,Yu.create;var dd=Zu.create;Qu.create,$u.create,ed.create,td.create,nd.create,ed.createWithPreprocess,sd.create;var fd=ud({email:ld().email(`올바른 이메일 형식이 아닙니다.`),password:ld().min(1,`비밀번호를 입력해주세요.`)}),pd=[{t:`실시간 화자 분리`,d:`아동 · 치료사 · 미상 자동 식별`},{t:`언어 지표 자동 산출`,d:`MLU · TTR · 어휘 다양도`},{t:`SOAP Note 초안 생성`,d:`치료사 톤으로 맞춤 작성`}];function md(){return(0,j.jsxs)(`svg`,{className:`absolute inset-0 w-full h-full pointer-events-none`,viewBox:`0 0 800 900`,preserveAspectRatio:`xMidYMid slice`,children:[(0,j.jsxs)(`defs`,{children:[(0,j.jsxs)(`radialGradient`,{id:`blob-a`,cx:`35%`,cy:`30%`,r:`60%`,children:[(0,j.jsx)(`stop`,{offset:`0%`,stopColor:`#4D8A6F`,stopOpacity:`0.55`}),(0,j.jsx)(`stop`,{offset:`100%`,stopColor:`#1A3C34`,stopOpacity:`0`})]}),(0,j.jsxs)(`radialGradient`,{id:`blob-b`,cx:`75%`,cy:`75%`,r:`50%`,children:[(0,j.jsx)(`stop`,{offset:`0%`,stopColor:`#7FB196`,stopOpacity:`0.42`}),(0,j.jsx)(`stop`,{offset:`100%`,stopColor:`#1A3C34`,stopOpacity:`0`})]})]}),(0,j.jsx)(`ellipse`,{cx:`180`,cy:`280`,rx:`380`,ry:`260`,fill:`url(#blob-a)`}),(0,j.jsx)(`ellipse`,{cx:`640`,cy:`700`,rx:`320`,ry:`240`,fill:`url(#blob-b)`}),(0,j.jsx)(`path`,{d:`M -20 540 Q 200 480 400 540 T 820 540`,stroke:`rgba(183,222,200,0.22)`,strokeWidth:`1.4`,fill:`none`}),(0,j.jsx)(`path`,{d:`M -20 580 Q 200 530 400 580 T 820 580`,stroke:`rgba(183,222,200,0.14)`,strokeWidth:`1.2`,fill:`none`}),(0,j.jsx)(`g`,{transform:`translate(220, 380)`,opacity:`0.6`,children:[12,22,38,52,70,86,70,52,38,22,12].map((e,t)=>(0,j.jsx)(`rect`,{x:t*18,y:50-e/2,width:`6`,height:e,rx:`3`,fill:`#B7DEC8`,opacity:.35+t%5*.08},t))})]})}function hd(){let[e,t]=(0,_.useState)(!1),n=ec(),{register:r,handleSubmit:i,formState:{errors:a}}=Al({resolver:Il(fd)});return(0,j.jsxs)(`div`,{className:`flex min-h-screen bg-brand-25 font-sans`,children:[(0,j.jsxs)(`div`,{className:`hidden md:flex flex-[0_0_60%] relative flex-col justify-between p-12 overflow-hidden`,style:{background:`linear-gradient(135deg,#0F2A24 0%,#1A3C34 45%,#245249 100%)`},children:[(0,j.jsx)(md,{}),(0,j.jsxs)(`div`,{className:`relative z-10 flex items-center gap-2.5`,children:[(0,j.jsx)(`div`,{className:`w-7 h-7 rounded-lg bg-white/10 flex items-center justify-center`,children:(0,j.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 64 64`,fill:`none`,children:[(0,j.jsx)(`rect`,{x:`6`,y:`26`,width:`6`,height:`12`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`16`,y:`18`,width:`6`,height:`28`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`26`,y:`10`,width:`6`,height:`44`,rx:`3`,fill:`#fff`}),(0,j.jsx)(`rect`,{x:`36`,y:`16`,width:`6`,height:`32`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`46`,y:`24`,width:`6`,height:`16`,rx:`3`,fill:`#B7DEC8`})]})}),(0,j.jsx)(`span`,{className:`text-sm font-bold text-white tracking-tight`,children:`UtterAI`})]}),(0,j.jsxs)(`div`,{className:`relative z-10 max-w-[460px]`,children:[(0,j.jsxs)(`div`,{className:`inline-flex items-center gap-1.5 px-3 py-1 rounded-full bg-brand-200/12 border border-brand-200/20 text-brand-200 text-[11px] font-semibold mb-4`,children:[(0,j.jsx)(`span`,{className:`w-1 h-1 rounded-full bg-brand-200`}),`아동 언어치료 AI 분석 플랫폼`]}),(0,j.jsxs)(`h2`,{className:`text-4xl font-bold text-white tracking-tight leading-tight`,children:[`매 세션의 작은 발화까지`,(0,j.jsx)(`br`,{}),(0,j.jsx)(`span`,{className:`text-brand-200`,children:`꼼꼼히 듣고 기록합니다.`})]}),(0,j.jsxs)(`p`,{className:`mt-4 text-sm text-brand-100/80 leading-relaxed`,children:[`UtterAI는 치료사가 더 깊이 듣고, 보호자가 더 잘 이해할 수 있도록`,(0,j.jsx)(`br`,{}),`음성 분석 · 전사 · 언어 지표 · 리포트를 자동으로 정리해드립니다.`]}),(0,j.jsx)(`div`,{className:`mt-7 flex flex-col gap-3`,children:pd.map(e=>(0,j.jsxs)(`div`,{className:`flex gap-3 items-start`,children:[(0,j.jsx)(`div`,{className:`w-5.5 h-5.5 rounded-full bg-brand-200/16 flex items-center justify-center text-brand-200 flex-shrink-0 mt-0.5`,children:(0,j.jsx)(I,{name:`check`,size:11,strokeWidth:3})}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[13px] font-semibold text-white`,children:e.t}),(0,j.jsx)(`p`,{className:`text-[11px] text-brand-100/65 mt-0.5`,children:e.d})]})]},e.t))})]}),(0,j.jsxs)(`div`,{className:`relative z-10 flex items-center justify-between text-[11px] text-brand-200/55`,children:[(0,j.jsx)(`span`,{children:`© 2026 UtterAI · All rights reserved`}),(0,j.jsxs)(`div`,{className:`flex gap-4`,children:[(0,j.jsx)(`button`,{className:`hover:text-brand-200 transition-colors`,children:`이용약관`}),(0,j.jsx)(`button`,{className:`hover:text-brand-200 transition-colors`,children:`개인정보처리방침`})]})]})]}),(0,j.jsx)(`div`,{className:`flex-1 flex items-center justify-center p-8 bg-brand-25`,children:(0,j.jsxs)(`div`,{className:`w-full max-w-[420px] bg-white rounded-2xl shadow-xl p-10 flex flex-col`,children:[(0,j.jsx)(`div`,{className:`w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-3`,style:{background:`linear-gradient(135deg,#1A3C34 0%,#2D6A4F 60%,#4D8A6F 100%)`},children:(0,j.jsxs)(`svg`,{width:`32`,height:`32`,viewBox:`0 0 32 32`,fill:`none`,children:[(0,j.jsx)(`path`,{d:`M6 9 a4 4 0 0 1 4-4 h12 a4 4 0 0 1 4 4 v8 a4 4 0 0 1 -4 4 h-8 l-5 4 v-4 h-3 a-2 -2 0 0 1 -2 -2 z`,stroke:`#B7DEC8`,strokeWidth:`1.8`,strokeLinejoin:`round`,fill:`none`}),(0,j.jsx)(`rect`,{x:`11`,y:`11`,width:`2`,height:`4`,rx:`1`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`14`,y:`9`,width:`2`,height:`8`,rx:`1`,fill:`#D8ECDF`}),(0,j.jsx)(`rect`,{x:`17`,y:`7`,width:`2`,height:`12`,rx:`1`,fill:`#fff`}),(0,j.jsx)(`rect`,{x:`20`,y:`10`,width:`2`,height:`6`,rx:`1`,fill:`#D8ECDF`})]})}),(0,j.jsx)(`p`,{className:`text-[11px] font-bold tracking-[0.18em] text-brand-500 uppercase text-center mb-5`,children:`UTTER AI`}),(0,j.jsxs)(`h1`,{className:`text-2xl font-bold text-brand-900 tracking-tight leading-snug text-center`,children:[`당신의 언어 성장을`,(0,j.jsx)(`br`,{}),`더 따뜻하게 기록하다`]}),(0,j.jsxs)(`p`,{className:`text-[12.5px] text-ink-500 text-center mt-2.5 leading-relaxed`,children:[`치료 기록, 음성 분석, 발화 데이터를`,(0,j.jsx)(`br`,{}),`한 곳에서 안전하게 관리하세요.`]}),(0,j.jsxs)(`form`,{onSubmit:i(e=>n.mutate(e)),className:`mt-7 flex flex-col gap-2.5`,children:[(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsx)(`span`,{className:`absolute left-3.5 top-1/2 -translate-y-1/2 text-ink-400 pointer-events-none`,children:(0,j.jsx)(I,{name:`mail`,size:16,strokeWidth:1.8})}),(0,j.jsx)(`input`,{...r(`email`),type:`email`,autoComplete:`email`,placeholder:`이메일 주소`,className:P(`w-full h-[46px] pl-10 pr-4 rounded-[10px] text-[13.5px] outline-none transition-all`,`bg-brand-25 border font-sans`,a.email?`border-red-400 focus:ring-2 focus:ring-red-200`:`border-ink-200 focus:border-brand-500 focus:ring-2 focus:ring-brand-500/16`)}),a.email&&(0,j.jsxs)(`p`,{className:`mt-1.5 pl-1 text-[11.5px] text-red-700 font-medium flex items-center gap-1`,children:[(0,j.jsx)(I,{name:`alert`,size:11,strokeWidth:2.5}),a.email.message]})]}),(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsx)(`span`,{className:`absolute left-3.5 top-[23px] -translate-y-1/2 text-ink-400 pointer-events-none`,children:(0,j.jsx)(I,{name:`lock`,size:16,strokeWidth:1.8})}),(0,j.jsx)(`input`,{...r(`password`),type:e?`text`:`password`,autoComplete:`current-password`,placeholder:`비밀번호`,className:P(`w-full h-[46px] pl-10 pr-10 rounded-[10px] text-[13.5px] outline-none transition-all`,`bg-brand-25 border font-sans`,a.password?`border-red-400 focus:ring-2 focus:ring-red-200`:`border-ink-200 focus:border-brand-500 focus:ring-2 focus:ring-brand-500/16`)}),(0,j.jsx)(`button`,{type:`button`,onClick:()=>t(e=>!e),className:`absolute right-3 top-[23px] -translate-y-1/2 text-ink-400 hover:text-ink-600 p-1`,children:(0,j.jsx)(I,{name:e?`eyeOff`:`eye`,size:16,strokeWidth:1.8})}),a.password&&(0,j.jsxs)(`p`,{className:`mt-1.5 pl-1 text-[11.5px] text-red-700 font-medium flex items-center gap-1`,children:[(0,j.jsx)(I,{name:`alert`,size:11,strokeWidth:2.5}),a.password.message]})]}),(0,j.jsx)(`button`,{type:`submit`,disabled:n.isPending,className:P(`mt-4 w-full h-12 rounded-full text-white text-[14px] font-semibold`,`flex items-center justify-center gap-2 transition-colors`,`shadow-[0_8px_16px_-4px_rgba(26,60,52,0.25)]`,n.isPending?`bg-brand-600 cursor-wait`:`bg-brand-700 hover:bg-brand-900`),children:n.isPending?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`#fff`,strokeWidth:`2.4`,style:{animation:`spin 0.8s linear infinite`},children:[(0,j.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`,strokeOpacity:`0.25`}),(0,j.jsx)(`path`,{d:`M21 12 a9 9 0 0 0 -9 -9`,strokeLinecap:`round`})]}),`로그인 중…`]}):(0,j.jsxs)(j.Fragment,{children:[`안전하게 로그인 `,(0,j.jsx)(I,{name:`chevronRight`,size:15,strokeWidth:2.4})]})})]}),(0,j.jsxs)(`div`,{className:`mt-5 flex items-center justify-between text-[12px] flex-wrap gap-2`,children:[(0,j.jsx)(`button`,{className:`text-ink-500 hover:text-brand-700 font-medium transition-colors`,children:`비밀번호를 잊으셨나요?`}),(0,j.jsxs)(`span`,{className:`text-ink-500 whitespace-nowrap`,children:[`처음 방문하셨나요?`,` `,(0,j.jsx)(Bt,{to:`/signup`,className:`text-brand-700 font-semibold hover:text-brand-900`,children:`회원 가입`})]})]})]})})]})}var gd=ud({name:ld().min(1,`이름을 입력해주세요.`),email:ld().email(`올바른 이메일 형식을 입력해주세요.`),password:ld().min(8,`비밀번호는 8자 이상이어야 합니다.`),confirm:ld().min(1,`비밀번호를 한 번 더 입력해주세요.`),role:dd([`SLP`,`ADMIN`])}).refine(e=>e.password===e.confirm,{message:`비밀번호가 일치하지 않습니다.`,path:[`confirm`]}),_d=[{value:`SLP`,name:`치료사 (SLP)`,desc:`세션 녹음·분석·리포트 작성`,icon:`user`},{value:`ADMIN`,name:`관리자`,desc:`기관·사용자 관리`,icon:`shield`}];function vd(e){if(!e)return 0;let t=0;return e.length>=8&&t++,/[A-Z]/.test(e)&&/[a-z]/.test(e)&&t++,/\d/.test(e)&&/[^A-Za-z0-9]/.test(e)&&t++,t}function yd(){let[e,t]=(0,_.useState)(!1),n=tc(),{register:r,handleSubmit:i,watch:a,setValue:o,formState:{errors:s}}=Al({resolver:Il(gd),defaultValues:{role:`SLP`}}),c=a(`password`)??``,l=a(`role`),u=vd(c),d=[``,`약함`,`보통`,`강함`][u],f=[`#E2E6E4`,`#EF4444`,`#F59E0B`,`#15803D`][u],p=({confirm:e,...t})=>n.mutate(t),m=e=>P(`w-full h-[46px] pl-10 pr-4 rounded-[10px] text-[13.5px] outline-none transition-all bg-brand-25 border font-sans`,e?`border-red-400 focus:ring-2 focus:ring-red-200`:`border-ink-200 focus:border-brand-500 focus:ring-2 focus:ring-brand-500/16`);return(0,j.jsxs)(`div`,{className:`flex min-h-screen bg-brand-25 font-sans`,children:[(0,j.jsxs)(`div`,{className:`hidden md:flex flex-[0_0_60%] relative flex-col justify-between p-12 overflow-hidden`,style:{background:`linear-gradient(135deg,#0F2A24 0%,#1A3C34 45%,#245249 100%)`},children:[(0,j.jsxs)(`div`,{className:`relative z-10 flex items-center gap-2.5`,children:[(0,j.jsx)(`div`,{className:`w-7 h-7 rounded-lg bg-white/10 flex items-center justify-center`,children:(0,j.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 64 64`,fill:`none`,children:[(0,j.jsx)(`rect`,{x:`6`,y:`26`,width:`6`,height:`12`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`16`,y:`18`,width:`6`,height:`28`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`26`,y:`10`,width:`6`,height:`44`,rx:`3`,fill:`#fff`}),(0,j.jsx)(`rect`,{x:`36`,y:`16`,width:`6`,height:`32`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`46`,y:`24`,width:`6`,height:`16`,rx:`3`,fill:`#B7DEC8`})]})}),(0,j.jsx)(`span`,{className:`text-sm font-bold text-white tracking-tight`,children:`UtterAI`})]}),(0,j.jsxs)(`div`,{className:`relative z-10 max-w-[460px]`,children:[(0,j.jsxs)(`div`,{className:`inline-flex items-center gap-1.5 px-3 py-1 rounded-full bg-brand-200/12 border border-brand-200/20 text-brand-200 text-[11px] font-semibold mb-4`,children:[(0,j.jsx)(`span`,{className:`w-1 h-1 rounded-full bg-brand-200`}),`지금 합류하세요`]}),(0,j.jsxs)(`h2`,{className:`text-4xl font-bold text-white tracking-tight leading-tight`,children:[`치료 기록을 위한`,(0,j.jsx)(`br`,{}),(0,j.jsx)(`span`,{className:`text-brand-200`,children:`가장 따뜻한 도구.`})]}),(0,j.jsxs)(`p`,{className:`mt-4 text-sm text-brand-100/80 leading-relaxed`,children:[`전국 200여 개 발달센터의 언어치료사가 UtterAI로 세션을 기록하고`,(0,j.jsx)(`br`,{}),`보호자에게 더 명확한 리포트를 전달하고 있어요.`]}),(0,j.jsx)(`div`,{className:`mt-7 flex flex-col gap-3`,children:[{t:`14일 무료 체험`,d:`카드 등록 없이 모든 기능 사용`},{t:`의료급여법 준수`,d:`국내 서버 · 암호화 보관`},{t:`언제든 해지 가능`,d:`데이터는 30일간 보관 후 자동 삭제`}].map(e=>(0,j.jsxs)(`div`,{className:`flex gap-3 items-start`,children:[(0,j.jsx)(`div`,{className:`w-5 h-5 rounded-full bg-brand-200/16 flex items-center justify-center text-brand-200 flex-shrink-0 mt-0.5`,children:(0,j.jsx)(I,{name:`check`,size:11,strokeWidth:3})}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[13px] font-semibold text-white`,children:e.t}),(0,j.jsx)(`p`,{className:`text-[11px] text-brand-100/65 mt-0.5`,children:e.d})]})]},e.t))})]}),(0,j.jsx)(`p`,{className:`relative z-10 text-[11px] text-brand-200/55`,children:`© 2026 UtterAI · All rights reserved`})]}),(0,j.jsx)(`div`,{className:`flex-1 flex items-center justify-center p-8`,children:(0,j.jsxs)(`div`,{className:`w-full max-w-[440px] bg-white rounded-2xl shadow-xl px-9 py-9 overflow-y-auto max-h-[calc(100vh-64px)]`,children:[(0,j.jsx)(`p`,{className:`text-[11px] font-bold tracking-[0.18em] text-brand-500 uppercase text-center mb-5`,children:`UTTER AI`}),(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-brand-900 tracking-tight text-center`,children:`계정을 만들어보세요`}),(0,j.jsxs)(`p`,{className:`text-[12.5px] text-ink-500 text-center mt-2.5 leading-relaxed`,children:[`UtterAI와 함께 더 체계적인`,(0,j.jsx)(`br`,{}),`언어 치료를 시작하세요.`]}),(0,j.jsxs)(`form`,{onSubmit:i(p),className:`mt-6 flex flex-col gap-2.5`,children:[(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsx)(`span`,{className:`absolute left-3.5 top-1/2 -translate-y-1/2 text-ink-400 pointer-events-none`,children:(0,j.jsx)(I,{name:`user`,size:16,strokeWidth:1.8})}),(0,j.jsx)(`input`,{...r(`name`),placeholder:`홍길동`,autoComplete:`name`,className:m(!!s.name)}),s.name&&(0,j.jsx)(`p`,{className:`mt-1 pl-1 text-[11px] text-red-700`,children:s.name.message})]}),(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsx)(`span`,{className:`absolute left-3.5 top-1/2 -translate-y-1/2 text-ink-400 pointer-events-none`,children:(0,j.jsx)(I,{name:`mail`,size:16,strokeWidth:1.8})}),(0,j.jsx)(`input`,{...r(`email`),type:`email`,placeholder:`example@email.com`,autoComplete:`email`,className:m(!!s.email)}),s.email&&(0,j.jsx)(`p`,{className:`mt-1 pl-1 text-[11px] text-red-700`,children:s.email.message})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsx)(`span`,{className:`absolute left-3.5 top-1/2 -translate-y-1/2 text-ink-400 pointer-events-none`,children:(0,j.jsx)(I,{name:`lock`,size:16,strokeWidth:1.8})}),(0,j.jsx)(`input`,{...r(`password`),type:e?`text`:`password`,placeholder:`비밀번호 (8자 이상)`,autoComplete:`new-password`,className:P(m(!!s.password),`pr-10`)}),(0,j.jsx)(`button`,{type:`button`,onClick:()=>t(e=>!e),className:`absolute right-3 top-1/2 -translate-y-1/2 text-ink-400`,children:(0,j.jsx)(I,{name:e?`eyeOff`:`eye`,size:16,strokeWidth:1.8})})]}),c&&!s.password&&(0,j.jsxs)(`div`,{className:`mt-1.5 pl-1`,children:[(0,j.jsx)(`div`,{className:`flex gap-1`,children:[0,1,2].map(e=>(0,j.jsx)(`div`,{className:`flex-1 h-[3px] rounded-full transition-colors`,style:{background:e(0,j.jsxs)(`button`,{type:`button`,onClick:()=>o(`role`,e.value),className:P(`flex-1 flex items-center gap-2.5 p-3 rounded-[10px] border transition-all text-left`,l===e.value?`border-brand-700 bg-brand-50 shadow-[0_0_0_3px_rgba(45,106,79,0.14)]`:`border-ink-200 bg-brand-25`),children:[(0,j.jsx)(`div`,{className:P(`w-7.5 h-7.5 rounded-lg flex items-center justify-center flex-shrink-0 border`,l===e.value?`bg-brand-700 border-transparent text-brand-200`:`bg-white border-ink-200 text-ink-500`),children:(0,j.jsx)(I,{name:e.icon,size:14,strokeWidth:2})}),(0,j.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,j.jsx)(`p`,{className:P(`text-[13px]`,l===e.value?`font-semibold text-brand-700`:`font-medium text-ink-800`),children:e.name}),(0,j.jsx)(`p`,{className:P(`text-[10.5px]`,l===e.value?`text-brand-600`:`text-ink-500`),children:e.desc})]}),(0,j.jsx)(`span`,{className:P(`w-3.5 h-3.5 rounded-full flex-shrink-0 border bg-white transition-all`,l===e.value?`border-[4px] border-brand-700`:`border-ink-300`)})]},e.value))}),(0,j.jsxs)(`p`,{className:`mt-2 pl-1 text-[10.5px] text-ink-400 flex items-center gap-1`,children:[(0,j.jsx)(I,{name:`info`,size:11,strokeWidth:2}),`역할은 가입 후 변경할 수 없습니다.`]})]}),(0,j.jsx)(`button`,{type:`submit`,disabled:n.isPending,className:P(`mt-4 w-full h-12 rounded-full text-white text-[14px] font-semibold flex items-center justify-center gap-2 transition-colors shadow-[0_8px_16px_-4px_rgba(26,60,52,0.25)]`,n.isPending?`bg-brand-600 cursor-wait`:`bg-brand-700 hover:bg-brand-900`),children:n.isPending?`가입 중…`:(0,j.jsxs)(j.Fragment,{children:[`회원가입 `,(0,j.jsx)(I,{name:`chevronRight`,size:15,strokeWidth:2.4})]})})]}),(0,j.jsxs)(`p`,{className:`mt-5 text-center text-[12px] text-ink-500`,children:[`이미 계정이 있으신가요?`,` `,(0,j.jsx)(Bt,{to:`/login`,className:`text-brand-700 font-semibold hover:text-brand-900`,children:`로그인`})]})]})})]})}var bd={list:e=>V.get(`/sessions`,{params:e}),get:e=>V.get(`/sessions/${e}`),create:e=>V.post(`/sessions`,e),update:(e,t)=>V.patch(`/sessions/${e}`,t),delete:e=>V.delete(`/sessions/${e}`)},xd={list:()=>V.get(`/patients`),get:e=>V.get(`/patients/${e}`),getByRef:e=>V.get(`/patients/by-ref/${e}`),create:e=>V.post(`/patients`,e),update:(e,t)=>V.patch(`/patients/${e}`,t),delete:e=>V.delete(`/patients/${e}`)},Sd={CREATED:{label:`생성됨`,className:`bg-ink-100 text-ink-600`},AUDIO_UPLOADING:{label:`업로드 중`,className:`bg-sky-100 text-sky-700`},AUDIO_UPLOADED:{label:`음성 업로드`,className:`bg-blue-100 text-blue-700`},ANALYSIS_REQUESTED:{label:`분석 요청`,className:`bg-violet-100 text-violet-700`},ANALYSIS_PROCESSING:{label:`분석 중`,className:`bg-amber-100 text-amber-700`},ANALYSIS_COMPLETED:{label:`분석 완료`,className:`bg-brand-100 text-brand-700`},REPORT_GENERATING:{label:`리포트 생성 중`,className:`bg-amber-100 text-amber-700`},REPORT_READY:{label:`리포트 완료`,className:`bg-green-100 text-green-700`},FAILED:{label:`실패`,className:`bg-red-100 text-red-700`},DELETED:{label:`삭제됨`,className:`bg-ink-100 text-ink-400`}};function Cd({status:e,className:t}){let{label:n,className:r}=Sd[e]??Sd.CREATED;return(0,j.jsx)(`span`,{className:P(`inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-semibold`,r,t),children:n})}var wd=()=>$s();function Td({label:e,value:t,delta:n,tone:r}){return(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm p-5 flex flex-col gap-2`,children:[(0,j.jsx)(`p`,{className:`text-[12px] font-semibold text-ink-500 uppercase tracking-wide`,children:e}),(0,j.jsx)(`p`,{className:`text-3xl font-bold text-ink-800 font-mono-num`,children:t}),(0,j.jsx)(`p`,{className:P(`text-[12px] font-medium`,r===`pos`?`text-brand-500`:`text-ink-400`),children:n})]})}function Ed(){let e=Je(),{showToast:t}=wd(),n=Ui(e=>e.user),[r,i]=(0,_.useState)([]),[a,o]=(0,_.useState)([]),[s,c]=(0,_.useState)({}),[l,u]=(0,_.useState)(!0);(0,_.useEffect)(()=>{Promise.all([bd.list(),xd.list()]).then(([e,t])=>{let n=Array.isArray(e.data)?e.data:[],r=Array.isArray(t.data)?t.data:[];i(n),o(r);let a={};r.forEach(e=>{a[e.patient_ref_id]=e}),c(a)}).catch(()=>t({title:`데이터를 불러오지 못했습니다`,kind:`error`})).finally(()=>u(!1))},[]);let d=new Date,f=r.filter(e=>{let t=new Date(e.created_at);return t.getFullYear()===d.getFullYear()&&t.getMonth()===d.getMonth()}),p=[`ANALYSIS_REQUESTED`,`ANALYSIS_PROCESSING`,`REPORT_GENERATING`],m=r.filter(e=>p.includes(e.status)).length,h=[...r].sort((e,t)=>t.created_at.localeCompare(e.created_at)).slice(0,5),g=[{id:`patients`,label:`담당 환자`,value:a.length,delta:`전체 ${a.length}명`,tone:`pos`},{id:`sessions`,label:`이번 달 세션`,value:f.length,delta:`이번 달 ${f.length}회`,tone:`pos`},{id:`queue`,label:`분석 진행 중`,value:m,delta:`현재 진행 중`,tone:`neutral`}];return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5 flex items-start justify-between`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:`대시보드`}),(0,j.jsxs)(`p`,{className:`text-[13px] text-ink-500 mt-1`,children:[`안녕하세요, `,n?.name??`선생님`,`. 오늘도 좋은 하루 되세요.`]})]}),(0,j.jsxs)(`button`,{onClick:()=>e(`/sessions/new`),className:`flex items-center gap-2 px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors shadow-md`,children:[(0,j.jsx)(I,{name:`plus`,size:15}),`새 세션`]})]}),(0,j.jsxs)(`div`,{className:`px-8 pb-8 flex flex-col gap-6`,children:[(0,j.jsx)(`div`,{className:`grid grid-cols-3 gap-4`,children:g.map(e=>(0,j.jsx)(Td,{...e},e.id))}),(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm overflow-hidden`,children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between px-5 py-4 border-b border-ink-100`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h2`,{className:`text-[15px] font-semibold text-ink-800`,children:`최근 세션`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-0.5`,children:`최근 5개 세션을 표시합니다`})]}),(0,j.jsxs)(`button`,{onClick:()=>e(`/sessions`),className:`text-[12px] text-brand-600 font-semibold hover:text-brand-800 flex items-center gap-1`,children:[`전체 보기 `,(0,j.jsx)(I,{name:`chevronRight`,size:13,strokeWidth:2.2})]})]}),l?(0,j.jsx)(`div`,{className:`py-10 text-center text-[13px] text-ink-400`,children:`불러오는 중…`}):h.length===0?(0,j.jsx)(`div`,{className:`py-10 text-center text-[13px] text-ink-400`,children:`세션이 없습니다.`}):(0,j.jsxs)(`table`,{className:`w-full text-[13px]`,children:[(0,j.jsx)(`thead`,{children:(0,j.jsxs)(`tr`,{className:`bg-ink-50 border-b border-ink-100`,children:[(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,children:`환자`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,children:`날짜`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,children:`유형`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,children:`상태`})]})}),(0,j.jsx)(`tbody`,{children:h.map(t=>{let n=s[t.patient_ref_id];return(0,j.jsxs)(`tr`,{onClick:()=>e(`/sessions/${t.id}`),className:`border-t border-ink-100 hover:bg-brand-25 cursor-pointer transition-colors`,children:[(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,j.jsx)(`div`,{className:`w-8 h-8 rounded-full bg-brand-100 text-brand-700 flex items-center justify-center text-[13px] font-bold`,children:n?n.name[0]:`?`}),(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:n?ei(n.name):`—`})]})}),(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-500`,children:Zr(t.session_date)}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(`span`,{className:`inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-semibold bg-ink-100 text-ink-600`,children:t.session_type??`—`})}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(Cd,{status:t.status})})]},t.id)})})]})]})]})]})}var Dd=ud({name:ld().min(1,`이름을 입력해주세요.`),birth_date:ld().optional(),gender:dd([`M`,`F`,`U`]).optional(),memo:ld().optional()});function Od({patient:e,onClose:t,onDone:n}){let r=!!e,{showToast:i}=wd(),{register:a,handleSubmit:o,formState:{errors:s,isSubmitting:c}}=Al({resolver:Il(Dd),defaultValues:{name:e?.name??``,birth_date:e?.birth_date??``,gender:e?.gender??`U`,memo:e?.memo??``}}),l=async a=>{try{let o={name:a.name,birth_date:a.birth_date||void 0,gender:a.gender===`U`?void 0:a.gender,memo:a.memo||void 0},{data:s}=r?await xd.update(e.id,o):await xd.create(o);i({title:r?`환자 정보가 수정되었습니다`:`환자가 등록되었습니다`,body:r?void 0:`${a.name} 환자가 추가되었어요.`,kind:`success`}),n(s),t()}catch{i({title:r?`수정에 실패했습니다`:`환자 등록에 실패했습니다`,kind:`error`})}},u=e=>P(`w-full h-10 px-3 rounded-lg text-[13px] outline-none transition-all border font-sans`,e?`border-red-400 bg-white`:`border-ink-300 bg-white focus:border-brand-500 focus:ring-2 focus:ring-brand-500/16`);return(0,j.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/40`,onClick:t,children:(0,j.jsxs)(`div`,{className:`bg-white rounded-2xl shadow-xl w-full max-w-[440px] mx-4`,onClick:e=>e.stopPropagation(),children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between px-6 pt-6 pb-4 border-b border-ink-100`,children:[(0,j.jsx)(`h2`,{className:`text-[16px] font-bold text-ink-800`,children:r?`환자 정보 수정`:`환자 등록`}),(0,j.jsx)(`button`,{onClick:t,className:`w-7 h-7 flex items-center justify-center rounded-lg text-ink-400 hover:bg-ink-100 transition-colors`,children:(0,j.jsx)(I,{name:`x`,size:16})})]}),(0,j.jsxs)(`form`,{onSubmit:o(l),className:`px-6 py-5 flex flex-col gap-4`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:[`이름 `,(0,j.jsx)(`span`,{className:`text-red-500`,children:`*`})]}),(0,j.jsx)(`input`,{...a(`name`),placeholder:`환자 이름을 입력하세요`,className:u(!!s.name)}),s.name&&(0,j.jsx)(`p`,{className:`mt-1 text-[11px] text-red-700`,children:s.name.message})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`생년월일`}),(0,j.jsx)(`input`,{type:`date`,...a(`birth_date`),className:u()})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-2`,children:`성별`}),(0,j.jsx)(`div`,{className:`flex gap-5`,children:[[`M`,`남성`],[`F`,`여성`],[`U`,`미입력`]].map(([e,t])=>(0,j.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer`,children:[(0,j.jsx)(`input`,{type:`radio`,...a(`gender`),value:e,className:`accent-brand-700`}),(0,j.jsx)(`span`,{className:`text-[13px] text-ink-800`,children:t})]},e))})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`메모 (선택)`}),(0,j.jsx)(`textarea`,{...a(`memo`),rows:3,placeholder:`환자 관련 메모를 입력하세요`,className:P(u(),`h-auto py-2 resize-none`)})]}),(0,j.jsxs)(`div`,{className:`pt-1 flex justify-end gap-2`,children:[(0,j.jsx)(`button`,{type:`button`,onClick:t,className:`px-4 py-2 border border-ink-200 text-ink-600 rounded-full text-[13px] font-semibold hover:bg-ink-50 transition-colors`,children:`취소`}),(0,j.jsx)(`button`,{type:`submit`,disabled:c,className:`px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors disabled:opacity-60`,children:c?r?`저장 중…`:`등록 중…`:r?`저장`:`등록`})]})]})]})})}var kd={M:`남성`,F:`여성`,U:`미입력`};function Ad(e){return P(`w-8 h-8 rounded-full flex items-center justify-center text-[13px] font-bold flex-shrink-0`,e===`F`?`bg-pink-100 text-pink-700`:e===`M`?`bg-blue-100 text-blue-700`:`bg-ink-100 text-ink-600`)}function jd(e){return P(`inline-block px-2 py-0.5 rounded-md text-[11px] font-semibold`,e===`F`?`bg-pink-100 text-pink-700`:e===`M`?`bg-blue-100 text-blue-700`:`bg-ink-100 text-ink-600`)}function Md(){let e=Je(),{showToast:t}=wd(),[n,r]=(0,_.useState)([]),[i,a]=(0,_.useState)(!0),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(`all`),[u,d]=(0,_.useState)(!1);(0,_.useEffect)(()=>{let e=!1;return xd.list().then(({data:t})=>{e||r(t)}).catch(()=>{e||t({title:`환자 목록을 불러오지 못했습니다`,kind:`error`})}).finally(()=>{e||a(!1)}),()=>{e=!0}},[]);let f=n.filter(e=>!(o&&!e.name.includes(o)||c===`new`&&new Date(e.created_at){n.stopPropagation();try{await xd.delete(e.id),r(t=>t.filter(t=>t.id!==e.id)),t({title:`환자 정보가 삭제되었습니다`,body:`${e.name} 환자 정보가 삭제되었어요.`,kind:`success`})}catch{t({title:`삭제에 실패했습니다`,kind:`error`})}};return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5 flex items-start justify-between`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:`환자 관리`}),(0,j.jsxs)(`p`,{className:`text-[13px] text-ink-500 mt-1`,children:[`총 `,n.length,`명의 환자`]})]}),(0,j.jsxs)(`button`,{onClick:()=>d(!0),className:`flex items-center gap-2 px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors shadow-md`,children:[(0,j.jsx)(I,{name:`plus`,size:15}),`환자 등록`]})]}),(0,j.jsx)(`div`,{className:`px-8 pb-8`,children:(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm overflow-hidden`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-3 px-5 py-3.5 border-b border-ink-100`,children:[(0,j.jsxs)(`div`,{className:`relative flex-1 max-w-[320px]`,children:[(0,j.jsx)(`span`,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 text-ink-400 pointer-events-none`,children:(0,j.jsx)(I,{name:`search`,size:14})}),(0,j.jsx)(`input`,{value:o,onChange:e=>s(e.target.value),placeholder:`환자 이름 검색…`,className:`w-full h-9 pl-8 pr-3 border border-ink-200 rounded-lg text-[13px] outline-none focus:border-brand-500 font-sans`})]}),(0,j.jsx)(`div`,{className:`flex gap-1.5 ml-auto`,children:[{label:`전체`,value:`all`},{label:`최근 등록`,value:`new`}].map(e=>(0,j.jsx)(`button`,{onClick:()=>l(e.value),className:P(`px-3 py-1.5 rounded-full text-[12px] font-medium border transition-all`,c===e.value?`bg-brand-700 text-white border-brand-700`:`bg-transparent text-ink-600 border-ink-200 hover:bg-ink-50`),children:e.label},e.value))})]}),i?(0,j.jsx)(`div`,{className:`py-16 text-center text-[13px] text-ink-400`,children:`불러오는 중…`}):f.length===0?(0,j.jsxs)(`div`,{className:`py-16 text-center`,children:[(0,j.jsx)(`div`,{className:`w-16 h-16 rounded-2xl bg-brand-50 flex items-center justify-center text-brand-600 mx-auto mb-4`,children:(0,j.jsx)(I,{name:`users`,size:28,strokeWidth:1.8})}),(0,j.jsx)(`p`,{className:`text-[15px] font-semibold text-ink-800`,children:o?`검색 결과가 없습니다`:`아직 등록된 환자가 없습니다`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1.5`,children:o?`다른 이름으로 다시 시도해보세요.`:`첫 환자를 등록하면 세션 분석을 시작할 수 있어요.`})]}):(0,j.jsxs)(`table`,{className:`w-full text-[13px] border-collapse`,children:[(0,j.jsx)(`thead`,{children:(0,j.jsxs)(`tr`,{className:`bg-ink-50`,children:[(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider border-b border-ink-100`,children:`이름`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider border-b border-ink-100`,children:`생년월일`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider border-b border-ink-100`,children:`성별`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider border-b border-ink-100`,children:`메모`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider border-b border-ink-100`,children:`등록일`}),(0,j.jsx)(`th`,{className:`text-right px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider border-b border-ink-100`,children:`액션`})]})}),(0,j.jsx)(`tbody`,{children:f.map(t=>(0,j.jsxs)(`tr`,{onClick:()=>e(`/patients/${t.id}`),className:`border-t border-ink-100 hover:bg-brand-25 cursor-pointer transition-colors group`,children:[(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,j.jsx)(`div`,{className:Ad(t.gender),children:t.name[0]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:t.name}),(0,j.jsx)(`p`,{className:`text-[11px] text-ink-500 mt-0.5`,children:Qr(t.birth_date)})]})]})}),(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-500`,children:Zr(t.birth_date)}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(`span`,{className:jd(t.gender),children:kd[t.gender??`U`]??`미입력`})}),(0,j.jsx)(`td`,{className:`px-5 py-3 text-ink-500 max-w-[180px] truncate`,children:t.memo??`—`}),(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-500`,children:Zr(t.created_at)}),(0,j.jsx)(`td`,{className:`px-5 py-3 text-right`,children:(0,j.jsxs)(`div`,{className:`inline-flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity`,children:[(0,j.jsx)(`button`,{onClick:n=>{n.stopPropagation(),e(`/patients/${t.id}`)},className:`w-7 h-7 rounded-lg flex items-center justify-center text-ink-500 hover:bg-brand-50 hover:text-brand-700 transition-colors`,title:`상세 보기`,children:(0,j.jsx)(I,{name:`chevronRight`,size:14,strokeWidth:2.2})}),(0,j.jsx)(`button`,{onClick:e=>p(t,e),className:`w-7 h-7 rounded-lg flex items-center justify-center text-ink-500 hover:bg-red-50 hover:text-red-700 transition-colors`,title:`삭제`,children:(0,j.jsx)(I,{name:`trash`,size:14,strokeWidth:2.2})})]})})]},t.id))})]})]})}),u&&(0,j.jsx)(Od,{onClose:()=>d(!1),onDone:e=>r(t=>[e,...t])})]})}function Nd(){let{id:e}=Qe(),t=Je(),{showToast:n}=wd(),[r,i]=(0,_.useState)(null),[a,o]=(0,_.useState)([]),[s,c]=(0,_.useState)(!0),[l,u]=(0,_.useState)(!1);if((0,_.useEffect)(()=>{if(!e)return;let t=!1;return(async()=>{try{let n=await xd.get(e);if(t)return;i(n.data);let r=await bd.list({patient_ref_id:n.data.patient_ref_id});if(t)return;o(Array.isArray(r.data)?r.data:[])}catch{t||n({title:`데이터를 불러오지 못했습니다`,kind:`error`})}finally{t||c(!1)}})(),()=>{t=!0}},[e]),s)return(0,j.jsx)(`div`,{className:`px-8 pt-7 text-[13px] text-ink-400`,children:`불러오는 중…`});if(!r)return(0,j.jsx)(`div`,{className:`px-8 pt-7 text-[13px] text-ink-500`,children:`환자 정보를 찾을 수 없습니다.`});let d=r.gender===`F`?`여성`:r.gender===`M`?`남성`:`미입력`;return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5 flex items-center gap-4`,children:[(0,j.jsx)(`button`,{onClick:()=>t(`/patients`),className:`w-8 h-8 rounded-lg flex items-center justify-center text-ink-500 hover:bg-ink-100 transition-colors`,children:(0,j.jsx)(I,{name:`arrowLeft`,size:16})}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:r.name}),(0,j.jsxs)(`p`,{className:`text-[13px] text-ink-500 mt-0.5`,children:[Qr(r.birth_date),` · `,d,` · 등록일 `,Zr(r.created_at)]})]})]}),(0,j.jsxs)(`div`,{className:`px-8 pb-8 grid grid-cols-3 gap-5`,children:[(0,j.jsxs)(`div`,{className:`col-span-1 flex flex-col gap-4`,children:[(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm p-5`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-3 mb-4 pb-4 border-b border-ink-100`,children:[(0,j.jsx)(`div`,{className:P(`w-14 h-14 rounded-full flex items-center justify-center text-xl font-bold`,r.gender===`F`?`bg-pink-100 text-pink-700`:`bg-blue-100 text-blue-700`),children:r.name[0]}),(0,j.jsxs)(`div`,{className:`flex-1`,children:[(0,j.jsx)(`p`,{className:`font-bold text-[16px] text-ink-800`,children:r.name}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500`,children:Zr(r.birth_date)})]}),(0,j.jsx)(`button`,{onClick:()=>u(!0),className:`w-7 h-7 flex items-center justify-center rounded-lg text-ink-400 hover:bg-ink-100 hover:text-ink-700 transition-colors`,title:`정보 수정`,children:(0,j.jsx)(I,{name:`edit`,size:14})})]}),(0,j.jsx)(`div`,{className:`flex flex-col gap-3`,children:[{label:`성별`,value:d},{label:`전체 세션`,value:`${a.length}회`},{label:`최근 세션`,value:a.length>0?Zr(a[0].session_date):`없음`}].map(e=>(0,j.jsxs)(`div`,{className:`flex justify-between items-start`,children:[(0,j.jsx)(`span`,{className:`text-[12px] text-ink-500`,children:e.label}),(0,j.jsx)(`span`,{className:`text-[12px] font-semibold text-ink-800 text-right ml-4`,children:e.value})]},e.label))})]}),r.memo&&(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm p-5`,children:[(0,j.jsx)(`p`,{className:`text-[13px] font-semibold text-ink-800 mb-2`,children:`메모`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 leading-relaxed`,children:r.memo})]})]}),(0,j.jsx)(`div`,{className:`col-span-2`,children:(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm overflow-hidden`,children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between px-5 py-4 border-b border-ink-100`,children:[(0,j.jsx)(`h2`,{className:`text-[15px] font-semibold text-ink-800`,children:`세션 기록`}),(0,j.jsxs)(`button`,{onClick:()=>t(`/sessions/new`),className:`flex items-center gap-1.5 px-3 py-1.5 bg-brand-700 text-white rounded-full text-[12px] font-semibold hover:bg-brand-900 transition-colors`,children:[(0,j.jsx)(I,{name:`plus`,size:13}),`새 세션`]})]}),a.length===0?(0,j.jsx)(`div`,{className:`py-12 text-center text-[13px] text-ink-400`,children:`세션이 없습니다.`}):(0,j.jsxs)(`table`,{className:`w-full text-[13px]`,children:[(0,j.jsx)(`thead`,{children:(0,j.jsxs)(`tr`,{className:`bg-ink-50 border-b border-ink-100`,children:[(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,children:`날짜`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,children:`유형`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,children:`상태`})]})}),(0,j.jsx)(`tbody`,{children:a.map(e=>(0,j.jsxs)(`tr`,{onClick:()=>t(`/sessions/${e.id}`),className:`border-t border-ink-100 hover:bg-brand-25 cursor-pointer transition-colors`,children:[(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-500`,children:Zr(e.session_date)}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(`span`,{className:`inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-semibold bg-ink-100 text-ink-600`,children:e.session_type??`—`})}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(Cd,{status:e.status})})]},e.id))})]})]})})]}),l&&r&&(0,j.jsx)(Od,{patient:r,onClose:()=>u(!1),onDone:e=>i(e)})]})}var Pd=[{label:`전체`,value:`all`},{label:`분석 완료`,value:`ANALYSIS_COMPLETED`},{label:`분석 중`,value:`ANALYSIS_PROCESSING`},{label:`리포트`,value:`REPORT_READY`},{label:`실패`,value:`FAILED`}];function Fd(){let e=Je(),{showToast:t}=wd(),[n,r]=(0,_.useState)([]),[i,a]=(0,_.useState)({}),[o,s]=(0,_.useState)(!0),[c,l]=(0,_.useState)(`all`),[u,d]=(0,_.useState)(``);(0,_.useEffect)(()=>{let e=!1;return Promise.all([bd.list(),xd.list()]).then(([t,n])=>{if(e)return;r(t.data);let i={};n.data.forEach(e=>{i[e.patient_ref_id]=e}),a(i)}).catch(()=>{e||t({title:`세션 목록을 불러오지 못했습니다`,kind:`error`})}).finally(()=>{e||s(!1)}),()=>{e=!0}},[]);let f=n.filter(e=>!(c!==`all`&&e.status!==c||u&&!(i[e.patient_ref_id]?.name??``).includes(u)));return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5 flex items-start justify-between`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:`세션 관리`}),(0,j.jsxs)(`p`,{className:`text-[13px] text-ink-500 mt-1`,children:[`총 `,n.length,`개 세션`]})]}),(0,j.jsxs)(`button`,{onClick:()=>e(`/sessions/new`),className:`flex items-center gap-2 px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors shadow-md`,children:[(0,j.jsx)(I,{name:`plus`,size:15}),`새 세션`]})]}),(0,j.jsx)(`div`,{className:`px-8 pb-8`,children:(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm overflow-hidden`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-3 px-5 py-3.5 border-b border-ink-100 flex-wrap`,children:[(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsx)(`span`,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 text-ink-400 pointer-events-none`,children:(0,j.jsx)(I,{name:`search`,size:14})}),(0,j.jsx)(`input`,{value:u,onChange:e=>d(e.target.value),placeholder:`환자 이름 검색…`,className:`h-9 pl-8 pr-3 w-[220px] border border-ink-200 rounded-lg text-[13px] outline-none focus:border-brand-500 font-sans`})]}),(0,j.jsx)(`div`,{className:`flex gap-1.5 ml-auto flex-wrap`,children:Pd.map(e=>(0,j.jsx)(`button`,{onClick:()=>l(e.value),className:P(`px-3 py-1.5 rounded-full text-[12px] font-medium border transition-all`,c===e.value?`bg-brand-700 text-white border-brand-700`:`bg-transparent text-ink-600 border-ink-200 hover:bg-ink-50`),children:e.label},e.value))})]}),o?(0,j.jsx)(`div`,{className:`py-16 text-center text-[13px] text-ink-400`,children:`불러오는 중…`}):f.length===0?(0,j.jsxs)(`div`,{className:`py-16 text-center`,children:[(0,j.jsx)(`div`,{className:`w-16 h-16 rounded-2xl bg-brand-50 flex items-center justify-center text-brand-600 mx-auto mb-4`,children:(0,j.jsx)(I,{name:`audio`,size:28,strokeWidth:1.8})}),(0,j.jsx)(`p`,{className:`text-[15px] font-semibold text-ink-800`,children:`세션이 없습니다`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1.5`,children:`필터를 변경하거나 새 세션을 생성해보세요.`})]}):(0,j.jsxs)(`table`,{className:`w-full text-[13px] border-collapse`,children:[(0,j.jsx)(`thead`,{children:(0,j.jsx)(`tr`,{className:`bg-ink-50`,children:[`#`,`환자`,`날짜`,`유형`,`상태`].map(e=>(0,j.jsx)(`th`,{className:`py-2.5 px-5 text-left text-[11px] font-semibold text-ink-500 uppercase tracking-wider border-b border-ink-100`,children:e},e))})}),(0,j.jsx)(`tbody`,{children:f.map(t=>{let n=i[t.patient_ref_id];return(0,j.jsxs)(`tr`,{onClick:()=>e(`/sessions/${t.id}`),className:`border-t border-ink-100 hover:bg-brand-25 cursor-pointer transition-colors`,children:[(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-400 text-[11px]`,children:t.id.slice(-8)}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,j.jsx)(`div`,{className:`w-8 h-8 rounded-full bg-brand-100 text-brand-700 flex items-center justify-center text-[13px] font-bold`,children:n?n.name[0]:`?`}),(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:n?ei(n.name):t.patient_ref_id.slice(-8)})]})}),(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-500`,children:Zr(t.session_date)}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(`span`,{className:`inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-semibold bg-ink-100 text-ink-600`,children:t.session_type??`—`})}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(Cd,{status:t.status})})]},t.id)})})]})]})})]})}var Id={presignedUrl:e=>V.post(`/audio-files/presigned-url`,e),uploadToS3:(e,t)=>Js.put(e,t,{headers:{"Content-Type":t.type}}),complete:e=>V.post(`/audio-files`,e),get:e=>V.get(`/audio-files/${e}`),delete:e=>V.delete(`/audio-files/${e}`)},Ld={create:e=>V.post(`/analysis-jobs`,e),list:e=>V.get(`/analysis-jobs`,{params:e}),get:e=>V.get(`/analysis-jobs/${e}`),cancel:e=>V.patch(`/analysis-jobs/${e}/cancel`)},Rd={getBySession:e=>V.get(`/sessions/${e}/transcript`),getById:e=>V.get(`/transcripts/${e}`),listSegments:e=>V.get(`/transcripts/${e}/segments`),finalize:e=>V.post(`/transcripts/${e}/finalize`),updateSegment:(e,t,n)=>V.patch(`/transcripts/${e}/segments/${t}`,n),bulkUpdateSegments:(e,t)=>V.patch(`/transcripts/${e}/segments`,{segments:t}),createSegment:(e,t)=>V.post(`/transcripts/${e}/segments`,t),deleteSegment:(e,t)=>V.delete(`/transcripts/${e}/segments/${t}`)},zd={list:e=>V.get(`/reports`,{params:e}),get:e=>V.get(`/reports/${e}`),listSegments:e=>V.get(`/reports/${e}/segments`),updateSegment:(e,t,n)=>V.patch(`/reports/${e}/segments/${t}`,n),updateStatus:(e,t)=>V.patch(`/reports/${e}/status`,{status:t}),download:e=>V.get(`/reports/${e}/download`,{responseType:`blob`}),sendChatMessage:(e,t)=>V.post(`/reports/${e}/chat/messages`,{message:t},{timeout:65e3}),applyPatch:e=>V.post(`/reports/patch-proposals/${e}/apply`)},Bd={".pdf":`application/pdf`,".doc":`application/msword`,".docx":`application/vnd.openxmlformats-officedocument.wordprocessingml.document`,".xls":`application/vnd.ms-excel`,".xlsx":`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`,".ppt":`application/vnd.ms-powerpoint`,".pptx":`application/vnd.openxmlformats-officedocument.presentationml.presentation`,".hwp":`application/x-hwp`,".hwpx":`application/x-hwpx`,".txt":`text/plain`,".rtf":`application/rtf`,".csv":`text/csv`,".odt":`application/vnd.oasis.opendocument.text`,".ods":`application/vnd.oasis.opendocument.spreadsheet`,".odp":`application/vnd.oasis.opendocument.presentation`};function Vd(e){return Bd[e.name.slice(e.name.lastIndexOf(`.`)).toLowerCase()]??(e.type||`application/octet-stream`)}var Hd={list:()=>V.get(`/templates`),get:e=>V.get(`/templates/${e}`),create:e=>V.post(`/templates`,e),presignedUrl:e=>V.post(`/templates/presigned-url`,e),confirm:(e,t)=>V.post(`/templates/${e}/confirm`,t??{}),update:(e,t)=>V.patch(`/templates/${e}`,t),delete:e=>V.delete(`/templates/${e}`),getFileUrl:e=>V.get(`/templates/${e}/file`)},Ud={S:`S — Subjective`,O:`O — Objective`,A:`A — Assessment`,P:`P — Plan`};function Wd({report:e,onPatchApplied:t}){let{showToast:n}=wd(),[r,i]=(0,_.useState)([]),[a,o]=(0,_.useState)(``),[s,c]=(0,_.useState)(!1),[l,u]=(0,_.useState)(null),d=(0,_.useRef)(null),f=(0,_.useRef)(null);(0,_.useEffect)(()=>{d.current?.scrollIntoView({behavior:`smooth`})},[r]);let p=async()=>{let t=a.trim();if(!(!t||s)){o(``),c(!0),i(e=>[...e,{role:`user`,content:t}]);try{let{data:n}=await zd.sendChatMessage(e.id,t);i(e=>[...e,{role:`assistant`,content:n.assistant_message,patch:n.patch_proposal??void 0}])}catch(e){n({title:Js.isAxiosError(e)&&e.code===`ECONNABORTED`?`AI 응답이 지연되고 있습니다. 잠시 후 새로고침해 확인해주세요`:`메시지 전송에 실패했습니다`,kind:`error`}),i(e=>e.slice(0,-1)),o(t)}finally{c(!1),f.current?.focus()}}},m=async(e,r)=>{u(e.patch_id);try{let{data:a}=await zd.applyPatch(e.patch_id);t(a.version,a.updated_sections),i(e=>e.map((e,t)=>t===r?{...e,patch:void 0}:e)),n({title:`수정안이 리포트에 반영되었습니다`,kind:`success`})}catch(e){e?.response?.status===409?n({title:`리포트가 변경되어 반영할 수 없습니다. 다시 요청해주세요.`,kind:`error`}):n({title:`반영에 실패했습니다`,kind:`error`})}finally{u(null)}},h=e=>{i(t=>t.map((t,n)=>n===e?{...t,patch:void 0}:t))};return(0,j.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,j.jsxs)(`div`,{className:`px-4 py-3 border-b border-ink-100 flex-shrink-0 flex items-start justify-between gap-2`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[13px] font-bold text-ink-800`,children:`AI 보조`}),(0,j.jsx)(`p`,{className:`text-[11px] text-ink-400 mt-0.5`,children:`수정 제안을 요청하거나 근거를 확인하세요`})]}),(0,j.jsxs)(`button`,{onClick:()=>window.open(`/insight-map?report_id=${e.id}`,`_blank`,`noopener,noreferrer`),title:`인사이트맵 열기`,className:`flex-shrink-0 flex items-center gap-1 px-2 py-1 rounded-lg border border-ink-200 text-ink-500 text-[10px] font-semibold hover:bg-ink-50 transition-colors`,children:[(0,j.jsx)(I,{name:`network`,size:12}),`인사이트맵`]})]}),(0,j.jsxs)(`div`,{className:`flex-1 overflow-y-auto px-4 py-4 flex flex-col gap-3 min-h-0`,children:[r.length===0&&(0,j.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center gap-2 text-center py-8`,children:[(0,j.jsx)(I,{name:`clipboard`,size:28,className:`text-ink-300`}),(0,j.jsxs)(`p`,{className:`text-[12px] text-ink-400 leading-relaxed`,children:[`섹션 수정, 근거 확인, 형식 검토 등을`,(0,j.jsx)(`br`,{}),`자유롭게 요청하세요`]})]}),r.map((e,t)=>(0,j.jsxs)(`div`,{className:P(`flex flex-col gap-2`,e.role===`user`?`items-end`:`items-start`),children:[(0,j.jsx)(`div`,{className:P(`px-3 py-2 rounded-2xl text-[12px] leading-relaxed max-w-[90%] whitespace-pre-wrap`,e.role===`user`?`bg-brand-700 text-white rounded-br-sm`:`bg-ink-50 text-ink-800 rounded-bl-sm`),children:e.content}),e.patch&&(0,j.jsxs)(`div`,{className:`w-full border border-brand-200 rounded-xl overflow-hidden bg-white shadow-sm`,children:[(0,j.jsxs)(`div`,{className:`bg-brand-50 px-3 py-2 flex items-center gap-1.5`,children:[(0,j.jsx)(I,{name:`edit`,size:12,className:`text-brand-700`}),(0,j.jsxs)(`span`,{className:`text-[11px] font-bold text-brand-700`,children:[`수정 제안 — `,Ud[e.patch.target_section]??e.patch.target_section]})]}),(0,j.jsxs)(`div`,{className:`px-3 py-2 flex flex-col gap-2`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[10px] font-bold text-ink-400 uppercase tracking-wide mb-1`,children:`원문`}),(0,j.jsx)(`p`,{className:`text-[11px] text-ink-500 leading-relaxed line-through whitespace-pre-wrap`,children:e.patch.original_text})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[10px] font-bold text-ink-400 uppercase tracking-wide mb-1`,children:`수정안`}),(0,j.jsx)(`p`,{className:`text-[11px] text-ink-800 leading-relaxed whitespace-pre-wrap`,children:e.patch.proposed_text})]}),e.patch.rationale&&(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[10px] font-bold text-ink-400 uppercase tracking-wide mb-1`,children:`수정 이유`}),(0,j.jsx)(`p`,{className:`text-[11px] text-ink-500 leading-relaxed`,children:e.patch.rationale})]})]}),(0,j.jsxs)(`div`,{className:`px-3 pb-3 flex gap-2`,children:[(0,j.jsx)(`button`,{onClick:()=>m(e.patch,t),disabled:l!==null,className:`flex-1 py-1.5 bg-brand-700 text-white text-[11px] font-semibold rounded-lg hover:bg-brand-900 transition-colors disabled:opacity-60`,children:l===e.patch.patch_id?`반영 중…`:`반영`}),(0,j.jsx)(`button`,{onClick:()=>h(t),disabled:l!==null,className:`flex-1 py-1.5 border border-ink-200 text-ink-600 text-[11px] font-semibold rounded-lg hover:bg-ink-50 transition-colors disabled:opacity-60`,children:`무시`})]})]})]},t)),s&&(0,j.jsx)(`div`,{className:`flex items-start`,children:(0,j.jsx)(`div`,{className:`bg-ink-50 px-3 py-2 rounded-2xl rounded-bl-sm`,children:(0,j.jsx)(`span`,{className:`text-[12px] text-ink-400 animate-pulse`,children:`AI가 생각 중…`})})}),(0,j.jsx)(`div`,{ref:d})]}),(0,j.jsxs)(`div`,{className:`px-3 pb-3 pt-2 flex-shrink-0 border-t border-ink-100`,children:[(0,j.jsxs)(`div`,{className:`flex items-end gap-2 bg-ink-50 rounded-xl px-3 py-2`,children:[(0,j.jsx)(`textarea`,{ref:f,value:a,onChange:e=>o(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),p())},placeholder:`요청을 입력하세요 (Shift+Enter로 줄바꿈)`,rows:1,disabled:s,className:P(`flex-1 bg-transparent text-[12px] text-ink-800 placeholder-ink-400`,`outline-none resize-none leading-relaxed max-h-24 overflow-y-auto`,`disabled:opacity-60`)}),(0,j.jsx)(`button`,{onClick:p,disabled:!a.trim()||s,className:`flex-shrink-0 w-7 h-7 flex items-center justify-center bg-brand-700 text-white rounded-lg hover:bg-brand-900 transition-colors disabled:opacity-40`,children:(0,j.jsx)(I,{name:`send`,size:13})})]}),(0,j.jsx)(`p`,{className:`text-[10px] text-ink-300 mt-1.5 text-center`,children:`AI 제안은 반드시 치료사가 검토 후 반영하세요`})]})]})}var Gd=[{id:1,label:`음성 업로드`,sub:`Upload`},{id:2,label:`AI 분석`,sub:`Analyze`},{id:3,label:`전사 검토`,sub:`Review`},{id:4,label:`리포트`,sub:`Report`}];function Kd(e){return e===`CREATED`||e===`AUDIO_UPLOADING`?1:e===`AUDIO_UPLOADED`||e===`ANALYSIS_REQUESTED`||e===`ANALYSIS_PROCESSING`||e===`FAILED`?2:e===`ANALYSIS_COMPLETED`||e===`REPORT_GENERATING`?3:4}var qd={PATIENT:{label:`환자`,bg:`bg-brand-100`,fg:`text-brand-700`},SLP:{label:`치료사`,bg:`bg-blue-100`,fg:`text-blue-700`},GUARDIAN:{label:`보호자`,bg:`bg-purple-100`,fg:`text-purple-700`},UNKNOWN:{label:`미상`,bg:`bg-ink-100`,fg:`text-ink-600`}},Jd={SUBJECTIVE:`Subjective — 주관적 정보`,OBJECTIVE:`Objective — 객관적 정보`,ASSESSMENT:`Assessment — 평가`,PLAN:`Plan — 계획`,CUSTOM:`Custom — 기타`};function Yd(){let{id:e}=Qe(),t=Je(),{showToast:n}=wd(),[r,i]=(0,_.useState)(null),[a,o]=(0,_.useState)(null),[s,c]=(0,_.useState)(1),[l,u]=(0,_.useState)(!0),[d,f]=(0,_.useState)(!1),[p,m]=(0,_.useState)(``),h=(0,_.useRef)(null),[g,v]=(0,_.useState)([]),[y,b]=(0,_.useState)(``),[x,S]=(0,_.useState)(null),C=(0,_.useRef)(null),[w,ee]=(0,_.useState)(!1),[T,E]=(0,_.useState)(!1),[D,O]=(0,_.useState)(null),[te,k]=(0,_.useState)([]),[ne,re]=(0,_.useState)(!1),[ie,ae]=(0,_.useState)(null),[oe,se]=(0,_.useState)(``),[ce,le]=(0,_.useState)(`UNKNOWN`),[ue,de]=(0,_.useState)(!1),[fe,pe]=(0,_.useState)(null),[me,he]=(0,_.useState)(null),[ge,_e]=(0,_.useState)({}),[ve,ye]=(0,_.useState)(!1),[be,xe]=(0,_.useState)(null),[Se,Ce]=(0,_.useState)([]),[we,Te]=(0,_.useState)(null),[Ee,De]=(0,_.useState)(``),[Oe,ke]=(0,_.useState)(!1),[Ae,je]=(0,_.useState)(!1),[Me,Ne]=(0,_.useState)(!1),[Pe,Fe]=(0,_.useState)(!1),Ie=(0,_.useCallback)(async()=>{if(!e)return;let{data:t}=await bd.get(e);return i(t),c(Kd(t.status)),t},[e]);(0,_.useEffect)(()=>{Hd.list().then(({data:e})=>v(e.filter(e=>e.status===`ACTIVE`))).catch(()=>{})},[]),(0,_.useEffect)(()=>{if(!e)return;let t=!1;return u(!0),bd.get(e).then(async({data:n})=>{if(t)return;i(n);let r=Kd(n.status);if(c(r),await xd.getByRef(n.patient_ref_id).then(({data:e})=>{t||o(e)}).catch(()=>{}),!t){if(r===2){let n=await Ld.list({session_id:e});!t&&n.data.length>0&&S(n.data[0])}if(r===3){let r=await Rd.getBySession(e);if(t)return;O(r.data);let i=await Rd.listSegments(r.data.id);t||(k(i.data),n.status===`REPORT_GENERATING`&&E(!0))}if(r===4){let[n,r]=await Promise.all([Rd.getBySession(e),zd.list({session_id:e})]);if(t)return;O(n.data);let i=await Rd.listSegments(n.data.id);if(t)return;if(k(i.data),r.data.length>0){let e=r.data[0];xe(e);let n=await zd.listSegments(e.id);t||Ce(n.data)}}}}).catch(()=>{t||n({title:`세션 정보를 불러오지 못했습니다`,kind:`error`})}).finally(()=>{t||u(!1)}),()=>{t=!0}},[e]),(0,_.useEffect)(()=>{if(s!==2){C.current&&clearInterval(C.current);return}return C.current=setInterval(async()=>{if(e)try{let{data:t}=await bd.get(e);i(t);let n=Kd(t.status);if(t.status===`FAILED`){C.current&&clearInterval(C.current);return}if(n!==2)c(n),C.current&&clearInterval(C.current),n===3&&(t.status===`REPORT_GENERATING`&&E(!0),Rd.getBySession(e).then(async({data:e})=>{O(e),k((await Rd.listSegments(e.id)).data)}));else{let t=await Ld.list({session_id:e});t.data.length>0&&S(t.data[0])}}catch{}},1e4),()=>{C.current&&clearInterval(C.current)}},[s,e]),(0,_.useEffect)(()=>{if(!T||!e)return;let t=!1,r=setInterval(async()=>{if(!t)try{let{data:a}=await bd.get(e);if(i(a),a.status===`REPORT_READY`){t=!0,E(!1),clearInterval(r);let[n,i]=await Promise.all([Rd.getBySession(e),zd.list({session_id:e})]);if(O(n.data),k((await Rd.listSegments(n.data.id)).data),i.data.length>0){let e=i.data[0];xe(e),Ce((await zd.listSegments(e.id)).data)}c(4)}else a.status===`FAILED`||a.status===`DELETED`?(t=!0,E(!1),clearInterval(r),n({title:`리포트 생성에 실패했습니다`,kind:`error`})):a.status!==`REPORT_GENERATING`&&a.status!==`ANALYSIS_COMPLETED`&&(t=!0,E(!1),clearInterval(r),n({title:`예상치 못한 상태입니다: ${a.status}`,kind:`error`}))}catch{}},1e4);return()=>clearInterval(r)},[T,e]);let Le=async t=>{if(e){f(!0);try{m(`presigned URL 발급 중…`);let{data:r}=await Id.presignedUrl({file_name:t.name,content_type:t.type,session_id:e,file_size:t.size});m(`S3에 업로드 중…`),await Id.uploadToS3(r.upload_url,t),m(`업로드 확인 중…`);let{data:i}=await Id.complete({session_id:e,object_key:r.object_key});m(`AI 분석 요청 중…`);let{data:a}=await Ld.create({session_id:e,audio_file_id:i.id,...y?{template_id:y}:{}});S(a),O(null),k([]),n({title:`음성 파일이 업로드되었습니다`,body:`AI 분석을 시작합니다.`,kind:`success`}),await Ie()}catch(e){console.error(`[upload]`,e),n({title:`업로드에 실패했습니다`,body:`파일 형식 및 네트워크를 확인해주세요.`,kind:`error`})}finally{f(!1),m(``)}}},Re=async()=>{if(x){ee(!0);try{let{data:e}=await Ld.cancel(x.id);S(e.job),n({title:`분석이 취소되었습니다`,kind:`info`}),await Ie()}catch(e){console.error(`[cancel]`,e),n({title:`취소에 실패했습니다`,kind:`error`})}finally{ee(!1)}}},ze=async()=>{if(!(!e||!x))try{let t=y||x.template_id||void 0,{data:n}=await Ld.create({session_id:e,audio_file_id:x.audio_file_id,...t?{template_id:t}:{}});S(n),O(null),k([]),await Ie()}catch(e){console.error(`[request-analysis]`,e),n({title:`분석 요청에 실패했습니다`,kind:`error`})}};(0,_.useEffect)(()=>{te.length!==0&&_e(e=>{let t={...e};return te.forEach(e=>{let n=e.speaker_label??`UNKNOWN`;n in t||(t[n]=e.speaker_role)}),t})},[te]);let Be=async()=>{if(D){ye(!0);try{let e=te.filter(e=>{let t=e.speaker_label??`UNKNOWN`;return ge[t]&&ge[t]!==e.speaker_role}).map(e=>({segment_id:e.id,speaker_role:ge[e.speaker_label??`UNKNOWN`]}));if(e.length===0)return;let{data:t}=await Rd.bulkUpdateSegments(D.id,e);k(e=>{let n=new Map(t.map(e=>[e.id,e]));return e.map(e=>n.get(e.id)??e)}),n({title:`화자 역할이 일괄 적용되었습니다`,kind:`success`})}catch{n({title:`일괄 적용에 실패했습니다`,kind:`error`})}finally{ye(!1)}}},Ve=e=>{ae(e.id),se(e.text??e.original_text??``),le(e.speaker_role)},He=()=>ae(null),Ue=async e=>{if(D){he(e.id);try{let{data:t}=await Rd.createSegment(D.id,{after_segment_id:e.id});k(n=>{let r=n.findIndex(t=>t.id===e.id),i=[...n];return i.splice(r+1,0,t),i}),ae(t.id),se(``),le(`UNKNOWN`)}catch{n({title:`삽입에 실패했습니다`,kind:`error`})}finally{he(null)}}},We=async e=>{if(D){pe(e.id);try{await Rd.deleteSegment(D.id,e.id),k(t=>t.filter(t=>t.id!==e.id))}catch{n({title:`삭제에 실패했습니다`,kind:`error`})}finally{pe(null)}}},Ge=async e=>{if(D){de(!0);try{let{data:t}=await Rd.updateSegment(D.id,e.id,{text:oe,speaker_role:ce});k(e=>e.map(e=>e.id===t.id?t:e)),ae(null)}catch{n({title:`저장에 실패했습니다`,kind:`error`})}finally{de(!1)}}},Ke=async()=>{if(!(!D||!e)){re(!0);try{await Rd.finalize(D.id),n({title:`전사가 확정되었습니다. 리포트를 생성하고 있습니다.`,kind:`success`}),E(!0)}catch{n({title:`전사 확정에 실패했습니다`,kind:`error`})}finally{re(!1)}}},qe=e=>{Te(e.id),De(e.content??e.ai_content??``)},Ye=()=>Te(null),Xe=async e=>{if(be){ke(!0);try{let{data:t}=await zd.updateSegment(be.id,e.id,{content:Ee});Ce(e=>e.map(e=>e.id===t.id?t:e)),Te(null)}catch{n({title:`저장에 실패했습니다`,kind:`error`})}finally{ke(!1)}}},Ze=(e,t)=>{xe(t=>t&&{...t,version:e}),be&&zd.listSegments(be.id).then(({data:e})=>Ce(e)).catch(()=>n({title:`리포트를 다시 불러오지 못했습니다`,kind:`error`}))},$e=async()=>{if(be){je(!0);try{let{data:e}=await zd.updateStatus(be.id,`FINALIZED`);xe(e),n({title:`리포트가 확정되었습니다`,kind:`success`})}catch{n({title:`확정에 실패했습니다`,kind:`error`})}finally{je(!1)}}},et=async()=>{if(r?.status===`CREATED`&&e)try{await bd.delete(e)}catch{}t(-1)},tt=async()=>{if(e){Fe(!0);try{await bd.delete(e),n({title:`세션이 삭제되었습니다`,kind:`success`}),t(`/sessions`)}catch{n({title:`세션 삭제에 실패했습니다`,kind:`error`}),Fe(!1),Ne(!1)}}};if(l)return(0,j.jsx)(`div`,{className:`px-8 pt-7 text-[13px] text-ink-400`,children:`불러오는 중…`});if(!r)return(0,j.jsx)(`div`,{className:`px-8 pt-7 text-[13px] text-ink-500`,children:`세션을 찾을 수 없습니다.`});let nt=be?.status===`FINALIZED`;return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5 flex items-center gap-4`,children:[(0,j.jsx)(`button`,{onClick:et,className:`w-8 h-8 rounded-lg flex items-center justify-center text-ink-500 hover:bg-ink-100 transition-colors`,children:(0,j.jsx)(I,{name:`arrowLeft`,size:16})}),(0,j.jsxs)(`div`,{className:`flex-1`,children:[(0,j.jsxs)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:[`세션 — `,a?.name??`—`]}),(0,j.jsxs)(`p`,{className:`text-[13px] text-ink-500 mt-0.5`,children:[Zr(r.session_date),` · `,r.session_type??`—`]})]}),Me?(0,j.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,j.jsx)(`span`,{className:`text-[13px] text-red-600 font-medium`,children:`삭제하시겠어요?`}),(0,j.jsx)(`button`,{onClick:tt,disabled:Pe,className:`px-3 py-1.5 bg-red-600 text-white rounded-full text-[12px] font-semibold hover:bg-red-700 disabled:opacity-60 transition-colors`,children:Pe?`삭제 중…`:`확인`}),(0,j.jsx)(`button`,{onClick:()=>Ne(!1),className:`px-3 py-1.5 border border-ink-200 text-ink-600 rounded-full text-[12px] font-semibold hover:bg-ink-50 transition-colors`,children:`취소`})]}):(0,j.jsx)(`button`,{onClick:()=>Ne(!0),className:`w-8 h-8 rounded-lg flex items-center justify-center text-ink-400 hover:bg-red-50 hover:text-red-600 transition-colors`,title:`세션 삭제`,children:(0,j.jsx)(I,{name:`trash`,size:15})})]}),(0,j.jsxs)(`div`,{className:`px-8 pb-8 flex flex-col gap-5`,children:[(0,j.jsx)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm p-6`,children:(0,j.jsx)(`div`,{className:`flex items-center`,children:Gd.map((e,t)=>{let n=s>e.id,r=s===e.id;return(0,j.jsxs)(`div`,{className:`flex items-center flex-1 last:flex-none`,children:[(0,j.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,children:[(0,j.jsx)(`div`,{className:P(`w-8 h-8 rounded-full flex items-center justify-center text-[13px] font-bold border-2 transition-all`,n?`bg-brand-700 border-brand-700 text-white`:r?`bg-white border-brand-700 text-brand-700 shadow-[0_0_0_5px_rgba(26,60,52,0.12)]`:`bg-white border-ink-300 text-ink-400`),children:n?(0,j.jsx)(I,{name:`check`,size:14,strokeWidth:3}):e.id}),(0,j.jsxs)(`div`,{className:`text-center`,children:[(0,j.jsx)(`p`,{className:P(`text-[12px] whitespace-nowrap`,n||r?`font-semibold text-ink-800`:`text-ink-400`),children:e.label}),(0,j.jsx)(`p`,{className:`text-[10px] text-ink-400`,children:e.sub})]})]}),t0&&(0,j.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,j.jsx)(`label`,{className:`text-[13px] font-semibold text-ink-700`,children:`리포트 템플릿 선택`}),(0,j.jsxs)(`select`,{value:y,onChange:e=>b(e.target.value),disabled:d,className:`w-full border border-ink-200 rounded-lg px-3 py-2 text-[13px] text-ink-700 bg-white outline-none focus:border-brand-500 focus:ring-2 focus:ring-brand-500/16 disabled:opacity-60`,children:[(0,j.jsx)(`option`,{value:``,children:`기본 SOAP Note`}),g.map(e=>(0,j.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),(0,j.jsx)(`p`,{className:`text-[11px] text-ink-400`,children:`선택한 템플릿 구조에 맞춰 리포트가 생성됩니다.`})]}),(0,j.jsx)(`input`,{ref:h,type:`file`,accept:`audio/*,.wav,.mp3,.m4a`,className:`hidden`,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&Le(t)}}),(0,j.jsxs)(`div`,{className:P(`border-2 border-dashed rounded-xl p-10 text-center transition-colors`,d?`border-brand-400 bg-brand-25 cursor-wait`:`border-ink-200 hover:border-brand-400 cursor-pointer`),onClick:()=>!d&&h.current?.click(),onDragOver:e=>e.preventDefault(),onDrop:e=>{if(e.preventDefault(),!d){let t=e.dataTransfer.files?.[0];t&&Le(t)}},children:[(0,j.jsx)(`div`,{className:`w-14 h-14 rounded-xl bg-brand-50 flex items-center justify-center text-brand-600 mx-auto mb-3`,children:d?(0,j.jsx)(`div`,{className:`w-6 h-6 rounded-full border-2 border-brand-200 border-t-brand-700`,style:{animation:`spin 0.8s linear infinite`}}):(0,j.jsx)(I,{name:`upload`,size:24,strokeWidth:1.8})}),d?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:`업로드 중…`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1`,children:p})]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:`파일을 드래그하거나 클릭해서 업로드`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1`,children:`WAV, MP3, M4A · 최대 500MB`})]})]})]})]}),s===2&&(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm`,children:[(0,j.jsx)(`div`,{className:`px-6 py-4 border-b border-ink-100`,children:(0,j.jsx)(`p`,{className:`text-[16px] font-semibold text-ink-800`,children:r.status===`FAILED`?`AI 분석 실패`:`AI 분석 중`})}),(0,j.jsx)(`div`,{className:`p-6 text-center`,children:r.status===`FAILED`?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`div`,{className:`w-16 h-16 rounded-full bg-red-50 flex items-center justify-center text-red-500 mx-auto mb-4`,children:(0,j.jsx)(I,{name:`alert`,size:28,strokeWidth:1.8})}),(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:`분석 중 오류가 발생했습니다`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1`,children:x?.error_message??`알 수 없는 오류`})]}):r.status===`AUDIO_UPLOADED`?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`div`,{className:`w-16 h-16 rounded-full bg-ink-50 flex items-center justify-center text-ink-400 mx-auto mb-4`,children:(0,j.jsx)(I,{name:`x`,size:28,strokeWidth:1.8})}),(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:`분석이 취소되었습니다`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1`,children:`분석을 다시 요청할 수 있습니다.`}),x&&(0,j.jsxs)(`div`,{className:`mt-4 flex flex-col items-center gap-2`,children:[g.length>0&&(0,j.jsxs)(`select`,{value:y||x.template_id||``,onChange:e=>b(e.target.value),className:`border border-ink-200 rounded-lg px-3 py-1.5 text-[12px] text-ink-700 bg-white outline-none focus:border-brand-500`,children:[(0,j.jsx)(`option`,{value:``,children:`기본 SOAP Note`}),g.map(e=>(0,j.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),(0,j.jsx)(`button`,{onClick:ze,className:`px-4 py-1.5 bg-brand-600 text-white rounded-full text-[12px] font-semibold hover:bg-brand-700 transition-colors`,children:`다시 분석 요청`})]})]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`div`,{className:`w-16 h-16 rounded-full border-4 border-brand-200 border-t-brand-700 mx-auto mb-4`,style:{animation:`spin 1s linear infinite`}}),(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:`음성을 분석하고 있습니다`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1`,children:x?.pipeline_stage?`현재 단계: ${x.pipeline_stage}`:`작업 완료 이후 알림을 보내드립니다`}),(0,j.jsx)(`p`,{className:`text-[11px] text-ink-400 mt-4`,children:`페이지를 벗어나도 분석은 계속됩니다.`}),x&&[`PENDING`,`DOWNLOADING`,`RETRYING`].includes(x.status)&&(0,j.jsx)(`button`,{onClick:Re,disabled:w,className:`mt-4 px-4 py-1.5 border border-ink-200 text-ink-500 rounded-full text-[12px] font-semibold hover:bg-ink-50 disabled:opacity-60 transition-colors`,children:w?`취소 중…`:`분석 취소`})]})})]}),s===3&&D&&(0,j.jsx)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm`,children:T?(0,j.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-16 gap-4`,children:[(0,j.jsx)(`div`,{className:`w-8 h-8 rounded-full border-2 border-brand-200 border-t-brand-600 animate-spin`}),(0,j.jsx)(`p`,{className:`text-[14px] font-semibold text-ink-700`,children:`리포트를 생성하고 있습니다`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-400`,children:`작업 완료 이후 알림을 보내드립니다.`})]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between px-6 py-4 border-b border-ink-100`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[16px] font-semibold text-ink-800`,children:`전사 검토`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-0.5`,children:`텍스트나 화자를 수정한 뒤 확정하세요`})]}),(0,j.jsxs)(`button`,{onClick:Ke,disabled:ne||!!ie,className:`flex items-center gap-1.5 px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors disabled:opacity-60`,children:[(0,j.jsx)(I,{name:`chevronRight`,size:14}),ne?`처리 중…`:`전사 확정`]})]}),Object.keys(ge).length>0&&(0,j.jsxs)(`div`,{className:`px-6 py-3 border-b border-ink-100 bg-ink-25 flex flex-wrap items-center gap-3`,children:[(0,j.jsx)(`span`,{className:`text-[12px] font-semibold text-ink-600 flex-shrink-0`,children:`화자 일괄 지정`}),Object.entries(ge).map(([e,t])=>(0,j.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,j.jsx)(`span`,{className:`text-[12px] font-mono text-ink-500`,children:e}),(0,j.jsx)(`span`,{className:`text-[11px] text-ink-300`,children:`→`}),(0,j.jsxs)(`select`,{value:t,onChange:t=>_e(n=>({...n,[e]:t.target.value})),className:`text-[11px] border border-ink-200 rounded-md px-1.5 py-0.5 bg-white outline-none focus:border-brand-500`,children:[(0,j.jsx)(`option`,{value:`PATIENT`,children:`환자`}),(0,j.jsx)(`option`,{value:`SLP`,children:`치료사`}),(0,j.jsx)(`option`,{value:`GUARDIAN`,children:`보호자`}),(0,j.jsx)(`option`,{value:`UNKNOWN`,children:`미상`})]})]},e)),(0,j.jsx)(`button`,{onClick:Be,disabled:ve,className:`ml-auto px-3 py-1 bg-brand-700 text-white rounded-full text-[12px] font-semibold hover:bg-brand-900 disabled:opacity-60 transition-colors`,children:ve?`적용 중…`:`일괄 적용`})]}),(0,j.jsx)(`div`,{className:`divide-y divide-ink-50`,children:te.length===0?(0,j.jsx)(`p`,{className:`text-[13px] text-ink-400 text-center py-8`,children:`전사 결과가 없습니다.`}):te.map(e=>{let t=ie===e.id,n=qd[e.speaker_role],r=e.text??e.original_text??``;return(0,j.jsxs)(`div`,{className:P(`flex gap-3 items-start px-6 py-3`,t?`bg-brand-25`:`hover:bg-ink-50 group`),children:[(0,j.jsx)(`span`,{className:`text-[11px] font-mono text-ink-400 pt-1 w-14 flex-shrink-0`,children:$r(e.start_ms)}),t?(0,j.jsxs)(`select`,{value:ce,onChange:e=>le(e.target.value),className:`text-[11px] font-semibold border border-ink-200 rounded-md px-1.5 py-0.5 bg-white outline-none focus:border-brand-500 flex-shrink-0 h-fit mt-0.5`,children:[(0,j.jsx)(`option`,{value:`PATIENT`,children:`환자`}),(0,j.jsx)(`option`,{value:`SLP`,children:`치료사`}),(0,j.jsx)(`option`,{value:`GUARDIAN`,children:`보호자`}),(0,j.jsx)(`option`,{value:`UNKNOWN`,children:`미상`})]}):(0,j.jsx)(`span`,{className:P(`text-[11px] font-semibold px-2 py-0.5 rounded-md flex-shrink-0 mt-0.5`,n.bg,n.fg),children:n.label}),t?(0,j.jsxs)(`div`,{className:`flex-1 flex flex-col gap-2`,children:[(0,j.jsx)(`textarea`,{value:oe,onChange:e=>se(e.target.value),rows:3,autoFocus:!0,className:`w-full px-3 py-2 rounded-lg text-[13px] border border-brand-400 bg-white outline-none focus:ring-2 focus:ring-brand-500/16 resize-none font-sans leading-relaxed`}),(0,j.jsxs)(`div`,{className:`flex gap-2`,children:[(0,j.jsx)(`button`,{onClick:()=>Ge(e),disabled:ue,className:`px-3 py-1 bg-brand-700 text-white rounded-full text-[12px] font-semibold hover:bg-brand-900 disabled:opacity-60 transition-colors`,children:ue?`저장 중…`:`저장`}),(0,j.jsx)(`button`,{onClick:He,className:`px-3 py-1 border border-ink-200 text-ink-600 rounded-full text-[12px] font-semibold hover:bg-ink-50 transition-colors`,children:`취소`}),(0,j.jsx)(`button`,{onClick:()=>{He(),We(e)},disabled:fe===e.id,className:`ml-auto px-3 py-1 text-red-500 border border-red-200 rounded-full text-[12px] font-semibold hover:bg-red-50 disabled:opacity-60 transition-colors`,children:fe===e.id?`삭제 중…`:`이 행 삭제`})]})]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`p`,{className:P(`text-[13px] leading-relaxed flex-1`,e.is_edited?`text-brand-700`:`text-ink-700`),children:[r,e.is_edited&&(0,j.jsx)(`span`,{className:`ml-1.5 text-[10px] text-brand-500 font-semibold`,children:`수정됨`})]}),(0,j.jsx)(`button`,{onClick:()=>Ve(e),className:`opacity-0 group-hover:opacity-100 transition-opacity w-6 h-6 flex items-center justify-center rounded-md text-ink-400 hover:bg-ink-100 flex-shrink-0 mt-0.5`,title:`수정`,children:(0,j.jsx)(I,{name:`edit`,size:13})}),(0,j.jsx)(`button`,{onClick:()=>Ue(e),disabled:me===e.id,className:`opacity-0 group-hover:opacity-100 transition-opacity w-6 h-6 flex items-center justify-center rounded-md text-ink-400 hover:bg-ink-100 flex-shrink-0 mt-0.5 disabled:opacity-60`,title:`아래에 행 삽입`,children:(0,j.jsx)(I,{name:`plus`,size:13})}),(0,j.jsx)(`button`,{onClick:()=>We(e),disabled:fe===e.id,className:`opacity-0 group-hover:opacity-100 transition-opacity w-6 h-6 flex items-center justify-center rounded-md text-red-400 hover:bg-red-50 flex-shrink-0 mt-0.5 disabled:opacity-60`,title:`이 행 삭제`,children:(0,j.jsx)(I,{name:`trash`,size:13})})]})]},e.id)})})]})}),s===4&&(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm`,children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between px-6 py-4 border-b border-ink-100`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[16px] font-semibold text-ink-800`,children:`리포트`}),nt&&(0,j.jsxs)(`span`,{className:`inline-flex items-center gap-1 mt-1 text-[11px] font-semibold text-green-700 bg-green-100 px-2 py-0.5 rounded-md`,children:[(0,j.jsx)(I,{name:`check`,size:11,strokeWidth:3}),`확정됨`]})]}),!nt&&be&&(0,j.jsx)(`button`,{onClick:$e,disabled:Ae,className:`px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 disabled:opacity-60 transition-colors`,children:Ae?`처리 중…`:`리포트 확정`})]}),be?(0,j.jsx)(`div`,{className:`p-6 grid grid-cols-2 gap-4`,children:Se.map(e=>{let t=we===e.id,n=e.content??e.ai_content??``;return(0,j.jsxs)(`div`,{className:`bg-ink-50 rounded-xl p-4`,children:[(0,j.jsx)(`p`,{className:`text-[11px] font-bold text-brand-700 uppercase tracking-wide mb-2`,children:Jd[e.segment_type]??e.segment_type}),nt?(0,j.jsx)(`p`,{className:`text-[13px] text-ink-700 leading-relaxed whitespace-pre-wrap`,children:n||`—`}):t?(0,j.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,j.jsx)(`textarea`,{value:Ee,onChange:e=>De(e.target.value),rows:5,autoFocus:!0,className:`w-full bg-white rounded-lg px-3 py-2 text-[13px] text-ink-700 leading-relaxed border border-brand-400 outline-none focus:ring-2 focus:ring-brand-500/16 resize-none font-sans`}),(0,j.jsxs)(`div`,{className:`flex gap-2`,children:[(0,j.jsx)(`button`,{onClick:()=>Xe(e),disabled:Oe,className:`px-3 py-1 bg-brand-700 text-white rounded-full text-[12px] font-semibold hover:bg-brand-900 disabled:opacity-60 transition-colors`,children:Oe?`저장 중…`:`저장`}),(0,j.jsx)(`button`,{onClick:Ye,className:`px-3 py-1 border border-ink-200 text-ink-600 rounded-full text-[12px] font-semibold hover:bg-ink-50 transition-colors`,children:`취소`})]})]}):(0,j.jsxs)(`div`,{className:`group relative`,children:[(0,j.jsx)(`textarea`,{value:n,readOnly:!0,rows:5,onClick:()=>qe(e),className:`w-full bg-white rounded-lg px-3 py-2 text-[13px] text-ink-700 leading-relaxed border border-ink-200 outline-none resize-none font-sans cursor-pointer hover:border-brand-400 transition-colors`}),e.is_edited&&(0,j.jsx)(`span`,{className:`absolute top-2 right-2 text-[10px] text-brand-500 font-semibold`,children:`수정됨`})]})]},e.id)})}):(0,j.jsx)(`div`,{className:`py-12 text-center text-[13px] text-ink-400`,children:`리포트를 불러오는 중…`})]}),s===4&&be&&!nt&&(0,j.jsx)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm mt-4 flex flex-col h-[520px] overflow-hidden`,children:(0,j.jsx)(Wd,{report:be,onPatchApplied:Ze})})]})]})}var Xd=ud({patientRefId:ld().min(1,`환자를 선택해주세요.`),date:ld().min(1,`날짜를 입력해주세요.`),sessionType:ld().min(1,`세션 유형을 선택해주세요.`),sessionGoal:ld().optional(),memo:ld().optional()});function Zd(){let e=Je(),{showToast:t}=wd(),[n,r]=(0,_.useState)([]),[i,a]=(0,_.useState)(!1),{register:o,handleSubmit:s,formState:{errors:c}}=Al({resolver:Il(Xd),defaultValues:{sessionType:`개별`}});(0,_.useEffect)(()=>{let e=!1;return xd.list().then(({data:t})=>{e||r(t)}).catch(()=>{e||t({title:`환자 목록을 불러오지 못했습니다`,kind:`error`})}),()=>{e=!0}},[]);let l=async n=>{a(!0);try{let{data:r}=await bd.create({patient_ref_id:n.patientRefId,session_date:n.date,session_type:n.sessionType,session_goal:n.sessionGoal||void 0,memo:n.memo||void 0});t({title:`세션이 생성되었습니다`,body:`이제 음성 파일을 업로드해주세요.`,kind:`success`}),e(`/sessions/${r.id}`)}catch{t({title:`세션 생성에 실패했습니다`,kind:`error`})}finally{a(!1)}},u=e=>P(`w-full h-10 px-3 rounded-lg text-[13px] outline-none transition-all border font-sans`,e?`border-red-400 bg-white`:`border-ink-300 bg-white focus:border-brand-500 focus:ring-2 focus:ring-brand-500/16`);return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5 flex items-center gap-4`,children:[(0,j.jsx)(`button`,{onClick:()=>e(-1),className:`w-8 h-8 rounded-lg flex items-center justify-center text-ink-500 hover:bg-ink-100 transition-colors`,children:(0,j.jsx)(I,{name:`arrowLeft`,size:16})}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:`새 세션`}),(0,j.jsx)(`p`,{className:`text-[13px] text-ink-500 mt-0.5`,children:`세션 기본 정보를 입력해주세요`})]})]}),(0,j.jsx)(`div`,{className:`px-8 pb-8 max-w-[520px]`,children:(0,j.jsx)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm p-6`,children:(0,j.jsxs)(`form`,{onSubmit:s(l),className:`flex flex-col gap-5`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`환자 선택`}),(0,j.jsxs)(`select`,{...o(`patientRefId`),className:P(u(!!c.patientRefId),`cursor-pointer`),children:[(0,j.jsx)(`option`,{value:``,children:`환자를 선택해주세요`}),n.map(e=>(0,j.jsx)(`option`,{value:e.patient_ref_id,children:e.name},e.id))]}),c.patientRefId&&(0,j.jsx)(`p`,{className:`mt-1 text-[11px] text-red-700`,children:c.patientRefId.message})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`날짜`}),(0,j.jsx)(`input`,{type:`date`,...o(`date`),className:u(!!c.date)}),c.date&&(0,j.jsx)(`p`,{className:`mt-1 text-[11px] text-red-700`,children:c.date.message})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-2`,children:`세션 유형`}),(0,j.jsx)(`div`,{className:`flex gap-3`,children:[`개별`,`그룹`].map(e=>(0,j.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer`,children:[(0,j.jsx)(`input`,{type:`radio`,...o(`sessionType`),value:e,className:`accent-brand-700`}),(0,j.jsx)(`span`,{className:`text-[13px] text-ink-800`,children:e})]},e))})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`세션 목표 (선택)`}),(0,j.jsx)(`input`,{...o(`sessionGoal`),placeholder:`이번 세션의 목표를 입력하세요`,className:u()})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`메모 (선택)`}),(0,j.jsx)(`textarea`,{...o(`memo`),rows:3,placeholder:`세션 관련 메모를 입력하세요`,className:P(u(),`h-auto py-2 resize-none`)})]}),(0,j.jsxs)(`div`,{className:`pt-2 flex gap-3`,children:[(0,j.jsx)(`button`,{type:`button`,onClick:()=>e(-1),className:`px-5 py-2 border border-ink-200 text-ink-600 rounded-full text-[13px] font-semibold hover:bg-ink-50 transition-colors`,children:`취소`}),(0,j.jsx)(`button`,{type:`submit`,disabled:i,className:`px-5 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors disabled:opacity-60`,children:i?`생성 중…`:`세션 생성`})]})]})})})]})}var Qd={DRAFT:{label:`초안`,cls:`bg-amber-100 text-amber-700`},REVIEWING:{label:`검토 중`,cls:`bg-blue-100 text-blue-700`},APPROVED:{label:`승인됨`,cls:`bg-green-100 text-green-700`},FINALIZED:{label:`확정됨`,cls:`bg-brand-100 text-brand-700`},DELETED:{label:`삭제됨`,cls:`bg-ink-100 text-ink-500`}};function $d(){let e=Je(),{showToast:t}=wd(),[n,r]=(0,_.useState)([]),[i,a]=(0,_.useState)({}),[o,s]=(0,_.useState)(!0);(0,_.useEffect)(()=>{let e=!1;return(async()=>{try{let[{data:t},{data:n},{data:i}]=await Promise.all([zd.list(),bd.list(),xd.list()]);if(e)return;let o={};for(let e of i)o[e.patient_ref_id]=e.name;let s={};for(let e of n)o[e.patient_ref_id]&&(s[e.id]=o[e.patient_ref_id]);r(t),a(s)}catch{e||t({title:`리포트 목록을 불러오지 못했습니다`,kind:`error`})}finally{e||s(!1)}})(),()=>{e=!0}},[]);let c=async e=>{try{let{data:t}=await zd.download(e.id),n=URL.createObjectURL(new Blob([t])),r=document.createElement(`a`);r.href=n,r.download=`report-${e.id.slice(-8)}.txt`,r.click(),URL.revokeObjectURL(n)}catch{t({title:`다운로드에 실패했습니다`,kind:`error`})}};return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5`,children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:`리포트`}),(0,j.jsxs)(`p`,{className:`text-[13px] text-ink-500 mt-1`,children:[`총 `,n.length,`개 리포트`]})]}),(0,j.jsx)(`div`,{className:`px-8 pb-8`,children:o?(0,j.jsx)(`div`,{className:`text-center py-12 text-[13px] text-ink-400`,children:`불러오는 중…`}):n.length===0?(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm py-16 text-center`,children:[(0,j.jsx)(`p`,{className:`text-[15px] font-semibold text-ink-800`,children:`리포트가 없습니다`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1.5`,children:`세션 분석을 완료하면 리포트가 생성됩니다.`})]}):(0,j.jsx)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm overflow-hidden`,children:(0,j.jsxs)(`table`,{className:`w-full text-[13px] border-collapse`,children:[(0,j.jsx)(`thead`,{children:(0,j.jsx)(`tr`,{className:`bg-ink-50 border-b border-ink-100`,children:[`세션`,`환자`,`상태`,`생성일`,``].map((e,t)=>(0,j.jsx)(`th`,{className:P(`py-2.5 px-5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,t>=4?`text-right`:`text-left`),children:e},t))})}),(0,j.jsx)(`tbody`,{children:n.map(t=>{let n=Qd[t.status]??Qd.DRAFT;return(0,j.jsxs)(`tr`,{className:`border-t border-ink-100 hover:bg-brand-25 transition-colors`,children:[(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-500 text-[12px]`,children:t.session_id.slice(-8)}),(0,j.jsx)(`td`,{className:`px-5 py-3 text-ink-500 text-[12px]`,children:ei(i[t.session_id]??``)}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(`span`,{className:P(`inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-semibold`,n.cls),children:n.label})}),(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-500`,children:Zr(t.generated_at??t.updated_at)}),(0,j.jsx)(`td`,{className:`px-5 py-3 text-right`,children:(0,j.jsxs)(`div`,{className:`inline-flex gap-2 items-center`,children:[(0,j.jsxs)(`button`,{onClick:()=>e(`/sessions/${t.session_id}`),className:`inline-flex items-center gap-1 text-[12px] text-brand-600 font-semibold hover:text-brand-800`,children:[`보기 `,(0,j.jsx)(I,{name:`chevronRight`,size:12,strokeWidth:2.2})]}),(0,j.jsx)(`button`,{onClick:()=>c(t),className:`w-6 h-6 flex items-center justify-center rounded-md text-ink-400 hover:bg-ink-100 hover:text-ink-700 transition-colors`,title:`다운로드`,children:(0,j.jsx)(I,{name:`download`,size:13,strokeWidth:2.2})})]})})]},t.id)})})]})})})]})}var ef=[`.pdf`,`.doc`,`.docx`,`.xls`,`.xlsx`,`.ppt`,`.pptx`,`.hwp`,`.hwpx`,`.txt`,`.rtf`,`.csv`,`.odt`,`.ods`,`.odp`],tf=ef.join(`,`),nf=[{value:`SOAP_NOTE`,label:`SOAP Note`},{value:`CUSTOM`,label:`커스텀`}],rf=ud({name:ld().optional(),template_type:dd([`SOAP_NOTE`,`CUSTOM`]),description:ld().optional()}),af=ud({name:ld().min(1,`템플릿 이름을 입력해주세요.`),description:ld().optional()});function of(e){return e.replace(/\.[^.]+$/,``)}function sf(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return ef.includes(t)}function cf({template:e,onClose:t,onSaved:n}){let{showToast:r}=wd(),i=!!e,[a,o]=(0,_.useState)(null),[s,c]=(0,_.useState)(!1),[l,u]=(0,_.useState)(`idle`),d=(0,_.useRef)(null),f=Al({resolver:Il(rf),defaultValues:{name:``,template_type:`SOAP_NOTE`,description:``}}),p=Al({resolver:Il(af),defaultValues:{name:e?.name??``,description:e?.description??``}}),m=e=>P(`w-full h-10 px-3 rounded-lg text-[13px] outline-none transition-all border font-sans`,e?`border-red-400 bg-white`:`border-ink-300 bg-white focus:border-brand-500 focus:ring-2 focus:ring-brand-500/16`),h=e=>{if(!sf(e.name)){r({title:`지원하지 않는 파일 형식입니다. (pdf, docx, xlsx, hwp)`,kind:`error`});return}o(e)},g=e=>{e.preventDefault(),c(!1);let t=e.dataTransfer.files[0];t&&h(t)},v=async e=>{if(!a){r({title:`업로드할 파일을 선택해주세요.`,kind:`error`});return}let i=Vd(a),o=(e.name?.trim()||of(a.name)).trim()||a.name;try{u(`uploading`);let{data:s}=await Hd.presignedUrl({file_name:a.name,content_type:i,name:o,template_type:e.template_type});await fetch(s.upload_url,{method:`PUT`,headers:{"Content-Type":i},body:a}),u(`confirming`);let{data:c}=await Hd.confirm(s.template_id,{actual_size_bytes:a.size});r({title:`템플릿이 업로드되었습니다`,kind:`success`}),n(c),t()}catch{r({title:`템플릿 업로드에 실패했습니다`,kind:`error`})}finally{u(`idle`)}},y=async i=>{try{let{data:a}=await Hd.update(e.id,{name:i.name,description:i.description||void 0});r({title:`템플릿이 수정되었습니다`,kind:`success`}),n(a),t()}catch{r({title:`템플릿 수정에 실패했습니다`,kind:`error`})}},b=i?p.formState.isSubmitting:f.formState.isSubmitting||l!==`idle`,x=i?b?`저장 중…`:`저장`:l===`uploading`?`S3 업로드 중…`:l===`confirming`?`확인 중…`:`업로드`;return(0,j.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/40`,onClick:t,children:(0,j.jsxs)(`div`,{className:`bg-white rounded-2xl shadow-xl w-full max-w-[480px] mx-4 max-h-[90vh] flex flex-col`,onClick:e=>e.stopPropagation(),children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between px-6 pt-6 pb-4 border-b border-ink-100`,children:[(0,j.jsx)(`h2`,{className:`text-[16px] font-bold text-ink-800`,children:i?`템플릿 편집`:`새 템플릿`}),(0,j.jsx)(`button`,{onClick:t,className:`w-7 h-7 flex items-center justify-center rounded-lg text-ink-400 hover:bg-ink-100 transition-colors`,children:(0,j.jsx)(I,{name:`x`,size:16})})]}),i?(0,j.jsxs)(`form`,{onSubmit:p.handleSubmit(y),className:`px-6 py-5 flex flex-col gap-4 overflow-y-auto`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:[`템플릿 이름 `,(0,j.jsx)(`span`,{className:`text-red-500`,children:`*`})]}),(0,j.jsx)(`input`,{...p.register(`name`),placeholder:`템플릿 이름을 입력하세요`,className:m(!!p.formState.errors.name)}),p.formState.errors.name&&(0,j.jsx)(`p`,{className:`mt-1 text-[11px] text-red-700`,children:p.formState.errors.name.message})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`설명 (선택)`}),(0,j.jsx)(`textarea`,{...p.register(`description`),rows:3,placeholder:`템플릿에 대한 설명을 입력하세요`,className:P(m(),`h-auto py-2 resize-none`)})]}),(0,j.jsxs)(`div`,{className:`pt-1 flex justify-end gap-2`,children:[(0,j.jsx)(`button`,{type:`button`,onClick:t,className:`px-4 py-2 border border-ink-200 text-ink-600 rounded-full text-[13px] font-semibold hover:bg-ink-50 transition-colors`,children:`취소`}),(0,j.jsx)(`button`,{type:`submit`,disabled:b,className:`px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors disabled:opacity-60`,children:x})]})]}):(0,j.jsxs)(`form`,{onSubmit:f.handleSubmit(v),className:`px-6 py-5 flex flex-col gap-4 overflow-y-auto`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:[`파일 `,(0,j.jsx)(`span`,{className:`text-red-500`,children:`*`}),(0,j.jsx)(`span`,{className:`ml-1.5 text-ink-400 font-normal`,children:`pdf, docx, xlsx, hwp, hwpx 등 문서 파일`})]}),a?(0,j.jsxs)(`div`,{className:`flex items-center gap-3 px-4 py-3 rounded-lg border border-brand-300 bg-brand-50`,children:[(0,j.jsx)(I,{name:`fileText`,size:18,className:`text-brand-600 shrink-0`}),(0,j.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,j.jsx)(`p`,{className:`text-[13px] font-medium text-ink-800 truncate`,children:a.name}),(0,j.jsxs)(`p`,{className:`text-[11px] text-ink-400`,children:[(a.size/1024).toFixed(0),` KB`]})]}),(0,j.jsx)(`button`,{type:`button`,onClick:()=>o(null),className:`w-6 h-6 flex items-center justify-center rounded-md text-ink-400 hover:bg-brand-100 transition-colors`,children:(0,j.jsx)(I,{name:`x`,size:13})})]}):(0,j.jsxs)(`div`,{onDragOver:e=>{e.preventDefault(),c(!0)},onDragLeave:()=>c(!1),onDrop:g,onClick:()=>d.current?.click(),className:P(`flex flex-col items-center justify-center gap-2 py-8 rounded-lg border-2 border-dashed cursor-pointer transition-all`,s?`border-brand-500 bg-brand-50`:`border-ink-200 bg-ink-50 hover:border-brand-400 hover:bg-brand-50`),children:[(0,j.jsx)(I,{name:`upload`,size:22,className:`text-ink-400`}),(0,j.jsxs)(`p`,{className:`text-[13px] text-ink-500`,children:[`파일을 드래그하거나 `,(0,j.jsx)(`span`,{className:`text-brand-600 font-semibold`,children:`클릭해서 선택`})]})]}),(0,j.jsx)(`input`,{ref:d,type:`file`,accept:tf,className:`hidden`,onChange:e=>{let t=e.target.files?.[0];t&&h(t)}})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:[`템플릿 이름`,(0,j.jsx)(`span`,{className:`ml-1.5 text-ink-400 font-normal`,children:`미입력 시 파일명으로 자동 설정`})]}),(0,j.jsx)(`input`,{...f.register(`name`),placeholder:a?of(a.name):`템플릿 이름 (선택)`,className:m()})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-2`,children:`유형`}),(0,j.jsx)(`div`,{className:`flex gap-3`,children:nf.map(({value:e,label:t})=>(0,j.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer`,children:[(0,j.jsx)(`input`,{type:`radio`,...f.register(`template_type`),value:e,className:`accent-brand-700`}),(0,j.jsx)(`span`,{className:`text-[13px] text-ink-800`,children:t})]},e))})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`설명 (선택)`}),(0,j.jsx)(`textarea`,{...f.register(`description`),rows:3,placeholder:`템플릿에 대한 설명을 입력하세요`,className:P(m(),`h-auto py-2 resize-none`)})]}),(0,j.jsxs)(`div`,{className:`pt-1 flex justify-end gap-2`,children:[(0,j.jsx)(`button`,{type:`button`,onClick:t,className:`px-4 py-2 border border-ink-200 text-ink-600 rounded-full text-[13px] font-semibold hover:bg-ink-50 transition-colors`,children:`취소`}),(0,j.jsx)(`button`,{type:`submit`,disabled:b,className:`px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors disabled:opacity-60`,children:x})]})]})]})})}var lf={SOAP_NOTE:`SOAP Note`,CUSTOM:`커스텀`},uf=[{label:`전체`,value:`all`},{label:`SOAP Note`,value:`SOAP_NOTE`},{label:`커스텀`,value:`CUSTOM`}];function df(){let{showToast:e}=wd(),[t,n]=(0,_.useState)([]),[r,i]=(0,_.useState)(!0),[a,o]=(0,_.useState)(`all`),[s,c]=(0,_.useState)(null);(0,_.useEffect)(()=>{let t=!1;return Hd.list().then(({data:e})=>{t||n(e)}).catch(()=>{t||e({title:`템플릿 목록을 불러오지 못했습니다`,kind:`error`})}).finally(()=>{t||i(!1)}),()=>{t=!0}},[]);let l=t.filter(e=>a===`all`||e.template_type===a);return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5 flex items-start justify-between`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:`템플릿 관리`}),(0,j.jsx)(`p`,{className:`text-[13px] text-ink-500 mt-1`,children:`세션 및 리포트 템플릿을 관리합니다`})]}),(0,j.jsxs)(`button`,{onClick:()=>c(`create`),className:`flex items-center gap-2 px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors shadow-md`,children:[(0,j.jsx)(I,{name:`plus`,size:15}),`새 템플릿`]})]}),(0,j.jsxs)(`div`,{className:`px-8 pb-8`,children:[(0,j.jsx)(`div`,{className:`flex gap-2 mb-4`,children:uf.map(e=>(0,j.jsx)(`button`,{onClick:()=>o(e.value),className:P(`px-3 py-1.5 rounded-full text-[12px] font-medium border transition-all`,a===e.value?`bg-brand-700 text-white border-brand-700`:`bg-white text-ink-600 border-ink-200 hover:bg-ink-50`),children:e.label},e.value))}),r?(0,j.jsx)(`div`,{className:`text-center py-12 text-[13px] text-ink-400`,children:`불러오는 중…`}):l.length===0?(0,j.jsx)(`div`,{className:`py-12 text-center text-[13px] text-ink-400`,children:a===`all`?`템플릿이 없습니다.`:`'${lf[a]}' 유형에 템플릿이 없습니다.`}):(0,j.jsx)(`div`,{className:`grid grid-cols-2 gap-4`,children:l.map(t=>(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm p-5 hover:border-brand-300 hover:shadow-md transition-all cursor-pointer group`,children:[(0,j.jsxs)(`div`,{className:`flex items-start justify-between mb-3`,children:[(0,j.jsx)(`div`,{className:`w-10 h-10 rounded-xl bg-brand-50 flex items-center justify-center text-brand-600`,children:(0,j.jsx)(I,{name:`fileText`,size:20,strokeWidth:1.8})}),(0,j.jsx)(`span`,{className:`text-[11px] font-semibold bg-ink-100 text-ink-600 px-2 py-0.5 rounded-md`,children:lf[t.template_type]})]}),(0,j.jsx)(`h3`,{className:`text-[14px] font-semibold text-ink-800 leading-snug`,children:t.name}),t.description&&(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1 line-clamp-2`,children:t.description}),(0,j.jsxs)(`div`,{className:`flex items-center justify-between mt-3`,children:[(0,j.jsx)(`p`,{className:`text-[11px] text-ink-400`,children:t.is_system?`시스템 템플릿`:`내 템플릿`}),(0,j.jsxs)(`p`,{className:`text-[11px] text-ink-500`,children:[(0,j.jsx)(`span`,{className:`font-semibold text-ink-800`,children:t.use_count}),`회 사용`]})]}),!t.is_system&&(0,j.jsxs)(`div`,{className:`mt-3 pt-3 border-t border-ink-100 flex gap-2 opacity-0 group-hover:opacity-100 transition-opacity`,children:[(0,j.jsxs)(`button`,{onClick:()=>c(t),className:`flex-1 flex items-center justify-center gap-1.5 py-1.5 rounded-lg text-[12px] font-semibold text-brand-700 bg-brand-50 hover:bg-brand-100 transition-colors`,children:[(0,j.jsx)(I,{name:`edit`,size:13}),`편집`]}),(0,j.jsx)(`button`,{onClick:()=>e({title:`템플릿 복사됨`,kind:`success`}),className:`flex-1 flex items-center justify-center gap-1.5 py-1.5 rounded-lg text-[12px] font-semibold text-ink-600 bg-ink-50 hover:bg-ink-100 transition-colors`,children:`복사`})]})]},t.id))})]}),s!==null&&(0,j.jsx)(cf,{template:s===`create`?void 0:s,onClose:()=>c(null),onSaved:e=>n(t=>s===`create`?[e,...t]:t.map(t=>t.id===e.id?e:t))})]})}var ff=ud({name:ld().min(1,`이름을 입력해주세요.`),email:ld().email(),role:ld()}),pf=ud({current:ld().min(1,`현재 비밀번호를 입력해주세요.`),next:ld().min(8,`비밀번호는 8자 이상이어야 합니다.`),confirm:ld().min(1)}).refine(e=>e.next===e.confirm,{message:`비밀번호가 일치하지 않습니다.`,path:[`confirm`]});function mf({label:e,error:t,...n}){let[r,i]=(0,_.useState)(!1);return(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:e}),(0,j.jsx)(`input`,{...n,onFocus:e=>{i(!0),n.onFocus?.(e)},onBlur:e=>{i(!1),n.onBlur?.(e)},className:P(`w-full h-10 px-3 rounded-md text-[13px] outline-none transition-all border font-sans`,n.disabled?`bg-ink-50 text-ink-400 border-ink-200 cursor-not-allowed`:t?`border-red-400 bg-white`:r?`border-brand-500 bg-white ring-2 ring-brand-500/16`:`border-ink-300 bg-white`)}),t&&(0,j.jsx)(`p`,{className:`mt-1 text-[11px] text-red-700`,children:t})]})}function hf(){let[e,t]=(0,_.useState)(`profile`),n=Ui(e=>e.user),{showToast:r}=wd(),i=nc(),a=Al({resolver:Il(ff),defaultValues:{name:n?.name??``,email:n?.email??``,role:n?.role??``}}),o=Al({resolver:Il(pf)}),s=e=>r({title:`프로필이 저장되었습니다`,kind:`success`}),c=e=>{r({title:`비밀번호가 변경되었습니다`,kind:`success`}),o.reset()};return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5`,children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:`설정`}),(0,j.jsx)(`p`,{className:`text-[13px] text-ink-500 mt-1`,children:`계정 및 프로필 정보를 관리합니다`})]}),(0,j.jsxs)(`div`,{className:`px-8 pb-8 grid grid-cols-[200px_1fr] gap-5 items-start`,children:[(0,j.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[[{id:`profile`,label:`내 프로필`,icon:`user`},{id:`password`,label:`비밀번호 변경`,icon:`lock`}].map(n=>(0,j.jsxs)(`button`,{onClick:()=>t(n.id),className:P(`flex items-center gap-2.5 px-3 py-2.5 rounded-lg text-[13px] font-medium border-none w-full text-left transition-colors`,e===n.id?`bg-brand-50 text-brand-700 font-semibold`:`text-ink-600 hover:bg-ink-50`),children:[(0,j.jsx)(I,{name:n.icon,size:15,strokeWidth:1.8}),n.label]},n.id)),(0,j.jsx)(`div`,{className:`mt-auto pt-6`,children:(0,j.jsxs)(`button`,{onClick:i,className:`flex items-center gap-2.5 px-3 py-2.5 rounded-lg text-[13px] font-medium text-red-600 hover:bg-red-50 w-full text-left transition-colors`,children:[(0,j.jsx)(I,{name:`logout`,size:15,strokeWidth:1.8}),`로그아웃`]})})]}),e===`profile`&&(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm overflow-hidden`,children:[(0,j.jsxs)(`div`,{className:`px-6 py-4 border-b border-ink-100`,children:[(0,j.jsx)(`h2`,{className:`text-[15px] font-semibold text-ink-800`,children:`내 프로필`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-0.5`,children:`공개 프로필 정보를 관리합니다`})]}),(0,j.jsxs)(`div`,{className:`p-6`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-4 mb-6 pb-6 border-b border-ink-100`,children:[(0,j.jsx)(`div`,{className:`w-[72px] h-[72px] rounded-full flex items-center justify-center text-[28px] font-bold text-white flex-shrink-0 shadow-md`,style:{background:`linear-gradient(135deg,#1A3C34 0%,#2D6A4F 70%)`},children:n?.name?.[0]??`?`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:n?.name}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-0.5`,children:n?.email}),(0,j.jsx)(`button`,{className:`mt-2 text-[12px] text-brand-600 font-semibold hover:text-brand-800`,children:`사진 변경`})]})]}),(0,j.jsxs)(`form`,{onSubmit:a.handleSubmit(s),className:`flex flex-col gap-5 max-w-[480px]`,children:[(0,j.jsx)(mf,{label:`이름`,...a.register(`name`),error:a.formState.errors.name?.message}),(0,j.jsx)(mf,{label:`이메일`,type:`email`,disabled:!0,...a.register(`email`)}),(0,j.jsx)(mf,{label:`직함`,disabled:!0,...a.register(`role`)}),(0,j.jsx)(`div`,{className:`pt-2`,children:(0,j.jsx)(`button`,{type:`submit`,className:`px-5 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors`,children:`변경사항 저장`})})]})]})]}),e===`password`&&(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm overflow-hidden`,children:[(0,j.jsxs)(`div`,{className:`px-6 py-4 border-b border-ink-100`,children:[(0,j.jsx)(`h2`,{className:`text-[15px] font-semibold text-ink-800`,children:`비밀번호 변경`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-0.5`,children:`계정 보안을 위해 주기적으로 변경해주세요`})]}),(0,j.jsx)(`div`,{className:`p-6`,children:(0,j.jsxs)(`form`,{onSubmit:o.handleSubmit(c),className:`flex flex-col gap-5 max-w-[480px]`,children:[(0,j.jsx)(mf,{label:`현재 비밀번호`,type:`password`,autoComplete:`current-password`,...o.register(`current`),error:o.formState.errors.current?.message}),(0,j.jsx)(mf,{label:`새 비밀번호`,type:`password`,autoComplete:`new-password`,...o.register(`next`),error:o.formState.errors.next?.message}),(0,j.jsx)(mf,{label:`새 비밀번호 확인`,type:`password`,autoComplete:`new-password`,...o.register(`confirm`),error:o.formState.errors.confirm?.message}),(0,j.jsx)(`div`,{className:`pt-2`,children:(0,j.jsx)(`button`,{type:`submit`,className:`px-5 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors`,children:`비밀번호 변경`})})]})})]})]})]})}var gf={value:()=>{}};function _f(){for(var e=0,t=arguments.length,n={},r;e=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw Error(`unknown type: `+e);return{type:e,name:n}})}vf.prototype=_f.prototype={constructor:vf,on:function(e,t){var n=this._,r=yf(e+``,n),i,a=-1,o=r.length;if(arguments.length<2){for(;++a0)for(var n=Array(i),r=0,i,a;r=0&&(t=e.slice(0,n))!==`xmlns`&&(e=e.slice(n+1)),Sf.hasOwnProperty(t)?{space:Sf[t],local:e}:e}function wf(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===`http://www.w3.org/1999/xhtml`&&t.documentElement.namespaceURI===`http://www.w3.org/1999/xhtml`?t.createElement(e):t.createElementNS(n,e)}}function Tf(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Ef(e){var t=Cf(e);return(t.local?Tf:wf)(t)}function Df(){}function Of(e){return e==null?Df:function(){return this.querySelector(e)}}function kf(e){typeof e!=`function`&&(e=Of(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i=v&&(v=_+1);!(b=g[v])&&++v=0;)(o=r[i])&&(a&&o.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(o,a),a=o);return this}function ap(e){e||=op;function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}for(var n=this._groups,r=n.length,i=Array(r),a=0;at?1:e>=t?0:NaN}function sp(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function cp(){return Array.from(this)}function lp(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?xp:typeof t==`function`?Cp:Sp)(e,t,n??``)):Tp(this.node(),e)}function Tp(e,t){return e.style.getPropertyValue(t)||bp(e).getComputedStyle(e,null).getPropertyValue(t)}function Ep(e){return function(){delete this[e]}}function Dp(e,t){return function(){this[e]=t}}function Op(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function kp(e,t){return arguments.length>1?this.each((t==null?Ep:typeof t==`function`?Op:Dp)(e,t)):this.node()[e]}function Ap(e){return e.trim().split(/^|\s+/)}function jp(e){return e.classList||new Mp(e)}function Mp(e){this._node=e,this._names=Ap(e.getAttribute(`class`)||``)}Mp.prototype={add:function(e){this._names.indexOf(e)<0&&(this._names.push(e),this._node.setAttribute(`class`,this._names.join(` `)))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute(`class`,this._names.join(` `)))},contains:function(e){return this._names.indexOf(e)>=0}};function Np(e,t){for(var n=jp(e),r=-1,i=t.length;++r=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}function cm(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,a;n()=>e;function Am(e,{sourceEvent:t,subject:n,target:r,identifier:i,active:a,x:o,y:s,dx:c,dy:l,dispatch:u}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:a,enumerable:!0,configurable:!0},x:{value:o,enumerable:!0,configurable:!0},y:{value:s,enumerable:!0,configurable:!0},dx:{value:c,enumerable:!0,configurable:!0},dy:{value:l,enumerable:!0,configurable:!0},_:{value:u}})}Am.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function jm(e){return!e.ctrlKey&&!e.button}function Mm(){return this.parentNode}function Nm(e,t){return t??{x:e.x,y:e.y}}function Pm(){return navigator.maxTouchPoints||`ontouchstart`in this}function Fm(){var e=jm,t=Mm,n=Nm,r=Pm,i={},a=_f(`start`,`drag`,`end`),o=0,s,c,l,u,d=0;function f(e){e.on(`mousedown.drag`,p).filter(r).on(`touchstart.drag`,g).on(`touchmove.drag`,_,Cm).on(`touchend.drag touchcancel.drag`,v).style(`touch-action`,`none`).style(`-webkit-tap-highlight-color`,`rgba(0,0,0,0)`)}function p(n,r){if(!(u||!e.call(this,n,r))){var i=y(this,t.call(this,n,r),n,r,`mouse`);i&&(bm(n.view).on(`mousemove.drag`,m,wm).on(`mouseup.drag`,h,wm),Dm(n.view),Tm(n),l=!1,s=n.clientX,c=n.clientY,i(`start`,n))}}function m(e){if(Em(e),!l){var t=e.clientX-s,n=e.clientY-c;l=t*t+n*n>d}i.mouse(`drag`,e)}function h(e){bm(e.view).on(`mousemove.drag mouseup.drag`,null),Om(e.view,l),Em(e),i.mouse(`end`,e)}function g(n,r){if(e.call(this,n,r)){var i=n.changedTouches,a=t.call(this,n,r),o=i.length,s,c;for(s=0;s>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?ih(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?ih(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=Gm.exec(e))?new sh(t[1],t[2],t[3],1):(t=Km.exec(e))?new sh(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=qm.exec(e))?ih(t[1],t[2],t[3],t[4]):(t=Jm.exec(e))?ih(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=Ym.exec(e))?mh(t[1],t[2]/100,t[3]/100,1):(t=Xm.exec(e))?mh(t[1],t[2]/100,t[3]/100,t[4]):Zm.hasOwnProperty(e)?rh(Zm[e]):e===`transparent`?new sh(NaN,NaN,NaN,0):null}function rh(e){return new sh(e>>16&255,e>>8&255,e&255,1)}function ih(e,t,n,r){return r<=0&&(e=t=n=NaN),new sh(e,t,n,r)}function ah(e){return e instanceof Rm||(e=nh(e)),e?(e=e.rgb(),new sh(e.r,e.g,e.b,e.opacity)):new sh}function oh(e,t,n,r){return arguments.length===1?ah(e):new sh(e,t,n,r??1)}function sh(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}Im(sh,oh,Lm(Rm,{brighter(e){return e=e==null?Bm:Bm**+e,new sh(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?zm:zm**+e,new sh(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new sh(fh(this.r),fh(this.g),fh(this.b),dh(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:ch,formatHex:ch,formatHex8:lh,formatRgb:uh,toString:uh}));function ch(){return`#${ph(this.r)}${ph(this.g)}${ph(this.b)}`}function lh(){return`#${ph(this.r)}${ph(this.g)}${ph(this.b)}${ph((isNaN(this.opacity)?1:this.opacity)*255)}`}function uh(){let e=dh(this.opacity);return`${e===1?`rgb(`:`rgba(`}${fh(this.r)}, ${fh(this.g)}, ${fh(this.b)}${e===1?`)`:`, ${e})`}`}function dh(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function fh(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function ph(e){return e=fh(e),(e<16?`0`:``)+e.toString(16)}function mh(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new _h(e,t,n,r)}function hh(e){if(e instanceof _h)return new _h(e.h,e.s,e.l,e.opacity);if(e instanceof Rm||(e=nh(e)),!e)return new _h;if(e instanceof _h)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=t===a?(n-r)/s+(n0&&c<1?0:o,new _h(o,s,c,e.opacity)}function gh(e,t,n,r){return arguments.length===1?hh(e):new _h(e,t,n,r??1)}function _h(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Im(_h,gh,Lm(Rm,{brighter(e){return e=e==null?Bm:Bm**+e,new _h(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?zm:zm**+e,new _h(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new sh(bh(e>=240?e-240:e+120,i,r),bh(e,i,r),bh(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new _h(vh(this.h),yh(this.s),yh(this.l),dh(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=dh(this.opacity);return`${e===1?`hsl(`:`hsla(`}${vh(this.h)}, ${yh(this.s)*100}%, ${yh(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function vh(e){return e=(e||0)%360,e<0?e+360:e}function yh(e){return Math.max(0,Math.min(1,e||0))}function bh(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var xh=e=>()=>e;function Sh(e,t){return function(n){return e+n*t}}function Ch(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function wh(e){return(e=+e)==1?Th:function(t,n){return n-t?Ch(t,n,e):xh(isNaN(t)?n:t)}}function Th(e,t){var n=t-e;return n?Sh(e,n):xh(isNaN(e)?t:e)}var Eh=(function e(t){var n=wh(t);function r(e,t){var r=n((e=oh(e)).r,(t=oh(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=Th(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r})(1);function Dh(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}var Oh=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,kh=new RegExp(Oh.source,`g`);function Ah(e){return function(){return e}}function jh(e){return function(t){return e(t)+``}}function Mh(e,t){var n=Oh.lastIndex=kh.lastIndex=0,r,i,a,o=-1,s=[],c=[];for(e+=``,t+=``;(r=Oh.exec(e))&&(i=kh.exec(t));)(a=i.index)>n&&(a=t.slice(n,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:Dh(r,i)})),n=kh.lastIndex;return n180?t+=360:t-e>180&&(e+=360),a.push({i:n.push(i(n)+`rotate(`,null,r)-2,x:Dh(e,t)}))}function s(e,t,n,a){e===t?t&&n.push(i(n)+`skewX(`+t+r):a.push({i:n.push(i(n)+`skewX(`,null,r)-2,x:Dh(e,t)})}function c(e,t,n,r,a,o){if(e!==n||t!==r){var s=a.push(i(a)+`scale(`,null,`,`,null,`)`);o.push({i:s-4,x:Dh(e,n)},{i:s-2,x:Dh(t,r)})}else (n!==1||r!==1)&&a.push(i(a)+`scale(`+n+`,`+r+`)`)}return function(t,n){var r=[],i=[];return t=e(t),n=e(n),a(t.translateX,t.translateY,n.translateX,n.translateY,r,i),o(t.rotate,n.rotate,r,i),s(t.skewX,n.skewX,r,i),c(t.scaleX,t.scaleY,n.scaleX,n.scaleY,r,i),t=n=null,function(e){for(var t=-1,n=i.length,a;++t=0&&e._call.call(void 0,t),e=e._next;--qh}function lg(){eg=($h=ng.now())+tg,qh=Jh=0;try{cg()}finally{qh=0,dg(),eg=0}}function ug(){var e=ng.now(),t=e-$h;t>Xh&&(tg-=t,$h=e)}function dg(){for(var e,t=Zh,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:Zh=n);Qh=e,fg(r)}function fg(e){qh||(Jh&&=clearTimeout(Jh),e-eg>24?(e<1/0&&(Jh=setTimeout(lg,e-ng.now()-tg)),Yh&&=clearInterval(Yh)):(Yh||=($h=ng.now(),setInterval(ug,Xh)),qh=1,rg(lg)))}function pg(e,t,n){var r=new og;return t=t==null?0:+t,r.restart(n=>{r.stop(),e(n+t)},t,n),r}var mg=_f(`start`,`end`,`cancel`,`interrupt`),hg=[];function gg(e,t,n,r,i,a){var o=e.__transition;if(!o)e.__transition={};else if(n in o)return;bg(e,n,{name:t,index:r,group:i,on:mg,tween:hg,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:0})}function _g(e,t){var n=yg(e,t);if(n.state>0)throw Error(`too late; already scheduled`);return n}function vg(e,t){var n=yg(e,t);if(n.state>3)throw Error(`too late; already running`);return n}function yg(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw Error(`transition not found`);return n}function bg(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=sg(a,0,n.time);function a(e){n.state=1,n.timer.restart(o,n.delay,n.time),n.delay<=e&&o(e-n.delay)}function o(a){var l,u,d,f;if(n.state!==1)return c();for(l in r)if(f=r[l],f.name===n.name){if(f.state===3)return pg(o);f.state===4?(f.state=6,f.timer.stop(),f.on.call(`interrupt`,e,e.__data__,f.index,f.group),delete r[l]):+l2&&r.state<5,r.state=6,r.timer.stop(),r.on.call(i?`interrupt`:`cancel`,e,e.__data__,r.index,r.group),delete n[o]}a&&delete e.__transition}}function Sg(e){return this.each(function(){xg(this,e)})}function Cg(e,t){var n,r;return function(){var i=vg(this,e),a=i.tween;if(a!==n){r=n=a;for(var o=0,s=r.length;o=0&&(e=e.slice(0,t)),!e||e===`start`})}function $g(e,t,n){var r,i,a=Qg(t)?_g:vg;return function(){var o=a(this,e),s=o.on;s!==r&&(i=(r=s).copy()).on(t,n),o.on=i}}function e_(e,t){var n=this._id;return arguments.length<2?yg(this.node(),n).on.on(e):this.each($g(n,e,t))}function t_(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function n_(){return this.on(`end.remove`,t_(this._id))}function r_(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=Of(e));for(var r=this._groups,i=r.length,a=Array(i),o=0;o=(d=(s+l)/2))?s=d:l=d,(g=n>=(f=(c+u)/2))?c=f:u=f,i=a,!(a=a[_=g<<1|h]))return i[_]=o,e;if(p=+e._x.call(null,a.data),m=+e._y.call(null,a.data),t===p&&n===m)return o.next=a,i?i[_]=o:e._root=o,e;do i=i?i[_]=[,,,,]:e._root=[,,,,],(h=t>=(d=(s+l)/2))?s=d:l=d,(g=n>=(f=(c+u)/2))?c=f:u=f;while((_=g<<1|h)==(v=(m>=f)<<1|p>=d));return i[v]=a,i[_]=o,e}function B_(e){var t,n,r=e.length,i,a,o=Array(r),s=Array(r),c=1/0,l=1/0,u=-1/0,d=-1/0;for(n=0;nu&&(u=i),ad&&(d=a));if(c>u||l>d)return this;for(this.cover(c,l).cover(u,d),n=0;ne||e>=i||r>t||t>=a;)switch(l=(tu||(s=m.y0)>d||(c=m.x1)=_)<<1|e>=g)&&(m=f[f.length-1],f[f.length-1]=f[f.length-1-h],f[f.length-1-h]=m)}else{var v=e-+this._x.call(null,p.data),y=t-+this._y.call(null,p.data),b=v*v+y*y;if(b=(f=(o+c)/2))?o=f:c=f,(h=d>=(p=(s+l)/2))?s=p:l=p,t=n,!(n=n[g=h<<1|m]))return this;if(!n.length)break;(t[g+1&3]||t[g+2&3]||t[g+3&3])&&(r=t,_=g)}for(;n.data!==e;)if(i=n,!(n=n.next))return this;return(a=n.next)&&delete n.next,i?(a?i.next=a:delete i.next,this):t?(a?t[g]=a:delete t[g],(n=t[0]||t[1]||t[2]||t[3])&&n===(t[3]||t[2]||t[1]||t[0])&&!n.length&&(r?r[_]=n:this._root=n),this):(this._root=a,this)}function q_(e){for(var t=0,n=e.length;tl.index){var h=u-s.x-s.vx,g=d-s.y-s.vy,_=h*h+g*g;_u+m||ad+m||oe.r&&(e.r=e[t].r)}function c(){if(t){var r,i=t.length,a;for(n=Array(i),r=0;r[t(e,n,o),e])),d;for(n=0,s=Array(i);n(e=(mv*e+hv)%gv)/gv}function vv(e){return e.x}function yv(e){return e.y}var bv=10,xv=Math.PI*(3-Math.sqrt(5));function Sv(e){var t,n=1,r=.001,i=1-r**(1/300),a=0,o=.6,s=new Map,c=sg(d),l=_f(`tick`,`end`),u=_v();e??=[];function d(){f(),l.call(`tick`,t),n1?(n==null?s.delete(e):s.set(e,m(n)),t):s.get(e)},find:function(t,n,r){var i=0,a=e.length,o,s,c,l,u;for(r==null?r=1/0:r*=r,i=0;i1?(l.on(e,n),t):l.on(e)}}}function Cv(){var e,t,n,r,i=ov(-30),a,o=1,s=1/0,c=.81;function l(n){var i,a=e.length,o=nv(e,vv,yv).visitAfter(d);for(r=n,i=0;i=s)){(e.data!==t||e.next)&&(d===0&&(d=sv(n),m+=d*d),f===0&&(f=sv(n),m+=f*f),m()=>e;function Tv(e,{sourceEvent:t,target:n,transform:r,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:i}})}function Ev(e,t,n){this.k=e,this.x=t,this.y=n}Ev.prototype={constructor:Ev,scale:function(e){return e===1?this:new Ev(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new Ev(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return`translate(`+this.x+`,`+this.y+`) scale(`+this.k+`)`}};var Dv=new Ev(1,0,0);Ov.prototype=Ev.prototype;function Ov(e){for(;!e.__zoom;)if(!(e=e.parentNode))return Dv;return e.__zoom}function kv(e){e.stopImmediatePropagation()}function Av(e){e.preventDefault(),e.stopImmediatePropagation()}function jv(e){return(!e.ctrlKey||e.type===`wheel`)&&!e.button}function Mv(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute(`viewBox`)?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function Nv(){return this.__zoom||Dv}function Pv(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function Fv(){return navigator.maxTouchPoints||`ontouchstart`in this}function Iv(e,t,n){var r=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],a=e.invertY(t[0][1])-n[0][1],o=e.invertY(t[1][1])-n[1][1];return e.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}function Lv(){var e=jv,t=Mv,n=Iv,r=Pv,i=Fv,a=[0,1/0],o=[[-1/0,-1/0],[1/0,1/0]],s=250,c=Kh,l=_f(`start`,`zoom`,`end`),u,d,f,p=500,m=150,h=0,g=10;function _(e){e.property(`__zoom`,Nv).on(`wheel.zoom`,w,{passive:!1}).on(`mousedown.zoom`,ee).on(`dblclick.zoom`,T).filter(i).on(`touchstart.zoom`,E).on(`touchmove.zoom`,D).on(`touchend.zoom touchcancel.zoom`,O).style(`-webkit-tap-highlight-color`,`rgba(0,0,0,0)`)}_.transform=function(e,t,n,r){var i=e.selection?e.selection():e;i.property(`__zoom`,Nv),e===i?i.interrupt().each(function(){S(this,arguments).event(r).start().zoom(null,typeof t==`function`?t.apply(this,arguments):t).end()}):x(e,t,n,r)},_.scaleBy=function(e,t,n,r){_.scaleTo(e,function(){return this.__zoom.k*(typeof t==`function`?t.apply(this,arguments):t)},n,r)},_.scaleTo=function(e,r,i,a){_.transform(e,function(){var e=t.apply(this,arguments),a=this.__zoom,s=i==null?b(e):typeof i==`function`?i.apply(this,arguments):i,c=a.invert(s),l=typeof r==`function`?r.apply(this,arguments):r;return n(y(v(a,l),s,c),e,o)},i,a)},_.translateBy=function(e,r,i,a){_.transform(e,function(){return n(this.__zoom.translate(typeof r==`function`?r.apply(this,arguments):r,typeof i==`function`?i.apply(this,arguments):i),t.apply(this,arguments),o)},null,a)},_.translateTo=function(e,r,i,a,s){_.transform(e,function(){var e=t.apply(this,arguments),s=this.__zoom,c=a==null?b(e):typeof a==`function`?a.apply(this,arguments):a;return n(Dv.translate(c[0],c[1]).scale(s.k).translate(typeof r==`function`?-r.apply(this,arguments):-r,typeof i==`function`?-i.apply(this,arguments):-i),e,o)},a,s)};function v(e,t){return t=Math.max(a[0],Math.min(a[1],t)),t===e.k?e:new Ev(t,e.x,e.y)}function y(e,t,n){var r=t[0]-n[0]*e.k,i=t[1]-n[1]*e.k;return r===e.x&&i===e.y?e:new Ev(e.k,r,i)}function b(e){return[(+e[0][0]+ +e[1][0])/2,(+e[0][1]+ +e[1][1])/2]}function x(e,n,r,i){e.on(`start.zoom`,function(){S(this,arguments).event(i).start()}).on(`interrupt.zoom end.zoom`,function(){S(this,arguments).event(i).end()}).tween(`zoom`,function(){var e=this,a=arguments,o=S(e,a).event(i),s=t.apply(e,a),l=r==null?b(s):typeof r==`function`?r.apply(e,a):r,u=Math.max(s[1][0]-s[0][0],s[1][1]-s[0][1]),d=e.__zoom,f=typeof n==`function`?n.apply(e,a):n,p=c(d.invert(l).concat(u/d.k),f.invert(l).concat(u/f.k));return function(e){if(e===1)e=f;else{var t=p(e),n=u/t[2];e=new Ev(n,l[0]-t[0]*n,l[1]-t[1]*n)}o.zoom(null,e)}})}function S(e,t,n){return!n&&e.__zooming||new C(e,t)}function C(e,n){this.that=e,this.args=n,this.active=0,this.sourceEvent=null,this.extent=t.apply(e,n),this.taps=0}C.prototype={event:function(e){return e&&(this.sourceEvent=e),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit(`start`)),this},zoom:function(e,t){return this.mouse&&e!==`mouse`&&(this.mouse[1]=t.invert(this.mouse[0])),this.touch0&&e!==`touch`&&(this.touch0[1]=t.invert(this.touch0[0])),this.touch1&&e!==`touch`&&(this.touch1[1]=t.invert(this.touch1[0])),this.that.__zoom=t,this.emit(`zoom`),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit(`end`)),this},emit:function(e){var t=bm(this.that).datum();l.call(e,this.that,new Tv(e,{sourceEvent:this.sourceEvent,target:_,type:e,transform:this.that.__zoom,dispatch:l}),t)}};function w(t,...i){if(!e.apply(this,arguments))return;var s=S(this,i).event(t),c=this.__zoom,l=Math.max(a[0],Math.min(a[1],c.k*2**r.apply(this,arguments))),u=Sm(t);if(s.wheel)(s.mouse[0][0]!==u[0]||s.mouse[0][1]!==u[1])&&(s.mouse[1]=c.invert(s.mouse[0]=u)),clearTimeout(s.wheel);else if(c.k===l)return;else s.mouse=[u,c.invert(u)],xg(this),s.start();Av(t),s.wheel=setTimeout(d,m),s.zoom(`mouse`,n(y(v(c,l),s.mouse[0],s.mouse[1]),s.extent,o));function d(){s.wheel=null,s.end()}}function ee(t,...r){if(f||!e.apply(this,arguments))return;var i=t.currentTarget,a=S(this,r,!0).event(t),s=bm(t.view).on(`mousemove.zoom`,d,!0).on(`mouseup.zoom`,p,!0),c=Sm(t,i),l=t.clientX,u=t.clientY;Dm(t.view),kv(t),a.mouse=[c,this.__zoom.invert(c)],xg(this),a.start();function d(e){if(Av(e),!a.moved){var t=e.clientX-l,r=e.clientY-u;a.moved=t*t+r*r>h}a.event(e).zoom(`mouse`,n(y(a.that.__zoom,a.mouse[0]=Sm(e,i),a.mouse[1]),a.extent,o))}function p(e){s.on(`mousemove.zoom mouseup.zoom`,null),Om(e.view,a.moved),Av(e),a.event(e).end()}}function T(r,...i){if(e.apply(this,arguments)){var a=this.__zoom,c=Sm(r.changedTouches?r.changedTouches[0]:r,this),l=a.invert(c),u=a.k*(r.shiftKey?.5:2),d=n(y(v(a,u),c,l),t.apply(this,i),o);Av(r),s>0?bm(this).transition().duration(s).call(x,d,c,r):bm(this).call(_.transform,d,c,r)}}function E(t,...n){if(e.apply(this,arguments)){var r=t.touches,i=r.length,a=S(this,n,t.changedTouches.length===i).event(t),o,s,c,l;for(kv(t),s=0;sV.get(`/insight-map`,{params:{report_draft_id:e??void 0,mode:t},paramsSerializer:{indexes:null}}),search:(e,t,n=Rv)=>V.post(`/insight-map/search`,{query:e,report_draft_id:t,mode:n}),getSourceLink:e=>V.get(`/soap-case-indexes/${e}/source-link`),getConceptEvidence:e=>V.get(`/insight-map/concepts/${e}/evidence`)},Bv=[{value:`research`,label:`연구 근거 중심`},{value:`current_patient`,label:`현재 환자 히스토리 포함`},{value:`my_soap`,label:`내 SOAP 기록 포함`}],Vv={ontology:`#89b4fa`,current_patient:`#a6e3a1`,my_soap:`#fab387`},Hv={ontology:`연구 근거 (개념)`,current_patient:`현재 환자 히스토리`,my_soap:`내 SOAP 기록`},Uv={ontology:16,current_patient:13,my_soap:13};function Wv(){let[e]=Kt(),t=e.get(`report_id`)??e.get(`report_draft_id`),n=e.get(`focus`)??``,r=!t,{showToast:i}=wd(),[a,o]=(0,_.useState)(r?[`research`,`my_soap`]:Rv),[s,c]=(0,_.useState)(n),[l,u]=(0,_.useState)({nodes:[],edges:[]}),[d,f]=(0,_.useState)(!1),[p,m]=(0,_.useState)(null),[h,g]=(0,_.useState)(null),[v,y]=(0,_.useState)(!1),b=(0,_.useRef)(null),x=(0,_.useRef)(null),S=e=>{m(e),g(null)},C=async e=>{let t=e.id.replace(/^concept_/,``);y(!0);try{let{data:e}=await zv.getConceptEvidence(t);g(e.evidence)}catch{i({title:`문헌 근거를 불러오지 못했습니다`,kind:`error`}),g([])}finally{y(!1)}},w=(0,_.useCallback)(async()=>{f(!0);try{let{data:e}=await zv.get(t,a);u(e)}catch{i({title:`인사이트맵을 불러오지 못했습니다`,kind:`error`})}finally{f(!1)}},[t,a]),ee=(0,_.useCallback)(async e=>{if(!e.trim()){w();return}f(!0);try{let{data:n}=await zv.search(e.trim(),t,a);u(n)}catch{i({title:`검색에 실패했습니다`,kind:`error`})}finally{f(!1)}},[t,a]),T=e=>{o(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])};(0,_.useEffect)(()=>{s.trim()?ee(s):w()},[t,a]);let E=async e=>{let t=e.id.replace(/^caseidx_/,``);try{let{data:e}=await zv.getSourceLink(t);window.open(e.url,`_blank`,`noopener,noreferrer`)}catch{i({title:`SOAP note를 열 수 없습니다`,kind:`error`})}};(0,_.useEffect)(()=>{let e=b.current,t=x.current;if(!e||!t)return;let n=t.clientWidth,r=t.clientHeight,i=bm(e).attr(`width`,n).attr(`height`,r);i.selectAll(`*`).remove();let a=i.append(`g`);i.call(Lv().scaleExtent([.2,4]).on(`zoom`,e=>a.attr(`transform`,e.transform.toString())));let o=i.append(`defs`);Object.entries(Vv).forEach(([e,t])=>{o.append(`marker`).attr(`id`,`arrow-${e}`).attr(`viewBox`,`0 -5 10 10`).attr(`refX`,18).attr(`refY`,0).attr(`markerWidth`,6).attr(`markerHeight`,6).attr(`orient`,`auto`).append(`path`).attr(`d`,`M0,-5L10,0L0,5`).attr(`fill`,t).attr(`opacity`,.5)});let s=new Map,c=l.nodes.map(e=>{let t={...e};return s.set(e.id,t),t}),u=l.edges.filter(e=>s.has(e.source)&&s.has(e.target)).map(e=>({source:e.source,target:e.target,relation:e.relation})),d=Sv(c).force(`link`,pv(u).id(e=>e.id).distance(120).strength(.4)).force(`charge`,Cv().strength(-380)).force(`center`,L_(n/2,r/2)).force(`collision`,uv(e=>(Uv[e.source_layer]??12)+18)),f=a.append(`g`).selectAll(`line`).data(u).join(`line`).attr(`stroke`,`#313244`).attr(`stroke-width`,1.5).attr(`marker-end`,e=>`url(#arrow-${(typeof e.source==`object`?e.source:s.get(e.source))?.source_layer??`ontology`})`),p=a.append(`g`).selectAll(`text`).data(u).join(`text`).attr(`font-size`,9).attr(`fill`,`#45475a`).attr(`pointer-events`,`none`).text(e=>e.relation),m=a.append(`g`).selectAll(`g`).data(c).join(`g`).style(`cursor`,`pointer`).call(Fm().on(`start`,(e,t)=>{e.active||d.alphaTarget(.3).restart(),t.fx=t.x,t.fy=t.y}).on(`drag`,(e,t)=>{t.fx=e.x,t.fy=e.y}).on(`end`,(e,t)=>{e.active||d.alphaTarget(0),t.fx=null,t.fy=null}));m.append(`circle`).attr(`r`,e=>Uv[e.source_layer]??12).attr(`fill`,e=>(Vv[e.source_layer]??`#89b4fa`)+`22`).attr(`stroke`,e=>Vv[e.source_layer]??`#89b4fa`).attr(`stroke-width`,2).style(`transition`,`filter 0.2s, stroke 0.2s`),m.append(`text`).attr(`dy`,e=>(Uv[e.source_layer]??12)+13).attr(`text-anchor`,`middle`).attr(`font-size`,11).attr(`fill`,`#1e1e2e`).style(`text-shadow`,`0 1px 4px #ffffff, 0 0 8px #ffffff`).style(`pointer-events`,`none`).text(e=>e.label);function h(e){let t=new Set([e.id]),n=new Set;return u.forEach((r,i)=>{let a=typeof r.source==`object`?r.source.id:r.source,o=typeof r.target==`object`?r.target.id:r.target;(a===e.id||o===e.id)&&(t.add(a),t.add(o),n.add(i))}),{ids:t,linkIdx:n}}return m.on(`click`,(e,t)=>{e.stopPropagation();let{ids:n,linkIdx:r}=h(t);m.select(`circle`).attr(`opacity`,e=>n.has(e.id)?1:.2),m.select(`text`).attr(`opacity`,e=>n.has(e.id)?1:.15),f.attr(`stroke`,(e,t)=>r.has(t)?`#89b4fa`:`#313244`),f.attr(`stroke-width`,(e,t)=>r.has(t)?2.5:1.5),S(t)}).on(`mouseover`,function(){bm(this).select(`circle`).style(`filter`,`drop-shadow(0 0 8px currentColor)`)}).on(`mouseout`,function(){bm(this).select(`circle`).style(`filter`,null)}),i.on(`click`,()=>{m.select(`circle`).attr(`opacity`,1),m.select(`text`).attr(`opacity`,1),f.attr(`stroke`,`#313244`).attr(`stroke-width`,1.5)}),d.on(`tick`,()=>{f.attr(`x1`,e=>e.source.x??0).attr(`y1`,e=>e.source.y??0).attr(`x2`,e=>e.target.x??0).attr(`y2`,e=>e.target.y??0),p.attr(`x`,e=>((e.source.x??0)+(e.target.x??0))/2).attr(`y`,e=>((e.source.y??0)+(e.target.y??0))/2),m.attr(`transform`,e=>`translate(${e.x??0},${e.y??0})`)}),()=>{d.stop()}},[l]);let D=Array.from(new Set(l.nodes.map(e=>e.source_layer)));return(0,j.jsxs)(`div`,{className:`flex h-full w-full bg-white text-[#1e1e2e] font-mono overflow-hidden`,children:[(0,j.jsxs)(`div`,{ref:x,className:`flex-1 relative`,children:[(0,j.jsxs)(`div`,{className:`absolute top-0 left-0 right-0 z-10 px-4 py-3 flex items-center gap-3 bg-gradient-to-b from-white to-transparent`,children:[(0,j.jsx)(I,{name:`network`,size:18,className:`text-[#89b4fa]`}),(0,j.jsx)(`p`,{className:`text-[13px] font-bold`,children:`근거 기반 임상 인사이트맵`}),(0,j.jsx)(`div`,{className:`flex-1 flex items-center gap-2 max-w-md ml-4`,children:(0,j.jsxs)(`div`,{className:`flex-1 flex items-center gap-2 bg-[#1e1e2e] border border-[#313244] rounded-lg px-3 py-1.5`,children:[(0,j.jsx)(I,{name:`search`,size:14,className:`text-[#6c7086]`}),(0,j.jsx)(`input`,{value:s,onChange:e=>c(e.target.value),onKeyDown:e=>e.key===`Enter`&&ee(s),placeholder:`예: 낮은 MLU, 짧은 발화`,className:`flex-1 bg-transparent text-[12px] outline-none placeholder-[#6c7086] text-[#cdd6f4]`})]})}),(0,j.jsx)(`div`,{className:`flex items-center gap-3 ml-2`,children:Bv.map(e=>{let t=r&&e.value===`current_patient`;return(0,j.jsxs)(`label`,{title:t?`리포트에서 열었을 때만 사용할 수 있습니다`:void 0,className:P(`flex items-center gap-1.5 text-[11px]`,t?`text-[#45475a] cursor-not-allowed`:`text-[#a6adc8] cursor-pointer`),children:[(0,j.jsx)(`input`,{type:`checkbox`,checked:a.includes(e.value),disabled:t,onChange:()=>T(e.value),className:`accent-[#89b4fa]`}),e.label]},e.value)})})]}),r&&(0,j.jsx)(`p`,{className:`absolute top-12 left-4 z-10 text-[10px] text-[#6c7086]`,children:`리포트 상세에서 열면 현재 환자 히스토리도 함께 볼 수 있어요. 내 SOAP 기록은 담당 환자 전체를 대상으로 표시됩니다.`}),(0,j.jsxs)(`div`,{className:`absolute top-16 left-4 z-10 bg-[#1e1e2e]/85 border border-[#313244] rounded-lg px-3.5 py-2.5 backdrop-blur-sm`,children:[(0,j.jsx)(`h3`,{className:`text-[10px] tracking-[0.12em] uppercase text-[#6c7086] mb-2`,children:`데이터 범위`}),(D.length?D:[`ontology`]).map(e=>(0,j.jsxs)(`div`,{className:`flex items-center gap-1.5 mb-1 last:mb-0`,children:[(0,j.jsx)(`div`,{className:`w-2.5 h-2.5 rounded-full flex-shrink-0`,style:{background:Vv[e]??`#89b4fa`}}),(0,j.jsx)(`span`,{className:`text-[11px] text-[#a6adc8]`,children:Hv[e]??e})]},e))]}),(0,j.jsxs)(`div`,{className:`absolute bottom-4 right-4 z-10 text-[10px] text-[#45475a] text-right leading-relaxed`,children:[`스크롤: 줌 | 드래그: 이동 | 노드 클릭: 연결 강조`,(0,j.jsx)(`br`,{}),`배경 클릭: 초기화`]}),d&&(0,j.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center bg-white/60 z-20`,children:(0,j.jsx)(`span`,{className:`text-[12px] text-[#6c7086] animate-pulse`,children:`불러오는 중…`})}),!d&&l.nodes.length===0&&(0,j.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center text-[#45475a] text-[12px]`,children:`표시할 개념이 없습니다.`}),(0,j.jsx)(`svg`,{ref:b,className:`w-full h-full`})]}),p&&(0,j.jsxs)(`div`,{className:`w-80 flex-shrink-0 border-l border-[#313244] bg-[#1e1e2e] p-4 overflow-y-auto`,children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,j.jsx)(`p`,{className:`text-[13px] font-bold text-[#cdd6f4]`,children:p.label}),(0,j.jsx)(`button`,{onClick:()=>S(null),className:`text-[#6c7086] hover:text-[#cdd6f4]`,children:(0,j.jsx)(I,{name:`x`,size:14})})]}),(0,j.jsx)(`span`,{className:`inline-block text-[10px] px-1.5 py-0.5 rounded mb-2`,style:{background:(Vv[p.source_layer]??`#89b4fa`)+`33`,color:Vv[p.source_layer]??`#89b4fa`},children:p.type}),p.summary&&(0,j.jsx)(`p`,{className:`text-[12px] text-[#a6adc8] leading-relaxed mb-3`,children:p.summary}),p.type===`patient_metric_trend`&&(0,j.jsx)(`pre`,{className:`text-[11px] bg-[#11111b] border border-[#313244] rounded-lg p-2 overflow-x-auto text-[#a6adc8]`,children:JSON.stringify(p.data.trend,null,2)}),p.type===`soap_case_index`&&(0,j.jsx)(`button`,{onClick:()=>E(p),className:`w-full mt-2 py-1.5 bg-[#89b4fa] text-[#1e1e2e] text-[11px] font-semibold rounded-lg hover:brightness-110 transition-all`,children:`SOAP note 보기`}),p.source_layer===`ontology`&&(0,j.jsxs)(`div`,{className:`mt-3 pt-3 border-t border-[#313244]`,children:[h===null&&(0,j.jsx)(`button`,{onClick:()=>C(p),disabled:v,className:`w-full py-1.5 border border-[#313244] text-[#a6adc8] text-[11px] font-semibold rounded-lg hover:bg-[#11111b] transition-colors disabled:opacity-60`,children:v?`문헌 근거 찾는 중…`:`문헌 근거 보기`}),h!==null&&h.length===0&&(0,j.jsx)(`p`,{className:`text-[11px] text-[#45475a]`,children:`관련 문헌 근거를 찾지 못했습니다.`}),h!==null&&h.length>0&&(0,j.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,j.jsx)(`p`,{className:`text-[10px] uppercase tracking-wide text-[#6c7086]`,children:`문헌 근거`}),h.map((e,t)=>(0,j.jsxs)(`div`,{className:`bg-[#11111b] border border-[#313244] rounded-lg p-2`,children:[e.doi_url?(0,j.jsx)(`a`,{href:e.doi_url,target:`_blank`,rel:`noopener noreferrer`,className:`text-[11px] font-semibold text-[#89b4fa] hover:underline`,children:e.title}):(0,j.jsx)(`p`,{className:`text-[11px] font-semibold text-[#cdd6f4]`,children:e.title}),(0,j.jsx)(`p`,{className:`text-[10px] text-[#6c7086] mt-1 line-clamp-3`,children:e.content}),!e.doi_url&&(0,j.jsx)(`p`,{className:`text-[9px] text-[#45475a] mt-1`,children:`원문 링크 없음 (국내 자료)`})]},t))]})]})]})]})}function Gv({children:e}){return Ui(e=>e.isAuthenticated)?(0,j.jsx)(j.Fragment,{children:e}):(0,j.jsx)(yt,{to:`/login`,replace:!0})}function Kv(){return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(sc,{}),(0,j.jsxs)(Ct,{children:[(0,j.jsx)(xt,{path:`/login`,element:(0,j.jsx)(hd,{})}),(0,j.jsx)(xt,{path:`/signup`,element:(0,j.jsx)(yd,{})}),(0,j.jsxs)(xt,{element:(0,j.jsx)(Gv,{children:(0,j.jsx)(oc,{})}),children:[(0,j.jsx)(xt,{index:!0,element:(0,j.jsx)(yt,{to:`/dashboard`,replace:!0})}),(0,j.jsx)(xt,{path:`/dashboard`,element:(0,j.jsx)(Ed,{})}),(0,j.jsx)(xt,{path:`/patients`,element:(0,j.jsx)(Md,{})}),(0,j.jsx)(xt,{path:`/patients/:id`,element:(0,j.jsx)(Nd,{})}),(0,j.jsx)(xt,{path:`/sessions`,element:(0,j.jsx)(Fd,{})}),(0,j.jsx)(xt,{path:`/sessions/new`,element:(0,j.jsx)(Zd,{})}),(0,j.jsx)(xt,{path:`/sessions/:id`,element:(0,j.jsx)(Yd,{})}),(0,j.jsx)(xt,{path:`/reports`,element:(0,j.jsx)($d,{})}),(0,j.jsx)(xt,{path:`/templates`,element:(0,j.jsx)(df,{})}),(0,j.jsx)(xt,{path:`/insight-map`,element:(0,j.jsx)(Wv,{})}),(0,j.jsx)(xt,{path:`/settings`,element:(0,j.jsx)(hf,{})})]}),(0,j.jsx)(xt,{path:`*`,element:(0,j.jsx)(yt,{to:`/dashboard`,replace:!0})})]})]})}var qv=new Yn({defaultOptions:{queries:{retry:1,staleTime:1e3*60*5}}});v.createRoot(document.getElementById(`root`)).render((0,j.jsx)(_.StrictMode,{children:(0,j.jsx)(Lt,{children:(0,j.jsx)($n,{client:qv,children:(0,j.jsx)(Kv,{})})})})); \ No newline at end of file +`+n)}}catch{}}throw e}}_request(e,t){typeof e==`string`?(t||={},t.url=e):t=e||{},t=ds(this.defaults,t);let{transitional:n,paramsSerializer:r,headers:i}=t;n!==void 0&&Bs.assertOptions(n,{silentJSONParsing:Vs.transitional(Vs.boolean),forcedJSONParsing:Vs.transitional(Vs.boolean),clarifyTimeoutError:Vs.transitional(Vs.boolean),legacyInterceptorReqResOrdering:Vs.transitional(Vs.boolean)},!1),r!=null&&(z.isFunction(r)?t.paramsSerializer={serialize:r}:Bs.assertOptions(r,{encode:Vs.function,serialize:Vs.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls===void 0?t.allowAbsoluteUrls=!0:t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls),Bs.assertOptions(t,{baseUrl:Vs.spelling(`baseURL`),withXsrfToken:Vs.spelling(`withXSRFToken`)},!0),t.method=(t.method||this.defaults.method||`get`).toLowerCase();let a=i&&z.merge(i.common,i[t.method]);i&&z.forEach([`delete`,`get`,`head`,`post`,`put`,`patch`,`query`,`common`],e=>{delete i[e]}),t.headers=_o.concat(a,i);let o=[],s=!0;this.interceptors.request.forEach(function(e){if(typeof e.runWhen==`function`&&e.runWhen(t)===!1)return;s&&=e.synchronous;let n=t.transitional||No;n&&n.legacyInterceptorReqResOrdering?o.unshift(e.fulfilled,e.rejected):o.push(e.fulfilled,e.rejected)});let c=[];this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,u=0,d;if(!s){let e=[Is.bind(this),void 0];for(e.unshift(...o),e.push(...c),d=e.length,l=Promise.resolve(t);u{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t,r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,i){n.reason||(n.reason=new Zo(e,r,i),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){let e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}};function Ws(e){return function(t){return e.apply(null,t)}}function Gs(e){return z.isObject(e)&&e.isAxiosError===!0}var Ks={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Ks).forEach(([e,t])=>{Ks[t]=e});function qs(e){let t=new Hs(e),n=Wi(Hs.prototype.request,t);return z.extend(n,Hs.prototype,t,{allOwnKeys:!0}),z.extend(n,t,null,{allOwnKeys:!0}),n.create=function(t){return qs(ds(e,t))},n}var Js=qs(Jo);Js.Axios=Hs,Js.CanceledError=Zo,Js.CancelToken=Us,Js.isCancel=Xo,Js.VERSION=Cs,Js.toFormData=Eo,Js.AxiosError=B,Js.Cancel=Js.CanceledError,Js.all=function(e){return Promise.all(e)},Js.spread=Ws,Js.isAxiosError=Gs,Js.mergeConfig=ds,Js.AxiosHeaders=_o,Js.formToJSON=e=>Go(z.isHTMLForm(e)?new FormData(e):e),Js.getAdapter=Ps.getAdapter,Js.HttpStatusCode=Ks,Js.default=Js;var V=Js.create({baseURL:`http://localhost:8000/api/v1`,headers:{"Content-Type":`application/json`},timeout:15e3});V.interceptors.request.use(e=>{let t=Ui.getState().accessToken;return t&&(e.headers.Authorization=`Bearer ${t}`),e});var Ys=!1,Xs=[],Zs=(e,t=null)=>{Xs.forEach(({resolve:n,reject:r})=>{e?r(e):n(t)}),Xs=[]};V.interceptors.response.use(e=>e,async e=>{let t=e.config;if(e.response?.status!==401||t._retry)return Promise.reject(e);if(Ys)return new Promise((e,t)=>{Xs.push({resolve:e,reject:t})}).then(e=>(t.headers.Authorization=`Bearer ${e}`,V(t)));t._retry=!0,Ys=!0;try{let{refreshToken:n,setTokens:r,logout:i}=Ui.getState();if(!n)return i(),Promise.reject(e);let{data:a}=await Js.post(`http://localhost:8000/api/v1/auth/refresh`,{refresh_token:n}),o=a.access_token;return r(o,a.refresh_token??n),Zs(null,o),t.headers.Authorization=`Bearer ${o}`,V(t)}catch(e){return Zs(e,null),Ui.getState().logout(),Promise.reject(e)}finally{Ys=!1}});var Qs={login:e=>V.post(`/auth/login`,e),signup:e=>V.post(`/auth/signup`,e),refresh:e=>V.post(`/auth/refresh`,{refresh_token:e}),me:()=>V.get(`/auth/me`),logout:()=>V.post(`/auth/logout`)},$s=Bi(e=>({toasts:[],showToast:t=>{let n=Math.random().toString(36).slice(2);e(e=>({toasts:[...e.toasts,{...t,id:n}]})),setTimeout(()=>{e(e=>({toasts:e.toasts.filter(e=>e.id!==n)}))},4e3)},dismiss:t=>e(e=>({toasts:e.toasts.filter(e=>e.id!==t)}))}));function ec(){let{setTokens:e,setUser:t}=Ui(),{showToast:n}=$s(),r=Je();return er({mutationFn:e=>Qs.login(e),onSuccess:({data:i})=>{e(i.access_token,i.refresh_token),t(i.user),n({title:`환영합니다, ${i.user.name} 선생님`,body:`오늘 세션을 확인해보세요.`,kind:`success`}),r(`/dashboard`)},onError:()=>{n({title:`로그인에 실패했습니다`,body:`이메일 또는 비밀번호를 확인해주세요.`,kind:`error`})}})}function tc(){let{setTokens:e,setUser:t}=Ui(),{showToast:n}=$s(),r=Je();return er({mutationFn:e=>Qs.signup(e),onSuccess:({data:i})=>{e(i.access_token,i.refresh_token),t(i.user),n({title:`계정이 생성되었습니다`,body:`환영합니다!`,kind:`success`}),r(`/dashboard`)},onError:()=>{n({title:`회원가입에 실패했습니다`,body:`입력 정보를 다시 확인해주세요.`,kind:`error`})}})}function nc(){let{logout:e}=Ui(),t=Je();return()=>{Qs.logout().catch(()=>{}),e(),t(`/login`)}}var rc=[{to:`/dashboard`,label:`대시보드`,icon:`grid`},{to:`/patients`,label:`환자 관리`,icon:`users`},{to:`/sessions`,label:`세션 관리`,icon:`audio`},{to:`/reports`,label:`리포트`,icon:`report`},{to:`/templates`,label:`템플릿 관리`,icon:`fileText`},{to:`/insight-map`,label:`인사이트맵`,icon:`network`}],ic=()=>(0,j.jsxs)(`svg`,{width:`18`,height:`18`,viewBox:`0 0 64 64`,fill:`none`,"aria-hidden":!0,children:[(0,j.jsx)(`rect`,{x:`6`,y:`26`,width:`6`,height:`12`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`16`,y:`18`,width:`6`,height:`28`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`26`,y:`10`,width:`6`,height:`44`,rx:`3`,fill:`#fff`}),(0,j.jsx)(`rect`,{x:`36`,y:`16`,width:`6`,height:`32`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`46`,y:`24`,width:`6`,height:`16`,rx:`3`,fill:`#B7DEC8`})]});function ac(){let e=Ui(e=>e.user),t=nc(),n=e?.name?.[0]??`?`;return(0,j.jsxs)(`aside`,{className:`w-[248px] flex-shrink-0 bg-white border-r border-ink-200 flex flex-col py-[18px] px-3.5 h-screen sticky top-0`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-2.5 px-2 pb-[18px]`,children:[(0,j.jsx)(`div`,{className:`w-[30px] h-[30px] rounded-lg bg-brand-700 flex items-center justify-center`,children:(0,j.jsx)(ic,{})}),(0,j.jsx)(`span`,{className:`text-base font-bold text-brand-700 tracking-tight`,children:`UtterAI`})]}),(0,j.jsx)(`p`,{className:`text-[10px] font-semibold text-ink-400 tracking-[0.06em] uppercase px-2.5 pt-3 pb-1.5`,children:`메인`}),rc.map(e=>(0,j.jsxs)(Vt,{to:e.to,className:({isActive:e})=>P(`flex items-center gap-2.5 px-2.5 py-2 rounded-lg mb-0.5`,`text-[13px] font-medium transition-colors duration-100`,e?`bg-brand-50 text-brand-700 font-semibold`:`text-ink-600 hover:bg-ink-50`),children:[(0,j.jsx)(I,{name:e.icon,size:16}),e.label]},e.to)),(0,j.jsx)(`p`,{className:`text-[10px] font-semibold text-ink-400 tracking-[0.06em] uppercase px-2.5 pt-3 pb-1.5`,children:`관리`}),(0,j.jsxs)(Vt,{to:`/settings`,className:({isActive:e})=>P(`flex items-center gap-2.5 px-2.5 py-2 rounded-lg mb-0.5`,`text-[13px] font-medium transition-colors duration-100`,e?`bg-brand-50 text-brand-700 font-semibold`:`text-ink-600 hover:bg-ink-50`),children:[(0,j.jsx)(I,{name:`settings`,size:16}),`설정`]}),(0,j.jsxs)(`div`,{className:`mt-auto flex items-center gap-2.5 px-2 pt-2.5 border-t border-ink-100`,children:[(0,j.jsx)(`div`,{className:`w-8 h-8 rounded-full bg-brand-200 text-brand-700 flex items-center justify-center text-xs font-bold flex-shrink-0`,children:n}),(0,j.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,j.jsxs)(`p`,{className:`text-[12px] font-semibold text-ink-800 truncate`,children:[e?.name,` `,(0,j.jsx)(`span`,{className:`font-normal text-ink-500`,children:e?.role})]}),(0,j.jsx)(`p`,{className:`text-[10px] text-ink-500 truncate`,children:e?.email})]}),(0,j.jsx)(`button`,{onClick:t,title:`로그아웃`,className:`w-6.5 h-6.5 rounded-md flex items-center justify-center text-ink-400 hover:bg-red-50 hover:text-red-700 transition-colors flex-shrink-0 ml-0.5`,children:(0,j.jsx)(I,{name:`logout`,size:13})})]})]})}function oc(){let e=new Date,t=`${e.getFullYear()}.${String(e.getMonth()+1).padStart(2,`0`)}.${String(e.getDate()).padStart(2,`0`)} (${[`일`,`월`,`화`,`수`,`목`,`금`,`토`][e.getDay()]})`;return(0,j.jsxs)(`div`,{className:`flex h-screen bg-brand-25`,children:[(0,j.jsx)(ac,{}),(0,j.jsxs)(`div`,{className:`flex-1 flex flex-col min-w-0 overflow-auto`,children:[(0,j.jsxs)(`header`,{className:`h-14 flex-shrink-0 flex items-center justify-end gap-2 px-8 bg-brand-25 border-b border-ink-100 sticky top-0 z-10`,children:[(0,j.jsxs)(`span`,{className:`text-[12px] text-ink-500 bg-white border border-ink-200 rounded-full px-3 py-1 mr-auto`,children:[`📅 `,t]}),(0,j.jsx)(`button`,{className:`w-8 h-8 rounded-lg flex items-center justify-center text-ink-500 hover:bg-white hover:shadow-sm transition-all`,children:(0,j.jsx)(I,{name:`bell`,size:16})}),(0,j.jsx)(`button`,{className:`w-8 h-8 rounded-lg flex items-center justify-center text-ink-500 hover:bg-white hover:shadow-sm transition-all`,children:(0,j.jsx)(I,{name:`search`,size:16})})]}),(0,j.jsx)(`main`,{className:`flex-1 min-h-0`,children:(0,j.jsx)(bt,{})})]})]})}function sc(){let{toasts:e,dismiss:t}=$s();return e.length===0?null:(0,j.jsx)(`div`,{className:`fixed top-5 right-6 z-50 flex flex-col gap-2`,children:e.map(e=>(0,j.jsxs)(`div`,{className:P(`flex items-start gap-3 p-3 bg-white rounded-xl max-w-[340px]`,`shadow-lg border border-brand-100`,`animate-[slideIn_200ms_cubic-bezier(0.22,1,0.36,1)]`),children:[(0,j.jsx)(`div`,{className:P(`w-6 h-6 rounded-full flex items-center justify-center flex-shrink-0`,e.kind===`error`?`bg-red-100 text-red-700`:`bg-brand-100 text-brand-700`),children:(0,j.jsx)(I,{name:e.kind===`error`?`alert`:`check`,size:13,strokeWidth:3})}),(0,j.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,j.jsx)(`p`,{className:`text-[13px] font-semibold text-ink-800`,children:e.title}),e.body&&(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-0.5`,children:e.body})]}),(0,j.jsx)(`button`,{onClick:()=>t(e.id),className:`text-ink-400 hover:text-ink-600 flex-shrink-0 mt-0.5`,children:(0,j.jsx)(I,{name:`x`,size:13})})]},e.id))})}var cc=e=>e.type===`checkbox`,lc=e=>e instanceof Date,uc=e=>e==null,dc=e=>typeof e==`object`,fc=e=>!uc(e)&&!Array.isArray(e)&&dc(e)&&!lc(e),pc=e=>fc(e)&&e.target?cc(e.target)?e.target.checked:e.target.value:e,mc=(e,t)=>t.split(`.`).some((t,n,r)=>!isNaN(Number(t))&&e.has(r.slice(0,n).join(`.`))),hc=e=>{let t=e.constructor&&e.constructor.prototype;return fc(t)&&t.hasOwnProperty(`isPrototypeOf`)},gc=typeof window<`u`&&window.HTMLElement!==void 0&&typeof document<`u`;function _c(e){if(e instanceof Date)return new Date(e);let t=typeof FileList<`u`&&e instanceof FileList;if(gc&&(e instanceof Blob||t))return e;let n=Array.isArray(e);if(!n&&!(fc(e)&&hc(e)))return e;let r=n?[]:Object.create(Object.getPrototypeOf(e));for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[t]=_c(e[t]));return r}var vc=e=>/^\w*$/.test(e),yc=e=>e===void 0,bc=e=>Array.isArray(e)?e.filter(Boolean):[],xc=e=>bc(e.replace(/["|']|\]/g,``).split(/\.|\[/)),H=(e,t,n)=>{if(!t||!fc(e))return n;let r=(vc(t)?[t]:xc(t)).reduce((e,t)=>uc(e)?void 0:e[t],e);return yc(r)||r===e?yc(e[t])?n:e[t]:r},Sc=e=>typeof e==`boolean`,Cc=e=>typeof e==`function`,wc=(e,t,n)=>{let r=-1,i=vc(t)?[t]:xc(t),a=i.length,o=a-1;for(;++r{let i={};for(let a in e)Object.defineProperty(i,a,{get:()=>{let i=a;return t._proxyFormState[i]!==Ec.all&&(t._proxyFormState[i]=!r||Ec.all),n&&(n[i]=!0),e[i]}});return i},Mc=typeof window<`u`?_.useLayoutEffect:_.useEffect,Nc=e=>typeof e==`string`,Pc=(e,t,n,r,i)=>Nc(e)?(r&&t.watch.add(e),H(n,e,i)):Array.isArray(e)?e.map(e=>(r&&t.watch.add(e),H(n,e))):(r&&(t.watchAll=!0),n),Fc=e=>uc(e)||!dc(e);function Ic(e,t,n=new WeakSet){if(e===t)return!0;if(Fc(e)||Fc(t))return Object.is(e,t);if(lc(e)&&lc(t))return Object.is(e.getTime(),t.getTime());let r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;if(n.has(e)||n.has(t))return!0;n.add(e),n.add(t);for(let i of r){let r=e[i];if(!(i in t))return!1;if(i!==`ref`){let e=t[i];if(lc(r)&&lc(e)||(fc(r)||Array.isArray(r))&&(fc(e)||Array.isArray(e))?!Ic(r,e,n):!Object.is(r,e))return!1}}return!0}var Lc=_.createContext(null);Lc.displayName=`HookFormContext`;var Rc=(e,t,n,r,i)=>t?{...n[e],types:{...n[e]&&n[e].types?n[e].types:{},[r]:i||!0}}:{},zc=e=>Array.isArray(e)?e:[e],Bc=()=>{let e=[];return{get observers(){return e},next:t=>{for(let n of e)n.next&&n.next(t)},subscribe:t=>(e.push(t),{unsubscribe:()=>{e=e.filter(e=>e!==t)}}),unsubscribe:()=>{e=[]}}};function Vc(e,t){let n={};for(let r in e)if(e.hasOwnProperty(r)){let i=e[r],a=t[r];if(i&&fc(i)&&a){let e=Vc(i,a);fc(e)&&(n[r]=e)}else e[r]&&(n[r]=a)}return n}var Hc=e=>fc(e)&&!Object.keys(e).length,Uc=e=>e.type===`file`,Wc=e=>{if(!gc)return!1;let t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},Gc=e=>e.type===`select-multiple`,Kc=e=>e.type===`radio`,qc=e=>Kc(e)||cc(e),Jc=e=>Wc(e)&&e.isConnected;function Yc(e,t){let n=t.slice(0,-1).length,r=0;for(;r{for(let t in e)if(Cc(e[t]))return!0;return!1};function Qc(e){return Array.isArray(e)||fc(e)&&!Zc(e)}function $c(e,t={}){for(let n in e){let r=e[n];Qc(r)?(t[n]=Array.isArray(r)?[]:{},$c(r,t[n])):yc(r)||(t[n]=!0)}return t}function el(e){if(e!==!1){if(e===!0)return!0;if(Array.isArray(e)){let t=e.map(e=>el(e));return t.some(e=>e!==void 0)?t:void 0}if(fc(e)){let t={};for(let n in e){let r=el(e[n]);yc(r)||(t[n]=r)}return Object.keys(t).length?t:void 0}}}function tl(e,t,n){n||=$c(t);for(let r in e){let i=e[r];if(Qc(i))yc(t)||Fc(n[r])?n[r]=$c(i,Array.isArray(i)?[]:{}):tl(i,uc(t)?{}:t[r],n[r]);else{let e=t[r];n[r]=!Ic(i,e)}}return el(n)||{}}var nl={value:!1,isValid:!1},rl={value:!0,isValid:!0},il=e=>{if(Array.isArray(e)){if(e.length>1){let t=e.filter(e=>e&&e.checked&&!e.disabled).map(e=>e.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!yc(e[0].attributes.value)?yc(e[0].value)||e[0].value===``?rl:{value:e[0].value,isValid:!0}:rl:nl}return nl},al=(e,{valueAsNumber:t,valueAsDate:n,setValueAs:r})=>yc(e)?e:t?e===``?NaN:e&&+e:n&&Nc(e)?new Date(e):r?r(e):e,ol={isValid:!1,value:null},sl=e=>Array.isArray(e)?e.reduce((e,t)=>t&&t.checked&&!t.disabled?{isValid:!0,value:t.value}:e,ol):ol;function cl(e){let t=e.ref;return Uc(t)?t.files:Kc(t)?sl(e.refs).value:Gc(t)?[...t.selectedOptions].map(({value:e})=>e):cc(t)?il(e.refs).value:al(yc(t.value)?e.ref.value:t.value,e)}var ll=(e,t,n,r)=>{let i={};for(let n of e){let e=H(t,n);e&&wc(i,n,e._f)}return{criteriaMode:n,names:[...e],fields:i,shouldUseNativeValidation:r}},ul=e=>e instanceof RegExp,dl=e=>yc(e)?e:ul(e)?e.source:fc(e)?ul(e.value)?e.value.source:e.value:e,fl=e=>({isOnSubmit:!e||e===Ec.onSubmit,isOnBlur:e===Ec.onBlur,isOnChange:e===Ec.onChange,isOnAll:e===Ec.all,isOnTouch:e===Ec.onTouched}),pl=`AsyncFunction`,ml=e=>!!e&&!!e.validate&&!!(Cc(e.validate)&&e.validate.constructor.name===pl||fc(e.validate)&&Object.values(e.validate).find(e=>e.constructor.name===pl)),hl=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate),gl=(e,t,n)=>!n&&(t.watchAll||t.watch.has(e)||[...t.watch].some(t=>e.startsWith(t)&&/^\.\w+/.test(e.slice(t.length)))),_l=(e,t,n,r)=>{for(let i of n||Object.keys(e)){let n=H(e,i);if(n){let{_f:e,...a}=n;if(e){if(e.refs&&e.refs[0]&&t(e.refs[0],i)&&!r||e.ref&&t(e.ref,e.name)&&!r)return!0;if(_l(a,t))break}else if(fc(a)&&_l(a,t))break}}};function vl(e,t,n){let r=H(e,n);if(r||vc(n))return{error:r,name:n};let i=n.split(`.`);for(;i.length;){let r=i.join(`.`),a=H(t,r),o=H(e,r);if(a&&!Array.isArray(a)&&n!==r)return{name:n};if(o&&o.type)return{name:r,error:o};if(o&&o.root&&o.root.type)return{name:`${r}.root`,error:o.root};i.pop()}return{name:n}}var yl=(e,t,n,r)=>{n(e);let{name:i,...a}=e;return Hc(a)||r&&Object.keys(a).length>=Object.keys(t).length||Object.keys(a).find(e=>t[e]===(!r||Ec.all))},bl=(e,t,n)=>!e||!t||e===t||zc(e).some(e=>e&&(n?e===t:e.startsWith(t)||t.startsWith(e))),xl=(e,t,n,r,i)=>i.isOnAll?!1:!n&&i.isOnTouch?!(t||e):(n?r.isOnBlur:i.isOnBlur)?!e:(n?r.isOnChange:i.isOnChange)?e:!0,Sl=(e,t)=>!bc(H(e,t)).length&&U(e,t),Cl=(e,t,n)=>{let r=zc(H(e,n));return wc(r,kc,t[n]),wc(e,n,r),e};function wl(e,t,n=`validate`){if(Nc(e)||Array.isArray(e)&&e.every(Nc)||Sc(e)&&!e)return{type:n,message:Nc(e)?e:``,ref:t}}var Tl=e=>fc(e)&&!ul(e)?e:{value:e,message:``},El=async(e,t,n,r,i,a)=>{let{ref:o,refs:s,required:c,maxLength:l,minLength:u,min:d,max:f,pattern:p,validate:m,name:h,valueAsNumber:g,mount:_}=e._f,v=H(n,h);if(!_||t.has(h))return{};let y=s?s[0]:o,b=e=>{i&&y.reportValidity&&(y.setCustomValidity(Sc(e)?``:e||``),y.reportValidity())},x={},S=Kc(o),C=cc(o),w=S||C,ee=(g||Uc(o))&&yc(o.value)&&yc(v)||Wc(o)&&o.value===``||v===``||Array.isArray(v)&&!v.length,T=Rc.bind(null,h,r,x),E=(e,t,n,r=Dc.maxLength,i=Dc.minLength)=>{let a=e?t:n;x[h]={type:e?r:i,message:a,ref:o,...T(e?r:i,a)}};if(a?!Array.isArray(v)||!v.length:c&&(!w&&(ee||uc(v))||Sc(v)&&!v||C&&!il(s).isValid||S&&!sl(s).isValid)){let{value:e,message:t}=Nc(c)?{value:!!c,message:c}:Tl(c);if(e&&(x[h]={type:Dc.required,message:t,ref:y,...T(Dc.required,t)},!r))return b(t),x}if(!ee&&(!uc(d)||!uc(f))){let e,t,n=Tl(f),i=Tl(d);if(!uc(v)&&!isNaN(v)){let r=o.valueAsNumber||v&&+v;uc(n.value)||(e=r>n.value),uc(i.value)||(t=rnew Date(new Date().toDateString()+` `+e),s=o.type==`time`,c=o.type==`week`;Nc(n.value)&&v&&(e=s?a(v)>a(n.value):c?v>n.value:r>new Date(n.value)),Nc(i.value)&&v&&(t=s?a(v)+e.value,i=!uc(t.value)&&v.length<+t.value;if((n||i)&&(E(n,e.message,t.message),!r))return b(x[h].message),x}if(p&&!ee&&Nc(v)){let{value:e,message:t}=Tl(p);if(ul(e)&&!v.match(e)&&(x[h]={type:Dc.pattern,message:t,ref:o,...T(Dc.pattern,t)},!r))return b(t),x}if(m){if(Cc(m)){let e=wl(await m(v,n),y);if(e&&(x[h]={...e,...T(Dc.validate,e.message)},!r))return b(e.message),x}else if(fc(m)){let e={};for(let t in m){if(!Hc(e)&&!r)break;let i=wl(await m[t](v,n),y,t);i&&(e={...i,...T(t,i.message)},b(i.message),r&&(x[h]=e))}if(!Hc(e)&&(x[h]={ref:y,...e},!r))return x}}return b(!0),x},Dl={mode:Ec.onSubmit,reValidateMode:Ec.onChange,shouldFocusError:!0},Ol={submitCount:0,isDirty:!1,isReady:!1,isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{}};function kl(e={}){let t={...Dl,...e},n={..._c(Ol),isLoading:Cc(t.defaultValues),errors:t.errors||{},disabled:t.disabled||!1},r={},i=(fc(t.defaultValues)||fc(t.values))&&_c(t.defaultValues||t.values)||{},a=t.shouldUnregister?{}:_c(i),o={action:!1,mount:!1,watch:!1,keepIsValid:!1},s={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set,registerName:new Set},c,l=0,u={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},d={...u},f={...d},p={array:Bc(),state:Bc()},m=t.criteriaMode===Ec.all,h=e=>t=>{clearTimeout(l),l=setTimeout(e,t)},g=async e=>{if(!o.keepIsValid&&!t.disabled&&(d.isValid||f.isValid||e)){let e;t.resolver?(e=Hc((await T()).errors),_()):e=await O({fields:r,onlyCheckValid:!0,eventType:Tc.VALID}),e!==n.isValid&&p.state.next({isValid:e})}},_=(e,r)=>{!t.disabled&&(d.isValidating||d.validatingFields||f.isValidating||f.validatingFields)&&((e||Array.from(s.mount)).forEach(e=>{e&&(r?wc(n.validatingFields,e,r):U(n.validatingFields,e))}),p.state.next({validatingFields:n.validatingFields,isValidating:!Hc(n.validatingFields)}))},v=()=>{n.dirtyFields=tl(i,a)},y=(e,i=[],s,c,l=!0,u=!0)=>{if(c&&s&&!t.disabled){if(o.action=!0,u&&Array.isArray(H(r,e))){let t=s(H(r,e),c.argA,c.argB);l&&wc(r,e,t)}if(u&&Array.isArray(H(n.errors,e))){let t=s(H(n.errors,e),c.argA,c.argB);l&&wc(n.errors,e,t),Sl(n.errors,e)}if((d.touchedFields||f.touchedFields)&&u&&Array.isArray(H(n.touchedFields,e))){let t=s(H(n.touchedFields,e),c.argA,c.argB);l&&wc(n.touchedFields,e,t)}(d.dirtyFields||f.dirtyFields)&&v(),p.state.next({name:e,isDirty:k(e,i),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else wc(a,e,i)},b=(e,t)=>{wc(n.errors,e,t),p.state.next({errors:n.errors})},x=e=>{n.errors=e,p.state.next({errors:n.errors,isValid:!1})},S=e=>{let t=vc(e)?[e]:xc(e),n=a,r=i;for(let e=0;e{let l=H(r,e);if(l){if(S(e))return;let r=yc(H(a,e)),u=H(a,e,yc(s)?H(i,e):s);yc(u)||c&&c.defaultChecked||t?wc(a,e,t?u:cl(l._f)):ie(e,u),o.mount&&!o.action&&(g(),r&&n.isDirty&&(d.isDirty||f.isDirty)&&(k()||(n.isDirty=!1,p.state.next({...n}))))}},w=(e,r,o,s,c)=>{let l=!1,u=!1,m={name:e};if(!t.disabled){if(!o||s){(d.isDirty||f.isDirty)&&(u=n.isDirty,n.isDirty=m.isDirty=k(),l=u!==m.isDirty);let t=Ic(H(i,e),r);u=!!H(n.dirtyFields,e),t===n.isDirty?t?U(n.dirtyFields,e):wc(n.dirtyFields,e,!0):n.dirtyFields=tl(i,a),m.dirtyFields=n.dirtyFields,l||=(d.dirtyFields||f.dirtyFields)&&u!==!t}if(o){let t=H(n.touchedFields,e);t||(wc(n.touchedFields,e,o),m.touchedFields=n.touchedFields,l||=(d.touchedFields||f.touchedFields)&&t!==o)}l&&c&&p.state.next(m)}return l?m:{}},ee=(e,r,i,a)=>{let o=H(n.errors,e),s=(d.isValid||f.isValid)&&Sc(r)&&n.isValid!==r;if(t.delayError&&i?(c=h(()=>b(e,i)),c(t.delayError)):(clearTimeout(l),c=null,i?wc(n.errors,e,i):U(n.errors,e)),(i?!Ic(o,i):o)||!Hc(a)||s){let t={...a,...s&&Sc(r)?{isValid:r}:{},errors:n.errors,name:e};n={...n,...t},p.state.next(t)}},T=async e=>(_(e,!0),await t.resolver(a,t.context,ll(e||s.mount,r,t.criteriaMode,t.shouldUseNativeValidation))),E=async e=>{let{errors:t}=await T(e);if(_(e),e)for(let r of e){let e=H(t,r);e?s.array.has(r)&&fc(e)?Cl(n.errors,{[r]:e},r):wc(n.errors,r,e):U(n.errors,r)}else n.errors=t;return t},D=async({name:t,eventType:r})=>{if(e.validate){let i=await e.validate({formValues:a,formState:n,name:t,eventType:r});if(fc(i))for(let e in i){let t=i[e];t&&he(`${Oc}.${e}`,{message:Nc(t.message)?t.message:``,type:t.type||Dc.validate})}else Nc(i)||!i?he(Oc,{message:i||``,type:Dc.validate}):me(Oc);return i}return!0},O=async({fields:r,onlyCheckValid:i,name:o,eventType:c,context:l={valid:!0,runRootValidation:!1}})=>{if(e.validate&&(l.runRootValidation=!0,!await D({name:o,eventType:c})&&(l.valid=!1,i)))return l.valid;for(let o in r){let u=r[o];if(u){let{_f:r,...p}=u;if(r){let o=s.array.has(r.name),c=u._f&&ml(u._f),p=d.validatingFields||d.isValidating||f.validatingFields||f.isValidating;c&&p&&_([r.name],!0);let h=await El(u,s.disabled,a,m,t.shouldUseNativeValidation&&!i,o);if(c&&p&&_([r.name]),h[r.name]&&(l.valid=!1,i)||(!i&&(H(h,r.name)?o?Cl(n.errors,h,r.name):wc(n.errors,r.name,h[r.name]):U(n.errors,r.name)),e.shouldUseNativeValidation&&h[r.name]))break}!Hc(p)&&await O({context:l,onlyCheckValid:i,fields:p,name:o,eventType:c})}}return l.valid},te=()=>{for(let e of s.unMount){let t=H(r,e);t&&(t._f.refs?t._f.refs.every(e=>!Jc(e)):!Jc(t._f.ref))&&ye(e)}s.unMount=new Set},k=(e,n)=>!t.disabled&&(e&&n&&wc(a,e,n),!Ic(fe(),i)),ne=(e,t,n)=>Pc(e,s,{...o.mount?a:yc(t)?i:Nc(e)?{[e]:t}:t},n,t),re=e=>bc(H(o.mount?a:i,e,t.shouldUnregister?H(i,e,[]):[])),ie=(e,t,n={},i=!1)=>{let o=H(r,e),s=t;if(o){let n=o._f;n&&(!n.disabled&&wc(a,e,al(t,n)),s=Wc(n.ref)&&uc(t)?``:t,Gc(n.ref)?[...n.ref.options].forEach(e=>e.selected=s.includes(e.value)):n.refs?cc(n.ref)?n.refs.forEach(e=>{(!e.defaultChecked||!e.disabled)&&(Array.isArray(s)?e.checked=!!s.find(t=>t===e.value):e.checked=s===e.value||!!s)}):n.refs.forEach(e=>e.checked=e.value===s):Uc(n.ref)?n.ref.value=``:(n.ref.value=s,n.ref.type||p.state.next({name:e,values:i?a:_c(a)})))}(n.shouldDirty||n.shouldTouch)&&w(e,s,n.shouldTouch,n.shouldDirty,!0),n.shouldValidate&&de(e)},ae=(e,t,n,i=!1)=>{for(let a in t){if(!t.hasOwnProperty(a))return;let o=t[a],c=e+`.`+a,l=H(r,c);(s.array.has(e)||fc(o)||l&&!l._f)&&!lc(o)?ae(c,o,n,i):ie(c,o,n,i)}},oe=(e,t,i,c)=>{let l=H(r,e),u=s.array.has(e),m=c?t:_c(t),h=Ic(H(a,e),m);if(h||wc(a,e,m),u)p.array.next({name:e,values:c?a:_c(a)}),(d.isDirty||d.dirtyFields||f.isDirty||f.dirtyFields)&&i.shouldDirty&&(v(),p.state.next({name:e,dirtyFields:n.dirtyFields,isDirty:k(e,m)}));else{let t=Array.isArray(m)&&!m.length||Hc(m);!l||l._f||uc(m)||t?ie(e,m,i,c):ae(e,m,i,c)}if(!h){let t=gl(e,s),r=c?a:_c(a);p.state.next({...t&&n,name:o.mount||t?e:void 0,values:r})}},se=(e,t,n={})=>oe(e,t,n,!1),ce=(e,t={})=>{let r=Cc(e)?e(a):e;if(!Ic(a,r)){a={...a,...r};for(let e of s.mount)oe(e,H(r,e),t,!0);p.state.next({...n,name:void 0,type:void 0,values:a}),t.shouldValidate&&g()}},le=async i=>{o.mount=!0;let l=i.target,u=l.name,h=!0,v=H(r,u),y=e=>{h=Number.isNaN(e)||lc(e)&&isNaN(e.getTime())||Ic(e,H(a,u,e))},b=fl(t.mode),x=fl(t.reValidateMode);if(v){let o,S,C=l.type?cl(v._f):pc(i),E=i.type===Tc.BLUR||i.type===Tc.FOCUS_OUT,te=!hl(v._f)&&!e.validate&&!t.resolver&&!H(n.errors,u)&&!v._f.deps||xl(E,H(n.touchedFields,u),n.isSubmitted,x,b),k=gl(u,s,E);wc(a,u,C),E?(!l||!l.readOnly)&&(v._f.onBlur&&v._f.onBlur(i),c&&c(0)):v._f.onChange&&v._f.onChange(i);let ne=w(u,C,E),re=!Hc(ne)||k;if(!E&&p.state.next({name:u,type:i.type,values:_c(a)}),te)return(d.isValid||f.isValid)&&(t.mode===`onBlur`?E&&g():E||g()),re&&p.state.next({name:u,...k?{}:ne});if(!t.resolver&&e.validate&&await D({name:u,eventType:i.type}),!E&&k&&p.state.next({...n}),t.resolver){let{errors:e}=await T([u]);if(_([u]),y(C),h){let t=vl(n.errors,r,u),i=vl(e,r,t.name||u);o=i.error,u=i.name,S=Hc(e)}}else _([u],!0),o=(await El(v,s.disabled,a,m,t.shouldUseNativeValidation))[u],_([u]),y(C),h&&(o?S=!1:(d.isValid||f.isValid)&&(S=await O({fields:r,onlyCheckValid:!0,name:u,eventType:i.type})));h&&(v._f.deps&&(!Array.isArray(v._f.deps)||v._f.deps.length>0)&&de(v._f.deps),ee(u,S,o,ne))}},ue=(e,t)=>{if(H(n.errors,t)&&e.focus)return e.focus(),1},de=async(e,i={})=>{let a,o,c=zc(e);if(t.resolver){let t=await E(yc(e)?e:c);a=Hc(t),o=e?!c.some(e=>H(t,e)):a}else e?(o=(await Promise.all(c.map(async e=>{let t=H(r,e);return await O({fields:t&&t._f?{[e]:t}:t,eventType:Tc.TRIGGER})}))).every(Boolean),!(!o&&!n.isValid)&&g()):o=a=await O({fields:r,name:e,eventType:Tc.TRIGGER});return p.state.next({...!Nc(e)||(d.isValid||f.isValid)&&a!==n.isValid?{}:{name:e},...t.resolver||!e?{isValid:a}:{},errors:n.errors}),i.shouldFocus&&!o&&_l(r,ue,e?c:s.mount),o},fe=(e,t)=>{let r={...o.mount?a:i};return t&&(r=Vc(t.dirtyFields?n.dirtyFields:n.touchedFields,r)),yc(e)?r:Nc(e)?H(r,e):e.map(e=>H(r,e))},pe=(e,t)=>({invalid:!!H((t||n).errors,e),isDirty:!!H((t||n).dirtyFields,e),error:H((t||n).errors,e),isValidating:!!H(n.validatingFields,e),isTouched:!!H((t||n).touchedFields,e)}),me=e=>{let t=e?zc(e):void 0;t?.forEach(e=>U(n.errors,e)),t?t.forEach(e=>{p.state.next({name:e,errors:n.errors})}):p.state.next({errors:{}})},he=(e,t,i)=>{let a=(H(r,e,{_f:{}})._f||{}).ref,{ref:o,message:s,type:c,...l}=H(n.errors,e)||{};wc(n.errors,e,{...l,...t,ref:a}),p.state.next({name:e,errors:n.errors,isValid:!1}),i&&i.shouldFocus&&a&&a.focus&&a.focus()},ge=(e,t)=>Cc(e)?p.state.subscribe({next:n=>`values`in n&&e(n.values||ne(void 0,t),n)}):ne(e,t,!0),_e=e=>p.state.subscribe({next:t=>{if(bl(e.name,t.name,e.exact)&&yl(t,e.formState||d,ke,e.reRenderRoot)){let r={...a};e.callback({values:r,...n,...t,defaultValues:i})}}}).unsubscribe,ve=e=>(o.mount=!0,f={...f,...e.formState},_e({...e,formState:{...u,...e.formState}})),ye=(e,o={})=>{for(let c of e?zc(e):s.mount)s.mount.delete(c),s.array.delete(c),o.keepValue||(U(r,c),U(a,c)),!o.keepError&&U(n.errors,c),!o.keepDirty&&U(n.dirtyFields,c),!o.keepTouched&&U(n.touchedFields,c),!o.keepIsValidating&&U(n.validatingFields,c),!t.shouldUnregister&&!o.keepDefaultValue&&U(i,c);p.state.next({values:_c(a)}),p.state.next({...n,...o.keepDirty?{isDirty:k()}:{}}),!o.keepIsValid&&g()},be=({disabled:e,name:t})=>{if(Sc(e)&&o.mount||e||s.disabled.has(t)){let n=s.disabled.has(t)!==!!e;e?s.disabled.add(t):s.disabled.delete(t),n&&o.mount&&!o.action&&g()}},xe=(e,n={})=>{let a=H(r,e),c=Sc(n.disabled)||Sc(t.disabled),l=!s.registerName.has(e)&&a&&a._f&&!a._f.mount;return wc(r,e,{...a||{},_f:{...a&&a._f?a._f:{ref:{name:e}},name:e,mount:!0,...n}}),s.mount.add(e),a&&!l?be({disabled:Sc(n.disabled)?n.disabled:t.disabled,name:e}):C(e,!0,n.value),{...c?{disabled:n.disabled||t.disabled}:{},...t.progressive?{required:!!n.required,min:dl(n.min),max:dl(n.max),minLength:dl(n.minLength),maxLength:dl(n.maxLength),pattern:dl(n.pattern)}:{},name:e,onChange:le,onBlur:le,ref:c=>{if(c){s.registerName.add(e),xe(e,n),s.registerName.delete(e),a=H(r,e);let t=yc(c.value)&&c.querySelectorAll&&c.querySelectorAll(`input,select,textarea`)[0]||c,o=qc(t),l=a._f.refs||[];if(o?l.find(e=>e===t):t===a._f.ref)return;wc(r,e,{_f:{...a._f,...o?{refs:[...l.filter(Jc),t,...Array.isArray(H(i,e))?[{}]:[]],ref:{type:t.type,name:e}}:{ref:t}}}),C(e,!1,void 0,t)}else a=H(r,e,{}),a._f&&(a._f.mount=!1),(t.shouldUnregister||n.shouldUnregister)&&!(mc(s.array,e)&&o.action)&&s.unMount.add(e)}}},Se=()=>t.shouldFocusError&&!t.shouldUseNativeValidation&&_l(r,ue,s.mount),Ce=e=>{Sc(e)&&(p.state.next({disabled:e}),_l(r,(t,n)=>{let i=H(r,n);i&&(t.disabled=i._f.disabled||e,Array.isArray(i._f.refs)&&i._f.refs.forEach(t=>{t.disabled=i._f.disabled||e}))},0,!1))},we=(e,i)=>async o=>{let c;o&&(o.preventDefault&&o.preventDefault(),o.persist&&o.persist());let l=_c(a);if(p.state.next({isSubmitting:!0}),t.resolver){let{errors:e,values:t}=await T();_(),n.errors=e,l=_c(t)}else await O({fields:r,eventType:Tc.SUBMIT});if(s.disabled.size)for(let e of s.disabled)U(l,e);if(U(n.errors,kc),Hc(n.errors)){p.state.next({errors:{}});try{await e(l,o)}catch(e){c=e}}else i&&await i({...n.errors},o),Se(),setTimeout(Se);if(p.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:Hc(n.errors)&&!c,submitCount:n.submitCount+1,errors:n.errors}),c)throw c},Te=(e,t={})=>{H(r,e)&&(yc(t.defaultValue)?se(e,_c(H(i,e))):(se(e,t.defaultValue),wc(i,e,_c(t.defaultValue))),t.keepTouched||U(n.touchedFields,e),t.keepDirty||(U(n.dirtyFields,e),n.isDirty=t.defaultValue?k(e,_c(H(i,e))):k()),t.keepError||(U(n.errors,e),d.isValid&&g()),p.state.next({...n}))},Ee=(e,c={})=>{let l=e?_c(e):i,u=_c(l),f=Hc(e),m=f?i:u;if(c.keepDefaultValues||(i=l),!c.keepValues){if(c.keepDirtyValues){let e=new Set([...s.mount,...Object.keys(tl(i,a))]);for(let t of Array.from(e)){let e=H(n.dirtyFields,t),r=H(a,t),i=H(m,t);e&&!yc(r)?wc(m,t,r):!e&&!yc(i)&&se(t,i)}}else{if(gc&&yc(e))for(let e of s.mount){let t=H(r,e);if(t&&t._f){let e=Array.isArray(t._f.refs)?t._f.refs[0]:t._f.ref;if(Wc(e)){let t=e.closest(`form`);if(t){t.reset();break}}}}if(c.keepFieldsRef)for(let e of s.mount)se(e,H(m,e));else r={}}a=t.shouldUnregister?c.keepDefaultValues?_c(i):{}:_c(m),p.array.next({values:{...m}}),p.state.next({values:{...m}})}s={mount:c.keepDirtyValues?s.mount:new Set,unMount:new Set,array:new Set,registerName:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:``},o.mount=!d.isValid||!!c.keepIsValid||!!c.keepDirtyValues||!t.shouldUnregister&&!Hc(m),o.watch=!!t.shouldUnregister,o.keepIsValid=!!c.keepIsValid,o.action=!1,c.keepErrors||(n.errors={}),p.state.next({submitCount:c.keepSubmitCount?n.submitCount:0,isDirty:f?!1:c.keepDirty?n.isDirty:!!(c.keepDefaultValues&&!Ic(e,i)),isSubmitted:c.keepIsSubmitted?n.isSubmitted:!1,dirtyFields:f?{}:c.keepDirtyValues?c.keepDefaultValues&&a?tl(i,a):n.dirtyFields:c.keepDefaultValues&&e?tl(i,e):c.keepDirty?n.dirtyFields:{},touchedFields:c.keepTouched?n.touchedFields:{},errors:c.keepErrors?n.errors:{},isSubmitSuccessful:c.keepIsSubmitSuccessful?n.isSubmitSuccessful:!1,isSubmitting:!1,defaultValues:i})},De=(e,n)=>Ee(Cc(e)?e(a):e,{...t.resetOptions,...n}),Oe=(e,t={})=>{let n=H(r,e),i=n&&n._f;if(i){let e=i.refs?i.refs[0]:i.ref;e.focus&&setTimeout(()=>{e.focus(),t.shouldSelect&&Cc(e.select)&&e.select()})}},ke=e=>{n={...n,...e}},Ae={control:{register:xe,unregister:ye,getFieldState:pe,handleSubmit:we,setError:he,_subscribe:_e,_runSchema:T,_updateIsValidating:_,_focusError:Se,_getWatch:ne,_getDirty:k,_setValid:g,_setFieldArray:y,_setDisabledField:be,_setErrors:x,_getFieldArray:re,_reset:Ee,_resetDefaultValues:()=>Cc(t.defaultValues)&&t.defaultValues().then(e=>{De(e,t.resetOptions),p.state.next({isLoading:!1})}),_removeUnmounted:te,_disableForm:Ce,_subjects:p,_proxyFormState:d,get _fields(){return r},get _formValues(){return a},get _state(){return o},set _state(e){o=e},get _defaultValues(){return i},get _names(){return s},set _names(e){s=e},get _formState(){return n},get _options(){return t},set _options(e){t={...t,...e}}},subscribe:ve,trigger:de,register:xe,handleSubmit:we,watch:ge,setValue:se,setValues:ce,getValues:fe,reset:De,resetField:Te,clearErrors:me,unregister:ye,setError:he,setFocus:Oe,getFieldState:pe};return{...Ae,formControl:Ae}}function Al(e={}){let t=_.useRef(void 0),n=_.useRef(void 0),[r,i]=_.useState(()=>({..._c(Ol),isLoading:Cc(e.defaultValues),errors:e.errors||{},disabled:e.disabled||!1,defaultValues:Cc(e.defaultValues)?void 0:e.defaultValues}));if(!t.current)if(e.formControl)t.current={...e.formControl,formState:r},e.defaultValues&&!Cc(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{let{formControl:n,...i}=kl(e);t.current={...i,formState:r}}let a=t.current.control;return a._options=e,Mc(()=>{let e=a._subscribe({formState:a._proxyFormState,callback:()=>i({...a._formState,defaultValues:a._defaultValues}),reRenderRoot:!0});return i(e=>({...e,isReady:!0})),a._formState.isReady=!0,e},[a]),_.useEffect(()=>a._disableForm(e.disabled),[a,e.disabled]),_.useEffect(()=>{e.mode&&(a._options.mode=e.mode),e.reValidateMode&&(a._options.reValidateMode=e.reValidateMode)},[a,e.mode,e.reValidateMode]),_.useEffect(()=>{e.errors&&(a._setErrors(e.errors),a._focusError())},[a,e.errors]),_.useEffect(()=>{e.shouldUnregister&&a._subjects.state.next({values:a._getWatch()})},[a,e.shouldUnregister]),_.useEffect(()=>{if(a._proxyFormState.isDirty){let e=a._getDirty();e!==r.isDirty&&a._subjects.state.next({isDirty:e})}},[a,r.isDirty]),_.useEffect(()=>{e.values&&!Ic(e.values,n.current)?(a._reset(e.values,{keepFieldsRef:!0,...a._options.resetOptions}),a._options.resetOptions?.keepIsValid||a._setValid(),n.current=e.values,i(e=>({...e}))):a._resetDefaultValues()},[a,e.values]),_.useEffect(()=>{a._state.mount||(a._setValid(),a._state.mount=!0),a._state.watch&&(a._state.watch=!1,a._subjects.state.next({...a._formState})),a._removeUnmounted()}),t.current.formState=_.useMemo(()=>jc(r,a),[a,r]),t.current}var jl=(e,t,n)=>{if(e&&`reportValidity`in e){let r=H(n,t);e.setCustomValidity(r&&r.message||``),e.reportValidity()}},Ml=(e,t)=>{for(let n in t.fields){let r=t.fields[n];r&&r.ref&&`reportValidity`in r.ref?jl(r.ref,n,e):r.refs&&r.refs.forEach(t=>jl(t,n,e))}},Nl=(e,t)=>{t.shouldUseNativeValidation&&Ml(e,t);let n={};for(let r in e){let i=H(t.fields,r),a=Object.assign(e[r]||{},{ref:i&&i.ref});if(Pl(t.names||Object.keys(e),r)){let e=Object.assign({},H(n,r));wc(e,`root`,a),wc(n,r,e)}else wc(n,r,a)}return n},Pl=(e,t)=>e.some(e=>e.startsWith(t+`.`)),Fl=function(e,t){for(var n={};e.length;){var r=e[0],i=r.code,a=r.message,o=r.path.join(`.`);if(!n[o])if(`unionErrors`in r){var s=r.unionErrors[0].errors[0];n[o]={message:s.message,type:s.code}}else n[o]={message:a,type:i};if(`unionErrors`in r&&r.unionErrors.forEach(function(t){return t.errors.forEach(function(t){return e.push(t)})}),t){var c=n[o].types,l=c&&c[r.code];n[o]=Rc(o,t,n,i,l?[].concat(l,r.message):r.message)}e.shift()}return n},Il=function(e,t,n){return n===void 0&&(n={}),function(r,i,a){try{return Promise.resolve(function(i,o){try{var s=Promise.resolve(e[n.mode===`sync`?`parse`:`parseAsync`](r,t)).then(function(e){return a.shouldUseNativeValidation&&Ml({},a),{errors:{},values:n.raw?r:e}})}catch(e){return o(e)}return s&&s.then?s.then(void 0,o):s}(0,function(e){if(function(e){return Array.isArray(e?.errors)}(e))return{values:{},errors:Nl(Fl(e.errors,!a.shouldUseNativeValidation&&a.criteriaMode===`all`),a)};throw e}))}catch(e){return Promise.reject(e)}}},W;(function(e){e.assertEqual=e=>{};function t(e){}e.assertIs=t;function n(e){throw Error()}e.assertNever=n,e.arrayToEnum=e=>{let t={};for(let n of e)t[n]=n;return t},e.getValidEnumValues=t=>{let n=e.objectKeys(t).filter(e=>typeof t[t[e]]!=`number`),r={};for(let e of n)r[e]=t[e];return e.objectValues(r)},e.objectValues=t=>e.objectKeys(t).map(function(e){return t[e]}),e.objectKeys=typeof Object.keys==`function`?e=>Object.keys(e):e=>{let t=[];for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t},e.find=(e,t)=>{for(let n of e)if(t(n))return n},e.isInteger=typeof Number.isInteger==`function`?e=>Number.isInteger(e):e=>typeof e==`number`&&Number.isFinite(e)&&Math.floor(e)===e;function r(e,t=` | `){return e.map(e=>typeof e==`string`?`'${e}'`:e).join(t)}e.joinValues=r,e.jsonStringifyReplacer=(e,t)=>typeof t==`bigint`?t.toString():t})(W||={});var Ll;(function(e){e.mergeShapes=(e,t)=>({...e,...t})})(Ll||={});var G=W.arrayToEnum([`string`,`nan`,`number`,`integer`,`float`,`boolean`,`date`,`bigint`,`symbol`,`function`,`undefined`,`null`,`array`,`object`,`unknown`,`promise`,`void`,`never`,`map`,`set`]),Rl=e=>{switch(typeof e){case`undefined`:return G.undefined;case`string`:return G.string;case`number`:return Number.isNaN(e)?G.nan:G.number;case`boolean`:return G.boolean;case`function`:return G.function;case`bigint`:return G.bigint;case`symbol`:return G.symbol;case`object`:return Array.isArray(e)?G.array:e===null?G.null:e.then&&typeof e.then==`function`&&e.catch&&typeof e.catch==`function`?G.promise:typeof Map<`u`&&e instanceof Map?G.map:typeof Set<`u`&&e instanceof Set?G.set:typeof Date<`u`&&e instanceof Date?G.date:G.object;default:return G.unknown}},K=W.arrayToEnum([`invalid_type`,`invalid_literal`,`custom`,`invalid_union`,`invalid_union_discriminator`,`invalid_enum_value`,`unrecognized_keys`,`invalid_arguments`,`invalid_return_type`,`invalid_date`,`invalid_string`,`too_small`,`too_big`,`invalid_intersection_types`,`not_multiple_of`,`not_finite`]),zl=class e extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name=`ZodError`,this.issues=e}format(e){let t=e||function(e){return e.message},n={_errors:[]},r=e=>{for(let i of e.issues)if(i.code===`invalid_union`)i.unionErrors.map(r);else if(i.code===`invalid_return_type`)r(i.returnTypeError);else if(i.code===`invalid_arguments`)r(i.argumentsError);else if(i.path.length===0)n._errors.push(t(i));else{let e=n,r=0;for(;re.message){let t={},n=[];for(let r of this.issues)if(r.path.length>0){let n=r.path[0];t[n]=t[n]||[],t[n].push(e(r))}else n.push(e(r));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};zl.create=e=>new zl(e);var Bl=(e,t)=>{let n;switch(e.code){case K.invalid_type:n=e.received===G.undefined?`Required`:`Expected ${e.expected}, received ${e.received}`;break;case K.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,W.jsonStringifyReplacer)}`;break;case K.unrecognized_keys:n=`Unrecognized key(s) in object: ${W.joinValues(e.keys,`, `)}`;break;case K.invalid_union:n=`Invalid input`;break;case K.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${W.joinValues(e.options)}`;break;case K.invalid_enum_value:n=`Invalid enum value. Expected ${W.joinValues(e.options)}, received '${e.received}'`;break;case K.invalid_arguments:n=`Invalid function arguments`;break;case K.invalid_return_type:n=`Invalid function return type`;break;case K.invalid_date:n=`Invalid date`;break;case K.invalid_string:typeof e.validation==`object`?`includes`in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position==`number`&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):`startsWith`in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:`endsWith`in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:W.assertNever(e.validation):n=e.validation===`regex`?`Invalid`:`Invalid ${e.validation}`;break;case K.too_small:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at least`:`more than`} ${e.minimum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at least`:`over`} ${e.minimum} character(s)`:e.type===`number`||e.type===`bigint`?`Number must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${e.minimum}`:e.type===`date`?`Date must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${new Date(Number(e.minimum))}`:`Invalid input`;break;case K.too_big:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at most`:`less than`} ${e.maximum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at most`:`under`} ${e.maximum} character(s)`:e.type===`number`?`Number must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`bigint`?`BigInt must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`date`?`Date must be ${e.exact?`exactly`:e.inclusive?`smaller than or equal to`:`smaller than`} ${new Date(Number(e.maximum))}`:`Invalid input`;break;case K.custom:n=`Invalid input`;break;case K.invalid_intersection_types:n=`Intersection results could not be merged`;break;case K.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case K.not_finite:n=`Number must be finite`;break;default:n=t.defaultError,W.assertNever(e)}return{message:n}},Vl=Bl;function Hl(){return Vl}var Ul=e=>{let{data:t,path:n,errorMaps:r,issueData:i}=e,a=[...n,...i.path||[]],o={...i,path:a};if(i.message!==void 0)return{...i,path:a,message:i.message};let s=``,c=r.filter(e=>!!e).slice().reverse();for(let e of c)s=e(o,{data:t,defaultError:s}).message;return{...i,path:a,message:s}};function q(e,t){let n=Hl(),r=Ul({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===Bl?void 0:Bl].filter(e=>!!e)});e.common.issues.push(r)}var J=class e{constructor(){this.value=`valid`}dirty(){this.value===`valid`&&(this.value=`dirty`)}abort(){this.value!==`aborted`&&(this.value=`aborted`)}static mergeArray(e,t){let n=[];for(let r of t){if(r.status===`aborted`)return Y;r.status===`dirty`&&e.dirty(),n.push(r.value)}return{status:e.value,value:n}}static async mergeObjectAsync(t,n){let r=[];for(let e of n){let t=await e.key,n=await e.value;r.push({key:t,value:n})}return e.mergeObjectSync(t,r)}static mergeObjectSync(e,t){let n={};for(let r of t){let{key:t,value:i}=r;if(t.status===`aborted`||i.status===`aborted`)return Y;t.status===`dirty`&&e.dirty(),i.status===`dirty`&&e.dirty(),t.value!==`__proto__`&&(i.value!==void 0||r.alwaysSet)&&(n[t.value]=i.value)}return{status:e.value,value:n}}},Y=Object.freeze({status:`aborted`}),Wl=e=>({status:`dirty`,value:e}),Gl=e=>({status:`valid`,value:e}),Kl=e=>e.status===`aborted`,ql=e=>e.status===`dirty`,Jl=e=>e.status===`valid`,Yl=e=>typeof Promise<`u`&&e instanceof Promise,X;(function(e){e.errToObj=e=>typeof e==`string`?{message:e}:e||{},e.toString=e=>typeof e==`string`?e:e?.message})(X||={});var Xl=class{constructor(e,t,n,r){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=r}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Zl=(e,t)=>{if(Jl(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw Error(`Validation failed but no issues detected.`);return{success:!1,get error(){if(this._error)return this._error;let t=new zl(e.common.issues);return this._error=t,this._error}}};function Z(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(t,i)=>{let{message:a}=e;return t.code===`invalid_enum_value`?{message:a??i.defaultError}:i.data===void 0?{message:a??r??i.defaultError}:t.code===`invalid_type`?{message:a??n??i.defaultError}:{message:i.defaultError}},description:i}}var Q=class{get description(){return this._def.description}_getType(e){return Rl(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:Rl(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new J,ctx:{common:e.parent.common,data:e.data,parsedType:Rl(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(Yl(t))throw Error(`Synchronous parse encountered promise.`);return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Rl(e)};return Zl(n,this._parseSync({data:e,path:n.path,parent:n}))}"~validate"(e){let t={common:{issues:[],async:!!this[`~standard`].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Rl(e)};if(!this[`~standard`].async)try{let n=this._parseSync({data:e,path:[],parent:t});return Jl(n)?{value:n.value}:{issues:t.common.issues}}catch(e){e?.message?.toLowerCase()?.includes(`encountered`)&&(this[`~standard`].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(e=>Jl(e)?{value:e.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Rl(e)},r=this._parse({data:e,path:n.path,parent:n});return Zl(n,await(Yl(r)?r:Promise.resolve(r)))}refine(e,t){let n=e=>typeof t==`string`||t===void 0?{message:t}:typeof t==`function`?t(e):t;return this._refinement((t,r)=>{let i=e(t),a=()=>r.addIssue({code:K.custom,...n(t)});return typeof Promise<`u`&&i instanceof Promise?i.then(e=>e?!0:(a(),!1)):i?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,r)=>e(n)?!0:(r.addIssue(typeof t==`function`?t(n,r):t),!1))}_refinement(e){return new ed({schema:this,typeName:$.ZodEffects,effect:{type:`refinement`,refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this[`~standard`]={version:1,vendor:`zod`,validate:e=>this[`~validate`](e)}}optional(){return td.create(this,this._def)}nullable(){return nd.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Fu.create(this)}promise(){return $u.create(this,this._def)}or(e){return Ru.create([this,e],this._def)}and(e){return Hu.create(this,e,this._def)}transform(e){return new ed({...Z(this._def),schema:this,typeName:$.ZodEffects,effect:{type:`transform`,transform:e}})}default(e){let t=typeof e==`function`?e:()=>e;return new rd({...Z(this._def),innerType:this,defaultValue:t,typeName:$.ZodDefault})}brand(){return new od({typeName:$.ZodBranded,type:this,...Z(this._def)})}catch(e){let t=typeof e==`function`?e:()=>e;return new id({...Z(this._def),innerType:this,catchValue:t,typeName:$.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return sd.create(this,e)}readonly(){return cd.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Ql=/^c[^\s-]{8,}$/i,$l=/^[0-9a-z]+$/,eu=/^[0-9A-HJKMNP-TV-Z]{26}$/i,tu=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,nu=/^[a-z0-9_-]{21}$/i,ru=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,iu=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,au=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,ou=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`,su,cu=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,lu=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,uu=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,du=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,fu=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,pu=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,mu=`((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`,hu=RegExp(`^${mu}$`);function gu(e){let t=`[0-5]\\d`;e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision??(t=`${t}(\\.\\d+)?`);let n=e.precision?`+`:`?`;return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${n}`}function _u(e){return RegExp(`^${gu(e)}$`)}function vu(e){let t=`${mu}T${gu(e)}`,n=[];return n.push(e.local?`Z?`:`Z`),e.offset&&n.push(`([+-]\\d{2}:?\\d{2})`),t=`${t}(${n.join(`|`)})`,RegExp(`^${t}$`)}function yu(e,t){return!!((t===`v4`||!t)&&cu.test(e)||(t===`v6`||!t)&&uu.test(e))}function bu(e,t){if(!ru.test(e))return!1;try{let[n]=e.split(`.`);if(!n)return!1;let r=n.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(n.length+(4-n.length%4)%4,`=`),i=JSON.parse(atob(r));return!(typeof i!=`object`||!i||`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&i.alg!==t)}catch{return!1}}function xu(e,t){return!!((t===`v4`||!t)&&lu.test(e)||(t===`v6`||!t)&&du.test(e))}var Su=class e extends Q{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==G.string){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.string,received:t.parsedType}),Y}let t=new J,n;for(let r of this._def.checks)if(r.kind===`min`)e.data.lengthr.value&&(n=this._getOrReturnCtx(e,n),q(n,{code:K.too_big,maximum:r.value,type:`string`,inclusive:!0,exact:!1,message:r.message}),t.dirty());else if(r.kind===`length`){let i=e.data.length>r.value,a=e.data.lengthe.test(t),{validation:t,code:K.invalid_string,...X.errToObj(n)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(e){return this._addCheck({kind:`email`,...X.errToObj(e)})}url(e){return this._addCheck({kind:`url`,...X.errToObj(e)})}emoji(e){return this._addCheck({kind:`emoji`,...X.errToObj(e)})}uuid(e){return this._addCheck({kind:`uuid`,...X.errToObj(e)})}nanoid(e){return this._addCheck({kind:`nanoid`,...X.errToObj(e)})}cuid(e){return this._addCheck({kind:`cuid`,...X.errToObj(e)})}cuid2(e){return this._addCheck({kind:`cuid2`,...X.errToObj(e)})}ulid(e){return this._addCheck({kind:`ulid`,...X.errToObj(e)})}base64(e){return this._addCheck({kind:`base64`,...X.errToObj(e)})}base64url(e){return this._addCheck({kind:`base64url`,...X.errToObj(e)})}jwt(e){return this._addCheck({kind:`jwt`,...X.errToObj(e)})}ip(e){return this._addCheck({kind:`ip`,...X.errToObj(e)})}cidr(e){return this._addCheck({kind:`cidr`,...X.errToObj(e)})}datetime(e){return typeof e==`string`?this._addCheck({kind:`datetime`,precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:`datetime`,precision:e?.precision===void 0?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...X.errToObj(e?.message)})}date(e){return this._addCheck({kind:`date`,message:e})}time(e){return typeof e==`string`?this._addCheck({kind:`time`,precision:null,message:e}):this._addCheck({kind:`time`,precision:e?.precision===void 0?null:e?.precision,...X.errToObj(e?.message)})}duration(e){return this._addCheck({kind:`duration`,...X.errToObj(e)})}regex(e,t){return this._addCheck({kind:`regex`,regex:e,...X.errToObj(t)})}includes(e,t){return this._addCheck({kind:`includes`,value:e,position:t?.position,...X.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:`startsWith`,value:e,...X.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:`endsWith`,value:e,...X.errToObj(t)})}min(e,t){return this._addCheck({kind:`min`,value:e,...X.errToObj(t)})}max(e,t){return this._addCheck({kind:`max`,value:e,...X.errToObj(t)})}length(e,t){return this._addCheck({kind:`length`,value:e,...X.errToObj(t)})}nonempty(e){return this.min(1,X.errToObj(e))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:`trim`}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toLowerCase`}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toUpperCase`}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind===`datetime`)}get isDate(){return!!this._def.checks.find(e=>e.kind===`date`)}get isTime(){return!!this._def.checks.find(e=>e.kind===`time`)}get isDuration(){return!!this._def.checks.find(e=>e.kind===`duration`)}get isEmail(){return!!this._def.checks.find(e=>e.kind===`email`)}get isURL(){return!!this._def.checks.find(e=>e.kind===`url`)}get isEmoji(){return!!this._def.checks.find(e=>e.kind===`emoji`)}get isUUID(){return!!this._def.checks.find(e=>e.kind===`uuid`)}get isNANOID(){return!!this._def.checks.find(e=>e.kind===`nanoid`)}get isCUID(){return!!this._def.checks.find(e=>e.kind===`cuid`)}get isCUID2(){return!!this._def.checks.find(e=>e.kind===`cuid2`)}get isULID(){return!!this._def.checks.find(e=>e.kind===`ulid`)}get isIP(){return!!this._def.checks.find(e=>e.kind===`ip`)}get isCIDR(){return!!this._def.checks.find(e=>e.kind===`cidr`)}get isBase64(){return!!this._def.checks.find(e=>e.kind===`base64`)}get isBase64url(){return!!this._def.checks.find(e=>e.kind===`base64url`)}get minLength(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuenew Su({checks:[],typeName:$.ZodString,coerce:e?.coerce??!1,...Z(e)});function Cu(e,t){let n=(e.toString().split(`.`)[1]||``).length,r=(t.toString().split(`.`)[1]||``).length,i=n>r?n:r;return Number.parseInt(e.toFixed(i).replace(`.`,``))%Number.parseInt(t.toFixed(i).replace(`.`,``))/10**i}var wu=class e extends Q{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==G.number){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.number,received:t.parsedType}),Y}let t,n=new J;for(let r of this._def.checks)r.kind===`int`?W.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),q(t,{code:K.invalid_type,expected:`integer`,received:`float`,message:r.message}),n.dirty()):r.kind===`min`?(r.inclusive?e.datar.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),q(t,{code:K.too_big,maximum:r.value,type:`number`,inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty()):r.kind===`multipleOf`?Cu(e.data,r.value)!==0&&(t=this._getOrReturnCtx(e,t),q(t,{code:K.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):r.kind===`finite`?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),q(t,{code:K.not_finite,message:r.message}),n.dirty()):W.assertNever(r);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit(`min`,e,!0,X.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,X.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,X.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,X.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:X.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(e){return this._addCheck({kind:`int`,message:X.toString(e)})}positive(e){return this._addCheck({kind:`min`,value:0,inclusive:!1,message:X.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:0,inclusive:!1,message:X.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:0,inclusive:!0,message:X.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:0,inclusive:!0,message:X.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:X.toString(t)})}finite(e){return this._addCheck({kind:`finite`,message:X.toString(e)})}safe(e){return this._addCheck({kind:`min`,inclusive:!0,value:-(2**53-1),message:X.toString(e)})._addCheck({kind:`max`,inclusive:!0,value:2**53-1,message:X.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuee.kind===`int`||e.kind===`multipleOf`&&W.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks)if(n.kind===`finite`||n.kind===`int`||n.kind===`multipleOf`)return!0;else n.kind===`min`?(t===null||n.value>t)&&(t=n.value):n.kind===`max`&&(e===null||n.valuenew wu({checks:[],typeName:$.ZodNumber,coerce:e?.coerce||!1,...Z(e)});var Tu=class e extends Q{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==G.bigint)return this._getInvalidInput(e);let t,n=new J;for(let r of this._def.checks)r.kind===`min`?(r.inclusive?e.datar.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),q(t,{code:K.too_big,type:`bigint`,maximum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty()):r.kind===`multipleOf`?e.data%r.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),q(t,{code:K.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):W.assertNever(r);return{status:n.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.bigint,received:t.parsedType}),Y}gte(e,t){return this.setLimit(`min`,e,!0,X.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,X.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,X.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,X.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:X.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!1,message:X.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!1,message:X.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!0,message:X.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!0,message:X.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:X.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuenew Tu({checks:[],typeName:$.ZodBigInt,coerce:e?.coerce??!1,...Z(e)});var Eu=class extends Q{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==G.boolean){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.boolean,received:t.parsedType}),Y}return Gl(e.data)}};Eu.create=e=>new Eu({typeName:$.ZodBoolean,coerce:e?.coerce||!1,...Z(e)});var Du=class e extends Q{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==G.date){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.date,received:t.parsedType}),Y}if(Number.isNaN(e.data.getTime()))return q(this._getOrReturnCtx(e),{code:K.invalid_date}),Y;let t=new J,n;for(let r of this._def.checks)r.kind===`min`?e.data.getTime()r.value&&(n=this._getOrReturnCtx(e,n),q(n,{code:K.too_big,message:r.message,inclusive:!0,exact:!1,maximum:r.value,type:`date`}),t.dirty()):W.assertNever(r);return{status:t.value,value:new Date(e.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(e,t){return this._addCheck({kind:`min`,value:e.getTime(),message:X.toString(t)})}max(e,t){return this._addCheck({kind:`max`,value:e.getTime(),message:X.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e==null?null:new Date(e)}get maxDate(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuenew Du({checks:[],coerce:e?.coerce||!1,typeName:$.ZodDate,...Z(e)});var Ou=class extends Q{_parse(e){if(this._getType(e)!==G.symbol){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.symbol,received:t.parsedType}),Y}return Gl(e.data)}};Ou.create=e=>new Ou({typeName:$.ZodSymbol,...Z(e)});var ku=class extends Q{_parse(e){if(this._getType(e)!==G.undefined){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.undefined,received:t.parsedType}),Y}return Gl(e.data)}};ku.create=e=>new ku({typeName:$.ZodUndefined,...Z(e)});var Au=class extends Q{_parse(e){if(this._getType(e)!==G.null){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.null,received:t.parsedType}),Y}return Gl(e.data)}};Au.create=e=>new Au({typeName:$.ZodNull,...Z(e)});var ju=class extends Q{constructor(){super(...arguments),this._any=!0}_parse(e){return Gl(e.data)}};ju.create=e=>new ju({typeName:$.ZodAny,...Z(e)});var Mu=class extends Q{constructor(){super(...arguments),this._unknown=!0}_parse(e){return Gl(e.data)}};Mu.create=e=>new Mu({typeName:$.ZodUnknown,...Z(e)});var Nu=class extends Q{_parse(e){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.never,received:t.parsedType}),Y}};Nu.create=e=>new Nu({typeName:$.ZodNever,...Z(e)});var Pu=class extends Q{_parse(e){if(this._getType(e)!==G.undefined){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.void,received:t.parsedType}),Y}return Gl(e.data)}};Pu.create=e=>new Pu({typeName:$.ZodVoid,...Z(e)});var Fu=class e extends Q{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),r=this._def;if(t.parsedType!==G.array)return q(t,{code:K.invalid_type,expected:G.array,received:t.parsedType}),Y;if(r.exactLength!==null){let e=t.data.length>r.exactLength.value,i=t.data.lengthr.maxLength.value&&(q(t,{code:K.too_big,maximum:r.maxLength.value,type:`array`,inclusive:!0,exact:!1,message:r.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((e,n)=>r.type._parseAsync(new Xl(t,e,t.path,n)))).then(e=>J.mergeArray(n,e));let i=[...t.data].map((e,n)=>r.type._parseSync(new Xl(t,e,t.path,n)));return J.mergeArray(n,i)}get element(){return this._def.type}min(t,n){return new e({...this._def,minLength:{value:t,message:X.toString(n)}})}max(t,n){return new e({...this._def,maxLength:{value:t,message:X.toString(n)}})}length(t,n){return new e({...this._def,exactLength:{value:t,message:X.toString(n)}})}nonempty(e){return this.min(1,e)}};Fu.create=(e,t)=>new Fu({type:e,minLength:null,maxLength:null,exactLength:null,typeName:$.ZodArray,...Z(t)});function Iu(e){if(e instanceof Lu){let t={};for(let n in e.shape){let r=e.shape[n];t[n]=td.create(Iu(r))}return new Lu({...e._def,shape:()=>t})}else if(e instanceof Fu)return new Fu({...e._def,type:Iu(e.element)});else if(e instanceof td)return td.create(Iu(e.unwrap()));else if(e instanceof nd)return nd.create(Iu(e.unwrap()));else if(e instanceof Uu)return Uu.create(e.items.map(e=>Iu(e)));else return e}var Lu=class e extends Q{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=W.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==G.object){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.object,received:t.parsedType}),Y}let{status:t,ctx:n}=this._processInputParams(e),{shape:r,keys:i}=this._getCached(),a=[];if(!(this._def.catchall instanceof Nu&&this._def.unknownKeys===`strip`))for(let e in n.data)i.includes(e)||a.push(e);let o=[];for(let e of i){let t=r[e],i=n.data[e];o.push({key:{status:`valid`,value:e},value:t._parse(new Xl(n,i,n.path,e)),alwaysSet:e in n.data})}if(this._def.catchall instanceof Nu){let e=this._def.unknownKeys;if(e===`passthrough`)for(let e of a)o.push({key:{status:`valid`,value:e},value:{status:`valid`,value:n.data[e]}});else if(e===`strict`)a.length>0&&(q(n,{code:K.unrecognized_keys,keys:a}),t.dirty());else if(e!==`strip`)throw Error(`Internal ZodObject error: invalid unknownKeys value.`)}else{let e=this._def.catchall;for(let t of a){let r=n.data[t];o.push({key:{status:`valid`,value:t},value:e._parse(new Xl(n,r,n.path,t)),alwaysSet:t in n.data})}}return n.common.async?Promise.resolve().then(async()=>{let e=[];for(let t of o){let n=await t.key,r=await t.value;e.push({key:n,value:r,alwaysSet:t.alwaysSet})}return e}).then(e=>J.mergeObjectSync(t,e)):J.mergeObjectSync(t,o)}get shape(){return this._def.shape()}strict(t){return X.errToObj,new e({...this._def,unknownKeys:`strict`,...t===void 0?{}:{errorMap:(e,n)=>{let r=this._def.errorMap?.(e,n).message??n.defaultError;return e.code===`unrecognized_keys`?{message:X.errToObj(t).message??r}:{message:r}}}})}strip(){return new e({...this._def,unknownKeys:`strip`})}passthrough(){return new e({...this._def,unknownKeys:`passthrough`})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:$.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let n={};for(let e of W.objectKeys(t))t[e]&&this.shape[e]&&(n[e]=this.shape[e]);return new e({...this._def,shape:()=>n})}omit(t){let n={};for(let e of W.objectKeys(this.shape))t[e]||(n[e]=this.shape[e]);return new e({...this._def,shape:()=>n})}deepPartial(){return Iu(this)}partial(t){let n={};for(let e of W.objectKeys(this.shape)){let r=this.shape[e];t&&!t[e]?n[e]=r:n[e]=r.optional()}return new e({...this._def,shape:()=>n})}required(t){let n={};for(let e of W.objectKeys(this.shape))if(t&&!t[e])n[e]=this.shape[e];else{let t=this.shape[e];for(;t instanceof td;)t=t._def.innerType;n[e]=t}return new e({...this._def,shape:()=>n})}keyof(){return Xu(W.objectKeys(this.shape))}};Lu.create=(e,t)=>new Lu({shape:()=>e,unknownKeys:`strip`,catchall:Nu.create(),typeName:$.ZodObject,...Z(t)}),Lu.strictCreate=(e,t)=>new Lu({shape:()=>e,unknownKeys:`strict`,catchall:Nu.create(),typeName:$.ZodObject,...Z(t)}),Lu.lazycreate=(e,t)=>new Lu({shape:e,unknownKeys:`strip`,catchall:Nu.create(),typeName:$.ZodObject,...Z(t)});var Ru=class extends Q{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function r(e){for(let t of e)if(t.result.status===`valid`)return t.result;for(let n of e)if(n.result.status===`dirty`)return t.common.issues.push(...n.ctx.common.issues),n.result;let n=e.map(e=>new zl(e.ctx.common.issues));return q(t,{code:K.invalid_union,unionErrors:n}),Y}if(t.common.async)return Promise.all(n.map(async e=>{let n={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:n}),ctx:n}})).then(r);{let e,r=[];for(let i of n){let n={...t,common:{...t.common,issues:[]},parent:null},a=i._parseSync({data:t.data,path:t.path,parent:n});if(a.status===`valid`)return a;a.status===`dirty`&&!e&&(e={result:a,ctx:n}),n.common.issues.length&&r.push(n.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;let i=r.map(e=>new zl(e));return q(t,{code:K.invalid_union,unionErrors:i}),Y}}get options(){return this._def.options}};Ru.create=(e,t)=>new Ru({options:e,typeName:$.ZodUnion,...Z(t)});var zu=e=>e instanceof Ju?zu(e.schema):e instanceof ed?zu(e.innerType()):e instanceof Yu?[e.value]:e instanceof Zu?e.options:e instanceof Qu?W.objectValues(e.enum):e instanceof rd?zu(e._def.innerType):e instanceof ku?[void 0]:e instanceof Au?[null]:e instanceof td?[void 0,...zu(e.unwrap())]:e instanceof nd?[null,...zu(e.unwrap())]:e instanceof od||e instanceof cd?zu(e.unwrap()):e instanceof id?zu(e._def.innerType):[],Bu=class e extends Q{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==G.object)return q(t,{code:K.invalid_type,expected:G.object,received:t.parsedType}),Y;let n=this.discriminator,r=t.data[n],i=this.optionsMap.get(r);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(q(t,{code:K.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),Y)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){let i=new Map;for(let e of n){let n=zu(e.shape[t]);if(!n.length)throw Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let r of n){if(i.has(r))throw Error(`Discriminator property ${String(t)} has duplicate value ${String(r)}`);i.set(r,e)}}return new e({typeName:$.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...Z(r)})}};function Vu(e,t){let n=Rl(e),r=Rl(t);if(e===t)return{valid:!0,data:e};if(n===G.object&&r===G.object){let n=W.objectKeys(t),r=W.objectKeys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=Vu(e[n],t[n]);if(!r.valid)return{valid:!1};i[n]=r.data}return{valid:!0,data:i}}else if(n===G.array&&r===G.array){if(e.length!==t.length)return{valid:!1};let n=[];for(let r=0;r{if(Kl(e)||Kl(r))return Y;let i=Vu(e.value,r.value);return i.valid?((ql(e)||ql(r))&&t.dirty(),{status:t.value,value:i.data}):(q(n,{code:K.invalid_intersection_types}),Y)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([e,t])=>r(e,t)):r(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};Hu.create=(e,t,n)=>new Hu({left:e,right:t,typeName:$.ZodIntersection,...Z(n)});var Uu=class e extends Q{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==G.array)return q(n,{code:K.invalid_type,expected:G.array,received:n.parsedType}),Y;if(n.data.lengththis._def.items.length&&(q(n,{code:K.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),t.dirty());let r=[...n.data].map((e,t)=>{let r=this._def.items[t]||this._def.rest;return r?r._parse(new Xl(n,e,n.path,t)):null}).filter(e=>!!e);return n.common.async?Promise.all(r).then(e=>J.mergeArray(t,e)):J.mergeArray(t,r)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};Uu.create=(e,t)=>{if(!Array.isArray(e))throw Error(`You must pass an array of schemas to z.tuple([ ... ])`);return new Uu({items:e,typeName:$.ZodTuple,rest:null,...Z(t)})};var Wu=class e extends Q{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==G.object)return q(n,{code:K.invalid_type,expected:G.object,received:n.parsedType}),Y;let r=[],i=this._def.keyType,a=this._def.valueType;for(let e in n.data)r.push({key:i._parse(new Xl(n,e,n.path,e)),value:a._parse(new Xl(n,n.data[e],n.path,e)),alwaysSet:e in n.data});return n.common.async?J.mergeObjectAsync(t,r):J.mergeObjectSync(t,r)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof Q?new e({keyType:t,valueType:n,typeName:$.ZodRecord,...Z(r)}):new e({keyType:Su.create(),valueType:t,typeName:$.ZodRecord,...Z(n)})}},Gu=class extends Q{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==G.map)return q(n,{code:K.invalid_type,expected:G.map,received:n.parsedType}),Y;let r=this._def.keyType,i=this._def.valueType,a=[...n.data.entries()].map(([e,t],a)=>({key:r._parse(new Xl(n,e,n.path,[a,`key`])),value:i._parse(new Xl(n,t,n.path,[a,`value`]))}));if(n.common.async){let e=new Map;return Promise.resolve().then(async()=>{for(let n of a){let r=await n.key,i=await n.value;if(r.status===`aborted`||i.status===`aborted`)return Y;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}})}else{let e=new Map;for(let n of a){let r=n.key,i=n.value;if(r.status===`aborted`||i.status===`aborted`)return Y;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}}}};Gu.create=(e,t,n)=>new Gu({valueType:t,keyType:e,typeName:$.ZodMap,...Z(n)});var Ku=class e extends Q{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==G.set)return q(n,{code:K.invalid_type,expected:G.set,received:n.parsedType}),Y;let r=this._def;r.minSize!==null&&n.data.sizer.maxSize.value&&(q(n,{code:K.too_big,maximum:r.maxSize.value,type:`set`,inclusive:!0,exact:!1,message:r.maxSize.message}),t.dirty());let i=this._def.valueType;function a(e){let n=new Set;for(let r of e){if(r.status===`aborted`)return Y;r.status===`dirty`&&t.dirty(),n.add(r.value)}return{status:t.value,value:n}}let o=[...n.data.values()].map((e,t)=>i._parse(new Xl(n,e,n.path,t)));return n.common.async?Promise.all(o).then(e=>a(e)):a(o)}min(t,n){return new e({...this._def,minSize:{value:t,message:X.toString(n)}})}max(t,n){return new e({...this._def,maxSize:{value:t,message:X.toString(n)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};Ku.create=(e,t)=>new Ku({valueType:e,minSize:null,maxSize:null,typeName:$.ZodSet,...Z(t)});var qu=class e extends Q{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==G.function)return q(t,{code:K.invalid_type,expected:G.function,received:t.parsedType}),Y;function n(e,n){return Ul({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Hl(),Bl].filter(e=>!!e),issueData:{code:K.invalid_arguments,argumentsError:n}})}function r(e,n){return Ul({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Hl(),Bl].filter(e=>!!e),issueData:{code:K.invalid_return_type,returnTypeError:n}})}let i={errorMap:t.common.contextualErrorMap},a=t.data;if(this._def.returns instanceof $u){let e=this;return Gl(async function(...t){let o=new zl([]),s=await e._def.args.parseAsync(t,i).catch(e=>{throw o.addIssue(n(t,e)),o}),c=await Reflect.apply(a,this,s);return await e._def.returns._def.type.parseAsync(c,i).catch(e=>{throw o.addIssue(r(c,e)),o})})}else{let e=this;return Gl(function(...t){let o=e._def.args.safeParse(t,i);if(!o.success)throw new zl([n(t,o.error)]);let s=Reflect.apply(a,this,o.data),c=e._def.returns.safeParse(s,i);if(!c.success)throw new zl([r(s,c.error)]);return c.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:Uu.create(t).rest(Mu.create())})}returns(t){return new e({...this._def,returns:t})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(t,n,r){return new e({args:t||Uu.create([]).rest(Mu.create()),returns:n||Mu.create(),typeName:$.ZodFunction,...Z(r)})}},Ju=class extends Q{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};Ju.create=(e,t)=>new Ju({getter:e,typeName:$.ZodLazy,...Z(t)});var Yu=class extends Q{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return q(t,{received:t.data,code:K.invalid_literal,expected:this._def.value}),Y}return{status:`valid`,value:e.data}}get value(){return this._def.value}};Yu.create=(e,t)=>new Yu({value:e,typeName:$.ZodLiteral,...Z(t)});function Xu(e,t){return new Zu({values:e,typeName:$.ZodEnum,...Z(t)})}var Zu=class e extends Q{_parse(e){if(typeof e.data!=`string`){let t=this._getOrReturnCtx(e),n=this._def.values;return q(t,{expected:W.joinValues(n),received:t.parsedType,code:K.invalid_type}),Y}if(this._cache||=new Set(this._def.values),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return q(t,{received:t.data,code:K.invalid_enum_value,options:n}),Y}return Gl(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(t,n=this._def){return e.create(t,{...this._def,...n})}exclude(t,n=this._def){return e.create(this.options.filter(e=>!t.includes(e)),{...this._def,...n})}};Zu.create=Xu;var Qu=class extends Q{_parse(e){let t=W.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==G.string&&n.parsedType!==G.number){let e=W.objectValues(t);return q(n,{expected:W.joinValues(e),received:n.parsedType,code:K.invalid_type}),Y}if(this._cache||=new Set(W.getValidEnumValues(this._def.values)),!this._cache.has(e.data)){let e=W.objectValues(t);return q(n,{received:n.data,code:K.invalid_enum_value,options:e}),Y}return Gl(e.data)}get enum(){return this._def.values}};Qu.create=(e,t)=>new Qu({values:e,typeName:$.ZodNativeEnum,...Z(t)});var $u=class extends Q{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);return t.parsedType!==G.promise&&t.common.async===!1?(q(t,{code:K.invalid_type,expected:G.promise,received:t.parsedType}),Y):Gl((t.parsedType===G.promise?t.data:Promise.resolve(t.data)).then(e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap})))}};$u.create=(e,t)=>new $u({type:e,typeName:$.ZodPromise,...Z(t)});var ed=class extends Q{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===$.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),r=this._def.effect||null,i={addIssue:e=>{q(n,e),e.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),r.type===`preprocess`){let e=r.transform(n.data,i);if(n.common.async)return Promise.resolve(e).then(async e=>{if(t.value===`aborted`)return Y;let r=await this._def.schema._parseAsync({data:e,path:n.path,parent:n});return r.status===`aborted`?Y:r.status===`dirty`||t.value===`dirty`?Wl(r.value):r});{if(t.value===`aborted`)return Y;let r=this._def.schema._parseSync({data:e,path:n.path,parent:n});return r.status===`aborted`?Y:r.status===`dirty`||t.value===`dirty`?Wl(r.value):r}}if(r.type===`refinement`){let e=e=>{let t=r.refinement(e,i);if(n.common.async)return Promise.resolve(t);if(t instanceof Promise)throw Error(`Async refinement encountered during synchronous parse operation. Use .parseAsync instead.`);return e};if(n.common.async===!1){let r=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return r.status===`aborted`?Y:(r.status===`dirty`&&t.dirty(),e(r.value),{status:t.value,value:r.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(n=>n.status===`aborted`?Y:(n.status===`dirty`&&t.dirty(),e(n.value).then(()=>({status:t.value,value:n.value}))))}if(r.type===`transform`)if(n.common.async===!1){let e=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!Jl(e))return Y;let a=r.transform(e.value,i);if(a instanceof Promise)throw Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(e=>Jl(e)?Promise.resolve(r.transform(e.value,i)).then(e=>({status:t.value,value:e})):Y);W.assertNever(r)}};ed.create=(e,t,n)=>new ed({schema:e,typeName:$.ZodEffects,effect:t,...Z(n)}),ed.createWithPreprocess=(e,t,n)=>new ed({schema:t,effect:{type:`preprocess`,transform:e},typeName:$.ZodEffects,...Z(n)});var td=class extends Q{_parse(e){return this._getType(e)===G.undefined?Gl(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};td.create=(e,t)=>new td({innerType:e,typeName:$.ZodOptional,...Z(t)});var nd=class extends Q{_parse(e){return this._getType(e)===G.null?Gl(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};nd.create=(e,t)=>new nd({innerType:e,typeName:$.ZodNullable,...Z(t)});var rd=class extends Q{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===G.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};rd.create=(e,t)=>new rd({innerType:e,typeName:$.ZodDefault,defaultValue:typeof t.default==`function`?t.default:()=>t.default,...Z(t)});var id=class extends Q{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},r=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return Yl(r)?r.then(e=>({status:`valid`,value:e.status===`valid`?e.value:this._def.catchValue({get error(){return new zl(n.common.issues)},input:n.data})})):{status:`valid`,value:r.status===`valid`?r.value:this._def.catchValue({get error(){return new zl(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};id.create=(e,t)=>new id({innerType:e,typeName:$.ZodCatch,catchValue:typeof t.catch==`function`?t.catch:()=>t.catch,...Z(t)});var ad=class extends Q{_parse(e){if(this._getType(e)!==G.nan){let t=this._getOrReturnCtx(e);return q(t,{code:K.invalid_type,expected:G.nan,received:t.parsedType}),Y}return{status:`valid`,value:e.data}}};ad.create=e=>new ad({typeName:$.ZodNaN,...Z(e)});var od=class extends Q{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}},sd=class e extends Q{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let e=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?Y:e.status===`dirty`?(t.dirty(),Wl(e.value)):this._def.out._parseAsync({data:e.value,path:n.path,parent:n})})();{let e=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?Y:e.status===`dirty`?(t.dirty(),{status:`dirty`,value:e.value}):this._def.out._parseSync({data:e.value,path:n.path,parent:n})}}static create(t,n){return new e({in:t,out:n,typeName:$.ZodPipeline})}},cd=class extends Q{_parse(e){let t=this._def.innerType._parse(e),n=e=>(Jl(e)&&(e.value=Object.freeze(e.value)),e);return Yl(t)?t.then(e=>n(e)):n(t)}unwrap(){return this._def.innerType}};cd.create=(e,t)=>new cd({innerType:e,typeName:$.ZodReadonly,...Z(t)}),Lu.lazycreate;var $;(function(e){e.ZodString=`ZodString`,e.ZodNumber=`ZodNumber`,e.ZodNaN=`ZodNaN`,e.ZodBigInt=`ZodBigInt`,e.ZodBoolean=`ZodBoolean`,e.ZodDate=`ZodDate`,e.ZodSymbol=`ZodSymbol`,e.ZodUndefined=`ZodUndefined`,e.ZodNull=`ZodNull`,e.ZodAny=`ZodAny`,e.ZodUnknown=`ZodUnknown`,e.ZodNever=`ZodNever`,e.ZodVoid=`ZodVoid`,e.ZodArray=`ZodArray`,e.ZodObject=`ZodObject`,e.ZodUnion=`ZodUnion`,e.ZodDiscriminatedUnion=`ZodDiscriminatedUnion`,e.ZodIntersection=`ZodIntersection`,e.ZodTuple=`ZodTuple`,e.ZodRecord=`ZodRecord`,e.ZodMap=`ZodMap`,e.ZodSet=`ZodSet`,e.ZodFunction=`ZodFunction`,e.ZodLazy=`ZodLazy`,e.ZodLiteral=`ZodLiteral`,e.ZodEnum=`ZodEnum`,e.ZodEffects=`ZodEffects`,e.ZodNativeEnum=`ZodNativeEnum`,e.ZodOptional=`ZodOptional`,e.ZodNullable=`ZodNullable`,e.ZodDefault=`ZodDefault`,e.ZodCatch=`ZodCatch`,e.ZodPromise=`ZodPromise`,e.ZodBranded=`ZodBranded`,e.ZodPipeline=`ZodPipeline`,e.ZodReadonly=`ZodReadonly`})($||={});var ld=Su.create;wu.create,ad.create,Tu.create,Eu.create,Du.create,Ou.create,ku.create,Au.create,ju.create,Mu.create,Nu.create,Pu.create,Fu.create;var ud=Lu.create;Lu.strictCreate,Ru.create,Bu.create,Hu.create,Uu.create,Wu.create,Gu.create,Ku.create,qu.create,Ju.create,Yu.create;var dd=Zu.create;Qu.create,$u.create,ed.create,td.create,nd.create,ed.createWithPreprocess,sd.create;var fd=ud({email:ld().email(`올바른 이메일 형식이 아닙니다.`),password:ld().min(1,`비밀번호를 입력해주세요.`)}),pd=[{t:`실시간 화자 분리`,d:`아동 · 치료사 · 미상 자동 식별`},{t:`언어 지표 자동 산출`,d:`MLU · TTR · 어휘 다양도`},{t:`SOAP Note 초안 생성`,d:`치료사 톤으로 맞춤 작성`}];function md(){return(0,j.jsxs)(`svg`,{className:`absolute inset-0 w-full h-full pointer-events-none`,viewBox:`0 0 800 900`,preserveAspectRatio:`xMidYMid slice`,children:[(0,j.jsxs)(`defs`,{children:[(0,j.jsxs)(`radialGradient`,{id:`blob-a`,cx:`35%`,cy:`30%`,r:`60%`,children:[(0,j.jsx)(`stop`,{offset:`0%`,stopColor:`#4D8A6F`,stopOpacity:`0.55`}),(0,j.jsx)(`stop`,{offset:`100%`,stopColor:`#1A3C34`,stopOpacity:`0`})]}),(0,j.jsxs)(`radialGradient`,{id:`blob-b`,cx:`75%`,cy:`75%`,r:`50%`,children:[(0,j.jsx)(`stop`,{offset:`0%`,stopColor:`#7FB196`,stopOpacity:`0.42`}),(0,j.jsx)(`stop`,{offset:`100%`,stopColor:`#1A3C34`,stopOpacity:`0`})]})]}),(0,j.jsx)(`ellipse`,{cx:`180`,cy:`280`,rx:`380`,ry:`260`,fill:`url(#blob-a)`}),(0,j.jsx)(`ellipse`,{cx:`640`,cy:`700`,rx:`320`,ry:`240`,fill:`url(#blob-b)`}),(0,j.jsx)(`path`,{d:`M -20 540 Q 200 480 400 540 T 820 540`,stroke:`rgba(183,222,200,0.22)`,strokeWidth:`1.4`,fill:`none`}),(0,j.jsx)(`path`,{d:`M -20 580 Q 200 530 400 580 T 820 580`,stroke:`rgba(183,222,200,0.14)`,strokeWidth:`1.2`,fill:`none`}),(0,j.jsx)(`g`,{transform:`translate(220, 380)`,opacity:`0.6`,children:[12,22,38,52,70,86,70,52,38,22,12].map((e,t)=>(0,j.jsx)(`rect`,{x:t*18,y:50-e/2,width:`6`,height:e,rx:`3`,fill:`#B7DEC8`,opacity:.35+t%5*.08},t))})]})}function hd(){let[e,t]=(0,_.useState)(!1),n=ec(),{register:r,handleSubmit:i,formState:{errors:a}}=Al({resolver:Il(fd)});return(0,j.jsxs)(`div`,{className:`flex min-h-screen bg-brand-25 font-sans`,children:[(0,j.jsxs)(`div`,{className:`hidden md:flex flex-[0_0_60%] relative flex-col justify-between p-12 overflow-hidden`,style:{background:`linear-gradient(135deg,#0F2A24 0%,#1A3C34 45%,#245249 100%)`},children:[(0,j.jsx)(md,{}),(0,j.jsxs)(`div`,{className:`relative z-10 flex items-center gap-2.5`,children:[(0,j.jsx)(`div`,{className:`w-7 h-7 rounded-lg bg-white/10 flex items-center justify-center`,children:(0,j.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 64 64`,fill:`none`,children:[(0,j.jsx)(`rect`,{x:`6`,y:`26`,width:`6`,height:`12`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`16`,y:`18`,width:`6`,height:`28`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`26`,y:`10`,width:`6`,height:`44`,rx:`3`,fill:`#fff`}),(0,j.jsx)(`rect`,{x:`36`,y:`16`,width:`6`,height:`32`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`46`,y:`24`,width:`6`,height:`16`,rx:`3`,fill:`#B7DEC8`})]})}),(0,j.jsx)(`span`,{className:`text-sm font-bold text-white tracking-tight`,children:`UtterAI`})]}),(0,j.jsxs)(`div`,{className:`relative z-10 max-w-[460px]`,children:[(0,j.jsxs)(`div`,{className:`inline-flex items-center gap-1.5 px-3 py-1 rounded-full bg-brand-200/12 border border-brand-200/20 text-brand-200 text-[11px] font-semibold mb-4`,children:[(0,j.jsx)(`span`,{className:`w-1 h-1 rounded-full bg-brand-200`}),`아동 언어치료 AI 분석 플랫폼`]}),(0,j.jsxs)(`h2`,{className:`text-4xl font-bold text-white tracking-tight leading-tight`,children:[`매 세션의 작은 발화까지`,(0,j.jsx)(`br`,{}),(0,j.jsx)(`span`,{className:`text-brand-200`,children:`꼼꼼히 듣고 기록합니다.`})]}),(0,j.jsxs)(`p`,{className:`mt-4 text-sm text-brand-100/80 leading-relaxed`,children:[`UtterAI는 치료사가 더 깊이 듣고, 보호자가 더 잘 이해할 수 있도록`,(0,j.jsx)(`br`,{}),`음성 분석 · 전사 · 언어 지표 · 리포트를 자동으로 정리해드립니다.`]}),(0,j.jsx)(`div`,{className:`mt-7 flex flex-col gap-3`,children:pd.map(e=>(0,j.jsxs)(`div`,{className:`flex gap-3 items-start`,children:[(0,j.jsx)(`div`,{className:`w-5.5 h-5.5 rounded-full bg-brand-200/16 flex items-center justify-center text-brand-200 flex-shrink-0 mt-0.5`,children:(0,j.jsx)(I,{name:`check`,size:11,strokeWidth:3})}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[13px] font-semibold text-white`,children:e.t}),(0,j.jsx)(`p`,{className:`text-[11px] text-brand-100/65 mt-0.5`,children:e.d})]})]},e.t))})]}),(0,j.jsxs)(`div`,{className:`relative z-10 flex items-center justify-between text-[11px] text-brand-200/55`,children:[(0,j.jsx)(`span`,{children:`© 2026 UtterAI · All rights reserved`}),(0,j.jsxs)(`div`,{className:`flex gap-4`,children:[(0,j.jsx)(`button`,{className:`hover:text-brand-200 transition-colors`,children:`이용약관`}),(0,j.jsx)(`button`,{className:`hover:text-brand-200 transition-colors`,children:`개인정보처리방침`})]})]})]}),(0,j.jsx)(`div`,{className:`flex-1 flex items-center justify-center p-8 bg-brand-25`,children:(0,j.jsxs)(`div`,{className:`w-full max-w-[420px] bg-white rounded-2xl shadow-xl p-10 flex flex-col`,children:[(0,j.jsx)(`div`,{className:`w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-3`,style:{background:`linear-gradient(135deg,#1A3C34 0%,#2D6A4F 60%,#4D8A6F 100%)`},children:(0,j.jsxs)(`svg`,{width:`32`,height:`32`,viewBox:`0 0 32 32`,fill:`none`,children:[(0,j.jsx)(`path`,{d:`M6 9 a4 4 0 0 1 4-4 h12 a4 4 0 0 1 4 4 v8 a4 4 0 0 1 -4 4 h-8 l-5 4 v-4 h-3 a-2 -2 0 0 1 -2 -2 z`,stroke:`#B7DEC8`,strokeWidth:`1.8`,strokeLinejoin:`round`,fill:`none`}),(0,j.jsx)(`rect`,{x:`11`,y:`11`,width:`2`,height:`4`,rx:`1`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`14`,y:`9`,width:`2`,height:`8`,rx:`1`,fill:`#D8ECDF`}),(0,j.jsx)(`rect`,{x:`17`,y:`7`,width:`2`,height:`12`,rx:`1`,fill:`#fff`}),(0,j.jsx)(`rect`,{x:`20`,y:`10`,width:`2`,height:`6`,rx:`1`,fill:`#D8ECDF`})]})}),(0,j.jsx)(`p`,{className:`text-[11px] font-bold tracking-[0.18em] text-brand-500 uppercase text-center mb-5`,children:`UTTER AI`}),(0,j.jsxs)(`h1`,{className:`text-2xl font-bold text-brand-900 tracking-tight leading-snug text-center`,children:[`당신의 언어 성장을`,(0,j.jsx)(`br`,{}),`더 따뜻하게 기록하다`]}),(0,j.jsxs)(`p`,{className:`text-[12.5px] text-ink-500 text-center mt-2.5 leading-relaxed`,children:[`치료 기록, 음성 분석, 발화 데이터를`,(0,j.jsx)(`br`,{}),`한 곳에서 안전하게 관리하세요.`]}),(0,j.jsxs)(`form`,{onSubmit:i(e=>n.mutate(e)),className:`mt-7 flex flex-col gap-2.5`,children:[(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsx)(`span`,{className:`absolute left-3.5 top-1/2 -translate-y-1/2 text-ink-400 pointer-events-none`,children:(0,j.jsx)(I,{name:`mail`,size:16,strokeWidth:1.8})}),(0,j.jsx)(`input`,{...r(`email`),type:`email`,autoComplete:`email`,placeholder:`이메일 주소`,className:P(`w-full h-[46px] pl-10 pr-4 rounded-[10px] text-[13.5px] outline-none transition-all`,`bg-brand-25 border font-sans`,a.email?`border-red-400 focus:ring-2 focus:ring-red-200`:`border-ink-200 focus:border-brand-500 focus:ring-2 focus:ring-brand-500/16`)}),a.email&&(0,j.jsxs)(`p`,{className:`mt-1.5 pl-1 text-[11.5px] text-red-700 font-medium flex items-center gap-1`,children:[(0,j.jsx)(I,{name:`alert`,size:11,strokeWidth:2.5}),a.email.message]})]}),(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsx)(`span`,{className:`absolute left-3.5 top-[23px] -translate-y-1/2 text-ink-400 pointer-events-none`,children:(0,j.jsx)(I,{name:`lock`,size:16,strokeWidth:1.8})}),(0,j.jsx)(`input`,{...r(`password`),type:e?`text`:`password`,autoComplete:`current-password`,placeholder:`비밀번호`,className:P(`w-full h-[46px] pl-10 pr-10 rounded-[10px] text-[13.5px] outline-none transition-all`,`bg-brand-25 border font-sans`,a.password?`border-red-400 focus:ring-2 focus:ring-red-200`:`border-ink-200 focus:border-brand-500 focus:ring-2 focus:ring-brand-500/16`)}),(0,j.jsx)(`button`,{type:`button`,onClick:()=>t(e=>!e),className:`absolute right-3 top-[23px] -translate-y-1/2 text-ink-400 hover:text-ink-600 p-1`,children:(0,j.jsx)(I,{name:e?`eyeOff`:`eye`,size:16,strokeWidth:1.8})}),a.password&&(0,j.jsxs)(`p`,{className:`mt-1.5 pl-1 text-[11.5px] text-red-700 font-medium flex items-center gap-1`,children:[(0,j.jsx)(I,{name:`alert`,size:11,strokeWidth:2.5}),a.password.message]})]}),(0,j.jsx)(`button`,{type:`submit`,disabled:n.isPending,className:P(`mt-4 w-full h-12 rounded-full text-white text-[14px] font-semibold`,`flex items-center justify-center gap-2 transition-colors`,`shadow-[0_8px_16px_-4px_rgba(26,60,52,0.25)]`,n.isPending?`bg-brand-600 cursor-wait`:`bg-brand-700 hover:bg-brand-900`),children:n.isPending?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`#fff`,strokeWidth:`2.4`,style:{animation:`spin 0.8s linear infinite`},children:[(0,j.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`,strokeOpacity:`0.25`}),(0,j.jsx)(`path`,{d:`M21 12 a9 9 0 0 0 -9 -9`,strokeLinecap:`round`})]}),`로그인 중…`]}):(0,j.jsxs)(j.Fragment,{children:[`안전하게 로그인 `,(0,j.jsx)(I,{name:`chevronRight`,size:15,strokeWidth:2.4})]})})]}),(0,j.jsxs)(`div`,{className:`mt-5 flex items-center justify-between text-[12px] flex-wrap gap-2`,children:[(0,j.jsx)(`button`,{className:`text-ink-500 hover:text-brand-700 font-medium transition-colors`,children:`비밀번호를 잊으셨나요?`}),(0,j.jsxs)(`span`,{className:`text-ink-500 whitespace-nowrap`,children:[`처음 방문하셨나요?`,` `,(0,j.jsx)(Bt,{to:`/signup`,className:`text-brand-700 font-semibold hover:text-brand-900`,children:`회원 가입`})]})]})]})})]})}var gd=ud({name:ld().min(1,`이름을 입력해주세요.`),email:ld().email(`올바른 이메일 형식을 입력해주세요.`),password:ld().min(8,`비밀번호는 8자 이상이어야 합니다.`),confirm:ld().min(1,`비밀번호를 한 번 더 입력해주세요.`),role:dd([`SLP`,`ADMIN`])}).refine(e=>e.password===e.confirm,{message:`비밀번호가 일치하지 않습니다.`,path:[`confirm`]}),_d=[{value:`SLP`,name:`치료사 (SLP)`,desc:`세션 녹음·분석·리포트 작성`,icon:`user`},{value:`ADMIN`,name:`관리자`,desc:`기관·사용자 관리`,icon:`shield`}];function vd(e){if(!e)return 0;let t=0;return e.length>=8&&t++,/[A-Z]/.test(e)&&/[a-z]/.test(e)&&t++,/\d/.test(e)&&/[^A-Za-z0-9]/.test(e)&&t++,t}function yd(){let[e,t]=(0,_.useState)(!1),n=tc(),{register:r,handleSubmit:i,watch:a,setValue:o,formState:{errors:s}}=Al({resolver:Il(gd),defaultValues:{role:`SLP`}}),c=a(`password`)??``,l=a(`role`),u=vd(c),d=[``,`약함`,`보통`,`강함`][u],f=[`#E2E6E4`,`#EF4444`,`#F59E0B`,`#15803D`][u],p=({confirm:e,...t})=>n.mutate(t),m=e=>P(`w-full h-[46px] pl-10 pr-4 rounded-[10px] text-[13.5px] outline-none transition-all bg-brand-25 border font-sans`,e?`border-red-400 focus:ring-2 focus:ring-red-200`:`border-ink-200 focus:border-brand-500 focus:ring-2 focus:ring-brand-500/16`);return(0,j.jsxs)(`div`,{className:`flex min-h-screen bg-brand-25 font-sans`,children:[(0,j.jsxs)(`div`,{className:`hidden md:flex flex-[0_0_60%] relative flex-col justify-between p-12 overflow-hidden`,style:{background:`linear-gradient(135deg,#0F2A24 0%,#1A3C34 45%,#245249 100%)`},children:[(0,j.jsxs)(`div`,{className:`relative z-10 flex items-center gap-2.5`,children:[(0,j.jsx)(`div`,{className:`w-7 h-7 rounded-lg bg-white/10 flex items-center justify-center`,children:(0,j.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 64 64`,fill:`none`,children:[(0,j.jsx)(`rect`,{x:`6`,y:`26`,width:`6`,height:`12`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`16`,y:`18`,width:`6`,height:`28`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`26`,y:`10`,width:`6`,height:`44`,rx:`3`,fill:`#fff`}),(0,j.jsx)(`rect`,{x:`36`,y:`16`,width:`6`,height:`32`,rx:`3`,fill:`#B7DEC8`}),(0,j.jsx)(`rect`,{x:`46`,y:`24`,width:`6`,height:`16`,rx:`3`,fill:`#B7DEC8`})]})}),(0,j.jsx)(`span`,{className:`text-sm font-bold text-white tracking-tight`,children:`UtterAI`})]}),(0,j.jsxs)(`div`,{className:`relative z-10 max-w-[460px]`,children:[(0,j.jsxs)(`div`,{className:`inline-flex items-center gap-1.5 px-3 py-1 rounded-full bg-brand-200/12 border border-brand-200/20 text-brand-200 text-[11px] font-semibold mb-4`,children:[(0,j.jsx)(`span`,{className:`w-1 h-1 rounded-full bg-brand-200`}),`지금 합류하세요`]}),(0,j.jsxs)(`h2`,{className:`text-4xl font-bold text-white tracking-tight leading-tight`,children:[`치료 기록을 위한`,(0,j.jsx)(`br`,{}),(0,j.jsx)(`span`,{className:`text-brand-200`,children:`가장 따뜻한 도구.`})]}),(0,j.jsxs)(`p`,{className:`mt-4 text-sm text-brand-100/80 leading-relaxed`,children:[`전국 200여 개 발달센터의 언어치료사가 UtterAI로 세션을 기록하고`,(0,j.jsx)(`br`,{}),`보호자에게 더 명확한 리포트를 전달하고 있어요.`]}),(0,j.jsx)(`div`,{className:`mt-7 flex flex-col gap-3`,children:[{t:`14일 무료 체험`,d:`카드 등록 없이 모든 기능 사용`},{t:`의료급여법 준수`,d:`국내 서버 · 암호화 보관`},{t:`언제든 해지 가능`,d:`데이터는 30일간 보관 후 자동 삭제`}].map(e=>(0,j.jsxs)(`div`,{className:`flex gap-3 items-start`,children:[(0,j.jsx)(`div`,{className:`w-5 h-5 rounded-full bg-brand-200/16 flex items-center justify-center text-brand-200 flex-shrink-0 mt-0.5`,children:(0,j.jsx)(I,{name:`check`,size:11,strokeWidth:3})}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[13px] font-semibold text-white`,children:e.t}),(0,j.jsx)(`p`,{className:`text-[11px] text-brand-100/65 mt-0.5`,children:e.d})]})]},e.t))})]}),(0,j.jsx)(`p`,{className:`relative z-10 text-[11px] text-brand-200/55`,children:`© 2026 UtterAI · All rights reserved`})]}),(0,j.jsx)(`div`,{className:`flex-1 flex items-center justify-center p-8`,children:(0,j.jsxs)(`div`,{className:`w-full max-w-[440px] bg-white rounded-2xl shadow-xl px-9 py-9 overflow-y-auto max-h-[calc(100vh-64px)]`,children:[(0,j.jsx)(`p`,{className:`text-[11px] font-bold tracking-[0.18em] text-brand-500 uppercase text-center mb-5`,children:`UTTER AI`}),(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-brand-900 tracking-tight text-center`,children:`계정을 만들어보세요`}),(0,j.jsxs)(`p`,{className:`text-[12.5px] text-ink-500 text-center mt-2.5 leading-relaxed`,children:[`UtterAI와 함께 더 체계적인`,(0,j.jsx)(`br`,{}),`언어 치료를 시작하세요.`]}),(0,j.jsxs)(`form`,{onSubmit:i(p),className:`mt-6 flex flex-col gap-2.5`,children:[(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsx)(`span`,{className:`absolute left-3.5 top-1/2 -translate-y-1/2 text-ink-400 pointer-events-none`,children:(0,j.jsx)(I,{name:`user`,size:16,strokeWidth:1.8})}),(0,j.jsx)(`input`,{...r(`name`),placeholder:`홍길동`,autoComplete:`name`,className:m(!!s.name)}),s.name&&(0,j.jsx)(`p`,{className:`mt-1 pl-1 text-[11px] text-red-700`,children:s.name.message})]}),(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsx)(`span`,{className:`absolute left-3.5 top-1/2 -translate-y-1/2 text-ink-400 pointer-events-none`,children:(0,j.jsx)(I,{name:`mail`,size:16,strokeWidth:1.8})}),(0,j.jsx)(`input`,{...r(`email`),type:`email`,placeholder:`example@email.com`,autoComplete:`email`,className:m(!!s.email)}),s.email&&(0,j.jsx)(`p`,{className:`mt-1 pl-1 text-[11px] text-red-700`,children:s.email.message})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsx)(`span`,{className:`absolute left-3.5 top-1/2 -translate-y-1/2 text-ink-400 pointer-events-none`,children:(0,j.jsx)(I,{name:`lock`,size:16,strokeWidth:1.8})}),(0,j.jsx)(`input`,{...r(`password`),type:e?`text`:`password`,placeholder:`비밀번호 (8자 이상)`,autoComplete:`new-password`,className:P(m(!!s.password),`pr-10`)}),(0,j.jsx)(`button`,{type:`button`,onClick:()=>t(e=>!e),className:`absolute right-3 top-1/2 -translate-y-1/2 text-ink-400`,children:(0,j.jsx)(I,{name:e?`eyeOff`:`eye`,size:16,strokeWidth:1.8})})]}),c&&!s.password&&(0,j.jsxs)(`div`,{className:`mt-1.5 pl-1`,children:[(0,j.jsx)(`div`,{className:`flex gap-1`,children:[0,1,2].map(e=>(0,j.jsx)(`div`,{className:`flex-1 h-[3px] rounded-full transition-colors`,style:{background:e(0,j.jsxs)(`button`,{type:`button`,onClick:()=>o(`role`,e.value),className:P(`flex-1 flex items-center gap-2.5 p-3 rounded-[10px] border transition-all text-left`,l===e.value?`border-brand-700 bg-brand-50 shadow-[0_0_0_3px_rgba(45,106,79,0.14)]`:`border-ink-200 bg-brand-25`),children:[(0,j.jsx)(`div`,{className:P(`w-7.5 h-7.5 rounded-lg flex items-center justify-center flex-shrink-0 border`,l===e.value?`bg-brand-700 border-transparent text-brand-200`:`bg-white border-ink-200 text-ink-500`),children:(0,j.jsx)(I,{name:e.icon,size:14,strokeWidth:2})}),(0,j.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,j.jsx)(`p`,{className:P(`text-[13px]`,l===e.value?`font-semibold text-brand-700`:`font-medium text-ink-800`),children:e.name}),(0,j.jsx)(`p`,{className:P(`text-[10.5px]`,l===e.value?`text-brand-600`:`text-ink-500`),children:e.desc})]}),(0,j.jsx)(`span`,{className:P(`w-3.5 h-3.5 rounded-full flex-shrink-0 border bg-white transition-all`,l===e.value?`border-[4px] border-brand-700`:`border-ink-300`)})]},e.value))}),(0,j.jsxs)(`p`,{className:`mt-2 pl-1 text-[10.5px] text-ink-400 flex items-center gap-1`,children:[(0,j.jsx)(I,{name:`info`,size:11,strokeWidth:2}),`역할은 가입 후 변경할 수 없습니다.`]})]}),(0,j.jsx)(`button`,{type:`submit`,disabled:n.isPending,className:P(`mt-4 w-full h-12 rounded-full text-white text-[14px] font-semibold flex items-center justify-center gap-2 transition-colors shadow-[0_8px_16px_-4px_rgba(26,60,52,0.25)]`,n.isPending?`bg-brand-600 cursor-wait`:`bg-brand-700 hover:bg-brand-900`),children:n.isPending?`가입 중…`:(0,j.jsxs)(j.Fragment,{children:[`회원가입 `,(0,j.jsx)(I,{name:`chevronRight`,size:15,strokeWidth:2.4})]})})]}),(0,j.jsxs)(`p`,{className:`mt-5 text-center text-[12px] text-ink-500`,children:[`이미 계정이 있으신가요?`,` `,(0,j.jsx)(Bt,{to:`/login`,className:`text-brand-700 font-semibold hover:text-brand-900`,children:`로그인`})]})]})})]})}var bd={list:e=>V.get(`/sessions`,{params:e}),get:e=>V.get(`/sessions/${e}`),create:e=>V.post(`/sessions`,e),update:(e,t)=>V.patch(`/sessions/${e}`,t),delete:e=>V.delete(`/sessions/${e}`)},xd={list:()=>V.get(`/patients`),get:e=>V.get(`/patients/${e}`),getByRef:e=>V.get(`/patients/by-ref/${e}`),create:e=>V.post(`/patients`,e),update:(e,t)=>V.patch(`/patients/${e}`,t),delete:e=>V.delete(`/patients/${e}`)},Sd={CREATED:{label:`생성됨`,className:`bg-ink-100 text-ink-600`},AUDIO_UPLOADING:{label:`업로드 중`,className:`bg-sky-100 text-sky-700`},AUDIO_UPLOADED:{label:`음성 업로드`,className:`bg-blue-100 text-blue-700`},ANALYSIS_REQUESTED:{label:`분석 요청`,className:`bg-violet-100 text-violet-700`},ANALYSIS_PROCESSING:{label:`분석 중`,className:`bg-amber-100 text-amber-700`},ANALYSIS_COMPLETED:{label:`분석 완료`,className:`bg-brand-100 text-brand-700`},REPORT_GENERATING:{label:`리포트 생성 중`,className:`bg-amber-100 text-amber-700`},REPORT_READY:{label:`리포트 완료`,className:`bg-green-100 text-green-700`},FAILED:{label:`실패`,className:`bg-red-100 text-red-700`},DELETED:{label:`삭제됨`,className:`bg-ink-100 text-ink-400`}};function Cd({status:e,className:t}){let{label:n,className:r}=Sd[e]??Sd.CREATED;return(0,j.jsx)(`span`,{className:P(`inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-semibold`,r,t),children:n})}var wd=()=>$s();function Td({label:e,value:t,delta:n,tone:r}){return(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm p-5 flex flex-col gap-2`,children:[(0,j.jsx)(`p`,{className:`text-[12px] font-semibold text-ink-500 uppercase tracking-wide`,children:e}),(0,j.jsx)(`p`,{className:`text-3xl font-bold text-ink-800 font-mono-num`,children:t}),(0,j.jsx)(`p`,{className:P(`text-[12px] font-medium`,r===`pos`?`text-brand-500`:`text-ink-400`),children:n})]})}function Ed(){let e=Je(),{showToast:t}=wd(),n=Ui(e=>e.user),[r,i]=(0,_.useState)([]),[a,o]=(0,_.useState)([]),[s,c]=(0,_.useState)({}),[l,u]=(0,_.useState)(!0);(0,_.useEffect)(()=>{Promise.all([bd.list(),xd.list()]).then(([e,t])=>{let n=Array.isArray(e.data)?e.data:[],r=Array.isArray(t.data)?t.data:[];i(n),o(r);let a={};r.forEach(e=>{a[e.patient_ref_id]=e}),c(a)}).catch(()=>t({title:`데이터를 불러오지 못했습니다`,kind:`error`})).finally(()=>u(!1))},[]);let d=new Date,f=r.filter(e=>{let t=new Date(e.created_at);return t.getFullYear()===d.getFullYear()&&t.getMonth()===d.getMonth()}),p=[`ANALYSIS_REQUESTED`,`ANALYSIS_PROCESSING`,`REPORT_GENERATING`],m=r.filter(e=>p.includes(e.status)).length,h=[...r].sort((e,t)=>t.created_at.localeCompare(e.created_at)).slice(0,5),g=[{id:`patients`,label:`담당 환자`,value:a.length,delta:`전체 ${a.length}명`,tone:`pos`},{id:`sessions`,label:`이번 달 세션`,value:f.length,delta:`이번 달 ${f.length}회`,tone:`pos`},{id:`queue`,label:`분석 진행 중`,value:m,delta:`현재 진행 중`,tone:`neutral`}];return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5 flex items-start justify-between`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:`대시보드`}),(0,j.jsxs)(`p`,{className:`text-[13px] text-ink-500 mt-1`,children:[`안녕하세요, `,n?.name??`선생님`,`. 오늘도 좋은 하루 되세요.`]})]}),(0,j.jsxs)(`button`,{onClick:()=>e(`/sessions/new`),className:`flex items-center gap-2 px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors shadow-md`,children:[(0,j.jsx)(I,{name:`plus`,size:15}),`새 세션`]})]}),(0,j.jsxs)(`div`,{className:`px-8 pb-8 flex flex-col gap-6`,children:[(0,j.jsx)(`div`,{className:`grid grid-cols-3 gap-4`,children:g.map(e=>(0,j.jsx)(Td,{...e},e.id))}),(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm overflow-hidden`,children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between px-5 py-4 border-b border-ink-100`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h2`,{className:`text-[15px] font-semibold text-ink-800`,children:`최근 세션`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-0.5`,children:`최근 5개 세션을 표시합니다`})]}),(0,j.jsxs)(`button`,{onClick:()=>e(`/sessions`),className:`text-[12px] text-brand-600 font-semibold hover:text-brand-800 flex items-center gap-1`,children:[`전체 보기 `,(0,j.jsx)(I,{name:`chevronRight`,size:13,strokeWidth:2.2})]})]}),l?(0,j.jsx)(`div`,{className:`py-10 text-center text-[13px] text-ink-400`,children:`불러오는 중…`}):h.length===0?(0,j.jsx)(`div`,{className:`py-10 text-center text-[13px] text-ink-400`,children:`세션이 없습니다.`}):(0,j.jsxs)(`table`,{className:`w-full text-[13px]`,children:[(0,j.jsx)(`thead`,{children:(0,j.jsxs)(`tr`,{className:`bg-ink-50 border-b border-ink-100`,children:[(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,children:`환자`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,children:`날짜`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,children:`유형`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,children:`상태`})]})}),(0,j.jsx)(`tbody`,{children:h.map(t=>{let n=s[t.patient_ref_id];return(0,j.jsxs)(`tr`,{onClick:()=>e(`/sessions/${t.id}`),className:`border-t border-ink-100 hover:bg-brand-25 cursor-pointer transition-colors`,children:[(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,j.jsx)(`div`,{className:`w-8 h-8 rounded-full bg-brand-100 text-brand-700 flex items-center justify-center text-[13px] font-bold`,children:n?n.name[0]:`?`}),(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:n?ei(n.name):`—`})]})}),(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-500`,children:Zr(t.session_date)}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(`span`,{className:`inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-semibold bg-ink-100 text-ink-600`,children:t.session_type??`—`})}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(Cd,{status:t.status})})]},t.id)})})]})]})]})]})}var Dd=ud({name:ld().min(1,`이름을 입력해주세요.`),birth_date:ld().optional(),gender:dd([`M`,`F`,`U`]).optional(),memo:ld().optional()});function Od({patient:e,onClose:t,onDone:n}){let r=!!e,{showToast:i}=wd(),{register:a,handleSubmit:o,formState:{errors:s,isSubmitting:c}}=Al({resolver:Il(Dd),defaultValues:{name:e?.name??``,birth_date:e?.birth_date??``,gender:e?.gender??`U`,memo:e?.memo??``}}),l=async a=>{try{let o={name:a.name,birth_date:a.birth_date||void 0,gender:a.gender===`U`?void 0:a.gender,memo:a.memo||void 0},{data:s}=r?await xd.update(e.id,o):await xd.create(o);i({title:r?`환자 정보가 수정되었습니다`:`환자가 등록되었습니다`,body:r?void 0:`${a.name} 환자가 추가되었어요.`,kind:`success`}),n(s),t()}catch{i({title:r?`수정에 실패했습니다`:`환자 등록에 실패했습니다`,kind:`error`})}},u=e=>P(`w-full h-10 px-3 rounded-lg text-[13px] outline-none transition-all border font-sans`,e?`border-red-400 bg-white`:`border-ink-300 bg-white focus:border-brand-500 focus:ring-2 focus:ring-brand-500/16`);return(0,j.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/40`,onClick:t,children:(0,j.jsxs)(`div`,{className:`bg-white rounded-2xl shadow-xl w-full max-w-[440px] mx-4`,onClick:e=>e.stopPropagation(),children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between px-6 pt-6 pb-4 border-b border-ink-100`,children:[(0,j.jsx)(`h2`,{className:`text-[16px] font-bold text-ink-800`,children:r?`환자 정보 수정`:`환자 등록`}),(0,j.jsx)(`button`,{onClick:t,className:`w-7 h-7 flex items-center justify-center rounded-lg text-ink-400 hover:bg-ink-100 transition-colors`,children:(0,j.jsx)(I,{name:`x`,size:16})})]}),(0,j.jsxs)(`form`,{onSubmit:o(l),className:`px-6 py-5 flex flex-col gap-4`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:[`이름 `,(0,j.jsx)(`span`,{className:`text-red-500`,children:`*`})]}),(0,j.jsx)(`input`,{...a(`name`),placeholder:`환자 이름을 입력하세요`,className:u(!!s.name)}),s.name&&(0,j.jsx)(`p`,{className:`mt-1 text-[11px] text-red-700`,children:s.name.message})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`생년월일`}),(0,j.jsx)(`input`,{type:`date`,...a(`birth_date`),className:u()})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-2`,children:`성별`}),(0,j.jsx)(`div`,{className:`flex gap-5`,children:[[`M`,`남성`],[`F`,`여성`],[`U`,`미입력`]].map(([e,t])=>(0,j.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer`,children:[(0,j.jsx)(`input`,{type:`radio`,...a(`gender`),value:e,className:`accent-brand-700`}),(0,j.jsx)(`span`,{className:`text-[13px] text-ink-800`,children:t})]},e))})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`메모 (선택)`}),(0,j.jsx)(`textarea`,{...a(`memo`),rows:3,placeholder:`환자 관련 메모를 입력하세요`,className:P(u(),`h-auto py-2 resize-none`)})]}),(0,j.jsxs)(`div`,{className:`pt-1 flex justify-end gap-2`,children:[(0,j.jsx)(`button`,{type:`button`,onClick:t,className:`px-4 py-2 border border-ink-200 text-ink-600 rounded-full text-[13px] font-semibold hover:bg-ink-50 transition-colors`,children:`취소`}),(0,j.jsx)(`button`,{type:`submit`,disabled:c,className:`px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors disabled:opacity-60`,children:c?r?`저장 중…`:`등록 중…`:r?`저장`:`등록`})]})]})]})})}var kd={M:`남성`,F:`여성`,U:`미입력`};function Ad(e){return P(`w-8 h-8 rounded-full flex items-center justify-center text-[13px] font-bold flex-shrink-0`,e===`F`?`bg-pink-100 text-pink-700`:e===`M`?`bg-blue-100 text-blue-700`:`bg-ink-100 text-ink-600`)}function jd(e){return P(`inline-block px-2 py-0.5 rounded-md text-[11px] font-semibold`,e===`F`?`bg-pink-100 text-pink-700`:e===`M`?`bg-blue-100 text-blue-700`:`bg-ink-100 text-ink-600`)}function Md(){let e=Je(),{showToast:t}=wd(),[n,r]=(0,_.useState)([]),[i,a]=(0,_.useState)(!0),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(`all`),[u,d]=(0,_.useState)(!1);(0,_.useEffect)(()=>{let e=!1;return xd.list().then(({data:t})=>{e||r(t)}).catch(()=>{e||t({title:`환자 목록을 불러오지 못했습니다`,kind:`error`})}).finally(()=>{e||a(!1)}),()=>{e=!0}},[]);let f=n.filter(e=>!(o&&!e.name.includes(o)||c===`new`&&new Date(e.created_at){n.stopPropagation();try{await xd.delete(e.id),r(t=>t.filter(t=>t.id!==e.id)),t({title:`환자 정보가 삭제되었습니다`,body:`${e.name} 환자 정보가 삭제되었어요.`,kind:`success`})}catch{t({title:`삭제에 실패했습니다`,kind:`error`})}};return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5 flex items-start justify-between`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:`환자 관리`}),(0,j.jsxs)(`p`,{className:`text-[13px] text-ink-500 mt-1`,children:[`총 `,n.length,`명의 환자`]})]}),(0,j.jsxs)(`button`,{onClick:()=>d(!0),className:`flex items-center gap-2 px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors shadow-md`,children:[(0,j.jsx)(I,{name:`plus`,size:15}),`환자 등록`]})]}),(0,j.jsx)(`div`,{className:`px-8 pb-8`,children:(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm overflow-hidden`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-3 px-5 py-3.5 border-b border-ink-100`,children:[(0,j.jsxs)(`div`,{className:`relative flex-1 max-w-[320px]`,children:[(0,j.jsx)(`span`,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 text-ink-400 pointer-events-none`,children:(0,j.jsx)(I,{name:`search`,size:14})}),(0,j.jsx)(`input`,{value:o,onChange:e=>s(e.target.value),placeholder:`환자 이름 검색…`,className:`w-full h-9 pl-8 pr-3 border border-ink-200 rounded-lg text-[13px] outline-none focus:border-brand-500 font-sans`})]}),(0,j.jsx)(`div`,{className:`flex gap-1.5 ml-auto`,children:[{label:`전체`,value:`all`},{label:`최근 등록`,value:`new`}].map(e=>(0,j.jsx)(`button`,{onClick:()=>l(e.value),className:P(`px-3 py-1.5 rounded-full text-[12px] font-medium border transition-all`,c===e.value?`bg-brand-700 text-white border-brand-700`:`bg-transparent text-ink-600 border-ink-200 hover:bg-ink-50`),children:e.label},e.value))})]}),i?(0,j.jsx)(`div`,{className:`py-16 text-center text-[13px] text-ink-400`,children:`불러오는 중…`}):f.length===0?(0,j.jsxs)(`div`,{className:`py-16 text-center`,children:[(0,j.jsx)(`div`,{className:`w-16 h-16 rounded-2xl bg-brand-50 flex items-center justify-center text-brand-600 mx-auto mb-4`,children:(0,j.jsx)(I,{name:`users`,size:28,strokeWidth:1.8})}),(0,j.jsx)(`p`,{className:`text-[15px] font-semibold text-ink-800`,children:o?`검색 결과가 없습니다`:`아직 등록된 환자가 없습니다`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1.5`,children:o?`다른 이름으로 다시 시도해보세요.`:`첫 환자를 등록하면 세션 분석을 시작할 수 있어요.`})]}):(0,j.jsxs)(`table`,{className:`w-full text-[13px] border-collapse`,children:[(0,j.jsx)(`thead`,{children:(0,j.jsxs)(`tr`,{className:`bg-ink-50`,children:[(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider border-b border-ink-100`,children:`이름`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider border-b border-ink-100`,children:`생년월일`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider border-b border-ink-100`,children:`성별`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider border-b border-ink-100`,children:`메모`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider border-b border-ink-100`,children:`등록일`}),(0,j.jsx)(`th`,{className:`text-right px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider border-b border-ink-100`,children:`액션`})]})}),(0,j.jsx)(`tbody`,{children:f.map(t=>(0,j.jsxs)(`tr`,{onClick:()=>e(`/patients/${t.id}`),className:`border-t border-ink-100 hover:bg-brand-25 cursor-pointer transition-colors group`,children:[(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,j.jsx)(`div`,{className:Ad(t.gender),children:t.name[0]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:t.name}),(0,j.jsx)(`p`,{className:`text-[11px] text-ink-500 mt-0.5`,children:Qr(t.birth_date)})]})]})}),(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-500`,children:Zr(t.birth_date)}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(`span`,{className:jd(t.gender),children:kd[t.gender??`U`]??`미입력`})}),(0,j.jsx)(`td`,{className:`px-5 py-3 text-ink-500 max-w-[180px] truncate`,children:t.memo??`—`}),(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-500`,children:Zr(t.created_at)}),(0,j.jsx)(`td`,{className:`px-5 py-3 text-right`,children:(0,j.jsxs)(`div`,{className:`inline-flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity`,children:[(0,j.jsx)(`button`,{onClick:n=>{n.stopPropagation(),e(`/patients/${t.id}`)},className:`w-7 h-7 rounded-lg flex items-center justify-center text-ink-500 hover:bg-brand-50 hover:text-brand-700 transition-colors`,title:`상세 보기`,children:(0,j.jsx)(I,{name:`chevronRight`,size:14,strokeWidth:2.2})}),(0,j.jsx)(`button`,{onClick:e=>p(t,e),className:`w-7 h-7 rounded-lg flex items-center justify-center text-ink-500 hover:bg-red-50 hover:text-red-700 transition-colors`,title:`삭제`,children:(0,j.jsx)(I,{name:`trash`,size:14,strokeWidth:2.2})})]})})]},t.id))})]})]})}),u&&(0,j.jsx)(Od,{onClose:()=>d(!1),onDone:e=>r(t=>[e,...t])})]})}function Nd(){let{id:e}=Qe(),t=Je(),{showToast:n}=wd(),[r,i]=(0,_.useState)(null),[a,o]=(0,_.useState)([]),[s,c]=(0,_.useState)(!0),[l,u]=(0,_.useState)(!1);if((0,_.useEffect)(()=>{if(!e)return;let t=!1;return(async()=>{try{let n=await xd.get(e);if(t)return;i(n.data);let r=await bd.list({patient_ref_id:n.data.patient_ref_id});if(t)return;o(Array.isArray(r.data)?r.data:[])}catch{t||n({title:`데이터를 불러오지 못했습니다`,kind:`error`})}finally{t||c(!1)}})(),()=>{t=!0}},[e]),s)return(0,j.jsx)(`div`,{className:`px-8 pt-7 text-[13px] text-ink-400`,children:`불러오는 중…`});if(!r)return(0,j.jsx)(`div`,{className:`px-8 pt-7 text-[13px] text-ink-500`,children:`환자 정보를 찾을 수 없습니다.`});let d=r.gender===`F`?`여성`:r.gender===`M`?`남성`:`미입력`;return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5 flex items-center gap-4`,children:[(0,j.jsx)(`button`,{onClick:()=>t(`/patients`),className:`w-8 h-8 rounded-lg flex items-center justify-center text-ink-500 hover:bg-ink-100 transition-colors`,children:(0,j.jsx)(I,{name:`arrowLeft`,size:16})}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:r.name}),(0,j.jsxs)(`p`,{className:`text-[13px] text-ink-500 mt-0.5`,children:[Qr(r.birth_date),` · `,d,` · 등록일 `,Zr(r.created_at)]})]})]}),(0,j.jsxs)(`div`,{className:`px-8 pb-8 grid grid-cols-3 gap-5`,children:[(0,j.jsxs)(`div`,{className:`col-span-1 flex flex-col gap-4`,children:[(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm p-5`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-3 mb-4 pb-4 border-b border-ink-100`,children:[(0,j.jsx)(`div`,{className:P(`w-14 h-14 rounded-full flex items-center justify-center text-xl font-bold`,r.gender===`F`?`bg-pink-100 text-pink-700`:`bg-blue-100 text-blue-700`),children:r.name[0]}),(0,j.jsxs)(`div`,{className:`flex-1`,children:[(0,j.jsx)(`p`,{className:`font-bold text-[16px] text-ink-800`,children:r.name}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500`,children:Zr(r.birth_date)})]}),(0,j.jsx)(`button`,{onClick:()=>u(!0),className:`w-7 h-7 flex items-center justify-center rounded-lg text-ink-400 hover:bg-ink-100 hover:text-ink-700 transition-colors`,title:`정보 수정`,children:(0,j.jsx)(I,{name:`edit`,size:14})})]}),(0,j.jsx)(`div`,{className:`flex flex-col gap-3`,children:[{label:`성별`,value:d},{label:`전체 세션`,value:`${a.length}회`},{label:`최근 세션`,value:a.length>0?Zr(a[0].session_date):`없음`}].map(e=>(0,j.jsxs)(`div`,{className:`flex justify-between items-start`,children:[(0,j.jsx)(`span`,{className:`text-[12px] text-ink-500`,children:e.label}),(0,j.jsx)(`span`,{className:`text-[12px] font-semibold text-ink-800 text-right ml-4`,children:e.value})]},e.label))})]}),r.memo&&(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm p-5`,children:[(0,j.jsx)(`p`,{className:`text-[13px] font-semibold text-ink-800 mb-2`,children:`메모`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 leading-relaxed`,children:r.memo})]})]}),(0,j.jsx)(`div`,{className:`col-span-2`,children:(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm overflow-hidden`,children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between px-5 py-4 border-b border-ink-100`,children:[(0,j.jsx)(`h2`,{className:`text-[15px] font-semibold text-ink-800`,children:`세션 기록`}),(0,j.jsxs)(`button`,{onClick:()=>t(`/sessions/new`),className:`flex items-center gap-1.5 px-3 py-1.5 bg-brand-700 text-white rounded-full text-[12px] font-semibold hover:bg-brand-900 transition-colors`,children:[(0,j.jsx)(I,{name:`plus`,size:13}),`새 세션`]})]}),a.length===0?(0,j.jsx)(`div`,{className:`py-12 text-center text-[13px] text-ink-400`,children:`세션이 없습니다.`}):(0,j.jsxs)(`table`,{className:`w-full text-[13px]`,children:[(0,j.jsx)(`thead`,{children:(0,j.jsxs)(`tr`,{className:`bg-ink-50 border-b border-ink-100`,children:[(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,children:`날짜`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,children:`유형`}),(0,j.jsx)(`th`,{className:`text-left px-5 py-2.5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,children:`상태`})]})}),(0,j.jsx)(`tbody`,{children:a.map(e=>(0,j.jsxs)(`tr`,{onClick:()=>t(`/sessions/${e.id}`),className:`border-t border-ink-100 hover:bg-brand-25 cursor-pointer transition-colors`,children:[(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-500`,children:Zr(e.session_date)}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(`span`,{className:`inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-semibold bg-ink-100 text-ink-600`,children:e.session_type??`—`})}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(Cd,{status:e.status})})]},e.id))})]})]})})]}),l&&r&&(0,j.jsx)(Od,{patient:r,onClose:()=>u(!1),onDone:e=>i(e)})]})}var Pd=[{label:`전체`,value:`all`},{label:`분석 완료`,value:`ANALYSIS_COMPLETED`},{label:`분석 중`,value:`ANALYSIS_PROCESSING`},{label:`리포트`,value:`REPORT_READY`},{label:`실패`,value:`FAILED`}];function Fd(){let e=Je(),{showToast:t}=wd(),[n,r]=(0,_.useState)([]),[i,a]=(0,_.useState)({}),[o,s]=(0,_.useState)(!0),[c,l]=(0,_.useState)(`all`),[u,d]=(0,_.useState)(``);(0,_.useEffect)(()=>{let e=!1;return Promise.all([bd.list(),xd.list()]).then(([t,n])=>{if(e)return;r(t.data);let i={};n.data.forEach(e=>{i[e.patient_ref_id]=e}),a(i)}).catch(()=>{e||t({title:`세션 목록을 불러오지 못했습니다`,kind:`error`})}).finally(()=>{e||s(!1)}),()=>{e=!0}},[]);let f=n.filter(e=>!(c!==`all`&&e.status!==c||u&&!(i[e.patient_ref_id]?.name??``).includes(u)));return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5 flex items-start justify-between`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:`세션 관리`}),(0,j.jsxs)(`p`,{className:`text-[13px] text-ink-500 mt-1`,children:[`총 `,n.length,`개 세션`]})]}),(0,j.jsxs)(`button`,{onClick:()=>e(`/sessions/new`),className:`flex items-center gap-2 px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors shadow-md`,children:[(0,j.jsx)(I,{name:`plus`,size:15}),`새 세션`]})]}),(0,j.jsx)(`div`,{className:`px-8 pb-8`,children:(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm overflow-hidden`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-3 px-5 py-3.5 border-b border-ink-100 flex-wrap`,children:[(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsx)(`span`,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 text-ink-400 pointer-events-none`,children:(0,j.jsx)(I,{name:`search`,size:14})}),(0,j.jsx)(`input`,{value:u,onChange:e=>d(e.target.value),placeholder:`환자 이름 검색…`,className:`h-9 pl-8 pr-3 w-[220px] border border-ink-200 rounded-lg text-[13px] outline-none focus:border-brand-500 font-sans`})]}),(0,j.jsx)(`div`,{className:`flex gap-1.5 ml-auto flex-wrap`,children:Pd.map(e=>(0,j.jsx)(`button`,{onClick:()=>l(e.value),className:P(`px-3 py-1.5 rounded-full text-[12px] font-medium border transition-all`,c===e.value?`bg-brand-700 text-white border-brand-700`:`bg-transparent text-ink-600 border-ink-200 hover:bg-ink-50`),children:e.label},e.value))})]}),o?(0,j.jsx)(`div`,{className:`py-16 text-center text-[13px] text-ink-400`,children:`불러오는 중…`}):f.length===0?(0,j.jsxs)(`div`,{className:`py-16 text-center`,children:[(0,j.jsx)(`div`,{className:`w-16 h-16 rounded-2xl bg-brand-50 flex items-center justify-center text-brand-600 mx-auto mb-4`,children:(0,j.jsx)(I,{name:`audio`,size:28,strokeWidth:1.8})}),(0,j.jsx)(`p`,{className:`text-[15px] font-semibold text-ink-800`,children:`세션이 없습니다`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1.5`,children:`필터를 변경하거나 새 세션을 생성해보세요.`})]}):(0,j.jsxs)(`table`,{className:`w-full text-[13px] border-collapse`,children:[(0,j.jsx)(`thead`,{children:(0,j.jsx)(`tr`,{className:`bg-ink-50`,children:[`#`,`환자`,`날짜`,`유형`,`상태`].map(e=>(0,j.jsx)(`th`,{className:`py-2.5 px-5 text-left text-[11px] font-semibold text-ink-500 uppercase tracking-wider border-b border-ink-100`,children:e},e))})}),(0,j.jsx)(`tbody`,{children:f.map(t=>{let n=i[t.patient_ref_id];return(0,j.jsxs)(`tr`,{onClick:()=>e(`/sessions/${t.id}`),className:`border-t border-ink-100 hover:bg-brand-25 cursor-pointer transition-colors`,children:[(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-400 text-[11px]`,children:t.id.slice(-8)}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,j.jsx)(`div`,{className:`w-8 h-8 rounded-full bg-brand-100 text-brand-700 flex items-center justify-center text-[13px] font-bold`,children:n?n.name[0]:`?`}),(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:n?ei(n.name):t.patient_ref_id.slice(-8)})]})}),(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-500`,children:Zr(t.session_date)}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(`span`,{className:`inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-semibold bg-ink-100 text-ink-600`,children:t.session_type??`—`})}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(Cd,{status:t.status})})]},t.id)})})]})]})})]})}var Id={presignedUrl:e=>V.post(`/audio-files/presigned-url`,e),uploadToS3:(e,t)=>Js.put(e,t,{headers:{"Content-Type":t.type}}),complete:e=>V.post(`/audio-files`,e),get:e=>V.get(`/audio-files/${e}`),delete:e=>V.delete(`/audio-files/${e}`)},Ld={create:e=>V.post(`/analysis-jobs`,e),list:e=>V.get(`/analysis-jobs`,{params:e}),get:e=>V.get(`/analysis-jobs/${e}`),cancel:e=>V.patch(`/analysis-jobs/${e}/cancel`)},Rd={getBySession:e=>V.get(`/sessions/${e}/transcript`),getById:e=>V.get(`/transcripts/${e}`),listSegments:e=>V.get(`/transcripts/${e}/segments`),finalize:e=>V.post(`/transcripts/${e}/finalize`),updateSegment:(e,t,n)=>V.patch(`/transcripts/${e}/segments/${t}`,n),bulkUpdateSegments:(e,t)=>V.patch(`/transcripts/${e}/segments`,{segments:t}),createSegment:(e,t)=>V.post(`/transcripts/${e}/segments`,t),deleteSegment:(e,t)=>V.delete(`/transcripts/${e}/segments/${t}`)},zd={list:e=>V.get(`/reports`,{params:e}),get:e=>V.get(`/reports/${e}`),listSegments:e=>V.get(`/reports/${e}/segments`),updateSegment:(e,t,n)=>V.patch(`/reports/${e}/segments/${t}`,n),updateStatus:(e,t)=>V.patch(`/reports/${e}/status`,{status:t}),download:e=>V.get(`/reports/${e}/download`,{responseType:`blob`}),sendChatMessage:(e,t)=>V.post(`/reports/${e}/chat/messages`,{message:t},{timeout:65e3}),applyPatch:e=>V.post(`/reports/patch-proposals/${e}/apply`)},Bd={".pdf":`application/pdf`,".doc":`application/msword`,".docx":`application/vnd.openxmlformats-officedocument.wordprocessingml.document`,".xls":`application/vnd.ms-excel`,".xlsx":`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`,".ppt":`application/vnd.ms-powerpoint`,".pptx":`application/vnd.openxmlformats-officedocument.presentationml.presentation`,".hwp":`application/x-hwp`,".hwpx":`application/x-hwpx`,".txt":`text/plain`,".rtf":`application/rtf`,".csv":`text/csv`,".odt":`application/vnd.oasis.opendocument.text`,".ods":`application/vnd.oasis.opendocument.spreadsheet`,".odp":`application/vnd.oasis.opendocument.presentation`};function Vd(e){return Bd[e.name.slice(e.name.lastIndexOf(`.`)).toLowerCase()]??(e.type||`application/octet-stream`)}var Hd={list:()=>V.get(`/templates`),get:e=>V.get(`/templates/${e}`),create:e=>V.post(`/templates`,e),presignedUrl:e=>V.post(`/templates/presigned-url`,e),confirm:(e,t)=>V.post(`/templates/${e}/confirm`,t??{}),update:(e,t)=>V.patch(`/templates/${e}`,t),delete:e=>V.delete(`/templates/${e}`),getFileUrl:e=>V.get(`/templates/${e}/file`)},Ud={S:`S — Subjective`,O:`O — Objective`,A:`A — Assessment`,P:`P — Plan`};function Wd({report:e,onPatchApplied:t}){let{showToast:n}=wd(),[r,i]=(0,_.useState)([]),[a,o]=(0,_.useState)(``),[s,c]=(0,_.useState)(!1),[l,u]=(0,_.useState)(null),d=(0,_.useRef)(null),f=(0,_.useRef)(null);(0,_.useEffect)(()=>{d.current?.scrollIntoView({behavior:`smooth`})},[r]);let p=async()=>{let t=a.trim();if(!(!t||s)){o(``),c(!0),i(e=>[...e,{role:`user`,content:t}]);try{let{data:n}=await zd.sendChatMessage(e.id,t);i(e=>[...e,{role:`assistant`,content:n.assistant_message,patch:n.patch_proposal??void 0}])}catch(e){n({title:Js.isAxiosError(e)&&e.code===`ECONNABORTED`?`AI 응답이 지연되고 있습니다. 잠시 후 새로고침해 확인해주세요`:`메시지 전송에 실패했습니다`,kind:`error`}),i(e=>e.slice(0,-1)),o(t)}finally{c(!1),f.current?.focus()}}},m=async(e,r)=>{u(e.patch_id);try{let{data:a}=await zd.applyPatch(e.patch_id);t(a.version,a.updated_sections),i(e=>e.map((e,t)=>t===r?{...e,patch:void 0}:e)),n({title:`수정안이 리포트에 반영되었습니다`,kind:`success`})}catch(e){e?.response?.status===409?n({title:`리포트가 변경되어 반영할 수 없습니다. 다시 요청해주세요.`,kind:`error`}):n({title:`반영에 실패했습니다`,kind:`error`})}finally{u(null)}},h=e=>{i(t=>t.map((t,n)=>n===e?{...t,patch:void 0}:t))};return(0,j.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,j.jsxs)(`div`,{className:`px-4 py-3 border-b border-ink-100 flex-shrink-0 flex items-start justify-between gap-2`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[13px] font-bold text-ink-800`,children:`AI 보조`}),(0,j.jsx)(`p`,{className:`text-[11px] text-ink-400 mt-0.5`,children:`수정 제안을 요청하거나 근거를 확인하세요`})]}),(0,j.jsxs)(`button`,{onClick:()=>window.open(`/insight-map?report_id=${e.id}`,`_blank`,`noopener,noreferrer`),title:`인사이트맵 열기`,className:`flex-shrink-0 flex items-center gap-1 px-2 py-1 rounded-lg border border-ink-200 text-ink-500 text-[10px] font-semibold hover:bg-ink-50 transition-colors`,children:[(0,j.jsx)(I,{name:`network`,size:12}),`인사이트맵`]})]}),(0,j.jsxs)(`div`,{className:`flex-1 overflow-y-auto px-4 py-4 flex flex-col gap-3 min-h-0`,children:[r.length===0&&(0,j.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center gap-2 text-center py-8`,children:[(0,j.jsx)(I,{name:`clipboard`,size:28,className:`text-ink-300`}),(0,j.jsxs)(`p`,{className:`text-[12px] text-ink-400 leading-relaxed`,children:[`섹션 수정, 근거 확인, 형식 검토 등을`,(0,j.jsx)(`br`,{}),`자유롭게 요청하세요`]})]}),r.map((e,t)=>(0,j.jsxs)(`div`,{className:P(`flex flex-col gap-2`,e.role===`user`?`items-end`:`items-start`),children:[(0,j.jsx)(`div`,{className:P(`px-3 py-2 rounded-2xl text-[12px] leading-relaxed max-w-[90%] whitespace-pre-wrap`,e.role===`user`?`bg-brand-700 text-white rounded-br-sm`:`bg-ink-50 text-ink-800 rounded-bl-sm`),children:e.content}),e.patch&&(0,j.jsxs)(`div`,{className:`w-full border border-brand-200 rounded-xl overflow-hidden bg-white shadow-sm`,children:[(0,j.jsxs)(`div`,{className:`bg-brand-50 px-3 py-2 flex items-center gap-1.5`,children:[(0,j.jsx)(I,{name:`edit`,size:12,className:`text-brand-700`}),(0,j.jsxs)(`span`,{className:`text-[11px] font-bold text-brand-700`,children:[`수정 제안 — `,Ud[e.patch.target_section]??e.patch.target_section]})]}),(0,j.jsxs)(`div`,{className:`px-3 py-2 flex flex-col gap-2`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[10px] font-bold text-ink-400 uppercase tracking-wide mb-1`,children:`원문`}),(0,j.jsx)(`p`,{className:`text-[11px] text-ink-500 leading-relaxed line-through whitespace-pre-wrap`,children:e.patch.original_text})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[10px] font-bold text-ink-400 uppercase tracking-wide mb-1`,children:`수정안`}),(0,j.jsx)(`p`,{className:`text-[11px] text-ink-800 leading-relaxed whitespace-pre-wrap`,children:e.patch.proposed_text})]}),e.patch.rationale&&(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[10px] font-bold text-ink-400 uppercase tracking-wide mb-1`,children:`수정 이유`}),(0,j.jsx)(`p`,{className:`text-[11px] text-ink-500 leading-relaxed`,children:e.patch.rationale})]})]}),(0,j.jsxs)(`div`,{className:`px-3 pb-3 flex gap-2`,children:[(0,j.jsx)(`button`,{onClick:()=>m(e.patch,t),disabled:l!==null,className:`flex-1 py-1.5 bg-brand-700 text-white text-[11px] font-semibold rounded-lg hover:bg-brand-900 transition-colors disabled:opacity-60`,children:l===e.patch.patch_id?`반영 중…`:`반영`}),(0,j.jsx)(`button`,{onClick:()=>h(t),disabled:l!==null,className:`flex-1 py-1.5 border border-ink-200 text-ink-600 text-[11px] font-semibold rounded-lg hover:bg-ink-50 transition-colors disabled:opacity-60`,children:`무시`})]})]})]},t)),s&&(0,j.jsx)(`div`,{className:`flex items-start`,children:(0,j.jsx)(`div`,{className:`bg-ink-50 px-3 py-2 rounded-2xl rounded-bl-sm`,children:(0,j.jsx)(`span`,{className:`text-[12px] text-ink-400 animate-pulse`,children:`AI가 생각 중…`})})}),(0,j.jsx)(`div`,{ref:d})]}),(0,j.jsxs)(`div`,{className:`px-3 pb-3 pt-2 flex-shrink-0 border-t border-ink-100`,children:[(0,j.jsxs)(`div`,{className:`flex items-end gap-2 bg-ink-50 rounded-xl px-3 py-2`,children:[(0,j.jsx)(`textarea`,{ref:f,value:a,onChange:e=>o(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),p())},placeholder:`요청을 입력하세요 (Shift+Enter로 줄바꿈)`,rows:1,disabled:s,className:P(`flex-1 bg-transparent text-[12px] text-ink-800 placeholder-ink-400`,`outline-none resize-none leading-relaxed max-h-24 overflow-y-auto`,`disabled:opacity-60`)}),(0,j.jsx)(`button`,{onClick:p,disabled:!a.trim()||s,className:`flex-shrink-0 w-7 h-7 flex items-center justify-center bg-brand-700 text-white rounded-lg hover:bg-brand-900 transition-colors disabled:opacity-40`,children:(0,j.jsx)(I,{name:`send`,size:13})})]}),(0,j.jsx)(`p`,{className:`text-[10px] text-ink-300 mt-1.5 text-center`,children:`AI 제안은 반드시 치료사가 검토 후 반영하세요`})]})]})}var Gd=[{id:1,label:`음성 업로드`,sub:`Upload`},{id:2,label:`AI 분석`,sub:`Analyze`},{id:3,label:`전사 검토`,sub:`Review`},{id:4,label:`리포트`,sub:`Report`}];function Kd(e){return e===`CREATED`||e===`AUDIO_UPLOADING`?1:e===`AUDIO_UPLOADED`||e===`ANALYSIS_REQUESTED`||e===`ANALYSIS_PROCESSING`||e===`FAILED`?2:e===`ANALYSIS_COMPLETED`||e===`REPORT_GENERATING`?3:4}var qd={PATIENT:{label:`환자`,bg:`bg-brand-100`,fg:`text-brand-700`},SLP:{label:`치료사`,bg:`bg-blue-100`,fg:`text-blue-700`},GUARDIAN:{label:`보호자`,bg:`bg-purple-100`,fg:`text-purple-700`},UNKNOWN:{label:`미상`,bg:`bg-ink-100`,fg:`text-ink-600`}},Jd={SUBJECTIVE:`Subjective — 주관적 정보`,OBJECTIVE:`Objective — 객관적 정보`,ASSESSMENT:`Assessment — 평가`,PLAN:`Plan — 계획`,CUSTOM:`Custom — 기타`};function Yd(){let{id:e}=Qe(),t=Je(),{showToast:n}=wd(),[r,i]=(0,_.useState)(null),[a,o]=(0,_.useState)(null),[s,c]=(0,_.useState)(1),[l,u]=(0,_.useState)(!0),[d,f]=(0,_.useState)(!1),[p,m]=(0,_.useState)(``),h=(0,_.useRef)(null),[g,v]=(0,_.useState)([]),[y,b]=(0,_.useState)(``),[x,S]=(0,_.useState)(null),C=(0,_.useRef)(null),[w,ee]=(0,_.useState)(!1),[T,E]=(0,_.useState)(!1),[D,O]=(0,_.useState)(null),[te,k]=(0,_.useState)([]),[ne,re]=(0,_.useState)(!1),[ie,ae]=(0,_.useState)(null),[oe,se]=(0,_.useState)(``),[ce,le]=(0,_.useState)(`UNKNOWN`),[ue,de]=(0,_.useState)(!1),[fe,pe]=(0,_.useState)(null),[me,he]=(0,_.useState)(null),[ge,_e]=(0,_.useState)({}),[ve,ye]=(0,_.useState)(!1),[be,xe]=(0,_.useState)(null),[Se,Ce]=(0,_.useState)([]),[we,Te]=(0,_.useState)(null),[Ee,De]=(0,_.useState)(``),[Oe,ke]=(0,_.useState)(!1),[Ae,je]=(0,_.useState)(!1),[Me,Ne]=(0,_.useState)(!1),[Pe,Fe]=(0,_.useState)(!1),Ie=(0,_.useCallback)(async()=>{if(!e)return;let{data:t}=await bd.get(e);return i(t),c(Kd(t.status)),t},[e]);(0,_.useEffect)(()=>{Hd.list().then(({data:e})=>v(e.filter(e=>e.status===`ACTIVE`))).catch(()=>{})},[]),(0,_.useEffect)(()=>{if(!e)return;let t=!1;return u(!0),bd.get(e).then(async({data:n})=>{if(t)return;i(n);let r=Kd(n.status);if(c(r),await xd.getByRef(n.patient_ref_id).then(({data:e})=>{t||o(e)}).catch(()=>{}),!t){if(r===2){let n=await Ld.list({session_id:e});!t&&n.data.length>0&&S(n.data[0])}if(r===3){let r=await Rd.getBySession(e);if(t)return;O(r.data);let i=await Rd.listSegments(r.data.id);t||(k(i.data),n.status===`REPORT_GENERATING`&&E(!0))}if(r===4){let[n,r]=await Promise.all([Rd.getBySession(e),zd.list({session_id:e})]);if(t)return;O(n.data);let i=await Rd.listSegments(n.data.id);if(t)return;if(k(i.data),r.data.length>0){let e=r.data[0];xe(e);let n=await zd.listSegments(e.id);t||Ce(n.data)}}}}).catch(()=>{t||n({title:`세션 정보를 불러오지 못했습니다`,kind:`error`})}).finally(()=>{t||u(!1)}),()=>{t=!0}},[e]),(0,_.useEffect)(()=>{if(s!==2){C.current&&clearInterval(C.current);return}return C.current=setInterval(async()=>{if(e)try{let{data:t}=await bd.get(e);i(t);let n=Kd(t.status);if(t.status===`FAILED`){C.current&&clearInterval(C.current);return}if(n!==2)c(n),C.current&&clearInterval(C.current),n===3&&(t.status===`REPORT_GENERATING`&&E(!0),Rd.getBySession(e).then(async({data:e})=>{O(e),k((await Rd.listSegments(e.id)).data)}));else{let t=await Ld.list({session_id:e});t.data.length>0&&S(t.data[0])}}catch{}},1e4),()=>{C.current&&clearInterval(C.current)}},[s,e]),(0,_.useEffect)(()=>{if(!T||!e)return;let t=!1,r=setInterval(async()=>{if(!t)try{let{data:a}=await bd.get(e);if(i(a),a.status===`REPORT_READY`){t=!0,E(!1),clearInterval(r);let[n,i]=await Promise.all([Rd.getBySession(e),zd.list({session_id:e})]);if(O(n.data),k((await Rd.listSegments(n.data.id)).data),i.data.length>0){let e=i.data[0];xe(e),Ce((await zd.listSegments(e.id)).data)}c(4)}else a.status===`FAILED`||a.status===`DELETED`?(t=!0,E(!1),clearInterval(r),n({title:`리포트 생성에 실패했습니다`,kind:`error`})):a.status!==`REPORT_GENERATING`&&a.status!==`ANALYSIS_COMPLETED`&&(t=!0,E(!1),clearInterval(r),n({title:`예상치 못한 상태입니다: ${a.status}`,kind:`error`}))}catch{}},1e4);return()=>clearInterval(r)},[T,e]);let Le=async t=>{if(e){f(!0);try{m(`presigned URL 발급 중…`);let{data:r}=await Id.presignedUrl({file_name:t.name,content_type:t.type,session_id:e,file_size:t.size});m(`S3에 업로드 중…`),await Id.uploadToS3(r.upload_url,t),m(`업로드 확인 중…`);let{data:i}=await Id.complete({session_id:e,object_key:r.object_key});m(`AI 분석 요청 중…`);let{data:a}=await Ld.create({session_id:e,audio_file_id:i.id,...y?{template_id:y}:{}});S(a),O(null),k([]),n({title:`음성 파일이 업로드되었습니다`,body:`AI 분석을 시작합니다.`,kind:`success`}),await Ie()}catch(e){console.error(`[upload]`,e),n({title:`업로드에 실패했습니다`,body:`파일 형식 및 네트워크를 확인해주세요.`,kind:`error`})}finally{f(!1),m(``)}}},Re=async()=>{if(x){ee(!0);try{let{data:e}=await Ld.cancel(x.id);S(e.job),n({title:`분석이 취소되었습니다`,kind:`info`}),await Ie()}catch(e){console.error(`[cancel]`,e),n({title:`취소에 실패했습니다`,kind:`error`})}finally{ee(!1)}}},ze=async()=>{if(!(!e||!x))try{let t=y||x.template_id||void 0,{data:n}=await Ld.create({session_id:e,audio_file_id:x.audio_file_id,...t?{template_id:t}:{}});S(n),O(null),k([]),await Ie()}catch(e){console.error(`[request-analysis]`,e),n({title:`분석 요청에 실패했습니다`,kind:`error`})}};(0,_.useEffect)(()=>{te.length!==0&&_e(e=>{let t={...e};return te.forEach(e=>{let n=e.speaker_label??`UNKNOWN`;n in t||(t[n]=e.speaker_role)}),t})},[te]);let Be=async()=>{if(D){ye(!0);try{let e=te.filter(e=>{let t=e.speaker_label??`UNKNOWN`;return ge[t]&&ge[t]!==e.speaker_role}).map(e=>({segment_id:e.id,speaker_role:ge[e.speaker_label??`UNKNOWN`]}));if(e.length===0)return;let{data:t}=await Rd.bulkUpdateSegments(D.id,e);k(e=>{let n=new Map(t.map(e=>[e.id,e]));return e.map(e=>n.get(e.id)??e)}),n({title:`화자 역할이 일괄 적용되었습니다`,kind:`success`})}catch{n({title:`일괄 적용에 실패했습니다`,kind:`error`})}finally{ye(!1)}}},Ve=e=>{ae(e.id),se(e.text??e.original_text??``),le(e.speaker_role)},He=()=>ae(null),Ue=async e=>{if(D){he(e.id);try{let{data:t}=await Rd.createSegment(D.id,{after_segment_id:e.id});k(n=>{let r=n.findIndex(t=>t.id===e.id),i=[...n];return i.splice(r+1,0,t),i}),ae(t.id),se(``),le(`UNKNOWN`)}catch{n({title:`삽입에 실패했습니다`,kind:`error`})}finally{he(null)}}},We=async e=>{if(D){pe(e.id);try{await Rd.deleteSegment(D.id,e.id),k(t=>t.filter(t=>t.id!==e.id))}catch{n({title:`삭제에 실패했습니다`,kind:`error`})}finally{pe(null)}}},Ge=async e=>{if(D){de(!0);try{let{data:t}=await Rd.updateSegment(D.id,e.id,{text:oe,speaker_role:ce});k(e=>e.map(e=>e.id===t.id?t:e)),ae(null)}catch{n({title:`저장에 실패했습니다`,kind:`error`})}finally{de(!1)}}},Ke=async()=>{if(!(!D||!e)){re(!0);try{await Rd.finalize(D.id),n({title:`전사가 확정되었습니다. 리포트를 생성하고 있습니다.`,kind:`success`}),E(!0)}catch{n({title:`전사 확정에 실패했습니다`,kind:`error`})}finally{re(!1)}}},qe=e=>{Te(e.id),De(e.content??e.ai_content??``)},Ye=()=>Te(null),Xe=async e=>{if(be){ke(!0);try{let{data:t}=await zd.updateSegment(be.id,e.id,{content:Ee});Ce(e=>e.map(e=>e.id===t.id?t:e)),Te(null)}catch{n({title:`저장에 실패했습니다`,kind:`error`})}finally{ke(!1)}}},Ze=(e,t)=>{xe(t=>t&&{...t,version:e}),be&&zd.listSegments(be.id).then(({data:e})=>Ce(e)).catch(()=>n({title:`리포트를 다시 불러오지 못했습니다`,kind:`error`}))},$e=async()=>{if(be){je(!0);try{let{data:e}=await zd.updateStatus(be.id,`FINALIZED`);xe(e),n({title:`리포트가 확정되었습니다`,kind:`success`})}catch{n({title:`확정에 실패했습니다`,kind:`error`})}finally{je(!1)}}},et=async()=>{if(r?.status===`CREATED`&&e)try{await bd.delete(e)}catch{}t(-1)},tt=async()=>{if(e){Fe(!0);try{await bd.delete(e),n({title:`세션이 삭제되었습니다`,kind:`success`}),t(`/sessions`)}catch{n({title:`세션 삭제에 실패했습니다`,kind:`error`}),Fe(!1),Ne(!1)}}};if(l)return(0,j.jsx)(`div`,{className:`px-8 pt-7 text-[13px] text-ink-400`,children:`불러오는 중…`});if(!r)return(0,j.jsx)(`div`,{className:`px-8 pt-7 text-[13px] text-ink-500`,children:`세션을 찾을 수 없습니다.`});let nt=be?.status===`FINALIZED`;return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5 flex items-center gap-4`,children:[(0,j.jsx)(`button`,{onClick:et,className:`w-8 h-8 rounded-lg flex items-center justify-center text-ink-500 hover:bg-ink-100 transition-colors`,children:(0,j.jsx)(I,{name:`arrowLeft`,size:16})}),(0,j.jsxs)(`div`,{className:`flex-1`,children:[(0,j.jsxs)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:[`세션 — `,a?.name??`—`]}),(0,j.jsxs)(`p`,{className:`text-[13px] text-ink-500 mt-0.5`,children:[Zr(r.session_date),` · `,r.session_type??`—`]})]}),Me?(0,j.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,j.jsx)(`span`,{className:`text-[13px] text-red-600 font-medium`,children:`삭제하시겠어요?`}),(0,j.jsx)(`button`,{onClick:tt,disabled:Pe,className:`px-3 py-1.5 bg-red-600 text-white rounded-full text-[12px] font-semibold hover:bg-red-700 disabled:opacity-60 transition-colors`,children:Pe?`삭제 중…`:`확인`}),(0,j.jsx)(`button`,{onClick:()=>Ne(!1),className:`px-3 py-1.5 border border-ink-200 text-ink-600 rounded-full text-[12px] font-semibold hover:bg-ink-50 transition-colors`,children:`취소`})]}):(0,j.jsx)(`button`,{onClick:()=>Ne(!0),className:`w-8 h-8 rounded-lg flex items-center justify-center text-ink-400 hover:bg-red-50 hover:text-red-600 transition-colors`,title:`세션 삭제`,children:(0,j.jsx)(I,{name:`trash`,size:15})})]}),(0,j.jsxs)(`div`,{className:`px-8 pb-8 flex flex-col gap-5`,children:[(0,j.jsx)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm p-6`,children:(0,j.jsx)(`div`,{className:`flex items-center`,children:Gd.map((e,t)=>{let n=s>e.id,r=s===e.id;return(0,j.jsxs)(`div`,{className:`flex items-center flex-1 last:flex-none`,children:[(0,j.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,children:[(0,j.jsx)(`div`,{className:P(`w-8 h-8 rounded-full flex items-center justify-center text-[13px] font-bold border-2 transition-all`,n?`bg-brand-700 border-brand-700 text-white`:r?`bg-white border-brand-700 text-brand-700 shadow-[0_0_0_5px_rgba(26,60,52,0.12)]`:`bg-white border-ink-300 text-ink-400`),children:n?(0,j.jsx)(I,{name:`check`,size:14,strokeWidth:3}):e.id}),(0,j.jsxs)(`div`,{className:`text-center`,children:[(0,j.jsx)(`p`,{className:P(`text-[12px] whitespace-nowrap`,n||r?`font-semibold text-ink-800`:`text-ink-400`),children:e.label}),(0,j.jsx)(`p`,{className:`text-[10px] text-ink-400`,children:e.sub})]})]}),t0&&(0,j.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,j.jsx)(`label`,{className:`text-[13px] font-semibold text-ink-700`,children:`리포트 템플릿 선택`}),(0,j.jsxs)(`select`,{value:y,onChange:e=>b(e.target.value),disabled:d,className:`w-full border border-ink-200 rounded-lg px-3 py-2 text-[13px] text-ink-700 bg-white outline-none focus:border-brand-500 focus:ring-2 focus:ring-brand-500/16 disabled:opacity-60`,children:[(0,j.jsx)(`option`,{value:``,children:`기본 SOAP Note`}),g.map(e=>(0,j.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),(0,j.jsx)(`p`,{className:`text-[11px] text-ink-400`,children:`선택한 템플릿 구조에 맞춰 리포트가 생성됩니다.`})]}),(0,j.jsx)(`input`,{ref:h,type:`file`,accept:`audio/*,.wav,.mp3,.m4a`,className:`hidden`,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&Le(t)}}),(0,j.jsxs)(`div`,{className:P(`border-2 border-dashed rounded-xl p-10 text-center transition-colors`,d?`border-brand-400 bg-brand-25 cursor-wait`:`border-ink-200 hover:border-brand-400 cursor-pointer`),onClick:()=>!d&&h.current?.click(),onDragOver:e=>e.preventDefault(),onDrop:e=>{if(e.preventDefault(),!d){let t=e.dataTransfer.files?.[0];t&&Le(t)}},children:[(0,j.jsx)(`div`,{className:`w-14 h-14 rounded-xl bg-brand-50 flex items-center justify-center text-brand-600 mx-auto mb-3`,children:d?(0,j.jsx)(`div`,{className:`w-6 h-6 rounded-full border-2 border-brand-200 border-t-brand-700`,style:{animation:`spin 0.8s linear infinite`}}):(0,j.jsx)(I,{name:`upload`,size:24,strokeWidth:1.8})}),d?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:`업로드 중…`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1`,children:p})]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:`파일을 드래그하거나 클릭해서 업로드`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1`,children:`WAV, MP3, M4A · 최대 500MB`})]})]})]})]}),s===2&&(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm`,children:[(0,j.jsx)(`div`,{className:`px-6 py-4 border-b border-ink-100`,children:(0,j.jsx)(`p`,{className:`text-[16px] font-semibold text-ink-800`,children:r.status===`FAILED`?`AI 분석 실패`:`AI 분석 중`})}),(0,j.jsx)(`div`,{className:`p-6 text-center`,children:r.status===`FAILED`?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`div`,{className:`w-16 h-16 rounded-full bg-red-50 flex items-center justify-center text-red-500 mx-auto mb-4`,children:(0,j.jsx)(I,{name:`alert`,size:28,strokeWidth:1.8})}),(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:`분석 중 오류가 발생했습니다`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1`,children:x?.error_message??`알 수 없는 오류`})]}):r.status===`AUDIO_UPLOADED`?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`div`,{className:`w-16 h-16 rounded-full bg-ink-50 flex items-center justify-center text-ink-400 mx-auto mb-4`,children:(0,j.jsx)(I,{name:`x`,size:28,strokeWidth:1.8})}),(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:`분석이 취소되었습니다`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1`,children:`분석을 다시 요청할 수 있습니다.`}),x&&(0,j.jsxs)(`div`,{className:`mt-4 flex flex-col items-center gap-2`,children:[g.length>0&&(0,j.jsxs)(`select`,{value:y||x.template_id||``,onChange:e=>b(e.target.value),className:`border border-ink-200 rounded-lg px-3 py-1.5 text-[12px] text-ink-700 bg-white outline-none focus:border-brand-500`,children:[(0,j.jsx)(`option`,{value:``,children:`기본 SOAP Note`}),g.map(e=>(0,j.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),(0,j.jsx)(`button`,{onClick:ze,className:`px-4 py-1.5 bg-brand-600 text-white rounded-full text-[12px] font-semibold hover:bg-brand-700 transition-colors`,children:`다시 분석 요청`})]})]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`div`,{className:`w-16 h-16 rounded-full border-4 border-brand-200 border-t-brand-700 mx-auto mb-4`,style:{animation:`spin 1s linear infinite`}}),(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:`음성을 분석하고 있습니다`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1`,children:x?.pipeline_stage?`현재 단계: ${x.pipeline_stage}`:`작업 완료 이후 알림을 보내드립니다`}),(0,j.jsx)(`p`,{className:`text-[11px] text-ink-400 mt-4`,children:`페이지를 벗어나도 분석은 계속됩니다.`}),x&&[`PENDING`,`DOWNLOADING`,`RETRYING`].includes(x.status)&&(0,j.jsx)(`button`,{onClick:Re,disabled:w,className:`mt-4 px-4 py-1.5 border border-ink-200 text-ink-500 rounded-full text-[12px] font-semibold hover:bg-ink-50 disabled:opacity-60 transition-colors`,children:w?`취소 중…`:`분석 취소`})]})})]}),s===3&&D&&(0,j.jsx)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm`,children:T?(0,j.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-16 gap-4`,children:[(0,j.jsx)(`div`,{className:`w-8 h-8 rounded-full border-2 border-brand-200 border-t-brand-600 animate-spin`}),(0,j.jsx)(`p`,{className:`text-[14px] font-semibold text-ink-700`,children:`리포트를 생성하고 있습니다`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-400`,children:`작업 완료 이후 알림을 보내드립니다.`})]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between px-6 py-4 border-b border-ink-100`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[16px] font-semibold text-ink-800`,children:`전사 검토`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-0.5`,children:`텍스트나 화자를 수정한 뒤 확정하세요`})]}),(0,j.jsxs)(`button`,{onClick:Ke,disabled:ne||!!ie,className:`flex items-center gap-1.5 px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors disabled:opacity-60`,children:[(0,j.jsx)(I,{name:`chevronRight`,size:14}),ne?`처리 중…`:`전사 확정`]})]}),Object.keys(ge).length>0&&(0,j.jsxs)(`div`,{className:`px-6 py-3 border-b border-ink-100 bg-ink-25 flex flex-wrap items-center gap-3`,children:[(0,j.jsx)(`span`,{className:`text-[12px] font-semibold text-ink-600 flex-shrink-0`,children:`화자 일괄 지정`}),Object.entries(ge).map(([e,t])=>(0,j.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,j.jsx)(`span`,{className:`text-[12px] font-mono text-ink-500`,children:e}),(0,j.jsx)(`span`,{className:`text-[11px] text-ink-300`,children:`→`}),(0,j.jsxs)(`select`,{value:t,onChange:t=>_e(n=>({...n,[e]:t.target.value})),className:`text-[11px] border border-ink-200 rounded-md px-1.5 py-0.5 bg-white outline-none focus:border-brand-500`,children:[(0,j.jsx)(`option`,{value:`PATIENT`,children:`환자`}),(0,j.jsx)(`option`,{value:`SLP`,children:`치료사`}),(0,j.jsx)(`option`,{value:`GUARDIAN`,children:`보호자`}),(0,j.jsx)(`option`,{value:`UNKNOWN`,children:`미상`})]})]},e)),(0,j.jsx)(`button`,{onClick:Be,disabled:ve,className:`ml-auto px-3 py-1 bg-brand-700 text-white rounded-full text-[12px] font-semibold hover:bg-brand-900 disabled:opacity-60 transition-colors`,children:ve?`적용 중…`:`일괄 적용`})]}),(0,j.jsx)(`div`,{className:`divide-y divide-ink-50`,children:te.length===0?(0,j.jsx)(`p`,{className:`text-[13px] text-ink-400 text-center py-8`,children:`전사 결과가 없습니다.`}):te.map(e=>{let t=ie===e.id,n=qd[e.speaker_role],r=e.text??e.original_text??``;return(0,j.jsxs)(`div`,{className:P(`flex gap-3 items-start px-6 py-3`,t?`bg-brand-25`:`hover:bg-ink-50 group`),children:[(0,j.jsx)(`span`,{className:`text-[11px] font-mono text-ink-400 pt-1 w-14 flex-shrink-0`,children:$r(e.start_ms)}),t?(0,j.jsxs)(`select`,{value:ce,onChange:e=>le(e.target.value),className:`text-[11px] font-semibold border border-ink-200 rounded-md px-1.5 py-0.5 bg-white outline-none focus:border-brand-500 flex-shrink-0 h-fit mt-0.5`,children:[(0,j.jsx)(`option`,{value:`PATIENT`,children:`환자`}),(0,j.jsx)(`option`,{value:`SLP`,children:`치료사`}),(0,j.jsx)(`option`,{value:`GUARDIAN`,children:`보호자`}),(0,j.jsx)(`option`,{value:`UNKNOWN`,children:`미상`})]}):(0,j.jsx)(`span`,{className:P(`text-[11px] font-semibold px-2 py-0.5 rounded-md flex-shrink-0 mt-0.5`,n.bg,n.fg),children:n.label}),t?(0,j.jsxs)(`div`,{className:`flex-1 flex flex-col gap-2`,children:[(0,j.jsx)(`textarea`,{value:oe,onChange:e=>se(e.target.value),rows:3,autoFocus:!0,className:`w-full px-3 py-2 rounded-lg text-[13px] border border-brand-400 bg-white outline-none focus:ring-2 focus:ring-brand-500/16 resize-none font-sans leading-relaxed`}),(0,j.jsxs)(`div`,{className:`flex gap-2`,children:[(0,j.jsx)(`button`,{onClick:()=>Ge(e),disabled:ue,className:`px-3 py-1 bg-brand-700 text-white rounded-full text-[12px] font-semibold hover:bg-brand-900 disabled:opacity-60 transition-colors`,children:ue?`저장 중…`:`저장`}),(0,j.jsx)(`button`,{onClick:He,className:`px-3 py-1 border border-ink-200 text-ink-600 rounded-full text-[12px] font-semibold hover:bg-ink-50 transition-colors`,children:`취소`}),(0,j.jsx)(`button`,{onClick:()=>{He(),We(e)},disabled:fe===e.id,className:`ml-auto px-3 py-1 text-red-500 border border-red-200 rounded-full text-[12px] font-semibold hover:bg-red-50 disabled:opacity-60 transition-colors`,children:fe===e.id?`삭제 중…`:`이 행 삭제`})]})]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`p`,{className:P(`text-[13px] leading-relaxed flex-1`,e.is_edited?`text-brand-700`:`text-ink-700`),children:[r,e.is_edited&&(0,j.jsx)(`span`,{className:`ml-1.5 text-[10px] text-brand-500 font-semibold`,children:`수정됨`})]}),(0,j.jsx)(`button`,{onClick:()=>Ve(e),className:`opacity-0 group-hover:opacity-100 transition-opacity w-6 h-6 flex items-center justify-center rounded-md text-ink-400 hover:bg-ink-100 flex-shrink-0 mt-0.5`,title:`수정`,children:(0,j.jsx)(I,{name:`edit`,size:13})}),(0,j.jsx)(`button`,{onClick:()=>Ue(e),disabled:me===e.id,className:`opacity-0 group-hover:opacity-100 transition-opacity w-6 h-6 flex items-center justify-center rounded-md text-ink-400 hover:bg-ink-100 flex-shrink-0 mt-0.5 disabled:opacity-60`,title:`아래에 행 삽입`,children:(0,j.jsx)(I,{name:`plus`,size:13})}),(0,j.jsx)(`button`,{onClick:()=>We(e),disabled:fe===e.id,className:`opacity-0 group-hover:opacity-100 transition-opacity w-6 h-6 flex items-center justify-center rounded-md text-red-400 hover:bg-red-50 flex-shrink-0 mt-0.5 disabled:opacity-60`,title:`이 행 삭제`,children:(0,j.jsx)(I,{name:`trash`,size:13})})]})]},e.id)})})]})}),s===4&&(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm`,children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between px-6 py-4 border-b border-ink-100`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`text-[16px] font-semibold text-ink-800`,children:`리포트`}),nt&&(0,j.jsxs)(`span`,{className:`inline-flex items-center gap-1 mt-1 text-[11px] font-semibold text-green-700 bg-green-100 px-2 py-0.5 rounded-md`,children:[(0,j.jsx)(I,{name:`check`,size:11,strokeWidth:3}),`확정됨`]})]}),!nt&&be&&(0,j.jsx)(`button`,{onClick:$e,disabled:Ae,className:`px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 disabled:opacity-60 transition-colors`,children:Ae?`처리 중…`:`리포트 확정`})]}),be?(0,j.jsx)(`div`,{className:`p-6 grid grid-cols-2 gap-4`,children:Se.map(e=>{let t=we===e.id,n=e.content??e.ai_content??``;return(0,j.jsxs)(`div`,{className:`bg-ink-50 rounded-xl p-4`,children:[(0,j.jsx)(`p`,{className:`text-[11px] font-bold text-brand-700 uppercase tracking-wide mb-2`,children:Jd[e.segment_type]??e.segment_type}),nt?(0,j.jsx)(`p`,{className:`text-[13px] text-ink-700 leading-relaxed whitespace-pre-wrap`,children:n||`—`}):t?(0,j.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,j.jsx)(`textarea`,{value:Ee,onChange:e=>De(e.target.value),rows:5,autoFocus:!0,className:`w-full bg-white rounded-lg px-3 py-2 text-[13px] text-ink-700 leading-relaxed border border-brand-400 outline-none focus:ring-2 focus:ring-brand-500/16 resize-none font-sans`}),(0,j.jsxs)(`div`,{className:`flex gap-2`,children:[(0,j.jsx)(`button`,{onClick:()=>Xe(e),disabled:Oe,className:`px-3 py-1 bg-brand-700 text-white rounded-full text-[12px] font-semibold hover:bg-brand-900 disabled:opacity-60 transition-colors`,children:Oe?`저장 중…`:`저장`}),(0,j.jsx)(`button`,{onClick:Ye,className:`px-3 py-1 border border-ink-200 text-ink-600 rounded-full text-[12px] font-semibold hover:bg-ink-50 transition-colors`,children:`취소`})]})]}):(0,j.jsxs)(`div`,{className:`group relative`,children:[(0,j.jsx)(`textarea`,{value:n,readOnly:!0,rows:5,onClick:()=>qe(e),className:`w-full bg-white rounded-lg px-3 py-2 text-[13px] text-ink-700 leading-relaxed border border-ink-200 outline-none resize-none font-sans cursor-pointer hover:border-brand-400 transition-colors`}),e.is_edited&&(0,j.jsx)(`span`,{className:`absolute top-2 right-2 text-[10px] text-brand-500 font-semibold`,children:`수정됨`})]})]},e.id)})}):(0,j.jsx)(`div`,{className:`py-12 text-center text-[13px] text-ink-400`,children:`리포트를 불러오는 중…`})]}),s===4&&be&&!nt&&(0,j.jsx)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm mt-4 flex flex-col h-[520px] overflow-hidden`,children:(0,j.jsx)(Wd,{report:be,onPatchApplied:Ze})})]})]})}var Xd=ud({patientRefId:ld().min(1,`환자를 선택해주세요.`),date:ld().min(1,`날짜를 입력해주세요.`),sessionType:ld().min(1,`세션 유형을 선택해주세요.`),sessionGoal:ld().optional(),memo:ld().optional()});function Zd(){let e=Je(),{showToast:t}=wd(),[n,r]=(0,_.useState)([]),[i,a]=(0,_.useState)(!1),{register:o,handleSubmit:s,formState:{errors:c}}=Al({resolver:Il(Xd),defaultValues:{sessionType:`개별`}});(0,_.useEffect)(()=>{let e=!1;return xd.list().then(({data:t})=>{e||r(t)}).catch(()=>{e||t({title:`환자 목록을 불러오지 못했습니다`,kind:`error`})}),()=>{e=!0}},[]);let l=async n=>{a(!0);try{let{data:r}=await bd.create({patient_ref_id:n.patientRefId,session_date:n.date,session_type:n.sessionType,session_goal:n.sessionGoal||void 0,memo:n.memo||void 0});t({title:`세션이 생성되었습니다`,body:`이제 음성 파일을 업로드해주세요.`,kind:`success`}),e(`/sessions/${r.id}`)}catch{t({title:`세션 생성에 실패했습니다`,kind:`error`})}finally{a(!1)}},u=e=>P(`w-full h-10 px-3 rounded-lg text-[13px] outline-none transition-all border font-sans`,e?`border-red-400 bg-white`:`border-ink-300 bg-white focus:border-brand-500 focus:ring-2 focus:ring-brand-500/16`);return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5 flex items-center gap-4`,children:[(0,j.jsx)(`button`,{onClick:()=>e(-1),className:`w-8 h-8 rounded-lg flex items-center justify-center text-ink-500 hover:bg-ink-100 transition-colors`,children:(0,j.jsx)(I,{name:`arrowLeft`,size:16})}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:`새 세션`}),(0,j.jsx)(`p`,{className:`text-[13px] text-ink-500 mt-0.5`,children:`세션 기본 정보를 입력해주세요`})]})]}),(0,j.jsx)(`div`,{className:`px-8 pb-8 max-w-[520px]`,children:(0,j.jsx)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm p-6`,children:(0,j.jsxs)(`form`,{onSubmit:s(l),className:`flex flex-col gap-5`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`환자 선택`}),(0,j.jsxs)(`select`,{...o(`patientRefId`),className:P(u(!!c.patientRefId),`cursor-pointer`),children:[(0,j.jsx)(`option`,{value:``,children:`환자를 선택해주세요`}),n.map(e=>(0,j.jsx)(`option`,{value:e.patient_ref_id,children:e.name},e.id))]}),c.patientRefId&&(0,j.jsx)(`p`,{className:`mt-1 text-[11px] text-red-700`,children:c.patientRefId.message})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`날짜`}),(0,j.jsx)(`input`,{type:`date`,...o(`date`),className:u(!!c.date)}),c.date&&(0,j.jsx)(`p`,{className:`mt-1 text-[11px] text-red-700`,children:c.date.message})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-2`,children:`세션 유형`}),(0,j.jsx)(`div`,{className:`flex gap-3`,children:[`개별`,`그룹`].map(e=>(0,j.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer`,children:[(0,j.jsx)(`input`,{type:`radio`,...o(`sessionType`),value:e,className:`accent-brand-700`}),(0,j.jsx)(`span`,{className:`text-[13px] text-ink-800`,children:e})]},e))})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`세션 목표 (선택)`}),(0,j.jsx)(`input`,{...o(`sessionGoal`),placeholder:`이번 세션의 목표를 입력하세요`,className:u()})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`메모 (선택)`}),(0,j.jsx)(`textarea`,{...o(`memo`),rows:3,placeholder:`세션 관련 메모를 입력하세요`,className:P(u(),`h-auto py-2 resize-none`)})]}),(0,j.jsxs)(`div`,{className:`pt-2 flex gap-3`,children:[(0,j.jsx)(`button`,{type:`button`,onClick:()=>e(-1),className:`px-5 py-2 border border-ink-200 text-ink-600 rounded-full text-[13px] font-semibold hover:bg-ink-50 transition-colors`,children:`취소`}),(0,j.jsx)(`button`,{type:`submit`,disabled:i,className:`px-5 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors disabled:opacity-60`,children:i?`생성 중…`:`세션 생성`})]})]})})})]})}var Qd={DRAFT:{label:`초안`,cls:`bg-amber-100 text-amber-700`},REVIEWING:{label:`검토 중`,cls:`bg-blue-100 text-blue-700`},APPROVED:{label:`승인됨`,cls:`bg-green-100 text-green-700`},FINALIZED:{label:`확정됨`,cls:`bg-brand-100 text-brand-700`},DELETED:{label:`삭제됨`,cls:`bg-ink-100 text-ink-500`}};function $d(){let e=Je(),{showToast:t}=wd(),[n,r]=(0,_.useState)([]),[i,a]=(0,_.useState)({}),[o,s]=(0,_.useState)(!0);(0,_.useEffect)(()=>{let e=!1;return(async()=>{try{let[{data:t},{data:n},{data:i}]=await Promise.all([zd.list(),bd.list(),xd.list()]);if(e)return;let o={};for(let e of i)o[e.patient_ref_id]=e.name;let s={};for(let e of n)o[e.patient_ref_id]&&(s[e.id]=o[e.patient_ref_id]);r(t),a(s)}catch{e||t({title:`리포트 목록을 불러오지 못했습니다`,kind:`error`})}finally{e||s(!1)}})(),()=>{e=!0}},[]);let c=async e=>{try{let{data:t}=await zd.download(e.id),n=URL.createObjectURL(new Blob([t])),r=document.createElement(`a`);r.href=n,r.download=`report-${e.id.slice(-8)}.txt`,r.click(),URL.revokeObjectURL(n)}catch{t({title:`다운로드에 실패했습니다`,kind:`error`})}};return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5`,children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:`리포트`}),(0,j.jsxs)(`p`,{className:`text-[13px] text-ink-500 mt-1`,children:[`총 `,n.length,`개 리포트`]})]}),(0,j.jsx)(`div`,{className:`px-8 pb-8`,children:o?(0,j.jsx)(`div`,{className:`text-center py-12 text-[13px] text-ink-400`,children:`불러오는 중…`}):n.length===0?(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm py-16 text-center`,children:[(0,j.jsx)(`p`,{className:`text-[15px] font-semibold text-ink-800`,children:`리포트가 없습니다`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1.5`,children:`세션 분석을 완료하면 리포트가 생성됩니다.`})]}):(0,j.jsx)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm overflow-hidden`,children:(0,j.jsxs)(`table`,{className:`w-full text-[13px] border-collapse`,children:[(0,j.jsx)(`thead`,{children:(0,j.jsx)(`tr`,{className:`bg-ink-50 border-b border-ink-100`,children:[`세션`,`환자`,`상태`,`생성일`,``].map((e,t)=>(0,j.jsx)(`th`,{className:P(`py-2.5 px-5 text-[11px] font-semibold text-ink-500 uppercase tracking-wider`,t>=4?`text-right`:`text-left`),children:e},t))})}),(0,j.jsx)(`tbody`,{children:n.map(t=>{let n=Qd[t.status]??Qd.DRAFT;return(0,j.jsxs)(`tr`,{className:`border-t border-ink-100 hover:bg-brand-25 transition-colors`,children:[(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-500 text-[12px]`,children:t.session_id.slice(-8)}),(0,j.jsx)(`td`,{className:`px-5 py-3 text-ink-500 text-[12px]`,children:ei(i[t.session_id]??``)}),(0,j.jsx)(`td`,{className:`px-5 py-3`,children:(0,j.jsx)(`span`,{className:P(`inline-flex items-center px-2 py-0.5 rounded-md text-[11px] font-semibold`,n.cls),children:n.label})}),(0,j.jsx)(`td`,{className:`px-5 py-3 font-mono-num text-ink-500`,children:Zr(t.generated_at??t.updated_at)}),(0,j.jsx)(`td`,{className:`px-5 py-3 text-right`,children:(0,j.jsxs)(`div`,{className:`inline-flex gap-2 items-center`,children:[(0,j.jsxs)(`button`,{onClick:()=>e(`/sessions/${t.session_id}`),className:`inline-flex items-center gap-1 text-[12px] text-brand-600 font-semibold hover:text-brand-800`,children:[`보기 `,(0,j.jsx)(I,{name:`chevronRight`,size:12,strokeWidth:2.2})]}),(0,j.jsx)(`button`,{onClick:()=>c(t),className:`w-6 h-6 flex items-center justify-center rounded-md text-ink-400 hover:bg-ink-100 hover:text-ink-700 transition-colors`,title:`다운로드`,children:(0,j.jsx)(I,{name:`download`,size:13,strokeWidth:2.2})})]})})]},t.id)})})]})})})]})}var ef=[`.pdf`,`.doc`,`.docx`,`.xls`,`.xlsx`,`.ppt`,`.pptx`,`.hwp`,`.hwpx`,`.txt`,`.rtf`,`.csv`,`.odt`,`.ods`,`.odp`],tf=ef.join(`,`),nf=[{value:`SOAP_NOTE`,label:`SOAP Note`},{value:`CUSTOM`,label:`커스텀`}],rf=ud({name:ld().optional(),template_type:dd([`SOAP_NOTE`,`CUSTOM`]),description:ld().optional()}),af=ud({name:ld().min(1,`템플릿 이름을 입력해주세요.`),description:ld().optional()});function of(e){return e.replace(/\.[^.]+$/,``)}function sf(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return ef.includes(t)}function cf({template:e,onClose:t,onSaved:n}){let{showToast:r}=wd(),i=!!e,[a,o]=(0,_.useState)(null),[s,c]=(0,_.useState)(!1),[l,u]=(0,_.useState)(`idle`),d=(0,_.useRef)(null),f=Al({resolver:Il(rf),defaultValues:{name:``,template_type:`SOAP_NOTE`,description:``}}),p=Al({resolver:Il(af),defaultValues:{name:e?.name??``,description:e?.description??``}}),m=e=>P(`w-full h-10 px-3 rounded-lg text-[13px] outline-none transition-all border font-sans`,e?`border-red-400 bg-white`:`border-ink-300 bg-white focus:border-brand-500 focus:ring-2 focus:ring-brand-500/16`),h=e=>{if(!sf(e.name)){r({title:`지원하지 않는 파일 형식입니다. (pdf, docx, xlsx, hwp)`,kind:`error`});return}o(e)},g=e=>{e.preventDefault(),c(!1);let t=e.dataTransfer.files[0];t&&h(t)},v=async e=>{if(!a){r({title:`업로드할 파일을 선택해주세요.`,kind:`error`});return}let i=Vd(a),o=(e.name?.trim()||of(a.name)).trim()||a.name;try{u(`uploading`);let{data:s}=await Hd.presignedUrl({file_name:a.name,content_type:i,name:o,template_type:e.template_type});await fetch(s.upload_url,{method:`PUT`,headers:{"Content-Type":i},body:a}),u(`confirming`);let{data:c}=await Hd.confirm(s.template_id,{actual_size_bytes:a.size});r({title:`템플릿이 업로드되었습니다`,kind:`success`}),n(c),t()}catch{r({title:`템플릿 업로드에 실패했습니다`,kind:`error`})}finally{u(`idle`)}},y=async i=>{try{let{data:a}=await Hd.update(e.id,{name:i.name,description:i.description||void 0});r({title:`템플릿이 수정되었습니다`,kind:`success`}),n(a),t()}catch{r({title:`템플릿 수정에 실패했습니다`,kind:`error`})}},b=i?p.formState.isSubmitting:f.formState.isSubmitting||l!==`idle`,x=i?b?`저장 중…`:`저장`:l===`uploading`?`S3 업로드 중…`:l===`confirming`?`확인 중…`:`업로드`;return(0,j.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/40`,onClick:t,children:(0,j.jsxs)(`div`,{className:`bg-white rounded-2xl shadow-xl w-full max-w-[480px] mx-4 max-h-[90vh] flex flex-col`,onClick:e=>e.stopPropagation(),children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between px-6 pt-6 pb-4 border-b border-ink-100`,children:[(0,j.jsx)(`h2`,{className:`text-[16px] font-bold text-ink-800`,children:i?`템플릿 편집`:`새 템플릿`}),(0,j.jsx)(`button`,{onClick:t,className:`w-7 h-7 flex items-center justify-center rounded-lg text-ink-400 hover:bg-ink-100 transition-colors`,children:(0,j.jsx)(I,{name:`x`,size:16})})]}),i?(0,j.jsxs)(`form`,{onSubmit:p.handleSubmit(y),className:`px-6 py-5 flex flex-col gap-4 overflow-y-auto`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:[`템플릿 이름 `,(0,j.jsx)(`span`,{className:`text-red-500`,children:`*`})]}),(0,j.jsx)(`input`,{...p.register(`name`),placeholder:`템플릿 이름을 입력하세요`,className:m(!!p.formState.errors.name)}),p.formState.errors.name&&(0,j.jsx)(`p`,{className:`mt-1 text-[11px] text-red-700`,children:p.formState.errors.name.message})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`설명 (선택)`}),(0,j.jsx)(`textarea`,{...p.register(`description`),rows:3,placeholder:`템플릿에 대한 설명을 입력하세요`,className:P(m(),`h-auto py-2 resize-none`)})]}),(0,j.jsxs)(`div`,{className:`pt-1 flex justify-end gap-2`,children:[(0,j.jsx)(`button`,{type:`button`,onClick:t,className:`px-4 py-2 border border-ink-200 text-ink-600 rounded-full text-[13px] font-semibold hover:bg-ink-50 transition-colors`,children:`취소`}),(0,j.jsx)(`button`,{type:`submit`,disabled:b,className:`px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors disabled:opacity-60`,children:x})]})]}):(0,j.jsxs)(`form`,{onSubmit:f.handleSubmit(v),className:`px-6 py-5 flex flex-col gap-4 overflow-y-auto`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:[`파일 `,(0,j.jsx)(`span`,{className:`text-red-500`,children:`*`}),(0,j.jsx)(`span`,{className:`ml-1.5 text-ink-400 font-normal`,children:`pdf, docx, xlsx, hwp, hwpx 등 문서 파일`})]}),a?(0,j.jsxs)(`div`,{className:`flex items-center gap-3 px-4 py-3 rounded-lg border border-brand-300 bg-brand-50`,children:[(0,j.jsx)(I,{name:`fileText`,size:18,className:`text-brand-600 shrink-0`}),(0,j.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,j.jsx)(`p`,{className:`text-[13px] font-medium text-ink-800 truncate`,children:a.name}),(0,j.jsxs)(`p`,{className:`text-[11px] text-ink-400`,children:[(a.size/1024).toFixed(0),` KB`]})]}),(0,j.jsx)(`button`,{type:`button`,onClick:()=>o(null),className:`w-6 h-6 flex items-center justify-center rounded-md text-ink-400 hover:bg-brand-100 transition-colors`,children:(0,j.jsx)(I,{name:`x`,size:13})})]}):(0,j.jsxs)(`div`,{onDragOver:e=>{e.preventDefault(),c(!0)},onDragLeave:()=>c(!1),onDrop:g,onClick:()=>d.current?.click(),className:P(`flex flex-col items-center justify-center gap-2 py-8 rounded-lg border-2 border-dashed cursor-pointer transition-all`,s?`border-brand-500 bg-brand-50`:`border-ink-200 bg-ink-50 hover:border-brand-400 hover:bg-brand-50`),children:[(0,j.jsx)(I,{name:`upload`,size:22,className:`text-ink-400`}),(0,j.jsxs)(`p`,{className:`text-[13px] text-ink-500`,children:[`파일을 드래그하거나 `,(0,j.jsx)(`span`,{className:`text-brand-600 font-semibold`,children:`클릭해서 선택`})]})]}),(0,j.jsx)(`input`,{ref:d,type:`file`,accept:tf,className:`hidden`,onChange:e=>{let t=e.target.files?.[0];t&&h(t)}})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:[`템플릿 이름`,(0,j.jsx)(`span`,{className:`ml-1.5 text-ink-400 font-normal`,children:`미입력 시 파일명으로 자동 설정`})]}),(0,j.jsx)(`input`,{...f.register(`name`),placeholder:a?of(a.name):`템플릿 이름 (선택)`,className:m()})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-2`,children:`유형`}),(0,j.jsx)(`div`,{className:`flex gap-3`,children:nf.map(({value:e,label:t})=>(0,j.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer`,children:[(0,j.jsx)(`input`,{type:`radio`,...f.register(`template_type`),value:e,className:`accent-brand-700`}),(0,j.jsx)(`span`,{className:`text-[13px] text-ink-800`,children:t})]},e))})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:`설명 (선택)`}),(0,j.jsx)(`textarea`,{...f.register(`description`),rows:3,placeholder:`템플릿에 대한 설명을 입력하세요`,className:P(m(),`h-auto py-2 resize-none`)})]}),(0,j.jsxs)(`div`,{className:`pt-1 flex justify-end gap-2`,children:[(0,j.jsx)(`button`,{type:`button`,onClick:t,className:`px-4 py-2 border border-ink-200 text-ink-600 rounded-full text-[13px] font-semibold hover:bg-ink-50 transition-colors`,children:`취소`}),(0,j.jsx)(`button`,{type:`submit`,disabled:b,className:`px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors disabled:opacity-60`,children:x})]})]})]})})}var lf={SOAP_NOTE:`SOAP Note`,CUSTOM:`커스텀`},uf=[{label:`전체`,value:`all`},{label:`SOAP Note`,value:`SOAP_NOTE`},{label:`커스텀`,value:`CUSTOM`}];function df(){let{showToast:e}=wd(),[t,n]=(0,_.useState)([]),[r,i]=(0,_.useState)(!0),[a,o]=(0,_.useState)(`all`),[s,c]=(0,_.useState)(null);(0,_.useEffect)(()=>{let t=!1;return Hd.list().then(({data:e})=>{t||n(e)}).catch(()=>{t||e({title:`템플릿 목록을 불러오지 못했습니다`,kind:`error`})}).finally(()=>{t||i(!1)}),()=>{t=!0}},[]);let l=t.filter(e=>a===`all`||e.template_type===a);return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5 flex items-start justify-between`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:`템플릿 관리`}),(0,j.jsx)(`p`,{className:`text-[13px] text-ink-500 mt-1`,children:`세션 및 리포트 템플릿을 관리합니다`})]}),(0,j.jsxs)(`button`,{onClick:()=>c(`create`),className:`flex items-center gap-2 px-4 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors shadow-md`,children:[(0,j.jsx)(I,{name:`plus`,size:15}),`새 템플릿`]})]}),(0,j.jsxs)(`div`,{className:`px-8 pb-8`,children:[(0,j.jsx)(`div`,{className:`flex gap-2 mb-4`,children:uf.map(e=>(0,j.jsx)(`button`,{onClick:()=>o(e.value),className:P(`px-3 py-1.5 rounded-full text-[12px] font-medium border transition-all`,a===e.value?`bg-brand-700 text-white border-brand-700`:`bg-white text-ink-600 border-ink-200 hover:bg-ink-50`),children:e.label},e.value))}),r?(0,j.jsx)(`div`,{className:`text-center py-12 text-[13px] text-ink-400`,children:`불러오는 중…`}):l.length===0?(0,j.jsx)(`div`,{className:`py-12 text-center text-[13px] text-ink-400`,children:a===`all`?`템플릿이 없습니다.`:`'${lf[a]}' 유형에 템플릿이 없습니다.`}):(0,j.jsx)(`div`,{className:`grid grid-cols-2 gap-4`,children:l.map(t=>(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm p-5 hover:border-brand-300 hover:shadow-md transition-all cursor-pointer group`,children:[(0,j.jsxs)(`div`,{className:`flex items-start justify-between mb-3`,children:[(0,j.jsx)(`div`,{className:`w-10 h-10 rounded-xl bg-brand-50 flex items-center justify-center text-brand-600`,children:(0,j.jsx)(I,{name:`fileText`,size:20,strokeWidth:1.8})}),(0,j.jsx)(`span`,{className:`text-[11px] font-semibold bg-ink-100 text-ink-600 px-2 py-0.5 rounded-md`,children:lf[t.template_type]})]}),(0,j.jsx)(`h3`,{className:`text-[14px] font-semibold text-ink-800 leading-snug`,children:t.name}),t.description&&(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-1 line-clamp-2`,children:t.description}),(0,j.jsxs)(`div`,{className:`flex items-center justify-between mt-3`,children:[(0,j.jsx)(`p`,{className:`text-[11px] text-ink-400`,children:t.is_system?`시스템 템플릿`:`내 템플릿`}),(0,j.jsxs)(`p`,{className:`text-[11px] text-ink-500`,children:[(0,j.jsx)(`span`,{className:`font-semibold text-ink-800`,children:t.use_count}),`회 사용`]})]}),!t.is_system&&(0,j.jsxs)(`div`,{className:`mt-3 pt-3 border-t border-ink-100 flex gap-2 opacity-0 group-hover:opacity-100 transition-opacity`,children:[(0,j.jsxs)(`button`,{onClick:()=>c(t),className:`flex-1 flex items-center justify-center gap-1.5 py-1.5 rounded-lg text-[12px] font-semibold text-brand-700 bg-brand-50 hover:bg-brand-100 transition-colors`,children:[(0,j.jsx)(I,{name:`edit`,size:13}),`편집`]}),(0,j.jsx)(`button`,{onClick:()=>e({title:`템플릿 복사됨`,kind:`success`}),className:`flex-1 flex items-center justify-center gap-1.5 py-1.5 rounded-lg text-[12px] font-semibold text-ink-600 bg-ink-50 hover:bg-ink-100 transition-colors`,children:`복사`})]})]},t.id))})]}),s!==null&&(0,j.jsx)(cf,{template:s===`create`?void 0:s,onClose:()=>c(null),onSaved:e=>n(t=>s===`create`?[e,...t]:t.map(t=>t.id===e.id?e:t))})]})}var ff=ud({name:ld().min(1,`이름을 입력해주세요.`),email:ld().email(),role:ld()}),pf=ud({current:ld().min(1,`현재 비밀번호를 입력해주세요.`),next:ld().min(8,`비밀번호는 8자 이상이어야 합니다.`),confirm:ld().min(1)}).refine(e=>e.next===e.confirm,{message:`비밀번호가 일치하지 않습니다.`,path:[`confirm`]});function mf({label:e,error:t,...n}){let[r,i]=(0,_.useState)(!1);return(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`label`,{className:`block text-[12px] font-medium text-ink-800 mb-1.5`,children:e}),(0,j.jsx)(`input`,{...n,onFocus:e=>{i(!0),n.onFocus?.(e)},onBlur:e=>{i(!1),n.onBlur?.(e)},className:P(`w-full h-10 px-3 rounded-md text-[13px] outline-none transition-all border font-sans`,n.disabled?`bg-ink-50 text-ink-400 border-ink-200 cursor-not-allowed`:t?`border-red-400 bg-white`:r?`border-brand-500 bg-white ring-2 ring-brand-500/16`:`border-ink-300 bg-white`)}),t&&(0,j.jsx)(`p`,{className:`mt-1 text-[11px] text-red-700`,children:t})]})}function hf(){let[e,t]=(0,_.useState)(`profile`),n=Ui(e=>e.user),{showToast:r}=wd(),i=nc(),a=Al({resolver:Il(ff),defaultValues:{name:n?.name??``,email:n?.email??``,role:n?.role??``}}),o=Al({resolver:Il(pf)}),s=e=>r({title:`프로필이 저장되었습니다`,kind:`success`}),c=e=>{r({title:`비밀번호가 변경되었습니다`,kind:`success`}),o.reset()};return(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`div`,{className:`px-8 pt-7 pb-5`,children:[(0,j.jsx)(`h1`,{className:`text-2xl font-bold text-ink-800 tracking-tight`,children:`설정`}),(0,j.jsx)(`p`,{className:`text-[13px] text-ink-500 mt-1`,children:`계정 및 프로필 정보를 관리합니다`})]}),(0,j.jsxs)(`div`,{className:`px-8 pb-8 grid grid-cols-[200px_1fr] gap-5 items-start`,children:[(0,j.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[[{id:`profile`,label:`내 프로필`,icon:`user`},{id:`password`,label:`비밀번호 변경`,icon:`lock`}].map(n=>(0,j.jsxs)(`button`,{onClick:()=>t(n.id),className:P(`flex items-center gap-2.5 px-3 py-2.5 rounded-lg text-[13px] font-medium border-none w-full text-left transition-colors`,e===n.id?`bg-brand-50 text-brand-700 font-semibold`:`text-ink-600 hover:bg-ink-50`),children:[(0,j.jsx)(I,{name:n.icon,size:15,strokeWidth:1.8}),n.label]},n.id)),(0,j.jsx)(`div`,{className:`mt-auto pt-6`,children:(0,j.jsxs)(`button`,{onClick:i,className:`flex items-center gap-2.5 px-3 py-2.5 rounded-lg text-[13px] font-medium text-red-600 hover:bg-red-50 w-full text-left transition-colors`,children:[(0,j.jsx)(I,{name:`logout`,size:15,strokeWidth:1.8}),`로그아웃`]})})]}),e===`profile`&&(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm overflow-hidden`,children:[(0,j.jsxs)(`div`,{className:`px-6 py-4 border-b border-ink-100`,children:[(0,j.jsx)(`h2`,{className:`text-[15px] font-semibold text-ink-800`,children:`내 프로필`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-0.5`,children:`공개 프로필 정보를 관리합니다`})]}),(0,j.jsxs)(`div`,{className:`p-6`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-4 mb-6 pb-6 border-b border-ink-100`,children:[(0,j.jsx)(`div`,{className:`w-[72px] h-[72px] rounded-full flex items-center justify-center text-[28px] font-bold text-white flex-shrink-0 shadow-md`,style:{background:`linear-gradient(135deg,#1A3C34 0%,#2D6A4F 70%)`},children:n?.name?.[0]??`?`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`p`,{className:`font-semibold text-ink-800`,children:n?.name}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-0.5`,children:n?.email}),(0,j.jsx)(`button`,{className:`mt-2 text-[12px] text-brand-600 font-semibold hover:text-brand-800`,children:`사진 변경`})]})]}),(0,j.jsxs)(`form`,{onSubmit:a.handleSubmit(s),className:`flex flex-col gap-5 max-w-[480px]`,children:[(0,j.jsx)(mf,{label:`이름`,...a.register(`name`),error:a.formState.errors.name?.message}),(0,j.jsx)(mf,{label:`이메일`,type:`email`,disabled:!0,...a.register(`email`)}),(0,j.jsx)(mf,{label:`직함`,disabled:!0,...a.register(`role`)}),(0,j.jsx)(`div`,{className:`pt-2`,children:(0,j.jsx)(`button`,{type:`submit`,className:`px-5 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors`,children:`변경사항 저장`})})]})]})]}),e===`password`&&(0,j.jsxs)(`div`,{className:`bg-white rounded-xl border border-ink-200 shadow-sm overflow-hidden`,children:[(0,j.jsxs)(`div`,{className:`px-6 py-4 border-b border-ink-100`,children:[(0,j.jsx)(`h2`,{className:`text-[15px] font-semibold text-ink-800`,children:`비밀번호 변경`}),(0,j.jsx)(`p`,{className:`text-[12px] text-ink-500 mt-0.5`,children:`계정 보안을 위해 주기적으로 변경해주세요`})]}),(0,j.jsx)(`div`,{className:`p-6`,children:(0,j.jsxs)(`form`,{onSubmit:o.handleSubmit(c),className:`flex flex-col gap-5 max-w-[480px]`,children:[(0,j.jsx)(mf,{label:`현재 비밀번호`,type:`password`,autoComplete:`current-password`,...o.register(`current`),error:o.formState.errors.current?.message}),(0,j.jsx)(mf,{label:`새 비밀번호`,type:`password`,autoComplete:`new-password`,...o.register(`next`),error:o.formState.errors.next?.message}),(0,j.jsx)(mf,{label:`새 비밀번호 확인`,type:`password`,autoComplete:`new-password`,...o.register(`confirm`),error:o.formState.errors.confirm?.message}),(0,j.jsx)(`div`,{className:`pt-2`,children:(0,j.jsx)(`button`,{type:`submit`,className:`px-5 py-2 bg-brand-700 text-white rounded-full text-[13px] font-semibold hover:bg-brand-900 transition-colors`,children:`비밀번호 변경`})})]})})]})]})]})}var gf={value:()=>{}};function _f(){for(var e=0,t=arguments.length,n={},r;e=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw Error(`unknown type: `+e);return{type:e,name:n}})}vf.prototype=_f.prototype={constructor:vf,on:function(e,t){var n=this._,r=yf(e+``,n),i,a=-1,o=r.length;if(arguments.length<2){for(;++a0)for(var n=Array(i),r=0,i,a;r=0&&(t=e.slice(0,n))!==`xmlns`&&(e=e.slice(n+1)),Sf.hasOwnProperty(t)?{space:Sf[t],local:e}:e}function wf(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===`http://www.w3.org/1999/xhtml`&&t.documentElement.namespaceURI===`http://www.w3.org/1999/xhtml`?t.createElement(e):t.createElementNS(n,e)}}function Tf(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Ef(e){var t=Cf(e);return(t.local?Tf:wf)(t)}function Df(){}function Of(e){return e==null?Df:function(){return this.querySelector(e)}}function kf(e){typeof e!=`function`&&(e=Of(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i=v&&(v=_+1);!(b=g[v])&&++v=0;)(o=r[i])&&(a&&o.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(o,a),a=o);return this}function ap(e){e||=op;function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}for(var n=this._groups,r=n.length,i=Array(r),a=0;at?1:e>=t?0:NaN}function sp(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function cp(){return Array.from(this)}function lp(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?xp:typeof t==`function`?Cp:Sp)(e,t,n??``)):Tp(this.node(),e)}function Tp(e,t){return e.style.getPropertyValue(t)||bp(e).getComputedStyle(e,null).getPropertyValue(t)}function Ep(e){return function(){delete this[e]}}function Dp(e,t){return function(){this[e]=t}}function Op(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function kp(e,t){return arguments.length>1?this.each((t==null?Ep:typeof t==`function`?Op:Dp)(e,t)):this.node()[e]}function Ap(e){return e.trim().split(/^|\s+/)}function jp(e){return e.classList||new Mp(e)}function Mp(e){this._node=e,this._names=Ap(e.getAttribute(`class`)||``)}Mp.prototype={add:function(e){this._names.indexOf(e)<0&&(this._names.push(e),this._node.setAttribute(`class`,this._names.join(` `)))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute(`class`,this._names.join(` `)))},contains:function(e){return this._names.indexOf(e)>=0}};function Np(e,t){for(var n=jp(e),r=-1,i=t.length;++r=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}function cm(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,a;n()=>e;function Am(e,{sourceEvent:t,subject:n,target:r,identifier:i,active:a,x:o,y:s,dx:c,dy:l,dispatch:u}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:a,enumerable:!0,configurable:!0},x:{value:o,enumerable:!0,configurable:!0},y:{value:s,enumerable:!0,configurable:!0},dx:{value:c,enumerable:!0,configurable:!0},dy:{value:l,enumerable:!0,configurable:!0},_:{value:u}})}Am.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function jm(e){return!e.ctrlKey&&!e.button}function Mm(){return this.parentNode}function Nm(e,t){return t??{x:e.x,y:e.y}}function Pm(){return navigator.maxTouchPoints||`ontouchstart`in this}function Fm(){var e=jm,t=Mm,n=Nm,r=Pm,i={},a=_f(`start`,`drag`,`end`),o=0,s,c,l,u,d=0;function f(e){e.on(`mousedown.drag`,p).filter(r).on(`touchstart.drag`,g).on(`touchmove.drag`,_,Cm).on(`touchend.drag touchcancel.drag`,v).style(`touch-action`,`none`).style(`-webkit-tap-highlight-color`,`rgba(0,0,0,0)`)}function p(n,r){if(!(u||!e.call(this,n,r))){var i=y(this,t.call(this,n,r),n,r,`mouse`);i&&(bm(n.view).on(`mousemove.drag`,m,wm).on(`mouseup.drag`,h,wm),Dm(n.view),Tm(n),l=!1,s=n.clientX,c=n.clientY,i(`start`,n))}}function m(e){if(Em(e),!l){var t=e.clientX-s,n=e.clientY-c;l=t*t+n*n>d}i.mouse(`drag`,e)}function h(e){bm(e.view).on(`mousemove.drag mouseup.drag`,null),Om(e.view,l),Em(e),i.mouse(`end`,e)}function g(n,r){if(e.call(this,n,r)){var i=n.changedTouches,a=t.call(this,n,r),o=i.length,s,c;for(s=0;s>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?ih(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?ih(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=Gm.exec(e))?new sh(t[1],t[2],t[3],1):(t=Km.exec(e))?new sh(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=qm.exec(e))?ih(t[1],t[2],t[3],t[4]):(t=Jm.exec(e))?ih(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=Ym.exec(e))?mh(t[1],t[2]/100,t[3]/100,1):(t=Xm.exec(e))?mh(t[1],t[2]/100,t[3]/100,t[4]):Zm.hasOwnProperty(e)?rh(Zm[e]):e===`transparent`?new sh(NaN,NaN,NaN,0):null}function rh(e){return new sh(e>>16&255,e>>8&255,e&255,1)}function ih(e,t,n,r){return r<=0&&(e=t=n=NaN),new sh(e,t,n,r)}function ah(e){return e instanceof Rm||(e=nh(e)),e?(e=e.rgb(),new sh(e.r,e.g,e.b,e.opacity)):new sh}function oh(e,t,n,r){return arguments.length===1?ah(e):new sh(e,t,n,r??1)}function sh(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}Im(sh,oh,Lm(Rm,{brighter(e){return e=e==null?Bm:Bm**+e,new sh(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?zm:zm**+e,new sh(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new sh(fh(this.r),fh(this.g),fh(this.b),dh(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:ch,formatHex:ch,formatHex8:lh,formatRgb:uh,toString:uh}));function ch(){return`#${ph(this.r)}${ph(this.g)}${ph(this.b)}`}function lh(){return`#${ph(this.r)}${ph(this.g)}${ph(this.b)}${ph((isNaN(this.opacity)?1:this.opacity)*255)}`}function uh(){let e=dh(this.opacity);return`${e===1?`rgb(`:`rgba(`}${fh(this.r)}, ${fh(this.g)}, ${fh(this.b)}${e===1?`)`:`, ${e})`}`}function dh(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function fh(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function ph(e){return e=fh(e),(e<16?`0`:``)+e.toString(16)}function mh(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new _h(e,t,n,r)}function hh(e){if(e instanceof _h)return new _h(e.h,e.s,e.l,e.opacity);if(e instanceof Rm||(e=nh(e)),!e)return new _h;if(e instanceof _h)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=t===a?(n-r)/s+(n0&&c<1?0:o,new _h(o,s,c,e.opacity)}function gh(e,t,n,r){return arguments.length===1?hh(e):new _h(e,t,n,r??1)}function _h(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Im(_h,gh,Lm(Rm,{brighter(e){return e=e==null?Bm:Bm**+e,new _h(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?zm:zm**+e,new _h(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new sh(bh(e>=240?e-240:e+120,i,r),bh(e,i,r),bh(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new _h(vh(this.h),yh(this.s),yh(this.l),dh(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=dh(this.opacity);return`${e===1?`hsl(`:`hsla(`}${vh(this.h)}, ${yh(this.s)*100}%, ${yh(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function vh(e){return e=(e||0)%360,e<0?e+360:e}function yh(e){return Math.max(0,Math.min(1,e||0))}function bh(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var xh=e=>()=>e;function Sh(e,t){return function(n){return e+n*t}}function Ch(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function wh(e){return(e=+e)==1?Th:function(t,n){return n-t?Ch(t,n,e):xh(isNaN(t)?n:t)}}function Th(e,t){var n=t-e;return n?Sh(e,n):xh(isNaN(e)?t:e)}var Eh=(function e(t){var n=wh(t);function r(e,t){var r=n((e=oh(e)).r,(t=oh(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=Th(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r})(1);function Dh(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}var Oh=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,kh=new RegExp(Oh.source,`g`);function Ah(e){return function(){return e}}function jh(e){return function(t){return e(t)+``}}function Mh(e,t){var n=Oh.lastIndex=kh.lastIndex=0,r,i,a,o=-1,s=[],c=[];for(e+=``,t+=``;(r=Oh.exec(e))&&(i=kh.exec(t));)(a=i.index)>n&&(a=t.slice(n,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:Dh(r,i)})),n=kh.lastIndex;return n180?t+=360:t-e>180&&(e+=360),a.push({i:n.push(i(n)+`rotate(`,null,r)-2,x:Dh(e,t)}))}function s(e,t,n,a){e===t?t&&n.push(i(n)+`skewX(`+t+r):a.push({i:n.push(i(n)+`skewX(`,null,r)-2,x:Dh(e,t)})}function c(e,t,n,r,a,o){if(e!==n||t!==r){var s=a.push(i(a)+`scale(`,null,`,`,null,`)`);o.push({i:s-4,x:Dh(e,n)},{i:s-2,x:Dh(t,r)})}else (n!==1||r!==1)&&a.push(i(a)+`scale(`+n+`,`+r+`)`)}return function(t,n){var r=[],i=[];return t=e(t),n=e(n),a(t.translateX,t.translateY,n.translateX,n.translateY,r,i),o(t.rotate,n.rotate,r,i),s(t.skewX,n.skewX,r,i),c(t.scaleX,t.scaleY,n.scaleX,n.scaleY,r,i),t=n=null,function(e){for(var t=-1,n=i.length,a;++t=0&&e._call.call(void 0,t),e=e._next;--qh}function lg(){eg=($h=ng.now())+tg,qh=Jh=0;try{cg()}finally{qh=0,dg(),eg=0}}function ug(){var e=ng.now(),t=e-$h;t>Xh&&(tg-=t,$h=e)}function dg(){for(var e,t=Zh,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:Zh=n);Qh=e,fg(r)}function fg(e){qh||(Jh&&=clearTimeout(Jh),e-eg>24?(e<1/0&&(Jh=setTimeout(lg,e-ng.now()-tg)),Yh&&=clearInterval(Yh)):(Yh||=($h=ng.now(),setInterval(ug,Xh)),qh=1,rg(lg)))}function pg(e,t,n){var r=new og;return t=t==null?0:+t,r.restart(n=>{r.stop(),e(n+t)},t,n),r}var mg=_f(`start`,`end`,`cancel`,`interrupt`),hg=[];function gg(e,t,n,r,i,a){var o=e.__transition;if(!o)e.__transition={};else if(n in o)return;bg(e,n,{name:t,index:r,group:i,on:mg,tween:hg,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:0})}function _g(e,t){var n=yg(e,t);if(n.state>0)throw Error(`too late; already scheduled`);return n}function vg(e,t){var n=yg(e,t);if(n.state>3)throw Error(`too late; already running`);return n}function yg(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw Error(`transition not found`);return n}function bg(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=sg(a,0,n.time);function a(e){n.state=1,n.timer.restart(o,n.delay,n.time),n.delay<=e&&o(e-n.delay)}function o(a){var l,u,d,f;if(n.state!==1)return c();for(l in r)if(f=r[l],f.name===n.name){if(f.state===3)return pg(o);f.state===4?(f.state=6,f.timer.stop(),f.on.call(`interrupt`,e,e.__data__,f.index,f.group),delete r[l]):+l2&&r.state<5,r.state=6,r.timer.stop(),r.on.call(i?`interrupt`:`cancel`,e,e.__data__,r.index,r.group),delete n[o]}a&&delete e.__transition}}function Sg(e){return this.each(function(){xg(this,e)})}function Cg(e,t){var n,r;return function(){var i=vg(this,e),a=i.tween;if(a!==n){r=n=a;for(var o=0,s=r.length;o=0&&(e=e.slice(0,t)),!e||e===`start`})}function $g(e,t,n){var r,i,a=Qg(t)?_g:vg;return function(){var o=a(this,e),s=o.on;s!==r&&(i=(r=s).copy()).on(t,n),o.on=i}}function e_(e,t){var n=this._id;return arguments.length<2?yg(this.node(),n).on.on(e):this.each($g(n,e,t))}function t_(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function n_(){return this.on(`end.remove`,t_(this._id))}function r_(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=Of(e));for(var r=this._groups,i=r.length,a=Array(i),o=0;o=(d=(s+l)/2))?s=d:l=d,(g=n>=(f=(c+u)/2))?c=f:u=f,i=a,!(a=a[_=g<<1|h]))return i[_]=o,e;if(p=+e._x.call(null,a.data),m=+e._y.call(null,a.data),t===p&&n===m)return o.next=a,i?i[_]=o:e._root=o,e;do i=i?i[_]=[,,,,]:e._root=[,,,,],(h=t>=(d=(s+l)/2))?s=d:l=d,(g=n>=(f=(c+u)/2))?c=f:u=f;while((_=g<<1|h)==(v=(m>=f)<<1|p>=d));return i[v]=a,i[_]=o,e}function B_(e){var t,n,r=e.length,i,a,o=Array(r),s=Array(r),c=1/0,l=1/0,u=-1/0,d=-1/0;for(n=0;nu&&(u=i),ad&&(d=a));if(c>u||l>d)return this;for(this.cover(c,l).cover(u,d),n=0;ne||e>=i||r>t||t>=a;)switch(l=(tu||(s=m.y0)>d||(c=m.x1)=_)<<1|e>=g)&&(m=f[f.length-1],f[f.length-1]=f[f.length-1-h],f[f.length-1-h]=m)}else{var v=e-+this._x.call(null,p.data),y=t-+this._y.call(null,p.data),b=v*v+y*y;if(b=(f=(o+c)/2))?o=f:c=f,(h=d>=(p=(s+l)/2))?s=p:l=p,t=n,!(n=n[g=h<<1|m]))return this;if(!n.length)break;(t[g+1&3]||t[g+2&3]||t[g+3&3])&&(r=t,_=g)}for(;n.data!==e;)if(i=n,!(n=n.next))return this;return(a=n.next)&&delete n.next,i?(a?i.next=a:delete i.next,this):t?(a?t[g]=a:delete t[g],(n=t[0]||t[1]||t[2]||t[3])&&n===(t[3]||t[2]||t[1]||t[0])&&!n.length&&(r?r[_]=n:this._root=n),this):(this._root=a,this)}function q_(e){for(var t=0,n=e.length;tl.index){var h=u-s.x-s.vx,g=d-s.y-s.vy,_=h*h+g*g;_u+m||ad+m||oe.r&&(e.r=e[t].r)}function c(){if(t){var r,i=t.length,a;for(n=Array(i),r=0;r[t(e,n,o),e])),d;for(n=0,s=Array(i);n(e=(mv*e+hv)%gv)/gv}function vv(e){return e.x}function yv(e){return e.y}var bv=10,xv=Math.PI*(3-Math.sqrt(5));function Sv(e){var t,n=1,r=.001,i=1-r**(1/300),a=0,o=.6,s=new Map,c=sg(d),l=_f(`tick`,`end`),u=_v();e??=[];function d(){f(),l.call(`tick`,t),n1?(n==null?s.delete(e):s.set(e,m(n)),t):s.get(e)},find:function(t,n,r){var i=0,a=e.length,o,s,c,l,u;for(r==null?r=1/0:r*=r,i=0;i1?(l.on(e,n),t):l.on(e)}}}function Cv(){var e,t,n,r,i=ov(-30),a,o=1,s=1/0,c=.81;function l(n){var i,a=e.length,o=nv(e,vv,yv).visitAfter(d);for(r=n,i=0;i=s)){(e.data!==t||e.next)&&(d===0&&(d=sv(n),m+=d*d),f===0&&(f=sv(n),m+=f*f),m()=>e;function Tv(e,{sourceEvent:t,target:n,transform:r,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:i}})}function Ev(e,t,n){this.k=e,this.x=t,this.y=n}Ev.prototype={constructor:Ev,scale:function(e){return e===1?this:new Ev(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new Ev(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return`translate(`+this.x+`,`+this.y+`) scale(`+this.k+`)`}};var Dv=new Ev(1,0,0);Ov.prototype=Ev.prototype;function Ov(e){for(;!e.__zoom;)if(!(e=e.parentNode))return Dv;return e.__zoom}function kv(e){e.stopImmediatePropagation()}function Av(e){e.preventDefault(),e.stopImmediatePropagation()}function jv(e){return(!e.ctrlKey||e.type===`wheel`)&&!e.button}function Mv(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute(`viewBox`)?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function Nv(){return this.__zoom||Dv}function Pv(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function Fv(){return navigator.maxTouchPoints||`ontouchstart`in this}function Iv(e,t,n){var r=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],a=e.invertY(t[0][1])-n[0][1],o=e.invertY(t[1][1])-n[1][1];return e.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}function Lv(){var e=jv,t=Mv,n=Iv,r=Pv,i=Fv,a=[0,1/0],o=[[-1/0,-1/0],[1/0,1/0]],s=250,c=Kh,l=_f(`start`,`zoom`,`end`),u,d,f,p=500,m=150,h=0,g=10;function _(e){e.property(`__zoom`,Nv).on(`wheel.zoom`,w,{passive:!1}).on(`mousedown.zoom`,ee).on(`dblclick.zoom`,T).filter(i).on(`touchstart.zoom`,E).on(`touchmove.zoom`,D).on(`touchend.zoom touchcancel.zoom`,O).style(`-webkit-tap-highlight-color`,`rgba(0,0,0,0)`)}_.transform=function(e,t,n,r){var i=e.selection?e.selection():e;i.property(`__zoom`,Nv),e===i?i.interrupt().each(function(){S(this,arguments).event(r).start().zoom(null,typeof t==`function`?t.apply(this,arguments):t).end()}):x(e,t,n,r)},_.scaleBy=function(e,t,n,r){_.scaleTo(e,function(){return this.__zoom.k*(typeof t==`function`?t.apply(this,arguments):t)},n,r)},_.scaleTo=function(e,r,i,a){_.transform(e,function(){var e=t.apply(this,arguments),a=this.__zoom,s=i==null?b(e):typeof i==`function`?i.apply(this,arguments):i,c=a.invert(s),l=typeof r==`function`?r.apply(this,arguments):r;return n(y(v(a,l),s,c),e,o)},i,a)},_.translateBy=function(e,r,i,a){_.transform(e,function(){return n(this.__zoom.translate(typeof r==`function`?r.apply(this,arguments):r,typeof i==`function`?i.apply(this,arguments):i),t.apply(this,arguments),o)},null,a)},_.translateTo=function(e,r,i,a,s){_.transform(e,function(){var e=t.apply(this,arguments),s=this.__zoom,c=a==null?b(e):typeof a==`function`?a.apply(this,arguments):a;return n(Dv.translate(c[0],c[1]).scale(s.k).translate(typeof r==`function`?-r.apply(this,arguments):-r,typeof i==`function`?-i.apply(this,arguments):-i),e,o)},a,s)};function v(e,t){return t=Math.max(a[0],Math.min(a[1],t)),t===e.k?e:new Ev(t,e.x,e.y)}function y(e,t,n){var r=t[0]-n[0]*e.k,i=t[1]-n[1]*e.k;return r===e.x&&i===e.y?e:new Ev(e.k,r,i)}function b(e){return[(+e[0][0]+ +e[1][0])/2,(+e[0][1]+ +e[1][1])/2]}function x(e,n,r,i){e.on(`start.zoom`,function(){S(this,arguments).event(i).start()}).on(`interrupt.zoom end.zoom`,function(){S(this,arguments).event(i).end()}).tween(`zoom`,function(){var e=this,a=arguments,o=S(e,a).event(i),s=t.apply(e,a),l=r==null?b(s):typeof r==`function`?r.apply(e,a):r,u=Math.max(s[1][0]-s[0][0],s[1][1]-s[0][1]),d=e.__zoom,f=typeof n==`function`?n.apply(e,a):n,p=c(d.invert(l).concat(u/d.k),f.invert(l).concat(u/f.k));return function(e){if(e===1)e=f;else{var t=p(e),n=u/t[2];e=new Ev(n,l[0]-t[0]*n,l[1]-t[1]*n)}o.zoom(null,e)}})}function S(e,t,n){return!n&&e.__zooming||new C(e,t)}function C(e,n){this.that=e,this.args=n,this.active=0,this.sourceEvent=null,this.extent=t.apply(e,n),this.taps=0}C.prototype={event:function(e){return e&&(this.sourceEvent=e),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit(`start`)),this},zoom:function(e,t){return this.mouse&&e!==`mouse`&&(this.mouse[1]=t.invert(this.mouse[0])),this.touch0&&e!==`touch`&&(this.touch0[1]=t.invert(this.touch0[0])),this.touch1&&e!==`touch`&&(this.touch1[1]=t.invert(this.touch1[0])),this.that.__zoom=t,this.emit(`zoom`),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit(`end`)),this},emit:function(e){var t=bm(this.that).datum();l.call(e,this.that,new Tv(e,{sourceEvent:this.sourceEvent,target:_,type:e,transform:this.that.__zoom,dispatch:l}),t)}};function w(t,...i){if(!e.apply(this,arguments))return;var s=S(this,i).event(t),c=this.__zoom,l=Math.max(a[0],Math.min(a[1],c.k*2**r.apply(this,arguments))),u=Sm(t);if(s.wheel)(s.mouse[0][0]!==u[0]||s.mouse[0][1]!==u[1])&&(s.mouse[1]=c.invert(s.mouse[0]=u)),clearTimeout(s.wheel);else if(c.k===l)return;else s.mouse=[u,c.invert(u)],xg(this),s.start();Av(t),s.wheel=setTimeout(d,m),s.zoom(`mouse`,n(y(v(c,l),s.mouse[0],s.mouse[1]),s.extent,o));function d(){s.wheel=null,s.end()}}function ee(t,...r){if(f||!e.apply(this,arguments))return;var i=t.currentTarget,a=S(this,r,!0).event(t),s=bm(t.view).on(`mousemove.zoom`,d,!0).on(`mouseup.zoom`,p,!0),c=Sm(t,i),l=t.clientX,u=t.clientY;Dm(t.view),kv(t),a.mouse=[c,this.__zoom.invert(c)],xg(this),a.start();function d(e){if(Av(e),!a.moved){var t=e.clientX-l,r=e.clientY-u;a.moved=t*t+r*r>h}a.event(e).zoom(`mouse`,n(y(a.that.__zoom,a.mouse[0]=Sm(e,i),a.mouse[1]),a.extent,o))}function p(e){s.on(`mousemove.zoom mouseup.zoom`,null),Om(e.view,a.moved),Av(e),a.event(e).end()}}function T(r,...i){if(e.apply(this,arguments)){var a=this.__zoom,c=Sm(r.changedTouches?r.changedTouches[0]:r,this),l=a.invert(c),u=a.k*(r.shiftKey?.5:2),d=n(y(v(a,u),c,l),t.apply(this,i),o);Av(r),s>0?bm(this).transition().duration(s).call(x,d,c,r):bm(this).call(_.transform,d,c,r)}}function E(t,...n){if(e.apply(this,arguments)){var r=t.touches,i=r.length,a=S(this,n,t.changedTouches.length===i).event(t),o,s,c,l;for(kv(t),s=0;sV.get(`/insight-map`,{params:{report_draft_id:e??void 0,mode:t},paramsSerializer:{indexes:null}}),search:(e,t,n=Rv)=>V.post(`/insight-map/search`,{query:e,report_draft_id:t,mode:n}),getConceptEvidence:e=>V.get(`/insight-map/concepts/${e}/evidence`)},Bv=[{value:`research`,label:`연구 근거 중심`},{value:`current_patient`,label:`현재 환자 히스토리 포함`},{value:`my_soap`,label:`내 SOAP 기록 포함`}],Vv={ontology:`#89b4fa`,current_patient:`#a6e3a1`,my_soap:`#fab387`},Hv={ontology:`연구 근거 (개념)`,current_patient:`현재 환자 히스토리`,my_soap:`내 SOAP 기록`},Uv={ontology:16,current_patient:13,my_soap:13};function Wv(){let e=Je(),[t]=Kt(),n=t.get(`report_id`)??t.get(`report_draft_id`),r=t.get(`focus`)??``,i=!n,{showToast:a}=wd(),[o,s]=(0,_.useState)(i?[`research`,`my_soap`]:Rv),[c,l]=(0,_.useState)(r),[u,d]=(0,_.useState)({nodes:[],edges:[]}),[f,p]=(0,_.useState)(!1),[m,h]=(0,_.useState)(null),[g,v]=(0,_.useState)(null),[y,b]=(0,_.useState)(!1),x=(0,_.useRef)(null),S=(0,_.useRef)(null),C=e=>{h(e),v(null)},w=async e=>{let t=e.id.replace(/^concept_/,``);b(!0);try{let{data:e}=await zv.getConceptEvidence(t);v(e.evidence)}catch{a({title:`문헌 근거를 불러오지 못했습니다`,kind:`error`}),v([])}finally{b(!1)}},ee=(0,_.useCallback)(async()=>{p(!0);try{let{data:e}=await zv.get(n,o);d(e)}catch{a({title:`인사이트맵을 불러오지 못했습니다`,kind:`error`})}finally{p(!1)}},[n,o]),T=(0,_.useCallback)(async e=>{if(!e.trim()){ee();return}p(!0);try{let{data:t}=await zv.search(e.trim(),n,o);d(t)}catch{a({title:`검색에 실패했습니다`,kind:`error`})}finally{p(!1)}},[n,o]),E=e=>{s(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])};(0,_.useEffect)(()=>{c.trim()?T(c):ee()},[n,o]);let D=t=>{let n=t.data.session_id;if(typeof n!=`string`){a({title:`SOAP note를 열 수 없습니다`,kind:`error`});return}e(`/sessions/${n}`)};(0,_.useEffect)(()=>{let e=x.current,t=S.current;if(!e||!t)return;let n=t.clientWidth,r=t.clientHeight,i=bm(e).attr(`width`,n).attr(`height`,r);i.selectAll(`*`).remove();let a=i.append(`g`);i.call(Lv().scaleExtent([.2,4]).on(`zoom`,e=>a.attr(`transform`,e.transform.toString())));let o=i.append(`defs`);Object.entries(Vv).forEach(([e,t])=>{o.append(`marker`).attr(`id`,`arrow-${e}`).attr(`viewBox`,`0 -5 10 10`).attr(`refX`,18).attr(`refY`,0).attr(`markerWidth`,6).attr(`markerHeight`,6).attr(`orient`,`auto`).append(`path`).attr(`d`,`M0,-5L10,0L0,5`).attr(`fill`,t).attr(`opacity`,.5)});let s=new Map,c=u.nodes.map(e=>{let t={...e};return s.set(e.id,t),t}),l=u.edges.filter(e=>s.has(e.source)&&s.has(e.target)).map(e=>({source:e.source,target:e.target,relation:e.relation})),d=Sv(c).force(`link`,pv(l).id(e=>e.id).distance(120).strength(.4)).force(`charge`,Cv().strength(-380)).force(`center`,L_(n/2,r/2)).force(`collision`,uv(e=>(Uv[e.source_layer]??12)+18)),f=a.append(`g`).selectAll(`line`).data(l).join(`line`).attr(`stroke`,`#313244`).attr(`stroke-width`,1.5).attr(`marker-end`,e=>`url(#arrow-${(typeof e.source==`object`?e.source:s.get(e.source))?.source_layer??`ontology`})`);f.append(`title`).text(e=>e.relation);let p=a.append(`g`).selectAll(`text`).data(l).join(`text`).attr(`font-size`,9).attr(`fill`,`#45475a`).attr(`pointer-events`,`none`).attr(`opacity`,0).text(e=>e.relation),m=a.append(`g`).selectAll(`g`).data(c).join(`g`).style(`cursor`,`pointer`).call(Fm().on(`start`,(e,t)=>{e.active||d.alphaTarget(.3).restart(),t.fx=t.x,t.fy=t.y}).on(`drag`,(e,t)=>{t.fx=e.x,t.fy=e.y}).on(`end`,(e,t)=>{e.active||d.alphaTarget(0),t.fx=null,t.fy=null}));m.append(`circle`).attr(`r`,e=>Uv[e.source_layer]??12).attr(`fill`,e=>(Vv[e.source_layer]??`#89b4fa`)+`22`).attr(`stroke`,e=>Vv[e.source_layer]??`#89b4fa`).attr(`stroke-width`,2).style(`transition`,`filter 0.2s, stroke 0.2s`),m.append(`text`).attr(`dy`,e=>(Uv[e.source_layer]??12)+13).attr(`text-anchor`,`middle`).attr(`font-size`,11).attr(`fill`,`#1e1e2e`).style(`text-shadow`,`0 1px 4px #ffffff, 0 0 8px #ffffff`).style(`pointer-events`,`none`).text(e=>e.label);function h(e){let t=new Set([e.id]),n=new Set;return l.forEach((r,i)=>{let a=typeof r.source==`object`?r.source.id:r.source,o=typeof r.target==`object`?r.target.id:r.target;(a===e.id||o===e.id)&&(t.add(a),t.add(o),n.add(i))}),{ids:t,linkIdx:n}}return m.on(`click`,(e,t)=>{e.stopPropagation();let{ids:n,linkIdx:r}=h(t);m.select(`circle`).attr(`opacity`,e=>n.has(e.id)?1:.2),m.select(`text`).attr(`opacity`,e=>n.has(e.id)?1:.15),f.attr(`stroke`,(e,t)=>r.has(t)?`#89b4fa`:`#313244`),f.attr(`stroke-width`,(e,t)=>r.has(t)?2.5:1.5),p.attr(`opacity`,(e,t)=>+!!r.has(t)),C(t)}).on(`mouseover`,function(){bm(this).select(`circle`).style(`filter`,`drop-shadow(0 0 8px currentColor)`)}).on(`mouseout`,function(){bm(this).select(`circle`).style(`filter`,null)}),i.on(`click`,()=>{m.select(`circle`).attr(`opacity`,1),m.select(`text`).attr(`opacity`,1),f.attr(`stroke`,`#313244`).attr(`stroke-width`,1.5),p.attr(`opacity`,0)}),d.on(`tick`,()=>{f.attr(`x1`,e=>e.source.x??0).attr(`y1`,e=>e.source.y??0).attr(`x2`,e=>e.target.x??0).attr(`y2`,e=>e.target.y??0),p.attr(`x`,e=>((e.source.x??0)+(e.target.x??0))/2).attr(`y`,e=>((e.source.y??0)+(e.target.y??0))/2),m.attr(`transform`,e=>`translate(${e.x??0},${e.y??0})`)}),()=>{d.stop()}},[u]);let O=Array.from(new Set(u.nodes.map(e=>e.source_layer)));return(0,j.jsxs)(`div`,{className:`flex h-full w-full bg-white text-[#1e1e2e] font-mono overflow-hidden`,children:[(0,j.jsxs)(`div`,{ref:S,className:`flex-1 relative`,children:[(0,j.jsxs)(`div`,{className:`absolute top-0 left-0 right-0 z-10 px-4 py-3 flex items-center gap-3 bg-gradient-to-b from-white to-transparent`,children:[(0,j.jsx)(I,{name:`network`,size:18,className:`text-[#89b4fa]`}),(0,j.jsx)(`p`,{className:`text-[13px] font-bold`,children:`근거 기반 임상 인사이트맵`}),(0,j.jsx)(`div`,{className:`flex-1 flex items-center gap-2 max-w-md ml-4`,children:(0,j.jsxs)(`div`,{className:`flex-1 flex items-center gap-2 bg-[#f4faf6] border border-[#d0d7de] rounded-lg px-3 py-1.5`,children:[(0,j.jsx)(I,{name:`search`,size:14,className:`text-[#6c7086]`}),(0,j.jsx)(`input`,{value:c,onChange:e=>l(e.target.value),onKeyDown:e=>e.key===`Enter`&&T(c),placeholder:`예: 낮은 MLU, 짧은 발화`,className:`flex-1 bg-transparent text-[12px] outline-none placeholder-[#6c7086] text-[#1e1e2e]`})]})}),(0,j.jsx)(`div`,{className:`flex items-center gap-3 ml-2`,children:Bv.map(e=>{let t=i&&e.value===`current_patient`;return(0,j.jsxs)(`label`,{title:t?`리포트에서 열었을 때만 사용할 수 있습니다`:void 0,className:P(`flex items-center gap-1.5 text-[11px]`,t?`text-[#45475a] cursor-not-allowed`:`text-[#a6adc8] cursor-pointer`),children:[(0,j.jsx)(`input`,{type:`checkbox`,checked:o.includes(e.value),disabled:t,onChange:()=>E(e.value),className:`accent-[#89b4fa]`}),e.label]},e.value)})})]}),i&&(0,j.jsx)(`p`,{className:`absolute top-12 left-4 z-10 text-[10px] text-[#6c7086]`,children:`리포트 상세에서 열면 현재 환자 히스토리도 함께 볼 수 있어요. 내 SOAP 기록은 담당 환자 전체를 대상으로 표시됩니다.`}),(0,j.jsxs)(`div`,{className:`absolute top-16 left-4 z-10 bg-[#f4faf6]/90 border border-[#d0d7de] rounded-lg px-3.5 py-2.5 backdrop-blur-sm`,children:[(0,j.jsx)(`h3`,{className:`text-[10px] tracking-[0.12em] uppercase text-[#6c7086] mb-2`,children:`데이터 범위`}),(O.length?O:[`ontology`]).map(e=>(0,j.jsxs)(`div`,{className:`flex items-center gap-1.5 mb-1 last:mb-0`,children:[(0,j.jsx)(`div`,{className:`w-2.5 h-2.5 rounded-full flex-shrink-0`,style:{background:Vv[e]??`#89b4fa`}}),(0,j.jsx)(`span`,{className:`text-[11px] text-[#45475a]`,children:Hv[e]??e})]},e))]}),(0,j.jsxs)(`div`,{className:`absolute bottom-4 right-4 z-10 text-[10px] text-[#45475a] text-right leading-relaxed`,children:[`스크롤: 줌 | 드래그: 이동 | 노드 클릭: 연결 강조`,(0,j.jsx)(`br`,{}),`배경 클릭: 초기화`]}),f&&(0,j.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center bg-white/60 z-20`,children:(0,j.jsx)(`span`,{className:`text-[12px] text-[#6c7086] animate-pulse`,children:`불러오는 중…`})}),!f&&u.nodes.length===0&&(0,j.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center text-[#45475a] text-[12px]`,children:`표시할 개념이 없습니다.`}),(0,j.jsx)(`svg`,{ref:x,className:`w-full h-full`})]}),m&&(0,j.jsxs)(`div`,{className:`w-80 flex-shrink-0 border-l border-[#313244] bg-[#1e1e2e] p-4 overflow-y-auto`,children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,j.jsx)(`p`,{className:`text-[13px] font-bold text-[#cdd6f4]`,children:m.label}),(0,j.jsx)(`button`,{onClick:()=>C(null),className:`text-[#6c7086] hover:text-[#cdd6f4]`,children:(0,j.jsx)(I,{name:`x`,size:14})})]}),(0,j.jsx)(`span`,{className:`inline-block text-[10px] px-1.5 py-0.5 rounded mb-2`,style:{background:(Vv[m.source_layer]??`#89b4fa`)+`33`,color:Vv[m.source_layer]??`#89b4fa`},children:m.type}),m.summary&&(0,j.jsx)(`p`,{className:`text-[12px] text-[#a6adc8] leading-relaxed mb-3`,children:m.summary}),m.type===`patient_metric_trend`&&(0,j.jsx)(`pre`,{className:`text-[11px] bg-[#11111b] border border-[#313244] rounded-lg p-2 overflow-x-auto text-[#a6adc8]`,children:JSON.stringify(m.data.trend,null,2)}),m.type===`soap_case_index`&&(0,j.jsx)(`button`,{onClick:()=>D(m),className:`w-full mt-2 py-1.5 bg-[#89b4fa] text-[#1e1e2e] text-[11px] font-semibold rounded-lg hover:brightness-110 transition-all`,children:`SOAP note 보기`}),m.source_layer===`ontology`&&(0,j.jsxs)(`div`,{className:`mt-3 pt-3 border-t border-[#313244]`,children:[g===null&&(0,j.jsx)(`button`,{onClick:()=>w(m),disabled:y,className:`w-full py-1.5 border border-[#313244] text-[#a6adc8] text-[11px] font-semibold rounded-lg hover:bg-[#11111b] transition-colors disabled:opacity-60`,children:y?`문헌 근거 찾는 중…`:`문헌 근거 보기`}),g!==null&&g.length===0&&(0,j.jsx)(`p`,{className:`text-[11px] text-[#45475a]`,children:`관련 문헌 근거를 찾지 못했습니다.`}),g!==null&&g.length>0&&(0,j.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,j.jsx)(`p`,{className:`text-[10px] uppercase tracking-wide text-[#6c7086]`,children:`문헌 근거`}),g.map((e,t)=>(0,j.jsxs)(`div`,{className:`bg-[#11111b] border border-[#313244] rounded-lg p-2`,children:[e.doi_url?(0,j.jsx)(`a`,{href:e.doi_url,target:`_blank`,rel:`noopener noreferrer`,className:`text-[11px] font-semibold text-[#89b4fa] hover:underline`,children:e.title}):(0,j.jsx)(`p`,{className:`text-[11px] font-semibold text-[#cdd6f4]`,children:e.title}),(0,j.jsx)(`p`,{className:`text-[10px] text-[#6c7086] mt-1 line-clamp-3`,children:e.content}),!e.doi_url&&(0,j.jsx)(`p`,{className:`text-[9px] text-[#45475a] mt-1`,children:`원문 링크 없음 (국내 자료)`})]},t))]})]})]})]})}function Gv({children:e}){return Ui(e=>e.isAuthenticated)?(0,j.jsx)(j.Fragment,{children:e}):(0,j.jsx)(yt,{to:`/login`,replace:!0})}function Kv(){return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(sc,{}),(0,j.jsxs)(Ct,{children:[(0,j.jsx)(xt,{path:`/login`,element:(0,j.jsx)(hd,{})}),(0,j.jsx)(xt,{path:`/signup`,element:(0,j.jsx)(yd,{})}),(0,j.jsxs)(xt,{element:(0,j.jsx)(Gv,{children:(0,j.jsx)(oc,{})}),children:[(0,j.jsx)(xt,{index:!0,element:(0,j.jsx)(yt,{to:`/dashboard`,replace:!0})}),(0,j.jsx)(xt,{path:`/dashboard`,element:(0,j.jsx)(Ed,{})}),(0,j.jsx)(xt,{path:`/patients`,element:(0,j.jsx)(Md,{})}),(0,j.jsx)(xt,{path:`/patients/:id`,element:(0,j.jsx)(Nd,{})}),(0,j.jsx)(xt,{path:`/sessions`,element:(0,j.jsx)(Fd,{})}),(0,j.jsx)(xt,{path:`/sessions/new`,element:(0,j.jsx)(Zd,{})}),(0,j.jsx)(xt,{path:`/sessions/:id`,element:(0,j.jsx)(Yd,{})}),(0,j.jsx)(xt,{path:`/reports`,element:(0,j.jsx)($d,{})}),(0,j.jsx)(xt,{path:`/templates`,element:(0,j.jsx)(df,{})}),(0,j.jsx)(xt,{path:`/insight-map`,element:(0,j.jsx)(Wv,{})}),(0,j.jsx)(xt,{path:`/settings`,element:(0,j.jsx)(hf,{})})]}),(0,j.jsx)(xt,{path:`*`,element:(0,j.jsx)(yt,{to:`/dashboard`,replace:!0})})]})]})}var qv=new Yn({defaultOptions:{queries:{retry:1,staleTime:1e3*60*5}}});v.createRoot(document.getElementById(`root`)).render((0,j.jsx)(_.StrictMode,{children:(0,j.jsx)(Lt,{children:(0,j.jsx)($n,{client:qv,children:(0,j.jsx)(Kv,{})})})})); \ No newline at end of file diff --git a/dist/assets/index-DyZZSuCn.css b/dist/assets/index-DI6fGfGA.css similarity index 93% rename from dist/assets/index-DyZZSuCn.css rename to dist/assets/index-DI6fGfGA.css index 2c9fee0..59bb373 100644 --- a/dist/assets/index-DyZZSuCn.css +++ b/dist/assets/index-DI6fGfGA.css @@ -1 +1 @@ -*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:Noto Sans KR,Inter,-apple-system,BlinkMacSystemFont,sans-serif;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background:0 0% 100%;--foreground:222.2 84% 4.9%;--card:0 0% 100%;--card-foreground:222.2 84% 4.9%;--popover:0 0% 100%;--popover-foreground:222.2 84% 4.9%;--primary:161 42% 16%;--primary-foreground:0 0% 100%;--secondary:210 40% 96.1%;--secondary-foreground:222.2 47.4% 11.2%;--muted:210 40% 96.1%;--muted-foreground:215.4 16.3% 46.9%;--accent:210 40% 96.1%;--accent-foreground:222.2 47.4% 11.2%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:214.3 31.8% 91.4%;--input:214.3 31.8% 91.4%;--ring:161 42% 16%;--radius:.5rem}*{border-color:hsl(var(--border));box-sizing:border-box}body{--tw-bg-opacity:1;background-color:rgb(244 250 246/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(26 26 26/var(--tw-text-opacity,1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;word-break:keep-all;font-family:Noto Sans KR,Inter,-apple-system,BlinkMacSystemFont,sans-serif}.\!container{width:100%!important}.container{width:100%}@media (width>=640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (width>=768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (width>=1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (width>=1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (width>=1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.bottom-4{bottom:1rem}.left-0{left:0}.left-2\.5{left:.625rem}.left-3\.5{left:.875rem}.left-4{left:1rem}.right-0{right:0}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-1\/2{top:50%}.top-12{top:3rem}.top-16{top:4rem}.top-2{top:.5rem}.top-5{top:1.25rem}.top-\[23px\]{top:23px}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.ml-0\.5{margin-left:.125rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-auto{margin-right:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-7{margin-top:1.75rem}.mt-auto{margin-top:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[30px\]{height:30px}.h-\[3px\]{height:3px}.h-\[46px\]{height:46px}.h-\[520px\]{height:520px}.h-\[72px\]{height:72px}.h-auto{height:auto}.h-fit{height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.max-h-24{max-height:6rem}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100vh-64px\)\]{max-height:calc(100vh - 64px)}.min-h-0{min-height:0}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-10{width:2.5rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2\.5{width:.625rem}.w-3\.5{width:.875rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-80{width:20rem}.w-\[220px\]{width:220px}.w-\[248px\]{width:248px}.w-\[30px\]{width:30px}.w-\[520px\]{width:520px}.w-\[72px\]{width:72px}.w-full{width:100%}.min-w-0{min-width:0}.max-w-\[1080px\]{max-width:1080px}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[340px\]{max-width:340px}.max-w-\[420px\]{max-width:420px}.max-w-\[440px\]{max-width:440px}.max-w-\[460px\]{max-width:460px}.max-w-\[480px\]{max-width:480px}.max-w-\[520px\]{max-width:520px}.max-w-\[640px\]{max-width:640px}.max-w-\[90\%\]{max-width:90%}.max-w-md{max-width:28rem}.flex-1{flex:1}.flex-\[0_0_60\%\]{flex:0 0 60%}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-\[slideIn_200ms_cubic-bezier\(0\.22\,1\,0\.36\,1\)\]{animation:.2s cubic-bezier(.22,1,.36,1) slideIn}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.resize-none{resize:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-ink-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(238 241 239/var(--tw-divide-opacity,1))}.divide-ink-50>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(246 248 247/var(--tw-divide-opacity,1))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[10px\]{border-radius:10px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-xl{border-radius:.75rem}.rounded-bl-sm{border-bottom-left-radius:calc(var(--radius) - 4px)}.rounded-br-sm{border-bottom-right-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-2{border-width:2px}.border-4,.border-\[4px\]{border-width:4px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-\[\#313244\]{--tw-border-opacity:1;border-color:rgb(49 50 68/var(--tw-border-opacity,1))}.border-brand-100{--tw-border-opacity:1;border-color:rgb(216 236 223/var(--tw-border-opacity,1))}.border-brand-200{--tw-border-opacity:1;border-color:rgb(183 222 200/var(--tw-border-opacity,1))}.border-brand-200\/20{border-color:#b7dec833}.border-brand-300{--tw-border-opacity:1;border-color:rgb(127 177 150/var(--tw-border-opacity,1))}.border-brand-400{--tw-border-opacity:1;border-color:rgb(77 138 111/var(--tw-border-opacity,1))}.border-brand-500{--tw-border-opacity:1;border-color:rgb(45 106 79/var(--tw-border-opacity,1))}.border-brand-700{--tw-border-opacity:1;border-color:rgb(26 60 52/var(--tw-border-opacity,1))}.border-ink-100{--tw-border-opacity:1;border-color:rgb(238 241 239/var(--tw-border-opacity,1))}.border-ink-200{--tw-border-opacity:1;border-color:rgb(226 230 228/var(--tw-border-opacity,1))}.border-ink-300{--tw-border-opacity:1;border-color:rgb(201 207 204/var(--tw-border-opacity,1))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.border-transparent{border-color:#0000}.border-t-brand-600{--tw-border-opacity:1;border-top-color:rgb(36 82 73/var(--tw-border-opacity,1))}.border-t-brand-700{--tw-border-opacity:1;border-top-color:rgb(26 60 52/var(--tw-border-opacity,1))}.bg-\[\#11111b\]{--tw-bg-opacity:1;background-color:rgb(17 17 27/var(--tw-bg-opacity,1))}.bg-\[\#1e1e2e\]{--tw-bg-opacity:1;background-color:rgb(30 30 46/var(--tw-bg-opacity,1))}.bg-\[\#1e1e2e\]\/85{background-color:#1e1e2ed9}.bg-\[\#89b4fa\]{--tw-bg-opacity:1;background-color:rgb(137 180 250/var(--tw-bg-opacity,1))}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.bg-black\/40{background-color:#0006}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-brand-100{--tw-bg-opacity:1;background-color:rgb(216 236 223/var(--tw-bg-opacity,1))}.bg-brand-200{--tw-bg-opacity:1;background-color:rgb(183 222 200/var(--tw-bg-opacity,1))}.bg-brand-25{--tw-bg-opacity:1;background-color:rgb(244 250 246/var(--tw-bg-opacity,1))}.bg-brand-50{--tw-bg-opacity:1;background-color:rgb(236 245 239/var(--tw-bg-opacity,1))}.bg-brand-600{--tw-bg-opacity:1;background-color:rgb(36 82 73/var(--tw-bg-opacity,1))}.bg-brand-700{--tw-bg-opacity:1;background-color:rgb(26 60 52/var(--tw-bg-opacity,1))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-ink-100{--tw-bg-opacity:1;background-color:rgb(238 241 239/var(--tw-bg-opacity,1))}.bg-ink-200{--tw-bg-opacity:1;background-color:rgb(226 230 228/var(--tw-bg-opacity,1))}.bg-ink-50{--tw-bg-opacity:1;background-color:rgb(246 248 247/var(--tw-bg-opacity,1))}.bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.bg-sky-100{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity,1))}.bg-transparent{background-color:#0000}.bg-violet-100{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/10{background-color:#ffffff1a}.bg-white\/60{background-color:#fff9}.bg-gradient-to-b{background-image:linear-gradient(to bottom, var(--tw-gradient-stops))}.from-white{--tw-gradient-from:#fff var(--tw-gradient-from-position);--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.px-9{padding-left:2.25rem;padding-right:2.25rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-9{padding-top:2.25rem;padding-bottom:2.25rem}.py-\[18px\]{padding-top:18px;padding-bottom:18px}.pb-1\.5{padding-bottom:.375rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pb-\[18px\]{padding-bottom:18px}.pl-1{padding-left:.25rem}.pl-10{padding-left:2.5rem}.pl-8{padding-left:2rem}.pr-10{padding-right:2.5rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-2\.5{padding-top:.625rem}.pt-3{padding-top:.75rem}.pt-6{padding-top:1.5rem}.pt-7{padding-top:1.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace}.font-sans{font-family:Noto Sans KR,Inter,-apple-system,BlinkMacSystemFont,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[28px\]{font-size:28px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.06em\]{letter-spacing:.06em}.tracking-\[0\.12em\]{letter-spacing:.12em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-\[\#1e1e2e\]{--tw-text-opacity:1;color:rgb(30 30 46/var(--tw-text-opacity,1))}.text-\[\#45475a\]{--tw-text-opacity:1;color:rgb(69 71 90/var(--tw-text-opacity,1))}.text-\[\#6c7086\]{--tw-text-opacity:1;color:rgb(108 112 134/var(--tw-text-opacity,1))}.text-\[\#89b4fa\]{--tw-text-opacity:1;color:rgb(137 180 250/var(--tw-text-opacity,1))}.text-\[\#a6adc8\]{--tw-text-opacity:1;color:rgb(166 173 200/var(--tw-text-opacity,1))}.text-\[\#cdd6f4\]{--tw-text-opacity:1;color:rgb(205 214 244/var(--tw-text-opacity,1))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.text-brand-100\/65{color:#d8ecdfa6}.text-brand-100\/80{color:#d8ecdfcc}.text-brand-200{--tw-text-opacity:1;color:rgb(183 222 200/var(--tw-text-opacity,1))}.text-brand-200\/55{color:#b7dec88c}.text-brand-500{--tw-text-opacity:1;color:rgb(45 106 79/var(--tw-text-opacity,1))}.text-brand-600{--tw-text-opacity:1;color:rgb(36 82 73/var(--tw-text-opacity,1))}.text-brand-700{--tw-text-opacity:1;color:rgb(26 60 52/var(--tw-text-opacity,1))}.text-brand-900{--tw-text-opacity:1;color:rgb(15 42 36/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-ink-300{--tw-text-opacity:1;color:rgb(201 207 204/var(--tw-text-opacity,1))}.text-ink-400{--tw-text-opacity:1;color:rgb(154 163 160/var(--tw-text-opacity,1))}.text-ink-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-ink-600{--tw-text-opacity:1;color:rgb(75 86 80/var(--tw-text-opacity,1))}.text-ink-700{--tw-text-opacity:1;color:rgb(46 55 51/var(--tw-text-opacity,1))}.text-ink-800{--tw-text-opacity:1;color:rgb(26 26 26/var(--tw-text-opacity,1))}.text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity,1))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity,1))}.text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.line-through{text-decoration-line:line-through}.placeholder-\[\#6c7086\]::placeholder{--tw-placeholder-opacity:1;color:rgb(108 112 134/var(--tw-placeholder-opacity,1))}.placeholder-ink-400::placeholder{--tw-placeholder-opacity:1;color:rgb(154 163 160/var(--tw-placeholder-opacity,1))}.accent-\[\#89b4fa\]{accent-color:#89b4fa}.accent-brand-700{accent-color:#1a3c34}.opacity-0{opacity:0}.shadow-\[0_0_0_3px_rgba\(45\,106\,79\,0\.14\)\]{--tw-shadow:0 0 0 3px #2d6a4f24;--tw-shadow-colored:0 0 0 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_0_5px_rgba\(26\,60\,52\,0\.12\)\]{--tw-shadow:0 0 0 5px #1a3c341f;--tw-shadow-colored:0 0 0 5px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_8px_16px_-4px_rgba\(26\,60\,52\,0\.25\)\]{--tw-shadow:0 8px 16px -4px #1a3c3440;--tw-shadow-colored:0 8px 16px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 12px 24px -8px #0f2a241a, 0 4px 8px -4px #0f2a240f;--tw-shadow-colored:0 12px 24px -8px var(--tw-shadow-color), 0 4px 8px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 8px -2px #0f2a240f, 0 2px 4px -2px #0f2a240a;--tw-shadow-colored:0 4px 8px -2px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px #0f2a240a, 0 1px 3px #0f2a240f;--tw-shadow-colored:0 1px 2px var(--tw-shadow-color), 0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 24px 48px -12px #0f2a242e;--tw-shadow-colored:0 24px 48px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.outline-none{outline-offset:2px;outline:2px solid #0000}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-property:opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-100{transition-duration:.1s}.font-mono-num{font-variant-numeric:tabular-nums;font-family:JetBrains Mono,monospace}@keyframes slideIn{0%{opacity:0;transform:translate(16px)}to{opacity:1;transform:translate(0)}}@keyframes fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.last\:mb-0:last-child{margin-bottom:0}.last\:flex-none:last-child{flex:none}.hover\:border-brand-300:hover{--tw-border-opacity:1;border-color:rgb(127 177 150/var(--tw-border-opacity,1))}.hover\:border-brand-400:hover{--tw-border-opacity:1;border-color:rgb(77 138 111/var(--tw-border-opacity,1))}.hover\:bg-\[\#11111b\]:hover{--tw-bg-opacity:1;background-color:rgb(17 17 27/var(--tw-bg-opacity,1))}.hover\:bg-brand-100:hover{--tw-bg-opacity:1;background-color:rgb(216 236 223/var(--tw-bg-opacity,1))}.hover\:bg-brand-25:hover{--tw-bg-opacity:1;background-color:rgb(244 250 246/var(--tw-bg-opacity,1))}.hover\:bg-brand-50:hover{--tw-bg-opacity:1;background-color:rgb(236 245 239/var(--tw-bg-opacity,1))}.hover\:bg-brand-700:hover{--tw-bg-opacity:1;background-color:rgb(26 60 52/var(--tw-bg-opacity,1))}.hover\:bg-brand-900:hover{--tw-bg-opacity:1;background-color:rgb(15 42 36/var(--tw-bg-opacity,1))}.hover\:bg-ink-100:hover{--tw-bg-opacity:1;background-color:rgb(238 241 239/var(--tw-bg-opacity,1))}.hover\:bg-ink-50:hover{--tw-bg-opacity:1;background-color:rgb(246 248 247/var(--tw-bg-opacity,1))}.hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.hover\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.hover\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.hover\:text-\[\#cdd6f4\]:hover{--tw-text-opacity:1;color:rgb(205 214 244/var(--tw-text-opacity,1))}.hover\:text-brand-200:hover{--tw-text-opacity:1;color:rgb(183 222 200/var(--tw-text-opacity,1))}.hover\:text-brand-700:hover{--tw-text-opacity:1;color:rgb(26 60 52/var(--tw-text-opacity,1))}.hover\:text-brand-800:hover{--tw-text-opacity:1;color:rgb(23 58 51/var(--tw-text-opacity,1))}.hover\:text-brand-900:hover{--tw-text-opacity:1;color:rgb(15 42 36/var(--tw-text-opacity,1))}.hover\:text-ink-600:hover{--tw-text-opacity:1;color:rgb(75 86 80/var(--tw-text-opacity,1))}.hover\:text-ink-700:hover{--tw-text-opacity:1;color:rgb(46 55 51/var(--tw-text-opacity,1))}.hover\:text-red-600:hover{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.hover\:text-red-700:hover{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 8px -2px #0f2a240f, 0 2px 4px -2px #0f2a240a;--tw-shadow-colored:0 4px 8px -2px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 2px #0f2a240a, 0 1px 3px #0f2a240f;--tw-shadow-colored:0 1px 2px var(--tw-shadow-color), 0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.hover\:brightness-110:hover{--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:border-brand-500:focus{--tw-border-opacity:1;border-color:rgb(45 106 79/var(--tw-border-opacity,1))}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.focus\:ring-red-200:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(254 202 202/var(--tw-ring-opacity,1))}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-60:disabled{opacity:.6}.group:hover .group-hover\:opacity-100{opacity:1}@media (width>=768px){.md\:flex{display:flex}} +*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:Noto Sans KR,Inter,-apple-system,BlinkMacSystemFont,sans-serif;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background:0 0% 100%;--foreground:222.2 84% 4.9%;--card:0 0% 100%;--card-foreground:222.2 84% 4.9%;--popover:0 0% 100%;--popover-foreground:222.2 84% 4.9%;--primary:161 42% 16%;--primary-foreground:0 0% 100%;--secondary:210 40% 96.1%;--secondary-foreground:222.2 47.4% 11.2%;--muted:210 40% 96.1%;--muted-foreground:215.4 16.3% 46.9%;--accent:210 40% 96.1%;--accent-foreground:222.2 47.4% 11.2%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:214.3 31.8% 91.4%;--input:214.3 31.8% 91.4%;--ring:161 42% 16%;--radius:.5rem}*{border-color:hsl(var(--border));box-sizing:border-box}body{--tw-bg-opacity:1;background-color:rgb(244 250 246/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(26 26 26/var(--tw-text-opacity,1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;word-break:keep-all;font-family:Noto Sans KR,Inter,-apple-system,BlinkMacSystemFont,sans-serif}.\!container{width:100%!important}.container{width:100%}@media (width>=640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (width>=768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (width>=1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (width>=1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (width>=1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.bottom-4{bottom:1rem}.left-0{left:0}.left-2\.5{left:.625rem}.left-3\.5{left:.875rem}.left-4{left:1rem}.right-0{right:0}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-1\/2{top:50%}.top-12{top:3rem}.top-16{top:4rem}.top-2{top:.5rem}.top-5{top:1.25rem}.top-\[23px\]{top:23px}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.ml-0\.5{margin-left:.125rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-auto{margin-right:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-7{margin-top:1.75rem}.mt-auto{margin-top:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[30px\]{height:30px}.h-\[3px\]{height:3px}.h-\[46px\]{height:46px}.h-\[520px\]{height:520px}.h-\[72px\]{height:72px}.h-auto{height:auto}.h-fit{height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.max-h-24{max-height:6rem}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100vh-64px\)\]{max-height:calc(100vh - 64px)}.min-h-0{min-height:0}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-10{width:2.5rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2\.5{width:.625rem}.w-3\.5{width:.875rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-80{width:20rem}.w-\[220px\]{width:220px}.w-\[248px\]{width:248px}.w-\[30px\]{width:30px}.w-\[520px\]{width:520px}.w-\[72px\]{width:72px}.w-full{width:100%}.min-w-0{min-width:0}.max-w-\[1080px\]{max-width:1080px}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[340px\]{max-width:340px}.max-w-\[420px\]{max-width:420px}.max-w-\[440px\]{max-width:440px}.max-w-\[460px\]{max-width:460px}.max-w-\[480px\]{max-width:480px}.max-w-\[520px\]{max-width:520px}.max-w-\[640px\]{max-width:640px}.max-w-\[90\%\]{max-width:90%}.max-w-md{max-width:28rem}.flex-1{flex:1}.flex-\[0_0_60\%\]{flex:0 0 60%}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-\[slideIn_200ms_cubic-bezier\(0\.22\,1\,0\.36\,1\)\]{animation:.2s cubic-bezier(.22,1,.36,1) slideIn}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.resize-none{resize:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-ink-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(238 241 239/var(--tw-divide-opacity,1))}.divide-ink-50>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(246 248 247/var(--tw-divide-opacity,1))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[10px\]{border-radius:10px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-xl{border-radius:.75rem}.rounded-bl-sm{border-bottom-left-radius:calc(var(--radius) - 4px)}.rounded-br-sm{border-bottom-right-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-2{border-width:2px}.border-4,.border-\[4px\]{border-width:4px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-\[\#313244\]{--tw-border-opacity:1;border-color:rgb(49 50 68/var(--tw-border-opacity,1))}.border-\[\#d0d7de\]{--tw-border-opacity:1;border-color:rgb(208 215 222/var(--tw-border-opacity,1))}.border-brand-100{--tw-border-opacity:1;border-color:rgb(216 236 223/var(--tw-border-opacity,1))}.border-brand-200{--tw-border-opacity:1;border-color:rgb(183 222 200/var(--tw-border-opacity,1))}.border-brand-200\/20{border-color:#b7dec833}.border-brand-300{--tw-border-opacity:1;border-color:rgb(127 177 150/var(--tw-border-opacity,1))}.border-brand-400{--tw-border-opacity:1;border-color:rgb(77 138 111/var(--tw-border-opacity,1))}.border-brand-500{--tw-border-opacity:1;border-color:rgb(45 106 79/var(--tw-border-opacity,1))}.border-brand-700{--tw-border-opacity:1;border-color:rgb(26 60 52/var(--tw-border-opacity,1))}.border-ink-100{--tw-border-opacity:1;border-color:rgb(238 241 239/var(--tw-border-opacity,1))}.border-ink-200{--tw-border-opacity:1;border-color:rgb(226 230 228/var(--tw-border-opacity,1))}.border-ink-300{--tw-border-opacity:1;border-color:rgb(201 207 204/var(--tw-border-opacity,1))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.border-transparent{border-color:#0000}.border-t-brand-600{--tw-border-opacity:1;border-top-color:rgb(36 82 73/var(--tw-border-opacity,1))}.border-t-brand-700{--tw-border-opacity:1;border-top-color:rgb(26 60 52/var(--tw-border-opacity,1))}.bg-\[\#11111b\]{--tw-bg-opacity:1;background-color:rgb(17 17 27/var(--tw-bg-opacity,1))}.bg-\[\#1e1e2e\]{--tw-bg-opacity:1;background-color:rgb(30 30 46/var(--tw-bg-opacity,1))}.bg-\[\#89b4fa\]{--tw-bg-opacity:1;background-color:rgb(137 180 250/var(--tw-bg-opacity,1))}.bg-\[\#f4faf6\]{--tw-bg-opacity:1;background-color:rgb(244 250 246/var(--tw-bg-opacity,1))}.bg-\[\#f4faf6\]\/90{background-color:#f4faf6e6}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.bg-black\/40{background-color:#0006}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-brand-100{--tw-bg-opacity:1;background-color:rgb(216 236 223/var(--tw-bg-opacity,1))}.bg-brand-200{--tw-bg-opacity:1;background-color:rgb(183 222 200/var(--tw-bg-opacity,1))}.bg-brand-25{--tw-bg-opacity:1;background-color:rgb(244 250 246/var(--tw-bg-opacity,1))}.bg-brand-50{--tw-bg-opacity:1;background-color:rgb(236 245 239/var(--tw-bg-opacity,1))}.bg-brand-600{--tw-bg-opacity:1;background-color:rgb(36 82 73/var(--tw-bg-opacity,1))}.bg-brand-700{--tw-bg-opacity:1;background-color:rgb(26 60 52/var(--tw-bg-opacity,1))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-ink-100{--tw-bg-opacity:1;background-color:rgb(238 241 239/var(--tw-bg-opacity,1))}.bg-ink-200{--tw-bg-opacity:1;background-color:rgb(226 230 228/var(--tw-bg-opacity,1))}.bg-ink-50{--tw-bg-opacity:1;background-color:rgb(246 248 247/var(--tw-bg-opacity,1))}.bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.bg-sky-100{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity,1))}.bg-transparent{background-color:#0000}.bg-violet-100{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/10{background-color:#ffffff1a}.bg-white\/60{background-color:#fff9}.bg-gradient-to-b{background-image:linear-gradient(to bottom, var(--tw-gradient-stops))}.from-white{--tw-gradient-from:#fff var(--tw-gradient-from-position);--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.px-9{padding-left:2.25rem;padding-right:2.25rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-9{padding-top:2.25rem;padding-bottom:2.25rem}.py-\[18px\]{padding-top:18px;padding-bottom:18px}.pb-1\.5{padding-bottom:.375rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pb-\[18px\]{padding-bottom:18px}.pl-1{padding-left:.25rem}.pl-10{padding-left:2.5rem}.pl-8{padding-left:2rem}.pr-10{padding-right:2.5rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-2\.5{padding-top:.625rem}.pt-3{padding-top:.75rem}.pt-6{padding-top:1.5rem}.pt-7{padding-top:1.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace}.font-sans{font-family:Noto Sans KR,Inter,-apple-system,BlinkMacSystemFont,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[28px\]{font-size:28px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.06em\]{letter-spacing:.06em}.tracking-\[0\.12em\]{letter-spacing:.12em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-\[\#1e1e2e\]{--tw-text-opacity:1;color:rgb(30 30 46/var(--tw-text-opacity,1))}.text-\[\#45475a\]{--tw-text-opacity:1;color:rgb(69 71 90/var(--tw-text-opacity,1))}.text-\[\#6c7086\]{--tw-text-opacity:1;color:rgb(108 112 134/var(--tw-text-opacity,1))}.text-\[\#89b4fa\]{--tw-text-opacity:1;color:rgb(137 180 250/var(--tw-text-opacity,1))}.text-\[\#a6adc8\]{--tw-text-opacity:1;color:rgb(166 173 200/var(--tw-text-opacity,1))}.text-\[\#cdd6f4\]{--tw-text-opacity:1;color:rgb(205 214 244/var(--tw-text-opacity,1))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.text-brand-100\/65{color:#d8ecdfa6}.text-brand-100\/80{color:#d8ecdfcc}.text-brand-200{--tw-text-opacity:1;color:rgb(183 222 200/var(--tw-text-opacity,1))}.text-brand-200\/55{color:#b7dec88c}.text-brand-500{--tw-text-opacity:1;color:rgb(45 106 79/var(--tw-text-opacity,1))}.text-brand-600{--tw-text-opacity:1;color:rgb(36 82 73/var(--tw-text-opacity,1))}.text-brand-700{--tw-text-opacity:1;color:rgb(26 60 52/var(--tw-text-opacity,1))}.text-brand-900{--tw-text-opacity:1;color:rgb(15 42 36/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-ink-300{--tw-text-opacity:1;color:rgb(201 207 204/var(--tw-text-opacity,1))}.text-ink-400{--tw-text-opacity:1;color:rgb(154 163 160/var(--tw-text-opacity,1))}.text-ink-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-ink-600{--tw-text-opacity:1;color:rgb(75 86 80/var(--tw-text-opacity,1))}.text-ink-700{--tw-text-opacity:1;color:rgb(46 55 51/var(--tw-text-opacity,1))}.text-ink-800{--tw-text-opacity:1;color:rgb(26 26 26/var(--tw-text-opacity,1))}.text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity,1))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity,1))}.text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.line-through{text-decoration-line:line-through}.placeholder-\[\#6c7086\]::placeholder{--tw-placeholder-opacity:1;color:rgb(108 112 134/var(--tw-placeholder-opacity,1))}.placeholder-ink-400::placeholder{--tw-placeholder-opacity:1;color:rgb(154 163 160/var(--tw-placeholder-opacity,1))}.accent-\[\#89b4fa\]{accent-color:#89b4fa}.accent-brand-700{accent-color:#1a3c34}.opacity-0{opacity:0}.shadow-\[0_0_0_3px_rgba\(45\,106\,79\,0\.14\)\]{--tw-shadow:0 0 0 3px #2d6a4f24;--tw-shadow-colored:0 0 0 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_0_0_5px_rgba\(26\,60\,52\,0\.12\)\]{--tw-shadow:0 0 0 5px #1a3c341f;--tw-shadow-colored:0 0 0 5px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-\[0_8px_16px_-4px_rgba\(26\,60\,52\,0\.25\)\]{--tw-shadow:0 8px 16px -4px #1a3c3440;--tw-shadow-colored:0 8px 16px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 12px 24px -8px #0f2a241a, 0 4px 8px -4px #0f2a240f;--tw-shadow-colored:0 12px 24px -8px var(--tw-shadow-color), 0 4px 8px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 8px -2px #0f2a240f, 0 2px 4px -2px #0f2a240a;--tw-shadow-colored:0 4px 8px -2px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px #0f2a240a, 0 1px 3px #0f2a240f;--tw-shadow-colored:0 1px 2px var(--tw-shadow-color), 0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 24px 48px -12px #0f2a242e;--tw-shadow-colored:0 24px 48px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.outline-none{outline-offset:2px;outline:2px solid #0000}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-property:opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-100{transition-duration:.1s}.font-mono-num{font-variant-numeric:tabular-nums;font-family:JetBrains Mono,monospace}@keyframes slideIn{0%{opacity:0;transform:translate(16px)}to{opacity:1;transform:translate(0)}}@keyframes fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.last\:mb-0:last-child{margin-bottom:0}.last\:flex-none:last-child{flex:none}.hover\:border-brand-300:hover{--tw-border-opacity:1;border-color:rgb(127 177 150/var(--tw-border-opacity,1))}.hover\:border-brand-400:hover{--tw-border-opacity:1;border-color:rgb(77 138 111/var(--tw-border-opacity,1))}.hover\:bg-\[\#11111b\]:hover{--tw-bg-opacity:1;background-color:rgb(17 17 27/var(--tw-bg-opacity,1))}.hover\:bg-brand-100:hover{--tw-bg-opacity:1;background-color:rgb(216 236 223/var(--tw-bg-opacity,1))}.hover\:bg-brand-25:hover{--tw-bg-opacity:1;background-color:rgb(244 250 246/var(--tw-bg-opacity,1))}.hover\:bg-brand-50:hover{--tw-bg-opacity:1;background-color:rgb(236 245 239/var(--tw-bg-opacity,1))}.hover\:bg-brand-700:hover{--tw-bg-opacity:1;background-color:rgb(26 60 52/var(--tw-bg-opacity,1))}.hover\:bg-brand-900:hover{--tw-bg-opacity:1;background-color:rgb(15 42 36/var(--tw-bg-opacity,1))}.hover\:bg-ink-100:hover{--tw-bg-opacity:1;background-color:rgb(238 241 239/var(--tw-bg-opacity,1))}.hover\:bg-ink-50:hover{--tw-bg-opacity:1;background-color:rgb(246 248 247/var(--tw-bg-opacity,1))}.hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.hover\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.hover\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.hover\:text-\[\#cdd6f4\]:hover{--tw-text-opacity:1;color:rgb(205 214 244/var(--tw-text-opacity,1))}.hover\:text-brand-200:hover{--tw-text-opacity:1;color:rgb(183 222 200/var(--tw-text-opacity,1))}.hover\:text-brand-700:hover{--tw-text-opacity:1;color:rgb(26 60 52/var(--tw-text-opacity,1))}.hover\:text-brand-800:hover{--tw-text-opacity:1;color:rgb(23 58 51/var(--tw-text-opacity,1))}.hover\:text-brand-900:hover{--tw-text-opacity:1;color:rgb(15 42 36/var(--tw-text-opacity,1))}.hover\:text-ink-600:hover{--tw-text-opacity:1;color:rgb(75 86 80/var(--tw-text-opacity,1))}.hover\:text-ink-700:hover{--tw-text-opacity:1;color:rgb(46 55 51/var(--tw-text-opacity,1))}.hover\:text-red-600:hover{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.hover\:text-red-700:hover{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 8px -2px #0f2a240f, 0 2px 4px -2px #0f2a240a;--tw-shadow-colored:0 4px 8px -2px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 2px #0f2a240a, 0 1px 3px #0f2a240f;--tw-shadow-colored:0 1px 2px var(--tw-shadow-color), 0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.hover\:brightness-110:hover{--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:border-brand-500:focus{--tw-border-opacity:1;border-color:rgb(45 106 79/var(--tw-border-opacity,1))}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.focus\:ring-red-200:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(254 202 202/var(--tw-ring-opacity,1))}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-60:disabled{opacity:.6}.group:hover .group-hover\:opacity-100{opacity:1}@media (width>=768px){.md\:flex{display:flex}} diff --git a/dist/index.html b/dist/index.html index 2d24444..fcf460e 100644 --- a/dist/index.html +++ b/dist/index.html @@ -8,8 +8,8 @@ - - + +
diff --git a/src/api/insightMap.ts b/src/api/insightMap.ts index c5aed90..4b078cf 100644 --- a/src/api/insightMap.ts +++ b/src/api/insightMap.ts @@ -22,10 +22,6 @@ export interface InsightMapResponse { edges: InsightMapEdge[] } -export interface SourceLinkResponse { - url: string -} - export interface EvidenceItem { title: string content: string @@ -53,9 +49,6 @@ export const insightMapApi = { mode, }), - getSourceLink: (caseIndexId: string) => - apiClient.get(`/soap-case-indexes/${caseIndexId}/source-link`), - getConceptEvidence: (conceptKey: string) => apiClient.get(`/insight-map/concepts/${conceptKey}/evidence`), } diff --git a/src/pages/InsightMapPage.tsx b/src/pages/InsightMapPage.tsx index 19540de..df422f1 100644 --- a/src/pages/InsightMapPage.tsx +++ b/src/pages/InsightMapPage.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useRef, useState } from 'react' -import { useSearchParams } from 'react-router-dom' +import { useNavigate, useSearchParams } from 'react-router-dom' import * as d3 from 'd3' import { insightMapApi, @@ -42,6 +42,7 @@ interface SimLink extends d3.SimulationLinkDatum { } export default function InsightMapPage() { + const navigate = useNavigate() const [searchParams] = useSearchParams() const reportId = searchParams.get('report_id') ?? searchParams.get('report_draft_id') const initialFocus = searchParams.get('focus') ?? '' @@ -131,14 +132,15 @@ export default function InsightMapPage() { } }, [reportId, mode]) - const handleViewSoapNote = async (node: InsightMapNode) => { - const caseIndexId = node.id.replace(/^caseidx_/, '') - try { - const { data } = await insightMapApi.getSourceLink(caseIndexId) - window.open(data.url, '_blank', 'noopener,noreferrer') - } catch { + const handleViewSoapNote = (node: InsightMapNode) => { + const sessionId = node.data.session_id + if (typeof sessionId !== 'string') { showToast({ title: 'SOAP note를 열 수 없습니다', kind: 'error' }) + return } + // 리포트 상세는 별도 페이지가 아니라 세션 상세 화면(4단계 워크플로) 안에 있다 — + // ReportsPage의 "보기" 버튼과 동일하게 세션 상세로 이동한다. + navigate(`/sessions/${sessionId}`) } // ── Obsidian 스타일 force-directed 그래프 렌더링 ──────────────────────────── @@ -210,6 +212,11 @@ export default function InsightMapPage() { return `url(#arrow-${source?.source_layer ?? 'ontology'})` }) + // 관계 라벨(related_to 등)을 모든 엣지에 항상 그리면 그래프가 난잡해지므로 + // 기본 상태에서는 숨기고, 노드 선택으로 하이라이트된 엣지에서만 보여준다. + // 호버 시에는 네이티브 툴팁으로 확인 가능. + linkSel.append('title').text((d) => d.relation) + const edgeLabelSel = g .append('g') .selectAll('text') @@ -218,6 +225,7 @@ export default function InsightMapPage() { .attr('font-size', 9) .attr('fill', '#45475a') .attr('pointer-events', 'none') + .attr('opacity', 0) .text((d) => d.relation) const nodeSel = g @@ -286,6 +294,7 @@ export default function InsightMapPage() { nodeSel.select('text').attr('opacity', (n) => (ids.has(n.id) ? 1 : 0.15)) linkSel.attr('stroke', (_, i) => (linkIdx.has(i) ? '#89b4fa' : '#313244')) linkSel.attr('stroke-width', (_, i) => (linkIdx.has(i) ? 2.5 : 1.5)) + edgeLabelSel.attr('opacity', (_, i) => (linkIdx.has(i) ? 1 : 0)) selectNode(d) }) .on('mouseover', function () { @@ -299,6 +308,7 @@ export default function InsightMapPage() { nodeSel.select('circle').attr('opacity', 1) nodeSel.select('text').attr('opacity', 1) linkSel.attr('stroke', '#313244').attr('stroke-width', 1.5) + edgeLabelSel.attr('opacity', 0) }) sim.on('tick', () => { @@ -331,14 +341,14 @@ export default function InsightMapPage() { <p className="text-[13px] font-bold">근거 기반 임상 인사이트맵</p> <div className="flex-1 flex items-center gap-2 max-w-md ml-4"> - <div className="flex-1 flex items-center gap-2 bg-[#1e1e2e] border border-[#313244] rounded-lg px-3 py-1.5"> + <div className="flex-1 flex items-center gap-2 bg-[#f4faf6] border border-[#d0d7de] rounded-lg px-3 py-1.5"> <Icon name="search" size={14} className="text-[#6c7086]" /> <input value={query} onChange={(e) => setQuery(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && handleSearch(query)} placeholder="예: 낮은 MLU, 짧은 발화" - className="flex-1 bg-transparent text-[12px] outline-none placeholder-[#6c7086] text-[#cdd6f4]" + className="flex-1 bg-transparent text-[12px] outline-none placeholder-[#6c7086] text-[#1e1e2e]" /> </div> </div> @@ -376,7 +386,7 @@ export default function InsightMapPage() { )} {/* legend */} - <div className="absolute top-16 left-4 z-10 bg-[#1e1e2e]/85 border border-[#313244] rounded-lg px-3.5 py-2.5 backdrop-blur-sm"> + <div className="absolute top-16 left-4 z-10 bg-[#f4faf6]/90 border border-[#d0d7de] rounded-lg px-3.5 py-2.5 backdrop-blur-sm"> <h3 className="text-[10px] tracking-[0.12em] uppercase text-[#6c7086] mb-2">데이터 범위</h3> {(presentLayers.length ? presentLayers : ['ontology']).map((layer) => ( <div key={layer} className="flex items-center gap-1.5 mb-1 last:mb-0"> @@ -384,7 +394,7 @@ export default function InsightMapPage() { className="w-2.5 h-2.5 rounded-full flex-shrink-0" style={{ background: LAYER_COLOR[layer] ?? '#89b4fa' }} /> - <span className="text-[11px] text-[#a6adc8]">{LAYER_LABEL[layer] ?? layer}</span> + <span className="text-[11px] text-[#45475a]">{LAYER_LABEL[layer] ?? layer}</span> </div> ))} </div>