diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c6d1662..2be84f95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ - 만료된 인증 토큰이 사용자 언어(로케일) 판별에서 여전히 유효한 것으로 취급되던 문제를 수정했습니다. 이제 만료된 토큰은 비로그인과 동일하게 처리합니다. (sir.kr 커뮤니티의 Xbuilder 님께서 제보해주셨습니다.) - 통합 검색이 로그인한 회원을 비회원으로 취급하던 문제를 수정했습니다. 검색 API 가 로그인 상태를 해석하지 않아, 회원 전용 게시판의 읽기 권한이 있어도 검색 결과와 게시판 필터 목록이 비회원 기준으로만 제한되었습니다. 이제 로그인한 회원은 자신이 열람할 수 있는 게시판 범위 그대로 검색됩니다. 비회원 검색은 종전과 동일합니다. - 셸 예약 작업의 허용 실행 파일 목록에 `bash`·`python` 같은 인터프리터를 등록했을 때, 인터프리터에 인라인 명령(`bash -c ...` 형태)을 실어 임의 명령이 실행되던 문제를 막았습니다. 이제 인터프리터 뒤에는 절대경로 스크립트 파일만 지정할 수 있으며, 인라인 코드 실행·상대경로·경로 조작이 담긴 명령은 저장·실행 양쪽에서 거부됩니다. 스크립트 파일을 주기 실행하는 정상 사용(예: `python /경로/작업.py`)은 그대로 동작합니다. 이 기능은 현재 메뉴에 노출되지 않아 실제 사용 경로가 없습니다. (KISA 측에서 제보해주셨습니다 — KVE-2026-1653) +- 검색어처럼 방문자가 입력한 값이 검색엔진용 구조화 데이터(JSON-LD)에 실릴 때, 스크립트 태그를 닫는 문자열을 끼워 넣으면 그 뒤의 내용이 방문자 브라우저에서 스크립트로 실행될 수 있던 문제를 수정했습니다. 검색엔진 봇에게 제공되는 화면이지만 특정 주소 파라미터로 일반 방문자에게도 같은 화면을 강제할 수 있어 실제 공격 경로가 됩니다. 이제 태그 문자를 이스케이프해 실행을 차단하며, 검색엔진이 읽는 구조화 데이터의 의미는 그대로 유지됩니다. ### Added @@ -80,6 +81,7 @@ - 캐시 버전 조회 주소(`?v=`)를 생략하고 공개 라우트·다국어·레이아웃 API 를 직접 호출하는 경우(외부 연동·봇 등), 그 응답이 어떤 갱신 경로로도 무효화되지 않는 별도 캐시에 남던 문제를 수정했습니다. 브라우저를 통한 일반 사용에는 영향이 없습니다. - 확장·코어 업데이트가 중단되며 남은 임시 폴더와 오래된 백업본, 언어팩 설치 임시 파일이 정리되지 않고 계속 쌓이던 문제를 수정했습니다. 사흘이 지난 임시 산출물과 30일이 지난 백업본(최신 1개는 보존)이 매일 자동 정리됩니다. - 개발 도구의 브라우저 콘솔 로그 파일이 하나의 파일에 무한히 쌓이던 문제를 수정했습니다. 이제 날짜별 파일로 나뉘어 7일간 보관됩니다. +- 검색엔진 노출용 페이지 제목에서 타이틀 접미사가 제목과 붙어 표시되던 문제를 수정했습니다. 관리자 화면 안내대로 접미사를 공백으로 시작하게 입력해도 저장 시 선행 공백이 제거되어 "제목| 사이트명" 처럼 접착되었고, 페이지 제목이 없는 화면에서는 "| 사이트명" 처럼 구분자가 매달려 표시되었습니다. 이제 제목이 있으면 공백을 복원해 잇고, 제목이 없으면 구분자를 떼고 사이트명만 표시합니다. ## [7.0.6] - 2026-08-10 diff --git a/app/Seo/SeoMetaResolver.php b/app/Seo/SeoMetaResolver.php index 8cb12d66..678ccbc3 100644 --- a/app/Seo/SeoMetaResolver.php +++ b/app/Seo/SeoMetaResolver.php @@ -253,6 +253,7 @@ class SeoMetaResolver return $this->resolveLocalizedValue($value); } } + return ''; } @@ -428,6 +429,37 @@ class SeoMetaResolver return [$contextIdentifier, $rest]; } + /** + * `
Je?(ot=Ie,Ie=null):ot=Ie.sibling;var yt=Q(F,Ie,Y[Je],oe);if(yt===null){Ie===null&&(Ie=ot);break}t&&Ie&&yt.alternate===null&&r(F,Ie),q=g(yt,q,Je),mt===null?Pe=yt:mt.sibling=yt,mt=yt,Ie=ot}if(Je===Y.length)return o(F,Ie),ut&&da(F,Je),Pe;if(Ie===null){for(;Je Qe?(ut=Ne,Ne=null):ut=Ne.sibling;var bt=Q(K,Ne,Y[Qe],oe);if(bt===null){Ne===null&&(Ne=ut);break}t&&Ne&&bt.alternate===null&&r(K,Ne),G=g(bt,G,Qe),yt===null?Pe=bt:yt.sibling=bt,yt=bt,Ne=ut}if(Qe===Y.length)return o(K,Ne),ht&&da(K,Qe),Pe;if(Ne===null){for(;Qe Component not found: ${e} Component Error: ${e} ${n?.message||"Unknown error"}{if(!a._listeners)return;let l=a._listeners.length;for(;l-- >0;)a._listeners[l](i);a._listeners=null}),this.promise.then=i=>{let l;const c=new Promise(d=>{a.subscribe(d),l=d}).then(i);return c.cancel=function(){a.unsubscribe(l)},c},e(function(l,c,d){a.reason||(a.reason=new mo(l,c,d),n(a.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;const n=this._listeners.indexOf(e);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const e=new AbortController,n=a=>{e.abort(a)};return this.subscribe(n),e.signal.unsubscribe=()=>this.unsubscribe(n),e.signal}static source(){let e;return{token:new cw(function(i){e=i}),cancel:e}}};function RC(s){return function(n){return s.apply(null,n)}}function DC(s){return K.isObject(s)&&s.isAxiosError===!0}const Kd={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(Kd).forEach(([s,e])=>{Kd[e]=s});function Am(s){const e=new vi(s),n=Fg(vi.prototype.request,e);return K.extend(n,vi.prototype,e,{allOwnKeys:!0}),K.extend(n,e,null,{allOwnKeys:!0}),n.create=function(i){return Am(bi(s,i))},n}const Ft=Am(go);Ft.Axios=vi,Ft.CanceledError=mo,Ft.CancelToken=kC,Ft.isCancel=um,Ft.VERSION=Gd,Ft.toFormData=Yl,Ft.AxiosError=Oe,Ft.Cancel=Ft.CanceledError,Ft.all=function(e){return Promise.all(e)},Ft.spread=RC,Ft.isAxiosError=DC,Ft.mergeConfig=bi,Ft.AxiosHeaders=kn,Ft.formToJSON=s=>cm(K.isHTMLForm(s)?new FormData(s):s),Ft.getAdapter=Cm.getAdapter,Ft.HttpStatusCode=Kd,Ft.default=Ft;const{Axios:KT,AxiosError:WT,CanceledError:YT,isCancel:XT,CancelToken:JT,VERSION:QT,all:ZT,Cancel:ek,isAxiosError:tk,spread:nk,toFormData:rk,AxiosHeaders:ak,HttpStatusCode:ik,formToJSON:sk,getAdapter:ok,mergeConfig:lk,create:ck}=Ft,Wd="g7.identity.redirectStash",ec=dt("IdentityGuardInterceptor");class St{static setLauncher(e){this.launcher=e}static hasLauncher(){return this.launcher!==null}static markDomainNoticeShown(){this.domainNoticeShown=!0}static consumeDomainNoticeShown(){const e=this.domainNoticeShown;return this.domainNoticeShown=!1,e}static resolveDeferred(e){const n=this.deferredResolver;if(!n){ec.warn("IdentityGuardInterceptor.resolveDeferred 호출됐지만 대기 중인 launcher 가 없습니다. 모달이 launcher 외부에서 열렸는지 확인하세요.");return}this.deferredResolver=null,n(e)}static createDeferred(){if(this.deferredResolver){const e=this.deferredResolver;this.deferredResolver=null,e({status:"cancelled"})}return new Promise(e=>{this.deferredResolver=e})}static isIdentityRequired(e,n){return e===428&&typeof n=="object"&&n!==null&&n.error_code==="identity_verification_required"}static async handle(e,n,a){this.domainNoticeShown=!1;const i=this.launcher??LC,c=!!(a&&(a.email||a.phone))?{...e.verification,target:a}:e.verification,d=await i(c);if(d.status!=="verified")return null;const f=c.return_request;if(!f)return null;const h=OC(f.url,d.token);return fetch(h,{method:f.method,headers:n?.headers??{Accept:"application/json","Content-Type":"application/json"},body:n?.body,credentials:n?.credentials??"same-origin"})}static redirectExternally(e){const n=e.redirect_url;if(!n)return ec.error("redirectExternally 호출 시 verification.redirect_url 이 없습니다. payload:",e),Promise.resolve({status:"failed",failureCode:"MISSING_REDIRECT_URL",reason:"verification.redirect_url is required for external_redirect flow"});if(typeof window<"u"){const a={return_url:window.location.href,payload:e,stashed_at:Date.now()};try{window.sessionStorage?.setItem(Wd,JSON.stringify(a))}catch(i){ec.warn("sessionStorage 접근 실패 — stash 없이 redirect 합니다.",i)}window.location.href=n}return new Promise(()=>{})}static reset(){if(this.deferredResolver){const e=this.deferredResolver;this.deferredResolver=null;try{e({status:"cancelled"})}catch{}}this.launcher=null,this.domainNoticeShown=!1}}$(St,"launcher",null),$(St,"deferredResolver",null),$(St,"domainNoticeShown",!1);function OC(s,e){if(!e)return s;try{const n=typeof window<"u"?window.location.origin:"http://localhost",a=new URL(s,n);return a.searchParams.set("verification_token",e),/^https?:\/\//i.test(s)?a.toString():`${a.pathname}${a.search}${a.hash}`}catch{const n=s.includes("?")?"&":"?";return`${s}${n}verification_token=${encodeURIComponent(e)}`}}const LC=async s=>{if(typeof window>"u")return{status:"cancelled"};if(s.render_hint==="external_redirect"||s.redirect_url)return St.redirectExternally(s);const e=window.G7Core;if(!e?.dispatch)return console.error("[IdentityGuardInterceptor] defaultLauncher: G7Core 가 초기화되지 않아 본인인증 흐름을 시작할 수 없습니다."),{status:"failed",failureCode:"G7_NOT_READY"};try{await e.dispatch({handler:"toast",params:{message:"본인 확인이 필요합니다.",variant:"warning"}})}catch{}const n=window.location.href,a={return_url:n,payload:s,stashed_at:Date.now()};try{window.sessionStorage?.setItem(Wd,JSON.stringify(a))}catch{}const i=`/identity/challenge?return=${encodeURIComponent(n)}`;try{await e.dispatch({handler:"navigate",params:{path:i}})}catch(l){ec.warn("navigate 실패 — window.location 으로 폴백",l),window.location.href=i}return new Promise(()=>{})},MC=dt("ApiClient");function Yd(){return typeof window<"u"&&window.__G7_DEVTOOLS__?window.__G7_DEVTOOLS__:null}class $C{constructor(e={}){$(this,"client");$(this,"config");$(this,"TOKEN_KEY","auth_token");this.config={baseURL:e.baseURL||"/api",timeout:e.timeout||3e4,onTokenExpired:e.onTokenExpired,onUnauthorized:e.onUnauthorized,onError:e.onError},this.client=Ft.create({baseURL:this.config.baseURL,timeout:this.config.timeout,headers:{"Content-Type":"application/json",Accept:"application/json"},paramsSerializer:{serialize:n=>{const a=[];for(const[i,l]of Object.entries(n))if(l!=null)if(Array.isArray(l)){const c=i.endsWith("[]")?i:`${i}[]`;for(const d of l)a.push(`${encodeURIComponent(c)}=${encodeURIComponent(String(d))}`)}else a.push(`${encodeURIComponent(i)}=${encodeURIComponent(String(l))}`);return a.join("&")}}}),this.setupInterceptors()}setToken(e){typeof window<"u"&&localStorage.setItem(this.TOKEN_KEY,e)}getToken(){return typeof window<"u"?localStorage.getItem(this.TOKEN_KEY):null}removeToken(){typeof window<"u"&&localStorage.removeItem(this.TOKEN_KEY)}setupInterceptors(){this.client.interceptors.request.use(e=>{e.url?.startsWith("/api")&&e.baseURL==="/api"&&(e.baseURL="");const n=this.getToken();if(n&&e.headers&&!this.isCrossOriginRequest(e.url)&&(e.headers.Authorization=`Bearer ${n}`),typeof window<"u"&&e.headers){const i=localStorage.getItem("g7_locale");i&&(e.headers["Accept-Language"]=i)}const a=Yd();if(a?.isEnabled()){const i=this.buildFullUrl(e),l=(e.method||"GET").toUpperCase(),c=a.trackRequest(i,l,{requestBody:e.data});e._devToolsRequestId=c}return e},e=>Promise.reject(e)),this.client.interceptors.response.use(e=>{const n=e.config,a=n._devToolsRequestId;if(a){const i=Yd();i?.isEnabled()&&i.completeRequest(a,e.status,e.data),n._devToolsRequestId=null}return e},async e=>{const n=e.config,a=n?.url||"",l=["/auth/","/layouts/"].some(c=>a.includes(c));if(e.response?.status===401&&!n?._retry&&!l){if(n._retry=!0,await Sr.getInstance().refreshToken()){const f=this.getToken();return f&&(n.headers.Authorization=`Bearer ${f}`),n._devToolsRequestId=null,this.client(n)}return this.completeDevToolsRequest(n,e),this.removeToken(),this.config.onUnauthorized&&this.config.onUnauthorized(),Promise.reject(e)}if(e.response?.status===401&&l)return this.completeDevToolsRequest(n,e),Promise.reject(e);if(St.isIdentityRequired(e.response?.status,e.response?.data)){this.completeDevToolsRequest(n,e);const c={},d=n?.headers??{};for(const[S,v]of Object.entries(d))typeof v=="string"&&(c[S]=v);let f;n?.data!==void 0&&n?.data!==null&&(f=typeof n.data=="string"?n.data:JSON.stringify(n.data),c["Content-Type"]=c["Content-Type"]??"application/json");const h=n?.identity_target,m=await St.handle(e.response.data,{headers:c,body:f,credentials:"same-origin"},h);if(!m)return Promise.reject(e);let b=null;try{b=await m.json()}catch{b=null}return m.ok?{...e.response,status:m.status,data:b}:Promise.reject(Object.assign(new Error("replay failed"),{response:{status:m.status,data:b}}))}return e.response?.status===403?(this.completeDevToolsRequest(n,e),this.callOnError(e),Promise.reject(e)):(this.completeDevToolsRequest(n,e),e.response&&this.callOnError(e),Promise.reject(e))})}async get(e,n){return(await this.client.get(e,n)).data}async post(e,n,a){return(await this.client.post(e,n,a)).data}async put(e,n,a){return(await this.client.put(e,n,a)).data}async patch(e,n,a){return(await this.client.patch(e,n,a)).data}async delete(e,n){return(await this.client.delete(e,n)).data}getInstance(){return this.client}setOnUnauthorized(e){this.config.onUnauthorized=e}setOnError(e){this.config.onError=e}completeDevToolsRequest(e,n){if(!e?._devToolsRequestId)return;const a=Yd();if(!a?.isEnabled())return;const i=e._devToolsRequestId;e._devToolsRequestId=null,n.response?a.completeRequest(i,n.response.status,n.response.data):n.request?a.failRequest(i,n.message||"Network error"):a.failRequest(i,n.message||"Request error")}isCrossOriginRequest(e){if(!e||typeof window>"u"||!window.location||!/^(https?:)?\/\//i.test(e))return!1;try{return new URL(e,window.location.href).origin!==window.location.origin}catch{return!1}}buildFullUrl(e){let n=e.url||"";if(e.baseURL&&!n.startsWith("http")&&(n=`${e.baseURL}${n.startsWith("/")?"":"/"}${n}`),e.params&&typeof e.params=="object"){const a=e.params,i=[];for(const[l,c]of Object.entries(a))if(c!=null)if(Array.isArray(c)){const d=l.endsWith("[]")?l:`${l}[]`;for(const f of c)i.push(`${encodeURIComponent(d)}=${encodeURIComponent(String(f))}`)}else i.push(`${encodeURIComponent(l)}=${encodeURIComponent(String(c))}`);i.length>0&&(n+=(n.includes("?")?"&":"?")+i.join("&"))}return n}callOnError(e){if(!this.config.onError)return;const n={status:e.response?.status||0,message:e.response?.data?.message||e.message||"Unknown error",data:e.response?.data,statusText:e.response?.statusText};try{this.config.onError(n)}catch(a){MC.error("Error in onError handler:",a)}}}let Xd=null;function Hr(){return Xd||(Xd=new $C),Xd}const yo=dt("AuthManager");function cs(s,e,n,a){try{window.G7Core?.devTools?.trackAuthEvent?.(s,e,n,a)}catch{}}const tc={admin:{type:"admin",loginPath:"/admin/login",defaultPath:"/admin",userEndpoint:"/admin/auth/user",loginEndpoint:"/auth/admin/login",logoutEndpoint:"/admin/auth/logout",refreshEndpoint:"/admin/auth/refresh"},user:{type:"user",loginPath:"/login",defaultPath:"/",userEndpoint:"/auth/user",loginEndpoint:"/auth/login",logoutEndpoint:"/auth/logout",refreshEndpoint:"/auth/refresh"}},Tr=class Tr{constructor(){$(this,"state");$(this,"config");$(this,"isRefreshing",!1);$(this,"refreshPromise",null);$(this,"eventHandlers",new Map);this.state={isAuthenticated:!1,user:null,type:null},this.config=new Map,this.config.set("admin",tc.admin),this.config.set("user",tc.user)}static getInstance(){return Tr.instance||(Tr.instance=new Tr),Tr.instance}on(e,n){this.eventHandlers.has(e)||this.eventHandlers.set(e,[]),this.eventHandlers.get(e).push(n)}emit(e,...n){const a=this.eventHandlers.get(e);a&&a.forEach(i=>i(...n))}isAuthenticated(){return this.state.isAuthenticated}getUser(){return this.state.user}getAuthType(){return this.state.type}async checkAuth(e){const n=Hr();if(!n.getToken())return this.clearState(),!1;const i=this.config.get(e);if(!i)return yo.error(`Unknown auth type: ${e}`),!1;try{const l=await n.get(i.userEndpoint);return l.success&&l.data?(this.state={isAuthenticated:!0,user:l.data,type:e},this.emit("authStateChange",this.state),!0):(this.clearState(),!1)}catch(l){return l.response?.status===401&&await this.refreshToken()?this.checkAuth(e):(this.clearState(),!1)}}async preloadAuth(e){try{return await this.checkAuth(e)}catch(n){return yo.warn(`Preload auth failed for type ${e}:`,n),!1}}async login(e,n,a){const i=Hr();if(!this.config.get(e))throw new Error(`Unknown auth type: ${e}`);const c=e==="admin"?tc.admin.loginEndpoint:tc.user.loginEndpoint;try{const d=a?.headers?{headers:a.headers}:void 0,f=await i.post(c,n,d);if(f.success&&f.data){i.setToken(f.data.token);const h=f.data.user.language,m=localStorage.getItem(Tr.LOCALE_STORAGE_KEY),b=h&&h!==m;if(h)try{localStorage.setItem(Tr.LOCALE_STORAGE_KEY,h)}catch(S){yo.warn("Failed to save user language to localStorage:",S)}return this.state={isAuthenticated:!0,user:f.data.user,type:e},this.emit("login",this.state),this.emit("authStateChange",this.state),cs("login",!0,void 0,{userId:f.data.user.uuid,email:f.data.user.email,type:e}),b&&window.__templateApp&&window.__templateApp.changeLocale(h),f.data.user}throw new Error("Login failed")}catch(d){this.clearState();const f=d.response?.data?.message,h=new Error(f||d.message||"Login failed");throw h.response=d.response,h.status=d.response?.status,cs("login",!1,h.message,{type:e,status:d.response?.status}),h}}async logout(){const e=Hr(),n=this.state.type?this.config.get(this.state.type):null;try{n&&await e.post(n.logoutEndpoint)}catch(a){yo.warn("Logout API call failed:",a)}finally{e.removeToken();const a={...this.state};if(this.clearState(),this.emit("logout",a),this.emit("authStateChange",this.state),cs("logout",!0,void 0,{previousType:a.type}),n&&a.type){const i=window.location.pathname+window.location.search;window.location.href=this.getLoginRedirectUrl(a.type,i)}}}async refreshToken(){if(this.isRefreshing&&this.refreshPromise)return this.refreshPromise;this.isRefreshing=!0,this.refreshPromise=this.doRefreshToken();try{return await this.refreshPromise}finally{this.isRefreshing=!1,this.refreshPromise=null}}async doRefreshToken(){const e=this.state.type;if(!e)return!1;const n=this.config.get(e);if(!n)return!1;const a=Hr();try{const i=await a.post(n.refreshEndpoint);return i.success&&i.data?.token?(a.setToken(i.data.token),this.emit("tokenRefreshed"),cs("token-refresh",!0,void 0,{type:e}),!0):(cs("token-refresh",!1,"No token in response",{type:e}),!1)}catch(i){return yo.error("Token refresh failed:",i),cs("token-refresh",!1,i instanceof Error?i.message:"Unknown error",{type:e}),!1}}getLoginRedirectUrl(e,n,a){const i=this.config.get(e);if(!i)return"/login";const l=encodeURIComponent(n);let c=`${i.loginPath}?redirect=${l}`;return a&&(c+=`&reason=${encodeURIComponent(a)}`),c}updateConfig(e,n){if(n.loginPath!==void 0){const i=n.loginPath;if(!i.startsWith("/")||i.startsWith("//"))throw new Error(`AuthManager.updateConfig: loginPath must be a same-origin path starting with '/' (got: ${i})`)}const a=this.config.get(e);a&&this.config.set(e,{...a,...n})}getRedirectUrl(e){const a=this.config.get(e)?.defaultPath||"/",l=new URLSearchParams(window.location.search).get("redirect");if(l)try{const c=decodeURIComponent(l);if(c.startsWith("/"))return c}catch{}return a}getConfig(e){return this.config.get(e)}clearState(){this.state={isAuthenticated:!1,user:null,type:null}}static resetInstance(){Tr.instance=null}};$(Tr,"instance"),$(Tr,"LOCALE_STORAGE_KEY","g7_locale");let Sr=Tr;const xm={401:{handler:"navigate",params:{path:"{{auth.loginPath}}"}},403:{handler:"toast",params:{type:"error",message:"{{error.message}}"}},404:{handler:"toast",params:{type:"error",message:"{{error.message}}"}},422:{handler:"toast",params:{type:"error",message:"{{error.message}}"}},default:{handler:"toast",params:{type:"error",message:"{{error.message}}"}}},ea={findHandler(s,e){if(s){if(s[e])return s[e];if(s[String(e)])return s[String(e)];if(s.default)return s.default}},normalizeOnError(s){return s?Array.isArray(s)?s:[s]:[]},injectErrorCode(s,e,n){if(s.handler!=="showErrorPage"||s.params?.errorCode!==void 0)return s;const a=typeof e=="string"?parseInt(e,10):e,i=isNaN(a)?n:a;return i===void 0?s:{...s,params:{...s.params,errorCode:i}}}},wr=dt("ErrorHandlingResolver"),Na=class Na{constructor(){$(this,"templateErrorHandling",null);$(this,"layoutErrorHandling",null);$(this,"executeAction",null)}static getInstance(){return Na.instance||(Na.instance=new Na),Na.instance}static resetInstance(){Na.instance=null}setTemplateConfig(e){this.templateErrorHandling=e,wr.log("Template config set:",e)}setLayoutConfig(e){this.layoutErrorHandling=e,wr.log("Layout config set:",e)}setActionExecutor(e){this.executeAction=e}resolve(e,n={}){const{errorHandling:a,onError:i}=n;wr.log("Resolving error:",e,{hasActionErrorHandling:!!a,hasActionOnError:!!i,hasLayoutConfig:!!this.layoutErrorHandling,hasTemplateConfig:!!this.templateErrorHandling});let l=ea.findHandler(a,e);if(l){const c=this.getMatchedKey(a,e);return{handler:ea.injectErrorCode(l,c,e),level:"action",matchedKey:c}}if(i){const c=ea.normalizeOnError(i);if(c.length>0)return{handler:c.length===1?c[0]:{handler:"sequence",actions:c},level:"action",matchedKey:"onError"}}if(l=ea.findHandler(this.layoutErrorHandling||void 0,e),l){const c=this.getMatchedKey(this.layoutErrorHandling,e);return{handler:ea.injectErrorCode(l,c,e),level:"layout",matchedKey:c}}if(l=ea.findHandler(this.templateErrorHandling||void 0,e),l){const c=this.getMatchedKey(this.templateErrorHandling,e);return{handler:ea.injectErrorCode(l,c,e),level:"template",matchedKey:c}}if(l=ea.findHandler(xm,e),l){const c=this.getMatchedKey(xm,e);return{handler:ea.injectErrorCode(l,c,e),level:"system",matchedKey:c}}return{handler:null,level:null,matchedKey:null}}async execute(e,n){if(!this.executeAction){wr.error("Action executor is not set");return}wr.log("Executing handler:",e.handler,{errorContext:n});try{return await this.executeAction(e,{error:n})}catch(a){throw wr.error("Failed to execute handler:",a),a}}async resolveAndExecute(e,n,a={}){const i=this.resolve(e,a);if(wr.log("Resolve result:",{errorCode:e,handler:i.handler?.handler,level:i.level,matchedKey:i.matchedKey}),!i.handler)return wr.warn("No handler found for error:",e),{handled:!1};try{return{handled:!0,result:await this.execute(i.handler,n)}}catch(l){return wr.error("Handler execution failed:",l),{handled:!1}}}getMatchedKey(e,n){return e[n]?n:e[String(n)]?String(n):"default"}clearLayoutConfig(){this.layoutErrorHandling=null,wr.log("Layout config cleared")}clearAllConfig(){this.templateErrorHandling=null,this.layoutErrorHandling=null,wr.log("All config cleared")}getConfigStatus(){return{hasTemplate:this.templateErrorHandling!==null,hasLayout:this.layoutErrorHandling!==null,hasExecutor:this.executeAction!==null}}};$(Na,"instance",null);let Jd=Na;function Cr(){return Jd.getInstance()}var Qd={exports:{}},bo={};var Tm;function NC(){if(Tm)return bo;Tm=1;var s=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function n(a,i,l){var c=null;if(l!==void 0&&(c=""+l),i.key!==void 0&&(c=""+i.key),"key"in i){l={};for(var d in i)d!=="key"&&(l[d]=i[d])}else l=i;return i=l.ref,{$$typeof:s,type:a,key:c,ref:i!==void 0?i:null,props:l}}return bo.Fragment=e,bo.jsx=n,bo.jsxs=n,bo}var km;function IC(){return km||(km=1,Qd.exports=NC()),Qd.exports}var ft=IC();const jC=Qr({__proto__:null,default:Zr(ft)},[ft]),Zd=dt("ParentContextProvider"),Rm=N.createContext(null);let nc=null;function ef(){nc?(Zd.log("[triggerModalParentUpdate] 모달 부모 컨텍스트 업데이트 트리거"),nc()):Zd.warn("[triggerModalParentUpdate] Provider가 아직 마운트되지 않음")}const Dm=({children:s})=>{const[e,n]=N.useState(0),a=N.useRef(!0),i=N.useCallback(()=>{const c=window.__g7LayoutContextStack||[];return c[c.length-1]?.dataContext},[]);N.useEffect(()=>(a.current=!0,nc=()=>{a.current&&(n(c=>c+1),Zd.log("[ParentContextProvider] 버전 업데이트됨"))},()=>{a.current=!1,nc=null}),[]);const l={version:e,getParentDataContext:i};return ft.jsx(Rm.Provider,{value:l,children:s})};function HC(){return N.useContext(Rm)}const j=dt("ActionDispatcher");function zC(s,e,n,a){return n||(mg(s)||dd(s)?"$t:core.errors.network_request_failed":a||`Failed to execute action: ${e}`)}const Om=new Set(["navigate","navigateBack","navigateForward","replaceUrl","refresh","logout"]),UC=new Set(["redirect"]);function Gn(){try{return window.G7Core?.devTools}catch{return}}class Ut extends Error{constructor(n,a,i){super(n);$(this,"action");$(this,"originalError");$(this,"unknownHandler",!1);this.action=a,this.originalError=i,this.name="ActionError"}}const Lm={click:"onClick",change:"onChange",input:"onInput",submit:"onSubmit",focus:"onFocus",blur:"onBlur",keydown:"onKeyDown",keyup:"onKeyUp",keypress:"onKeyPress",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",scroll:"onScroll",dragstart:"onDragStart",drag:"onDrag",dragend:"onDragEnd",dragenter:"onDragEnter",dragover:"onDragOver",dragleave:"onDragLeave",drop:"onDrop"},bs=class bs{constructor(e={},n,a){$(this,"bindingEngine");$(this,"translationEngine");$(this,"translationContext");$(this,"customHandlers",new Map);$(this,"defaultContext");$(this,"globalStateUpdater");$(this,"errorHandlingSetup",!1);$(this,"debounceTimers",new Map);$(this,"pendingDebounceFlushers",new Map);$(this,"debounceAccumulatedValues",new Map);$(this,"globalHeaders",[]);$(this,"namedActions",{});$(this,"previewMode",!1);$(this,"intervals",new Map);this.bindingEngine=new Tn,this.translationEngine=n,this.translationContext=a,this.defaultContext=e,this.registerDefaultHandlers(),this.setupErrorHandling()}setGlobalHeaders(e){this.globalHeaders=e||[]}setNamedActions(e){this.namedActions=e||{};const n=Gn();n?.isEnabled?.()&&n.setNamedActionDefinitions?.(this.namedActions),j.log("[setNamedActions] registered:",Object.keys(this.namedActions))}getNamedActions(){return this.namedActions}setPreviewMode(e){this.previewMode=e,j.log("Preview mode:",e?"enabled":"disabled")}isPreviewMode(){return this.previewMode}static getPreviewSuppressedHandlers(){return Om}static getPreviewSuppressedLayoutFeatures(){return UC}resolveActionRef(e){if(!e.actionRef)return e;const n=this.namedActions[e.actionRef];if(!n)return j.warn(`[resolveActionRef] named action not found: "${e.actionRef}"`),e;const a=Gn();a?.isEnabled?.()&&a.trackNamedActionRef?.({actionRefName:e.actionRef,resolvedHandler:n.handler,timestamp:Date.now()});const{actionRef:i,type:l,key:c,event:d,...f}=e,h={...n,...Object.fromEntries(Object.entries(f).filter(([,m])=>m!==void 0)),type:l??n.type};return c!==void 0&&(h.key=c),d!==void 0&&(h.event=d),h}matchesPattern(e,n){if(n==="*")return!0;const a=n.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${a}$`).test(e)}getMatchingGlobalHeaders(e,n){const a={};for(const i of this.globalHeaders)this.matchesPattern(e,i.pattern)&&Object.entries(i.headers).forEach(([l,c])=>{const d=is(c,n,{skipCache:!0});d!=null&&d!==""&&(a[l]=String(d))});return a}setupErrorHandling(){if(this.errorHandlingSetup)return;Cr().setActionExecutor(async(n,a)=>{const i={type:"click",handler:n.handler,target:n.target,params:n.params,actions:n.actions},l={data:{...this.defaultContext.data,error:a.error}};return await this.dispatchAction(i,l)}),this.errorHandlingSetup=!0}registerDefaultHandlers(){this.registerHandler("refetchDataSource",async(n,a)=>{const i=n.params?.dataSourceId,l=n.params?.sync;if(!i){j.warn("refetchDataSource: dataSourceId is required");return}if(typeof window<"u"&&window.G7Core?.dataSource?.refetch){const c=window.G7Core?.state?.get?.()||{},d={...a.state?._global,...c},f=window.G7Core?.state?.getLocal?.()||{},h=a.data?._local||a.state||{},m={...f,...h},b=a.isolatedContext?.state;j.log("[refetchDataSource] localStateOverride:",m),await window.G7Core.dataSource.refetch(i,{...l?{sync:!0}:{},...d?{globalStateOverride:d}:{},...m?{localStateOverride:m}:{},...b?{isolatedStateOverride:b}:{}})}else j.warn("refetchDataSource: G7Core.dataSource.refetch is not available")}),this.registerHandler("appendDataSource",async(n,a)=>{const{dataSourceId:i,dataPath:l,newData:c}=n.params||{};if(!i){j.warn("appendDataSource: dataSourceId is required");return}if(c===void 0){j.warn("appendDataSource: newData is required");return}if(typeof window<"u"&&window.G7Core?.dataSource?.updateData){if(!Array.isArray(c)){j.warn("appendDataSource: newData must be an array, got:",typeof c,c);return}await window.G7Core.dataSource.updateData(i,l||null,c,"append")}else j.warn("appendDataSource: G7Core.dataSource.updateData is not available")}),this.registerHandler("updateDataSource",async(n,a)=>{const{dataSourceId:i,data:l,merge:c=!1}=n.params||{};if(!i){j.warn("updateDataSource: dataSourceId is required");return}if(l===void 0){j.warn("updateDataSource: data is required");return}typeof window<"u"&&window.G7Core?.dataSource?.set?(j.log(`[updateDataSource] Updating dataSource '${i}' with:`,l),window.G7Core.dataSource.set(i,l,{merge:c})):j.warn("updateDataSource: G7Core.dataSource.set is not available")}),this.registerHandler("scrollIntoView",async(n,a)=>{const{selector:i,behavior:l="smooth",block:c="nearest",inline:d="nearest",waitForElement:f=!1,timeout:h=2e3,delay:m=0,retryCount:b=0,retryInterval:S=50,scrollContainer:v}=n.params||{};if(!i){j.warn("scrollIntoView: selector is required");return}if(typeof window>"u"||typeof document>"u"){j.warn("scrollIntoView: window/document is not available");return}let _=null;if(f){if(_=await new Promise(A=>{const x=document.querySelector(i);if(x){A(x);return}const L=setTimeout(()=>{M.disconnect(),A(null)},h),M=new MutationObserver(()=>{const k=document.querySelector(i);k&&(clearTimeout(L),M.disconnect(),A(k))});M.observe(document.body,{childList:!0,subtree:!0})}),!_){j.warn(`scrollIntoView: element not found for selector "${i}" after ${h}ms timeout`);return}}else{m>0&&await new Promise(x=>setTimeout(x,m)),_=document.querySelector(i);let A=0;for(;!_&&AsetTimeout(x,S)),_=document.querySelector(i),A++;if(!_){j.warn(`scrollIntoView: element not found for selector "${i}" after ${A+1} attempts`);return}}if(v){const A=document.querySelector(v);if(!A){j.warn(`scrollIntoView: container not found for selector "${v}"`);return}const x=_.getBoundingClientRect(),L=A.getBoundingClientRect(),M=x.top-L.top+A.scrollTop,k=M+x.height;let O;switch(c){case"start":O=M;break;case"center":O=M-A.clientHeight/2+x.height/2;break;case"end":O=k-A.clientHeight;break;default:const B=x.top{if(!a._listeners)return;let l=a._listeners.length;for(;l-- >0;)a._listeners[l](i);a._listeners=null}),this.promise.then=i=>{let l;const c=new Promise(d=>{a.subscribe(d),l=d}).then(i);return c.cancel=function(){a.unsubscribe(l)},c},e(function(l,c,d){a.reason||(a.reason=new vo(l,c,d),n(a.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;const n=this._listeners.indexOf(e);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const e=new AbortController,n=a=>{e.abort(a)};return this.subscribe(n),e.signal.unsubscribe=()=>this.unsubscribe(n),e.signal}static source(){let e;return{token:new yw(function(i){e=i}),cancel:e}}};function FC(s){return function(n){return s.apply(null,n)}}function VC(s){return V.isObject(s)&&s.isAxiosError===!0}const Jd={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(Jd).forEach(([s,e])=>{Jd[e]=s});function $m(s){const e=new Si(s),n=Yg(Si.prototype.request,e);return V.extend(n,Si.prototype,e,{allOwnKeys:!0}),V.extend(n,e,null,{allOwnKeys:!0}),n.create=function(i){return $m(vi(s,i))},n}const Xt=$m(bo);Xt.Axios=Si,Xt.CanceledError=vo,Xt.CancelToken=GC,Xt.isCancel=ym,Xt.VERSION=Wd,Xt.toFormData=Ql,Xt.AxiosError=Ee,Xt.Cancel=Xt.CanceledError,Xt.all=function(e){return Promise.all(e)},Xt.spread=FC,Xt.isAxiosError=VC,Xt.mergeConfig=vi,Xt.AxiosHeaders=xn,Xt.formToJSON=s=>mm(V.isHTMLForm(s)?new FormData(s):s),Xt.getAdapter=Om.getAdapter,Xt.HttpStatusCode=Jd,Xt.default=Xt;const{Axios:ck,AxiosError:uk,CanceledError:dk,isCancel:fk,CancelToken:hk,VERSION:pk,all:gk,Cancel:mk,isAxiosError:yk,spread:bk,toFormData:vk,AxiosHeaders:Sk,HttpStatusCode:wk,formToJSON:Ck,getAdapter:Ek,mergeConfig:_k,create:Ak}=Xt,Qd="g7.identity.redirectStash",ac=pt("IdentityGuardInterceptor");class _t{static setLauncher(e){this.launcher=e}static hasLauncher(){return this.launcher!==null}static markDomainNoticeShown(){this.domainNoticeShown=!0}static consumeDomainNoticeShown(){const e=this.domainNoticeShown;return this.domainNoticeShown=!1,e}static resolveDeferred(e){const n=this.deferredResolver;if(!n){ac.warn("IdentityGuardInterceptor.resolveDeferred 호출됐지만 대기 중인 launcher 가 없습니다. 모달이 launcher 외부에서 열렸는지 확인하세요.");return}this.deferredResolver=null,n(e)}static createDeferred(){if(this.deferredResolver){const e=this.deferredResolver;this.deferredResolver=null,e({status:"cancelled"})}return new Promise(e=>{this.deferredResolver=e})}static isIdentityRequired(e,n){return e===428&&typeof n=="object"&&n!==null&&n.error_code==="identity_verification_required"}static async handle(e,n,a){this.domainNoticeShown=!1;const i=this.launcher??WC,c=!!(a&&(a.email||a.phone))?{...e.verification,target:a}:e.verification,d=await i(c);if(d.status!=="verified")return null;const f=c.return_request;if(!f)return null;const h=KC(f.url,d.token);return fetch(h,{method:f.method,headers:n?.headers??{Accept:"application/json","Content-Type":"application/json"},body:n?.body,credentials:n?.credentials??"same-origin"})}static redirectExternally(e){const n=e.redirect_url;if(!n)return ac.error("redirectExternally 호출 시 verification.redirect_url 이 없습니다. payload:",e),Promise.resolve({status:"failed",failureCode:"MISSING_REDIRECT_URL",reason:"verification.redirect_url is required for external_redirect flow"});if(typeof window<"u"){const a={return_url:window.location.href,payload:e,stashed_at:Date.now()};try{window.sessionStorage?.setItem(Qd,JSON.stringify(a))}catch(i){ac.warn("sessionStorage 접근 실패 — stash 없이 redirect 합니다.",i)}window.location.href=n}return new Promise(()=>{})}static reset(){if(this.deferredResolver){const e=this.deferredResolver;this.deferredResolver=null;try{e({status:"cancelled"})}catch{}}this.launcher=null,this.domainNoticeShown=!1}}$(_t,"launcher",null),$(_t,"deferredResolver",null),$(_t,"domainNoticeShown",!1);function KC(s,e){if(!e)return s;try{const n=typeof window<"u"?window.location.origin:"http://localhost",a=new URL(s,n);return a.searchParams.set("verification_token",e),/^https?:\/\//i.test(s)?a.toString():`${a.pathname}${a.search}${a.hash}`}catch{const n=s.includes("?")?"&":"?";return`${s}${n}verification_token=${encodeURIComponent(e)}`}}const WC=async s=>{if(typeof window>"u")return{status:"cancelled"};if(s.render_hint==="external_redirect"||s.redirect_url)return _t.redirectExternally(s);const e=window.G7Core;if(!e?.dispatch)return console.error("[IdentityGuardInterceptor] defaultLauncher: G7Core 가 초기화되지 않아 본인인증 흐름을 시작할 수 없습니다."),{status:"failed",failureCode:"G7_NOT_READY"};try{await e.dispatch({handler:"toast",params:{message:"본인 확인이 필요합니다.",variant:"warning"}})}catch{}const n=window.location.href,a={return_url:n,payload:s,stashed_at:Date.now()};try{window.sessionStorage?.setItem(Qd,JSON.stringify(a))}catch{}const i=`/identity/challenge?return=${encodeURIComponent(n)}`;try{await e.dispatch({handler:"navigate",params:{path:i}})}catch(l){ac.warn("navigate 실패 — window.location 으로 폴백",l),window.location.href=i}return new Promise(()=>{})},YC=pt("ApiClient");function Zd(){return typeof window<"u"&&window.__G7_DEVTOOLS__?window.__G7_DEVTOOLS__:null}class XC{constructor(e={}){$(this,"client");$(this,"config");$(this,"TOKEN_KEY","auth_token");this.config={baseURL:e.baseURL||"/api",timeout:e.timeout||3e4,onTokenExpired:e.onTokenExpired,onUnauthorized:e.onUnauthorized,onError:e.onError},this.client=Xt.create({baseURL:this.config.baseURL,timeout:this.config.timeout,headers:{"Content-Type":"application/json",Accept:"application/json"},paramsSerializer:{serialize:n=>{const a=[];for(const[i,l]of Object.entries(n))if(l!=null)if(Array.isArray(l)){const c=i.endsWith("[]")?i:`${i}[]`;for(const d of l)a.push(`${encodeURIComponent(c)}=${encodeURIComponent(String(d))}`)}else a.push(`${encodeURIComponent(i)}=${encodeURIComponent(String(l))}`);return a.join("&")}}}),this.setupInterceptors()}setToken(e){typeof window<"u"&&localStorage.setItem(this.TOKEN_KEY,e)}getToken(){return typeof window<"u"?localStorage.getItem(this.TOKEN_KEY):null}removeToken(){typeof window<"u"&&localStorage.removeItem(this.TOKEN_KEY)}setupInterceptors(){this.client.interceptors.request.use(e=>{e.url?.startsWith("/api")&&e.baseURL==="/api"&&(e.baseURL="");const n=this.getToken();if(n&&e.headers&&!this.isCrossOriginRequest(e.url)&&(e.headers.Authorization=`Bearer ${n}`),typeof window<"u"&&e.headers){const i=localStorage.getItem("g7_locale");i&&(e.headers["Accept-Language"]=i)}const a=Zd();if(a?.isEnabled()){const i=this.buildFullUrl(e),l=(e.method||"GET").toUpperCase(),c=a.trackRequest(i,l,{requestBody:e.data});e._devToolsRequestId=c}return e},e=>Promise.reject(e)),this.client.interceptors.response.use(e=>{const n=e.config,a=n._devToolsRequestId;if(a){const i=Zd();i?.isEnabled()&&i.completeRequest(a,e.status,e.data),n._devToolsRequestId=null}return e},async e=>{const n=e.config,a=n?.url||"",l=["/auth/","/layouts/"].some(c=>a.includes(c));if(e.response?.status===401&&!n?._retry&&!l){if(n._retry=!0,await wr.getInstance().refreshToken()){const f=this.getToken();return f&&(n.headers.Authorization=`Bearer ${f}`),n._devToolsRequestId=null,this.client(n)}return this.completeDevToolsRequest(n,e),this.removeToken(),this.config.onUnauthorized&&this.config.onUnauthorized(),Promise.reject(e)}if(e.response?.status===401&&l)return this.completeDevToolsRequest(n,e),Promise.reject(e);if(_t.isIdentityRequired(e.response?.status,e.response?.data)){this.completeDevToolsRequest(n,e);const c={},d=n?.headers??{};for(const[S,v]of Object.entries(d))typeof v=="string"&&(c[S]=v);let f;n?.data!==void 0&&n?.data!==null&&(f=typeof n.data=="string"?n.data:JSON.stringify(n.data),c["Content-Type"]=c["Content-Type"]??"application/json");const h=n?.identity_target,m=await _t.handle(e.response.data,{headers:c,body:f,credentials:"same-origin"},h);if(!m)return Promise.reject(e);let y=null;try{y=await m.json()}catch{y=null}return m.ok?{...e.response,status:m.status,data:y}:Promise.reject(Object.assign(new Error("replay failed"),{response:{status:m.status,data:y}}))}return e.response?.status===403?(this.completeDevToolsRequest(n,e),this.callOnError(e),Promise.reject(e)):(this.completeDevToolsRequest(n,e),e.response&&this.callOnError(e),Promise.reject(e))})}async get(e,n){return(await this.client.get(e,n)).data}async post(e,n,a){return(await this.client.post(e,n,a)).data}async put(e,n,a){return(await this.client.put(e,n,a)).data}async patch(e,n,a){return(await this.client.patch(e,n,a)).data}async delete(e,n){return(await this.client.delete(e,n)).data}getInstance(){return this.client}setOnUnauthorized(e){this.config.onUnauthorized=e}setOnError(e){this.config.onError=e}completeDevToolsRequest(e,n){if(!e?._devToolsRequestId)return;const a=Zd();if(!a?.isEnabled())return;const i=e._devToolsRequestId;e._devToolsRequestId=null,n.response?a.completeRequest(i,n.response.status,n.response.data):n.request?a.failRequest(i,n.message||"Network error"):a.failRequest(i,n.message||"Request error")}isCrossOriginRequest(e){if(!e||typeof window>"u"||!window.location||!/^(https?:)?\/\//i.test(e))return!1;try{return new URL(e,window.location.href).origin!==window.location.origin}catch{return!1}}buildFullUrl(e){let n=e.url||"";if(e.baseURL&&!n.startsWith("http")&&(n=`${e.baseURL}${n.startsWith("/")?"":"/"}${n}`),e.params&&typeof e.params=="object"){const a=e.params,i=[];for(const[l,c]of Object.entries(a))if(c!=null)if(Array.isArray(c)){const d=l.endsWith("[]")?l:`${l}[]`;for(const f of c)i.push(`${encodeURIComponent(d)}=${encodeURIComponent(String(f))}`)}else i.push(`${encodeURIComponent(l)}=${encodeURIComponent(String(c))}`);i.length>0&&(n+=(n.includes("?")?"&":"?")+i.join("&"))}return n}callOnError(e){if(!this.config.onError)return;const n={status:e.response?.status||0,message:e.response?.data?.message||e.message||"Unknown error",data:e.response?.data,statusText:e.response?.statusText};try{this.config.onError(n)}catch(a){YC.error("Error in onError handler:",a)}}}let ef=null;function zr(){return ef||(ef=new XC),ef}const So=pt("AuthManager");function fs(s,e,n,a){try{window.G7Core?.devTools?.trackAuthEvent?.(s,e,n,a)}catch{}}const ic={admin:{type:"admin",loginPath:"/admin/login",defaultPath:"/admin",userEndpoint:"/admin/auth/user",loginEndpoint:"/auth/admin/login",logoutEndpoint:"/admin/auth/logout",refreshEndpoint:"/admin/auth/refresh"},user:{type:"user",loginPath:"/login",defaultPath:"/",userEndpoint:"/auth/user",loginEndpoint:"/auth/login",logoutEndpoint:"/auth/logout",refreshEndpoint:"/auth/refresh"}},kr=class kr{constructor(){$(this,"state");$(this,"config");$(this,"isRefreshing",!1);$(this,"refreshPromise",null);$(this,"eventHandlers",new Map);this.state={isAuthenticated:!1,user:null,type:null},this.config=new Map,this.config.set("admin",ic.admin),this.config.set("user",ic.user)}static getInstance(){return kr.instance||(kr.instance=new kr),kr.instance}on(e,n){this.eventHandlers.has(e)||this.eventHandlers.set(e,[]),this.eventHandlers.get(e).push(n)}emit(e,...n){const a=this.eventHandlers.get(e);a&&a.forEach(i=>i(...n))}isAuthenticated(){return this.state.isAuthenticated}getUser(){return this.state.user}getAuthType(){return this.state.type}async checkAuth(e){const n=zr();if(!n.getToken())return this.clearState(),!1;const i=this.config.get(e);if(!i)return So.error(`Unknown auth type: ${e}`),!1;try{const l=await n.get(i.userEndpoint);return l.success&&l.data?(this.state={isAuthenticated:!0,user:l.data,type:e},this.emit("authStateChange",this.state),!0):(this.clearState(),!1)}catch(l){return l.response?.status===401&&await this.refreshToken()?this.checkAuth(e):(this.clearState(),!1)}}async preloadAuth(e){try{return await this.checkAuth(e)}catch(n){return So.warn(`Preload auth failed for type ${e}:`,n),!1}}async login(e,n,a){const i=zr();if(!this.config.get(e))throw new Error(`Unknown auth type: ${e}`);const c=e==="admin"?ic.admin.loginEndpoint:ic.user.loginEndpoint;try{const d=a?.headers?{headers:a.headers}:void 0,f=await i.post(c,n,d);if(f.success&&f.data){i.setToken(f.data.token);const h=f.data.user.language,m=localStorage.getItem(kr.LOCALE_STORAGE_KEY),y=h&&h!==m;if(h)try{localStorage.setItem(kr.LOCALE_STORAGE_KEY,h)}catch(S){So.warn("Failed to save user language to localStorage:",S)}return this.state={isAuthenticated:!0,user:f.data.user,type:e},this.emit("login",this.state),this.emit("authStateChange",this.state),fs("login",!0,void 0,{userId:f.data.user.uuid,email:f.data.user.email,type:e}),y&&window.__templateApp&&window.__templateApp.changeLocale(h),f.data.user}throw new Error("Login failed")}catch(d){this.clearState();const f=d.response?.data?.message,h=new Error(f||d.message||"Login failed");throw h.response=d.response,h.status=d.response?.status,fs("login",!1,h.message,{type:e,status:d.response?.status}),h}}async logout(){const e=zr(),n=this.state.type?this.config.get(this.state.type):null;try{n&&await e.post(n.logoutEndpoint)}catch(a){So.warn("Logout API call failed:",a)}finally{e.removeToken();const a={...this.state};if(this.clearState(),this.emit("logout",a),this.emit("authStateChange",this.state),fs("logout",!0,void 0,{previousType:a.type}),n&&a.type){const i=window.location.pathname+window.location.search;window.location.href=this.getLoginRedirectUrl(a.type,i)}}}async refreshToken(){if(this.isRefreshing&&this.refreshPromise)return this.refreshPromise;this.isRefreshing=!0,this.refreshPromise=this.doRefreshToken();try{return await this.refreshPromise}finally{this.isRefreshing=!1,this.refreshPromise=null}}async doRefreshToken(){const e=this.state.type;if(!e)return!1;const n=this.config.get(e);if(!n)return!1;const a=zr();try{const i=await a.post(n.refreshEndpoint);return i.success&&i.data?.token?(a.setToken(i.data.token),this.emit("tokenRefreshed"),fs("token-refresh",!0,void 0,{type:e}),!0):(fs("token-refresh",!1,"No token in response",{type:e}),!1)}catch(i){return So.error("Token refresh failed:",i),fs("token-refresh",!1,i instanceof Error?i.message:"Unknown error",{type:e}),!1}}getLoginRedirectUrl(e,n,a){const i=this.config.get(e);if(!i)return"/login";const l=encodeURIComponent(n);let c=`${i.loginPath}?redirect=${l}`;return a&&(c+=`&reason=${encodeURIComponent(a)}`),c}updateConfig(e,n){if(n.loginPath!==void 0){const i=n.loginPath;if(!i.startsWith("/")||i.startsWith("//"))throw new Error(`AuthManager.updateConfig: loginPath must be a same-origin path starting with '/' (got: ${i})`)}const a=this.config.get(e);a&&this.config.set(e,{...a,...n})}getRedirectUrl(e){const a=this.config.get(e)?.defaultPath||"/",l=new URLSearchParams(window.location.search).get("redirect");if(l)try{const c=decodeURIComponent(l);if(c.startsWith("/"))return c}catch{}return a}getConfig(e){return this.config.get(e)}clearState(){this.state={isAuthenticated:!1,user:null,type:null}}static resetInstance(){kr.instance=null}};$(kr,"instance"),$(kr,"LOCALE_STORAGE_KEY","g7_locale");let wr=kr;const Nm={401:{handler:"navigate",params:{path:"{{auth.loginPath}}"}},403:{handler:"toast",params:{type:"error",message:"{{error.message}}"}},404:{handler:"toast",params:{type:"error",message:"{{error.message}}"}},422:{handler:"toast",params:{type:"error",message:"{{error.message}}"}},default:{handler:"toast",params:{type:"error",message:"{{error.message}}"}}},ea={findHandler(s,e){if(s){if(s[e])return s[e];if(s[String(e)])return s[String(e)];if(s.default)return s.default}},normalizeOnError(s){return s?Array.isArray(s)?s:[s]:[]},injectErrorCode(s,e,n){if(s.handler!=="showErrorPage"||s.params?.errorCode!==void 0)return s;const a=typeof e=="string"?parseInt(e,10):e,i=isNaN(a)?n:a;return i===void 0?s:{...s,params:{...s.params,errorCode:i}}}},Cr=pt("ErrorHandlingResolver"),Na=class Na{constructor(){$(this,"templateErrorHandling",null);$(this,"layoutErrorHandling",null);$(this,"executeAction",null)}static getInstance(){return Na.instance||(Na.instance=new Na),Na.instance}static resetInstance(){Na.instance=null}setTemplateConfig(e){this.templateErrorHandling=e,Cr.log("Template config set:",e)}setLayoutConfig(e){this.layoutErrorHandling=e,Cr.log("Layout config set:",e)}setActionExecutor(e){this.executeAction=e}resolve(e,n={}){const{errorHandling:a,onError:i}=n;Cr.log("Resolving error:",e,{hasActionErrorHandling:!!a,hasActionOnError:!!i,hasLayoutConfig:!!this.layoutErrorHandling,hasTemplateConfig:!!this.templateErrorHandling});let l=ea.findHandler(a,e);if(l){const c=this.getMatchedKey(a,e);return{handler:ea.injectErrorCode(l,c,e),level:"action",matchedKey:c}}if(i){const c=ea.normalizeOnError(i);if(c.length>0)return{handler:c.length===1?c[0]:{handler:"sequence",actions:c},level:"action",matchedKey:"onError"}}if(l=ea.findHandler(this.layoutErrorHandling||void 0,e),l){const c=this.getMatchedKey(this.layoutErrorHandling,e);return{handler:ea.injectErrorCode(l,c,e),level:"layout",matchedKey:c}}if(l=ea.findHandler(this.templateErrorHandling||void 0,e),l){const c=this.getMatchedKey(this.templateErrorHandling,e);return{handler:ea.injectErrorCode(l,c,e),level:"template",matchedKey:c}}if(l=ea.findHandler(Nm,e),l){const c=this.getMatchedKey(Nm,e);return{handler:ea.injectErrorCode(l,c,e),level:"system",matchedKey:c}}return{handler:null,level:null,matchedKey:null}}async execute(e,n){if(!this.executeAction){Cr.error("Action executor is not set");return}Cr.log("Executing handler:",e.handler,{errorContext:n});try{return await this.executeAction(e,{error:n})}catch(a){throw Cr.error("Failed to execute handler:",a),a}}async resolveAndExecute(e,n,a={}){const i=this.resolve(e,a);if(Cr.log("Resolve result:",{errorCode:e,handler:i.handler?.handler,level:i.level,matchedKey:i.matchedKey}),!i.handler)return Cr.warn("No handler found for error:",e),{handled:!1};try{return{handled:!0,result:await this.execute(i.handler,n)}}catch(l){return Cr.error("Handler execution failed:",l),{handled:!1}}}getMatchedKey(e,n){return e[n]?n:e[String(n)]?String(n):"default"}clearLayoutConfig(){this.layoutErrorHandling=null,Cr.log("Layout config cleared")}clearAllConfig(){this.templateErrorHandling=null,this.layoutErrorHandling=null,Cr.log("All config cleared")}getConfigStatus(){return{hasTemplate:this.templateErrorHandling!==null,hasLayout:this.layoutErrorHandling!==null,hasExecutor:this.executeAction!==null}}};$(Na,"instance",null);let tf=Na;function Er(){return tf.getInstance()}var nf={exports:{}},wo={};var Im;function JC(){if(Im)return wo;Im=1;var s=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function n(a,i,l){var c=null;if(l!==void 0&&(c=""+l),i.key!==void 0&&(c=""+i.key),"key"in i){l={};for(var d in i)d!=="key"&&(l[d]=i[d])}else l=i;return i=l.ref,{$$typeof:s,type:a,key:c,ref:i!==void 0?i:null,props:l}}return wo.Fragment=e,wo.jsx=n,wo.jsxs=n,wo}var jm;function QC(){return jm||(jm=1,nf.exports=JC()),nf.exports}var gt=QC();const ZC=Qr({__proto__:null,default:Zr(gt)},[gt]),rf=pt("ParentContextProvider"),Hm=j.createContext(null);let sc=null;function af(){sc?(rf.log("[triggerModalParentUpdate] 모달 부모 컨텍스트 업데이트 트리거"),sc()):rf.warn("[triggerModalParentUpdate] Provider가 아직 마운트되지 않음")}const zm=({children:s})=>{const[e,n]=j.useState(0),a=j.useRef(!0),i=j.useCallback(()=>{const c=window.__g7LayoutContextStack||[];return c[c.length-1]?.dataContext},[]);j.useEffect(()=>(a.current=!0,sc=()=>{a.current&&(n(c=>c+1),rf.log("[ParentContextProvider] 버전 업데이트됨"))},()=>{a.current=!1,sc=null}),[]);const l={version:e,getParentDataContext:i};return gt.jsx(Hm.Provider,{value:l,children:s})};function eE(){return j.useContext(Hm)}const H=pt("ActionDispatcher");function tE(s,e,n,a){return n||(vg(s)||md(s)?"$t:core.errors.network_request_failed":a||`Failed to execute action: ${e}`)}const Um=new Set(["navigate","navigateBack","navigateForward","replaceUrl","refresh","logout"]),nE=new Set(["redirect"]);function Kn(){try{return window.G7Core?.devTools}catch{return}}class qt extends Error{constructor(n,a,i){super(n);$(this,"action");$(this,"originalError");$(this,"unknownHandler",!1);this.action=a,this.originalError=i,this.name="ActionError"}}const Pm={click:"onClick",change:"onChange",input:"onInput",submit:"onSubmit",focus:"onFocus",blur:"onBlur",keydown:"onKeyDown",keyup:"onKeyUp",keypress:"onKeyPress",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",scroll:"onScroll",dragstart:"onDragStart",drag:"onDrag",dragend:"onDragEnd",dragenter:"onDragEnter",dragover:"onDragOver",dragleave:"onDragLeave",drop:"onDrop"},ws=class ws{constructor(e={},n,a){$(this,"bindingEngine");$(this,"translationEngine");$(this,"translationContext");$(this,"customHandlers",new Map);$(this,"defaultContext");$(this,"globalStateUpdater");$(this,"errorHandlingSetup",!1);$(this,"debounceTimers",new Map);$(this,"pendingDebounceFlushers",new Map);$(this,"debounceAccumulatedValues",new Map);$(this,"globalHeaders",[]);$(this,"namedActions",{});$(this,"previewMode",!1);$(this,"intervals",new Map);this.bindingEngine=new On,this.translationEngine=n,this.translationContext=a,this.defaultContext=e,this.registerDefaultHandlers(),this.setupErrorHandling()}setGlobalHeaders(e){this.globalHeaders=e||[]}setNamedActions(e){this.namedActions=e||{};const n=Kn();n?.isEnabled?.()&&n.setNamedActionDefinitions?.(this.namedActions),H.log("[setNamedActions] registered:",Object.keys(this.namedActions))}getNamedActions(){return this.namedActions}setPreviewMode(e){this.previewMode=e,H.log("Preview mode:",e?"enabled":"disabled")}isPreviewMode(){return this.previewMode}static getPreviewSuppressedHandlers(){return Um}static getPreviewSuppressedLayoutFeatures(){return nE}resolveActionRef(e){if(!e.actionRef)return e;const n=this.namedActions[e.actionRef];if(!n)return H.warn(`[resolveActionRef] named action not found: "${e.actionRef}"`),e;const a=Kn();a?.isEnabled?.()&&a.trackNamedActionRef?.({actionRefName:e.actionRef,resolvedHandler:n.handler,timestamp:Date.now()});const{actionRef:i,type:l,key:c,event:d,...f}=e,h={...n,...Object.fromEntries(Object.entries(f).filter(([,m])=>m!==void 0)),type:l??n.type};return c!==void 0&&(h.key=c),d!==void 0&&(h.event=d),h}matchesPattern(e,n){if(n==="*")return!0;const a=n.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${a}$`).test(e)}getMatchingGlobalHeaders(e,n){const a={};for(const i of this.globalHeaders)this.matchesPattern(e,i.pattern)&&Object.entries(i.headers).forEach(([l,c])=>{const d=ss(c,n,{skipCache:!0});d!=null&&d!==""&&(a[l]=String(d))});return a}setupErrorHandling(){if(this.errorHandlingSetup)return;Er().setActionExecutor(async(n,a)=>{const i={type:"click",handler:n.handler,target:n.target,params:n.params,actions:n.actions},l={data:{...this.defaultContext.data,error:a.error}};return await this.dispatchAction(i,l)}),this.errorHandlingSetup=!0}registerDefaultHandlers(){this.registerHandler("refetchDataSource",async(n,a)=>{const i=n.params?.dataSourceId,l=n.params?.sync;if(!i){H.warn("refetchDataSource: dataSourceId is required");return}if(typeof window<"u"&&window.G7Core?.dataSource?.refetch){const c=window.G7Core?.state?.get?.()||{},d={...a.state?._global,...c},f=window.G7Core?.state?.getLocal?.()||{},h=a.data?._local||a.state||{},m={...f,...h},y=a.isolatedContext?.state;H.log("[refetchDataSource] localStateOverride:",m),await window.G7Core.dataSource.refetch(i,{...l?{sync:!0}:{},...d?{globalStateOverride:d}:{},...m?{localStateOverride:m}:{},...y?{isolatedStateOverride:y}:{}})}else H.warn("refetchDataSource: G7Core.dataSource.refetch is not available")}),this.registerHandler("appendDataSource",async(n,a)=>{const{dataSourceId:i,dataPath:l,newData:c}=n.params||{};if(!i){H.warn("appendDataSource: dataSourceId is required");return}if(c===void 0){H.warn("appendDataSource: newData is required");return}if(typeof window<"u"&&window.G7Core?.dataSource?.updateData){if(!Array.isArray(c)){H.warn("appendDataSource: newData must be an array, got:",typeof c,c);return}await window.G7Core.dataSource.updateData(i,l||null,c,"append")}else H.warn("appendDataSource: G7Core.dataSource.updateData is not available")}),this.registerHandler("updateDataSource",async(n,a)=>{const{dataSourceId:i,data:l,merge:c=!1}=n.params||{};if(!i){H.warn("updateDataSource: dataSourceId is required");return}if(l===void 0){H.warn("updateDataSource: data is required");return}typeof window<"u"&&window.G7Core?.dataSource?.set?(H.log(`[updateDataSource] Updating dataSource '${i}' with:`,l),window.G7Core.dataSource.set(i,l,{merge:c})):H.warn("updateDataSource: G7Core.dataSource.set is not available")}),this.registerHandler("scrollIntoView",async(n,a)=>{const{selector:i,behavior:l="smooth",block:c="nearest",inline:d="nearest",waitForElement:f=!1,timeout:h=2e3,delay:m=0,retryCount:y=0,retryInterval:S=50,scrollContainer:v}=n.params||{};if(!i){H.warn("scrollIntoView: selector is required");return}if(typeof window>"u"||typeof document>"u"){H.warn("scrollIntoView: window/document is not available");return}let _=null;if(f){if(_=await new Promise(A=>{const x=document.querySelector(i);if(x){A(x);return}const D=setTimeout(()=>{M.disconnect(),A(null)},h),M=new MutationObserver(()=>{const T=document.querySelector(i);T&&(clearTimeout(D),M.disconnect(),A(T))});M.observe(document.body,{childList:!0,subtree:!0})}),!_){H.warn(`scrollIntoView: element not found for selector "${i}" after ${h}ms timeout`);return}}else{m>0&&await new Promise(x=>setTimeout(x,m)),_=document.querySelector(i);let A=0;for(;!_&&Aa=>{e.forEach(i=>i(a))},e)}const oc=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function ds(s){const e=Object.prototype.toString.call(s);return e==="[object Window]"||e==="[object global]"}function sf(s){return"nodeType"in s}function Mn(s){var e,n;return s?ds(s)?s:sf(s)&&(e=(n=s.ownerDocument)==null?void 0:n.defaultView)!=null?e:window:window}function of(s){const{Document:e}=Mn(s);return s instanceof e}function So(s){return ds(s)?!1:s instanceof Mn(s).HTMLElement}function Bm(s){return s instanceof Mn(s).SVGElement}function fs(s){return s?ds(s)?s.document:sf(s)?of(s)?s:So(s)||Bm(s)?s.ownerDocument:document:document:document}const Ur=oc?N.useLayoutEffect:N.useEffect;function lf(s){const e=N.useRef(s);return Ur(()=>{e.current=s}),N.useCallback(function(){for(var n=arguments.length,a=new Array(n),i=0;ia=>{e.forEach(i=>i(a))},e)}const dc=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function ps(s){const e=Object.prototype.toString.call(s);return e==="[object Window]"||e==="[object global]"}function uf(s){return"nodeType"in s}function In(s){var e,n;return s?ps(s)?s:uf(s)&&(e=(n=s.ownerDocument)==null?void 0:n.defaultView)!=null?e:window:window}function df(s){const{Document:e}=In(s);return s instanceof e}function Eo(s){return ps(s)?!1:s instanceof In(s).HTMLElement}function Jm(s){return s instanceof In(s).SVGElement}function gs(s){return s?ps(s)?s.document:uf(s)?df(s)?s:Eo(s)||Jm(s)?s.ownerDocument:document:document:document}const Pr=dc?j.useLayoutEffect:j.useEffect;function ff(s){const e=j.useRef(s);return Pr(()=>{e.current=s}),j.useCallback(function(){for(var n=arguments.length,a=new Array(n),i=0;i[...e].filter(a=>a!=null),[...e])}const Er=Object.freeze({x:0,y:0});function Km(s,e){return Math.sqrt(Math.pow(s.x-e.x,2)+Math.pow(s.y-e.y,2))}function Wm(s,e){let{data:{value:n}}=s,{data:{value:a}}=e;return n-a}function _E(s,e){let{data:{value:n}}=s,{data:{value:a}}=e;return a-n}function Ym(s){let{left:e,top:n,height:a,width:i}=s;return[{x:e,y:n},{x:e+i,y:n},{x:e,y:n+a},{x:e+i,y:n+a}]}function Xm(s,e){if(!s||s.length===0)return null;const[n]=s;return n[e]}function Jm(s,e,n){return e===void 0&&(e=s.left),n===void 0&&(n=s.top),{x:e+s.width*.5,y:n+s.height*.5}}const AE=s=>{let{collisionRect:e,droppableRects:n,droppableContainers:a}=s;const i=Jm(e,e.left,e.top),l=[];for(const c of a){const{id:d}=c,f=n.get(d);if(f){const h=Km(Jm(f),i);l.push({id:d,data:{droppableContainer:c,value:h}})}}return l.sort(Wm)},xE=s=>{let{collisionRect:e,droppableRects:n,droppableContainers:a}=s;const i=Ym(e),l=[];for(const c of a){const{id:d}=c,f=n.get(d);if(f){const h=Ym(f),m=i.reduce((S,v,_)=>S+Km(h[_],v),0),b=Number((m/4).toFixed(4));l.push({id:d,data:{droppableContainer:c,value:b}})}}return l.sort(Wm)};function TE(s,e){const n=Math.max(e.top,s.top),a=Math.max(e.left,s.left),i=Math.min(e.left+e.width,s.left+s.width),l=Math.min(e.top+e.height,s.top+s.height),c=i-a,d=l-n;if(a{let{collisionRect:e,droppableRects:n,droppableContainers:a}=s;const i=[];for(const l of a){const{id:c}=l,d=n.get(c);if(d){const f=TE(d,e);f>0&&i.push({id:c,data:{droppableContainer:l,value:f}})}}return i.sort(_E)};function RE(s,e,n){return{...s,scaleX:e&&n?e.width/n.width:1,scaleY:e&&n?e.height/n.height:1}}function Qm(s,e){return s&&e?{x:s.left-e.left,y:s.top-e.top}:Er}function DE(s){return function(n){for(var a=arguments.length,i=new Array(a>1?a-1:0),l=1;l({...c,top:c.top+s*d.y,bottom:c.bottom+s*d.y,left:c.left+s*d.x,right:c.right+s*d.x}),{...n})}}const OE=DE(1);function LE(s){if(s.startsWith("matrix3d(")){const e=s.slice(9,-1).split(/, /);return{x:+e[12],y:+e[13],scaleX:+e[0],scaleY:+e[5]}}else if(s.startsWith("matrix(")){const e=s.slice(7,-1).split(/, /);return{x:+e[4],y:+e[5],scaleX:+e[0],scaleY:+e[3]}}return null}function ME(s,e,n){const a=LE(e);if(!a)return s;const{scaleX:i,scaleY:l,x:c,y:d}=a,f=s.left-c-(1-i)*parseFloat(n),h=s.top-d-(1-l)*parseFloat(n.slice(n.indexOf(" ")+1)),m=i?s.width/i:s.width,b=l?s.height/l:s.height;return{width:m,height:b,top:h,right:f+m,bottom:h+b,left:f}}const $E={ignoreTransform:!1};function ps(s,e){e===void 0&&(e=$E);let n=s.getBoundingClientRect();if(e.ignoreTransform){const{transform:h,transformOrigin:m}=Mn(s).getComputedStyle(s);h&&(n=ME(n,h,m))}const{top:a,left:i,width:l,height:c,bottom:d,right:f}=n;return{top:a,left:i,width:l,height:c,bottom:d,right:f}}function Zm(s){return ps(s,{ignoreTransform:!0})}function NE(s){const e=s.innerWidth,n=s.innerHeight;return{top:0,left:0,right:e,bottom:n,width:e,height:n}}function IE(s,e){return e===void 0&&(e=Mn(s).getComputedStyle(s)),e.position==="fixed"}function jE(s,e){e===void 0&&(e=Mn(s).getComputedStyle(s));const n=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some(i=>{const l=e[i];return typeof l=="string"?n.test(l):!1})}function uc(s,e){const n=[];function a(i){if(e!=null&&n.length>=e||!i)return n;if(of(i)&&i.scrollingElement!=null&&!n.includes(i.scrollingElement))return n.push(i.scrollingElement),n;if(!So(i)||Bm(i)||n.includes(i))return n;const l=Mn(s).getComputedStyle(i);return i!==s&&jE(i,l)&&n.push(i),IE(i,l)?n:a(i.parentNode)}return s?a(s):n}function ey(s){const[e]=uc(s,1);return e??null}function hf(s){return!oc||!s?null:ds(s)?s:sf(s)?of(s)||s===fs(s).scrollingElement?window:So(s)?s:null:null}function ty(s){return ds(s)?s.scrollX:s.scrollLeft}function ny(s){return ds(s)?s.scrollY:s.scrollTop}function pf(s){return{x:ty(s),y:ny(s)}}var dn;(function(s){s[s.Forward=1]="Forward",s[s.Backward=-1]="Backward"})(dn||(dn={}));function ry(s){return!oc||!s?!1:s===document.scrollingElement}function ay(s){const e={x:0,y:0},n=ry(s)?{height:window.innerHeight,width:window.innerWidth}:{height:s.clientHeight,width:s.clientWidth},a={x:s.scrollWidth-n.width,y:s.scrollHeight-n.height},i=s.scrollTop<=e.y,l=s.scrollLeft<=e.x,c=s.scrollTop>=a.y,d=s.scrollLeft>=a.x;return{isTop:i,isLeft:l,isBottom:c,isRight:d,maxScroll:a,minScroll:e}}const HE={x:.2,y:.2};function zE(s,e,n,a,i){let{top:l,left:c,right:d,bottom:f}=n;a===void 0&&(a=10),i===void 0&&(i=HE);const{isTop:h,isBottom:m,isLeft:b,isRight:S}=ay(s),v={x:0,y:0},_={x:0,y:0},A={height:e.height*i.y,width:e.width*i.x};return!h&&l<=e.top+A.height?(v.y=dn.Backward,_.y=a*Math.abs((e.top+A.height-l)/A.height)):!m&&f>=e.bottom-A.height&&(v.y=dn.Forward,_.y=a*Math.abs((e.bottom-A.height-f)/A.height)),!S&&d>=e.right-A.width?(v.x=dn.Forward,_.x=a*Math.abs((e.right-A.width-d)/A.width)):!b&&c<=e.left+A.width&&(v.x=dn.Backward,_.x=a*Math.abs((e.left+A.width-c)/A.width)),{direction:v,speed:_}}function UE(s){if(s===document.scrollingElement){const{innerWidth:l,innerHeight:c}=window;return{top:0,left:0,right:l,bottom:c,width:l,height:c}}const{top:e,left:n,right:a,bottom:i}=s.getBoundingClientRect();return{top:e,left:n,right:a,bottom:i,width:s.clientWidth,height:s.clientHeight}}function iy(s){return s.reduce((e,n)=>hs(e,pf(n)),Er)}function PE(s){return s.reduce((e,n)=>e+ty(n),0)}function BE(s){return s.reduce((e,n)=>e+ny(n),0)}function qE(s,e){if(e===void 0&&(e=ps),!s)return;const{top:n,left:a,bottom:i,right:l}=e(s);ey(s)&&(i<=0||l<=0||n>=window.innerHeight||a>=window.innerWidth)&&s.scrollIntoView({block:"center",inline:"center"})}const GE=[["x",["left","right"],PE],["y",["top","bottom"],BE]];class gf{constructor(e,n){this.rect=void 0,this.width=void 0,this.height=void 0,this.top=void 0,this.bottom=void 0,this.right=void 0,this.left=void 0;const a=uc(n),i=iy(a);this.rect={...e},this.width=e.width,this.height=e.height;for(const[l,c,d]of GE)for(const f of c)Object.defineProperty(this,f,{get:()=>{const h=d(a),m=i[l]-h;return this.rect[f]+m},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}}class xo{constructor(e){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach(n=>{var a;return(a=this.target)==null?void 0:a.removeEventListener(...n)})},this.target=e}add(e,n,a){var i;(i=this.target)==null||i.addEventListener(e,n,a),this.listeners.push([e,n,a])}}function VE(s){const{EventTarget:e}=Mn(s);return s instanceof e?s:fs(s)}function mf(s,e){const n=Math.abs(s.x),a=Math.abs(s.y);return typeof e=="number"?Math.sqrt(n**2+a**2)>e:"x"in e&&"y"in e?n>e.x&&a>e.y:"x"in e?n>e.x:"y"in e?a>e.y:!1}var ar;(function(s){s.Click="click",s.DragStart="dragstart",s.Keydown="keydown",s.ContextMenu="contextmenu",s.Resize="resize",s.SelectionChange="selectionchange",s.VisibilityChange="visibilitychange"})(ar||(ar={}));function sy(s){s.preventDefault()}function FE(s){s.stopPropagation()}var lt;(function(s){s.Space="Space",s.Down="ArrowDown",s.Right="ArrowRight",s.Left="ArrowLeft",s.Up="ArrowUp",s.Esc="Escape",s.Enter="Enter",s.Tab="Tab"})(lt||(lt={}));const oy={start:[lt.Space,lt.Enter],cancel:[lt.Esc],end:[lt.Space,lt.Enter,lt.Tab]},KE=(s,e)=>{let{currentCoordinates:n}=e;switch(s.code){case lt.Right:return{...n,x:n.x+25};case lt.Left:return{...n,x:n.x-25};case lt.Down:return{...n,y:n.y+25};case lt.Up:return{...n,y:n.y-25}}};class yf{constructor(e){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=e;const{event:{target:n}}=e;this.props=e,this.listeners=new xo(fs(n)),this.windowListeners=new xo(Mn(n)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(ar.Resize,this.handleCancel),this.windowListeners.add(ar.VisibilityChange,this.handleCancel),setTimeout(()=>this.listeners.add(ar.Keydown,this.handleKeyDown))}handleStart(){const{activeNode:e,onStart:n}=this.props,a=e.node.current;a&&qE(a),n(Er)}handleKeyDown(e){if(df(e)){const{active:n,context:a,options:i}=this.props,{keyboardCodes:l=oy,coordinateGetter:c=KE,scrollBehavior:d="smooth"}=i,{code:f}=e;if(l.end.includes(f)){this.handleEnd(e);return}if(l.cancel.includes(f)){this.handleCancel(e);return}const{collisionRect:h}=a.current,m=h?{x:h.left,y:h.top}:Er;this.referenceCoordinates||(this.referenceCoordinates=m);const b=c(e,{active:n,context:a.current,currentCoordinates:m});if(b){const S=_o(b,m),v={x:0,y:0},{scrollableAncestors:_}=a.current;for(const A of _){const x=e.code,{isTop:L,isRight:M,isLeft:k,isBottom:O,maxScroll:B,minScroll:G}=ay(A),P=UE(A),W={x:Math.min(x===lt.Right?P.right-P.width/2:P.right,Math.max(x===lt.Right?P.left:P.left+P.width/2,b.x)),y:Math.min(x===lt.Down?P.bottom-P.height/2:P.bottom,Math.max(x===lt.Down?P.top:P.top+P.height/2,b.y))},pe=x===lt.Right&&!M||x===lt.Left&&!k,Se=x===lt.Down&&!O||x===lt.Up&&!L;if(pe&&W.x!==b.x){const we=A.scrollLeft+S.x,Ue=x===lt.Right&&we<=B.x||x===lt.Left&&we>=G.x;if(Ue&&!S.y){A.scrollTo({left:we,behavior:d});return}Ue?v.x=A.scrollLeft-we:v.x=x===lt.Right?A.scrollLeft-B.x:A.scrollLeft-G.x,v.x&&A.scrollBy({left:-v.x,behavior:d});break}else if(Se&&W.y!==b.y){const we=A.scrollTop+S.y,Ue=x===lt.Down&&we<=B.y||x===lt.Up&&we>=G.y;if(Ue&&!S.x){A.scrollTo({top:we,behavior:d});return}Ue?v.y=A.scrollTop-we:v.y=x===lt.Down?A.scrollTop-B.y:A.scrollTop-G.y,v.y&&A.scrollBy({top:-v.y,behavior:d});break}}this.handleMove(e,hs(_o(b,this.referenceCoordinates),v))}}}handleMove(e,n){const{onMove:a}=this.props;e.preventDefault(),a(n)}handleEnd(e){const{onEnd:n}=this.props;e.preventDefault(),this.detach(),n()}handleCancel(e){const{onCancel:n}=this.props;e.preventDefault(),this.detach(),n()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}yf.activators=[{eventName:"onKeyDown",handler:(s,e,n)=>{let{keyboardCodes:a=oy,onActivation:i}=e,{active:l}=n;const{code:c}=s.nativeEvent;if(a.start.includes(c)){const d=l.activatorNode.current;return d&&s.target!==d?!1:(s.preventDefault(),i?.({event:s.nativeEvent}),!0)}return!1}}];function ly(s){return!!(s&&"distance"in s)}function cy(s){return!!(s&&"delay"in s)}class bf{constructor(e,n,a){var i;a===void 0&&(a=VE(e.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=e,this.events=n;const{event:l}=e,{target:c}=l;this.props=e,this.events=n,this.document=fs(c),this.documentListeners=new xo(this.document),this.listeners=new xo(a),this.windowListeners=new xo(Mn(c)),this.initialCoordinates=(i=ff(l))!=null?i:Er,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){const{events:e,props:{options:{activationConstraint:n,bypassActivationConstraint:a}}}=this;if(this.listeners.add(e.move.name,this.handleMove,{passive:!1}),this.listeners.add(e.end.name,this.handleEnd),e.cancel&&this.listeners.add(e.cancel.name,this.handleCancel),this.windowListeners.add(ar.Resize,this.handleCancel),this.windowListeners.add(ar.DragStart,sy),this.windowListeners.add(ar.VisibilityChange,this.handleCancel),this.windowListeners.add(ar.ContextMenu,sy),this.documentListeners.add(ar.Keydown,this.handleKeydown),n){if(a!=null&&a({event:this.props.event,activeNode:this.props.activeNode,options:this.props.options}))return this.handleStart();if(cy(n)){this.timeoutId=setTimeout(this.handleStart,n.delay),this.handlePending(n);return}if(ly(n)){this.handlePending(n);return}}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handlePending(e,n){const{active:a,onPending:i}=this.props;i(a,e,this.initialCoordinates,n)}handleStart(){const{initialCoordinates:e}=this,{onStart:n}=this.props;e&&(this.activated=!0,this.documentListeners.add(ar.Click,FE,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(ar.SelectionChange,this.removeTextSelection),n(e))}handleMove(e){var n;const{activated:a,initialCoordinates:i,props:l}=this,{onMove:c,options:{activationConstraint:d}}=l;if(!i)return;const f=(n=ff(e))!=null?n:Er,h=_o(i,f);if(!a&&d){if(ly(d)){if(d.tolerance!=null&&mf(h,d.tolerance))return this.handleCancel();if(mf(h,d.distance))return this.handleStart()}if(cy(d)&&mf(h,d.tolerance))return this.handleCancel();this.handlePending(d,h);return}e.cancelable&&e.preventDefault(),c(f)}handleEnd(){const{onAbort:e,onEnd:n}=this.props;this.detach(),this.activated||e(this.props.active),n()}handleCancel(){const{onAbort:e,onCancel:n}=this.props;this.detach(),this.activated||e(this.props.active),n()}handleKeydown(e){e.code===lt.Esc&&this.handleCancel()}removeTextSelection(){var e;(e=this.document.getSelection())==null||e.removeAllRanges()}}const WE={cancel:{name:"pointercancel"},move:{name:"pointermove"},end:{name:"pointerup"}};class vf extends bf{constructor(e){const{event:n}=e,a=fs(n.target);super(e,WE,a)}}vf.activators=[{eventName:"onPointerDown",handler:(s,e)=>{let{nativeEvent:n}=s,{onActivation:a}=e;return!n.isPrimary||n.button!==0?!1:(a?.({event:n}),!0)}}];const YE={move:{name:"mousemove"},end:{name:"mouseup"}};var Sf;(function(s){s[s.RightClick=2]="RightClick"})(Sf||(Sf={}));class XE extends bf{constructor(e){super(e,YE,fs(e.event.target))}}XE.activators=[{eventName:"onMouseDown",handler:(s,e)=>{let{nativeEvent:n}=s,{onActivation:a}=e;return n.button===Sf.RightClick?!1:(a?.({event:n}),!0)}}];const wf={cancel:{name:"touchcancel"},move:{name:"touchmove"},end:{name:"touchend"}};class JE extends bf{constructor(e){super(e,wf)}static setup(){return window.addEventListener(wf.move.name,e,{capture:!1,passive:!1}),function(){window.removeEventListener(wf.move.name,e)};function e(){}}}JE.activators=[{eventName:"onTouchStart",handler:(s,e)=>{let{nativeEvent:n}=s,{onActivation:a}=e;const{touches:i}=n;return i.length>1?!1:(a?.({event:n}),!0)}}];var To;(function(s){s[s.Pointer=0]="Pointer",s[s.DraggableRect=1]="DraggableRect"})(To||(To={}));var dc;(function(s){s[s.TreeOrder=0]="TreeOrder",s[s.ReversedTreeOrder=1]="ReversedTreeOrder"})(dc||(dc={}));function QE(s){let{acceleration:e,activator:n=To.Pointer,canScroll:a,draggingRect:i,enabled:l,interval:c=5,order:d=dc.TreeOrder,pointerCoordinates:f,scrollableAncestors:h,scrollableAncestorRects:m,delta:b,threshold:S}=s;const v=e_({delta:b,disabled:!l}),[_,A]=uE(),x=N.useRef({x:0,y:0}),L=N.useRef({x:0,y:0}),M=N.useMemo(()=>{switch(n){case To.Pointer:return f?{top:f.y,bottom:f.y,left:f.x,right:f.x}:null;case To.DraggableRect:return i}},[n,i,f]),k=N.useRef(null),O=N.useCallback(()=>{const G=k.current;if(!G)return;const P=x.current.x*L.current.x,W=x.current.y*L.current.y;G.scrollBy(P,W)},[]),B=N.useMemo(()=>d===dc.TreeOrder?[...h].reverse():h,[d,h]);N.useEffect(()=>{if(!l||!h.length||!M){A();return}for(const G of B){if(a?.(G)===!1)continue;const P=h.indexOf(G),W=m[P];if(!W)continue;const{direction:pe,speed:Se}=zE(G,W,M,e,S);for(const we of["x","y"])v[we][pe[we]]||(Se[we]=0,pe[we]=0);if(Se.x>0||Se.y>0){A(),k.current=G,_(O,c),x.current=Se,L.current=pe;return}}x.current={x:0,y:0},L.current={x:0,y:0},A()},[e,O,a,A,l,c,JSON.stringify(M),JSON.stringify(v),_,h,B,m,JSON.stringify(S)])}const ZE={x:{[dn.Backward]:!1,[dn.Forward]:!1},y:{[dn.Backward]:!1,[dn.Forward]:!1}};function e_(s){let{delta:e,disabled:n}=s;const a=cf(e);return Co(i=>{if(n||!a||!i)return ZE;const l={x:Math.sign(e.x-a.x),y:Math.sign(e.y-a.y)};return{x:{[dn.Backward]:i.x[dn.Backward]||l.x===-1,[dn.Forward]:i.x[dn.Forward]||l.x===1},y:{[dn.Backward]:i.y[dn.Backward]||l.y===-1,[dn.Forward]:i.y[dn.Forward]||l.y===1}}},[n,e,a])}function t_(s,e){const n=e!=null?s.get(e):void 0,a=n?n.node.current:null;return Co(i=>{var l;return e==null?null:(l=a??i)!=null?l:null},[a,e])}function n_(s,e){return N.useMemo(()=>s.reduce((n,a)=>{const{sensor:i}=a,l=i.activators.map(c=>({eventName:c.eventName,handler:e(c.handler,a)}));return[...n,...l]},[]),[s,e])}var ko;(function(s){s[s.Always=0]="Always",s[s.BeforeDragging=1]="BeforeDragging",s[s.WhileDragging=2]="WhileDragging"})(ko||(ko={}));var Cf;(function(s){s.Optimized="optimized"})(Cf||(Cf={}));const uy=new Map;function r_(s,e){let{dragging:n,dependencies:a,config:i}=e;const[l,c]=N.useState(null),{frequency:d,measure:f,strategy:h}=i,m=N.useRef(s),b=x(),S=wo(b),v=N.useCallback(function(L){L===void 0&&(L=[]),!S.current&&c(M=>M===null?L:M.concat(L.filter(k=>!M.includes(k))))},[S]),_=N.useRef(null),A=Co(L=>{if(b&&!n)return uy;if(!L||L===uy||m.current!==s||l!=null){const M=new Map;for(let k of s){if(!k)continue;if(l&&l.length>0&&!l.includes(k.id)&&k.rect.current){M.set(k.id,k.rect.current);continue}const O=k.node.current,B=O?new gf(f(O),O):null;k.rect.current=B,B&&M.set(k.id,B)}return M}return L},[s,l,n,b,f]);return N.useEffect(()=>{m.current=s},[s]),N.useEffect(()=>{b||v()},[n,b]),N.useEffect(()=>{l&&l.length>0&&c(null)},[JSON.stringify(l)]),N.useEffect(()=>{b||typeof d!="number"||_.current!==null||(_.current=setTimeout(()=>{v(),_.current=null},d))},[d,b,v,...a]),{droppableRects:A,measureDroppableContainers:v,measuringScheduled:l!=null};function x(){switch(h){case ko.Always:return!1;case ko.BeforeDragging:return n;default:return!n}}}function dy(s,e){return Co(n=>s?n||(typeof e=="function"?e(s):s):null,[e,s])}function a_(s,e){return dy(s,e)}function i_(s){let{callback:e,disabled:n}=s;const a=lf(e),i=N.useMemo(()=>{if(n||typeof window>"u"||typeof window.MutationObserver>"u")return;const{MutationObserver:l}=window;return new l(a)},[a,n]);return N.useEffect(()=>()=>i?.disconnect(),[i]),i}function fc(s){let{callback:e,disabled:n}=s;const a=lf(e),i=N.useMemo(()=>{if(n||typeof window>"u"||typeof window.ResizeObserver>"u")return;const{ResizeObserver:l}=window;return new l(a)},[n]);return N.useEffect(()=>()=>i?.disconnect(),[i]),i}function s_(s){return new gf(ps(s),s)}function fy(s,e,n){e===void 0&&(e=s_);const[a,i]=N.useState(null);function l(){i(f=>{if(!s)return null;if(s.isConnected===!1){var h;return(h=f??n)!=null?h:null}const m=e(s);return JSON.stringify(f)===JSON.stringify(m)?f:m})}const c=i_({callback(f){if(s)for(const h of f){const{type:m,target:b}=h;if(m==="childList"&&b instanceof HTMLElement&&b.contains(s)){l();break}}}}),d=fc({callback:l});return Ur(()=>{l(),s?(d?.observe(s),c?.observe(document.body,{childList:!0,subtree:!0})):(d?.disconnect(),c?.disconnect())},[s]),a}function o_(s){const e=dy(s);return Qm(s,e)}const hy=[];function l_(s){const e=N.useRef(s),n=Co(a=>s?a&&a!==hy&&s&&e.current&&s.parentNode===e.current.parentNode?a:uc(s):hy,[s]);return N.useEffect(()=>{e.current=s},[s]),n}function c_(s){const[e,n]=N.useState(null),a=N.useRef(s),i=N.useCallback(l=>{const c=hf(l.target);c&&n(d=>d?(d.set(c,pf(c)),new Map(d)):null)},[]);return N.useEffect(()=>{const l=a.current;if(s!==l){c(l);const d=s.map(f=>{const h=hf(f);return h?(h.addEventListener("scroll",i,{passive:!0}),[h,pf(h)]):null}).filter(f=>f!=null);n(d.length?new Map(d):null),a.current=s}return()=>{c(s),c(l)};function c(d){d.forEach(f=>{const h=hf(f);h?.removeEventListener("scroll",i)})}},[i,s]),N.useMemo(()=>s.length?e?Array.from(e.values()).reduce((l,c)=>hs(l,c),Er):iy(s):Er,[s,e])}function py(s,e){e===void 0&&(e=[]);const n=N.useRef(null);return N.useEffect(()=>{n.current=null},e),N.useEffect(()=>{const a=s!==Er;a&&!n.current&&(n.current=s),!a&&n.current&&(n.current=null)},[s]),n.current?_o(s,n.current):Er}function u_(s){N.useEffect(()=>{if(!oc)return;const e=s.map(n=>{let{sensor:a}=n;return a.setup==null?void 0:a.setup()});return()=>{for(const n of e)n?.()}},s.map(e=>{let{sensor:n}=e;return n}))}function d_(s,e){return N.useMemo(()=>s.reduce((n,a)=>{let{eventName:i,handler:l}=a;return n[i]=c=>{l(c,e)},n},{}),[s,e])}function gy(s){return N.useMemo(()=>s?NE(s):null,[s])}const my=[];function f_(s,e){e===void 0&&(e=ps);const[n]=s,a=gy(n?Mn(n):null),[i,l]=N.useState(my);function c(){l(()=>s.length?s.map(f=>ry(f)?a:new gf(e(f),f)):my)}const d=fc({callback:c});return Ur(()=>{d?.disconnect(),c(),s.forEach(f=>d?.observe(f))},[s]),i}function h_(s){if(!s)return null;if(s.children.length>1)return s;const e=s.children[0];return So(e)?e:s}function p_(s){let{measure:e}=s;const[n,a]=N.useState(null),i=N.useCallback(h=>{for(const{target:m}of h)if(So(m)){a(b=>{const S=e(m);return b?{...b,width:S.width,height:S.height}:S});break}},[e]),l=fc({callback:i}),c=N.useCallback(h=>{const m=h_(h);l?.disconnect(),m&&l?.observe(m),a(m?e(m):null)},[e,l]),[d,f]=lc(c);return N.useMemo(()=>({nodeRef:d,rect:n,setRef:f}),[n,d,f])}const g_=[{sensor:vf,options:{}},{sensor:yf,options:{}}],m_={current:{}},hc={draggable:{measure:Zm},droppable:{measure:Zm,strategy:ko.WhileDragging,frequency:Cf.Optimized},dragOverlay:{measure:ps}};class Ro extends Map{get(e){var n;return e!=null&&(n=super.get(e))!=null?n:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter(e=>{let{disabled:n}=e;return!n})}getNodeFor(e){var n,a;return(n=(a=this.get(e))==null?void 0:a.node.current)!=null?n:void 0}}const y_={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new Ro,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:cc},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:hc,measureDroppableContainers:cc,windowRect:null,measuringScheduled:!1},b_={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:cc,draggableNodes:new Map,over:null,measureDroppableContainers:cc},pc=N.createContext(b_),yy=N.createContext(y_);function v_(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new Ro}}}function S_(s,e){switch(e.type){case nn.DragStart:return{...s,draggable:{...s.draggable,initialCoordinates:e.initialCoordinates,active:e.active}};case nn.DragMove:return s.draggable.active==null?s:{...s,draggable:{...s.draggable,translate:{x:e.coordinates.x-s.draggable.initialCoordinates.x,y:e.coordinates.y-s.draggable.initialCoordinates.y}}};case nn.DragEnd:case nn.DragCancel:return{...s,draggable:{...s.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case nn.RegisterDroppable:{const{element:n}=e,{id:a}=n,i=new Ro(s.droppable.containers);return i.set(a,n),{...s,droppable:{...s.droppable,containers:i}}}case nn.SetDroppableDisabled:{const{id:n,key:a,disabled:i}=e,l=s.droppable.containers.get(n);if(!l||a!==l.key)return s;const c=new Ro(s.droppable.containers);return c.set(n,{...l,disabled:i}),{...s,droppable:{...s.droppable,containers:c}}}case nn.UnregisterDroppable:{const{id:n,key:a}=e,i=s.droppable.containers.get(n);if(!i||a!==i.key)return s;const l=new Ro(s.droppable.containers);return l.delete(n),{...s,droppable:{...s.droppable,containers:l}}}default:return s}}function w_(s){let{disabled:e}=s;const{active:n,activatorEvent:a,draggableNodes:i}=N.useContext(pc),l=cf(a),c=cf(n?.id);return N.useEffect(()=>{if(!e&&!a&&l&&c!=null){if(!df(l)||document.activeElement===l.target)return;const d=i.get(c);if(!d)return;const{activatorNode:f,node:h}=d;if(!f.current&&!h.current)return;requestAnimationFrame(()=>{for(const m of[f.current,h.current]){if(!m)continue;const b=hE(m);if(b){b.focus();break}}})}},[a,e,i,c,l]),null}function C_(s,e){let{transform:n,...a}=e;return s!=null&&s.length?s.reduce((i,l)=>l({transform:i,...a}),n):n}function E_(s){return N.useMemo(()=>({draggable:{...hc.draggable,...s?.draggable},droppable:{...hc.droppable,...s?.droppable},dragOverlay:{...hc.dragOverlay,...s?.dragOverlay}}),[s?.draggable,s?.droppable,s?.dragOverlay])}function __(s){let{activeNode:e,measure:n,initialRect:a,config:i=!0}=s;const l=N.useRef(!1),{x:c,y:d}=typeof i=="boolean"?{x:i,y:i}:i;Ur(()=>{if(!c&&!d||!e){l.current=!1;return}if(l.current||!a)return;const h=e?.node.current;if(!h||h.isConnected===!1)return;const m=n(h),b=Qm(m,a);if(c||(b.x=0),d||(b.y=0),l.current=!0,Math.abs(b.x)>0||Math.abs(b.y)>0){const S=ey(h);S&&S.scrollBy({top:b.y,left:b.x})}},[e,c,d,a,n])}const by=N.createContext({...Er,scaleX:1,scaleY:1});var La;(function(s){s[s.Uninitialized=0]="Uninitialized",s[s.Initializing=1]="Initializing",s[s.Initialized=2]="Initialized"})(La||(La={}));const A_=N.memo(function(e){var n,a,i,l;let{id:c,accessibility:d,autoScroll:f=!0,children:h,sensors:m=g_,collisionDetection:b=kE,measuring:S,modifiers:v,..._}=e;const A=N.useReducer(S_,void 0,v_),[x,L]=A,[M,k]=vE(),[O,B]=N.useState(La.Uninitialized),G=O===La.Initialized,{draggable:{active:P,nodes:W,translate:pe},droppable:{containers:Se}}=x,we=P!=null?W.get(P):null,Ue=N.useRef({initial:null,translated:null}),Ve=N.useMemo(()=>{var he;return P!=null?{id:P,data:(he=we?.data)!=null?he:m_,rect:Ue}:null},[P,we]),qe=N.useRef(null),[wt,J]=N.useState(null),[fe,Le]=N.useState(null),Z=wo(_,Object.values(_)),ge=Eo("DndDescribedBy",c),H=N.useMemo(()=>Se.getEnabled(),[Se]),T=E_(S),{droppableRects:ce,measureDroppableContainers:de,measuringScheduled:ye}=r_(H,{dragging:G,dependencies:[pe.x,pe.y],config:T.droppable}),ie=t_(W,P),xe=N.useMemo(()=>fe?ff(fe):null,[fe]),_e=ve(),Te=a_(ie,T.draggable.measure);__({activeNode:P!=null?W.get(P):null,config:_e.layoutShiftCompensation,initialRect:Te,measure:T.draggable.measure});const $e=fy(ie,T.draggable.measure,Te),pt=fy(ie?ie.parentElement:null),Ct=N.useRef({activatorEvent:null,active:null,activeNode:ie,collisionRect:null,collisions:null,droppableRects:ce,draggableNodes:W,draggingNode:null,draggingNodeRect:null,droppableContainers:Se,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),Dt=Se.getNodeFor((n=Ct.current.over)==null?void 0:n.id),ht=p_({measure:T.dragOverlay.measure}),rn=(a=ht.nodeRef.current)!=null?a:ie,Kt=G?(i=ht.rect)!=null?i:$e:null,It=!!(ht.nodeRef.current&&ht.rect),qr=o_(It?null:$e),hn=gy(rn?Mn(rn):null),an=l_(G?Dt??ie:null),pn=f_(an),Kn=C_(v,{transform:{x:pe.x-qr.x,y:pe.y-qr.y,scaleX:1,scaleY:1},activatorEvent:fe,active:Ve,activeNodeRect:$e,containerNodeRect:pt,draggingNodeRect:Kt,over:Ct.current.over,overlayNodeRect:ht.rect,scrollableAncestors:an,scrollableAncestorRects:pn,windowRect:hn}),Gr=xe?hs(xe,pe):null,qt=c_(an),_i=py(qt),aa=py(qt,[$e]),gn=hs(Kn,_i),Rn=Kt?OE(Kt,Kn):null,nt=Ve&&Rn?b({active:Ve,collisionRect:Rn,droppableRects:ce,droppableContainers:H,pointerCoordinates:Gr}):null,Nn=Xm(nt,"id"),[mn,ia]=N.useState(null),or=It?Kn:hs(Kn,aa),sn=RE(or,(l=mn?.rect)!=null?l:null,$e),_n=N.useRef(null),on=N.useCallback((he,Ee)=>{let{sensor:Ae,options:Fe}=Ee;if(qe.current==null)return;const ke=W.get(qe.current);if(!ke)return;const Ne=he.nativeEvent,Re=new Ae({active:qe.current,activeNode:ke,event:Ne,options:Fe,context:Ct,onAbort(He){if(!W.get(He))return;const{onDragAbort:Ce}=Z.current,je={id:He};Ce?.(je),M({type:"onDragAbort",event:je})},onPending(He,Ge,Ce,je){if(!W.get(He))return;const{onDragPending:At}=Z.current,Mt={id:He,constraint:Ge,initialCoordinates:Ce,offset:je};At?.(Mt),M({type:"onDragPending",event:Mt})},onStart(He){const Ge=qe.current;if(Ge==null)return;const Ce=W.get(Ge);if(!Ce)return;const{onDragStart:je}=Z.current,tt={activatorEvent:Ne,active:{id:Ge,data:Ce.data,rect:Ue}};Oa.unstable_batchedUpdates(()=>{je?.(tt),B(La.Initializing),L({type:nn.DragStart,initialCoordinates:He,active:Ge}),M({type:"onDragStart",event:tt}),J(_n.current),Le(Ne)})},onMove(He){L({type:nn.DragMove,coordinates:He})},onEnd:et(nn.DragEnd),onCancel:et(nn.DragCancel)});_n.current=Re;function et(He){return async function(){const{active:Ce,collisions:je,over:tt,scrollAdjustedTranslate:At}=Ct.current;let Mt=null;if(Ce&&At){const{cancelDrop:Dn}=Z.current;Mt={activatorEvent:Ne,active:Ce,collisions:je,delta:At,over:tt},He===nn.DragEnd&&typeof Dn=="function"&&await Promise.resolve(Dn(Mt))&&(He=nn.DragCancel)}qe.current=null,Oa.unstable_batchedUpdates(()=>{L({type:He}),B(La.Uninitialized),ia(null),J(null),Le(null),_n.current=null;const Dn=He===nn.DragEnd?"onDragEnd":"onDragCancel";if(Mt){const jt=Z.current[Dn];jt?.(Mt),M({type:Dn,event:Mt})}})}}},[W]),V=N.useCallback((he,Ee)=>(Ae,Fe)=>{const ke=Ae.nativeEvent,Ne=W.get(Fe);if(qe.current!==null||!Ne||ke.dndKit||ke.defaultPrevented)return;const Re={active:Ne};he(Ae,Ee.options,Re)===!0&&(ke.dndKit={capturedBy:Ee.sensor},qe.current=Fe,on(Ae,Ee))},[W,on]),se=n_(m,V);u_(m),Ur(()=>{$e&&O===La.Initializing&&B(La.Initialized)},[$e,O]),N.useEffect(()=>{const{onDragMove:he}=Z.current,{active:Ee,activatorEvent:Ae,collisions:Fe,over:ke}=Ct.current;if(!Ee||!Ae)return;const Ne={active:Ee,activatorEvent:Ae,collisions:Fe,delta:{x:gn.x,y:gn.y},over:ke};Oa.unstable_batchedUpdates(()=>{he?.(Ne),M({type:"onDragMove",event:Ne})})},[gn.x,gn.y]),N.useEffect(()=>{const{active:he,activatorEvent:Ee,collisions:Ae,droppableContainers:Fe,scrollAdjustedTranslate:ke}=Ct.current;if(!he||qe.current==null||!Ee||!ke)return;const{onDragOver:Ne}=Z.current,Re=Fe.get(Nn),et=Re&&Re.rect.current?{id:Re.id,rect:Re.rect.current,data:Re.data,disabled:Re.disabled}:null,He={active:he,activatorEvent:Ee,collisions:Ae,delta:{x:ke.x,y:ke.y},over:et};Oa.unstable_batchedUpdates(()=>{ia(et),Ne?.(He),M({type:"onDragOver",event:He})})},[Nn]),Ur(()=>{Ct.current={activatorEvent:fe,active:Ve,activeNode:ie,collisionRect:Rn,collisions:nt,droppableRects:ce,draggableNodes:W,draggingNode:rn,draggingNodeRect:Kt,droppableContainers:Se,over:mn,scrollableAncestors:an,scrollAdjustedTranslate:gn},Ue.current={initial:Kt,translated:Rn}},[Ve,ie,nt,Rn,W,rn,Kt,ce,Se,mn,an,gn]),QE({..._e,delta:pe,draggingRect:Rn,pointerCoordinates:Gr,scrollableAncestors:an,scrollableAncestorRects:pn});const ue=N.useMemo(()=>({active:Ve,activeNode:ie,activeNodeRect:$e,activatorEvent:fe,collisions:nt,containerNodeRect:pt,dragOverlay:ht,draggableNodes:W,droppableContainers:Se,droppableRects:ce,over:mn,measureDroppableContainers:de,scrollableAncestors:an,scrollableAncestorRects:pn,measuringConfiguration:T,measuringScheduled:ye,windowRect:hn}),[Ve,ie,$e,fe,nt,pt,ht,W,Se,ce,mn,de,an,pn,T,ye,hn]),ee=N.useMemo(()=>({activatorEvent:fe,activators:se,active:Ve,activeNodeRect:$e,ariaDescribedById:{draggable:ge},dispatch:L,draggableNodes:W,over:mn,measureDroppableContainers:de}),[fe,se,Ve,$e,L,ge,W,mn,de]);return Ye.createElement(Vm.Provider,{value:k},Ye.createElement(pc.Provider,{value:ee},Ye.createElement(yy.Provider,{value:ue},Ye.createElement(by.Provider,{value:sn},h)),Ye.createElement(w_,{disabled:d?.restoreFocus===!1})),Ye.createElement(CE,{...d,hiddenTextDescribedById:ge}));function ve(){const he=wt?.autoScrollEnabled===!1,Ee=typeof f=="object"?f.enabled===!1:f===!1,Ae=G&&!he&&!Ee;return typeof f=="object"?{...f,enabled:Ae}:{enabled:Ae}}}),x_=N.createContext(null),vy="button",T_="Draggable";function k_(s){let{id:e,data:n,disabled:a=!1,attributes:i}=s;const l=Eo(T_),{activators:c,activatorEvent:d,active:f,activeNodeRect:h,ariaDescribedById:m,draggableNodes:b,over:S}=N.useContext(pc),{role:v=vy,roleDescription:_="draggable",tabIndex:A=0}=i??{},x=f?.id===e,L=N.useContext(x?by:x_),[M,k]=lc(),[O,B]=lc(),G=d_(c,e),P=wo(n);Ur(()=>(b.set(e,{id:e,key:l,node:M,activatorNode:O,data:P}),()=>{const pe=b.get(e);pe&&pe.key===l&&b.delete(e)}),[b,e]);const W=N.useMemo(()=>({role:v,tabIndex:A,"aria-disabled":a,"aria-pressed":x&&v===vy?!0:void 0,"aria-roledescription":_,"aria-describedby":m.draggable}),[a,v,A,x,_,m.draggable]);return{active:f,activatorEvent:d,activeNodeRect:h,attributes:W,isDragging:x,listeners:a?void 0:G,node:M,over:S,setNodeRef:k,setActivatorNodeRef:B,transform:L}}function R_(){return N.useContext(yy)}const D_="Droppable",O_={timeout:25};function L_(s){let{data:e,disabled:n=!1,id:a,resizeObserverConfig:i}=s;const l=Eo(D_),{active:c,dispatch:d,over:f,measureDroppableContainers:h}=N.useContext(pc),m=N.useRef({disabled:n}),b=N.useRef(!1),S=N.useRef(null),v=N.useRef(null),{disabled:_,updateMeasurementsFor:A,timeout:x}={...O_,...i},L=wo(A??a),M=N.useCallback(()=>{if(!b.current){b.current=!0;return}v.current!=null&&clearTimeout(v.current),v.current=setTimeout(()=>{h(Array.isArray(L.current)?L.current:[L.current]),v.current=null},x)},[x]),k=fc({callback:M,disabled:_||!c}),O=N.useCallback((W,pe)=>{k&&(pe&&(k.unobserve(pe),b.current=!1),W&&k.observe(W))},[k]),[B,G]=lc(O),P=wo(e);return N.useEffect(()=>{!k||!B.current||(k.disconnect(),b.current=!1,k.observe(B.current))},[B,k]),N.useEffect(()=>(d({type:nn.RegisterDroppable,element:{id:a,key:l,disabled:n,node:B,rect:S,data:P}}),()=>d({type:nn.UnregisterDroppable,key:l,id:a})),[a]),N.useEffect(()=>{n!==m.current.disabled&&(d({type:nn.SetDroppableDisabled,id:a,key:l,disabled:n}),m.current.disabled=n)},[a,l,n,d]),{active:c,rect:S,isOver:f?.id===a,node:B,over:f,setNodeRef:G}}function Ef(s,e,n){const a=s.slice();return a.splice(n<0?a.length+n:n,0,a.splice(e,1)[0]),a}function M_(s,e){return s.reduce((n,a,i)=>{const l=e.get(a);return l&&(n[i]=l),n},Array(s.length))}function gc(s){return s!==null&&s>=0}function $_(s,e){if(s===e)return!0;if(s.length!==e.length)return!1;for(let n=0;n[...e].filter(a=>a!=null),[...e])}const _r=Object.freeze({x:0,y:0});function ny(s,e){return Math.sqrt(Math.pow(s.x-e.x,2)+Math.pow(s.y-e.y,2))}function ry(s,e){let{data:{value:n}}=s,{data:{value:a}}=e;return n-a}function UE(s,e){let{data:{value:n}}=s,{data:{value:a}}=e;return a-n}function ay(s){let{left:e,top:n,height:a,width:i}=s;return[{x:e,y:n},{x:e+i,y:n},{x:e,y:n+a},{x:e+i,y:n+a}]}function iy(s,e){if(!s||s.length===0)return null;const[n]=s;return n[e]}function sy(s,e,n){return e===void 0&&(e=s.left),n===void 0&&(n=s.top),{x:e+s.width*.5,y:n+s.height*.5}}const PE=s=>{let{collisionRect:e,droppableRects:n,droppableContainers:a}=s;const i=sy(e,e.left,e.top),l=[];for(const c of a){const{id:d}=c,f=n.get(d);if(f){const h=ny(sy(f),i);l.push({id:d,data:{droppableContainer:c,value:h}})}}return l.sort(ry)},BE=s=>{let{collisionRect:e,droppableRects:n,droppableContainers:a}=s;const i=ay(e),l=[];for(const c of a){const{id:d}=c,f=n.get(d);if(f){const h=ay(f),m=i.reduce((S,v,_)=>S+ny(h[_],v),0),y=Number((m/4).toFixed(4));l.push({id:d,data:{droppableContainer:c,value:y}})}}return l.sort(ry)};function qE(s,e){const n=Math.max(e.top,s.top),a=Math.max(e.left,s.left),i=Math.min(e.left+e.width,s.left+s.width),l=Math.min(e.top+e.height,s.top+s.height),c=i-a,d=l-n;if(a{let{collisionRect:e,droppableRects:n,droppableContainers:a}=s;const i=[];for(const l of a){const{id:c}=l,d=n.get(c);if(d){const f=qE(d,e);f>0&&i.push({id:c,data:{droppableContainer:l,value:f}})}}return i.sort(UE)};function FE(s,e,n){return{...s,scaleX:e&&n?e.width/n.width:1,scaleY:e&&n?e.height/n.height:1}}function oy(s,e){return s&&e?{x:s.left-e.left,y:s.top-e.top}:_r}function VE(s){return function(n){for(var a=arguments.length,i=new Array(a>1?a-1:0),l=1;l({...c,top:c.top+s*d.y,bottom:c.bottom+s*d.y,left:c.left+s*d.x,right:c.right+s*d.x}),{...n})}}const KE=VE(1);function WE(s){if(s.startsWith("matrix3d(")){const e=s.slice(9,-1).split(/, /);return{x:+e[12],y:+e[13],scaleX:+e[0],scaleY:+e[5]}}else if(s.startsWith("matrix(")){const e=s.slice(7,-1).split(/, /);return{x:+e[4],y:+e[5],scaleX:+e[0],scaleY:+e[3]}}return null}function YE(s,e,n){const a=WE(e);if(!a)return s;const{scaleX:i,scaleY:l,x:c,y:d}=a,f=s.left-c-(1-i)*parseFloat(n),h=s.top-d-(1-l)*parseFloat(n.slice(n.indexOf(" ")+1)),m=i?s.width/i:s.width,y=l?s.height/l:s.height;return{width:m,height:y,top:h,right:f+m,bottom:h+y,left:f}}const XE={ignoreTransform:!1};function ys(s,e){e===void 0&&(e=XE);let n=s.getBoundingClientRect();if(e.ignoreTransform){const{transform:h,transformOrigin:m}=In(s).getComputedStyle(s);h&&(n=YE(n,h,m))}const{top:a,left:i,width:l,height:c,bottom:d,right:f}=n;return{top:a,left:i,width:l,height:c,bottom:d,right:f}}function ly(s){return ys(s,{ignoreTransform:!0})}function JE(s){const e=s.innerWidth,n=s.innerHeight;return{top:0,left:0,right:e,bottom:n,width:e,height:n}}function QE(s,e){return e===void 0&&(e=In(s).getComputedStyle(s)),e.position==="fixed"}function ZE(s,e){e===void 0&&(e=In(s).getComputedStyle(s));const n=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some(i=>{const l=e[i];return typeof l=="string"?n.test(l):!1})}function pc(s,e){const n=[];function a(i){if(e!=null&&n.length>=e||!i)return n;if(df(i)&&i.scrollingElement!=null&&!n.includes(i.scrollingElement))return n.push(i.scrollingElement),n;if(!Eo(i)||Jm(i)||n.includes(i))return n;const l=In(s).getComputedStyle(i);return i!==s&&ZE(i,l)&&n.push(i),QE(i,l)?n:a(i.parentNode)}return s?a(s):n}function cy(s){const[e]=pc(s,1);return e??null}function yf(s){return!dc||!s?null:ps(s)?s:uf(s)?df(s)||s===gs(s).scrollingElement?window:Eo(s)?s:null:null}function uy(s){return ps(s)?s.scrollX:s.scrollLeft}function dy(s){return ps(s)?s.scrollY:s.scrollTop}function bf(s){return{x:uy(s),y:dy(s)}}var gn;(function(s){s[s.Forward=1]="Forward",s[s.Backward=-1]="Backward"})(gn||(gn={}));function fy(s){return!dc||!s?!1:s===document.scrollingElement}function hy(s){const e={x:0,y:0},n=fy(s)?{height:window.innerHeight,width:window.innerWidth}:{height:s.clientHeight,width:s.clientWidth},a={x:s.scrollWidth-n.width,y:s.scrollHeight-n.height},i=s.scrollTop<=e.y,l=s.scrollLeft<=e.x,c=s.scrollTop>=a.y,d=s.scrollLeft>=a.x;return{isTop:i,isLeft:l,isBottom:c,isRight:d,maxScroll:a,minScroll:e}}const e_={x:.2,y:.2};function t_(s,e,n,a,i){let{top:l,left:c,right:d,bottom:f}=n;a===void 0&&(a=10),i===void 0&&(i=e_);const{isTop:h,isBottom:m,isLeft:y,isRight:S}=hy(s),v={x:0,y:0},_={x:0,y:0},A={height:e.height*i.y,width:e.width*i.x};return!h&&l<=e.top+A.height?(v.y=gn.Backward,_.y=a*Math.abs((e.top+A.height-l)/A.height)):!m&&f>=e.bottom-A.height&&(v.y=gn.Forward,_.y=a*Math.abs((e.bottom-A.height-f)/A.height)),!S&&d>=e.right-A.width?(v.x=gn.Forward,_.x=a*Math.abs((e.right-A.width-d)/A.width)):!y&&c<=e.left+A.width&&(v.x=gn.Backward,_.x=a*Math.abs((e.left+A.width-c)/A.width)),{direction:v,speed:_}}function n_(s){if(s===document.scrollingElement){const{innerWidth:l,innerHeight:c}=window;return{top:0,left:0,right:l,bottom:c,width:l,height:c}}const{top:e,left:n,right:a,bottom:i}=s.getBoundingClientRect();return{top:e,left:n,right:a,bottom:i,width:s.clientWidth,height:s.clientHeight}}function py(s){return s.reduce((e,n)=>ms(e,bf(n)),_r)}function r_(s){return s.reduce((e,n)=>e+uy(n),0)}function a_(s){return s.reduce((e,n)=>e+dy(n),0)}function i_(s,e){if(e===void 0&&(e=ys),!s)return;const{top:n,left:a,bottom:i,right:l}=e(s);cy(s)&&(i<=0||l<=0||n>=window.innerHeight||a>=window.innerWidth)&&s.scrollIntoView({block:"center",inline:"center"})}const s_=[["x",["left","right"],r_],["y",["top","bottom"],a_]];class vf{constructor(e,n){this.rect=void 0,this.width=void 0,this.height=void 0,this.top=void 0,this.bottom=void 0,this.right=void 0,this.left=void 0;const a=pc(n),i=py(a);this.rect={...e},this.width=e.width,this.height=e.height;for(const[l,c,d]of s_)for(const f of c)Object.defineProperty(this,f,{get:()=>{const h=d(a),m=i[l]-h;return this.rect[f]+m},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}}class Ro{constructor(e){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach(n=>{var a;return(a=this.target)==null?void 0:a.removeEventListener(...n)})},this.target=e}add(e,n,a){var i;(i=this.target)==null||i.addEventListener(e,n,a),this.listeners.push([e,n,a])}}function o_(s){const{EventTarget:e}=In(s);return s instanceof e?s:gs(s)}function Sf(s,e){const n=Math.abs(s.x),a=Math.abs(s.y);return typeof e=="number"?Math.sqrt(n**2+a**2)>e:"x"in e&&"y"in e?n>e.x&&a>e.y:"x"in e?n>e.x:"y"in e?a>e.y:!1}var ir;(function(s){s.Click="click",s.DragStart="dragstart",s.Keydown="keydown",s.ContextMenu="contextmenu",s.Resize="resize",s.SelectionChange="selectionchange",s.VisibilityChange="visibilitychange"})(ir||(ir={}));function gy(s){s.preventDefault()}function l_(s){s.stopPropagation()}var dt;(function(s){s.Space="Space",s.Down="ArrowDown",s.Right="ArrowRight",s.Left="ArrowLeft",s.Up="ArrowUp",s.Esc="Escape",s.Enter="Enter",s.Tab="Tab"})(dt||(dt={}));const my={start:[dt.Space,dt.Enter],cancel:[dt.Esc],end:[dt.Space,dt.Enter,dt.Tab]},c_=(s,e)=>{let{currentCoordinates:n}=e;switch(s.code){case dt.Right:return{...n,x:n.x+25};case dt.Left:return{...n,x:n.x-25};case dt.Down:return{...n,y:n.y+25};case dt.Up:return{...n,y:n.y-25}}};class wf{constructor(e){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=e;const{event:{target:n}}=e;this.props=e,this.listeners=new Ro(gs(n)),this.windowListeners=new Ro(In(n)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(ir.Resize,this.handleCancel),this.windowListeners.add(ir.VisibilityChange,this.handleCancel),setTimeout(()=>this.listeners.add(ir.Keydown,this.handleKeyDown))}handleStart(){const{activeNode:e,onStart:n}=this.props,a=e.node.current;a&&i_(a),n(_r)}handleKeyDown(e){if(gf(e)){const{active:n,context:a,options:i}=this.props,{keyboardCodes:l=my,coordinateGetter:c=c_,scrollBehavior:d="smooth"}=i,{code:f}=e;if(l.end.includes(f)){this.handleEnd(e);return}if(l.cancel.includes(f)){this.handleCancel(e);return}const{collisionRect:h}=a.current,m=h?{x:h.left,y:h.top}:_r;this.referenceCoordinates||(this.referenceCoordinates=m);const y=c(e,{active:n,context:a.current,currentCoordinates:m});if(y){const S=To(y,m),v={x:0,y:0},{scrollableAncestors:_}=a.current;for(const A of _){const x=e.code,{isTop:D,isRight:M,isLeft:T,isBottom:L,maxScroll:q,minScroll:P}=hy(A),B=n_(A),W={x:Math.min(x===dt.Right?B.right-B.width/2:B.right,Math.max(x===dt.Right?B.left:B.left+B.width/2,y.x)),y:Math.min(x===dt.Down?B.bottom-B.height/2:B.bottom,Math.max(x===dt.Down?B.top:B.top+B.height/2,y.y))},he=x===dt.Right&&!M||x===dt.Left&&!T,Se=x===dt.Down&&!L||x===dt.Up&&!D;if(he&&W.x!==y.x){const be=A.scrollLeft+S.x,Ue=x===dt.Right&&be<=q.x||x===dt.Left&&be>=P.x;if(Ue&&!S.y){A.scrollTo({left:be,behavior:d});return}Ue?v.x=A.scrollLeft-be:v.x=x===dt.Right?A.scrollLeft-q.x:A.scrollLeft-P.x,v.x&&A.scrollBy({left:-v.x,behavior:d});break}else if(Se&&W.y!==y.y){const be=A.scrollTop+S.y,Ue=x===dt.Down&&be<=q.y||x===dt.Up&&be>=P.y;if(Ue&&!S.x){A.scrollTo({top:be,behavior:d});return}Ue?v.y=A.scrollTop-be:v.y=x===dt.Down?A.scrollTop-q.y:A.scrollTop-P.y,v.y&&A.scrollBy({top:-v.y,behavior:d});break}}this.handleMove(e,ms(To(y,this.referenceCoordinates),v))}}}handleMove(e,n){const{onMove:a}=this.props;e.preventDefault(),a(n)}handleEnd(e){const{onEnd:n}=this.props;e.preventDefault(),this.detach(),n()}handleCancel(e){const{onCancel:n}=this.props;e.preventDefault(),this.detach(),n()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}wf.activators=[{eventName:"onKeyDown",handler:(s,e,n)=>{let{keyboardCodes:a=my,onActivation:i}=e,{active:l}=n;const{code:c}=s.nativeEvent;if(a.start.includes(c)){const d=l.activatorNode.current;return d&&s.target!==d?!1:(s.preventDefault(),i?.({event:s.nativeEvent}),!0)}return!1}}];function yy(s){return!!(s&&"distance"in s)}function by(s){return!!(s&&"delay"in s)}class Cf{constructor(e,n,a){var i;a===void 0&&(a=o_(e.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=e,this.events=n;const{event:l}=e,{target:c}=l;this.props=e,this.events=n,this.document=gs(c),this.documentListeners=new Ro(this.document),this.listeners=new Ro(a),this.windowListeners=new Ro(In(c)),this.initialCoordinates=(i=mf(l))!=null?i:_r,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){const{events:e,props:{options:{activationConstraint:n,bypassActivationConstraint:a}}}=this;if(this.listeners.add(e.move.name,this.handleMove,{passive:!1}),this.listeners.add(e.end.name,this.handleEnd),e.cancel&&this.listeners.add(e.cancel.name,this.handleCancel),this.windowListeners.add(ir.Resize,this.handleCancel),this.windowListeners.add(ir.DragStart,gy),this.windowListeners.add(ir.VisibilityChange,this.handleCancel),this.windowListeners.add(ir.ContextMenu,gy),this.documentListeners.add(ir.Keydown,this.handleKeydown),n){if(a!=null&&a({event:this.props.event,activeNode:this.props.activeNode,options:this.props.options}))return this.handleStart();if(by(n)){this.timeoutId=setTimeout(this.handleStart,n.delay),this.handlePending(n);return}if(yy(n)){this.handlePending(n);return}}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handlePending(e,n){const{active:a,onPending:i}=this.props;i(a,e,this.initialCoordinates,n)}handleStart(){const{initialCoordinates:e}=this,{onStart:n}=this.props;e&&(this.activated=!0,this.documentListeners.add(ir.Click,l_,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(ir.SelectionChange,this.removeTextSelection),n(e))}handleMove(e){var n;const{activated:a,initialCoordinates:i,props:l}=this,{onMove:c,options:{activationConstraint:d}}=l;if(!i)return;const f=(n=mf(e))!=null?n:_r,h=To(i,f);if(!a&&d){if(yy(d)){if(d.tolerance!=null&&Sf(h,d.tolerance))return this.handleCancel();if(Sf(h,d.distance))return this.handleStart()}if(by(d)&&Sf(h,d.tolerance))return this.handleCancel();this.handlePending(d,h);return}e.cancelable&&e.preventDefault(),c(f)}handleEnd(){const{onAbort:e,onEnd:n}=this.props;this.detach(),this.activated||e(this.props.active),n()}handleCancel(){const{onAbort:e,onCancel:n}=this.props;this.detach(),this.activated||e(this.props.active),n()}handleKeydown(e){e.code===dt.Esc&&this.handleCancel()}removeTextSelection(){var e;(e=this.document.getSelection())==null||e.removeAllRanges()}}const u_={cancel:{name:"pointercancel"},move:{name:"pointermove"},end:{name:"pointerup"}};class Ef extends Cf{constructor(e){const{event:n}=e,a=gs(n.target);super(e,u_,a)}}Ef.activators=[{eventName:"onPointerDown",handler:(s,e)=>{let{nativeEvent:n}=s,{onActivation:a}=e;return!n.isPrimary||n.button!==0?!1:(a?.({event:n}),!0)}}];const d_={move:{name:"mousemove"},end:{name:"mouseup"}};var _f;(function(s){s[s.RightClick=2]="RightClick"})(_f||(_f={}));class f_ extends Cf{constructor(e){super(e,d_,gs(e.event.target))}}f_.activators=[{eventName:"onMouseDown",handler:(s,e)=>{let{nativeEvent:n}=s,{onActivation:a}=e;return n.button===_f.RightClick?!1:(a?.({event:n}),!0)}}];const Af={cancel:{name:"touchcancel"},move:{name:"touchmove"},end:{name:"touchend"}};class h_ extends Cf{constructor(e){super(e,Af)}static setup(){return window.addEventListener(Af.move.name,e,{capture:!1,passive:!1}),function(){window.removeEventListener(Af.move.name,e)};function e(){}}}h_.activators=[{eventName:"onTouchStart",handler:(s,e)=>{let{nativeEvent:n}=s,{onActivation:a}=e;const{touches:i}=n;return i.length>1?!1:(a?.({event:n}),!0)}}];var Do;(function(s){s[s.Pointer=0]="Pointer",s[s.DraggableRect=1]="DraggableRect"})(Do||(Do={}));var gc;(function(s){s[s.TreeOrder=0]="TreeOrder",s[s.ReversedTreeOrder=1]="ReversedTreeOrder"})(gc||(gc={}));function p_(s){let{acceleration:e,activator:n=Do.Pointer,canScroll:a,draggingRect:i,enabled:l,interval:c=5,order:d=gc.TreeOrder,pointerCoordinates:f,scrollableAncestors:h,scrollableAncestorRects:m,delta:y,threshold:S}=s;const v=m_({delta:y,disabled:!l}),[_,A]=xE(),x=j.useRef({x:0,y:0}),D=j.useRef({x:0,y:0}),M=j.useMemo(()=>{switch(n){case Do.Pointer:return f?{top:f.y,bottom:f.y,left:f.x,right:f.x}:null;case Do.DraggableRect:return i}},[n,i,f]),T=j.useRef(null),L=j.useCallback(()=>{const P=T.current;if(!P)return;const B=x.current.x*D.current.x,W=x.current.y*D.current.y;P.scrollBy(B,W)},[]),q=j.useMemo(()=>d===gc.TreeOrder?[...h].reverse():h,[d,h]);j.useEffect(()=>{if(!l||!h.length||!M){A();return}for(const P of q){if(a?.(P)===!1)continue;const B=h.indexOf(P),W=m[B];if(!W)continue;const{direction:he,speed:Se}=t_(P,W,M,e,S);for(const be of["x","y"])v[be][he[be]]||(Se[be]=0,he[be]=0);if(Se.x>0||Se.y>0){A(),T.current=P,_(L,c),x.current=Se,D.current=he;return}}x.current={x:0,y:0},D.current={x:0,y:0},A()},[e,L,a,A,l,c,JSON.stringify(M),JSON.stringify(v),_,h,q,m,JSON.stringify(S)])}const g_={x:{[gn.Backward]:!1,[gn.Forward]:!1},y:{[gn.Backward]:!1,[gn.Forward]:!1}};function m_(s){let{delta:e,disabled:n}=s;const a=hf(e);return Ao(i=>{if(n||!a||!i)return g_;const l={x:Math.sign(e.x-a.x),y:Math.sign(e.y-a.y)};return{x:{[gn.Backward]:i.x[gn.Backward]||l.x===-1,[gn.Forward]:i.x[gn.Forward]||l.x===1},y:{[gn.Backward]:i.y[gn.Backward]||l.y===-1,[gn.Forward]:i.y[gn.Forward]||l.y===1}}},[n,e,a])}function y_(s,e){const n=e!=null?s.get(e):void 0,a=n?n.node.current:null;return Ao(i=>{var l;return e==null?null:(l=a??i)!=null?l:null},[a,e])}function b_(s,e){return j.useMemo(()=>s.reduce((n,a)=>{const{sensor:i}=a,l=i.activators.map(c=>({eventName:c.eventName,handler:e(c.handler,a)}));return[...n,...l]},[]),[s,e])}var Oo;(function(s){s[s.Always=0]="Always",s[s.BeforeDragging=1]="BeforeDragging",s[s.WhileDragging=2]="WhileDragging"})(Oo||(Oo={}));var xf;(function(s){s.Optimized="optimized"})(xf||(xf={}));const vy=new Map;function v_(s,e){let{dragging:n,dependencies:a,config:i}=e;const[l,c]=j.useState(null),{frequency:d,measure:f,strategy:h}=i,m=j.useRef(s),y=x(),S=_o(y),v=j.useCallback(function(D){D===void 0&&(D=[]),!S.current&&c(M=>M===null?D:M.concat(D.filter(T=>!M.includes(T))))},[S]),_=j.useRef(null),A=Ao(D=>{if(y&&!n)return vy;if(!D||D===vy||m.current!==s||l!=null){const M=new Map;for(let T of s){if(!T)continue;if(l&&l.length>0&&!l.includes(T.id)&&T.rect.current){M.set(T.id,T.rect.current);continue}const L=T.node.current,q=L?new vf(f(L),L):null;T.rect.current=q,q&&M.set(T.id,q)}return M}return D},[s,l,n,y,f]);return j.useEffect(()=>{m.current=s},[s]),j.useEffect(()=>{y||v()},[n,y]),j.useEffect(()=>{l&&l.length>0&&c(null)},[JSON.stringify(l)]),j.useEffect(()=>{y||typeof d!="number"||_.current!==null||(_.current=setTimeout(()=>{v(),_.current=null},d))},[d,y,v,...a]),{droppableRects:A,measureDroppableContainers:v,measuringScheduled:l!=null};function x(){switch(h){case Oo.Always:return!1;case Oo.BeforeDragging:return n;default:return!n}}}function Sy(s,e){return Ao(n=>s?n||(typeof e=="function"?e(s):s):null,[e,s])}function S_(s,e){return Sy(s,e)}function w_(s){let{callback:e,disabled:n}=s;const a=ff(e),i=j.useMemo(()=>{if(n||typeof window>"u"||typeof window.MutationObserver>"u")return;const{MutationObserver:l}=window;return new l(a)},[a,n]);return j.useEffect(()=>()=>i?.disconnect(),[i]),i}function mc(s){let{callback:e,disabled:n}=s;const a=ff(e),i=j.useMemo(()=>{if(n||typeof window>"u"||typeof window.ResizeObserver>"u")return;const{ResizeObserver:l}=window;return new l(a)},[n]);return j.useEffect(()=>()=>i?.disconnect(),[i]),i}function C_(s){return new vf(ys(s),s)}function wy(s,e,n){e===void 0&&(e=C_);const[a,i]=j.useState(null);function l(){i(f=>{if(!s)return null;if(s.isConnected===!1){var h;return(h=f??n)!=null?h:null}const m=e(s);return JSON.stringify(f)===JSON.stringify(m)?f:m})}const c=w_({callback(f){if(s)for(const h of f){const{type:m,target:y}=h;if(m==="childList"&&y instanceof HTMLElement&&y.contains(s)){l();break}}}}),d=mc({callback:l});return Pr(()=>{l(),s?(d?.observe(s),c?.observe(document.body,{childList:!0,subtree:!0})):(d?.disconnect(),c?.disconnect())},[s]),a}function E_(s){const e=Sy(s);return oy(s,e)}const Cy=[];function __(s){const e=j.useRef(s),n=Ao(a=>s?a&&a!==Cy&&s&&e.current&&s.parentNode===e.current.parentNode?a:pc(s):Cy,[s]);return j.useEffect(()=>{e.current=s},[s]),n}function A_(s){const[e,n]=j.useState(null),a=j.useRef(s),i=j.useCallback(l=>{const c=yf(l.target);c&&n(d=>d?(d.set(c,bf(c)),new Map(d)):null)},[]);return j.useEffect(()=>{const l=a.current;if(s!==l){c(l);const d=s.map(f=>{const h=yf(f);return h?(h.addEventListener("scroll",i,{passive:!0}),[h,bf(h)]):null}).filter(f=>f!=null);n(d.length?new Map(d):null),a.current=s}return()=>{c(s),c(l)};function c(d){d.forEach(f=>{const h=yf(f);h?.removeEventListener("scroll",i)})}},[i,s]),j.useMemo(()=>s.length?e?Array.from(e.values()).reduce((l,c)=>ms(l,c),_r):py(s):_r,[s,e])}function Ey(s,e){e===void 0&&(e=[]);const n=j.useRef(null);return j.useEffect(()=>{n.current=null},e),j.useEffect(()=>{const a=s!==_r;a&&!n.current&&(n.current=s),!a&&n.current&&(n.current=null)},[s]),n.current?To(s,n.current):_r}function x_(s){j.useEffect(()=>{if(!dc)return;const e=s.map(n=>{let{sensor:a}=n;return a.setup==null?void 0:a.setup()});return()=>{for(const n of e)n?.()}},s.map(e=>{let{sensor:n}=e;return n}))}function T_(s,e){return j.useMemo(()=>s.reduce((n,a)=>{let{eventName:i,handler:l}=a;return n[i]=c=>{l(c,e)},n},{}),[s,e])}function _y(s){return j.useMemo(()=>s?JE(s):null,[s])}const Ay=[];function k_(s,e){e===void 0&&(e=ys);const[n]=s,a=_y(n?In(n):null),[i,l]=j.useState(Ay);function c(){l(()=>s.length?s.map(f=>fy(f)?a:new vf(e(f),f)):Ay)}const d=mc({callback:c});return Pr(()=>{d?.disconnect(),c(),s.forEach(f=>d?.observe(f))},[s]),i}function R_(s){if(!s)return null;if(s.children.length>1)return s;const e=s.children[0];return Eo(e)?e:s}function D_(s){let{measure:e}=s;const[n,a]=j.useState(null),i=j.useCallback(h=>{for(const{target:m}of h)if(Eo(m)){a(y=>{const S=e(m);return y?{...y,width:S.width,height:S.height}:S});break}},[e]),l=mc({callback:i}),c=j.useCallback(h=>{const m=R_(h);l?.disconnect(),m&&l?.observe(m),a(m?e(m):null)},[e,l]),[d,f]=fc(c);return j.useMemo(()=>({nodeRef:d,rect:n,setRef:f}),[n,d,f])}const O_=[{sensor:Ef,options:{}},{sensor:wf,options:{}}],L_={current:{}},yc={draggable:{measure:ly},droppable:{measure:ly,strategy:Oo.WhileDragging,frequency:xf.Optimized},dragOverlay:{measure:ys}};class Lo extends Map{get(e){var n;return e!=null&&(n=super.get(e))!=null?n:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter(e=>{let{disabled:n}=e;return!n})}getNodeFor(e){var n,a;return(n=(a=this.get(e))==null?void 0:a.node.current)!=null?n:void 0}}const M_={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new Lo,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:hc},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:yc,measureDroppableContainers:hc,windowRect:null,measuringScheduled:!1},$_={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:hc,draggableNodes:new Map,over:null,measureDroppableContainers:hc},bc=j.createContext($_),xy=j.createContext(M_);function N_(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new Lo}}}function I_(s,e){switch(e.type){case sn.DragStart:return{...s,draggable:{...s.draggable,initialCoordinates:e.initialCoordinates,active:e.active}};case sn.DragMove:return s.draggable.active==null?s:{...s,draggable:{...s.draggable,translate:{x:e.coordinates.x-s.draggable.initialCoordinates.x,y:e.coordinates.y-s.draggable.initialCoordinates.y}}};case sn.DragEnd:case sn.DragCancel:return{...s,draggable:{...s.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case sn.RegisterDroppable:{const{element:n}=e,{id:a}=n,i=new Lo(s.droppable.containers);return i.set(a,n),{...s,droppable:{...s.droppable,containers:i}}}case sn.SetDroppableDisabled:{const{id:n,key:a,disabled:i}=e,l=s.droppable.containers.get(n);if(!l||a!==l.key)return s;const c=new Lo(s.droppable.containers);return c.set(n,{...l,disabled:i}),{...s,droppable:{...s.droppable,containers:c}}}case sn.UnregisterDroppable:{const{id:n,key:a}=e,i=s.droppable.containers.get(n);if(!i||a!==i.key)return s;const l=new Lo(s.droppable.containers);return l.delete(n),{...s,droppable:{...s.droppable,containers:l}}}default:return s}}function j_(s){let{disabled:e}=s;const{active:n,activatorEvent:a,draggableNodes:i}=j.useContext(bc),l=hf(a),c=hf(n?.id);return j.useEffect(()=>{if(!e&&!a&&l&&c!=null){if(!gf(l)||document.activeElement===l.target)return;const d=i.get(c);if(!d)return;const{activatorNode:f,node:h}=d;if(!f.current&&!h.current)return;requestAnimationFrame(()=>{for(const m of[f.current,h.current]){if(!m)continue;const y=RE(m);if(y){y.focus();break}}})}},[a,e,i,c,l]),null}function H_(s,e){let{transform:n,...a}=e;return s!=null&&s.length?s.reduce((i,l)=>l({transform:i,...a}),n):n}function z_(s){return j.useMemo(()=>({draggable:{...yc.draggable,...s?.draggable},droppable:{...yc.droppable,...s?.droppable},dragOverlay:{...yc.dragOverlay,...s?.dragOverlay}}),[s?.draggable,s?.droppable,s?.dragOverlay])}function U_(s){let{activeNode:e,measure:n,initialRect:a,config:i=!0}=s;const l=j.useRef(!1),{x:c,y:d}=typeof i=="boolean"?{x:i,y:i}:i;Pr(()=>{if(!c&&!d||!e){l.current=!1;return}if(l.current||!a)return;const h=e?.node.current;if(!h||h.isConnected===!1)return;const m=n(h),y=oy(m,a);if(c||(y.x=0),d||(y.y=0),l.current=!0,Math.abs(y.x)>0||Math.abs(y.y)>0){const S=cy(h);S&&S.scrollBy({top:y.y,left:y.x})}},[e,c,d,a,n])}const Ty=j.createContext({..._r,scaleX:1,scaleY:1});var La;(function(s){s[s.Uninitialized=0]="Uninitialized",s[s.Initializing=1]="Initializing",s[s.Initialized=2]="Initialized"})(La||(La={}));const P_=j.memo(function(e){var n,a,i,l;let{id:c,accessibility:d,autoScroll:f=!0,children:h,sensors:m=O_,collisionDetection:y=GE,measuring:S,modifiers:v,..._}=e;const A=j.useReducer(I_,void 0,N_),[x,D]=A,[M,T]=NE(),[L,q]=j.useState(La.Uninitialized),P=L===La.Initialized,{draggable:{active:B,nodes:W,translate:he},droppable:{containers:Se}}=x,be=B!=null?W.get(B):null,Ue=j.useRef({initial:null,translated:null}),Ve=j.useMemo(()=>{var pe;return B!=null?{id:B,data:(pe=be?.data)!=null?pe:L_,rect:Ue}:null},[B,be]),Ge=j.useRef(null),[Ct,J]=j.useState(null),[ue,Me]=j.useState(null),te=_o(_,Object.values(_)),ge=xo("DndDescribedBy",c),N=j.useMemo(()=>Se.getEnabled(),[Se]),k=z_(S),{droppableRects:de,measureDroppableContainers:fe,measuringScheduled:xe}=v_(N,{dragging:P,dependencies:[he.x,he.y],config:k.droppable}),ee=y_(W,B),_e=j.useMemo(()=>ue?mf(ue):null,[ue]),Be=ve(),Re=S_(ee,k.draggable.measure);U_({activeNode:B!=null?W.get(B):null,config:Be.layoutShiftCompensation,initialRect:Re,measure:k.draggable.measure});const Ie=wy(ee,k.draggable.measure,Re),Et=wy(ee?ee.parentElement:null),lt=j.useRef({activatorEvent:null,active:null,activeNode:ee,collisionRect:null,collisions:null,droppableRects:de,draggableNodes:W,draggingNode:null,draggingNodeRect:null,droppableContainers:Se,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),Lt=Se.getNodeFor((n=lt.current.over)==null?void 0:n.id),St=D_({measure:k.dragOverlay.measure}),At=(a=St.nodeRef.current)!=null?a:ee,Oe=P?(i=St.rect)!=null?i:Ie:null,rt=!!(St.nodeRef.current&&St.rect),on=E_(rt?null:Ie),$t=_y(At?In(At):null),Vt=__(P?Lt??ee:null),ln=k_(Vt),cn=H_(v,{transform:{x:he.x-on.x,y:he.y-on.y,scaleX:1,scaleY:1},activatorEvent:ue,active:Ve,activeNodeRect:Ie,containerNodeRect:Et,draggingNodeRect:Oe,over:lt.current.over,overlayNodeRect:St.rect,scrollableAncestors:Vt,scrollableAncestorRects:ln,windowRect:$t}),Gr=_e?ms(_e,he):null,Kt=A_(Vt),Ai=Ey(Kt),aa=Ey(Kt,[Ie]),bn=ms(cn,Ai),Ln=Oe?KE(Oe,cn):null,at=Ve&&Ln?y({active:Ve,collisionRect:Ln,droppableRects:de,droppableContainers:N,pointerCoordinates:Gr}):null,Hn=iy(at,"id"),[vn,ia]=j.useState(null),lr=rt?cn:ms(cn,aa),un=FE(lr,(l=vn?.rect)!=null?l:null,Ie),kn=j.useRef(null),dn=j.useCallback((pe,Ce)=>{let{sensor:Ae,options:Ke}=Ce;if(Ge.current==null)return;const Te=W.get(Ge.current);if(!Te)return;const $e=pe.nativeEvent,ke=new Ae({active:Ge.current,activeNode:Te,event:$e,options:Ke,context:lt,onAbort(He){if(!W.get(He))return;const{onDragAbort:we}=te.current,je={id:He};we?.(je),M({type:"onDragAbort",event:je})},onPending(He,Fe,we,je){if(!W.get(He))return;const{onDragPending:kt}=te.current,jt={id:He,constraint:Fe,initialCoordinates:we,offset:je};kt?.(jt),M({type:"onDragPending",event:jt})},onStart(He){const Fe=Ge.current;if(Fe==null)return;const we=W.get(Fe);if(!we)return;const{onDragStart:je}=te.current,nt={activatorEvent:$e,active:{id:Fe,data:we.data,rect:Ue}};Oa.unstable_batchedUpdates(()=>{je?.(nt),q(La.Initializing),D({type:sn.DragStart,initialCoordinates:He,active:Fe}),M({type:"onDragStart",event:nt}),J(kn.current),Me($e)})},onMove(He){D({type:sn.DragMove,coordinates:He})},onEnd:tt(sn.DragEnd),onCancel:tt(sn.DragCancel)});kn.current=ke;function tt(He){return async function(){const{active:we,collisions:je,over:nt,scrollAdjustedTranslate:kt}=lt.current;let jt=null;if(we&&kt){const{cancelDrop:Mn}=te.current;jt={activatorEvent:$e,active:we,collisions:je,delta:kt,over:nt},He===sn.DragEnd&&typeof Mn=="function"&&await Promise.resolve(Mn(jt))&&(He=sn.DragCancel)}Ge.current=null,Oa.unstable_batchedUpdates(()=>{D({type:He}),q(La.Uninitialized),ia(null),J(null),Me(null),kn.current=null;const Mn=He===sn.DragEnd?"onDragEnd":"onDragCancel";if(jt){const Ut=te.current[Mn];Ut?.(jt),M({type:Mn,event:jt})}})}}},[W]),F=j.useCallback((pe,Ce)=>(Ae,Ke)=>{const Te=Ae.nativeEvent,$e=W.get(Ke);if(Ge.current!==null||!$e||Te.dndKit||Te.defaultPrevented)return;const ke={active:$e};pe(Ae,Ce.options,ke)===!0&&(Te.dndKit={capturedBy:Ce.sensor},Ge.current=Ke,dn(Ae,Ce))},[W,dn]),se=b_(m,F);x_(m),Pr(()=>{Ie&&L===La.Initializing&&q(La.Initialized)},[Ie,L]),j.useEffect(()=>{const{onDragMove:pe}=te.current,{active:Ce,activatorEvent:Ae,collisions:Ke,over:Te}=lt.current;if(!Ce||!Ae)return;const $e={active:Ce,activatorEvent:Ae,collisions:Ke,delta:{x:bn.x,y:bn.y},over:Te};Oa.unstable_batchedUpdates(()=>{pe?.($e),M({type:"onDragMove",event:$e})})},[bn.x,bn.y]),j.useEffect(()=>{const{active:pe,activatorEvent:Ce,collisions:Ae,droppableContainers:Ke,scrollAdjustedTranslate:Te}=lt.current;if(!pe||Ge.current==null||!Ce||!Te)return;const{onDragOver:$e}=te.current,ke=Ke.get(Hn),tt=ke&&ke.rect.current?{id:ke.id,rect:ke.rect.current,data:ke.data,disabled:ke.disabled}:null,He={active:pe,activatorEvent:Ce,collisions:Ae,delta:{x:Te.x,y:Te.y},over:tt};Oa.unstable_batchedUpdates(()=>{ia(tt),$e?.(He),M({type:"onDragOver",event:He})})},[Hn]),Pr(()=>{lt.current={activatorEvent:ue,active:Ve,activeNode:ee,collisionRect:Ln,collisions:at,droppableRects:de,draggableNodes:W,draggingNode:At,draggingNodeRect:Oe,droppableContainers:Se,over:vn,scrollableAncestors:Vt,scrollAdjustedTranslate:bn},Ue.current={initial:Oe,translated:Ln}},[Ve,ee,at,Ln,W,At,Oe,de,Se,vn,Vt,bn]),p_({...Be,delta:he,draggingRect:Ln,pointerCoordinates:Gr,scrollableAncestors:Vt,scrollableAncestorRects:ln});const ce=j.useMemo(()=>({active:Ve,activeNode:ee,activeNodeRect:Ie,activatorEvent:ue,collisions:at,containerNodeRect:Et,dragOverlay:St,draggableNodes:W,droppableContainers:Se,droppableRects:de,over:vn,measureDroppableContainers:fe,scrollableAncestors:Vt,scrollableAncestorRects:ln,measuringConfiguration:k,measuringScheduled:xe,windowRect:$t}),[Ve,ee,Ie,ue,at,Et,St,W,Se,de,vn,fe,Vt,ln,k,xe,$t]),Z=j.useMemo(()=>({activatorEvent:ue,activators:se,active:Ve,activeNodeRect:Ie,ariaDescribedById:{draggable:ge},dispatch:D,draggableNodes:W,over:vn,measureDroppableContainers:fe}),[ue,se,Ve,Ie,D,ge,W,vn,fe]);return Xe.createElement(ey.Provider,{value:T},Xe.createElement(bc.Provider,{value:Z},Xe.createElement(xy.Provider,{value:ce},Xe.createElement(Ty.Provider,{value:un},h)),Xe.createElement(j_,{disabled:d?.restoreFocus===!1})),Xe.createElement(HE,{...d,hiddenTextDescribedById:ge}));function ve(){const pe=Ct?.autoScrollEnabled===!1,Ce=typeof f=="object"?f.enabled===!1:f===!1,Ae=P&&!pe&&!Ce;return typeof f=="object"?{...f,enabled:Ae}:{enabled:Ae}}}),B_=j.createContext(null),ky="button",q_="Draggable";function G_(s){let{id:e,data:n,disabled:a=!1,attributes:i}=s;const l=xo(q_),{activators:c,activatorEvent:d,active:f,activeNodeRect:h,ariaDescribedById:m,draggableNodes:y,over:S}=j.useContext(bc),{role:v=ky,roleDescription:_="draggable",tabIndex:A=0}=i??{},x=f?.id===e,D=j.useContext(x?Ty:B_),[M,T]=fc(),[L,q]=fc(),P=T_(c,e),B=_o(n);Pr(()=>(y.set(e,{id:e,key:l,node:M,activatorNode:L,data:B}),()=>{const he=y.get(e);he&&he.key===l&&y.delete(e)}),[y,e]);const W=j.useMemo(()=>({role:v,tabIndex:A,"aria-disabled":a,"aria-pressed":x&&v===ky?!0:void 0,"aria-roledescription":_,"aria-describedby":m.draggable}),[a,v,A,x,_,m.draggable]);return{active:f,activatorEvent:d,activeNodeRect:h,attributes:W,isDragging:x,listeners:a?void 0:P,node:M,over:S,setNodeRef:T,setActivatorNodeRef:q,transform:D}}function F_(){return j.useContext(xy)}const V_="Droppable",K_={timeout:25};function W_(s){let{data:e,disabled:n=!1,id:a,resizeObserverConfig:i}=s;const l=xo(V_),{active:c,dispatch:d,over:f,measureDroppableContainers:h}=j.useContext(bc),m=j.useRef({disabled:n}),y=j.useRef(!1),S=j.useRef(null),v=j.useRef(null),{disabled:_,updateMeasurementsFor:A,timeout:x}={...K_,...i},D=_o(A??a),M=j.useCallback(()=>{if(!y.current){y.current=!0;return}v.current!=null&&clearTimeout(v.current),v.current=setTimeout(()=>{h(Array.isArray(D.current)?D.current:[D.current]),v.current=null},x)},[x]),T=mc({callback:M,disabled:_||!c}),L=j.useCallback((W,he)=>{T&&(he&&(T.unobserve(he),y.current=!1),W&&T.observe(W))},[T]),[q,P]=fc(L),B=_o(e);return j.useEffect(()=>{!T||!q.current||(T.disconnect(),y.current=!1,T.observe(q.current))},[q,T]),j.useEffect(()=>(d({type:sn.RegisterDroppable,element:{id:a,key:l,disabled:n,node:q,rect:S,data:B}}),()=>d({type:sn.UnregisterDroppable,key:l,id:a})),[a]),j.useEffect(()=>{n!==m.current.disabled&&(d({type:sn.SetDroppableDisabled,id:a,key:l,disabled:n}),m.current.disabled=n)},[a,l,n,d]),{active:c,rect:S,isOver:f?.id===a,node:q,over:f,setNodeRef:P}}function Tf(s,e,n){const a=s.slice();return a.splice(n<0?a.length+n:n,0,a.splice(e,1)[0]),a}function Y_(s,e){return s.reduce((n,a,i)=>{const l=e.get(a);return l&&(n[i]=l),n},Array(s.length))}function vc(s){return s!==null&&s>=0}function X_(s,e){if(s===e)return!0;if(s.length!==e.length)return!1;for(let n=0;n