Files
Gnuboard7/public/build/core/template-engine.min.js
T
2026-07-01 10:30:32 +09:00

1812 lines
1.6 MiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
var tee=Object.defineProperty;var nee=(Gn,fo,po)=>fo in Gn?tee(Gn,fo,{enumerable:!0,configurable:!0,writable:!0,value:po}):Gn[fo]=po;var ne=(Gn,fo,po)=>nee(Gn,typeof fo!="symbol"?fo+"":fo,po);(function(Gn){"use strict";function fo(n,e){for(var t=0;t<e.length;t++){const s=e[t];if(typeof s!="string"&&!Array.isArray(s)){for(const r in s)if(r!=="default"&&!(r in n)){const o=Object.getOwnPropertyDescriptor(s,r);o&&Object.defineProperty(n,r,o.get?o:{enumerable:!0,get:()=>s[r]})}}}return Object.freeze(Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}))}function po(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var kg={exports:{}},Et={};var Sv;function eT(){if(Sv)return Et;Sv=1;var n=Symbol.for("react.transitional.element"),e=Symbol.for("react.portal"),t=Symbol.for("react.fragment"),s=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),o=Symbol.for("react.consumer"),l=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),f=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),h=Symbol.for("react.activity"),b=Symbol.iterator;function y(N){return N===null||typeof N!="object"?null:(N=b&&N[b]||N["@@iterator"],typeof N=="function"?N:null)}var v={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},x=Object.assign,S={};function _(N,V,ee){this.props=N,this.context=V,this.refs=S,this.updater=ee||v}_.prototype.isReactComponent={},_.prototype.setState=function(N,V){if(typeof N!="object"&&typeof N!="function"&&N!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,N,V,"setState")},_.prototype.forceUpdate=function(N){this.updater.enqueueForceUpdate(this,N,"forceUpdate")};function A(){}A.prototype=_.prototype;function C(N,V,ee){this.props=N,this.context=V,this.refs=S,this.updater=ee||v}var j=C.prototype=new A;j.constructor=C,x(j,_.prototype),j.isPureReactComponent=!0;var E=Array.isArray;function T(){}var D={H:null,A:null,T:null,S:null},I=Object.prototype.hasOwnProperty;function W(N,V,ee){var se=ee.ref;return{$$typeof:n,type:N,key:V,ref:se!==void 0?se:null,props:ee}}function z(N,V){return W(N.type,V,N.props)}function H(N){return typeof N=="object"&&N!==null&&N.$$typeof===n}function G(N){var V={"=":"=0",":":"=2"};return"$"+N.replace(/[=:]/g,function(ee){return V[ee]})}var F=/\/+/g;function Z(N,V){return typeof N=="object"&&N!==null&&N.key!=null?G(""+N.key):V.toString(36)}function Y(N){switch(N.status){case"fulfilled":return N.value;case"rejected":throw N.reason;default:switch(typeof N.status=="string"?N.then(T,T):(N.status="pending",N.then(function(V){N.status==="pending"&&(N.status="fulfilled",N.value=V)},function(V){N.status==="pending"&&(N.status="rejected",N.reason=V)})),N.status){case"fulfilled":return N.value;case"rejected":throw N.reason}}throw N}function U(N,V,ee,se,re){var pe=typeof N;(pe==="undefined"||pe==="boolean")&&(N=null);var je=!1;if(N===null)je=!0;else switch(pe){case"bigint":case"string":case"number":je=!0;break;case"object":switch(N.$$typeof){case n:case e:je=!0;break;case g:return je=N._init,U(je(N._payload),V,ee,se,re)}}if(je)return re=re(N),je=se===""?"."+Z(N,0):se,E(re)?(ee="",je!=null&&(ee=je.replace(F,"$&/")+"/"),U(re,V,ee,"",function(be){return be})):re!=null&&(H(re)&&(re=z(re,ee+(re.key==null||N&&N.key===re.key?"":(""+re.key).replace(F,"$&/")+"/")+je)),V.push(re)),1;je=0;var me=se===""?".":se+":";if(E(N))for(var ce=0;ce<N.length;ce++)se=N[ce],pe=me+Z(se,ce),je+=U(se,V,ee,pe,re);else if(ce=y(N),typeof ce=="function")for(N=ce.call(N),ce=0;!(se=N.next()).done;)se=se.value,pe=me+Z(se,ce++),je+=U(se,V,ee,pe,re);else if(pe==="object"){if(typeof N.then=="function")return U(Y(N),V,ee,se,re);throw V=String(N),Error("Objects are not valid as a React child (found: "+(V==="[object Object]"?"object with keys {"+Object.keys(N).join(", ")+"}":V)+"). If you meant to render a collection of children, use an array instead.")}return je}function B(N,V,ee){if(N==null)return N;var se=[],re=0;return U(N,se,"","",function(pe){return V.call(ee,pe,re++)}),se}function te(N){if(N._status===-1){var V=N._result;V=V(),V.then(function(ee){(N._status===0||N._status===-1)&&(N._status=1,N._result=ee)},function(ee){(N._status===0||N._status===-1)&&(N._status=2,N._result=ee)}),N._status===-1&&(N._status=0,N._result=V)}if(N._status===1)return N._result.default;throw N._result}var q=typeof reportError=="function"?reportError:function(N){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var V=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof N=="object"&&N!==null&&typeof N.message=="string"?String(N.message):String(N),error:N});if(!window.dispatchEvent(V))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",N);return}console.error(N)},M={map:B,forEach:function(N,V,ee){B(N,function(){V.apply(this,arguments)},ee)},count:function(N){var V=0;return B(N,function(){V++}),V},toArray:function(N){return B(N,function(V){return V})||[]},only:function(N){if(!H(N))throw Error("React.Children.only expected to receive a single React element child.");return N}};return Et.Activity=h,Et.Children=M,Et.Component=_,Et.Fragment=t,Et.Profiler=r,Et.PureComponent=C,Et.StrictMode=s,Et.Suspense=u,Et.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=D,Et.__COMPILER_RUNTIME={__proto__:null,c:function(N){return D.H.useMemoCache(N)}},Et.cache=function(N){return function(){return N.apply(null,arguments)}},Et.cacheSignal=function(){return null},Et.cloneElement=function(N,V,ee){if(N==null)throw Error("The argument must be a React element, but you passed "+N+".");var se=x({},N.props),re=N.key;if(V!=null)for(pe in V.key!==void 0&&(re=""+V.key),V)!I.call(V,pe)||pe==="key"||pe==="__self"||pe==="__source"||pe==="ref"&&V.ref===void 0||(se[pe]=V[pe]);var pe=arguments.length-2;if(pe===1)se.children=ee;else if(1<pe){for(var je=Array(pe),me=0;me<pe;me++)je[me]=arguments[me+2];se.children=je}return W(N.type,re,se)},Et.createContext=function(N){return N={$$typeof:l,_currentValue:N,_currentValue2:N,_threadCount:0,Provider:null,Consumer:null},N.Provider=N,N.Consumer={$$typeof:o,_context:N},N},Et.createElement=function(N,V,ee){var se,re={},pe=null;if(V!=null)for(se in V.key!==void 0&&(pe=""+V.key),V)I.call(V,se)&&se!=="key"&&se!=="__self"&&se!=="__source"&&(re[se]=V[se]);var je=arguments.length-2;if(je===1)re.children=ee;else if(1<je){for(var me=Array(je),ce=0;ce<je;ce++)me[ce]=arguments[ce+2];re.children=me}if(N&&N.defaultProps)for(se in je=N.defaultProps,je)re[se]===void 0&&(re[se]=je[se]);return W(N,pe,re)},Et.createRef=function(){return{current:null}},Et.forwardRef=function(N){return{$$typeof:d,render:N}},Et.isValidElement=H,Et.lazy=function(N){return{$$typeof:g,_payload:{_status:-1,_result:N},_init:te}},Et.memo=function(N,V){return{$$typeof:f,type:N,compare:V===void 0?null:V}},Et.startTransition=function(N){var V=D.T,ee={};D.T=ee;try{var se=N(),re=D.S;re!==null&&re(ee,se),typeof se=="object"&&se!==null&&typeof se.then=="function"&&se.then(T,q)}catch(pe){q(pe)}finally{V!==null&&ee.types!==null&&(V.types=ee.types),D.T=V}},Et.unstable_useCacheRefresh=function(){return D.H.useCacheRefresh()},Et.use=function(N){return D.H.use(N)},Et.useActionState=function(N,V,ee){return D.H.useActionState(N,V,ee)},Et.useCallback=function(N,V){return D.H.useCallback(N,V)},Et.useContext=function(N){return D.H.useContext(N)},Et.useDebugValue=function(){},Et.useDeferredValue=function(N,V){return D.H.useDeferredValue(N,V)},Et.useEffect=function(N,V){return D.H.useEffect(N,V)},Et.useEffectEvent=function(N){return D.H.useEffectEvent(N)},Et.useId=function(){return D.H.useId()},Et.useImperativeHandle=function(N,V,ee){return D.H.useImperativeHandle(N,V,ee)},Et.useInsertionEffect=function(N,V){return D.H.useInsertionEffect(N,V)},Et.useLayoutEffect=function(N,V){return D.H.useLayoutEffect(N,V)},Et.useMemo=function(N,V){return D.H.useMemo(N,V)},Et.useOptimistic=function(N,V){return D.H.useOptimistic(N,V)},Et.useReducer=function(N,V,ee){return D.H.useReducer(N,V,ee)},Et.useRef=function(N){return D.H.useRef(N)},Et.useState=function(N){return D.H.useState(N)},Et.useSyncExternalStore=function(N,V,ee){return D.H.useSyncExternalStore(N,V,ee)},Et.useTransition=function(){return D.H.useTransition()},Et.version="19.2.6",Et}var kv;function Cg(){return kv||(kv=1,kg.exports=eT()),kg.exports}var w=Cg();const qe=po(w);var jg={exports:{}},ec={},Eg={exports:{}},Rg={};var Cv;function tT(){return Cv||(Cv=1,(function(n){function e(U,B){var te=U.length;U.push(B);e:for(;0<te;){var q=te-1>>>1,M=U[q];if(0<r(M,B))U[q]=B,U[te]=M,te=q;else break e}}function t(U){return U.length===0?null:U[0]}function s(U){if(U.length===0)return null;var B=U[0],te=U.pop();if(te!==B){U[0]=te;e:for(var q=0,M=U.length,N=M>>>1;q<N;){var V=2*(q+1)-1,ee=U[V],se=V+1,re=U[se];if(0>r(ee,te))se<M&&0>r(re,ee)?(U[q]=re,U[se]=te,q=se):(U[q]=ee,U[V]=te,q=V);else if(se<M&&0>r(re,te))U[q]=re,U[se]=te,q=se;else break e}}return B}function r(U,B){var te=U.sortIndex-B.sortIndex;return te!==0?te:U.id-B.id}if(n.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var o=performance;n.unstable_now=function(){return o.now()}}else{var l=Date,d=l.now();n.unstable_now=function(){return l.now()-d}}var u=[],f=[],g=1,h=null,b=3,y=!1,v=!1,x=!1,S=!1,_=typeof setTimeout=="function"?setTimeout:null,A=typeof clearTimeout=="function"?clearTimeout:null,C=typeof setImmediate<"u"?setImmediate:null;function j(U){for(var B=t(f);B!==null;){if(B.callback===null)s(f);else if(B.startTime<=U)s(f),B.sortIndex=B.expirationTime,e(u,B);else break;B=t(f)}}function E(U){if(x=!1,j(U),!v)if(t(u)!==null)v=!0,T||(T=!0,G());else{var B=t(f);B!==null&&Y(E,B.startTime-U)}}var T=!1,D=-1,I=5,W=-1;function z(){return S?!0:!(n.unstable_now()-W<I)}function H(){if(S=!1,T){var U=n.unstable_now();W=U;var B=!0;try{e:{v=!1,x&&(x=!1,A(D),D=-1),y=!0;var te=b;try{t:{for(j(U),h=t(u);h!==null&&!(h.expirationTime>U&&z());){var q=h.callback;if(typeof q=="function"){h.callback=null,b=h.priorityLevel;var M=q(h.expirationTime<=U);if(U=n.unstable_now(),typeof M=="function"){h.callback=M,j(U),B=!0;break t}h===t(u)&&s(u),j(U)}else s(u);h=t(u)}if(h!==null)B=!0;else{var N=t(f);N!==null&&Y(E,N.startTime-U),B=!1}}break e}finally{h=null,b=te,y=!1}B=void 0}}finally{B?G():T=!1}}}var G;if(typeof C=="function")G=function(){C(H)};else if(typeof MessageChannel<"u"){var F=new MessageChannel,Z=F.port2;F.port1.onmessage=H,G=function(){Z.postMessage(null)}}else G=function(){_(H,0)};function Y(U,B){D=_(function(){U(n.unstable_now())},B)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(U){U.callback=null},n.unstable_forceFrameRate=function(U){0>U||125<U?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):I=0<U?Math.floor(1e3/U):5},n.unstable_getCurrentPriorityLevel=function(){return b},n.unstable_next=function(U){switch(b){case 1:case 2:case 3:var B=3;break;default:B=b}var te=b;b=B;try{return U()}finally{b=te}},n.unstable_requestPaint=function(){S=!0},n.unstable_runWithPriority=function(U,B){switch(U){case 1:case 2:case 3:case 4:case 5:break;default:U=3}var te=b;b=U;try{return B()}finally{b=te}},n.unstable_scheduleCallback=function(U,B,te){var q=n.unstable_now();switch(typeof te=="object"&&te!==null?(te=te.delay,te=typeof te=="number"&&0<te?q+te:q):te=q,U){case 1:var M=-1;break;case 2:M=250;break;case 5:M=1073741823;break;case 4:M=1e4;break;default:M=5e3}return M=te+M,U={id:g++,callback:B,priorityLevel:U,startTime:te,expirationTime:M,sortIndex:-1},te>q?(U.sortIndex=te,e(f,U),t(u)===null&&U===t(f)&&(x?(A(D),D=-1):x=!0,Y(E,te-q))):(U.sortIndex=M,e(u,U),v||y||(v=!0,T||(T=!0,G()))),U},n.unstable_shouldYield=z,n.unstable_wrapCallback=function(U){var B=b;return function(){var te=b;b=B;try{return U.apply(this,arguments)}finally{b=te}}}})(Rg)),Rg}var jv;function nT(){return jv||(jv=1,Eg.exports=tT()),Eg.exports}var Ag={exports:{}},hs={};var Ev;function sT(){if(Ev)return hs;Ev=1;var n=Cg();function e(u){var f="https://react.dev/errors/"+u;if(1<arguments.length){f+="?args[]="+encodeURIComponent(arguments[1]);for(var g=2;g<arguments.length;g++)f+="&args[]="+encodeURIComponent(arguments[g])}return"Minified React error #"+u+"; visit "+f+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function t(){}var s={d:{f:t,r:function(){throw Error(e(522))},D:t,C:t,L:t,m:t,X:t,S:t,M:t},p:0,findDOMNode:null},r=Symbol.for("react.portal");function o(u,f,g){var h=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:r,key:h==null?null:""+h,children:u,containerInfo:f,implementation:g}}var l=n.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function d(u,f){if(u==="font")return"";if(typeof f=="string")return f==="use-credentials"?f:""}return hs.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=s,hs.createPortal=function(u,f){var g=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!f||f.nodeType!==1&&f.nodeType!==9&&f.nodeType!==11)throw Error(e(299));return o(u,f,null,g)},hs.flushSync=function(u){var f=l.T,g=s.p;try{if(l.T=null,s.p=2,u)return u()}finally{l.T=f,s.p=g,s.d.f()}},hs.preconnect=function(u,f){typeof u=="string"&&(f?(f=f.crossOrigin,f=typeof f=="string"?f==="use-credentials"?f:"":void 0):f=null,s.d.C(u,f))},hs.prefetchDNS=function(u){typeof u=="string"&&s.d.D(u)},hs.preinit=function(u,f){if(typeof u=="string"&&f&&typeof f.as=="string"){var g=f.as,h=d(g,f.crossOrigin),b=typeof f.integrity=="string"?f.integrity:void 0,y=typeof f.fetchPriority=="string"?f.fetchPriority:void 0;g==="style"?s.d.S(u,typeof f.precedence=="string"?f.precedence:void 0,{crossOrigin:h,integrity:b,fetchPriority:y}):g==="script"&&s.d.X(u,{crossOrigin:h,integrity:b,fetchPriority:y,nonce:typeof f.nonce=="string"?f.nonce:void 0})}},hs.preinitModule=function(u,f){if(typeof u=="string")if(typeof f=="object"&&f!==null){if(f.as==null||f.as==="script"){var g=d(f.as,f.crossOrigin);s.d.M(u,{crossOrigin:g,integrity:typeof f.integrity=="string"?f.integrity:void 0,nonce:typeof f.nonce=="string"?f.nonce:void 0})}}else f==null&&s.d.M(u)},hs.preload=function(u,f){if(typeof u=="string"&&typeof f=="object"&&f!==null&&typeof f.as=="string"){var g=f.as,h=d(g,f.crossOrigin);s.d.L(u,g,{crossOrigin:h,integrity:typeof f.integrity=="string"?f.integrity:void 0,nonce:typeof f.nonce=="string"?f.nonce:void 0,type:typeof f.type=="string"?f.type:void 0,fetchPriority:typeof f.fetchPriority=="string"?f.fetchPriority:void 0,referrerPolicy:typeof f.referrerPolicy=="string"?f.referrerPolicy:void 0,imageSrcSet:typeof f.imageSrcSet=="string"?f.imageSrcSet:void 0,imageSizes:typeof f.imageSizes=="string"?f.imageSizes:void 0,media:typeof f.media=="string"?f.media:void 0})}},hs.preloadModule=function(u,f){if(typeof u=="string")if(f){var g=d(f.as,f.crossOrigin);s.d.m(u,{as:typeof f.as=="string"&&f.as!=="script"?f.as:void 0,crossOrigin:g,integrity:typeof f.integrity=="string"?f.integrity:void 0})}else s.d.m(u)},hs.requestFormReset=function(u){s.d.r(u)},hs.unstable_batchedUpdates=function(u,f){return u(f)},hs.useFormState=function(u,f,g){return l.H.useFormState(u,f,g)},hs.useFormStatus=function(){return l.H.useHostTransitionStatus()},hs.version="19.2.6",hs}var Rv;function Av(){if(Rv)return Ag.exports;Rv=1;function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}return n(),Ag.exports=sT(),Ag.exports}var Tv;function rT(){if(Tv)return ec;Tv=1;var n=nT(),e=Cg(),t=Av();function s(i){var c="https://react.dev/errors/"+i;if(1<arguments.length){c+="?args[]="+encodeURIComponent(arguments[1]);for(var p=2;p<arguments.length;p++)c+="&args[]="+encodeURIComponent(arguments[p])}return"Minified React error #"+i+"; visit "+c+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function r(i){return!(!i||i.nodeType!==1&&i.nodeType!==9&&i.nodeType!==11)}function o(i){var c=i,p=i;if(i.alternate)for(;c.return;)c=c.return;else{i=c;do c=i,(c.flags&4098)!==0&&(p=c.return),i=c.return;while(i)}return c.tag===3?p:null}function l(i){if(i.tag===13){var c=i.memoizedState;if(c===null&&(i=i.alternate,i!==null&&(c=i.memoizedState)),c!==null)return c.dehydrated}return null}function d(i){if(i.tag===31){var c=i.memoizedState;if(c===null&&(i=i.alternate,i!==null&&(c=i.memoizedState)),c!==null)return c.dehydrated}return null}function u(i){if(o(i)!==i)throw Error(s(188))}function f(i){var c=i.alternate;if(!c){if(c=o(i),c===null)throw Error(s(188));return c!==i?null:i}for(var p=i,m=c;;){var k=p.return;if(k===null)break;var R=k.alternate;if(R===null){if(m=k.return,m!==null){p=m;continue}break}if(k.child===R.child){for(R=k.child;R;){if(R===p)return u(k),i;if(R===m)return u(k),c;R=R.sibling}throw Error(s(188))}if(p.return!==m.return)p=k,m=R;else{for(var L=!1,K=k.child;K;){if(K===p){L=!0,p=k,m=R;break}if(K===m){L=!0,m=k,p=R;break}K=K.sibling}if(!L){for(K=R.child;K;){if(K===p){L=!0,p=R,m=k;break}if(K===m){L=!0,m=R,p=k;break}K=K.sibling}if(!L)throw Error(s(189))}}if(p.alternate!==m)throw Error(s(190))}if(p.tag!==3)throw Error(s(188));return p.stateNode.current===p?i:c}function g(i){var c=i.tag;if(c===5||c===26||c===27||c===6)return i;for(i=i.child;i!==null;){if(c=g(i),c!==null)return c;i=i.sibling}return null}var h=Object.assign,b=Symbol.for("react.element"),y=Symbol.for("react.transitional.element"),v=Symbol.for("react.portal"),x=Symbol.for("react.fragment"),S=Symbol.for("react.strict_mode"),_=Symbol.for("react.profiler"),A=Symbol.for("react.consumer"),C=Symbol.for("react.context"),j=Symbol.for("react.forward_ref"),E=Symbol.for("react.suspense"),T=Symbol.for("react.suspense_list"),D=Symbol.for("react.memo"),I=Symbol.for("react.lazy"),W=Symbol.for("react.activity"),z=Symbol.for("react.memo_cache_sentinel"),H=Symbol.iterator;function G(i){return i===null||typeof i!="object"?null:(i=H&&i[H]||i["@@iterator"],typeof i=="function"?i:null)}var F=Symbol.for("react.client.reference");function Z(i){if(i==null)return null;if(typeof i=="function")return i.$$typeof===F?null:i.displayName||i.name||null;if(typeof i=="string")return i;switch(i){case x:return"Fragment";case _:return"Profiler";case S:return"StrictMode";case E:return"Suspense";case T:return"SuspenseList";case W:return"Activity"}if(typeof i=="object")switch(i.$$typeof){case v:return"Portal";case C:return i.displayName||"Context";case A:return(i._context.displayName||"Context")+".Consumer";case j:var c=i.render;return i=i.displayName,i||(i=c.displayName||c.name||"",i=i!==""?"ForwardRef("+i+")":"ForwardRef"),i;case D:return c=i.displayName||null,c!==null?c:Z(i.type)||"Memo";case I:c=i._payload,i=i._init;try{return Z(i(c))}catch{}}return null}var Y=Array.isArray,U=e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,B=t.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,te={pending:!1,data:null,method:null,action:null},q=[],M=-1;function N(i){return{current:i}}function V(i){0>M||(i.current=q[M],q[M]=null,M--)}function ee(i,c){M++,q[M]=i.current,i.current=c}var se=N(null),re=N(null),pe=N(null),je=N(null);function me(i,c){switch(ee(pe,c),ee(re,i),ee(se,null),c.nodeType){case 9:case 11:i=(i=c.documentElement)&&(i=i.namespaceURI)?vA(i):0;break;default:if(i=c.tagName,c=c.namespaceURI)c=vA(c),i=wA(c,i);else switch(i){case"svg":i=1;break;case"math":i=2;break;default:i=0}}V(se),ee(se,i)}function ce(){V(se),V(re),V(pe)}function be(i){i.memoizedState!==null&&ee(je,i);var c=se.current,p=wA(c,i.type);c!==p&&(ee(re,i),ee(se,p))}function Be(i){re.current===i&&(V(se),V(re)),je.current===i&&(V(je),Qd._currentValue=te)}var fe,De;function Fe(i){if(fe===void 0)try{throw Error()}catch(p){var c=p.stack.trim().match(/\n( *(at )?)/);fe=c&&c[1]||"",De=-1<p.stack.indexOf(`
at`)?" (<anonymous>)":-1<p.stack.indexOf("@")?"@unknown:0:0":""}return`
`+fe+i+De}var mt=!1;function ft(i,c){if(!i||mt)return"";mt=!0;var p=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var m={DetermineComponentFrameRoot:function(){try{if(c){var ze=function(){throw Error()};if(Object.defineProperty(ze.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(ze,[])}catch(Te){var Ee=Te}Reflect.construct(i,[],ze)}else{try{ze.call()}catch(Te){Ee=Te}i.call(ze.prototype)}}else{try{throw Error()}catch(Te){Ee=Te}(ze=i())&&typeof ze.catch=="function"&&ze.catch(function(){})}}catch(Te){if(Te&&Ee&&typeof Te.stack=="string")return[Te.stack,Ee.stack]}return[null,null]}};m.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var k=Object.getOwnPropertyDescriptor(m.DetermineComponentFrameRoot,"name");k&&k.configurable&&Object.defineProperty(m.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var R=m.DetermineComponentFrameRoot(),L=R[0],K=R[1];if(L&&K){var ie=L.split(`
`),Ce=K.split(`
`);for(k=m=0;m<ie.length&&!ie[m].includes("DetermineComponentFrameRoot");)m++;for(;k<Ce.length&&!Ce[k].includes("DetermineComponentFrameRoot");)k++;if(m===ie.length||k===Ce.length)for(m=ie.length-1,k=Ce.length-1;1<=m&&0<=k&&ie[m]!==Ce[k];)k--;for(;1<=m&&0<=k;m--,k--)if(ie[m]!==Ce[k]){if(m!==1||k!==1)do if(m--,k--,0>k||ie[m]!==Ce[k]){var Ne=`
`+ie[m].replace(" at new "," at ");return i.displayName&&Ne.includes("<anonymous>")&&(Ne=Ne.replace("<anonymous>",i.displayName)),Ne}while(1<=m&&0<=k);break}}}finally{mt=!1,Error.prepareStackTrace=p}return(p=i?i.displayName||i.name:"")?Fe(p):""}function xt(i,c){switch(i.tag){case 26:case 27:case 5:return Fe(i.type);case 16:return Fe("Lazy");case 13:return i.child!==c&&c!==null?Fe("Suspense Fallback"):Fe("Suspense");case 19:return Fe("SuspenseList");case 0:case 15:return ft(i.type,!1);case 11:return ft(i.type.render,!1);case 1:return ft(i.type,!0);case 31:return Fe("Activity");default:return""}}function Ot(i){try{var c="",p=null;do c+=xt(i,p),p=i,i=i.return;while(i);return c}catch(m){return`
Error generating stack: `+m.message+`
`+m.stack}}var St=Object.prototype.hasOwnProperty,kt=n.unstable_scheduleCallback,Vt=n.unstable_cancelCallback,Nt=n.unstable_shouldYield,tn=n.unstable_requestPaint,Qe=n.unstable_now,Pe=n.unstable_getCurrentPriorityLevel,et=n.unstable_ImmediatePriority,Le=n.unstable_UserBlockingPriority,He=n.unstable_NormalPriority,Ve=n.unstable_LowPriority,Je=n.unstable_IdlePriority,jt=n.log,At=n.unstable_setDisableYieldValue,Rt=null,xe=null;function We(i){if(typeof jt=="function"&&At(i),xe&&typeof xe.setStrictMode=="function")try{xe.setStrictMode(Rt,i)}catch{}}var Q=Math.clz32?Math.clz32:X,ke=Math.log,ge=Math.LN2;function X(i){return i>>>=0,i===0?32:31-(ke(i)/ge|0)|0}var he=256,_e=262144,ve=4194304;function Re(i){var c=i&42;if(c!==0)return c;switch(i&-i){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return i&261888;case 262144:case 524288:case 1048576:case 2097152:return i&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return i&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return i}}function Ye(i,c,p){var m=i.pendingLanes;if(m===0)return 0;var k=0,R=i.suspendedLanes,L=i.pingedLanes;i=i.warmLanes;var K=m&134217727;return K!==0?(m=K&~R,m!==0?k=Re(m):(L&=K,L!==0?k=Re(L):p||(p=K&~i,p!==0&&(k=Re(p))))):(K=m&~R,K!==0?k=Re(K):L!==0?k=Re(L):p||(p=m&~i,p!==0&&(k=Re(p)))),k===0?0:c!==0&&c!==k&&(c&R)===0&&(R=k&-k,p=c&-c,R>=p||R===32&&(p&4194048)!==0)?c:k}function it(i,c){return(i.pendingLanes&~(i.suspendedLanes&~i.pingedLanes)&c)===0}function ot(i,c){switch(i){case 1:case 2:case 4:case 8:case 64:return c+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return c+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function tt(){var i=ve;return ve<<=1,(ve&62914560)===0&&(ve=4194304),i}function at(i){for(var c=[],p=0;31>p;p++)c.push(i);return c}function nt(i,c){i.pendingLanes|=c,c!==268435456&&(i.suspendedLanes=0,i.pingedLanes=0,i.warmLanes=0)}function Xe(i,c,p,m,k,R){var L=i.pendingLanes;i.pendingLanes=p,i.suspendedLanes=0,i.pingedLanes=0,i.warmLanes=0,i.expiredLanes&=p,i.entangledLanes&=p,i.errorRecoveryDisabledLanes&=p,i.shellSuspendCounter=0;var K=i.entanglements,ie=i.expirationTimes,Ce=i.hiddenUpdates;for(p=L&~p;0<p;){var Ne=31-Q(p),ze=1<<Ne;K[Ne]=0,ie[Ne]=-1;var Ee=Ce[Ne];if(Ee!==null)for(Ce[Ne]=null,Ne=0;Ne<Ee.length;Ne++){var Te=Ee[Ne];Te!==null&&(Te.lane&=-536870913)}p&=~ze}m!==0&&st(i,m,0),R!==0&&k===0&&i.tag!==0&&(i.suspendedLanes|=R&~(L&~c))}function st(i,c,p){i.pendingLanes|=c,i.suspendedLanes&=~c;var m=31-Q(c);i.entangledLanes|=c,i.entanglements[m]=i.entanglements[m]|1073741824|p&261930}function pt(i,c){var p=i.entangledLanes|=c;for(i=i.entanglements;p;){var m=31-Q(p),k=1<<m;k&c|i[m]&c&&(i[m]|=c),p&=~k}}function Lt(i,c){var p=c&-c;return p=(p&42)!==0?1:an(p),(p&(i.suspendedLanes|c))!==0?0:p}function an(i){switch(i){case 2:i=1;break;case 8:i=4;break;case 32:i=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:i=128;break;case 268435456:i=134217728;break;default:i=0}return i}function Tn(i){return i&=-i,2<i?8<i?(i&134217727)!==0?32:268435456:8:2}function $n(){var i=B.p;return i!==0?i:(i=window.event,i===void 0?32:qA(i.type))}function Cs(i,c){var p=B.p;try{return B.p=i,c()}finally{B.p=p}}var Wn=Math.random().toString(36).slice(2),vn="__reactFiber$"+Wn,os="__reactProps$"+Wn,cr="__reactContainer$"+Wn,Co="__reactEvents$"+Wn,ri="__reactListeners$"+Wn,oi="__reactHandles$"+Wn,Gs="__reactResources$"+Wn,jo="__reactMarker$"+Wn;function ai(i){delete i[vn],delete i[os],delete i[Co],delete i[ri],delete i[oi]}function ro(i){var c=i[vn];if(c)return c;for(var p=i.parentNode;p;){if(c=p[cr]||p[vn]){if(p=c.alternate,c.child!==null||p!==null&&p.child!==null)for(i=RA(i);i!==null;){if(p=i[vn])return p;i=RA(i)}return c}i=p,p=i.parentNode}return null}function dr(i){if(i=i[vn]||i[cr]){var c=i.tag;if(c===5||c===6||c===13||c===31||c===26||c===27||c===3)return i}return null}function Or(i){var c=i.tag;if(c===5||c===26||c===27||c===6)return i.stateNode;throw Error(s(33))}function Is(i){var c=i[Gs];return c||(c=i[Gs]={hoistableStyles:new Map,hoistableScripts:new Map}),c}function Nn(i){i[jo]=!0}var la=new Set,ca={};function Ys(i,c){oo(i,c),oo(i+"Capture",c)}function oo(i,c){for(ca[i]=c,i=0;i<c.length;i++)la.add(c[i])}var bl=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),xl={},vl={};function dd(i){return St.call(vl,i)?!0:St.call(xl,i)?!1:bl.test(i)?vl[i]=!0:(xl[i]=!0,!1)}function nn(i,c,p){if(dd(c))if(p===null)i.removeAttribute(c);else{switch(typeof p){case"undefined":case"function":case"symbol":i.removeAttribute(c);return;case"boolean":var m=c.toLowerCase().slice(0,5);if(m!=="data-"&&m!=="aria-"){i.removeAttribute(c);return}}i.setAttribute(c,""+p)}}function Eo(i,c,p){if(p===null)i.removeAttribute(c);else{switch(typeof p){case"undefined":case"function":case"symbol":case"boolean":i.removeAttribute(c);return}i.setAttribute(c,""+p)}}function Jn(i,c,p,m){if(m===null)i.removeAttribute(p);else{switch(typeof m){case"undefined":case"function":case"symbol":case"boolean":i.removeAttribute(p);return}i.setAttributeNS(c,p,""+m)}}function Un(i){switch(typeof i){case"bigint":case"boolean":case"number":case"string":case"undefined":return i;case"object":return i;default:return""}}function ii(i){var c=i.type;return(i=i.nodeName)&&i.toLowerCase()==="input"&&(c==="checkbox"||c==="radio")}function ud(i,c,p){var m=Object.getOwnPropertyDescriptor(i.constructor.prototype,c);if(!i.hasOwnProperty(c)&&typeof m<"u"&&typeof m.get=="function"&&typeof m.set=="function"){var k=m.get,R=m.set;return Object.defineProperty(i,c,{configurable:!0,get:function(){return k.call(this)},set:function(L){p=""+L,R.call(this,L)}}),Object.defineProperty(i,c,{enumerable:m.enumerable}),{getValue:function(){return p},setValue:function(L){p=""+L},stopTracking:function(){i._valueTracker=null,delete i[c]}}}}function da(i){if(!i._valueTracker){var c=ii(i)?"checked":"value";i._valueTracker=ud(i,c,""+i[c])}}function Dn(i){if(!i)return!1;var c=i._valueTracker;if(!c)return!0;var p=c.getValue(),m="";return i&&(m=ii(i)?i.checked?"true":"false":i.value),i=m,i!==p?(c.setValue(i),!0):!1}function js(i){if(i=i||(typeof document<"u"?document:void 0),typeof i>"u")return null;try{return i.activeElement||i.body}catch{return i.body}}var wl=/[\n"\\]/g;function vs(i){return i.replace(wl,function(c){return"\\"+c.charCodeAt(0).toString(16)+" "})}function ua(i,c,p,m,k,R,L,K){i.name="",L!=null&&typeof L!="function"&&typeof L!="symbol"&&typeof L!="boolean"?i.type=L:i.removeAttribute("type"),c!=null?L==="number"?(c===0&&i.value===""||i.value!=c)&&(i.value=""+Un(c)):i.value!==""+Un(c)&&(i.value=""+Un(c)):L!=="submit"&&L!=="reset"||i.removeAttribute("value"),c!=null?Ae(i,L,Un(c)):p!=null?Ae(i,L,Un(p)):m!=null&&i.removeAttribute("value"),k==null&&R!=null&&(i.defaultChecked=!!R),k!=null&&(i.checked=k&&typeof k!="function"&&typeof k!="symbol"),K!=null&&typeof K!="function"&&typeof K!="symbol"&&typeof K!="boolean"?i.name=""+Un(K):i.removeAttribute("name")}function de(i,c,p,m,k,R,L,K){if(R!=null&&typeof R!="function"&&typeof R!="symbol"&&typeof R!="boolean"&&(i.type=R),c!=null||p!=null){if(!(R!=="submit"&&R!=="reset"||c!=null)){da(i);return}p=p!=null?""+Un(p):"",c=c!=null?""+Un(c):p,K||c===i.value||(i.value=c),i.defaultValue=c}m=m??k,m=typeof m!="function"&&typeof m!="symbol"&&!!m,i.checked=K?i.checked:!!m,i.defaultChecked=!!m,L!=null&&typeof L!="function"&&typeof L!="symbol"&&typeof L!="boolean"&&(i.name=L),da(i)}function Ae(i,c,p){c==="number"&&js(i.ownerDocument)===i||i.defaultValue===""+p||(i.defaultValue=""+p)}function Me(i,c,p,m){if(i=i.options,c){c={};for(var k=0;k<p.length;k++)c["$"+p[k]]=!0;for(p=0;p<i.length;p++)k=c.hasOwnProperty("$"+i[p].value),i[p].selected!==k&&(i[p].selected=k),k&&m&&(i[p].defaultSelected=!0)}else{for(p=""+Un(p),c=null,k=0;k<i.length;k++){if(i[k].value===p){i[k].selected=!0,m&&(i[k].defaultSelected=!0);return}c!==null||i[k].disabled||(c=i[k])}c!==null&&(c.selected=!0)}}function Ue(i,c,p){if(c!=null&&(c=""+Un(c),c!==i.value&&(i.value=c),p==null)){i.defaultValue!==c&&(i.defaultValue=c);return}i.defaultValue=p!=null?""+Un(p):""}function rt(i,c,p,m){if(c==null){if(m!=null){if(p!=null)throw Error(s(92));if(Y(m)){if(1<m.length)throw Error(s(93));m=m[0]}p=m}p==null&&(p=""),c=p}p=Un(c),i.defaultValue=p,m=i.textContent,m===p&&m!==""&&m!==null&&(i.value=m),da(i)}function bt(i,c){if(c){var p=i.firstChild;if(p&&p===i.lastChild&&p.nodeType===3){p.nodeValue=c;return}}i.textContent=c}var Tt=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function wt(i,c,p){var m=c.indexOf("--")===0;p==null||typeof p=="boolean"||p===""?m?i.setProperty(c,""):c==="float"?i.cssFloat="":i[c]="":m?i.setProperty(c,p):typeof p!="number"||p===0||Tt.has(c)?c==="float"?i.cssFloat=p:i[c]=(""+p).trim():i[c]=p+"px"}function gt(i,c,p){if(c!=null&&typeof c!="object")throw Error(s(62));if(i=i.style,p!=null){for(var m in p)!p.hasOwnProperty(m)||c!=null&&c.hasOwnProperty(m)||(m.indexOf("--")===0?i.setProperty(m,""):m==="float"?i.cssFloat="":i[m]="");for(var k in c)m=c[k],c.hasOwnProperty(k)&&p[k]!==m&&wt(i,k,m)}else for(var R in c)c.hasOwnProperty(R)&&wt(i,R,c[R])}function _t(i){if(i.indexOf("-")===-1)return!1;switch(i){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Kt=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),as=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function sn(i){return as.test(""+i)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":i}function wn(){}var Ls=null;function li(i){return i=i.target||i.srcElement||window,i.correspondingUseElement&&(i=i.correspondingUseElement),i.nodeType===3?i.parentNode:i}var mn=null,is=null;function Ro(i){var c=dr(i);if(c&&(i=c.stateNode)){var p=i[os]||null;e:switch(i=c.stateNode,c.type){case"input":if(ua(i,p.value,p.defaultValue,p.defaultValue,p.checked,p.defaultChecked,p.type,p.name),c=p.name,p.type==="radio"&&c!=null){for(p=i;p.parentNode;)p=p.parentNode;for(p=p.querySelectorAll('input[name="'+vs(""+c)+'"][type="radio"]'),c=0;c<p.length;c++){var m=p[c];if(m!==i&&m.form===i.form){var k=m[os]||null;if(!k)throw Error(s(90));ua(m,k.value,k.defaultValue,k.defaultValue,k.checked,k.defaultChecked,k.type,k.name)}}for(c=0;c<p.length;c++)m=p[c],m.form===i.form&&Dn(m)}break e;case"textarea":Ue(i,p.value,p.defaultValue);break e;case"select":c=p.value,c!=null&&Me(i,!!p.multiple,c,!1)}}}var Os=!1;function fd(i,c,p){if(Os)return i(c,p);Os=!0;try{var m=i(c);return m}finally{if(Os=!1,(mn!==null||is!==null)&&(ng(),mn&&(c=mn,i=is,is=mn=null,Ro(c),i)))for(c=0;c<i.length;c++)Ro(i[c])}}function fa(i,c){var p=i.stateNode;if(p===null)return null;var m=p[os]||null;if(m===null)return null;p=m[c];e:switch(c){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(m=!m.disabled)||(i=i.type,m=!(i==="button"||i==="input"||i==="select"||i==="textarea")),i=!m;break e;default:i=!1}if(i)return null;if(p&&typeof p!="function")throw Error(s(231,c,typeof p));return p}var Mr=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),pd=!1;if(Mr)try{var ci={};Object.defineProperty(ci,"passive",{get:function(){pd=!0}}),window.addEventListener("test",ci,ci),window.removeEventListener("test",ci,ci)}catch{pd=!1}var ao=null,gd=null,_l=null;function dp(){if(_l)return _l;var i,c=gd,p=c.length,m,k="value"in ao?ao.value:ao.textContent,R=k.length;for(i=0;i<p&&c[i]===k[i];i++);var L=p-i;for(m=1;m<=L&&c[p-m]===k[R-m];m++);return _l=k.slice(i,1<m?1-m:void 0)}function di(i){var c=i.keyCode;return"charCode"in i?(i=i.charCode,i===0&&c===13&&(i=13)):i=c,i===10&&(i=13),32<=i||i===13?i:0}function hd(){return!0}function up(){return!1}function ht(i){function c(p,m,k,R,L){this._reactName=p,this._targetInst=k,this.type=m,this.nativeEvent=R,this.target=L,this.currentTarget=null;for(var K in i)i.hasOwnProperty(K)&&(p=i[K],this[K]=p?p(R):R[K]);return this.isDefaultPrevented=(R.defaultPrevented!=null?R.defaultPrevented:R.returnValue===!1)?hd:up,this.isPropagationStopped=up,this}return h(c.prototype,{preventDefault:function(){this.defaultPrevented=!0;var p=this.nativeEvent;p&&(p.preventDefault?p.preventDefault():typeof p.returnValue!="unknown"&&(p.returnValue=!1),this.isDefaultPrevented=hd)},stopPropagation:function(){var p=this.nativeEvent;p&&(p.stopPropagation?p.stopPropagation():typeof p.cancelBubble!="unknown"&&(p.cancelBubble=!0),this.isPropagationStopped=hd)},persist:function(){},isPersistent:hd}),c}var zr={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(i){return i.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Ao=ht(zr),ui=h({},zr,{view:0,detail:0}),fb=ht(ui),Sl,md,fi,kl=h({},ui,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:bd,button:0,buttons:0,relatedTarget:function(i){return i.relatedTarget===void 0?i.fromElement===i.srcElement?i.toElement:i.fromElement:i.relatedTarget},movementX:function(i){return"movementX"in i?i.movementX:(i!==fi&&(fi&&i.type==="mousemove"?(Sl=i.screenX-fi.screenX,md=i.screenY-fi.screenY):md=Sl=0,fi=i),Sl)},movementY:function(i){return"movementY"in i?i.movementY:md}}),fp=ht(kl),pb=h({},kl,{dataTransfer:0}),Oj=ht(pb),gb=h({},ui,{relatedTarget:0}),yd=ht(gb),Mj=h({},zr,{animationName:0,elapsedTime:0,pseudoElement:0}),hb=ht(Mj),mb=h({},zr,{clipboardData:function(i){return"clipboardData"in i?i.clipboardData:window.clipboardData}}),pp=ht(mb),yb=h({},zr,{data:0}),gp=ht(yb),bb={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},xb={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},vb={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function hp(i){var c=this.nativeEvent;return c.getModifierState?c.getModifierState(i):(i=vb[i])?!!c[i]:!1}function bd(){return hp}var wb=h({},ui,{key:function(i){if(i.key){var c=bb[i.key]||i.key;if(c!=="Unidentified")return c}return i.type==="keypress"?(i=di(i),i===13?"Enter":String.fromCharCode(i)):i.type==="keydown"||i.type==="keyup"?xb[i.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:bd,charCode:function(i){return i.type==="keypress"?di(i):0},keyCode:function(i){return i.type==="keydown"||i.type==="keyup"?i.keyCode:0},which:function(i){return i.type==="keypress"?di(i):i.type==="keydown"||i.type==="keyup"?i.keyCode:0}}),_b=ht(wb),Sb=h({},kl,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),mp=ht(Sb),kb=h({},ui,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:bd}),Cb=ht(kb),Zn=h({},zr,{propertyName:0,elapsedTime:0,pseudoElement:0}),Cl=ht(Zn),jb=h({},kl,{deltaX:function(i){return"deltaX"in i?i.deltaX:"wheelDeltaX"in i?-i.wheelDeltaX:0},deltaY:function(i){return"deltaY"in i?i.deltaY:"wheelDeltaY"in i?-i.wheelDeltaY:"wheelDelta"in i?-i.wheelDelta:0},deltaZ:0,deltaMode:0}),P=ht(jb),$=h({},zr,{newState:0,oldState:0}),O=ht($),J=[9,13,27,32],oe=Mr&&"CompositionEvent"in window,$e=null;Mr&&"documentMode"in document&&($e=document.documentMode);var Ke=Mr&&"TextEvent"in window&&!$e,dt=Mr&&(!oe||$e&&8<$e&&11>=$e),Ct=" ",Ut=!1;function Gt(i,c){switch(i){case"keyup":return J.indexOf(c.keyCode)!==-1;case"keydown":return c.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function kn(i){return i=i.detail,typeof i=="object"&&"data"in i?i.data:null}var Pr=!1;function Eb(i,c){switch(i){case"compositionend":return kn(c);case"keypress":return c.which!==32?null:(Ut=!0,Ct);case"textInput":return i=c.data,i===Ct&&Ut?null:i;default:return null}}function yp(i,c){if(Pr)return i==="compositionend"||!oe&&Gt(i,c)?(i=dp(),_l=gd=ao=null,Pr=!1,i):null;switch(i){case"paste":return null;case"keypress":if(!(c.ctrlKey||c.altKey||c.metaKey)||c.ctrlKey&&c.altKey){if(c.char&&1<c.char.length)return c.char;if(c.which)return String.fromCharCode(c.which)}return null;case"compositionend":return dt&&c.locale!=="ko"?null:c.data;default:return null}}var Rb={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function xd(i){var c=i&&i.nodeName&&i.nodeName.toLowerCase();return c==="input"?!!Rb[i.type]:c==="textarea"}function bp(i,c,p,m){mn?is?is.push(m):is=[m]:mn=m,c=cg(c,"onChange"),0<c.length&&(p=new Ao("onChange","change",null,p,m),i.push({event:p,listeners:c}))}var pa=null,pi=null;function Ab(i){gA(i,0)}function gi(i){var c=Or(i);if(Dn(c))return i}function vd(i,c){if(i==="change")return c}var wd=!1;if(Mr){var hi;if(Mr){var mi="oninput"in document;if(!mi){var _d=document.createElement("div");_d.setAttribute("oninput","return;"),mi=typeof _d.oninput=="function"}hi=mi}else hi=!1;wd=hi&&(!document.documentMode||9<document.documentMode)}function xp(){pa&&(pa.detachEvent("onpropertychange",vp),pi=pa=null)}function vp(i){if(i.propertyName==="value"&&gi(pi)){var c=[];bp(c,pi,i,li(i)),fd(Ab,c)}}function Tb(i,c,p){i==="focusin"?(xp(),pa=c,pi=p,pa.attachEvent("onpropertychange",vp)):i==="focusout"&&xp()}function $b(i){if(i==="selectionchange"||i==="keyup"||i==="keydown")return gi(pi)}function wp(i,c){if(i==="click")return gi(c)}function NZ(i,c){if(i==="input"||i==="change")return gi(c)}function DZ(i,c){return i===c&&(i!==0||1/i===1/c)||i!==i&&c!==c}var Xs=typeof Object.is=="function"?Object.is:DZ;function Sd(i,c){if(Xs(i,c))return!0;if(typeof i!="object"||i===null||typeof c!="object"||c===null)return!1;var p=Object.keys(i),m=Object.keys(c);if(p.length!==m.length)return!1;for(m=0;m<p.length;m++){var k=p[m];if(!St.call(c,k)||!Xs(i[k],c[k]))return!1}return!0}function zj(i){for(;i&&i.firstChild;)i=i.firstChild;return i}function Pj(i,c){var p=zj(i);i=0;for(var m;p;){if(p.nodeType===3){if(m=i+p.textContent.length,i<=c&&m>=c)return{node:p,offset:c-i};i=m}e:{for(;p;){if(p.nextSibling){p=p.nextSibling;break e}p=p.parentNode}p=void 0}p=zj(p)}}function Bj(i,c){return i&&c?i===c?!0:i&&i.nodeType===3?!1:c&&c.nodeType===3?Bj(i,c.parentNode):"contains"in i?i.contains(c):i.compareDocumentPosition?!!(i.compareDocumentPosition(c)&16):!1:!1}function Hj(i){i=i!=null&&i.ownerDocument!=null&&i.ownerDocument.defaultView!=null?i.ownerDocument.defaultView:window;for(var c=js(i.document);c instanceof i.HTMLIFrameElement;){try{var p=typeof c.contentWindow.location.href=="string"}catch{p=!1}if(p)i=c.contentWindow;else break;c=js(i.document)}return c}function Nb(i){var c=i&&i.nodeName&&i.nodeName.toLowerCase();return c&&(c==="input"&&(i.type==="text"||i.type==="search"||i.type==="tel"||i.type==="url"||i.type==="password")||c==="textarea"||i.contentEditable==="true")}var IZ=Mr&&"documentMode"in document&&11>=document.documentMode,jl=null,Db=null,kd=null,Ib=!1;function Wj(i,c,p){var m=p.window===p?p.document:p.nodeType===9?p:p.ownerDocument;Ib||jl==null||jl!==js(m)||(m=jl,"selectionStart"in m&&Nb(m)?m={start:m.selectionStart,end:m.selectionEnd}:(m=(m.ownerDocument&&m.ownerDocument.defaultView||window).getSelection(),m={anchorNode:m.anchorNode,anchorOffset:m.anchorOffset,focusNode:m.focusNode,focusOffset:m.focusOffset}),kd&&Sd(kd,m)||(kd=m,m=cg(Db,"onSelect"),0<m.length&&(c=new Ao("onSelect","select",null,c,p),i.push({event:c,listeners:m}),c.target=jl)))}function yi(i,c){var p={};return p[i.toLowerCase()]=c.toLowerCase(),p["Webkit"+i]="webkit"+c,p["Moz"+i]="moz"+c,p}var El={animationend:yi("Animation","AnimationEnd"),animationiteration:yi("Animation","AnimationIteration"),animationstart:yi("Animation","AnimationStart"),transitionrun:yi("Transition","TransitionRun"),transitionstart:yi("Transition","TransitionStart"),transitioncancel:yi("Transition","TransitionCancel"),transitionend:yi("Transition","TransitionEnd")},Lb={},Uj={};Mr&&(Uj=document.createElement("div").style,"AnimationEvent"in window||(delete El.animationend.animation,delete El.animationiteration.animation,delete El.animationstart.animation),"TransitionEvent"in window||delete El.transitionend.transition);function bi(i){if(Lb[i])return Lb[i];if(!El[i])return i;var c=El[i],p;for(p in c)if(c.hasOwnProperty(p)&&p in Uj)return Lb[i]=c[p];return i}var qj=bi("animationend"),Fj=bi("animationiteration"),Vj=bi("animationstart"),LZ=bi("transitionrun"),OZ=bi("transitionstart"),MZ=bi("transitioncancel"),Kj=bi("transitionend"),Gj=new Map,Ob="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");Ob.push("scrollEnd");function Br(i,c){Gj.set(i,c),Ys(c,[i])}var _p=typeof reportError=="function"?reportError:function(i){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var c=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof i=="object"&&i!==null&&typeof i.message=="string"?String(i.message):String(i),error:i});if(!window.dispatchEvent(c))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",i);return}console.error(i)},ur=[],Rl=0,Mb=0;function Sp(){for(var i=Rl,c=Mb=Rl=0;c<i;){var p=ur[c];ur[c++]=null;var m=ur[c];ur[c++]=null;var k=ur[c];ur[c++]=null;var R=ur[c];if(ur[c++]=null,m!==null&&k!==null){var L=m.pending;L===null?k.next=k:(k.next=L.next,L.next=k),m.pending=k}R!==0&&Yj(p,k,R)}}function kp(i,c,p,m){ur[Rl++]=i,ur[Rl++]=c,ur[Rl++]=p,ur[Rl++]=m,Mb|=m,i.lanes|=m,i=i.alternate,i!==null&&(i.lanes|=m)}function zb(i,c,p,m){return kp(i,c,p,m),Cp(i)}function xi(i,c){return kp(i,null,null,c),Cp(i)}function Yj(i,c,p){i.lanes|=p;var m=i.alternate;m!==null&&(m.lanes|=p);for(var k=!1,R=i.return;R!==null;)R.childLanes|=p,m=R.alternate,m!==null&&(m.childLanes|=p),R.tag===22&&(i=R.stateNode,i===null||i._visibility&1||(k=!0)),i=R,R=R.return;return i.tag===3?(R=i.stateNode,k&&c!==null&&(k=31-Q(p),i=R.hiddenUpdates,m=i[k],m===null?i[k]=[c]:m.push(c),c.lane=p|536870912),R):null}function Cp(i){if(50<Vd)throw Vd=0,Kx=null,Error(s(185));for(var c=i.return;c!==null;)i=c,c=i.return;return i.tag===3?i.stateNode:null}var Al={};function zZ(i,c,p,m){this.tag=i,this.key=p,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=c,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=m,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Js(i,c,p,m){return new zZ(i,c,p,m)}function Pb(i){return i=i.prototype,!(!i||!i.isReactComponent)}function To(i,c){var p=i.alternate;return p===null?(p=Js(i.tag,c,i.key,i.mode),p.elementType=i.elementType,p.type=i.type,p.stateNode=i.stateNode,p.alternate=i,i.alternate=p):(p.pendingProps=c,p.type=i.type,p.flags=0,p.subtreeFlags=0,p.deletions=null),p.flags=i.flags&65011712,p.childLanes=i.childLanes,p.lanes=i.lanes,p.child=i.child,p.memoizedProps=i.memoizedProps,p.memoizedState=i.memoizedState,p.updateQueue=i.updateQueue,c=i.dependencies,p.dependencies=c===null?null:{lanes:c.lanes,firstContext:c.firstContext},p.sibling=i.sibling,p.index=i.index,p.ref=i.ref,p.refCleanup=i.refCleanup,p}function Xj(i,c){i.flags&=65011714;var p=i.alternate;return p===null?(i.childLanes=0,i.lanes=c,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=p.childLanes,i.lanes=p.lanes,i.child=p.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=p.memoizedProps,i.memoizedState=p.memoizedState,i.updateQueue=p.updateQueue,i.type=p.type,c=p.dependencies,i.dependencies=c===null?null:{lanes:c.lanes,firstContext:c.firstContext}),i}function jp(i,c,p,m,k,R){var L=0;if(m=i,typeof i=="function")Pb(i)&&(L=1);else if(typeof i=="string")L=UQ(i,p,se.current)?26:i==="html"||i==="head"||i==="body"?27:5;else e:switch(i){case W:return i=Js(31,p,c,k),i.elementType=W,i.lanes=R,i;case x:return vi(p.children,k,R,c);case S:L=8,k|=24;break;case _:return i=Js(12,p,c,k|2),i.elementType=_,i.lanes=R,i;case E:return i=Js(13,p,c,k),i.elementType=E,i.lanes=R,i;case T:return i=Js(19,p,c,k),i.elementType=T,i.lanes=R,i;default:if(typeof i=="object"&&i!==null)switch(i.$$typeof){case C:L=10;break e;case A:L=9;break e;case j:L=11;break e;case D:L=14;break e;case I:L=16,m=null;break e}L=29,p=Error(s(130,i===null?"null":typeof i,"")),m=null}return c=Js(L,p,c,k),c.elementType=i,c.type=m,c.lanes=R,c}function vi(i,c,p,m){return i=Js(7,i,m,c),i.lanes=p,i}function Bb(i,c,p){return i=Js(6,i,null,c),i.lanes=p,i}function Jj(i){var c=Js(18,null,null,0);return c.stateNode=i,c}function Hb(i,c,p){return c=Js(4,i.children!==null?i.children:[],i.key,c),c.lanes=p,c.stateNode={containerInfo:i.containerInfo,pendingChildren:null,implementation:i.implementation},c}var Zj=new WeakMap;function fr(i,c){if(typeof i=="object"&&i!==null){var p=Zj.get(i);return p!==void 0?p:(c={value:i,source:c,stack:Ot(c)},Zj.set(i,c),c)}return{value:i,source:c,stack:Ot(c)}}var Tl=[],$l=0,Ep=null,Cd=0,pr=[],gr=0,ga=null,io=1,lo="";function $o(i,c){Tl[$l++]=Cd,Tl[$l++]=Ep,Ep=i,Cd=c}function Qj(i,c,p){pr[gr++]=io,pr[gr++]=lo,pr[gr++]=ga,ga=i;var m=io;i=lo;var k=32-Q(m)-1;m&=~(1<<k),p+=1;var R=32-Q(c)+k;if(30<R){var L=k-k%5;R=(m&(1<<L)-1).toString(32),m>>=L,k-=L,io=1<<32-Q(c)+k|p<<k|m,lo=R+i}else io=1<<R|p<<k|m,lo=i}function Wb(i){i.return!==null&&($o(i,1),Qj(i,1,0))}function Ub(i){for(;i===Ep;)Ep=Tl[--$l],Tl[$l]=null,Cd=Tl[--$l],Tl[$l]=null;for(;i===ga;)ga=pr[--gr],pr[gr]=null,lo=pr[--gr],pr[gr]=null,io=pr[--gr],pr[gr]=null}function eE(i,c){pr[gr++]=io,pr[gr++]=lo,pr[gr++]=ga,io=c.id,lo=c.overflow,ga=i}var us=null,yn=null,qt=!1,ha=null,hr=!1,qb=Error(s(519));function ma(i){var c=Error(s(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?"text":"HTML",""));throw jd(fr(c,i)),qb}function tE(i){var c=i.stateNode,p=i.type,m=i.memoizedProps;switch(c[vn]=i,c[os]=m,p){case"dialog":zt("cancel",c),zt("close",c);break;case"iframe":case"object":case"embed":zt("load",c);break;case"video":case"audio":for(p=0;p<Gd.length;p++)zt(Gd[p],c);break;case"source":zt("error",c);break;case"img":case"image":case"link":zt("error",c),zt("load",c);break;case"details":zt("toggle",c);break;case"input":zt("invalid",c),de(c,m.value,m.defaultValue,m.checked,m.defaultChecked,m.type,m.name,!0);break;case"select":zt("invalid",c);break;case"textarea":zt("invalid",c),rt(c,m.value,m.defaultValue,m.children)}p=m.children,typeof p!="string"&&typeof p!="number"&&typeof p!="bigint"||c.textContent===""+p||m.suppressHydrationWarning===!0||bA(c.textContent,p)?(m.popover!=null&&(zt("beforetoggle",c),zt("toggle",c)),m.onScroll!=null&&zt("scroll",c),m.onScrollEnd!=null&&zt("scrollend",c),m.onClick!=null&&(c.onclick=wn),c=!0):c=!1,c||ma(i,!0)}function nE(i){for(us=i.return;us;)switch(us.tag){case 5:case 31:case 13:hr=!1;return;case 27:case 3:hr=!0;return;default:us=us.return}}function Nl(i){if(i!==us)return!1;if(!qt)return nE(i),qt=!0,!1;var c=i.tag,p;if((p=c!==3&&c!==27)&&((p=c===5)&&(p=i.type,p=!(p!=="form"&&p!=="button")||lv(i.type,i.memoizedProps)),p=!p),p&&yn&&ma(i),nE(i),c===13){if(i=i.memoizedState,i=i!==null?i.dehydrated:null,!i)throw Error(s(317));yn=EA(i)}else if(c===31){if(i=i.memoizedState,i=i!==null?i.dehydrated:null,!i)throw Error(s(317));yn=EA(i)}else c===27?(c=yn,Ta(i.type)?(i=pv,pv=null,yn=i):yn=c):yn=us?yr(i.stateNode.nextSibling):null;return!0}function wi(){yn=us=null,qt=!1}function Fb(){var i=ha;return i!==null&&(Bs===null?Bs=i:Bs.push.apply(Bs,i),ha=null),i}function jd(i){ha===null?ha=[i]:ha.push(i)}var Vb=N(null),_i=null,No=null;function ya(i,c,p){ee(Vb,c._currentValue),c._currentValue=p}function Do(i){i._currentValue=Vb.current,V(Vb)}function Kb(i,c,p){for(;i!==null;){var m=i.alternate;if((i.childLanes&c)!==c?(i.childLanes|=c,m!==null&&(m.childLanes|=c)):m!==null&&(m.childLanes&c)!==c&&(m.childLanes|=c),i===p)break;i=i.return}}function Gb(i,c,p,m){var k=i.child;for(k!==null&&(k.return=i);k!==null;){var R=k.dependencies;if(R!==null){var L=k.child;R=R.firstContext;e:for(;R!==null;){var K=R;R=k;for(var ie=0;ie<c.length;ie++)if(K.context===c[ie]){R.lanes|=p,K=R.alternate,K!==null&&(K.lanes|=p),Kb(R.return,p,i),m||(L=null);break e}R=K.next}}else if(k.tag===18){if(L=k.return,L===null)throw Error(s(341));L.lanes|=p,R=L.alternate,R!==null&&(R.lanes|=p),Kb(L,p,i),L=null}else L=k.child;if(L!==null)L.return=k;else for(L=k;L!==null;){if(L===i){L=null;break}if(k=L.sibling,k!==null){k.return=L.return,L=k;break}L=L.return}k=L}}function Dl(i,c,p,m){i=null;for(var k=c,R=!1;k!==null;){if(!R){if((k.flags&524288)!==0)R=!0;else if((k.flags&262144)!==0)break}if(k.tag===10){var L=k.alternate;if(L===null)throw Error(s(387));if(L=L.memoizedProps,L!==null){var K=k.type;Xs(k.pendingProps.value,L.value)||(i!==null?i.push(K):i=[K])}}else if(k===je.current){if(L=k.alternate,L===null)throw Error(s(387));L.memoizedState.memoizedState!==k.memoizedState.memoizedState&&(i!==null?i.push(Qd):i=[Qd])}k=k.return}i!==null&&Gb(c,i,p,m),c.flags|=262144}function Rp(i){for(i=i.firstContext;i!==null;){if(!Xs(i.context._currentValue,i.memoizedValue))return!0;i=i.next}return!1}function Si(i){_i=i,No=null,i=i.dependencies,i!==null&&(i.firstContext=null)}function fs(i){return sE(_i,i)}function Ap(i,c){return _i===null&&Si(i),sE(i,c)}function sE(i,c){var p=c._currentValue;if(c={context:c,memoizedValue:p,next:null},No===null){if(i===null)throw Error(s(308));No=c,i.dependencies={lanes:0,firstContext:c},i.flags|=524288}else No=No.next=c;return p}var PZ=typeof AbortController<"u"?AbortController:function(){var i=[],c=this.signal={aborted:!1,addEventListener:function(p,m){i.push(m)}};this.abort=function(){c.aborted=!0,i.forEach(function(p){return p()})}},BZ=n.unstable_scheduleCallback,HZ=n.unstable_NormalPriority,qn={$$typeof:C,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Yb(){return{controller:new PZ,data:new Map,refCount:0}}function Ed(i){i.refCount--,i.refCount===0&&BZ(HZ,function(){i.controller.abort()})}var Rd=null,Xb=0,Il=0,Ll=null;function WZ(i,c){if(Rd===null){var p=Rd=[];Xb=0,Il=Qx(),Ll={status:"pending",value:void 0,then:function(m){p.push(m)}}}return Xb++,c.then(rE,rE),c}function rE(){if(--Xb===0&&Rd!==null){Ll!==null&&(Ll.status="fulfilled");var i=Rd;Rd=null,Il=0,Ll=null;for(var c=0;c<i.length;c++)(0,i[c])()}}function UZ(i,c){var p=[],m={status:"pending",value:null,reason:null,then:function(k){p.push(k)}};return i.then(function(){m.status="fulfilled",m.value=c;for(var k=0;k<p.length;k++)(0,p[k])(c)},function(k){for(m.status="rejected",m.reason=k,k=0;k<p.length;k++)(0,p[k])(void 0)}),m}var oE=U.S;U.S=function(i,c){WR=Qe(),typeof c=="object"&&c!==null&&typeof c.then=="function"&&WZ(i,c),oE!==null&&oE(i,c)};var ki=N(null);function Jb(){var i=ki.current;return i!==null?i:pn.pooledCache}function Tp(i,c){c===null?ee(ki,ki.current):ee(ki,c.pool)}function aE(){var i=Jb();return i===null?null:{parent:qn._currentValue,pool:i}}var Ol=Error(s(460)),Zb=Error(s(474)),$p=Error(s(542)),Np={then:function(){}};function iE(i){return i=i.status,i==="fulfilled"||i==="rejected"}function lE(i,c,p){switch(p=i[p],p===void 0?i.push(c):p!==c&&(c.then(wn,wn),c=p),c.status){case"fulfilled":return c.value;case"rejected":throw i=c.reason,dE(i),i;default:if(typeof c.status=="string")c.then(wn,wn);else{if(i=pn,i!==null&&100<i.shellSuspendCounter)throw Error(s(482));i=c,i.status="pending",i.then(function(m){if(c.status==="pending"){var k=c;k.status="fulfilled",k.value=m}},function(m){if(c.status==="pending"){var k=c;k.status="rejected",k.reason=m}})}switch(c.status){case"fulfilled":return c.value;case"rejected":throw i=c.reason,dE(i),i}throw ji=c,Ol}}function Ci(i){try{var c=i._init;return c(i._payload)}catch(p){throw p!==null&&typeof p=="object"&&typeof p.then=="function"?(ji=p,Ol):p}}var ji=null;function cE(){if(ji===null)throw Error(s(459));var i=ji;return ji=null,i}function dE(i){if(i===Ol||i===$p)throw Error(s(483))}var Ml=null,Ad=0;function Dp(i){var c=Ad;return Ad+=1,Ml===null&&(Ml=[]),lE(Ml,i,c)}function Td(i,c){c=c.props.ref,i.ref=c!==void 0?c:null}function Ip(i,c){throw c.$$typeof===b?Error(s(525)):(i=Object.prototype.toString.call(c),Error(s(31,i==="[object Object]"?"object with keys {"+Object.keys(c).join(", ")+"}":i)))}function uE(i){function c(ye,ue){if(i){var Se=ye.deletions;Se===null?(ye.deletions=[ue],ye.flags|=16):Se.push(ue)}}function p(ye,ue){if(!i)return null;for(;ue!==null;)c(ye,ue),ue=ue.sibling;return null}function m(ye){for(var ue=new Map;ye!==null;)ye.key!==null?ue.set(ye.key,ye):ue.set(ye.index,ye),ye=ye.sibling;return ue}function k(ye,ue){return ye=To(ye,ue),ye.index=0,ye.sibling=null,ye}function R(ye,ue,Se){return ye.index=Se,i?(Se=ye.alternate,Se!==null?(Se=Se.index,Se<ue?(ye.flags|=67108866,ue):Se):(ye.flags|=67108866,ue)):(ye.flags|=1048576,ue)}function L(ye){return i&&ye.alternate===null&&(ye.flags|=67108866),ye}function K(ye,ue,Se,Oe){return ue===null||ue.tag!==6?(ue=Bb(Se,ye.mode,Oe),ue.return=ye,ue):(ue=k(ue,Se),ue.return=ye,ue)}function ie(ye,ue,Se,Oe){var yt=Se.type;return yt===x?Ne(ye,ue,Se.props.children,Oe,Se.key):ue!==null&&(ue.elementType===yt||typeof yt=="object"&&yt!==null&&yt.$$typeof===I&&Ci(yt)===ue.type)?(ue=k(ue,Se.props),Td(ue,Se),ue.return=ye,ue):(ue=jp(Se.type,Se.key,Se.props,null,ye.mode,Oe),Td(ue,Se),ue.return=ye,ue)}function Ce(ye,ue,Se,Oe){return ue===null||ue.tag!==4||ue.stateNode.containerInfo!==Se.containerInfo||ue.stateNode.implementation!==Se.implementation?(ue=Hb(Se,ye.mode,Oe),ue.return=ye,ue):(ue=k(ue,Se.children||[]),ue.return=ye,ue)}function Ne(ye,ue,Se,Oe,yt){return ue===null||ue.tag!==7?(ue=vi(Se,ye.mode,Oe,yt),ue.return=ye,ue):(ue=k(ue,Se),ue.return=ye,ue)}function ze(ye,ue,Se){if(typeof ue=="string"&&ue!==""||typeof ue=="number"||typeof ue=="bigint")return ue=Bb(""+ue,ye.mode,Se),ue.return=ye,ue;if(typeof ue=="object"&&ue!==null){switch(ue.$$typeof){case y:return Se=jp(ue.type,ue.key,ue.props,null,ye.mode,Se),Td(Se,ue),Se.return=ye,Se;case v:return ue=Hb(ue,ye.mode,Se),ue.return=ye,ue;case I:return ue=Ci(ue),ze(ye,ue,Se)}if(Y(ue)||G(ue))return ue=vi(ue,ye.mode,Se,null),ue.return=ye,ue;if(typeof ue.then=="function")return ze(ye,Dp(ue),Se);if(ue.$$typeof===C)return ze(ye,Ap(ye,ue),Se);Ip(ye,ue)}return null}function Ee(ye,ue,Se,Oe){var yt=ue!==null?ue.key:null;if(typeof Se=="string"&&Se!==""||typeof Se=="number"||typeof Se=="bigint")return yt!==null?null:K(ye,ue,""+Se,Oe);if(typeof Se=="object"&&Se!==null){switch(Se.$$typeof){case y:return Se.key===yt?ie(ye,ue,Se,Oe):null;case v:return Se.key===yt?Ce(ye,ue,Se,Oe):null;case I:return Se=Ci(Se),Ee(ye,ue,Se,Oe)}if(Y(Se)||G(Se))return yt!==null?null:Ne(ye,ue,Se,Oe,null);if(typeof Se.then=="function")return Ee(ye,ue,Dp(Se),Oe);if(Se.$$typeof===C)return Ee(ye,ue,Ap(ye,Se),Oe);Ip(ye,Se)}return null}function Te(ye,ue,Se,Oe,yt){if(typeof Oe=="string"&&Oe!==""||typeof Oe=="number"||typeof Oe=="bigint")return ye=ye.get(Se)||null,K(ue,ye,""+Oe,yt);if(typeof Oe=="object"&&Oe!==null){switch(Oe.$$typeof){case y:return ye=ye.get(Oe.key===null?Se:Oe.key)||null,ie(ue,ye,Oe,yt);case v:return ye=ye.get(Oe.key===null?Se:Oe.key)||null,Ce(ue,ye,Oe,yt);case I:return Oe=Ci(Oe),Te(ye,ue,Se,Oe,yt)}if(Y(Oe)||G(Oe))return ye=ye.get(Se)||null,Ne(ue,ye,Oe,yt,null);if(typeof Oe.then=="function")return Te(ye,ue,Se,Dp(Oe),yt);if(Oe.$$typeof===C)return Te(ye,ue,Se,Ap(ue,Oe),yt);Ip(ue,Oe)}return null}function lt(ye,ue,Se,Oe){for(var yt=null,Yt=null,ut=ue,Dt=ue=0,Bt=null;ut!==null&&Dt<Se.length;Dt++){ut.index>Dt?(Bt=ut,ut=null):Bt=ut.sibling;var Xt=Ee(ye,ut,Se[Dt],Oe);if(Xt===null){ut===null&&(ut=Bt);break}i&&ut&&Xt.alternate===null&&c(ye,ut),ue=R(Xt,ue,Dt),Yt===null?yt=Xt:Yt.sibling=Xt,Yt=Xt,ut=Bt}if(Dt===Se.length)return p(ye,ut),qt&&$o(ye,Dt),yt;if(ut===null){for(;Dt<Se.length;Dt++)ut=ze(ye,Se[Dt],Oe),ut!==null&&(ue=R(ut,ue,Dt),Yt===null?yt=ut:Yt.sibling=ut,Yt=ut);return qt&&$o(ye,Dt),yt}for(ut=m(ut);Dt<Se.length;Dt++)Bt=Te(ut,ye,Dt,Se[Dt],Oe),Bt!==null&&(i&&Bt.alternate!==null&&ut.delete(Bt.key===null?Dt:Bt.key),ue=R(Bt,ue,Dt),Yt===null?yt=Bt:Yt.sibling=Bt,Yt=Bt);return i&&ut.forEach(function(La){return c(ye,La)}),qt&&$o(ye,Dt),yt}function vt(ye,ue,Se,Oe){if(Se==null)throw Error(s(151));for(var yt=null,Yt=null,ut=ue,Dt=ue=0,Bt=null,Xt=Se.next();ut!==null&&!Xt.done;Dt++,Xt=Se.next()){ut.index>Dt?(Bt=ut,ut=null):Bt=ut.sibling;var La=Ee(ye,ut,Xt.value,Oe);if(La===null){ut===null&&(ut=Bt);break}i&&ut&&La.alternate===null&&c(ye,ut),ue=R(La,ue,Dt),Yt===null?yt=La:Yt.sibling=La,Yt=La,ut=Bt}if(Xt.done)return p(ye,ut),qt&&$o(ye,Dt),yt;if(ut===null){for(;!Xt.done;Dt++,Xt=Se.next())Xt=ze(ye,Xt.value,Oe),Xt!==null&&(ue=R(Xt,ue,Dt),Yt===null?yt=Xt:Yt.sibling=Xt,Yt=Xt);return qt&&$o(ye,Dt),yt}for(ut=m(ut);!Xt.done;Dt++,Xt=Se.next())Xt=Te(ut,ye,Dt,Xt.value,Oe),Xt!==null&&(i&&Xt.alternate!==null&&ut.delete(Xt.key===null?Dt:Xt.key),ue=R(Xt,ue,Dt),Yt===null?yt=Xt:Yt.sibling=Xt,Yt=Xt);return i&&ut.forEach(function(eee){return c(ye,eee)}),qt&&$o(ye,Dt),yt}function fn(ye,ue,Se,Oe){if(typeof Se=="object"&&Se!==null&&Se.type===x&&Se.key===null&&(Se=Se.props.children),typeof Se=="object"&&Se!==null){switch(Se.$$typeof){case y:e:{for(var yt=Se.key;ue!==null;){if(ue.key===yt){if(yt=Se.type,yt===x){if(ue.tag===7){p(ye,ue.sibling),Oe=k(ue,Se.props.children),Oe.return=ye,ye=Oe;break e}}else if(ue.elementType===yt||typeof yt=="object"&&yt!==null&&yt.$$typeof===I&&Ci(yt)===ue.type){p(ye,ue.sibling),Oe=k(ue,Se.props),Td(Oe,Se),Oe.return=ye,ye=Oe;break e}p(ye,ue);break}else c(ye,ue);ue=ue.sibling}Se.type===x?(Oe=vi(Se.props.children,ye.mode,Oe,Se.key),Oe.return=ye,ye=Oe):(Oe=jp(Se.type,Se.key,Se.props,null,ye.mode,Oe),Td(Oe,Se),Oe.return=ye,ye=Oe)}return L(ye);case v:e:{for(yt=Se.key;ue!==null;){if(ue.key===yt)if(ue.tag===4&&ue.stateNode.containerInfo===Se.containerInfo&&ue.stateNode.implementation===Se.implementation){p(ye,ue.sibling),Oe=k(ue,Se.children||[]),Oe.return=ye,ye=Oe;break e}else{p(ye,ue);break}else c(ye,ue);ue=ue.sibling}Oe=Hb(Se,ye.mode,Oe),Oe.return=ye,ye=Oe}return L(ye);case I:return Se=Ci(Se),fn(ye,ue,Se,Oe)}if(Y(Se))return lt(ye,ue,Se,Oe);if(G(Se)){if(yt=G(Se),typeof yt!="function")throw Error(s(150));return Se=yt.call(Se),vt(ye,ue,Se,Oe)}if(typeof Se.then=="function")return fn(ye,ue,Dp(Se),Oe);if(Se.$$typeof===C)return fn(ye,ue,Ap(ye,Se),Oe);Ip(ye,Se)}return typeof Se=="string"&&Se!==""||typeof Se=="number"||typeof Se=="bigint"?(Se=""+Se,ue!==null&&ue.tag===6?(p(ye,ue.sibling),Oe=k(ue,Se),Oe.return=ye,ye=Oe):(p(ye,ue),Oe=Bb(Se,ye.mode,Oe),Oe.return=ye,ye=Oe),L(ye)):p(ye,ue)}return function(ye,ue,Se,Oe){try{Ad=0;var yt=fn(ye,ue,Se,Oe);return Ml=null,yt}catch(ut){if(ut===Ol||ut===$p)throw ut;var Yt=Js(29,ut,null,ye.mode);return Yt.lanes=Oe,Yt.return=ye,Yt}}}var Ei=uE(!0),fE=uE(!1),ba=!1;function Qb(i){i.updateQueue={baseState:i.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function ex(i,c){i=i.updateQueue,c.updateQueue===i&&(c.updateQueue={baseState:i.baseState,firstBaseUpdate:i.firstBaseUpdate,lastBaseUpdate:i.lastBaseUpdate,shared:i.shared,callbacks:null})}function xa(i){return{lane:i,tag:0,payload:null,callback:null,next:null}}function va(i,c,p){var m=i.updateQueue;if(m===null)return null;if(m=m.shared,(Qt&2)!==0){var k=m.pending;return k===null?c.next=c:(c.next=k.next,k.next=c),m.pending=c,c=Cp(i),Yj(i,null,p),c}return kp(i,m,c,p),Cp(i)}function $d(i,c,p){if(c=c.updateQueue,c!==null&&(c=c.shared,(p&4194048)!==0)){var m=c.lanes;m&=i.pendingLanes,p|=m,c.lanes=p,pt(i,p)}}function tx(i,c){var p=i.updateQueue,m=i.alternate;if(m!==null&&(m=m.updateQueue,p===m)){var k=null,R=null;if(p=p.firstBaseUpdate,p!==null){do{var L={lane:p.lane,tag:p.tag,payload:p.payload,callback:null,next:null};R===null?k=R=L:R=R.next=L,p=p.next}while(p!==null);R===null?k=R=c:R=R.next=c}else k=R=c;p={baseState:m.baseState,firstBaseUpdate:k,lastBaseUpdate:R,shared:m.shared,callbacks:m.callbacks},i.updateQueue=p;return}i=p.lastBaseUpdate,i===null?p.firstBaseUpdate=c:i.next=c,p.lastBaseUpdate=c}var nx=!1;function Nd(){if(nx){var i=Ll;if(i!==null)throw i}}function Dd(i,c,p,m){nx=!1;var k=i.updateQueue;ba=!1;var R=k.firstBaseUpdate,L=k.lastBaseUpdate,K=k.shared.pending;if(K!==null){k.shared.pending=null;var ie=K,Ce=ie.next;ie.next=null,L===null?R=Ce:L.next=Ce,L=ie;var Ne=i.alternate;Ne!==null&&(Ne=Ne.updateQueue,K=Ne.lastBaseUpdate,K!==L&&(K===null?Ne.firstBaseUpdate=Ce:K.next=Ce,Ne.lastBaseUpdate=ie))}if(R!==null){var ze=k.baseState;L=0,Ne=Ce=ie=null,K=R;do{var Ee=K.lane&-536870913,Te=Ee!==K.lane;if(Te?(Pt&Ee)===Ee:(m&Ee)===Ee){Ee!==0&&Ee===Il&&(nx=!0),Ne!==null&&(Ne=Ne.next={lane:0,tag:K.tag,payload:K.payload,callback:null,next:null});e:{var lt=i,vt=K;Ee=c;var fn=p;switch(vt.tag){case 1:if(lt=vt.payload,typeof lt=="function"){ze=lt.call(fn,ze,Ee);break e}ze=lt;break e;case 3:lt.flags=lt.flags&-65537|128;case 0:if(lt=vt.payload,Ee=typeof lt=="function"?lt.call(fn,ze,Ee):lt,Ee==null)break e;ze=h({},ze,Ee);break e;case 2:ba=!0}}Ee=K.callback,Ee!==null&&(i.flags|=64,Te&&(i.flags|=8192),Te=k.callbacks,Te===null?k.callbacks=[Ee]:Te.push(Ee))}else Te={lane:Ee,tag:K.tag,payload:K.payload,callback:K.callback,next:null},Ne===null?(Ce=Ne=Te,ie=ze):Ne=Ne.next=Te,L|=Ee;if(K=K.next,K===null){if(K=k.shared.pending,K===null)break;Te=K,K=Te.next,Te.next=null,k.lastBaseUpdate=Te,k.shared.pending=null}}while(!0);Ne===null&&(ie=ze),k.baseState=ie,k.firstBaseUpdate=Ce,k.lastBaseUpdate=Ne,R===null&&(k.shared.lanes=0),Ca|=L,i.lanes=L,i.memoizedState=ze}}function pE(i,c){if(typeof i!="function")throw Error(s(191,i));i.call(c)}function gE(i,c){var p=i.callbacks;if(p!==null)for(i.callbacks=null,i=0;i<p.length;i++)pE(p[i],c)}var zl=N(null),Lp=N(0);function hE(i,c){i=Wo,ee(Lp,i),ee(zl,c),Wo=i|c.baseLanes}function sx(){ee(Lp,Wo),ee(zl,zl.current)}function rx(){Wo=Lp.current,V(zl),V(Lp)}var Zs=N(null),mr=null;function wa(i){var c=i.alternate;ee(Pn,Pn.current&1),ee(Zs,i),mr===null&&(c===null||zl.current!==null||c.memoizedState!==null)&&(mr=i)}function ox(i){ee(Pn,Pn.current),ee(Zs,i),mr===null&&(mr=i)}function mE(i){i.tag===22?(ee(Pn,Pn.current),ee(Zs,i),mr===null&&(mr=i)):_a()}function _a(){ee(Pn,Pn.current),ee(Zs,Zs.current)}function Qs(i){V(Zs),mr===i&&(mr=null),V(Pn)}var Pn=N(0);function Op(i){for(var c=i;c!==null;){if(c.tag===13){var p=c.memoizedState;if(p!==null&&(p=p.dehydrated,p===null||uv(p)||fv(p)))return c}else if(c.tag===19&&(c.memoizedProps.revealOrder==="forwards"||c.memoizedProps.revealOrder==="backwards"||c.memoizedProps.revealOrder==="unstable_legacy-backwards"||c.memoizedProps.revealOrder==="together")){if((c.flags&128)!==0)return c}else if(c.child!==null){c.child.return=c,c=c.child;continue}if(c===i)break;for(;c.sibling===null;){if(c.return===null||c.return===i)return null;c=c.return}c.sibling.return=c.return,c=c.sibling}return null}var Io=0,$t=null,dn=null,Fn=null,Mp=!1,Pl=!1,Ri=!1,zp=0,Id=0,Bl=null,qZ=0;function In(){throw Error(s(321))}function ax(i,c){if(c===null)return!1;for(var p=0;p<c.length&&p<i.length;p++)if(!Xs(i[p],c[p]))return!1;return!0}function ix(i,c,p,m,k,R){return Io=R,$t=c,c.memoizedState=null,c.updateQueue=null,c.lanes=0,U.H=i===null||i.memoizedState===null?QE:_x,Ri=!1,R=p(m,k),Ri=!1,Pl&&(R=bE(c,p,m,k)),yE(i),R}function yE(i){U.H=Md;var c=dn!==null&&dn.next!==null;if(Io=0,Fn=dn=$t=null,Mp=!1,Id=0,Bl=null,c)throw Error(s(300));i===null||Vn||(i=i.dependencies,i!==null&&Rp(i)&&(Vn=!0))}function bE(i,c,p,m){$t=i;var k=0;do{if(Pl&&(Bl=null),Id=0,Pl=!1,25<=k)throw Error(s(301));if(k+=1,Fn=dn=null,i.updateQueue!=null){var R=i.updateQueue;R.lastEffect=null,R.events=null,R.stores=null,R.memoCache!=null&&(R.memoCache.index=0)}U.H=eR,R=c(p,m)}while(Pl);return R}function FZ(){var i=U.H,c=i.useState()[0];return c=typeof c.then=="function"?Ld(c):c,i=i.useState()[0],(dn!==null?dn.memoizedState:null)!==i&&($t.flags|=1024),c}function lx(){var i=zp!==0;return zp=0,i}function cx(i,c,p){c.updateQueue=i.updateQueue,c.flags&=-2053,i.lanes&=~p}function dx(i){if(Mp){for(i=i.memoizedState;i!==null;){var c=i.queue;c!==null&&(c.pending=null),i=i.next}Mp=!1}Io=0,Fn=dn=$t=null,Pl=!1,Id=zp=0,Bl=null}function Es(){var i={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Fn===null?$t.memoizedState=Fn=i:Fn=Fn.next=i,Fn}function Bn(){if(dn===null){var i=$t.alternate;i=i!==null?i.memoizedState:null}else i=dn.next;var c=Fn===null?$t.memoizedState:Fn.next;if(c!==null)Fn=c,dn=i;else{if(i===null)throw $t.alternate===null?Error(s(467)):Error(s(310));dn=i,i={memoizedState:dn.memoizedState,baseState:dn.baseState,baseQueue:dn.baseQueue,queue:dn.queue,next:null},Fn===null?$t.memoizedState=Fn=i:Fn=Fn.next=i}return Fn}function Pp(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function Ld(i){var c=Id;return Id+=1,Bl===null&&(Bl=[]),i=lE(Bl,i,c),c=$t,(Fn===null?c.memoizedState:Fn.next)===null&&(c=c.alternate,U.H=c===null||c.memoizedState===null?QE:_x),i}function Bp(i){if(i!==null&&typeof i=="object"){if(typeof i.then=="function")return Ld(i);if(i.$$typeof===C)return fs(i)}throw Error(s(438,String(i)))}function ux(i){var c=null,p=$t.updateQueue;if(p!==null&&(c=p.memoCache),c==null){var m=$t.alternate;m!==null&&(m=m.updateQueue,m!==null&&(m=m.memoCache,m!=null&&(c={data:m.data.map(function(k){return k.slice()}),index:0})))}if(c==null&&(c={data:[],index:0}),p===null&&(p=Pp(),$t.updateQueue=p),p.memoCache=c,p=c.data[c.index],p===void 0)for(p=c.data[c.index]=Array(i),m=0;m<i;m++)p[m]=z;return c.index++,p}function Lo(i,c){return typeof c=="function"?c(i):c}function Hp(i){var c=Bn();return fx(c,dn,i)}function fx(i,c,p){var m=i.queue;if(m===null)throw Error(s(311));m.lastRenderedReducer=p;var k=i.baseQueue,R=m.pending;if(R!==null){if(k!==null){var L=k.next;k.next=R.next,R.next=L}c.baseQueue=k=R,m.pending=null}if(R=i.baseState,k===null)i.memoizedState=R;else{c=k.next;var K=L=null,ie=null,Ce=c,Ne=!1;do{var ze=Ce.lane&-536870913;if(ze!==Ce.lane?(Pt&ze)===ze:(Io&ze)===ze){var Ee=Ce.revertLane;if(Ee===0)ie!==null&&(ie=ie.next={lane:0,revertLane:0,gesture:null,action:Ce.action,hasEagerState:Ce.hasEagerState,eagerState:Ce.eagerState,next:null}),ze===Il&&(Ne=!0);else if((Io&Ee)===Ee){Ce=Ce.next,Ee===Il&&(Ne=!0);continue}else ze={lane:0,revertLane:Ce.revertLane,gesture:null,action:Ce.action,hasEagerState:Ce.hasEagerState,eagerState:Ce.eagerState,next:null},ie===null?(K=ie=ze,L=R):ie=ie.next=ze,$t.lanes|=Ee,Ca|=Ee;ze=Ce.action,Ri&&p(R,ze),R=Ce.hasEagerState?Ce.eagerState:p(R,ze)}else Ee={lane:ze,revertLane:Ce.revertLane,gesture:Ce.gesture,action:Ce.action,hasEagerState:Ce.hasEagerState,eagerState:Ce.eagerState,next:null},ie===null?(K=ie=Ee,L=R):ie=ie.next=Ee,$t.lanes|=ze,Ca|=ze;Ce=Ce.next}while(Ce!==null&&Ce!==c);if(ie===null?L=R:ie.next=K,!Xs(R,i.memoizedState)&&(Vn=!0,Ne&&(p=Ll,p!==null)))throw p;i.memoizedState=R,i.baseState=L,i.baseQueue=ie,m.lastRenderedState=R}return k===null&&(m.lanes=0),[i.memoizedState,m.dispatch]}function px(i){var c=Bn(),p=c.queue;if(p===null)throw Error(s(311));p.lastRenderedReducer=i;var m=p.dispatch,k=p.pending,R=c.memoizedState;if(k!==null){p.pending=null;var L=k=k.next;do R=i(R,L.action),L=L.next;while(L!==k);Xs(R,c.memoizedState)||(Vn=!0),c.memoizedState=R,c.baseQueue===null&&(c.baseState=R),p.lastRenderedState=R}return[R,m]}function xE(i,c,p){var m=$t,k=Bn(),R=qt;if(R){if(p===void 0)throw Error(s(407));p=p()}else p=c();var L=!Xs((dn||k).memoizedState,p);if(L&&(k.memoizedState=p,Vn=!0),k=k.queue,mx(_E.bind(null,m,k,i),[i]),k.getSnapshot!==c||L||Fn!==null&&Fn.memoizedState.tag&1){if(m.flags|=2048,Hl(9,{destroy:void 0},wE.bind(null,m,k,p,c),null),pn===null)throw Error(s(349));R||(Io&127)!==0||vE(m,c,p)}return p}function vE(i,c,p){i.flags|=16384,i={getSnapshot:c,value:p},c=$t.updateQueue,c===null?(c=Pp(),$t.updateQueue=c,c.stores=[i]):(p=c.stores,p===null?c.stores=[i]:p.push(i))}function wE(i,c,p,m){c.value=p,c.getSnapshot=m,SE(c)&&kE(i)}function _E(i,c,p){return p(function(){SE(c)&&kE(i)})}function SE(i){var c=i.getSnapshot;i=i.value;try{var p=c();return!Xs(i,p)}catch{return!0}}function kE(i){var c=xi(i,2);c!==null&&Hs(c,i,2)}function gx(i){var c=Es();if(typeof i=="function"){var p=i;if(i=p(),Ri){We(!0);try{p()}finally{We(!1)}}}return c.memoizedState=c.baseState=i,c.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Lo,lastRenderedState:i},c}function CE(i,c,p,m){return i.baseState=p,fx(i,dn,typeof m=="function"?m:Lo)}function VZ(i,c,p,m,k){if(qp(i))throw Error(s(485));if(i=c.action,i!==null){var R={payload:k,action:i,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(L){R.listeners.push(L)}};U.T!==null?p(!0):R.isTransition=!1,m(R),p=c.pending,p===null?(R.next=c.pending=R,jE(c,R)):(R.next=p.next,c.pending=p.next=R)}}function jE(i,c){var p=c.action,m=c.payload,k=i.state;if(c.isTransition){var R=U.T,L={};U.T=L;try{var K=p(k,m),ie=U.S;ie!==null&&ie(L,K),EE(i,c,K)}catch(Ce){hx(i,c,Ce)}finally{R!==null&&L.types!==null&&(R.types=L.types),U.T=R}}else try{R=p(k,m),EE(i,c,R)}catch(Ce){hx(i,c,Ce)}}function EE(i,c,p){p!==null&&typeof p=="object"&&typeof p.then=="function"?p.then(function(m){RE(i,c,m)},function(m){return hx(i,c,m)}):RE(i,c,p)}function RE(i,c,p){c.status="fulfilled",c.value=p,AE(c),i.state=p,c=i.pending,c!==null&&(p=c.next,p===c?i.pending=null:(p=p.next,c.next=p,jE(i,p)))}function hx(i,c,p){var m=i.pending;if(i.pending=null,m!==null){m=m.next;do c.status="rejected",c.reason=p,AE(c),c=c.next;while(c!==m)}i.action=null}function AE(i){i=i.listeners;for(var c=0;c<i.length;c++)(0,i[c])()}function TE(i,c){return c}function $E(i,c){if(qt){var p=pn.formState;if(p!==null){e:{var m=$t;if(qt){if(yn){t:{for(var k=yn,R=hr;k.nodeType!==8;){if(!R){k=null;break t}if(k=yr(k.nextSibling),k===null){k=null;break t}}R=k.data,k=R==="F!"||R==="F"?k:null}if(k){yn=yr(k.nextSibling),m=k.data==="F!";break e}}ma(m)}m=!1}m&&(c=p[0])}}return p=Es(),p.memoizedState=p.baseState=c,m={pending:null,lanes:0,dispatch:null,lastRenderedReducer:TE,lastRenderedState:c},p.queue=m,p=XE.bind(null,$t,m),m.dispatch=p,m=gx(!1),R=wx.bind(null,$t,!1,m.queue),m=Es(),k={state:c,dispatch:null,action:i,pending:null},m.queue=k,p=VZ.bind(null,$t,k,R,p),k.dispatch=p,m.memoizedState=i,[c,p,!1]}function NE(i){var c=Bn();return DE(c,dn,i)}function DE(i,c,p){if(c=fx(i,c,TE)[0],i=Hp(Lo)[0],typeof c=="object"&&c!==null&&typeof c.then=="function")try{var m=Ld(c)}catch(L){throw L===Ol?$p:L}else m=c;c=Bn();var k=c.queue,R=k.dispatch;return p!==c.memoizedState&&($t.flags|=2048,Hl(9,{destroy:void 0},KZ.bind(null,k,p),null)),[m,R,i]}function KZ(i,c){i.action=c}function IE(i){var c=Bn(),p=dn;if(p!==null)return DE(c,p,i);Bn(),c=c.memoizedState,p=Bn();var m=p.queue.dispatch;return p.memoizedState=i,[c,m,!1]}function Hl(i,c,p,m){return i={tag:i,create:p,deps:m,inst:c,next:null},c=$t.updateQueue,c===null&&(c=Pp(),$t.updateQueue=c),p=c.lastEffect,p===null?c.lastEffect=i.next=i:(m=p.next,p.next=i,i.next=m,c.lastEffect=i),i}function LE(){return Bn().memoizedState}function Wp(i,c,p,m){var k=Es();$t.flags|=i,k.memoizedState=Hl(1|c,{destroy:void 0},p,m===void 0?null:m)}function Up(i,c,p,m){var k=Bn();m=m===void 0?null:m;var R=k.memoizedState.inst;dn!==null&&m!==null&&ax(m,dn.memoizedState.deps)?k.memoizedState=Hl(c,R,p,m):($t.flags|=i,k.memoizedState=Hl(1|c,R,p,m))}function OE(i,c){Wp(8390656,8,i,c)}function mx(i,c){Up(2048,8,i,c)}function GZ(i){$t.flags|=4;var c=$t.updateQueue;if(c===null)c=Pp(),$t.updateQueue=c,c.events=[i];else{var p=c.events;p===null?c.events=[i]:p.push(i)}}function ME(i){var c=Bn().memoizedState;return GZ({ref:c,nextImpl:i}),function(){if((Qt&2)!==0)throw Error(s(440));return c.impl.apply(void 0,arguments)}}function zE(i,c){return Up(4,2,i,c)}function PE(i,c){return Up(4,4,i,c)}function BE(i,c){if(typeof c=="function"){i=i();var p=c(i);return function(){typeof p=="function"?p():c(null)}}if(c!=null)return i=i(),c.current=i,function(){c.current=null}}function HE(i,c,p){p=p!=null?p.concat([i]):null,Up(4,4,BE.bind(null,c,i),p)}function yx(){}function WE(i,c){var p=Bn();c=c===void 0?null:c;var m=p.memoizedState;return c!==null&&ax(c,m[1])?m[0]:(p.memoizedState=[i,c],i)}function UE(i,c){var p=Bn();c=c===void 0?null:c;var m=p.memoizedState;if(c!==null&&ax(c,m[1]))return m[0];if(m=i(),Ri){We(!0);try{i()}finally{We(!1)}}return p.memoizedState=[m,c],m}function bx(i,c,p){return p===void 0||(Io&1073741824)!==0&&(Pt&261930)===0?i.memoizedState=c:(i.memoizedState=p,i=qR(),$t.lanes|=i,Ca|=i,p)}function qE(i,c,p,m){return Xs(p,c)?p:zl.current!==null?(i=bx(i,p,m),Xs(i,c)||(Vn=!0),i):(Io&42)===0||(Io&1073741824)!==0&&(Pt&261930)===0?(Vn=!0,i.memoizedState=p):(i=qR(),$t.lanes|=i,Ca|=i,c)}function FE(i,c,p,m,k){var R=B.p;B.p=R!==0&&8>R?R:8;var L=U.T,K={};U.T=K,wx(i,!1,c,p);try{var ie=k(),Ce=U.S;if(Ce!==null&&Ce(K,ie),ie!==null&&typeof ie=="object"&&typeof ie.then=="function"){var Ne=UZ(ie,m);Od(i,c,Ne,nr(i))}else Od(i,c,m,nr(i))}catch(ze){Od(i,c,{then:function(){},status:"rejected",reason:ze},nr())}finally{B.p=R,L!==null&&K.types!==null&&(L.types=K.types),U.T=L}}function YZ(){}function xx(i,c,p,m){if(i.tag!==5)throw Error(s(476));var k=VE(i).queue;FE(i,k,c,te,p===null?YZ:function(){return KE(i),p(m)})}function VE(i){var c=i.memoizedState;if(c!==null)return c;c={memoizedState:te,baseState:te,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Lo,lastRenderedState:te},next:null};var p={};return c.next={memoizedState:p,baseState:p,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Lo,lastRenderedState:p},next:null},i.memoizedState=c,i=i.alternate,i!==null&&(i.memoizedState=c),c}function KE(i){var c=VE(i);c.next===null&&(c=i.alternate.memoizedState),Od(i,c.next.queue,{},nr())}function vx(){return fs(Qd)}function GE(){return Bn().memoizedState}function YE(){return Bn().memoizedState}function XZ(i){for(var c=i.return;c!==null;){switch(c.tag){case 24:case 3:var p=nr();i=xa(p);var m=va(c,i,p);m!==null&&(Hs(m,c,p),$d(m,c,p)),c={cache:Yb()},i.payload=c;return}c=c.return}}function JZ(i,c,p){var m=nr();p={lane:m,revertLane:0,gesture:null,action:p,hasEagerState:!1,eagerState:null,next:null},qp(i)?JE(c,p):(p=zb(i,c,p,m),p!==null&&(Hs(p,i,m),ZE(p,c,m)))}function XE(i,c,p){var m=nr();Od(i,c,p,m)}function Od(i,c,p,m){var k={lane:m,revertLane:0,gesture:null,action:p,hasEagerState:!1,eagerState:null,next:null};if(qp(i))JE(c,k);else{var R=i.alternate;if(i.lanes===0&&(R===null||R.lanes===0)&&(R=c.lastRenderedReducer,R!==null))try{var L=c.lastRenderedState,K=R(L,p);if(k.hasEagerState=!0,k.eagerState=K,Xs(K,L))return kp(i,c,k,0),pn===null&&Sp(),!1}catch{}if(p=zb(i,c,k,m),p!==null)return Hs(p,i,m),ZE(p,c,m),!0}return!1}function wx(i,c,p,m){if(m={lane:2,revertLane:Qx(),gesture:null,action:m,hasEagerState:!1,eagerState:null,next:null},qp(i)){if(c)throw Error(s(479))}else c=zb(i,p,m,2),c!==null&&Hs(c,i,2)}function qp(i){var c=i.alternate;return i===$t||c!==null&&c===$t}function JE(i,c){Pl=Mp=!0;var p=i.pending;p===null?c.next=c:(c.next=p.next,p.next=c),i.pending=c}function ZE(i,c,p){if((p&4194048)!==0){var m=c.lanes;m&=i.pendingLanes,p|=m,c.lanes=p,pt(i,p)}}var Md={readContext:fs,use:Bp,useCallback:In,useContext:In,useEffect:In,useImperativeHandle:In,useLayoutEffect:In,useInsertionEffect:In,useMemo:In,useReducer:In,useRef:In,useState:In,useDebugValue:In,useDeferredValue:In,useTransition:In,useSyncExternalStore:In,useId:In,useHostTransitionStatus:In,useFormState:In,useActionState:In,useOptimistic:In,useMemoCache:In,useCacheRefresh:In};Md.useEffectEvent=In;var QE={readContext:fs,use:Bp,useCallback:function(i,c){return Es().memoizedState=[i,c===void 0?null:c],i},useContext:fs,useEffect:OE,useImperativeHandle:function(i,c,p){p=p!=null?p.concat([i]):null,Wp(4194308,4,BE.bind(null,c,i),p)},useLayoutEffect:function(i,c){return Wp(4194308,4,i,c)},useInsertionEffect:function(i,c){Wp(4,2,i,c)},useMemo:function(i,c){var p=Es();c=c===void 0?null:c;var m=i();if(Ri){We(!0);try{i()}finally{We(!1)}}return p.memoizedState=[m,c],m},useReducer:function(i,c,p){var m=Es();if(p!==void 0){var k=p(c);if(Ri){We(!0);try{p(c)}finally{We(!1)}}}else k=c;return m.memoizedState=m.baseState=k,i={pending:null,lanes:0,dispatch:null,lastRenderedReducer:i,lastRenderedState:k},m.queue=i,i=i.dispatch=JZ.bind(null,$t,i),[m.memoizedState,i]},useRef:function(i){var c=Es();return i={current:i},c.memoizedState=i},useState:function(i){i=gx(i);var c=i.queue,p=XE.bind(null,$t,c);return c.dispatch=p,[i.memoizedState,p]},useDebugValue:yx,useDeferredValue:function(i,c){var p=Es();return bx(p,i,c)},useTransition:function(){var i=gx(!1);return i=FE.bind(null,$t,i.queue,!0,!1),Es().memoizedState=i,[!1,i]},useSyncExternalStore:function(i,c,p){var m=$t,k=Es();if(qt){if(p===void 0)throw Error(s(407));p=p()}else{if(p=c(),pn===null)throw Error(s(349));(Pt&127)!==0||vE(m,c,p)}k.memoizedState=p;var R={value:p,getSnapshot:c};return k.queue=R,OE(_E.bind(null,m,R,i),[i]),m.flags|=2048,Hl(9,{destroy:void 0},wE.bind(null,m,R,p,c),null),p},useId:function(){var i=Es(),c=pn.identifierPrefix;if(qt){var p=lo,m=io;p=(m&~(1<<32-Q(m)-1)).toString(32)+p,c="_"+c+"R_"+p,p=zp++,0<p&&(c+="H"+p.toString(32)),c+="_"}else p=qZ++,c="_"+c+"r_"+p.toString(32)+"_";return i.memoizedState=c},useHostTransitionStatus:vx,useFormState:$E,useActionState:$E,useOptimistic:function(i){var c=Es();c.memoizedState=c.baseState=i;var p={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return c.queue=p,c=wx.bind(null,$t,!0,p),p.dispatch=c,[i,c]},useMemoCache:ux,useCacheRefresh:function(){return Es().memoizedState=XZ.bind(null,$t)},useEffectEvent:function(i){var c=Es(),p={impl:i};return c.memoizedState=p,function(){if((Qt&2)!==0)throw Error(s(440));return p.impl.apply(void 0,arguments)}}},_x={readContext:fs,use:Bp,useCallback:WE,useContext:fs,useEffect:mx,useImperativeHandle:HE,useInsertionEffect:zE,useLayoutEffect:PE,useMemo:UE,useReducer:Hp,useRef:LE,useState:function(){return Hp(Lo)},useDebugValue:yx,useDeferredValue:function(i,c){var p=Bn();return qE(p,dn.memoizedState,i,c)},useTransition:function(){var i=Hp(Lo)[0],c=Bn().memoizedState;return[typeof i=="boolean"?i:Ld(i),c]},useSyncExternalStore:xE,useId:GE,useHostTransitionStatus:vx,useFormState:NE,useActionState:NE,useOptimistic:function(i,c){var p=Bn();return CE(p,dn,i,c)},useMemoCache:ux,useCacheRefresh:YE};_x.useEffectEvent=ME;var eR={readContext:fs,use:Bp,useCallback:WE,useContext:fs,useEffect:mx,useImperativeHandle:HE,useInsertionEffect:zE,useLayoutEffect:PE,useMemo:UE,useReducer:px,useRef:LE,useState:function(){return px(Lo)},useDebugValue:yx,useDeferredValue:function(i,c){var p=Bn();return dn===null?bx(p,i,c):qE(p,dn.memoizedState,i,c)},useTransition:function(){var i=px(Lo)[0],c=Bn().memoizedState;return[typeof i=="boolean"?i:Ld(i),c]},useSyncExternalStore:xE,useId:GE,useHostTransitionStatus:vx,useFormState:IE,useActionState:IE,useOptimistic:function(i,c){var p=Bn();return dn!==null?CE(p,dn,i,c):(p.baseState=i,[i,p.queue.dispatch])},useMemoCache:ux,useCacheRefresh:YE};eR.useEffectEvent=ME;function Sx(i,c,p,m){c=i.memoizedState,p=p(m,c),p=p==null?c:h({},c,p),i.memoizedState=p,i.lanes===0&&(i.updateQueue.baseState=p)}var kx={enqueueSetState:function(i,c,p){i=i._reactInternals;var m=nr(),k=xa(m);k.payload=c,p!=null&&(k.callback=p),c=va(i,k,m),c!==null&&(Hs(c,i,m),$d(c,i,m))},enqueueReplaceState:function(i,c,p){i=i._reactInternals;var m=nr(),k=xa(m);k.tag=1,k.payload=c,p!=null&&(k.callback=p),c=va(i,k,m),c!==null&&(Hs(c,i,m),$d(c,i,m))},enqueueForceUpdate:function(i,c){i=i._reactInternals;var p=nr(),m=xa(p);m.tag=2,c!=null&&(m.callback=c),c=va(i,m,p),c!==null&&(Hs(c,i,p),$d(c,i,p))}};function tR(i,c,p,m,k,R,L){return i=i.stateNode,typeof i.shouldComponentUpdate=="function"?i.shouldComponentUpdate(m,R,L):c.prototype&&c.prototype.isPureReactComponent?!Sd(p,m)||!Sd(k,R):!0}function nR(i,c,p,m){i=c.state,typeof c.componentWillReceiveProps=="function"&&c.componentWillReceiveProps(p,m),typeof c.UNSAFE_componentWillReceiveProps=="function"&&c.UNSAFE_componentWillReceiveProps(p,m),c.state!==i&&kx.enqueueReplaceState(c,c.state,null)}function Ai(i,c){var p=c;if("ref"in c){p={};for(var m in c)m!=="ref"&&(p[m]=c[m])}if(i=i.defaultProps){p===c&&(p=h({},p));for(var k in i)p[k]===void 0&&(p[k]=i[k])}return p}function sR(i){_p(i)}function rR(i){console.error(i)}function oR(i){_p(i)}function Fp(i,c){try{var p=i.onUncaughtError;p(c.value,{componentStack:c.stack})}catch(m){setTimeout(function(){throw m})}}function aR(i,c,p){try{var m=i.onCaughtError;m(p.value,{componentStack:p.stack,errorBoundary:c.tag===1?c.stateNode:null})}catch(k){setTimeout(function(){throw k})}}function Cx(i,c,p){return p=xa(p),p.tag=3,p.payload={element:null},p.callback=function(){Fp(i,c)},p}function iR(i){return i=xa(i),i.tag=3,i}function lR(i,c,p,m){var k=p.type.getDerivedStateFromError;if(typeof k=="function"){var R=m.value;i.payload=function(){return k(R)},i.callback=function(){aR(c,p,m)}}var L=p.stateNode;L!==null&&typeof L.componentDidCatch=="function"&&(i.callback=function(){aR(c,p,m),typeof k!="function"&&(ja===null?ja=new Set([this]):ja.add(this));var K=m.stack;this.componentDidCatch(m.value,{componentStack:K!==null?K:""})})}function ZZ(i,c,p,m,k){if(p.flags|=32768,m!==null&&typeof m=="object"&&typeof m.then=="function"){if(c=p.alternate,c!==null&&Dl(c,p,k,!0),p=Zs.current,p!==null){switch(p.tag){case 31:case 13:return mr===null?sg():p.alternate===null&&Ln===0&&(Ln=3),p.flags&=-257,p.flags|=65536,p.lanes=k,m===Np?p.flags|=16384:(c=p.updateQueue,c===null?p.updateQueue=new Set([m]):c.add(m),Xx(i,m,k)),!1;case 22:return p.flags|=65536,m===Np?p.flags|=16384:(c=p.updateQueue,c===null?(c={transitions:null,markerInstances:null,retryQueue:new Set([m])},p.updateQueue=c):(p=c.retryQueue,p===null?c.retryQueue=new Set([m]):p.add(m)),Xx(i,m,k)),!1}throw Error(s(435,p.tag))}return Xx(i,m,k),sg(),!1}if(qt)return c=Zs.current,c!==null?((c.flags&65536)===0&&(c.flags|=256),c.flags|=65536,c.lanes=k,m!==qb&&(i=Error(s(422),{cause:m}),jd(fr(i,p)))):(m!==qb&&(c=Error(s(423),{cause:m}),jd(fr(c,p))),i=i.current.alternate,i.flags|=65536,k&=-k,i.lanes|=k,m=fr(m,p),k=Cx(i.stateNode,m,k),tx(i,k),Ln!==4&&(Ln=2)),!1;var R=Error(s(520),{cause:m});if(R=fr(R,p),Fd===null?Fd=[R]:Fd.push(R),Ln!==4&&(Ln=2),c===null)return!0;m=fr(m,p),p=c;do{switch(p.tag){case 3:return p.flags|=65536,i=k&-k,p.lanes|=i,i=Cx(p.stateNode,m,i),tx(p,i),!1;case 1:if(c=p.type,R=p.stateNode,(p.flags&128)===0&&(typeof c.getDerivedStateFromError=="function"||R!==null&&typeof R.componentDidCatch=="function"&&(ja===null||!ja.has(R))))return p.flags|=65536,k&=-k,p.lanes|=k,k=iR(k),lR(k,i,p,m),tx(p,k),!1}p=p.return}while(p!==null);return!1}var jx=Error(s(461)),Vn=!1;function ps(i,c,p,m){c.child=i===null?fE(c,null,p,m):Ei(c,i.child,p,m)}function cR(i,c,p,m,k){p=p.render;var R=c.ref;if("ref"in m){var L={};for(var K in m)K!=="ref"&&(L[K]=m[K])}else L=m;return Si(c),m=ix(i,c,p,L,R,k),K=lx(),i!==null&&!Vn?(cx(i,c,k),Oo(i,c,k)):(qt&&K&&Wb(c),c.flags|=1,ps(i,c,m,k),c.child)}function dR(i,c,p,m,k){if(i===null){var R=p.type;return typeof R=="function"&&!Pb(R)&&R.defaultProps===void 0&&p.compare===null?(c.tag=15,c.type=R,uR(i,c,R,m,k)):(i=jp(p.type,null,m,c,c.mode,k),i.ref=c.ref,i.return=c,c.child=i)}if(R=i.child,!Ix(i,k)){var L=R.memoizedProps;if(p=p.compare,p=p!==null?p:Sd,p(L,m)&&i.ref===c.ref)return Oo(i,c,k)}return c.flags|=1,i=To(R,m),i.ref=c.ref,i.return=c,c.child=i}function uR(i,c,p,m,k){if(i!==null){var R=i.memoizedProps;if(Sd(R,m)&&i.ref===c.ref)if(Vn=!1,c.pendingProps=m=R,Ix(i,k))(i.flags&131072)!==0&&(Vn=!0);else return c.lanes=i.lanes,Oo(i,c,k)}return Ex(i,c,p,m,k)}function fR(i,c,p,m){var k=m.children,R=i!==null?i.memoizedState:null;if(i===null&&c.stateNode===null&&(c.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),m.mode==="hidden"){if((c.flags&128)!==0){if(R=R!==null?R.baseLanes|p:p,i!==null){for(m=c.child=i.child,k=0;m!==null;)k=k|m.lanes|m.childLanes,m=m.sibling;m=k&~R}else m=0,c.child=null;return pR(i,c,R,p,m)}if((p&536870912)!==0)c.memoizedState={baseLanes:0,cachePool:null},i!==null&&Tp(c,R!==null?R.cachePool:null),R!==null?hE(c,R):sx(),mE(c);else return m=c.lanes=536870912,pR(i,c,R!==null?R.baseLanes|p:p,p,m)}else R!==null?(Tp(c,R.cachePool),hE(c,R),_a(),c.memoizedState=null):(i!==null&&Tp(c,null),sx(),_a());return ps(i,c,k,p),c.child}function zd(i,c){return i!==null&&i.tag===22||c.stateNode!==null||(c.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),c.sibling}function pR(i,c,p,m,k){var R=Jb();return R=R===null?null:{parent:qn._currentValue,pool:R},c.memoizedState={baseLanes:p,cachePool:R},i!==null&&Tp(c,null),sx(),mE(c),i!==null&&Dl(i,c,m,!0),c.childLanes=k,null}function Vp(i,c){return c=Gp({mode:c.mode,children:c.children},i.mode),c.ref=i.ref,i.child=c,c.return=i,c}function gR(i,c,p){return Ei(c,i.child,null,p),i=Vp(c,c.pendingProps),i.flags|=2,Qs(c),c.memoizedState=null,i}function QZ(i,c,p){var m=c.pendingProps,k=(c.flags&128)!==0;if(c.flags&=-129,i===null){if(qt){if(m.mode==="hidden")return i=Vp(c,m),c.lanes=536870912,zd(null,i);if(ox(c),(i=yn)?(i=jA(i,hr),i=i!==null&&i.data==="&"?i:null,i!==null&&(c.memoizedState={dehydrated:i,treeContext:ga!==null?{id:io,overflow:lo}:null,retryLane:536870912,hydrationErrors:null},p=Jj(i),p.return=c,c.child=p,us=c,yn=null)):i=null,i===null)throw ma(c);return c.lanes=536870912,null}return Vp(c,m)}var R=i.memoizedState;if(R!==null){var L=R.dehydrated;if(ox(c),k)if(c.flags&256)c.flags&=-257,c=gR(i,c,p);else if(c.memoizedState!==null)c.child=i.child,c.flags|=128,c=null;else throw Error(s(558));else if(Vn||Dl(i,c,p,!1),k=(p&i.childLanes)!==0,Vn||k){if(m=pn,m!==null&&(L=Lt(m,p),L!==0&&L!==R.retryLane))throw R.retryLane=L,xi(i,L),Hs(m,i,L),jx;sg(),c=gR(i,c,p)}else i=R.treeContext,yn=yr(L.nextSibling),us=c,qt=!0,ha=null,hr=!1,i!==null&&eE(c,i),c=Vp(c,m),c.flags|=4096;return c}return i=To(i.child,{mode:m.mode,children:m.children}),i.ref=c.ref,c.child=i,i.return=c,i}function Kp(i,c){var p=c.ref;if(p===null)i!==null&&i.ref!==null&&(c.flags|=4194816);else{if(typeof p!="function"&&typeof p!="object")throw Error(s(284));(i===null||i.ref!==p)&&(c.flags|=4194816)}}function Ex(i,c,p,m,k){return Si(c),p=ix(i,c,p,m,void 0,k),m=lx(),i!==null&&!Vn?(cx(i,c,k),Oo(i,c,k)):(qt&&m&&Wb(c),c.flags|=1,ps(i,c,p,k),c.child)}function hR(i,c,p,m,k,R){return Si(c),c.updateQueue=null,p=bE(c,m,p,k),yE(i),m=lx(),i!==null&&!Vn?(cx(i,c,R),Oo(i,c,R)):(qt&&m&&Wb(c),c.flags|=1,ps(i,c,p,R),c.child)}function mR(i,c,p,m,k){if(Si(c),c.stateNode===null){var R=Al,L=p.contextType;typeof L=="object"&&L!==null&&(R=fs(L)),R=new p(m,R),c.memoizedState=R.state!==null&&R.state!==void 0?R.state:null,R.updater=kx,c.stateNode=R,R._reactInternals=c,R=c.stateNode,R.props=m,R.state=c.memoizedState,R.refs={},Qb(c),L=p.contextType,R.context=typeof L=="object"&&L!==null?fs(L):Al,R.state=c.memoizedState,L=p.getDerivedStateFromProps,typeof L=="function"&&(Sx(c,p,L,m),R.state=c.memoizedState),typeof p.getDerivedStateFromProps=="function"||typeof R.getSnapshotBeforeUpdate=="function"||typeof R.UNSAFE_componentWillMount!="function"&&typeof R.componentWillMount!="function"||(L=R.state,typeof R.componentWillMount=="function"&&R.componentWillMount(),typeof R.UNSAFE_componentWillMount=="function"&&R.UNSAFE_componentWillMount(),L!==R.state&&kx.enqueueReplaceState(R,R.state,null),Dd(c,m,R,k),Nd(),R.state=c.memoizedState),typeof R.componentDidMount=="function"&&(c.flags|=4194308),m=!0}else if(i===null){R=c.stateNode;var K=c.memoizedProps,ie=Ai(p,K);R.props=ie;var Ce=R.context,Ne=p.contextType;L=Al,typeof Ne=="object"&&Ne!==null&&(L=fs(Ne));var ze=p.getDerivedStateFromProps;Ne=typeof ze=="function"||typeof R.getSnapshotBeforeUpdate=="function",K=c.pendingProps!==K,Ne||typeof R.UNSAFE_componentWillReceiveProps!="function"&&typeof R.componentWillReceiveProps!="function"||(K||Ce!==L)&&nR(c,R,m,L),ba=!1;var Ee=c.memoizedState;R.state=Ee,Dd(c,m,R,k),Nd(),Ce=c.memoizedState,K||Ee!==Ce||ba?(typeof ze=="function"&&(Sx(c,p,ze,m),Ce=c.memoizedState),(ie=ba||tR(c,p,ie,m,Ee,Ce,L))?(Ne||typeof R.UNSAFE_componentWillMount!="function"&&typeof R.componentWillMount!="function"||(typeof R.componentWillMount=="function"&&R.componentWillMount(),typeof R.UNSAFE_componentWillMount=="function"&&R.UNSAFE_componentWillMount()),typeof R.componentDidMount=="function"&&(c.flags|=4194308)):(typeof R.componentDidMount=="function"&&(c.flags|=4194308),c.memoizedProps=m,c.memoizedState=Ce),R.props=m,R.state=Ce,R.context=L,m=ie):(typeof R.componentDidMount=="function"&&(c.flags|=4194308),m=!1)}else{R=c.stateNode,ex(i,c),L=c.memoizedProps,Ne=Ai(p,L),R.props=Ne,ze=c.pendingProps,Ee=R.context,Ce=p.contextType,ie=Al,typeof Ce=="object"&&Ce!==null&&(ie=fs(Ce)),K=p.getDerivedStateFromProps,(Ce=typeof K=="function"||typeof R.getSnapshotBeforeUpdate=="function")||typeof R.UNSAFE_componentWillReceiveProps!="function"&&typeof R.componentWillReceiveProps!="function"||(L!==ze||Ee!==ie)&&nR(c,R,m,ie),ba=!1,Ee=c.memoizedState,R.state=Ee,Dd(c,m,R,k),Nd();var Te=c.memoizedState;L!==ze||Ee!==Te||ba||i!==null&&i.dependencies!==null&&Rp(i.dependencies)?(typeof K=="function"&&(Sx(c,p,K,m),Te=c.memoizedState),(Ne=ba||tR(c,p,Ne,m,Ee,Te,ie)||i!==null&&i.dependencies!==null&&Rp(i.dependencies))?(Ce||typeof R.UNSAFE_componentWillUpdate!="function"&&typeof R.componentWillUpdate!="function"||(typeof R.componentWillUpdate=="function"&&R.componentWillUpdate(m,Te,ie),typeof R.UNSAFE_componentWillUpdate=="function"&&R.UNSAFE_componentWillUpdate(m,Te,ie)),typeof R.componentDidUpdate=="function"&&(c.flags|=4),typeof R.getSnapshotBeforeUpdate=="function"&&(c.flags|=1024)):(typeof R.componentDidUpdate!="function"||L===i.memoizedProps&&Ee===i.memoizedState||(c.flags|=4),typeof R.getSnapshotBeforeUpdate!="function"||L===i.memoizedProps&&Ee===i.memoizedState||(c.flags|=1024),c.memoizedProps=m,c.memoizedState=Te),R.props=m,R.state=Te,R.context=ie,m=Ne):(typeof R.componentDidUpdate!="function"||L===i.memoizedProps&&Ee===i.memoizedState||(c.flags|=4),typeof R.getSnapshotBeforeUpdate!="function"||L===i.memoizedProps&&Ee===i.memoizedState||(c.flags|=1024),m=!1)}return R=m,Kp(i,c),m=(c.flags&128)!==0,R||m?(R=c.stateNode,p=m&&typeof p.getDerivedStateFromError!="function"?null:R.render(),c.flags|=1,i!==null&&m?(c.child=Ei(c,i.child,null,k),c.child=Ei(c,null,p,k)):ps(i,c,p,k),c.memoizedState=R.state,i=c.child):i=Oo(i,c,k),i}function yR(i,c,p,m){return wi(),c.flags|=256,ps(i,c,p,m),c.child}var Rx={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Ax(i){return{baseLanes:i,cachePool:aE()}}function Tx(i,c,p){return i=i!==null?i.childLanes&~p:0,c&&(i|=tr),i}function bR(i,c,p){var m=c.pendingProps,k=!1,R=(c.flags&128)!==0,L;if((L=R)||(L=i!==null&&i.memoizedState===null?!1:(Pn.current&2)!==0),L&&(k=!0,c.flags&=-129),L=(c.flags&32)!==0,c.flags&=-33,i===null){if(qt){if(k?wa(c):_a(),(i=yn)?(i=jA(i,hr),i=i!==null&&i.data!=="&"?i:null,i!==null&&(c.memoizedState={dehydrated:i,treeContext:ga!==null?{id:io,overflow:lo}:null,retryLane:536870912,hydrationErrors:null},p=Jj(i),p.return=c,c.child=p,us=c,yn=null)):i=null,i===null)throw ma(c);return fv(i)?c.lanes=32:c.lanes=536870912,null}var K=m.children;return m=m.fallback,k?(_a(),k=c.mode,K=Gp({mode:"hidden",children:K},k),m=vi(m,k,p,null),K.return=c,m.return=c,K.sibling=m,c.child=K,m=c.child,m.memoizedState=Ax(p),m.childLanes=Tx(i,L,p),c.memoizedState=Rx,zd(null,m)):(wa(c),$x(c,K))}var ie=i.memoizedState;if(ie!==null&&(K=ie.dehydrated,K!==null)){if(R)c.flags&256?(wa(c),c.flags&=-257,c=Nx(i,c,p)):c.memoizedState!==null?(_a(),c.child=i.child,c.flags|=128,c=null):(_a(),K=m.fallback,k=c.mode,m=Gp({mode:"visible",children:m.children},k),K=vi(K,k,p,null),K.flags|=2,m.return=c,K.return=c,m.sibling=K,c.child=m,Ei(c,i.child,null,p),m=c.child,m.memoizedState=Ax(p),m.childLanes=Tx(i,L,p),c.memoizedState=Rx,c=zd(null,m));else if(wa(c),fv(K)){if(L=K.nextSibling&&K.nextSibling.dataset,L)var Ce=L.dgst;L=Ce,m=Error(s(419)),m.stack="",m.digest=L,jd({value:m,source:null,stack:null}),c=Nx(i,c,p)}else if(Vn||Dl(i,c,p,!1),L=(p&i.childLanes)!==0,Vn||L){if(L=pn,L!==null&&(m=Lt(L,p),m!==0&&m!==ie.retryLane))throw ie.retryLane=m,xi(i,m),Hs(L,i,m),jx;uv(K)||sg(),c=Nx(i,c,p)}else uv(K)?(c.flags|=192,c.child=i.child,c=null):(i=ie.treeContext,yn=yr(K.nextSibling),us=c,qt=!0,ha=null,hr=!1,i!==null&&eE(c,i),c=$x(c,m.children),c.flags|=4096);return c}return k?(_a(),K=m.fallback,k=c.mode,ie=i.child,Ce=ie.sibling,m=To(ie,{mode:"hidden",children:m.children}),m.subtreeFlags=ie.subtreeFlags&65011712,Ce!==null?K=To(Ce,K):(K=vi(K,k,p,null),K.flags|=2),K.return=c,m.return=c,m.sibling=K,c.child=m,zd(null,m),m=c.child,K=i.child.memoizedState,K===null?K=Ax(p):(k=K.cachePool,k!==null?(ie=qn._currentValue,k=k.parent!==ie?{parent:ie,pool:ie}:k):k=aE(),K={baseLanes:K.baseLanes|p,cachePool:k}),m.memoizedState=K,m.childLanes=Tx(i,L,p),c.memoizedState=Rx,zd(i.child,m)):(wa(c),p=i.child,i=p.sibling,p=To(p,{mode:"visible",children:m.children}),p.return=c,p.sibling=null,i!==null&&(L=c.deletions,L===null?(c.deletions=[i],c.flags|=16):L.push(i)),c.child=p,c.memoizedState=null,p)}function $x(i,c){return c=Gp({mode:"visible",children:c},i.mode),c.return=i,i.child=c}function Gp(i,c){return i=Js(22,i,null,c),i.lanes=0,i}function Nx(i,c,p){return Ei(c,i.child,null,p),i=$x(c,c.pendingProps.children),i.flags|=2,c.memoizedState=null,i}function xR(i,c,p){i.lanes|=c;var m=i.alternate;m!==null&&(m.lanes|=c),Kb(i.return,c,p)}function Dx(i,c,p,m,k,R){var L=i.memoizedState;L===null?i.memoizedState={isBackwards:c,rendering:null,renderingStartTime:0,last:m,tail:p,tailMode:k,treeForkCount:R}:(L.isBackwards=c,L.rendering=null,L.renderingStartTime=0,L.last=m,L.tail=p,L.tailMode=k,L.treeForkCount=R)}function vR(i,c,p){var m=c.pendingProps,k=m.revealOrder,R=m.tail;m=m.children;var L=Pn.current,K=(L&2)!==0;if(K?(L=L&1|2,c.flags|=128):L&=1,ee(Pn,L),ps(i,c,m,p),m=qt?Cd:0,!K&&i!==null&&(i.flags&128)!==0)e:for(i=c.child;i!==null;){if(i.tag===13)i.memoizedState!==null&&xR(i,p,c);else if(i.tag===19)xR(i,p,c);else if(i.child!==null){i.child.return=i,i=i.child;continue}if(i===c)break e;for(;i.sibling===null;){if(i.return===null||i.return===c)break e;i=i.return}i.sibling.return=i.return,i=i.sibling}switch(k){case"forwards":for(p=c.child,k=null;p!==null;)i=p.alternate,i!==null&&Op(i)===null&&(k=p),p=p.sibling;p=k,p===null?(k=c.child,c.child=null):(k=p.sibling,p.sibling=null),Dx(c,!1,k,p,R,m);break;case"backwards":case"unstable_legacy-backwards":for(p=null,k=c.child,c.child=null;k!==null;){if(i=k.alternate,i!==null&&Op(i)===null){c.child=k;break}i=k.sibling,k.sibling=p,p=k,k=i}Dx(c,!0,p,null,R,m);break;case"together":Dx(c,!1,null,null,void 0,m);break;default:c.memoizedState=null}return c.child}function Oo(i,c,p){if(i!==null&&(c.dependencies=i.dependencies),Ca|=c.lanes,(p&c.childLanes)===0)if(i!==null){if(Dl(i,c,p,!1),(p&c.childLanes)===0)return null}else return null;if(i!==null&&c.child!==i.child)throw Error(s(153));if(c.child!==null){for(i=c.child,p=To(i,i.pendingProps),c.child=p,p.return=c;i.sibling!==null;)i=i.sibling,p=p.sibling=To(i,i.pendingProps),p.return=c;p.sibling=null}return c.child}function Ix(i,c){return(i.lanes&c)!==0?!0:(i=i.dependencies,!!(i!==null&&Rp(i)))}function eQ(i,c,p){switch(c.tag){case 3:me(c,c.stateNode.containerInfo),ya(c,qn,i.memoizedState.cache),wi();break;case 27:case 5:be(c);break;case 4:me(c,c.stateNode.containerInfo);break;case 10:ya(c,c.type,c.memoizedProps.value);break;case 31:if(c.memoizedState!==null)return c.flags|=128,ox(c),null;break;case 13:var m=c.memoizedState;if(m!==null)return m.dehydrated!==null?(wa(c),c.flags|=128,null):(p&c.child.childLanes)!==0?bR(i,c,p):(wa(c),i=Oo(i,c,p),i!==null?i.sibling:null);wa(c);break;case 19:var k=(i.flags&128)!==0;if(m=(p&c.childLanes)!==0,m||(Dl(i,c,p,!1),m=(p&c.childLanes)!==0),k){if(m)return vR(i,c,p);c.flags|=128}if(k=c.memoizedState,k!==null&&(k.rendering=null,k.tail=null,k.lastEffect=null),ee(Pn,Pn.current),m)break;return null;case 22:return c.lanes=0,fR(i,c,p,c.pendingProps);case 24:ya(c,qn,i.memoizedState.cache)}return Oo(i,c,p)}function wR(i,c,p){if(i!==null)if(i.memoizedProps!==c.pendingProps)Vn=!0;else{if(!Ix(i,p)&&(c.flags&128)===0)return Vn=!1,eQ(i,c,p);Vn=(i.flags&131072)!==0}else Vn=!1,qt&&(c.flags&1048576)!==0&&Qj(c,Cd,c.index);switch(c.lanes=0,c.tag){case 16:e:{var m=c.pendingProps;if(i=Ci(c.elementType),c.type=i,typeof i=="function")Pb(i)?(m=Ai(i,m),c.tag=1,c=mR(null,c,i,m,p)):(c.tag=0,c=Ex(null,c,i,m,p));else{if(i!=null){var k=i.$$typeof;if(k===j){c.tag=11,c=cR(null,c,i,m,p);break e}else if(k===D){c.tag=14,c=dR(null,c,i,m,p);break e}}throw c=Z(i)||i,Error(s(306,c,""))}}return c;case 0:return Ex(i,c,c.type,c.pendingProps,p);case 1:return m=c.type,k=Ai(m,c.pendingProps),mR(i,c,m,k,p);case 3:e:{if(me(c,c.stateNode.containerInfo),i===null)throw Error(s(387));m=c.pendingProps;var R=c.memoizedState;k=R.element,ex(i,c),Dd(c,m,null,p);var L=c.memoizedState;if(m=L.cache,ya(c,qn,m),m!==R.cache&&Gb(c,[qn],p,!0),Nd(),m=L.element,R.isDehydrated)if(R={element:m,isDehydrated:!1,cache:L.cache},c.updateQueue.baseState=R,c.memoizedState=R,c.flags&256){c=yR(i,c,m,p);break e}else if(m!==k){k=fr(Error(s(424)),c),jd(k),c=yR(i,c,m,p);break e}else for(i=c.stateNode.containerInfo,i.nodeType===9?i=i.body:i=i.nodeName==="HTML"?i.ownerDocument.body:i,yn=yr(i.firstChild),us=c,qt=!0,ha=null,hr=!0,p=fE(c,null,m,p),c.child=p;p;)p.flags=p.flags&-3|4096,p=p.sibling;else{if(wi(),m===k){c=Oo(i,c,p);break e}ps(i,c,m,p)}c=c.child}return c;case 26:return Kp(i,c),i===null?(p=NA(c.type,null,c.pendingProps,null))?c.memoizedState=p:qt||(p=c.type,i=c.pendingProps,m=dg(pe.current).createElement(p),m[vn]=c,m[os]=i,gs(m,p,i),Nn(m),c.stateNode=m):c.memoizedState=NA(c.type,i.memoizedProps,c.pendingProps,i.memoizedState),null;case 27:return be(c),i===null&&qt&&(m=c.stateNode=AA(c.type,c.pendingProps,pe.current),us=c,hr=!0,k=yn,Ta(c.type)?(pv=k,yn=yr(m.firstChild)):yn=k),ps(i,c,c.pendingProps.children,p),Kp(i,c),i===null&&(c.flags|=4194304),c.child;case 5:return i===null&&qt&&((k=m=yn)&&(m=TQ(m,c.type,c.pendingProps,hr),m!==null?(c.stateNode=m,us=c,yn=yr(m.firstChild),hr=!1,k=!0):k=!1),k||ma(c)),be(c),k=c.type,R=c.pendingProps,L=i!==null?i.memoizedProps:null,m=R.children,lv(k,R)?m=null:L!==null&&lv(k,L)&&(c.flags|=32),c.memoizedState!==null&&(k=ix(i,c,FZ,null,null,p),Qd._currentValue=k),Kp(i,c),ps(i,c,m,p),c.child;case 6:return i===null&&qt&&((i=p=yn)&&(p=$Q(p,c.pendingProps,hr),p!==null?(c.stateNode=p,us=c,yn=null,i=!0):i=!1),i||ma(c)),null;case 13:return bR(i,c,p);case 4:return me(c,c.stateNode.containerInfo),m=c.pendingProps,i===null?c.child=Ei(c,null,m,p):ps(i,c,m,p),c.child;case 11:return cR(i,c,c.type,c.pendingProps,p);case 7:return ps(i,c,c.pendingProps,p),c.child;case 8:return ps(i,c,c.pendingProps.children,p),c.child;case 12:return ps(i,c,c.pendingProps.children,p),c.child;case 10:return m=c.pendingProps,ya(c,c.type,m.value),ps(i,c,m.children,p),c.child;case 9:return k=c.type._context,m=c.pendingProps.children,Si(c),k=fs(k),m=m(k),c.flags|=1,ps(i,c,m,p),c.child;case 14:return dR(i,c,c.type,c.pendingProps,p);case 15:return uR(i,c,c.type,c.pendingProps,p);case 19:return vR(i,c,p);case 31:return QZ(i,c,p);case 22:return fR(i,c,p,c.pendingProps);case 24:return Si(c),m=fs(qn),i===null?(k=Jb(),k===null&&(k=pn,R=Yb(),k.pooledCache=R,R.refCount++,R!==null&&(k.pooledCacheLanes|=p),k=R),c.memoizedState={parent:m,cache:k},Qb(c),ya(c,qn,k)):((i.lanes&p)!==0&&(ex(i,c),Dd(c,null,null,p),Nd()),k=i.memoizedState,R=c.memoizedState,k.parent!==m?(k={parent:m,cache:m},c.memoizedState=k,c.lanes===0&&(c.memoizedState=c.updateQueue.baseState=k),ya(c,qn,m)):(m=R.cache,ya(c,qn,m),m!==k.cache&&Gb(c,[qn],p,!0))),ps(i,c,c.pendingProps.children,p),c.child;case 29:throw c.pendingProps}throw Error(s(156,c.tag))}function Mo(i){i.flags|=4}function Lx(i,c,p,m,k){if((c=(i.mode&32)!==0)&&(c=!1),c){if(i.flags|=16777216,(k&335544128)===k)if(i.stateNode.complete)i.flags|=8192;else if(GR())i.flags|=8192;else throw ji=Np,Zb}else i.flags&=-16777217}function _R(i,c){if(c.type!=="stylesheet"||(c.state.loading&4)!==0)i.flags&=-16777217;else if(i.flags|=16777216,!MA(c))if(GR())i.flags|=8192;else throw ji=Np,Zb}function Yp(i,c){c!==null&&(i.flags|=4),i.flags&16384&&(c=i.tag!==22?tt():536870912,i.lanes|=c,Fl|=c)}function Pd(i,c){if(!qt)switch(i.tailMode){case"hidden":c=i.tail;for(var p=null;c!==null;)c.alternate!==null&&(p=c),c=c.sibling;p===null?i.tail=null:p.sibling=null;break;case"collapsed":p=i.tail;for(var m=null;p!==null;)p.alternate!==null&&(m=p),p=p.sibling;m===null?c||i.tail===null?i.tail=null:i.tail.sibling=null:m.sibling=null}}function bn(i){var c=i.alternate!==null&&i.alternate.child===i.child,p=0,m=0;if(c)for(var k=i.child;k!==null;)p|=k.lanes|k.childLanes,m|=k.subtreeFlags&65011712,m|=k.flags&65011712,k.return=i,k=k.sibling;else for(k=i.child;k!==null;)p|=k.lanes|k.childLanes,m|=k.subtreeFlags,m|=k.flags,k.return=i,k=k.sibling;return i.subtreeFlags|=m,i.childLanes=p,c}function tQ(i,c,p){var m=c.pendingProps;switch(Ub(c),c.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return bn(c),null;case 1:return bn(c),null;case 3:return p=c.stateNode,m=null,i!==null&&(m=i.memoizedState.cache),c.memoizedState.cache!==m&&(c.flags|=2048),Do(qn),ce(),p.pendingContext&&(p.context=p.pendingContext,p.pendingContext=null),(i===null||i.child===null)&&(Nl(c)?Mo(c):i===null||i.memoizedState.isDehydrated&&(c.flags&256)===0||(c.flags|=1024,Fb())),bn(c),null;case 26:var k=c.type,R=c.memoizedState;return i===null?(Mo(c),R!==null?(bn(c),_R(c,R)):(bn(c),Lx(c,k,null,m,p))):R?R!==i.memoizedState?(Mo(c),bn(c),_R(c,R)):(bn(c),c.flags&=-16777217):(i=i.memoizedProps,i!==m&&Mo(c),bn(c),Lx(c,k,i,m,p)),null;case 27:if(Be(c),p=pe.current,k=c.type,i!==null&&c.stateNode!=null)i.memoizedProps!==m&&Mo(c);else{if(!m){if(c.stateNode===null)throw Error(s(166));return bn(c),null}i=se.current,Nl(c)?tE(c):(i=AA(k,m,p),c.stateNode=i,Mo(c))}return bn(c),null;case 5:if(Be(c),k=c.type,i!==null&&c.stateNode!=null)i.memoizedProps!==m&&Mo(c);else{if(!m){if(c.stateNode===null)throw Error(s(166));return bn(c),null}if(R=se.current,Nl(c))tE(c);else{var L=dg(pe.current);switch(R){case 1:R=L.createElementNS("http://www.w3.org/2000/svg",k);break;case 2:R=L.createElementNS("http://www.w3.org/1998/Math/MathML",k);break;default:switch(k){case"svg":R=L.createElementNS("http://www.w3.org/2000/svg",k);break;case"math":R=L.createElementNS("http://www.w3.org/1998/Math/MathML",k);break;case"script":R=L.createElement("div"),R.innerHTML="<script><\/script>",R=R.removeChild(R.firstChild);break;case"select":R=typeof m.is=="string"?L.createElement("select",{is:m.is}):L.createElement("select"),m.multiple?R.multiple=!0:m.size&&(R.size=m.size);break;default:R=typeof m.is=="string"?L.createElement(k,{is:m.is}):L.createElement(k)}}R[vn]=c,R[os]=m;e:for(L=c.child;L!==null;){if(L.tag===5||L.tag===6)R.appendChild(L.stateNode);else if(L.tag!==4&&L.tag!==27&&L.child!==null){L.child.return=L,L=L.child;continue}if(L===c)break e;for(;L.sibling===null;){if(L.return===null||L.return===c)break e;L=L.return}L.sibling.return=L.return,L=L.sibling}c.stateNode=R;e:switch(gs(R,k,m),k){case"button":case"input":case"select":case"textarea":m=!!m.autoFocus;break e;case"img":m=!0;break e;default:m=!1}m&&Mo(c)}}return bn(c),Lx(c,c.type,i===null?null:i.memoizedProps,c.pendingProps,p),null;case 6:if(i&&c.stateNode!=null)i.memoizedProps!==m&&Mo(c);else{if(typeof m!="string"&&c.stateNode===null)throw Error(s(166));if(i=pe.current,Nl(c)){if(i=c.stateNode,p=c.memoizedProps,m=null,k=us,k!==null)switch(k.tag){case 27:case 5:m=k.memoizedProps}i[vn]=c,i=!!(i.nodeValue===p||m!==null&&m.suppressHydrationWarning===!0||bA(i.nodeValue,p)),i||ma(c,!0)}else i=dg(i).createTextNode(m),i[vn]=c,c.stateNode=i}return bn(c),null;case 31:if(p=c.memoizedState,i===null||i.memoizedState!==null){if(m=Nl(c),p!==null){if(i===null){if(!m)throw Error(s(318));if(i=c.memoizedState,i=i!==null?i.dehydrated:null,!i)throw Error(s(557));i[vn]=c}else wi(),(c.flags&128)===0&&(c.memoizedState=null),c.flags|=4;bn(c),i=!1}else p=Fb(),i!==null&&i.memoizedState!==null&&(i.memoizedState.hydrationErrors=p),i=!0;if(!i)return c.flags&256?(Qs(c),c):(Qs(c),null);if((c.flags&128)!==0)throw Error(s(558))}return bn(c),null;case 13:if(m=c.memoizedState,i===null||i.memoizedState!==null&&i.memoizedState.dehydrated!==null){if(k=Nl(c),m!==null&&m.dehydrated!==null){if(i===null){if(!k)throw Error(s(318));if(k=c.memoizedState,k=k!==null?k.dehydrated:null,!k)throw Error(s(317));k[vn]=c}else wi(),(c.flags&128)===0&&(c.memoizedState=null),c.flags|=4;bn(c),k=!1}else k=Fb(),i!==null&&i.memoizedState!==null&&(i.memoizedState.hydrationErrors=k),k=!0;if(!k)return c.flags&256?(Qs(c),c):(Qs(c),null)}return Qs(c),(c.flags&128)!==0?(c.lanes=p,c):(p=m!==null,i=i!==null&&i.memoizedState!==null,p&&(m=c.child,k=null,m.alternate!==null&&m.alternate.memoizedState!==null&&m.alternate.memoizedState.cachePool!==null&&(k=m.alternate.memoizedState.cachePool.pool),R=null,m.memoizedState!==null&&m.memoizedState.cachePool!==null&&(R=m.memoizedState.cachePool.pool),R!==k&&(m.flags|=2048)),p!==i&&p&&(c.child.flags|=8192),Yp(c,c.updateQueue),bn(c),null);case 4:return ce(),i===null&&sv(c.stateNode.containerInfo),bn(c),null;case 10:return Do(c.type),bn(c),null;case 19:if(V(Pn),m=c.memoizedState,m===null)return bn(c),null;if(k=(c.flags&128)!==0,R=m.rendering,R===null)if(k)Pd(m,!1);else{if(Ln!==0||i!==null&&(i.flags&128)!==0)for(i=c.child;i!==null;){if(R=Op(i),R!==null){for(c.flags|=128,Pd(m,!1),i=R.updateQueue,c.updateQueue=i,Yp(c,i),c.subtreeFlags=0,i=p,p=c.child;p!==null;)Xj(p,i),p=p.sibling;return ee(Pn,Pn.current&1|2),qt&&$o(c,m.treeForkCount),c.child}i=i.sibling}m.tail!==null&&Qe()>eg&&(c.flags|=128,k=!0,Pd(m,!1),c.lanes=4194304)}else{if(!k)if(i=Op(R),i!==null){if(c.flags|=128,k=!0,i=i.updateQueue,c.updateQueue=i,Yp(c,i),Pd(m,!0),m.tail===null&&m.tailMode==="hidden"&&!R.alternate&&!qt)return bn(c),null}else 2*Qe()-m.renderingStartTime>eg&&p!==536870912&&(c.flags|=128,k=!0,Pd(m,!1),c.lanes=4194304);m.isBackwards?(R.sibling=c.child,c.child=R):(i=m.last,i!==null?i.sibling=R:c.child=R,m.last=R)}return m.tail!==null?(i=m.tail,m.rendering=i,m.tail=i.sibling,m.renderingStartTime=Qe(),i.sibling=null,p=Pn.current,ee(Pn,k?p&1|2:p&1),qt&&$o(c,m.treeForkCount),i):(bn(c),null);case 22:case 23:return Qs(c),rx(),m=c.memoizedState!==null,i!==null?i.memoizedState!==null!==m&&(c.flags|=8192):m&&(c.flags|=8192),m?(p&536870912)!==0&&(c.flags&128)===0&&(bn(c),c.subtreeFlags&6&&(c.flags|=8192)):bn(c),p=c.updateQueue,p!==null&&Yp(c,p.retryQueue),p=null,i!==null&&i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(p=i.memoizedState.cachePool.pool),m=null,c.memoizedState!==null&&c.memoizedState.cachePool!==null&&(m=c.memoizedState.cachePool.pool),m!==p&&(c.flags|=2048),i!==null&&V(ki),null;case 24:return p=null,i!==null&&(p=i.memoizedState.cache),c.memoizedState.cache!==p&&(c.flags|=2048),Do(qn),bn(c),null;case 25:return null;case 30:return null}throw Error(s(156,c.tag))}function nQ(i,c){switch(Ub(c),c.tag){case 1:return i=c.flags,i&65536?(c.flags=i&-65537|128,c):null;case 3:return Do(qn),ce(),i=c.flags,(i&65536)!==0&&(i&128)===0?(c.flags=i&-65537|128,c):null;case 26:case 27:case 5:return Be(c),null;case 31:if(c.memoizedState!==null){if(Qs(c),c.alternate===null)throw Error(s(340));wi()}return i=c.flags,i&65536?(c.flags=i&-65537|128,c):null;case 13:if(Qs(c),i=c.memoizedState,i!==null&&i.dehydrated!==null){if(c.alternate===null)throw Error(s(340));wi()}return i=c.flags,i&65536?(c.flags=i&-65537|128,c):null;case 19:return V(Pn),null;case 4:return ce(),null;case 10:return Do(c.type),null;case 22:case 23:return Qs(c),rx(),i!==null&&V(ki),i=c.flags,i&65536?(c.flags=i&-65537|128,c):null;case 24:return Do(qn),null;case 25:return null;default:return null}}function SR(i,c){switch(Ub(c),c.tag){case 3:Do(qn),ce();break;case 26:case 27:case 5:Be(c);break;case 4:ce();break;case 31:c.memoizedState!==null&&Qs(c);break;case 13:Qs(c);break;case 19:V(Pn);break;case 10:Do(c.type);break;case 22:case 23:Qs(c),rx(),i!==null&&V(ki);break;case 24:Do(qn)}}function Bd(i,c){try{var p=c.updateQueue,m=p!==null?p.lastEffect:null;if(m!==null){var k=m.next;p=k;do{if((p.tag&i)===i){m=void 0;var R=p.create,L=p.inst;m=R(),L.destroy=m}p=p.next}while(p!==k)}}catch(K){cn(c,c.return,K)}}function Sa(i,c,p){try{var m=c.updateQueue,k=m!==null?m.lastEffect:null;if(k!==null){var R=k.next;m=R;do{if((m.tag&i)===i){var L=m.inst,K=L.destroy;if(K!==void 0){L.destroy=void 0,k=c;var ie=p,Ce=K;try{Ce()}catch(Ne){cn(k,ie,Ne)}}}m=m.next}while(m!==R)}}catch(Ne){cn(c,c.return,Ne)}}function kR(i){var c=i.updateQueue;if(c!==null){var p=i.stateNode;try{gE(c,p)}catch(m){cn(i,i.return,m)}}}function CR(i,c,p){p.props=Ai(i.type,i.memoizedProps),p.state=i.memoizedState;try{p.componentWillUnmount()}catch(m){cn(i,c,m)}}function Hd(i,c){try{var p=i.ref;if(p!==null){switch(i.tag){case 26:case 27:case 5:var m=i.stateNode;break;case 30:m=i.stateNode;break;default:m=i.stateNode}typeof p=="function"?i.refCleanup=p(m):p.current=m}}catch(k){cn(i,c,k)}}function co(i,c){var p=i.ref,m=i.refCleanup;if(p!==null)if(typeof m=="function")try{m()}catch(k){cn(i,c,k)}finally{i.refCleanup=null,i=i.alternate,i!=null&&(i.refCleanup=null)}else if(typeof p=="function")try{p(null)}catch(k){cn(i,c,k)}else p.current=null}function jR(i){var c=i.type,p=i.memoizedProps,m=i.stateNode;try{e:switch(c){case"button":case"input":case"select":case"textarea":p.autoFocus&&m.focus();break e;case"img":p.src?m.src=p.src:p.srcSet&&(m.srcset=p.srcSet)}}catch(k){cn(i,i.return,k)}}function Ox(i,c,p){try{var m=i.stateNode;kQ(m,i.type,p,c),m[os]=c}catch(k){cn(i,i.return,k)}}function ER(i){return i.tag===5||i.tag===3||i.tag===26||i.tag===27&&Ta(i.type)||i.tag===4}function Mx(i){e:for(;;){for(;i.sibling===null;){if(i.return===null||ER(i.return))return null;i=i.return}for(i.sibling.return=i.return,i=i.sibling;i.tag!==5&&i.tag!==6&&i.tag!==18;){if(i.tag===27&&Ta(i.type)||i.flags&2||i.child===null||i.tag===4)continue e;i.child.return=i,i=i.child}if(!(i.flags&2))return i.stateNode}}function zx(i,c,p){var m=i.tag;if(m===5||m===6)i=i.stateNode,c?(p.nodeType===9?p.body:p.nodeName==="HTML"?p.ownerDocument.body:p).insertBefore(i,c):(c=p.nodeType===9?p.body:p.nodeName==="HTML"?p.ownerDocument.body:p,c.appendChild(i),p=p._reactRootContainer,p!=null||c.onclick!==null||(c.onclick=wn));else if(m!==4&&(m===27&&Ta(i.type)&&(p=i.stateNode,c=null),i=i.child,i!==null))for(zx(i,c,p),i=i.sibling;i!==null;)zx(i,c,p),i=i.sibling}function Xp(i,c,p){var m=i.tag;if(m===5||m===6)i=i.stateNode,c?p.insertBefore(i,c):p.appendChild(i);else if(m!==4&&(m===27&&Ta(i.type)&&(p=i.stateNode),i=i.child,i!==null))for(Xp(i,c,p),i=i.sibling;i!==null;)Xp(i,c,p),i=i.sibling}function RR(i){var c=i.stateNode,p=i.memoizedProps;try{for(var m=i.type,k=c.attributes;k.length;)c.removeAttributeNode(k[0]);gs(c,m,p),c[vn]=i,c[os]=p}catch(R){cn(i,i.return,R)}}var zo=!1,Kn=!1,Px=!1,AR=typeof WeakSet=="function"?WeakSet:Set,ls=null;function sQ(i,c){if(i=i.containerInfo,av=yg,i=Hj(i),Nb(i)){if("selectionStart"in i)var p={start:i.selectionStart,end:i.selectionEnd};else e:{p=(p=i.ownerDocument)&&p.defaultView||window;var m=p.getSelection&&p.getSelection();if(m&&m.rangeCount!==0){p=m.anchorNode;var k=m.anchorOffset,R=m.focusNode;m=m.focusOffset;try{p.nodeType,R.nodeType}catch{p=null;break e}var L=0,K=-1,ie=-1,Ce=0,Ne=0,ze=i,Ee=null;t:for(;;){for(var Te;ze!==p||k!==0&&ze.nodeType!==3||(K=L+k),ze!==R||m!==0&&ze.nodeType!==3||(ie=L+m),ze.nodeType===3&&(L+=ze.nodeValue.length),(Te=ze.firstChild)!==null;)Ee=ze,ze=Te;for(;;){if(ze===i)break t;if(Ee===p&&++Ce===k&&(K=L),Ee===R&&++Ne===m&&(ie=L),(Te=ze.nextSibling)!==null)break;ze=Ee,Ee=ze.parentNode}ze=Te}p=K===-1||ie===-1?null:{start:K,end:ie}}else p=null}p=p||{start:0,end:0}}else p=null;for(iv={focusedElem:i,selectionRange:p},yg=!1,ls=c;ls!==null;)if(c=ls,i=c.child,(c.subtreeFlags&1028)!==0&&i!==null)i.return=c,ls=i;else for(;ls!==null;){switch(c=ls,R=c.alternate,i=c.flags,c.tag){case 0:if((i&4)!==0&&(i=c.updateQueue,i=i!==null?i.events:null,i!==null))for(p=0;p<i.length;p++)k=i[p],k.ref.impl=k.nextImpl;break;case 11:case 15:break;case 1:if((i&1024)!==0&&R!==null){i=void 0,p=c,k=R.memoizedProps,R=R.memoizedState,m=p.stateNode;try{var lt=Ai(p.type,k);i=m.getSnapshotBeforeUpdate(lt,R),m.__reactInternalSnapshotBeforeUpdate=i}catch(vt){cn(p,p.return,vt)}}break;case 3:if((i&1024)!==0){if(i=c.stateNode.containerInfo,p=i.nodeType,p===9)dv(i);else if(p===1)switch(i.nodeName){case"HEAD":case"HTML":case"BODY":dv(i);break;default:i.textContent=""}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;default:if((i&1024)!==0)throw Error(s(163))}if(i=c.sibling,i!==null){i.return=c.return,ls=i;break}ls=c.return}}function TR(i,c,p){var m=p.flags;switch(p.tag){case 0:case 11:case 15:Bo(i,p),m&4&&Bd(5,p);break;case 1:if(Bo(i,p),m&4)if(i=p.stateNode,c===null)try{i.componentDidMount()}catch(L){cn(p,p.return,L)}else{var k=Ai(p.type,c.memoizedProps);c=c.memoizedState;try{i.componentDidUpdate(k,c,i.__reactInternalSnapshotBeforeUpdate)}catch(L){cn(p,p.return,L)}}m&64&&kR(p),m&512&&Hd(p,p.return);break;case 3:if(Bo(i,p),m&64&&(i=p.updateQueue,i!==null)){if(c=null,p.child!==null)switch(p.child.tag){case 27:case 5:c=p.child.stateNode;break;case 1:c=p.child.stateNode}try{gE(i,c)}catch(L){cn(p,p.return,L)}}break;case 27:c===null&&m&4&&RR(p);case 26:case 5:Bo(i,p),c===null&&m&4&&jR(p),m&512&&Hd(p,p.return);break;case 12:Bo(i,p);break;case 31:Bo(i,p),m&4&&DR(i,p);break;case 13:Bo(i,p),m&4&&IR(i,p),m&64&&(i=p.memoizedState,i!==null&&(i=i.dehydrated,i!==null&&(p=fQ.bind(null,p),NQ(i,p))));break;case 22:if(m=p.memoizedState!==null||zo,!m){c=c!==null&&c.memoizedState!==null||Kn,k=zo;var R=Kn;zo=m,(Kn=c)&&!R?Ho(i,p,(p.subtreeFlags&8772)!==0):Bo(i,p),zo=k,Kn=R}break;case 30:break;default:Bo(i,p)}}function $R(i){var c=i.alternate;c!==null&&(i.alternate=null,$R(c)),i.child=null,i.deletions=null,i.sibling=null,i.tag===5&&(c=i.stateNode,c!==null&&ai(c)),i.stateNode=null,i.return=null,i.dependencies=null,i.memoizedProps=null,i.memoizedState=null,i.pendingProps=null,i.stateNode=null,i.updateQueue=null}var _n=null,Ms=!1;function Po(i,c,p){for(p=p.child;p!==null;)NR(i,c,p),p=p.sibling}function NR(i,c,p){if(xe&&typeof xe.onCommitFiberUnmount=="function")try{xe.onCommitFiberUnmount(Rt,p)}catch{}switch(p.tag){case 26:Kn||co(p,c),Po(i,c,p),p.memoizedState?p.memoizedState.count--:p.stateNode&&(p=p.stateNode,p.parentNode.removeChild(p));break;case 27:Kn||co(p,c);var m=_n,k=Ms;Ta(p.type)&&(_n=p.stateNode,Ms=!1),Po(i,c,p),Xd(p.stateNode),_n=m,Ms=k;break;case 5:Kn||co(p,c);case 6:if(m=_n,k=Ms,_n=null,Po(i,c,p),_n=m,Ms=k,_n!==null)if(Ms)try{(_n.nodeType===9?_n.body:_n.nodeName==="HTML"?_n.ownerDocument.body:_n).removeChild(p.stateNode)}catch(R){cn(p,c,R)}else try{_n.removeChild(p.stateNode)}catch(R){cn(p,c,R)}break;case 18:_n!==null&&(Ms?(i=_n,kA(i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i,p.stateNode),Ql(i)):kA(_n,p.stateNode));break;case 4:m=_n,k=Ms,_n=p.stateNode.containerInfo,Ms=!0,Po(i,c,p),_n=m,Ms=k;break;case 0:case 11:case 14:case 15:Sa(2,p,c),Kn||Sa(4,p,c),Po(i,c,p);break;case 1:Kn||(co(p,c),m=p.stateNode,typeof m.componentWillUnmount=="function"&&CR(p,c,m)),Po(i,c,p);break;case 21:Po(i,c,p);break;case 22:Kn=(m=Kn)||p.memoizedState!==null,Po(i,c,p),Kn=m;break;default:Po(i,c,p)}}function DR(i,c){if(c.memoizedState===null&&(i=c.alternate,i!==null&&(i=i.memoizedState,i!==null))){i=i.dehydrated;try{Ql(i)}catch(p){cn(c,c.return,p)}}}function IR(i,c){if(c.memoizedState===null&&(i=c.alternate,i!==null&&(i=i.memoizedState,i!==null&&(i=i.dehydrated,i!==null))))try{Ql(i)}catch(p){cn(c,c.return,p)}}function rQ(i){switch(i.tag){case 31:case 13:case 19:var c=i.stateNode;return c===null&&(c=i.stateNode=new AR),c;case 22:return i=i.stateNode,c=i._retryCache,c===null&&(c=i._retryCache=new AR),c;default:throw Error(s(435,i.tag))}}function Jp(i,c){var p=rQ(i);c.forEach(function(m){if(!p.has(m)){p.add(m);var k=pQ.bind(null,i,m);m.then(k,k)}})}function zs(i,c){var p=c.deletions;if(p!==null)for(var m=0;m<p.length;m++){var k=p[m],R=i,L=c,K=L;e:for(;K!==null;){switch(K.tag){case 27:if(Ta(K.type)){_n=K.stateNode,Ms=!1;break e}break;case 5:_n=K.stateNode,Ms=!1;break e;case 3:case 4:_n=K.stateNode.containerInfo,Ms=!0;break e}K=K.return}if(_n===null)throw Error(s(160));NR(R,L,k),_n=null,Ms=!1,R=k.alternate,R!==null&&(R.return=null),k.return=null}if(c.subtreeFlags&13886)for(c=c.child;c!==null;)LR(c,i),c=c.sibling}var Hr=null;function LR(i,c){var p=i.alternate,m=i.flags;switch(i.tag){case 0:case 11:case 14:case 15:zs(c,i),Ps(i),m&4&&(Sa(3,i,i.return),Bd(3,i),Sa(5,i,i.return));break;case 1:zs(c,i),Ps(i),m&512&&(Kn||p===null||co(p,p.return)),m&64&&zo&&(i=i.updateQueue,i!==null&&(m=i.callbacks,m!==null&&(p=i.shared.hiddenCallbacks,i.shared.hiddenCallbacks=p===null?m:p.concat(m))));break;case 26:var k=Hr;if(zs(c,i),Ps(i),m&512&&(Kn||p===null||co(p,p.return)),m&4){var R=p!==null?p.memoizedState:null;if(m=i.memoizedState,p===null)if(m===null)if(i.stateNode===null){e:{m=i.type,p=i.memoizedProps,k=k.ownerDocument||k;t:switch(m){case"title":R=k.getElementsByTagName("title")[0],(!R||R[jo]||R[vn]||R.namespaceURI==="http://www.w3.org/2000/svg"||R.hasAttribute("itemprop"))&&(R=k.createElement(m),k.head.insertBefore(R,k.querySelector("head > title"))),gs(R,m,p),R[vn]=i,Nn(R),m=R;break e;case"link":var L=LA("link","href",k).get(m+(p.href||""));if(L){for(var K=0;K<L.length;K++)if(R=L[K],R.getAttribute("href")===(p.href==null||p.href===""?null:p.href)&&R.getAttribute("rel")===(p.rel==null?null:p.rel)&&R.getAttribute("title")===(p.title==null?null:p.title)&&R.getAttribute("crossorigin")===(p.crossOrigin==null?null:p.crossOrigin)){L.splice(K,1);break t}}R=k.createElement(m),gs(R,m,p),k.head.appendChild(R);break;case"meta":if(L=LA("meta","content",k).get(m+(p.content||""))){for(K=0;K<L.length;K++)if(R=L[K],R.getAttribute("content")===(p.content==null?null:""+p.content)&&R.getAttribute("name")===(p.name==null?null:p.name)&&R.getAttribute("property")===(p.property==null?null:p.property)&&R.getAttribute("http-equiv")===(p.httpEquiv==null?null:p.httpEquiv)&&R.getAttribute("charset")===(p.charSet==null?null:p.charSet)){L.splice(K,1);break t}}R=k.createElement(m),gs(R,m,p),k.head.appendChild(R);break;default:throw Error(s(468,m))}R[vn]=i,Nn(R),m=R}i.stateNode=m}else OA(k,i.type,i.stateNode);else i.stateNode=IA(k,m,i.memoizedProps);else R!==m?(R===null?p.stateNode!==null&&(p=p.stateNode,p.parentNode.removeChild(p)):R.count--,m===null?OA(k,i.type,i.stateNode):IA(k,m,i.memoizedProps)):m===null&&i.stateNode!==null&&Ox(i,i.memoizedProps,p.memoizedProps)}break;case 27:zs(c,i),Ps(i),m&512&&(Kn||p===null||co(p,p.return)),p!==null&&m&4&&Ox(i,i.memoizedProps,p.memoizedProps);break;case 5:if(zs(c,i),Ps(i),m&512&&(Kn||p===null||co(p,p.return)),i.flags&32){k=i.stateNode;try{bt(k,"")}catch(lt){cn(i,i.return,lt)}}m&4&&i.stateNode!=null&&(k=i.memoizedProps,Ox(i,k,p!==null?p.memoizedProps:k)),m&1024&&(Px=!0);break;case 6:if(zs(c,i),Ps(i),m&4){if(i.stateNode===null)throw Error(s(162));m=i.memoizedProps,p=i.stateNode;try{p.nodeValue=m}catch(lt){cn(i,i.return,lt)}}break;case 3:if(pg=null,k=Hr,Hr=ug(c.containerInfo),zs(c,i),Hr=k,Ps(i),m&4&&p!==null&&p.memoizedState.isDehydrated)try{Ql(c.containerInfo)}catch(lt){cn(i,i.return,lt)}Px&&(Px=!1,OR(i));break;case 4:m=Hr,Hr=ug(i.stateNode.containerInfo),zs(c,i),Ps(i),Hr=m;break;case 12:zs(c,i),Ps(i);break;case 31:zs(c,i),Ps(i),m&4&&(m=i.updateQueue,m!==null&&(i.updateQueue=null,Jp(i,m)));break;case 13:zs(c,i),Ps(i),i.child.flags&8192&&i.memoizedState!==null!=(p!==null&&p.memoizedState!==null)&&(Qp=Qe()),m&4&&(m=i.updateQueue,m!==null&&(i.updateQueue=null,Jp(i,m)));break;case 22:k=i.memoizedState!==null;var ie=p!==null&&p.memoizedState!==null,Ce=zo,Ne=Kn;if(zo=Ce||k,Kn=Ne||ie,zs(c,i),Kn=Ne,zo=Ce,Ps(i),m&8192)e:for(c=i.stateNode,c._visibility=k?c._visibility&-2:c._visibility|1,k&&(p===null||ie||zo||Kn||Ti(i)),p=null,c=i;;){if(c.tag===5||c.tag===26){if(p===null){ie=p=c;try{if(R=ie.stateNode,k)L=R.style,typeof L.setProperty=="function"?L.setProperty("display","none","important"):L.display="none";else{K=ie.stateNode;var ze=ie.memoizedProps.style,Ee=ze!=null&&ze.hasOwnProperty("display")?ze.display:null;K.style.display=Ee==null||typeof Ee=="boolean"?"":(""+Ee).trim()}}catch(lt){cn(ie,ie.return,lt)}}}else if(c.tag===6){if(p===null){ie=c;try{ie.stateNode.nodeValue=k?"":ie.memoizedProps}catch(lt){cn(ie,ie.return,lt)}}}else if(c.tag===18){if(p===null){ie=c;try{var Te=ie.stateNode;k?CA(Te,!0):CA(ie.stateNode,!1)}catch(lt){cn(ie,ie.return,lt)}}}else if((c.tag!==22&&c.tag!==23||c.memoizedState===null||c===i)&&c.child!==null){c.child.return=c,c=c.child;continue}if(c===i)break e;for(;c.sibling===null;){if(c.return===null||c.return===i)break e;p===c&&(p=null),c=c.return}p===c&&(p=null),c.sibling.return=c.return,c=c.sibling}m&4&&(m=i.updateQueue,m!==null&&(p=m.retryQueue,p!==null&&(m.retryQueue=null,Jp(i,p))));break;case 19:zs(c,i),Ps(i),m&4&&(m=i.updateQueue,m!==null&&(i.updateQueue=null,Jp(i,m)));break;case 30:break;case 21:break;default:zs(c,i),Ps(i)}}function Ps(i){var c=i.flags;if(c&2){try{for(var p,m=i.return;m!==null;){if(ER(m)){p=m;break}m=m.return}if(p==null)throw Error(s(160));switch(p.tag){case 27:var k=p.stateNode,R=Mx(i);Xp(i,R,k);break;case 5:var L=p.stateNode;p.flags&32&&(bt(L,""),p.flags&=-33);var K=Mx(i);Xp(i,K,L);break;case 3:case 4:var ie=p.stateNode.containerInfo,Ce=Mx(i);zx(i,Ce,ie);break;default:throw Error(s(161))}}catch(Ne){cn(i,i.return,Ne)}i.flags&=-3}c&4096&&(i.flags&=-4097)}function OR(i){if(i.subtreeFlags&1024)for(i=i.child;i!==null;){var c=i;OR(c),c.tag===5&&c.flags&1024&&c.stateNode.reset(),i=i.sibling}}function Bo(i,c){if(c.subtreeFlags&8772)for(c=c.child;c!==null;)TR(i,c.alternate,c),c=c.sibling}function Ti(i){for(i=i.child;i!==null;){var c=i;switch(c.tag){case 0:case 11:case 14:case 15:Sa(4,c,c.return),Ti(c);break;case 1:co(c,c.return);var p=c.stateNode;typeof p.componentWillUnmount=="function"&&CR(c,c.return,p),Ti(c);break;case 27:Xd(c.stateNode);case 26:case 5:co(c,c.return),Ti(c);break;case 22:c.memoizedState===null&&Ti(c);break;case 30:Ti(c);break;default:Ti(c)}i=i.sibling}}function Ho(i,c,p){for(p=p&&(c.subtreeFlags&8772)!==0,c=c.child;c!==null;){var m=c.alternate,k=i,R=c,L=R.flags;switch(R.tag){case 0:case 11:case 15:Ho(k,R,p),Bd(4,R);break;case 1:if(Ho(k,R,p),m=R,k=m.stateNode,typeof k.componentDidMount=="function")try{k.componentDidMount()}catch(Ce){cn(m,m.return,Ce)}if(m=R,k=m.updateQueue,k!==null){var K=m.stateNode;try{var ie=k.shared.hiddenCallbacks;if(ie!==null)for(k.shared.hiddenCallbacks=null,k=0;k<ie.length;k++)pE(ie[k],K)}catch(Ce){cn(m,m.return,Ce)}}p&&L&64&&kR(R),Hd(R,R.return);break;case 27:RR(R);case 26:case 5:Ho(k,R,p),p&&m===null&&L&4&&jR(R),Hd(R,R.return);break;case 12:Ho(k,R,p);break;case 31:Ho(k,R,p),p&&L&4&&DR(k,R);break;case 13:Ho(k,R,p),p&&L&4&&IR(k,R);break;case 22:R.memoizedState===null&&Ho(k,R,p),Hd(R,R.return);break;case 30:break;default:Ho(k,R,p)}c=c.sibling}}function Bx(i,c){var p=null;i!==null&&i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(p=i.memoizedState.cachePool.pool),i=null,c.memoizedState!==null&&c.memoizedState.cachePool!==null&&(i=c.memoizedState.cachePool.pool),i!==p&&(i!=null&&i.refCount++,p!=null&&Ed(p))}function Hx(i,c){i=null,c.alternate!==null&&(i=c.alternate.memoizedState.cache),c=c.memoizedState.cache,c!==i&&(c.refCount++,i!=null&&Ed(i))}function Wr(i,c,p,m){if(c.subtreeFlags&10256)for(c=c.child;c!==null;)MR(i,c,p,m),c=c.sibling}function MR(i,c,p,m){var k=c.flags;switch(c.tag){case 0:case 11:case 15:Wr(i,c,p,m),k&2048&&Bd(9,c);break;case 1:Wr(i,c,p,m);break;case 3:Wr(i,c,p,m),k&2048&&(i=null,c.alternate!==null&&(i=c.alternate.memoizedState.cache),c=c.memoizedState.cache,c!==i&&(c.refCount++,i!=null&&Ed(i)));break;case 12:if(k&2048){Wr(i,c,p,m),i=c.stateNode;try{var R=c.memoizedProps,L=R.id,K=R.onPostCommit;typeof K=="function"&&K(L,c.alternate===null?"mount":"update",i.passiveEffectDuration,-0)}catch(ie){cn(c,c.return,ie)}}else Wr(i,c,p,m);break;case 31:Wr(i,c,p,m);break;case 13:Wr(i,c,p,m);break;case 23:break;case 22:R=c.stateNode,L=c.alternate,c.memoizedState!==null?R._visibility&2?Wr(i,c,p,m):Wd(i,c):R._visibility&2?Wr(i,c,p,m):(R._visibility|=2,Wl(i,c,p,m,(c.subtreeFlags&10256)!==0||!1)),k&2048&&Bx(L,c);break;case 24:Wr(i,c,p,m),k&2048&&Hx(c.alternate,c);break;default:Wr(i,c,p,m)}}function Wl(i,c,p,m,k){for(k=k&&((c.subtreeFlags&10256)!==0||!1),c=c.child;c!==null;){var R=i,L=c,K=p,ie=m,Ce=L.flags;switch(L.tag){case 0:case 11:case 15:Wl(R,L,K,ie,k),Bd(8,L);break;case 23:break;case 22:var Ne=L.stateNode;L.memoizedState!==null?Ne._visibility&2?Wl(R,L,K,ie,k):Wd(R,L):(Ne._visibility|=2,Wl(R,L,K,ie,k)),k&&Ce&2048&&Bx(L.alternate,L);break;case 24:Wl(R,L,K,ie,k),k&&Ce&2048&&Hx(L.alternate,L);break;default:Wl(R,L,K,ie,k)}c=c.sibling}}function Wd(i,c){if(c.subtreeFlags&10256)for(c=c.child;c!==null;){var p=i,m=c,k=m.flags;switch(m.tag){case 22:Wd(p,m),k&2048&&Bx(m.alternate,m);break;case 24:Wd(p,m),k&2048&&Hx(m.alternate,m);break;default:Wd(p,m)}c=c.sibling}}var Ud=8192;function Ul(i,c,p){if(i.subtreeFlags&Ud)for(i=i.child;i!==null;)zR(i,c,p),i=i.sibling}function zR(i,c,p){switch(i.tag){case 26:Ul(i,c,p),i.flags&Ud&&i.memoizedState!==null&&qQ(p,Hr,i.memoizedState,i.memoizedProps);break;case 5:Ul(i,c,p);break;case 3:case 4:var m=Hr;Hr=ug(i.stateNode.containerInfo),Ul(i,c,p),Hr=m;break;case 22:i.memoizedState===null&&(m=i.alternate,m!==null&&m.memoizedState!==null?(m=Ud,Ud=16777216,Ul(i,c,p),Ud=m):Ul(i,c,p));break;default:Ul(i,c,p)}}function PR(i){var c=i.alternate;if(c!==null&&(i=c.child,i!==null)){c.child=null;do c=i.sibling,i.sibling=null,i=c;while(i!==null)}}function qd(i){var c=i.deletions;if((i.flags&16)!==0){if(c!==null)for(var p=0;p<c.length;p++){var m=c[p];ls=m,HR(m,i)}PR(i)}if(i.subtreeFlags&10256)for(i=i.child;i!==null;)BR(i),i=i.sibling}function BR(i){switch(i.tag){case 0:case 11:case 15:qd(i),i.flags&2048&&Sa(9,i,i.return);break;case 3:qd(i);break;case 12:qd(i);break;case 22:var c=i.stateNode;i.memoizedState!==null&&c._visibility&2&&(i.return===null||i.return.tag!==13)?(c._visibility&=-3,Zp(i)):qd(i);break;default:qd(i)}}function Zp(i){var c=i.deletions;if((i.flags&16)!==0){if(c!==null)for(var p=0;p<c.length;p++){var m=c[p];ls=m,HR(m,i)}PR(i)}for(i=i.child;i!==null;){switch(c=i,c.tag){case 0:case 11:case 15:Sa(8,c,c.return),Zp(c);break;case 22:p=c.stateNode,p._visibility&2&&(p._visibility&=-3,Zp(c));break;default:Zp(c)}i=i.sibling}}function HR(i,c){for(;ls!==null;){var p=ls;switch(p.tag){case 0:case 11:case 15:Sa(8,p,c);break;case 23:case 22:if(p.memoizedState!==null&&p.memoizedState.cachePool!==null){var m=p.memoizedState.cachePool.pool;m!=null&&m.refCount++}break;case 24:Ed(p.memoizedState.cache)}if(m=p.child,m!==null)m.return=p,ls=m;else e:for(p=i;ls!==null;){m=ls;var k=m.sibling,R=m.return;if($R(m),m===p){ls=null;break e}if(k!==null){k.return=R,ls=k;break e}ls=R}}}var oQ={getCacheForType:function(i){var c=fs(qn),p=c.data.get(i);return p===void 0&&(p=i(),c.data.set(i,p)),p},cacheSignal:function(){return fs(qn).controller.signal}},aQ=typeof WeakMap=="function"?WeakMap:Map,Qt=0,pn=null,Mt=null,Pt=0,ln=0,er=null,ka=!1,ql=!1,Wx=!1,Wo=0,Ln=0,Ca=0,$i=0,Ux=0,tr=0,Fl=0,Fd=null,Bs=null,qx=!1,Qp=0,WR=0,eg=1/0,tg=null,ja=null,Qn=0,Ea=null,Vl=null,Uo=0,Fx=0,Vx=null,UR=null,Vd=0,Kx=null;function nr(){return(Qt&2)!==0&&Pt!==0?Pt&-Pt:U.T!==null?Qx():$n()}function qR(){if(tr===0)if((Pt&536870912)===0||qt){var i=_e;_e<<=1,(_e&3932160)===0&&(_e=262144),tr=i}else tr=536870912;return i=Zs.current,i!==null&&(i.flags|=32),tr}function Hs(i,c,p){(i===pn&&(ln===2||ln===9)||i.cancelPendingCommit!==null)&&(Kl(i,0),Ra(i,Pt,tr,!1)),nt(i,p),((Qt&2)===0||i!==pn)&&(i===pn&&((Qt&2)===0&&($i|=p),Ln===4&&Ra(i,Pt,tr,!1)),uo(i))}function FR(i,c,p){if((Qt&6)!==0)throw Error(s(327));var m=!p&&(c&127)===0&&(c&i.expiredLanes)===0||it(i,c),k=m?cQ(i,c):Yx(i,c,!0),R=m;do{if(k===0){ql&&!m&&Ra(i,c,0,!1);break}else{if(p=i.current.alternate,R&&!iQ(p)){k=Yx(i,c,!1),R=!1;continue}if(k===2){if(R=c,i.errorRecoveryDisabledLanes&R)var L=0;else L=i.pendingLanes&-536870913,L=L!==0?L:L&536870912?536870912:0;if(L!==0){c=L;e:{var K=i;k=Fd;var ie=K.current.memoizedState.isDehydrated;if(ie&&(Kl(K,L).flags|=256),L=Yx(K,L,!1),L!==2){if(Wx&&!ie){K.errorRecoveryDisabledLanes|=R,$i|=R,k=4;break e}R=Bs,Bs=k,R!==null&&(Bs===null?Bs=R:Bs.push.apply(Bs,R))}k=L}if(R=!1,k!==2)continue}}if(k===1){Kl(i,0),Ra(i,c,0,!0);break}e:{switch(m=i,R=k,R){case 0:case 1:throw Error(s(345));case 4:if((c&4194048)!==c)break;case 6:Ra(m,c,tr,!ka);break e;case 2:Bs=null;break;case 3:case 5:break;default:throw Error(s(329))}if((c&62914560)===c&&(k=Qp+300-Qe(),10<k)){if(Ra(m,c,tr,!ka),Ye(m,0,!0)!==0)break e;Uo=c,m.timeoutHandle=_A(VR.bind(null,m,p,Bs,tg,qx,c,tr,$i,Fl,ka,R,"Throttled",-0,0),k);break e}VR(m,p,Bs,tg,qx,c,tr,$i,Fl,ka,R,null,-0,0)}}break}while(!0);uo(i)}function VR(i,c,p,m,k,R,L,K,ie,Ce,Ne,ze,Ee,Te){if(i.timeoutHandle=-1,ze=c.subtreeFlags,ze&8192||(ze&16785408)===16785408){ze={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:wn},zR(c,R,ze);var lt=(R&62914560)===R?Qp-Qe():(R&4194048)===R?WR-Qe():0;if(lt=FQ(ze,lt),lt!==null){Uo=R,i.cancelPendingCommit=lt(eA.bind(null,i,c,R,p,m,k,L,K,ie,Ne,ze,null,Ee,Te)),Ra(i,R,L,!Ce);return}}eA(i,c,R,p,m,k,L,K,ie)}function iQ(i){for(var c=i;;){var p=c.tag;if((p===0||p===11||p===15)&&c.flags&16384&&(p=c.updateQueue,p!==null&&(p=p.stores,p!==null)))for(var m=0;m<p.length;m++){var k=p[m],R=k.getSnapshot;k=k.value;try{if(!Xs(R(),k))return!1}catch{return!1}}if(p=c.child,c.subtreeFlags&16384&&p!==null)p.return=c,c=p;else{if(c===i)break;for(;c.sibling===null;){if(c.return===null||c.return===i)return!0;c=c.return}c.sibling.return=c.return,c=c.sibling}}return!0}function Ra(i,c,p,m){c&=~Ux,c&=~$i,i.suspendedLanes|=c,i.pingedLanes&=~c,m&&(i.warmLanes|=c),m=i.expirationTimes;for(var k=c;0<k;){var R=31-Q(k),L=1<<R;m[R]=-1,k&=~L}p!==0&&st(i,p,c)}function ng(){return(Qt&6)===0?(Kd(0),!1):!0}function Gx(){if(Mt!==null){if(ln===0)var i=Mt.return;else i=Mt,No=_i=null,dx(i),Ml=null,Ad=0,i=Mt;for(;i!==null;)SR(i.alternate,i),i=i.return;Mt=null}}function Kl(i,c){var p=i.timeoutHandle;p!==-1&&(i.timeoutHandle=-1,EQ(p)),p=i.cancelPendingCommit,p!==null&&(i.cancelPendingCommit=null,p()),Uo=0,Gx(),pn=i,Mt=p=To(i.current,null),Pt=c,ln=0,er=null,ka=!1,ql=it(i,c),Wx=!1,Fl=tr=Ux=$i=Ca=Ln=0,Bs=Fd=null,qx=!1,(c&8)!==0&&(c|=c&32);var m=i.entangledLanes;if(m!==0)for(i=i.entanglements,m&=c;0<m;){var k=31-Q(m),R=1<<k;c|=i[k],m&=~R}return Wo=c,Sp(),p}function KR(i,c){$t=null,U.H=Md,c===Ol||c===$p?(c=cE(),ln=3):c===Zb?(c=cE(),ln=4):ln=c===jx?8:c!==null&&typeof c=="object"&&typeof c.then=="function"?6:1,er=c,Mt===null&&(Ln=1,Fp(i,fr(c,i.current)))}function GR(){var i=Zs.current;return i===null?!0:(Pt&4194048)===Pt?mr===null:(Pt&62914560)===Pt||(Pt&536870912)!==0?i===mr:!1}function YR(){var i=U.H;return U.H=Md,i===null?Md:i}function XR(){var i=U.A;return U.A=oQ,i}function sg(){Ln=4,ka||(Pt&4194048)!==Pt&&Zs.current!==null||(ql=!0),(Ca&134217727)===0&&($i&134217727)===0||pn===null||Ra(pn,Pt,tr,!1)}function Yx(i,c,p){var m=Qt;Qt|=2;var k=YR(),R=XR();(pn!==i||Pt!==c)&&(tg=null,Kl(i,c)),c=!1;var L=Ln;e:do try{if(ln!==0&&Mt!==null){var K=Mt,ie=er;switch(ln){case 8:Gx(),L=6;break e;case 3:case 2:case 9:case 6:Zs.current===null&&(c=!0);var Ce=ln;if(ln=0,er=null,Gl(i,K,ie,Ce),p&&ql){L=0;break e}break;default:Ce=ln,ln=0,er=null,Gl(i,K,ie,Ce)}}lQ(),L=Ln;break}catch(Ne){KR(i,Ne)}while(!0);return c&&i.shellSuspendCounter++,No=_i=null,Qt=m,U.H=k,U.A=R,Mt===null&&(pn=null,Pt=0,Sp()),L}function lQ(){for(;Mt!==null;)JR(Mt)}function cQ(i,c){var p=Qt;Qt|=2;var m=YR(),k=XR();pn!==i||Pt!==c?(tg=null,eg=Qe()+500,Kl(i,c)):ql=it(i,c);e:do try{if(ln!==0&&Mt!==null){c=Mt;var R=er;t:switch(ln){case 1:ln=0,er=null,Gl(i,c,R,1);break;case 2:case 9:if(iE(R)){ln=0,er=null,ZR(c);break}c=function(){ln!==2&&ln!==9||pn!==i||(ln=7),uo(i)},R.then(c,c);break e;case 3:ln=7;break e;case 4:ln=5;break e;case 7:iE(R)?(ln=0,er=null,ZR(c)):(ln=0,er=null,Gl(i,c,R,7));break;case 5:var L=null;switch(Mt.tag){case 26:L=Mt.memoizedState;case 5:case 27:var K=Mt;if(L?MA(L):K.stateNode.complete){ln=0,er=null;var ie=K.sibling;if(ie!==null)Mt=ie;else{var Ce=K.return;Ce!==null?(Mt=Ce,rg(Ce)):Mt=null}break t}}ln=0,er=null,Gl(i,c,R,5);break;case 6:ln=0,er=null,Gl(i,c,R,6);break;case 8:Gx(),Ln=6;break e;default:throw Error(s(462))}}dQ();break}catch(Ne){KR(i,Ne)}while(!0);return No=_i=null,U.H=m,U.A=k,Qt=p,Mt!==null?0:(pn=null,Pt=0,Sp(),Ln)}function dQ(){for(;Mt!==null&&!Nt();)JR(Mt)}function JR(i){var c=wR(i.alternate,i,Wo);i.memoizedProps=i.pendingProps,c===null?rg(i):Mt=c}function ZR(i){var c=i,p=c.alternate;switch(c.tag){case 15:case 0:c=hR(p,c,c.pendingProps,c.type,void 0,Pt);break;case 11:c=hR(p,c,c.pendingProps,c.type.render,c.ref,Pt);break;case 5:dx(c);default:SR(p,c),c=Mt=Xj(c,Wo),c=wR(p,c,Wo)}i.memoizedProps=i.pendingProps,c===null?rg(i):Mt=c}function Gl(i,c,p,m){No=_i=null,dx(c),Ml=null,Ad=0;var k=c.return;try{if(ZZ(i,k,c,p,Pt)){Ln=1,Fp(i,fr(p,i.current)),Mt=null;return}}catch(R){if(k!==null)throw Mt=k,R;Ln=1,Fp(i,fr(p,i.current)),Mt=null;return}c.flags&32768?(qt||m===1?i=!0:ql||(Pt&536870912)!==0?i=!1:(ka=i=!0,(m===2||m===9||m===3||m===6)&&(m=Zs.current,m!==null&&m.tag===13&&(m.flags|=16384))),QR(c,i)):rg(c)}function rg(i){var c=i;do{if((c.flags&32768)!==0){QR(c,ka);return}i=c.return;var p=tQ(c.alternate,c,Wo);if(p!==null){Mt=p;return}if(c=c.sibling,c!==null){Mt=c;return}Mt=c=i}while(c!==null);Ln===0&&(Ln=5)}function QR(i,c){do{var p=nQ(i.alternate,i);if(p!==null){p.flags&=32767,Mt=p;return}if(p=i.return,p!==null&&(p.flags|=32768,p.subtreeFlags=0,p.deletions=null),!c&&(i=i.sibling,i!==null)){Mt=i;return}Mt=i=p}while(i!==null);Ln=6,Mt=null}function eA(i,c,p,m,k,R,L,K,ie){i.cancelPendingCommit=null;do og();while(Qn!==0);if((Qt&6)!==0)throw Error(s(327));if(c!==null){if(c===i.current)throw Error(s(177));if(R=c.lanes|c.childLanes,R|=Mb,Xe(i,p,R,L,K,ie),i===pn&&(Mt=pn=null,Pt=0),Vl=c,Ea=i,Uo=p,Fx=R,Vx=k,UR=m,(c.subtreeFlags&10256)!==0||(c.flags&10256)!==0?(i.callbackNode=null,i.callbackPriority=0,gQ(He,function(){return oA(),null})):(i.callbackNode=null,i.callbackPriority=0),m=(c.flags&13878)!==0,(c.subtreeFlags&13878)!==0||m){m=U.T,U.T=null,k=B.p,B.p=2,L=Qt,Qt|=4;try{sQ(i,c,p)}finally{Qt=L,B.p=k,U.T=m}}Qn=1,tA(),nA(),sA()}}function tA(){if(Qn===1){Qn=0;var i=Ea,c=Vl,p=(c.flags&13878)!==0;if((c.subtreeFlags&13878)!==0||p){p=U.T,U.T=null;var m=B.p;B.p=2;var k=Qt;Qt|=4;try{LR(c,i);var R=iv,L=Hj(i.containerInfo),K=R.focusedElem,ie=R.selectionRange;if(L!==K&&K&&K.ownerDocument&&Bj(K.ownerDocument.documentElement,K)){if(ie!==null&&Nb(K)){var Ce=ie.start,Ne=ie.end;if(Ne===void 0&&(Ne=Ce),"selectionStart"in K)K.selectionStart=Ce,K.selectionEnd=Math.min(Ne,K.value.length);else{var ze=K.ownerDocument||document,Ee=ze&&ze.defaultView||window;if(Ee.getSelection){var Te=Ee.getSelection(),lt=K.textContent.length,vt=Math.min(ie.start,lt),fn=ie.end===void 0?vt:Math.min(ie.end,lt);!Te.extend&&vt>fn&&(L=fn,fn=vt,vt=L);var ye=Pj(K,vt),ue=Pj(K,fn);if(ye&&ue&&(Te.rangeCount!==1||Te.anchorNode!==ye.node||Te.anchorOffset!==ye.offset||Te.focusNode!==ue.node||Te.focusOffset!==ue.offset)){var Se=ze.createRange();Se.setStart(ye.node,ye.offset),Te.removeAllRanges(),vt>fn?(Te.addRange(Se),Te.extend(ue.node,ue.offset)):(Se.setEnd(ue.node,ue.offset),Te.addRange(Se))}}}}for(ze=[],Te=K;Te=Te.parentNode;)Te.nodeType===1&&ze.push({element:Te,left:Te.scrollLeft,top:Te.scrollTop});for(typeof K.focus=="function"&&K.focus(),K=0;K<ze.length;K++){var Oe=ze[K];Oe.element.scrollLeft=Oe.left,Oe.element.scrollTop=Oe.top}}yg=!!av,iv=av=null}finally{Qt=k,B.p=m,U.T=p}}i.current=c,Qn=2}}function nA(){if(Qn===2){Qn=0;var i=Ea,c=Vl,p=(c.flags&8772)!==0;if((c.subtreeFlags&8772)!==0||p){p=U.T,U.T=null;var m=B.p;B.p=2;var k=Qt;Qt|=4;try{TR(i,c.alternate,c)}finally{Qt=k,B.p=m,U.T=p}}Qn=3}}function sA(){if(Qn===4||Qn===3){Qn=0,tn();var i=Ea,c=Vl,p=Uo,m=UR;(c.subtreeFlags&10256)!==0||(c.flags&10256)!==0?Qn=5:(Qn=0,Vl=Ea=null,rA(i,i.pendingLanes));var k=i.pendingLanes;if(k===0&&(ja=null),Tn(p),c=c.stateNode,xe&&typeof xe.onCommitFiberRoot=="function")try{xe.onCommitFiberRoot(Rt,c,void 0,(c.current.flags&128)===128)}catch{}if(m!==null){c=U.T,k=B.p,B.p=2,U.T=null;try{for(var R=i.onRecoverableError,L=0;L<m.length;L++){var K=m[L];R(K.value,{componentStack:K.stack})}}finally{U.T=c,B.p=k}}(Uo&3)!==0&&og(),uo(i),k=i.pendingLanes,(p&261930)!==0&&(k&42)!==0?i===Kx?Vd++:(Vd=0,Kx=i):Vd=0,Kd(0)}}function rA(i,c){(i.pooledCacheLanes&=c)===0&&(c=i.pooledCache,c!=null&&(i.pooledCache=null,Ed(c)))}function og(){return tA(),nA(),sA(),oA()}function oA(){if(Qn!==5)return!1;var i=Ea,c=Fx;Fx=0;var p=Tn(Uo),m=U.T,k=B.p;try{B.p=32>p?32:p,U.T=null,p=Vx,Vx=null;var R=Ea,L=Uo;if(Qn=0,Vl=Ea=null,Uo=0,(Qt&6)!==0)throw Error(s(331));var K=Qt;if(Qt|=4,BR(R.current),MR(R,R.current,L,p),Qt=K,Kd(0,!1),xe&&typeof xe.onPostCommitFiberRoot=="function")try{xe.onPostCommitFiberRoot(Rt,R)}catch{}return!0}finally{B.p=k,U.T=m,rA(i,c)}}function aA(i,c,p){c=fr(p,c),c=Cx(i.stateNode,c,2),i=va(i,c,2),i!==null&&(nt(i,2),uo(i))}function cn(i,c,p){if(i.tag===3)aA(i,i,p);else for(;c!==null;){if(c.tag===3){aA(c,i,p);break}else if(c.tag===1){var m=c.stateNode;if(typeof c.type.getDerivedStateFromError=="function"||typeof m.componentDidCatch=="function"&&(ja===null||!ja.has(m))){i=fr(p,i),p=iR(2),m=va(c,p,2),m!==null&&(lR(p,m,c,i),nt(m,2),uo(m));break}}c=c.return}}function Xx(i,c,p){var m=i.pingCache;if(m===null){m=i.pingCache=new aQ;var k=new Set;m.set(c,k)}else k=m.get(c),k===void 0&&(k=new Set,m.set(c,k));k.has(p)||(Wx=!0,k.add(p),i=uQ.bind(null,i,c,p),c.then(i,i))}function uQ(i,c,p){var m=i.pingCache;m!==null&&m.delete(c),i.pingedLanes|=i.suspendedLanes&p,i.warmLanes&=~p,pn===i&&(Pt&p)===p&&(Ln===4||Ln===3&&(Pt&62914560)===Pt&&300>Qe()-Qp?(Qt&2)===0&&Kl(i,0):Ux|=p,Fl===Pt&&(Fl=0)),uo(i)}function iA(i,c){c===0&&(c=tt()),i=xi(i,c),i!==null&&(nt(i,c),uo(i))}function fQ(i){var c=i.memoizedState,p=0;c!==null&&(p=c.retryLane),iA(i,p)}function pQ(i,c){var p=0;switch(i.tag){case 31:case 13:var m=i.stateNode,k=i.memoizedState;k!==null&&(p=k.retryLane);break;case 19:m=i.stateNode;break;case 22:m=i.stateNode._retryCache;break;default:throw Error(s(314))}m!==null&&m.delete(c),iA(i,p)}function gQ(i,c){return kt(i,c)}var ag=null,Yl=null,Jx=!1,ig=!1,Zx=!1,Aa=0;function uo(i){i!==Yl&&i.next===null&&(Yl===null?ag=Yl=i:Yl=Yl.next=i),ig=!0,Jx||(Jx=!0,mQ())}function Kd(i,c){if(!Zx&&ig){Zx=!0;do for(var p=!1,m=ag;m!==null;){if(i!==0){var k=m.pendingLanes;if(k===0)var R=0;else{var L=m.suspendedLanes,K=m.pingedLanes;R=(1<<31-Q(42|i)+1)-1,R&=k&~(L&~K),R=R&201326741?R&201326741|1:R?R|2:0}R!==0&&(p=!0,uA(m,R))}else R=Pt,R=Ye(m,m===pn?R:0,m.cancelPendingCommit!==null||m.timeoutHandle!==-1),(R&3)===0||it(m,R)||(p=!0,uA(m,R));m=m.next}while(p);Zx=!1}}function hQ(){lA()}function lA(){ig=Jx=!1;var i=0;Aa!==0&&jQ()&&(i=Aa);for(var c=Qe(),p=null,m=ag;m!==null;){var k=m.next,R=cA(m,c);R===0?(m.next=null,p===null?ag=k:p.next=k,k===null&&(Yl=p)):(p=m,(i!==0||(R&3)!==0)&&(ig=!0)),m=k}Qn!==0&&Qn!==5||Kd(i),Aa!==0&&(Aa=0)}function cA(i,c){for(var p=i.suspendedLanes,m=i.pingedLanes,k=i.expirationTimes,R=i.pendingLanes&-62914561;0<R;){var L=31-Q(R),K=1<<L,ie=k[L];ie===-1?((K&p)===0||(K&m)!==0)&&(k[L]=ot(K,c)):ie<=c&&(i.expiredLanes|=K),R&=~K}if(c=pn,p=Pt,p=Ye(i,i===c?p:0,i.cancelPendingCommit!==null||i.timeoutHandle!==-1),m=i.callbackNode,p===0||i===c&&(ln===2||ln===9)||i.cancelPendingCommit!==null)return m!==null&&m!==null&&Vt(m),i.callbackNode=null,i.callbackPriority=0;if((p&3)===0||it(i,p)){if(c=p&-p,c===i.callbackPriority)return c;switch(m!==null&&Vt(m),Tn(p)){case 2:case 8:p=Le;break;case 32:p=He;break;case 268435456:p=Je;break;default:p=He}return m=dA.bind(null,i),p=kt(p,m),i.callbackPriority=c,i.callbackNode=p,c}return m!==null&&m!==null&&Vt(m),i.callbackPriority=2,i.callbackNode=null,2}function dA(i,c){if(Qn!==0&&Qn!==5)return i.callbackNode=null,i.callbackPriority=0,null;var p=i.callbackNode;if(og()&&i.callbackNode!==p)return null;var m=Pt;return m=Ye(i,i===pn?m:0,i.cancelPendingCommit!==null||i.timeoutHandle!==-1),m===0?null:(FR(i,m,c),cA(i,Qe()),i.callbackNode!=null&&i.callbackNode===p?dA.bind(null,i):null)}function uA(i,c){if(og())return null;FR(i,c,!0)}function mQ(){RQ(function(){(Qt&6)!==0?kt(et,hQ):lA()})}function Qx(){if(Aa===0){var i=Il;i===0&&(i=he,he<<=1,(he&261888)===0&&(he=256)),Aa=i}return Aa}function fA(i){return i==null||typeof i=="symbol"||typeof i=="boolean"?null:typeof i=="function"?i:sn(""+i)}function pA(i,c){var p=c.ownerDocument.createElement("input");return p.name=c.name,p.value=c.value,i.id&&p.setAttribute("form",i.id),c.parentNode.insertBefore(p,c),i=new FormData(i),p.parentNode.removeChild(p),i}function yQ(i,c,p,m,k){if(c==="submit"&&p&&p.stateNode===k){var R=fA((k[os]||null).action),L=m.submitter;L&&(c=(c=L[os]||null)?fA(c.formAction):L.getAttribute("formAction"),c!==null&&(R=c,L=null));var K=new Ao("action","action",null,m,k);i.push({event:K,listeners:[{instance:null,listener:function(){if(m.defaultPrevented){if(Aa!==0){var ie=L?pA(k,L):new FormData(k);xx(p,{pending:!0,data:ie,method:k.method,action:R},null,ie)}}else typeof R=="function"&&(K.preventDefault(),ie=L?pA(k,L):new FormData(k),xx(p,{pending:!0,data:ie,method:k.method,action:R},R,ie))},currentTarget:k}]})}}for(var ev=0;ev<Ob.length;ev++){var tv=Ob[ev],bQ=tv.toLowerCase(),xQ=tv[0].toUpperCase()+tv.slice(1);Br(bQ,"on"+xQ)}Br(qj,"onAnimationEnd"),Br(Fj,"onAnimationIteration"),Br(Vj,"onAnimationStart"),Br("dblclick","onDoubleClick"),Br("focusin","onFocus"),Br("focusout","onBlur"),Br(LZ,"onTransitionRun"),Br(OZ,"onTransitionStart"),Br(MZ,"onTransitionCancel"),Br(Kj,"onTransitionEnd"),oo("onMouseEnter",["mouseout","mouseover"]),oo("onMouseLeave",["mouseout","mouseover"]),oo("onPointerEnter",["pointerout","pointerover"]),oo("onPointerLeave",["pointerout","pointerover"]),Ys("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),Ys("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),Ys("onBeforeInput",["compositionend","keypress","textInput","paste"]),Ys("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),Ys("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),Ys("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Gd="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),vQ=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(Gd));function gA(i,c){c=(c&4)!==0;for(var p=0;p<i.length;p++){var m=i[p],k=m.event;m=m.listeners;e:{var R=void 0;if(c)for(var L=m.length-1;0<=L;L--){var K=m[L],ie=K.instance,Ce=K.currentTarget;if(K=K.listener,ie!==R&&k.isPropagationStopped())break e;R=K,k.currentTarget=Ce;try{R(k)}catch(Ne){_p(Ne)}k.currentTarget=null,R=ie}else for(L=0;L<m.length;L++){if(K=m[L],ie=K.instance,Ce=K.currentTarget,K=K.listener,ie!==R&&k.isPropagationStopped())break e;R=K,k.currentTarget=Ce;try{R(k)}catch(Ne){_p(Ne)}k.currentTarget=null,R=ie}}}}function zt(i,c){var p=c[Co];p===void 0&&(p=c[Co]=new Set);var m=i+"__bubble";p.has(m)||(hA(c,i,2,!1),p.add(m))}function nv(i,c,p){var m=0;c&&(m|=4),hA(p,i,m,c)}var lg="_reactListening"+Math.random().toString(36).slice(2);function sv(i){if(!i[lg]){i[lg]=!0,la.forEach(function(p){p!=="selectionchange"&&(vQ.has(p)||nv(p,!1,i),nv(p,!0,i))});var c=i.nodeType===9?i:i.ownerDocument;c===null||c[lg]||(c[lg]=!0,nv("selectionchange",!1,c))}}function hA(i,c,p,m){switch(qA(c)){case 2:var k=GQ;break;case 8:k=YQ;break;default:k=bv}p=k.bind(null,c,p,i),k=void 0,!pd||c!=="touchstart"&&c!=="touchmove"&&c!=="wheel"||(k=!0),m?k!==void 0?i.addEventListener(c,p,{capture:!0,passive:k}):i.addEventListener(c,p,!0):k!==void 0?i.addEventListener(c,p,{passive:k}):i.addEventListener(c,p,!1)}function rv(i,c,p,m,k){var R=m;if((c&1)===0&&(c&2)===0&&m!==null)e:for(;;){if(m===null)return;var L=m.tag;if(L===3||L===4){var K=m.stateNode.containerInfo;if(K===k)break;if(L===4)for(L=m.return;L!==null;){var ie=L.tag;if((ie===3||ie===4)&&L.stateNode.containerInfo===k)return;L=L.return}for(;K!==null;){if(L=ro(K),L===null)return;if(ie=L.tag,ie===5||ie===6||ie===26||ie===27){m=R=L;continue e}K=K.parentNode}}m=m.return}fd(function(){var Ce=R,Ne=li(p),ze=[];e:{var Ee=Gj.get(i);if(Ee!==void 0){var Te=Ao,lt=i;switch(i){case"keypress":if(di(p)===0)break e;case"keydown":case"keyup":Te=_b;break;case"focusin":lt="focus",Te=yd;break;case"focusout":lt="blur",Te=yd;break;case"beforeblur":case"afterblur":Te=yd;break;case"click":if(p.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":Te=fp;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":Te=Oj;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":Te=Cb;break;case qj:case Fj:case Vj:Te=hb;break;case Kj:Te=Cl;break;case"scroll":case"scrollend":Te=fb;break;case"wheel":Te=P;break;case"copy":case"cut":case"paste":Te=pp;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":Te=mp;break;case"toggle":case"beforetoggle":Te=O}var vt=(c&4)!==0,fn=!vt&&(i==="scroll"||i==="scrollend"),ye=vt?Ee!==null?Ee+"Capture":null:Ee;vt=[];for(var ue=Ce,Se;ue!==null;){var Oe=ue;if(Se=Oe.stateNode,Oe=Oe.tag,Oe!==5&&Oe!==26&&Oe!==27||Se===null||ye===null||(Oe=fa(ue,ye),Oe!=null&&vt.push(Yd(ue,Oe,Se))),fn)break;ue=ue.return}0<vt.length&&(Ee=new Te(Ee,lt,null,p,Ne),ze.push({event:Ee,listeners:vt}))}}if((c&7)===0){e:{if(Ee=i==="mouseover"||i==="pointerover",Te=i==="mouseout"||i==="pointerout",Ee&&p!==Ls&&(lt=p.relatedTarget||p.fromElement)&&(ro(lt)||lt[cr]))break e;if((Te||Ee)&&(Ee=Ne.window===Ne?Ne:(Ee=Ne.ownerDocument)?Ee.defaultView||Ee.parentWindow:window,Te?(lt=p.relatedTarget||p.toElement,Te=Ce,lt=lt?ro(lt):null,lt!==null&&(fn=o(lt),vt=lt.tag,lt!==fn||vt!==5&&vt!==27&&vt!==6)&&(lt=null)):(Te=null,lt=Ce),Te!==lt)){if(vt=fp,Oe="onMouseLeave",ye="onMouseEnter",ue="mouse",(i==="pointerout"||i==="pointerover")&&(vt=mp,Oe="onPointerLeave",ye="onPointerEnter",ue="pointer"),fn=Te==null?Ee:Or(Te),Se=lt==null?Ee:Or(lt),Ee=new vt(Oe,ue+"leave",Te,p,Ne),Ee.target=fn,Ee.relatedTarget=Se,Oe=null,ro(Ne)===Ce&&(vt=new vt(ye,ue+"enter",lt,p,Ne),vt.target=Se,vt.relatedTarget=fn,Oe=vt),fn=Oe,Te&&lt)t:{for(vt=wQ,ye=Te,ue=lt,Se=0,Oe=ye;Oe;Oe=vt(Oe))Se++;Oe=0;for(var yt=ue;yt;yt=vt(yt))Oe++;for(;0<Se-Oe;)ye=vt(ye),Se--;for(;0<Oe-Se;)ue=vt(ue),Oe--;for(;Se--;){if(ye===ue||ue!==null&&ye===ue.alternate){vt=ye;break t}ye=vt(ye),ue=vt(ue)}vt=null}else vt=null;Te!==null&&mA(ze,Ee,Te,vt,!1),lt!==null&&fn!==null&&mA(ze,fn,lt,vt,!0)}}e:{if(Ee=Ce?Or(Ce):window,Te=Ee.nodeName&&Ee.nodeName.toLowerCase(),Te==="select"||Te==="input"&&Ee.type==="file")var Yt=vd;else if(xd(Ee))if(wd)Yt=NZ;else{Yt=$b;var ut=Tb}else Te=Ee.nodeName,!Te||Te.toLowerCase()!=="input"||Ee.type!=="checkbox"&&Ee.type!=="radio"?Ce&&_t(Ce.elementType)&&(Yt=vd):Yt=wp;if(Yt&&(Yt=Yt(i,Ce))){bp(ze,Yt,p,Ne);break e}ut&&ut(i,Ee,Ce),i==="focusout"&&Ce&&Ee.type==="number"&&Ce.memoizedProps.value!=null&&Ae(Ee,"number",Ee.value)}switch(ut=Ce?Or(Ce):window,i){case"focusin":(xd(ut)||ut.contentEditable==="true")&&(jl=ut,Db=Ce,kd=null);break;case"focusout":kd=Db=jl=null;break;case"mousedown":Ib=!0;break;case"contextmenu":case"mouseup":case"dragend":Ib=!1,Wj(ze,p,Ne);break;case"selectionchange":if(IZ)break;case"keydown":case"keyup":Wj(ze,p,Ne)}var Dt;if(oe)e:{switch(i){case"compositionstart":var Bt="onCompositionStart";break e;case"compositionend":Bt="onCompositionEnd";break e;case"compositionupdate":Bt="onCompositionUpdate";break e}Bt=void 0}else Pr?Gt(i,p)&&(Bt="onCompositionEnd"):i==="keydown"&&p.keyCode===229&&(Bt="onCompositionStart");Bt&&(dt&&p.locale!=="ko"&&(Pr||Bt!=="onCompositionStart"?Bt==="onCompositionEnd"&&Pr&&(Dt=dp()):(ao=Ne,gd="value"in ao?ao.value:ao.textContent,Pr=!0)),ut=cg(Ce,Bt),0<ut.length&&(Bt=new gp(Bt,i,null,p,Ne),ze.push({event:Bt,listeners:ut}),Dt?Bt.data=Dt:(Dt=kn(p),Dt!==null&&(Bt.data=Dt)))),(Dt=Ke?Eb(i,p):yp(i,p))&&(Bt=cg(Ce,"onBeforeInput"),0<Bt.length&&(ut=new gp("onBeforeInput","beforeinput",null,p,Ne),ze.push({event:ut,listeners:Bt}),ut.data=Dt)),yQ(ze,i,Ce,p,Ne)}gA(ze,c)})}function Yd(i,c,p){return{instance:i,listener:c,currentTarget:p}}function cg(i,c){for(var p=c+"Capture",m=[];i!==null;){var k=i,R=k.stateNode;if(k=k.tag,k!==5&&k!==26&&k!==27||R===null||(k=fa(i,p),k!=null&&m.unshift(Yd(i,k,R)),k=fa(i,c),k!=null&&m.push(Yd(i,k,R))),i.tag===3)return m;i=i.return}return[]}function wQ(i){if(i===null)return null;do i=i.return;while(i&&i.tag!==5&&i.tag!==27);return i||null}function mA(i,c,p,m,k){for(var R=c._reactName,L=[];p!==null&&p!==m;){var K=p,ie=K.alternate,Ce=K.stateNode;if(K=K.tag,ie!==null&&ie===m)break;K!==5&&K!==26&&K!==27||Ce===null||(ie=Ce,k?(Ce=fa(p,R),Ce!=null&&L.unshift(Yd(p,Ce,ie))):k||(Ce=fa(p,R),Ce!=null&&L.push(Yd(p,Ce,ie)))),p=p.return}L.length!==0&&i.push({event:c,listeners:L})}var _Q=/\r\n?/g,SQ=/\u0000|\uFFFD/g;function yA(i){return(typeof i=="string"?i:""+i).replace(_Q,`
`).replace(SQ,"")}function bA(i,c){return c=yA(c),yA(i)===c}function un(i,c,p,m,k,R){switch(p){case"children":typeof m=="string"?c==="body"||c==="textarea"&&m===""||bt(i,m):(typeof m=="number"||typeof m=="bigint")&&c!=="body"&&bt(i,""+m);break;case"className":Eo(i,"class",m);break;case"tabIndex":Eo(i,"tabindex",m);break;case"dir":case"role":case"viewBox":case"width":case"height":Eo(i,p,m);break;case"style":gt(i,m,R);break;case"data":if(c!=="object"){Eo(i,"data",m);break}case"src":case"href":if(m===""&&(c!=="a"||p!=="href")){i.removeAttribute(p);break}if(m==null||typeof m=="function"||typeof m=="symbol"||typeof m=="boolean"){i.removeAttribute(p);break}m=sn(""+m),i.setAttribute(p,m);break;case"action":case"formAction":if(typeof m=="function"){i.setAttribute(p,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof R=="function"&&(p==="formAction"?(c!=="input"&&un(i,c,"name",k.name,k,null),un(i,c,"formEncType",k.formEncType,k,null),un(i,c,"formMethod",k.formMethod,k,null),un(i,c,"formTarget",k.formTarget,k,null)):(un(i,c,"encType",k.encType,k,null),un(i,c,"method",k.method,k,null),un(i,c,"target",k.target,k,null)));if(m==null||typeof m=="symbol"||typeof m=="boolean"){i.removeAttribute(p);break}m=sn(""+m),i.setAttribute(p,m);break;case"onClick":m!=null&&(i.onclick=wn);break;case"onScroll":m!=null&&zt("scroll",i);break;case"onScrollEnd":m!=null&&zt("scrollend",i);break;case"dangerouslySetInnerHTML":if(m!=null){if(typeof m!="object"||!("__html"in m))throw Error(s(61));if(p=m.__html,p!=null){if(k.children!=null)throw Error(s(60));i.innerHTML=p}}break;case"multiple":i.multiple=m&&typeof m!="function"&&typeof m!="symbol";break;case"muted":i.muted=m&&typeof m!="function"&&typeof m!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(m==null||typeof m=="function"||typeof m=="boolean"||typeof m=="symbol"){i.removeAttribute("xlink:href");break}p=sn(""+m),i.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",p);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":m!=null&&typeof m!="function"&&typeof m!="symbol"?i.setAttribute(p,""+m):i.removeAttribute(p);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":m&&typeof m!="function"&&typeof m!="symbol"?i.setAttribute(p,""):i.removeAttribute(p);break;case"capture":case"download":m===!0?i.setAttribute(p,""):m!==!1&&m!=null&&typeof m!="function"&&typeof m!="symbol"?i.setAttribute(p,m):i.removeAttribute(p);break;case"cols":case"rows":case"size":case"span":m!=null&&typeof m!="function"&&typeof m!="symbol"&&!isNaN(m)&&1<=m?i.setAttribute(p,m):i.removeAttribute(p);break;case"rowSpan":case"start":m==null||typeof m=="function"||typeof m=="symbol"||isNaN(m)?i.removeAttribute(p):i.setAttribute(p,m);break;case"popover":zt("beforetoggle",i),zt("toggle",i),nn(i,"popover",m);break;case"xlinkActuate":Jn(i,"http://www.w3.org/1999/xlink","xlink:actuate",m);break;case"xlinkArcrole":Jn(i,"http://www.w3.org/1999/xlink","xlink:arcrole",m);break;case"xlinkRole":Jn(i,"http://www.w3.org/1999/xlink","xlink:role",m);break;case"xlinkShow":Jn(i,"http://www.w3.org/1999/xlink","xlink:show",m);break;case"xlinkTitle":Jn(i,"http://www.w3.org/1999/xlink","xlink:title",m);break;case"xlinkType":Jn(i,"http://www.w3.org/1999/xlink","xlink:type",m);break;case"xmlBase":Jn(i,"http://www.w3.org/XML/1998/namespace","xml:base",m);break;case"xmlLang":Jn(i,"http://www.w3.org/XML/1998/namespace","xml:lang",m);break;case"xmlSpace":Jn(i,"http://www.w3.org/XML/1998/namespace","xml:space",m);break;case"is":nn(i,"is",m);break;case"innerText":case"textContent":break;default:(!(2<p.length)||p[0]!=="o"&&p[0]!=="O"||p[1]!=="n"&&p[1]!=="N")&&(p=Kt.get(p)||p,nn(i,p,m))}}function ov(i,c,p,m,k,R){switch(p){case"style":gt(i,m,R);break;case"dangerouslySetInnerHTML":if(m!=null){if(typeof m!="object"||!("__html"in m))throw Error(s(61));if(p=m.__html,p!=null){if(k.children!=null)throw Error(s(60));i.innerHTML=p}}break;case"children":typeof m=="string"?bt(i,m):(typeof m=="number"||typeof m=="bigint")&&bt(i,""+m);break;case"onScroll":m!=null&&zt("scroll",i);break;case"onScrollEnd":m!=null&&zt("scrollend",i);break;case"onClick":m!=null&&(i.onclick=wn);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":break;case"innerText":case"textContent":break;default:if(!ca.hasOwnProperty(p))e:{if(p[0]==="o"&&p[1]==="n"&&(k=p.endsWith("Capture"),c=p.slice(2,k?p.length-7:void 0),R=i[os]||null,R=R!=null?R[p]:null,typeof R=="function"&&i.removeEventListener(c,R,k),typeof m=="function")){typeof R!="function"&&R!==null&&(p in i?i[p]=null:i.hasAttribute(p)&&i.removeAttribute(p)),i.addEventListener(c,m,k);break e}p in i?i[p]=m:m===!0?i.setAttribute(p,""):nn(i,p,m)}}}function gs(i,c,p){switch(c){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":zt("error",i),zt("load",i);var m=!1,k=!1,R;for(R in p)if(p.hasOwnProperty(R)){var L=p[R];if(L!=null)switch(R){case"src":m=!0;break;case"srcSet":k=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(s(137,c));default:un(i,c,R,L,p,null)}}k&&un(i,c,"srcSet",p.srcSet,p,null),m&&un(i,c,"src",p.src,p,null);return;case"input":zt("invalid",i);var K=R=L=k=null,ie=null,Ce=null;for(m in p)if(p.hasOwnProperty(m)){var Ne=p[m];if(Ne!=null)switch(m){case"name":k=Ne;break;case"type":L=Ne;break;case"checked":ie=Ne;break;case"defaultChecked":Ce=Ne;break;case"value":R=Ne;break;case"defaultValue":K=Ne;break;case"children":case"dangerouslySetInnerHTML":if(Ne!=null)throw Error(s(137,c));break;default:un(i,c,m,Ne,p,null)}}de(i,R,K,ie,Ce,L,k,!1);return;case"select":zt("invalid",i),m=L=R=null;for(k in p)if(p.hasOwnProperty(k)&&(K=p[k],K!=null))switch(k){case"value":R=K;break;case"defaultValue":L=K;break;case"multiple":m=K;default:un(i,c,k,K,p,null)}c=R,p=L,i.multiple=!!m,c!=null?Me(i,!!m,c,!1):p!=null&&Me(i,!!m,p,!0);return;case"textarea":zt("invalid",i),R=k=m=null;for(L in p)if(p.hasOwnProperty(L)&&(K=p[L],K!=null))switch(L){case"value":m=K;break;case"defaultValue":k=K;break;case"children":R=K;break;case"dangerouslySetInnerHTML":if(K!=null)throw Error(s(91));break;default:un(i,c,L,K,p,null)}rt(i,m,k,R);return;case"option":for(ie in p)p.hasOwnProperty(ie)&&(m=p[ie],m!=null)&&(ie==="selected"?i.selected=m&&typeof m!="function"&&typeof m!="symbol":un(i,c,ie,m,p,null));return;case"dialog":zt("beforetoggle",i),zt("toggle",i),zt("cancel",i),zt("close",i);break;case"iframe":case"object":zt("load",i);break;case"video":case"audio":for(m=0;m<Gd.length;m++)zt(Gd[m],i);break;case"image":zt("error",i),zt("load",i);break;case"details":zt("toggle",i);break;case"embed":case"source":case"link":zt("error",i),zt("load",i);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(Ce in p)if(p.hasOwnProperty(Ce)&&(m=p[Ce],m!=null))switch(Ce){case"children":case"dangerouslySetInnerHTML":throw Error(s(137,c));default:un(i,c,Ce,m,p,null)}return;default:if(_t(c)){for(Ne in p)p.hasOwnProperty(Ne)&&(m=p[Ne],m!==void 0&&ov(i,c,Ne,m,p,void 0));return}}for(K in p)p.hasOwnProperty(K)&&(m=p[K],m!=null&&un(i,c,K,m,p,null))}function kQ(i,c,p,m){switch(c){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var k=null,R=null,L=null,K=null,ie=null,Ce=null,Ne=null;for(Te in p){var ze=p[Te];if(p.hasOwnProperty(Te)&&ze!=null)switch(Te){case"checked":break;case"value":break;case"defaultValue":ie=ze;default:m.hasOwnProperty(Te)||un(i,c,Te,null,m,ze)}}for(var Ee in m){var Te=m[Ee];if(ze=p[Ee],m.hasOwnProperty(Ee)&&(Te!=null||ze!=null))switch(Ee){case"type":R=Te;break;case"name":k=Te;break;case"checked":Ce=Te;break;case"defaultChecked":Ne=Te;break;case"value":L=Te;break;case"defaultValue":K=Te;break;case"children":case"dangerouslySetInnerHTML":if(Te!=null)throw Error(s(137,c));break;default:Te!==ze&&un(i,c,Ee,Te,m,ze)}}ua(i,L,K,ie,Ce,Ne,R,k);return;case"select":Te=L=K=Ee=null;for(R in p)if(ie=p[R],p.hasOwnProperty(R)&&ie!=null)switch(R){case"value":break;case"multiple":Te=ie;default:m.hasOwnProperty(R)||un(i,c,R,null,m,ie)}for(k in m)if(R=m[k],ie=p[k],m.hasOwnProperty(k)&&(R!=null||ie!=null))switch(k){case"value":Ee=R;break;case"defaultValue":K=R;break;case"multiple":L=R;default:R!==ie&&un(i,c,k,R,m,ie)}c=K,p=L,m=Te,Ee!=null?Me(i,!!p,Ee,!1):!!m!=!!p&&(c!=null?Me(i,!!p,c,!0):Me(i,!!p,p?[]:"",!1));return;case"textarea":Te=Ee=null;for(K in p)if(k=p[K],p.hasOwnProperty(K)&&k!=null&&!m.hasOwnProperty(K))switch(K){case"value":break;case"children":break;default:un(i,c,K,null,m,k)}for(L in m)if(k=m[L],R=p[L],m.hasOwnProperty(L)&&(k!=null||R!=null))switch(L){case"value":Ee=k;break;case"defaultValue":Te=k;break;case"children":break;case"dangerouslySetInnerHTML":if(k!=null)throw Error(s(91));break;default:k!==R&&un(i,c,L,k,m,R)}Ue(i,Ee,Te);return;case"option":for(var lt in p)Ee=p[lt],p.hasOwnProperty(lt)&&Ee!=null&&!m.hasOwnProperty(lt)&&(lt==="selected"?i.selected=!1:un(i,c,lt,null,m,Ee));for(ie in m)Ee=m[ie],Te=p[ie],m.hasOwnProperty(ie)&&Ee!==Te&&(Ee!=null||Te!=null)&&(ie==="selected"?i.selected=Ee&&typeof Ee!="function"&&typeof Ee!="symbol":un(i,c,ie,Ee,m,Te));return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var vt in p)Ee=p[vt],p.hasOwnProperty(vt)&&Ee!=null&&!m.hasOwnProperty(vt)&&un(i,c,vt,null,m,Ee);for(Ce in m)if(Ee=m[Ce],Te=p[Ce],m.hasOwnProperty(Ce)&&Ee!==Te&&(Ee!=null||Te!=null))switch(Ce){case"children":case"dangerouslySetInnerHTML":if(Ee!=null)throw Error(s(137,c));break;default:un(i,c,Ce,Ee,m,Te)}return;default:if(_t(c)){for(var fn in p)Ee=p[fn],p.hasOwnProperty(fn)&&Ee!==void 0&&!m.hasOwnProperty(fn)&&ov(i,c,fn,void 0,m,Ee);for(Ne in m)Ee=m[Ne],Te=p[Ne],!m.hasOwnProperty(Ne)||Ee===Te||Ee===void 0&&Te===void 0||ov(i,c,Ne,Ee,m,Te);return}}for(var ye in p)Ee=p[ye],p.hasOwnProperty(ye)&&Ee!=null&&!m.hasOwnProperty(ye)&&un(i,c,ye,null,m,Ee);for(ze in m)Ee=m[ze],Te=p[ze],!m.hasOwnProperty(ze)||Ee===Te||Ee==null&&Te==null||un(i,c,ze,Ee,m,Te)}function xA(i){switch(i){case"css":case"script":case"font":case"img":case"image":case"input":case"link":return!0;default:return!1}}function CQ(){if(typeof performance.getEntriesByType=="function"){for(var i=0,c=0,p=performance.getEntriesByType("resource"),m=0;m<p.length;m++){var k=p[m],R=k.transferSize,L=k.initiatorType,K=k.duration;if(R&&K&&xA(L)){for(L=0,K=k.responseEnd,m+=1;m<p.length;m++){var ie=p[m],Ce=ie.startTime;if(Ce>K)break;var Ne=ie.transferSize,ze=ie.initiatorType;Ne&&xA(ze)&&(ie=ie.responseEnd,L+=Ne*(ie<K?1:(K-Ce)/(ie-Ce)))}if(--m,c+=8*(R+L)/(k.duration/1e3),i++,10<i)break}}if(0<i)return c/i/1e6}return navigator.connection&&(i=navigator.connection.downlink,typeof i=="number")?i:5}var av=null,iv=null;function dg(i){return i.nodeType===9?i:i.ownerDocument}function vA(i){switch(i){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function wA(i,c){if(i===0)switch(c){case"svg":return 1;case"math":return 2;default:return 0}return i===1&&c==="foreignObject"?0:i}function lv(i,c){return i==="textarea"||i==="noscript"||typeof c.children=="string"||typeof c.children=="number"||typeof c.children=="bigint"||typeof c.dangerouslySetInnerHTML=="object"&&c.dangerouslySetInnerHTML!==null&&c.dangerouslySetInnerHTML.__html!=null}var cv=null;function jQ(){var i=window.event;return i&&i.type==="popstate"?i===cv?!1:(cv=i,!0):(cv=null,!1)}var _A=typeof setTimeout=="function"?setTimeout:void 0,EQ=typeof clearTimeout=="function"?clearTimeout:void 0,SA=typeof Promise=="function"?Promise:void 0,RQ=typeof queueMicrotask=="function"?queueMicrotask:typeof SA<"u"?function(i){return SA.resolve(null).then(i).catch(AQ)}:_A;function AQ(i){setTimeout(function(){throw i})}function Ta(i){return i==="head"}function kA(i,c){var p=c,m=0;do{var k=p.nextSibling;if(i.removeChild(p),k&&k.nodeType===8)if(p=k.data,p==="/$"||p==="/&"){if(m===0){i.removeChild(k),Ql(c);return}m--}else if(p==="$"||p==="$?"||p==="$~"||p==="$!"||p==="&")m++;else if(p==="html")Xd(i.ownerDocument.documentElement);else if(p==="head"){p=i.ownerDocument.head,Xd(p);for(var R=p.firstChild;R;){var L=R.nextSibling,K=R.nodeName;R[jo]||K==="SCRIPT"||K==="STYLE"||K==="LINK"&&R.rel.toLowerCase()==="stylesheet"||p.removeChild(R),R=L}}else p==="body"&&Xd(i.ownerDocument.body);p=k}while(p);Ql(c)}function CA(i,c){var p=i;i=0;do{var m=p.nextSibling;if(p.nodeType===1?c?(p._stashedDisplay=p.style.display,p.style.display="none"):(p.style.display=p._stashedDisplay||"",p.getAttribute("style")===""&&p.removeAttribute("style")):p.nodeType===3&&(c?(p._stashedText=p.nodeValue,p.nodeValue=""):p.nodeValue=p._stashedText||""),m&&m.nodeType===8)if(p=m.data,p==="/$"){if(i===0)break;i--}else p!=="$"&&p!=="$?"&&p!=="$~"&&p!=="$!"||i++;p=m}while(p)}function dv(i){var c=i.firstChild;for(c&&c.nodeType===10&&(c=c.nextSibling);c;){var p=c;switch(c=c.nextSibling,p.nodeName){case"HTML":case"HEAD":case"BODY":dv(p),ai(p);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if(p.rel.toLowerCase()==="stylesheet")continue}i.removeChild(p)}}function TQ(i,c,p,m){for(;i.nodeType===1;){var k=p;if(i.nodeName.toLowerCase()!==c.toLowerCase()){if(!m&&(i.nodeName!=="INPUT"||i.type!=="hidden"))break}else if(m){if(!i[jo])switch(c){case"meta":if(!i.hasAttribute("itemprop"))break;return i;case"link":if(R=i.getAttribute("rel"),R==="stylesheet"&&i.hasAttribute("data-precedence"))break;if(R!==k.rel||i.getAttribute("href")!==(k.href==null||k.href===""?null:k.href)||i.getAttribute("crossorigin")!==(k.crossOrigin==null?null:k.crossOrigin)||i.getAttribute("title")!==(k.title==null?null:k.title))break;return i;case"style":if(i.hasAttribute("data-precedence"))break;return i;case"script":if(R=i.getAttribute("src"),(R!==(k.src==null?null:k.src)||i.getAttribute("type")!==(k.type==null?null:k.type)||i.getAttribute("crossorigin")!==(k.crossOrigin==null?null:k.crossOrigin))&&R&&i.hasAttribute("async")&&!i.hasAttribute("itemprop"))break;return i;default:return i}}else if(c==="input"&&i.type==="hidden"){var R=k.name==null?null:""+k.name;if(k.type==="hidden"&&i.getAttribute("name")===R)return i}else return i;if(i=yr(i.nextSibling),i===null)break}return null}function $Q(i,c,p){if(c==="")return null;for(;i.nodeType!==3;)if((i.nodeType!==1||i.nodeName!=="INPUT"||i.type!=="hidden")&&!p||(i=yr(i.nextSibling),i===null))return null;return i}function jA(i,c){for(;i.nodeType!==8;)if((i.nodeType!==1||i.nodeName!=="INPUT"||i.type!=="hidden")&&!c||(i=yr(i.nextSibling),i===null))return null;return i}function uv(i){return i.data==="$?"||i.data==="$~"}function fv(i){return i.data==="$!"||i.data==="$?"&&i.ownerDocument.readyState!=="loading"}function NQ(i,c){var p=i.ownerDocument;if(i.data==="$~")i._reactRetry=c;else if(i.data!=="$?"||p.readyState!=="loading")c();else{var m=function(){c(),p.removeEventListener("DOMContentLoaded",m)};p.addEventListener("DOMContentLoaded",m),i._reactRetry=m}}function yr(i){for(;i!=null;i=i.nextSibling){var c=i.nodeType;if(c===1||c===3)break;if(c===8){if(c=i.data,c==="$"||c==="$!"||c==="$?"||c==="$~"||c==="&"||c==="F!"||c==="F")break;if(c==="/$"||c==="/&")return null}}return i}var pv=null;function EA(i){i=i.nextSibling;for(var c=0;i;){if(i.nodeType===8){var p=i.data;if(p==="/$"||p==="/&"){if(c===0)return yr(i.nextSibling);c--}else p!=="$"&&p!=="$!"&&p!=="$?"&&p!=="$~"&&p!=="&"||c++}i=i.nextSibling}return null}function RA(i){i=i.previousSibling;for(var c=0;i;){if(i.nodeType===8){var p=i.data;if(p==="$"||p==="$!"||p==="$?"||p==="$~"||p==="&"){if(c===0)return i;c--}else p!=="/$"&&p!=="/&"||c++}i=i.previousSibling}return null}function AA(i,c,p){switch(c=dg(p),i){case"html":if(i=c.documentElement,!i)throw Error(s(452));return i;case"head":if(i=c.head,!i)throw Error(s(453));return i;case"body":if(i=c.body,!i)throw Error(s(454));return i;default:throw Error(s(451))}}function Xd(i){for(var c=i.attributes;c.length;)i.removeAttributeNode(c[0]);ai(i)}var br=new Map,TA=new Set;function ug(i){return typeof i.getRootNode=="function"?i.getRootNode():i.nodeType===9?i:i.ownerDocument}var qo=B.d;B.d={f:DQ,r:IQ,D:LQ,C:OQ,L:MQ,m:zQ,X:BQ,S:PQ,M:HQ};function DQ(){var i=qo.f(),c=ng();return i||c}function IQ(i){var c=dr(i);c!==null&&c.tag===5&&c.type==="form"?KE(c):qo.r(i)}var Xl=typeof document>"u"?null:document;function $A(i,c,p){var m=Xl;if(m&&typeof c=="string"&&c){var k=vs(c);k='link[rel="'+i+'"][href="'+k+'"]',typeof p=="string"&&(k+='[crossorigin="'+p+'"]'),TA.has(k)||(TA.add(k),i={rel:i,crossOrigin:p,href:c},m.querySelector(k)===null&&(c=m.createElement("link"),gs(c,"link",i),Nn(c),m.head.appendChild(c)))}}function LQ(i){qo.D(i),$A("dns-prefetch",i,null)}function OQ(i,c){qo.C(i,c),$A("preconnect",i,c)}function MQ(i,c,p){qo.L(i,c,p);var m=Xl;if(m&&i&&c){var k='link[rel="preload"][as="'+vs(c)+'"]';c==="image"&&p&&p.imageSrcSet?(k+='[imagesrcset="'+vs(p.imageSrcSet)+'"]',typeof p.imageSizes=="string"&&(k+='[imagesizes="'+vs(p.imageSizes)+'"]')):k+='[href="'+vs(i)+'"]';var R=k;switch(c){case"style":R=Jl(i);break;case"script":R=Zl(i)}br.has(R)||(i=h({rel:"preload",href:c==="image"&&p&&p.imageSrcSet?void 0:i,as:c},p),br.set(R,i),m.querySelector(k)!==null||c==="style"&&m.querySelector(Jd(R))||c==="script"&&m.querySelector(Zd(R))||(c=m.createElement("link"),gs(c,"link",i),Nn(c),m.head.appendChild(c)))}}function zQ(i,c){qo.m(i,c);var p=Xl;if(p&&i){var m=c&&typeof c.as=="string"?c.as:"script",k='link[rel="modulepreload"][as="'+vs(m)+'"][href="'+vs(i)+'"]',R=k;switch(m){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":R=Zl(i)}if(!br.has(R)&&(i=h({rel:"modulepreload",href:i},c),br.set(R,i),p.querySelector(k)===null)){switch(m){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(p.querySelector(Zd(R)))return}m=p.createElement("link"),gs(m,"link",i),Nn(m),p.head.appendChild(m)}}}function PQ(i,c,p){qo.S(i,c,p);var m=Xl;if(m&&i){var k=Is(m).hoistableStyles,R=Jl(i);c=c||"default";var L=k.get(R);if(!L){var K={loading:0,preload:null};if(L=m.querySelector(Jd(R)))K.loading=5;else{i=h({rel:"stylesheet",href:i,"data-precedence":c},p),(p=br.get(R))&&gv(i,p);var ie=L=m.createElement("link");Nn(ie),gs(ie,"link",i),ie._p=new Promise(function(Ce,Ne){ie.onload=Ce,ie.onerror=Ne}),ie.addEventListener("load",function(){K.loading|=1}),ie.addEventListener("error",function(){K.loading|=2}),K.loading|=4,fg(L,c,m)}L={type:"stylesheet",instance:L,count:1,state:K},k.set(R,L)}}}function BQ(i,c){qo.X(i,c);var p=Xl;if(p&&i){var m=Is(p).hoistableScripts,k=Zl(i),R=m.get(k);R||(R=p.querySelector(Zd(k)),R||(i=h({src:i,async:!0},c),(c=br.get(k))&&hv(i,c),R=p.createElement("script"),Nn(R),gs(R,"link",i),p.head.appendChild(R)),R={type:"script",instance:R,count:1,state:null},m.set(k,R))}}function HQ(i,c){qo.M(i,c);var p=Xl;if(p&&i){var m=Is(p).hoistableScripts,k=Zl(i),R=m.get(k);R||(R=p.querySelector(Zd(k)),R||(i=h({src:i,async:!0,type:"module"},c),(c=br.get(k))&&hv(i,c),R=p.createElement("script"),Nn(R),gs(R,"link",i),p.head.appendChild(R)),R={type:"script",instance:R,count:1,state:null},m.set(k,R))}}function NA(i,c,p,m){var k=(k=pe.current)?ug(k):null;if(!k)throw Error(s(446));switch(i){case"meta":case"title":return null;case"style":return typeof p.precedence=="string"&&typeof p.href=="string"?(c=Jl(p.href),p=Is(k).hoistableStyles,m=p.get(c),m||(m={type:"style",instance:null,count:0,state:null},p.set(c,m)),m):{type:"void",instance:null,count:0,state:null};case"link":if(p.rel==="stylesheet"&&typeof p.href=="string"&&typeof p.precedence=="string"){i=Jl(p.href);var R=Is(k).hoistableStyles,L=R.get(i);if(L||(k=k.ownerDocument||k,L={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},R.set(i,L),(R=k.querySelector(Jd(i)))&&!R._p&&(L.instance=R,L.state.loading=5),br.has(i)||(p={rel:"preload",as:"style",href:p.href,crossOrigin:p.crossOrigin,integrity:p.integrity,media:p.media,hrefLang:p.hrefLang,referrerPolicy:p.referrerPolicy},br.set(i,p),R||WQ(k,i,p,L.state))),c&&m===null)throw Error(s(528,""));return L}if(c&&m!==null)throw Error(s(529,""));return null;case"script":return c=p.async,p=p.src,typeof p=="string"&&c&&typeof c!="function"&&typeof c!="symbol"?(c=Zl(p),p=Is(k).hoistableScripts,m=p.get(c),m||(m={type:"script",instance:null,count:0,state:null},p.set(c,m)),m):{type:"void",instance:null,count:0,state:null};default:throw Error(s(444,i))}}function Jl(i){return'href="'+vs(i)+'"'}function Jd(i){return'link[rel="stylesheet"]['+i+"]"}function DA(i){return h({},i,{"data-precedence":i.precedence,precedence:null})}function WQ(i,c,p,m){i.querySelector('link[rel="preload"][as="style"]['+c+"]")?m.loading=1:(c=i.createElement("link"),m.preload=c,c.addEventListener("load",function(){return m.loading|=1}),c.addEventListener("error",function(){return m.loading|=2}),gs(c,"link",p),Nn(c),i.head.appendChild(c))}function Zl(i){return'[src="'+vs(i)+'"]'}function Zd(i){return"script[async]"+i}function IA(i,c,p){if(c.count++,c.instance===null)switch(c.type){case"style":var m=i.querySelector('style[data-href~="'+vs(p.href)+'"]');if(m)return c.instance=m,Nn(m),m;var k=h({},p,{"data-href":p.href,"data-precedence":p.precedence,href:null,precedence:null});return m=(i.ownerDocument||i).createElement("style"),Nn(m),gs(m,"style",k),fg(m,p.precedence,i),c.instance=m;case"stylesheet":k=Jl(p.href);var R=i.querySelector(Jd(k));if(R)return c.state.loading|=4,c.instance=R,Nn(R),R;m=DA(p),(k=br.get(k))&&gv(m,k),R=(i.ownerDocument||i).createElement("link"),Nn(R);var L=R;return L._p=new Promise(function(K,ie){L.onload=K,L.onerror=ie}),gs(R,"link",m),c.state.loading|=4,fg(R,p.precedence,i),c.instance=R;case"script":return R=Zl(p.src),(k=i.querySelector(Zd(R)))?(c.instance=k,Nn(k),k):(m=p,(k=br.get(R))&&(m=h({},p),hv(m,k)),i=i.ownerDocument||i,k=i.createElement("script"),Nn(k),gs(k,"link",m),i.head.appendChild(k),c.instance=k);case"void":return null;default:throw Error(s(443,c.type))}else c.type==="stylesheet"&&(c.state.loading&4)===0&&(m=c.instance,c.state.loading|=4,fg(m,p.precedence,i));return c.instance}function fg(i,c,p){for(var m=p.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),k=m.length?m[m.length-1]:null,R=k,L=0;L<m.length;L++){var K=m[L];if(K.dataset.precedence===c)R=K;else if(R!==k)break}R?R.parentNode.insertBefore(i,R.nextSibling):(c=p.nodeType===9?p.head:p,c.insertBefore(i,c.firstChild))}function gv(i,c){i.crossOrigin==null&&(i.crossOrigin=c.crossOrigin),i.referrerPolicy==null&&(i.referrerPolicy=c.referrerPolicy),i.title==null&&(i.title=c.title)}function hv(i,c){i.crossOrigin==null&&(i.crossOrigin=c.crossOrigin),i.referrerPolicy==null&&(i.referrerPolicy=c.referrerPolicy),i.integrity==null&&(i.integrity=c.integrity)}var pg=null;function LA(i,c,p){if(pg===null){var m=new Map,k=pg=new Map;k.set(p,m)}else k=pg,m=k.get(p),m||(m=new Map,k.set(p,m));if(m.has(i))return m;for(m.set(i,null),p=p.getElementsByTagName(i),k=0;k<p.length;k++){var R=p[k];if(!(R[jo]||R[vn]||i==="link"&&R.getAttribute("rel")==="stylesheet")&&R.namespaceURI!=="http://www.w3.org/2000/svg"){var L=R.getAttribute(c)||"";L=i+L;var K=m.get(L);K?K.push(R):m.set(L,[R])}}return m}function OA(i,c,p){i=i.ownerDocument||i,i.head.insertBefore(p,c==="title"?i.querySelector("head > title"):null)}function UQ(i,c,p){if(p===1||c.itemProp!=null)return!1;switch(i){case"meta":case"title":return!0;case"style":if(typeof c.precedence!="string"||typeof c.href!="string"||c.href==="")break;return!0;case"link":if(typeof c.rel!="string"||typeof c.href!="string"||c.href===""||c.onLoad||c.onError)break;return c.rel==="stylesheet"?(i=c.disabled,typeof c.precedence=="string"&&i==null):!0;case"script":if(c.async&&typeof c.async!="function"&&typeof c.async!="symbol"&&!c.onLoad&&!c.onError&&c.src&&typeof c.src=="string")return!0}return!1}function MA(i){return!(i.type==="stylesheet"&&(i.state.loading&3)===0)}function qQ(i,c,p,m){if(p.type==="stylesheet"&&(typeof m.media!="string"||matchMedia(m.media).matches!==!1)&&(p.state.loading&4)===0){if(p.instance===null){var k=Jl(m.href),R=c.querySelector(Jd(k));if(R){c=R._p,c!==null&&typeof c=="object"&&typeof c.then=="function"&&(i.count++,i=gg.bind(i),c.then(i,i)),p.state.loading|=4,p.instance=R,Nn(R);return}R=c.ownerDocument||c,m=DA(m),(k=br.get(k))&&gv(m,k),R=R.createElement("link"),Nn(R);var L=R;L._p=new Promise(function(K,ie){L.onload=K,L.onerror=ie}),gs(R,"link",m),p.instance=R}i.stylesheets===null&&(i.stylesheets=new Map),i.stylesheets.set(p,c),(c=p.state.preload)&&(p.state.loading&3)===0&&(i.count++,p=gg.bind(i),c.addEventListener("load",p),c.addEventListener("error",p))}}var mv=0;function FQ(i,c){return i.stylesheets&&i.count===0&&mg(i,i.stylesheets),0<i.count||0<i.imgCount?function(p){var m=setTimeout(function(){if(i.stylesheets&&mg(i,i.stylesheets),i.unsuspend){var R=i.unsuspend;i.unsuspend=null,R()}},6e4+c);0<i.imgBytes&&mv===0&&(mv=62500*CQ());var k=setTimeout(function(){if(i.waitingForImages=!1,i.count===0&&(i.stylesheets&&mg(i,i.stylesheets),i.unsuspend)){var R=i.unsuspend;i.unsuspend=null,R()}},(i.imgBytes>mv?50:800)+c);return i.unsuspend=p,function(){i.unsuspend=null,clearTimeout(m),clearTimeout(k)}}:null}function gg(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)mg(this,this.stylesheets);else if(this.unsuspend){var i=this.unsuspend;this.unsuspend=null,i()}}}var hg=null;function mg(i,c){i.stylesheets=null,i.unsuspend!==null&&(i.count++,hg=new Map,c.forEach(VQ,i),hg=null,gg.call(i))}function VQ(i,c){if(!(c.state.loading&4)){var p=hg.get(i);if(p)var m=p.get(null);else{p=new Map,hg.set(i,p);for(var k=i.querySelectorAll("link[data-precedence],style[data-precedence]"),R=0;R<k.length;R++){var L=k[R];(L.nodeName==="LINK"||L.getAttribute("media")!=="not all")&&(p.set(L.dataset.precedence,L),m=L)}m&&p.set(null,m)}k=c.instance,L=k.getAttribute("data-precedence"),R=p.get(L)||m,R===m&&p.set(null,k),p.set(L,k),this.count++,m=gg.bind(this),k.addEventListener("load",m),k.addEventListener("error",m),R?R.parentNode.insertBefore(k,R.nextSibling):(i=i.nodeType===9?i.head:i,i.insertBefore(k,i.firstChild)),c.state.loading|=4}}var Qd={$$typeof:C,Provider:null,Consumer:null,_currentValue:te,_currentValue2:te,_threadCount:0};function KQ(i,c,p,m,k,R,L,K,ie){this.tag=1,this.containerInfo=i,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=at(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=at(0),this.hiddenUpdates=at(null),this.identifierPrefix=m,this.onUncaughtError=k,this.onCaughtError=R,this.onRecoverableError=L,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=ie,this.incompleteTransitions=new Map}function zA(i,c,p,m,k,R,L,K,ie,Ce,Ne,ze){return i=new KQ(i,c,p,L,ie,Ce,Ne,ze,K),c=1,R===!0&&(c|=24),R=Js(3,null,null,c),i.current=R,R.stateNode=i,c=Yb(),c.refCount++,i.pooledCache=c,c.refCount++,R.memoizedState={element:m,isDehydrated:p,cache:c},Qb(R),i}function PA(i){return i?(i=Al,i):Al}function BA(i,c,p,m,k,R){k=PA(k),m.context===null?m.context=k:m.pendingContext=k,m=xa(c),m.payload={element:p},R=R===void 0?null:R,R!==null&&(m.callback=R),p=va(i,m,c),p!==null&&(Hs(p,i,c),$d(p,i,c))}function HA(i,c){if(i=i.memoizedState,i!==null&&i.dehydrated!==null){var p=i.retryLane;i.retryLane=p!==0&&p<c?p:c}}function yv(i,c){HA(i,c),(i=i.alternate)&&HA(i,c)}function WA(i){if(i.tag===13||i.tag===31){var c=xi(i,67108864);c!==null&&Hs(c,i,67108864),yv(i,67108864)}}function UA(i){if(i.tag===13||i.tag===31){var c=nr();c=an(c);var p=xi(i,c);p!==null&&Hs(p,i,c),yv(i,c)}}var yg=!0;function GQ(i,c,p,m){var k=U.T;U.T=null;var R=B.p;try{B.p=2,bv(i,c,p,m)}finally{B.p=R,U.T=k}}function YQ(i,c,p,m){var k=U.T;U.T=null;var R=B.p;try{B.p=8,bv(i,c,p,m)}finally{B.p=R,U.T=k}}function bv(i,c,p,m){if(yg){var k=xv(m);if(k===null)rv(i,c,m,bg,p),FA(i,m);else if(JQ(k,i,c,p,m))m.stopPropagation();else if(FA(i,m),c&4&&-1<XQ.indexOf(i)){for(;k!==null;){var R=dr(k);if(R!==null)switch(R.tag){case 3:if(R=R.stateNode,R.current.memoizedState.isDehydrated){var L=Re(R.pendingLanes);if(L!==0){var K=R;for(K.pendingLanes|=2,K.entangledLanes|=2;L;){var ie=1<<31-Q(L);K.entanglements[1]|=ie,L&=~ie}uo(R),(Qt&6)===0&&(eg=Qe()+500,Kd(0))}}break;case 31:case 13:K=xi(R,2),K!==null&&Hs(K,R,2),ng(),yv(R,2)}if(R=xv(m),R===null&&rv(i,c,m,bg,p),R===k)break;k=R}k!==null&&m.stopPropagation()}else rv(i,c,m,null,p)}}function xv(i){return i=li(i),vv(i)}var bg=null;function vv(i){if(bg=null,i=ro(i),i!==null){var c=o(i);if(c===null)i=null;else{var p=c.tag;if(p===13){if(i=l(c),i!==null)return i;i=null}else if(p===31){if(i=d(c),i!==null)return i;i=null}else if(p===3){if(c.stateNode.current.memoizedState.isDehydrated)return c.tag===3?c.stateNode.containerInfo:null;i=null}else c!==i&&(i=null)}}return bg=i,null}function qA(i){switch(i){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(Pe()){case et:return 2;case Le:return 8;case He:case Ve:return 32;case Je:return 268435456;default:return 32}default:return 32}}var wv=!1,$a=null,Na=null,Da=null,eu=new Map,tu=new Map,Ia=[],XQ="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function FA(i,c){switch(i){case"focusin":case"focusout":$a=null;break;case"dragenter":case"dragleave":Na=null;break;case"mouseover":case"mouseout":Da=null;break;case"pointerover":case"pointerout":eu.delete(c.pointerId);break;case"gotpointercapture":case"lostpointercapture":tu.delete(c.pointerId)}}function nu(i,c,p,m,k,R){return i===null||i.nativeEvent!==R?(i={blockedOn:c,domEventName:p,eventSystemFlags:m,nativeEvent:R,targetContainers:[k]},c!==null&&(c=dr(c),c!==null&&WA(c)),i):(i.eventSystemFlags|=m,c=i.targetContainers,k!==null&&c.indexOf(k)===-1&&c.push(k),i)}function JQ(i,c,p,m,k){switch(c){case"focusin":return $a=nu($a,i,c,p,m,k),!0;case"dragenter":return Na=nu(Na,i,c,p,m,k),!0;case"mouseover":return Da=nu(Da,i,c,p,m,k),!0;case"pointerover":var R=k.pointerId;return eu.set(R,nu(eu.get(R)||null,i,c,p,m,k)),!0;case"gotpointercapture":return R=k.pointerId,tu.set(R,nu(tu.get(R)||null,i,c,p,m,k)),!0}return!1}function VA(i){var c=ro(i.target);if(c!==null){var p=o(c);if(p!==null){if(c=p.tag,c===13){if(c=l(p),c!==null){i.blockedOn=c,Cs(i.priority,function(){UA(p)});return}}else if(c===31){if(c=d(p),c!==null){i.blockedOn=c,Cs(i.priority,function(){UA(p)});return}}else if(c===3&&p.stateNode.current.memoizedState.isDehydrated){i.blockedOn=p.tag===3?p.stateNode.containerInfo:null;return}}}i.blockedOn=null}function xg(i){if(i.blockedOn!==null)return!1;for(var c=i.targetContainers;0<c.length;){var p=xv(i.nativeEvent);if(p===null){p=i.nativeEvent;var m=new p.constructor(p.type,p);Ls=m,p.target.dispatchEvent(m),Ls=null}else return c=dr(p),c!==null&&WA(c),i.blockedOn=p,!1;c.shift()}return!0}function KA(i,c,p){xg(i)&&p.delete(c)}function ZQ(){wv=!1,$a!==null&&xg($a)&&($a=null),Na!==null&&xg(Na)&&(Na=null),Da!==null&&xg(Da)&&(Da=null),eu.forEach(KA),tu.forEach(KA)}function vg(i,c){i.blockedOn===c&&(i.blockedOn=null,wv||(wv=!0,n.unstable_scheduleCallback(n.unstable_NormalPriority,ZQ)))}var wg=null;function GA(i){wg!==i&&(wg=i,n.unstable_scheduleCallback(n.unstable_NormalPriority,function(){wg===i&&(wg=null);for(var c=0;c<i.length;c+=3){var p=i[c],m=i[c+1],k=i[c+2];if(typeof m!="function"){if(vv(m||p)===null)continue;break}var R=dr(p);R!==null&&(i.splice(c,3),c-=3,xx(R,{pending:!0,data:k,method:p.method,action:m},m,k))}}))}function Ql(i){function c(ie){return vg(ie,i)}$a!==null&&vg($a,i),Na!==null&&vg(Na,i),Da!==null&&vg(Da,i),eu.forEach(c),tu.forEach(c);for(var p=0;p<Ia.length;p++){var m=Ia[p];m.blockedOn===i&&(m.blockedOn=null)}for(;0<Ia.length&&(p=Ia[0],p.blockedOn===null);)VA(p),p.blockedOn===null&&Ia.shift();if(p=(i.ownerDocument||i).$$reactFormReplay,p!=null)for(m=0;m<p.length;m+=3){var k=p[m],R=p[m+1],L=k[os]||null;if(typeof R=="function")L||GA(p);else if(L){var K=null;if(R&&R.hasAttribute("formAction")){if(k=R,L=R[os]||null)K=L.formAction;else if(vv(k)!==null)continue}else K=L.action;typeof K=="function"?p[m+1]=K:(p.splice(m,3),m-=3),GA(p)}}}function YA(){function i(R){R.canIntercept&&R.info==="react-transition"&&R.intercept({handler:function(){return new Promise(function(L){return k=L})},focusReset:"manual",scroll:"manual"})}function c(){k!==null&&(k(),k=null),m||setTimeout(p,20)}function p(){if(!m&&!navigation.transition){var R=navigation.currentEntry;R&&R.url!=null&&navigation.navigate(R.url,{state:R.getState(),info:"react-transition",history:"replace"})}}if(typeof navigation=="object"){var m=!1,k=null;return navigation.addEventListener("navigate",i),navigation.addEventListener("navigatesuccess",c),navigation.addEventListener("navigateerror",c),setTimeout(p,100),function(){m=!0,navigation.removeEventListener("navigate",i),navigation.removeEventListener("navigatesuccess",c),navigation.removeEventListener("navigateerror",c),k!==null&&(k(),k=null)}}}function _v(i){this._internalRoot=i}_g.prototype.render=_v.prototype.render=function(i){var c=this._internalRoot;if(c===null)throw Error(s(409));var p=c.current,m=nr();BA(p,m,i,c,null,null)},_g.prototype.unmount=_v.prototype.unmount=function(){var i=this._internalRoot;if(i!==null){this._internalRoot=null;var c=i.containerInfo;BA(i.current,2,null,i,null,null),ng(),c[cr]=null}};function _g(i){this._internalRoot=i}_g.prototype.unstable_scheduleHydration=function(i){if(i){var c=$n();i={blockedOn:null,target:i,priority:c};for(var p=0;p<Ia.length&&c!==0&&c<Ia[p].priority;p++);Ia.splice(p,0,i),p===0&&VA(i)}};var XA=e.version;if(XA!=="19.2.6")throw Error(s(527,XA,"19.2.6"));B.findDOMNode=function(i){var c=i._reactInternals;if(c===void 0)throw typeof i.render=="function"?Error(s(188)):(i=Object.keys(i).join(","),Error(s(268,i)));return i=f(c),i=i!==null?g(i):null,i=i===null?null:i.stateNode,i};var QQ={bundleType:0,version:"19.2.6",rendererPackageName:"react-dom",currentDispatcherRef:U,reconcilerVersion:"19.2.6"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var Sg=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Sg.isDisabled&&Sg.supportsFiber)try{Rt=Sg.inject(QQ),xe=Sg}catch{}}return ec.createRoot=function(i,c){if(!r(i))throw Error(s(299));var p=!1,m="",k=sR,R=rR,L=oR;return c!=null&&(c.unstable_strictMode===!0&&(p=!0),c.identifierPrefix!==void 0&&(m=c.identifierPrefix),c.onUncaughtError!==void 0&&(k=c.onUncaughtError),c.onCaughtError!==void 0&&(R=c.onCaughtError),c.onRecoverableError!==void 0&&(L=c.onRecoverableError)),c=zA(i,1,!1,null,null,p,m,null,k,R,L,YA),i[cr]=c.current,sv(i),new _v(c)},ec.hydrateRoot=function(i,c,p){if(!r(i))throw Error(s(299));var m=!1,k="",R=sR,L=rR,K=oR,ie=null;return p!=null&&(p.unstable_strictMode===!0&&(m=!0),p.identifierPrefix!==void 0&&(k=p.identifierPrefix),p.onUncaughtError!==void 0&&(R=p.onUncaughtError),p.onCaughtError!==void 0&&(L=p.onCaughtError),p.onRecoverableError!==void 0&&(K=p.onRecoverableError),p.formState!==void 0&&(ie=p.formState)),c=zA(i,1,!0,c,p??null,m,k,ie,R,L,K,YA),c.context=PA(null),p=c.current,m=nr(),m=an(m),k=xa(m),k.callback=null,va(p,k,m),p=m,c.current.lanes=p,nt(c,p),uo(c),i[cr]=c.current,sv(i),new _g(c)},ec.version="19.2.6",ec}var $v;function oT(){if($v)return jg.exports;$v=1;function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}return n(),jg.exports=rT(),jg.exports}var Tg=oT();const $g=po(Tg),tc=[],aT=50;let Ng=!1;function Nv(){try{return window.G7Core?.devTools}catch{return}}function Ni(n,e,t){const s=Nv();if(Ng&&s?.isEnabled?.()){s.trackLog?.(n,e,t);return}Ng||(n==="error"||n==="warn")&&tc.length<aT&&tc.push({level:n,prefix:e,args:t,timestamp:Date.now()})}function Dv(){Ng=!0;const n=Nv();if(!n?.isEnabled?.()){tc.length=0;return}for(const e of tc)n.trackLog?.(e.level,e.prefix,e.args);tc.length=0}const ei=class ei{constructor(){ne(this,"debug");ne(this,"prefix","[TemplateEngine]");this.debug=!1}static getInstance(){return ei.instance||(ei.instance=new ei),ei.instance}setDebug(e){this.debug=e}isDebugEnabled(){return this.debug}log(...e){this.debug&&console.log(this.prefix,...e),Ni("log","TemplateEngine",e)}error(...e){this.debug&&console.error(this.prefix,...e),Ni("error","TemplateEngine",e)}warn(...e){this.debug&&console.warn(this.prefix,...e),Ni("warn","TemplateEngine",e)}};ne(ei,"instance");let nc=ei;function Ht(n){const e=`[${n}]`,t=nc.getInstance();return{log:(...s)=>{t.isDebugEnabled()&&console.log(e,...s),Ni("log",n,s)},warn:(...s)=>{t.isDebugEnabled()&&console.warn(e,...s),Ni("warn",n,s)},error:(...s)=>{t.isDebugEnabled()&&console.error(e,...s),Ni("error",n,s)}}}nc.getInstance();const Ur=Ht("ComponentRegistry");class es extends Error{constructor(t,s,r){super(t);ne(this,"code");ne(this,"details");this.code=s,this.details=r,this.name="ComponentRegistryError"}}const Ks=class Ks{constructor(){ne(this,"registry",{});ne(this,"manifest",null);ne(this,"loadingState","idle");ne(this,"error",null);ne(this,"templateId",null);ne(this,"templateType",null)}static getInstance(){return Ks.instance||(Ks.instance=new Ks),Ks.instance}static createIsolatedInstance(){return new Ks}static resetInstance(){Ks.instance=null}async loadComponents(e,t){if(this.loadingState==="loading")throw new es("Components are already being loaded","LOADING_IN_PROGRESS");if(this.loadingState==="loaded"&&this.templateId===e&&this.templateType===t){Ur.log("Components already loaded for template:",e,t);return}this.loadingState="loading",this.templateId=e,this.templateType=t,this.error=null;try{await this.loadManifest(),await this.loadComponentBundle(),this.loadingState="loaded",Ur.log("Successfully loaded components:",Object.keys(this.registry).length)}catch(s){throw this.loadingState="error",this.error=s instanceof Error?s:new Error(String(s)),new es(`Failed to load components: ${this.error.message}`,"LOAD_FAILED",{originalError:this.error})}}async loadManifest(){try{if(!this.templateId)throw new es("Template ID not set","TEMPLATE_ID_NOT_SET");const e=`${this.templateId}:${this.templateType}`;if(Ks.manifestCache.has(e)){this.manifest=Ks.manifestCache.get(e),Ur.log("Manifest loaded from cache:",this.manifest.templateId);return}const t=`/api/templates/${this.templateId}/components.json`,s=await fetch(t);if(!s.ok)throw new es(`Failed to fetch manifest: ${s.status} ${s.statusText}`,"MANIFEST_FETCH_FAILED",{status:s.status,statusText:s.statusText});const r=await s.json();this.validateManifest(r),this.manifest=r,Ks.manifestCache.set(e,r),Ur.log("Manifest loaded and cached:",r.templateId)}catch(e){throw e instanceof es?e:new es("Failed to load component manifest","MANIFEST_LOAD_FAILED",{originalError:e})}}validateManifest(e){if(!e.version)throw new es("Manifest missing required field: version","MANIFEST_INVALID",{field:"version"});if(!e.templateId)throw new es("Manifest missing required field: templateId","MANIFEST_INVALID",{field:"templateId"});if(!e.components||typeof e.components!="object")throw new es("Manifest missing required field: components","MANIFEST_INVALID",{field:"components"});const t=["basic","composite","layout"];for(const s of t){if(!Array.isArray(e.components[s]))throw new es(`Manifest field 'components.${s}' must be an array`,"MANIFEST_INVALID",{field:`components.${s}`,value:e.components[s]});e.components[s].forEach((r,o)=>{if(!r.name||typeof r.name!="string")throw new es(`Invalid component metadata at ${s}[${o}]: missing or invalid 'name'`,"MANIFEST_INVALID",{type:s,index:o,metadata:r});if(!r.type||typeof r.type!="string")throw new es(`Invalid component metadata at ${s}[${o}]: missing or invalid 'type'`,"MANIFEST_INVALID",{type:s,index:o,metadata:r})})}Ur.log("Manifest validation passed")}async loadComponentBundle(){try{if(!this.templateId)throw new es("Template ID not set","TEMPLATE_ID_NOT_SET");const e=this.getGlobalVariableName(),t=window[e];if(!t||typeof t!="object")throw new es(`Component bundle not loaded. Expected global variable: ${e}. Ensure admin.blade.php includes the IIFE bundle script.`,"BUNDLE_NOT_LOADED",{expectedVariable:e});await this.registerComponentsFromManifest(t),Ur.log("Component bundle loaded from global variable:",e)}catch(e){throw e instanceof es?e:new es("Failed to load component bundle","BUNDLE_LOAD_FAILED",{originalError:e})}}getGlobalVariableName(){if(!this.templateId)throw new es("Template ID not set","TEMPLATE_ID_NOT_SET");return this.templateId.split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join("")}async registerComponentsFromManifest(e){if(!this.manifest)throw new es("Manifest not loaded","MANIFEST_NOT_LOADED");const t=["basic","composite","layout"];for(const s of t){const r=this.manifest.components[s]||[];for(const o of r){const l=o.name,d=e[l];if(!d){Ur.warn(`Component '${l}' not found in bundle`);continue}this.registerComponent(l,d,o)}}}registerComponent(e,t,s){this.registry[e]&&Ur.warn(`Component '${e}' already registered, overwriting`);const r=qe.memo(t);this.registry[e]={component:r,metadata:s},Ur.log(`[ComponentRegistry] Registered component: ${e} (${s.type})`)}getComponent(e){const t=this.registry[e];return t?t.component:null}getMetadata(e){const t=this.registry[e];return t?t.metadata:null}hasComponent(e){return e in this.registry}getComponentsByType(e){return Object.entries(this.registry).filter(([t,s])=>s.metadata.type===e).map(([t,s])=>t)}getAllComponents(){return Object.keys(this.registry)}getComponentMap(){const e={};for(const[t,s]of Object.entries(this.registry))e[t]=s.component;return e}getLoadingState(){return this.loadingState}getError(){return this.error}getTemplateId(){return this.templateId}getManifest(){return this.manifest}clear(){this.registry={},this.manifest=null,this.loadingState="idle",this.error=null,this.templateId=null,this.templateType=null,Ur.log("Registry cleared")}};ne(Ks,"instance",null),ne(Ks,"manifestCache",new Map);let xr=Ks;const Iv=Ht("TranslationEngine");class Dg extends Error{constructor(t,s,r){super(t);ne(this,"key");ne(this,"locale");this.key=s,this.locale=r,this.name="TranslationError"}}const Ds=class Ds{constructor(e={}){ne(this,"cache",new Map);ne(this,"translations",new Map);ne(this,"options");ne(this,"cacheVersion",0);this.options={defaultLocale:e.defaultLocale||"ko",fallbackLocale:e.fallbackLocale||"en",cacheTTL:e.cacheTTL||3e5}}static getInstance(e={}){return Ds.instance||(Ds.instance=new Ds(e)),Ds.instance}static resetInstance(){Ds.instance=null}setCacheVersion(e){this.cacheVersion!==e&&(Iv.log("Cache version updated:",this.cacheVersion,"->",e),this.cacheVersion=e,this.cache.clear())}getCacheVersion(){return this.cacheVersion}async loadTranslations(e,t,s="/api",r=!1){const o=`${e}:${t}`;if(!r){const l=this.getFromCache(o);if(l)return this.translations.set(o,l),l}try{let l=`${s}/templates/${e}/lang/${t}.json`;const d=[];this.cacheVersion>0&&d.push(`v=${this.cacheVersion}`),r&&d.push(`_=${Date.now()}`),d.length>0&&(l+=`?${d.join("&")}`);const u=await fetch(l);if(!u.ok)throw new Dg(`Failed to load translations: ${u.statusText}`,void 0,t);const g=await u.json();return this.saveToCache(o,g),this.translations.set(o,g),g}catch(l){throw new Dg(`Failed to fetch translations for ${t}: ${l instanceof Error?l.message:String(l)}`,void 0,t)}}resolveTranslations(e,t,s){let r=e;const o=5;let l=0;for(;l<o&&r.includes("=$t:");){const d=r;if(r=r.replace(Ds.NESTED_TRANSLATION_PARAM_PATTERN,(u,f,g)=>"="+this.translate(g,t,void 0,s)),r===d)break;l++}return r.replace(Ds.TRANSLATION_PATTERN,(d,u,f)=>{const{cleanedParams:g,trailing:h}=this.separateTrailingText(f);return this.translate(u,t,g,s)+h})}translate(e,t,s,r){const o=this.getTranslation(e,t),l=s&&this.cleanParamsStr(s);if(l){const d=this.parseParams(l,r);return this.replaceParams(o,d)}return o}getTranslation(e,t){const{templateId:s,locale:r}=t,o=`${s}:${r}`,l=this.translations.get(o);if(l){const d=this.getNestedValue(l,e);if(d!==null)return d}if(r!==this.options.fallbackLocale){const d=`${s}:${this.options.fallbackLocale}`,u=this.translations.get(d);if(u){const f=this.getNestedValue(u,e);if(f!==null)return f}}return e}getNestedValue(e,t){const s=t.split(".");let r=e;for(const o of s){if(r==null||typeof r!="object")return null;r=r[o]}return typeof r=="string"?r:null}setTranslationValue(e,t,s,r){const o=`${e}:${t}`,l=this.translations.get(o)??{},d=s.split(".");let u=l;for(let f=0;f<d.length-1;f+=1){const g=d[f],h=u[g];(h==null||typeof h!="object"||Array.isArray(h))&&(u[g]={}),u=u[g]}u[d[d.length-1]]=r,this.translations.set(o,l)}parseParams(e,t){const s={},r=e.startsWith("|")?e.slice(1):e,o=[],d=r.replace(/\{\{(?:[^}]|\}(?!\}))*\}\}/g,u=>(o.push(u),`__PLACEHOLDER_${o.length-1}__`)).matchAll(Ds.PARAM_PATTERN);for(const u of d){const[,f,g]=u,h=g.replace(/__PLACEHOLDER_(\d+)__/g,(b,y)=>o[parseInt(y,10)]);s[f.trim()]=this.resolveParamValue(h.trim(),t)}return s}resolveParamValue(e,t){if(e.startsWith("{{")&&e.endsWith("}}")){const s=e.slice(2,-2).trim();if(/[|&()[\]!?:+\-*/%<>=\s]/.test(s)&&t)try{const l=new Function(...Object.keys(t),`return ${s}`)(...Object.values(t));return String(l??"")}catch(o){return Iv.error("Expression evaluation failed:",s,o),""}else{const o=this.getNestedDataValue(t,s);return String(o??"")}}return e}separateTrailingText(e){if(!e)return{cleanedParams:void 0,trailing:""};if(e.trimEnd().endsWith("}}"))return{cleanedParams:e,trailing:""};if(!(e.startsWith("|")?e.slice(1):e).includes("="))return{cleanedParams:void 0,trailing:e};const s=e.match(/(\s+[^\p{L}\w=|&\s][^\p{L}\w=]*\s*)$/u);return s?{cleanedParams:e.slice(0,-s[1].length),trailing:s[1]}:{cleanedParams:e,trailing:""}}cleanParamsStr(e){return this.separateTrailingText(e).cleanedParams||""}getNestedDataValue(e,t){if(!e)return;const s=t.split(".");let r=e;for(const o of s){if(r==null)return;r=r[o]}return r}replaceParams(e,t){let s=e;for(const[r,o]of Object.entries(t)){const l=new RegExp(`\\{\\{${r}\\}\\}`,"g");s=s.replace(l,String(o));const d=new RegExp(`\\{${r}\\}`,"g");s=s.replace(d,String(o))}return s}getFromCache(e){const t=this.cache.get(e);return t?Date.now()-t.timestamp>this.options.cacheTTL?(this.cache.delete(e),null):t.data:null}saveToCache(e,t){this.cache.set(e,{data:t,timestamp:Date.now()})}clearCache(){this.cache.clear(),this.translations.clear()}pruneCache(){const e=Date.now(),t=[];for(const[s,r]of this.cache.entries())e-r.timestamp>this.options.cacheTTL&&t.push(s);for(const s of t)this.cache.delete(s)}getCacheStats(){const e=Date.now();let t=0;for(const s of this.cache.values())e-s.timestamp>this.options.cacheTTL&&t++;return{size:this.cache.size,expired:t}}};ne(Ds,"instance",null),ne(Ds,"TRANSLATION_PATTERN",/\$t:(?:defer:)?([a-zA-Z0-9._-]+)(\|(?:(?!\$t:).)+)?/g),ne(Ds,"NESTED_TRANSLATION_PARAM_PATTERN",/=(\$t:([a-zA-Z0-9._-]+))(?=[|&\s]|$)/g),ne(Ds,"PARAM_PATTERN",/([^=|&]+)=([^|&]+)/g);let ts=Ds,Ig=null;function iT(n){return Ig||(Ig=new ts(n)),Ig}const Lv=Object.freeze(Object.defineProperty({__proto__:null,TranslationEngine:ts,TranslationError:Dg,getTranslationEngine:iT},Symbol.toStringTag,{value:"Module"})),Di=Ht("PipeRegistry");function Ov(n,e){const t=n.getFullYear(),s=String(n.getMonth()+1).padStart(2,"0"),r=String(n.getDate()).padStart(2,"0"),o=String(n.getHours()).padStart(2,"0"),l=String(n.getMinutes()).padStart(2,"0"),d=String(n.getSeconds()).padStart(2,"0");return e.replace("YYYY",String(t)).replace("YY",String(t).slice(-2)).replace("MM",s).replace("M",String(n.getMonth()+1)).replace("DD",r).replace("D",String(n.getDate())).replace("HH",o).replace("H",String(n.getHours())).replace("mm",l).replace("m",String(n.getMinutes())).replace("ss",d).replace("s",String(n.getSeconds()))}function lT(n,e="ko"){const s=new Date().getTime()-n.getTime(),r=Math.floor(s/1e3),o=Math.floor(r/60),l=Math.floor(o/60),d=Math.floor(l/24),u=Math.floor(d/7),f=Math.floor(d/30),g=Math.floor(d/365);return e==="ko"?r<60?"방금 전":o<60?`${o}분 전`:l<24?`${l}시간 전`:d<7?`${d}일 전`:u<4?`${u}주 전`:f<12?`${f}개월 전`:`${g}년 전`:r<60?"just now":o<60?`${o} minute${o===1?"":"s"} ago`:l<24?`${l} hour${l===1?"":"s"} ago`:d<7?`${d} day${d===1?"":"s"} ago`:u<4?`${u} week${u===1?"":"s"} ago`:f<12?`${f} month${f===1?"":"s"} ago`:`${g} year${g===1?"":"s"} ago`}function Lg(n){if(n==null)return null;if(n instanceof Date)return n;if(typeof n=="number")return new Date(n);if(typeof n=="string"){const e=new Date(n);return isNaN(e.getTime())?null:e}return null}const sc={date:{fn:(n,e="YYYY-MM-DD")=>{const t=Lg(n);return t?Ov(t,e):""},description:"날짜 포맷 (기본: YYYY-MM-DD)"},datetime:{fn:(n,e="YYYY-MM-DD HH:mm")=>{const t=Lg(n);return t?Ov(t,e):""},description:"날짜+시간 포맷 (기본: YYYY-MM-DD HH:mm)"},relativeTime:{fn:(n,e="ko")=>{const t=Lg(n);return t?lT(t,e):""},description:'상대 시간 표시 (예: "3분 전")'},number:{fn:(n,e)=>{const t=Number(n);if(isNaN(t))return String(n??"");const s={};return e!==void 0&&(s.minimumFractionDigits=e,s.maximumFractionDigits=e),t.toLocaleString(void 0,s)},description:"숫자 포맷 (천단위 구분, 선택적 소수점)"},truncate:{fn:(n,e=100,t="...")=>typeof n!="string"?String(n??""):n.length<=e?n:n.slice(0,e)+t,description:'문자열 자르기 (기본: 100자, 접미사: "...")'},uppercase:{fn:n=>typeof n!="string"?String(n??""):n.toUpperCase(),description:"대문자 변환"},lowercase:{fn:n=>typeof n!="string"?String(n??""):n.toLowerCase(),description:"소문자 변환"},stripHtml:{fn:n=>typeof n!="string"?String(n??""):n.replace(/<[^>]*>/g,""),description:"HTML 태그 제거"},default:{fn:(n,e="")=>n==null||n===""?e:n,description:"기본값 설정 (null, undefined, 빈문자열 시)"},fallback:{fn:(n,e)=>n??e,description:"폴백 값 설정 (null, undefined 시만)"},first:{fn:n=>{if(Array.isArray(n))return n[0]},description:"배열의 첫 번째 요소"},last:{fn:n=>{if(Array.isArray(n))return n[n.length-1]},description:"배열의 마지막 요소"},join:{fn:(n,e=", ")=>Array.isArray(n)?n.join(e):"",description:'배열을 문자열로 결합 (기본 구분자: ", ")'},length:{fn:n=>Array.isArray(n)||typeof n=="string"?n.length:0,description:"배열/문자열 길이"},filterBy:{fn:(n,e,t)=>Array.isArray(n)?Array.isArray(e)?n.filter(s=>{const r=t?s?.[t]:s;return e.includes(r)}):n:[],description:"배열 필터링 (allowList에 포함된 항목만 반환)"},keys:{fn:n=>n==null||typeof n!="object"?[]:Object.keys(n),description:"객체의 키 배열"},values:{fn:n=>n==null||typeof n!="object"?[]:Object.values(n),description:"객체의 값 배열"},json:{fn:(n,e)=>{try{return JSON.stringify(n,null,e)}catch{return""}},description:"JSON 문자열로 변환"},localized:{fn:(n,e)=>n==null?"":typeof n=="string"?n:typeof n!="object"?String(n):n[e||"ko"]||n.ko||n.en||Object.values(n)[0]||"",description:"다국어 객체에서 로케일에 맞는 값 추출"}},Ii=new Map,ti=class ti{static getInstance(){return ti.instance||(ti.instance=new ti),ti.instance}register(e,t,s){if(sc[e]){Di.warn(`[PipeRegistry] 내장 파이프를 덮어쓸 수 없습니다: ${e}`);return}Ii.set(e,{fn:t,description:s}),Di.log(`[PipeRegistry] 커스텀 파이프 등록됨: ${e}`)}unregister(e){if(sc[e])return Di.warn(`[PipeRegistry] 내장 파이프는 해제할 수 없습니다: ${e}`),!1;const t=Ii.delete(e);return t&&Di.log(`[PipeRegistry] 커스텀 파이프 해제됨: ${e}`),t}get(e){const t=sc[e];return t?t.fn:Ii.get(e)?.fn}has(e){return!!sc[e]||Ii.has(e)}execute(e,t,s=[]){const r=this.get(e);if(!r)return Di.warn(`[PipeRegistry] 알 수 없는 파이프: ${e}`),t;try{return r(t,...s)}catch(o){return Di.error(`[PipeRegistry] 파이프 실행 오류 (${e}):`,o),t}}list(){const e=[];for(const[t,s]of Object.entries(sc))e.push({name:t,description:s.description,type:"built-in"});for(const[t,s]of Ii.entries())e.push({name:t,description:s.description,type:"custom"});return e.sort((t,s)=>t.name.localeCompare(s.name))}clearCustomPipes(){Ii.clear()}};ne(ti,"instance",null);let su=ti;su.getInstance();function cT(n){const e=n.trim(),t=e.indexOf("(");if(t===-1)return{name:e,args:[]};const s=e.slice(0,t).trim(),r=e.slice(t+1,-1);if(!r.trim())return{name:s,args:[]};const o=[];let l="",d=null,u=0;for(let f=0;f<r.length;f++){const g=r[f];if((f>0?r[f-1]:"")==="\\"){l+=g;continue}if((g==='"'||g==="'")&&!d){d=g;continue}if(g===d){d=null;continue}if(d){l+=g;continue}if(g==="("||g==="["||g==="{"){u++,l+=g;continue}if(g===")"||g==="]"||g==="}"){u--,l+=g;continue}if(g===","&&u===0){o.push(Mv(l.trim())),l="";continue}l+=g}return l.trim()&&o.push(Mv(l.trim())),{name:s,args:o}}function Mv(n){if(n==="null")return null;if(n==="undefined")return;if(n==="true")return!0;if(n==="false")return!1;const e=Number(n);return!isNaN(e)&&n!==""?e:n}function dT(n){const e=[];let t="",s=null,r=0;for(let o=0;o<n.length;o++){const l=n[o],d=o>0?n[o-1]:"",u=o<n.length-1?n[o+1]:"";if(d==="\\"){t+=l;continue}if((l==='"'||l==="'")&&!s){s=l,t+=l;continue}if(l===s){s=null,t+=l;continue}if(s){t+=l;continue}if(l==="("||l==="["||l==="{"){r++,t+=l;continue}if(l===")"||l==="]"||l==="}"){r--,t+=l;continue}if(l==="|"&&u!=="|"&&d!=="|"&&r===0){e.push(t.trim()),t="";continue}t+=l}return t.trim()&&e.push(t.trim()),e.length===0?[n,[]]:[e[0],e.slice(1)]}function zv(n){let e=null,t=0;for(let s=0;s<n.length;s++){const r=n[s],o=s>0?n[s-1]:"",l=s<n.length-1?n[s+1]:"";if(o!=="\\"){if((r==='"'||r==="'")&&!e){e=r;continue}if(r===e){e=null;continue}if(!e){if(r==="("||r==="["||r==="{"){t++;continue}if(r===")"||r==="]"||r==="}"){t--;continue}if(r==="|"&&l!=="|"&&o!=="|"&&t===0)return!0}}}return!1}function uT(n,e){const t=su.getInstance();let s=n;for(const r of e){const o=cT(r);s=t.execute(o.name,s,o.args)}return s}const Fo="raw:",ru="﷐",rc="﷑",Vo="﷒";function oc(n){return ru+n+rc}function Pv(n){return n.length>=2&&n.charCodeAt(0)===64976&&n.charCodeAt(n.length-1)===64977}function Bv(n){return n.includes(ru)}function Hv(n){return n.slice(1,-1)}function ac(n){if(typeof n=="string")return oc(n);if(Array.isArray(n))return n.map(ac);if(n&&typeof n=="object"){const e={};for(const[t,s]of Object.entries(n))e[t]=ac(s);return e}return n}const ic=Ht("DataBindingEngine");function ou(){try{return window.G7Core?.devTools}catch{return}}class Og extends Error{constructor(t,s,r){super(t);ne(this,"path");ne(this,"context");this.path=s,this.context=r,this.name="DataBindingError"}}const Dr=class Dr{constructor(e){ne(this,"cache",new Map);ne(this,"expressionFnCache",new Map);ne(this,"renderCycleCache",new Map);ne(this,"currentRenderCycleId",0);ne(this,"defaultOptions",{defaultValue:void 0,nullSafe:!0,detectCircular:!0,maxDepth:10});e&&(this.defaultOptions={...this.defaultOptions,...e})}startRenderCycle(){this.currentRenderCycleId++,this.renderCycleCache.clear()}isRenderCycleCacheActive(){return this.currentRenderCycleId>0}getFromRenderCycleCache(e){if(this.isRenderCycleCacheActive())return this.renderCycleCache.get(e)}saveToRenderCycleCache(e,t){this.isRenderCycleCacheActive()&&this.renderCycleCache.set(e,t)}resolveBindings(e,t,s,r){const o={...this.defaultOptions,...s},l=ou(),d=t._computed&&!t.$computed?{...t,$computed:t._computed}:t;return e.replace(Dr.BINDING_PATTERN,(u,f)=>{const g=f.trim();let h=!1,b=g;if(g.startsWith(Fo)&&(h=!0,b=g.slice(Fo.length)),zv(b)){const C=l?.isEnabled()?performance.now():0;try{const[j,E]=dT(b);let T,D=!1;const I=/[?:|&!+\-*/<>=()]/.test(j)||/\[['"]/.test(j),W=j.startsWith("_global")||j.startsWith("_local")||j.startsWith("_isolated")||j.startsWith("$parent");if(o.skipCache)I?T=this.evaluateExpression(j,d):T=this.resolvePath(j,d,o);else if(I){const G=this.getFromRenderCycleCache(`expr:${j}`);G!==void 0?(T=G,D=!0):(T=this.evaluateExpression(j,d),this.saveToRenderCycleCache(`expr:${j}`,T))}else if(W){const G=this.getFromRenderCycleCache(j);G!==void 0?(T=G,D=!0):(T=this.resolvePath(j,d,o),this.saveToRenderCycleCache(j,T))}else{const G=this.getFromCache(j);G!==void 0?(T=G,D=!0):(T=this.resolvePath(j,d,o),this.saveToCache(j,T))}const z=uT(T,E);if(l?.isEnabled()){const G=performance.now()-C;l.trackExpressionEval({expression:`{{${g}}}`,result:this.sanitizeResultForTracking(z),resultType:this.getResultType(z),componentId:r?.componentId,componentName:r?.componentName,propName:r?.propName,fromCache:D,duration:G,method:"resolveBindings",skipCache:o.skipCache})}const H=this.formatValue(z);return h?oc(H):H}catch(j){return ic.error("Pipe expression evaluation failed:",b,j),u}}if(/[?:&!+\-*/<>=()]/.test(b)||/\|\|/.test(b)||/\[['"]/.test(b)){const C=l?.isEnabled()?performance.now():0;try{let j,E=!1;if(o.skipCache)j=this.evaluateExpression(b,d);else{const D=`expr:${b}`,I=this.getFromRenderCycleCache(D);I!==void 0?(j=I,E=!0):(j=this.evaluateExpression(b,d),this.saveToRenderCycleCache(D,j))}if(l?.isEnabled()){const D=performance.now()-C;l.trackExpressionEval({expression:`{{${g}}}`,result:this.sanitizeResultForTracking(j),resultType:this.getResultType(j),componentId:r?.componentId,componentName:r?.componentName,propName:r?.propName,fromCache:E,duration:D,method:"resolveBindings",skipCache:o.skipCache})}const T=this.formatValue(j);return h?oc(T):T}catch(j){return ic.error("Expression evaluation failed:",b,j),u}}if(o.skipCache){const C=l?.isEnabled()?performance.now():0,j=this.resolvePath(b,d,o);if(l?.isEnabled()){const T=performance.now()-C;l.trackExpressionEval({expression:`{{${g}}}`,result:this.sanitizeResultForTracking(j),resultType:this.getResultType(j),componentId:r?.componentId,componentName:r?.componentName,propName:r?.propName,fromCache:!1,duration:T,method:"resolveBindings",skipCache:!0})}const E=this.formatValue(j);return h?oc(E):E}const v=b.startsWith("_global")||b.startsWith("_local")||b.startsWith("_isolated")||b.startsWith("$parent"),x=l?.isEnabled()?performance.now():0;let S,_=!1;if(v){const C=this.getFromRenderCycleCache(b);C!==void 0?(S=C,_=!0):(S=this.resolvePath(b,d,o),this.saveToRenderCycleCache(b,S))}else{const C=this.getFromCache(b);C!==void 0?(S=C,_=!0):(S=this.resolvePath(b,d,o),this.saveToCache(b,S))}if(l?.isEnabled()){const C=performance.now()-x;l.trackExpressionEval({expression:`{{${g}}}`,result:this.sanitizeResultForTracking(S),resultType:this.getResultType(S),componentId:r?.componentId,componentName:r?.componentName,propName:r?.propName,fromCache:_,duration:C,method:"resolveBindings",skipCache:o.skipCache})}const A=this.formatValue(S);return h?oc(A):A})}resolve(e,t,s,r){const o={...this.defaultOptions,...s},l=ou(),d=l?.isEnabled()?performance.now():0;if(o.skipCache){const h=this.resolvePath(e,t,o);return l?.isEnabled()&&l.trackExpressionEval({expression:e,result:this.sanitizeResultForTracking(h),resultType:this.getResultType(h),componentId:r?.componentId,componentName:r?.componentName,propName:r?.propName,fromCache:!1,duration:performance.now()-d,method:"resolve",skipCache:!0}),h}const u=e.startsWith("_global")||e.startsWith("_local")||e.startsWith("_isolated")||e.startsWith("$parent");let f=!1;if(u){const h=this.getFromRenderCycleCache(e);if(h!==void 0)return f=!0,l?.isEnabled()&&l.trackExpressionEval({expression:e,result:this.sanitizeResultForTracking(h),resultType:this.getResultType(h),componentId:r?.componentId,componentName:r?.componentName,propName:r?.propName,fromCache:!0,duration:performance.now()-d,method:"resolve",skipCache:o.skipCache}),h}else{const h=this.getFromCache(e);if(h!==void 0)return f=!0,l?.isEnabled()&&l.trackExpressionEval({expression:e,result:this.sanitizeResultForTracking(h),resultType:this.getResultType(h),componentId:r?.componentId,componentName:r?.componentName,propName:r?.propName,fromCache:!0,duration:performance.now()-d,method:"resolve",skipCache:o.skipCache}),h}const g=this.resolvePath(e,t,o);return u?this.saveToRenderCycleCache(e,g):this.saveToCache(e,g),l?.isEnabled()&&l.trackExpressionEval({expression:e,result:this.sanitizeResultForTracking(g),resultType:this.getResultType(g),componentId:r?.componentId,componentName:r?.componentName,propName:r?.propName,fromCache:f,duration:performance.now()-d,method:"resolve",skipCache:o.skipCache}),g}resolvePath(e,t,s,r=0,o=new WeakSet){if(s.maxDepth&&r>s.maxDepth){if(s.detectCircular)throw new Og(`Maximum depth exceeded (${s.maxDepth}). Possible circular reference.`,e,t);return s.defaultValue}const l=this.parsePath(e);let d=t;for(let u=0;u<l.length;u++){const f=l[u];if(d==null){if(s.nullSafe)return s.defaultValue;throw new Og(`Cannot read property '${f}' of ${d}`,e,t)}if(s.detectCircular&&typeof d=="object"){if(o.has(d))throw new Og(`Circular reference detected at path: ${l.slice(0,u+1).join(".")}`,e,t);o.add(d)}d=d[f],e==="_global.toasts"&&ic.log(`[DataBindingEngine] segment: ${f}, current:`,d)}return d!==void 0?d:s.defaultValue}parsePath(e){const t=[];let s;for(Dr.PATH_SEGMENT_PATTERN.lastIndex=0;(s=Dr.PATH_SEGMENT_PATTERN.exec(e))!==null;){const r=s[1]||s[2];r&&t.push(r)}return t}formatValue(e){if(e==null)return"";if(typeof e=="object")try{return JSON.stringify(e)}catch{return"[Object]"}return String(e)}getFromCache(e){const t=this.cache.get(e),s=ou();if(!t){s?.isEnabled()&&s.recordCacheMiss();return}if(Date.now()-t.timestamp>Dr.CACHE_EXPIRY){this.cache.delete(e),s?.isEnabled()&&s.recordCacheMiss();return}return s?.isEnabled()&&s.recordCacheHit(),t.value}saveToCache(e,t){this.cache.set(e,{value:t,timestamp:Date.now()})}isActionDefinition(e){return typeof e.handler!="string"?!1:e.params!==void 0||Array.isArray(e.actions)||typeof e.target=="string"||e.onSuccess!==void 0||e.onError!==void 0}extractSingleBinding(e){if(!e.startsWith("{{")||!e.endsWith("}}")||e.length<5)return null;const t=e.slice(2,-2);let s=0;for(let r=0;r<t.length-1;r++){const o=t[r];if(o==="{")s++;else if(o==="}"){if(s>0)s--;else if(t[r+1]==="}")return null}}return t}resolveObject(e,t,s){if(this.isSwitchExpression(e)){const d=e;return this.resolveSwitch(d,t,s)}if(this.isActionDefinition(e))return{...e};if("iteration"in e)return{...e};const r={},l=[...["cellChildren","expandChildren","expandContext","render"],...s?.skipBindingKeys||[]];for(const[d,u]of Object.entries(e)){if(l.includes(d)){r[d]=u;continue}if(typeof u=="string"){const f=this.extractSingleBinding(u);if(f!==null){const g=f.trim();let h=!1,b=g;g.startsWith(Fo)&&(h=!0,b=g.slice(Fo.length));const v=/[?:|&!+\-*/<>=()]/.test(b)||/\[['"]/.test(b)?this.evaluateExpression(b,t,s):this.resolve(b,t,s);r[d]=h&&v!=null?ac(v):v}else r[d]=this.resolveBindings(u,t,s)}else Array.isArray(u)?r[d]=u.map(f=>typeof f=="string"?this.resolveBindings(f,t,s):typeof f=="object"&&f!==null?this.resolveObject(f,t,s):f):u&&typeof u=="object"?r[d]=this.resolveObject(u,t,s):r[d]=u}return r}clearCache(){this.cache.clear(),this.expressionFnCache.clear()}invalidateCacheByKeys(e){for(const t of this.cache.keys())for(const s of e)if(t===s||t.startsWith(`${s}.`)||t.startsWith(`${s}[`)){this.cache.delete(t);break}}pruneCache(){const e=Date.now();for(const[t,s]of this.cache.entries())e-s.timestamp>Dr.CACHE_EXPIRY&&this.cache.delete(t)}getCacheStats(){const e=Date.now();let t=0;for(const s of this.cache.values())e-s.timestamp>Dr.CACHE_EXPIRY&&t++;return{size:this.cache.size,expired:t}}evaluateExpression(e,t,s){const r=ou(),o=r?.isEnabled()?performance.now():0;r?.isEnabled()&&r.trackBindingEval();try{let l=this.preprocessOptionalChaining(e);l=this.preprocessTranslationTokens(l);const d=this.extractVariablesFromExpression(l),u={...t};for(const j of d)j in u||(u[j]=void 0);t._computed&&!u.$computed&&(u.$computed=t._computed);const f=t.$locale||"ko";u.$localized=(j,E)=>{if(j==null&&!E)return"";if(typeof j=="string")return j;if(j&&typeof j=="object"&&j[f])return j[f];if(E&&typeof E=="string"){const T=u.$t?u.$t(E):E;if(T&&T!==E)return T}return j&&typeof j=="object"?j.ko||j.en||Object.values(j)[0]||"":j==null?"":String(j)};const g=typeof window<"u"?window.G7Core:void 0;u.$uuid=()=>g?.uuid?g.uuid():typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,j=>{const E=Math.random()*16|0;return(j==="x"?E:E&3|8).toString(16)});let h=t.$templateId,b=f;if(!h&&typeof window<"u"){const E=window.__templateApp?.getConfig?.();E?.templateId&&(h=E.templateId,!t.$locale&&E.locale&&(b=E.locale))}const y={templateId:h||"",locale:b};u.$t=j=>{if(!j||typeof j!="string")return"";try{return ts.getInstance().translate(j,y)}catch(E){return ic.warn("$t() translation failed for key:",j,E),j}},u.$get=(j,E,T=void 0)=>{if(j==null)return T;const D=Array.isArray(E)?E:[E];if(D.length===0)return j;let I=j;for(const W of D){if(I==null||W==null)return T;I=I[W]}return I??T};const v=Object.keys(u),x=Object.values(u),S=`${l}|${v.join(",")}`;let _=this.expressionFnCache.get(S);const A=!!_;_||(_=new Function(...v,`return (${l});`),this.expressionFnCache.set(S,_));const C=_(...x);if(r?.isEnabled()){const j=performance.now()-o;r.trackExpressionEval({expression:e,result:this.sanitizeResultForTracking(C),resultType:this.getResultType(C),componentId:s?.componentId,componentName:s?.componentName,propName:s?.propName,fromCache:A,duration:j,method:"evaluateExpression",skipCache:s?.skipCache})}return C}catch(l){throw new Error(`Failed to evaluate expression "${e}": ${l instanceof Error?l.message:String(l)}`)}}getResultType(e){return e===null?"null":e===void 0?"undefined":Array.isArray(e)?"array":typeof e}sanitizeResultForTracking(e){if(e==null||typeof e!="object")return e;try{if(Array.isArray(e))return e.length>10?`[Array(${e.length})]`:e.slice(0,10);const t=Object.keys(e);return t.length>20?`{Object(${t.length} keys)}`:(JSON.stringify(e),e)}catch{return"[Complex Object]"}}preprocessTranslationTokens(e){return e=e.replace(/(['"])(\$t:([a-zA-Z_][a-zA-Z0-9_.\-]*))\1/g,(t,s,r,o)=>`$t('${o}')`),e.replace(/(?<!['"]\s*)(\$t:[a-zA-Z_][a-zA-Z0-9_.\-]*)(?!\s*['"])/g,'"$1"')}preprocessOptionalChaining(e){const t=[];let s=e.replace(/(['"])(?:(?!\1|\\).|\\.)*\1/g,o=>(t.push(o),`__STRING_LITERAL_${t.length-1}__`));const r=[];return s=s.replace(/\$t:[a-zA-Z_][a-zA-Z0-9_.\-]*(?:\|[^'"\s,)]+)?/g,o=>(r.push(o),`__TRANSLATION_TOKEN_${r.length-1}__`)),s=s.replace(/([a-zA-Z_$][a-zA-Z0-9_$]*)\.(?!\?)/g,"$1?."),s=s.replace(/__TRANSLATION_TOKEN_(\d+)__/g,(o,l)=>r[parseInt(l,10)]),s=s.replace(/__STRING_LITERAL_(\d+)__/g,(o,l)=>t[parseInt(l,10)]),s}extractVariablesFromExpression(e){const t=new Set(["true","false","null","undefined","NaN","Infinity","if","else","for","while","do","switch","case","break","continue","return","function","class","const","let","var","new","delete","typeof","instanceof","this","super","import","export","default","try","catch","finally","throw","Math","Date","JSON","Array","Object","String","Number","Boolean","RegExp","Set","Map","WeakSet","WeakMap","Symbol","Promise","BigInt","Error","parseInt","parseFloat","isNaN","isFinite","encodeURI","decodeURI","encodeURIComponent","decodeURIComponent"]),s=/(?<![.\w$])([a-zA-Z_$][a-zA-Z0-9_$]*)/g,r=new Set;let o;for(;(o=s.exec(e))!==null;){const l=o[1];t.has(l)||r.add(l)}return Array.from(r)}isSwitchExpression(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&"$switch"in e&&"$cases"in e}resolveSwitch(e,t,s){const r={...s,skipCache:!0};let o;try{o=this.resolveBindings(e.$switch,t,r)?.toString()?.trim()??""}catch(d){ic.warn("resolveSwitch: $switch 키 평가 실패:",e.$switch,d),o=""}let l;if(o&&e.$cases&&o in e.$cases)l=e.$cases[o];else if("$default"in e)l=e.$default;else return;return typeof l=="string"?l.includes("{{")?this.resolveBindings(l,t,r):l:l!==null&&typeof l=="object"?this.resolveObject(l,t,r):l}};ne(Dr,"BINDING_PATTERN",/\{\{([^}]+)\}\}/g),ne(Dr,"PATH_SEGMENT_PATTERN",/([^.[\]]+)|\[(\d+)\]/g),ne(Dr,"CACHE_EXPIRY",3e4);let ms=Dr;const fT=new ms,Ko={mobile:{min:0,max:767},tablet:{min:768,max:1023},desktop:{min:1024,max:1/0},portable:{min:0,max:1023}},au=new Map;function pT(n,e){let t=null;return((...s)=>{t!==null&&clearTimeout(t),t=setTimeout(()=>{n(...s)},e)})}class gT{constructor(){ne(this,"subscribers",new Set);ne(this,"currentWidth",1024);ne(this,"debouncedHandler",null);ne(this,"isInitialized",!1);this.initialize()}initialize(){typeof window>"u"||(this.currentWidth=window.innerWidth,this.isInitialized=!0,this.debouncedHandler=pT(()=>{this.currentWidth=window.innerWidth,this.notifySubscribers()},150),window.addEventListener("resize",this.debouncedHandler))}notifySubscribers(){this.subscribers.forEach(e=>{e(this.currentWidth)})}subscribe(e){return this.subscribers.add(e),e(this.currentWidth),()=>{this.subscribers.delete(e)}}getWidth(){return this.currentWidth}parseRange(e){if(au.has(e))return au.get(e)??null;let t=null;if(Ko[e])t={...Ko[e]};else{const s=e.match(/^(-?\d*)-(-?\d*)$/);if(s){const[,r,o]=s,l=r===""?0:parseInt(r,10),d=o===""?1/0:parseInt(o,10);!isNaN(l)&&!isNaN(d)&&l<=d&&(t={min:l,max:d})}}return au.set(e,t),t}getMatchingKey(e,t){const s=[];for(const r of Object.keys(e)){const o=this.parseRange(r);o&&t>=o.min&&t<=o.max&&s.push({key:r,range:o,isPreset:!!Ko[r]})}return s.length===0?null:(s.sort((r,o)=>{if(r.isPreset!==o.isPreset)return r.isPreset?1:-1;const l=r.range.max-r.range.min,d=o.range.max-o.range.min;return l-d}),s[0].key)}matches(e){const t=this.parseRange(e);return t?this.currentWidth>=t.min&&this.currentWidth<=t.max:!1}clearSubscribers(){this.subscribers.clear()}destroy(){this.debouncedHandler&&typeof window<"u"&&window.removeEventListener("resize",this.debouncedHandler),this.clearSubscribers(),au.clear()}_setWidthForTesting(e){this.currentWidth=e,this.notifySubscribers()}}const Ws=new gT,iu=Ht("ConditionEvaluator");function hT(n){switch(n){case"true":return{value:!0};case"false":return{value:!1};case"null":return{value:null};case"undefined":return{value:void 0};default:return}}function mT(n){return/[?:|&!+\-*/<>=()]/.test(n)}function yT(n){if(!n.startsWith("{{")||!n.endsWith("}}"))return null;const e=n.slice(2,-2);let t=null,s=0;for(let r=0;r<e.length;r++){const o=e[r];if((r>0?e[r-1]:"")!=="\\"&&((o==='"'||o==="'")&&!t?t=o:o===t&&(t=null),!t&&(o==="{"&&s++,o==="}"&&s--,s<0)))return null}return s===0?e.trim():null}function bT(n,e,t){if(!n)return!0;try{const s=yT(n);let r;if(s!==null){const o=hT(s);o!==void 0?r=o.value:mT(s)?r=t.evaluateExpression(s,e):r=t.resolve(s,e,{skipCache:!0})}else r=t.resolveBindings(n,e,{skipCache:!0});if(typeof r=="string"){const o=r.toLowerCase().trim();if(o==="false"||o==="0"||o===""||o==="null"||o==="undefined")return!1}return!!r}catch(s){return iu.warn(`evaluateStringCondition: 조건 평가 실패: ${n}`,s),!1}}function lu(n,e,t){if(typeof n=="string")return bT(n,e,t);if("and"in n){if(!Array.isArray(n.and)||n.and.length===0)return iu.warn("evaluateConditionExpression: AND 그룹이 비어있습니다"),!0;for(const s of n.and)if(!lu(s,e,t))return!1;return!0}if("or"in n){if(!Array.isArray(n.or)||n.or.length===0)return iu.warn("evaluateConditionExpression: OR 그룹이 비어있습니다"),!1;for(const s of n.or)if(lu(s,e,t))return!0;return!1}return iu.warn("evaluateConditionExpression: 알 수 없는 조건 형식",n),!1}function Wv(n,e,t){if(!Array.isArray(n)||n.length===0)return{matched:!1,branchIndex:-1};for(let s=0;s<n.length;s++){const r=n[s];if(r.if===void 0)return{matched:!0,branchIndex:s};if(lu(r.if,e,t))return{matched:!0,branchIndex:s}}return{matched:!1,branchIndex:-1}}function xT(n){return typeof n=="string"?!0:n&&typeof n=="object"?"and"in n||"or"in n:!1}function vT(n){if(!Array.isArray(n)||n.length===0)return!1;const e=n[0];return!e||typeof e!="object"?!1:"if"in e||"then"in e}const go=Ht("RenderHelpers"),wT=new Map([["true",!0],["false",!1],["null",null]]);function Uv(){try{return window.G7Core?.devTools}catch{return}}const qv=new ms;function Mg(n){return/[?:|&!+\-*/<>=()[\]{}]/.test(n)}function Fv(n){if(!n.startsWith("{{")||!n.endsWith("}}"))return null;const e=n.slice(2,-2);let t=null,s=0;for(let r=0;r<e.length;r++){const o=e[r];if((r>0?e[r-1]:"")!=="\\"&&((o==='"'||o==="'")&&!t?t=o:o===t&&(t=null),!t&&(o==="{"&&s++,o==="}"&&s--,s<0)))return null}return s===0?e.trim():null}function zg(n,e,t){let s=n;if(n.startsWith("{{")&&n.endsWith("}}")&&(s=n.slice(2,-2).trim()),Mg(s))try{return t.evaluateExpression(s,e)}catch(r){go.warn(`resolveIterationSource: 표현식 평가 실패: ${n}`,r);return}return t.resolve(s,e,{skipCache:!0})}function _T(n,e){const t={...n};if(e?.parentDataContext)for(const[s,r]of Object.entries(e.parentDataContext))s in t||(t[s]=r);if(e?.state){const s=t._local||{};t._local={...s,...e.state}}return e?.isolatedContext?.state&&(t._isolated=e.isolatedContext.state),t}function Pg(n,e,t,s){if(!e||!Array.isArray(e)||e.length===0)return n;const r=s?.actionDispatcher??Iw(),o={...n,actions:e},l=r.bindActionsToProps(o,t,s?.componentContext);return delete l.actions,l}function Vv(n,e,t,s){if(typeof n=="boolean")return n;if(!n)return!0;try{const r=Fv(n);let o;if(r!==null){const l=wT.get(r);l!==void 0?o=l:Mg(r)?o=t.evaluateExpression(r,e):o=t.resolve(r,e,{skipCache:!0})}else o=t.resolveBindings(n,e,{skipCache:!0});if(typeof o=="string"){const l=o.toLowerCase().trim();if(l==="false"||l==="0"||l===""||l==="null"||l==="undefined")return!1}return!!o}catch(r){return go.warn(`evaluateIfCondition: 조건 평가 실패 (컴포넌트: ${s||"unknown"}):`,r),!1}}function Li(n,e,t,s){if(n.if!==void 0)return Vv(n.if,e,t,s);if(n.condition!==void 0)return Vv(n.condition,e,t,s);if(n.conditions===void 0)return!0;const r=n.conditions;try{return xT(r)?lu(r,e,t):vT(r)?Wv(r,e,t).matched:(go.warn(`evaluateRenderCondition: 알 수 없는 conditions 형식 (컴포넌트: ${s||"unknown"})`),!0)}catch(o){return go.warn(`evaluateRenderCondition: conditions 평가 실패 (컴포넌트: ${s||"unknown"}):`,o),!1}}function Kv(n){if(!n.responsive)return n;const e=Ws.getWidth(),t=Ws.getMatchingKey(n.responsive,e);if(!t)return n;const s=n.responsive[t];return{...n,props:{...n.props,...s.props},children:s.children??n.children,text:s.text??n.text,if:s.if??n.if,iteration:s.iteration??n.iteration}}function lc(n,e,t,s,r){if(!n||n.length===0)return[];const o=r?.bindingEngine??new ms,l=r?.translationEngine??ts.getInstance(),d=r?.translationContext??{templateId:"",locale:"ko"},u=_T(e,r?.componentContext),f=(b,y)=>{if(typeof b=="string"){if(Pv(b))return Hv(b);if(Bv(b)){const x=[],S=b.replace(new RegExp(`${ru}([^${rc}]*)${rc}`,"g"),(A,C)=>(x.push(C),`${Vo}${x.length-1}${Vo}`));let _=S;return/\$t:[a-zA-Z0-9._-]+/.test(S)&&(_=l.resolveTranslations(S,d,y)),_.replace(new RegExp(`${Vo}(\\d+)${Vo}`,"g"),(A,C)=>x[parseInt(C)])}if(b.startsWith("$t:defer:")){const x="$t:"+b.slice(9);return l.resolveTranslations(x,d,y)}if(b.startsWith("$t:"))return l.resolveTranslations(b,d,y);const v=Fv(b);if(v!==null){let x=!1,S=v;v.startsWith(Fo)&&(x=!0,S=v.slice(Fo.length));let _;if(Mg(S))try{_=o.evaluateExpression(S,y)}catch(A){go.warn("renderItemChildren: 표현식 평가 실패:",A);return}else _=o.resolve(S,y,{skipCache:!0});return!x&&typeof _=="string"&&/\$t:[a-zA-Z0-9._-]+/.test(_)&&(_=l.resolveTranslations(_,d,y)),x&&_!=null?ac(_):_}if(b.includes("{{")){const x=o.resolveBindings(b,y,{skipCache:!0});return typeof x=="string"&&/\$t:[a-zA-Z0-9._-]+/.test(x)?l.resolveTranslations(x,d,y):x}return b}if(Array.isArray(b))return b.map(v=>f(v,y));if(b&&typeof b=="object"){const v={};for(const[x,S]of Object.entries(b))v[x]=f(S,y);return v}return b},g=(b,y)=>{if(!b)return{};const v={};for(const[x,S]of Object.entries(b))v[x]=f(S,y);return v},h=(b,y,v)=>{const x=Kv(b),S=x.iteration;if(!S)return[];const _=zg(S.source,v,o);if(!Array.isArray(_))return go.warn(`renderItemChildren: iteration.source가 배열이 아닙니다: ${S.source}`),[];const A=Uv();if(A?.isEnabled()){const j=`${y}-iteration`;A.trackIteration(j,S.source,S.item_var,S.index_var,_.length)}const C=t[x.name];return C?_.flatMap((j,E)=>{const T={...v,[S.item_var]:j,[`${S.item_var}_index`]:E,...S.index_var?{[S.index_var]:E}:{}},D=Li({if:x.if,condition:x.condition,conditions:x.conditions},T,o,x.id);if(x.if&&A?.isEnabled()){const Z=`${y}-iter-${E}-if`;A.trackIfCondition(Z,x.if,D,x.name)}if(!D)return[];const I=x.id?String(f(x.id,T)):void 0,W=`${y}-iter-${E}`,z=r?.getRemountKey?r.getRemountKey(I,W):W,H=g(x.props,T),G=Pg(H,x.actions,T,{actionDispatcher:r?.actionDispatcher,componentContext:r?.componentContext});let F=null;return x.text!==void 0?F=f(x.text,T):x.children&&x.children.length>0&&(F=lc(x.children,T,t,z,r)),A?.isEnabled()&&A.trackRender(x.name),[qe.createElement(C,{key:z,...G},F)]}):(go.warn(`renderItemChildren: 컴포넌트를 찾을 수 없습니다: ${x.name}`),[])};return n.flatMap((b,y)=>{const v=Kv(b),x=v.id?String(f(v.id,u)):void 0,S=s?`${s}-${x||y}`:x||`child-${y}`,_=r?.getRemountKey?r.getRemountKey(x,S):S;if(v.iteration)return h(v,_,u);const A=Li({if:v.if,condition:v.condition,conditions:v.conditions},u,o,v.id),C=Uv();if(v.if&&C?.isEnabled()){const I=`${_}-if`;C.trackIfCondition(I,v.if,A,v.name)}if(!A)return[];const j=t[v.name];if(!j)return go.warn(`renderItemChildren: 컴포넌트를 찾을 수 없습니다: ${v.name}`),[];const E=g(v.props,u),T=Pg(E,v.actions,u,{actionDispatcher:r?.actionDispatcher,componentContext:r?.componentContext});let D=null;return v.text!==void 0?D=f(v.text,u):v.children&&v.children.length>0&&(D=lc(v.children,u,t,_,r)),C?.isEnabled()&&C.trackRender(v.name),[qe.createElement(j,{key:_,...T},D)]})}function Oi(n,e,t,s){let r,o;return t instanceof ms?(r=t,o=s):(r=qv,o=t),r.resolveBindings(n,e,o)}function ST(n,e,t,s){const r=t??qv,o={skipCache:!0,...s};let l;try{l=r.resolveBindings(n.key,e,{skipCache:o.skipCache})?.toString()?.trim()??""}catch(f){go.warn("resolveClassMap: key 평가 실패:",n.key,f),l=""}let d="";l&&n.variants&&l in n.variants?d=n.variants[l]:n.default&&(d=n.default);const u=[];return n.base?.trim()&&u.push(n.base.trim()),d?.trim()&&u.push(d.trim()),u.join(" ")}function Gv(n,e){return function(){return n.apply(e,arguments)}}const{toString:kT}=Object.prototype,{getPrototypeOf:cu}=Object,{iterator:du,toStringTag:Yv}=Symbol,uu=(n=>e=>{const t=kT.call(e);return n[t]||(n[t]=t.slice(8,-1).toLowerCase())})(Object.create(null)),vr=n=>(n=n.toLowerCase(),e=>uu(e)===n),fu=n=>e=>typeof e===n,{isArray:Mi}=Array,zi=fu("undefined");function cc(n){return n!==null&&!zi(n)&&n.constructor!==null&&!zi(n.constructor)&&Rs(n.constructor.isBuffer)&&n.constructor.isBuffer(n)}const Xv=vr("ArrayBuffer");function CT(n){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(n):e=n&&n.buffer&&Xv(n.buffer),e}const jT=fu("string"),Rs=fu("function"),Jv=fu("number"),dc=n=>n!==null&&typeof n=="object",ET=n=>n===!0||n===!1,pu=n=>{if(uu(n)!=="object")return!1;const e=cu(n);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Yv in n)&&!(du in n)},RT=n=>{if(!dc(n)||cc(n))return!1;try{return Object.keys(n).length===0&&Object.getPrototypeOf(n)===Object.prototype}catch{return!1}},AT=vr("Date"),TT=vr("File"),$T=n=>!!(n&&typeof n.uri<"u"),NT=n=>n&&typeof n.getParts<"u",DT=vr("Blob"),IT=vr("FileList"),LT=n=>dc(n)&&Rs(n.pipe);function OT(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const Zv=OT(),Qv=typeof Zv.FormData<"u"?Zv.FormData:void 0,MT=n=>{if(!n)return!1;if(Qv&&n instanceof Qv)return!0;const e=cu(n);if(!e||e===Object.prototype||!Rs(n.append))return!1;const t=uu(n);return t==="formdata"||t==="object"&&Rs(n.toString)&&n.toString()==="[object FormData]"},zT=vr("URLSearchParams"),[PT,BT,HT,WT]=["ReadableStream","Request","Response","Headers"].map(vr),UT=n=>n.trim?n.trim():n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function uc(n,e,{allOwnKeys:t=!1}={}){if(n===null||typeof n>"u")return;let s,r;if(typeof n!="object"&&(n=[n]),Mi(n))for(s=0,r=n.length;s<r;s++)e.call(null,n[s],s,n);else{if(cc(n))return;const o=t?Object.getOwnPropertyNames(n):Object.keys(n),l=o.length;let d;for(s=0;s<l;s++)d=o[s],e.call(null,n[d],d,n)}}function ew(n,e){if(cc(n))return null;e=e.toLowerCase();const t=Object.keys(n);let s=t.length,r;for(;s-- >0;)if(r=t[s],e===r.toLowerCase())return r;return null}const Oa=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,tw=n=>!zi(n)&&n!==Oa;function Bg(...n){const{caseless:e,skipUndefined:t}=tw(this)&&this||{},s={},r=(o,l)=>{if(l==="__proto__"||l==="constructor"||l==="prototype")return;const d=e&&ew(s,l)||l,u=Hg(s,d)?s[d]:void 0;pu(u)&&pu(o)?s[d]=Bg(u,o):pu(o)?s[d]=Bg({},o):Mi(o)?s[d]=o.slice():(!t||!zi(o))&&(s[d]=o)};for(let o=0,l=n.length;o<l;o++)n[o]&&uc(n[o],r);return s}const qT=(n,e,t,{allOwnKeys:s}={})=>(uc(e,(r,o)=>{t&&Rs(r)?Object.defineProperty(n,o,{__proto__:null,value:Gv(r,t),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(n,o,{__proto__:null,value:r,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:s}),n),FT=n=>(n.charCodeAt(0)===65279&&(n=n.slice(1)),n),VT=(n,e,t,s)=>{n.prototype=Object.create(e.prototype,s),Object.defineProperty(n.prototype,"constructor",{__proto__:null,value:n,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(n,"super",{__proto__:null,value:e.prototype}),t&&Object.assign(n.prototype,t)},KT=(n,e,t,s)=>{let r,o,l;const d={};if(e=e||{},n==null)return e;do{for(r=Object.getOwnPropertyNames(n),o=r.length;o-- >0;)l=r[o],(!s||s(l,n,e))&&!d[l]&&(e[l]=n[l],d[l]=!0);n=t!==!1&&cu(n)}while(n&&(!t||t(n,e))&&n!==Object.prototype);return e},GT=(n,e,t)=>{n=String(n),(t===void 0||t>n.length)&&(t=n.length),t-=e.length;const s=n.indexOf(e,t);return s!==-1&&s===t},YT=n=>{if(!n)return null;if(Mi(n))return n;let e=n.length;if(!Jv(e))return null;const t=new Array(e);for(;e-- >0;)t[e]=n[e];return t},XT=(n=>e=>n&&e instanceof n)(typeof Uint8Array<"u"&&cu(Uint8Array)),JT=(n,e)=>{const s=(n&&n[du]).call(n);let r;for(;(r=s.next())&&!r.done;){const o=r.value;e.call(n,o[0],o[1])}},ZT=(n,e)=>{let t;const s=[];for(;(t=n.exec(e))!==null;)s.push(t);return s},QT=vr("HTMLFormElement"),e$=n=>n.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(t,s,r){return s.toUpperCase()+r}),Hg=(({hasOwnProperty:n})=>(e,t)=>n.call(e,t))(Object.prototype),t$=vr("RegExp"),nw=(n,e)=>{const t=Object.getOwnPropertyDescriptors(n),s={};uc(t,(r,o)=>{let l;(l=e(r,o,n))!==!1&&(s[o]=l||r)}),Object.defineProperties(n,s)},n$=n=>{nw(n,(e,t)=>{if(Rs(n)&&["arguments","caller","callee"].includes(t))return!1;const s=n[t];if(Rs(s)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+t+"'")})}})},s$=(n,e)=>{const t={},s=r=>{r.forEach(o=>{t[o]=!0})};return Mi(n)?s(n):s(String(n).split(e)),t},r$=()=>{},o$=(n,e)=>n!=null&&Number.isFinite(n=+n)?n:e;function a$(n){return!!(n&&Rs(n.append)&&n[Yv]==="FormData"&&n[du])}const i$=n=>{const e=new WeakSet,t=s=>{if(dc(s)){if(e.has(s))return;if(cc(s))return s;if(!("toJSON"in s)){e.add(s);const r=Mi(s)?[]:{};return uc(s,(o,l)=>{const d=t(o);!zi(d)&&(r[l]=d)}),e.delete(s),r}}return s};return t(n)},l$=vr("AsyncFunction"),c$=n=>n&&(dc(n)||Rs(n))&&Rs(n.then)&&Rs(n.catch),sw=((n,e)=>n?setImmediate:e?((t,s)=>(Oa.addEventListener("message",({source:r,data:o})=>{r===Oa&&o===t&&s.length&&s.shift()()},!1),r=>{s.push(r),Oa.postMessage(t,"*")}))(`axios@${Math.random()}`,[]):t=>setTimeout(t))(typeof setImmediate=="function",Rs(Oa.postMessage)),d$=typeof queueMicrotask<"u"?queueMicrotask.bind(Oa):typeof process<"u"&&process.nextTick||sw,we={isArray:Mi,isArrayBuffer:Xv,isBuffer:cc,isFormData:MT,isArrayBufferView:CT,isString:jT,isNumber:Jv,isBoolean:ET,isObject:dc,isPlainObject:pu,isEmptyObject:RT,isReadableStream:PT,isRequest:BT,isResponse:HT,isHeaders:WT,isUndefined:zi,isDate:AT,isFile:TT,isReactNativeBlob:$T,isReactNative:NT,isBlob:DT,isRegExp:t$,isFunction:Rs,isStream:LT,isURLSearchParams:zT,isTypedArray:XT,isFileList:IT,forEach:uc,merge:Bg,extend:qT,trim:UT,stripBOM:FT,inherits:VT,toFlatObject:KT,kindOf:uu,kindOfTest:vr,endsWith:GT,toArray:YT,forEachEntry:JT,matchAll:ZT,isHTMLForm:QT,hasOwnProperty:Hg,hasOwnProp:Hg,reduceDescriptors:nw,freezeMethods:n$,toObjectSet:s$,toCamelCase:e$,noop:r$,toFiniteNumber:o$,findKey:ew,global:Oa,isContextDefined:tw,isSpecCompliantForm:a$,toJSONObject:i$,isAsyncFn:l$,isThenable:c$,setImmediate:sw,asap:d$,isIterable:n=>n!=null&&Rs(n[du])},u$=we.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),f$=n=>{const e={};let t,s,r;return n&&n.split(`
`).forEach(function(l){r=l.indexOf(":"),t=l.substring(0,r).trim().toLowerCase(),s=l.substring(r+1).trim(),!(!t||e[t]&&u$[t])&&(t==="set-cookie"?e[t]?e[t].push(s):e[t]=[s]:e[t]=e[t]?e[t]+", "+s:s)}),e};function p$(n){let e=0,t=n.length;for(;e<t;){const s=n.charCodeAt(e);if(s!==9&&s!==32)break;e+=1}for(;t>e;){const s=n.charCodeAt(t-1);if(s!==9&&s!==32)break;t-=1}return e===0&&t===n.length?n:n.slice(e,t)}const g$=new RegExp("[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+","g"),h$=new RegExp("[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+","g");function Wg(n,e){return we.isArray(n)?n.map(t=>Wg(t,e)):p$(String(n).replace(e,""))}const m$=n=>Wg(n,g$),y$=n=>Wg(n,h$);function rw(n){const e=Object.create(null);return we.forEach(n.toJSON(),(t,s)=>{e[s]=y$(t)}),e}const ow=Symbol("internals");function fc(n){return n&&String(n).trim().toLowerCase()}function gu(n){return n===!1||n==null?n:we.isArray(n)?n.map(gu):m$(String(n))}function b$(n){const e=Object.create(null),t=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=t.exec(n);)e[s[1]]=s[2];return e}const x$=n=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(n.trim());function Ug(n,e,t,s,r){if(we.isFunction(s))return s.call(this,e,t);if(r&&(e=t),!!we.isString(e)){if(we.isString(s))return e.indexOf(s)!==-1;if(we.isRegExp(s))return s.test(e)}}function v$(n){return n.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,s)=>t.toUpperCase()+s)}function w$(n,e){const t=we.toCamelCase(" "+e);["get","set","has"].forEach(s=>{Object.defineProperty(n,s+t,{__proto__:null,value:function(r,o,l){return this[s].call(this,e,r,o,l)},configurable:!0})})}let ws=class{constructor(e){e&&this.set(e)}set(e,t,s){const r=this;function o(d,u,f){const g=fc(u);if(!g)throw new Error("header name must be a non-empty string");const h=we.findKey(r,g);(!h||r[h]===void 0||f===!0||f===void 0&&r[h]!==!1)&&(r[h||u]=gu(d))}const l=(d,u)=>we.forEach(d,(f,g)=>o(f,g,u));if(we.isPlainObject(e)||e instanceof this.constructor)l(e,t);else if(we.isString(e)&&(e=e.trim())&&!x$(e))l(f$(e),t);else if(we.isObject(e)&&we.isIterable(e)){let d={},u,f;for(const g of e){if(!we.isArray(g))throw TypeError("Object iterator must return a key-value pair");d[f=g[0]]=(u=d[f])?we.isArray(u)?[...u,g[1]]:[u,g[1]]:g[1]}l(d,t)}else e!=null&&o(t,e,s);return this}get(e,t){if(e=fc(e),e){const s=we.findKey(this,e);if(s){const r=this[s];if(!t)return r;if(t===!0)return b$(r);if(we.isFunction(t))return t.call(this,r,s);if(we.isRegExp(t))return t.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=fc(e),e){const s=we.findKey(this,e);return!!(s&&this[s]!==void 0&&(!t||Ug(this,this[s],s,t)))}return!1}delete(e,t){const s=this;let r=!1;function o(l){if(l=fc(l),l){const d=we.findKey(s,l);d&&(!t||Ug(s,s[d],d,t))&&(delete s[d],r=!0)}}return we.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let s=t.length,r=!1;for(;s--;){const o=t[s];(!e||Ug(this,this[o],o,e,!0))&&(delete this[o],r=!0)}return r}normalize(e){const t=this,s={};return we.forEach(this,(r,o)=>{const l=we.findKey(s,o);if(l){t[l]=gu(r),delete t[o];return}const d=e?v$(o):String(o).trim();d!==o&&delete t[o],t[d]=gu(r),s[d]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return we.forEach(this,(s,r)=>{s!=null&&s!==!1&&(t[r]=e&&we.isArray(s)?s.join(", "):s)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join(`
`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const s=new this(e);return t.forEach(r=>s.set(r)),s}static accessor(e){const s=(this[ow]=this[ow]={accessors:{}}).accessors,r=this.prototype;function o(l){const d=fc(l);s[d]||(w$(r,l),s[d]=!0)}return we.isArray(e)?e.forEach(o):o(e),this}};ws.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),we.reduceDescriptors(ws.prototype,({value:n},e)=>{let t=e[0].toUpperCase()+e.slice(1);return{get:()=>n,set(s){this[t]=s}}}),we.freezeMethods(ws);const _$="[REDACTED ****]";function S$(n){if(we.hasOwnProp(n,"toJSON"))return!0;let e=Object.getPrototypeOf(n);for(;e&&e!==Object.prototype;){if(we.hasOwnProp(e,"toJSON"))return!0;e=Object.getPrototypeOf(e)}return!1}function k$(n,e){const t=new Set(e.map(o=>String(o).toLowerCase())),s=[],r=o=>{if(o===null||typeof o!="object"||we.isBuffer(o))return o;if(s.indexOf(o)!==-1)return;o instanceof ws&&(o=o.toJSON()),s.push(o);let l;if(we.isArray(o))l=[],o.forEach((d,u)=>{const f=r(d);we.isUndefined(f)||(l[u]=f)});else{if(!we.isPlainObject(o)&&S$(o))return s.pop(),o;l=Object.create(null);for(const[d,u]of Object.entries(o)){const f=t.has(d.toLowerCase())?_$:r(u);we.isUndefined(f)||(l[d]=f)}}return s.pop(),l};return r(n)}let ct=class JA extends Error{static from(e,t,s,r,o,l){const d=new JA(e.message,t||e.code,s,r,o);return d.cause=e,d.name=e.name,e.status!=null&&d.status==null&&(d.status=e.status),l&&Object.assign(d,l),d}constructor(e,t,s,r,o){super(e),Object.defineProperty(this,"message",{__proto__:null,value:e,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,t&&(this.code=t),s&&(this.config=s),r&&(this.request=r),o&&(this.response=o,this.status=o.status)}toJSON(){const e=this.config,t=e&&we.hasOwnProp(e,"redact")?e.redact:void 0,s=we.isArray(t)&&t.length>0?k$(e,t):we.toJSONObject(e);return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:s,code:this.code,status:this.status}}};ct.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",ct.ERR_BAD_OPTION="ERR_BAD_OPTION",ct.ECONNABORTED="ECONNABORTED",ct.ETIMEDOUT="ETIMEDOUT",ct.ECONNREFUSED="ECONNREFUSED",ct.ERR_NETWORK="ERR_NETWORK",ct.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",ct.ERR_DEPRECATED="ERR_DEPRECATED",ct.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",ct.ERR_BAD_REQUEST="ERR_BAD_REQUEST",ct.ERR_CANCELED="ERR_CANCELED",ct.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",ct.ERR_INVALID_URL="ERR_INVALID_URL",ct.ERR_FORM_DATA_DEPTH_EXCEEDED="ERR_FORM_DATA_DEPTH_EXCEEDED";const C$=null;function qg(n){return we.isPlainObject(n)||we.isArray(n)}function aw(n){return we.endsWith(n,"[]")?n.slice(0,-2):n}function Fg(n,e,t){return n?n.concat(e).map(function(r,o){return r=aw(r),!t&&o?"["+r+"]":r}).join(t?".":""):e}function j$(n){return we.isArray(n)&&!n.some(qg)}const E$=we.toFlatObject(we,{},null,function(e){return/^is[A-Z]/.test(e)});function hu(n,e,t){if(!we.isObject(n))throw new TypeError("target must be an object");e=e||new FormData,t=we.toFlatObject(t,{metaTokens:!0,dots:!1,indexes:!1},!1,function(S,_){return!we.isUndefined(_[S])});const s=t.metaTokens,r=t.visitor||h,o=t.dots,l=t.indexes,d=t.Blob||typeof Blob<"u"&&Blob,u=t.maxDepth===void 0?100:t.maxDepth,f=d&&we.isSpecCompliantForm(e);if(!we.isFunction(r))throw new TypeError("visitor must be a function");function g(x){if(x===null)return"";if(we.isDate(x))return x.toISOString();if(we.isBoolean(x))return x.toString();if(!f&&we.isBlob(x))throw new ct("Blob is not supported. Use a Buffer instead.");return we.isArrayBuffer(x)||we.isTypedArray(x)?f&&typeof Blob=="function"?new Blob([x]):Buffer.from(x):x}function h(x,S,_){let A=x;if(we.isReactNative(e)&&we.isReactNativeBlob(x))return e.append(Fg(_,S,o),g(x)),!1;if(x&&!_&&typeof x=="object"){if(we.endsWith(S,"{}"))S=s?S:S.slice(0,-2),x=JSON.stringify(x);else if(we.isArray(x)&&j$(x)||(we.isFileList(x)||we.endsWith(S,"[]"))&&(A=we.toArray(x)))return S=aw(S),A.forEach(function(j,E){!(we.isUndefined(j)||j===null)&&e.append(l===!0?Fg([S],E,o):l===null?S:S+"[]",g(j))}),!1}return qg(x)?!0:(e.append(Fg(_,S,o),g(x)),!1)}const b=[],y=Object.assign(E$,{defaultVisitor:h,convertValue:g,isVisitable:qg});function v(x,S,_=0){if(!we.isUndefined(x)){if(_>u)throw new ct("Object is too deeply nested ("+_+" levels). Max depth: "+u,ct.ERR_FORM_DATA_DEPTH_EXCEEDED);if(b.indexOf(x)!==-1)throw Error("Circular reference detected in "+S.join("."));b.push(x),we.forEach(x,function(C,j){(!(we.isUndefined(C)||C===null)&&r.call(e,C,we.isString(j)?j.trim():j,S,y))===!0&&v(C,S?S.concat(j):[j],_+1)}),b.pop()}}if(!we.isObject(n))throw new TypeError("data must be an object");return v(n),e}function iw(n){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"};return encodeURIComponent(n).replace(/[!'()~]|%20/g,function(s){return e[s]})}function Vg(n,e){this._pairs=[],n&&hu(n,this,e)}const lw=Vg.prototype;lw.append=function(e,t){this._pairs.push([e,t])},lw.toString=function(e){const t=e?function(s){return e.call(this,s,iw)}:iw;return this._pairs.map(function(r){return t(r[0])+"="+t(r[1])},"").join("&")};function R$(n){return encodeURIComponent(n).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function cw(n,e,t){if(!e)return n;const s=t&&t.encode||R$,r=we.isFunction(t)?{serialize:t}:t,o=r&&r.serialize;let l;if(o?l=o(e,r):l=we.isURLSearchParams(e)?e.toString():new Vg(e,r).toString(s),l){const d=n.indexOf("#");d!==-1&&(n=n.slice(0,d)),n+=(n.indexOf("?")===-1?"?":"&")+l}return n}class dw{constructor(){this.handlers=[]}use(e,t,s){return this.handlers.push({fulfilled:e,rejected:t,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){we.forEach(this.handlers,function(s){s!==null&&e(s)})}}const Kg={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},A$={isBrowser:!0,classes:{URLSearchParams:typeof URLSearchParams<"u"?URLSearchParams:Vg,FormData:typeof FormData<"u"?FormData:null,Blob:typeof Blob<"u"?Blob:null},protocols:["http","https","file","blob","url","data"]},Gg=typeof window<"u"&&typeof document<"u",Yg=typeof navigator=="object"&&navigator||void 0,T$=Gg&&(!Yg||["ReactNative","NativeScript","NS"].indexOf(Yg.product)<0),$$=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",N$=Gg&&window.location.href||"http://localhost",ys={...Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Gg,hasStandardBrowserEnv:T$,hasStandardBrowserWebWorkerEnv:$$,navigator:Yg,origin:N$},Symbol.toStringTag,{value:"Module"})),...A$};function D$(n,e){return hu(n,new ys.classes.URLSearchParams,{visitor:function(t,s,r,o){return ys.isNode&&we.isBuffer(t)?(this.append(s,t.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)},...e})}function I$(n){return we.matchAll(/\w+|\[(\w*)]/g,n).map(e=>e[0]==="[]"?"":e[1]||e[0])}function L$(n){const e={},t=Object.keys(n);let s;const r=t.length;let o;for(s=0;s<r;s++)o=t[s],e[o]=n[o];return e}function uw(n){function e(t,s,r,o){let l=t[o++];if(l==="__proto__")return!0;const d=Number.isFinite(+l),u=o>=t.length;return l=!l&&we.isArray(r)?r.length:l,u?(we.hasOwnProp(r,l)?r[l]=we.isArray(r[l])?r[l].concat(s):[r[l],s]:r[l]=s,!d):((!we.hasOwnProp(r,l)||!we.isObject(r[l]))&&(r[l]=[]),e(t,s,r[l],o)&&we.isArray(r[l])&&(r[l]=L$(r[l])),!d)}if(we.isFormData(n)&&we.isFunction(n.entries)){const t={};return we.forEachEntry(n,(s,r)=>{e(I$(s),r,t,0)}),t}return null}const Pi=(n,e)=>n!=null&&we.hasOwnProp(n,e)?n[e]:void 0;function O$(n,e,t){if(we.isString(n))try{return(e||JSON.parse)(n),we.trim(n)}catch(s){if(s.name!=="SyntaxError")throw s}return(t||JSON.stringify)(n)}const pc={transitional:Kg,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const s=t.getContentType()||"",r=s.indexOf("application/json")>-1,o=we.isObject(e);if(o&&we.isHTMLForm(e)&&(e=new FormData(e)),we.isFormData(e))return r?JSON.stringify(uw(e)):e;if(we.isArrayBuffer(e)||we.isBuffer(e)||we.isStream(e)||we.isFile(e)||we.isBlob(e)||we.isReadableStream(e))return e;if(we.isArrayBufferView(e))return e.buffer;if(we.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let d;if(o){const u=Pi(this,"formSerializer");if(s.indexOf("application/x-www-form-urlencoded")>-1)return D$(e,u).toString();if((d=we.isFileList(e))||s.indexOf("multipart/form-data")>-1){const f=Pi(this,"env"),g=f&&f.FormData;return hu(d?{"files[]":e}:e,g&&new g,u)}}return o||r?(t.setContentType("application/json",!1),O$(e)):e}],transformResponse:[function(e){const t=Pi(this,"transitional")||pc.transitional,s=t&&t.forcedJSONParsing,r=Pi(this,"responseType"),o=r==="json";if(we.isResponse(e)||we.isReadableStream(e))return e;if(e&&we.isString(e)&&(s&&!r||o)){const d=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e,Pi(this,"parseReviver"))}catch(u){if(d)throw u.name==="SyntaxError"?ct.from(u,ct.ERR_BAD_RESPONSE,this,null,Pi(this,"response")):u}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ys.classes.FormData,Blob:ys.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};we.forEach(["delete","get","head","post","put","patch","query"],n=>{pc.headers[n]={}});function Xg(n,e){const t=this||pc,s=e||t,r=ws.from(s.headers);let o=s.data;return we.forEach(n,function(d){o=d.call(t,o,r.normalize(),e?e.status:void 0)}),r.normalize(),o}function fw(n){return!!(n&&n.__CANCEL__)}let gc=class extends ct{constructor(e,t,s){super(e??"canceled",ct.ERR_CANCELED,t,s),this.name="CanceledError",this.__CANCEL__=!0}};function pw(n,e,t){const s=t.config.validateStatus;!t.status||!s||s(t.status)?n(t):e(new ct("Request failed with status code "+t.status,t.status>=400&&t.status<500?ct.ERR_BAD_REQUEST:ct.ERR_BAD_RESPONSE,t.config,t.request,t))}function M$(n){const e=/^([-+\w]{1,25}):(?:\/\/)?/.exec(n);return e&&e[1]||""}function z$(n,e){n=n||10;const t=new Array(n),s=new Array(n);let r=0,o=0,l;return e=e!==void 0?e:1e3,function(u){const f=Date.now(),g=s[o];l||(l=f),t[r]=u,s[r]=f;let h=o,b=0;for(;h!==r;)b+=t[h++],h=h%n;if(r=(r+1)%n,r===o&&(o=(o+1)%n),f-l<e)return;const y=g&&f-g;return y?Math.round(b*1e3/y):void 0}}function P$(n,e){let t=0,s=1e3/e,r,o;const l=(f,g=Date.now())=>{t=g,r=null,o&&(clearTimeout(o),o=null),n(...f)};return[(...f)=>{const g=Date.now(),h=g-t;h>=s?l(f,g):(r=f,o||(o=setTimeout(()=>{o=null,l(r)},s-h)))},()=>r&&l(r)]}const mu=(n,e,t=3)=>{let s=0;const r=z$(50,250);return P$(o=>{if(!o||typeof o.loaded!="number")return;const l=o.loaded,d=o.lengthComputable?o.total:void 0,u=d!=null?Math.min(l,d):l,f=Math.max(0,u-s),g=r(f);s=Math.max(s,u);const h={loaded:u,total:d,progress:d?u/d:void 0,bytes:f,rate:g||void 0,estimated:g&&d?(d-u)/g:void 0,event:o,lengthComputable:d!=null,[e?"download":"upload"]:!0};n(h)},t)},gw=(n,e)=>{const t=n!=null;return[s=>e[0]({lengthComputable:t,total:n,loaded:s}),e[1]]},hw=n=>(...e)=>we.asap(()=>n(...e)),B$=ys.hasStandardBrowserEnv?((n,e)=>t=>(t=new URL(t,ys.origin),n.protocol===t.protocol&&n.host===t.host&&(e||n.port===t.port)))(new URL(ys.origin),ys.navigator&&/(msie|trident)/i.test(ys.navigator.userAgent)):()=>!0,H$=ys.hasStandardBrowserEnv?{write(n,e,t,s,r,o,l){if(typeof document>"u")return;const d=[`${n}=${encodeURIComponent(e)}`];we.isNumber(t)&&d.push(`expires=${new Date(t).toUTCString()}`),we.isString(s)&&d.push(`path=${s}`),we.isString(r)&&d.push(`domain=${r}`),o===!0&&d.push("secure"),we.isString(l)&&d.push(`SameSite=${l}`),document.cookie=d.join("; ")},read(n){if(typeof document>"u")return null;const e=document.cookie.split(";");for(let t=0;t<e.length;t++){const s=e[t].replace(/^\s+/,""),r=s.indexOf("=");if(r!==-1&&s.slice(0,r)===n)return decodeURIComponent(s.slice(r+1))}return null},remove(n){this.write(n,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function W$(n){return typeof n!="string"?!1:/^([a-z][a-z\d+\-.]*:)?\/\//i.test(n)}function U$(n,e){return e?n.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):n}function mw(n,e,t){let s=!W$(e);return n&&(s||t===!1)?U$(n,e):e}const yw=n=>n instanceof ws?{...n}:n;function Ma(n,e){e=e||{};const t=Object.create(null);Object.defineProperty(t,"hasOwnProperty",{__proto__:null,value:Object.prototype.hasOwnProperty,enumerable:!1,writable:!0,configurable:!0});function s(f,g,h,b){return we.isPlainObject(f)&&we.isPlainObject(g)?we.merge.call({caseless:b},f,g):we.isPlainObject(g)?we.merge({},g):we.isArray(g)?g.slice():g}function r(f,g,h,b){if(we.isUndefined(g)){if(!we.isUndefined(f))return s(void 0,f,h,b)}else return s(f,g,h,b)}function o(f,g){if(!we.isUndefined(g))return s(void 0,g)}function l(f,g){if(we.isUndefined(g)){if(!we.isUndefined(f))return s(void 0,f)}else return s(void 0,g)}function d(f,g,h){if(we.hasOwnProp(e,h))return s(f,g);if(we.hasOwnProp(n,h))return s(void 0,f)}const u={url:o,method:o,data:o,baseURL:l,transformRequest:l,transformResponse:l,paramsSerializer:l,timeout:l,timeoutMessage:l,withCredentials:l,withXSRFToken:l,adapter:l,responseType:l,xsrfCookieName:l,xsrfHeaderName:l,onUploadProgress:l,onDownloadProgress:l,decompress:l,maxContentLength:l,maxBodyLength:l,beforeRedirect:l,transport:l,httpAgent:l,httpsAgent:l,cancelToken:l,socketPath:l,allowedSocketPaths:l,responseEncoding:l,validateStatus:d,headers:(f,g,h)=>r(yw(f),yw(g),h,!0)};return we.forEach(Object.keys({...n,...e}),function(g){if(g==="__proto__"||g==="constructor"||g==="prototype")return;const h=we.hasOwnProp(u,g)?u[g]:r,b=we.hasOwnProp(n,g)?n[g]:void 0,y=we.hasOwnProp(e,g)?e[g]:void 0,v=h(b,y,g);we.isUndefined(v)&&h!==d||(t[g]=v)}),t}const q$=["content-type","content-length"];function F$(n,e,t){if(t!=="content-only"){n.set(e);return}Object.entries(e).forEach(([s,r])=>{q$.includes(s.toLowerCase())&&n.set(s,r)})}const V$=n=>encodeURIComponent(n).replace(/%([0-9A-F]{2})/gi,(e,t)=>String.fromCharCode(parseInt(t,16))),bw=n=>{const e=Ma({},n),t=b=>we.hasOwnProp(e,b)?e[b]:void 0,s=t("data");let r=t("withXSRFToken");const o=t("xsrfHeaderName"),l=t("xsrfCookieName");let d=t("headers");const u=t("auth"),f=t("baseURL"),g=t("allowAbsoluteUrls"),h=t("url");if(e.headers=d=ws.from(d),e.url=cw(mw(f,h,g),n.params,n.paramsSerializer),u&&d.set("Authorization","Basic "+btoa((u.username||"")+":"+(u.password?V$(u.password):""))),we.isFormData(s)&&(ys.hasStandardBrowserEnv||ys.hasStandardBrowserWebWorkerEnv?d.setContentType(void 0):we.isFunction(s.getHeaders)&&F$(d,s.getHeaders(),t("formDataHeaderPolicy"))),ys.hasStandardBrowserEnv&&(we.isFunction(r)&&(r=r(e)),r===!0||r==null&&B$(e.url))){const y=o&&l&&H$.read(l);y&&d.set(o,y)}return e},K$=typeof XMLHttpRequest<"u"&&function(n){return new Promise(function(t,s){const r=bw(n);let o=r.data;const l=ws.from(r.headers).normalize();let{responseType:d,onUploadProgress:u,onDownloadProgress:f}=r,g,h,b,y,v;function x(){y&&y(),v&&v(),r.cancelToken&&r.cancelToken.unsubscribe(g),r.signal&&r.signal.removeEventListener("abort",g)}let S=new XMLHttpRequest;S.open(r.method.toUpperCase(),r.url,!0),S.timeout=r.timeout;function _(){if(!S)return;const C=ws.from("getAllResponseHeaders"in S&&S.getAllResponseHeaders()),E={data:!d||d==="text"||d==="json"?S.responseText:S.response,status:S.status,statusText:S.statusText,headers:C,config:n,request:S};pw(function(D){t(D),x()},function(D){s(D),x()},E),S=null}"onloadend"in S?S.onloadend=_:S.onreadystatechange=function(){!S||S.readyState!==4||S.status===0&&!(S.responseURL&&S.responseURL.startsWith("file:"))||setTimeout(_)},S.onabort=function(){S&&(s(new ct("Request aborted",ct.ECONNABORTED,n,S)),x(),S=null)},S.onerror=function(j){const E=j&&j.message?j.message:"Network Error",T=new ct(E,ct.ERR_NETWORK,n,S);T.event=j||null,s(T),x(),S=null},S.ontimeout=function(){let j=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const E=r.transitional||Kg;r.timeoutErrorMessage&&(j=r.timeoutErrorMessage),s(new ct(j,E.clarifyTimeoutError?ct.ETIMEDOUT:ct.ECONNABORTED,n,S)),x(),S=null},o===void 0&&l.setContentType(null),"setRequestHeader"in S&&we.forEach(rw(l),function(j,E){S.setRequestHeader(E,j)}),we.isUndefined(r.withCredentials)||(S.withCredentials=!!r.withCredentials),d&&d!=="json"&&(S.responseType=r.responseType),f&&([b,v]=mu(f,!0),S.addEventListener("progress",b)),u&&S.upload&&([h,y]=mu(u),S.upload.addEventListener("progress",h),S.upload.addEventListener("loadend",y)),(r.cancelToken||r.signal)&&(g=C=>{S&&(s(!C||C.type?new gc(null,n,S):C),S.abort(),x(),S=null)},r.cancelToken&&r.cancelToken.subscribe(g),r.signal&&(r.signal.aborted?g():r.signal.addEventListener("abort",g)));const A=M$(r.url);if(A&&!ys.protocols.includes(A)){s(new ct("Unsupported protocol "+A+":",ct.ERR_BAD_REQUEST,n));return}S.send(o||null)})},G$=(n,e)=>{if(n=n?n.filter(Boolean):[],!e&&!n.length)return;const t=new AbortController;let s=!1;const r=function(u){if(!s){s=!0,l();const f=u instanceof Error?u:this.reason;t.abort(f instanceof ct?f:new gc(f instanceof Error?f.message:f))}};let o=e&&setTimeout(()=>{o=null,r(new ct(`timeout of ${e}ms exceeded`,ct.ETIMEDOUT))},e);const l=()=>{n&&(o&&clearTimeout(o),o=null,n.forEach(u=>{u.unsubscribe?u.unsubscribe(r):u.removeEventListener("abort",r)}),n=null)};n.forEach(u=>u.addEventListener("abort",r));const{signal:d}=t;return d.unsubscribe=()=>we.asap(l),d},Y$=function*(n,e){let t=n.byteLength;if(t<e){yield n;return}let s=0,r;for(;s<t;)r=s+e,yield n.slice(s,r),s=r},X$=async function*(n,e){for await(const t of J$(n))yield*Y$(t,e)},J$=async function*(n){if(n[Symbol.asyncIterator]){yield*n;return}const e=n.getReader();try{for(;;){const{done:t,value:s}=await e.read();if(t)break;yield s}}finally{await e.cancel()}},xw=(n,e,t,s)=>{const r=X$(n,e);let o=0,l,d=u=>{l||(l=!0,s&&s(u))};return new ReadableStream({async pull(u){try{const{done:f,value:g}=await r.next();if(f){d(),u.close();return}let h=g.byteLength;if(t){let b=o+=h;t(b)}u.enqueue(new Uint8Array(g))}catch(f){throw d(f),f}},cancel(u){return d(u),r.return()}},{highWaterMark:2})};function Z$(n){if(!n||typeof n!="string"||!n.startsWith("data:"))return 0;const e=n.indexOf(",");if(e<0)return 0;const t=n.slice(5,e),s=n.slice(e+1);if(/;base64/i.test(t)){let l=s.length;const d=s.length;for(let y=0;y<d;y++)if(s.charCodeAt(y)===37&&y+2<d){const v=s.charCodeAt(y+1),x=s.charCodeAt(y+2);(v>=48&&v<=57||v>=65&&v<=70||v>=97&&v<=102)&&(x>=48&&x<=57||x>=65&&x<=70||x>=97&&x<=102)&&(l-=2,y+=2)}let u=0,f=d-1;const g=y=>y>=2&&s.charCodeAt(y-2)===37&&s.charCodeAt(y-1)===51&&(s.charCodeAt(y)===68||s.charCodeAt(y)===100);f>=0&&(s.charCodeAt(f)===61?(u++,f--):g(f)&&(u++,f-=3)),u===1&&f>=0&&(s.charCodeAt(f)===61||g(f))&&u++;const b=Math.floor(l/4)*3-(u||0);return b>0?b:0}if(typeof Buffer<"u"&&typeof Buffer.byteLength=="function")return Buffer.byteLength(s,"utf8");let o=0;for(let l=0,d=s.length;l<d;l++){const u=s.charCodeAt(l);if(u<128)o+=1;else if(u<2048)o+=2;else if(u>=55296&&u<=56319&&l+1<d){const f=s.charCodeAt(l+1);f>=56320&&f<=57343?(o+=4,l++):o+=3}else o+=3}return o}const Jg="1.16.1",vw=64*1024,{isFunction:yu}=we,ww=(n,...e)=>{try{return!!n(...e)}catch{return!1}},Q$=n=>{const e=we.global!==void 0&&we.global!==null?we.global:globalThis,{ReadableStream:t,TextEncoder:s}=e;n=we.merge.call({skipUndefined:!0},{Request:e.Request,Response:e.Response},n);const{fetch:r,Request:o,Response:l}=n,d=r?yu(r):typeof fetch=="function",u=yu(o),f=yu(l);if(!d)return!1;const g=d&&yu(t),h=d&&(typeof s=="function"?(_=>A=>_.encode(A))(new s):async _=>new Uint8Array(await new o(_).arrayBuffer())),b=u&&g&&ww(()=>{let _=!1;const A=new o(ys.origin,{body:new t,method:"POST",get duplex(){return _=!0,"half"}}),C=A.headers.has("Content-Type");return A.body!=null&&A.body.cancel(),_&&!C}),y=f&&g&&ww(()=>we.isReadableStream(new l("").body)),v={stream:y&&(_=>_.body)};d&&["text","arrayBuffer","blob","formData","stream"].forEach(_=>{!v[_]&&(v[_]=(A,C)=>{let j=A&&A[_];if(j)return j.call(A);throw new ct(`Response type '${_}' is not supported`,ct.ERR_NOT_SUPPORT,C)})});const x=async _=>{if(_==null)return 0;if(we.isBlob(_))return _.size;if(we.isSpecCompliantForm(_))return(await new o(ys.origin,{method:"POST",body:_}).arrayBuffer()).byteLength;if(we.isArrayBufferView(_)||we.isArrayBuffer(_))return _.byteLength;if(we.isURLSearchParams(_)&&(_=_+""),we.isString(_))return(await h(_)).byteLength},S=async(_,A)=>{const C=we.toFiniteNumber(_.getContentLength());return C??x(A)};return async _=>{let{url:A,method:C,data:j,signal:E,cancelToken:T,timeout:D,onDownloadProgress:I,onUploadProgress:W,responseType:z,headers:H,withCredentials:G="same-origin",fetchOptions:F,maxContentLength:Z,maxBodyLength:Y}=bw(_);const U=we.isNumber(Z)&&Z>-1,B=we.isNumber(Y)&&Y>-1;let te=r||fetch;z=z?(z+"").toLowerCase():"text";let q=G$([E,T&&T.toAbortSignal()],D),M=null;const N=q&&q.unsubscribe&&(()=>{q.unsubscribe()});let V;try{if(U&&typeof A=="string"&&A.startsWith("data:")&&Z$(A)>Z)throw new ct("maxContentLength size of "+Z+" exceeded",ct.ERR_BAD_RESPONSE,_,M);if(B&&C!=="get"&&C!=="head"){const me=await S(H,j);if(typeof me=="number"&&isFinite(me)&&me>Y)throw new ct("Request body larger than maxBodyLength limit",ct.ERR_BAD_REQUEST,_,M)}if(W&&b&&C!=="get"&&C!=="head"&&(V=await S(H,j))!==0){let me=new o(A,{method:"POST",body:j,duplex:"half"}),ce;if(we.isFormData(j)&&(ce=me.headers.get("content-type"))&&H.setContentType(ce),me.body){const[be,Be]=gw(V,mu(hw(W)));j=xw(me.body,vw,be,Be)}}we.isString(G)||(G=G?"include":"omit");const ee=u&&"credentials"in o.prototype;if(we.isFormData(j)){const me=H.getContentType();me&&/^multipart\/form-data/i.test(me)&&!/boundary=/i.test(me)&&H.delete("content-type")}H.set("User-Agent","axios/"+Jg,!1);const se={...F,signal:q,method:C.toUpperCase(),headers:rw(H.normalize()),body:j,duplex:"half",credentials:ee?G:void 0};M=u&&new o(A,se);let re=await(u?te(M,F):te(A,se));if(U){const me=we.toFiniteNumber(re.headers.get("content-length"));if(me!=null&&me>Z)throw new ct("maxContentLength size of "+Z+" exceeded",ct.ERR_BAD_RESPONSE,_,M)}const pe=y&&(z==="stream"||z==="response");if(y&&re.body&&(I||U||pe&&N)){const me={};["status","statusText","headers"].forEach(Fe=>{me[Fe]=re[Fe]});const ce=we.toFiniteNumber(re.headers.get("content-length")),[be,Be]=I&&gw(ce,mu(hw(I),!0))||[];let fe=0;const De=Fe=>{if(U&&(fe=Fe,fe>Z))throw new ct("maxContentLength size of "+Z+" exceeded",ct.ERR_BAD_RESPONSE,_,M);be&&be(Fe)};re=new l(xw(re.body,vw,De,()=>{Be&&Be(),N&&N()}),me)}z=z||"text";let je=await v[we.findKey(v,z)||"text"](re,_);if(U&&!y&&!pe){let me;if(je!=null&&(typeof je.byteLength=="number"?me=je.byteLength:typeof je.size=="number"?me=je.size:typeof je=="string"&&(me=typeof s=="function"?new s().encode(je).byteLength:je.length)),typeof me=="number"&&me>Z)throw new ct("maxContentLength size of "+Z+" exceeded",ct.ERR_BAD_RESPONSE,_,M)}return!pe&&N&&N(),await new Promise((me,ce)=>{pw(me,ce,{data:je,headers:ws.from(re.headers),status:re.status,statusText:re.statusText,config:_,request:M})})}catch(ee){if(N&&N(),q&&q.aborted&&q.reason instanceof ct){const se=q.reason;throw se.config=_,M&&(se.request=M),ee!==se&&(se.cause=ee),se}throw ee&&ee.name==="TypeError"&&/Load failed|fetch/i.test(ee.message)?Object.assign(new ct("Network Error",ct.ERR_NETWORK,_,M,ee&&ee.response),{cause:ee.cause||ee}):ct.from(ee,ee&&ee.code,_,M,ee&&ee.response)}}},eN=new Map,_w=n=>{let e=n&&n.env||{};const{fetch:t,Request:s,Response:r}=e,o=[s,r,t];let l=o.length,d=l,u,f,g=eN;for(;d--;)u=o[d],f=g.get(u),f===void 0&&g.set(u,f=d?new Map:Q$(e)),g=f;return f};_w();const Zg={http:C$,xhr:K$,fetch:{get:_w}};we.forEach(Zg,(n,e)=>{if(n){try{Object.defineProperty(n,"name",{__proto__:null,value:e})}catch{}Object.defineProperty(n,"adapterName",{__proto__:null,value:e})}});const Sw=n=>`- ${n}`,tN=n=>we.isFunction(n)||n===null||n===!1;function nN(n,e){n=we.isArray(n)?n:[n];const{length:t}=n;let s,r;const o={};for(let l=0;l<t;l++){s=n[l];let d;if(r=s,!tN(s)&&(r=Zg[(d=String(s)).toLowerCase()],r===void 0))throw new ct(`Unknown adapter '${d}'`);if(r&&(we.isFunction(r)||(r=r.get(e))))break;o[d||"#"+l]=r}if(!r){const l=Object.entries(o).map(([u,f])=>`adapter ${u} `+(f===!1?"is not supported by the environment":"is not available in the build"));let d=t?l.length>1?`since :
`+l.map(Sw).join(`
`):" "+Sw(l[0]):"as no adapter specified";throw new ct("There is no suitable adapter to dispatch the request "+d,"ERR_NOT_SUPPORT")}return r}const kw={getAdapter:nN,adapters:Zg};function Qg(n){if(n.cancelToken&&n.cancelToken.throwIfRequested(),n.signal&&n.signal.aborted)throw new gc(null,n)}function Cw(n){return Qg(n),n.headers=ws.from(n.headers),n.data=Xg.call(n,n.transformRequest),["post","put","patch"].indexOf(n.method)!==-1&&n.headers.setContentType("application/x-www-form-urlencoded",!1),kw.getAdapter(n.adapter||pc.adapter,n)(n).then(function(s){Qg(n),n.response=s;try{s.data=Xg.call(n,n.transformResponse,s)}finally{delete n.response}return s.headers=ws.from(s.headers),s},function(s){if(!fw(s)&&(Qg(n),s&&s.response)){n.response=s.response;try{s.response.data=Xg.call(n,n.transformResponse,s.response)}finally{delete n.response}s.response.headers=ws.from(s.response.headers)}return Promise.reject(s)})}const bu={};["object","boolean","number","function","string","symbol"].forEach((n,e)=>{bu[n]=function(s){return typeof s===n||"a"+(e<1?"n ":" ")+n}});const jw={};bu.transitional=function(e,t,s){function r(o,l){return"[Axios v"+Jg+"] Transitional option '"+o+"'"+l+(s?". "+s:"")}return(o,l,d)=>{if(e===!1)throw new ct(r(l," has been removed"+(t?" in "+t:"")),ct.ERR_DEPRECATED);return t&&!jw[l]&&(jw[l]=!0,console.warn(r(l," has been deprecated since v"+t+" and will be removed in the near future"))),e?e(o,l,d):!0}},bu.spelling=function(e){return(t,s)=>(console.warn(`${s} is likely a misspelling of ${e}`),!0)};function sN(n,e,t){if(typeof n!="object")throw new ct("options must be an object",ct.ERR_BAD_OPTION_VALUE);const s=Object.keys(n);let r=s.length;for(;r-- >0;){const o=s[r],l=Object.prototype.hasOwnProperty.call(e,o)?e[o]:void 0;if(l){const d=n[o],u=d===void 0||l(d,o,n);if(u!==!0)throw new ct("option "+o+" must be "+u,ct.ERR_BAD_OPTION_VALUE);continue}if(t!==!0)throw new ct("Unknown option "+o,ct.ERR_BAD_OPTION)}}const xu={assertOptions:sN,validators:bu},sr=xu.validators;let za=class{constructor(e){this.defaults=e||{},this.interceptors={request:new dw,response:new dw}}async request(e,t){try{return await this._request(e,t)}catch(s){if(s instanceof Error){let r={};Error.captureStackTrace?Error.captureStackTrace(r):r=new Error;const o=(()=>{if(!r.stack)return"";const l=r.stack.indexOf(`
`);return l===-1?"":r.stack.slice(l+1)})();try{if(!s.stack)s.stack=o;else if(o){const l=o.indexOf(`
`),d=l===-1?-1:o.indexOf(`
`,l+1),u=d===-1?"":o.slice(d+1);String(s.stack).endsWith(u)||(s.stack+=`
`+o)}}catch{}}throw s}}_request(e,t){typeof e=="string"?(t=t||{},t.url=e):t=e||{},t=Ma(this.defaults,t);const{transitional:s,paramsSerializer:r,headers:o}=t;s!==void 0&&xu.assertOptions(s,{silentJSONParsing:sr.transitional(sr.boolean),forcedJSONParsing:sr.transitional(sr.boolean),clarifyTimeoutError:sr.transitional(sr.boolean),legacyInterceptorReqResOrdering:sr.transitional(sr.boolean)},!1),r!=null&&(we.isFunction(r)?t.paramsSerializer={serialize:r}:xu.assertOptions(r,{encode:sr.function,serialize:sr.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),xu.assertOptions(t,{baseUrl:sr.spelling("baseURL"),withXsrfToken:sr.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let l=o&&we.merge(o.common,o[t.method]);o&&we.forEach(["delete","get","head","post","put","patch","query","common"],v=>{delete o[v]}),t.headers=ws.concat(l,o);const d=[];let u=!0;this.interceptors.request.forEach(function(x){if(typeof x.runWhen=="function"&&x.runWhen(t)===!1)return;u=u&&x.synchronous;const S=t.transitional||Kg;S&&S.legacyInterceptorReqResOrdering?d.unshift(x.fulfilled,x.rejected):d.push(x.fulfilled,x.rejected)});const f=[];this.interceptors.response.forEach(function(x){f.push(x.fulfilled,x.rejected)});let g,h=0,b;if(!u){const v=[Cw.bind(this),void 0];for(v.unshift(...d),v.push(...f),b=v.length,g=Promise.resolve(t);h<b;)g=g.then(v[h++],v[h++]);return g}b=d.length;let y=t;for(;h<b;){const v=d[h++],x=d[h++];try{y=v(y)}catch(S){x.call(this,S);break}}try{g=Cw.call(this,y)}catch(v){return Promise.reject(v)}for(h=0,b=f.length;h<b;)g=g.then(f[h++],f[h++]);return g}getUri(e){e=Ma(this.defaults,e);const t=mw(e.baseURL,e.url,e.allowAbsoluteUrls);return cw(t,e.params,e.paramsSerializer)}};we.forEach(["delete","get","head","options"],function(e){za.prototype[e]=function(t,s){return this.request(Ma(s||{},{method:e,url:t,data:(s||{}).data}))}}),we.forEach(["post","put","patch","query"],function(e){function t(s){return function(o,l,d){return this.request(Ma(d||{},{method:e,headers:s?{"Content-Type":"multipart/form-data"}:{},url:o,data:l}))}}za.prototype[e]=t(),e!=="query"&&(za.prototype[e+"Form"]=t(!0))});let rN=class ZA{constructor(e){if(typeof e!="function")throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(o){t=o});const s=this;this.promise.then(r=>{if(!s._listeners)return;let o=s._listeners.length;for(;o-- >0;)s._listeners[o](r);s._listeners=null}),this.promise.then=r=>{let o;const l=new Promise(d=>{s.subscribe(d),o=d}).then(r);return l.cancel=function(){s.unsubscribe(o)},l},e(function(o,l,d){s.reason||(s.reason=new gc(o,l,d),t(s.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 t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=s=>{e.abort(s)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new ZA(function(r){e=r}),cancel:e}}};function oN(n){return function(t){return n.apply(null,t)}}function aN(n){return we.isObject(n)&&n.isAxiosError===!0}const eh={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(eh).forEach(([n,e])=>{eh[e]=n});function Ew(n){const e=new za(n),t=Gv(za.prototype.request,e);return we.extend(t,za.prototype,e,{allOwnKeys:!0}),we.extend(t,e,null,{allOwnKeys:!0}),t.create=function(r){return Ew(Ma(n,r))},t}const On=Ew(pc);On.Axios=za,On.CanceledError=gc,On.CancelToken=rN,On.isCancel=fw,On.VERSION=Jg,On.toFormData=hu,On.AxiosError=ct,On.Cancel=On.CanceledError,On.all=function(e){return Promise.all(e)},On.spread=oN,On.isAxiosError=aN,On.mergeConfig=Ma,On.AxiosHeaders=ws,On.formToJSON=n=>uw(we.isHTMLForm(n)?new FormData(n):n),On.getAdapter=kw.getAdapter,On.HttpStatusCode=eh,On.default=On;const{Axios:cee,AxiosError:dee,CanceledError:uee,isCancel:fee,CancelToken:pee,VERSION:gee,all:hee,Cancel:mee,isAxiosError:yee,spread:bee,toFormData:xee,AxiosHeaders:vee,HttpStatusCode:wee,formToJSON:_ee,getAdapter:See,mergeConfig:kee,create:Cee}=On,th="g7.identity.redirectStash",vu=Ht("IdentityGuardInterceptor");class rn{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 t=this.deferredResolver;if(!t){vu.warn("IdentityGuardInterceptor.resolveDeferred 호출됐지만 대기 중인 launcher 가 없습니다. 모달이 launcher 외부에서 열렸는지 확인하세요.");return}this.deferredResolver=null,t(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,t){return e===428&&typeof t=="object"&&t!==null&&t.error_code==="identity_verification_required"}static async handle(e,t,s){this.domainNoticeShown=!1;const r=this.launcher??lN,l=!!(s&&(s.email||s.phone))?{...e.verification,target:s}:e.verification,d=await r(l);if(d.status!=="verified")return null;const u=l.return_request;if(!u)return null;const f=iN(u.url,d.token);return fetch(f,{method:u.method,headers:t?.headers??{Accept:"application/json","Content-Type":"application/json"},body:t?.body,credentials:t?.credentials??"same-origin"})}static redirectExternally(e){const t=e.redirect_url;if(!t)return vu.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 s={return_url:window.location.href,payload:e,stashed_at:Date.now()};try{window.sessionStorage?.setItem(th,JSON.stringify(s))}catch(r){vu.warn("sessionStorage 접근 실패 — stash 없이 redirect 합니다.",r)}window.location.href=t}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}}ne(rn,"launcher",null),ne(rn,"deferredResolver",null),ne(rn,"domainNoticeShown",!1);function iN(n,e){if(!e)return n;try{const t=typeof window<"u"?window.location.origin:"http://localhost",s=new URL(n,t);return s.searchParams.set("verification_token",e),/^https?:\/\//i.test(n)?s.toString():`${s.pathname}${s.search}${s.hash}`}catch{const t=n.includes("?")?"&":"?";return`${n}${t}verification_token=${encodeURIComponent(e)}`}}const lN=async n=>{if(typeof window>"u")return{status:"cancelled"};if(n.render_hint==="external_redirect"||n.redirect_url)return rn.redirectExternally(n);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 t=window.location.href,s={return_url:t,payload:n,stashed_at:Date.now()};try{window.sessionStorage?.setItem(th,JSON.stringify(s))}catch{}const r=`/identity/challenge?return=${encodeURIComponent(t)}`;try{await e.dispatch({handler:"navigate",params:{path:r}})}catch(o){vu.warn("navigate 실패 — window.location 으로 폴백",o),window.location.href=r}return new Promise(()=>{})},cN=Ht("ApiClient");function nh(){return typeof window<"u"&&window.__G7_DEVTOOLS__?window.__G7_DEVTOOLS__:null}class dN{constructor(e={}){ne(this,"client");ne(this,"config");ne(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=On.create({baseURL:this.config.baseURL,timeout:this.config.timeout,headers:{"Content-Type":"application/json",Accept:"application/json"},paramsSerializer:{serialize:t=>{const s=[];for(const[r,o]of Object.entries(t))if(o!=null)if(Array.isArray(o)){const l=r.endsWith("[]")?r:`${r}[]`;for(const d of o)s.push(`${encodeURIComponent(l)}=${encodeURIComponent(String(d))}`)}else s.push(`${encodeURIComponent(r)}=${encodeURIComponent(String(o))}`);return s.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 t=this.getToken();if(t&&e.headers&&(e.headers.Authorization=`Bearer ${t}`),typeof window<"u"&&e.headers){const r=localStorage.getItem("g7_locale");r&&(e.headers["Accept-Language"]=r)}const s=nh();if(s?.isEnabled()){const r=this.buildFullUrl(e),o=(e.method||"GET").toUpperCase(),l=s.trackRequest(r,o,{requestBody:e.data});e._devToolsRequestId=l}return e},e=>Promise.reject(e)),this.client.interceptors.response.use(e=>{const t=e.config,s=t._devToolsRequestId;if(s){const r=nh();r?.isEnabled()&&r.completeRequest(s,e.status,e.data),t._devToolsRequestId=null}return e},async e=>{const t=e.config,s=t?.url||"",o=["/auth/","/layouts/"].some(l=>s.includes(l));if(e.response?.status===401&&!t?._retry&&!o){if(t._retry=!0,await rr.getInstance().refreshToken()){const u=this.getToken();return u&&(t.headers.Authorization=`Bearer ${u}`),t._devToolsRequestId=null,this.client(t)}return this.completeDevToolsRequest(t,e),this.removeToken(),this.config.onUnauthorized&&this.config.onUnauthorized(),Promise.reject(e)}if(e.response?.status===401&&o)return this.completeDevToolsRequest(t,e),Promise.reject(e);if(rn.isIdentityRequired(e.response?.status,e.response?.data)){this.completeDevToolsRequest(t,e);const l={},d=t?.headers??{};for(const[b,y]of Object.entries(d))typeof y=="string"&&(l[b]=y);let u;t?.data!==void 0&&t?.data!==null&&(u=typeof t.data=="string"?t.data:JSON.stringify(t.data),l["Content-Type"]=l["Content-Type"]??"application/json");const f=t?.identity_target,g=await rn.handle(e.response.data,{headers:l,body:u,credentials:"same-origin"},f);if(!g)return Promise.reject(e);let h=null;try{h=await g.json()}catch{h=null}return g.ok?{...e.response,status:g.status,data:h}:Promise.reject(Object.assign(new Error("replay failed"),{response:{status:g.status,data:h}}))}return e.response?.status===403?(this.completeDevToolsRequest(t,e),this.callOnError(e),Promise.reject(e)):(this.completeDevToolsRequest(t,e),e.response&&this.callOnError(e),Promise.reject(e))})}async get(e,t){return(await this.client.get(e,t)).data}async post(e,t,s){return(await this.client.post(e,t,s)).data}async put(e,t,s){return(await this.client.put(e,t,s)).data}async patch(e,t,s){return(await this.client.patch(e,t,s)).data}async delete(e,t){return(await this.client.delete(e,t)).data}getInstance(){return this.client}setOnUnauthorized(e){this.config.onUnauthorized=e}setOnError(e){this.config.onError=e}completeDevToolsRequest(e,t){if(!e?._devToolsRequestId)return;const s=nh();if(!s?.isEnabled())return;const r=e._devToolsRequestId;e._devToolsRequestId=null,t.response?s.completeRequest(r,t.response.status,t.response.data):t.request?s.failRequest(r,t.message||"Network error"):s.failRequest(r,t.message||"Request error")}buildFullUrl(e){let t=e.url||"";if(e.baseURL&&!t.startsWith("http")&&(t=`${e.baseURL}${t.startsWith("/")?"":"/"}${t}`),e.params&&typeof e.params=="object"){const s=e.params,r=[];for(const[o,l]of Object.entries(s))if(l!=null)if(Array.isArray(l)){const d=o.endsWith("[]")?o:`${o}[]`;for(const u of l)r.push(`${encodeURIComponent(d)}=${encodeURIComponent(String(u))}`)}else r.push(`${encodeURIComponent(o)}=${encodeURIComponent(String(l))}`);r.length>0&&(t+=(t.includes("?")?"&":"?")+r.join("&"))}return t}callOnError(e){if(!this.config.onError)return;const t={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(t)}catch(s){cN.error("Error in onError handler:",s)}}}let sh=null;function qr(){return sh||(sh=new dN),sh}const hc=Ht("AuthManager");function Bi(n,e,t,s){try{window.G7Core?.devTools?.trackAuthEvent?.(n,e,t,s)}catch{}}const wu={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"}},Ir=class Ir{constructor(){ne(this,"state");ne(this,"config");ne(this,"isRefreshing",!1);ne(this,"refreshPromise",null);ne(this,"eventHandlers",new Map);this.state={isAuthenticated:!1,user:null,type:null},this.config=new Map,this.config.set("admin",wu.admin),this.config.set("user",wu.user)}static getInstance(){return Ir.instance||(Ir.instance=new Ir),Ir.instance}on(e,t){this.eventHandlers.has(e)||this.eventHandlers.set(e,[]),this.eventHandlers.get(e).push(t)}emit(e,...t){const s=this.eventHandlers.get(e);s&&s.forEach(r=>r(...t))}isAuthenticated(){return this.state.isAuthenticated}getUser(){return this.state.user}getAuthType(){return this.state.type}async checkAuth(e){const t=qr();if(!t.getToken())return this.clearState(),!1;const r=this.config.get(e);if(!r)return hc.error(`Unknown auth type: ${e}`),!1;try{const o=await t.get(r.userEndpoint);return o.success&&o.data?(this.state={isAuthenticated:!0,user:o.data,type:e},this.emit("authStateChange",this.state),!0):(this.clearState(),!1)}catch(o){return o.response?.status===401&&await this.refreshToken()?this.checkAuth(e):(this.clearState(),!1)}}async preloadAuth(e){try{return await this.checkAuth(e)}catch(t){return hc.warn(`Preload auth failed for type ${e}:`,t),!1}}async login(e,t,s){const r=qr();if(!this.config.get(e))throw new Error(`Unknown auth type: ${e}`);const l=e==="admin"?wu.admin.loginEndpoint:wu.user.loginEndpoint;try{const d=s?.headers?{headers:s.headers}:void 0,u=await r.post(l,t,d);if(u.success&&u.data){r.setToken(u.data.token);const f=u.data.user.language,g=localStorage.getItem(Ir.LOCALE_STORAGE_KEY),h=f&&f!==g;if(f)try{localStorage.setItem(Ir.LOCALE_STORAGE_KEY,f)}catch(b){hc.warn("Failed to save user language to localStorage:",b)}return this.state={isAuthenticated:!0,user:u.data.user,type:e},this.emit("login",this.state),this.emit("authStateChange",this.state),Bi("login",!0,void 0,{userId:u.data.user.uuid,email:u.data.user.email,type:e}),h&&window.__templateApp&&window.__templateApp.changeLocale(f),u.data.user}throw new Error("Login failed")}catch(d){this.clearState();const u=d.response?.data?.message,f=new Error(u||d.message||"Login failed");throw f.response=d.response,f.status=d.response?.status,Bi("login",!1,f.message,{type:e,status:d.response?.status}),f}}async logout(){const e=qr(),t=this.state.type?this.config.get(this.state.type):null;try{t&&await e.post(t.logoutEndpoint)}catch(s){hc.warn("Logout API call failed:",s)}finally{e.removeToken();const s={...this.state};if(this.clearState(),this.emit("logout",s),this.emit("authStateChange",this.state),Bi("logout",!0,void 0,{previousType:s.type}),t&&s.type){const r=window.location.pathname+window.location.search;window.location.href=this.getLoginRedirectUrl(s.type,r)}}}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 t=this.config.get(e);if(!t)return!1;const s=qr();try{const r=await s.post(t.refreshEndpoint);return r.success&&r.data?.token?(s.setToken(r.data.token),this.emit("tokenRefreshed"),Bi("token-refresh",!0,void 0,{type:e}),!0):(Bi("token-refresh",!1,"No token in response",{type:e}),!1)}catch(r){return hc.error("Token refresh failed:",r),Bi("token-refresh",!1,r instanceof Error?r.message:"Unknown error",{type:e}),!1}}getLoginRedirectUrl(e,t,s){const r=this.config.get(e);if(!r)return"/login";const o=encodeURIComponent(t);let l=`${r.loginPath}?redirect=${o}`;return s&&(l+=`&reason=${encodeURIComponent(s)}`),l}updateConfig(e,t){if(t.loginPath!==void 0){const r=t.loginPath;if(!r.startsWith("/")||r.startsWith("//"))throw new Error(`AuthManager.updateConfig: loginPath must be a same-origin path starting with '/' (got: ${r})`)}const s=this.config.get(e);s&&this.config.set(e,{...s,...t})}getRedirectUrl(e){const s=this.config.get(e)?.defaultPath||"/",o=new URLSearchParams(window.location.search).get("redirect");if(o)try{const l=decodeURIComponent(o);if(l.startsWith("/"))return l}catch{}return s}getConfig(e){return this.config.get(e)}clearState(){this.state={isAuthenticated:!1,user:null,type:null}}static resetInstance(){Ir.instance=null}};ne(Ir,"instance"),ne(Ir,"LOCALE_STORAGE_KEY","g7_locale");let rr=Ir;const Rw={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}}"}}},ho={findHandler(n,e){if(n){if(n[e])return n[e];if(n[String(e)])return n[String(e)];if(n.default)return n.default}},normalizeOnError(n){return n?Array.isArray(n)?n:[n]:[]},injectErrorCode(n,e,t){if(n.handler!=="showErrorPage"||n.params?.errorCode!==void 0)return n;const s=typeof e=="string"?parseInt(e,10):e,r=isNaN(s)?t:s;return r===void 0?n:{...n,params:{...n.params,errorCode:r}}}},wr=Ht("ErrorHandlingResolver"),ia=class ia{constructor(){ne(this,"templateErrorHandling",null);ne(this,"layoutErrorHandling",null);ne(this,"executeAction",null)}static getInstance(){return ia.instance||(ia.instance=new ia),ia.instance}static resetInstance(){ia.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,t={}){const{errorHandling:s,onError:r}=t;wr.log("Resolving error:",e,{hasActionErrorHandling:!!s,hasActionOnError:!!r,hasLayoutConfig:!!this.layoutErrorHandling,hasTemplateConfig:!!this.templateErrorHandling});let o=ho.findHandler(s,e);if(o){const l=this.getMatchedKey(s,e);return{handler:ho.injectErrorCode(o,l,e),level:"action",matchedKey:l}}if(r){const l=ho.normalizeOnError(r);if(l.length>0)return{handler:l.length===1?l[0]:{handler:"sequence",actions:l},level:"action",matchedKey:"onError"}}if(o=ho.findHandler(this.layoutErrorHandling||void 0,e),o){const l=this.getMatchedKey(this.layoutErrorHandling,e);return{handler:ho.injectErrorCode(o,l,e),level:"layout",matchedKey:l}}if(o=ho.findHandler(this.templateErrorHandling||void 0,e),o){const l=this.getMatchedKey(this.templateErrorHandling,e);return{handler:ho.injectErrorCode(o,l,e),level:"template",matchedKey:l}}if(o=ho.findHandler(Rw,e),o){const l=this.getMatchedKey(Rw,e);return{handler:ho.injectErrorCode(o,l,e),level:"system",matchedKey:l}}return{handler:null,level:null,matchedKey:null}}async execute(e,t){if(!this.executeAction){wr.error("Action executor is not set");return}wr.log("Executing handler:",e.handler,{errorContext:t});try{return await this.executeAction(e,{error:t})}catch(s){throw wr.error("Failed to execute handler:",s),s}}async resolveAndExecute(e,t,s={}){const r=this.resolve(e,s);if(wr.log("Resolve result:",{errorCode:e,handler:r.handler?.handler,level:r.level,matchedKey:r.matchedKey}),!r.handler)return wr.warn("No handler found for error:",e),{handled:!1};try{return{handled:!0,result:await this.execute(r.handler,t)}}catch(o){return wr.error("Handler execution failed:",o),{handled:!1}}}getMatchedKey(e,t){return e[t]?t:e[String(t)]?String(t):"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}}};ne(ia,"instance",null);let rh=ia;function _r(){return rh.getInstance()}var oh={exports:{}},mc={};var Aw;function uN(){if(Aw)return mc;Aw=1;var n=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function t(s,r,o){var l=null;if(o!==void 0&&(l=""+o),r.key!==void 0&&(l=""+r.key),"key"in r){o={};for(var d in r)d!=="key"&&(o[d]=r[d])}else o=r;return r=o.ref,{$$typeof:n,type:s,key:l,ref:r!==void 0?r:null,props:o}}return mc.Fragment=e,mc.jsx=t,mc.jsxs=t,mc}var Tw;function fN(){return Tw||(Tw=1,oh.exports=uN()),oh.exports}var a=fN();const pN=fo({__proto__:null,default:po(a)},[a]),ah=Ht("ParentContextProvider"),$w=w.createContext(null);let _u=null;function ih(){_u?(ah.log("[triggerModalParentUpdate] 모달 부모 컨텍스트 업데이트 트리거"),_u()):ah.warn("[triggerModalParentUpdate] Provider가 아직 마운트되지 않음")}const Nw=({children:n})=>{const[e,t]=w.useState(0),s=w.useRef(!0),r=w.useCallback(()=>{const l=window.__g7LayoutContextStack||[];return l[l.length-1]?.dataContext},[]);w.useEffect(()=>(s.current=!0,_u=()=>{s.current&&(t(l=>l+1),ah.log("[ParentContextProvider] 버전 업데이트됨"))},()=>{s.current=!1,_u=null}),[]);const o={version:e,getParentDataContext:r};return a.jsx($w.Provider,{value:o,children:n})};function gN(){return w.useContext($w)}const ae=Ht("ActionDispatcher"),Dw=new Set(["navigate","navigateBack","navigateForward","replaceUrl","refresh","logout"]),hN=new Set(["redirect"]);function Us(){try{return window.G7Core?.devTools}catch{return}}class Cn extends Error{constructor(t,s,r){super(t);ne(this,"action");ne(this,"originalError");this.action=s,this.originalError=r,this.name="ActionError"}}const yl=class yl{constructor(e={},t,s){ne(this,"bindingEngine");ne(this,"translationEngine");ne(this,"translationContext");ne(this,"customHandlers",new Map);ne(this,"defaultContext");ne(this,"globalStateUpdater");ne(this,"errorHandlingSetup",!1);ne(this,"debounceTimers",new Map);ne(this,"pendingDebounceFlushers",new Map);ne(this,"debounceAccumulatedValues",new Map);ne(this,"globalHeaders",[]);ne(this,"namedActions",{});ne(this,"previewMode",!1);ne(this,"intervals",new Map);this.bindingEngine=new ms,this.translationEngine=t,this.translationContext=s,this.defaultContext=e,this.registerDefaultHandlers(),this.setupErrorHandling()}setGlobalHeaders(e){this.globalHeaders=e||[]}setNamedActions(e){this.namedActions=e||{};const t=Us();t?.isEnabled?.()&&t.setNamedActionDefinitions?.(this.namedActions),ae.log("[setNamedActions] registered:",Object.keys(this.namedActions))}getNamedActions(){return this.namedActions}setPreviewMode(e){this.previewMode=e,ae.log("Preview mode:",e?"enabled":"disabled")}isPreviewMode(){return this.previewMode}static getPreviewSuppressedHandlers(){return Dw}static getPreviewSuppressedLayoutFeatures(){return hN}resolveActionRef(e){if(!e.actionRef)return e;const t=this.namedActions[e.actionRef];if(!t)return ae.warn(`[resolveActionRef] named action not found: "${e.actionRef}"`),e;const s=Us();s?.isEnabled?.()&&s.trackNamedActionRef?.({actionRefName:e.actionRef,resolvedHandler:t.handler,timestamp:Date.now()});const{actionRef:r,type:o,key:l,event:d,...u}=e,f={...t,...Object.fromEntries(Object.entries(u).filter(([,g])=>g!==void 0)),type:o??t.type};return l!==void 0&&(f.key=l),d!==void 0&&(f.event=d),f}matchesPattern(e,t){if(t==="*")return!0;const s=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${s}$`).test(e)}getMatchingGlobalHeaders(e,t){const s={};for(const r of this.globalHeaders)this.matchesPattern(e,r.pattern)&&Object.entries(r.headers).forEach(([o,l])=>{const d=Oi(l,t,{skipCache:!0});d!=null&&d!==""&&(s[o]=String(d))});return s}setupErrorHandling(){if(this.errorHandlingSetup)return;_r().setActionExecutor(async(t,s)=>{const r={type:"click",handler:t.handler,target:t.target,params:t.params,actions:t.actions},o={data:{...this.defaultContext.data,error:s.error}};return await this.dispatchAction(r,o)}),this.errorHandlingSetup=!0}registerDefaultHandlers(){this.registerHandler("refetchDataSource",async(t,s)=>{const r=t.params?.dataSourceId,o=t.params?.sync;if(!r){ae.warn("refetchDataSource: dataSourceId is required");return}if(typeof window<"u"&&window.G7Core?.dataSource?.refetch){const l=window.G7Core?.state?.get?.()||{},d={...s.state?._global,...l},u=window.G7Core?.state?.getLocal?.()||{},f=s.data?._local||s.state||{},g={...u,...f},h=s.isolatedContext?.state;ae.log("[refetchDataSource] localStateOverride:",g),await window.G7Core.dataSource.refetch(r,{...o?{sync:!0}:{},...d?{globalStateOverride:d}:{},...g?{localStateOverride:g}:{},...h?{isolatedStateOverride:h}:{}})}else ae.warn("refetchDataSource: G7Core.dataSource.refetch is not available")}),this.registerHandler("appendDataSource",async(t,s)=>{const{dataSourceId:r,dataPath:o,newData:l}=t.params||{};if(!r){ae.warn("appendDataSource: dataSourceId is required");return}if(l===void 0){ae.warn("appendDataSource: newData is required");return}if(typeof window<"u"&&window.G7Core?.dataSource?.updateData){if(!Array.isArray(l)){ae.warn("appendDataSource: newData must be an array, got:",typeof l,l);return}await window.G7Core.dataSource.updateData(r,o||null,l,"append")}else ae.warn("appendDataSource: G7Core.dataSource.updateData is not available")}),this.registerHandler("updateDataSource",async(t,s)=>{const{dataSourceId:r,data:o,merge:l=!1}=t.params||{};if(!r){ae.warn("updateDataSource: dataSourceId is required");return}if(o===void 0){ae.warn("updateDataSource: data is required");return}typeof window<"u"&&window.G7Core?.dataSource?.set?(ae.log(`[updateDataSource] Updating dataSource '${r}' with:`,o),window.G7Core.dataSource.set(r,o,{merge:l})):ae.warn("updateDataSource: G7Core.dataSource.set is not available")}),this.registerHandler("scrollIntoView",async(t,s)=>{const{selector:r,behavior:o="smooth",block:l="nearest",inline:d="nearest",waitForElement:u=!1,timeout:f=2e3,delay:g=0,retryCount:h=0,retryInterval:b=50,scrollContainer:y}=t.params||{};if(!r){ae.warn("scrollIntoView: selector is required");return}if(typeof window>"u"||typeof document>"u"){ae.warn("scrollIntoView: window/document is not available");return}let v=null;if(u){if(v=await new Promise(x=>{const S=document.querySelector(r);if(S){x(S);return}const _=setTimeout(()=>{A.disconnect(),x(null)},f),A=new MutationObserver(()=>{const C=document.querySelector(r);C&&(clearTimeout(_),A.disconnect(),x(C))});A.observe(document.body,{childList:!0,subtree:!0})}),!v){ae.warn(`scrollIntoView: element not found for selector "${r}" after ${f}ms timeout`);return}}else{g>0&&await new Promise(S=>setTimeout(S,g)),v=document.querySelector(r);let x=0;for(;!v&&x<h;)await new Promise(S=>setTimeout(S,b)),v=document.querySelector(r),x++;if(!v){ae.warn(`scrollIntoView: element not found for selector "${r}" after ${x+1} attempts`);return}}if(y){const x=document.querySelector(y);if(!x){ae.warn(`scrollIntoView: container not found for selector "${y}"`);return}const S=v.getBoundingClientRect(),_=x.getBoundingClientRect(),A=S.top-_.top+x.scrollTop,C=A+S.height;let j;switch(l){case"start":j=A;break;case"center":j=A-x.clientHeight/2+S.height/2;break;case"end":j=C-x.clientHeight;break;default:const E=S.top<_.top,T=S.bottom>_.bottom;if(E)j=A;else if(T)j=C-x.clientHeight;else return;break}x.scrollTo({top:Math.max(0,j),behavior:o});return}v.scrollIntoView({behavior:o,block:l,inline:d})}),this.registerHandler("reloadExtensions",async(t,s)=>{if(typeof window>"u"){ae.warn("reloadExtensions: window is not available");return}const r=window.__templateApp;if(!r){ae.warn("reloadExtensions: TemplateApp not initialized");return}if(typeof r.reloadExtensionState=="function")try{await r.reloadExtensionState()}catch(d){throw ae.error("reloadExtensions: reloadExtensionState failed",d),d}else ae.warn("reloadExtensions: TemplateApp.reloadExtensionState unavailable");const{moduleInfo:o,pluginInfo:l}=t.params||{};if(o)try{await this.executeAction({handler:"reloadModuleHandlers",params:t.params},s)}catch(d){ae.error("reloadExtensions: reloadModuleHandlers failed",d)}if(l)try{await this.executeAction({handler:"reloadPluginHandlers",params:t.params},s)}catch(d){ae.error("reloadExtensions: reloadPluginHandlers failed",d)}ae.log("reloadExtensions: done")}),this.registerHandler("reloadRoutes",async(t,s)=>{if(typeof window>"u"){ae.warn("reloadRoutes: window is not available");return}const r=window.__templateApp;if(!r){ae.warn("reloadRoutes: TemplateApp not initialized");return}if(typeof r.reloadExtensionState=="function")try{await r.reloadExtensionState(),ae.log("reloadRoutes: delegated to reloadExtensionState")}catch(o){throw ae.error("reloadRoutes: Failed to reload routes",o),o}else{const o=r.getRouter?.();o&&(await o.loadRoutes(),ae.log("reloadRoutes: Routes reloaded (legacy fallback)"))}}),this.registerHandler("refresh",async(t,s)=>{if(typeof window>"u"){ae.warn("refresh: window is not available");return}const r=Number(t.params?.delayMs??0);r>0&&await new Promise(o=>setTimeout(o,r)),window.location.reload()}),this.registerHandler("remount",async(t,s)=>{const{componentId:r}=t.params||{};if(!r){ae.warn("remount: componentId parameter is required");return}if(!this.globalStateUpdater){ae.warn("remount: globalStateUpdater is not set");return}const d=(window.G7Core?.state?.get()||{})._global?._remountKeys||{},u=d[r]||0;this.globalStateUpdater({_remountKeys:{...d,[r]:u+1}}),ae.log(`remount: ${r} key incremented to ${u+1}`)}),this.registerHandler("reloadTranslations",async(t,s)=>{if(typeof window>"u"){ae.warn("reloadTranslations: window is not available");return}const r=window.__templateApp;if(!r){ae.warn("reloadTranslations: TemplateApp not initialized");return}if(typeof r.reloadExtensionState=="function")try{await r.reloadExtensionState(),ae.log("reloadTranslations: delegated to reloadExtensionState")}catch(o){throw ae.error("reloadTranslations: Failed to reload translations",o),o}}),this.registerHandler("reloadModuleHandlers",async(t,s)=>{if(typeof window>"u"){ae.warn("reloadModuleHandlers: window is not available");return}const{moduleInfo:r,action:o}=t.params||{};if(!r){ae.warn("reloadModuleHandlers: moduleInfo is required");return}const l=r.data||r;if(!l.identifier){ae.warn("reloadModuleHandlers: moduleInfo with identifier is required");return}if(!o||o!=="add"&&o!=="remove"){ae.warn('reloadModuleHandlers: action must be "add" or "remove"');return}const d=window.G7Config;if(!d){ae.warn("reloadModuleHandlers: G7Config not available");return}const u=l.identifier;try{if(o==="add"){if(l.assets&&(d.moduleAssets=d.moduleAssets||{},d.moduleAssets[u]=l.assets,ae.log(`reloadModuleHandlers: Added assets for ${u}`),l.assets.js)){const f=l.assets.js,g=`module-${u}`;if(document.getElementById(g)){ae.warn(`reloadModuleHandlers: Script ${g} already loaded`);return}const h=document.createElement("script");if(h.id=g,h.src=f,h.async=!0,await new Promise((b,y)=>{h.onload=()=>{ae.log(`reloadModuleHandlers: Script loaded successfully for ${u}`),b()},h.onerror=()=>{ae.error(`reloadModuleHandlers: Failed to load script for ${u}`),y(new Error(`Failed to load module script: ${f}`))},document.head.appendChild(h)}),l.assets.css){const b=l.assets.css,y=`module-css-${u}`;if(!document.getElementById(y)){const v=document.createElement("link");v.id=y,v.rel="stylesheet",v.href=b,document.head.appendChild(v),ae.log(`reloadModuleHandlers: CSS loaded for ${u}`)}}}}else if(o==="remove"){d.moduleAssets&&d.moduleAssets[u]&&(delete d.moduleAssets[u],ae.log(`reloadModuleHandlers: Removed assets for ${u}`));const f=`module-${u}`,g=document.getElementById(f);g&&(g.remove(),ae.log(`reloadModuleHandlers: Removed script for ${u}`));const h=`module-css-${u}`,b=document.getElementById(h);b&&(b.remove(),ae.log(`reloadModuleHandlers: Removed CSS for ${u}`))}}catch(f){throw ae.error(`reloadModuleHandlers: Failed to ${o} module assets`,f),f}}),this.registerHandler("reloadPluginHandlers",async(t,s)=>{if(typeof window>"u"){ae.warn("reloadPluginHandlers: window is not available");return}const{pluginInfo:r,action:o}=t.params||{};if(!r){ae.warn("reloadPluginHandlers: pluginInfo is required");return}const l=r.data||r;if(!l.identifier){ae.warn("reloadPluginHandlers: pluginInfo with identifier is required");return}if(!o||o!=="add"&&o!=="remove"){ae.warn('reloadPluginHandlers: action must be "add" or "remove"');return}const d=window.G7Config;if(!d){ae.warn("reloadPluginHandlers: G7Config not available");return}const u=l.identifier;try{if(o==="add"){if(l.assets&&(d.pluginAssets=d.pluginAssets||{},d.pluginAssets[u]=l.assets,ae.log(`reloadPluginHandlers: Added assets for ${u}`),l.assets.js)){const f=l.assets.js,g=`plugin-${u}`;if(document.getElementById(g)){ae.warn(`reloadPluginHandlers: Script ${g} already loaded`);return}const h=document.createElement("script");if(h.id=g,h.src=f,h.async=!0,await new Promise((b,y)=>{h.onload=()=>{ae.log(`reloadPluginHandlers: Script loaded successfully for ${u}`),b()},h.onerror=()=>{ae.error(`reloadPluginHandlers: Failed to load script for ${u}`),y(new Error(`Failed to load plugin script: ${f}`))},document.head.appendChild(h)}),l.assets.css){const b=l.assets.css,y=`plugin-css-${u}`;if(!document.getElementById(y)){const v=document.createElement("link");v.id=y,v.rel="stylesheet",v.href=b,document.head.appendChild(v),ae.log(`reloadPluginHandlers: CSS loaded for ${u}`)}}}}else if(o==="remove"){d.pluginAssets&&d.pluginAssets[u]&&(delete d.pluginAssets[u],ae.log(`reloadPluginHandlers: Removed assets for ${u}`));const f=`plugin-${u}`,g=document.getElementById(f);g&&(g.remove(),ae.log(`reloadPluginHandlers: Removed script for ${u}`));const h=`plugin-css-${u}`,b=document.getElementById(h);b&&(b.remove(),ae.log(`reloadPluginHandlers: Removed CSS for ${u}`))}}catch(f){throw ae.error(`reloadPluginHandlers: Failed to ${o} plugin assets`,f),f}});let e=!1;this.registerHandler("showErrorPage",async(t,s)=>{if(e){ae.log("showErrorPage: Already active, skipping duplicate call");return}if(e=!0,typeof window>"u"){e=!1,ae.warn("showErrorPage: window is not available");return}const r=window.__templateApp;if(!r){e=!1,ae.warn("showErrorPage: TemplateApp not initialized");return}const o=r.getErrorPageHandler?.();if(!o){e=!1,ae.warn("showErrorPage: ErrorPageHandler not available");return}const l=t.params?.errorCode||500,d=t.params?.target||"content";let u=t.params?.containerId;u||(u=d==="full"?"app":"main_content"),ae.log("showErrorPage:",{errorCode:l,target:d,containerId:u});const f=(g,h=6e4)=>new Promise((b,y)=>{const v=document.getElementById(g);if(v){b(v);return}ae.log(`showErrorPage: Waiting for container #${g}...`);let x;const S=new MutationObserver((_,A)=>{const C=document.getElementById(g);C&&(ae.log(`showErrorPage: Container #${g} found`),A.disconnect(),clearTimeout(x),b(C))});S.observe(document.body,{childList:!0,subtree:!0}),x=setTimeout(()=>{S.disconnect(),y(new Error(`Container #${g} not found within ${h}ms`))},h)});try{await f(u);const g=_r(),h=g.layoutErrorHandling;g.clearLayoutConfig();try{await o.renderError(l,u)||ae.warn(`showErrorPage: Failed to render error page for code ${l}`)}finally{g.setLayoutConfig(h)}}catch(g){throw ae.error("showErrorPage: Error rendering error page:",g),g}finally{e=!1}}),this.registerHandler("emitEvent",async(t,s)=>{const r=t.params?.event,o=t.params?.data;if(!r){ae.warn("emitEvent: event parameter is required");return}if(typeof window>"u"){ae.warn("emitEvent: window is not available");return}const l=window.G7Core;if(!l?.componentEvent?.emit){ae.warn("emitEvent: G7Core.componentEvent is not available");return}try{ae.log(`emitEvent: Emitting "${r}"`,o);const d={...o,_context:{data:s.data,state:s.state}},u=await l.componentEvent.emit(r,d);if(!u||u.length===0?ae.warn(`emitEvent: No listeners found for "${r}"`):ae.log(`emitEvent: Event "${r}" completed with ${u.length} listener(s)`,u),this.globalStateUpdater){const f=(l?.state?.get()||{})._local||{},g={event:r,success:!0,data:u.length===1?u[0]:u,listeners:u.length};this.globalStateUpdater({_local:{...f,_eventResult:g}});const h=s.state&&typeof s.state=="object"&&!Array.isArray(s.state)?s.state:f;window.__g7SequenceLocalSync={...h,_eventResult:g}}}catch(d){if(ae.error(`emitEvent: Event "${r}" failed`,d),this.globalStateUpdater){const u=l?.state?.get()||{};this.globalStateUpdater({_local:{...u._local,_eventResult:{event:r,success:!1,error:d instanceof Error?d.message:String(d)}}})}throw d}}),this.registerHandler("updateProductField",async(t,s)=>{const{productId:r,field:o,value:l}=t.params||{};if(!r||!o){ae.warn("updateProductField: productId and field are required");return}if(typeof window>"u"){ae.warn("updateProductField: window is not available");return}const d=window.G7Core;if(!d?.state?.get||!this.globalStateUpdater){ae.warn("updateProductField: G7Core.state or globalStateUpdater is not available");return}try{const u=d.state.get()||{},g=(u.products?.data?.data||[]).map(b=>b.id===r?{...b,[o]:l,_modified:!0}:b),h=new Set(u._local?.modifiedProductIds||[]);h.add(r),this.globalStateUpdater({products:{...u.products,data:{...u.products?.data,data:g}},_local:{...u._local,modifiedProductIds:Array.from(h)}}),ae.log(`updateProductField: Updated product ${r}, field: ${o}, value:`,l)}catch(u){throw ae.error("updateProductField: Error updating product field",u),u}}),this.registerHandler("updateOptionField",async(t,s)=>{const{productId:r,optionId:o,field:l,value:d}=t.params||{};if(!r||!o||!l){ae.warn("updateOptionField: productId, optionId and field are required");return}if(typeof window>"u"){ae.warn("updateOptionField: window is not available");return}const u=window.G7Core;if(!u?.state?.get||!this.globalStateUpdater){ae.warn("updateOptionField: G7Core.state or globalStateUpdater is not available");return}try{const f=u.state.get()||{},h=(f.products?.data?.data||[]).map(y=>{if(y.id===r&&y.options){const v=y.options.map(x=>x.id===o?{...x,[l]:d,_modified:!0}:x);return{...y,options:v,_modified:!0}}return y}),b=new Set(f._local?.modifiedProductIds||[]);b.add(r),this.globalStateUpdater({products:{...f.products,data:{...f.products?.data,data:h}},_local:{...f._local,modifiedProductIds:Array.from(b)}}),ae.log(`updateOptionField: Updated product ${r} option ${o}, field: ${l}, value:`,d)}catch(f){throw ae.error("updateOptionField: Error updating option field",f),f}}),this.registerHandler("setLocale",async(t,s)=>{const r=t.target;if(!r||typeof r!="string"){ae.warn("setLocale: Invalid locale:",r);return}const o=window.__templateApp;if(o&&typeof o.changeLocale=="function")try{await o.changeLocale(r),ae.log("setLocale: Locale changed to",r)}catch(l){ae.error("setLocale: Failed to change locale:",l),window.location.reload()}else{ae.warn("setLocale: TemplateApp not found, falling back to page reload");try{localStorage.setItem("g7_locale",r)}catch{}window.location.reload()}}),this.registerHandler("suppress",async()=>{ae.log("suppress: Error intentionally suppressed")}),this.registerBuiltInHandlerMetadata()}registerBuiltInHandlerMetadata(){const e=Us();if(!e?.isEnabled())return;const t=[{name:"refetchDataSource",description:"데이터 소스를 다시 fetch합니다"},{name:"appendDataSource",description:"데이터 소스에 새 데이터를 병합합니다 (무한 스크롤용)"},{name:"updateDataSource",description:"API 응답으로 데이터 소스를 직접 업데이트합니다 (refetch 대체)"},{name:"reloadRoutes",description:"라우트를 다시 로드합니다"},{name:"refresh",description:"현재 페이지를 새로고침합니다"},{name:"remount",description:"컴포넌트를 리마운트합니다"},{name:"reloadTranslations",description:"다국어 파일을 다시 로드합니다"},{name:"showErrorPage",description:"에러 페이지를 표시합니다"},{name:"emitEvent",description:"이벤트를 발생시킵니다"},{name:"updateProductField",description:"상품 필드를 인라인 수정합니다"},{name:"updateOptionField",description:"상품 옵션 필드를 인라인 수정합니다"},{name:"setLocale",description:"언어를 변경합니다 (DB 저장 + UI 리렌더링)"}];for(const s of t)e.trackHandlerRegistration(s.name,"built-in",s.description)}createHandler(e,t,s){ae.log("createHandler called for:",e.handler,e.type);const r=window.__g7DevTools,o=Date.now(),l=s?.state?{...s.state}:null,d=`handler_${e.handler}_${o}`;return async u=>{if(ae.log("Handler invoked for:",e.handler,"event:",u.type),r?.isEnabled?.()&&l){const g=window.G7Core?.state?.getLocal?.()??s?.state??{},h=Date.now()-o;for(const b of Object.keys(l)){const y=l[b],v=g[b];y!==v&&h>100&&(r.trackStaleClosureWarning?.({type:"event-handler-stale",location:`createHandler(${e.handler})`,capturedPath:`_local.${b}`,capturedValue:y,capturedAt:o,currentValue:v,actionId:d,stackTrace:new Error().stack}),ae.warn(`[Stale Closure] _local.${b} changed after handler creation:`,`captured="${y}" → current="${v}" (${h}ms ago)`))}}try{u.type!=="change"&&u.preventDefault();let f={};if(u.type==="submit"&&u.target instanceof HTMLFormElement){const b=u.target;new FormData(b).forEach((v,x)=>{f[x]=v})}const g={...this.defaultContext,data:{...t,form:f,_local:s?.state||{},$event:u},event:u,...s&&{state:s.state,setState:s.setState},isolatedContext:s?.isolatedContext};if(e.confirm){let b=this.resolveValue(e.confirm,g.data);if(this.translationEngine&&this.translationContext&&b.startsWith("$t:")&&(b=this.translationEngine.resolveTranslations(b,this.translationContext,g.data)),!confirm(b))return}const h=window.__g7ActionContext;window.__g7ActionContext={...s,data:g.data};try{await this.executeAction(e,g)}finally{window.__g7ActionContext=h}}catch(f){if(ae.error("Action execution failed:",f),e.onError){const g=f instanceof Cn&&f.originalError?f.originalError:f,h={...this.defaultContext,data:{...t,error:g,_local:s?.state||{},$event:u},event:u,...s&&{state:s.state,setState:s.setState}},b=Array.isArray(e.onError)?e.onError:[e.onError];for(const y of b)await this.executeAction(y,h)}}}}generateActionId(e,t){const s=e.handler,r=t||"no-target",o=Date.now(),l=Math.random().toString(36).substring(2,9);return`${s}_${r.replace(/[^a-zA-Z0-9]/g,"_")}_${o}_${l}`}async executeAction(e,t){if(e=this.resolveActionRef(e),typeof e.handler=="string"&&e.handler.includes("{{")){const u=this.evaluateExpression(e.handler,t.data);e={...e,handler:u==null?"":String(u)}}const s=Us(),r=s?.isEnabled()?`action_${Date.now()}_${Math.random().toString(36).substring(2,11)}`:void 0,o=performance.now();let l;if(r&&s&&s.logAction({id:r,type:e.handler,params:this.sanitizeForDevTools(e.params),context:this.sanitizeForDevTools({hasState:!!t.state,hasSetState:!!t.setState,dataKeys:t.data?Object.keys(t.data):[]}),startTime:o,status:"started"}),e.if!==void 0)try{const u=this.resolveValue(e.if,t.data),f=u===!0||u==="true"||u&&u!=="false"&&u!=="0"&&u!==!1;if(ae.log("[executeAction] if condition result:",e.handler,f),!f)return r&&s&&s.logAction({id:r,type:e.handler,startTime:o,endTime:performance.now(),duration:performance.now()-o,status:"success",result:{skipped:!0,reason:"if condition false"}}),{success:!0,data:void 0}}catch(u){return ae.error("[executeAction] if condition error:",e.handler,u),r&&s&&s.logAction({id:r,type:e.handler,startTime:o,endTime:performance.now(),duration:performance.now()-o,status:"error",error:{name:"ConditionEvaluationError",message:u instanceof Error?u.message:String(u),stack:u instanceof Error?u.stack:void 0}}),{success:!0,data:void 0}}let d;try{const u=this.resolveParams(e.params,t.data);r&&(l=this.sanitizeForDevTools(u));const f=e.target?this.resolveValue(e.target,t.data):void 0;if(e.handler==="apiCall"&&t.setState){d=this.generateActionId(e,f);const h=t.state?.loadingActions||{};t.setState({loadingActions:{...h,[d]:!0}})}if(this.previewMode&&Dw.has(e.handler))return ae.warn(`Preview mode: "${e.handler}" suppressed`,f||u),r&&s&&s.logAction({id:r,type:e.handler,startTime:o,endTime:performance.now(),duration:performance.now()-o,status:"skipped",metadata:{reason:"preview_mode_suppressed"}}),{success:!0,data:void 0};let g;switch(e.handler){case"ensureIdentityVerified":g=await this.handleEnsureIdentityVerified(u);break;case"resolveIdentityChallenge":g=this.handleResolveIdentityChallenge(u);break;case"navigate":const h=u.path||f;g=await this.handleNavigate(h,u,t);break;case"navigateBack":g=await this.handleNavigateBack();break;case"navigateForward":g=await this.handleNavigateForward();break;case"openWindow":{const v=u.path||f;g=await this.handleOpenWindow(v,u);break}case"replaceUrl":{const v=u.path||f||window.location.pathname;g=await this.handleReplaceUrl(v,u);break}case"apiCall":if(e.onSuccess&&s?.isEnabled()&&r){const v=window.G7Core,x={};if(v?.state?.get){const S=v.state.get();x._global=S}t.state&&(x._local=t.state),s.registerStateCaptureForHandler?.(r,["_global","_local"],x)}const b=e.auth_mode??(e.auth_required?"required":"none"),y=e.identity_target?this.resolveParams(e.identity_target,t.data):void 0;g=await this.handleApiCall(f,u,t,b,y);break;case"login":g=await this.handleLogin(f,u,t);break;case"logout":g=await this.handleLogout(f,t);break;case"setState":ae.log("[executeAction] setState resolvedParams:",u),g=await this.handleSetState(e.render!==void 0?{...u,__render:e.render}:u,t);break;case"setError":g=await this.handleSetError(f,u,t);break;case"openModal":g=await this.handleOpenModal(f,t);break;case"closeModal":g=await this.handleCloseModal(t);break;case"showAlert":g=await this.handleShowAlert(f,t);break;case"toast":g=await this.handleToast(u,t);break;case"switch":g=await this.handleSwitch(e,t);break;case"conditions":g=await this.handleConditions(e,t);break;case"sequence":g=await this.handleSequence(e,t);break;case"parallel":g=await this.handleParallel(e,t);break;case"startInterval":g=this.handleStartInterval(u,t);break;case"stopInterval":g=this.handleStopInterval(u);break;case"loadScript":g=await this.handleLoadScript(u,e,t);break;case"callExternal":g=await this.handleCallExternal(u,e,t);break;case"callExternalEmbed":g=await this.handleCallExternalEmbed(u,e,t);break;case"saveToLocalStorage":g=await this.handleSaveToLocalStorage(u,t);break;case"loadFromLocalStorage":g=await this.handleLoadFromLocalStorage(u,t);break;default:g=await this.handleCustomAction({...e,target:f,params:u},t);break}if(e.resultTo&&g!==void 0){const{target:h,key:b,merge:y}=e.resultTo,v=this.resolveValue(b,t.data),x=y==="replace"?"replace":y==="shallow"?"shallow":"deep";if(h==="_local"&&t.setState){const S=this.buildNestedUpdate(v,g),_=x!=="deep"?{...S,__mergeMode:x}:S;t.setState(_),ae.log(`[resultTo] Saved to _local.${v} (merge=${x}):`,g)}else if(h==="_local"&&this.globalStateUpdater){const A=(window.G7Core?.state?.get()||{})._local||{},C=this.buildNestedUpdate(v,g);let j;x==="replace"?j=C:x==="shallow"?j={...A,...C}:j=this.deepMergeWithState(C,A),this.globalStateUpdater({_local:j}),ae.log(`[resultTo] Saved to _local.${v} via globalStateUpdater (merge=${x}):`,g)}else if(h==="_global"&&this.globalStateUpdater){const S=this.buildNestedUpdate(v,g);this.globalStateUpdater(S),ae.log(`[resultTo] Saved to _global.${v}:`,g)}else if(h==="_isolated"&&t.isolatedContext){const S=this.buildNestedUpdate(v,g);t.isolatedContext.mergeState(S,x),ae.log(`[resultTo] Saved to _isolated.${v} (merge=${x}):`,g)}else ae.warn(`[resultTo] Cannot save result: target=${h}, setState=${!!t.setState}, globalStateUpdater=${!!this.globalStateUpdater}, isolatedContext=${!!t.isolatedContext}`)}if(e.onSuccess){if(s?.isEnabled()&&r&&e.handler==="apiCall"){const y=window.G7Core,v={};y?.state?.get&&(v._global=y.state.get()),t.state&&(v._local=t.state),s.detectStaleClosure?.(r,`${e.handler} → onSuccess`,v,"callback-state-capture",r)}const h={...t,data:{...t.data,result:g,response:g}},b=Array.isArray(e.onSuccess)?e.onSuccess:[e.onSuccess];b.length>1?await this.handleSequence({handler:"sequence",type:"click",actions:b},h):b.length===1&&await this.executeAction(b[0],h)}return r&&s&&s.logAction({id:r,type:e.handler,params:this.sanitizeForDevTools(e.params),resolvedParams:l,startTime:o,endTime:performance.now(),duration:performance.now()-o,status:"success",result:this.sanitizeForDevTools(g)}),{success:!0,data:g}}catch(u){const f=u instanceof Cn?u:new Cn(`Failed to execute action: ${e.handler}`,e,u instanceof Error?u:void 0),g=f.originalError?.response||{},h=g.data||{},b=f.originalError?.status||g.status||500,y=h.message||f.message,v={status:b,message:y,errors:h.errors||g.errors,data:h,statusText:f.originalError?.statusText,error_code:h.error_code??g.error_code},S=_r().resolve(b,{errorHandling:e.errorHandling,onError:e.onError});if(S.handler){if(s?.isEnabled()&&r&&e.handler==="apiCall"){const A=window.G7Core,C={};A?.state?.get&&(C._global=A.state.get()),t.state&&(C._local=t.state),s.detectStaleClosure?.(r,`${e.handler} → onError`,C,"callback-state-capture",r)}const _={...t,data:{...t.data,error:v}};try{const A={type:"click",handler:S.handler.handler,target:S.handler.target,params:S.handler.params,actions:S.handler.actions};return await this.executeAction(A,_),{success:!1,error:f}}catch(A){return ae.error("Error executing error handler:",A),{success:!1,error:f}}}throw r&&s&&s.logAction({id:r,type:e.handler,params:this.sanitizeForDevTools(e.params),resolvedParams:l,startTime:o,endTime:performance.now(),duration:performance.now()-o,status:"error",error:{name:f.name,message:f.message,stack:f.stack}}),f}finally{if(e.handler==="apiCall"&&t.setState&&d){const u=t.state?.loadingActions||{},{[d]:f,...g}=u;t.setState({loadingActions:g})}}}async handleNavigate(e,t,s){let r=e;if(t.query)if(t.mergeQuery===!0)r=this.buildMergedQueryPath(e,t.query);else{const l=new URLSearchParams;for(const[u,f]of Object.entries(t.query))if(f!=null&&f!=="")if(Array.isArray(f)){const g=u.endsWith("[]")?u:`${u}[]`;for(const h of f)h!=null&&h!==""&&l.append(g,String(h))}else l.set(u,String(f));const d=l.toString();d&&(r=`${e}?${d}`)}if(ae.log("handleNavigate:",{target:e,params:t,finalPath:r,replace:t.replace,windowLocationSearch:window.location.search}),t.replace===!0){const l=window.G7Core;if(l?.updateQueryParams){const d=typeof t.transition_overlay_target=="string"?t.transition_overlay_target:void 0;await l.updateQueryParams(r,d?{transitionOverlayTarget:d}:void 0),ae.log("handleNavigate: Used updateQueryParams for replace mode",d?{transitionOverlayTarget:d}:void 0),this.applyScrollOption(t.scroll,t.scrollBehavior,"top");return}ae.warn("handleNavigate: G7Core.updateQueryParams not available, falling back to React Router")}const o=this.resolveNavigateFallbackAction(r,t);if(o){ae.warn(`handleNavigate: No route matched, falling back to "${o.handler}"`),await this.dispatchAction({type:"click",handler:o.handler,params:o.params},s),this.applyScrollOption(t.scroll,t.scrollBehavior,"top");return}if(!s.navigate)throw new Cn("Navigate function is not provided in context");s.navigate(r,{replace:t.replace===!0}),this.applyScrollOption(t.scroll,t.scrollBehavior,"top")}resolveNavigateFallbackAction(e,t){const s=t.fallback;if(s===!1||t.replace===!0)return null;const o=window.__templateApp?.getRouter?.();if(!o||typeof o.match!="function"||typeof o.getRoutes=="function"&&o.getRoutes().length===0)return null;const l=e.split("?")[0];return o.match(l)?null:this.resolveNavigateFallback(s,e,t)}resolveNavigateFallback(e,t,s){return e==null?{handler:"openWindow",params:{path:t,target:"_self"}}:typeof e=="string"?{handler:e,params:{path:t}}:typeof e=="object"&&typeof e.handler=="string"?{handler:e.handler,params:{path:t,...e.params||{}}}:(ae.warn("resolveNavigateFallback: unrecognized fallback option, using openWindow",e),{handler:"openWindow",params:{path:t,target:"_blank"}})}applyScrollOption(e,t,s){const r=e===void 0?s:e;if(r==="preserve")return;const o=t==="smooth"?"smooth":"instant",l=h=>{if(typeof h!="object"||h===null)return!1;const b=h;return"container"in b||"to"in b||"block"in b||"offset"in b},d=(h,b,y=0)=>{h===window?window.scrollTo({top:b,left:y,behavior:o}):h.scrollTo({top:b,left:y,behavior:o})},u=(h,b,y,v)=>{if(b===window){h.scrollIntoView({behavior:o,block:y}),v&&window.scrollBy({top:-v,left:0,behavior:o});return}const x=b,S=h.getBoundingClientRect(),_=x.getBoundingClientRect(),A=x.scrollTop+(S.top-_.top);let C;y==="center"?C=A-(x.clientHeight-h.clientHeight)/2:y==="end"?C=A-(x.clientHeight-h.clientHeight):C=A,C-=v,x.scrollTo({top:Math.max(0,C),left:0,behavior:o})},f=()=>{window.scrollTo({top:0,left:0,behavior:o});const h=document.getElementById("app")??document.body;if(!h)return;h.querySelectorAll("*").forEach(y=>{if(y.scrollTop===0&&y.scrollLeft===0)return;const v=window.getComputedStyle(y),x=v.overflowY,S=v.overflowX;(x==="auto"||x==="scroll"||S==="auto"||S==="scroll")&&y.scrollTo({top:0,left:0,behavior:o})})},g=()=>{try{if(l(r)){const h=r,b=h.block??"start",y=typeof h.offset=="number"?h.offset:0;let v=window;if(typeof h.container=="string"&&h.container.length>0){const S=document.querySelector(h.container);if(!S){ae.warn(`applyScrollOption: container not found: ${h.container}`);return}v=S}const x=h.to??"top";if(x==="top"){v===window?f():d(v,0);return}if(typeof x=="number"){d(v,x-y);return}if(typeof x=="object"&&x!==null&&("x"in x||"y"in x)){const{x:S=0,y:_=0}=x;d(v,_-y,S);return}if(typeof x=="string"&&(x.startsWith("#")||x.startsWith("."))){const S=document.querySelector(x);S?u(S,v,b,y):ae.warn(`applyScrollOption: target element not found: ${x}`);return}ae.warn('applyScrollOption: invalid "to" value in extended form',x);return}if(r==="top"){f();return}if(typeof r=="number"){window.scrollTo({top:r,left:0,behavior:o});return}if(typeof r=="object"&&r!==null&&("x"in r||"y"in r)){const{x:h=0,y:b=0}=r;window.scrollTo({top:b,left:h,behavior:o});return}if(typeof r=="string"&&(r.startsWith("#")||r.startsWith("."))){const h=document.querySelector(r);h&&h.scrollIntoView({behavior:o,block:"start"});return}}catch(h){ae.warn("applyScrollOption: failed to apply scroll",h)}};typeof window.requestAnimationFrame=="function"?window.requestAnimationFrame(g):g()}async handleOpenWindow(e,t){let s=e;if(t.query){const o=new URLSearchParams;for(const[d,u]of Object.entries(t.query))u!=null&&u!==""&&o.set(d,String(u));const l=o.toString();l&&(s=`${e}?${l}`)}const r=t.target==="_self"?"_self":"_blank";ae.log("handleOpenWindow:",{target:e,params:t,finalPath:s,windowTarget:r}),r==="_self"?window.location.assign(s):window.open(s,"_blank")}async handleNavigateBack(){ae.log("handleNavigateBack"),window.history.back()}async handleNavigateForward(){ae.log("handleNavigateForward"),window.history.forward()}async handleReplaceUrl(e,t){let s=e;if(t.query)if(t.mergeQuery===!0)s=this.buildMergedQueryPath(e,t.query);else{const r=new URLSearchParams;for(const[l,d]of Object.entries(t.query))if(d!=null&&d!=="")if(Array.isArray(d)){const u=l.endsWith("[]")?l:`${l}[]`;for(const f of d)f!=null&&f!==""&&r.append(u,String(f))}else r.set(l,String(d));const o=r.toString();o&&(s=`${e}?${o}`)}ae.log("handleReplaceUrl:",{target:e,params:t,finalPath:s}),window.history.replaceState(null,"",s),this.applyScrollOption(t.scroll,t.scrollBehavior,"preserve")}buildMergedQueryPath(e,t){const s=new URLSearchParams(window.location.search);for(const[l,d]of Object.entries(t))if(d==null||d==="")s.delete(l);else if(Array.isArray(d)){const u=l.endsWith("[]")?l:`${l}[]`;s.delete(l),s.delete(u);for(const f of d)f!=null&&f!==""&&s.append(u,String(f))}else s.set(l,String(d));const r=s.toString(),o=e.split("?")[0];return r?`${o}?${r}`:o}async ensureCsrfToken(){try{await fetch("/sanctum/csrf-cookie",{credentials:"include"})}catch(e){throw new Cn("Failed to fetch CSRF token",void 0,e instanceof Error?e:void 0)}}getCsrfTokenFromCookie(){const s=`; ${document.cookie}`.split("; XSRF-TOKEN=");if(s.length===2){const r=s.pop()?.split(";").shift();return r?decodeURIComponent(r):null}return null}buildQueryString(e){const t=new URLSearchParams;for(const[s,r]of Object.entries(e))if(!(r==null||r===""))if(Array.isArray(r))for(const o of r)o!=null&&o!==""&&t.append(`${s}[]`,String(o));else typeof r=="object"?t.append(s,JSON.stringify(r)):t.append(s,String(r));return t.toString()}async handleEnsureIdentityVerified(e){const t=typeof e.purpose=="string"?e.purpose:"sensitive_action",s=e.target&&typeof e.target=="object"?e.target:void 0;return await rn.handle({success:!1,error_code:"identity_verification_required",message:"",verification:{policy_key:e.policy_key??"",purpose:t,provider_id:e.provider_id??null,render_hint:e.render_hint??null,return_request:null}},void 0,s)!==null}handleResolveIdentityChallenge(e){const t=typeof e.result=="string"?e.result:"cancelled";let s;switch(t){case"verified":{const r=typeof e.token=="string"?e.token:"";if(!r){ae.warn("resolveIdentityChallenge: result=verified 인데 token 이 비어있습니다. failed 로 강등합니다."),s={status:"failed",failureCode:"MISSING_TOKEN"};break}s={status:"verified",token:r,providerData:e.providerData&&typeof e.providerData=="object"?e.providerData:void 0};break}case"pending":{const r=typeof e.pollUrl=="string"?e.pollUrl:"",o=typeof e.expiresAt=="string"?e.expiresAt:"";if(!r||!o){ae.warn("resolveIdentityChallenge: result=pending 인데 pollUrl/expiresAt 누락 — failed 로 강등합니다."),s={status:"failed",failureCode:"MALFORMED_PENDING"};break}s={status:"pending",pollUrl:r,pollIntervalMs:typeof e.pollIntervalMs=="number"?e.pollIntervalMs:void 0,expiresAt:o};break}case"failed":s={status:"failed",failureCode:typeof e.failureCode=="string"?e.failureCode:"UNKNOWN",reason:typeof e.reason=="string"?e.reason:void 0};break;default:s={status:"cancelled"};break}return rn.resolveDeferred(s),!0}async handleApiCall(e,t,s,r="none",o){const{method:l="GET",body:d,headers:u,contentType:f}=t;l!=="GET"&&l!=="HEAD"&&await this.ensureCsrfToken();const g=this.getCsrfTokenFromCookie();let h={};if(r==="required"||r==="optional"){const I=qr().getToken();I&&(h={Authorization:`Bearer ${I}`})}let b=e;const y=t.query||(l==="GET"?d:null);if(y&&typeof y=="object"){const D=this.buildQueryString(y);if(D){const I=e.includes("?")?"&":"?";b=`${e}${I}${D}`}}const v=window.G7Core?.state?.getGlobal?.()||s.state?._global||{},x=window.G7Core?.state?.getLocal?.()||s.state?._local||{},S={_global:v,_local:x},_=this.getMatchingGlobalHeaders(e,S),A={};if(typeof window<"u"){const D=localStorage.getItem("g7_locale");D&&(A["Accept-Language"]=D)}const C=f==="multipart/form-data",j={method:l,headers:{...C?{}:{"Content-Type":"application/json"},Accept:"application/json",...A,...g&&{"X-XSRF-TOKEN":g},...h,..._,...u},credentials:"include"};if(d&&l!=="GET")if(C){const D=new FormData;for(const[I,W]of Object.entries(d))W instanceof File||W instanceof Blob?D.append(I,W):W!=null&&D.append(I,typeof W=="object"?JSON.stringify(W):String(W));j.body=D}else j.body=JSON.stringify(d);const E=Us();let T=null;E?.isEnabled()&&(T=E.trackRequest(b,l));try{let D=await fetch(b,j),I;try{I=await D.json()}catch{I=null}if(rn.isIdentityRequired(D.status,I)){const W=await rn.handle(I,{body:j.body,headers:j.headers,credentials:j.credentials},o);if(W){D=W;try{I=await D.json()}catch{I=null}}}if(T&&E?.isEnabled()&&(E.completeRequest(T,D.status,I),T=null),!D.ok){const W=I||{},z=new Error(W.message||`API call failed: ${D.statusText}`);throw z.response=W,z.status=D.status,z.statusText=D.statusText,new Cn(W.message||`API call failed: ${D.statusText}`,void 0,z)}return I}catch(D){throw T&&E?.isEnabled()&&E.failRequest(T,D instanceof Error?D.message:String(D)),D}}async handleLogin(e,t,s){const{body:r}=t;if(!r||!r.email||!r.password)throw new Cn("Login requires email and password in body params");const o=e==="user"?"user":"admin",l=o==="admin"?"/api/auth/admin/login":"/api/auth/login",d=window.G7Core?.state?.getGlobal?.()||s.state?._global||{},u=window.G7Core?.state?.getLocal?.()||s.state?._local||{},f={_global:d,_local:u},g=this.getMatchingGlobalHeaders(l,f),h=rr.getInstance();try{const b=Object.keys(g).length>0?{headers:g}:void 0;return{user:await h.login(o,{email:r.email,password:r.password},b)}}catch(b){const y=b.message||"Login failed",v=new Error(y);throw v.response=b.response?.data||{},v.status=b.status||b.response?.status||500,new Cn(y,void 0,v)}}async handleLogout(e,t){await rr.getInstance().logout()}async handleSetState(e,t){ae.log("[handleSetState] START, params:",e);const{target:s="component",scope:r,merge:o,__render:l,...d}=e,u=Us(),f=window.G7Core;if(typeof s=="string"&&(s.startsWith("$parent.")||s.startsWith("$root.")))return this.handleParentScopeSetState(s,d,o,t);const g=t.state&&Object.keys(t.state).length>0?t.state:f?.state?.get()||{},h=s==="global"?"_global":s.startsWith("_local.")?s:"_local",b=h==="_global"?g._global:h.startsWith("_local.")?this.getNestedProperty(g._local||{},h.slice(7)):g._local,y=u?.isEnabled()?u.startStateChange(h,b,d,{actionId:t.actionId,handlerType:"setState",source:`target=${s}`}):void 0,v=o==="replace"?"replace":o==="shallow"?"shallow":"deep",x=v!=="deep"?{...d,__mergeMode:v,...y?{__setStateId:y}:{}}:{...d,...y?{__setStateId:y}:{}};if(s==="global"){if(!this.globalStateUpdater){ae.warn("Global state updater is not set"),y&&u&&u.completeStateChange(y);return}const S=f?.state?.get()||{},{__setStateId:_,__mergeMode:A,...C}=x,j=v==="deep"?this.deepMergeWithState(C,S):C,E={...j,...y?{__setStateId:y}:{},...v!=="deep"?{__mergeMode:v}:{}};return ae.log("setState global:",E),this.globalStateUpdater(E,{render:l}),y&&u&&setTimeout(()=>u.completeStateChange(y),0),{__target:"global",...v!=="deep"?{__mergeMode:v}:{},...j}}else if(s==="isolated"){const S=t.isolatedContext;if(S){const{__mergeMode:_,__setStateId:A,...C}=x;return S.mergeState(C,v),ae.log("[handleSetState] isolated state updated:",C,"mergeMode:",v),y&&u&&setTimeout(()=>u.completeStateChange(y),0),{__target:"isolated",...C}}else if(ae.warn('[handleSetState] isolated target used but no IsolatedStateContext found. Make sure the component has "isolatedState" attribute. Falling back to local state.'),t.setState){const A=window.__g7PendingLocalState||t.state||{},C=v==="deep"?this.deepMergeWithState(x,A):x;return t.setState(C),y&&u&&setTimeout(()=>u.completeStateChange(y),0),C}else throw y&&u&&u.completeStateChange(y),new Cn("isolated target used but no IsolatedStateContext found and no setState function in context")}else if(s==="local"||s==="component"||s==="_local"){if(r==="parent"||r==="root"){const _=window.__g7LayoutContextStack||[];if(_.length>0){const A=r==="parent"?_[_.length-1]:_[0];if(A?.setState){const{__mergeMode:C,__setStateId:j,...E}=x,T=v==="deep"?this.deepMergeWithState(E,A.state||{}):E;return ae.log(`[handleSetState] scope=${r}: 타겟 컨텍스트에 상태 업데이트`,T),A.setState(T),y&&u&&setTimeout(()=>u.completeStateChange(y),0),T}}ae.warn(`[handleSetState] scope=${r}: 레이아웃 컨텍스트 스택이 비어있습니다. current로 폴백합니다.`)}const S=t.setState&&!t._isDispatchFallbackContext;if(ae.log("[handleSetState] isRealComponentContext:",S,"context.setState:",!!t.setState,"_isDispatchFallbackContext:",t._isDispatchFallbackContext),S){ae.log("[handleSetState] Using COMPONENT setState path"),ae.log("[handleSetState] resolvedPayload:",x),ae.log("[handleSetState] context.state:",t.state),ae.log("[handleSetState] mergeMode:",v);const A=window.__g7PendingLocalState||t.state||{},C=v==="deep"?this.deepMergeWithState(x,{}):x;ae.log("[handleSetState] convertedPayload (변경 필드만, dot notation 변환):",C),t.setState(C);const j=v==="deep"?this.deepMergeWithState(x,A):v==="shallow"?{...t.state||{},...x}:x,{__mergeMode:E,__setStateId:T,...D}=j;window.__g7PendingLocalState=D,ae.log("[handleSetState] __g7PendingLocalState updated:",D),this.globalStateUpdater&&(this.globalStateUpdater({_local:D},{render:!1}),ae.log("[handleSetState] _global._local synced (render:false):",D));const{__mergeMode:I,__setStateId:W,...z}=x;if(v==="replace")window.__g7ForcedLocalFields=z;else{const H=window.__g7ForcedLocalFields||{};window.__g7ForcedLocalFields=this.deepMergeWithState(z,H)}return ae.log("[handleSetState] __g7ForcedLocalFields updated:",z),y&&u&&setTimeout(()=>u.completeStateChange(y),0),{__target:"local",...j}}else if(this.globalStateUpdater){ae.log("[handleSetState] Using GLOBAL STATE UPDATER path for _local");const A=window.__g7PendingLocalState||g._local||{};ae.log("[handleSetState] currentLocal (with pending):",A);const C=v==="deep"?this.deepMergeWithState(x,A):x;return ae.log("[handleSetState] finalLocal (merged):",C),this.globalStateUpdater({_local:C},{render:l}),window.__g7PendingLocalState=C,ae.log("[handleSetState] __g7PendingLocalState updated for globalStateUpdater path"),y&&u&&setTimeout(()=>u.completeStateChange(y),0),{__target:"local",...C}}else throw y&&u&&u.completeStateChange(y),new Cn("setState function is not provided in context and globalStateUpdater is not set")}else if(s.startsWith("_local.")){const S=s.slice(7),{__mergeMode:_,__setStateId:A,...C}=x,j=C.value!==void 0?C.value:Object.values(C)[0];if(t.setState){const T=window.__g7PendingLocalState||t.state||{},D=this.createNestedUpdate(S,j,T),I={...T,...D};return t.setState(D),y&&u&&setTimeout(()=>u.completeStateChange(y),0),I}else throw y&&u&&u.completeStateChange(y),new Cn("setState function is not provided in context")}else{if(!t.setState)throw y&&u&&u.completeStateChange(y),new Cn("setState function is not provided in context");const _=window.__g7PendingLocalState||t.state||{},A=v==="deep"?this.deepMergeWithState(x,_):x;return t.setState(A),y&&u&&setTimeout(()=>u.completeStateChange(y),0),A}}async handleParentScopeSetState(e,t,s,r){const o=Us(),l=window.G7Core,d=s==="replace"?"replace":s==="shallow"?"shallow":"deep",u=e.startsWith("$parent."),f=u?"$parent.":"$root.",g=e.slice(f.length);let h,b;if(g==="_local"||g==="_global")h=g,b=void 0;else if(g.startsWith("_local."))h="_local",b=g.slice(7);else if(g.startsWith("_global."))h="_global",b=g.slice(8);else{ae.warn(`[handleParentScopeSetState] 지원하지 않는 타겟 형식: ${e}. _local 또는 _global으로 시작해야 합니다.`);return}const y=window.__g7LayoutContextStack||[];if(y.length===0){ae.warn(`[handleParentScopeSetState] 레이아웃 컨텍스트 스택이 비어있습니다. target=${e}`);return}const v=u?y[y.length-1]:y[0];if(!v){ae.warn(`[handleParentScopeSetState] 타겟 컨텍스트를 찾을 수 없습니다. target=${e}`);return}const x=h==="_global"?v.state?._global:v.state?._local,S=o?.isEnabled()?o.startStateChange(e,x,t,{actionId:r.actionId,handlerType:"setState",source:`target=${e}`}):void 0,{__mergeMode:_,__setStateId:A,...C}=t;if(h==="_global"){if(!this.globalStateUpdater){ae.warn("[handleParentScopeSetState] globalStateUpdater가 설정되지 않았습니다."),S&&o&&o.completeStateChange(S);return}const j=l?.state?.get()||{};if(b){const E=C.value!==void 0?C.value:Object.values(C)[0],T=this.createNestedUpdate(b,E,j),D={...j,...T};ae.log(`[handleParentScopeSetState] ${e}: 전역 상태 중첩 경로 업데이트`,D),this.globalStateUpdater(D)}else{const E=d==="deep"?this.deepMergeWithState(C,j):C;ae.log(`[handleParentScopeSetState] ${e}: 전역 상태 업데이트 (mergeMode=${d})`,E),this.globalStateUpdater(d!=="deep"?{...E,__mergeMode:d}:E)}return S&&o&&setTimeout(()=>o.completeStateChange(S),0),{__target:e,...C}}else{if(!v.setState){ae.warn(`[handleParentScopeSetState] 타겟 컨텍스트에 setState가 없습니다. target=${e}`),S&&o&&o.completeStateChange(S);return}const j=v.state||{};if(b){const E=C.value!==void 0?C.value:Object.values(C)[0],T=this.createNestedUpdate(b,E,j),D={...j,...T};return ae.log(`[handleParentScopeSetState] ${e}: 로컬 상태 중첩 경로 업데이트`,T),v.setState(T),v.state=D,v.dataContext&&(v.dataContext._local=D),ih(),S&&o&&setTimeout(()=>o.completeStateChange(S),0),D}else{const E=d!=="deep"?{...C,__mergeMode:d}:C,T=d==="replace"?C:d==="shallow"?{...j,...C}:this.deepMergeWithState(C,j);return ae.log(`[handleParentScopeSetState] ${e}: 로컬 상태 업데이트 (mergeMode=${d})`,T),v.setState(E),v.state=T,v.dataContext&&(v.dataContext._local=T),ih(),S&&o&&setTimeout(()=>o.completeStateChange(S),0),T}}}deepMergeWithState(e,t){const s=["errors"];let r=e;if("..."in e){const l=e["..."];if(l&&typeof l=="object"&&!Array.isArray(l)){const{"...":d,...u}=e;r={...l,...u}}else{const{"...":d,...u}=e;r=u}}const o={...t};for(const[l,d]of Object.entries(r)){if(s.includes(l)){o[l]=d;continue}if(l.includes(".")&&l!=="..."){const u=this.createNestedUpdate(l,d,o);this.deepMergeInto(o,u,o);continue}if(d!==null&&typeof d=="object"&&!Array.isArray(d)&&Object.getPrototypeOf(d)!==Object.prototype&&Object.getPrototypeOf(d)!==null){o[l]=d;continue}d!==null&&typeof d=="object"&&!Array.isArray(d)&&t[l]!==null&&typeof t[l]=="object"&&!Array.isArray(t[l])?o[l]=this.deepMergeWithState(d,t[l]):o[l]=d}return o}deepMergeInto(e,t,s){for(const[r,o]of Object.entries(t)){if(o===null){e[r]=o;continue}if(e[r]===null){e[r]=o;continue}typeof o=="object"&&!Array.isArray(o)&&e[r]!==void 0&&e[r]!==null&&typeof e[r]=="object"&&!Array.isArray(e[r])?(e[r]===s[r]&&(e[r]={...e[r]}),this.deepMergeInto(e[r],o,s[r]||{})):typeof o=="object"&&!Array.isArray(o)&&e[r]===void 0&&s[r]!==null&&typeof s[r]=="object"&&!Array.isArray(s[r])?e[r]={...s[r],...o}:e[r]=o}}createNestedUpdate(e,t,s){const r=e.split(".");if(r.length===1)return{[r[0]]:t};const o={};let l=o,d=s;for(let u=0;u<r.length-1;u++){const f=r[u],g=d?.[f],h=g!=null&&typeof g=="object"&&!Array.isArray(g);h?l[f]={...g}:l[f]={},l=l[f],d=h?g:{}}return l[r[r.length-1]]=t,o}buildNestedUpdate(e,t){const s=e.split(".");if(s.length===1)return{[s[0]]:t};const r={};let o=r;for(let l=0;l<s.length-1;l++)o[s[l]]={},o=o[s[l]];return o[s[s.length-1]]=t,r}async handleSetError(e,t,s){let r=e;r=this.resolveValue(r,s.data),this.translationEngine&&this.translationContext&&r.startsWith("$t:")&&(r=this.translationEngine.resolveTranslations(r,this.translationContext,s.data));const o=t?.stateTarget||"local";o==="isolated"&&s.isolatedContext?(s.isolatedContext.mergeState({apiError:r}),ae.log("[handleSetError] Error set to isolated state:",r)):o==="global"&&this.globalStateUpdater?(this.globalStateUpdater({apiError:r}),ae.log("[handleSetError] Error set to global state:",r)):s.setState?(s.setState({apiError:r}),ae.log("[handleSetError] Error set to local state:",r)):ae.warn("[handleSetError] Cannot set error: no state updater available")}async handleOpenModal(e,t){if(!this.globalStateUpdater){ae.warn("Global state updater is not set for openModal");return}const s=t.data?._global?.modalStack||[];if(s.includes(e)){ae.warn(`Modal "${e}" is already open`);return}const r=window.G7Core,o=t.setState&&t.state!==void 0,l=o?void 0:r?.state?.getLocal?.()||{},d=!o&&l!==void 0&&this.globalStateUpdater;if(o||d){const g=window.__g7LayoutContextStack||[],h=o?t.state:l,b=o?t.setState:y=>{this.globalStateUpdater({_local:y})};g.push({state:h,setState:b,dataContext:{_local:h||t.data?._local,_global:o?t.data?._global:t.data?._global||r?.state?.get?.(),_computed:t.data?._computed}}),window.__g7LayoutContextStack=g,ae.log(`[handleOpenModal] 레이아웃 컨텍스트 스택에 push, 스택 크기: ${g.length}, state:`,h,o?"(direct)":"(fallback via G7Core)")}else ae.warn(`[handleOpenModal] 컨텍스트 스택에 push 실패 - setState: ${!!t.setState}, state: ${t.state!==void 0}, G7Core: ${!!r?.state?.getLocal}`);const u=[...s,e];this.globalStateUpdater({modalStack:u,activeModal:e});const f=Us();if(f?.isEnabled()){const g=s.length>0?s[s.length-1]:void 0;f.trackModalOpen?.({modalId:e,modalName:e,scopeType:"isolated",parentModalId:g,initialState:t.state?{...t.state}:{}})}}async handleCloseModal(e){if(!this.globalStateUpdater){ae.warn("Global state updater is not set for closeModal");return}const t=e?.data?._global?.modalStack||[],s=t.length>0?t[t.length-1]:null,r=t.slice(0,-1),o=r.length>0?r[r.length-1]:null,l=window.__g7LayoutContextStack||[];if(l.length>0){const d=l[l.length-1];d&&(d.dataContext=void 0),l.pop(),window.__g7LayoutContextStack=l,ae.log(`[handleCloseModal] 레이아웃 컨텍스트 스택에서 pop, 스택 크기: ${l.length}`)}if(s){const d=Us();d?.isEnabled()&&d.trackModalClose?.(s,e?.state)}this.globalStateUpdater({modalStack:r,activeModal:o})}async handleShowAlert(e,t){let s=e;this.translationEngine&&this.translationContext&&e.startsWith("$t:")&&(s=this.translationEngine.resolveTranslations(e,this.translationContext,t.data)),alert(s)}async handleToast(e,t){const{type:s="info",message:r,icon:o,duration:l}=e;if(s==="error"){const u=t.data?.error;if((u?.error_code==="identity_verification_required"||u?.data?.error_code==="identity_verification_required")&&rn.consumeDomainNoticeShown()){ae.log("[Toast] IDV 도메인 안내 표출됨 — 중복 가드 토스트 1건 skip");return}}let d=r;if(this.translationEngine&&this.translationContext&&r?.startsWith("$t:")&&(d=this.translationEngine.resolveTranslations(r,this.translationContext,t.data)),this.globalStateUpdater){const f={id:`toast_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,type:s,message:d,...o&&{icon:o},...l&&{duration:l}},y=[...window.G7Core?.state?.get()?.toasts||[],f];this.globalStateUpdater({toasts:y})}else ae.log(`[Toast ${s}] ${d}`)}async handleSwitch(e,t){const{cases:s}=e;if(!s){ae.warn("switch handler requires cases property");return}const r=this.resolveParams(e.params,t.data);let o;if(r?.value!==void 0?(o=r.value,ae.log("switch handler: using params.value as case key:",o)):(o=t.data?.$args?.[0],ae.log("switch handler: using $args[0] as case key:",o)),o==null){if(s.default)return ae.log("switch handler: case key is undefined, using default case"),await this.executeAction(s.default,t);ae.warn("switch handler: case key is not defined and no default case");return}const l=String(o);let d=s[l];if(!d&&s.default&&(ae.log(`switch handler: no case found for key "${l}", using default case`),d=s.default),!d){ae.warn(`switch handler: no case found for key "${l}" and no default case`);return}return await this.executeAction(d,t)}async handleConditions(e,t){const{conditions:s}=e;if(!s||!Array.isArray(s)){ae.warn("conditions handler requires conditions array");return}const r=t.data||{},o=Wv(s,r,this.bindingEngine);if(!o.matched){ae.log("conditions handler: no matching branch found");return}const l=s[o.branchIndex];if(ae.log(`conditions handler: matched branch ${o.branchIndex}`),!l.then){ae.warn('conditions handler: matched branch has no "then" action');return}return Array.isArray(l.then)?await this.handleSequence({...e,actions:l.then},t):await this.executeAction(l.then,t)}handleStartInterval(e,t){const s=typeof e.id=="string"?e.id:"",r=Number(e.intervalMs??1e3),o=Array.isArray(e.actions)?e.actions:[];if(s===""||!o.length||r<=0)return ae.warn("startInterval requires non-empty id, positive intervalMs, and actions array"),{success:!1};const l=this.intervals.get(s);l&&(clearInterval(l),this.intervals.delete(s));const d=setInterval(()=>{for(const u of o)this.executeAction(u,t).catch(f=>{ae.error(`[startInterval:${s}] tick action failed`,f)})},r);return this.intervals.set(s,d),{success:!0,id:s}}handleStopInterval(e){const t=typeof e.id=="string"?e.id:"";if(t==="")return ae.warn("stopInterval requires id parameter"),{success:!1};const s=this.intervals.get(t);return s&&(clearInterval(s),this.intervals.delete(t)),{success:!0,id:t}}stopAllIntervals(){for(const e of this.intervals.values())clearInterval(e);this.intervals.clear()}async handleSequence(e,t){const s=e.actions||e.params?.actions;if(!s||!Array.isArray(s)||s.length===0)return ae.warn("sequence handler requires non-empty actions array"),[];const r=Us(),o=r?.isEnabled()&&r.startSequenceExecution?.({eventType:e.type})||"";window.__g7SequenceLocalSync=void 0;const l=[];let d,u=t.state?{...t.state}:{},f=t.isolatedContext?.state?{...t.isolatedContext.state}:{},g=t.data?._computed||{};const h=window.G7Core,b=()=>({_global:h?.state?.get()||{},_local:{...u},_isolated:Object.keys(f).length>0?{...f}:void 0});for(let y=0;y<s.length;y++){const v=s[y],x=Date.now();o&&r?.isEnabled()&&r.captureSequenceActionBefore?.(o,y,v.handler||"unknown",v.params||{},b());const S={...t,state:u,data:{...t.data,_local:u,_computed:g,$computed:g,$prev:d,$results:[...l],_isolated:f},isolatedContext:t.isolatedContext?{...t.isolatedContext,state:f}:null};try{const _=await this.executeAction(v,S);if(d=_.data,l.push(_.data),v.handler==="setState"&&_.data!==void 0){if(_.data.__target==="global"){const{__target:C,__mergeMode:j,...E}=_.data;j==="replace"?u={...u,_global:E}:u={...u,_global:{...u._global||{},...E}},ae.log("[handleSequence] global state synchronized (mergeMode=%s):",j||"deep",u._global)}else if(_.data.__target==="isolated"){const{__target:C,__mergeMode:j,...E}=_.data;j==="replace"?f=E:f={...f,...E},ae.log("[handleSequence] isolated state synchronized (mergeMode=%s):",j||"deep",f)}else if(_.data.__target==="local"){const{__target:C,__mergeMode:j,__setStateId:E,...T}=_.data;j==="replace"?u=T:u={...u,...T},ae.log("[handleSequence] local state synchronized (mergeMode=%s):",j||"deep",u)}else u=_.data,ae.log("[handleSequence] state synchronized (legacy):",u);const A=t.data?._computedDefinitions;if(A&&Object.keys(A).length>0){const C={},j={...t.data,_local:u,_computed:C,$computed:C,_isolated:f};for(const[E,T]of Object.entries(A))if(typeof T=="string"){const D=T.trim();if(D.startsWith("{{")&&D.endsWith("}}"))try{const I=D.slice(2,-2).trim();C[E]=this.bindingEngine.evaluateExpression(I,j,{skipCache:!0})}catch{C[E]=g[E]}}g=C,ae.log("[handleSequence] _computed recalculated after setState:",g)}}if(v.handler!=="setState"){const A=window.__g7SequenceLocalSync;if(A&&A!==u){u=A,window.__g7SequenceLocalSync=void 0,ae.log("[handleSequence] currentState synchronized from __g7SequenceLocalSync after custom handler:",v.handler);const C=t.data?._computedDefinitions;if(C&&Object.keys(C).length>0){const j={},E={...t.data,_local:u,_computed:j,$computed:j,_isolated:f};for(const[T,D]of Object.entries(C))if(typeof D=="string"){const I=D.trim();if(I.startsWith("{{")&&I.endsWith("}}"))try{const W=I.slice(2,-2).trim();j[T]=this.bindingEngine.evaluateExpression(W,E,{skipCache:!0})}catch{j[T]=g[T]}}g=j,ae.log("[handleSequence] _computed recalculated after custom handler:",g)}}}o&&r?.isEnabled()&&r.captureSequenceActionAfter?.(o,y,b(),Date.now()-x,_.data)}catch(_){throw o&&r?.isEnabled()&&(r.captureSequenceActionAfter?.(o,y,b(),Date.now()-x,void 0,_),r.endSequenceExecution?.(o,_)),ae.error(`sequence handler: action[${y}] failed:`,_),_}}return window.__g7SequenceLocalSync=void 0,o&&r?.isEnabled()&&r.endSequenceExecution?.(o),l}async handleParallel(e,t){const s=e.actions||e.params?.actions;if(!s||!Array.isArray(s)||s.length===0)return ae.warn("parallel handler requires non-empty actions array"),[];ae.log(`parallel handler: executing ${s.length} actions in parallel`);const r=t.isolatedContext?{...t.isolatedContext,state:{...t.isolatedContext.state}}:null,o=s.map((u,f)=>{const g={...t,isolatedContext:r};return this.executeAction(u,g).catch(h=>{throw ae.error(`parallel handler: action[${f}] failed:`,h),h})}),l=await Promise.allSettled(o),d=l.filter(u=>u.status==="rejected").length;return d>0&&ae.warn(`parallel handler: ${d}/${s.length} actions failed`),l}async handleLoadScript(e,t,s){const{src:r,id:o,async:l=!0,defer:d=!1}=e;if(!r)throw new Cn('loadScript handler requires "src" parameter',t);const u=o||`script_${r.replace(/[^a-zA-Z0-9]/g,"_")}`;return yl.loadedScripts.has(u)?(ae.log(`loadScript: script already loaded, skipping: ${u}`),t.onLoad&&await this.executeAction(t.onLoad,s),!0):document.getElementById(u)?(ae.log(`loadScript: script element already exists: ${u}`),yl.loadedScripts.add(u),t.onLoad&&await this.executeAction(t.onLoad,s),!0):(ae.log(`loadScript: loading script: ${r}`),new Promise((g,h)=>{const b=document.createElement("script");b.id=u,b.src=r,b.async=l,b.defer=d,b.onload=async()=>{if(ae.log(`loadScript: script loaded successfully: ${u}`),yl.loadedScripts.add(u),t.onLoad)try{await this.executeAction(t.onLoad,s)}catch(y){ae.error("loadScript: onLoad action failed:",y)}g(!0)},b.onerror=y=>{ae.error(`loadScript: failed to load script: ${r}`,y),h(new Cn(`Failed to load script: ${r}`,t))},document.head.appendChild(b)}))}async handleCallExternal(e,t,s){const r=e.constructor,o=e.args||{},l=e.method,d=e.methodArgs||[],u=e.callbackEvent,f=e.embedTarget,g=e.callbackSetState,h=e.callbackAction;if(!r)throw new Cn('callExternal handler requires "constructor" parameter',t);const b=this.getNestedProperty(window,r);if(!b||typeof b!="function")throw new Cn(`Constructor not found or not a function: ${r}. Make sure the script is loaded first using loadScript handler.`,t);ae.log(`callExternal: calling constructor ${r}`);const y={...o};for(const[x,S]of Object.entries(o))S===!0&&(y[x]=_=>{if(ae.log(`callExternal: callback triggered for ${x}`,_),u&&typeof window<"u"&&window.G7Core?.componentEvent&&window.G7Core.componentEvent.emit(u,_),g&&s.setState){const A=E=>{const T={};for(const[D,I]of Object.entries(E))typeof I=="string"?T[D]=this.getNestedProperty(_,I):typeof I=="object"&&I!==null&&(T[D]=A(I));return T},C=A(g);ae.log("callExternal: callbackSetState mapping result",C);const j=this.deepMergeWithState(C,s.state||{});ae.log("callExternal: merged with existing state",j),s.setState(j)}else u&&s.setState&&s.setState({[`${u.replace(/:/g,"_")}_result`]:_});if(h){const A={...s,data:{...s.data,$event:_}},C=Array.isArray(h)?h:[h];for(const j of C)try{this.executeAction(j,A)}catch(E){ae.error("callExternal: callbackAction failed:",E)}}});const v=new b(y);if(l&&typeof v[l]=="function"){if(ae.log(`callExternal: calling method ${l}`),l==="embed"&&f){const x=document.querySelector(f);if(x)return v[l](x,...d);throw new Cn(`Embed target element not found: ${f}`,t)}return v[l](...d)}return v}async handleCallExternalEmbed(e,t,s){const r=e.constructor,o=e.args||{},l=e.callbackSetState,d=e.callbackEvent,u=e.layerClassName,f=e.callbackAction;if(!r)throw new Cn('callExternalEmbed handler requires "constructor" parameter',t);const g=this.getNestedProperty(window,r);if(!g||typeof g!="function")throw new Cn(`Constructor not found or not a function: ${r}. Make sure the script is loaded first.`,t);ae.log(`callExternalEmbed: creating layer for ${r}`);const{layer:h,closeLayer:b}=this.createEmbedLayer(u),y={...o};for(const[x,S]of Object.entries(o))S===!0&&(y[x]=_=>{if(ae.log(`callExternalEmbed: callback triggered for ${x}`,_),b(),d&&typeof window<"u"&&window.G7Core?.componentEvent&&window.G7Core.componentEvent.emit(d,_),l&&s.setState){const A=E=>{const T={};for(const[D,I]of Object.entries(E))typeof I=="string"?T[D]=this.getNestedProperty(_,I):typeof I=="object"&&I!==null&&(T[D]=A(I));return T},C=A(l);ae.log("callExternalEmbed: callbackSetState mapping result",C);const j=this.deepMergeWithState(C,s.state||{});ae.log("callExternalEmbed: merged with existing state",j),s.setState(j)}if(f){const A={...s,data:{...s.data,$event:_}},C=Array.isArray(f)?f:[f];for(const j of C)try{this.executeAction(j,A)}catch(E){ae.error("callExternalEmbed: callbackAction failed:",E)}}});const v=new g(y);if(typeof v.embed=="function")v.embed(h),ae.log("callExternalEmbed: embedded in layer");else throw b(),new Cn(`Constructor ${r} does not have embed method`,t);return v}isImeComposing(e){return e?.isComposing===!0||e?.keyCode===229}createEmbedLayer(e){const t=document.createElement("div");t.id="g7-embed-overlay",t.style.cssText=`
position: fixed;
inset: 0;
background-color: rgba(0, 0, 0, 0.5);
z-index: 9999;
display: flex;
align-items: center;
justify-content: center;
`;const s=document.createElement("div");s.id="g7-embed-layer",s.style.cssText=`
position: relative;
background: white;
border-radius: 8px;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
max-width: 90vw;
max-height: 90vh;
overflow: hidden;
`,e&&(s.className=e);const r=document.createElement("button");r.type="button",r.innerHTML="×",r.style.cssText=`
position: absolute;
top: 8px;
right: 8px;
width: 32px;
height: 32px;
border: none;
background: rgba(0, 0, 0, 0.1);
border-radius: 50%;
font-size: 20px;
cursor: pointer;
z-index: 10;
display: flex;
align-items: center;
justify-content: center;
color: #666;
transition: background-color 0.2s;
`,r.onmouseenter=()=>{r.style.backgroundColor="rgba(0, 0, 0, 0.2)"},r.onmouseleave=()=>{r.style.backgroundColor="rgba(0, 0, 0, 0.1)"};const o=()=>{t.parentNode&&t.parentNode.removeChild(t)};r.onclick=o;const l=d=>{this.isImeComposing(d)||d.key==="Escape"&&(o(),document.removeEventListener("keydown",l))};return document.addEventListener("keydown",l),t.onclick=d=>{d.target===t&&o()},s.appendChild(r),t.appendChild(s),document.body.appendChild(t),{overlay:t,layer:s,closeLayer:o}}getNestedProperty(e,t){return t.split(".").reduce((s,r)=>s&&s[r]!==void 0?s[r]:void 0,e)}async handleSaveToLocalStorage(e,t){const{key:s,value:r}=e;if(!s)return ae.error("saveToLocalStorage: key parameter is required"),!1;try{const o=typeof r=="string"?r:JSON.stringify(r);return localStorage.setItem(s,o),ae.log(`saveToLocalStorage: saved ${s}`,r),!0}catch(o){return ae.error("saveToLocalStorage: failed to save",{key:s,error:o}),!1}}async handleLoadFromLocalStorage(e,t){const{key:s,target:r,stateKey:o,defaultValue:l}=e;if(!s)return ae.error("loadFromLocalStorage: key parameter is required"),l;try{const d=localStorage.getItem(s);if(d===null)return ae.log(`loadFromLocalStorage: no value found for ${s}, using default`),o&&t.setState&&t.setState({[o]:l}),l;let u;try{u=JSON.parse(d)}catch{u=d}return ae.log(`loadFromLocalStorage: loaded ${s}`,u),o&&t.setState&&t.setState({[o]:u}),u}catch(d){return ae.error("loadFromLocalStorage: failed to load",{key:s,error:d}),l}}async handleCustomAction(e,t){const s=this.customHandlers.get(e.handler);if(!s){if(this.previewMode){ae.warn(`[Preview] Unknown action handler "${e.handler}" — skipped (preview mode)`);return}throw new Cn(`Unknown action handler: ${e.handler}`,e)}return await s(e,t)}resolveParams(e,t){if(!e)return{};const s={};for(const[r,o]of Object.entries(e))r.includes("{{")&&ae.warn(`[resolveParams] setState params의 키에 표현식이 포함되어 있습니다: "${r}". 키는 해석되지 않습니다. 배열 항목 수정은 .map()/.filter() 패턴을 사용하세요.`),typeof o=="string"&&o.includes("{{")?s[r]=this.evaluateExpression(o,t):typeof o=="string"?s[r]=o:Array.isArray(o)?s[r]=o.map(l=>typeof l=="string"&&l.includes("{{")?this.evaluateExpression(l,t):l):typeof o=="object"&&o!==null&&!Array.isArray(o)&&Object.getPrototypeOf(o)!==Object.prototype&&Object.getPrototypeOf(o)!==null?s[r]=o:typeof o=="object"&&o!==null?s[r]=this.resolveParams(o,t):s[r]=o;return s}resolveValue(e,t){return t?this.bindingEngine.resolveBindings(e,t,{skipCache:!0}):e}evaluateExpressions(e,t){let s={};for(const[r,o]of Object.entries(e))if(r==="..."){let l=o;typeof o=="string"&&o.includes("{{")&&(l=this.evaluateExpression(o,t)),l&&typeof l=="object"&&!Array.isArray(l)&&(s={...s,...l})}else typeof o=="string"&&o.includes("{{")?s[r]=this.evaluateExpression(o,t):typeof o=="object"&&o!==null&&!Array.isArray(o)?s[r]=this.evaluateExpressions(o,t):s[r]=o;return s}evaluateExpressionsIfNeeded(e,t){const s={};for(const[r,o]of Object.entries(e))typeof o=="string"&&o.includes("{{")?s[r]=this.evaluateExpression(o,t):s[r]=o;return s}evaluateExpression(e,t){if(!t)return e;const s=e.match(/^\{\{(.+)\}\}$/);if(!(s&&!s[1].includes("}}")&&!s[1].includes("{{"))){let d=t;if(e.includes("_global")){const f=window.G7Core?.state?.get()?._global;f&&(d={...t,_global:f})}if(e.includes("_computed")||e.includes("$computed")){const f=window.__g7ActionContext?.computedRef?.current;f&&Object.keys(f).length>0&&(d={...d,_computed:f,$computed:f})}return this.bindingEngine.resolveBindings(e,d,{skipCache:!0})}let o=s[1].trim();o=o.replace(/\$args\.(\d+)/g,"$args[$1]");let l=t;if(o.includes("_global")){const u=window.G7Core?.state?.get()?._global;u&&(l={...t,_global:u})}if(o.includes("_computed")||o.includes("$computed")){const u=window.__g7ActionContext?.computedRef?.current;u&&Object.keys(u).length>0&&(l={...l,_computed:u,$computed:u})}o.includes("_global.modules")&&(ae.log("[evaluateExpression] expression:",o),ae.log("[evaluateExpression] dataContext._global:",l._global),ae.log("[evaluateExpression] dataContext._global?.modules:",l._global?.modules));try{const d=this.bindingEngine.evaluateExpression(o,l);return o.includes("_global.modules")&&ae.log("[evaluateExpression] result:",d),typeof d=="string"&&d.startsWith("$t:")&&this.translationEngine&&this.translationContext?this.translationEngine.resolveTranslations(d,this.translationContext,t):d}catch(d){return ae.error("Expression evaluation failed:",e,d),e}}setDefaultContext(e){this.defaultContext={...this.defaultContext,...e}}setGlobalStateUpdater(e){this.globalStateUpdater=e}getGlobalStateUpdater(){return this.globalStateUpdater}async dispatchAction(e,t){const s={...this.defaultContext,...t,data:{...this.defaultContext.data,...t?.data}};if(e.confirm){let r=this.resolveValue(e.confirm,s.data);if(this.translationEngine&&this.translationContext&&r.startsWith("$t:")&&(r=this.translationEngine.resolveTranslations(r,this.translationContext,s.data)),!confirm(r))return{success:!1}}try{return await this.executeAction(e,s)}catch(r){if(ae.error("dispatchAction failed:",r),e.onError){const o=r instanceof Cn&&r.originalError?{message:r.originalError.message,response:r.originalError.response}:{message:r instanceof Error?r.message:String(r)},l={...s,data:{...s.data,error:o}},d=Array.isArray(e.onError)?e.onError:[e.onError];for(const u of d)await this.executeAction(u,l)}return{success:!1,error:r instanceof Error?r:new Error(String(r))}}}registerHandler(e,t,s){this.customHandlers.set(e,t);const r=Us();r?.isEnabled()&&r.trackHandlerRegistration(e,s?.category??"custom",s?.description,s?.source)}unregisterHandler(e){this.customHandlers.delete(e);const t=Us();t?.isEnabled()&&t.trackHandlerUnregistration(e)}getRegisteredHandlers(){return Array.from(this.customHandlers.keys())}getHandler(e){return this.customHandlers.get(e)}normalizeDebounceConfig(e){return typeof e=="number"?{delay:e,leading:!1,trailing:!0}:{delay:e.delay,leading:e.leading??!1,trailing:e.trailing??!0}}extractEventData(e){const t=e.target;if(t&&!("tagName"in t)){const o={type:e.type??"custom",target:{value:t.value,name:t.name??""}};return e._changedKeys&&(o._changedKeys=e._changedKeys),o}const r=t?{value:t.value,name:t.name??"",checked:t.checked??!1,type:t.type??"",tagName:t.tagName}:{};if(e.type==="scroll"&&t){const o=t;r.scrollHeight=o.scrollHeight??0,r.scrollTop=o.scrollTop??0,r.clientHeight=o.clientHeight??0,r.scrollLeft=o.scrollLeft??0,r.clientWidth=o.clientWidth??0,r.scrollWidth=o.scrollWidth??0}return{type:e.type,target:t?r:null}}executeDebouncedAction(e,t,s,r,o){const l={...s,$event:t,$args:o},d={type:t.type,target:t.target,preventDefault:()=>{},stopPropagation:()=>{}};this.createHandler(e,l,r)(d)}handleDebouncedAction(e,t,s,r,o,l){const d=this.normalizeDebounceConfig(e.debounce),u=o||`default-${e.handler}-${Date.now()}`,f=this.extractEventData(t),g=f._changedKeys;if(g&&Array.isArray(g)&&f?.target?.value&&typeof f.target.value=="object"&&!Array.isArray(f.target.value)){const v=this.debounceAccumulatedValues.get(u);if(v){const x={...v};for(const S of g)x[S]=f.target.value[S];f.target.value=x}this.debounceAccumulatedValues.set(u,f.target.value)}const h=this.debounceTimers.get(u);h&&(clearTimeout(h),this.debounceTimers.delete(u));const b=Us();b?.isEnabled()&&b.trackAction({handler:typeof e.handler=="string"?e.handler:String(e.handler),type:e.type,status:"pending",params:e.params,debounce:{delay:d.delay,status:"pending",scheduledAt:Date.now()}});const y=!this.debounceTimers.has(u+"_leading");if(d.leading&&y&&(this.debounceTimers.set(u+"_leading",setTimeout(()=>{},0)),this.executeDebouncedAction(e,f,s,r,l),b?.isEnabled()&&b.trackAction({handler:typeof e.handler=="string"?e.handler:String(e.handler),type:e.type,status:"success",params:e.params,debounce:{delay:d.delay,status:"executed",executedAt:Date.now(),mode:"leading"}})),d.trailing){const v=()=>{this.executeDebouncedAction(e,f,s,r,l),b?.isEnabled()&&b.trackAction({handler:typeof e.handler=="string"?e.handler:String(e.handler),type:e.type,status:"success",params:e.params,debounce:{delay:d.delay,status:"executed",executedAt:Date.now(),mode:"trailing"}})},x=setTimeout(()=>{this.debounceTimers.delete(u),this.debounceTimers.delete(u+"_leading"),this.pendingDebounceFlushers.delete(u),this.debounceAccumulatedValues.delete(u),v()},d.delay);this.debounceTimers.set(u,x),this.pendingDebounceFlushers.set(u,v)}}clearDebounceTimers(e){if(e)for(const[t,s]of this.debounceTimers)t.startsWith(e+"-")&&(clearTimeout(s),this.debounceTimers.delete(t),this.pendingDebounceFlushers.delete(t),this.debounceAccumulatedValues.delete(t));else{for(const t of this.debounceTimers.values())clearTimeout(t);this.debounceTimers.clear(),this.pendingDebounceFlushers.clear(),this.debounceAccumulatedValues.clear()}}debouncedCall(e,t,s){const r=this.debounceTimers.get(e);r&&(clearTimeout(r),this.debounceTimers.delete(e));const o=setTimeout(()=>{this.debounceTimers.delete(e),this.pendingDebounceFlushers.delete(e),s()},t);this.debounceTimers.set(e,o),this.pendingDebounceFlushers.set(e,s)}flushPendingDebounceTimers(){if(this.pendingDebounceFlushers.size===0)return;const e=new Map(this.pendingDebounceFlushers);for(const[t,s]of e){const r=this.debounceTimers.get(t);r&&(clearTimeout(r),this.debounceTimers.delete(t)),this.debounceTimers.delete(t+"_leading"),this.pendingDebounceFlushers.delete(t),s()}this.globalStateUpdater&&this.globalStateUpdater({})}bindActionsToProps(e,t,s){const r={...e};if(e.actions&&Array.isArray(e.actions)){const o=new Map;for(const g of e.actions){const h=this.resolveActionRef(g),b=h.event||this.getEventHandlerName(h.type);o.has(b)||o.set(b,[]),o.get(b).push(h)}const l=e.name||e.id||"unknown",d=o.has("onDrop"),u=o.has("onDragOver"),f=o.has("onDragEnter");d&&!u&&(r.onDragOver=g=>{g.preventDefault()}),d&&!f&&(r.onDragEnter=g=>{g.preventDefault()});for(const[g,h]of o)r[g]=(...b)=>{for(const y of h){const v=b[0],x=v&&typeof v=="object"&&"preventDefault"in v;if(x&&(g==="onDragOver"||g==="onDrop")&&v.preventDefault(),x&&y.key&&"key"in v){if(this.isImeComposing(v)){ae.log("Key filter skipped (IME composing):",y.key);continue}if(v.key!==y.key){ae.log("Key filter not matched:",y.key,"actual:",v.key);continue}ae.log("Key filter matched:",y.key)}if(y.debounce){const S=`${l}-${y.handler}-${g}`,_=v&&typeof v=="object"&&!("preventDefault"in v)&&"target"in v&&v.target!==null;let A;if(x)A=v;else if(_){const j={type:"custom",target:v.target,preventDefault:()=>{},stopPropagation:()=>{}};v._changedKeys&&(j._changedKeys=v._changedKeys),A=j}else A=new Event("custom");const C=y.event?{...t,$args:b}:t;this.handleDebouncedAction(y,A,C,s,S,b)}else if(this.flushPendingDebounceTimers(),y.event){const S={...t,$args:b},_=x?v:new Event("custom");this.createHandler(y,S,s)(_)}else if(x)this.createHandler(y,t,s)(v);else if(v&&typeof v=="object"&&!("preventDefault"in v)&&"target"in v&&v.target!==null){const _={type:"custom",target:v.target,preventDefault:()=>{},stopPropagation:()=>{}};this.createHandler(y,t,s)(_)}}}}return r}getEventHandlerName(e){return{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"}[e]||`on${e.charAt(0).toUpperCase()}${e.slice(1)}`}sanitizeForDevTools(e,t=5){const s=new WeakSet,r=(o,l)=>{if(o==null||typeof o=="string"||typeof o=="number"||typeof o=="boolean")return o;if(l>t)return"[Max Depth Exceeded]";if(typeof o=="function")return`[Function: ${o.name||"anonymous"}]`;if(o instanceof Element)return`[Element: ${o.tagName}${o.className?"."+o.className.split(" ").join("."):""}]`;if(o instanceof Event)return`[Event: ${o.type}]`;if(Array.isArray(o)){if(s.has(o))return"[Circular Array]";s.add(o);const d=o.slice(0,10).map(u=>r(u,l+1));return o.length>10&&d.push(`... ${o.length-10} more items`),d}if(typeof o=="object"){if(s.has(o))return"[Circular Reference]";s.add(o);const d={},u=Object.keys(o),f=u.slice(0,20);for(const g of f)try{d[g]=r(o[g],l+1)}catch{d[g]="[Error accessing property]"}return u.length>20&&(d["..."]=`${u.length-20} more properties`),d}return String(o)};return r(e,0)}};ne(yl,"loadedScripts",new Set);let yc=yl,Su=null;function Iw(n){return Su||(Su=new yc(n)),Su}function mN(n){Su=n}const Lw=Ht("TransitionManager");class yN{constructor(){ne(this,"isPending",!1);ne(this,"subscribers",new Set)}setPending(e){this.isPending!==e&&(Lw.log("setPending:",{from:this.isPending,to:e,stack:new Error().stack}),this.isPending=e,this.notifySubscribers())}getIsPending(){return this.isPending}subscribe(e){return this.subscribers.add(e),()=>{this.subscribers.delete(e)}}notifySubscribers(){Lw.log("notifySubscribers:",{isPending:this.isPending,subscriberCount:this.subscribers.size}),this.subscribers.forEach(e=>{e(this.isPending)})}clearSubscribers(){this.subscribers.clear()}}const Fr=new yN,ku=Ht("TransitionContext"),Ow=w.createContext({isTransitioning:!1}),lh=({children:n})=>{const[e,t]=w.useState(()=>{const r=Fr.getIsPending();return ku.log("Initial state:",r),r});w.useEffect(()=>{ku.log("Subscribing to TransitionManager");const r=Fr.subscribe(o=>{ku.log("Received isPending update:",o),t(o)});return()=>{ku.log("Unsubscribing from TransitionManager"),r()}},[]);const s=w.useMemo(()=>({isTransitioning:e}),[e]);return a.jsx(Ow.Provider,{value:s,children:n})},Mw=()=>w.useContext(Ow);function bN(n){return n<768?"mobile":n<1024?"tablet":"desktop"}function zw(n){const e=bN(n);return{width:n,isMobile:e==="mobile",isTablet:e==="tablet",isDesktop:e==="desktop",matchedPreset:e}}const Pw=w.createContext(zw(1024)),Cu=({children:n,overrideWidth:e})=>{const[t,s]=w.useState(()=>Ws.getWidth());w.useEffect(()=>{const l=Ws.subscribe(d=>{s(d)});return()=>{l()}},[]);const r=e??t,o=w.useMemo(()=>zw(r),[r]);return a.jsx(Pw.Provider,{value:o,children:n})},Bw=()=>w.useContext(Pw);window.G7Core?.createLogger?.("Core:State");function xN(n,e,t,s){const{syncOnControlledChange:r=!0,isEqual:o}=s??{},l=n!==void 0;w.useRef(l);const[d,u]=w.useState(n!==void 0?n:e),f=d,g=w.useRef(n),h=w.useRef(!1);w.useEffect(()=>{if(h.current){g.current=n;return}r&&l&&n!==g.current&&(o?!o(d,n):d!==n)&&u(n),g.current=n},[n,l,r,o,d]);const b=w.useCallback(y=>{const v=typeof y=="function"?y(f):y;(o?o(f,v):f===v)||(h.current=!0,u(v),t?.(v),requestAnimationFrame(()=>{h.current=!1}))},[f,l,t,o]);return[f,b]}function vN(n,e){return n===e?!0:n.length!==e.length?!1:n.every((t,s)=>t===e[s])}function Hw(n,e){if(n===e)return!0;const t=Object.keys(n),s=Object.keys(e);return t.length!==s.length?!1:t.every(r=>n[r]===e[r])}const Ww=w.createContext({}),wN=({children:n,value:e})=>a.jsx(Ww.Provider,{value:e,children:n}),_N=()=>w.useContext(Ww),SN=(n,e)=>{if(!n)return;const t=e.split(".");let s=n;for(const r of t){if(s==null)return;s=s[r]}return s},kN=(n,e,t)=>{const s=e.split(".");if(s.length===1)return{...n,[s[0]]:t};const r={...n};let o=r;for(let l=0;l<s.length-1;l++){const d=s[l],u=s[l+1],f=/^\d+$/.test(u);Array.isArray(o[d])&&!f?o[d]={...o[d]}:Array.isArray(o[d])?o[d]=[...o[d]]:f?o[d]=Array.isArray(o[d])?[...o[d]]:[]:o[d]={...o[d]||{}},o=o[d]}return o[s[s.length-1]]=t,r},Hi=Ht("IsolatedStateContext"),CN={state:{},setState:()=>{Hi.warn("IsolatedStateContext not available: setState called outside IsolatedStateProvider")},getState:()=>{},mergeState:()=>{Hi.warn("IsolatedStateContext not available: mergeState called outside IsolatedStateProvider")},stateRef:{current:{}},scopeId:""},Uw=w.createContext(CN);let jN=0;function EN(){return`isolated-${++jN}-${Date.now().toString(36)}`}function qw(n,e){if(e==null)return n;if(typeof e!="object"||Array.isArray(e))return e;const t={...n};for(const s of Object.keys(e)){const r=e[s],o=n?.[s];r!==null&&typeof r=="object"&&!Array.isArray(r)&&o!==null&&typeof o=="object"&&!Array.isArray(o)?t[s]=qw(o,r):t[s]=r}return t}function RN(n,e){return e?e.split(".").reduce((t,s)=>t?.[s],n):n}function AN(n,e,t){const s=e.split("."),r={...n};let o=r;for(let l=0;l<s.length-1;l++){const d=s[l];o[d]={...o[d]},o=o[d]}return o[s[s.length-1]]=t,r}const TN=({initialState:n={},scopeId:e,children:t})=>{const r=w.useRef(e||EN()).current,[o,l]=w.useState(n),d=w.useRef(o);d.current=o;const u=w.useCallback(y=>RN(d.current,y),[]),f=w.useCallback((y,v)=>{l(x=>{const S=AN(x,y,v);return Hi.log(`[${r}] setState: ${y} =`,v),S})},[r]),g=w.useCallback((y,v="deep")=>{l(x=>{let S;return v==="replace"?S=y:v==="shallow"?S={...x,...y}:S=qw(x,y),Hi.log(`[${r}] mergeState (${v}):`,y),S})},[r]),h=w.useMemo(()=>({state:o,setState:f,getState:u,mergeState:g,stateRef:d,scopeId:r}),[o,f,u,g,r]),b=w.useMemo(()=>({state:d.current,setState:f,getState:u,mergeState:g}),[f,u,g]);return w.useEffect(()=>{const y=window.G7Core,v=window.__g7IsolatedStates||{};return window.__g7IsolatedStates||(window.__g7IsolatedStates=v),v[r]=b,y&&(y._isolatedStates||(y._isolatedStates={}),y._isolatedStates[r]=o),y?.devTools?.isEnabled?.()&&y.devTools.emit?.("isolated:created",{id:r,state:o}),Hi.log(`[${r}] IsolatedStateProvider mounted with initial state:`,o),()=>{delete v[r],y?._isolatedStates&&delete y._isolatedStates[r],y?.devTools?.isEnabled?.()&&y.devTools.emit?.("isolated:destroyed",{id:r}),Hi.log(`[${r}] IsolatedStateProvider unmounted`)}},[r,b]),w.useEffect(()=>{const y=window.G7Core,v=window.__g7IsolatedStates;v?.[r]&&(v[r].state=o),y?._isolatedStates&&(y._isolatedStates[r]=o),y?.devTools?.isEnabled?.()&&y.devTools.emit?.("isolated:updated",{id:r,state:o})},[o,r]),a.jsx(Uw.Provider,{value:h,children:t})},$N=()=>{const n=w.useContext(Uw);return n.scopeId?n:null};var Vr=Av();function NN(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];return w.useMemo(()=>s=>{e.forEach(r=>r(s))},e)}const ju=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Wi(n){const e=Object.prototype.toString.call(n);return e==="[object Window]"||e==="[object global]"}function ch(n){return"nodeType"in n}function _s(n){var e,t;return n?Wi(n)?n:ch(n)&&(e=(t=n.ownerDocument)==null?void 0:t.defaultView)!=null?e:window:window}function dh(n){const{Document:e}=_s(n);return n instanceof e}function bc(n){return Wi(n)?!1:n instanceof _s(n).HTMLElement}function Fw(n){return n instanceof _s(n).SVGElement}function Ui(n){return n?Wi(n)?n.document:ch(n)?dh(n)?n:bc(n)||Fw(n)?n.ownerDocument:document:document:document}const Sr=ju?w.useLayoutEffect:w.useEffect;function Eu(n){const e=w.useRef(n);return Sr(()=>{e.current=n}),w.useCallback(function(){for(var t=arguments.length,s=new Array(t),r=0;r<t;r++)s[r]=arguments[r];return e.current==null?void 0:e.current(...s)},[])}function DN(){const n=w.useRef(null),e=w.useCallback((s,r)=>{n.current=setInterval(s,r)},[]),t=w.useCallback(()=>{n.current!==null&&(clearInterval(n.current),n.current=null)},[]);return[e,t]}function xc(n,e){e===void 0&&(e=[n]);const t=w.useRef(n);return Sr(()=>{t.current!==n&&(t.current=n)},e),t}function vc(n,e){const t=w.useRef();return w.useMemo(()=>{const s=n(t.current);return t.current=s,s},[...e])}function Ru(n){const e=Eu(n),t=w.useRef(null),s=w.useCallback(r=>{r!==t.current&&e?.(r,t.current),t.current=r},[]);return[t,s]}function Au(n){const e=w.useRef();return w.useEffect(()=>{e.current=n},[n]),e.current}let uh={};function wc(n,e){return w.useMemo(()=>{if(e)return e;const t=uh[n]==null?0:uh[n]+1;return uh[n]=t,n+"-"+t},[n,e])}function Vw(n){return function(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),r=1;r<t;r++)s[r-1]=arguments[r];return s.reduce((o,l)=>{const d=Object.entries(l);for(const[u,f]of d){const g=o[u];g!=null&&(o[u]=g+n*f)}return o},{...e})}}const qi=Vw(1),_c=Vw(-1);function IN(n){return"clientX"in n&&"clientY"in n}function Tu(n){if(!n)return!1;const{KeyboardEvent:e}=_s(n.target);return e&&n instanceof e}function LN(n){if(!n)return!1;const{TouchEvent:e}=_s(n.target);return e&&n instanceof e}function $u(n){if(LN(n)){if(n.touches&&n.touches.length){const{clientX:e,clientY:t}=n.touches[0];return{x:e,y:t}}else if(n.changedTouches&&n.changedTouches.length){const{clientX:e,clientY:t}=n.changedTouches[0];return{x:e,y:t}}}return IN(n)?{x:n.clientX,y:n.clientY}:null}const Go=Object.freeze({Translate:{toString(n){if(!n)return;const{x:e,y:t}=n;return"translate3d("+(e?Math.round(e):0)+"px, "+(t?Math.round(t):0)+"px, 0)"}},Scale:{toString(n){if(!n)return;const{scaleX:e,scaleY:t}=n;return"scaleX("+e+") scaleY("+t+")"}},Transform:{toString(n){if(n)return[Go.Translate.toString(n),Go.Scale.toString(n)].join(" ")}},Transition:{toString(n){let{property:e,duration:t,easing:s}=n;return e+" "+t+"ms "+s}}}),Kw="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function ON(n){return n.matches(Kw)?n:n.querySelector(Kw)}const MN={display:"none"};function zN(n){let{id:e,value:t}=n;return qe.createElement("div",{id:e,style:MN},t)}function PN(n){let{id:e,announcement:t,ariaLiveType:s="assertive"}=n;const r={position:"fixed",top:0,left:0,width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};return qe.createElement("div",{id:e,style:r,role:"status","aria-live":s,"aria-atomic":!0},t)}function BN(){const[n,e]=w.useState("");return{announce:w.useCallback(s=>{s!=null&&e(s)},[]),announcement:n}}const Gw=w.createContext(null);function HN(n){const e=w.useContext(Gw);w.useEffect(()=>{if(!e)throw new Error("useDndMonitor must be used within a children of <DndContext>");return e(n)},[n,e])}function WN(){const[n]=w.useState(()=>new Set),e=w.useCallback(s=>(n.add(s),()=>n.delete(s)),[n]);return[w.useCallback(s=>{let{type:r,event:o}=s;n.forEach(l=>{var d;return(d=l[r])==null?void 0:d.call(l,o)})},[n]),e]}const UN={draggable:`
To pick up a draggable item, press the space bar.
While dragging, use the arrow keys to move the item.
Press space again to drop the item in its new position, or press escape to cancel.
`},qN={onDragStart(n){let{active:e}=n;return"Picked up draggable item "+e.id+"."},onDragOver(n){let{active:e,over:t}=n;return t?"Draggable item "+e.id+" was moved over droppable area "+t.id+".":"Draggable item "+e.id+" is no longer over a droppable area."},onDragEnd(n){let{active:e,over:t}=n;return t?"Draggable item "+e.id+" was dropped over droppable area "+t.id:"Draggable item "+e.id+" was dropped."},onDragCancel(n){let{active:e}=n;return"Dragging was cancelled. Draggable item "+e.id+" was dropped."}};function FN(n){let{announcements:e=qN,container:t,hiddenTextDescribedById:s,screenReaderInstructions:r=UN}=n;const{announce:o,announcement:l}=BN(),d=wc("DndLiveRegion"),[u,f]=w.useState(!1);if(w.useEffect(()=>{f(!0)},[]),HN(w.useMemo(()=>({onDragStart(h){let{active:b}=h;o(e.onDragStart({active:b}))},onDragMove(h){let{active:b,over:y}=h;e.onDragMove&&o(e.onDragMove({active:b,over:y}))},onDragOver(h){let{active:b,over:y}=h;o(e.onDragOver({active:b,over:y}))},onDragEnd(h){let{active:b,over:y}=h;o(e.onDragEnd({active:b,over:y}))},onDragCancel(h){let{active:b,over:y}=h;o(e.onDragCancel({active:b,over:y}))}}),[o,e])),!u)return null;const g=qe.createElement(qe.Fragment,null,qe.createElement(zN,{id:s,value:r.draggable}),qe.createElement(PN,{id:d,announcement:l}));return t?Vr.createPortal(g,t):g}var Yn;(function(n){n.DragStart="dragStart",n.DragMove="dragMove",n.DragEnd="dragEnd",n.DragCancel="dragCancel",n.DragOver="dragOver",n.RegisterDroppable="registerDroppable",n.SetDroppableDisabled="setDroppableDisabled",n.UnregisterDroppable="unregisterDroppable"})(Yn||(Yn={}));function Nu(){}function fh(n,e){return w.useMemo(()=>({sensor:n,options:e??{}}),[n,e])}function Yw(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];return w.useMemo(()=>[...e].filter(s=>s!=null),[...e])}const kr=Object.freeze({x:0,y:0});function ph(n,e){return Math.sqrt(Math.pow(n.x-e.x,2)+Math.pow(n.y-e.y,2))}function VN(n,e){const t=$u(n);if(!t)return"0 0";const s={x:(t.x-e.left)/e.width*100,y:(t.y-e.top)/e.height*100};return s.x+"% "+s.y+"%"}function gh(n,e){let{data:{value:t}}=n,{data:{value:s}}=e;return t-s}function KN(n,e){let{data:{value:t}}=n,{data:{value:s}}=e;return s-t}function hh(n){let{left:e,top:t,height:s,width:r}=n;return[{x:e,y:t},{x:e+r,y:t},{x:e,y:t+s},{x:e+r,y:t+s}]}function Xw(n,e){if(!n||n.length===0)return null;const[t]=n;return t[e]}function Jw(n,e,t){return e===void 0&&(e=n.left),t===void 0&&(t=n.top),{x:e+n.width*.5,y:t+n.height*.5}}const GN=n=>{let{collisionRect:e,droppableRects:t,droppableContainers:s}=n;const r=Jw(e,e.left,e.top),o=[];for(const l of s){const{id:d}=l,u=t.get(d);if(u){const f=ph(Jw(u),r);o.push({id:d,data:{droppableContainer:l,value:f}})}}return o.sort(gh)},YN=n=>{let{collisionRect:e,droppableRects:t,droppableContainers:s}=n;const r=hh(e),o=[];for(const l of s){const{id:d}=l,u=t.get(d);if(u){const f=hh(u),g=r.reduce((b,y,v)=>b+ph(f[v],y),0),h=Number((g/4).toFixed(4));o.push({id:d,data:{droppableContainer:l,value:h}})}}return o.sort(gh)};function XN(n,e){const t=Math.max(e.top,n.top),s=Math.max(e.left,n.left),r=Math.min(e.left+e.width,n.left+n.width),o=Math.min(e.top+e.height,n.top+n.height),l=r-s,d=o-t;if(s<r&&t<o){const u=e.width*e.height,f=n.width*n.height,g=l*d,h=g/(u+f-g);return Number(h.toFixed(4))}return 0}const JN=n=>{let{collisionRect:e,droppableRects:t,droppableContainers:s}=n;const r=[];for(const o of s){const{id:l}=o,d=t.get(l);if(d){const u=XN(d,e);u>0&&r.push({id:l,data:{droppableContainer:o,value:u}})}}return r.sort(KN)};function ZN(n,e){const{top:t,left:s,bottom:r,right:o}=e;return t<=n.y&&n.y<=r&&s<=n.x&&n.x<=o}const QN=n=>{let{droppableContainers:e,droppableRects:t,pointerCoordinates:s}=n;if(!s)return[];const r=[];for(const o of e){const{id:l}=o,d=t.get(l);if(d&&ZN(s,d)){const f=hh(d).reduce((h,b)=>h+ph(s,b),0),g=Number((f/4).toFixed(4));r.push({id:l,data:{droppableContainer:o,value:g}})}}return r.sort(gh)};function e2(n,e,t){return{...n,scaleX:e&&t?e.width/t.width:1,scaleY:e&&t?e.height/t.height:1}}function Zw(n,e){return n&&e?{x:n.left-e.left,y:n.top-e.top}:kr}function t2(n){return function(t){for(var s=arguments.length,r=new Array(s>1?s-1:0),o=1;o<s;o++)r[o-1]=arguments[o];return r.reduce((l,d)=>({...l,top:l.top+n*d.y,bottom:l.bottom+n*d.y,left:l.left+n*d.x,right:l.right+n*d.x}),{...t})}}const n2=t2(1);function Qw(n){if(n.startsWith("matrix3d(")){const e=n.slice(9,-1).split(/, /);return{x:+e[12],y:+e[13],scaleX:+e[0],scaleY:+e[5]}}else if(n.startsWith("matrix(")){const e=n.slice(7,-1).split(/, /);return{x:+e[4],y:+e[5],scaleX:+e[0],scaleY:+e[3]}}return null}function s2(n,e,t){const s=Qw(e);if(!s)return n;const{scaleX:r,scaleY:o,x:l,y:d}=s,u=n.left-l-(1-r)*parseFloat(t),f=n.top-d-(1-o)*parseFloat(t.slice(t.indexOf(" ")+1)),g=r?n.width/r:n.width,h=o?n.height/o:n.height;return{width:g,height:h,top:f,right:u+g,bottom:f+h,left:u}}const r2={ignoreTransform:!1};function Fi(n,e){e===void 0&&(e=r2);let t=n.getBoundingClientRect();if(e.ignoreTransform){const{transform:f,transformOrigin:g}=_s(n).getComputedStyle(n);f&&(t=s2(t,f,g))}const{top:s,left:r,width:o,height:l,bottom:d,right:u}=t;return{top:s,left:r,width:o,height:l,bottom:d,right:u}}function e0(n){return Fi(n,{ignoreTransform:!0})}function o2(n){const e=n.innerWidth,t=n.innerHeight;return{top:0,left:0,right:e,bottom:t,width:e,height:t}}function a2(n,e){return e===void 0&&(e=_s(n).getComputedStyle(n)),e.position==="fixed"}function i2(n,e){e===void 0&&(e=_s(n).getComputedStyle(n));const t=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some(r=>{const o=e[r];return typeof o=="string"?t.test(o):!1})}function Du(n,e){const t=[];function s(r){if(e!=null&&t.length>=e||!r)return t;if(dh(r)&&r.scrollingElement!=null&&!t.includes(r.scrollingElement))return t.push(r.scrollingElement),t;if(!bc(r)||Fw(r)||t.includes(r))return t;const o=_s(n).getComputedStyle(r);return r!==n&&i2(r,o)&&t.push(r),a2(r,o)?t:s(r.parentNode)}return n?s(n):t}function t0(n){const[e]=Du(n,1);return e??null}function mh(n){return!ju||!n?null:Wi(n)?n:ch(n)?dh(n)||n===Ui(n).scrollingElement?window:bc(n)?n:null:null}function n0(n){return Wi(n)?n.scrollX:n.scrollLeft}function s0(n){return Wi(n)?n.scrollY:n.scrollTop}function yh(n){return{x:n0(n),y:s0(n)}}var ns;(function(n){n[n.Forward=1]="Forward",n[n.Backward=-1]="Backward"})(ns||(ns={}));function r0(n){return!ju||!n?!1:n===document.scrollingElement}function o0(n){const e={x:0,y:0},t=r0(n)?{height:window.innerHeight,width:window.innerWidth}:{height:n.clientHeight,width:n.clientWidth},s={x:n.scrollWidth-t.width,y:n.scrollHeight-t.height},r=n.scrollTop<=e.y,o=n.scrollLeft<=e.x,l=n.scrollTop>=s.y,d=n.scrollLeft>=s.x;return{isTop:r,isLeft:o,isBottom:l,isRight:d,maxScroll:s,minScroll:e}}const l2={x:.2,y:.2};function c2(n,e,t,s,r){let{top:o,left:l,right:d,bottom:u}=t;s===void 0&&(s=10),r===void 0&&(r=l2);const{isTop:f,isBottom:g,isLeft:h,isRight:b}=o0(n),y={x:0,y:0},v={x:0,y:0},x={height:e.height*r.y,width:e.width*r.x};return!f&&o<=e.top+x.height?(y.y=ns.Backward,v.y=s*Math.abs((e.top+x.height-o)/x.height)):!g&&u>=e.bottom-x.height&&(y.y=ns.Forward,v.y=s*Math.abs((e.bottom-x.height-u)/x.height)),!b&&d>=e.right-x.width?(y.x=ns.Forward,v.x=s*Math.abs((e.right-x.width-d)/x.width)):!h&&l<=e.left+x.width&&(y.x=ns.Backward,v.x=s*Math.abs((e.left+x.width-l)/x.width)),{direction:y,speed:v}}function d2(n){if(n===document.scrollingElement){const{innerWidth:o,innerHeight:l}=window;return{top:0,left:0,right:o,bottom:l,width:o,height:l}}const{top:e,left:t,right:s,bottom:r}=n.getBoundingClientRect();return{top:e,left:t,right:s,bottom:r,width:n.clientWidth,height:n.clientHeight}}function a0(n){return n.reduce((e,t)=>qi(e,yh(t)),kr)}function u2(n){return n.reduce((e,t)=>e+n0(t),0)}function f2(n){return n.reduce((e,t)=>e+s0(t),0)}function i0(n,e){if(e===void 0&&(e=Fi),!n)return;const{top:t,left:s,bottom:r,right:o}=e(n);t0(n)&&(r<=0||o<=0||t>=window.innerHeight||s>=window.innerWidth)&&n.scrollIntoView({block:"center",inline:"center"})}const p2=[["x",["left","right"],u2],["y",["top","bottom"],f2]];class bh{constructor(e,t){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 s=Du(t),r=a0(s);this.rect={...e},this.width=e.width,this.height=e.height;for(const[o,l,d]of p2)for(const u of l)Object.defineProperty(this,u,{get:()=>{const f=d(s),g=r[o]-f;return this.rect[u]+g},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}}class Sc{constructor(e){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach(t=>{var s;return(s=this.target)==null?void 0:s.removeEventListener(...t)})},this.target=e}add(e,t,s){var r;(r=this.target)==null||r.addEventListener(e,t,s),this.listeners.push([e,t,s])}}function g2(n){const{EventTarget:e}=_s(n);return n instanceof e?n:Ui(n)}function xh(n,e){const t=Math.abs(n.x),s=Math.abs(n.y);return typeof e=="number"?Math.sqrt(t**2+s**2)>e:"x"in e&&"y"in e?t>e.x&&s>e.y:"x"in e?t>e.x:"y"in e?s>e.y:!1}var or;(function(n){n.Click="click",n.DragStart="dragstart",n.Keydown="keydown",n.ContextMenu="contextmenu",n.Resize="resize",n.SelectionChange="selectionchange",n.VisibilityChange="visibilitychange"})(or||(or={}));function l0(n){n.preventDefault()}function h2(n){n.stopPropagation()}var Wt;(function(n){n.Space="Space",n.Down="ArrowDown",n.Right="ArrowRight",n.Left="ArrowLeft",n.Up="ArrowUp",n.Esc="Escape",n.Enter="Enter",n.Tab="Tab"})(Wt||(Wt={}));const c0={start:[Wt.Space,Wt.Enter],cancel:[Wt.Esc],end:[Wt.Space,Wt.Enter,Wt.Tab]},m2=(n,e)=>{let{currentCoordinates:t}=e;switch(n.code){case Wt.Right:return{...t,x:t.x+25};case Wt.Left:return{...t,x:t.x-25};case Wt.Down:return{...t,y:t.y+25};case Wt.Up:return{...t,y:t.y-25}}};class vh{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:t}}=e;this.props=e,this.listeners=new Sc(Ui(t)),this.windowListeners=new Sc(_s(t)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(or.Resize,this.handleCancel),this.windowListeners.add(or.VisibilityChange,this.handleCancel),setTimeout(()=>this.listeners.add(or.Keydown,this.handleKeyDown))}handleStart(){const{activeNode:e,onStart:t}=this.props,s=e.node.current;s&&i0(s),t(kr)}handleKeyDown(e){if(Tu(e)){const{active:t,context:s,options:r}=this.props,{keyboardCodes:o=c0,coordinateGetter:l=m2,scrollBehavior:d="smooth"}=r,{code:u}=e;if(o.end.includes(u)){this.handleEnd(e);return}if(o.cancel.includes(u)){this.handleCancel(e);return}const{collisionRect:f}=s.current,g=f?{x:f.left,y:f.top}:kr;this.referenceCoordinates||(this.referenceCoordinates=g);const h=l(e,{active:t,context:s.current,currentCoordinates:g});if(h){const b=_c(h,g),y={x:0,y:0},{scrollableAncestors:v}=s.current;for(const x of v){const S=e.code,{isTop:_,isRight:A,isLeft:C,isBottom:j,maxScroll:E,minScroll:T}=o0(x),D=d2(x),I={x:Math.min(S===Wt.Right?D.right-D.width/2:D.right,Math.max(S===Wt.Right?D.left:D.left+D.width/2,h.x)),y:Math.min(S===Wt.Down?D.bottom-D.height/2:D.bottom,Math.max(S===Wt.Down?D.top:D.top+D.height/2,h.y))},W=S===Wt.Right&&!A||S===Wt.Left&&!C,z=S===Wt.Down&&!j||S===Wt.Up&&!_;if(W&&I.x!==h.x){const H=x.scrollLeft+b.x,G=S===Wt.Right&&H<=E.x||S===Wt.Left&&H>=T.x;if(G&&!b.y){x.scrollTo({left:H,behavior:d});return}G?y.x=x.scrollLeft-H:y.x=S===Wt.Right?x.scrollLeft-E.x:x.scrollLeft-T.x,y.x&&x.scrollBy({left:-y.x,behavior:d});break}else if(z&&I.y!==h.y){const H=x.scrollTop+b.y,G=S===Wt.Down&&H<=E.y||S===Wt.Up&&H>=T.y;if(G&&!b.x){x.scrollTo({top:H,behavior:d});return}G?y.y=x.scrollTop-H:y.y=S===Wt.Down?x.scrollTop-E.y:x.scrollTop-T.y,y.y&&x.scrollBy({top:-y.y,behavior:d});break}}this.handleMove(e,qi(_c(h,this.referenceCoordinates),y))}}}handleMove(e,t){const{onMove:s}=this.props;e.preventDefault(),s(t)}handleEnd(e){const{onEnd:t}=this.props;e.preventDefault(),this.detach(),t()}handleCancel(e){const{onCancel:t}=this.props;e.preventDefault(),this.detach(),t()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}vh.activators=[{eventName:"onKeyDown",handler:(n,e,t)=>{let{keyboardCodes:s=c0,onActivation:r}=e,{active:o}=t;const{code:l}=n.nativeEvent;if(s.start.includes(l)){const d=o.activatorNode.current;return d&&n.target!==d?!1:(n.preventDefault(),r?.({event:n.nativeEvent}),!0)}return!1}}];function d0(n){return!!(n&&"distance"in n)}function u0(n){return!!(n&&"delay"in n)}class wh{constructor(e,t,s){var r;s===void 0&&(s=g2(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=t;const{event:o}=e,{target:l}=o;this.props=e,this.events=t,this.document=Ui(l),this.documentListeners=new Sc(this.document),this.listeners=new Sc(s),this.windowListeners=new Sc(_s(l)),this.initialCoordinates=(r=$u(o))!=null?r:kr,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:t,bypassActivationConstraint:s}}}=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(or.Resize,this.handleCancel),this.windowListeners.add(or.DragStart,l0),this.windowListeners.add(or.VisibilityChange,this.handleCancel),this.windowListeners.add(or.ContextMenu,l0),this.documentListeners.add(or.Keydown,this.handleKeydown),t){if(s!=null&&s({event:this.props.event,activeNode:this.props.activeNode,options:this.props.options}))return this.handleStart();if(u0(t)){this.timeoutId=setTimeout(this.handleStart,t.delay),this.handlePending(t);return}if(d0(t)){this.handlePending(t);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,t){const{active:s,onPending:r}=this.props;r(s,e,this.initialCoordinates,t)}handleStart(){const{initialCoordinates:e}=this,{onStart:t}=this.props;e&&(this.activated=!0,this.documentListeners.add(or.Click,h2,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(or.SelectionChange,this.removeTextSelection),t(e))}handleMove(e){var t;const{activated:s,initialCoordinates:r,props:o}=this,{onMove:l,options:{activationConstraint:d}}=o;if(!r)return;const u=(t=$u(e))!=null?t:kr,f=_c(r,u);if(!s&&d){if(d0(d)){if(d.tolerance!=null&&xh(f,d.tolerance))return this.handleCancel();if(xh(f,d.distance))return this.handleStart()}if(u0(d)&&xh(f,d.tolerance))return this.handleCancel();this.handlePending(d,f);return}e.cancelable&&e.preventDefault(),l(u)}handleEnd(){const{onAbort:e,onEnd:t}=this.props;this.detach(),this.activated||e(this.props.active),t()}handleCancel(){const{onAbort:e,onCancel:t}=this.props;this.detach(),this.activated||e(this.props.active),t()}handleKeydown(e){e.code===Wt.Esc&&this.handleCancel()}removeTextSelection(){var e;(e=this.document.getSelection())==null||e.removeAllRanges()}}const y2={cancel:{name:"pointercancel"},move:{name:"pointermove"},end:{name:"pointerup"}};class Iu extends wh{constructor(e){const{event:t}=e,s=Ui(t.target);super(e,y2,s)}}Iu.activators=[{eventName:"onPointerDown",handler:(n,e)=>{let{nativeEvent:t}=n,{onActivation:s}=e;return!t.isPrimary||t.button!==0?!1:(s?.({event:t}),!0)}}];const b2={move:{name:"mousemove"},end:{name:"mouseup"}};var _h;(function(n){n[n.RightClick=2]="RightClick"})(_h||(_h={}));class x2 extends wh{constructor(e){super(e,b2,Ui(e.event.target))}}x2.activators=[{eventName:"onMouseDown",handler:(n,e)=>{let{nativeEvent:t}=n,{onActivation:s}=e;return t.button===_h.RightClick?!1:(s?.({event:t}),!0)}}];const Sh={cancel:{name:"touchcancel"},move:{name:"touchmove"},end:{name:"touchend"}};class v2 extends wh{constructor(e){super(e,Sh)}static setup(){return window.addEventListener(Sh.move.name,e,{capture:!1,passive:!1}),function(){window.removeEventListener(Sh.move.name,e)};function e(){}}}v2.activators=[{eventName:"onTouchStart",handler:(n,e)=>{let{nativeEvent:t}=n,{onActivation:s}=e;const{touches:r}=t;return r.length>1?!1:(s?.({event:t}),!0)}}];var kc;(function(n){n[n.Pointer=0]="Pointer",n[n.DraggableRect=1]="DraggableRect"})(kc||(kc={}));var Lu;(function(n){n[n.TreeOrder=0]="TreeOrder",n[n.ReversedTreeOrder=1]="ReversedTreeOrder"})(Lu||(Lu={}));function w2(n){let{acceleration:e,activator:t=kc.Pointer,canScroll:s,draggingRect:r,enabled:o,interval:l=5,order:d=Lu.TreeOrder,pointerCoordinates:u,scrollableAncestors:f,scrollableAncestorRects:g,delta:h,threshold:b}=n;const y=S2({delta:h,disabled:!o}),[v,x]=DN(),S=w.useRef({x:0,y:0}),_=w.useRef({x:0,y:0}),A=w.useMemo(()=>{switch(t){case kc.Pointer:return u?{top:u.y,bottom:u.y,left:u.x,right:u.x}:null;case kc.DraggableRect:return r}},[t,r,u]),C=w.useRef(null),j=w.useCallback(()=>{const T=C.current;if(!T)return;const D=S.current.x*_.current.x,I=S.current.y*_.current.y;T.scrollBy(D,I)},[]),E=w.useMemo(()=>d===Lu.TreeOrder?[...f].reverse():f,[d,f]);w.useEffect(()=>{if(!o||!f.length||!A){x();return}for(const T of E){if(s?.(T)===!1)continue;const D=f.indexOf(T),I=g[D];if(!I)continue;const{direction:W,speed:z}=c2(T,I,A,e,b);for(const H of["x","y"])y[H][W[H]]||(z[H]=0,W[H]=0);if(z.x>0||z.y>0){x(),C.current=T,v(j,l),S.current=z,_.current=W;return}}S.current={x:0,y:0},_.current={x:0,y:0},x()},[e,j,s,x,o,l,JSON.stringify(A),JSON.stringify(y),v,f,E,g,JSON.stringify(b)])}const _2={x:{[ns.Backward]:!1,[ns.Forward]:!1},y:{[ns.Backward]:!1,[ns.Forward]:!1}};function S2(n){let{delta:e,disabled:t}=n;const s=Au(e);return vc(r=>{if(t||!s||!r)return _2;const o={x:Math.sign(e.x-s.x),y:Math.sign(e.y-s.y)};return{x:{[ns.Backward]:r.x[ns.Backward]||o.x===-1,[ns.Forward]:r.x[ns.Forward]||o.x===1},y:{[ns.Backward]:r.y[ns.Backward]||o.y===-1,[ns.Forward]:r.y[ns.Forward]||o.y===1}}},[t,e,s])}function k2(n,e){const t=e!=null?n.get(e):void 0,s=t?t.node.current:null;return vc(r=>{var o;return e==null?null:(o=s??r)!=null?o:null},[s,e])}function C2(n,e){return w.useMemo(()=>n.reduce((t,s)=>{const{sensor:r}=s,o=r.activators.map(l=>({eventName:l.eventName,handler:e(l.handler,s)}));return[...t,...o]},[]),[n,e])}var Cc;(function(n){n[n.Always=0]="Always",n[n.BeforeDragging=1]="BeforeDragging",n[n.WhileDragging=2]="WhileDragging"})(Cc||(Cc={}));var kh;(function(n){n.Optimized="optimized"})(kh||(kh={}));const f0=new Map;function j2(n,e){let{dragging:t,dependencies:s,config:r}=e;const[o,l]=w.useState(null),{frequency:d,measure:u,strategy:f}=r,g=w.useRef(n),h=S(),b=xc(h),y=w.useCallback(function(_){_===void 0&&(_=[]),!b.current&&l(A=>A===null?_:A.concat(_.filter(C=>!A.includes(C))))},[b]),v=w.useRef(null),x=vc(_=>{if(h&&!t)return f0;if(!_||_===f0||g.current!==n||o!=null){const A=new Map;for(let C of n){if(!C)continue;if(o&&o.length>0&&!o.includes(C.id)&&C.rect.current){A.set(C.id,C.rect.current);continue}const j=C.node.current,E=j?new bh(u(j),j):null;C.rect.current=E,E&&A.set(C.id,E)}return A}return _},[n,o,t,h,u]);return w.useEffect(()=>{g.current=n},[n]),w.useEffect(()=>{h||y()},[t,h]),w.useEffect(()=>{o&&o.length>0&&l(null)},[JSON.stringify(o)]),w.useEffect(()=>{h||typeof d!="number"||v.current!==null||(v.current=setTimeout(()=>{y(),v.current=null},d))},[d,h,y,...s]),{droppableRects:x,measureDroppableContainers:y,measuringScheduled:o!=null};function S(){switch(f){case Cc.Always:return!1;case Cc.BeforeDragging:return t;default:return!t}}}function Ch(n,e){return vc(t=>n?t||(typeof e=="function"?e(n):n):null,[e,n])}function E2(n,e){return Ch(n,e)}function R2(n){let{callback:e,disabled:t}=n;const s=Eu(e),r=w.useMemo(()=>{if(t||typeof window>"u"||typeof window.MutationObserver>"u")return;const{MutationObserver:o}=window;return new o(s)},[s,t]);return w.useEffect(()=>()=>r?.disconnect(),[r]),r}function Ou(n){let{callback:e,disabled:t}=n;const s=Eu(e),r=w.useMemo(()=>{if(t||typeof window>"u"||typeof window.ResizeObserver>"u")return;const{ResizeObserver:o}=window;return new o(s)},[t]);return w.useEffect(()=>()=>r?.disconnect(),[r]),r}function A2(n){return new bh(Fi(n),n)}function p0(n,e,t){e===void 0&&(e=A2);const[s,r]=w.useState(null);function o(){r(u=>{if(!n)return null;if(n.isConnected===!1){var f;return(f=u??t)!=null?f:null}const g=e(n);return JSON.stringify(u)===JSON.stringify(g)?u:g})}const l=R2({callback(u){if(n)for(const f of u){const{type:g,target:h}=f;if(g==="childList"&&h instanceof HTMLElement&&h.contains(n)){o();break}}}}),d=Ou({callback:o});return Sr(()=>{o(),n?(d?.observe(n),l?.observe(document.body,{childList:!0,subtree:!0})):(d?.disconnect(),l?.disconnect())},[n]),s}function T2(n){const e=Ch(n);return Zw(n,e)}const g0=[];function $2(n){const e=w.useRef(n),t=vc(s=>n?s&&s!==g0&&n&&e.current&&n.parentNode===e.current.parentNode?s:Du(n):g0,[n]);return w.useEffect(()=>{e.current=n},[n]),t}function N2(n){const[e,t]=w.useState(null),s=w.useRef(n),r=w.useCallback(o=>{const l=mh(o.target);l&&t(d=>d?(d.set(l,yh(l)),new Map(d)):null)},[]);return w.useEffect(()=>{const o=s.current;if(n!==o){l(o);const d=n.map(u=>{const f=mh(u);return f?(f.addEventListener("scroll",r,{passive:!0}),[f,yh(f)]):null}).filter(u=>u!=null);t(d.length?new Map(d):null),s.current=n}return()=>{l(n),l(o)};function l(d){d.forEach(u=>{const f=mh(u);f?.removeEventListener("scroll",r)})}},[r,n]),w.useMemo(()=>n.length?e?Array.from(e.values()).reduce((o,l)=>qi(o,l),kr):a0(n):kr,[n,e])}function h0(n,e){e===void 0&&(e=[]);const t=w.useRef(null);return w.useEffect(()=>{t.current=null},e),w.useEffect(()=>{const s=n!==kr;s&&!t.current&&(t.current=n),!s&&t.current&&(t.current=null)},[n]),t.current?_c(n,t.current):kr}function D2(n){w.useEffect(()=>{if(!ju)return;const e=n.map(t=>{let{sensor:s}=t;return s.setup==null?void 0:s.setup()});return()=>{for(const t of e)t?.()}},n.map(e=>{let{sensor:t}=e;return t}))}function I2(n,e){return w.useMemo(()=>n.reduce((t,s)=>{let{eventName:r,handler:o}=s;return t[r]=l=>{o(l,e)},t},{}),[n,e])}function m0(n){return w.useMemo(()=>n?o2(n):null,[n])}const y0=[];function L2(n,e){e===void 0&&(e=Fi);const[t]=n,s=m0(t?_s(t):null),[r,o]=w.useState(y0);function l(){o(()=>n.length?n.map(u=>r0(u)?s:new bh(e(u),u)):y0)}const d=Ou({callback:l});return Sr(()=>{d?.disconnect(),l(),n.forEach(u=>d?.observe(u))},[n]),r}function b0(n){if(!n)return null;if(n.children.length>1)return n;const e=n.children[0];return bc(e)?e:n}function O2(n){let{measure:e}=n;const[t,s]=w.useState(null),r=w.useCallback(f=>{for(const{target:g}of f)if(bc(g)){s(h=>{const b=e(g);return h?{...h,width:b.width,height:b.height}:b});break}},[e]),o=Ou({callback:r}),l=w.useCallback(f=>{const g=b0(f);o?.disconnect(),g&&o?.observe(g),s(g?e(g):null)},[e,o]),[d,u]=Ru(l);return w.useMemo(()=>({nodeRef:d,rect:t,setRef:u}),[t,d,u])}const M2=[{sensor:Iu,options:{}},{sensor:vh,options:{}}],z2={current:{}},Mu={draggable:{measure:e0},droppable:{measure:e0,strategy:Cc.WhileDragging,frequency:kh.Optimized},dragOverlay:{measure:Fi}};class jc extends Map{get(e){var t;return e!=null&&(t=super.get(e))!=null?t:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter(e=>{let{disabled:t}=e;return!t})}getNodeFor(e){var t,s;return(t=(s=this.get(e))==null?void 0:s.node.current)!=null?t:void 0}}const P2={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new jc,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:Nu},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:Mu,measureDroppableContainers:Nu,windowRect:null,measuringScheduled:!1},x0={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:Nu,draggableNodes:new Map,over:null,measureDroppableContainers:Nu},Ec=w.createContext(x0),v0=w.createContext(P2);function B2(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new jc}}}function H2(n,e){switch(e.type){case Yn.DragStart:return{...n,draggable:{...n.draggable,initialCoordinates:e.initialCoordinates,active:e.active}};case Yn.DragMove:return n.draggable.active==null?n:{...n,draggable:{...n.draggable,translate:{x:e.coordinates.x-n.draggable.initialCoordinates.x,y:e.coordinates.y-n.draggable.initialCoordinates.y}}};case Yn.DragEnd:case Yn.DragCancel:return{...n,draggable:{...n.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case Yn.RegisterDroppable:{const{element:t}=e,{id:s}=t,r=new jc(n.droppable.containers);return r.set(s,t),{...n,droppable:{...n.droppable,containers:r}}}case Yn.SetDroppableDisabled:{const{id:t,key:s,disabled:r}=e,o=n.droppable.containers.get(t);if(!o||s!==o.key)return n;const l=new jc(n.droppable.containers);return l.set(t,{...o,disabled:r}),{...n,droppable:{...n.droppable,containers:l}}}case Yn.UnregisterDroppable:{const{id:t,key:s}=e,r=n.droppable.containers.get(t);if(!r||s!==r.key)return n;const o=new jc(n.droppable.containers);return o.delete(t),{...n,droppable:{...n.droppable,containers:o}}}default:return n}}function W2(n){let{disabled:e}=n;const{active:t,activatorEvent:s,draggableNodes:r}=w.useContext(Ec),o=Au(s),l=Au(t?.id);return w.useEffect(()=>{if(!e&&!s&&o&&l!=null){if(!Tu(o)||document.activeElement===o.target)return;const d=r.get(l);if(!d)return;const{activatorNode:u,node:f}=d;if(!u.current&&!f.current)return;requestAnimationFrame(()=>{for(const g of[u.current,f.current]){if(!g)continue;const h=ON(g);if(h){h.focus();break}}})}},[s,e,r,l,o]),null}function w0(n,e){let{transform:t,...s}=e;return n!=null&&n.length?n.reduce((r,o)=>o({transform:r,...s}),t):t}function U2(n){return w.useMemo(()=>({draggable:{...Mu.draggable,...n?.draggable},droppable:{...Mu.droppable,...n?.droppable},dragOverlay:{...Mu.dragOverlay,...n?.dragOverlay}}),[n?.draggable,n?.droppable,n?.dragOverlay])}function q2(n){let{activeNode:e,measure:t,initialRect:s,config:r=!0}=n;const o=w.useRef(!1),{x:l,y:d}=typeof r=="boolean"?{x:r,y:r}:r;Sr(()=>{if(!l&&!d||!e){o.current=!1;return}if(o.current||!s)return;const f=e?.node.current;if(!f||f.isConnected===!1)return;const g=t(f),h=Zw(g,s);if(l||(h.x=0),d||(h.y=0),o.current=!0,Math.abs(h.x)>0||Math.abs(h.y)>0){const b=t0(f);b&&b.scrollBy({top:h.y,left:h.x})}},[e,l,d,s,t])}const zu=w.createContext({...kr,scaleX:1,scaleY:1});var Yo;(function(n){n[n.Uninitialized=0]="Uninitialized",n[n.Initializing=1]="Initializing",n[n.Initialized=2]="Initialized"})(Yo||(Yo={}));const _0=w.memo(function(e){var t,s,r,o;let{id:l,accessibility:d,autoScroll:u=!0,children:f,sensors:g=M2,collisionDetection:h=JN,measuring:b,modifiers:y,...v}=e;const x=w.useReducer(H2,void 0,B2),[S,_]=x,[A,C]=WN(),[j,E]=w.useState(Yo.Uninitialized),T=j===Yo.Initialized,{draggable:{active:D,nodes:I,translate:W},droppable:{containers:z}}=S,H=D!=null?I.get(D):null,G=w.useRef({initial:null,translated:null}),F=w.useMemo(()=>{var ve;return D!=null?{id:D,data:(ve=H?.data)!=null?ve:z2,rect:G}:null},[D,H]),Z=w.useRef(null),[Y,U]=w.useState(null),[B,te]=w.useState(null),q=xc(v,Object.values(v)),M=wc("DndDescribedBy",l),N=w.useMemo(()=>z.getEnabled(),[z]),V=U2(b),{droppableRects:ee,measureDroppableContainers:se,measuringScheduled:re}=j2(N,{dragging:T,dependencies:[W.x,W.y],config:V.droppable}),pe=k2(I,D),je=w.useMemo(()=>B?$u(B):null,[B]),me=_e(),ce=E2(pe,V.draggable.measure);q2({activeNode:D!=null?I.get(D):null,config:me.layoutShiftCompensation,initialRect:ce,measure:V.draggable.measure});const be=p0(pe,V.draggable.measure,ce),Be=p0(pe?pe.parentElement:null),fe=w.useRef({activatorEvent:null,active:null,activeNode:pe,collisionRect:null,collisions:null,droppableRects:ee,draggableNodes:I,draggingNode:null,draggingNodeRect:null,droppableContainers:z,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),De=z.getNodeFor((t=fe.current.over)==null?void 0:t.id),Fe=O2({measure:V.dragOverlay.measure}),mt=(s=Fe.nodeRef.current)!=null?s:pe,ft=T?(r=Fe.rect)!=null?r:be:null,xt=!!(Fe.nodeRef.current&&Fe.rect),Ot=T2(xt?null:be),St=m0(mt?_s(mt):null),kt=$2(T?De??pe:null),Vt=L2(kt),Nt=w0(y,{transform:{x:W.x-Ot.x,y:W.y-Ot.y,scaleX:1,scaleY:1},activatorEvent:B,active:F,activeNodeRect:be,containerNodeRect:Be,draggingNodeRect:ft,over:fe.current.over,overlayNodeRect:Fe.rect,scrollableAncestors:kt,scrollableAncestorRects:Vt,windowRect:St}),tn=je?qi(je,W):null,Qe=N2(kt),Pe=h0(Qe),et=h0(Qe,[be]),Le=qi(Nt,Pe),He=ft?n2(ft,Nt):null,Ve=F&&He?h({active:F,collisionRect:He,droppableRects:ee,droppableContainers:N,pointerCoordinates:tn}):null,Je=Xw(Ve,"id"),[jt,At]=w.useState(null),Rt=xt?Nt:qi(Nt,et),xe=e2(Rt,(o=jt?.rect)!=null?o:null,be),We=w.useRef(null),Q=w.useCallback((ve,Re)=>{let{sensor:Ye,options:it}=Re;if(Z.current==null)return;const ot=I.get(Z.current);if(!ot)return;const tt=ve.nativeEvent,at=new Ye({active:Z.current,activeNode:ot,event:tt,options:it,context:fe,onAbort(Xe){if(!I.get(Xe))return;const{onDragAbort:pt}=q.current,Lt={id:Xe};pt?.(Lt),A({type:"onDragAbort",event:Lt})},onPending(Xe,st,pt,Lt){if(!I.get(Xe))return;const{onDragPending:Tn}=q.current,$n={id:Xe,constraint:st,initialCoordinates:pt,offset:Lt};Tn?.($n),A({type:"onDragPending",event:$n})},onStart(Xe){const st=Z.current;if(st==null)return;const pt=I.get(st);if(!pt)return;const{onDragStart:Lt}=q.current,an={activatorEvent:tt,active:{id:st,data:pt.data,rect:G}};Vr.unstable_batchedUpdates(()=>{Lt?.(an),E(Yo.Initializing),_({type:Yn.DragStart,initialCoordinates:Xe,active:st}),A({type:"onDragStart",event:an}),U(We.current),te(tt)})},onMove(Xe){_({type:Yn.DragMove,coordinates:Xe})},onEnd:nt(Yn.DragEnd),onCancel:nt(Yn.DragCancel)});We.current=at;function nt(Xe){return async function(){const{active:pt,collisions:Lt,over:an,scrollAdjustedTranslate:Tn}=fe.current;let $n=null;if(pt&&Tn){const{cancelDrop:Cs}=q.current;$n={activatorEvent:tt,active:pt,collisions:Lt,delta:Tn,over:an},Xe===Yn.DragEnd&&typeof Cs=="function"&&await Promise.resolve(Cs($n))&&(Xe=Yn.DragCancel)}Z.current=null,Vr.unstable_batchedUpdates(()=>{_({type:Xe}),E(Yo.Uninitialized),At(null),U(null),te(null),We.current=null;const Cs=Xe===Yn.DragEnd?"onDragEnd":"onDragCancel";if($n){const Wn=q.current[Cs];Wn?.($n),A({type:Cs,event:$n})}})}}},[I]),ke=w.useCallback((ve,Re)=>(Ye,it)=>{const ot=Ye.nativeEvent,tt=I.get(it);if(Z.current!==null||!tt||ot.dndKit||ot.defaultPrevented)return;const at={active:tt};ve(Ye,Re.options,at)===!0&&(ot.dndKit={capturedBy:Re.sensor},Z.current=it,Q(Ye,Re))},[I,Q]),ge=C2(g,ke);D2(g),Sr(()=>{be&&j===Yo.Initializing&&E(Yo.Initialized)},[be,j]),w.useEffect(()=>{const{onDragMove:ve}=q.current,{active:Re,activatorEvent:Ye,collisions:it,over:ot}=fe.current;if(!Re||!Ye)return;const tt={active:Re,activatorEvent:Ye,collisions:it,delta:{x:Le.x,y:Le.y},over:ot};Vr.unstable_batchedUpdates(()=>{ve?.(tt),A({type:"onDragMove",event:tt})})},[Le.x,Le.y]),w.useEffect(()=>{const{active:ve,activatorEvent:Re,collisions:Ye,droppableContainers:it,scrollAdjustedTranslate:ot}=fe.current;if(!ve||Z.current==null||!Re||!ot)return;const{onDragOver:tt}=q.current,at=it.get(Je),nt=at&&at.rect.current?{id:at.id,rect:at.rect.current,data:at.data,disabled:at.disabled}:null,Xe={active:ve,activatorEvent:Re,collisions:Ye,delta:{x:ot.x,y:ot.y},over:nt};Vr.unstable_batchedUpdates(()=>{At(nt),tt?.(Xe),A({type:"onDragOver",event:Xe})})},[Je]),Sr(()=>{fe.current={activatorEvent:B,active:F,activeNode:pe,collisionRect:He,collisions:Ve,droppableRects:ee,draggableNodes:I,draggingNode:mt,draggingNodeRect:ft,droppableContainers:z,over:jt,scrollableAncestors:kt,scrollAdjustedTranslate:Le},G.current={initial:ft,translated:He}},[F,pe,Ve,He,I,mt,ft,ee,z,jt,kt,Le]),w2({...me,delta:W,draggingRect:He,pointerCoordinates:tn,scrollableAncestors:kt,scrollableAncestorRects:Vt});const X=w.useMemo(()=>({active:F,activeNode:pe,activeNodeRect:be,activatorEvent:B,collisions:Ve,containerNodeRect:Be,dragOverlay:Fe,draggableNodes:I,droppableContainers:z,droppableRects:ee,over:jt,measureDroppableContainers:se,scrollableAncestors:kt,scrollableAncestorRects:Vt,measuringConfiguration:V,measuringScheduled:re,windowRect:St}),[F,pe,be,B,Ve,Be,Fe,I,z,ee,jt,se,kt,Vt,V,re,St]),he=w.useMemo(()=>({activatorEvent:B,activators:ge,active:F,activeNodeRect:be,ariaDescribedById:{draggable:M},dispatch:_,draggableNodes:I,over:jt,measureDroppableContainers:se}),[B,ge,F,be,_,M,I,jt,se]);return qe.createElement(Gw.Provider,{value:C},qe.createElement(Ec.Provider,{value:he},qe.createElement(v0.Provider,{value:X},qe.createElement(zu.Provider,{value:xe},f)),qe.createElement(W2,{disabled:d?.restoreFocus===!1})),qe.createElement(FN,{...d,hiddenTextDescribedById:M}));function _e(){const ve=Y?.autoScrollEnabled===!1,Re=typeof u=="object"?u.enabled===!1:u===!1,Ye=T&&!ve&&!Re;return typeof u=="object"?{...u,enabled:Ye}:{enabled:Ye}}}),F2=w.createContext(null),S0="button",V2="Draggable";function k0(n){let{id:e,data:t,disabled:s=!1,attributes:r}=n;const o=wc(V2),{activators:l,activatorEvent:d,active:u,activeNodeRect:f,ariaDescribedById:g,draggableNodes:h,over:b}=w.useContext(Ec),{role:y=S0,roleDescription:v="draggable",tabIndex:x=0}=r??{},S=u?.id===e,_=w.useContext(S?zu:F2),[A,C]=Ru(),[j,E]=Ru(),T=I2(l,e),D=xc(t);Sr(()=>(h.set(e,{id:e,key:o,node:A,activatorNode:j,data:D}),()=>{const W=h.get(e);W&&W.key===o&&h.delete(e)}),[h,e]);const I=w.useMemo(()=>({role:y,tabIndex:x,"aria-disabled":s,"aria-pressed":S&&y===S0?!0:void 0,"aria-roledescription":v,"aria-describedby":g.draggable}),[s,y,x,S,v,g.draggable]);return{active:u,activatorEvent:d,activeNodeRect:f,attributes:I,isDragging:S,listeners:s?void 0:T,node:A,over:b,setNodeRef:C,setActivatorNodeRef:E,transform:_}}function C0(){return w.useContext(v0)}const K2="Droppable",G2={timeout:25};function j0(n){let{data:e,disabled:t=!1,id:s,resizeObserverConfig:r}=n;const o=wc(K2),{active:l,dispatch:d,over:u,measureDroppableContainers:f}=w.useContext(Ec),g=w.useRef({disabled:t}),h=w.useRef(!1),b=w.useRef(null),y=w.useRef(null),{disabled:v,updateMeasurementsFor:x,timeout:S}={...G2,...r},_=xc(x??s),A=w.useCallback(()=>{if(!h.current){h.current=!0;return}y.current!=null&&clearTimeout(y.current),y.current=setTimeout(()=>{f(Array.isArray(_.current)?_.current:[_.current]),y.current=null},S)},[S]),C=Ou({callback:A,disabled:v||!l}),j=w.useCallback((I,W)=>{C&&(W&&(C.unobserve(W),h.current=!1),I&&C.observe(I))},[C]),[E,T]=Ru(j),D=xc(e);return w.useEffect(()=>{!C||!E.current||(C.disconnect(),h.current=!1,C.observe(E.current))},[E,C]),w.useEffect(()=>(d({type:Yn.RegisterDroppable,element:{id:s,key:o,disabled:t,node:E,rect:b,data:D}}),()=>d({type:Yn.UnregisterDroppable,key:o,id:s})),[s]),w.useEffect(()=>{t!==g.current.disabled&&(d({type:Yn.SetDroppableDisabled,id:s,key:o,disabled:t}),g.current.disabled=t)},[s,o,t,d]),{active:l,rect:b,isOver:u?.id===s,node:E,over:u,setNodeRef:T}}function Y2(n){let{animation:e,children:t}=n;const[s,r]=w.useState(null),[o,l]=w.useState(null),d=Au(t);return!t&&!s&&d&&r(d),Sr(()=>{if(!o)return;const u=s?.key,f=s?.props.id;if(u==null||f==null){r(null);return}Promise.resolve(e(f,o)).then(()=>{r(null)})},[e,s,o]),qe.createElement(qe.Fragment,null,t,s?w.cloneElement(s,{ref:l}):null)}const X2={x:0,y:0,scaleX:1,scaleY:1};function J2(n){let{children:e}=n;return qe.createElement(Ec.Provider,{value:x0},qe.createElement(zu.Provider,{value:X2},e))}const Z2={position:"fixed",touchAction:"none"},Q2=n=>Tu(n)?"transform 250ms ease":void 0,eD=w.forwardRef((n,e)=>{let{as:t,activatorEvent:s,adjustScale:r,children:o,className:l,rect:d,style:u,transform:f,transition:g=Q2}=n;if(!d)return null;const h=r?f:{...f,scaleX:1,scaleY:1},b={...Z2,width:d.width,height:d.height,top:d.top,left:d.left,transform:Go.Transform.toString(h),transformOrigin:r&&s?VN(s,d):void 0,transition:typeof g=="function"?g(s):g,...u};return qe.createElement(t,{className:l,style:b,ref:e},o)}),tD={duration:250,easing:"ease",keyframes:n=>{let{transform:{initial:e,final:t}}=n;return[{transform:Go.Transform.toString(e)},{transform:Go.Transform.toString(t)}]},sideEffects:(n=>e=>{let{active:t,dragOverlay:s}=e;const r={},{styles:o,className:l}=n;if(o!=null&&o.active)for(const[d,u]of Object.entries(o.active))u!==void 0&&(r[d]=t.node.style.getPropertyValue(d),t.node.style.setProperty(d,u));if(o!=null&&o.dragOverlay)for(const[d,u]of Object.entries(o.dragOverlay))u!==void 0&&s.node.style.setProperty(d,u);return l!=null&&l.active&&t.node.classList.add(l.active),l!=null&&l.dragOverlay&&s.node.classList.add(l.dragOverlay),function(){for(const[u,f]of Object.entries(r))t.node.style.setProperty(u,f);l!=null&&l.active&&t.node.classList.remove(l.active)}})({styles:{active:{opacity:"0"}}})};function nD(n){let{config:e,draggableNodes:t,droppableContainers:s,measuringConfiguration:r}=n;return Eu((o,l)=>{if(e===null)return;const d=t.get(o);if(!d)return;const u=d.node.current;if(!u)return;const f=b0(l);if(!f)return;const{transform:g}=_s(l).getComputedStyle(l),h=Qw(g);if(!h)return;const b=typeof e=="function"?e:sD(e);return i0(u,r.draggable.measure),b({active:{id:o,data:d.data,node:u,rect:r.draggable.measure(u)},draggableNodes:t,dragOverlay:{node:l,rect:r.dragOverlay.measure(f)},droppableContainers:s,measuringConfiguration:r,transform:h})})}function sD(n){const{duration:e,easing:t,sideEffects:s,keyframes:r}={...tD,...n};return o=>{let{active:l,dragOverlay:d,transform:u,...f}=o;if(!e)return;const g={x:d.rect.left-l.rect.left,y:d.rect.top-l.rect.top},h={scaleX:u.scaleX!==1?l.rect.width*u.scaleX/d.rect.width:1,scaleY:u.scaleY!==1?l.rect.height*u.scaleY/d.rect.height:1},b={x:u.x-g.x,y:u.y-g.y,...h},y=r({...f,active:l,dragOverlay:d,transform:{initial:u,final:b}}),[v]=y,x=y[y.length-1];if(JSON.stringify(v)===JSON.stringify(x))return;const S=s?.({active:l,dragOverlay:d,...f}),_=d.node.animate(y,{duration:e,easing:t,fill:"forwards"});return new Promise(A=>{_.onfinish=()=>{S?.(),A()}})}}let E0=0;function rD(n){return w.useMemo(()=>{if(n!=null)return E0++,E0},[n])}const oD=qe.memo(n=>{let{adjustScale:e=!1,children:t,dropAnimation:s,style:r,transition:o,modifiers:l,wrapperElement:d="div",className:u,zIndex:f=999}=n;const{activatorEvent:g,active:h,activeNodeRect:b,containerNodeRect:y,draggableNodes:v,droppableContainers:x,dragOverlay:S,over:_,measuringConfiguration:A,scrollableAncestors:C,scrollableAncestorRects:j,windowRect:E}=C0(),T=w.useContext(zu),D=rD(h?.id),I=w0(l,{activatorEvent:g,active:h,activeNodeRect:b,containerNodeRect:y,draggingNodeRect:S.rect,over:_,overlayNodeRect:S.rect,scrollableAncestors:C,scrollableAncestorRects:j,transform:T,windowRect:E}),W=Ch(b),z=nD({config:s,draggableNodes:v,droppableContainers:x,measuringConfiguration:A}),H=W?S.setRef:void 0;return qe.createElement(J2,null,qe.createElement(Y2,{animation:z},h&&D?qe.createElement(eD,{key:D,id:h.id,ref:H,as:d,activatorEvent:g,adjustScale:e,className:u,transition:o,rect:W,style:{zIndex:f,...r},transform:I},t):null))});function jh(n,e,t){const s=n.slice();return s.splice(t<0?s.length+t:t,0,s.splice(e,1)[0]),s}function aD(n,e){return n.reduce((t,s,r)=>{const o=e.get(s);return o&&(t[r]=o),t},Array(n.length))}function Pu(n){return n!==null&&n>=0}function iD(n,e){if(n===e)return!0;if(n.length!==e.length)return!1;for(let t=0;t<n.length;t++)if(n[t]!==e[t])return!1;return!0}function lD(n){return typeof n=="boolean"?{draggable:n,droppable:n}:n}const Bu={scaleX:1,scaleY:1},cD=n=>{var e;let{rects:t,activeNodeRect:s,activeIndex:r,overIndex:o,index:l}=n;const d=(e=t[r])!=null?e:s;if(!d)return null;const u=dD(t,l,r);if(l===r){const f=t[o];return f?{x:r<o?f.left+f.width-(d.left+d.width):f.left-d.left,y:0,...Bu}:null}return l>r&&l<=o?{x:-d.width-u,y:0,...Bu}:l<r&&l>=o?{x:d.width+u,y:0,...Bu}:{x:0,y:0,...Bu}};function dD(n,e,t){const s=n[e],r=n[e-1],o=n[e+1];return!s||!r&&!o?0:t<e?r?s.left-(r.left+r.width):o.left-(s.left+s.width):o?o.left-(s.left+s.width):s.left-(r.left+r.width)}const Eh=n=>{let{rects:e,activeIndex:t,overIndex:s,index:r}=n;const o=jh(e,s,t),l=e[r],d=o[r];return!d||!l?null:{x:d.left-l.left,y:d.top-l.top,scaleX:d.width/l.width,scaleY:d.height/l.height}},Hu={scaleX:1,scaleY:1},uD=n=>{var e;let{activeIndex:t,activeNodeRect:s,index:r,rects:o,overIndex:l}=n;const d=(e=o[t])!=null?e:s;if(!d)return null;if(r===t){const f=o[l];return f?{x:0,y:t<l?f.top+f.height-(d.top+d.height):f.top-d.top,...Hu}:null}const u=fD(o,r,t);return r>t&&r<=l?{x:0,y:-d.height-u,...Hu}:r<t&&r>=l?{x:0,y:d.height+u,...Hu}:{x:0,y:0,...Hu}};function fD(n,e,t){const s=n[e],r=n[e-1],o=n[e+1];return s?t<e?r?s.top-(r.top+r.height):o?o.top-(s.top+s.height):0:o?o.top-(s.top+s.height):r?s.top-(r.top+r.height):0:0}const R0="Sortable",A0=qe.createContext({activeIndex:-1,containerId:R0,disableTransforms:!1,items:[],overIndex:-1,useDragOverlay:!1,sortedRects:[],strategy:Eh,disabled:{draggable:!1,droppable:!1}});function pD(n){let{children:e,id:t,items:s,strategy:r=Eh,disabled:o=!1}=n;const{active:l,dragOverlay:d,droppableRects:u,over:f,measureDroppableContainers:g}=C0(),h=wc(R0,t),b=d.rect!==null,y=w.useMemo(()=>s.map(T=>typeof T=="object"&&"id"in T?T.id:T),[s]),v=l!=null,x=l?y.indexOf(l.id):-1,S=f?y.indexOf(f.id):-1,_=w.useRef(y),A=!iD(y,_.current),C=S!==-1&&x===-1||A,j=lD(o);Sr(()=>{A&&v&&g(y)},[A,y,v,g]),w.useEffect(()=>{_.current=y},[y]);const E=w.useMemo(()=>({activeIndex:x,containerId:h,disabled:j,disableTransforms:C,items:y,overIndex:S,useDragOverlay:b,sortedRects:aD(y,u),strategy:r}),[x,h,j.draggable,j.droppable,C,y,S,u,b,r]);return qe.createElement(A0.Provider,{value:E},e)}const gD=n=>{let{id:e,items:t,activeIndex:s,overIndex:r}=n;return jh(t,s,r).indexOf(e)},hD=n=>{let{containerId:e,isSorting:t,wasDragging:s,index:r,items:o,newIndex:l,previousItems:d,previousContainerId:u,transition:f}=n;return!f||!s||d!==o&&r===l?!1:t?!0:l!==r&&e===u},mD={duration:200,easing:"ease"},T0="transform",yD=Go.Transition.toString({property:T0,duration:0,easing:"linear"}),bD={roleDescription:"sortable"};function xD(n){let{disabled:e,index:t,node:s,rect:r}=n;const[o,l]=w.useState(null),d=w.useRef(t);return Sr(()=>{if(!e&&t!==d.current&&s.current){const u=r.current;if(u){const f=Fi(s.current,{ignoreTransform:!0}),g={x:u.left-f.left,y:u.top-f.top,scaleX:u.width/f.width,scaleY:u.height/f.height};(g.x||g.y)&&l(g)}}t!==d.current&&(d.current=t)},[e,t,s,r]),w.useEffect(()=>{o&&l(null)},[o]),o}function vD(n){let{animateLayoutChanges:e=hD,attributes:t,disabled:s,data:r,getNewIndex:o=gD,id:l,strategy:d,resizeObserverConfig:u,transition:f=mD}=n;const{items:g,containerId:h,activeIndex:b,disabled:y,disableTransforms:v,sortedRects:x,overIndex:S,useDragOverlay:_,strategy:A}=w.useContext(A0),C=wD(s,y),j=g.indexOf(l),E=w.useMemo(()=>({sortable:{containerId:h,index:j,items:g},...r}),[h,r,j,g]),T=w.useMemo(()=>g.slice(g.indexOf(l)),[g,l]),{rect:D,node:I,isOver:W,setNodeRef:z}=j0({id:l,data:E,disabled:C.droppable,resizeObserverConfig:{updateMeasurementsFor:T,...u}}),{active:H,activatorEvent:G,activeNodeRect:F,attributes:Z,setNodeRef:Y,listeners:U,isDragging:B,over:te,setActivatorNodeRef:q,transform:M}=k0({id:l,data:E,attributes:{...bD,...t},disabled:C.draggable}),N=NN(z,Y),V=!!H,ee=V&&!v&&Pu(b)&&Pu(S),se=!_&&B,re=se&&ee?M:null,je=ee?re??(d??A)({rects:x,activeNodeRect:F,activeIndex:b,overIndex:S,index:j}):null,me=Pu(b)&&Pu(S)?o({id:l,items:g,activeIndex:b,overIndex:S}):j,ce=H?.id,be=w.useRef({activeId:ce,items:g,newIndex:me,containerId:h}),Be=g!==be.current.items,fe=e({active:H,containerId:h,isDragging:B,isSorting:V,id:l,index:j,items:g,newIndex:be.current.newIndex,previousItems:be.current.items,previousContainerId:be.current.containerId,transition:f,wasDragging:be.current.activeId!=null}),De=xD({disabled:!fe,index:j,node:I,rect:D});return w.useEffect(()=>{V&&be.current.newIndex!==me&&(be.current.newIndex=me),h!==be.current.containerId&&(be.current.containerId=h),g!==be.current.items&&(be.current.items=g)},[V,me,h,g]),w.useEffect(()=>{if(ce===be.current.activeId)return;if(ce!=null&&be.current.activeId==null){be.current.activeId=ce;return}const mt=setTimeout(()=>{be.current.activeId=ce},50);return()=>clearTimeout(mt)},[ce]),{active:H,activeIndex:b,attributes:Z,data:E,rect:D,index:j,newIndex:me,items:g,isOver:W,isSorting:V,isDragging:B,listeners:U,node:I,overIndex:S,over:te,setNodeRef:N,setActivatorNodeRef:q,setDroppableNodeRef:z,setDraggableNodeRef:Y,transform:De??je,transition:Fe()};function Fe(){if(De||Be&&be.current.newIndex===j)return yD;if(!(se&&!Tu(G)||!f)&&(V||fe))return Go.Transition.toString({...f,property:T0})}}function wD(n,e){var t,s;return typeof n=="boolean"?{draggable:n,droppable:!1}:{draggable:(t=n?.draggable)!=null?t:e.draggable,droppable:(s=n?.droppable)!=null?s:e.droppable}}function Wu(n){if(!n)return!1;const e=n.data.current;return!!(e&&"sortable"in e&&typeof e.sortable=="object"&&"containerId"in e.sortable&&"items"in e.sortable&&"index"in e.sortable)}const _D=[Wt.Down,Wt.Right,Wt.Up,Wt.Left],SD=(n,e)=>{let{context:{active:t,collisionRect:s,droppableRects:r,droppableContainers:o,over:l,scrollableAncestors:d}}=e;if(_D.includes(n.code)){if(n.preventDefault(),!t||!s)return;const u=[];o.getEnabled().forEach(h=>{if(!h||h!=null&&h.disabled)return;const b=r.get(h.id);if(b)switch(n.code){case Wt.Down:s.top<b.top&&u.push(h);break;case Wt.Up:s.top>b.top&&u.push(h);break;case Wt.Left:s.left>b.left&&u.push(h);break;case Wt.Right:s.left<b.left&&u.push(h);break}});const f=YN({collisionRect:s,droppableRects:r,droppableContainers:u});let g=Xw(f,"id");if(g===l?.id&&f.length>1&&(g=f[1].id),g!=null){const h=o.get(t.id),b=o.get(g),y=b?r.get(b.id):null,v=b?.node.current;if(v&&y&&h&&b){const S=Du(v).some((T,D)=>d[D]!==T),_=$0(h,b),A=kD(h,b),C=S||!_?{x:0,y:0}:{x:A?s.width-y.width:0,y:A?s.height-y.height:0},j={x:y.left,y:y.top};return C.x&&C.y?j:_c(j,C)}}}};function $0(n,e){return!Wu(n)||!Wu(e)?!1:n.data.current.sortable.containerId===e.data.current.sortable.containerId}function kD(n,e){return!Wu(n)||!Wu(e)||!$0(n,e)?!1:n.data.current.sortable.index<e.data.current.sortable.index}const CD={verticalList:uD,horizontalList:cD,rectSorting:Eh},jD=({items:n,itemKey:e,strategy:t,children:s,onSortEnd:r,onSortStart:o,sortVersion:l})=>{const d=w.useId(),u=w.useRef({inProgress:!1,lastSortTime:0,lastActiveId:null}),f=Yw(fh(Iu,{activationConstraint:{distance:5}}),fh(vh,{coordinateGetter:SD})),g=w.useCallback(y=>{u.current={inProgress:!0,lastSortTime:Date.now(),lastActiveId:y.active.id},o?.({activeId:y.active.id})},[o]),h=w.useCallback(y=>{const{active:v,over:x}=y,S=Date.now();if(!x||v.id===x.id){u.current.inProgress=!1;return}const{lastSortTime:_,lastActiveId:A,inProgress:C}=u.current;if(A===v.id&&S-_<500&&!C)return;u.current={inProgress:!1,lastSortTime:S,lastActiveId:v.id};const j=n.findIndex(T=>String(T[e])===String(v.id)),E=n.findIndex(T=>String(T[e])===String(x.id));if(j!==-1&&E!==-1&&j!==E){const T=jh(n,j,E);r?.(T,{oldIndex:j,newIndex:E})}},[n,e,r]),b=n.map(y=>String(y[e]));return a.jsx(_0,{id:d,sensors:f,collisionDetection:GN,onDragStart:g,onDragEnd:h,children:a.jsx(pD,{items:b,strategy:CD[t],children:s})},l!==void 0?`${d}-v${l}`:d)},N0=w.createContext(null),ED=({value:n,children:e})=>a.jsx(N0.Provider,{value:n,children:e}),RD=()=>w.useContext(N0),AD=({id:n,handle:e,as:t="div",children:s})=>{const{attributes:r,listeners:o,setNodeRef:l,transform:d,transition:u,isDragging:f}=vD({id:n}),g={transform:Go.Transform.toString(d),transition:u,opacity:f?.5:1,position:"relative"};return a.jsx(t,{ref:l,style:g,...r,...e?{}:o,"data-sortable-item":!0,"data-sortable-id":String(n),"data-dragging":f,children:a.jsx(ED,{value:{listeners:o,handle:e,isDragging:f},children:s})})},Ft=Ht("DynamicRenderer");function mo(){try{return window.G7Core?.devTools}catch{return}}function Rh(n,e,t,s){if(typeof n=="string"){if(/\$t:[a-zA-Z_][a-zA-Z0-9_.\-]*/.test(n))try{return e.resolveTranslations(n,t,s)}catch{return n}return n}if(Array.isArray(n))return n.map(r=>Rh(r,e,t,s));if(n&&typeof n=="object"){const r={};for(const[o,l]of Object.entries(n))r[o]=Rh(l,e,t,s);return r}return n}function TD(n){const e=Object.keys(n);return e.length>0&&e.every(t=>/^\d+$/.test(t))}const Cr=(n,e)=>{const t=["errors"],s={...n};for(const r of Object.keys(e)){const o=e[r],l=n[r];if(o===null){s[r]=null;continue}if(t.includes(r)){s[r]=o;continue}if(Array.isArray(o)){s[r]=o;continue}if(Array.isArray(l)&&o!==null&&typeof o=="object"&&!Array.isArray(o)&&TD(o)){const d=Object.keys(o).map(f=>parseInt(f,10));if((d.length>0?Math.max(...d):0)>=l.length+d.length+10)s[r]={...o};else{const f=[...l];for(const[g,h]of Object.entries(o)){const b=parseInt(g,10);b>=0&&b<f.length?h!==null&&typeof h=="object"&&!Array.isArray(h)&&f[b]!==null&&typeof f[b]=="object"?f[b]=Cr(f[b],h):f[b]=h:b>=f.length&&(f[b]=h)}s[r]=f}}else o!==null&&typeof o=="object"&&l!==null&&typeof l=="object"&&!Array.isArray(l)?s[r]=Cr(l,o):s[r]=o}return s},D0=(n,e)=>{const t={...n};for(const s of Object.keys(e)){if(!(s in t))continue;const r=e[s],o=t[s];if(r!==null&&typeof r=="object"&&!Array.isArray(r)&&o!==null&&typeof o=="object"&&!Array.isArray(o)){const l=D0(o,r);Object.keys(l).length===0?delete t[s]:t[s]=l}else delete t[s]}return t},$D=n=>{const e={},t=n.split(";").filter(s=>s.trim());for(const s of t){const r=s.indexOf(":");if(r===-1)continue;const o=s.substring(0,r).trim(),l=s.substring(r+1).trim();if(o&&l){const d=o.replace(/-([a-z])/g,(u,f)=>f.toUpperCase());e[d]=l}}return e};class ND extends w.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){Ft.error(`컴포넌트 렌더링 에러 (ID: ${this.props.componentId}, Name: ${this.props.componentName}):`,e,t)}render(){return this.state.hasError?this.props.fallback?this.props.fallback:a.jsxs("div",{className:"p-4 my-2 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg text-red-800 dark:text-red-400",children:[a.jsx("div",{className:"font-semibold mb-1",children:"컴포넌트 로드 실패"}),a.jsxs("div",{className:"text-xs opacity-80",children:[this.props.componentName&&`[${this.props.componentName}] `,"데이터를 표시할 수 없습니다."]}),this.state.error&&a.jsxs("details",{className:"mt-2",children:[a.jsx("summary",{className:"cursor-pointer text-xs opacity-70 hover:opacity-100",children:"상세 정보"}),a.jsx("div",{className:"mt-1 p-2 bg-red-100 dark:bg-red-900/30 rounded text-xs font-mono whitespace-pre-wrap break-all",children:this.state.error.message})]})]}):this.props.children}}const Kr=w.memo(({componentDef:n,dataContext:e,translationContext:t,registry:s,bindingEngine:r,translationEngine:o,actionDispatcher:l,parentComponentContext:d,parentFormContextProp:u,parentDataContext:f,isRootRenderer:g=!1,isInsideIteration:h=!1,isEditMode:b=!1,onComponentSelect:y,onComponentHover:v,onDragStart:x,onDragEnd:S,componentPath:_,layoutKey:A})=>{const[C,j]=w.useState({loadingActions:{}});w.useLayoutEffect(()=>{d||(r.startRenderCycle(),window.__g7SetLocalOverrideKeys||(window.__g7ForcedLocalFields=void 0),window.__g7PendingLocalState=null)});const E=w.useRef(null);w.useLayoutEffect(()=>{if(!d&&e._localInit&&typeof e._localInit=="object"){const{_forceLocalInit:Q,_merge:ke,...ge}=e._localInit,X=`${JSON.stringify(ge)}:${Q||"no-force"}`;if(E.current!==X){E.current=X;const he=ke||"shallow",ve=window.G7Core?.state?.get?.()?._local||{},Re=window.__g7PendingLocalState||{},Ye={...ve,...Re};he==="replace"?window.__g7PendingLocalState={loadingActions:Ye.loadingActions||{},...ge,hasChanges:!1}:he==="deep"?window.__g7PendingLocalState=Cr(Ye,{...ge,hasChanges:!1}):window.__g7PendingLocalState={...Ye,...ge,hasChanges:!1};const it=window.__g7SetLocalOverrideKeys;it&&typeof it=="object"&&(he==="replace"?window.__g7SetLocalOverrideKeys={...ge,hasChanges:!1}:window.__g7SetLocalOverrideKeys=Cr(it,{...ge,hasChanges:!1}))}}}),w.useLayoutEffect(()=>{if(!d){const Q=window.__g7SetLocalOverrideKeys;if(Q){j(he=>D0(he,Q));const ke=Q,ge=window.__g7ForcedLocalFields,X=window.__g7LastSetLocalSnapshot;queueMicrotask(()=>{window.__g7SetLocalOverrideKeys===ke&&(window.__g7SetLocalOverrideKeys=void 0),window.__g7ForcedLocalFields===ge&&(window.__g7ForcedLocalFields=void 0),window.__g7LastSetLocalSnapshot===X&&(window.__g7LastSetLocalSnapshot=void 0)})}}},[e._local]);const T=w.useRef(A);w.useEffect(()=>{n._fromBase&&A&&T.current!==A&&(T.current=A,j({loadingActions:{}}))},[A,n._fromBase]);const D=w.useRef(""),I=w.useRef(!1),W=w.useRef(null),z=w.useRef({}),H=w.useRef({}),G=w.useRef(f),F=$N(),Z=gN(),Y=Z?.getParentDataContext()??f;w.useEffect(()=>{if(e._localInit&&typeof e._localInit=="object"){const{_forceLocalInit:Q,...ke}=e._localInit,ge=JSON.stringify(ke),X=Q!==void 0,he="__g7LocalInitTracking";window[he]||(window[he]={hash:"",timestamp:void 0});const _e=window[he],ve=`${ge}:${Q||"no-force"}`;if(_e.hash!==ve){_e.hash=ve,_e.timestamp=Q,D.current=ge,X&&(I.current=!0);const{_merge:it,...ot}=ke,tt=it||"shallow";if(j(at=>tt==="replace"?{loadingActions:at.loadingActions||{},...ot,hasChanges:!1}:tt==="deep"?Cr(at,{...ot,hasChanges:!1}):{...at,...ot,hasChanges:!1}),e._globalSetState){const at=e._global?._local||{};let nt;tt==="replace"?nt={...ot,hasChanges:!1}:tt==="deep"?nt=Cr(at,{...ot,hasChanges:!1}):nt={...at,...ot,hasChanges:!1},e._globalSetState({_local:nt})}r.invalidateCacheByKeys(["_local"]),Ft.log("_localInit applied (data changed):",Object.keys(ke))}W.current=e._localInit}},[e._localInit,f,r]);const{isTransitioning:U}=Mw(),B=_N(),te=u??B,{width:q}=Bw(),M=RD(),N=w.useMemo(()=>{let Q=n;if(n.type==="iterator"&&n.data){const{data:X,itemName:he,indexName:_e,...ve}=n;Q={...ve,iteration:{source:X,item_var:he||"item",index_var:_e}}}if(!Q.responsive)return Q;const ke=Ws.getMatchingKey(Q.responsive,q);if(!ke)return Q;const ge=Q.responsive[ke];return{...Q,props:{...Q.props,...ge.props},children:ge.children??Q.children,text:ge.text??Q.text,if:ge.if??Q.if,iteration:ge.iteration??Q.iteration,__responsiveChildrenKey:ge.children!==void 0?ke:void 0}},[n,q]),V=w.useCallback(Q=>{const ke=Q?.__setStateId;if(j(ge=>{const X=window.__g7PendingLocalState,_e=window.__g7SetLocalOverrideKeys||X,ve=_e?Cr(ge,_e):ge;if(typeof Q=="function"){const tt=Q(ve);return Cr(ve,tt)}const{__mergeMode:Re,__setStateId:Ye,...it}=Q;let ot;if(Re==="replace"?ot=it:Re==="shallow"?ot={...ve,...it}:ot=Cr(ve,it),Re!==void 0){const tt=window.__g7ForcedLocalFields;tt&&(window.__g7ForcedLocalFields={...tt,...it})}return ot}),ke){const ge=mo();if(ge?.isEnabled()){const X=N.id||"unknown",he=N.name||"Unknown";setTimeout(()=>{ge.trackComponentRender?.(X,he,0,["_local"],[]),ge.completeStateChange?.(ke)},0)}}},[N.id,N.name]),ee=d?.state??C,se=d?.setState??V,re=w.useMemo(()=>{const Q=e._localInit&&e._localInit!==W.current;let ke;Q&&e._local?ke=e._local:ke=e._local?Cr(e._local,ee):ee;const ge=window.__g7ForcedLocalFields;ge&&(ke=Cr(ke,ge));const X={...e,_local:ke},he=e._computedDefinitions;if(he&&Object.keys(he).length>0){const _e=new ms,ve={...X,...F?{_isolated:F.state}:{}},Re={},Ye=mo(),it=Ye?.isEnabled()??!1;for(const[ot,tt]of Object.entries(he)){const at=it?Date.now():0,nt=it?e._computed?.[ot]:void 0;let Xe;try{if(typeof tt=="string")if(tt.startsWith("{{")&&tt.endsWith("}}")){const st=tt.slice(2,-2).trim(),pt=_e.evaluateExpression(st,ve,{skipCache:!0});Re[ot]=pt}else Re[ot]=tt;else if(tt&&typeof tt=="object"&&"$switch"in tt){const st=_e.resolveSwitch(tt,ve,{skipCache:!0});Re[ot]=st}}catch(st){Ft.warn(`Failed to recalculate computed value: ${ot}`,st),Re[ot]=e._computed?.[ot],Xe=st instanceof Error?st.message:String(st)}if(it&&(Xe||nt!==Re[ot])){const pt=Date.now()-at;Ye.trackComputedProperty?.(ot,typeof tt=="string"?tt:JSON.stringify(tt),[{type:"_local",path:"_local",value:X._local}],Re[ot],pt,N.id,Xe),nt!==Re[ot]&&Ye.trackComputedRecalc?.(ot,"dependency-change",nt,Re[ot],pt,{type:"_local",path:"_local"},N.id)}}X._computed=Re}if(F&&(X._isolated=F.state),Y&&(X.$parent=Y),n.extensionPointProps){const _e=r.resolveObject(n.extensionPointProps,X,h?{skipCache:!0}:void 0);X.extensionPointProps=b&&o?Rh(_e,o,t,X):_e}return n.extensionPointCallbacks&&(X.extensionPointCallbacks=n.extensionPointCallbacks),b&&(X.$templateId===void 0&&t?.templateId&&(X.$templateId=t.templateId),X.$locale===void 0&&t?.locale&&(X.$locale=t.locale)),X},[e,ee,F?.state,Y,Z?.version,n.extensionPointProps,n.extensionPointCallbacks]);z.current=re._local,H.current=re._computed||{},G.current=Y,w.useEffect(()=>{const Q=mo();if(!Q?.isEnabled())return;const ke=re._local;ke&&Q.updateLocalState(ke);const ge=re._computed;ge&&Q.updateComputedState(ge),Y&&Q.updateParentContext?.(Y);const X=N.id||`comp-${Date.now()}`,he=N.name||"Unknown",_e={global:Object.keys(e._global||{}),local:Object.keys(ke||{}),context:d?Object.keys(d.state||{}):[]},ve={type:d?"componentContext":"dynamicState",hasComponentContext:!!d,parentId:d?"parent":void 0};Q.trackComponentStateSource?.(X,he,_e,ve),ee&&Object.keys(ee).length>0&&Q.trackDynamicState?.(X,ee);const Re=!!(N.expandChildren||N.props?.expandChildren);Q.trackContextFlow?.(X,he,!!d,Re,!0)},[re._local,e,N.id,N.name,d,ee,N.expandChildren,N.props?.expandChildren,Y]);const pe=w.useMemo(()=>({state:{...re._local},setState:se,stateRef:z,computedRef:H,isolatedContext:F,parentDataContext:re}),[re._local,se,C,F,re]),je=w.useMemo(()=>{const Q=Li({if:N.if,condition:N.condition,conditions:N.conditions},re,r,N.id);if(N.if||N.condition!==void 0||N.conditions){const ge=mo();ge?.isEnabled()&&N.if&&ge.trackIfCondition(N.id||`if-${Date.now()}`,N.if,Q)}return Q},[N.if,N.conditions,re,r,N.id]),me=w.useMemo(()=>{if(!N.slot)return null;const Q=N.slot;if(Q.startsWith("{{")&&Q.endsWith("}}")){const ke=Q.slice(2,-2).trim();try{const ge={componentId:N.id,componentName:N.name,propName:"slot"},X=r.evaluateExpression(ke,re,ge);return Ft.log(`[Slot] 표현식 평가: "${ke}" => "${X}" (컴포넌트: ${N.id})`),typeof X=="string"?X:null}catch(ge){return Ft.warn(`slot 표현식 평가 실패 (컴포넌트: ${N.id}):`,ge),null}}return Ft.log(`[Slot] 정적 슬롯 ID: "${Q}" (컴포넌트: ${N.id})`),Q},[N.slot,N.id,re,r]),ce=w.useMemo(()=>!me||!N.id?"":`${N.id}-${me}-${JSON.stringify(N.slotOrder??0)}`,[me,N.id,N.slotOrder]),be=w.useRef(null);w.useEffect(()=>{const Q=window.__slotContextValue,ke=Q?.isEnabled??!1;if(N.slot&&Ft.log(`[Slot Registration] 컴포넌트: ${N.id}, isSlotEnabled: ${ke}, shouldRender: ${je}, resolvedSlotId: ${me}`),!ke||!je){N.slot&&Ft.log(`[Slot Registration] 등록 스킵 - isSlotEnabled: ${ke}, shouldRender: ${je}`),be.current&&N.id&&Q&&(Q.unregisterFromSlot(be.current,N.id),be.current=null);return}if(!me||!N.id){N.slot&&Ft.log(`[Slot Registration] 등록 스킵 - resolvedSlotId: ${me}, id: ${N.id}`),be.current&&N.id&&Q&&(Q.unregisterFromSlot(be.current,N.id),be.current=null);return}be.current&&be.current!==me&&Q.unregisterFromSlot(be.current,N.id);const ge={...N,slot:void 0,slotOrder:void 0};return Q.registerToSlot(me,N.id,{componentDef:ge,dataContext:e,order:N.slotOrder??0,parentFormContext:u??null,getParentComponentContext:()=>pe,translationContext:t,registrationKey:ce}),be.current=me,()=>{const X=window.__slotContextValue;me&&N.id&&X&&X.unregisterFromSlot(me,N.id)}},[je,me,N,e,u,pe,t,ce]);const Be=w.useCallback(Q=>{if(typeof Q=="string"){if(Pv(Q))return Hv(Q);if(Bv(Q)){const ke=[],ge=Q.replace(new RegExp(`${ru}([^${rc}]*)${rc}`,"g"),(he,_e)=>(ke.push(_e),`${Vo}${ke.length-1}${Vo}`));let X=ge;return/\$t:[a-zA-Z0-9._-]+/.test(ge)&&(X=o.resolveTranslations(ge,t,re)),X.replace(new RegExp(`${Vo}(\\d+)${Vo}`,"g"),(he,_e)=>ke[parseInt(_e)])}if(Q.startsWith("$t:defer:"))return Q;if(/\$t:[a-zA-Z0-9._-]+/.test(Q)){const ke=Q.trim();return ke.startsWith("{")&&ke.endsWith("}")||ke.startsWith("[")&&ke.endsWith("]")?Q:o.resolveTranslations(Q,t,re)}return Q}if(Array.isArray(Q))return Q.map(ke=>Be(ke));if(Q&&typeof Q=="object"){const ke={};for(const[ge,X]of Object.entries(Q))ke[ge]=Be(X);return ke}return Q},[o,t,re]),fe=w.useCallback(Q=>/[?:|&!+\-*/<>=()]/.test(Q),[]),De=w.useCallback(Q=>{if(!Q.startsWith("{{")||!Q.endsWith("}}"))return null;const ke=Q.slice(2,-2);let ge=null,X=0;for(let he=0;he<ke.length;he++){const _e=ke[he];if((he>0?ke[he-1]:"")!=="\\"&&((_e==='"'||_e==="'")&&!ge?ge=_e:_e===ge&&(ge=null),!ge&&(_e==="{"&&X++,_e==="}"&&X--,X<0)))return null}return X===0?ke.trim():null},[]),Fe=w.useMemo(()=>{let Q={...N.props||{}};const ke=["cellChildren","expandChildren","expandContext","render"],X=s.getMetadata(N.name)?.skipBindingKeys||[],he=[...new Set([...ke,...X])],_e=h?{skipCache:!0}:void 0,ve=Xe=>{if(_e)return _e;if(Xe.startsWith("_computed")||Xe.startsWith("$computed"))return{skipCache:!0}};for(const[Xe,st]of Object.entries(Q))if(!he.includes(Xe))if(typeof st=="string"){const pt=De(st);if(pt!==null){let Lt=!1,an=pt;pt.startsWith(Fo)&&(Lt=!0,an=pt.slice(Fo.length));const Tn={componentId:N.id,componentName:N.name,propName:Xe};let $n;if(fe(an))try{$n=r.evaluateExpression(an,re,Tn)}catch(Cs){Ft.warn(`표현식 평가 실패 (컴포넌트: ${N.id}, prop: ${Xe}):`,Cs),$n=void 0}else $n=r.resolve(an,re,ve(an),Tn);Q[Xe]=Lt&&$n!=null?ac($n):$n}else{const Lt={componentId:N.id,componentName:N.name,propName:Xe};Q[Xe]=r.resolveBindings(st,re,_e,Lt)}}else Array.isArray(st)?Q[Xe]=st.map(pt=>typeof pt=="string"?r.resolveBindings(pt,re,_e):typeof pt=="object"&&pt!==null?r.resolveObject(pt,re,_e):pt):st&&typeof st=="object"&&(Q[Xe]=r.resolveObject(st,re,_e));for(const[Xe,st]of Object.entries(Q))Q[Xe]=Be(st);if(typeof Q.style=="string"&&(Q.style=$D(Q.style)),Q=Pg(Q,b?void 0:N.actions,re,{componentContext:pe,actionDispatcher:l}),N.classMap){const Xe=ST(N.classMap,re,r,{skipCache:!0});if(Xe){const st=Q.className||"";Q.className=st?`${st} ${Xe}`:Xe}}N.style&&(Q.style=N.style),N.actions&&N.actions.length>0&&N.type==="composite"&&Object.assign(Q,ee),N.component_layout&&(Q.__componentLayoutDefs=N.component_layout);const Re=N.expandChildren||N.props?.expandChildren,Ye=N.props?.cellChildren,it=N.children&&N.children.length>0,ot=N.component_layout,tt=N.slot,at=N.props?.modalId,nt=N.type==="composite";return(Re||Ye||it||ot||tt||at||nt)&&(Q.__componentContext=pe),Q},[N.props,N.actions,N.style,N.classMap,N.id,re,t,r,o,pe,ee,Be,fe,De,h]),mt=w.useRef(null),ft=w.useMemo(()=>mt.current&&Hw(mt.current,Fe)?mt.current:(mt.current=Fe,Fe),[Fe]),xt=w.useMemo(()=>{const Q=N.id;if(typeof Q!="string"||!Q.includes("{{"))return Q;const ke=r.resolveBindings(Q,re,{skipCache:!0});return typeof ke=="string"?ke:Q},[N.id,re,r]),Ot=w.useMemo(()=>{const Q=N.dataKey,ke=N.trackChanges,ge=N.debounce;if(Q){const X=Q.startsWith("_global."),he=X?Q.slice(8):Q,_e=X?e._global:re._local;return{dataKey:he,trackChanges:ke??!1,debounce:ge,setState:X?Re=>{e._globalSetState?e._globalSetState(Re):Ft.warn("_global.formData 사용 시 _globalSetState가 필요합니다.")}:se,state:_e??{},_isGlobal:X}}if(te.dataKey)return te},[N.dataKey,N.trackChanges,N.debounce,N.id,se,re._local,e._global,e._globalSetState,te]),St=w.useRef(new Set);w.useEffect(()=>{St.current.clear()},[e._global?._remountKeys]);const kt=w.useCallback((Q,ke)=>{const ge=e._global?._remountKeys;return Q&&ge?.[Q]&&!St.current.has(Q)?(St.current.add(Q),`${Q}-remount-${ge[Q]}`):Q||ke},[e._global?._remountKeys]),Vt=w.useMemo(()=>{if(N.text!==void 0){if(typeof N.text=="string"){const Q=N.text;let ke=Q;const ge={componentId:N.id,componentName:N.name,propName:"text",skipCache:!0},X=De(Q);if(X!==null)if(zv(X))ke=r.resolveBindings(Q,re,{skipCache:!0},ge);else if(fe(X))try{ke=r.evaluateExpression(X,re,ge)}catch(he){Ft.warn(`text 표현식 평가 실패 (컴포넌트: ${N.id}):`,he),ke=""}else ke=r.resolve(X,re,{skipCache:!0},ge);else Q.includes("{{")&&(ke=r.resolveBindings(Q,re,{skipCache:!0},ge));return ke=Be(ke),ke??""}return N.text}return!N.children||N.children.length===0?null:N.children.map((Q,ke)=>{if(typeof Q=="string")return Q;const ge=N.__responsiveChildrenKey,X=ge?`responsive.${ge}.children`:"children",he=_?`${_}.${X}.${ke}`:`${ke}`,_e=Q._fromBase?Q.id||`child-${ke}`:kt(Q.id,`child-${ke}`),ve=!Q._fromBase&&A?`${_e}_${A}`:_e;return a.jsx(Kr,{componentDef:Q,dataContext:re,translationContext:t,registry:s,bindingEngine:r,translationEngine:o,actionDispatcher:l,parentComponentContext:pe,parentFormContextProp:Ot,isInsideIteration:h,isEditMode:b,onComponentSelect:y,onComponentHover:v,componentPath:he,onDragStart:x,onDragEnd:S,layoutKey:A},ve)})},[N.text,N.children,N.id,e,re,t,s,r,o,l,pe,Ot,De,fe,Be,kt,h,b,y,v,_,x,S,A]),Nt=w.useMemo(()=>{if(!N.iteration)return null;try{const Q=zg(N.iteration.source,re,r);if(!Array.isArray(Q))return Ft.warn(`iteration source가 배열이 아닙니다 (컴포넌트: ${N.id}):`,Q),null;const ke=mo();return ke?.isEnabled()&&ke.trackIteration(N.id||`iteration-${Date.now()}`,N.iteration.source,N.iteration.item_var,N.iteration.index_var,Q.length),Q.map((ge,X)=>{const he={...re,[N.iteration.item_var]:ge};N.iteration.index_var&&(he[N.iteration.index_var]=X);const _e=X===0||X===Q.length-1;ke?.isEnabled()&&_e&&ke.trackNestedContext?.({componentId:`${N.id||"unknown"}-iter-${X}`,componentType:"iteration",parentContext:{available:Object.keys(re),values:{}},ownContext:{added:[N.iteration.item_var,...N.iteration.index_var?[N.iteration.index_var]:[]],values:{[N.iteration.item_var]:ge,...N.iteration.index_var?{[N.iteration.index_var]:X}:{}}},depth:1});const ve={...N,iteration:void 0,responsive:void 0},Re=_?`${_}.iteration.${X}`:`iteration.${X}`,Ye=`${kt(N.id,"item")}-${X}`;return a.jsx(Kr,{componentDef:ve,dataContext:he,translationContext:t,registry:s,bindingEngine:r,translationEngine:o,actionDispatcher:l,parentComponentContext:pe,parentFormContextProp:Ot,isInsideIteration:!0,isEditMode:b,onComponentSelect:y,onComponentHover:v,componentPath:Re,onDragStart:x,onDragEnd:S,layoutKey:A},Ye)})}catch(Q){return Ft.error(`iteration 렌더링 실패 (컴포넌트: ${N.id}):`,Q),null}},[N.iteration,N.children,N.id,e,re,t,s,r,o,l,pe,Ot,kt,b,y,v,_,x,S,A]),[tn,Qe]=w.useState(0),Pe=w.useMemo(()=>{if(!N.sortable||!N.itemTemplate)return null;const{sortable:Q,itemTemplate:ke}=N;try{const ge=zg(Q.source,re,r);if(!Array.isArray(ge))return Ft.warn(`sortable source가 배열이 아닙니다 (컴포넌트: ${N.id}):`,ge),null;if(ge.length===0)return null;const X=Q.itemKey||"id",he=Q.strategy||"verticalList",_e=Q.itemVar||"$item",ve=Q.indexVar||"$index",Re=Q.handle,Ye=Q.wrapperElement,it=(at,nt)=>{const Xe=N.actions?.filter(st=>st.event==="onSortEnd"||st.type==="onSortEnd");if(Qe(st=>st+1),Xe&&Xe.length>0&&l){const st={...re,$sortedItems:at,$sortEvent:nt};Xe.forEach(pt=>{try{const Lt=l.createHandler(pt,st,pe),an=new Event("sortend");Lt(an)}catch(Lt){Ft.error(`onSortEnd action failed: ${pt.handler}`,Lt)}})}},ot=at=>{const nt=N.actions?.filter(Xe=>Xe.event==="onSortStart"||Xe.type==="onSortStart");if(nt&&nt.length>0&&l){const Xe={...re,$activeId:at.activeId};nt.forEach(st=>{try{const pt=l.createHandler(st,Xe,pe),Lt=new Event("sortstart");pt(Lt)}catch(pt){Ft.error(`onSortStart action failed: ${st.handler}`,pt)}})}},tt=ge.map((at,nt)=>{const Xe=String(at[X]),st={...re,[_e]:at,[ve]:nt},pt=_?`${_}.sortable.${nt}`:`sortable.${nt}`,Lt=`${kt(N.id,"sortable-item")}-v${tn}-${Xe}`;return a.jsx(AD,{id:Xe,handle:Re,...Ye?{as:Ye}:{},children:(Ye&&ke.children?ke.children:[ke]).map((an,Tn)=>a.jsx(Kr,{componentDef:an,dataContext:st,translationContext:t,registry:s,bindingEngine:r,translationEngine:o,actionDispatcher:l,parentComponentContext:pe,parentFormContextProp:void 0,isInsideIteration:!0,isEditMode:b,onComponentSelect:y,onComponentHover:v,componentPath:pt,onDragStart:x,onDragEnd:S,layoutKey:A},`${Lt}-child-${Tn}`))},Lt)});return a.jsx(jD,{items:ge,itemKey:X,strategy:he,onSortEnd:it,onSortStart:ot,sortVersion:tn,children:tt})}catch(ge){return Ft.error(`sortable 렌더링 실패 (컴포넌트: ${N.id}):`,ge),null}},[N.sortable,N.itemTemplate,N.actions,N.id,e,re,t,s,r,o,l,pe,kt,b,y,v,_,x,S,tn,A]),et=w.useRef(!1);w.useEffect(()=>{if(et.current)return;et.current=!0;const Q=mo();if(Q?.isEnabled()&&Q.trackMount(n.id,{name:n.name,type:n.type||"component",props:ft}),n.lifecycle?.onMount&&n.lifecycle.onMount.length>0)for(const ge of n.lifecycle.onMount)try{const X=l.createHandler(ge,re,pe),he=new Event("mount");X(he),Ft.log(`Lifecycle onMount executed: ${ge.handler} (Component: ${n.id})`)}catch(X){Ft.error(`Lifecycle onMount failed: ${ge.handler} (Component: ${n.id})`,X)}const ke=[];if(n.onComponentEvent&&n.onComponentEvent.length>0){const ge=window.G7Core;if(ge?.componentEvent?.on)for(const X of n.onComponentEvent){if(!X.event){Ft.warn(`onComponentEvent: event name is required (Component: ${n.id})`);continue}const he=async ve=>{try{const Re={...re,_eventData:ve},it=await l.createHandler({handler:X.handler,params:X.params,onSuccess:X.onSuccess,onError:X.onError},Re,pe)(new CustomEvent(X.event,{detail:ve}));return Ft.log(`onComponentEvent "${X.event}" handled: ${X.handler} (Component: ${n.id})`,{eventData:ve,result:it}),it}catch(Re){throw Ft.error(`onComponentEvent "${X.event}" failed: ${X.handler} (Component: ${n.id})`,Re),Re}},_e=ge.componentEvent.on(X.event,he);ke.push(_e),Ft.log(`onComponentEvent: Subscribed to "${X.event}" (Component: ${n.id})`)}else Ft.warn(`onComponentEvent: G7Core.componentEvent is not available (Component: ${n.id})`)}return()=>{const ge=mo();ge?.isEnabled()&&ge.trackUnmount(n.id);for(const X of ke)try{X()}catch(he){Ft.error(`onComponentEvent: Failed to unsubscribe (Component: ${n.id})`,he)}if(ke.length>0&&Ft.log(`onComponentEvent: Unsubscribed ${ke.length} event(s) (Component: ${n.id})`),n.lifecycle?.onUnmount&&n.lifecycle.onUnmount.length>0)for(const X of n.lifecycle.onUnmount)try{const he=l.createHandler(X,re,pe),_e=new Event("unmount");he(_e),Ft.log(`Lifecycle onUnmount executed: ${X.handler} (Component: ${n.id})`)}catch(he){Ft.error(`Lifecycle onUnmount failed: ${X.handler} (Component: ${n.id})`,he)}}},[]);const Le=w.useMemo(()=>{const Q=ft.dataKey,ke=ft.trackChanges,ge=ft.debounce;return Q?{dataKey:Q,trackChanges:ke??!1,debounce:ge,setState:se,state:ee}:null},[ft.dataKey,ft.trackChanges,ft.debounce,se,ee]);w.useEffect(()=>{const Q=N.dataKey||ft.dataKey;if(!Q)return;const ke=mo();if(!ke?.isEnabled())return;const ge=[],X=_e=>{if(_e)for(const ve of _e){const Re=ve?.props?.name;if(Re&&ge.push({name:Re,type:ve.name||ve.type||"unknown"}),ve?.children&&X(ve.children),ve?.slots)for(const Ye of Object.values(ve.slots))Array.isArray(Ye)&&X(Ye)}};if(n.children&&X(n.children),n.slots)for(const _e of Object.values(n.slots))Array.isArray(_e)&&X(_e);const he=n.id||`form-${Q}`;return ke.trackForm(he,Q,ge),()=>{ke.untrackForm(he)}},[N,ft.dataKey,n.id,n.children]);const He=w.useRef(null),Ve=w.useRef(void 0);w.useEffect(()=>{const Q=ft?.name;if(!Q||!te.dataKey||!te.setState||ft?.autoBinding===!1)return;const ke=`${te.dataKey}.${Q}`,ge=window.__g7AutoBindingPaths??new Map;return window.__g7AutoBindingPaths=ge,ge.set(ke,(ge.get(ke)??0)+1),()=>{const X=ge.get(ke)??0;X<=1?ge.delete(ke):ge.set(ke,X-1)}},[ft?.name,ft?.autoBinding,te.dataKey,te.setState]);const Je=w.useMemo(()=>{const{dataKey:Q,trackChanges:ke,debounce:ge,...X}=ft,he=X.name;if(!he||!te.dataKey||!te.setState)return X;if(X.autoBinding===!1){const{autoBinding:Xe,...st}=X;return st}const _e=`${te.dataKey}.${he}`,ve=SN(te.state,_e),Re=ve!==void 0?ve:X.value,it=s.getMetadata(n.name)?.bindingType,ot=typeof Re=="boolean"&&(it==="checked"||it==="checkable"&&["checkbox","radio"].includes(X?.type)),tt=te.debounce,at=Xe=>{const st=te.state||{},pt=kN(st,_e,Xe);if(te.trackChanges&&(pt.hasChanges=!0),window.__g7PendingLocalState=pt,te.setState(pt),te._isGlobal)return;const Lt=window.G7Core,an={[_e]:Xe};te.trackChanges&&(an.hasChanges=!0),Lt?.state?.setLocal?.(an,{render:!1})},nt=(Xe,st)=>{tt&&tt>0?(He.current&&clearTimeout(He.current),He.current=setTimeout(()=>{at(Xe),He.current=null,st&&(st(),window.__g7PendingLocalState=null)},tt)):(at(Xe),st&&(st(),window.__g7PendingLocalState=null))};if(ot)return{...X,checked:Re,onChange:st=>{const pt=st.target.checked;at(pt),X.onChange&&X.onChange(st)}};{const Xe=pt=>{const Lt=pt?.target?.value!==void 0?pt.target.value:pt;tt&&tt>0&&(Ve.current=Lt);const an=pt?.target?{target:{value:Lt,name:pt.target.name,type:pt.target.type,checked:pt.target.checked},currentTarget:pt.currentTarget?{value:Lt,name:pt.currentTarget.name}:void 0}:pt;nt(Lt,()=>{X.onChange&&X.onChange(an)})};let st;return Ve.current!==void 0?He.current!==null?st=Ve.current:String(Re??"")===String(Ve.current)?(Ve.current=void 0,st=Re??""):st=Ve.current:st=Re??"",{...X,value:st,onChange:Xe}}},[ft,te,te.state,te.debounce]),jt=w.useMemo(()=>{const Q=mo();if(Q?.isEnabled()&&Q.trackRender(n.name),!je)return null;if(N.sortable&&N.itemTemplate)return Pe;if(N.iteration)return Nt;if(N.type==="extension_point"){const{layout:it,columns:ot,gap:tt,className:at,...nt}=N.props||{};let Xe=at||"";return it==="grid"&&ot?Xe=`${Xe} grid grid-cols-${ot} gap-${tt||4}`.trim():it==="flex"&&(Xe=`${Xe} flex flex-col gap-${tt||4}`.trim()),a.jsx("div",{id:xt,className:Xe||void 0,...nt,children:Vt})}const ke=s.getComponent(N.name);if(!ke)return Ft.error(`컴포넌트를 찾을 수 없습니다: ${N.name} (ID: ${N.id})`,"componentDef:",JSON.stringify(N,null,2)),null;const ge=e._global?._remountKeys,X={...Je,id:Je.id??xt,...ge&&Object.keys(ge).length>0&&{__remountTrigger:JSON.stringify(ge)}};if(M?.listeners&&M.handle&&Je["data-drag-handle"]!==void 0&&(Object.assign(X,M.listeners),X.style={...X.style,cursor:M.isDragging?"grabbing":"grab"}),b){const it=N.id||`auto_${N.name||N.type||"unknown"}_${Math.random().toString(36).substring(2,8)}`,ot=nt=>{typeof nt.preventDefault=="function"&&nt.preventDefault(),y&&(nt.stopPropagation(),y(it,nt))},tt={"data-editor-id":it,"data-editor-name":N.name,"data-editor-type":N.type,onClick:ot};_&&(tt["data-editor-path"]=_);const at=N.__editorSlotName??N.slot;typeof at=="string"&&(tt["data-editor-slot"]=at),v&&(tt.onMouseMove=nt=>{nt.stopPropagation(),v(it,nt)},tt.onMouseLeave=nt=>{v(null,nt)}),Object.assign(X,tt),X.editorAttrs=tt}const he=N.type==="basic",_e=N.type==="layout",Re=he||_e?(()=>{const it={};for(const[ot,tt]of Object.entries(X))ot.startsWith("__")||ot==="editorAttrs"&&he||(it[ot]=tt);return it})():X;let Ye=a.jsx(ke,{...Re,children:Vt});if(Ot&&(Ye=a.jsx(wN,{value:Ot,children:Ye})),N.isolatedState){const it=typeof N.isolatedState=="object"?N.isolatedState:{},ot=e?._isolatedInit,tt=ot?{...it,...ot}:it;Ye=a.jsx(TN,{initialState:tt,scopeId:N.isolatedScopeId,children:Ye})}return Ye},[je,N.iteration,N.sortable,N.itemTemplate,N.type,N.name,N.id,N.props,N.isolatedState,N.isolatedScopeId,s,Je,Vt,Nt,Pe,M,Le,b,y,v,x,S,_,e._global?._remountKeys]),At=w.useMemo(()=>{const Q=N.blur_until_loaded;if(!Q||e?._global?.__isPreview)return!1;if(typeof Q=="string"){const X=De(Q);if(X!==null)try{const he={componentId:N.id,componentName:N.name,propName:"blur_until_loaded"};return!!r.evaluateExpression(X,re,he)}catch(he){return Ft.warn(`blur_until_loaded 표현식 평가 실패 (컴포넌트: ${N.id}):`,he),!1}return!1}if(typeof Q=="object"&&Q!==null){if(!Q.enabled)return!1;if(Q.data_sources)return(Array.isArray(Q.data_sources)?Q.data_sources:[Q.data_sources]).some(ve=>e[ve]===void 0);if(U)return!0;const X=["route","query","_global","_local","_dataSourceErrors"];return Object.keys(e).filter(_e=>!X.includes(_e)&&!_e.startsWith("_")).some(_e=>e[_e]===void 0)}if(U)return!0;const ke=["route","query","_global","_local","_dataSourceErrors"];return Object.keys(e).filter(X=>!ke.includes(X)&&!X.startsWith("_")).some(X=>e[X]===void 0)},[N.blur_until_loaded,N.id,U,e,re,r,De]);if(At){const Q=N.blur_until_loaded;if(typeof Q=="object"&&Q?.data_sources){const ge=(Array.isArray(Q.data_sources)?Q.data_sources:[Q.data_sources]).reduce((he,_e)=>(he[_e]=e[_e]===void 0?"UNDEFINED":"LOADED",he),{}),X=Object.keys(e).filter(he=>!he.startsWith("_"));Ft.log(`[BLUR APPLIED] Component: ${N.id}, data_sources status:`,ge,"Available keys:",X)}else Ft.log(`[BLUR APPLIED] Component: ${N.id}, blur_until_loaded:`,Q)}const Rt=w.useMemo(()=>{if(!N.blur_until_loaded)return{wrapperClasses:"",innerClasses:""};const Q=Fe?.className||"";if(!Q)return{wrapperClasses:"",innerClasses:""};const ke=[/^(sm:|md:|lg:|xl:|2xl:)?(col-span-|row-span-|col-start-|col-end-|row-start-|row-end-)/,/^(sm:|md:|lg:|xl:|2xl:)?(self-|place-self-|order-)/,/^(sm:|md:|lg:|xl:|2xl:)?(flex-shrink|flex-grow|flex-\d|basis-)/],ge=Q.split(/\s+/).filter(Boolean),X=[],he=[];for(const _e of ge)ke.some(Re=>Re.test(_e))?X.push(_e):he.push(_e);return{wrapperClasses:X.join(" "),innerClasses:he.join(" ")}},[N.blur_until_loaded,Fe?.className]),xe=window.__slotContextValue;return me&&xe?.isEnabled?null:a.jsx(ND,{componentId:n.id,componentName:n.name,children:N.blur_until_loaded?a.jsx("div",{className:[Rt.wrapperClasses,At?"opacity-50 blur-sm transition-all duration-300 pointer-events-none":void 0].filter(Boolean).join(" ")||void 0,children:jt}):jt})});Kr.displayName="DynamicRenderer",typeof window<"u"&&(window.__DynamicRenderer=Kr);function DD(n){const e={};try{const s=new URL(n,typeof window<"u"?window.location.origin:"http://localhost").searchParams,r=new Set;for(const o of s.keys()){if(r.has(o))continue;r.add(o);const l=s.getAll(o);l.length>1||o.endsWith("[]")?e[o]=l:e[o]=l[0]}}catch{}return e}function ID(n){try{return new URL(n,typeof window<"u"?window.location.origin:"http://localhost").pathname}catch{return n.split("?")[0]}}const ni=class ni{constructor(){ne(this,"config",{enabled:!1,maxHistorySize:100,logLevel:"info",serverEndpoint:"/_boost/g7-debug/dump-state",autoCapture:!0});ne(this,"stateHistory",[]);ne(this,"snapshotIdCounter",0);ne(this,"stateWatchers",new Map);ne(this,"currentLocalState",{});ne(this,"currentComputedState",{});ne(this,"currentParentContext");ne(this,"actionHistory",[]);ne(this,"actionWatchers",new Set);ne(this,"cacheStats",{hits:0,misses:0,entries:0});ne(this,"cacheDecisions",[]);ne(this,"cacheDecisionIdCounter",0);ne(this,"maxCacheDecisions",200);ne(this,"currentRenderCycleId",null);ne(this,"isInActionExecution",!1);ne(this,"isInIteration",!1);ne(this,"mountedComponents",new Map);ne(this,"eventListeners",new Map);ne(this,"mountWatchers",new Set);ne(this,"unmountWatchers",new Set);ne(this,"renderCounts",new Map);ne(this,"bindingEvalCount",0);ne(this,"profilingData",[]);ne(this,"isProfiling",!1);ne(this,"profilingStartTime",0);ne(this,"activeRequests",new Map);ne(this,"requestHistory",[]);ne(this,"pendingDataSources",new Set);ne(this,"requestWatchers",new Set);ne(this,"wsConnections",new Map);ne(this,"wsMessageHistory",[]);ne(this,"wsMessageWatchers",new Set);ne(this,"ifConditions",new Map);ne(this,"iterations",new Map);ne(this,"conditionWatchers",new Set);ne(this,"forms",new Map);ne(this,"formWatchers",new Set);ne(this,"expressionHistory",[]);ne(this,"expressionWatchers",new Set);ne(this,"expressionIdCounter",0);ne(this,"dataSources",new Map);ne(this,"dataPathTransforms",[]);ne(this,"maxDataPathTransforms",100);ne(this,"nestedContexts",[]);ne(this,"nestedContextIdCounter",0);ne(this,"maxNestedContexts",100);ne(this,"formBindingIssues",[]);ne(this,"formBindingValidations",[]);ne(this,"formBindingIssueIdCounter",0);ne(this,"maxFormBindingIssues",100);ne(this,"computedProperties",new Map);ne(this,"computedRecalcLogs",[]);ne(this,"computedRecalcIdCounter",0);ne(this,"maxComputedRecalcLogs",100);ne(this,"handlers",new Map);ne(this,"componentEventSubscriptions",new Map);ne(this,"componentEventEmitHistory",[]);ne(this,"componentEventIdCounter",0);ne(this,"maxComponentEventHistory",100);ne(this,"stateRenderingLogs",[]);ne(this,"currentStateChangeContext",null);ne(this,"stateRenderingIdCounter",0);ne(this,"componentRenderCounts",new Map);ne(this,"stateToComponentMap",new Map);ne(this,"maxStateRenderingLogs",100);ne(this,"componentStateSources",new Map);ne(this,"contextFlowNodes",new Map);ne(this,"dynamicStates",new Map);ne(this,"styleIssues",[]);ne(this,"componentStyles",new Map);ne(this,"authEvents",[]);ne(this,"authHeaderHistory",[]);ne(this,"authEventIdCounter",0);ne(this,"maxAuthEventHistory",50);ne(this,"logHistory",[]);ne(this,"logIdCounter",0);ne(this,"maxLogHistory",500);ne(this,"currentLayout",null);ne(this,"layoutHistory",[]);ne(this,"layoutIdCounter",0);ne(this,"layoutStats",{totalLoads:0,cacheHits:0,apiLoads:0});ne(this,"maxLayoutHistory",50);ne(this,"executionDetails",new Map);ne(this,"stateChangeHistory",[]);ne(this,"dataSourceChangeHistory",[]);ne(this,"changeAlerts",[]);ne(this,"changeExpectations",new Map);ne(this,"executionIdCounter",0);ne(this,"stateChangeIdCounter",0);ne(this,"alertIdCounter",0);ne(this,"maxExecutionDetails",100);ne(this,"maxStateChangeHistory",200);ne(this,"maxChangeAlerts",100);ne(this,"sequenceExecutions",[]);ne(this,"sequenceExecutionStack",[]);ne(this,"sequenceIdCounter",0);ne(this,"maxSequenceExecutions",50);ne(this,"staleClosureWarnings",[]);ne(this,"staleClosureIdCounter",0);ne(this,"maxStaleClosureWarnings",100);ne(this,"stateCaptureRegistry",new Map);ne(this,"modalStates",new Map);ne(this,"modalStateIssues",[]);ne(this,"modalStateRelations",[]);ne(this,"modalStateChangeLogs",[]);ne(this,"modalStateIssueIdCounter",0);ne(this,"modalStateChangeLogIdCounter",0);ne(this,"maxModalStateIssues",100);ne(this,"maxModalStateChangeLogs",200);ne(this,"namedActionDefinitions",{});ne(this,"namedActionRefLogs",[]);ne(this,"namedActionRefIdCounter",0);ne(this,"maxNamedActionRefLogs",200);ne(this,"debounceActionHistory",[]);ne(this,"dataSourceUpdateHistory",[]);ne(this,"debounceActionIdCounter",0);ne(this,"dataSourceUpdateIdCounter",0)}static getInstance(){return ni.instance||(ni.instance=new ni),ni.instance}initialize(){if(this.config.enabled=this.checkDebugMode(),!this.config.enabled){console.log("[G7DevTools] 비활성화됨 (환경설정 > 고급 설정 > 디버그 모드를 켜세요)");return}console.log("[G7DevTools] 활성화됨"),this.setupGlobalErrorHandler()}checkDebugMode(){try{if(window.G7Config?.debug===!0)return!0;const s=window.G7Core?.state?.get?.();return s?.settings?.advanced?.debug_mode===!0||s?._global?.settings?.advanced?.debug_mode===!0}catch{return!1}}isEnabled(){return this.config.enabled}setupGlobalErrorHandler(){window.addEventListener("error",e=>{this.config.enabled&&this.logAction({id:this.generateId(),type:"globalError",startTime:Date.now(),status:"error",error:{name:"Error",message:e.message,stack:e.error?.stack}})}),window.addEventListener("unhandledrejection",e=>{this.config.enabled&&this.logAction({id:this.generateId(),type:"unhandledRejection",startTime:Date.now(),status:"error",error:{name:"UnhandledRejection",message:String(e.reason)}})})}captureStateSnapshot(e){if(!this.config.enabled)return;const t={id:++this.snapshotIdCounter,timestamp:Date.now(),source:e.source,prev:this.sanitizeObject(e.prev),next:this.sanitizeObject(e.next),diff:e.diff};this.stateHistory.push(t),this.stateHistory.length>this.config.maxHistorySize&&this.stateHistory.shift(),this.notifyStateWatchers(t)}getState(){try{const e=window.G7Core,t=e?.state?.get?.()||{},s={};if(e?._isolatedStates&&typeof e._isolatedStates=="object")for(const[r,o]of Object.entries(e._isolatedStates))s[r]=this.sanitizeObject(o);return{_global:t._global||t,_local:this.currentLocalState,_computed:this.currentComputedState,_isolated:Object.keys(s).length>0?s:void 0,$parent:this.currentParentContext}}catch{return{_global:{},_local:this.currentLocalState,_computed:this.currentComputedState}}}updateLocalState(e){this.config.enabled&&(this.currentLocalState=this.sanitizeObject(e))}updateComputedState(e){this.config.enabled&&(this.currentComputedState=this.sanitizeObject(e))}updateParentContext(e){this.config.enabled&&(this.currentParentContext=e?this.sanitizeObject(e):void 0)}getStateHistory(){return[...this.stateHistory]}getDualStorageMismatch(){const e=this.currentLocalState||{};let t={};try{t=(window.G7Core?.state?.get?.()||{})._local||{}}catch{t={}}const s=this.findMismatchedLeafPaths(e,t);return{hasMismatch:s.length>0,mismatchedPaths:s,storageA:e,storageB:t}}findMismatchedLeafPaths(e,t,s=""){const r=[],o=new Set([...Object.keys(e||{}),...Object.keys(t||{})]);for(const l of o){const d=s?`${s}.${l}`:l,u=e?.[l],f=t?.[l],g=u&&typeof u=="object"&&!Array.isArray(u),h=f&&typeof f=="object"&&!Array.isArray(f);if(g&&h)r.push(...this.findMismatchedLeafPaths(u,f,d));else{const b=u===void 0?"__undefined__":JSON.stringify(u),y=f===void 0?"__undefined__":JSON.stringify(f);b!==y&&r.push(d)}}return r}watchState(e,t){return this.stateWatchers.has(e)||this.stateWatchers.set(e,new Set),this.stateWatchers.get(e).add(t),()=>{this.stateWatchers.get(e)?.delete(t)}}notifyStateWatchers(e){if(this.stateWatchers.get("*")?.forEach(t=>{try{t(e.next,e.prev,"*")}catch(s){console.error("[G7DevTools] State watcher error:",s)}}),e.diff)for(const t of e.diff.changed)this.stateWatchers.get(t.path)?.forEach(s=>{try{s(t.newValue,t.oldValue,t.path)}catch(r){console.error("[G7DevTools] State watcher error:",r)}})}diffSnapshots(e,t){const s=this.stateHistory.find(o=>o.id===e),r=this.stateHistory.find(o=>o.id===t);return!s||!r?null:this.calculateDiff(s.next,r.next)}calculateDiff(e,t,s=""){const r={added:[],removed:[],changed:[]},o=new Set(Object.keys(e)),l=new Set(Object.keys(t));for(const d of l){const u=s?`${s}.${d}`:d;o.has(d)?JSON.stringify(e[d])!==JSON.stringify(t[d])&&r.changed.push({path:u,oldValue:e[d],newValue:t[d]}):r.added.push(u)}for(const d of o){const u=s?`${s}.${d}`:d;l.has(d)||r.removed.push(u)}return r}logAction(e){if(!this.config.enabled)return;const t=this.actionHistory.findIndex(s=>s.id===e.id);t>=0?this.actionHistory[t]={...this.actionHistory[t],...e}:(this.actionHistory.push(e),this.actionHistory.length>this.config.maxHistorySize&&this.actionHistory.shift()),this.isProfiling&&this.profilingData.push({type:"action",action:e.type,timestamp:performance.now(),duration:e.duration}),this.notifyActionWatchers(e)}getActionHistory(){return[...this.actionHistory]}watchActions(e){return this.actionWatchers.add(e),()=>{this.actionWatchers.delete(e)}}notifyActionWatchers(e){this.actionWatchers.forEach(t=>{try{t(e)}catch(s){console.error("[G7DevTools] Action watcher error:",s)}})}getActionMetrics(){const e=this.actionHistory.filter(o=>o.status==="success"),t=this.actionHistory.filter(o=>o.status==="error"),s={};for(const o of this.actionHistory)s[o.type]=(s[o.type]||0)+1;const r=e.reduce((o,l)=>o+(l.duration||0),0);return{totalActions:this.actionHistory.length,successCount:e.length,errorCount:t.length,averageDuration:e.length>0?r/e.length:0,actionsByType:s}}recordCacheHit(){this.config.enabled&&this.cacheStats.hits++}recordCacheMiss(){this.config.enabled&&this.cacheStats.misses++}updateCacheEntries(e){this.config.enabled&&(this.cacheStats.entries=e)}getCacheStats(){const e=this.cacheStats.hits+this.cacheStats.misses;return{...this.cacheStats,hitRate:e>0?this.cacheStats.hits/e:0}}resetCacheStats(){this.cacheStats={hits:0,misses:0,entries:0}}trackCacheDecision(e){if(!this.config.enabled)return;const t={id:`cache-${++this.cacheDecisionIdCounter}`,timestamp:Date.now(),expression:e.expression,decision:e.decision,reason:e.reason,context:{isInIteration:this.isInIteration,isInAction:this.isInActionExecution,renderCycleId:this.currentRenderCycleId||void 0,componentId:e.componentId,skipCacheOption:e.skipCacheOption},cachedValue:e.cachedValue!==void 0?this.safeClone(e.cachedValue):void 0,freshValue:e.freshValue!==void 0?this.safeClone(e.freshValue):void 0,valueMatch:e.cachedValue!==void 0&&e.freshValue!==void 0?JSON.stringify(e.cachedValue)===JSON.stringify(e.freshValue):void 0,duration:e.duration};this.cacheDecisions.push(t),this.cacheDecisions.length>this.maxCacheDecisions&&this.cacheDecisions.shift(),e.decision==="cache_hit"?this.cacheStats.hits++:(e.decision==="cache_miss"||e.decision==="skip_cache")&&this.cacheStats.misses++}startRenderCycle(e){return this.currentRenderCycleId=`render-${Date.now()}-${e||"root"}`,this.currentRenderCycleId}endRenderCycle(){this.currentRenderCycleId=null}startActionContext(){this.isInActionExecution=!0}endActionContext(){this.isInActionExecution=!1}startIterationContext(){this.isInIteration=!0}endIterationContext(){this.isInIteration=!1}getCacheDecisionTrackingInfo(){const e=this.getCacheDecisionStats();return{decisions:[...this.cacheDecisions],stats:e,timestamp:Date.now()}}getCacheDecisionStats(){const e=this.cacheDecisions;let t=0,s=0,r=0,o=0;const l={},d={};for(const f of e)f.decision==="cache_hit"?t++:f.decision==="cache_miss"?s++:f.decision==="skip_cache"?r++:f.decision==="invalidate"&&o++,l[f.reason]=(l[f.reason]||0)+1,f.context.componentId&&(d[f.context.componentId]=(d[f.context.componentId]||0)+1);const u=t+s+r;return{totalDecisions:e.length,cacheHits:t,cacheMisses:s,skipCacheCount:r,invalidateCount:o,byReason:l,byComponent:d,avgHitRate:u>0?t/u:0}}getRecentCacheDecisions(e=20,t){let s=[...this.cacheDecisions];return t&&(s=s.filter(r=>r.decision===t)),s.slice(-e)}clearCacheDecisionData(){this.cacheDecisions=[],this.cacheDecisionIdCounter=0}summarizePropsForLifecycle(e){if(!e||typeof e!="object")return e;const t={},s=["children","ref","key"];for(const[r,o]of Object.entries(e))if(!s.includes(r))if(o==null)t[r]=o;else if(Array.isArray(o))t[r]=`[Array(${o.length})]`;else if(typeof o=="object"){const l=Object.keys(o);l.length<=3?t[r]=`{${l.join(", ")}}`:t[r]=`{${l.slice(0,3).join(", ")}, ... +${l.length-3}}`}else typeof o=="string"&&o.length>50?t[r]=o.substring(0,50)+"...":typeof o=="function"?t[r]="[Function]":t[r]=o;return t}trackMount(e,t){if(!this.config.enabled)return;const s=this.summarizePropsForLifecycle(t.props),r={...t,props:s,id:e,mountTime:Date.now()};this.mountedComponents.set(e,r),this.mountWatchers.forEach(o=>{try{o({componentId:e,componentName:t.name,timestamp:r.mountTime})}catch(l){console.error("[G7DevTools] Mount watcher error:",l)}})}trackUnmount(e){if(!this.config.enabled)return;const t=this.mountedComponents.get(e),s=this.eventListeners.get(e)||[];s.length>0&&console.warn(`[G7DevTools] 컴포넌트 ${e} 언마운트 시 ${s.length}개 리스너 미정리`),t&&this.unmountWatchers.forEach(r=>{try{r({componentId:e,componentName:t.name,timestamp:Date.now(),orphanedListeners:s.length})}catch(o){console.error("[G7DevTools] Unmount watcher error:",o)}}),this.mountedComponents.delete(e)}trackListener(e,t,s){if(!this.config.enabled)return;const r=this.eventListeners.get(e)||[];r.push({type:t,target:s,addedAt:Date.now()}),this.eventListeners.set(e,r)}removeListener(e,t){if(!this.config.enabled)return;const s=this.eventListeners.get(e)||[],r=s.findIndex(o=>o.type===t);r>=0&&s.splice(r,1)}getMountedComponents(){return Array.from(this.mountedComponents.values())}getOrphanedListeners(){const e=[];for(const[t,s]of this.eventListeners)this.mountedComponents.has(t)||e.push(...s.map(r=>({...r,componentId:t})));return e}watchMount(e){return this.mountWatchers.add(e),()=>{this.mountWatchers.delete(e)}}watchUnmount(e){return this.unmountWatchers.add(e),()=>{this.unmountWatchers.delete(e)}}trackRender(e){if(!this.config.enabled)return;const t=this.renderCounts.get(e)||0;this.renderCounts.set(e,t+1),this.isProfiling&&this.profilingData.push({type:"render",component:e,timestamp:performance.now()})}trackBindingEval(e){this.config.enabled&&(this.bindingEvalCount++,this.isProfiling&&e&&this.profilingData.push({type:"binding",expression:e,timestamp:performance.now()}))}getRenderCount(){return new Map(this.renderCounts)}getBindingEvalCount(){return this.bindingEvalCount}getMemoryWarnings(){const e=[];try{const r=this.getState(),o=JSON.stringify(r).length;o>1e6&&e.push({type:"large-state",message:`상태 크기가 ${(o/1024/1024).toFixed(2)}MB입니다`,suggestion:"불필요한 데이터 정리 필요",severity:o>5e6?"error":"warning"})}catch{}this.stateHistory.length>this.config.maxHistorySize*.8&&e.push({type:"large-history",message:`상태 이력이 ${this.stateHistory.length}개입니다`,suggestion:"maxHistory 설정 조정 필요",severity:"warning"});const t=this.getOrphanedListeners().length;t>0&&e.push({type:"orphaned-listeners",message:`${t}개의 정리되지 않은 이벤트 리스너`,suggestion:"useEffect cleanup 또는 removeEventListener 확인",severity:t>10?"error":"warning"});const s=Array.from(this.renderCounts.entries()).filter(([,r])=>r>50);return s.length>0&&e.push({type:"excessive-renders",message:`${s.length}개 컴포넌트가 50회 이상 렌더링`,suggestion:"React.memo, useMemo, useCallback 사용 고려",severity:"warning"}),e}startProfiling(){this.config.enabled&&(this.isProfiling=!0,this.profilingData=[],this.profilingStartTime=performance.now(),console.log("[G7DevTools] 프로파일링 시작"))}stopProfiling(){this.isProfiling=!1;const e=performance.now()-this.profilingStartTime,t=this.analyzeProfile(e);return console.log("[G7DevTools] 프로파일링 완료",t),t}analyzeProfile(e){const t=this.profilingData.filter(f=>f.type==="render"),s=this.profilingData.filter(f=>f.type==="binding"),r=this.profilingData.filter(f=>f.type==="action"),o={};for(const f of t)f.component&&(o[f.component]||(o[f.component]={count:0,durations:[]}),o[f.component].count++,f.duration&&o[f.component].durations.push(f.duration));const l=Object.entries(o).map(([f,g])=>({name:f,renderCount:g.count,avgDuration:g.durations.length>0?g.durations.reduce((h,b)=>h+b,0)/g.durations.length:0})).sort((f,g)=>g.renderCount-f.renderCount).slice(0,10),d={};for(const f of s)f.expression&&(d[f.expression]=(d[f.expression]||0)+1);const u=Object.entries(d).sort(([,f],[,g])=>g-f).slice(0,10).map(([f])=>f);return{duration:e,entries:this.profilingData,summary:{totalRenders:t.length,totalBindings:s.length,totalActions:r.length,slowestComponents:l,hotPaths:u}}}resetPerformanceStats(){this.renderCounts.clear(),this.bindingEvalCount=0,this.profilingData=[]}trackRequest(e,t,s){if(!this.config.enabled)return"";const r=this.generateId(),o=ID(e),l=DD(e);return this.activeRequests.set(r,{id:r,url:o,fullUrl:e,queryParams:l,method:t,startTime:Date.now(),status:"pending",requestBody:s?.requestBody?this.sanitizeObject(s.requestBody):void 0,dataSourceId:s?.dataSourceId}),this.isProfiling&&this.profilingData.push({type:"network",timestamp:performance.now()}),r}completeRequest(e,t,s){if(!this.config.enabled)return;const r=this.activeRequests.get(e);if(!r)return;const o={...r,status:t>=200&&t<300?"success":"error",statusCode:t,duration:Date.now()-r.startTime,endTime:Date.now(),response:this.sanitizeObject(s)};this.requestHistory.push(o),this.activeRequests.delete(e),this.requestHistory.length>this.config.maxHistorySize&&this.requestHistory.shift(),this.notifyRequestWatchers(o)}failRequest(e,t){if(!this.config.enabled)return;const s=this.activeRequests.get(e);if(!s)return;const r={...s,status:"error",error:t,duration:Date.now()-s.startTime,endTime:Date.now()};this.requestHistory.push(r),this.activeRequests.delete(e),this.notifyRequestWatchers(r)}trackDataSource(e){this.config.enabled&&this.pendingDataSources.add(e)}completeDataSource(e){this.config.enabled&&this.pendingDataSources.delete(e)}getActiveRequests(){return Array.from(this.activeRequests.values())}getRequestHistory(){return[...this.requestHistory]}getPendingDataSources(){return Array.from(this.pendingDataSources)}watchRequest(e){return this.requestWatchers.add(e),()=>{this.requestWatchers.delete(e)}}notifyRequestWatchers(e){this.requestWatchers.forEach(t=>{try{t(e)}catch(s){console.error("[G7DevTools] Request watcher error:",s)}})}trackWebSocketConnection(e,t,s){this.config.enabled&&this.wsConnections.set(e,{id:e,url:t,state:s,connectedAt:s==="open"?Date.now():void 0})}trackWebSocketMessage(e,t,s,r){if(!this.config.enabled)return;const o={id:this.generateId(),connectionId:e,direction:t,type:s,payload:this.sanitizeObject(r),timestamp:Date.now(),sequence:this.wsMessageHistory.length};this.wsMessageHistory.push(o),this.wsMessageHistory.length>this.config.maxHistorySize&&this.wsMessageHistory.shift(),this.notifyWebSocketWatchers(o)}getWebSocketConnections(){return Array.from(this.wsConnections.values())}getWebSocketMessageHistory(){return[...this.wsMessageHistory]}getWebSocketConnectionState(){const e=Array.from(this.wsConnections.values());return e.some(t=>t.state==="open")?"connected":e.some(t=>t.state==="connecting")?"reconnecting":"disconnected"}watchWebSocketMessage(e){return this.wsMessageWatchers.add(e),()=>{this.wsMessageWatchers.delete(e)}}notifyWebSocketWatchers(e){this.wsMessageWatchers.forEach(t=>{try{t(e)}catch(s){console.error("[G7DevTools] WebSocket watcher error:",s)}})}trackIfCondition(e,t,s){if(!this.config.enabled)return;const r=this.ifConditions.get(e),o=r?.evaluatedValue;this.ifConditions.set(e,{id:e,expression:t,evaluatedValue:s,evaluationCount:(r?.evaluationCount||0)+1,lastEvaluated:Date.now()}),r&&o!==s&&this.notifyConditionWatchers({id:e,expression:t,oldValue:o,newValue:s,timestamp:Date.now()})}trackIteration(e,t){this.config.enabled&&this.iterations.set(e,{id:e,...t,lastRendered:Date.now()})}getIfConditions(){return Array.from(this.ifConditions.values())}getIterations(){return Array.from(this.iterations.values())}getScopeChain(e){const t=[],s=this.getState();return t.push({name:"_global",value:s._global,source:"global"}),t.push({name:"_local",value:s._local,source:"local"}),t.push({name:"_computed",value:s._computed,source:"computed"}),t}watchConditionChange(e){return this.conditionWatchers.add(e),()=>{this.conditionWatchers.delete(e)}}notifyConditionWatchers(e){this.conditionWatchers.forEach(t=>{try{t(e)}catch(s){console.error("[G7DevTools] Condition watcher error:",s)}})}trackForm(e,t,s){this.config.enabled&&this.forms.set(e,{id:e,dataKey:t,inputs:s,trackedAt:Date.now()})}trackFormChange(e,t,s){if(!this.config.enabled)return;const r={formId:e,inputName:t,value:s,timestamp:Date.now()};this.notifyFormWatchers(r)}untrackForm(e){this.forms.delete(e)}getForms(){return Array.from(this.forms.values())}getFormState(e){const t=this.getState();return this.getNestedValue(t,e)||{}}getBindingPath(e,t){return`${e}.${t}`}watchFormChange(e){return this.formWatchers.add(e),()=>{this.formWatchers.delete(e)}}notifyFormWatchers(e){this.formWatchers.forEach(t=>{try{t(e)}catch(s){console.error("[G7DevTools] Form watcher error:",s)}})}trackFormBindingIssue(e,t,s){if(!this.config.enabled)return;const r={id:`form-issue-${++this.formBindingIssueIdCounter}`,timestamp:Date.now(),type:e,severity:t,formId:s.formId,formDataKey:s.formDataKey,inputInfo:s.inputInfo,contextInfo:s.contextInfo,description:s.description,suggestion:s.suggestion,docLink:s.docLink};this.formBindingIssues.push(r),this.formBindingIssues.length>this.maxFormBindingIssues&&this.formBindingIssues.shift()}validateFormBinding(e,t,s,r){const o=s.map(u=>{const f=[];let g=!0;return u.name||(f.push("Input에 name 속성이 없습니다"),g=!1,this.trackFormBindingIssue("missing-input-name","error",{formId:e,formDataKey:t,inputInfo:{name:u.name,type:u.type},description:"Input에 name 속성이 없어 자동 바인딩이 동작하지 않습니다",suggestion:"Input에 name 속성을 추가하세요",docLink:"troubleshooting-components-form.md"})),t||(f.push("Form에 dataKey가 없습니다"),g=!1),{inputName:u.name||"(unnamed)",inputType:u.type,bindingPath:t&&u.name?`${t}.${u.name}`:"-",isValid:g,currentValue:u.value,issues:f}});if(t||this.trackFormBindingIssue("missing-datakey","error",{formId:e,description:"Form에 dataKey가 설정되지 않아 자동 바인딩이 동작하지 않습니다",suggestion:"Form 컴포넌트에 dataKey props를 설정하세요",docLink:"troubleshooting-components-form.md"}),r.isContextBroken){const u=r.breakReason?.includes("sortable")?"sortable-context-break":r.breakReason?.includes("modal")?"modal-context-isolation":"context-not-propagated";this.trackFormBindingIssue(u,"warning",{formId:e,formDataKey:t,contextInfo:{hasParentFormContext:r.hasParentContext,parentFormContextProp:r.parentContextProp,isInsideSortable:r.breakReason?.includes("sortable")||!1,isInsideModal:r.breakReason?.includes("modal")||!1,depth:0},description:r.breakReason||"Form 컨텍스트가 제대로 전파되지 않았습니다",suggestion:"parentFormContextProp={undefined}를 확인하거나 중첩 구조를 검토하세요",docLink:"troubleshooting-components-form.md"})}const l={formId:e,dataKey:t,timestamp:Date.now(),contextPropagation:r,inputBindings:o,isValid:o.every(u=>u.isValid)&&!!t&&!r.isContextBroken,issueCount:o.filter(u=>!u.isValid).length+(t?0:1)+(r.isContextBroken?1:0)},d=this.formBindingValidations.findIndex(u=>u.formId===e);return d>=0?this.formBindingValidations[d]=l:this.formBindingValidations.push(l),l}getFormBindingValidationTrackingInfo(){const e=this.getFormBindingValidationStats();return{issues:[...this.formBindingIssues],validations:[...this.formBindingValidations],stats:e,timestamp:Date.now()}}getFormBindingValidationStats(){const e={"missing-datakey":0,"missing-input-name":0,"context-not-propagated":0,"sortable-context-break":0,"modal-context-isolation":0,"duplicate-input-name":0,"value-type-mismatch":0,"binding-path-invalid":0},t={info:0,warning:0,error:0};for(const r of this.formBindingIssues)e[r.type]++,t[r.severity]++;const s=Object.entries(e).filter(([,r])=>r>0).sort((r,o)=>o[1]-r[1]).slice(0,5).map(([r,o])=>({type:r,count:o,description:this.getIssueTypeDescription(r)}));return{totalFormsValidated:this.formBindingValidations.length,validForms:this.formBindingValidations.filter(r=>r.isValid).length,formsWithIssues:this.formBindingValidations.filter(r=>!r.isValid).length,totalIssues:this.formBindingIssues.length,byIssueType:e,bySeverity:t,topIssues:s}}getIssueTypeDescription(e){return{"missing-datakey":"Form에 dataKey 누락","missing-input-name":"Input에 name 속성 누락","context-not-propagated":"Form 컨텍스트 전파 실패","sortable-context-break":"Sortable 컨테이너에서 컨텍스트 단절","modal-context-isolation":"모달에서 부모 Form 컨텍스트 격리","duplicate-input-name":"동일 Form 내 중복 Input name","value-type-mismatch":"값 타입과 Input 타입 불일치","binding-path-invalid":"바인딩 경로 유효하지 않음"}[e]||e}clearFormBindingIssues(){this.formBindingIssues=[],this.formBindingValidations=[],this.formBindingIssueIdCounter=0}trackComputedProperty(e,t,s,r,o,l,d){if(!this.config.enabled)return;const u=`computed-${e}-${l||"global"}`,f={id:u,name:e,expression:t,componentId:l,dependencies:s,currentValue:this.safeClone(r),lastComputedAt:Date.now(),computationTime:o,error:d};this.computedProperties.set(u,f)}trackComputedRecalc(e,t,s,r,o,l,d){if(!this.config.enabled)return;const u=`computed-${e}-${d||"global"}`,f=JSON.stringify(s)!==JSON.stringify(r),g={id:`recalc-${++this.computedRecalcIdCounter}`,computedId:u,computedName:e,timestamp:Date.now(),trigger:t,triggeredBy:l,previousValue:this.safeClone(s),newValue:this.safeClone(r),valueChanged:f,computationTime:o,cascadeCount:0};this.computedRecalcLogs.push(g),this.computedRecalcLogs.length>this.maxComputedRecalcLogs&&this.computedRecalcLogs.shift();const h=this.computedProperties.get(u);h&&(h.currentValue=this.safeClone(r),h.lastComputedAt=Date.now(),h.computationTime=o)}analyzeComputedDependencyChain(e,t){const s=new Set,r=[];let o=!1,l,d=0;const u=(g,h)=>{if(d=Math.max(d,h),s.has(g))return o=!0,l=[...r,g],{name:g,type:"computed",children:[],depth:h};s.add(g),r.push(g);const b=this.computedProperties.get(`computed-${g}-${t||"global"}`),y=[];if(b)for(const v of b.dependencies)v.type==="computed"?y.push(u(v.path,h+1)):y.push({name:v.path,type:v.type,children:[],depth:h+1});return r.pop(),s.delete(g),{name:g,type:"computed",children:y,depth:h}},f=u(e,0);return{root:e,tree:f,hasCycle:o,cyclePath:l,maxDepth:d}}getComputedDependencyTrackingInfo(){const e=Array.from(this.computedProperties.values()),t=this.getComputedDependencyStats(),s=[];for(const r of e){const o=this.analyzeComputedDependencyChain(r.name,r.componentId);s.push(o)}return{properties:e,recalcLogs:[...this.computedRecalcLogs],dependencyChains:s,stats:t,timestamp:Date.now()}}getComputedDependencyStats(){const e={"state-change":0,"datasource-update":0,"dependency-change":0,manual:0,initial:0},t={},s={};let r=0,o=0;for(const f of this.computedRecalcLogs)e[f.trigger]++,f.valueChanged||o++,t[f.computedName]=(t[f.computedName]||0)+1,s[f.computedName]||(s[f.computedName]=[]),s[f.computedName].push(f.computationTime),r+=f.computationTime;const l=Object.entries(t).sort((f,g)=>g[1]-f[1]).slice(0,5).map(([f,g])=>({name:f,count:g})),d=Object.entries(s).map(([f,g])=>({name:f,avgTime:g.reduce((h,b)=>h+b,0)/g.length})).sort((f,g)=>g.avgTime-f.avgTime).slice(0,5);let u=0;for(const f of this.computedProperties.values())this.analyzeComputedDependencyChain(f.name,f.componentId).hasCycle&&u++;return{totalComputed:this.computedProperties.size,totalRecalculations:this.computedRecalcLogs.length,unnecessaryRecalculations:o,avgComputationTime:this.computedRecalcLogs.length>0?r/this.computedRecalcLogs.length:0,topRecalculated:l,slowestComputed:d,cycleDetectionCount:u,byTrigger:e}}clearComputedTracking(){this.computedProperties.clear(),this.computedRecalcLogs=[],this.computedRecalcIdCounter=0}trackModalOpen(e){if(!this.config.enabled)return;const t={modalId:e.modalId,modalName:e.modalName,openedAt:Date.now(),closedAt:null,scopeType:e.scopeType||"isolated",parentModalId:e.parentModalId,componentId:e.componentId,initialState:e.initialState?{...e.initialState}:{},currentState:e.initialState?{...e.initialState}:{},stateChangeCount:0,isolatedStateKeys:e.isolatedStateKeys||[],sharedStateKeys:e.sharedStateKeys||[]};this.modalStates.set(e.modalId,t),this.validateModalDefinitionExists(e.modalId,e.modalName),e.parentModalId&&(this.modalStateRelations.find(r=>r.parentModalId===e.parentModalId&&r.childModalId===e.modalId)||this.modalStateRelations.push({parentModalId:e.parentModalId,childModalId:e.modalId,sharedKeys:e.sharedStateKeys||[],isolatedKeys:e.isolatedStateKeys||[],relationType:"parent-child"}))}trackModalClose(e,t){if(!this.config.enabled)return;const s=this.modalStates.get(e);s&&(s.closedAt=Date.now(),t&&(s.currentState={...t}),this.detectStateLeakage(s))}validateModalDefinitionExists(e,t){const s=this.currentLayout;if(!s?.layoutJson)return;const r=s.layoutJson.modals;if(!r){this.recordModalStateIssue({type:"missing-definition",modalId:e,modalName:t,severity:"error",description:`모달 "${e}"이(가) modalStack에 추가되었으나, 현재 레이아웃에 modals 섹션이 없습니다. 레이아웃 경로: ${s.layoutPath}`,affectedStateKeys:[],expectedValue:`modals 섹션에 id="${e}" 정의 존재`,actualValue:"modals 섹션 없음"});return}const o=Array.isArray(r)?r:Object.values(r);o.some(d=>d?.id===e||d?.props?.id===e)||this.recordModalStateIssue({type:"missing-definition",modalId:e,modalName:t,severity:"error",description:`모달 "${e}"이(가) modalStack에 추가되었으나, 렌더링된 레이아웃의 modals 섹션에 해당 ID의 정의가 없습니다. partial 로딩 실패, 레이아웃 병합 문제, extends 상속 누락 등을 확인하세요. 레이아웃 경로: ${s.layoutPath}`,affectedStateKeys:[],expectedValue:`modals 배열에 id="${e}" 항목 존재`,actualValue:`modals 배열에 ${o.length}개 모달 정의 (${o.map(d=>d?.id||"unknown").join(", ")})`})}trackModalStateChange(e){if(!this.config.enabled)return;const t=this.modalStates.get(e.modalId);if(!t)return;t.stateChangeCount++,t.currentState[e.stateKey]=e.newValue;const s=this.checkIsolationViolation(t,e.stateKey),r={id:`modal-change-${++this.modalStateChangeLogIdCounter}`,modalId:e.modalId,modalName:t.modalName,timestamp:Date.now(),stateKey:e.stateKey,previousValue:e.previousValue,newValue:e.newValue,changeSource:e.changeSource||"user-action",violatesIsolation:s};this.modalStateChangeLogs.push(r),this.modalStateChangeLogs.length>this.maxModalStateChangeLogs&&this.modalStateChangeLogs.shift(),s&&this.recordModalStateIssue({type:"isolation-violation",modalId:e.modalId,modalName:t.modalName,severity:"warning",description:`모달 '${t.modalName}'에서 격리된 상태 키 '${e.stateKey}'가 변경됨`,affectedStateKeys:[e.stateKey]})}detectStateLeakage(e){if(e.scopeType==="isolated")for(const t of e.isolatedStateKeys){const s=e.initialState[t],r=e.currentState[t];if(s!==r&&e.parentModalId){const o=this.modalStates.get(e.parentModalId);o&&o.currentState.hasOwnProperty(t)&&this.recordModalStateIssue({type:"state-leakage",modalId:e.modalId,modalName:e.modalName,severity:"error",description:`모달 닫힘 후 상태 '${t}'가 부모 모달로 유출될 수 있음`,affectedStateKeys:[t],leakedValue:r,expectedValue:s})}}}checkIsolationViolation(e,t){return e.scopeType==="isolated",!1}recordModalStateIssue(e){const t={id:`modal-issue-${++this.modalStateIssueIdCounter}`,type:e.type,modalId:e.modalId,modalName:e.modalName,timestamp:Date.now(),severity:e.severity,description:e.description,affectedStateKeys:e.affectedStateKeys,leakedValue:e.leakedValue,expectedValue:e.expectedValue,actualValue:e.actualValue,stackInfo:e.stackInfo};this.modalStateIssues.push(t),this.modalStateIssues.length>this.maxModalStateIssues&&this.modalStateIssues.shift()}getModalStateScopeTrackingInfo(){const e=Array.from(this.modalStates.values()),t=this.getModalStateScopeStats();return{modals:e,issues:[...this.modalStateIssues],relations:[...this.modalStateRelations],changeLogs:[...this.modalStateChangeLogs],stats:t,timestamp:Date.now()}}getModalStateScopeStats(){const e=Array.from(this.modalStates.values()),t={warning:0,error:0},s={"state-leakage":0,"isolation-violation":0,"parent-mutation":0,"orphaned-state":0,"scope-mismatch":0,"cleanup-failure":0,"missing-definition":0};for(const o of this.modalStateIssues)t[o.severity]++,s[o.type]++;const r={isolated:0,shared:0,inherited:0};for(const o of e)r[o.scopeType]++;return{totalModals:e.length,openModals:e.filter(o=>o.closedAt===null).length,nestedModals:e.filter(o=>o.parentModalId!==void 0).length,totalIssues:this.modalStateIssues.length,issuesBySeverity:t,issuesByType:s,byScope:r,leakageDetectionCount:s["state-leakage"],cleanupFailureCount:s["cleanup-failure"]}}clearModalStateScopeTracking(){this.modalStates.clear(),this.modalStateIssues=[],this.modalStateRelations=[],this.modalStateChangeLogs=[],this.modalStateIssueIdCounter=0,this.modalStateChangeLogIdCounter=0}setNamedActionDefinitions(e){this.config.enabled&&(this.namedActionDefinitions=e||{})}trackNamedActionRef(e){if(!this.config.enabled)return;const t={...e,id:`named_action_ref_${++this.namedActionRefIdCounter}`};this.namedActionRefLogs.push(t),this.namedActionRefLogs.length>this.maxNamedActionRefLogs&&(this.namedActionRefLogs=this.namedActionRefLogs.slice(-this.maxNamedActionRefLogs))}getNamedActionTrackingInfo(){const e={};for(const s of this.namedActionRefLogs)e[s.actionRefName]=(e[s.actionRefName]||0)+1;const t=Object.keys(this.namedActionDefinitions).filter(s=>!e[s]);return{definitions:this.namedActionDefinitions,refLogs:[...this.namedActionRefLogs],stats:{totalDefinitions:Object.keys(this.namedActionDefinitions).length,totalRefs:this.namedActionRefLogs.length,refCountByName:e,unusedDefinitions:t},timestamp:Date.now()}}clearNamedActionTracking(){this.namedActionDefinitions={},this.namedActionRefLogs=[],this.namedActionRefIdCounter=0}trackExpressionEval(e){if(!this.config.enabled)return;const t={...e,id:`expr-${++this.expressionIdCounter}`,timestamp:Date.now(),warning:this.detectExpressionWarning(e)};this.expressionHistory.push(t),this.expressionHistory.length>500&&this.expressionHistory.shift(),this.isProfiling&&this.profilingData.push({type:"binding",expression:e.expression,timestamp:performance.now(),duration:e.duration}),this.notifyExpressionWatchers(t)}detectExpressionWarning(e){const{expression:t,result:s,resultType:r,method:o,duration:l}=e;if(r==="undefined"&&!t.includes("??")&&!t.includes("||")&&/^[a-zA-Z_$][a-zA-Z0-9_$.]*$/.test(t.replace(/{{|}}/g,"").trim()))return{type:"undefined-result",message:"표현식 결과가 undefined입니다",suggestion:`데이터가 로드되었는지 확인하거나 fallback 값을 추가하세요: ${t} ?? ''`};if(r==="null")return{type:"null-result",message:"표현식 결과가 null입니다",suggestion:`nullish coalescing 연산자를 사용하세요: ${t} ?? ''`};if(o==="resolveBindings"&&r==="string"){const d=String(s);if(d.includes("[object Object]")||/^\[.*\]$/.test(d))return{type:"array-to-string",message:"배열/객체가 문자열로 변환되었습니다",suggestion:"evaluateExpression()을 사용하여 원본 타입을 유지하세요"}}if(o==="resolveBindings"&&r==="string"&&String(s).includes("[object Object]"))return{type:"object-to-string",message:"객체가 [object Object]로 변환되었습니다",suggestion:"evaluateExpression()을 사용하거나 특정 속성에 접근하세요"};if(r==="undefined"&&t.includes(".")&&!t.includes("?.")){const d=t.replace(/{{|}}/g,"").trim().split(".");if(d.length>=2)return{type:"missing-optional-chain",message:"Optional chaining(?.) 누락 가능성",suggestion:`안전한 접근을 위해 ?. 사용을 고려하세요: ${d.join("?.")}`}}if((t.includes("{{item.")||t.includes("{{index}}"))&&Array.from(this.iterations.values()).some(f=>f.itemVar!=="item"))return{type:"wrong-iteration-var",message:"'item'/'index' 대신 iteration에서 정의한 변수명을 사용해야 합니다",suggestion:"iteration의 item_var/index_var에 정의된 변수명을 확인하세요"};if(l&&l>10)return{type:"slow-evaluation",message:`표현식 평가에 ${l.toFixed(2)}ms 소요됨`,suggestion:"복잡한 표현식을 단순화하거나 computed 값으로 분리하세요"}}getExpressions(){return[...this.expressionHistory]}getExpressionWarnings(){return this.expressionHistory.filter(e=>e.warning!=null)}searchExpressions(e){const t=e.toLowerCase();return this.expressionHistory.filter(s=>s.expression.toLowerCase().includes(t)||s.componentName?.toLowerCase().includes(t)||s.propName?.toLowerCase().includes(t))}getExpressionStats(){const e=this.expressionHistory,t=new Set(e.map(u=>u.expression)),s=e.filter(u=>u.warning!=null),r=e.filter(u=>u.fromCache),o=e.filter(u=>u.duration!=null).map(u=>u.duration),l={};for(const u of e)l[u.resultType]=(l[u.resultType]||0)+1;const d={};for(const u of s)u.warning&&(d[u.warning.type]=(d[u.warning.type]||0)+1);return{totalEvaluations:e.length,uniqueExpressions:t.size,warningCount:s.length,cacheHitRate:e.length>0?r.length/e.length:0,averageDuration:o.length>0?o.reduce((u,f)=>u+f,0)/o.length:0,byType:l,byWarning:d}}clearExpressions(){this.expressionHistory=[],this.expressionIdCounter=0}watchExpressions(e){return this.expressionWatchers.add(e),()=>{this.expressionWatchers.delete(e)}}notifyExpressionWatchers(e){this.expressionWatchers.forEach(t=>{try{t(e)}catch(s){console.error("[G7DevTools] Expression watcher error:",s)}})}setLogLevel(e){this.config.logLevel=e}setMaxHistory(e){this.config.maxHistorySize=Math.max(10,Math.min(1e3,e))}setServerEndpoint(e){this.config.serverEndpoint=e}getConfig(){return{...this.config}}generateId(){return`${Date.now()}-${Math.random().toString(36).substr(2,9)}`}sanitizeObject(e,t=new WeakSet){if(e===null||typeof e!="object")return e;if(t.has(e))return"[Circular]";if(t.add(e),Array.isArray(e))return e.map(r=>this.sanitizeObject(r,t));const s={};for(const r of Object.keys(e))try{s[r]=this.sanitizeObject(e[r],t)}catch{s[r]="[Unable to serialize]"}return s}getNestedValue(e,t){if(!t)return e;const s=t.split(".");let r=e;for(const o of s){if(r==null)return;r=r[o]}return r}getLifecycleInfo(){return{mountedComponents:Array.from(this.mountedComponents.values()),orphanedListeners:this.getOrphanedListeners()}}getPerformanceInfo(){return{renderCounts:this.renderCounts,bindingEvalCount:this.bindingEvalCount,memoryWarnings:this.getMemoryWarnings()}}getNetworkInfo(){return{activeRequests:Array.from(this.activeRequests.values()),requestHistory:[...this.requestHistory],pendingDataSources:Array.from(this.pendingDataSources)}}getConditionalInfo(){return{ifConditions:Array.from(this.ifConditions.values()),iterations:Array.from(this.iterations.values())}}getFormInfo(){return Array.from(this.forms.values())}getWebSocketInfo(){return{connections:Array.from(this.wsConnections.values()),messageHistory:[...this.wsMessageHistory],connectionState:this.getWebSocketConnectionState()}}getStateAtTime(e){const t=[...this.stateHistory].reverse().find(s=>s.timestamp<=e);if(t)return{_global:t.next,_local:{}}}reset(){this.stateHistory=[],this.actionHistory=[],this.cacheStats={hits:0,misses:0,entries:0},this.cacheDecisions=[],this.cacheDecisionIdCounter=0,this.currentRenderCycleId=null,this.isInActionExecution=!1,this.isInIteration=!1,this.mountedComponents.clear(),this.eventListeners.clear(),this.renderCounts.clear(),this.bindingEvalCount=0,this.profilingData=[],this.activeRequests.clear(),this.requestHistory=[],this.pendingDataSources.clear(),this.wsConnections.clear(),this.wsMessageHistory=[],this.ifConditions.clear(),this.iterations.clear(),this.forms.clear(),this.expressionHistory=[],this.expressionIdCounter=0,this.dataSources.clear(),this.dataPathTransforms=[],this.nestedContexts=[],this.nestedContextIdCounter=0,this.formBindingIssues=[],this.formBindingValidations=[],this.formBindingIssueIdCounter=0,this.computedProperties.clear(),this.computedRecalcLogs=[],this.computedRecalcIdCounter=0,this.modalStates.clear(),this.modalStateIssues=[],this.modalStateRelations=[],this.modalStateChangeLogs=[],this.modalStateIssueIdCounter=0,this.modalStateChangeLogIdCounter=0,this.logHistory=[],this.logIdCounter=0}getExpressionInfo(){return{expressions:this.getExpressions(),stats:this.getExpressionStats()}}trackLog(e,t,s){if(!this.config.enabled)return;const r=s.map(l=>{if(typeof l=="string")return l;try{return JSON.stringify(l)}catch{return String(l)}}).join(" "),o={id:`log-${++this.logIdCounter}`,level:e,prefix:t,message:r,args:this.sanitizeObject(s),timestamp:Date.now(),stack:e==="error"?new Error().stack:void 0};this.logHistory.push(o),this.logHistory.length>this.maxLogHistory&&this.logHistory.shift()}trackAction(e){if(!this.config.enabled)return;const t={id:`debounce-action-${++this.debounceActionIdCounter}`,...e,timestamp:Date.now()};this.debounceActionHistory.push(t),this.debounceActionHistory.length>100&&this.debounceActionHistory.shift()}trackDataSourceUpdate(e){if(!this.config.enabled)return;const t={id:`ds-update-${++this.dataSourceUpdateIdCounter}`,...e};this.dataSourceUpdateHistory.push(t),this.dataSourceUpdateHistory.length>100&&this.dataSourceUpdateHistory.shift()}getDebounceActionHistory(e){let t=[...this.debounceActionHistory];return e?.handler&&(t=t.filter(s=>s.handler.includes(e.handler))),e?.status&&(t=t.filter(s=>s.status===e.status)),e?.limit&&(t=t.slice(-e.limit)),t}getDataSourceUpdateHistory(e){let t=[...this.dataSourceUpdateHistory];return e?.dataSourceId&&(t=t.filter(s=>s.dataSourceId===e.dataSourceId)),e?.updateType&&(t=t.filter(s=>s.updateType===e.updateType)),e?.limit&&(t=t.slice(-e.limit)),t}getLogs(e){let t=[...this.logHistory];if(e?.level){const s=Array.isArray(e.level)?e.level:[e.level];t=t.filter(r=>s.includes(r.level))}if(e?.prefix){const s=e.prefix.toLowerCase();t=t.filter(r=>r.prefix.toLowerCase().includes(s))}if(e?.search){const s=e.search.toLowerCase();t=t.filter(r=>r.message.toLowerCase().includes(s))}return e?.since&&(t=t.filter(s=>s.timestamp>=e.since)),e?.limit&&(t=t.slice(-e.limit)),t}getLogStats(){const t=Date.now()-6e4,s={log:0,warn:0,error:0,debug:0,info:0},r={};let o=0,l=0;for(const d of this.logHistory)s[d.level]++,r[d.prefix]=(r[d.prefix]||0)+1,d.timestamp>=t&&(d.level==="error"&&o++,d.level==="warn"&&l++);return{totalLogs:this.logHistory.length,byLevel:s,byPrefix:r,recentErrors:o,recentWarnings:l}}clearLogs(){this.logHistory=[],this.logIdCounter=0}getLogInfo(){return{entries:this.getLogs(),stats:this.getLogStats()}}trackDataSourceDefinition(e){this.config.enabled&&this.dataSources.set(e.id,{...e,status:"idle"})}trackDataSourceLoading(e){if(!this.config.enabled)return;const t=this.dataSources.get(e);t&&this.dataSources.set(e,{...t,status:"loading"})}trackDataSourceLoaded(e,t,s){if(!this.config.enabled)return;const r=this.dataSources.get(e);if(!r)return;let o,l,d=s;t&&(Array.isArray(t)?(o=t.length,l=t.length>0&&typeof t[0]=="object"?Object.keys(t[0]):void 0):typeof t=="object"&&(Array.isArray(t.data)?(d=d||"data",o=t.data.length,l=t.data.length>0&&typeof t.data[0]=="object"?Object.keys(t.data[0]):void 0):Array.isArray(t.items)?(d=d||"items",o=t.items.length,l=t.items.length>0&&typeof t.items[0]=="object"?Object.keys(t.items[0]):void 0):l=Object.keys(t))),this.dataSources.set(e,{...r,status:"loaded",dataPath:d,itemCount:o,keys:l,lastLoadedAt:Date.now(),error:void 0})}trackDataSourceError(e,t){if(!this.config.enabled)return;const s=this.dataSources.get(e);s&&this.dataSources.set(e,{...s,status:"error",error:t,lastLoadedAt:Date.now()})}untrackDataSource(e){this.dataSources.delete(e)}getDataSources(){return Array.from(this.dataSources.values())}getDataSource(e){return this.dataSources.get(e)}clearDataSources(){this.dataSources.clear()}trackDataPathTransform(e){if(!this.config.enabled)return;let t=this.dataPathTransforms.find(s=>s.dataSourceId===e.dataSourceId);t||(t={dataSourceId:e.dataSourceId,timestamp:Date.now(),transformSteps:[],warnings:[]},this.dataPathTransforms.push(t),this.dataPathTransforms.length>this.maxDataPathTransforms&&this.dataPathTransforms.shift()),t.transformSteps.push({step:e.step,inputPath:e.inputPath,inputValue:this.safeClone(e.inputValue),outputPath:e.outputPath,outputValue:this.safeClone(e.outputValue),config:e.config}),e.warning&&t.warnings.push(e.warning)}setDataPathFinalBinding(e,t){if(!this.config.enabled)return;const s=this.dataPathTransforms.find(r=>r.dataSourceId===e);s&&(s.finalBinding={expression:t.expression,resolvedPath:t.resolvedPath,value:this.safeClone(t.value)})}getDataPathTransformTrackingInfo(){const e=this.getDataPathTransformStats();return{transforms:[...this.dataPathTransforms],stats:e,timestamp:Date.now()}}getDataPathTransformStats(){const e=this.dataPathTransforms,t={};let s=0;const r={};for(const l of e){t[l.dataSourceId]=(t[l.dataSourceId]||0)+1,s+=l.warnings.length;for(const d of l.warnings)r[d]=(r[d]||0)+1}const o=Object.entries(r).map(([l,d])=>({warning:l,count:d})).sort((l,d)=>d.count-l.count).slice(0,10);return{totalTransforms:e.length,byDataSource:t,warningsCount:s,commonWarnings:o}}getDataPathTransformForDataSource(e){return this.dataPathTransforms.find(t=>t.dataSourceId===e)}clearDataPathTransforms(){this.dataPathTransforms=[]}trackNestedContext(e){if(!this.config.enabled)return"";const t=`nested-${++this.nestedContextIdCounter}`,s=[...new Set([...e.parentContext.available,...e.ownContext.added])],r={...e.parentContext.values,...e.ownContext.values},o={id:t,timestamp:Date.now(),componentId:e.componentId,componentType:e.componentType,parentContext:{available:e.parentContext.available,values:this.safeClone(e.parentContext.values)},ownContext:{added:e.ownContext.added,values:this.safeClone(e.ownContext.values)},mergedContext:{all:s,values:this.safeClone(r)},accessAttempts:[],depth:e.depth,parentId:e.parentId};return this.nestedContexts.push(o),this.nestedContexts.length>this.maxNestedContexts&&this.nestedContexts.shift(),t}trackNestedContextAccess(e,t){if(!this.config.enabled)return;const s=this.nestedContexts.find(r=>r.id===e);s&&s.accessAttempts.push({path:t.path,found:t.found,value:t.found?this.safeClone(t.value):void 0,error:t.error})}getNestedContextTrackingInfo(){const e=this.getNestedContextStats();return{contexts:[...this.nestedContexts],stats:e,timestamp:Date.now()}}getNestedContextStats(){const e=this.nestedContexts,t={expandChildren:0,cellChildren:0,iteration:0,modal:0,slot:0};let s=0,r=0;const o={};for(const d of e){t[d.componentType]++,d.depth>s&&(s=d.depth);for(const u of d.accessAttempts)u.found||(r++,o[u.path]=(o[u.path]||0)+1)}const l=Object.entries(o).map(([d,u])=>({path:d,count:u})).sort((d,u)=>u.count-d.count).slice(0,10);return{totalContexts:e.length,byType:t,maxDepth:s,failedAccessCount:r,commonFailedPaths:l}}getNestedContextForComponent(e){return this.nestedContexts.find(t=>t.componentId===e)}clearNestedContexts(){this.nestedContexts=[],this.nestedContextIdCounter=0}trackHandlerRegistration(e,t="custom",s,r){this.isEnabled&&this.handlers.set(e,{name:e,category:t,description:s,registeredAt:Date.now(),source:r})}trackHandlerUnregistration(e){this.isEnabled&&this.handlers.delete(e)}getHandlers(){return Array.from(this.handlers.values())}getHandler(e){return this.handlers.get(e)}getHandlersByCategory(e){return Array.from(this.handlers.values()).filter(t=>t.category===e)}clearHandlers(){this.handlers.clear()}trackEventSubscribe(e){if(!this.isEnabled)return;const t=this.componentEventSubscriptions.get(e),s=Date.now();t?(t.subscriberCount++,t.lastSubscribedAt=s):this.componentEventSubscriptions.set(e,{eventName:e,subscriberCount:1,firstSubscribedAt:s,lastSubscribedAt:s})}trackEventUnsubscribe(e){if(!this.isEnabled)return;const t=this.componentEventSubscriptions.get(e);t&&(t.subscriberCount--,t.subscriberCount<=0&&this.componentEventSubscriptions.delete(e))}trackEventEmit(e,t,s,r,o){if(!this.isEnabled)return;const l={id:`evt_${++this.componentEventIdCounter}`,eventName:e,data:this.sanitizeForLogging(t),timestamp:Date.now(),listenerCount:s,results:r?this.sanitizeForLogging(r):void 0,hasError:!!o,errorMessage:o?.message};this.componentEventEmitHistory.push(l),this.componentEventEmitHistory.length>this.maxComponentEventHistory&&(this.componentEventEmitHistory=this.componentEventEmitHistory.slice(-this.maxComponentEventHistory))}trackEventOff(e){this.isEnabled&&this.componentEventSubscriptions.delete(e)}trackEventClear(){this.isEnabled&&this.componentEventSubscriptions.clear()}getComponentEventInfo(){const e=Array.from(this.componentEventSubscriptions.values());return{subscriptions:e,emitHistory:[...this.componentEventEmitHistory],totalSubscribers:e.reduce((t,s)=>t+s.subscriberCount,0),totalEmits:this.componentEventEmitHistory.length}}getEventEmitHistory(){return[...this.componentEventEmitHistory]}getEventSubscriptions(){return Array.from(this.componentEventSubscriptions.values())}clearComponentEvents(){this.componentEventSubscriptions.clear(),this.componentEventEmitHistory=[],this.componentEventIdCounter=0}sanitizeForLogging(e){if(e==null||typeof e!="object")return e;try{return JSON.parse(JSON.stringify(e))}catch{return"[Circular or Non-serializable]"}}startStateChange(e,t,s,r){if(!this.config.enabled)return"";const o=`setState_${++this.stateRenderingIdCounter}`;this.currentStateChangeContext={setStateId:o,startTime:performance.now(),changedPath:e,trigger:r||{},renderedComponents:[]};const l={id:`sr_${this.stateRenderingIdCounter}`,setStateId:o,statePath:e,oldValue:this.sanitizeForLogging(t),newValue:this.sanitizeForLogging(s),timestamp:Date.now(),triggeredBy:r||{},renderedComponents:[],totalRenderDuration:0,affectedBindingsCount:0};return this.stateRenderingLogs.push(l),this.stateRenderingLogs.length>this.maxStateRenderingLogs&&this.stateRenderingLogs.shift(),o}trackComponentRender(e,t,s,r=[],o=[],l){if(!this.config.enabled)return;const d=this.componentRenderCounts.get(t)||0;this.componentRenderCounts.set(t,d+1);for(const u of r)this.stateToComponentMap.has(u)||this.stateToComponentMap.set(u,new Set),this.stateToComponentMap.get(u).add(t);if(this.currentStateChangeContext){const u={componentId:e,componentName:t,renderDuration:s,accessedStatePaths:r,evaluatedBindings:o,renderOrder:this.currentStateChangeContext.renderedComponents.length,parentId:l};this.currentStateChangeContext.renderedComponents.push(u)}this.trackRender(t)}completeStateChange(e){if(!this.config.enabled||!this.currentStateChangeContext||this.currentStateChangeContext.setStateId!==e)return;const t=this.currentStateChangeContext,r=performance.now()-t.startTime,o=this.stateRenderingLogs.findIndex(l=>l.setStateId===e);if(o>=0){const l=this.stateRenderingLogs[o];l.renderedComponents=t.renderedComponents,l.totalRenderDuration=r,l.affectedBindingsCount=t.renderedComponents.reduce((d,u)=>d+u.evaluatedBindings.length,0)}this.currentStateChangeContext=null}getCurrentStateChangeContext(){return this.currentStateChangeContext}getStateRenderingLogs(){return[...this.stateRenderingLogs]}getStateRenderingInfo(){const e=this.stateRenderingLogs,t=Object.fromEntries(this.componentRenderCounts),s={};for(const[r,o]of this.stateToComponentMap)s[r]=Array.from(o);return{logs:e,componentRenderCounts:t,stateToComponentMap:s,stats:this.calculateStateRenderingStats()}}calculateStateRenderingStats(){const e=this.stateRenderingLogs;if(e.length===0)return{totalStateChanges:0,totalRenders:0,avgRenderDuration:0,avgComponentsPerChange:0,topRenderedComponents:[],topInfluentialPaths:[]};const t=e.reduce((d,u)=>d+u.renderedComponents.length,0),s=e.reduce((d,u)=>d+u.totalRenderDuration,0)/e.length,r=t/e.length,o=Array.from(this.componentRenderCounts.entries()).sort((d,u)=>u[1]-d[1]).slice(0,5).map(([d,u])=>({name:d,count:u})),l=Array.from(this.stateToComponentMap.entries()).sort((d,u)=>u[1].size-d[1].size).slice(0,5).map(([d,u])=>({path:d,affectedComponents:u.size}));return{totalStateChanges:e.length,totalRenders:t,avgRenderDuration:s,avgComponentsPerChange:r,topRenderedComponents:o,topInfluentialPaths:l}}getComponentsAffectedByState(e){const t=this.stateToComponentMap.get(e);return t?Array.from(t):[]}getComponentRenderHistory(e){return this.stateRenderingLogs.filter(t=>t.renderedComponents.some(s=>s.componentName===e))}clearStateRenderingLogs(){this.stateRenderingLogs=[],this.componentRenderCounts.clear(),this.stateToComponentMap.clear(),this.currentStateChangeContext=null,this.stateRenderingIdCounter=0}trackComponentStateSource(e,t,s,r){this.config.enabled&&this.componentStateSources.set(e,{componentId:e,componentName:t,stateSource:s,stateProvider:r})}trackDynamicState(e,t){this.config.enabled&&this.dynamicStates.set(e,t)}trackContextFlow(e,t,s,r,o,l){if(!this.config.enabled)return;const d={component:t,componentId:e,contextReceived:s,passedToChildren:r,usedInRender:o};if(this.contextFlowNodes.set(e,d),l){const u=this.contextFlowNodes.get(l);u&&(u.children||(u.children=[]),u.children.push(d))}}getStateHierarchyInfo(e=!0){const t=this.buildStateHierarchyLayers(),s=this.detectStateConflicts(t),r=Array.from(this.componentStateSources.values());return{layers:e?t.map(l=>({...l,values:this.summarizeValues(l.values,2)})):t,conflicts:s,componentStateSources:r,timestamp:Date.now()}}summarizeValues(e,t,s=0){if(e==null)return e;if(typeof e!="object")return typeof e=="string"&&e.length>100?e.substring(0,100)+`... (${e.length}자)`:e;if(s>=t){if(Array.isArray(e))return`[Array(${e.length})]`;const l=Object.keys(e);return`{${l.slice(0,5).join(", ")}${l.length>5?`, ... +${l.length-5}`:""}}`}if(Array.isArray(e))return e.length<=3?e.map(l=>this.summarizeValues(l,t,s+1)):{__type:"array",__length:e.length,__preview:e.slice(0,3).map(l=>this.summarizeValues(l,t,s+1))};const r={},o=Object.keys(e);for(const l of o)r[l]=this.summarizeValues(e[l],t,s+1);return r}buildStateHierarchyLayers(){const e=[];try{const s=window.G7Core?.state?.get?.();if(!s)return e;s._local&&e.push({name:"Global _local",type:"global",path:"_local",values:s._local,priority:1}),s._global&&e.push({name:"Global _global",type:"global",path:"_global",values:s._global,priority:1});for(const[o,l]of this.dynamicStates)l&&Object.keys(l).length>0&&e.push({name:`DynamicState (${o})`,type:"dynamicState",componentId:o,values:l,priority:2});const r=this.computeEffectiveState(s._local||{});e.push({name:"Effective _local (merged)",type:"effective",values:r,priority:3})}catch(t){console.warn("[G7DevTools] 상태 계층 빌드 실패:",t)}return e}computeEffectiveState(e){const t={...e};for(const[,s]of this.dynamicStates)s._local&&Object.assign(t,s._local);return t}detectStateConflicts(e){const t=[],s=e.find(o=>o.type==="global"&&o.path==="_local");if(!s)return t;const r=e.filter(o=>o.type==="dynamicState");for(const o of r){const l=o.values._local||o.values;for(const[d,u]of Object.entries(l)){const f=s.values[d];if(JSON.stringify(f)!==JSON.stringify(u)){const g=[],h=[];for(const b of this.componentStateSources.values())b.stateSource.local.some(v=>v===`_local.${d}`||v===d)&&(b.stateProvider.type==="dynamicState"?g.push(b.componentName):b.stateProvider.type==="globalState"&&h.push(b.componentName));t.push({path:`_local.${d}`,globalValue:f,dynamicStateValue:u,effectiveValue:u,usedBy:g,notUsedBy:h,severity:h.length>0?"warning":"info",description:h.length>0?`${h.join(", ")}은(는) globalState._local을 읽어 dynamicState 값을 사용하지 못함`:"dynamicState 값이 globalState와 다르지만 모든 컴포넌트가 dynamicState를 사용"})}}}return t}getContextFlowInfo(){const e=[],t=new Set(this.contextFlowNodes.keys());for(const s of this.contextFlowNodes.values())if(s.children)for(const r of s.children)t.delete(r.componentId);for(const s of t){const r=this.contextFlowNodes.get(s);r&&e.push(r)}return{rootComponent:e.length>0?e[0].component:"Unknown",contextFlow:e,timestamp:Date.now()}}clearStateHierarchyData(){this.componentStateSources.clear(),this.contextFlowNodes.clear(),this.dynamicStates.clear()}trackComponentStyle(e,t,s,r){if(!this.config.enabled)return;const o=this.analyzeTailwindClasses(s),l={componentId:e,componentName:t,classes:s,computedStyles:r,tailwindAnalysis:o};this.componentStyles.set(e,l),this.detectStyleIssues(l)}analyzeTailwindClasses(e){const t=[],s=[],r=[],o=[],l=["sm:","md:","lg:","xl:","2xl:"],d=[/bg-\w+-\d+/,/text-\w+-\d+/,/border-\w+-\d+/];for(const u of e){o.push(u),u.startsWith("dark:")&&t.push(u);for(const f of l)if(u.startsWith(f)){s.push(u);break}for(const f of d)if(f.test(u)){r.push(u);break}}return{usedClasses:o,darkClasses:t,responsiveClasses:s,dynamicClasses:r}}detectStyleIssues(e){const{componentId:t,componentName:s,computedStyles:r,tailwindAnalysis:o}=e;(r.opacity==="0"||r.visibility==="hidden"||r.display==="none"||r.width==="0px"&&r.height==="0px")&&this.addStyleIssue({id:this.generateId(),type:"invisible-element",componentId:t,componentName:s,property:r.opacity==="0"?"opacity":r.visibility==="hidden"?"visibility":r.display==="none"?"display":"width/height",currentValue:r.opacity==="0"?"0":r.visibility==="hidden"?"hidden":r.display==="none"?"none":"0px",severity:"warning",description:"요소가 화면에 보이지 않습니다.",suggestion:"opacity, visibility, display, width/height 값을 확인하세요."});const l=o.usedClasses.filter(u=>u.startsWith("bg-")&&!u.startsWith("dark:")),d=o.darkClasses.filter(u=>u.includes("bg-"));l.length>0&&d.length===0&&this.addStyleIssue({id:this.generateId(),type:"dark-mode-missing",componentId:t,componentName:s,property:"background-color",currentValue:l.join(", "),expectedValue:"dark:bg-* 클래스 필요",severity:"info",description:"다크 모드 배경색 클래스가 누락되었습니다.",suggestion:`${l[0]}에 대응하는 dark: 클래스를 추가하세요.`}),o.dynamicClasses.length>0&&this.addStyleIssue({id:this.generateId(),type:"tailwind-purging",componentId:t,componentName:s,property:"class",currentValue:o.dynamicClasses.join(", "),severity:"info",description:"동적으로 생성된 Tailwind 클래스가 있습니다.",suggestion:"tailwind.config.js의 safelist에 추가하거나 전체 클래스명을 상수로 정의하세요."})}addStyleIssue(e){this.styleIssues.some(s=>s.componentId===e.componentId&&s.type===e.type&&s.property===e.property)||this.styleIssues.push(e)}getStyleValidationInfo(){const e=Array.from(this.componentStyles.values());return{issues:[...this.styleIssues],componentStyles:e,stats:{totalComponents:e.length,invisibleCount:this.styleIssues.filter(t=>t.type==="invisible-element").length,tailwindIssueCount:this.styleIssues.filter(t=>t.type==="tailwind-purging").length,darkModeIssueCount:this.styleIssues.filter(t=>t.type==="dark-mode-missing").length},timestamp:Date.now()}}clearStyleValidationData(){this.styleIssues=[],this.componentStyles.clear()}trackAuthEvent(e,t,s,r){if(!this.config.enabled)return;const o={id:`auth_${++this.authEventIdCounter}`,type:e,timestamp:Date.now(),success:t,error:s,details:r};this.authEvents.push(o),this.authEvents.length>this.maxAuthEventHistory&&(this.authEvents=this.authEvents.slice(-this.maxAuthEventHistory))}trackAuthHeader(e,t,s,r,o){if(!this.config.enabled)return;const l={url:e,hasAuthHeader:t,headerType:s,tokenValid:r??!1,responseStatus:o,timestamp:Date.now()};this.authHeaderHistory.push(l),this.authHeaderHistory.length>this.maxAuthEventHistory&&(this.authHeaderHistory=this.authHeaderHistory.slice(-this.maxAuthEventHistory)),o===401&&this.trackAuthEvent("api-unauthorized",!1,`401 Unauthorized: ${e}`,{url:e})}getAuthState(){try{const e=window.G7Core,t=e?.api;let s=e?.auth;!s&&e?.AuthManager?.getInstance&&(s=e.AuthManager.getInstance());const r=t?.getToken?.()||s?.getAccessToken?.()||localStorage.getItem("auth_token")||localStorage.getItem("access_token"),o=s?.getRefreshToken?.()||localStorage.getItem("refresh_token");let l="unknown",d=s?.getUser?.();if(d&&(l="AuthManager"),!d){const y=e?.state?.get?.();d=y?._global?.user||y?._global?.currentUser||y?.user||y?.currentUser,d&&(l="G7Core.state")}const u=s?.isAuthenticated?.()??!1;let f="memory";localStorage.getItem("auth_token")||localStorage.getItem("access_token")?f="localStorage":(sessionStorage.getItem("auth_token")||sessionStorage.getItem("access_token"))&&(f="sessionStorage");const g=!!r&&(!!d||u);let h;r&&typeof r=="string"&&r.length>20?h=`${r.substring(0,10)}...${r.substring(r.length-6)}`:r&&(h="***");const b=d?{id:d.id,email:d.email,name:d.name,roles:d.roles?.map(y=>typeof y=="string"?{name:y}:{id:y.id,name:y.name,guard_name:y.guard_name}),permissions:d.permissions?.map(y=>typeof y=="string"?{name:y}:{id:y.id,name:y.name,guard_name:y.guard_name}),avatar:d.avatar||d.profile_photo_url||d.profile_image,created_at:d.created_at,updated_at:d.updated_at,last_login_at:d.last_login_at,email_verified_at:d.email_verified_at,...d.phone&&{phone:d.phone},...d.nickname&&{nickname:d.nickname},...d.status&&{status:d.status},...d.locale&&{locale:d.locale}}:void 0;return{isAuthenticated:g,user:b,tokens:{hasAccessToken:!!r,hasRefreshToken:!!o,storage:f,accessTokenPreview:h},lastActivity:Date.now(),source:l}}catch{return{isAuthenticated:!1,tokens:{hasAccessToken:!1,hasRefreshToken:!1,storage:"memory"},source:"unknown"}}}getAuthDebugInfo(){const e=[...this.authEvents];return{state:this.getAuthState(),events:e,headerAnalysis:[...this.authHeaderHistory],stats:{loginAttempts:e.filter(t=>t.type==="login").length,successfulLogins:e.filter(t=>t.type==="login"&&t.success).length,failedLogins:e.filter(t=>t.type==="login"&&!t.success).length,tokenRefreshes:e.filter(t=>t.type==="token-refresh").length,unauthorizedResponses:e.filter(t=>t.type==="api-unauthorized").length},timestamp:Date.now()}}clearAuthData(){this.authEvents=[],this.authHeaderHistory=[],this.authEventIdCounter=0}trackLayoutLoad(e,t,s,r="api"){if(!this.config.enabled)return;const o=Date.now();this.currentLayout={layoutPath:e,templateId:t,layoutJson:this.sanitizeObject(s),loadedAt:o,version:s.version,layoutName:s.layout_name,source:r};const l={id:`layout-${++this.layoutIdCounter}`,layoutPath:e,templateId:t,loadedAt:o,source:r,version:s.version};this.layoutHistory.push(l),this.layoutHistory.length>this.maxLayoutHistory&&this.layoutHistory.shift(),this.layoutStats.totalLoads++,r==="cache"?this.layoutStats.cacheHits++:this.layoutStats.apiLoads++}getCurrentLayout(){return this.currentLayout}getLayoutHistory(){return[...this.layoutHistory]}getLayoutDebugInfo(){return{current:this.currentLayout,history:[...this.layoutHistory],stats:{...this.layoutStats}}}clearLayoutData(){this.currentLayout=null,this.layoutHistory=[],this.layoutIdCounter=0,this.layoutStats={totalLoads:0,cacheHits:0,apiLoads:0}}startHandlerExecution(e){if(!this.config.enabled)return"";const t=`exec_${++this.executionIdCounter}_${Date.now()}`,s={handlerName:e,executionId:t,startTime:Date.now(),stateChanges:[],dataSourceChanges:[],alerts:[]};if(this.executionDetails.set(t,s),this.executionDetails.size>this.maxExecutionDetails){const r=Array.from(this.executionDetails.keys());r.slice(0,r.length-this.maxExecutionDetails).forEach(l=>this.executionDetails.delete(l))}return t}endHandlerExecution(e,t,s,r){if(!this.config.enabled||!e)return;const o=this.executionDetails.get(e);if(!o)return;o.endTime=Date.now(),o.duration=o.endTime-o.startTime,o.exitReason=t,o.exitLocation=s,o.exitDescription=r;const l=this.changeExpectations.get(e);l&&(o.expectedChanges=l,this.checkExpectations(e,o,l),this.changeExpectations.delete(e)),t==="normal"&&o.stateChanges.length===0&&o.dataSourceChanges.length===0&&this.addChangeAlert(e,{type:"no-state-change",severity:"warning",message:`핸들러 "${o.handlerName}"이(가) 상태 변경 없이 완료됨`,description:"핸들러가 성공적으로 완료되었지만 상태나 데이터소스 변경이 없습니다. 의도한 동작인지 확인하세요.",handlerName:o.handlerName,suggestion:'핸들러 내부 조건문을 확인하거나 DevTools의 "변경감지" 탭에서 exitLocation을 확인하세요.',docLink:"troubleshooting-state.md"}),(t==="early-return-condition"||t==="early-return-validation")&&this.addChangeAlert(e,{type:"early-return-detected",severity:"info",message:`핸들러 "${o.handlerName}"이(가) early return으로 종료됨`,description:r||`종료 위치: ${s||"알 수 없음"}`,handlerName:o.handlerName,suggestion:t==="early-return-validation"?"검증 실패로 인한 early return입니다. 입력 데이터를 확인하세요.":"조건부 early return입니다. 조건문의 평가 결과를 확인하세요."})}recordExitReason(e,t,s,r){if(!this.config.enabled||!e)return;const o=this.executionDetails.get(e);o&&(o.exitReason=t,o.exitLocation=s,o.exitDescription=r)}recordStateChange(e,t,s,r,o){if(!this.config.enabled)return;const l={id:`sc_${++this.stateChangeIdCounter}`,path:t,changeType:s,oldValue:this.safeClone(r),newValue:this.safeClone(o),timestamp:Date.now(),comparison:this.compareValues(r,o),executionId:e};if(this.stateChangeHistory.push(l),e){const d=this.executionDetails.get(e);d&&d.stateChanges.push(l)}this.stateChangeHistory.length>this.maxStateChangeHistory&&this.stateChangeHistory.splice(0,this.stateChangeHistory.length-this.maxStateChangeHistory),l.comparison.isDeepEqual&&typeof r=="object"&&r!==null&&this.addChangeAlert(e||"",{type:"object-reference-same",severity:"warning",message:`상태 "${t}"가 변경되었으나 값이 동일함`,description:"객체 참조가 동일하거나 깊은 비교 결과 변경이 없습니다. 변경 감지가 실패할 수 있습니다.",handlerName:e&&this.executionDetails.get(e)?.handlerName||"unknown",statePath:t,suggestion:"불변성을 유지하여 새 객체를 생성하세요. 예: { ...oldObject, newField: value }",docLink:"troubleshooting-state.md#object-mutation"})}recordDataSourceChange(e,t,s,r,o){if(!this.config.enabled)return;const l={dataSourceId:t,changeType:s,timestamp:Date.now(),previousStatus:r,newStatus:o,executionId:e};if(this.dataSourceChangeHistory.push(l),e){const d=this.executionDetails.get(e);d&&d.dataSourceChanges.push(l)}this.dataSourceChangeHistory.length>this.maxStateChangeHistory&&this.dataSourceChangeHistory.splice(0,this.dataSourceChangeHistory.length-this.maxStateChangeHistory)}expectChange(e,t,s){if(!this.config.enabled||!e)return;const r=this.executionDetails.get(e);if(!r)return;const o={expectedStatePaths:t,expectedDataSources:s,setAt:Date.now(),source:r.handlerName};this.changeExpectations.set(e,o)}checkExpectations(e,t,s){const r=new Set(t.stateChanges.map(l=>l.path)),o=new Set(t.dataSourceChanges.map(l=>l.dataSourceId));for(const l of s.expectedStatePaths)r.has(l)||this.addChangeAlert(e,{type:"expected-not-fulfilled",severity:"error",message:`기대한 상태 변경 "${l}"가 발생하지 않음`,description:`핸들러 "${t.handlerName}"이(가) "${l}" 변경을 예고했지만 실제로 변경되지 않았습니다.`,handlerName:t.handlerName,statePath:l,suggestion:"핸들러 내부 로직을 확인하세요. early return이나 조건부 분기로 인해 변경이 생략되었을 수 있습니다.",docLink:"troubleshooting-state.md"});for(const l of s.expectedDataSources)o.has(l)||this.addChangeAlert(e,{type:"expected-not-fulfilled",severity:"error",message:`기대한 데이터소스 갱신 "${l}"가 발생하지 않음`,description:`핸들러 "${t.handlerName}"이(가) "${l}" 갱신을 예고했지만 실제로 갱신되지 않았습니다.`,handlerName:t.handlerName,dataSourceId:l,suggestion:"refetchDataSource 호출이 실행되었는지 확인하세요.",docLink:"data-sources.md"})}addChangeAlert(e,t){const s={...t,id:`alert_${++this.alertIdCounter}`,timestamp:Date.now()};if(this.changeAlerts.push(s),e){const r=this.executionDetails.get(e);r&&r.alerts.push(s)}this.changeAlerts.length>this.maxChangeAlerts&&this.changeAlerts.splice(0,this.changeAlerts.length-this.maxChangeAlerts)}compareValues(e,t){const s=this.getValueType(e),r=this.getValueType(t),o=s!==r;let l=!1,d;return!o&&(s==="object"||s==="array")?(l=this.deepEqual(e,t),!l&&s==="object"&&(d=this.getChangedKeys(e,t))):l=e===t,{typeChanged:o,oldType:s,newType:r,isDeepEqual:l,changedKeys:d}}getValueType(e){return e===null?"null":e===void 0?"undefined":Array.isArray(e)?"array":typeof e}deepEqual(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(e===null||t===null||typeof e!="object")return e===t;if(Array.isArray(e)!==Array.isArray(t))return!1;const s=Object.keys(e),r=Object.keys(t);if(s.length!==r.length)return!1;for(const o of s)if(!r.includes(o)||!this.deepEqual(e[o],t[o]))return!1;return!0}getChangedKeys(e,t){const s=[],r=new Set([...Object.keys(e),...Object.keys(t)]);for(const o of r)this.deepEqual(e[o],t[o])||s.push(o);return s}getChangeDetectionInfo(){const e=Array.from(this.executionDetails.values()),t={totalExecutions:e.length,executionsWithStateChange:e.filter(s=>s.stateChanges.length>0).length,executionsWithoutStateChange:e.filter(s=>s.stateChanges.length===0&&s.exitReason==="normal").length,earlyReturnCount:e.filter(s=>s.exitReason==="early-return-condition"||s.exitReason==="early-return-validation").length,alertCount:this.changeAlerts.length,alertsByType:this.getAlertsByType()};return{executionDetails:e,stateChangeHistory:[...this.stateChangeHistory],dataSourceChangeHistory:[...this.dataSourceChangeHistory],alerts:[...this.changeAlerts],stats:t,timestamp:Date.now()}}getAlertsByType(){const e={"no-state-change":0,"no-datasource-change":0,"expected-not-fulfilled":0,"object-reference-same":0,"early-return-detected":0,"async-timing-issue":0};for(const t of this.changeAlerts)e[t.type]++;return e}clearChangeDetectionData(){this.executionDetails.clear(),this.stateChangeHistory=[],this.dataSourceChangeHistory=[],this.changeAlerts=[],this.changeExpectations.clear(),this.executionIdCounter=0,this.stateChangeIdCounter=0,this.alertIdCounter=0}getRecentAlerts(e=10,t){let s=[...this.changeAlerts];return t&&(s=s.filter(r=>r.severity===t)),s.slice(-e)}getHandlerExecutions(e,t=10){return Array.from(this.executionDetails.values()).filter(r=>r.handlerName===e).slice(-t)}findExecutionInStack(e){return this.sequenceExecutionStack.find(t=>t.sequenceId===e)}startSequenceExecution(e){if(!this.config.enabled)return"";const t=`seq_${++this.sequenceIdCounter}_${Date.now()}`,s={sequenceId:t,startTime:Date.now(),totalDuration:0,trigger:e,actions:[],status:"running"};return this.sequenceExecutionStack.push(s),t}captureSequenceActionBefore(e,t,s,r,o){if(!this.config.enabled)return;const l=this.findExecutionInStack(e);if(!l)return;const d={index:t,handler:s,params:this.safeClone(r),stateBeforeAction:{_global:this.safeClone(o._global),_local:this.safeClone(o._local),_isolated:o._isolated?this.safeClone(o._isolated):void 0},stateAfterAction:{_global:{},_local:{}},duration:0,status:"success"};l.actions.push(d)}captureSequenceActionAfter(e,t,s,r,o,l){if(!this.config.enabled)return;const d=this.findExecutionInStack(e);if(!d)return;const u=d.actions.find(g=>g.index===t);if(!u)return;u.stateAfterAction={_global:this.safeClone(s._global),_local:this.safeClone(s._local),_isolated:s._isolated?this.safeClone(s._isolated):void 0},u.duration=r,u.result=this.safeClone(o),u.stateDiff={global:this.computeStateDiff(u.stateBeforeAction._global,u.stateAfterAction._global),local:this.computeStateDiff(u.stateBeforeAction._local,u.stateAfterAction._local)},u.stateBeforeAction._isolated&&u.stateAfterAction._isolated&&(u.stateDiff.isolated=this.computeStateDiff(u.stateBeforeAction._isolated,u.stateAfterAction._isolated));const f=window.__g7PendingLocalState;f&&(u.pendingState=this.safeClone(f)),l&&(u.status="error",u.error={name:l.name,message:l.message,stack:l.stack})}endSequenceExecution(e,t){if(!this.config.enabled)return;const s=this.sequenceExecutionStack.findIndex(o=>o.sequenceId===e);if(s===-1)return;const r=this.sequenceExecutionStack[s];if(r.endTime=Date.now(),r.totalDuration=r.endTime-r.startTime,t){r.status="error",r.error={name:t.name,message:t.message,stack:t.stack};const o=r.actions.find(l=>l.status==="error");o&&(r.failedAtIndex=o.index)}else r.status="success";this.sequenceExecutions.push(r),this.sequenceExecutions.length>this.maxSequenceExecutions&&this.sequenceExecutions.shift(),this.sequenceExecutionStack.splice(s,1)}computeStateDiff(e,t){const s=[],r=[],o=[],l=new Set(Object.keys(e)),d=new Set(Object.keys(t));for(const u of d)l.has(u)||s.push(u);for(const u of l)d.has(u)||r.push(u);for(const u of l)if(d.has(u)){const f=e[u],g=t[u];JSON.stringify(f)!==JSON.stringify(g)&&o.push({path:u,oldValue:f,newValue:g})}return{added:s,removed:r,changed:o}}getSequenceTrackingInfo(){const e=this.getSequenceStats(),t=this.sequenceExecutionStack.length>0?this.sequenceExecutionStack[this.sequenceExecutionStack.length-1]:void 0;return{executions:[...this.sequenceExecutions],currentExecution:t,stats:e}}getSequenceStats(){const e=this.sequenceExecutions,t=e.length,s=e.filter(f=>f.status==="success").length,r=e.filter(f=>f.status==="error").length,o=e.reduce((f,g)=>f+g.actions.length,0),l=t>0?e.reduce((f,g)=>f+g.totalDuration,0)/t:0,d={};for(const f of e)for(const g of f.actions)d[g.handler]=(d[g.handler]||0)+1;const u=Object.entries(d).sort(([,f],[,g])=>g-f).slice(0,5).map(([f,g])=>({handler:f,count:g}));return{totalExecutions:t,successCount:s,errorCount:r,totalActions:o,avgDuration:l,topHandlers:u}}clearSequenceData(){this.sequenceExecutions=[],this.sequenceExecutionStack=[],this.sequenceIdCounter=0}getSequenceExecution(e){const t=this.findExecutionInStack(e);return t||this.sequenceExecutions.find(s=>s.sequenceId===e)}getRecentSequences(e=10){return this.sequenceExecutions.slice(-e)}registerStateCaptureForHandler(e,t,s){if(!this.config.enabled)return;const r=new Map,o=Date.now();for(const l of t)r.set(l,{value:this.safeClone(s[l]),capturedAt:o});this.stateCaptureRegistry.set(e,r)}detectStaleClosure(e,t,s,r,o){if(!this.config.enabled)return[];const l=this.stateCaptureRegistry.get(e);if(!l)return[];const d=Date.now(),u=[];for(const[f,g]of l){const h=this.getValueByPath(s,f),b=d-g.capturedAt;if(!this.isDeepEqual(g.value,h)&&b>0){const y=this.createStaleClosureWarning(r,t,f,g.value,g.capturedAt,h,d,b,o);u.push(y),this.addStaleClosureWarning(y)}}return this.stateCaptureRegistry.delete(e),u}trackStaleClosureWarning(e){if(!this.config.enabled)return;const t=Date.now(),s=this.createStaleClosureWarning(e.type,e.location,e.capturedPath,e.capturedValue,e.capturedAt,e.currentValue,t,t-e.capturedAt,e.actionId,e.stackTrace);this.addStaleClosureWarning(s)}createStaleClosureWarning(e,t,s,r,o,l,d,u,f,g){const h=this.getStaleClosureSeverity(e,u),{description:b,suggestion:y,docLink:v}=this.getStaleClosureMessages(e,s,u);return{id:`stale_${++this.staleClosureIdCounter}_${Date.now()}`,timestamp:Date.now(),type:e,location:t,capturedState:{path:s,capturedValue:this.safeClone(r),capturedAt:o},currentState:{path:s,currentValue:this.safeClone(l),retrievedAt:d},timeDiff:u,severity:h,description:b,suggestion:y,docLink:v,actionId:f,stackTrace:g}}getStaleClosureSeverity(e,t){if(t>5e3)return"error";if(t>1e3)return"warning";switch(e){case"async-state-capture":case"sequence-state-mismatch":return"warning";case"callback-state-capture":case"timeout-state-capture":return"info";case"event-handler-stale":return"warning";default:return"info"}}getStaleClosureMessages(e,t,s){const r=s<1e3?`${s}ms`:`${(s/1e3).toFixed(1)}s`;switch(e){case"async-state-capture":return{description:`await 후 ${r} 경과 시점에 '${t}' 상태가 변경됨. 캡처된 상태 대신 최신 상태를 사용해야 함`,suggestion:"await 이후에는 G7Core.state.get()으로 최신 상태를 다시 조회하거나, useRef + getter 패턴을 사용하세요",docLink:"troubleshooting-state-closure.md"};case"callback-state-capture":return{description:`콜백에서 ${r} 전에 캡처된 '${t}' 상태를 사용 중. 최신 상태와 다름`,suggestion:"콜백에서 상태를 참조할 때는 stateRef.current 패턴 또는 G7Core.state.get()를 사용하세요",docLink:"troubleshooting-state-closure.md"};case"timeout-state-capture":return{description:`setTimeout/setInterval 콜백에서 '${t}' 상태가 ${r} 전 값 사용 중`,suggestion:"타이머 콜백 내에서는 G7Core.state.get()으로 최신 상태를 조회하세요",docLink:"troubleshooting-state-closure.md"};case"sequence-state-mismatch":return{description:`sequence 내 '${t}' 상태가 이전 액션 결과와 불일치. context.state 대신 캡처된 값 사용 의심`,suggestion:"sequence 내에서는 context.state 또는 $prev를 사용하여 최신 상태를 참조하세요",docLink:"troubleshooting-state-setstate.md"};case"event-handler-stale":return{description:`이벤트 핸들러에서 ${r} 전에 바인딩된 '${t}' 상태 사용 중`,suggestion:"이벤트 핸들러에서 상태를 참조할 때는 useRef 패턴 또는 G7Core.state.get()를 사용하세요",docLink:"troubleshooting-state-closure.md"};default:return{description:`'${t}' 상태에서 stale closure 감지됨 (${r} 경과)`,suggestion:"상태 참조 시 최신 값을 사용하는지 확인하세요"}}}addStaleClosureWarning(e){this.staleClosureWarnings.push(e),this.staleClosureWarnings.length>this.maxStaleClosureWarnings&&this.staleClosureWarnings.shift()}getValueByPath(e,t){const s=t.split(".");let r=e;for(const o of s){if(r==null)return;r=r[o]}return r}isDeepEqual(e,t){if(e===t)return!0;if(e===null||t===null)return e===t;if(typeof e!=typeof t)return!1;if(typeof e!="object")return e===t;try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}}getStaleClosureTrackingInfo(){const e=this.getStaleClosureStats();return{warnings:[...this.staleClosureWarnings],stats:e,timestamp:Date.now()}}getStaleClosureStats(){const e=this.staleClosureWarnings,t={"async-state-capture":0,"callback-state-capture":0,"timeout-state-capture":0,"sequence-state-mismatch":0,"event-handler-stale":0};for(const u of e)t[u.type]++;const s={info:0,warning:0,error:0};for(const u of e)s[u.severity]++;const r={};for(const u of e)r[u.location]=(r[u.location]||0)+1;const o=Object.entries(r).sort(([,u],[,f])=>f-u).slice(0,5).map(([u,f])=>({location:u,count:f})),l={};for(const u of e)l[u.capturedState.path]=(l[u.capturedState.path]||0)+1;const d=Object.entries(l).sort(([,u],[,f])=>f-u).slice(0,5).map(([u,f])=>({path:u,count:f}));return{totalWarnings:e.length,warningsByType:t,warningsBySeverity:s,topLocations:o,topAffectedPaths:d}}clearStaleClosureData(){this.staleClosureWarnings=[],this.staleClosureIdCounter=0,this.stateCaptureRegistry.clear()}getRecentStaleClosureWarnings(e=10,t){let s=[...this.staleClosureWarnings];return t&&(s=s.filter(r=>r.severity===t)),s.slice(-e)}safeClone(e){if(e==null||typeof e!="object")return e;try{return JSON.parse(JSON.stringify(e))}catch{if(Array.isArray(e))return e.map(s=>{try{return JSON.parse(JSON.stringify(s))}catch{return"[Unserializable]"}});const t={};for(const s of Object.keys(e))try{t[s]=JSON.parse(JSON.stringify(e[s]))}catch{t[s]="[Unserializable]"}return t}}};ne(ni,"instance");let jr=ni;const qs=Ht("LayoutLoader");class Er extends Error{constructor(t,s,r){super(t);ne(this,"code");ne(this,"details");this.code=s,this.details=r,this.name="LayoutLoaderError"}}class Ah{constructor(e){ne(this,"componentRegistry");ne(this,"currentLayout",null);ne(this,"layoutCache",new Map);ne(this,"cacheVersion",0);this.componentRegistry=e}setCacheVersion(e){this.cacheVersion!==e&&(qs.log("Cache version updated:",this.cacheVersion,"->",e),this.cacheVersion=e,this.layoutCache.clear())}getCacheVersion(){return this.cacheVersion}async loadLayout(e,t){const s=`${e}:${t}`;if(this.layoutCache.has(s)){qs.log("Loading layout from cache:",t);const o=await this.layoutCache.get(s),l=JSON.parse(JSON.stringify(o));return this.currentLayout=l,jr.getInstance().trackLayoutLoad(t,e,l,"cache"),l}const r=this.fetchLayout(e,t);return this.layoutCache.set(s,r),r}async fetchLayout(e,t,s=!1){try{let r;t.startsWith("__preview__/")?r=`/api/layouts/preview/${t.replace("__preview__/","")}.json`:r=`/api/layouts/${e}/${t}.json`;const o=this.cacheVersion>0?`${r}?v=${this.cacheVersion}`:r;qs.log("Fetching layout from API:",o);const l=qr(),d=s?null:l.getToken(),u={Accept:"application/json"};d&&(u.Authorization=`Bearer ${d}`);const f=await fetch(o,{headers:u});let g;try{g=await f.json()}catch{g=null}if(!f.ok){if(f.status===401&&!s&&d){qs.log("Token invalid, removing and retrying without token"),l.removeToken();try{return await this.fetchLayout(e,t,!0)}catch(y){throw y instanceof Er&&y.details?.status===401?new Er(y.message,y.code,{...y.details,hadToken:!0}):y}}const b=g?.message||g?.error;throw new Er(`Failed to fetch layout: ${f.status} ${f.statusText}`,"FETCH_FAILED",{status:f.status,statusText:f.statusText,url:o,apiMessage:b})}const h=g.data||g;return this.validateLayoutData(h),this.currentLayout=h,jr.getInstance().trackLayoutLoad(t,e,h,"api"),qs.log("Layout fetched and cached successfully:",h.layout_name),h}catch(r){const o=`${e}:${t}`;throw this.layoutCache.delete(o),r instanceof Er?r:new Er("Failed to load layout","LOAD_FAILED",{originalError:r})}}prefetchLayout(e,t){return this.loadLayout(e,t)}validateLayoutData(e){if(!e.version)throw new Er("Layout data missing required field: version","VALIDATION_FAILED",{field:"version"});if(!e.layout_name)throw new Er("Layout data missing required field: layout_name","VALIDATION_FAILED",{field:"layout_name"});if(!Array.isArray(e.components))throw new Er('Layout data field "components" must be an array',"VALIDATION_FAILED",{field:"components",value:e.components});qs.log("Layout data validation passed")}renderLayout(e,t){try{const s=t||this.currentLayout;if(!s)throw new Er("No layout data to render","NO_LAYOUT_DATA");qs.log("Rendering layout:",s.layout_name),e.innerHTML="",this.renderComponents(e,s.components),qs.log("Layout rendered successfully")}catch(s){qs.error("Render error:",s),this.renderErrorState(e,s)}}renderComponents(e,t){for(const s of t){const r=this.renderComponent(s);r&&e.appendChild(r)}}renderComponent(e){try{if(!this.componentRegistry.getComponent(e.type))return qs.warn(`Component not found: ${e.type}`),this.createPlaceholderElement(e.type);const s=document.createElement("div");return s.setAttribute("data-component",e.type),e.props&&Object.entries(e.props).forEach(([r,o])=>{s.setAttribute(`data-prop-${r}`,JSON.stringify(o))}),e.children&&e.children.length>0?this.renderComponents(s,e.children):e.text&&(s.textContent=e.text),s}catch(t){return qs.error(`Error rendering component ${e.type}:`,t),this.createErrorElement(e.type,t)}}createPlaceholderElement(e){const t=document.createElement("div");return t.className="component-placeholder",t.setAttribute("data-component-type",e),t.innerHTML=`
<div style="padding: 1rem; border: 2px dashed #ccc; background: #f9f9f9; text-align: center;">
<p style="margin: 0; color: #666;">Component not found: <strong>${e}</strong></p>
</div>
`,t}createErrorElement(e,t){const s=document.createElement("div");return s.className="component-error",s.setAttribute("data-component-type",e),s.innerHTML=`
<div style="padding: 1rem; border: 2px solid #f44336; background: #ffebee; border-radius: 4px;">
<p style="margin: 0 0 0.5rem 0; color: #c62828; font-weight: bold;">Component Error: ${e}</p>
<p style="margin: 0; color: #666; font-size: 0.875rem;">${t?.message||"Unknown error"}</p>
</div>
`,s}renderErrorState(e,t){const s=t instanceof Error?t.message:String(t),r=t instanceof Er?t.code:"UNKNOWN_ERROR";e.innerHTML=`
<div class="layout-error" data-error-code="${r}" style="
padding: 2rem;
text-align: center;
background: #ffebee;
border: 2px solid #f44336;
border-radius: 8px;
margin: 2rem auto;
max-width: 600px;
">
<h2 style="
margin: 0 0 1rem 0;
color: #c62828;
font-size: 1.5rem;
">레이아웃 로드 실패</h2>
<p style="
margin: 0 0 1rem 0;
color: #666;
font-size: 1rem;
">${s}</p>
<p style="
margin: 0;
color: #999;
font-size: 0.875rem;
">오류 코드: ${r}</p>
<button
onclick="window.location.reload()"
style="
margin-top: 1.5rem;
padding: 0.75rem 1.5rem;
background: #f44336;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 1rem;
"
>페이지 새로고침</button>
</div>
`,qs.error("Error state rendered:",r,s)}getCurrentLayout(){return this.currentLayout}clear(){this.currentLayout=null,this.layoutCache.clear(),qs.log("Layout data and cache cleared")}}const LD=Ht("TranslationContext"),I0=w.createContext(null),Th=({children:n,translationEngine:e,translationContext:t})=>{const s=w.useMemo(()=>(o,l)=>{if(l){const d="|"+Object.entries(l).map(([u,f])=>`${u}=${f}`).join("|");return e.translate(o,t,d)}return e.translate(o,t)},[e,t]),r=w.useMemo(()=>({translationEngine:e,translationContext:t,t:s}),[e,t,s]);return a.jsx(I0.Provider,{value:r,children:n})},Mn=()=>{const n=w.useContext(I0);return n||(LD.warn("TranslationProvider 외부에서 호출되었습니다. 키를 그대로 반환합니다."),{t:e=>e,translationEngine:null,translationContext:null})},Xo=Ht("SlotContext"),OD={registerToSlot:()=>{Xo.warn("SlotContext not available: registerToSlot called outside SlotProvider")},unregisterFromSlot:()=>{Xo.warn("SlotContext not available: unregisterFromSlot called outside SlotProvider")},getSlotComponents:()=>[],subscribeToSlot:()=>()=>{},clearAllSlots:()=>{},isEnabled:!1},MD=w.createContext(OD),$h=({children:n})=>{const e=w.useRef(new Map),t=w.useRef(new Map),s=w.useCallback(g=>{const h=t.current.get(g);h&&h.forEach(b=>{try{b()}catch(y){Xo.error(`Slot subscriber error (slotId: ${g}):`,y)}})},[]),r=w.useCallback((g,h,b)=>{if(!g||!h){Xo.warn("registerToSlot: slotId and componentId are required");return}e.current.has(g)||e.current.set(g,new Map);const y=e.current.get(g),v=y.get(h);v&&v.registrationKey===b.registrationKey||(y.set(h,b),Xo.log(`Component registered to slot: ${h} -> ${g} (order: ${b.order})`),s(g))},[s]),o=w.useCallback((g,h)=>{const b=e.current.get(g);b&&b.has(h)&&(b.delete(h),Xo.log(`Component unregistered from slot: ${h} <- ${g}`),b.size===0&&e.current.delete(g),s(g))},[s]),l=w.useCallback(g=>{const h=e.current.get(g);return h?Array.from(h.values()).sort((b,y)=>b.order-y.order):[]},[]),d=w.useCallback((g,h)=>{t.current.has(g)||t.current.set(g,new Set);const b=t.current.get(g);return b.add(h),()=>{b.delete(h),b.size===0&&t.current.delete(g)}},[]),u=w.useCallback(()=>{e.current.forEach((g,h)=>{s(h)}),e.current.clear(),t.current.clear(),Xo.log("All slots cleared")},[s]),f=w.useMemo(()=>({registerToSlot:r,unregisterFromSlot:o,getSlotComponents:l,subscribeToSlot:d,clearAllSlots:u,isEnabled:!0}),[r,o,l,d,u]);return w.useLayoutEffect(()=>{typeof window<"u"&&(window.__slotContextValue=f,Xo.log("SlotContext exposed to window.__slotContextValue"))},[f]),a.jsx(MD.Provider,{value:f,children:n})};class Nh{constructor(){this.notificationCreatedEvent=".Illuminate\\Notifications\\Events\\BroadcastNotificationCreated"}listenForWhisper(e,t){return this.listen(".client-"+e,t)}notification(e){return this.listen(this.notificationCreatedEvent,e)}stopListeningForNotification(e){return this.stopListening(this.notificationCreatedEvent,e)}stopListeningForWhisper(e,t){return this.stopListening(".client-"+e,t)}}class L0{constructor(e){this.namespace=e}format(e){return[".","\\"].includes(e.charAt(0))?e.substring(1):(this.namespace&&(e=this.namespace+"."+e),e.replace(/\./g,"\\"))}setNamespace(e){this.namespace=e}}function zD(n){try{return Reflect.construct(String,[],n),!0}catch{return!1}}class Dh extends Nh{constructor(e,t,s){super(),this.name=t,this.pusher=e,this.options=s,this.eventFormatter=new L0(this.options.namespace),this.subscribe()}subscribe(){this.subscription=this.pusher.subscribe(this.name)}unsubscribe(){this.pusher.unsubscribe(this.name)}listen(e,t){return this.on(this.eventFormatter.format(e),t),this}listenToAll(e){return this.subscription.bind_global((t,s)=>{if(t.startsWith("pusher:"))return;let r=String(this.options.namespace??"").replace(/\./g,"\\"),o=t.startsWith(r)?t.substring(r.length+1):"."+t;e(o,s)}),this}stopListening(e,t){return t?this.subscription.unbind(this.eventFormatter.format(e),t):this.subscription.unbind(this.eventFormatter.format(e)),this}stopListeningToAll(e){return e?this.subscription.unbind_global(e):this.subscription.unbind_global(),this}subscribed(e){return this.on("pusher:subscription_succeeded",()=>{e()}),this}error(e){return this.on("pusher:subscription_error",t=>{e(t)}),this}on(e,t){return this.subscription.bind(e,t),this}}class O0 extends Dh{whisper(e,t){return this.pusher.channels.channels[this.name].trigger(`client-${e}`,t),this}}class PD extends Dh{whisper(e,t){return this.pusher.channels.channels[this.name].trigger(`client-${e}`,t),this}}class BD extends O0{here(e){return this.on("pusher:subscription_succeeded",t=>{e(Object.keys(t.members).map(s=>t.members[s]))}),this}joining(e){return this.on("pusher:member_added",t=>{e(t.info)}),this}whisper(e,t){return this.pusher.channels.channels[this.name].trigger(`client-${e}`,t),this}leaving(e){return this.on("pusher:member_removed",t=>{e(t.info)}),this}}class M0 extends Nh{constructor(e,t,s){super(),this.events={},this.listeners={},this.name=t,this.socket=e,this.options=s,this.eventFormatter=new L0(this.options.namespace),this.subscribe()}subscribe(){this.socket.emit("subscribe",{channel:this.name,auth:this.options.auth||{}})}unsubscribe(){this.unbind(),this.socket.emit("unsubscribe",{channel:this.name,auth:this.options.auth||{}})}listen(e,t){return this.on(this.eventFormatter.format(e),t),this}stopListening(e,t){return this.unbindEvent(this.eventFormatter.format(e),t),this}subscribed(e){return this.on("connect",t=>{e(t)}),this}error(e){return this}on(e,t){return this.listeners[e]=this.listeners[e]||[],this.events[e]||(this.events[e]=(s,r)=>{this.name===s&&this.listeners[e]&&this.listeners[e].forEach(o=>o(r))},this.socket.on(e,this.events[e])),this.listeners[e].push(t),this}unbind(){Object.keys(this.events).forEach(e=>{this.unbindEvent(e)})}unbindEvent(e,t){this.listeners[e]=this.listeners[e]||[],t&&(this.listeners[e]=this.listeners[e].filter(s=>s!==t)),(!t||this.listeners[e].length===0)&&(this.events[e]&&(this.socket.removeListener(e,this.events[e]),delete this.events[e]),delete this.listeners[e])}}class z0 extends M0{whisper(e,t){return this.socket.emit("client event",{channel:this.name,event:`client-${e}`,data:t}),this}}class HD extends z0{here(e){return this.on("presence:subscribed",t=>{e(t.map(s=>s.user_info))}),this}joining(e){return this.on("presence:joining",t=>e(t.user_info)),this}whisper(e,t){return this.socket.emit("client event",{channel:this.name,event:`client-${e}`,data:t}),this}leaving(e){return this.on("presence:leaving",t=>e(t.user_info)),this}}class Uu extends Nh{subscribe(){}unsubscribe(){}listen(e,t){return this}listenToAll(e){return this}stopListening(e,t){return this}subscribed(e){return this}error(e){return this}on(e,t){return this}}class P0 extends Uu{whisper(e,t){return this}}class WD extends Uu{whisper(e,t){return this}}class UD extends P0{here(e){return this}joining(e){return this}whisper(e,t){return this}leaving(e){return this}}const B0=class QA{constructor(e){this.setOptions(e),this.connect()}setOptions(e){this.options={...QA._defaultOptions,...e,broadcaster:e.broadcaster};let t=this.csrfToken();t&&(this.options.auth.headers["X-CSRF-TOKEN"]=t,this.options.userAuthentication.headers["X-CSRF-TOKEN"]=t),t=this.options.bearerToken,t&&(this.options.auth.headers.Authorization="Bearer "+t,this.options.userAuthentication.headers.Authorization="Bearer "+t)}csrfToken(){var e,t;return typeof window<"u"&&(e=window.Laravel)!=null&&e.csrfToken?window.Laravel.csrfToken:this.options.csrfToken?this.options.csrfToken:typeof document<"u"&&typeof document.querySelector=="function"?((t=document.querySelector('meta[name="csrf-token"]'))==null?void 0:t.getAttribute("content"))??null:null}};B0._defaultOptions={auth:{headers:{}},authEndpoint:"/broadcasting/auth",userAuthentication:{endpoint:"/broadcasting/user-auth",headers:{}},csrfToken:null,bearerToken:null,host:null,key:null,namespace:"App.Events"};let Ih=B0;class qu extends Ih{constructor(){super(...arguments),this.channels={}}connect(){if(typeof this.options.client<"u")this.pusher=this.options.client;else if(this.options.Pusher)this.pusher=new this.options.Pusher(this.options.key,this.options);else if(typeof window<"u"&&typeof window.Pusher<"u")this.pusher=new window.Pusher(this.options.key,this.options);else throw new Error("Pusher client not found. Should be globally available or passed via options.client")}signin(){this.pusher.signin()}listen(e,t,s){return this.channel(e).listen(t,s)}channel(e){return this.channels[e]||(this.channels[e]=new Dh(this.pusher,e,this.options)),this.channels[e]}privateChannel(e){return this.channels["private-"+e]||(this.channels["private-"+e]=new O0(this.pusher,"private-"+e,this.options)),this.channels["private-"+e]}encryptedPrivateChannel(e){return this.channels["private-encrypted-"+e]||(this.channels["private-encrypted-"+e]=new PD(this.pusher,"private-encrypted-"+e,this.options)),this.channels["private-encrypted-"+e]}presenceChannel(e){return this.channels["presence-"+e]||(this.channels["presence-"+e]=new BD(this.pusher,"presence-"+e,this.options)),this.channels["presence-"+e]}leave(e){[e,"private-"+e,"private-encrypted-"+e,"presence-"+e].forEach(t=>{this.leaveChannel(t)})}leaveChannel(e){this.channels[e]&&(this.channels[e].unsubscribe(),delete this.channels[e])}socketId(){return this.pusher.connection.socket_id}connectionStatus(){const e=this.pusher.connection.state;switch(e){case"connected":case"connecting":return e;case"failed":case"unavailable":return"failed";default:return"disconnected"}}onConnectionChange(e){const t=()=>{e(this.connectionStatus())},s=["state_change","connected","disconnected"];return s.forEach(r=>{this.pusher.connection.bind(r,t)}),()=>{s.forEach(r=>{this.pusher.connection.unbind(r,t)})}}disconnect(){this.pusher.disconnect()}}class qD extends Ih{constructor(){super(...arguments),this.channels={}}connect(){let e=this.getSocketIO();this.socket=e(this.options.host??void 0,this.options),this.socket.io.on("reconnect",()=>{Object.values(this.channels).forEach(t=>{t.subscribe()})})}getSocketIO(){if(typeof this.options.client<"u")return this.options.client;if(typeof window<"u"&&typeof window.io<"u")return window.io;throw new Error("Socket.io client not found. Should be globally available or passed via options.client")}listen(e,t,s){return this.channel(e).listen(t,s)}channel(e){return this.channels[e]||(this.channels[e]=new M0(this.socket,e,this.options)),this.channels[e]}privateChannel(e){return this.channels["private-"+e]||(this.channels["private-"+e]=new z0(this.socket,"private-"+e,this.options)),this.channels["private-"+e]}presenceChannel(e){return this.channels["presence-"+e]||(this.channels["presence-"+e]=new HD(this.socket,"presence-"+e,this.options)),this.channels["presence-"+e]}leave(e){[e,"private-"+e,"presence-"+e].forEach(t=>{this.leaveChannel(t)})}leaveChannel(e){this.channels[e]&&(this.channels[e].unsubscribe(),delete this.channels[e])}socketId(){return this.socket.id}connectionStatus(){return this.socket.connected?"connected":this.socket.io._reconnecting?"reconnecting":this.socket.id!==void 0?"disconnected":"connecting"}onConnectionChange(e){const t=()=>{e(this.connectionStatus())},s=["connect","disconnect","connect_error","reconnect_attempt","reconnect","reconnect_error","reconnect_failed"];return s.forEach(r=>{this.socket.on(r,t)}),()=>{s.forEach(r=>{this.socket.off(r,t)})}}disconnect(){this.socket.disconnect()}}class H0 extends Ih{constructor(){super(...arguments),this.channels={}}connect(){}listen(e,t,s){return new Uu}channel(e){return new Uu}privateChannel(e){return new P0}encryptedPrivateChannel(e){return new WD}presenceChannel(e){return new UD}leave(e){}leaveChannel(e){}socketId(){return"fake-socket-id"}connectionStatus(){return"connected"}onConnectionChange(e){return()=>{}}disconnect(){}}class FD{constructor(e){this.options=e,this.connect(),this.options.withoutInterceptors||this.registerInterceptors()}channel(e){return this.connector.channel(e)}connect(){if(this.options.broadcaster==="reverb")this.connector=new qu({...this.options,cluster:""});else if(this.options.broadcaster==="pusher")this.connector=new qu(this.options);else if(this.options.broadcaster==="ably")this.connector=new qu({...this.options,cluster:"",broadcaster:"pusher"});else if(this.options.broadcaster==="socket.io")this.connector=new qD(this.options);else if(this.options.broadcaster==="null")this.connector=new H0(this.options);else if(typeof this.options.broadcaster=="function"&&zD(this.options.broadcaster))this.connector=new this.options.broadcaster(this.options);else throw new Error(`Broadcaster ${typeof this.options.broadcaster} ${String(this.options.broadcaster)} is not supported.`)}disconnect(){this.connector.disconnect()}join(e){return this.connector.presenceChannel(e)}leave(e){this.connector.leave(e)}leaveChannel(e){this.connector.leaveChannel(e)}leaveAllChannels(){for(const e in this.connector.channels)this.leaveChannel(e)}listen(e,t,s){return this.connector.listen(e,t,s)}private(e){return this.connector.privateChannel(e)}encryptedPrivate(e){if(this.connectorSupportsEncryptedPrivateChannels(this.connector))return this.connector.encryptedPrivateChannel(e);throw new Error(`Broadcaster ${typeof this.options.broadcaster} ${String(this.options.broadcaster)} does not support encrypted private channels.`)}connectorSupportsEncryptedPrivateChannels(e){return e instanceof qu||e instanceof H0}socketId(){return this.connector.socketId()}connectionStatus(){return this.connector.connectionStatus()}registerInterceptors(){typeof Vue<"u"&&Vue!=null&&Vue.http&&this.registerVueRequestInterceptor(),typeof axios=="function"&&this.registerAxiosRequestInterceptor(),typeof jQuery=="function"&&this.registerjQueryAjaxSetup(),typeof Turbo=="object"&&this.registerTurboRequestInterceptor()}registerVueRequestInterceptor(){Vue.http.interceptors.push((e,t)=>{this.socketId()&&e.headers.set("X-Socket-ID",this.socketId()),t()})}registerAxiosRequestInterceptor(){axios.interceptors.request.use(e=>(this.socketId()&&(e.headers["X-Socket-Id"]=this.socketId()),e))}registerjQueryAjaxSetup(){typeof jQuery.ajax<"u"&&jQuery.ajaxPrefilter((e,t,s)=>{this.socketId()&&s.setRequestHeader("X-Socket-Id",this.socketId())})}registerTurboRequestInterceptor(){document.addEventListener("turbo:before-fetch-request",e=>{e.detail.fetchOptions.headers["X-Socket-Id"]=this.socketId()})}}var Lh={exports:{}};var W0;function VD(){return W0||(W0=1,(function(n,e){(function(s,r){n.exports=r()})(self,()=>(()=>{var t={594(l,d){var u=this&&this.__extends||(function(){var A=function(C,j){return A=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(E,T){E.__proto__=T}||function(E,T){for(var D in T)T.hasOwnProperty(D)&&(E[D]=T[D])},A(C,j)};return function(C,j){A(C,j);function E(){this.constructor=C}C.prototype=j===null?Object.create(j):(E.prototype=j.prototype,new E)}})();Object.defineProperty(d,"__esModule",{value:!0});var f=256,g=(function(){function A(C){C===void 0&&(C="="),this._paddingCharacter=C}return A.prototype.encodedLength=function(C){return this._paddingCharacter?(C+2)/3*4|0:(C*8+5)/6|0},A.prototype.encode=function(C){for(var j="",E=0;E<C.length-2;E+=3){var T=C[E]<<16|C[E+1]<<8|C[E+2];j+=this._encodeByte(T>>>18&63),j+=this._encodeByte(T>>>12&63),j+=this._encodeByte(T>>>6&63),j+=this._encodeByte(T>>>0&63)}var D=C.length-E;if(D>0){var T=C[E]<<16|(D===2?C[E+1]<<8:0);j+=this._encodeByte(T>>>18&63),j+=this._encodeByte(T>>>12&63),D===2?j+=this._encodeByte(T>>>6&63):j+=this._paddingCharacter||"",j+=this._paddingCharacter||""}return j},A.prototype.maxDecodedLength=function(C){return this._paddingCharacter?C/4*3|0:(C*6+7)/8|0},A.prototype.decodedLength=function(C){return this.maxDecodedLength(C.length-this._getPaddingLength(C))},A.prototype.decode=function(C){if(C.length===0)return new Uint8Array(0);for(var j=this._getPaddingLength(C),E=C.length-j,T=new Uint8Array(this.maxDecodedLength(E)),D=0,I=0,W=0,z=0,H=0,G=0,F=0;I<E-4;I+=4)z=this._decodeChar(C.charCodeAt(I+0)),H=this._decodeChar(C.charCodeAt(I+1)),G=this._decodeChar(C.charCodeAt(I+2)),F=this._decodeChar(C.charCodeAt(I+3)),T[D++]=z<<2|H>>>4,T[D++]=H<<4|G>>>2,T[D++]=G<<6|F,W|=z&f,W|=H&f,W|=G&f,W|=F&f;if(I<E-1&&(z=this._decodeChar(C.charCodeAt(I)),H=this._decodeChar(C.charCodeAt(I+1)),T[D++]=z<<2|H>>>4,W|=z&f,W|=H&f),I<E-2&&(G=this._decodeChar(C.charCodeAt(I+2)),T[D++]=H<<4|G>>>2,W|=G&f),I<E-3&&(F=this._decodeChar(C.charCodeAt(I+3)),T[D++]=G<<6|F,W|=F&f),W!==0)throw new Error("Base64Coder: incorrect characters for decoding");return T},A.prototype._encodeByte=function(C){var j=C;return j+=65,j+=25-C>>>8&6,j+=51-C>>>8&-75,j+=61-C>>>8&-15,j+=62-C>>>8&3,String.fromCharCode(j)},A.prototype._decodeChar=function(C){var j=f;return j+=(42-C&C-44)>>>8&-f+C-43+62,j+=(46-C&C-48)>>>8&-f+C-47+63,j+=(47-C&C-58)>>>8&-f+C-48+52,j+=(64-C&C-91)>>>8&-f+C-65+0,j+=(96-C&C-123)>>>8&-f+C-97+26,j},A.prototype._getPaddingLength=function(C){var j=0;if(this._paddingCharacter){for(var E=C.length-1;E>=0&&C[E]===this._paddingCharacter;E--)j++;if(C.length<4||j>2)throw new Error("Base64Coder: incorrect padding")}return j},A})();d.Coder=g;var h=new g;function b(A){return h.encode(A)}d.encode=b;function y(A){return h.decode(A)}d.decode=y;var v=(function(A){u(C,A);function C(){return A!==null&&A.apply(this,arguments)||this}return C.prototype._encodeByte=function(j){var E=j;return E+=65,E+=25-j>>>8&6,E+=51-j>>>8&-75,E+=61-j>>>8&-13,E+=62-j>>>8&49,String.fromCharCode(E)},C.prototype._decodeChar=function(j){var E=f;return E+=(44-j&j-46)>>>8&-f+j-45+62,E+=(94-j&j-96)>>>8&-f+j-95+63,E+=(47-j&j-58)>>>8&-f+j-48+52,E+=(64-j&j-91)>>>8&-f+j-65+0,E+=(96-j&j-123)>>>8&-f+j-97+26,E},C})(g);d.URLSafeCoder=v;var x=new v;function S(A){return x.encode(A)}d.encodeURLSafe=S;function _(A){return x.decode(A)}d.decodeURLSafe=_,d.encodedLength=function(A){return h.encodedLength(A)},d.maxDecodedLength=function(A){return h.maxDecodedLength(A)},d.decodedLength=function(A){return h.decodedLength(A)}},978(l,d){var u="utf8: invalid source encoding";function f(g){for(var h=[],b=0;b<g.length;b++){var y=g[b];if(y&128){var v=void 0;if(y<224){if(b>=g.length)throw new Error(u);var x=g[++b];if((x&192)!==128)throw new Error(u);y=(y&31)<<6|x&63,v=128}else if(y<240){if(b>=g.length-1)throw new Error(u);var x=g[++b],S=g[++b];if((x&192)!==128||(S&192)!==128)throw new Error(u);y=(y&15)<<12|(x&63)<<6|S&63,v=2048}else if(y<248){if(b>=g.length-2)throw new Error(u);var x=g[++b],S=g[++b],_=g[++b];if((x&192)!==128||(S&192)!==128||(_&192)!==128)throw new Error(u);y=(y&15)<<18|(x&63)<<12|(S&63)<<6|_&63,v=65536}else throw new Error(u);if(y<v||y>=55296&&y<=57343)throw new Error(u);if(y>=65536){if(y>1114111)throw new Error(u);y-=65536,h.push(String.fromCharCode(55296|y>>10)),y=56320|y&1023}}h.push(String.fromCharCode(y))}return h.join("")}d.D4=f},721(l,d,u){l.exports=u(207).default},207(l,d,u){u.d(d,{default:()=>Cl});class f{constructor($,O){this.lastId=0,this.prefix=$,this.name=O}create($){this.lastId++;var O=this.lastId,J=this.prefix+O,oe=this.name+"["+O+"]",$e=!1,Ke=function(){$e||($.apply(null,arguments),$e=!0)};return this[O]=Ke,{number:O,id:J,name:oe,callback:Ke}}remove($){delete this[$.number]}}var g=new f("_pusher_script_","Pusher.ScriptReceivers"),h={VERSION:"8.5.0",PROTOCOL:7,wsPort:80,wssPort:443,wsPath:"",httpHost:"sockjs.pusher.com",httpPort:80,httpsPort:443,httpPath:"/pusher",stats_host:"stats.pusher.com",authEndpoint:"/pusher/auth",authTransport:"ajax",activityTimeout:12e4,pongTimeout:3e4,unavailableTimeout:1e4,userAuthentication:{endpoint:"/pusher/user-auth",transport:"ajax"},channelAuthorization:{endpoint:"/pusher/auth",transport:"ajax"},cdn_http:"http://js.pusher.com",cdn_https:"https://js.pusher.com",dependency_suffix:""};const b=h;class y{constructor($){this.options=$,this.receivers=$.receivers||g,this.loading={}}load($,O,J){var oe=this;if(oe.loading[$]&&oe.loading[$].length>0)oe.loading[$].push(J);else{oe.loading[$]=[J];var $e=ht.createScriptRequest(oe.getPath($,O)),Ke=oe.receivers.create(function(dt){if(oe.receivers.remove(Ke),oe.loading[$]){var Ct=oe.loading[$];delete oe.loading[$];for(var Ut=function(kn){kn||$e.cleanup()},Gt=0;Gt<Ct.length;Gt++)Ct[Gt](dt,Ut)}});$e.send(Ke)}}getRoot($){var O,J=ht.getDocument().location.protocol;return $&&$.useTLS||J==="https:"?O=this.options.cdn_https:O=this.options.cdn_http,O.replace(/\/*$/,"")+"/"+this.options.version}getPath($,O){return this.getRoot(O)+"/"+$+this.options.suffix+".js"}}var v=new f("_pusher_dependencies","Pusher.DependenciesReceivers"),x=new y({cdn_http:b.cdn_http,cdn_https:b.cdn_https,version:b.VERSION,suffix:b.dependency_suffix,receivers:v});const S={baseUrl:"https://pusher.com",urls:{authenticationEndpoint:{path:"/docs/channels/server_api/authenticating_users"},authorizationEndpoint:{path:"/docs/channels/server_api/authorizing-users/"},javascriptQuickStart:{path:"/docs/javascript_quick_start"},triggeringClientEvents:{path:"/docs/client_api_guide/client_events#trigger-events"},encryptedChannelSupport:{fullUrl:"https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support"}}},A={buildLogSuffix:function(P){const $="See:",O=S.urls[P];if(!O)return"";let J;return O.fullUrl?J=O.fullUrl:O.path&&(J=S.baseUrl+O.path),J?`${$} ${J}`:""}};var C;(function(P){P.UserAuthentication="user-authentication",P.ChannelAuthorization="channel-authorization"})(C||(C={}));class j extends Error{constructor($){super($),Object.setPrototypeOf(this,new.target.prototype)}}class E extends Error{constructor($){super($),Object.setPrototypeOf(this,new.target.prototype)}}class T extends Error{constructor($){super($),Object.setPrototypeOf(this,new.target.prototype)}}class D extends Error{constructor($){super($),Object.setPrototypeOf(this,new.target.prototype)}}class I extends Error{constructor($){super($),Object.setPrototypeOf(this,new.target.prototype)}}class W extends Error{constructor($){super($),Object.setPrototypeOf(this,new.target.prototype)}}class z extends Error{constructor($){super($),Object.setPrototypeOf(this,new.target.prototype)}}class H extends Error{constructor($){super($),Object.setPrototypeOf(this,new.target.prototype)}}class G extends Error{constructor($,O){super(O),this.status=$,Object.setPrototypeOf(this,new.target.prototype)}}const Z=function(P,$,O,J,oe){const $e=ht.createXHR();$e.open("POST",O.endpoint,!0),$e.setRequestHeader("Content-Type","application/x-www-form-urlencoded");for(var Ke in O.headers)$e.setRequestHeader(Ke,O.headers[Ke]);if(O.headersProvider!=null){let dt=O.headersProvider();for(var Ke in dt)$e.setRequestHeader(Ke,dt[Ke])}return $e.onreadystatechange=function(){if($e.readyState===4)if($e.status===200){let dt,Ct=!1;try{dt=JSON.parse($e.responseText),Ct=!0}catch{oe(new G(200,`JSON returned from ${J.toString()} endpoint was invalid, yet status code was 200. Data was: ${$e.responseText}`),null)}Ct&&oe(null,dt)}else{let dt="";switch(J){case C.UserAuthentication:dt=A.buildLogSuffix("authenticationEndpoint");break;case C.ChannelAuthorization:dt=`Clients must be authorized to join private or presence channels. ${A.buildLogSuffix("authorizationEndpoint")}`;break}oe(new G($e.status,`Unable to retrieve auth string from ${J.toString()} endpoint - received status: ${$e.status} from ${O.endpoint}. ${dt}`),null)}},$e.send($),$e};function Y(P){return N(q(P))}var U=String.fromCharCode,B="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",te=function(P){var $=P.charCodeAt(0);return $<128?P:$<2048?U(192|$>>>6)+U(128|$&63):U(224|$>>>12&15)+U(128|$>>>6&63)+U(128|$&63)},q=function(P){return P.replace(/[^\x00-\x7F]/g,te)},M=function(P){var $=[0,2,1][P.length%3],O=P.charCodeAt(0)<<16|(P.length>1?P.charCodeAt(1):0)<<8|(P.length>2?P.charCodeAt(2):0),J=[B.charAt(O>>>18),B.charAt(O>>>12&63),$>=2?"=":B.charAt(O>>>6&63),$>=1?"=":B.charAt(O&63)];return J.join("")},N=window.btoa||function(P){return P.replace(/[\s\S]{1,3}/g,M)};class V{constructor($,O,J,oe){this.clear=O,this.timer=$(()=>{this.timer&&(this.timer=oe(this.timer))},J)}isRunning(){return this.timer!==null}ensureAborted(){this.timer&&(this.clear(this.timer),this.timer=null)}}const ee=V;function se(P){window.clearTimeout(P)}function re(P){window.clearInterval(P)}class pe extends ee{constructor($,O){super(setTimeout,se,$,function(J){return O(),null})}}class je extends ee{constructor($,O){super(setInterval,re,$,function(J){return O(),J})}}var me={now(){return Date.now?Date.now():new Date().valueOf()},defer(P){return new pe(0,P)},method(P,...$){var O=Array.prototype.slice.call(arguments,1);return function(J){return J[P].apply(J,O.concat(arguments))}}};const ce=me;function be(P,...$){for(var O=0;O<$.length;O++){var J=$[O];for(var oe in J)J[oe]&&J[oe].constructor&&J[oe].constructor===Object?P[oe]=be(P[oe]||{},J[oe]):P[oe]=J[oe]}return P}function Be(){for(var P=["Pusher"],$=0;$<arguments.length;$++)typeof arguments[$]=="string"?P.push(arguments[$]):P.push(Le(arguments[$]));return P.join(" : ")}function fe(P,$){var O=Array.prototype.indexOf;if(P===null)return-1;if(O&&P.indexOf===O)return P.indexOf($);for(var J=0,oe=P.length;J<oe;J++)if(P[J]===$)return J;return-1}function De(P,$){for(var O in P)Object.prototype.hasOwnProperty.call(P,O)&&$(P[O],O,P)}function Fe(P){var $=[];return De(P,function(O,J){$.push(J)}),$}function mt(P){var $=[];return De(P,function(O){$.push(O)}),$}function ft(P,$,O){for(var J=0;J<P.length;J++)$.call(O||window,P[J],J,P)}function xt(P,$){for(var O=[],J=0;J<P.length;J++)O.push($(P[J],J,P,O));return O}function Ot(P,$){var O={};return De(P,function(J,oe){O[oe]=$(J)}),O}function St(P,$){$=$||function(oe){return!!oe};for(var O=[],J=0;J<P.length;J++)$(P[J],J,P,O)&&O.push(P[J]);return O}function kt(P,$){var O={};return De(P,function(J,oe){($&&$(J,oe,P,O)||J)&&(O[oe]=J)}),O}function Vt(P){var $=[];return De(P,function(O,J){$.push([J,O])}),$}function Nt(P,$){for(var O=0;O<P.length;O++)if($(P[O],O,P))return!0;return!1}function tn(P,$){for(var O=0;O<P.length;O++)if(!$(P[O],O,P))return!1;return!0}function Qe(P){return Ot(P,function($){return typeof $=="object"&&($=Le($)),encodeURIComponent(Y($.toString()))})}function Pe(P){var $=kt(P,function(J){return J!==void 0}),O=xt(Vt(Qe($)),ce.method("join","=")).join("&");return O}function et(P){var $=[],O=[];return(function J(oe,$e){var Ke,dt,Ct;switch(typeof oe){case"object":if(!oe)return null;for(Ke=0;Ke<$.length;Ke+=1)if($[Ke]===oe)return{$ref:O[Ke]};if($.push(oe),O.push($e),Object.prototype.toString.apply(oe)==="[object Array]")for(Ct=[],Ke=0;Ke<oe.length;Ke+=1)Ct[Ke]=J(oe[Ke],$e+"["+Ke+"]");else{Ct={};for(dt in oe)Object.prototype.hasOwnProperty.call(oe,dt)&&(Ct[dt]=J(oe[dt],$e+"["+JSON.stringify(dt)+"]"))}return Ct;case"number":case"string":case"boolean":return oe}})(P,"$")}function Le(P){try{return JSON.stringify(P)}catch{return JSON.stringify(et(P))}}class He{constructor(){this.globalLog=$=>{window.console&&window.console.log&&window.console.log($)}}debug(...$){this.log(this.globalLog,$)}warn(...$){this.log(this.globalLogWarn,$)}error(...$){this.log(this.globalLogError,$)}globalLogWarn($){window.console&&window.console.warn?window.console.warn($):this.globalLog($)}globalLogError($){window.console&&window.console.error?window.console.error($):this.globalLogWarn($)}log($,...O){var J=Be.apply(this,arguments);Cl.log?Cl.log(J):Cl.logToConsole&&$.bind(this)(J)}}const Ve=new He;var Je=function(P,$,O,J,oe){(O.headers!==void 0||O.headersProvider!=null)&&Ve.warn(`To send headers with the ${J.toString()} request, you must use AJAX, rather than JSONP.`);var $e=P.nextAuthCallbackID.toString();P.nextAuthCallbackID++;var Ke=P.getDocument(),dt=Ke.createElement("script");P.auth_callbacks[$e]=function(Gt){oe(null,Gt)};var Ct="Pusher.auth_callbacks['"+$e+"']";dt.src=O.endpoint+"?callback="+encodeURIComponent(Ct)+"&"+$;var Ut=Ke.getElementsByTagName("head")[0]||Ke.documentElement;Ut.insertBefore(dt,Ut.firstChild)};const jt=Je;class At{constructor($){this.src=$}send($){var O=this,J="Error loading "+O.src;O.script=document.createElement("script"),O.script.id=$.id,O.script.src=O.src,O.script.type="text/javascript",O.script.charset="UTF-8",O.script.addEventListener?(O.script.onerror=function(){$.callback(J)},O.script.onload=function(){$.callback(null)}):O.script.onreadystatechange=function(){(O.script.readyState==="loaded"||O.script.readyState==="complete")&&$.callback(null)},O.script.async===void 0&&document.attachEvent&&/opera/i.test(navigator.userAgent)?(O.errorScript=document.createElement("script"),O.errorScript.id=$.id+"_error",O.errorScript.text=$.name+"('"+J+"');",O.script.async=O.errorScript.async=!1):O.script.async=!0;var oe=document.getElementsByTagName("head")[0];oe.insertBefore(O.script,oe.firstChild),O.errorScript&&oe.insertBefore(O.errorScript,O.script.nextSibling)}cleanup(){this.script&&(this.script.onload=this.script.onerror=null,this.script.onreadystatechange=null),this.script&&this.script.parentNode&&this.script.parentNode.removeChild(this.script),this.errorScript&&this.errorScript.parentNode&&this.errorScript.parentNode.removeChild(this.errorScript),this.script=null,this.errorScript=null}}class Rt{constructor($,O){this.url=$,this.data=O}send($){if(!this.request){var O=Pe(this.data),J=this.url+"/"+$.number+"?"+O;this.request=ht.createScriptRequest(J),this.request.send($)}}cleanup(){this.request&&this.request.cleanup()}}var xe=function(P,$){return function(O,J){var oe="http"+($?"s":"")+"://",$e=oe+(P.host||P.options.host)+P.options.path,Ke=ht.createJSONPRequest($e,O),dt=ht.ScriptReceivers.create(function(Ct,Ut){g.remove(dt),Ke.cleanup(),Ut&&Ut.host&&(P.host=Ut.host),J&&J(Ct,Ut)});Ke.send(dt)}},We={name:"jsonp",getAgent:xe};const Q=We;function ke(P,$,O){var J=P+($.useTLS?"s":""),oe=$.useTLS?$.hostTLS:$.hostNonTLS;return J+"://"+oe+O}function ge(P,$){var O="/app/"+P,J="?protocol="+b.PROTOCOL+"&client=js&version="+b.VERSION+($?"&"+$:"");return O+J}var X={getInitial:function(P,$){var O=($.httpPath||"")+ge(P,"flash=false");return ke("ws",$,O)}},he={getInitial:function(P,$){var O=($.httpPath||"/pusher")+ge(P);return ke("http",$,O)}},_e={getInitial:function(P,$){return ke("http",$,$.httpPath||"/pusher")},getPath:function(P,$){return ge(P)}};class ve{constructor(){this._callbacks={}}get($){return this._callbacks[Re($)]}add($,O,J){var oe=Re($);this._callbacks[oe]=this._callbacks[oe]||[],this._callbacks[oe].push({fn:O,context:J})}remove($,O,J){if(!$&&!O&&!J){this._callbacks={};return}var oe=$?[Re($)]:Fe(this._callbacks);O||J?this.removeCallback(oe,O,J):this.removeAllCallbacks(oe)}removeCallback($,O,J){ft($,function(oe){this._callbacks[oe]=St(this._callbacks[oe]||[],function($e){return O&&O!==$e.fn||J&&J!==$e.context}),this._callbacks[oe].length===0&&delete this._callbacks[oe]},this)}removeAllCallbacks($){ft($,function(O){delete this._callbacks[O]},this)}}function Re(P){return"_"+P}class Ye{constructor($){this.callbacks=new ve,this.global_callbacks=[],this.failThrough=$}bind($,O,J){return this.callbacks.add($,O,J),this}bind_global($){return this.global_callbacks.push($),this}unbind($,O,J){return this.callbacks.remove($,O,J),this}unbind_global($){return $?(this.global_callbacks=St(this.global_callbacks||[],O=>O!==$),this):(this.global_callbacks=[],this)}unbind_all(){return this.unbind(),this.unbind_global(),this}emit($,O,J){for(var oe=0;oe<this.global_callbacks.length;oe++)this.global_callbacks[oe]($,O);var $e=this.callbacks.get($),Ke=[];if(J?Ke.push(O,J):O&&Ke.push(O),$e&&$e.length>0)for(var oe=0;oe<$e.length;oe++)$e[oe].fn.apply($e[oe].context||window,Ke);else this.failThrough&&this.failThrough($,O);return this}}class it extends Ye{constructor($,O,J,oe,$e){super(),this.initialize=ht.transportConnectionInitializer,this.hooks=$,this.name=O,this.priority=J,this.key=oe,this.options=$e,this.state="new",this.timeline=$e.timeline,this.activityTimeout=$e.activityTimeout,this.id=this.timeline.generateUniqueID()}handlesActivityChecks(){return!!this.hooks.handlesActivityChecks}supportsPing(){return!!this.hooks.supportsPing}connect(){if(this.socket||this.state!=="initialized")return!1;var $=this.hooks.urls.getInitial(this.key,this.options);try{this.socket=this.hooks.getSocket($,this.options)}catch(O){return ce.defer(()=>{this.onError(O),this.changeState("closed")}),!1}return this.bindListeners(),Ve.debug("Connecting",{transport:this.name,url:$}),this.changeState("connecting"),!0}close(){return this.socket?(this.socket.close(),!0):!1}send($){return this.state==="open"?(ce.defer(()=>{this.socket&&this.socket.send($)}),!0):!1}ping(){this.state==="open"&&this.supportsPing()&&this.socket.ping()}onOpen(){this.hooks.beforeOpen&&this.hooks.beforeOpen(this.socket,this.hooks.urls.getPath(this.key,this.options)),this.changeState("open"),this.socket.onopen=void 0}onError($){this.emit("error",{type:"WebSocketError",error:$}),this.timeline.error(this.buildTimelineMessage({error:$.toString()}))}onClose($){$?this.changeState("closed",{code:$.code,reason:$.reason,wasClean:$.wasClean}):this.changeState("closed"),this.unbindListeners(),this.socket=void 0}onMessage($){this.emit("message",$)}onActivity(){this.emit("activity")}bindListeners(){this.socket.onopen=()=>{this.onOpen()},this.socket.onerror=$=>{this.onError($)},this.socket.onclose=$=>{this.onClose($)},this.socket.onmessage=$=>{this.onMessage($)},this.supportsPing()&&(this.socket.onactivity=()=>{this.onActivity()})}unbindListeners(){this.socket&&(this.socket.onopen=void 0,this.socket.onerror=void 0,this.socket.onclose=void 0,this.socket.onmessage=void 0,this.supportsPing()&&(this.socket.onactivity=void 0))}changeState($,O){this.state=$,this.timeline.info(this.buildTimelineMessage({state:$,params:O})),this.emit($,O)}buildTimelineMessage($){return be({cid:this.id},$)}}class ot{constructor($){this.hooks=$}isSupported($){return this.hooks.isSupported($)}createConnection($,O,J,oe){return new it(this.hooks,$,O,J,oe)}}var tt=new ot({urls:X,handlesActivityChecks:!1,supportsPing:!1,isInitialized:function(){return!!ht.getWebSocketAPI()},isSupported:function(){return!!ht.getWebSocketAPI()},getSocket:function(P){return ht.createWebSocket(P)}}),at={urls:he,handlesActivityChecks:!1,supportsPing:!0,isInitialized:function(){return!0}},nt=be({getSocket:function(P){return ht.HTTPFactory.createStreamingSocket(P)}},at),Xe=be({getSocket:function(P){return ht.HTTPFactory.createPollingSocket(P)}},at),st={isSupported:function(){return ht.isXHRSupported()}},pt=new ot(be({},nt,st)),Lt=new ot(be({},Xe,st)),an={ws:tt,xhr_streaming:pt,xhr_polling:Lt};const Tn=an;var $n=new ot({file:"sockjs",urls:_e,handlesActivityChecks:!0,supportsPing:!1,isSupported:function(){return!0},isInitialized:function(){return window.SockJS!==void 0},getSocket:function(P,$){return new window.SockJS(P,null,{js_path:x.getPath("sockjs",{useTLS:$.useTLS}),ignore_null_origin:$.ignoreNullOrigin})},beforeOpen:function(P,$){P.send(JSON.stringify({path:$}))}}),Cs={isSupported:function(P){var $=ht.isXDRSupported(P.useTLS);return $}},Wn=new ot(be({},nt,Cs)),vn=new ot(be({},Xe,Cs));Tn.xdr_streaming=Wn,Tn.xdr_polling=vn,Tn.sockjs=$n;const os=Tn;class cr extends Ye{constructor(){super();var $=this;window.addEventListener!==void 0&&(window.addEventListener("online",function(){$.emit("online")},!1),window.addEventListener("offline",function(){$.emit("offline")},!1))}isOnline(){return window.navigator.onLine===void 0?!0:window.navigator.onLine}}var Co=new cr;class ri{constructor($,O,J){this.manager=$,this.transport=O,this.minPingDelay=J.minPingDelay,this.maxPingDelay=J.maxPingDelay,this.pingDelay=void 0}createConnection($,O,J,oe){oe=be({},oe,{activityTimeout:this.pingDelay});var $e=this.transport.createConnection($,O,J,oe),Ke=null,dt=function(){$e.unbind("open",dt),$e.bind("closed",Ct),Ke=ce.now()},Ct=Ut=>{if($e.unbind("closed",Ct),Ut.code===1002||Ut.code===1003)this.manager.reportDeath();else if(!Ut.wasClean&&Ke){var Gt=ce.now()-Ke;Gt<2*this.maxPingDelay&&(this.manager.reportDeath(),this.pingDelay=Math.max(Gt/2,this.minPingDelay))}};return $e.bind("open",dt),$e}isSupported($){return this.manager.isAlive()&&this.transport.isSupported($)}}const oi={decodeMessage:function(P){try{var $=JSON.parse(P.data),O=$.data;if(typeof O=="string")try{O=JSON.parse($.data)}catch{}var J={event:$.event,channel:$.channel,data:O};return $.user_id&&(J.user_id=$.user_id),J}catch(oe){throw{type:"MessageParseError",error:oe,data:P.data}}},encodeMessage:function(P){return JSON.stringify(P)},processHandshake:function(P){var $=oi.decodeMessage(P);if($.event==="pusher:connection_established"){if(!$.data.activity_timeout)throw"No activity timeout specified in handshake";return{action:"connected",id:$.data.socket_id,activityTimeout:$.data.activity_timeout*1e3}}else{if($.event==="pusher:error")return{action:this.getCloseAction($.data),error:this.getCloseError($.data)};throw"Invalid handshake"}},getCloseAction:function(P){return P.code<4e3?P.code>=1002&&P.code<=1004?"backoff":null:P.code===4e3?"tls_only":P.code<4100?"refused":P.code<4200?"backoff":P.code<4300?"retry":"refused"},getCloseError:function(P){return P.code!==1e3&&P.code!==1001?{type:"PusherError",data:{code:P.code,message:P.reason||P.message}}:null}},Gs=oi;class jo extends Ye{constructor($,O){super(),this.id=$,this.transport=O,this.activityTimeout=O.activityTimeout,this.bindListeners()}handlesActivityChecks(){return this.transport.handlesActivityChecks()}send($){return this.transport.send($)}send_event($,O,J){var oe={event:$,data:O};return J&&(oe.channel=J),Ve.debug("Event sent",oe),this.send(Gs.encodeMessage(oe))}ping(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})}close(){this.transport.close()}bindListeners(){var $={message:J=>{var oe;try{oe=Gs.decodeMessage(J)}catch($e){this.emit("error",{type:"MessageParseError",error:$e,data:J.data})}if(oe!==void 0){switch(Ve.debug("Event recd",oe),oe.event){case"pusher:error":this.emit("error",{type:"PusherError",data:oe.data});break;case"pusher:ping":this.emit("ping");break;case"pusher:pong":this.emit("pong");break}this.emit("message",oe)}},activity:()=>{this.emit("activity")},error:J=>{this.emit("error",J)},closed:J=>{O(),J&&J.code&&this.handleCloseEvent(J),this.transport=null,this.emit("closed")}},O=()=>{De($,(J,oe)=>{this.transport.unbind(oe,J)})};De($,(J,oe)=>{this.transport.bind(oe,J)})}handleCloseEvent($){var O=Gs.getCloseAction($),J=Gs.getCloseError($);J&&this.emit("error",J),O&&this.emit(O,{action:O,error:J})}}class ai{constructor($,O){this.transport=$,this.callback=O,this.bindListeners()}close(){this.unbindListeners(),this.transport.close()}bindListeners(){this.onMessage=$=>{this.unbindListeners();var O;try{O=Gs.processHandshake($)}catch(J){this.finish("error",{error:J}),this.transport.close();return}O.action==="connected"?this.finish("connected",{connection:new jo(O.id,this.transport),activityTimeout:O.activityTimeout}):(this.finish(O.action,{error:O.error}),this.transport.close())},this.onClosed=$=>{this.unbindListeners();var O=Gs.getCloseAction($)||"backoff",J=Gs.getCloseError($);this.finish(O,{error:J})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)}unbindListeners(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)}finish($,O){this.callback(be({transport:this.transport,action:$},O))}}class ro{constructor($,O){this.timeline=$,this.options=O||{}}send($,O){this.timeline.isEmpty()||this.timeline.send(ht.TimelineTransport.getAgent(this,$),O)}}class dr extends Ye{constructor($,O){super(function(J,oe){Ve.debug("No callbacks on "+$+" for "+J)}),this.name=$,this.pusher=O,this.subscribed=!1,this.subscriptionPending=!1,this.subscriptionCancelled=!1}authorize($,O){return O(null,{auth:""})}trigger($,O){if($.indexOf("client-")!==0)throw new j("Event '"+$+"' does not start with 'client-'");if(!this.subscribed){var J=A.buildLogSuffix("triggeringClientEvents");Ve.warn(`Client event triggered before channel 'subscription_succeeded' event . ${J}`)}return this.pusher.send_event($,O,this.name)}disconnect(){this.subscribed=!1,this.subscriptionPending=!1}handleEvent($){var O=$.event,J=$.data;if(O==="pusher_internal:subscription_succeeded")this.handleSubscriptionSucceededEvent($);else if(O==="pusher_internal:subscription_count")this.handleSubscriptionCountEvent($);else if(O.indexOf("pusher_internal:")!==0){var oe={};this.emit(O,J,oe)}}handleSubscriptionSucceededEvent($){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",$.data)}handleSubscriptionCountEvent($){$.data.subscription_count&&(this.subscriptionCount=$.data.subscription_count),this.emit("pusher:subscription_count",$.data)}subscribe(){this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,($,O)=>{$?(this.subscriptionPending=!1,Ve.error($.toString()),this.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:$.message},$ instanceof G?{status:$.status}:{}))):this.pusher.send_event("pusher:subscribe",{auth:O.auth,channel_data:O.channel_data,channel:this.name})}))}unsubscribe(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})}cancelSubscription(){this.subscriptionCancelled=!0}reinstateSubscription(){this.subscriptionCancelled=!1}}class Or extends dr{authorize($,O){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:$},O)}}class Is{constructor(){this.reset()}get($){return Object.prototype.hasOwnProperty.call(this.members,$)?{id:$,info:this.members[$]}:null}each($){De(this.members,(O,J)=>{$(this.get(J))})}setMyID($){this.myID=$}onSubscription($){this.members=$.presence.hash,this.count=$.presence.count,this.me=this.get(this.myID)}addMember($){return this.get($.user_id)===null&&this.count++,this.members[$.user_id]=$.user_info,this.get($.user_id)}removeMember($){var O=this.get($.user_id);return O&&(delete this.members[$.user_id],this.count--),O}reset(){this.members={},this.count=0,this.myID=null,this.me=null}}var Nn=function(P,$,O,J){function oe($e){return $e instanceof O?$e:new O(function(Ke){Ke($e)})}return new(O||(O=Promise))(function($e,Ke){function dt(Gt){try{Ut(J.next(Gt))}catch(kn){Ke(kn)}}function Ct(Gt){try{Ut(J.throw(Gt))}catch(kn){Ke(kn)}}function Ut(Gt){Gt.done?$e(Gt.value):oe(Gt.value).then(dt,Ct)}Ut((J=J.apply(P,$||[])).next())})};class la extends Or{constructor($,O){super($,O),this.members=new Is}authorize($,O){super.authorize($,(J,oe)=>Nn(this,void 0,void 0,function*(){if(!J)if(oe=oe,oe.channel_data!=null){var $e=JSON.parse(oe.channel_data);this.members.setMyID($e.user_id)}else if(yield this.pusher.user.signinDonePromise,this.pusher.user.user_data!=null)this.members.setMyID(this.pusher.user.user_data.id);else{let Ke=A.buildLogSuffix("authorizationEndpoint");Ve.error(`Invalid auth response for channel '${this.name}', expected 'channel_data' field. ${Ke}, or the user should be signed in.`),O("Invalid auth response");return}O(J,oe)}))}handleEvent($){var O=$.event;if(O.indexOf("pusher_internal:")===0)this.handleInternalEvent($);else{var J=$.data,oe={};$.user_id&&(oe.user_id=$.user_id),this.emit(O,J,oe)}}handleInternalEvent($){var O=$.event,J=$.data;switch(O){case"pusher_internal:subscription_succeeded":this.handleSubscriptionSucceededEvent($);break;case"pusher_internal:subscription_count":this.handleSubscriptionCountEvent($);break;case"pusher_internal:member_added":var oe=this.members.addMember(J);this.emit("pusher:member_added",oe);break;case"pusher_internal:member_removed":var $e=this.members.removeMember(J);$e&&this.emit("pusher:member_removed",$e);break}}handleSubscriptionSucceededEvent($){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):(this.members.onSubscription($.data),this.emit("pusher:subscription_succeeded",this.members))}disconnect(){this.members.reset(),super.disconnect()}}var ca=u(978),Ys=u(594);class oo extends Or{constructor($,O,J){super($,O),this.key=null,this.nacl=J}authorize($,O){super.authorize($,(J,oe)=>{if(J){O(J,oe);return}let $e=oe.shared_secret;if(!$e){O(new Error(`No shared_secret key in auth payload for encrypted channel: ${this.name}`),null);return}this.key=(0,Ys.decode)($e),delete oe.shared_secret,O(null,oe)})}trigger($,O){throw new W("Client events are not currently supported for encrypted channels")}handleEvent($){var O=$.event,J=$.data;if(O.indexOf("pusher_internal:")===0||O.indexOf("pusher:")===0){super.handleEvent($);return}this.handleEncryptedEvent(O,J)}handleEncryptedEvent($,O){if(!this.key){Ve.debug("Received encrypted event before key has been retrieved from the authEndpoint");return}if(!O.ciphertext||!O.nonce){Ve.error("Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: "+O);return}let J=(0,Ys.decode)(O.ciphertext);if(J.length<this.nacl.secretbox.overheadLength){Ve.error(`Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${J.length}`);return}let oe=(0,Ys.decode)(O.nonce);if(oe.length<this.nacl.secretbox.nonceLength){Ve.error(`Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${oe.length}`);return}let $e=this.nacl.secretbox.open(J,oe,this.key);if($e===null){Ve.debug("Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint..."),this.authorize(this.pusher.connection.socket_id,(Ke,dt)=>{if(Ke){Ve.error(`Failed to make a request to the authEndpoint: ${dt}. Unable to fetch new key, so dropping encrypted event`);return}if($e=this.nacl.secretbox.open(J,oe,this.key),$e===null){Ve.error("Failed to decrypt event with new key. Dropping encrypted event");return}this.emit($,this.getDataToEmit($e))});return}this.emit($,this.getDataToEmit($e))}getDataToEmit($){let O=(0,ca.D4)($);try{return JSON.parse(O)}catch{return O}}}class bl extends Ye{constructor($,O){super(),this.state="initialized",this.connection=null,this.key=$,this.options=O,this.timeline=this.options.timeline,this.usingTLS=this.options.useTLS,this.errorCallbacks=this.buildErrorCallbacks(),this.connectionCallbacks=this.buildConnectionCallbacks(this.errorCallbacks),this.handshakeCallbacks=this.buildHandshakeCallbacks(this.errorCallbacks);var J=ht.getNetwork();J.bind("online",()=>{this.timeline.info({netinfo:"online"}),(this.state==="connecting"||this.state==="unavailable")&&this.retryIn(0)}),J.bind("offline",()=>{this.timeline.info({netinfo:"offline"}),this.connection&&this.sendActivityCheck()}),this.updateStrategy()}switchCluster($){this.key=$,this.updateStrategy(),this.retryIn(0)}connect(){if(!(this.connection||this.runner)){if(!this.strategy.isSupported()){this.updateState("failed");return}this.updateState("connecting"),this.startConnecting(),this.setUnavailableTimer()}}send($){return this.connection?this.connection.send($):!1}send_event($,O,J){return this.connection?this.connection.send_event($,O,J):!1}disconnect(){this.disconnectInternally(),this.updateState("disconnected")}isUsingTLS(){return this.usingTLS}startConnecting(){var $=(O,J)=>{O?this.runner=this.strategy.connect(0,$):J.action==="error"?(this.emit("error",{type:"HandshakeError",error:J.error}),this.timeline.error({handshakeError:J.error})):(this.abortConnecting(),this.handshakeCallbacks[J.action](J))};this.runner=this.strategy.connect(0,$)}abortConnecting(){this.runner&&(this.runner.abort(),this.runner=null)}disconnectInternally(){if(this.abortConnecting(),this.clearRetryTimer(),this.clearUnavailableTimer(),this.connection){var $=this.abandonConnection();$.close()}}updateStrategy(){this.strategy=this.options.getStrategy({key:this.key,timeline:this.timeline,useTLS:this.usingTLS})}retryIn($){this.timeline.info({action:"retry",delay:$}),$>0&&this.emit("connecting_in",Math.round($/1e3)),this.retryTimer=new pe($||0,()=>{this.disconnectInternally(),this.connect()})}clearRetryTimer(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)}setUnavailableTimer(){this.unavailableTimer=new pe(this.options.unavailableTimeout,()=>{this.updateState("unavailable")})}clearUnavailableTimer(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()}sendActivityCheck(){this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new pe(this.options.pongTimeout,()=>{this.timeline.error({pong_timed_out:this.options.pongTimeout}),this.retryIn(0)})}resetActivityCheck(){this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new pe(this.activityTimeout,()=>{this.sendActivityCheck()}))}stopActivityCheck(){this.activityTimer&&this.activityTimer.ensureAborted()}buildConnectionCallbacks($){return be({},$,{message:O=>{this.resetActivityCheck(),this.emit("message",O)},ping:()=>{this.send_event("pusher:pong",{})},activity:()=>{this.resetActivityCheck()},error:O=>{this.emit("error",O)},closed:()=>{this.abandonConnection(),this.shouldRetry()&&this.retryIn(1e3)}})}buildHandshakeCallbacks($){return be({},$,{connected:O=>{this.activityTimeout=Math.min(this.options.activityTimeout,O.activityTimeout,O.connection.activityTimeout||1/0),this.clearUnavailableTimer(),this.setConnection(O.connection),this.socket_id=this.connection.id,this.updateState("connected",{socket_id:this.socket_id})}})}buildErrorCallbacks(){let $=O=>J=>{J.error&&this.emit("error",{type:"WebSocketError",error:J.error}),O(J)};return{tls_only:$(()=>{this.usingTLS=!0,this.updateStrategy(),this.retryIn(0)}),refused:$(()=>{this.disconnect()}),backoff:$(()=>{this.retryIn(1e3)}),retry:$(()=>{this.retryIn(0)})}}setConnection($){this.connection=$;for(var O in this.connectionCallbacks)this.connection.bind(O,this.connectionCallbacks[O]);this.resetActivityCheck()}abandonConnection(){if(this.connection){this.stopActivityCheck();for(var $ in this.connectionCallbacks)this.connection.unbind($,this.connectionCallbacks[$]);var O=this.connection;return this.connection=null,O}}updateState($,O){var J=this.state;if(this.state=$,J!==$){var oe=$;oe==="connected"&&(oe+=" with new socket ID "+O.socket_id),Ve.debug("State changed",J+" -> "+oe),this.timeline.info({state:$,params:O}),this.emit("state_change",{previous:J,current:$}),this.emit($,O)}}shouldRetry(){return this.state==="connecting"||this.state==="connected"}}class xl{constructor(){this.channels={}}add($,O){return this.channels[$]||(this.channels[$]=vl($,O)),this.channels[$]}all(){return mt(this.channels)}find($){return this.channels[$]}remove($){var O=this.channels[$];return delete this.channels[$],O}disconnect(){De(this.channels,function($){$.disconnect()})}}function vl(P,$){if(P.indexOf("private-encrypted-")===0){if($.config.nacl)return nn.createEncryptedChannel(P,$,$.config.nacl);let O="Tried to subscribe to a private-encrypted- channel but no nacl implementation available",J=A.buildLogSuffix("encryptedChannelSupport");throw new W(`${O}. ${J}`)}else{if(P.indexOf("private-")===0)return nn.createPrivateChannel(P,$);if(P.indexOf("presence-")===0)return nn.createPresenceChannel(P,$);if(P.indexOf("#")===0)throw new E('Cannot create a channel with name "'+P+'".');return nn.createChannel(P,$)}}var dd={createChannels(){return new xl},createConnectionManager(P,$){return new bl(P,$)},createChannel(P,$){return new dr(P,$)},createPrivateChannel(P,$){return new Or(P,$)},createPresenceChannel(P,$){return new la(P,$)},createEncryptedChannel(P,$,O){return new oo(P,$,O)},createTimelineSender(P,$){return new ro(P,$)},createHandshake(P,$){return new ai(P,$)},createAssistantToTheTransportManager(P,$,O){return new ri(P,$,O)}};const nn=dd;class Eo{constructor($){this.options=$||{},this.livesLeft=this.options.lives||1/0}getAssistant($){return nn.createAssistantToTheTransportManager(this,$,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})}isAlive(){return this.livesLeft>0}reportDeath(){this.livesLeft-=1}}class Jn{constructor($,O){this.strategies=$,this.loop=!!O.loop,this.failFast=!!O.failFast,this.timeout=O.timeout,this.timeoutLimit=O.timeoutLimit}isSupported(){return Nt(this.strategies,ce.method("isSupported"))}connect($,O){var J=this.strategies,oe=0,$e=this.timeout,Ke=null,dt=(Ct,Ut)=>{Ut?O(null,Ut):(oe=oe+1,this.loop&&(oe=oe%J.length),oe<J.length?($e&&($e=$e*2,this.timeoutLimit&&($e=Math.min($e,this.timeoutLimit))),Ke=this.tryStrategy(J[oe],$,{timeout:$e,failFast:this.failFast},dt)):O(!0))};return Ke=this.tryStrategy(J[oe],$,{timeout:$e,failFast:this.failFast},dt),{abort:function(){Ke.abort()},forceMinPriority:function(Ct){$=Ct,Ke&&Ke.forceMinPriority(Ct)}}}tryStrategy($,O,J,oe){var $e=null,Ke=null;return J.timeout>0&&($e=new pe(J.timeout,function(){Ke.abort(),oe(!0)})),Ke=$.connect(O,function(dt,Ct){dt&&$e&&$e.isRunning()&&!J.failFast||($e&&$e.ensureAborted(),oe(dt,Ct))}),{abort:function(){$e&&$e.ensureAborted(),Ke.abort()},forceMinPriority:function(dt){Ke.forceMinPriority(dt)}}}}class Un{constructor($){this.strategies=$}isSupported(){return Nt(this.strategies,ce.method("isSupported"))}connect($,O){return ii(this.strategies,$,function(J,oe){return function($e,Ke){if(oe[J].error=$e,$e){ud(oe)&&O(!0);return}ft(oe,function(dt){dt.forceMinPriority(Ke.transport.priority)}),O(null,Ke)}})}}function ii(P,$,O){var J=xt(P,function(oe,$e,Ke,dt){return oe.connect($,O($e,dt))});return{abort:function(){ft(J,da)},forceMinPriority:function(oe){ft(J,function($e){$e.forceMinPriority(oe)})}}}function ud(P){return tn(P,function($){return!!$.error})}function da(P){!P.error&&!P.aborted&&(P.abort(),P.aborted=!0)}class Dn{constructor($,O,J){this.strategy=$,this.transports=O,this.ttl=J.ttl||18e5,this.usingTLS=J.useTLS,this.timeline=J.timeline}isSupported(){return this.strategy.isSupported()}connect($,O){var J=this.usingTLS,oe=wl(J),$e=oe&&oe.cacheSkipCount?oe.cacheSkipCount:0,Ke=[this.strategy];if(oe&&oe.timestamp+this.ttl>=ce.now()){var dt=this.transports[oe.transport];dt&&(["ws","wss"].includes(oe.transport)||$e>3?(this.timeline.info({cached:!0,transport:oe.transport,latency:oe.latency}),Ke.push(new Jn([dt],{timeout:oe.latency*2+1e3,failFast:!0}))):$e++)}var Ct=ce.now(),Ut=Ke.pop().connect($,function Gt(kn,Pr){kn?(ua(J),Ke.length>0?(Ct=ce.now(),Ut=Ke.pop().connect($,Gt)):O(kn)):(vs(J,Pr.transport.name,ce.now()-Ct,$e),O(null,Pr))});return{abort:function(){Ut.abort()},forceMinPriority:function(Gt){$=Gt,Ut&&Ut.forceMinPriority(Gt)}}}}function js(P){return"pusherTransport"+(P?"TLS":"NonTLS")}function wl(P){var $=ht.getLocalStorage();if($)try{var O=$[js(P)];if(O)return JSON.parse(O)}catch{ua(P)}return null}function vs(P,$,O,J){var oe=ht.getLocalStorage();if(oe)try{oe[js(P)]=Le({timestamp:ce.now(),transport:$,latency:O,cacheSkipCount:J})}catch{}}function ua(P){var $=ht.getLocalStorage();if($)try{delete $[js(P)]}catch{}}class de{constructor($,{delay:O}){this.strategy=$,this.options={delay:O}}isSupported(){return this.strategy.isSupported()}connect($,O){var J=this.strategy,oe,$e=new pe(this.options.delay,function(){oe=J.connect($,O)});return{abort:function(){$e.ensureAborted(),oe&&oe.abort()},forceMinPriority:function(Ke){$=Ke,oe&&oe.forceMinPriority(Ke)}}}}class Ae{constructor($,O,J){this.test=$,this.trueBranch=O,this.falseBranch=J}isSupported(){var $=this.test()?this.trueBranch:this.falseBranch;return $.isSupported()}connect($,O){var J=this.test()?this.trueBranch:this.falseBranch;return J.connect($,O)}}class Me{constructor($){this.strategy=$}isSupported(){return this.strategy.isSupported()}connect($,O){var J=this.strategy.connect($,function(oe,$e){$e&&J.abort(),O(oe,$e)});return J}}function Ue(P){return function(){return P.isSupported()}}var rt=function(P,$,O){var J={};function oe(_d,xp,vp,Tb,$b){var wp=O(P,_d,xp,vp,Tb,$b);return J[_d]=wp,wp}var $e=Object.assign({},$,{hostNonTLS:P.wsHost+":"+P.wsPort,hostTLS:P.wsHost+":"+P.wssPort,httpPath:P.wsPath}),Ke=Object.assign({},$e,{useTLS:!0}),dt=Object.assign({},$,{hostNonTLS:P.httpHost+":"+P.httpPort,hostTLS:P.httpHost+":"+P.httpsPort,httpPath:P.httpPath}),Ct={loop:!0,timeout:15e3,timeoutLimit:6e4},Ut=new Eo({minPingDelay:1e4,maxPingDelay:P.activityTimeout}),Gt=new Eo({lives:2,minPingDelay:1e4,maxPingDelay:P.activityTimeout}),kn=oe("ws","ws",3,$e,Ut),Pr=oe("wss","ws",3,Ke,Ut),Eb=oe("sockjs","sockjs",1,dt),yp=oe("xhr_streaming","xhr_streaming",1,dt,Gt),Rb=oe("xdr_streaming","xdr_streaming",1,dt,Gt),xd=oe("xhr_polling","xhr_polling",1,dt),bp=oe("xdr_polling","xdr_polling",1,dt),pa=new Jn([kn],Ct),pi=new Jn([Pr],Ct),Ab=new Jn([Eb],Ct),gi=new Jn([new Ae(Ue(yp),yp,Rb)],Ct),vd=new Jn([new Ae(Ue(xd),xd,bp)],Ct),wd=new Jn([new Ae(Ue(gi),new Un([gi,new de(vd,{delay:4e3})]),vd)],Ct),hi=new Ae(Ue(wd),wd,Ab),mi;return $.useTLS?mi=new Un([pa,new de(hi,{delay:2e3})]):mi=new Un([pa,new de(pi,{delay:2e3}),new de(hi,{delay:5e3})]),new Dn(new Me(new Ae(Ue(kn),mi,hi)),J,{ttl:18e5,timeline:$.timeline,useTLS:$.useTLS})};const bt=rt;function Tt(){var P=this;P.timeline.info(P.buildTimelineMessage({transport:P.name+(P.options.useTLS?"s":"")})),P.hooks.isInitialized()?P.changeState("initialized"):P.hooks.file?(P.changeState("initializing"),x.load(P.hooks.file,{useTLS:P.options.useTLS},function($,O){P.hooks.isInitialized()?(P.changeState("initialized"),O(!0)):($&&P.onError($),P.onClose(),O(!1))})):P.onClose()}var wt={getRequest:function(P){var $=new window.XDomainRequest;return $.ontimeout=function(){P.emit("error",new T),P.close()},$.onerror=function(O){P.emit("error",O),P.close()},$.onprogress=function(){$.responseText&&$.responseText.length>0&&P.onChunk(200,$.responseText)},$.onload=function(){$.responseText&&$.responseText.length>0&&P.onChunk(200,$.responseText),P.emit("finished",200),P.close()},$},abortRequest:function(P){P.ontimeout=P.onerror=P.onprogress=P.onload=null,P.abort()}};const gt=wt,_t=256*1024;class Kt extends Ye{constructor($,O,J){super(),this.hooks=$,this.method=O,this.url=J}start($){this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=()=>{this.close()},ht.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send($)}close(){this.unloader&&(ht.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)}onChunk($,O){for(;;){var J=this.advanceBuffer(O);if(J)this.emit("chunk",{status:$,data:J});else break}this.isBufferTooLong(O)&&this.emit("buffer_too_long")}advanceBuffer($){var O=$.slice(this.position),J=O.indexOf(`
`);return J!==-1?(this.position+=J+1,O.slice(0,J)):null}isBufferTooLong($){return this.position===$.length&&$.length>_t}}var as;(function(P){P[P.CONNECTING=0]="CONNECTING",P[P.OPEN=1]="OPEN",P[P.CLOSED=3]="CLOSED"})(as||(as={}));const sn=as;var wn=1;class Ls{constructor($,O){this.hooks=$,this.session=Os(1e3)+"/"+fd(8),this.location=li(O),this.readyState=sn.CONNECTING,this.openStream()}send($){return this.sendRaw(JSON.stringify([$]))}ping(){this.hooks.sendHeartbeat(this)}close($,O){this.onClose($,O,!0)}sendRaw($){if(this.readyState===sn.OPEN)try{return ht.createSocketRequest("POST",is(mn(this.location,this.session))).start($),!0}catch{return!1}else return!1}reconnect(){this.closeStream(),this.openStream()}onClose($,O,J){this.closeStream(),this.readyState=sn.CLOSED,this.onclose&&this.onclose({code:$,reason:O,wasClean:J})}onChunk($){if($.status===200){this.readyState===sn.OPEN&&this.onActivity();var O,J=$.data.slice(0,1);switch(J){case"o":O=JSON.parse($.data.slice(1)||"{}"),this.onOpen(O);break;case"a":O=JSON.parse($.data.slice(1)||"[]");for(var oe=0;oe<O.length;oe++)this.onEvent(O[oe]);break;case"m":O=JSON.parse($.data.slice(1)||"null"),this.onEvent(O);break;case"h":this.hooks.onHeartbeat(this);break;case"c":O=JSON.parse($.data.slice(1)||"[]"),this.onClose(O[0],O[1],!0);break}}}onOpen($){this.readyState===sn.CONNECTING?($&&$.hostname&&(this.location.base=Ro(this.location.base,$.hostname)),this.readyState=sn.OPEN,this.onopen&&this.onopen()):this.onClose(1006,"Server lost session",!0)}onEvent($){this.readyState===sn.OPEN&&this.onmessage&&this.onmessage({data:$})}onActivity(){this.onactivity&&this.onactivity()}onError($){this.onerror&&this.onerror($)}openStream(){this.stream=ht.createSocketRequest("POST",is(this.hooks.getReceiveURL(this.location,this.session))),this.stream.bind("chunk",$=>{this.onChunk($)}),this.stream.bind("finished",$=>{this.hooks.onFinished(this,$)}),this.stream.bind("buffer_too_long",()=>{this.reconnect()});try{this.stream.start()}catch($){ce.defer(()=>{this.onError($),this.onClose(1006,"Could not start streaming",!1)})}}closeStream(){this.stream&&(this.stream.unbind_all(),this.stream.close(),this.stream=null)}}function li(P){var $=/([^\?]*)\/*(\??.*)/.exec(P);return{base:$[1],queryString:$[2]}}function mn(P,$){return P.base+"/"+$+"/xhr_send"}function is(P){var $=P.indexOf("?")===-1?"?":"&";return P+$+"t="+ +new Date+"&n="+wn++}function Ro(P,$){var O=/(https?:\/\/)([^\/:]+)((\/|:)?.*)/.exec(P);return O[1]+$+O[3]}function Os(P){return ht.randomInt(P)}function fd(P){for(var $=[],O=0;O<P;O++)$.push(Os(32).toString(32));return $.join("")}const fa=Ls;var Mr={getReceiveURL:function(P,$){return P.base+"/"+$+"/xhr_streaming"+P.queryString},onHeartbeat:function(P){P.sendRaw("[]")},sendHeartbeat:function(P){P.sendRaw("[]")},onFinished:function(P,$){P.onClose(1006,"Connection interrupted ("+$+")",!1)}};const pd=Mr;var ci={getReceiveURL:function(P,$){return P.base+"/"+$+"/xhr"+P.queryString},onHeartbeat:function(){},sendHeartbeat:function(P){P.sendRaw("[]")},onFinished:function(P,$){$===200?P.reconnect():P.onClose(1006,"Connection interrupted ("+$+")",!1)}};const ao=ci;var gd={getRequest:function(P){var $=ht.getXHRAPI(),O=new $;return O.onreadystatechange=O.onprogress=function(){switch(O.readyState){case 3:O.responseText&&O.responseText.length>0&&P.onChunk(O.status,O.responseText);break;case 4:O.responseText&&O.responseText.length>0&&P.onChunk(O.status,O.responseText),P.emit("finished",O.status),P.close();break}},O},abortRequest:function(P){P.onreadystatechange=null,P.abort()}};const _l=gd;var dp={createStreamingSocket(P){return this.createSocket(pd,P)},createPollingSocket(P){return this.createSocket(ao,P)},createSocket(P,$){return new fa(P,$)},createXHR(P,$){return this.createRequest(_l,P,$)},createRequest(P,$,O){return new Kt(P,$,O)}};const di=dp;di.createXDR=function(P,$){return this.createRequest(gt,P,$)};var up={nextAuthCallbackID:1,auth_callbacks:{},ScriptReceivers:g,DependenciesReceivers:v,getDefaultStrategy:bt,Transports:os,transportConnectionInitializer:Tt,HTTPFactory:di,TimelineTransport:Q,getXHRAPI(){return window.XMLHttpRequest},getWebSocketAPI(){return window.WebSocket||window.MozWebSocket},setup(P){window.Pusher=P;var $=()=>{this.onDocumentBody(P.ready)};window.JSON?$():x.load("json2",{},$)},getDocument(){return document},getProtocol(){return this.getDocument().location.protocol},getAuthorizers(){return{ajax:Z,jsonp:jt}},onDocumentBody(P){document.body?P():setTimeout(()=>{this.onDocumentBody(P)},0)},createJSONPRequest(P,$){return new Rt(P,$)},createScriptRequest(P){return new At(P)},getLocalStorage(){try{return window.localStorage}catch{return}},createXHR(){return this.getXHRAPI()?this.createXMLHttpRequest():this.createMicrosoftXHR()},createXMLHttpRequest(){var P=this.getXHRAPI();return new P},createMicrosoftXHR(){return new ActiveXObject("Microsoft.XMLHTTP")},getNetwork(){return Co},createWebSocket(P){var $=this.getWebSocketAPI();return new $(P)},createSocketRequest(P,$){if(this.isXHRSupported())return this.HTTPFactory.createXHR(P,$);if(this.isXDRSupported($.indexOf("https:")===0))return this.HTTPFactory.createXDR(P,$);throw"Cross-origin HTTP requests are not supported"},isXHRSupported(){var P=this.getXHRAPI();return!!P&&new P().withCredentials!==void 0},isXDRSupported(P){var $=P?"https:":"http:",O=this.getProtocol();return!!window.XDomainRequest&&O===$},addUnloadListener(P){window.addEventListener!==void 0?window.addEventListener("unload",P,!1):window.attachEvent!==void 0&&window.attachEvent("onunload",P)},removeUnloadListener(P){window.addEventListener!==void 0?window.removeEventListener("unload",P,!1):window.detachEvent!==void 0&&window.detachEvent("onunload",P)},randomInt(P){return Math.floor(function(){return(window.crypto||window.msCrypto).getRandomValues(new Uint32Array(1))[0]/Math.pow(2,32)}()*P)}};const ht=up;var zr;(function(P){P[P.ERROR=3]="ERROR",P[P.INFO=6]="INFO",P[P.DEBUG=7]="DEBUG"})(zr||(zr={}));const Ao=zr;class ui{constructor($,O,J){this.key=$,this.session=O,this.events=[],this.options=J||{},this.sent=0,this.uniqueID=0}log($,O){$<=this.options.level&&(this.events.push(be({},O,{timestamp:ce.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())}error($){this.log(Ao.ERROR,$)}info($){this.log(Ao.INFO,$)}debug($){this.log(Ao.DEBUG,$)}isEmpty(){return this.events.length===0}send($,O){var J=be({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],$(J,(oe,$e)=>{oe||this.sent++,O&&O(oe,$e)}),!0}generateUniqueID(){return this.uniqueID++,this.uniqueID}}class fb{constructor($,O,J,oe){this.name=$,this.priority=O,this.transport=J,this.options=oe||{}}isSupported(){return this.transport.isSupported({useTLS:this.options.useTLS})}connect($,O){if(this.isSupported()){if(this.priority<$)return Sl(new D,O)}else return Sl(new H,O);var J=!1,oe=this.transport.createConnection(this.name,this.priority,this.options.key,this.options),$e=null,Ke=function(){oe.unbind("initialized",Ke),oe.connect()},dt=function(){$e=nn.createHandshake(oe,function(kn){J=!0,Gt(),O(null,kn)})},Ct=function(kn){Gt(),O(kn)},Ut=function(){Gt();var kn;kn=Le(oe),O(new I(kn))},Gt=function(){oe.unbind("initialized",Ke),oe.unbind("open",dt),oe.unbind("error",Ct),oe.unbind("closed",Ut)};return oe.bind("initialized",Ke),oe.bind("open",dt),oe.bind("error",Ct),oe.bind("closed",Ut),oe.initialize(),{abort:()=>{J||(Gt(),$e?$e.close():oe.close())},forceMinPriority:kn=>{J||this.priority<kn&&($e?$e.close():oe.close())}}}}function Sl(P,$){return ce.defer(function(){$(P)}),{abort:function(){},forceMinPriority:function(){}}}const{Transports:md}=ht;var fi=function(P,$,O,J,oe,$e){var Ke=md[O];if(!Ke)throw new z(O);var dt=(!P.enabledTransports||fe(P.enabledTransports,$)!==-1)&&(!P.disabledTransports||fe(P.disabledTransports,$)===-1),Ct;return dt?(oe=Object.assign({ignoreNullOrigin:P.ignoreNullOrigin},oe),Ct=new fb($,J,$e?$e.getAssistant(Ke):Ke,oe)):Ct=kl,Ct},kl={isSupported:function(){return!1},connect:function(P,$){var O=ce.defer(function(){$(new H)});return{abort:function(){O.ensureAborted()},forceMinPriority:function(){}}}};function fp(P){if(P==null)throw"You must pass an options object";if(P.cluster==null)throw"Options object must provide a cluster";"disableStats"in P&&Ve.warn("The disableStats option is deprecated in favor of enableStats")}const pb=(P,$)=>{var O="socket_id="+encodeURIComponent(P.socketId);for(var J in $.params)O+="&"+encodeURIComponent(J)+"="+encodeURIComponent($.params[J]);if($.paramsProvider!=null){let oe=$.paramsProvider();for(var J in oe)O+="&"+encodeURIComponent(J)+"="+encodeURIComponent(oe[J])}return O},gb=P=>{if(typeof ht.getAuthorizers()[P.transport]>"u")throw`'${P.transport}' is not a recognized auth transport`;return($,O)=>{const J=pb($,P);ht.getAuthorizers()[P.transport](ht,J,P,C.UserAuthentication,O)}},yd=(P,$)=>{var O="socket_id="+encodeURIComponent(P.socketId);O+="&channel_name="+encodeURIComponent(P.channelName);for(var J in $.params)O+="&"+encodeURIComponent(J)+"="+encodeURIComponent($.params[J]);if($.paramsProvider!=null){let oe=$.paramsProvider();for(var J in oe)O+="&"+encodeURIComponent(J)+"="+encodeURIComponent(oe[J])}return O},hb=P=>{if(typeof ht.getAuthorizers()[P.transport]>"u")throw`'${P.transport}' is not a recognized auth transport`;return($,O)=>{const J=yd($,P);ht.getAuthorizers()[P.transport](ht,J,P,C.ChannelAuthorization,O)}},mb=(P,$,O)=>{const J={authTransport:$.transport,authEndpoint:$.endpoint,auth:{params:$.params,headers:$.headers}};return(oe,$e)=>{const Ke=P.channel(oe.channelName);O(Ke,J).authorize(oe.socketId,$e)}};function pp(P,$){let O={activityTimeout:P.activityTimeout||b.activityTimeout,cluster:P.cluster,httpPath:P.httpPath||b.httpPath,httpPort:P.httpPort||b.httpPort,httpsPort:P.httpsPort||b.httpsPort,pongTimeout:P.pongTimeout||b.pongTimeout,statsHost:P.statsHost||b.stats_host,unavailableTimeout:P.unavailableTimeout||b.unavailableTimeout,wsPath:P.wsPath||b.wsPath,wsPort:P.wsPort||b.wsPort,wssPort:P.wssPort||b.wssPort,enableStats:vb(P),httpHost:yb(P),useTLS:xb(P),wsHost:gp(P),userAuthenticator:bd(P),channelAuthorizer:_b(P,$)};return"disabledTransports"in P&&(O.disabledTransports=P.disabledTransports),"enabledTransports"in P&&(O.enabledTransports=P.enabledTransports),"ignoreNullOrigin"in P&&(O.ignoreNullOrigin=P.ignoreNullOrigin),"timelineParams"in P&&(O.timelineParams=P.timelineParams),"nacl"in P&&(O.nacl=P.nacl),O}function yb(P){return P.httpHost?P.httpHost:P.cluster?`sockjs-${P.cluster}.pusher.com`:b.httpHost}function gp(P){return P.wsHost?P.wsHost:bb(P.cluster)}function bb(P){return`ws-${P}.pusher.com`}function xb(P){return ht.getProtocol()==="https:"?!0:P.forceTLS!==!1}function vb(P){return"enableStats"in P?P.enableStats:"disableStats"in P?!P.disableStats:!1}const hp=P=>"customHandler"in P&&P.customHandler!=null;function bd(P){const $=Object.assign(Object.assign({},b.userAuthentication),P.userAuthentication);return hp($)?$.customHandler:gb($)}function wb(P,$){let O;if("channelAuthorization"in P)O=Object.assign(Object.assign({},b.channelAuthorization),P.channelAuthorization);else if(O={transport:P.authTransport||b.authTransport,endpoint:P.authEndpoint||b.authEndpoint},"auth"in P&&("params"in P.auth&&(O.params=P.auth.params),"headers"in P.auth&&(O.headers=P.auth.headers)),"authorizer"in P)return{customHandler:mb($,O,P.authorizer)};return O}function _b(P,$){const O=wb(P,$);return hp(O)?O.customHandler:hb(O)}class Sb extends Ye{constructor($){super(function(O,J){Ve.debug(`No callbacks on watchlist events for ${O}`)}),this.pusher=$,this.bindWatchlistInternalEvent()}handleEvent($){$.data.events.forEach(O=>{this.emit(O.name,O)})}bindWatchlistInternalEvent(){this.pusher.connection.bind("message",$=>{var O=$.event;O==="pusher_internal:watchlist_events"&&this.handleEvent($)})}}function mp(){let P,$;return{promise:new Promise((J,oe)=>{P=J,$=oe}),resolve:P,reject:$}}const kb=mp;class Cb extends Ye{constructor($){super(function(O,J){Ve.debug("No callbacks on user for "+O)}),this.signin_requested=!1,this.user_data=null,this.serverToUserChannel=null,this.signinDonePromise=null,this._signinDoneResolve=null,this._onAuthorize=(O,J)=>{if(O){Ve.warn(`Error during signin: ${O}`),this._cleanup();return}this.pusher.send_event("pusher:signin",{auth:J.auth,user_data:J.user_data})},this.pusher=$,this.pusher.connection.bind("state_change",({previous:O,current:J})=>{O!=="connected"&&J==="connected"&&this._signin(),O==="connected"&&J!=="connected"&&(this._cleanup(),this._newSigninPromiseIfNeeded())}),this.watchlist=new Sb($),this.pusher.connection.bind("message",O=>{var J=O.event;J==="pusher:signin_success"&&this._onSigninSuccess(O.data),this.serverToUserChannel&&this.serverToUserChannel.name===O.channel&&this.serverToUserChannel.handleEvent(O)})}signin(){this.signin_requested||(this.signin_requested=!0,this._signin())}_signin(){this.signin_requested&&(this._newSigninPromiseIfNeeded(),this.pusher.connection.state==="connected"&&this.pusher.config.userAuthenticator({socketId:this.pusher.connection.socket_id},this._onAuthorize))}_onSigninSuccess($){try{this.user_data=JSON.parse($.user_data)}catch{Ve.error(`Failed parsing user data after signin: ${$.user_data}`),this._cleanup();return}if(typeof this.user_data.id!="string"||this.user_data.id===""){Ve.error(`user_data doesn't contain an id. user_data: ${this.user_data}`),this._cleanup();return}this._signinDoneResolve(),this._subscribeChannels()}_subscribeChannels(){const $=O=>{O.subscriptionPending&&O.subscriptionCancelled?O.reinstateSubscription():!O.subscriptionPending&&this.pusher.connection.state==="connected"&&O.subscribe()};this.serverToUserChannel=new dr(`#server-to-user-${this.user_data.id}`,this.pusher),this.serverToUserChannel.bind_global((O,J)=>{O.indexOf("pusher_internal:")===0||O.indexOf("pusher:")===0||this.emit(O,J)}),$(this.serverToUserChannel)}_cleanup(){this.user_data=null,this.serverToUserChannel&&(this.serverToUserChannel.unbind_all(),this.serverToUserChannel.disconnect(),this.serverToUserChannel=null),this.signin_requested&&this._signinDoneResolve()}_newSigninPromiseIfNeeded(){if(!this.signin_requested||this.signinDonePromise&&!this.signinDonePromise.done)return;const{promise:$,resolve:O}=kb();$.done=!1;const J=()=>{$.done=!0};$.then(J).catch(J),this.signinDonePromise=$,this._signinDoneResolve=O}}class Zn{static ready(){Zn.isReady=!0;for(var $=0,O=Zn.instances.length;$<O;$++)Zn.instances[$].connect()}static getClientFeatures(){return Fe(kt({ws:ht.Transports.ws},function($){return $.isSupported({})}))}constructor($,O){jb($),fp(O),this.key=$,this.options=O,this.config=pp(this.options,this),this.channels=nn.createChannels(),this.global_emitter=new Ye,this.sessionID=ht.randomInt(1e9),this.timeline=new ui(this.key,this.sessionID,{cluster:this.config.cluster,features:Zn.getClientFeatures(),params:this.config.timelineParams||{},limit:50,level:Ao.INFO,version:b.VERSION}),this.config.enableStats&&(this.timelineSender=nn.createTimelineSender(this.timeline,{host:this.config.statsHost,path:"/timeline/v2/"+ht.TimelineTransport.name}));var J=oe=>ht.getDefaultStrategy(this.config,oe,fi);this.connection=nn.createConnectionManager(this.key,{getStrategy:J,timeline:this.timeline,activityTimeout:this.config.activityTimeout,pongTimeout:this.config.pongTimeout,unavailableTimeout:this.config.unavailableTimeout,useTLS:!!this.config.useTLS}),this.connection.bind("connected",()=>{this.subscribeAll(),this.timelineSender&&this.timelineSender.send(this.connection.isUsingTLS())}),this.connection.bind("message",oe=>{var $e=oe.event,Ke=$e.indexOf("pusher_internal:")===0;if(oe.channel){var dt=this.channel(oe.channel);dt&&dt.handleEvent(oe)}Ke||this.global_emitter.emit(oe.event,oe.data)}),this.connection.bind("connecting",()=>{this.channels.disconnect()}),this.connection.bind("disconnected",()=>{this.channels.disconnect()}),this.connection.bind("error",oe=>{Ve.warn(oe)}),Zn.instances.push(this),this.timeline.info({instances:Zn.instances.length}),this.user=new Cb(this),Zn.isReady&&this.connect()}switchCluster($){const{appKey:O,cluster:J}=$;this.key=O,this.options=Object.assign(Object.assign({},this.options),{cluster:J}),this.config=pp(this.options,this),this.connection.switchCluster(this.key)}channel($){return this.channels.find($)}allChannels(){return this.channels.all()}connect(){if(this.connection.connect(),this.timelineSender&&!this.timelineSenderTimer){var $=this.connection.isUsingTLS(),O=this.timelineSender;this.timelineSenderTimer=new je(6e4,function(){O.send($)})}}disconnect(){this.connection.disconnect(),this.timelineSenderTimer&&(this.timelineSenderTimer.ensureAborted(),this.timelineSenderTimer=null)}bind($,O,J){return this.global_emitter.bind($,O,J),this}unbind($,O,J){return this.global_emitter.unbind($,O,J),this}bind_global($){return this.global_emitter.bind_global($),this}unbind_global($){return this.global_emitter.unbind_global($),this}unbind_all($){return this.global_emitter.unbind_all(),this}subscribeAll(){var $;for($ in this.channels.channels)this.channels.channels.hasOwnProperty($)&&this.subscribe($)}subscribe($){var O=this.channels.add($,this);return O.subscriptionPending&&O.subscriptionCancelled?O.reinstateSubscription():!O.subscriptionPending&&this.connection.state==="connected"&&O.subscribe(),O}unsubscribe($){var O=this.channels.find($);O&&O.subscriptionPending?O.cancelSubscription():(O=this.channels.remove($),O&&O.subscribed&&O.unsubscribe())}send_event($,O,J){return this.connection.send_event($,O,J)}shouldUseTLS(){return this.config.useTLS}signin(){this.user.signin()}}Zn.instances=[],Zn.isReady=!1,Zn.logToConsole=!1,Zn.Runtime=ht,Zn.ScriptReceivers=ht.ScriptReceivers,Zn.DependenciesReceivers=ht.DependenciesReceivers,Zn.auth_callbacks=ht.auth_callbacks;const Cl=Zn;function jb(P){if(P==null)throw"You must pass your app key when you instantiate Pusher."}ht.setup(Zn)}},s={};function r(l){var d=s[l];if(d!==void 0)return d.exports;var u=s[l]={exports:{}};return t[l].call(u.exports,u,u.exports,r),u.exports}r.d=(l,d)=>{for(var u in d)r.o(d,u)&&!r.o(l,u)&&Object.defineProperty(l,u,{enumerable:!0,get:d[u]})},r.o=(l,d)=>Object.prototype.hasOwnProperty.call(l,d);var o=r(721);return o})())})(Lh)),Lh.exports}var KD=VD();const U0=po(KD),jn=Ht("WebSocketManager");class GD{constructor(){ne(this,"echo",null);ne(this,"subscriptions",new Map);ne(this,"initialized",!1);ne(this,"config",null)}configure(e){if(this.initialized){jn.warn("[WebSocketManager] 이미 초기화되어 설정을 변경할 수 없습니다.");return}this.config=e,jn.log("[WebSocketManager] 설정 완료:",{appKey:e.appKey?"***":"(없음)",host:e.host,port:e.port,scheme:e.scheme})}initialize(){if(this.initialized)return;if(!this.config||!this.config.appKey){jn.warn("[WebSocketManager] WebSocket 설정이 없습니다. initTemplateApp에서 websocket 옵션을 전달해주세요.");return}const{appKey:e,host:t="localhost",port:s=80,scheme:r="https",authEndpoint:o="/api/broadcasting/auth"}=this.config,l=Number(s)||80,d=r==="https";jn.log("[WebSocketManager] 연결 설정:",{host:t,port:l,scheme:r,useTLS:d,authEndpoint:o}),window.Pusher=U0;const u=localStorage.getItem("auth_token"),f={wsHost:t,wsPort:l,wssPort:l,forceTLS:d,disableStats:!0,enabledTransports:["ws","wss"],cluster:"mt1",authEndpoint:o,auth:{headers:{Authorization:u?`Bearer ${u}`:"",Accept:"application/json"}}};jn.log("[WebSocketManager] Pusher 옵션:",f);const g=new U0(e,f);g.connection.bind("connecting",()=>{jn.log("[WebSocketManager] 연결 시도 중...")}),g.connection.bind("connected",()=>{jn.log("[WebSocketManager] 연결 성공! Socket ID:",g.connection.socket_id)}),g.connection.bind("failed",()=>{jn.error("[WebSocketManager] 연결 실패 - WebSocket을 사용할 수 없습니다.")}),g.connection.bind("error",h=>{jn.error("[WebSocketManager] 연결 오류:",h)}),g.connection.bind("state_change",h=>{jn.log(`[WebSocketManager] 상태 변경: ${h.previous} → ${h.current}`)}),g.connection.bind("unavailable",()=>{jn.error("[WebSocketManager] WebSocket 사용 불가 - 연결할 수 없습니다.")}),g.connection.bind("disconnected",()=>{jn.warn("[WebSocketManager] 연결이 끊어졌습니다.")}),jn.log("[WebSocketManager] 초기 연결 상태:",g.connection.state),this.echo=new FD({broadcaster:"reverb",client:g}),jn.log("[WebSocketManager] 연결 시작 시도..."),g.connect(),window.Echo=this.echo,this.initialized=!0,jn.log("[WebSocketManager] Echo 초기화 완료")}subscribe(e,t,s,r={}){if(this.initialize(),!this.echo)return jn.warn("[WebSocketManager] Echo가 초기화되지 않았습니다."),"";const{channelType:o="private"}=r,l=`${e}:${t}`;if(this.subscriptions.has(l))return jn.log(`[WebSocketManager] 이미 구독 중: ${l}`),l;let d;switch(o){case"public":d=this.echo.channel(e);break;case"presence":d=this.echo.join(e);break;default:d=this.echo.private(e)}return d.listen(`.${t}`,s),this.subscriptions.set(l,d),jn.log(`[WebSocketManager] 구독 완료: ${l} (${o})`),l}unsubscribe(e){const t=this.subscriptions.get(e);if(!t)return;const s=e.lastIndexOf(":"),r=s>=0?e.substring(s+1):"";if(r)try{t.stopListening(`.${r}`)}catch(o){jn.warn(`[WebSocketManager] stopListening 실패: ${e}`,o)}this.subscriptions.delete(e),jn.log(`[WebSocketManager] 구독 해제: ${e}`)}leaveChannel(e){if(!this.echo)return;this.echo.leave(e);const t=[];this.subscriptions.forEach((s,r)=>{r.startsWith(`${e}:`)&&t.push(r)}),t.forEach(s=>this.subscriptions.delete(s)),jn.log(`[WebSocketManager] 채널 구독 해제: ${e}`)}disconnect(){this.echo&&(this.echo.disconnect(),this.subscriptions.clear(),this.initialized=!1,jn.log("[WebSocketManager] 연결 종료"))}getEcho(){return this.echo}isInitialized(){return this.initialized}isConfigured(){return this.config!==null&&!!this.config.appKey}getSubscriptionCount(){return this.subscriptions.size}}const Fu=new GD,Jt=Ht("DataSourceManager"),YD=new ms;function Vu(n,e){const t=n.match(/^\{\{(.+)\}\}$/);if(t){const s=t[1].trim();try{return YD.evaluateExpression(s,e)}catch(r){return Jt.error("Failed to evaluate param expression:",s,r),n}}return Oi(n,e,{skipCache:!0})}function q0(n){const e={};for(const t of n.keys()){if(t in e)continue;const s=n.getAll(t);s.length>1?e[t]=s:s.length===1&&(t.endsWith("[]")?e[t]=s:e[t]=s[0])}return e}function XD(){try{return window.G7Core?.devTools}catch{return}}const cp=class cp{constructor(e={}){ne(this,"options");ne(this,"dataCache",new Map);ne(this,"bindingEngine");ne(this,"globalHeaders",[]);this.options=e,this.bindingEngine=new ms}setGlobalHeaders(e){this.globalHeaders=e||[]}matchesPattern(e,t){if(t==="*")return!0;const s=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${s}$`).test(e)}toFormData(e){const t=new FormData;for(const[s,r]of Object.entries(e))r instanceof File||r instanceof Blob?t.append(s,r):r!=null&&t.append(s,typeof r=="object"?JSON.stringify(r):String(r));return t}getMatchingGlobalHeaders(e,t){const s={};for(const r of this.globalHeaders)this.matchesPattern(e,r.pattern)&&Object.entries(r.headers).forEach(([o,l])=>{const d=Vu(l,t);d!=null&&d!==""&&(s[o]=String(d))});return s}filterByCondition(e,t={}){const s=new Set,r=[];for(const o of e){if(s.has(o.id))continue;if(!o.if&&!o.conditions){s.add(o.id),r.push(o);continue}Li({if:o.if,conditions:o.conditions},t,this.bindingEngine,`data_source:${o.id}`)&&(s.add(o.id),r.push(o))}return r}checkErrorCondition(e,t){if(!e.errorCondition?.if||e.errorCondition?.errorCode===void 0)return null;try{const s={response:t};if(Li({if:e.errorCondition.if},s,this.bindingEngine,`errorCondition:${e.id}`))return Jt.log(`errorCondition matched for ${e.id}, triggering error ${e.errorCondition.errorCode}`),e.errorCondition.errorCode}catch(s){Jt.error(`Failed to evaluate errorCondition for ${e.id}:`,s)}return null}async fetchDataSources(e,t={},s=new URLSearchParams,r,o){const l={},d=!!this.options.sampleProvider,u=e.filter(f=>(d||f.auto_fetch!==!1)&&f.type!=="websocket");return await Promise.all(u.map(async f=>{try{const g=await this.fetchDataSource(f,t,s,r,o);l[f.id]=g,this.dataCache.set(f.id,{data:g,timestamp:Date.now()});const h=this.checkErrorCondition(f,g);if(h!==null){const b={status:h,message:`Error condition matched for ${f.id}`,data:g},y=_r(),v=y.resolve(h,{errorHandling:f.errorHandling,onError:f.onError});if(v.handler)try{await y.execute(v.handler,b)}catch(x){Jt.error(`Error executing errorCondition handler for ${f.id}:`,x)}f.fallback!==void 0&&(l[f.id]=f.fallback,this.dataCache.set(f.id,{data:f.fallback,timestamp:Date.now()}),Jt.log(`Using fallback data for ${f.id} (errorCondition)`));return}if(f.onSuccess)try{const b={data:g,sourceId:f.id};await this.executeOnSuccessHandler(f.onSuccess,b)}catch(b){Jt.error(`Error executing onSuccess handler for ${f.id}:`,b)}}catch(g){Jt.error(`Failed to fetch data source: ${f.id}`,g);const h=g?.response?.status||g?.status||500,b=g?.response?.data,y=b?.message||g.message||"Unknown error",v={status:h,message:y,errors:b?.errors,data:b,statusText:g?.response?.statusText},x=_r(),S=x.resolve(h,{errorHandling:f.errorHandling,onError:f.onError});if(S.handler)try{await x.execute(S.handler,v)}catch(_){Jt.error(`Error executing error handler for ${f.id}:`,_)}f.fallback!==void 0&&(l[f.id]=f.fallback,this.dataCache.set(f.id,{data:f.fallback,timestamp:Date.now()}),Jt.log(`Using fallback data for ${f.id}`)),this.options.onError&&this.options.onError(g,f)}})),l}async fetchDataSourcesWithResults(e,t={},s=new URLSearchParams,r,o,l){if(e.some(g=>g.type==="websocket")){const g=e.filter(h=>h.type==="websocket").map(h=>h.id).join(", ");Jt.warn(`fetchDataSourcesWithResults received WebSocket sources (caller should filter them out before calling): ${g}. WebSocket sources are event listeners, not data providers — they should not be passed to fetch.`)}const u=l?.ignoreAutoFetch?e.filter(g=>g.type!=="websocket"):e.filter(g=>g.auto_fetch!==!1&&g.type!=="websocket");return await Promise.all(u.map(async g=>{try{const h=await this.fetchDataSource(g,t,s,r,o);this.dataCache.set(g.id,{data:h,timestamp:Date.now()});const b=this.checkErrorCondition(g,h);if(b!==null){const y={status:b,message:`Error condition matched for ${g.id}`,data:h},v=_r(),x=v.resolve(b,{errorHandling:g.errorHandling,onError:g.onError});let S=!1;if(x.handler)if(g.loading_strategy==="blocking")v.execute(x.handler,y).catch(_=>{Jt.error(`Error executing errorCondition handler for ${g.id}:`,_)}),S=!0;else try{await v.execute(x.handler,y),S=!0}catch(_){Jt.error(`Error executing errorCondition handler for ${g.id}:`,_)}return g.fallback!==void 0?(this.dataCache.set(g.id,{data:g.fallback,timestamp:Date.now()}),Jt.log(`Using fallback data for ${g.id} (errorCondition)`),{id:g.id,state:"success",data:g.fallback}):{id:g.id,state:"error",error:new Error(`Error condition matched: ${b}`),errorCode:b,errorHandled:S}}if(g.onSuccess)try{const y={data:h,sourceId:g.id};await this.executeOnSuccessHandler(g.onSuccess,y)}catch(y){Jt.error(`Error executing onSuccess handler for ${g.id}:`,y)}return{id:g.id,state:"success",data:h}}catch(h){Jt.error(`Failed to fetch data source: ${g.id}`,h);const b=h?.response?.status||h?.status||500,y=h?.response?.data,v=y?.message||h.message||"Unknown error",x={status:b,message:v,errors:y?.errors,data:y,statusText:h?.response?.statusText},S=_r(),_=S.resolve(b,{errorHandling:g.errorHandling,onError:g.onError});let A=!1;if(_.handler)if(g.loading_strategy==="blocking")S.execute(_.handler,x).catch(C=>{Jt.error(`Error executing error handler for ${g.id}:`,C)}),A=!0;else try{await S.execute(_.handler,x),A=!0}catch(C){Jt.error(`Error executing error handler for ${g.id}:`,C)}return g.fallback!==void 0?(this.dataCache.set(g.id,{data:g.fallback,timestamp:Date.now()}),Jt.log(`Using fallback data for ${g.id}`),{id:g.id,state:"success",data:g.fallback}):(this.options.onError&&this.options.onError(h,g),{id:g.id,state:"error",error:h,errorCode:b,errorHandled:A})}}))}fetchDataSourcesInBackground(e,t={},s=new URLSearchParams,r){e.filter(l=>l.auto_fetch!==!1&&l.loading_strategy==="background"&&l.type!=="websocket").forEach(l=>{this.fetchDataSource(l,t,s).then(async d=>{this.dataCache.set(l.id,{data:d,timestamp:Date.now()});const u=this.checkErrorCondition(l,d);if(u!==null){const f={status:u,message:`Error condition matched for ${l.id}`,data:d},g=_r(),h=g.resolve(u,{errorHandling:l.errorHandling,onError:l.onError});if(h.handler)try{await g.execute(h.handler,f)}catch(b){Jt.error(`Error executing errorCondition handler for ${l.id}:`,b)}l.fallback!==void 0&&(this.dataCache.set(l.id,{data:l.fallback,timestamp:Date.now()}),Jt.log(`Using fallback data for ${l.id} (errorCondition)`),r&&r(l.id,l.fallback));return}if(l.onSuccess)try{const f={data:d,sourceId:l.id};await this.executeOnSuccessHandler(l.onSuccess,f)}catch(f){Jt.error(`Error executing onSuccess handler for ${l.id}:`,f)}r&&r(l.id,d)}).catch(async d=>{Jt.error(`Background fetch failed: ${l.id}`,d);const u=d?.response?.status||d?.status||500,f=d?.response?.data,g=f?.message||d.message||"Unknown error",h={status:u,message:g,errors:f?.errors,data:f,statusText:d?.response?.statusText},b=_r(),y=b.resolve(u,{errorHandling:l.errorHandling,onError:l.onError});if(y.handler)try{await b.execute(y.handler,h)}catch(v){Jt.error(`Error executing error handler for ${l.id}:`,v)}if(l.fallback!==void 0){this.dataCache.set(l.id,{data:l.fallback,timestamp:Date.now()}),Jt.log(`Using fallback data for ${l.id}`),r&&r(l.id,l.fallback);return}this.options.onError&&this.options.onError(d,l)})})}async fetchDataSource(e,t,s,r,o){switch(e.type){case"api":return this.fetchApiDataSource(e,t,s,r,o);case"static":return e.data;case"route_params":return t;case"query_params":return q0(s);default:throw new Error(`Unknown data source type: ${e.type}`)}}async fetchApiDataSource(e,t,s,r,o){if(this.options.sampleProvider?.has(e.id))return await Promise.resolve(this.options.sampleProvider.resolve(e));if(!e.endpoint)throw new Error(`API data source ${e.id} has no endpoint`);const l={route:t,query:q0(s)};r&&(l._global=r),o&&(l._local=o);let d=Oi(e.endpoint,l,{skipCache:!0});const u=e.method||"GET",g=(e.contentType?typeof e.contentType=="string"&&e.contentType.includes("{{")?Oi(e.contentType,l,{skipCache:!0}):e.contentType:"application/json")==="multipart/form-data";let h=g?{...e.params||{}}:JSON.parse(JSON.stringify(e.params||{}));Object.entries(h).forEach(([v,x])=>{typeof x=="string"&&(h[v]=Vu(x,l))}),Object.keys(h).forEach(v=>{h[v]===""&&delete h[v]});const b=XD();let y=null;if(b?.isEnabled()){b.trackDataSourceDefinition({id:e.id,type:e.type,endpoint:d,method:u,autoFetch:e.auto_fetch,initLocal:e.initLocal,initGlobal:e.initGlobal});let v=d;if(u==="GET"&&Object.keys(h).length>0){const x=new URLSearchParams;Object.entries(h).forEach(([_,A])=>{Array.isArray(A)?A.forEach(C=>x.append(_,String(C))):A!=null&&x.append(_,String(A))});const S=x.toString();v=S?`${d}?${S}`:d}y=b.trackRequest(v,u,{requestBody:u!=="GET"?h:void 0,dataSourceId:e.id}),b.trackDataSourceLoading(e.id)}try{let v;const x=e.auth_mode??(e.auth_required===!0?"required":"none"),S=rr.getInstance().isAuthenticated();if(x==="required"&&!S){Jt.log(`[DataSourceManager] Skipping ${e.id}: auth_mode is 'required' but no token available`),b?.isEnabled()&&(b.trackDataSourceError(e.id,"Skipped: auth_mode required but not authenticated"),y&&b.failRequest(y,"Skipped: not authenticated"));const A=new Error("Auth required but not authenticated");throw A.response={status:401,statusText:"Unauthorized",data:null},A.status=401,A._authSkipped=!0,A}const _=x==="required"||x==="optional"&&S;if(_){const A=qr(),C=d.startsWith("/api/")?d.substring(4):d.startsWith("/api")?d.substring(4)||"/":d;this.options.onError&&Jt.log(`[DataSourceManager] Normalized endpoint: ${d} -> ${C}`);const j=this.getMatchingGlobalHeaders(d,l),E={};e.headers&&Object.entries(e.headers).forEach(([W,z])=>{const H=Vu(z,l);H!=null&&H!==""&&(E[W]=String(H))});const T={...j,...E},D=Object.keys(T).length>0,I=g?this.toFormData(h):h;switch(u){case"GET":v=await A.get(C,{params:h,...D&&{headers:T}});break;case"POST":D?v=await A.post(C,I,{headers:T}):v=await A.post(C,I);break;case"PUT":D?v=await A.put(C,I,{headers:T}):v=await A.put(C,I);break;case"PATCH":D?v=await A.patch(C,I,{headers:T}):v=await A.patch(C,I);break;case"DELETE":v=await A.delete(C,{params:h,...D&&{headers:T}});break;default:throw new Error(`Unsupported HTTP method: ${u}`)}}else{let A=d;if(u==="GET"){const I=new URLSearchParams(h).toString();A=I?`${d}?${I}`:d}const C={...g?{}:{"Content-Type":"application/json"},Accept:"application/json"};if(typeof window<"u"){const I=localStorage.getItem("g7_locale");I&&(C["Accept-Language"]=I)}const j=this.getMatchingGlobalHeaders(d,l);Object.assign(C,j),e.headers&&Object.entries(e.headers).forEach(([I,W])=>{const z=Vu(W,l);z!=null&&z!==""&&(C[I]=String(z))});let E;u!=="GET"&&(g?(E=this.toFormData(h),delete C["Content-Type"]):E=JSON.stringify(h));const T=await fetch(A,{method:u,headers:C,body:E});let D;try{D=await T.json()}catch{D=null}if(y&&b?.isEnabled()&&(b.completeRequest(y,T.status,D),y=null),!T.ok){b?.isEnabled()&&b.trackDataSourceError(e.id,`HTTP ${T.status}: ${T.statusText}`);const I=new Error(`HTTP error! status: ${T.status}`);throw I.response={status:T.status,statusText:T.statusText,data:D},I.status=T.status,I}v=D,b?.isEnabled()&&b.trackDataSourceLoaded(e.id,v)}return _&&y&&b?.isEnabled()&&(b.completeRequest(y,200,v),b.trackDataSourceLoaded(e.id,v)),v}catch(v){if(y&&b?.isEnabled()){const x=v;x?.response?b.completeRequest(y,x.response.status,x.response.data):b.failRequest(y,v instanceof Error?v.message:String(v)),b.trackDataSourceError(e.id,v instanceof Error?v.message:String(v))}throw v}}getCachedData(e){const t=this.dataCache.get(e);if(!t)return;if(Date.now()-t.timestamp>cp.DATA_CACHE_TTL){this.dataCache.delete(e);return}return t.data}clearCache(){this.dataCache.clear()}subscribeWebSockets(e,t,s={}){const r=[],o=e.filter(l=>l.type==="websocket");return o.length===0||o.forEach(l=>{if(!l.channel||!l.event){Jt.warn(`WebSocket source ${l.id} missing channel or event`);return}let d,u;try{d=Oi(l.channel,s,{skipCache:!0}),u=Oi(l.event,s,{skipCache:!0})}catch(h){Jt.error(`Failed to resolve WebSocket channel/event for source ${l.id}:`,h);return}const f=h=>!!(!h||h.trim()===""||h.includes("{{")||h.endsWith(".")||h.endsWith(":")||h.startsWith(".")||h.startsWith(":")||h.includes("..")||h.includes("::"));if(f(d)||f(u)){Jt.warn(`WebSocket source ${l.id} has invalid channel/event after expression resolution, skipping. Original channel="${l.channel}", resolved="${d}". Original event="${l.event}", resolved="${u}". Available context keys: [${Object.keys(s).join(", ")}]`);return}const g=Fu.subscribe(d,u,h=>{const b=l.target_source||l.id;this.dataCache.set(b,{data:h,timestamp:Date.now()}),t(b,h)},{channelType:l.channel_type||"private"});g&&r.push(g)}),r}unsubscribeWebSockets(e){e.length!==0&&e.forEach(t=>{Fu.unsubscribe(t)})}async executeOnSuccessHandler(e,t){const s=this.options.actionDispatcher??Iw();if(!s){Jt.warn("ActionDispatcher not available, skipping onSuccess handler");return}const r=Array.isArray(e)?e:[e];for(const o of r)try{await s.dispatchAction({type:"click",...o},{data:{response:t}})}catch(l){throw Jt.error("Failed to execute onSuccess handler:",l),l}}};ne(cp,"DATA_CACHE_TTL",3e5);let Rr=cp;new Rr;const Pa=Ht("ModalDataSourceWrapper");function JD(n,e){if(!n||!e)return n;const s=e.replace(/\?\./g,".").split(/\.(?![^\[]*\])/).flatMap(o=>{const l=o.match(/^([^\[]*)((?:\[\d+\])*)$/);if(l){const[,d,u]=l,f=[];d&&f.push(d);const g=u.match(/\[\d+\]/g);return g&&f.push(...g),f}return[o]}).filter(o=>o!=="");let r=n;for(const o of s){if(r==null)return;if(o.startsWith("[")&&o.endsWith("]")){const l=parseInt(o.slice(1,-1),10);r=r[l]}else r=r[o]}return r}const F0=({isOpen:n,modalId:e,dataSources:t,dataContext:s,globalStateUpdater:r,bindingEngine:o,debug:l=!1,children:d})=>{const[u,f]=w.useState(!1),[g,h]=w.useState(!1),b=w.useRef(!1),y=w.useRef(null);y.current||(y.current=new Rr);const v=w.useCallback(async()=>{if(!(!t||t.length===0)&&y.current){f(!0);try{const x=s.route||{},S=new URLSearchParams(window.location.search),_=t.map(C=>{let j={...C};if(C.endpoint&&o){const E=o.resolveBindings(C.endpoint,s,{skipCache:!0});j.endpoint=E}if(C.params&&o){const E={};Object.entries(C.params).forEach(([T,D])=>{typeof D=="string"?E[T]=o.resolveBindings(D,s,{skipCache:!0}):E[T]=D}),j.params=E}return j});l&&Pa.log(`[ModalDataSourceWrapper] Modal "${e}" fetching data sources:`,_.map(C=>({id:C.id,endpoint:C.endpoint})));const A=await y.current.fetchDataSourcesWithResults(_,x,S);r&&A.forEach(C=>{if(C.state==="success"&&C.data!==void 0){const j=_.find(E=>E.id===C.id);if(j?.initGlobal){const E=C.data?.data??C.data,T=Array.isArray(j.initGlobal)?j.initGlobal:[j.initGlobal];for(const D of T)if(typeof D=="string")r({[D]:E}),l&&Pa.log(`[ModalDataSourceWrapper] Modal "${e}" initGlobal: ${C.id}.data -> _global.${D}`);else if(typeof D=="object"&&D.key){const{key:I,path:W}=D,z=W?JD(E,W):E;r({[I]:z}),l&&Pa.log(`Modal "${e}" initGlobal: ${C.id}.data${W?"."+W:""} -> _global.${I}`)}}}else C.state==="error"&&Pa.error(`Modal "${e}" data source error:`,C.id,C.error)}),l&&Pa.log(`Modal "${e}" data sources fetched successfully`)}catch(x){Pa.error(`Modal "${e}" data source fetch error:`,x)}finally{f(!1),h(!0)}}},[t,s,r,o,e,l]);return w.useEffect(()=>{if(!t||t.length===0)return;const x=window.__templateApp;return x?.registerModalDataSources&&x.registerModalDataSources(e,t),()=>{x?.unregisterModalDataSources&&x.unregisterModalDataSources(e)}},[e,t]),w.useEffect(()=>{!n&&b.current&&(h(!1),l&&Pa.log(`[ModalDataSourceWrapper] Modal "${e}" closed, reset fetch state`)),n&&!b.current&&t&&t.length>0&&!g&&v(),b.current=n},[n,t,g,v,e,l]),a.jsx(a.Fragment,{children:d})};class Ku extends Error{constructor(t,s,r={}){super(s);ne(this,"code");ne(this,"userMessageKey");ne(this,"showStack");ne(this,"icon");ne(this,"recoverable");this.name="TemplateEngineError",this.code=t,this.userMessageKey=s,this.showStack=r.showStack??!0,this.icon=r.icon??"fa-circle-exclamation",this.recoverable=r.recoverable??!0,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}getUserMessage(t,s){if(!s||!t)return this.userMessageKey;try{return s.translate(this.userMessageKey,t)}catch{return this.userMessageKey}}}class ZD extends Ku{constructor(){super("TEMPLATE_NOT_FOUND","$t:core.errors.template_not_found",{showStack:!1,icon:"fa-paint-brush",recoverable:!1}),this.name="TemplateNotFoundError"}}function V0(n){if(n instanceof Ku)return n;if(n instanceof Error){const e=new Ku("TEMPLATE_INIT_ERROR",n.message||"$t:core.errors.template_init_error",{showStack:!0,icon:"fa-circle-exclamation",recoverable:!0});return e.stack=n.stack,e}return new Ku("TEMPLATE_INIT_ERROR","$t:core.errors.template_init_error",{showStack:!1,icon:"fa-circle-exclamation",recoverable:!0})}const Vi=Ht("Router");class QD{constructor(e){ne(this,"routes",[]);ne(this,"templateIdentifier");ne(this,"eventHandlers",new Map);ne(this,"pendingNavigation",null);ne(this,"isNavigating",!1);ne(this,"handlePopState",()=>{this.navigateToCurrentPath()});this.templateIdentifier=e,this.initPopstateListener()}initPopstateListener(){window.addEventListener("popstate",this.handlePopState)}on(e,t){this.eventHandlers.has(e)||this.eventHandlers.set(e,[]),this.eventHandlers.get(e).push(t)}async emit(e,...t){const s=this.eventHandlers.get(e);s&&await Promise.all(s.map(r=>r(...t)))}async loadRoutes(e){try{const t=e!==void 0&&e>0?`?v=${e}`:"",s=await fetch(`/api/templates/${this.templateIdentifier}/routes.json${t}`);if(!s.ok)throw new Error(`Failed to load routes: ${s.statusText}`);const r=await s.json();if(!r.success)throw new Error("Failed to load routes from API");if(r.data&&Array.isArray(r.data.routes))this.routes=r.data.routes,Vi.log(`Loaded ${this.routes.length} routes${e?` (v=${e})`:""}`);else throw new Error("Invalid routes data format")}catch(t){throw Vi.error("Error loading routes:",t),t}}setRoutes(e){this.routes=e,Vi.log(`Set ${this.routes.length} routes`)}match(e){for(const t of this.routes){const s=this.matchPattern(t.path,e);if(s!==null)return{route:t,params:s}}return null}matchPattern(e,t){const s=[];let r=e.replace(/:([^/]+)/g,(u,f)=>(s.push(f),"([^/]+)"));r.startsWith("*/")&&(r="(?:/[^/]+)?"+r.slice(1)),r=r.replace(/\//g,"\\/");const o=new RegExp(`^${r}$`),l=t.match(o);if(!l)return null;const d={};return s.forEach((u,f)=>{d[u]=l[f+1]}),d}getRoutes(){return[...this.routes]}getAuthType(e,t){return e.auth_type?e.auth_type:t.startsWith("/admin")?"admin":"user"}async navigateToCurrentPath(){const e=window.location.pathname,t=window.location.search,s=this.match(e);if(!s){Vi.warn(`No route matched for path: ${e}`),this.emit("routeNotFound",e);return}if(s.route.redirect){Vi.log(`Redirecting from ${e} to ${s.route.redirect}`),this.navigate(s.route.redirect);return}if(s.route.auth_required){const l=this.getAuthType(s.route,e),d=rr.getInstance();let u=d.isAuthenticated()&&d.getAuthType()===l;if(u||(u=await d.checkAuth(l)),!u){const f=d.getLoginRedirectUrl(l,e+t);Vi.log(`Not authenticated, redirecting to: ${f}`),window.location.href=f;return}}const r=new URLSearchParams(t),o={};for(const l of r.keys()){if(l in o)continue;const d=r.getAll(l);d.length>1?o[l]=d:d.length===1&&(l.endsWith("[]")?o[l]=d:o[l]=d[0])}await this.emit("routeChange",{path:e,layout:s.route.layout,endpoint:s.route.endpoint,params:{...s.route.params||{},...s.params},query:o,auth_required:s.route.auth_required,auth_type:s.route.auth_type,meta:s.route.meta})}navigate(e){if(this.isNavigating){this.pendingNavigation=e;return}this.executeNavigation(e)}async executeNavigation(e){this.isNavigating=!0,this.pendingNavigation=null;try{window.history.pushState({},"",e),await this.navigateToCurrentPath()}finally{if(this.isNavigating=!1,this.pendingNavigation){const t=this.pendingNavigation;this.executeNavigation(t)}}}}const eI=/^\/admin\/layout-editor\/([^/?#]+)\/?$/;function K0(n){const e=eI.exec(n);return e?{templateIdentifier:e[1]}:null}function G0(n){if(!n)return null;const t=new URLSearchParams(n).get("route");return t&&t.length>0?t:null}function Oh(n,e,t){const s=`/admin/layout-editor/${encodeURIComponent(n)}`;if(!e||e.length===0)return s;if(e.startsWith("__")){let r=`${s}?edit=${encodeURIComponent(e)}`;return(e.startsWith("__modal__/")||e.startsWith("__iteration__/"))&&t&&(r+=`&host=${encodeURIComponent(t)}`),r}return`${s}?route=${encodeURIComponent(e)}`}function Y0(n){if(!n)return null;const t=new URLSearchParams(n).get("host");return t&&t.length>0?t:null}function X0(n){if(!n)return null;const t=new URLSearchParams(n).get("edit");return t&&t.length>0&&t.startsWith("__")?t:null}function tI(n,e){const t=`/admin/templates/${encodeURIComponent(n)}/edit`;if(!e||e.length===0||e.startsWith("__"))return t;const s=e.replace(/^\*+/,"");return s.length===0?t:`${t}?route=${encodeURIComponent(s)}`}const nI="g7le-editor-route",sI=Ht("ErrorDisplay");class J0{static render(e,t){const s=document.getElementById(e);if(!s){sI.error(`Container #${e} not found`);return}const r=t.debug&&t.showStack&&t.stackTrace,o=window.matchMedia("(prefers-color-scheme: dark)").matches,l={container:`
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
background-color: ${o?"#111827":"#f9fafb"};
padding: 1rem;
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
`,card:`
max-width: 28rem;
width: 100%;
background-color: ${o?"#1f2937":"#ffffff"};
border-radius: 0.5rem;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
padding: 2rem;
text-align: center;
`,iconContainer:`
margin-bottom: 1.5rem;
`,icon:`
font-size: 4rem;
color: #ef4444;
`,title:`
font-size: 1.5rem;
font-weight: 700;
color: ${o?"#ffffff":"#111827"};
margin-bottom: 1rem;
`,message:`
color: ${o?"#d1d5db":"#4b5563"};
margin-bottom: 0.5rem;
line-height: 1.625;
`,detailMessage:`
font-size: 0.875rem;
color: ${o?"#9ca3af":"#6b7280"};
margin-bottom: 1.5rem;
background-color: ${o?"#374151":"#f3f4f6"};
padding: 0.5rem 0.75rem;
border-radius: 0.25rem;
`,spacer:`
margin-bottom: 1.5rem;
`,stackContainer:`
margin-top: 1.5rem;
padding: 1rem;
background-color: ${o?"#374151":"#f3f4f6"};
border-radius: 0.375rem;
text-align: left;
`,stackTitle:`
font-size: 0.875rem;
font-weight: 600;
color: ${o?"#e5e7eb":"#374151"};
margin-bottom: 0.5rem;
`,stackTrace:`
font-size: 0.75rem;
color: ${o?"#d1d5db":"#4b5563"};
overflow-x: auto;
white-space: pre-wrap;
word-break: break-word;
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
`,buttonContainer:`
margin-top: 1.5rem;
`,button:`
display: inline-flex;
align-items: center;
padding: 0.75rem 1.5rem;
background-color: #2563eb;
color: #ffffff;
font-weight: 500;
border-radius: 0.375rem;
border: none;
cursor: pointer;
transition: background-color 0.2s;
`};s.innerHTML=`
<div style="${l.container}">
<div style="${l.card}">
<!-- 아이콘 -->
<div style="${l.iconContainer}">
<i class="fa-solid ${t.icon}" style="${l.icon}"></i>
</div>
<!-- 제목 -->
<h1 style="${l.title}">
${this.escapeHtml(t.title)}
</h1>
<!-- 사용자 메시지 -->
<p style="${l.message}">
${this.escapeHtml(t.message)}
</p>
<!-- 상세 메시지 (API 응답 등) -->
${t.detailMessage?`
<p style="${l.detailMessage}">
${this.escapeHtml(t.detailMessage)}
</p>
`:`<div style="${l.spacer}"></div>`}
<!-- Stack Trace (디버그 모드일 때만) -->
${r?`
<div style="${l.stackContainer}">
<p style="${l.stackTitle}">
Stack Trace:
</p>
<pre style="${l.stackTrace}">${this.escapeHtml(t.stackTrace)}</pre>
</div>
`:""}
<!-- 새로고침 버튼 (복구 가능할 때만) -->
${t.showReloadButton?`
<div style="${l.buttonContainer}">
<button
onclick="window.location.reload()"
style="${l.button}"
onmouseover="this.style.backgroundColor='#1d4ed8'"
onmouseout="this.style.backgroundColor='#2563eb'"
>
<i class="fa-solid fa-rotate-right" style="margin-right: 0.5rem;"></i>
새로고침
</button>
</div>
`:""}
</div>
</div>
`}static renderFromError(e,t,s,r=!1,o,l,d){let u,f;if(t.userMessageKey.startsWith("$t:"))if(l&&o)try{u=l.translate(t.userMessageKey,o)}catch{u=t.userMessageKey.replace("$t:","")}else u=t.userMessageKey.replace("$t:","");else u=t.userMessageKey;if(d){const g=d;g.details?.apiMessage?f=g.details.apiMessage:g.response?.data?.message&&(f=g.response.data.message)}this.render(e,{title:s,message:u,detailMessage:f,icon:t.icon,showStack:t.showStack,stackTrace:t.stack,showReloadButton:t.recoverable,debug:r})}static escapeHtml(e){if(!e)return"";const t=document.createElement("div");return t.textContent=e,t.innerHTML}}const En=Ht("ErrorPageHandler");class rI{constructor(e){ne(this,"templateId");ne(this,"layoutLoader");ne(this,"locale");ne(this,"debug");ne(this,"renderFunction");ne(this,"dataSourceManager");ne(this,"globalState");ne(this,"errorConfig",null);ne(this,"configLoaded",!1);this.templateId=e.templateId,this.layoutLoader=e.layoutLoader,this.locale=e.locale,this.debug=e.debug,this.renderFunction=e.renderFunction,this.dataSourceManager=e.dataSourceManager,this.globalState=e.globalState||{}}async loadConfig(){if(this.configLoaded)return this.errorConfig;try{const e=await fetch(`/api/templates/${this.templateId}/config.json`);if(!e.ok)return this.debug&&En.warn("Failed to load template config:",e.statusText),this.configLoaded=!0,null;const t=await e.json();if(!t.success||!t.data)return this.debug&&En.warn("Invalid template config response"),this.configLoaded=!0,null;const s=t.data;return!s.error_config||!s.error_config.layouts?(this.debug&&En.warn("No error_config found in template.json"),this.configLoaded=!0,null):(this.errorConfig=s.error_config,this.configLoaded=!0,this.debug&&En.log("Error config loaded:",this.errorConfig),this.errorConfig)}catch(e){return En.error("Failed to load error config:",e),this.configLoaded=!0,null}}async renderError(e,t="app"){try{const s=await this.loadConfig();if(!s)return this.debug&&En.warn("No error config available, cannot render error page"),!1;const r=s.layouts[e]||s.layouts[String(e)];if(!r)return this.debug&&En.warn(`No layout defined for error code: ${e}`),!1;this.debug&&En.log(`Loading error layout: ${r} for code: ${e}`);const o=await this.layoutLoader.loadLayout(this.templateId,r);if(!o)return this.debug&&En.error(`Failed to load error layout: ${r}`),!1;this.debug&&En.log("Error layout loaded:",o);let l={};const d=o.data_sources||[];if(d.length>0){this.debug&&En.log("Fetching data sources:",d.map(y=>y.id));const g=d.filter(y=>y.loading_strategy==="blocking"),h=d.filter(y=>!y.loading_strategy||y.loading_strategy==="progressive"),b=[...g,...h];if(b.length>0)try{l=await this.dataSourceManager.fetchDataSources(b,{},new URLSearchParams),this.debug&&En.log("Data sources fetched:",Object.keys(l))}catch(y){En.error("Failed to fetch data sources:",y)}}const u={};d.length>0&&(this.processInitOptions(d,l,u),this.debug&&En.log("initOptions processed:",{globalKeys:Object.keys(this.globalState),localKeys:Object.keys(u)}));const f={...l,errorCode:e,_global:{...this.globalState},_local:{...u}};return await this.renderFunction({containerId:t,layoutJson:o,dataContext:f,translationContext:{templateId:this.templateId,locale:this.locale}}),this.debug&&En.log(`Error page ${e} rendered successfully`),!0}catch(s){return En.error(`Failed to render error page ${e}:`,s),!1}}processInitOptions(e,t,s){for(const r of e){const o=t[r.id];if(!o)continue;const l=o?.data??o;if(r.initLocal){if(typeof r.initLocal=="string")s[r.initLocal]=l,En.log(`initLocal: ${r.id}.data -> _local.${r.initLocal}`);else if(typeof r.initLocal=="object"&&"key"in r.initLocal){const{key:d,path:u}=r.initLocal;s[d]=u?this.getValueByPath(l,u):l,En.log(`initLocal: ${r.id}.data${u?"."+u:""} -> _local.${d}`)}}if(r.initGlobal){const d=Array.isArray(r.initGlobal)?r.initGlobal:[r.initGlobal];for(const u of d)if(typeof u=="string")this.globalState[u]=l,En.log(`initGlobal: ${r.id}.data -> _global.${u}`);else if(typeof u=="object"&&u!==null&&"key"in u){const{key:f,path:g}=u;this.globalState[f]=g?this.getValueByPath(l,g):l,En.log(`initGlobal: ${r.id}.data${g?"."+g:""} -> _global.${f}`)}}}}getValueByPath(e,t){return t.split(".").reduce((s,r)=>s?.[r],e)}updateGlobalState(e){this.globalState={...this.globalState,...e}}updateLocale(e){this.locale=e,this.debug&&En.log("Locale updated:",e)}isConfigLoaded(){return this.configLoaded}async hasErrorLayout(e){const t=await this.loadConfig();return t?!!(t.layouts[e]||t.layouts[String(e)]):!1}clearConfigCache(){this.errorConfig=null,this.configLoaded=!1,this.debug&&En.log("Config cache cleared")}}const As=Ht("ModuleAssetLoader");class oI{constructor(){ne(this,"loadedAssets",new Map);ne(this,"loadingPromises",new Map)}async loadActiveExtensionAssets(e){if(!e||e.length===0){As.log("No module assets to load");return}const t=[...e].sort((o,l)=>o.priority-l.priority);As.log("Loading module assets:",t.map(o=>o.identifier));const s=t.filter(o=>o.css).map(o=>this.loadCSS(o.identifier,o.css)),r=t.filter(o=>o.js).map(o=>this.loadJS(o.identifier,o.js));await Promise.all([...s,...r]),As.log("All module assets loaded successfully")}async loadCSS(e,t){const s=`module-css-${e}`;if(document.getElementById(s)){As.log(`CSS already loaded: ${e}`);return}return new Promise((r,o)=>{const l=document.createElement("link");l.rel="stylesheet",l.href=t,l.id=s,l.onload=()=>{As.log(`CSS loaded: ${e}`),this.registerLoadedAsset(e,{type:"css",element:l}),r()},l.onerror=()=>{As.warn(`Failed to load CSS: ${e} (${t})`),r()},document.head.appendChild(l)})}async loadJS(e,t){const s=`module-js-${e}`;if(document.getElementById(s)){As.log(`JS already loaded: ${e}`);return}const r=this.loadingPromises.get(e);if(r)return As.log(`JS already loading: ${e}`),r;const o=new Promise((l,d)=>{const u=document.createElement("script");u.src=t,u.id=s,u.async=!1,u.onload=()=>{As.log(`JS loaded: ${e}`),this.registerLoadedAsset(e,{type:"js",element:u}),this.loadingPromises.delete(e),l()},u.onerror=()=>{As.warn(`Failed to load JS: ${e} (${t})`),this.loadingPromises.delete(e),l()},document.head.appendChild(u)});return this.loadingPromises.set(e,o),o}registerLoadedAsset(e,t){const s=this.loadedAssets.get(e)||[];s.push(t),this.loadedAssets.set(e,s)}unloadExtensionAsset(e){const t=this.loadedAssets.get(e);if(!t||t.length===0){As.log(`No assets to unload for: ${e}`);return}t.forEach(s=>{s.element.parentNode&&(s.element.parentNode.removeChild(s.element),As.log(`${s.type.toUpperCase()} unloaded: ${e}`))}),this.loadedAssets.delete(e),As.log(`All assets unloaded for: ${e}`)}unloadAllAssets(){Array.from(this.loadedAssets.keys()).forEach(t=>{this.unloadExtensionAsset(t)}),As.log("All module assets unloaded")}isLoaded(e){return this.loadedAssets.has(e)}getLoadedModules(){return Array.from(this.loadedAssets.keys())}}let Mh=null;function aI(){return Mh||(Mh=new oI),Mh}function iI(){if(typeof window>"u")return[];const n=window.G7Config;if(!n?.moduleAssets)return[];const e=[];for(const[t,s]of Object.entries(n.moduleAssets)){const r=s;e.push({identifier:t,js:r.js,css:r.css,priority:r.priority,external:r.external})}return e}function lI(){if(typeof window>"u")return[];const n=window.G7Config;if(!n?.pluginAssets)return[];const e=[];for(const[t,s]of Object.entries(n.pluginAssets)){const r=s;e.push({identifier:t,js:r.js,css:r.css,priority:r.priority,external:r.external})}return e}const zh=Ht("SystemBannerManager");class Gu{static show(e){this.banners.set(e.id,e),this.render(),zh.log(`Banner shown: ${e.id}`)}static hide(e){this.banners.delete(e)&&(this.render(),zh.log(`Banner hidden: ${e}`))}static hideAll(){this.banners.clear(),this.render(),zh.log("All banners hidden")}static detectLocale(){try{const t=window.G7Core;if(t?.locale?.current)return t.locale.current()}catch{}return(navigator.language||"ko").split("-")[0]}static resolveMessage(e,t){return typeof e=="string"?e:e[t]||e.en||e.ko||Object.values(e)[0]||""}static render(){if(typeof document>"u")return;let e=document.getElementById(this.containerId);if(this.banners.size===0){e&&(e.remove(),this.adjustAppPadding(0));return}e||(e=document.createElement("div"),e.id=this.containerId,e.style.cssText="position:fixed;top:0;left:0;right:0;z-index:99999;",document.body.prepend(e));const t=Array.from(this.banners.values()).sort((r,o)=>(r.order??0)-(o.order??0)),s=this.detectLocale();e.innerHTML=t.map(r=>{const o=this.resolveMessage(r.message,s),l=r.background||"#f59e0b",d=r.color||"white";return`<div data-banner-id="${r.id}" style="background:${l};color:${d};text-align:center;padding:8px 16px;font-size:14px;font-weight:500;">${o}</div>`}).join(""),requestAnimationFrame(()=>{e&&this.adjustAppPadding(e.offsetHeight)})}static adjustAppPadding(e){const t=document.getElementById("app");t&&(t.style.paddingTop=e>0?`${e}px`:"")}}ne(Gu,"banners",new Map),ne(Gu,"containerId","g7-system-banners");const le=Ht("TemplateApp");function Z0(n){const e={};for(const t of n.keys()){if(t in e)continue;const s=n.getAll(t);s.length>1?e[t]=s:s.length===1&&(t.endsWith("[]")?e[t]=s:e[t]=s[0])}return e}const Lr=class Lr{constructor(e){ne(this,"router",null);ne(this,"layoutLoader",null);ne(this,"errorPageHandler",null);ne(this,"config");ne(this,"globalState");ne(this,"globalStateListeners",new Set);ne(this,"currentRouteChangeId",0);ne(this,"currentDataSources",[]);ne(this,"currentRawDataSources",[]);ne(this,"currentRouteParams",{});ne(this,"currentQueryParams",new URLSearchParams);ne(this,"currentFetchedData",{});ne(this,"currentLayoutName","");ne(this,"templateErrorHandling",null);ne(this,"currentWebSocketSubscriptions",[]);ne(this,"extensionCacheVersion",0);ne(this,"currentGlobalHeaders",[]);ne(this,"transitionOverlayEl",null);ne(this,"skeletonOverlayRoot",null);ne(this,"skeletonOverlayContainer",null);ne(this,"_spinnerState",null);ne(this,"modalDataSources",new Map);this.globalState={sidebarOpen:!1},this.loadG7Config(),this.migrateLocaleStorage();const t=this.loadLocaleFromStorage(),s=t||e.locale||"ko";this.config={...e,locale:s},!t&&e.locale&&this.saveLocaleToStorage(e.locale)}loadG7Config(){if(typeof window<"u"&&window.G7Config){const e=window.G7Config;e.settings&&(this.globalState.settings=e.settings,le.log("Loaded settings from G7Config:",Object.keys(e.settings)),e.settings.upload&&(this.globalState.uploadSettings=e.settings.upload)),e.plugins&&(this.globalState.plugins=e.plugins,le.log("Loaded plugin settings from G7Config:",Object.keys(e.plugins))),e.modules&&(this.globalState.modules=e.modules,le.log("Loaded module settings from G7Config:",Object.keys(e.modules))),e.appConfig&&(this.globalState.appConfig=e.appConfig,le.log("Loaded appConfig from G7Config:",Object.keys(e.appConfig)))}}resolveRouteExpressions(e){const t=new ms,s={_global:this.globalState};return e.map(r=>{const o={...r};if(o.path&&o.path.includes("{{")){const l=o.path;o.path=t.resolveBindings(o.path,s),o.path=o.path.replace(/\/\/+/g,"/")||"/",o.path.includes("{{")&&(le.warn("Route expression resolution failed, using fallback:",l),o.path=l.replace(/\{\{[^}]+\}\}/g,"").replace(/\/\/+/g,"/")||"/")}if(o.redirect&&o.redirect.includes("{{")){const l=o.redirect;o.redirect=t.resolveBindings(o.redirect,s),o.redirect=o.redirect.replace(/\/\/+/g,"/")||"/",o.redirect.includes("{{")&&(le.warn("Route redirect expression resolution failed:",l),o.redirect=l.replace(/\{\{[^}]+\}\}/g,"").replace(/\/\/+/g,"/")||"/")}return o})}migrateLocaleStorage(){const e=["locale","g7_template_locale"];for(const t of e)try{const s=localStorage.getItem(t);s&&s!==localStorage.getItem(Lr.LOCALE_STORAGE_KEY)&&(localStorage.setItem(Lr.LOCALE_STORAGE_KEY,s),le.log(`Migrated locale from '${t}' to '${Lr.LOCALE_STORAGE_KEY}'`)),localStorage.removeItem(t)}catch(s){le.warn(`Failed to migrate locale key '${t}':`,s)}}async init(){try{nc.getInstance().setDebug(this.config.debug),le.log("Initializing with config:",this.config);const e=xr.getInstance(),t=rr.getInstance(),s=this.loadCacheVersionFromStorage()||0,[r,o,l,d,u]=await Promise.all([ld({templateId:this.config.templateId,templateType:this.config.templateType,locale:this.config.locale,debug:this.config.debug,cacheVersion:s}),e.loadComponents(this.config.templateId,this.config.templateType),fetch(`/api/templates/${this.config.templateId}/routes.json${s>0?`?v=${s}`:""}`).then(x=>{if(!x.ok)throw new Error(`Failed to load routes: ${x.statusText}`);return x.json()}).then(x=>{if(!x.success)throw new Error("Failed to load routes from API");return x.data}).catch(x=>{throw le.error("Error loading routes:",x),x}),t.preloadAuth(this.config.templateType==="admin"?"admin":"user"),fetch(`/api/templates/${this.config.templateId}/config.json`).then(x=>x.ok?x.json():null).then(x=>!x?.success||!x?.data?null:x.data).catch(x=>(le.warn("Error loading template config:",x),null))]);if(le.log("Template Engine initialized"),le.log("ComponentRegistry loaded"),le.log("Routes data loaded"),le.log("User info preloaded"),le.log("Template config loaded:",u),u?.cache_version!==void 0){const x=this.loadCacheVersionFromStorage();if(this.extensionCacheVersion=u.cache_version,this.saveCacheVersionToStorage(this.extensionCacheVersion),le.log("Extension cache version:",this.extensionCacheVersion),x!==null&&x!==this.extensionCacheVersion){le.log("Cache version changed, reloading routes...");const S=await fetch(`/api/templates/${this.config.templateId}/routes.json?v=${this.extensionCacheVersion}`).then(_=>{if(!_.ok)throw new Error(`Failed to reload routes: ${_.statusText}`);return _.json()}).then(_=>{if(!_.success)throw new Error("Failed to reload routes from API");return _.data});Array.isArray(S.routes)&&(S.routes=this.resolveRouteExpressions(S.routes),Object.assign(l,S),le.log("Routes reloaded with new cache version"));try{const{TranslationEngine:_}=await Promise.resolve().then(()=>Lv),A=_.getInstance();A.setCacheVersion(this.extensionCacheVersion);const C=this.config.locale||"ko",j="en";await A.loadTranslations(this.config.templateId,C,"/api",!0),C!==j&&await A.loadTranslations(this.config.templateId,j,"/api",!0),le.log("Translations reloaded with new cache version")}catch(_){le.error("Failed to reload translations:",_)}}}u?.errorHandling&&(this.templateErrorHandling=u.errorHandling,_r().setTemplateConfig(this.templateErrorHandling),le.log("Template errorHandling registered:",this.templateErrorHandling)),t.on("logout",()=>{le.log("User logged out")}),t.on("authStateChange",x=>{le.log("Auth state changed:",x)}),le.log("AuthManager event handlers registered");const f=qr(),g=this.config.templateType==="admin"?"admin":"user",h=t.getConfig(g);f.setOnUnauthorized(()=>{le.log("Unauthorized - redirecting to login page"),f.removeToken();const x=window.location.pathname+window.location.search,S=t.getLoginRedirectUrl(g,x,"session_expired");window.location.href=S}),le.log("ApiClient onUnauthorized callback registered"),this.layoutLoader=new Ah(e),this.extensionCacheVersion>0&&this.layoutLoader.setCacheVersion(this.extensionCacheVersion),le.log("LayoutLoader initialized:",this.layoutLoader);const b=new Rr({onUnauthorized:()=>{le.warn("Unauthorized request in error page")}});if(this.errorPageHandler=new rI({templateId:this.config.templateId,layoutLoader:this.layoutLoader,locale:this.config.locale,debug:this.config.debug,renderFunction:hl,dataSourceManager:b,globalState:this.globalState}),le.log("ErrorPageHandler initialized with DataSourceManager"),await this.handleServerError()){le.log("Server error handled, skipping normal initialization");return}if(this.router=new QD(this.config.templateId),Array.isArray(l.routes)){const x=this.resolveRouteExpressions(l.routes);this.router.setRoutes(x)}else throw new Error("Invalid routes data format");le.log("Router initialized:",this.router),le.log("Routes set:",this.router.getRoutes());const{getActionDispatcher:y}=await Promise.resolve().then(()=>so),v=y();if(v&&(v.setDefaultContext({navigate:x=>this.router?.navigate(x)}),v.setGlobalStateUpdater((x,S)=>this.setGlobalState(x,S)),le.log("Navigate function and setGlobalState injected to ActionDispatcher")),await this.loadExtensionAssets(),this.reinitializeTemplateHandlers(),this.router.on("routeChange",x=>this.handleRouteChange(x)),this.router.on("routeNotFound",x=>this.handleRouteNotFound(x)),typeof window<"u"&&K0(window.location.pathname)){le.log("Layout editor mode detected — skipping router match"),await hl({containerId:"app",layoutJson:{components:[]},dataContext:{},translationContext:{templateId:this.config.templateId,locale:this.config.locale}}),le.log("Template App initialized in layout editor mode");return}this.router.navigateToCurrentPath(),le.log("Template App initialized successfully")}catch(e){le.error("Initialization failed:",e),this.showInitError(e)}}async loadExtensionAssets(){try{const e=aI(),t=iI();t.length>0&&(le.log("Loading module assets:",t.map(r=>r.identifier)),await e.loadActiveExtensionAssets(t));const s=lI();s.length>0&&(le.log("Loading plugin assets:",s.map(r=>r.identifier)),await e.loadActiveExtensionAssets(s)),(t.length>0||s.length>0)&&le.log("Extension assets loaded successfully")}catch(e){le.warn("Failed to load extension assets:",e)}}async handleRouteChange(e){const t=++this.currentRouteChangeId;window.__g7ForcedLocalFields=void 0,window.__g7ActionContext=void 0,window.__g7PendingLocalState=void 0,window.__g7LastSetLocalSnapshot=void 0,window.__g7SetLocalOverrideKeys=void 0,window.__g7SequenceLocalSync=void 0,window.__g7AutoBindingPaths=new Map;try{if(le.log("Route changed:",e,"requestId:",t),!this.layoutLoader)throw new Error("LayoutLoader is not initialized");if(!e.layout)throw new Error("Route layout is not defined");let s=e.layout;const r=s==="__preview__";r&&e.params?.token&&(s=`__preview__/${e.params.token}`);const o=await this.layoutLoader.loadLayout(this.config.templateId,s);if(t!==this.currentRouteChangeId){le.log("Route change cancelled (newer request exists):",t);return}le.log("Layout loaded:",o);const l=_r();o.errorHandling?(l.setLayoutConfig(o.errorHandling),le.log("Layout errorHandling registered:",o.errorHandling)):l.clearLayoutConfig();const d=o.data_sources||[],u=e.query||{},f=new URLSearchParams;for(const[q,M]of Object.entries(u))if(Array.isArray(M))for(const N of M)f.append(q,N);else f.set(q,M);const g={route:e.params||{},query:u,_global:this.globalState};o.scripts&&Array.isArray(o.scripts)&&await this.loadLayoutScripts(o.scripts,g);const{DataSourceManager:h,getActionDispatcher:b}=await Promise.resolve().then(()=>so),y=new h;if(r){const q=b();q&&q.setPreviewMode(!0),this.setGlobalState({__isPreview:!0}),Gu.show({id:"preview-mode",message:{ko:"⚠ 미리보기 모드 — 페이지 이동이 비활성화됩니다",en:"⚠ Preview Mode — Navigation is disabled"},background:"linear-gradient(90deg, #f59e0b, #d97706)",color:"white"}),le.log("Preview mode activated")}else{const q=b();q?.isPreviewMode()&&(q.setPreviewMode(!1),Gu.hide("preview-mode"))}if(this.currentGlobalHeaders=o.globalHeaders||[],this.currentGlobalHeaders.length>0){y.setGlobalHeaders(this.currentGlobalHeaders);const q=b();q&&q.setGlobalHeaders(this.currentGlobalHeaders),le.log("globalHeaders set:",this.currentGlobalHeaders.map(M=>M.pattern))}if(o.named_actions&&Object.keys(o.named_actions).length>0){const q=b();q&&q.setNamedActions(o.named_actions)}const v=y.filterByCondition(d,g);d.length!==v.length&&le.log("Data sources filtered by condition:",{before:d.map(q=>q.id),after:v.map(q=>q.id)});const x=v.filter(q=>q.loading_strategy==="blocking"),S=v.filter(q=>(q.loading_strategy||"progressive")!=="blocking"&&q.type!=="websocket"),_=Array.isArray(o.transition_overlay?.wait_for)?o.transition_overlay.wait_for:[],A=_.length>0&&v.some(q=>_.includes(q.id)&&q.type!=="websocket"&&(q.loading_strategy||"progressive")!=="background");if((x.length>0||A)&&o.transition_overlay){const q=typeof o.transition_overlay=="boolean"?{enabled:o.transition_overlay,style:"opaque"}:o.transition_overlay;q.enabled&&q.style==="skeleton"&&q.skeleton?.component&&q.target?this.renderSkeletonOverlay(q.target,q.skeleton,o,q.fallback_target):q.enabled&&q.style==="spinner"&&q.target&&this.renderSpinnerOverlay(q.target,q.spinner,q.fallback_target)}let C={},j={},E={},T={};this.currentWebSocketSubscriptions.length>0&&(le.log("Unsubscribing previous WebSocket subscriptions:",this.currentWebSocketSubscriptions),y.unsubscribeWebSockets(this.currentWebSocketSubscriptions),this.currentWebSocketSubscriptions=[]),this.currentDataSources=v,this.currentRawDataSources=d,this.currentRouteParams=e.params||{},this.currentQueryParams=f,le.log(`handleRouteChange #${t} - queryObject:`,u),le.log(`handleRouteChange #${t} - queryParams:`,f.toString()),x.length>0&&(le.log("Fetching blocking data sources:",x.map(M=>M.id)),(await y.fetchDataSourcesWithResults(x,e.params||{},f)).forEach(M=>{if(M.state==="success"&&M.data!==void 0)C[M.id]=M.data;else if(M.state==="error"&&M.error){const N=M.error,V=N.response?.data?.message;j[M.id]={message:V||M.error.message,status:N.response?.status||N.status}}}),this.processInitOptions(x,C,E,T),this.currentFetchedData={...C},le.log("Blocking data loaded:",Object.keys(C)),Object.keys(j).length>0&&le.log("Data source errors:",j),Object.keys(E).length>0&&le.log("Local state init (blocking):",Object.keys(E)),Object.keys(T).length>0&&le.log("Isolated state init (blocking):",Object.keys(T)));const D=S.length>0;if(D&&(Fr.setPending(!0),le.log("Transition started before rendering")),t!==this.currentRouteChangeId){le.log("Route change cancelled after blocking data (newer request exists):",t);return}const{getState:I}=await Promise.resolve().then(()=>so),W=I().currentDataContext||{},z=S.map(q=>q.id),H={};if(D){z.forEach(M=>{W[M]!==void 0?H[M]=W[M]:H[M]=void 0});const q=Object.keys(H).filter(M=>H[M]!==void 0);q.length>0&&le.log("Preserving previous progressive data:",q),le.log("Progressive data sources initialized:",z)}const G=o.defines||{},F={...H,...e.params,...C,route:{...e.params||{},path:e.path},query:u,_global:{...this.globalState},_globalSetState:q=>this.setGlobalState(q),_dataSourceErrors:Object.keys(j).length>0?j:void 0,_localInit:Object.keys(E).length>0?E:void 0,_isolatedInit:Object.keys(T).length>0?T:void 0,_defines:Object.keys(G).length>0?G:void 0};if(o.computed&&Object.keys(o.computed).length>0){const q=this.calculateComputed(o.computed,F);Object.keys(q).length>0&&(F._computed=q,this.globalState._computed=q,le.log("Computed values calculated:",Object.keys(q))),F._computedDefinitions=o.computed}const Z=o.layout_name||e.layout;this.currentLayoutName!==""&&this.currentLayoutName!==Z&&(le.log("_local reset due to layout change:",{from:this.currentLayoutName,to:Z}),this.globalState._local={}),this.currentLayoutName=Z;const U=o.initLocal||o.state;if(U&&Object.keys(U).length>0){this.globalState._local||(this.globalState._local={});for(const[q,M]of Object.entries(U))this.globalState._local[q]===void 0&&(this.globalState._local[q]=JSON.parse(JSON.stringify(M)));F._local={...this.globalState._local},le.log("initLocal applied to _local:",Object.keys(U))}if(o.initGlobal&&Object.keys(o.initGlobal).length>0){for(const[q,M]of Object.entries(o.initGlobal))this.globalState[q]===void 0&&(this.globalState[q]=JSON.parse(JSON.stringify(M)));le.log("initGlobal applied to _global:",Object.keys(o.initGlobal))}if(o.initIsolated&&Object.keys(o.initIsolated).length>0){for(const[q,M]of Object.entries(o.initIsolated))T[q]===void 0&&(T[q]=JSON.parse(JSON.stringify(M)));le.log("initIsolated applied:",Object.keys(o.initIsolated))}F._global={...this.globalState,layoutWarnings:o.warnings||[]};const B=o.initActions||o.init_actions;if(B&&B.length>0){await this.executeInitActions(B,F),le.log("initActions executed before render");const q=this.globalState;if(q._local){if(Object.keys(E).length>0){for(const[M,N]of Object.entries(E))q._local[M]!==void 0?q._local[M]=this.deepMerge(q._local[M],N):q._local[M]=N;le.log("localInit merged into _local after initActions:",Object.keys(E))}F._local=q._local,le.log("_local merged into dataContext:",q._local)}if(F._global={...this.globalState,layoutWarnings:o.warnings||[]},le.log("_global merged into dataContext after initActions"),o.computed&&Object.keys(o.computed).length>0){const M=this.calculateComputed(o.computed,F);Object.keys(M).length>0&&(F._computed=M,this.globalState._computed=M,le.log("Computed values recalculated after init_actions:",Object.keys(M)))}if(Object.keys(this.currentFetchedData).length>0){for(const[M,N]of Object.entries(this.currentFetchedData))F[M]=N;le.log("Fetched data sources merged into dataContext after initActions:",Object.keys(this.currentFetchedData))}}if(o.transition_overlay&&!this.skeletonOverlayContainer&&this.showTransitionOverlay(o.transition_overlay,o),await hl({containerId:"app",layoutJson:o,dataContext:F,translationContext:{templateId:this.config.templateId,locale:this.config.locale}}),le.log("Initial render complete with blocking data"),this.reattachSpinnerOverlay(),S.length>0){if(t!==this.currentRouteChangeId){le.log("Route change cancelled before progressive fetch (newer request exists):",t),Fr.setPending(!1),this.hideTransitionOverlay();return}le.log("Fetching progressive/background data sources:",S.map(N=>N.id));const{updateTemplateData:q,getState:M}=await Promise.resolve().then(()=>so);try{const N=S.map(async V=>{try{const se=(await y.fetchDataSourcesWithResults([V],e.params||{},f,this.globalState))[0];if(!se){le.log(`Data source ${V.id} skipped (no fetch result)`);return}if(t!==this.currentRouteChangeId){le.log(`Data source ${V.id} fetch cancelled (newer request exists)`);return}if(se.state==="success"&&se.data!==void 0){le.log(`Progressive data source loaded: ${V.id}`),this.currentFetchedData[V.id]=se.data;const re={};this.processInitOptions([V],{[V.id]:se.data},re);const pe=M();if(pe.bindingEngine){const me=[V.id];V.initGlobal&&me.push("_global"),V.initLocal&&me.push("_local"),pe.bindingEngine.invalidateCacheByKeys(me)}const je={[V.id]:se.data};Object.keys(re).length>0&&(je._localInit=re,Object.assign(E,re)),V.initGlobal&&(je._global={...this.globalState}),q(je)}else if(se.state==="error"&&se.error){const re=se.error,pe=re.response?.data?.message;j[V.id]={message:pe||se.error.message,status:re.response?.status||re.status},le.log(`Progressive data source error: ${V.id}`,j[V.id]),q({[V.id]:null,_dataSourceErrors:{...j}})}}catch(ee){le.error(`Failed to fetch data source: ${V.id}`,ee)}});if(await Promise.all(N),t!==this.currentRouteChangeId){le.log("Route change cancelled after progressive fetch (newer request exists):",t);return}le.log("All progressive data sources loaded")}finally{Fr.setPending(!1),this.hideTransitionOverlay()}}else this.hideTransitionOverlay();const te=v.filter(q=>q.type==="websocket");if(te.length>0){le.log("Subscribing WebSocket data sources:",te.map(V=>V.id));const{updateTemplateData:q,getState:M}=await Promise.resolve().then(()=>so),N={...this.currentFetchedData,...e.params,route:{...e.params||{},path:e.path},query:u,_global:{...this.globalState}};le.log("WebSocket binding context keys:",Object.keys(N)),this.currentWebSocketSubscriptions=y.subscribeWebSockets(v,(V,ee)=>{le.log(`WebSocket data received for: ${V}`,ee),this.currentFetchedData[V]=ee;const se=v.find(me=>me.id===V),re=M();if(re.bindingEngine){const me=[V];se?.initGlobal&&me.push("_global"),se?.initLocal&&me.push("_local"),re.bindingEngine.invalidateCacheByKeys(me)}q({[V]:ee});const je=v.find(me=>me.type==="websocket"&&(me.target_source||me.id)===V)?.onReceive;Array.isArray(je)&&je.length>0&&window.G7Core?.dispatch&&(async()=>{for(const ce of je)try{const be=this.getActionDispatcher?.();be&&await be.dispatchAction(ce,{navigate:this.getRouter?.()?(Be,fe)=>this.getRouter().navigate(Be,fe):void 0,setState:Be=>this.setGlobalState(Be),state:this.globalState,data:{...this.globalState,$args:[ee],$event:ee},_isDispatchFallbackContext:!0})}catch(be){le.error(`WebSocket onReceive action failed for ${V}:`,be)}})()},N),le.log("WebSocket subscriptions established:",this.currentWebSocketSubscriptions)}le.log("Layout rendered successfully")}catch(s){le.error("Route change handling failed:",s),this.hideTransitionOverlay(),this.showRouteError(s)}}processInitOptions(e,t,s,r){e.some(l=>l.refetchOnMount===!0&&l.initLocal)&&(s._forceLocalInit=Date.now(),le.log("refetchOnMount detected, forcing local state init")),e.forEach(l=>{const d=t[l.id];if(!d)return;const u=d.data??d;if(l.initLocal){if(typeof l.initLocal=="string"){let f=u;if(l.initLocalDefaults&&typeof l.initLocalDefaults=="object"){const h=this.evaluateDefaults(l.initLocalDefaults,t);f={...h,...u},le.log(`initLocalDefaults applied for ${l.initLocal}:`,Object.keys(h))}const g=this.globalState._local?.[l.initLocal];g!==void 0&&typeof g=="object"&&typeof f=="object"?(s[l.initLocal]=this.deepMerge(g,f),le.log(`initLocal (merged): ${l.id}.data -> _local.${l.initLocal}`)):(s[l.initLocal]=f,le.log(`initLocal: ${l.id}.data -> _local.${l.initLocal}`))}else if(typeof l.initLocal=="object"&&l.initLocal.key){const{key:f,path:g}=l.initLocal;let h=g?this.extractValueByPathOrExpression(u,g,l.id):u;if(l.initLocalDefaults&&typeof l.initLocalDefaults=="object"){const y=this.evaluateDefaults(l.initLocalDefaults,t);h={...y,...h},le.log(`initLocalDefaults applied for ${f}:`,Object.keys(y))}const b=this.globalState._local?.[f];b!==void 0&&typeof b=="object"&&typeof h=="object"?(s[f]=this.deepMerge(b,h),le.log(`initLocal (merged): ${l.id}.data${g?"."+g:""} -> _local.${f}`)):(s[f]=h,le.log(`initLocal: ${l.id}.data${g?"."+g:""} -> _local.${f}`))}else if(typeof l.initLocal=="object"){const f=l.initLocal._merge||"deep",g=this.flattenNestedObjectToMappings(l.initLocal);for(const{targetPath:h,sourcePath:b}of g){const y=this.extractValueByPathOrExpression(u,b,l.id);if(h.includes(".")){const v=h.split(".")[0];s[v]===void 0&&this.globalState._local?.[v]!==void 0&&(s[v]=JSON.parse(JSON.stringify(this.globalState._local[v]))),this.setValueAtPath(s,h,y,f),le.log(`initLocal map (${f}): ${l.id} ${b} -> _local.${h}`)}else{const v=this.globalState._local?.[h];f==="replace"?(s[h]=y,le.log(`initLocal map (replace): ${l.id} ${b} -> _local.${h}`)):f==="shallow"?v!==void 0&&typeof v=="object"&&typeof y=="object"?(s[h]={...v,...y},le.log(`initLocal map (shallow): ${l.id} ${b} -> _local.${h}`)):(s[h]=y,le.log(`initLocal map: ${l.id} ${b} -> _local.${h}`)):v!==void 0&&typeof v=="object"&&typeof y=="object"?(s[h]=this.deepMerge(v,y),le.log(`initLocal map (deep): ${l.id} ${b} -> _local.${h}`)):(s[h]=y,le.log(`initLocal map: ${l.id} ${b} -> _local.${h}`))}}}}if(l.initGlobal)if(typeof l.initGlobal=="object"&&!Array.isArray(l.initGlobal)&&!("key"in l.initGlobal))for(const[g,h]of Object.entries(l.initGlobal)){if(typeof h!="string"){le.warn(`initGlobal map value must be string, got ${typeof h} for key ${g}`);continue}const b=this.extractValueByPathOrExpression(u,h,l.id),y=this.globalState[g];y!==void 0&&typeof y=="object"&&typeof b=="object"?(this.globalState[g]=this.deepMerge(y,b),le.log(`initGlobal map (merged): ${l.id} ${h} -> _global.${g}`)):(this.globalState[g]=b,le.log(`initGlobal map: ${l.id} ${h} -> _global.${g}`))}else{const g=Array.isArray(l.initGlobal)?l.initGlobal:[l.initGlobal];for(const h of g)if(typeof h=="string"){const b=this.globalState[h];b!==void 0&&typeof b=="object"&&typeof u=="object"?(this.globalState[h]=this.deepMerge(b,u),le.log(`initGlobal (merged): ${l.id}.data -> _global.${h}`)):(this.globalState[h]=u,le.log(`initGlobal: ${l.id}.data -> _global.${h}`))}else if(typeof h=="object"&&h.key){const{key:b,path:y}=h,v=y?this.extractValueByPathOrExpression(u,y,l.id):u,x=this.globalState[b];x!==void 0&&typeof x=="object"&&typeof v=="object"?(this.globalState[b]=this.deepMerge(x,v),le.log(`initGlobal (merged): ${l.id}.data${y?"."+y:""} -> _global.${b}`)):(this.globalState[b]=v,le.log(`initGlobal: ${l.id}.data${y?"."+y:""} -> _global.${b}`))}}if(r&&l.initIsolated){if(typeof l.initIsolated=="string"){const f=r[l.initIsolated];f!==void 0&&typeof f=="object"&&typeof u=="object"?(r[l.initIsolated]=this.deepMerge(f,u),le.log(`initIsolated (merged): ${l.id}.data -> _isolated.${l.initIsolated}`)):(r[l.initIsolated]=u,le.log(`initIsolated: ${l.id}.data -> _isolated.${l.initIsolated}`))}else if(typeof l.initIsolated=="object"&&l.initIsolated.key){const{key:f,path:g}=l.initIsolated,h=g?this.extractValueByPathOrExpression(u,g,l.id):u,b=r[f];b!==void 0&&typeof b=="object"&&typeof h=="object"?(r[f]=this.deepMerge(b,h),le.log(`initIsolated (merged): ${l.id}.data${g?"."+g:""} -> _isolated.${f}`)):(r[f]=h,le.log(`initIsolated: ${l.id}.data${g?"."+g:""} -> _isolated.${f}`))}else if(typeof l.initIsolated=="object")for(const[f,g]of Object.entries(l.initIsolated)){if(typeof g!="string"){le.warn(`initIsolated map value must be string, got ${typeof g} for key ${f}`);continue}const h=this.extractValueByPathOrExpression(u,g,l.id),b=r[f];b!==void 0&&typeof b=="object"&&typeof h=="object"?(r[f]=this.deepMerge(b,h),le.log(`initIsolated map (merged): ${l.id} ${g} -> _isolated.${f}`)):(r[f]=h,le.log(`initIsolated map: ${l.id} ${g} -> _isolated.${f}`))}}})}evaluateDefaults(e,t){const s={};for(const[r,o]of Object.entries(e))if(typeof o=="string"&&o.startsWith("{{")&&o.endsWith("}}")){const l=o.slice(2,-2).trim();s[r]=this.evaluateExpression(l,t)}else s[r]=o;return s}evaluateExpression(e,t){try{const s=e.split("??").map(r=>r.trim());for(const r of s){if(/^['"].*['"]$/.test(r))return r.slice(1,-1);if(r==="true")return!0;if(r==="false")return!1;if(/^-?\d+(\.\d+)?$/.test(r))return Number(r);const o=this.getNestedValue(t,r);if(o!=null)return o}return}catch(s){le.warn(`Expression evaluation failed: ${e}`,s);return}}getNestedValue(e,t){const s=t.replace(/\?\./g,".");let r=e;const o=s.split(/\.(?![^\[]*\])/).flatMap(l=>{const d=l.match(/^([^\[]*)((?:\[\d+\])*)$/);if(d){const[,u,f]=d,g=[];u&&g.push(u);const h=f.match(/\[\d+\]/g);return h&&g.push(...h),g}return[l]}).filter(l=>l!=="");for(const l of o){if(r==null)return;if(l.startsWith("[")&&l.endsWith("]")){const d=parseInt(l.slice(1,-1),10);r=r[d]}else r=r[l]}return r}extractValueByPathOrExpression(e,t,s){const r=t.match(/^\{\{(.+)\}\}$/);if(r){const o=r[1].trim(),l=new ms,d={data:e,_global:this.globalState,_local:this.globalState._local||{}};try{const u=l.evaluateExpression(o,d);return le.log(`initLocal/initGlobal expression evaluated: ${t} -> `,u),u}catch(u){le.warn(`initLocal/initGlobal expression evaluation failed for ${s}:`,t,u);return}}return this.getNestedValue(e,t)}async loadLayoutScripts(e,t){const s=[];for(const r of e){if((r.if!==void 0||r.conditions!==void 0)&&!Li({if:r.if,conditions:r.conditions},t,this.bindingEngine,`script:${r.id}`)){le.log(`Script skipped (condition not met): ${r.id}`);continue}if(document.getElementById(r.id)){le.log(`Script already loaded: ${r.id}`);continue}const l=new Promise((d,u)=>{const f=document.createElement("script");f.src=r.src,f.id=r.id,f.async=r.async??!0,f.onload=()=>{le.log(`Script loaded successfully: ${r.id}`),d()},f.onerror=()=>{le.warn(`Failed to load script: ${r.id} (${r.src})`),d()},document.head.appendChild(f)});s.push(l)}s.length>0&&(await Promise.all(s),le.log(`All scripts loaded: ${e.filter(r=>!document.getElementById(r.id)||s.length>0).map(r=>r.id).join(", ")}`))}evaluateScriptCondition(e,t){try{if(e.startsWith("{{")&&e.endsWith("}}")){const s=e.slice(2,-2).trim();return new Function("ctx",`
with(ctx) {
try {
return Boolean(${s});
} catch (e) {
return false;
}
}
`)(t)}return!!e}catch(s){return le.warn(`Failed to evaluate script condition: ${e}`,s),!1}}showInitError(e){const t=V0(e);J0.renderFromError("app",t,"초기화 실패",this.config.debug,{templateId:this.config.templateId,locale:this.config.locale},void 0,e)}showTransitionOverlay(e,t){const s=typeof e=="boolean"?{enabled:e,style:"opaque",target:void 0,skeleton:void 0,spinner:void 0}:{enabled:e.enabled,style:e.style||"opaque",target:e.target,skeleton:e.skeleton,spinner:e.spinner,fallback_target:e.fallback_target};if(!s.enabled)return;if(this.hideTransitionOverlay(),s.style==="skeleton"&&s.skeleton?.component&&s.target&&t){this.renderSkeletonOverlay(s.target,s.skeleton,t,s.fallback_target);return}if(s.style==="spinner"&&s.target){this.renderSpinnerOverlay(s.target,s.spinner,s.fallback_target);return}const r=document.documentElement.classList.contains("dark");let o,l="";switch(s.style){case"blur":o=r?"rgba(17,24,39,0.3)":"rgba(255,255,255,0.3)",l="backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);";break;case"fade":o=r?"rgba(17,24,39,0.8)":"rgba(255,255,255,0.8)";break;case"skeleton":o=r?"rgb(17,24,39)":"rgb(249,250,251)";break;default:o=r?"rgb(17,24,39)":"rgb(249,250,251)";break}if(s.target){const d=`#${CSS.escape(s.target)}`,u=document.createElement("style");u.id="g7-transition-overlay",u.textContent=`${d}{position:relative;z-index:0;}${d}::after{content:'';position:absolute;inset:0;background:${o};${l}z-index:2147483647;pointer-events:none;}`,document.head.appendChild(u),this.transitionOverlayEl=u}else{const d=document.createElement("div");d.id="g7-transition-overlay",d.setAttribute("aria-hidden","true"),d.style.position="fixed",d.style.inset="0",d.style.zIndex="9999",d.style.pointerEvents="none",d.style.background=o;for(const u of l.split(";")){const f=u.indexOf(":");f!==-1&&d.style.setProperty(u.slice(0,f).trim(),u.slice(f+1).trim())}document.body.appendChild(d),this.transitionOverlayEl=d}}hideTransitionOverlay(){this.transitionOverlayEl&&(this.transitionOverlayEl.remove(),this.transitionOverlayEl=null),this.hideSkeletonOverlay()}renderSkeletonOverlay(e,t,s,r){const l=xr.getInstance().getComponent(t.component);if(!l){le.log(`Skeleton component "${t.component}" not found in registry, falling back to opaque overlay`),this.showTransitionOverlay({enabled:!0,style:"opaque",target:e});return}let d=document.getElementById(e),u="target";if(!d&&r&&(d=document.getElementById(r),u="fallback"),d||(d=document.getElementById("app"),u="fullpage"),!d){le.log(`Skeleton overlay: no target found (target="#${e}", fallback="${r||"none"}"), falling back to opaque overlay`),this.showTransitionOverlay({enabled:!0,style:"opaque",target:e});return}this.hideSkeletonOverlay();const g=document.documentElement.classList.contains("dark")?"rgb(17,24,39)":"rgb(249,250,251)",h=u==="fullpage"?"app":u==="fallback"?r:e,b=`#${CSS.escape(h)}`,y=document.createElement("style");y.id="g7-skeleton-overlay-style",y.textContent=`${b}{position:relative;z-index:0;}${b}::after{content:'';position:absolute;inset:0;background:${g};z-index:2147483646;pointer-events:none;}`,document.head.appendChild(y),this.transitionOverlayEl=y;const v=document.createElement("div");if(v.id="g7-skeleton-overlay",v.setAttribute("role","status"),v.setAttribute("aria-busy","true"),v.setAttribute("aria-label","Loading..."),u==="fullpage")v.style.cssText=["position:fixed","inset:0","z-index:20","overflow:hidden","pointer-events:none",`background:${g}`].join(";")+";";else{const C=d.getBoundingClientRect(),j=window.scrollX||document.documentElement.scrollLeft,E=window.scrollY||document.documentElement.scrollTop;v.style.cssText=["position:absolute",`top:${C.top+E}px`,`left:${C.left+j}px`,`width:${C.width}px`,`height:${C.height}px`,"z-index:20","overflow:hidden","pointer-events:none",`background:${g}`].join(";")+";"}document.body.appendChild(v),this.skeletonOverlayContainer=v;const x=s.components||[];let S;if(u==="fullpage")S=x;else{const C=u==="fallback"?r:e;S=this.findComponentChildrenById(x,C)}const _=Tg.createRoot(v);this.skeletonOverlayRoot=_,Vr.flushSync(()=>{_.render(qe.createElement(l,{components:S,options:{animation:t.animation||"pulse",iteration_count:t.iteration_count||5}}))});const A=u==="fullpage"?"fullpage (#app)":u==="fallback"?`fallback (#${r})`:`target (#${e})`;le.log(`Skeleton overlay rendered [${A}] with "${t.component}" (${S.length} components)`)}findComponentChildrenById(e,t){const s=r=>{for(const o of r){if(o.id===t)return o.children||[];if(o.children&&Array.isArray(o.children)){const l=s(o.children);if(l!==null)return l}}return null};return s(e)||e}renderSpinnerOverlay(e,t,s){let r=document.getElementById(e),o="target";if(!r&&s&&(r=document.getElementById(s),o="fallback"),r||(r=document.getElementById("app"),o="fullpage"),!r){le.log(`Spinner overlay: no target found (target="#${e}", fallback="${s||"none"}"), falling back to opaque overlay`),this.showTransitionOverlay({enabled:!0,style:"opaque",target:e});return}this.hideSkeletonOverlay();const l=o==="fullpage"?"app":o==="fallback"?s:e,d=`#${CSS.escape(l)}`,u=document.createElement("style");u.id="g7-skeleton-overlay-style",u.textContent=[`${d}{position:relative;}`,"@keyframes g7-spin{to{transform:rotate(360deg)}}"].join(""),document.head.appendChild(u),this.transitionOverlayEl=u;const f=t?.text||window.G7Core?.t?.("nav.loading")||"";this._spinnerState={target:e,fallbackTarget:s,spinnerConfig:t,resolvedText:f},this._mountSpinnerInTarget(r);const g=o==="fullpage"?"fullpage (#app)":o==="fallback"?`fallback (#${s})`:`target (#${e})`,h=t?.component||"default spinner";le.log(`Spinner overlay rendered [${g}] with "${h}"`)}_mountSpinnerInTarget(e){if(!this._spinnerState)return;const{spinnerConfig:t,resolvedText:s}=this._spinnerState;if(this.skeletonOverlayRoot){try{this.skeletonOverlayRoot.unmount()}catch{}this.skeletonOverlayRoot=null}if(this.skeletonOverlayContainer){try{this.skeletonOverlayContainer.remove()}catch{}this.skeletonOverlayContainer=null}const r=document.createElement("div");if(r.id="g7-skeleton-overlay",r.setAttribute("role","status"),r.setAttribute("aria-busy","true"),e.appendChild(r),this.skeletonOverlayContainer=r,t?.component){const l=xr.getInstance().getComponent(t.component);if(l){const d=Tg.createRoot(r);this.skeletonOverlayRoot=d,Vr.flushSync(()=>{d.render(qe.createElement(l,{options:{text:s}}))});return}le.log(`Spinner component "${t.component}" not found in registry, using default spinner`)}r.innerHTML='<div style="position:absolute;inset:0;z-index:2147483647;overflow:hidden;background:var(--g7-overlay-bg, rgb(249,250,251));display:flex;align-items:center;justify-content:center;"><div style="width:32px;height:32px;border:3px solid var(--g7-spinner-color, #9ca3af);border-top-color:transparent;border-radius:50%;animation:g7-spin 0.8s linear infinite;"></div></div>'}reattachSpinnerOverlay(){if(!this._spinnerState)return;const{target:e,fallbackTarget:t}=this._spinnerState;let s=document.getElementById(e);!s&&t&&(s=document.getElementById(t)),s||(s=document.getElementById("app")),s&&(this._mountSpinnerInTarget(s),le.log("Spinner overlay reattached to new DOM target"))}hideSkeletonOverlay(){if(this.skeletonOverlayRoot){try{this.skeletonOverlayRoot.unmount()}catch{}this.skeletonOverlayRoot=null}if(this.skeletonOverlayContainer){try{this.skeletonOverlayContainer.parentNode&&this.skeletonOverlayContainer.remove()}catch{}this.skeletonOverlayContainer=null}const e=document.getElementById("g7-skeleton-overlay-style");e&&e.remove(),this._spinnerState=null}showRouteError(e){if(e instanceof Er&&e.details?.status===401){const s=this.config.templateId||"",r=window.location.pathname,o=s.includes("admin")||r.startsWith("/admin")?"admin":"user",l=r+window.location.search,d=!!qr().getToken()||e.details?.hadToken===!0,u=rr.getInstance().getLoginRedirectUrl(o,l,d?"session_expired":void 0);window.location.href=u;return}const t=V0(e);J0.renderFromError("app",t,"페이지 로딩 실패",this.config.debug,{templateId:this.config.templateId,locale:this.config.locale},void 0,e)}async handleServerError(){const e=window.G7Error;if(!e)return!1;le.warn("Server error detected:",e);try{return this.errorPageHandler&&(e.data&&(this.globalState.errorData=e.data),this.errorPageHandler.updateGlobalState(this.globalState),this.errorPageHandler.updateLocale(this.config.locale),await this.errorPageHandler.renderError(e.code,"app"))?(le.log(`${e.code} error page rendered successfully`),!0):(le.log(`Falling back to ErrorDisplay for ${e.code}`),this.showInitError(new Error(`Service unavailable (${e.code})`)),!0)}catch(t){return le.error(`Failed to render ${e.code} page:`,t),this.showInitError(new Error(`Service unavailable (${e.code})`)),!0}}async handleRouteNotFound(e){le.warn("Route not found:",e);try{if(this.errorPageHandler&&(this.errorPageHandler.updateGlobalState(this.globalState),this.errorPageHandler.updateLocale(this.config.locale),await this.errorPageHandler.renderError(404,"app"))){le.log("404 error page rendered successfully");return}le.log("Falling back to ErrorDisplay for 404"),this.showRouteError(new Error(`Page not found: ${e}`))}catch(t){le.error("Failed to render 404 page:",t),this.showRouteError(new Error(`Page not found: ${e}`))}}getRouter(){return this.router}getConfig(){return this.config}getLayoutLoader(){return this.layoutLoader}async reloadExtensionState(){le.log("reloadExtensionState: start");let e;try{const t=await fetch(`/api/templates/${this.config.templateId}/config.json?_=${Date.now()}`);if(t.ok){const s=await t.json();s?.success&&s?.data?.cache_version!==void 0&&(e=s.data.cache_version)}}catch(t){le.warn("reloadExtensionState: failed to fetch config.json",t)}e!==void 0&&e!==this.extensionCacheVersion&&(le.log(`reloadExtensionState: cache version ${this.extensionCacheVersion} -> ${e}`),this.extensionCacheVersion=e,this.saveCacheVersionToStorage(e));try{this.router&&(await this.router.loadRoutes(this.extensionCacheVersion),le.log("reloadExtensionState: routes reloaded"))}catch(t){le.error("reloadExtensionState: routes reload failed",t)}try{this.layoutLoader&&(this.extensionCacheVersion>0&&this.layoutLoader.setCacheVersion(this.extensionCacheVersion),this.layoutLoader.clear(),le.log("reloadExtensionState: layout cache cleared"))}catch(t){le.error("reloadExtensionState: layout cache clear failed",t)}try{const{TranslationEngine:t}=await Promise.resolve().then(()=>Lv),s=t.getInstance();this.extensionCacheVersion>0&&s.setCacheVersion(this.extensionCacheVersion);const r=this.config.locale||"ko",o="en";await s.loadTranslations(this.config.templateId,r,"/api",!0),r!==o&&await s.loadTranslations(this.config.templateId,o,"/api",!0),le.log("reloadExtensionState: translations reloaded")}catch(t){le.error("reloadExtensionState: translations reload failed",t)}try{const t=await fetch(`/api/locales/active?_=${Date.now()}`);if(t.ok){const r=(await t.json())?.data?.locales;if(Array.isArray(r)&&r.length>0){const o=this.globalState.appConfig??{};this.setGlobalState({appConfig:{...o,supportedLocales:r}}),le.log("reloadExtensionState: supportedLocales refreshed",r)}}}catch(t){le.warn("reloadExtensionState: supportedLocales refresh failed",t)}le.log("reloadExtensionState: done")}getActionDispatcher(){return ko().actionDispatcher}async changeLocale(e){try{if(le.log("Changing locale to:",e),this.config.locale===e){le.log("Locale is already",e);return}this.config.locale=e,this.saveLocaleToStorage(e),await this.saveLocaleToDatabase(e),this.layoutLoader&&(this.layoutLoader.clear(),le.log("Layout cache cleared")),this.errorPageHandler&&(this.errorPageHandler.updateLocale(e),le.log("ErrorPageHandler locale updated")),lp(),await ld({templateId:this.config.templateId,templateType:this.config.templateType,locale:e,debug:this.config.debug,cacheVersion:this.extensionCacheVersion}),le.log("Template Engine re-initialized with new locale");const{getActionDispatcher:t}=await Promise.resolve().then(()=>so),s=t();s&&(s.setDefaultContext({navigate:r=>this.router?.navigate(r)}),s.setGlobalStateUpdater((r,o)=>this.setGlobalState(r,o)),le.log("Navigate function and setGlobalState re-injected to ActionDispatcher")),this.reinitializeModuleHandlers(),le.log("Module handlers re-initialized"),this.reinitializeTemplateHandlers(),le.log("Template handlers re-initialized"),this.reinitializePluginHandlers(),le.log("Plugin handlers re-initialized"),this.router&&this.router.navigateToCurrentPath(),le.log("Locale changed successfully to",e)}catch(t){throw le.error("Failed to change locale:",t),t}}loadLocaleFromStorage(){try{return localStorage.getItem(Lr.LOCALE_STORAGE_KEY)}catch(e){return le.warn("Failed to load locale from storage:",e),null}}saveLocaleToStorage(e){try{localStorage.setItem(Lr.LOCALE_STORAGE_KEY,e)}catch(t){le.warn("Failed to save locale to storage:",t)}}async saveLocaleToDatabase(e){const t=localStorage.getItem("auth_token");if(!t){le.log("No auth token, skipping DB locale save");return}let s,r;if(this.config.localeApi)s=this.config.localeApi.endpoint,r=this.config.localeApi.method;else{const o=this.config.templateType==="admin";s=o?"/api/admin/users/me/language":"/api/user/profile/update-language",r=o?"PATCH":"POST"}try{const o=this.getXsrfToken(),l=await fetch(s,{method:r,headers:{"Content-Type":"application/json",Accept:"application/json",...o&&{"X-XSRF-TOKEN":o},Authorization:`Bearer ${t}`},credentials:"include",body:JSON.stringify({language:e})});l.ok?le.log("Locale saved to DB:",e):le.warn("Failed to save locale to DB (UI will still change):",l.statusText)}catch(o){le.warn("Failed to call locale API (UI will still change):",o)}}getXsrfToken(){if(typeof document>"u")return null;const t=`; ${document.cookie}`.split("; XSRF-TOKEN=");return t.length===2?decodeURIComponent(t.pop()?.split(";").shift()||""):null}loadCacheVersionFromStorage(){try{const e=localStorage.getItem(Lr.CACHE_VERSION_STORAGE_KEY);return e?parseInt(e,10):null}catch(e){return le.warn("Failed to load cache version from storage:",e),null}}saveCacheVersionToStorage(e){try{localStorage.setItem(Lr.CACHE_VERSION_STORAGE_KEY,String(e))}catch(t){le.warn("Failed to save cache version to storage:",t)}}reinitializeModuleHandlers(){if(typeof window>"u")return;const e="__",t=window;Object.keys(t).forEach(s=>{if(s.startsWith(e)&&typeof t[s]?.initModule=="function")try{t[s].initModule(),le.log(`Module handler re-initialized: ${s}`)}catch(r){le.warn(`Failed to re-initialize module handlers for ${s}:`,r)}})}reinitializeTemplateHandlers(){if(typeof window>"u")return;const e=window.G7TemplateHandlers;if(!e){le.warn("Template handlers not found on window.G7TemplateHandlers");return}const t=this.getActionDispatcher();if(!t){le.warn("ActionDispatcher not available for template handler registration");return}Object.entries(e).forEach(([s,r])=>{t.registerHandler(s,r)}),le.log(`${Object.keys(e).length} template handler(s) re-registered:`,Object.keys(e))}reinitializePluginHandlers(){if(typeof window>"u")return;const e="__",t=window;Object.keys(t).forEach(s=>{if(s.startsWith(e)&&typeof t[s]?.initPlugin=="function")try{t[s].initPlugin(),le.log(`Plugin handler re-initialized: ${s}`)}catch(r){le.warn(`Failed to re-initialize plugin handlers for ${s}:`,r)}})}getLocale(){return this.config.locale}getErrorPageHandler(){return this.errorPageHandler}getGlobalState(){return{...this.globalState}}setGlobalState(e,t){const s={...this.globalState};typeof e=="function"?this.globalState=e(this.globalState):this.globalState={...this.globalState,...e},le.log("Global state updated:",this.globalState),window.G7Core?.devTools?.captureStateSnapshot?.({source:"setGlobalState",prev:s,next:this.globalState}),this.globalStateListeners.forEach(o=>{o(this.globalState)}),t?.render!==!1&&Promise.resolve().then(()=>so).then(({updateTemplateData:o,getState:l})=>{const d=l();d.reactRoot&&d.currentLayoutJson&&o({_global:{...this.globalState},_local:this.globalState._local||{}})})}onGlobalStateChange(e){this.globalStateListeners.add(e)}offGlobalStateChange(e){this.globalStateListeners.delete(e)}async refetchDataSource(e,t){let s=this.currentDataSources.find(r=>r.id===e);if(!s)for(const[,r]of this.modalDataSources){const o=r.find(l=>l.id===e);if(o){s=o;break}}if(!s){le.warn(`Data source not found: ${e}`);return}le.log(`Refetching data source: ${e}`,t?.sync?"(sync mode)":"",t?.globalStateOverride?"(with global override)":"",t?.localStateOverride?"(with local override)":""),Fr.setPending(!0);try{const r=new Rr;this.currentGlobalHeaders.length>0&&r.setGlobalHeaders(this.currentGlobalHeaders);const o=ko(),l=o.currentDataContext?._global||{},d=t?.globalStateOverride?{...l,...t.globalStateOverride}:l,u=o.currentDataContext?._local||{},f=t?.localStateOverride?{...u,...t.localStateOverride}:u,h=(await r.fetchDataSourcesWithResults([s],this.currentRouteParams,this.currentQueryParams,d,f,{ignoreAutoFetch:!0}))[0];if(h.state==="success"&&h.data!==void 0){this.currentFetchedData[e]=h.data;const b={};this.processInitOptions([s],{[e]:h.data},b);const y=ko();if(y.bindingEngine){const x=[e];s.initGlobal&&x.push("_global"),s.initLocal&&x.push("_local"),y.bindingEngine.invalidateCacheByKeys(x)}const v={[e]:h.data};return Object.keys(b).length>0&&(v._localInit=b),s.initGlobal&&(v._global={...this.globalState}),ml(v,t?.sync?{sync:!0}:void 0),le.log(`Data source refetched successfully: ${e}`),h.data}else if(h.state==="error"){le.error(`Failed to refetch data source: ${e}`,h.error);return}}catch(r){le.error(`Error refetching data source: ${e}`,r);return}finally{Fr.setPending(!1)}}registerModalDataSources(e,t){this.modalDataSources.set(e,t),le.log(`Modal data sources registered: ${e} (${t.length} sources)`)}unregisterModalDataSources(e){this.modalDataSources.delete(e),le.log(`Modal data sources unregistered: ${e}`)}getDataSource(e){return this.currentFetchedData[e]}setDataSource(e,t,s){if(!e){le.warn("setDataSource: dataSourceId is required");return}const{merge:r=!1,sync:o=!1}=s||{};r&&this.currentFetchedData[e]?this.currentFetchedData[e]={...this.currentFetchedData[e],...t}:this.currentFetchedData[e]=t,Promise.resolve().then(()=>so).then(({updateTemplateData:l})=>{l({[e]:this.currentFetchedData[e]},o?{sync:!0}:void 0)}),le.log(`setDataSource: Updated ${e}`,r?"(merged)":"(replaced)")}updateDataSourceItem(e,t,s,r,o){const{idField:l="id",merge:d=!0,skipRender:u=!1}=o||{},f=this.currentFetchedData[e];if(!f)return le.warn(`updateDataSourceItem: DataSource '${e}' not found`),!1;const g=this.parseItemPath(t);let h=f;for(const v of g)if(h=h?.[v],h===void 0)return le.warn(`updateDataSourceItem: Path '${t}' not found in dataSource`),!1;if(!Array.isArray(h))return le.warn(`updateDataSourceItem: Target at '${t}' is not an array`),!1;const b=h.findIndex(v=>String(v[l])===String(s));if(b===-1)return le.warn(`updateDataSourceItem: Item with ${l}='${s}' not found`),!1;d?h[b]=this.deepMerge(h[b],r):h[b]={...h[b],...r};const y=window.G7Core?.devTools;return y?.isEnabled?.()&&y.trackDataSourceUpdate?.({dataSourceId:e,updateType:"partial",itemPath:t,itemId:s,updates:r,timestamp:Date.now()}),u||Promise.resolve().then(()=>so).then(({updateTemplateData:v})=>{v({[e]:this.currentFetchedData[e]},{sync:!1})}),le.log(`updateDataSourceItem: Updated ${e}.${t}[${l}=${s}]`),!0}parseItemPath(e){const t=[],s=/([^\.\[\]]+)|\[(\d+)\]/g;let r;for(;(r=s.exec(e))!==null;)r[1]!==void 0?t.push(r[1]):r[2]!==void 0&&t.push(parseInt(r[2],10));return t}deepMerge(e,t){if(t==null)return e;if(typeof t!="object"||Array.isArray(t))return t;const s={...e};for(const r of Object.keys(t))typeof t[r]=="object"&&t[r]!==null&&!Array.isArray(t[r])?s[r]=this.deepMerge(s[r]||{},t[r]):s[r]=t[r];return s}setValueAtPath(e,t,s,r="deep"){const o=t.split(".");let l=e;for(let f=0;f<o.length-1;f++){const g=o[f];(l[g]===void 0||l[g]===null||typeof l[g]!="object")&&(l[g]={}),l=l[g]}const d=o[o.length-1],u=l[d];r==="replace"||u===void 0?l[d]=s:r==="shallow"?typeof u=="object"&&typeof s=="object"&&!Array.isArray(s)?l[d]={...u,...s}:l[d]=s:typeof u=="object"&&typeof s=="object"&&!Array.isArray(s)?l[d]=this.deepMerge(u,s):l[d]=s}flattenNestedObjectToMappings(e,t=""){const s=[];for(const[r,o]of Object.entries(e)){if(r==="_merge")continue;const l=t?`${t}.${r}`:r;typeof o=="string"?s.push({targetPath:l,sourcePath:o}):typeof o=="object"&&o!==null&&!Array.isArray(o)&&s.push(...this.flattenNestedObjectToMappings(o,l))}return s}async updateQueryParams(e,t){le.log("updateQueryParams:",e);const s=new URL(e,window.location.origin),r=new URLSearchParams(s.search);window.history.replaceState(null,"",e),le.log("URL updated via replaceState"),this.currentQueryParams=r,le.log("currentQueryParams updated:",Object.fromEntries(r.entries()));const o=new Rr,l=ko().currentDataContext?._global||this.globalState||{},d={route:this.currentRouteParams||{},query:Z0(this.currentQueryParams),_global:l},u=Array.isArray(this.currentRawDataSources)&&this.currentRawDataSources.length>0?o.filterByCondition(this.currentRawDataSources,d):this.currentDataSources;this.currentDataSources=u;const f=u.filter(x=>x.auto_fetch!==!1&&x.type!=="websocket");if(f.length===0){le.log("No auto_fetch data sources to refetch");return}le.log(`Refetching ${f.length} auto_fetch data sources`),Fr.setPending(!0);const g=ko().currentLayoutJson,h=g?.transition_overlay,b=Array.isArray(h?.wait_for)?h.wait_for:[],y=f.some(x=>(x.loading_strategy||"progressive")==="blocking"),v=b.length>0&&f.some(x=>b.includes(x.id)&&x.type!=="websocket"&&(x.loading_strategy||"progressive")!=="background");if((y||v)&&h&&typeof h=="object"){const x=t?.transitionOverlayTarget||h.target;h.enabled&&h.style==="skeleton"&&h.skeleton?.component&&x?this.renderSkeletonOverlay(x,h.skeleton,g,h.fallback_target):h.enabled&&h.style==="spinner"&&x&&this.renderSpinnerOverlay(x,h.spinner,h.fallback_target)}try{const x=new Rr;this.currentGlobalHeaders.length>0&&x.setGlobalHeaders(this.currentGlobalHeaders);const S=ko(),_=S.currentDataContext?._global||{},A=await x.fetchDataSourcesWithResults(f,this.currentRouteParams,this.currentQueryParams,_,void 0,{ignoreAutoFetch:!1}),C={},j={},E=new Map(f.map(T=>[T.id,T]));for(const T of A){const D=E.get(T.id);if(!D){le.warn(`Refetch result id not found in autoFetchDataSources: ${T.id}`);continue}const I=T.id;T.state==="success"&&T.data!==void 0?(this.currentFetchedData[I]=T.data,C[I]=T.data,this.processInitOptions([D],{[I]:T.data},j),le.log(`Data source refetched: ${I}`)):T.state==="error"&&le.error(`Failed to refetch data source: ${I}`,T.error)}if(S.bindingEngine){const T=Object.keys(C);T.push("query"),S.bindingEngine.invalidateCacheByKeys(T)}if(Object.keys(j).length>0&&(C._localInit=j),Object.keys(C).length>0){if(C.query=Z0(this.currentQueryParams),S.currentLayoutJson?.computed&&Object.keys(S.currentLayoutJson.computed).length>0){const T={...S.currentDataContext,...C,query:C.query},D=this.calculateComputed(S.currentLayoutJson.computed,T);Object.keys(D).length>0&&(C._computed=D,this.globalState._computed=D,le.log("Computed values recalculated in updateQueryParams:",Object.keys(D)))}ml(C,{sync:!0}),le.log("Template data updated with new query params")}}catch(x){le.error("Error in updateQueryParams:",x)}finally{Fr.setPending(!1),this.hideTransitionOverlay()}}calculateComputed(e,t){const s={},r=new ms;for(const[o,l]of Object.entries(e))try{let d;if(this.isComputedSwitchDefinition(l))d=r.resolveSwitch(l,t,{skipCache:!0});else if(typeof l=="string")if(l.startsWith("{{")&&l.endsWith("}}")){const u=l.slice(2,-2).trim();d=this.evaluateComputedExpression(u,t)}else d=l;s[o]=d,le.log(`Computed ${o}:`,d)}catch(d){le.warn(`Failed to calculate computed value: ${o}`,d),s[o]=void 0}return s}isComputedSwitchDefinition(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&"$switch"in e&&"$cases"in e}evaluateComputedExpression(e,t){try{return new Function("ctx",`
with(ctx) {
try {
return ${e};
} catch (e) {
return undefined;
}
}
`)(t)}catch(s){le.warn(`Expression evaluation failed: ${e}`,s);return}}async executeInitActions(e,t={}){const{getActionDispatcher:s}=await Promise.resolve().then(()=>so),r=s();if(!r){le.warn("ActionDispatcher not available for init_actions");return}le.log("Executing init_actions:",e.map(d=>d.handler)),le.log("Init actions dataContext:",t),le.log("Init actions dataContext._global:",t._global);const o=e.map(d=>d.handler).filter(d=>d.includes("."));o.length>0&&await this.waitForHandlers(r,o);let l={...t};for(const d of e)try{const u={type:"click",handler:d.handler,target:d.target,params:d.params,resultTo:d.resultTo,onSuccess:d.onSuccess,onError:d.onError,if:d.if,conditions:d.conditions,auth_mode:d.auth_mode,auth_required:d.auth_required},f=r.createHandler(u,l),g=new Event("init");await f(g),le.log(`Init action executed: ${d.handler}`);const h=this.globalState;l={...l,_global:{...h},_local:h._local||l._local||{}},le.log(`Data context refreshed after ${d.handler}:`,{cartKey:l._global?.cartKey})}catch(u){le.error(`Failed to execute init action: ${d.handler}`,u)}}async waitForHandlers(e,t,s=5e3){const r=Date.now(),o=50,l=()=>t.every(d=>e.customHandlers?.has(d));if(l()){le.log("All module handlers already registered");return}return le.log("Waiting for module handlers:",t),new Promise(d=>{const u=()=>{if(l()){le.log("All module handlers now registered"),d();return}if(Date.now()-r>=s){const f=t.filter(g=>!e.customHandlers?.has(g));le.warn("Timeout waiting for handlers:",f),d();return}setTimeout(u,o)};u()})}};ne(Lr,"LOCALE_STORAGE_KEY","g7_locale"),ne(Lr,"CACHE_VERSION_STORAGE_KEY","g7_cache_version");let Rc=Lr;function Ph(n){const e=new Rc(n);return n.websocket&&(Fu.configure(n.websocket),le.log("WebSocket 설정 완료")),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{e.init(),window.__templateApp=e}):(e.init(),window.__templateApp=e),e}typeof window<"u"&&(window.G7Core=window.G7Core||{},window.G7Core.initTemplateApp=Ph,window.G7Core.dataSource={refetch:async(n,e)=>{const t=window.__templateApp;if(!t){le.warn("TemplateApp not initialized (G7Core.dataSource.refetch)");return}return t.refetchDataSource(n,e)},get:n=>{const e=window.__templateApp;if(!e){le.warn("TemplateApp not initialized (G7Core.dataSource.get)");return}return e.getDataSource(n)}});const Yu=[{id:"stale-closure",name:"Stale Closure",category:"state",symptoms:["이전 값이 전송됨","저장 시 오래된 데이터","API 호출 시 첫 값만 전송","클릭할 때마다 같은 값"],detector:n=>{const t=n.actionHistory.slice(-10).filter(s=>s.type==="apiCall");if(t.length<2)return!1;for(let s=1;s<t.length;s++){const r=JSON.stringify(t[s-1].params),o=JSON.stringify(t[s].params);if(r===o&&t[s].params)return!0}return!1},probability:.85,solution:"G7Core.state.get()._global 사용하여 최신 상태 참조",docLink:"troubleshooting-state.md#stale-closure",codeExample:`
// ❌ 문제: 클로저가 이전 상태 캡처
"body": { "email": "{{_global.email}}" }
// ✅ 해결: 최신 상태 참조
"body": { "email": "{{G7Core.state.get()._global.email}}" }
`},{id:"sequence-merge",name:"Sequence setState 병합 충돌",category:"state",symptoms:["sequence 내 setState 일부 누락","여러 setState 중 마지막만 적용","상태 업데이트 순서 문제"],detector:n=>n.actionHistory.filter(t=>t.type==="sequence").some(t=>t.children?.filter(s=>s.type==="setState").length>1),probability:.75,solution:"currentState 추적 패턴 사용 또는 단일 setState로 병합",docLink:"troubleshooting-state.md#사례3",codeExample:`
// ❌ 문제: sequence 내 여러 setState
"actions": [
{ "handler": "setState", "params": { "a": 1 } },
{ "handler": "setState", "params": { "b": 2 } }
]
// ✅ 해결: 단일 setState로 병합
"actions": [
{ "handler": "setState", "params": { "a": 1, "b": 2 } }
]
`},{id:"init-actions-timing",name:"init_actions 타이밍 이슈",category:"timing",symptoms:["init_actions 값이 렌더링에 반영 안됨","초기 상태가 undefined","첫 클릭 시 초기값 손실"],detector:n=>{if(n.stateHistory.length===0)return!1;const e=n.stateHistory[0];return e?.source==="init_actions"&&Object.keys(e.next||{}).length===0},probability:.7,solution:"init_actions 후 _global 상태 병합 확인",docLink:"troubleshooting-state.md#init_actions-관련-이슈"},{id:"datakey-global-init",name:'dataKey="_global.xxx" 초기화 누락',category:"form",symptoms:["Form dataKey가 전역 상태에 바인딩 안됨","Input 값이 _global에 저장 안됨","Form 제출 시 빈 값 전송"],detector:n=>n.form.filter(t=>t.dataKey?.startsWith("_global.")).length===0?!1:!n.stateHistory.some(t=>t.source==="init_actions"),probability:.95,solution:"init_actions에서 _global 상태 초기화 필수",docLink:"troubleshooting-state.md#datakey-자동-바인딩-이슈",codeExample:`
// init_actions에서 초기화 필요
"init_actions": [
{
"handler": "setState",
"params": {
"target": "global",
"loginForm": { "email": "", "password": "" }
}
}
]
`},{id:"cache-iteration",name:"캐시 반복 렌더링 문제",category:"cache",symptoms:["모든 행이 같은 값","iteration에서 첫 항목만 표시","DataGrid 데이터 중복"],detector:n=>(n.cacheStats.hitRate??0)>.9&&n.conditional.iterations.length>0,probability:.9,solution:"skipCache: true 추가",docLink:"troubleshooting-cache.md#사례4",codeExample:`
// ❌ 문제: 캐시된 값이 모든 행에 적용
"cellChildren": [{ "props": { "value": "{{item.name}}" } }]
// ✅ 해결: 렌더러에서 skipCache 옵션 사용
// 또는 ActionDispatcher에서 skipCache: true로 호출
`},{id:"cache-dynamic-query",name:"동적 쿼리 파라미터 캐싱",category:"cache",symptoms:["페이지네이션이 동작 안함","필터 변경해도 같은 결과","정렬이 적용 안됨"],detector:n=>{const e=n.network.requestHistory.slice(-5);if(e.length<2)return!1;const t=e.map(s=>s.url.split("?")[0]);return new Set(t).size<t.length},probability:.85,solution:"데이터소스 params에 skipCache: true 추가",docLink:"troubleshooting-cache.md#사례2"},{id:"orphaned-listener",name:"정리되지 않은 이벤트 리스너",category:"lifecycle",symptoms:["메모리 사용량 증가","이벤트가 여러 번 실행됨","페이지 이동 후에도 이벤트 발생"],detector:n=>n.lifecycle.orphanedListeners.length>0,probability:.8,solution:"useEffect cleanup 또는 removeEventListener 추가",docLink:"troubleshooting-components.md#lifecycle"},{id:"unmount-state-update",name:"언마운트 후 상태 업데이트",category:"lifecycle",symptoms:["Cannot update state on unmounted component","비동기 작업 완료 후 에러","모달 닫힘 후 에러"],detector:n=>n.actionHistory.some(e=>e.status==="error"&&e.error?.message?.includes("unmounted")),probability:.9,solution:"AbortController 또는 isMounted 플래그 사용",docLink:"troubleshooting-state.md#unmount-update"},{id:"excessive-rerenders",name:"과도한 리렌더링",category:"performance",symptoms:["UI가 느림","스크롤 버벅임","입력 지연"],detector:n=>{for(const e of n.performance.renderCounts.values())if(e>50)return!0;return!1},probability:.75,solution:"React.memo, useMemo, useCallback 사용",docLink:"troubleshooting-components.md#performance"},{id:"binding-eval-flood",name:"바인딩 평가 과다",category:"performance",symptoms:["페이지 로드 느림","CPU 사용량 높음"],detector:n=>n.performance.bindingEvalCount>1e3,probability:.85,solution:"불필요한 {{}} 바인딩 제거, 정적 값 사용",docLink:"troubleshooting-cache.md#binding-performance"},{id:"memory-leak",name:"잠재적 메모리 누수",category:"performance",symptoms:["시간이 지남에 따라 느려짐","브라우저 탭 메모리 증가","오래 사용 시 크래시"],detector:n=>n.performance.memoryWarnings.length>0,probability:.7,solution:"클린업 함수 확인, WeakMap 사용",docLink:"troubleshooting-state.md#memory-leak"},{id:"request-timeout",name:"API 요청 타임아웃",category:"network",symptoms:["데이터가 로딩 안됨","무한 로딩 스피너","타임아웃 에러"],detector:n=>n.network.requestHistory.some(e=>e.status==="timeout"||e.duration&&e.duration>3e4),probability:.9,solution:"서버 상태 확인, 타임아웃 설정 조정",docLink:"troubleshooting-backend.md#timeout"},{id:"duplicate-requests",name:"중복 API 요청",category:"network",symptoms:["같은 요청이 여러 번 실행","네트워크 탭에 동일 요청 반복","불필요한 서버 부하"],detector:n=>{const s=n.network.requestHistory.slice(-20).map(r=>`${r.method}:${r.url}`);return s.length!==new Set(s).size},probability:.85,solution:"debounce 추가, 데이터소스 의존성 확인",docLink:"troubleshooting-cache.md#duplicate-request"},{id:"datasource-not-loading",name:"데이터소스 미로딩",category:"network",symptoms:["데이터가 undefined","빈 테이블/목록","API 호출이 안됨"],detector:n=>n.network.pendingDataSources.length>0&&n.network.activeRequests.length===0,probability:.8,solution:"데이터소스 strategy 확인, 의존성 확인",docLink:"troubleshooting-backend.md#datasource"},{id:"permission-denied",name:"레이아웃 권한 거부 (403)",category:"network",symptoms:["403 Forbidden","권한이 없습니다","레이아웃 로드 실패","페이지 접근 불가","빈 화면"],detector:n=>n.network.requestHistory.some(e=>e.statusCode===403),probability:.9,solution:"사용자 권한 확인 또는 레이아웃 permissions 설정 확인",docLink:"frontend/layout-json.md#permissions",codeExample:`
// 레이아웃 JSON의 permissions 필드 확인
{
"permissions": ["core.products.read"] // 필요 권한
}
// 권한 없이 공개로 설정하려면:
{
"permissions": [] // 빈 배열 = 공개 레이아웃
}
`},{id:"auth-required",name:"인증 필요 (401)",category:"network",symptoms:["401 Unauthorized","로그인 필요","토큰 만료","인증되지 않음","Unauthenticated"],detector:n=>n.network.requestHistory.some(e=>e.statusCode===401),probability:.95,solution:"로그인 상태 확인 또는 토큰 갱신 필요",docLink:"frontend/auth-system.md"},{id:"infinite-scroll-state-reset",name:"무한 스크롤 상태 미초기화",category:"state",symptoms:["삭제 후 스크롤 안됨","무한 스크롤이 멈춤","hasMore가 false로 유지","더 이상 데이터 로드 안됨"],detector:n=>{const e=n.currentState;return n.actionHistory.some(s=>s.type==="refetchDataSource")&&e?._global?.infiniteScroll?.hasMore===!1},probability:.85,solution:"refetchDataSource 전에 infiniteScroll 상태 초기화 필요",docLink:"frontend/actions-handlers.md#appendDataSource",codeExample:`
// 삭제 성공 시 상태 초기화 후 refetch
"onSuccess": [
{
"handler": "setState",
"params": {
"target": "global",
"infiniteScroll": {
"currentPage": 1,
"hasMore": true,
"isLoadingMore": false
}
}
},
{ "handler": "refetchDataSource", "params": { "id": "list" } }
]
`},{id:"scroll-event-not-configured",name:"스크롤 이벤트 미설정",category:"lifecycle",symptoms:["스크롤해도 데이터 로드 안됨","무한 스크롤 작동 안함","스크롤 이벤트 안잡힘"],detector:n=>{const e=n.actionHistory.some(s=>s.type==="scroll"),t=n.actionHistory.some(s=>s.type==="appendDataSource");return!e&&!t&&n.actionHistory.length>5},probability:.7,solution:"scroll 이벤트 핸들러 설정 및 컨테이너 overflow 속성 확인",docLink:"frontend/actions.md#scroll-event",codeExample:`
// 무한 스크롤 컨테이너 설정 예시
{
"type": "Div",
"props": {
"className": "overflow-y-auto h-full"
},
"actions": {
"scroll": [
{
"handler": "appendDataSource",
"params": {
"id": "list",
"dataPath": "data",
"sourcePath": "{{_global.infiniteScroll.currentPage}}"
}
}
]
}
}
`},{id:"append-datasource-wrong-path",name:"appendDataSource 경로 오류",category:"state",symptoms:["무한 스크롤 시 데이터 덮어씀","기존 데이터가 사라짐","데이터가 병합 안됨"],detector:n=>{const e=n.actionHistory.filter(t=>t.type==="appendDataSource");return e.length>=2&&e.some(t=>t.status==="error")},probability:.75,solution:"dataPath와 sourcePath 설정 확인, 데이터소스 dataPath가 병합 대상인지 확인",docLink:"frontend/actions-handlers.md#appendDataSource"},{id:"websocket-disconnected",name:"WebSocket 연결 끊김",category:"websocket",symptoms:["실시간 업데이트 안됨","알림이 오지 않음"],detector:n=>n.websocket.connectionState==="disconnected",probability:.9,solution:"네트워크 상태 확인, 재연결 로직 확인",docLink:"troubleshooting-backend.md#websocket"},{id:"if-condition-always-false",name:"if 조건 항상 false",category:"conditional",symptoms:["컴포넌트가 표시 안됨","조건부 영역이 비어있음"],detector:n=>n.conditional.ifConditions.some(e=>e.evaluatedValue===!1&&e.evaluationCount>5),probability:.85,solution:"if 조건식 확인, 상태값 확인",docLink:"troubleshooting-state.md#if-condition"},{id:"iteration-empty",name:"iteration 소스 비어있음",category:"conditional",symptoms:["반복 영역이 비어있음","목록이 표시 안됨"],detector:n=>n.conditional.iterations.some(e=>e.sourceLength===0),probability:.8,solution:"iteration source 표현식 확인, 데이터 로딩 확인",docLink:"troubleshooting-guide.md#iteration"},{id:"iteration-item-var",name:"iteration 변수명 오류",category:"conditional",symptoms:["반복 항목 내 바인딩 빈값","올바른 개수는 표시되나 내용 없음"],detector:n=>n.conditional.iterations.some(e=>e.itemVar==="item"||e.indexVar==="index"),probability:.95,solution:"item_var, index_var 사용 (item, index 아님)",docLink:"troubleshooting-guide.md#iteration-바인딩-문제",codeExample:`
// ❌ 잘못된 속성명
"iteration": {
"source": "{{data}}",
"item": "file", // 잘못됨!
"index": "fileIdx" // 잘못됨!
}
// ✅ 올바른 속성명
"iteration": {
"source": "{{data}}",
"item_var": "file",
"index_var": "fileIdx"
}
`},{id:"form-no-datakey",name:"Form dataKey 미설정",category:"form",symptoms:["Input 값이 저장 안됨","Form 제출 시 빈 값"],detector:n=>n.form.some(e=>!e.dataKey),probability:.9,solution:"Form에 dataKey prop 추가",docLink:"troubleshooting-components.md#form-datakey"},{id:"input-no-name",name:"Input name 미설정",category:"form",symptoms:["자동 바인딩 안됨","Input 값 변경이 상태에 반영 안됨"],detector:n=>n.form.some(e=>e.inputs.some(t=>!t.name)),probability:.95,solution:"Input에 name prop 추가",docLink:"troubleshooting-components.md#input-name"},{id:"i18n-key-missing",name:"번역 키 누락",category:"i18n",symptoms:["$t:key가 그대로 표시됨","번역되지 않은 텍스트"],detector:n=>typeof document<"u"?document.body.innerHTML.includes("$t:"):!1,probability:.95,solution:"번역 파일에 키 추가",docLink:"troubleshooting-components.md#i18n"}];class Q0{constructor(){ne(this,"devTools");this.devTools=jr.getInstance()}analyze(e){const t=this.buildContext(),s=[];for(const r of Yu){const o=e.some(d=>r.symptoms.some(u=>u.toLowerCase().includes(d.toLowerCase())||d.toLowerCase().includes(u.toLowerCase())));let l=!1;try{l=r.detector(t)}catch{}(o||l)&&s.push({rule:r,confidence:this.calculateConfidence(r,e,o,l),evidence:this.collectEvidence(r,t)})}return s.sort((r,o)=>o.confidence-r.confidence)}suggestFix(e){return{title:e.rule.name,description:e.rule.solution,codeExample:e.rule.codeExample,docLink:e.rule.docLink}}getCommonIssues(){const e=this.buildContext(),t=[];for(const s of Yu)try{s.detector(e)&&t.push({rule:s,count:1})}catch{}return t.sort((s,r)=>r.count-s.count).map(s=>({id:s.rule.id,name:s.rule.name,description:s.rule.solution,frequency:s.count}))}getRulesByCategory(e){return Yu.filter(t=>t.category===e)}getAllRules(){return[...Yu]}buildContext(){return{stateHistory:this.devTools.getStateHistory(),actionHistory:this.devTools.getActionHistory(),cacheStats:this.devTools.getCacheStats(),currentState:this.devTools.getState(),lifecycle:this.devTools.getLifecycleInfo(),performance:this.devTools.getPerformanceInfo(),network:this.devTools.getNetworkInfo(),conditional:this.devTools.getConditionalInfo(),form:this.devTools.getFormInfo(),websocket:this.devTools.getWebSocketInfo(),stateAtTime:e=>this.devTools.getStateAtTime(e),layoutHas:(e,t)=>this.checkLayoutHas(e,t)}}calculateConfidence(e,t,s,r){let o=e.probability;if(s){const l=t.filter(d=>e.symptoms.some(u=>u.toLowerCase().includes(d.toLowerCase())||d.toLowerCase().includes(u.toLowerCase()))).length;o+=l*.05}return r&&(o+=.1),Math.min(o,.99)}collectEvidence(e,t){const s=[];switch(e.category){case"state":t.stateHistory.length>0&&s.push(`상태 변경 이력: ${t.stateHistory.length}개`);break;case"cache":s.push(`캐시 히트율: ${((t.cacheStats.hitRate??0)*100).toFixed(1)}%`);break;case"lifecycle":t.lifecycle.orphanedListeners.length>0&&s.push(`정리되지 않은 리스너: ${t.lifecycle.orphanedListeners.length}개`);break;case"performance":s.push(`바인딩 평가 횟수: ${t.performance.bindingEvalCount}`);break;case"network":s.push(`진행 중인 요청: ${t.network.activeRequests.length}개`);break;case"form":s.push(`추적 중인 Form: ${t.form.length}개`);break}return s}checkLayoutHas(e,t){try{const r=window.G7Core?.getCurrentLayout?.();if(!r)return!1;const o=JSON.stringify(r);return o.includes(`"${e}":"${t}`)||o.includes(`"${e}": "${t}`)}catch{return!1}}}const cI=Object.freeze(Object.defineProperty({__proto__:null,DiagnosticEngine:Q0},Symbol.toStringTag,{value:"Module"})),dI={dumpEndpoint:"/_boost/g7-debug/dump-state",logEndpoint:"/_boost/g7-debug/log",timeout:1e4,autoCapture:!1,autoCaptureInterval:3e4};class uI{constructor(e){ne(this,"config");ne(this,"devTools");ne(this,"connected",!1);ne(this,"autoCaptureTimer",null);ne(this,"CHUNK_SIZE",2*1024*1024);ne(this,"BULK_THRESHOLD",4*1024*1024);this.config={...dI,...e},this.devTools=jr.getInstance(),this.config.autoCapture&&this.startAutoCapture()}async dumpState(e=!1){const t=`${Date.now()}_${Math.random().toString(36).substring(2,9)}`,s=Date.now(),r=this.devTools.getPerformanceInfo(),o={renderCounts:Object.fromEntries(r.renderCounts),bindingEvalCount:r.bindingEvalCount,memoryWarnings:r.memoryWarnings},l={state:()=>this.devTools.getState(),actions:()=>this.devTools.getActionHistory(),cache:()=>this.devTools.getCacheStats(),lifecycle:()=>this.devTools.getLifecycleInfo(),network:()=>this.devTools.getNetworkInfo(),expressions:()=>this.devTools.getExpressions(),forms:()=>this.devTools.getForms(),performance:()=>o,conditionals:()=>this.devTools.getConditionalInfo(),dataSources:()=>this.devTools.getDataSources(),handlers:()=>this.devTools.getHandlers(),componentEvents:()=>this.devTools.getComponentEventInfo(),stateRendering:()=>this.devTools.getStateRenderingInfo(),stateHierarchy:()=>this.devTools.getStateHierarchyInfo(),contextFlow:()=>this.devTools.getContextFlowInfo(),styleValidation:()=>this.devTools.getStyleValidationInfo(),authDebug:()=>this.devTools.getAuthDebugInfo(),logs:()=>this.devTools.getLogInfo(),layout:()=>this.devTools.getLayoutDebugInfo(),changeDetection:()=>this.devTools.getChangeDetectionInfo(),sequenceTracking:()=>this.devTools.getSequenceTrackingInfo(),staleClosureTracking:()=>this.devTools.getStaleClosureTrackingInfo(),cacheDecisionTracking:()=>this.devTools.getCacheDecisionTrackingInfo(),dataPathTransformTracking:()=>this.devTools.getDataPathTransformTrackingInfo(),nestedContextTracking:()=>this.devTools.getNestedContextTrackingInfo(),formBindingValidationTracking:()=>this.devTools.getFormBindingValidationTrackingInfo(),computedDependencyTracking:()=>this.devTools.getComputedDependencyTrackingInfo(),modalStateScopeTracking:()=>this.devTools.getModalStateScopeTrackingInfo(),namedActionTracking:()=>this.devTools.getNamedActionTrackingInfo()},d={},u=[];let f=0;for(const[b,y]of Object.entries(l))try{const v=y(),x=this.safeStringify(v,b);x===null?(u.push(`${b}: 직렬화 실패`),d[b]=JSON.stringify({_error:`${b} 섹션 직렬화 실패`})):d[b]=x,f+=d[b].length}catch(v){const x=v instanceof Error?v.message:String(v);u.push(`${b}: ${x}`),d[b]=JSON.stringify({_error:`${b} 섹션 수집 실패: ${x}`}),f+=d[b].length}const g=Object.keys(d).length,h=g-u.length;try{return f<=this.BULK_THRESHOLD?(await this.sendBulkDump(d,s,e),console.log(`[G7DevTools] 상태 덤프 완료 - 일괄 전송 (${(f/1024).toFixed(1)}KB, ${h}/${g} 섹션 성공)`)):(await this.sendChunkedDump(t,d,s,e),console.log(`[G7DevTools] 상태 덤프 완료 - 분할 전송 (${(f/1024/1024).toFixed(2)}MB, ${h}/${g} 섹션 성공)`)),this.connected=!0,u.length>0&&console.warn("[G7DevTools] 일부 섹션 실패:",u.join(", ")),t}catch(b){throw this.connected=!1,console.error("[G7DevTools] 상태 덤프 실패:",b),b}}async sendBulkDump(e,t,s){const r={};for(const[o,l]of Object.entries(e))try{r[o]=JSON.parse(l)}catch{r[o]={_error:"파싱 실패"}}await this.sendRequest(this.config.dumpEndpoint,{bulk:!0,sections:r,timestamp:t,saveHistory:s})}async sendChunkedDump(e,t,s,r){const o=Object.keys(t),l=o.length;for(let d=0;d<o.length;d++){const u=o[d],f=t[u],g=d===o.length-1;await this.sendChunkedSection(e,u,f,g,s,r,l)}}async sendChunkedSection(e,t,s,r,o,l,d){const u=this.splitIntoChunks(s),f=u.length;for(let g=0;g<u.length;g++){const h=g===u.length-1,b=u[g];await this.sendRequest(this.config.dumpEndpoint,{sessionId:e,sectionName:t,chunkData:b,chunkIndex:g,totalChunks:f,isLastChunk:h,isLastSection:r&&h,timestamp:o,saveHistory:l,totalSections:d})}}splitIntoChunks(e){const t=[];for(let s=0;s<e.length;s+=this.CHUNK_SIZE)t.push(e.slice(s,s+this.CHUNK_SIZE));return t.length>0?t:[""]}safeStringify(e,t){const s=new WeakSet;try{return JSON.stringify(e,(o,l)=>{if(typeof l=="object"&&l!==null){if(s.has(l))return"[Circular Reference]";s.add(l)}return typeof l=="function"?"[Function]":typeof l=="symbol"?"[Symbol]":typeof l=="bigint"?l.toString():l})}catch(r){return console.warn(`[G7DevTools] ${t} 직렬화 오류:`,r),null}}async sendLog(e){console.log("[G7:DEBUG]",JSON.stringify(e));try{await this.sendRequest(this.config.logEndpoint,{type:"debug",data:e,timestamp:Date.now()})}catch{}}async sendError(e,t){const s={name:e.name,message:e.message,stack:e.stack,context:t,state:this.devTools.getState(),actions:this.devTools.getActionHistory().slice(-10),timestamp:Date.now()};console.log("[G7:ERROR]",JSON.stringify(s));try{await this.sendRequest(this.config.logEndpoint,{type:"error",data:s,timestamp:Date.now()})}catch{}}async sendProfile(e){console.log("[G7:PROFILE]",JSON.stringify(e));try{await this.sendRequest(this.config.logEndpoint,{type:"profile",data:e,timestamp:Date.now()})}catch{}}isConnected(){return this.connected}async testConnection(){try{const e=await this.sendRequest(this.config.dumpEndpoint,{test:!0,timestamp:Date.now()});return this.connected=e.status==="success",this.connected}catch{return this.connected=!1,!1}}startAutoCapture(){this.autoCaptureTimer&&this.stopAutoCapture(),this.autoCaptureTimer=setInterval(()=>{this.devTools.isEnabled()&&this.dumpState().catch(()=>{})},this.config.autoCaptureInterval),console.log("[G7DevTools] 자동 캡처 시작 (간격:",this.config.autoCaptureInterval,"ms)")}stopAutoCapture(){this.autoCaptureTimer&&(clearInterval(this.autoCaptureTimer),this.autoCaptureTimer=null,console.log("[G7DevTools] 자동 캡처 중지"))}updateConfig(e){this.config={...this.config,...e},("autoCapture"in e||"autoCaptureInterval"in e)&&(this.stopAutoCapture(),this.config.autoCapture&&this.startAutoCapture())}async sendRequest(e,t){const s=new AbortController,r=setTimeout(()=>s.abort(),this.config.timeout);try{const o=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify(t),signal:s.signal});if(clearTimeout(r),!o.ok)throw new Error(`HTTP ${o.status}: ${o.statusText}`);const l=await o.text();if(l.trim().startsWith("<")||l.includes("<br />")||l.includes("<b>")){const d=this.extractErrorFromHtml(l);throw new Error(`서버 오류: ${d}`)}try{return JSON.parse(l)}catch{throw new Error(`잘못된 JSON 응답: ${l.substring(0,100)}...`)}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error("요청 타임아웃"):o}}extractErrorFromHtml(e){const t=[/<b>(Fatal error|Warning|Notice|Parse error)<\/b>:\s*([^<]+)/i,/Exception:\s*([^<\n]+)/i,/Error:\s*([^<\n]+)/i,/(TypeError|ArgumentCountError|ValueError)[^:]*:\s*([^<\n]+)/i];for(const r of t){const o=e.match(r);if(o)return(o[o.length-1]||o[1]).replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&").replace(/&quot;/g,'"').trim().substring(0,200)}return e.replace(/<[^>]+>/g," ").replace(/\s+/g," ").trim().substring(0,200)||"Unknown server error"}destroy(){this.stopAutoCapture()}}let Bh=null;function e_(){return Bh||(Bh=new uI),Bh}const fI=`
#g7-devtools-root {
/* 기본 폰트 설정 */
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
font-size: 14px;
line-height: 1.5;
}
#g7-devtools-root * {
box-sizing: border-box;
}
/* 패널 기본 스타일 */
.g7dt-panel {
position: fixed;
background-color: #111827;
color: #ffffff;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
z-index: 9999;
display: flex;
flex-direction: column;
border-radius: 8px;
overflow: hidden;
}
.g7dt-panel.maximized {
border-radius: 0;
}
/* 리사이즈 핸들 */
.g7dt-resize-handle {
position: absolute;
z-index: 10001;
background: transparent;
transition: background-color 0.15s ease;
}
.g7dt-resize-handle:hover {
background-color: rgba(59, 130, 246, 0.5);
}
.g7dt-resize-corner {
width: 12px;
height: 12px;
}
.g7dt-resize-edge-h {
height: 6px;
}
.g7dt-resize-edge-v {
width: 6px;
}
.g7dt-resize-nw { top: 0; left: 0; cursor: nw-resize; }
.g7dt-resize-ne { top: 0; right: 0; cursor: ne-resize; }
.g7dt-resize-sw { bottom: 0; left: 0; cursor: sw-resize; }
.g7dt-resize-se { bottom: 0; right: 0; cursor: se-resize; }
.g7dt-resize-n { top: 0; left: 12px; right: 12px; cursor: n-resize; }
.g7dt-resize-s { bottom: 0; left: 12px; right: 12px; cursor: s-resize; }
.g7dt-resize-w { left: 0; top: 12px; bottom: 12px; cursor: w-resize; }
.g7dt-resize-e { right: 0; top: 12px; bottom: 12px; cursor: e-resize; }
/* 헤더 */
.g7dt-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 8px 16px;
background-color: #1f2937;
border-bottom: 1px solid #374151;
flex-shrink: 0;
border-top-left-radius: 8px;
border-top-right-radius: 8px;
cursor: grab;
user-select: none;
}
.g7dt-header.dragging {
cursor: grabbing;
}
.g7dt-header-left {
display: flex;
align-items: center;
gap: 12px;
}
.g7dt-header-title {
font-weight: 700;
font-size: 14px;
}
.g7dt-header-badge {
font-size: 11px;
padding: 2px 8px;
border-radius: 4px;
background-color: #374151;
}
.g7dt-header-badge.connected {
background-color: #059669;
}
.g7dt-header-right {
display: flex;
align-items: center;
gap: 8px;
}
.g7dt-btn {
background: none;
border: none;
color: #9ca3af;
cursor: pointer;
padding: 4px 8px;
border-radius: 4px;
transition: all 0.15s ease;
font-size: 14px;
}
.g7dt-btn:hover {
color: #ffffff;
background-color: rgba(255, 255, 255, 0.1);
}
.g7dt-btn-primary {
background-color: #2563eb;
color: #ffffff;
font-size: 12px;
}
.g7dt-btn-primary:hover {
background-color: #1d4ed8;
}
/* 탭 */
.g7dt-tabs {
display: flex;
border-bottom: 1px solid #374151;
overflow-x: auto;
flex-shrink: 0;
background-color: #111827;
}
.g7dt-tabs::-webkit-scrollbar {
height: 4px;
}
.g7dt-tabs::-webkit-scrollbar-track {
background: transparent;
}
.g7dt-tabs::-webkit-scrollbar-thumb {
background: #374151;
border-radius: 2px;
}
.g7dt-tab {
padding: 8px 16px;
font-size: 13px;
white-space: nowrap;
background: none;
border: none;
color: #9ca3af;
cursor: pointer;
transition: all 0.15s ease;
border-bottom: 2px solid transparent;
}
.g7dt-tab:hover {
color: #ffffff;
background-color: #1f2937;
}
.g7dt-tab.active {
color: #ffffff;
background-color: #1f2937;
border-bottom-color: #3b82f6;
}
/* 콘텐츠 영역 */
.g7dt-content {
flex: 1;
overflow: hidden;
padding: 16px;
min-width: 0;
min-height: 0;
background-color: #111827;
display: flex;
flex-direction: column;
}
.g7dt-content::-webkit-scrollbar {
width: 8px;
height: 8px;
}
.g7dt-content::-webkit-scrollbar-track {
background: #1f2937;
}
.g7dt-content::-webkit-scrollbar-thumb {
background: #4b5563;
border-radius: 4px;
}
.g7dt-content::-webkit-scrollbar-thumb:hover {
background: #6b7280;
}
/* 푸터 */
.g7dt-footer {
padding: 8px 16px;
background-color: #1f2937;
font-size: 11px;
color: #6b7280;
display: flex;
justify-content: space-between;
border-top: 1px solid #374151;
flex-shrink: 0;
border-bottom-left-radius: 8px;
border-bottom-right-radius: 8px;
}
/* 플로팅 버튼 */
.g7dt-floating-btn {
position: fixed;
bottom: 16px;
right: 16px;
background-color: #2563eb;
color: #ffffff;
padding: 12px;
border-radius: 50%;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
z-index: 9999;
border: none;
cursor: pointer;
transition: background-color 0.15s ease;
}
.g7dt-floating-btn:hover {
background-color: #1d4ed8;
}
.g7dt-floating-btn svg {
width: 24px;
height: 24px;
}
/* 최소화 상태 */
.g7dt-minimized {
position: fixed;
bottom: 0;
right: 0;
background-color: #111827;
color: #ffffff;
box-shadow: 0 -4px 6px -1px rgba(0, 0, 0, 0.1);
z-index: 9999;
border-top-left-radius: 8px;
}
.g7dt-minimized-content {
display: flex;
align-items: center;
padding: 8px 16px;
gap: 8px;
}
/* 비활성화 알림 */
.g7dt-disabled-notice {
position: fixed;
bottom: 16px;
right: 16px;
background-color: #111827;
color: #ffffff;
padding: 16px;
border-radius: 8px;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
z-index: 9999;
max-width: 320px;
}
/* 유틸리티 */
.g7dt-text-yellow { color: #facc15; }
.g7dt-text-cyan { color: #22d3ee; }
.g7dt-text-pink { color: #f472b6; }
.g7dt-text-orange { color: #fb923c; }
.g7dt-text-blue { color: #60a5fa; }
.g7dt-text-purple { color: #c084fc; }
.g7dt-text-green { color: #4ade80; }
.g7dt-text-red { color: #f87171; }
.g7dt-text-gray { color: #9ca3af; }
.g7dt-text-gray-dark { color: #6b7280; }
.g7dt-text-white { color: #ffffff; }
.g7dt-bg-gray-700 { background-color: #374151; }
.g7dt-bg-gray-800 { background-color: #1f2937; }
.g7dt-bg-green-600 { background-color: #059669; }
.g7dt-bg-red-600 { background-color: #dc2626; }
.g7dt-bg-blue-600 { background-color: #2563eb; }
.g7dt-bg-yellow-600 { background-color: #ca8a04; }
.g7dt-font-bold { font-weight: 700; }
.g7dt-font-mono { font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; }
.g7dt-text-xs { font-size: 11px; }
.g7dt-text-sm { font-size: 13px; }
.g7dt-flex { display: flex; }
.g7dt-flex-col { flex-direction: column; }
.g7dt-items-center { align-items: center; }
.g7dt-justify-between { justify-content: space-between; }
.g7dt-gap-1 { gap: 4px; }
.g7dt-gap-2 { gap: 8px; }
.g7dt-gap-3 { gap: 12px; }
.g7dt-ml-1 { margin-left: 4px; }
.g7dt-ml-2 { margin-left: 8px; }
.g7dt-ml-4 { margin-left: 16px; }
.g7dt-mt-1 { margin-top: 4px; }
.g7dt-mt-2 { margin-top: 8px; }
.g7dt-mb-1 { margin-bottom: 4px; }
.g7dt-mb-2 { margin-bottom: 8px; }
.g7dt-p-1 { padding: 4px; }
.g7dt-p-2 { padding: 8px; }
.g7dt-px-1 { padding-left: 4px; padding-right: 4px; }
.g7dt-px-2 { padding-left: 8px; padding-right: 8px; }
.g7dt-py-1 { padding-top: 4px; padding-bottom: 4px; }
.g7dt-rounded { border-radius: 4px; }
.g7dt-rounded-lg { border-radius: 8px; }
.g7dt-border { border: 1px solid #374151; }
.g7dt-border-l { border-left: 1px solid #374151; }
.g7dt-cursor-pointer { cursor: pointer; }
.g7dt-select-none { user-select: none; }
.g7dt-overflow-auto { overflow: auto; }
.g7dt-overflow-hidden { overflow: hidden; }
.g7dt-whitespace-nowrap { white-space: nowrap; }
.g7dt-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.g7dt-w-4 { width: 16px; }
.g7dt-w-full { width: 100%; }
.g7dt-h-6 { height: 24px; }
.g7dt-w-6 { width: 24px; }
.g7dt-ring-highlight {
box-shadow: 0 0 0 1px rgba(250, 204, 21, 0.5);
background-color: rgba(113, 63, 18, 0.3);
}
/* 입력 필드 */
.g7dt-input {
background-color: #1f2937;
border: 1px solid #374151;
border-radius: 4px;
padding: 6px 12px;
color: #ffffff;
font-size: 13px;
outline: none;
transition: border-color 0.15s ease;
}
.g7dt-input:focus {
border-color: #3b82f6;
}
.g7dt-input::placeholder {
color: #6b7280;
}
/* 트리 노드 호버 */
.g7dt-tree-node {
padding: 2px 4px;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.1s ease;
}
.g7dt-tree-node:hover {
background-color: rgba(55, 65, 81, 0.5);
}
/* 리사이즈 중 하이라이트 */
.g7dt-resizing .g7dt-resize-handle {
background-color: rgba(59, 130, 246, 0.3);
}
/* 액션 아이템 */
.g7dt-action-item {
padding: 8px;
border-radius: 4px;
border: 1px solid #374151;
margin-bottom: 8px;
background-color: #1f2937;
}
.g7dt-action-item:hover {
background-color: #283548;
}
/* 액션 아이템 상태별 배경색 */
.g7dt-action-item.g7dt-status-success {
background-color: rgba(34, 197, 94, 0.15);
border-color: rgba(34, 197, 94, 0.4);
}
.g7dt-action-item.g7dt-status-error {
background-color: rgba(239, 68, 68, 0.15);
border-color: rgba(239, 68, 68, 0.4);
}
.g7dt-action-item.g7dt-status-started {
background-color: rgba(59, 130, 246, 0.15);
border-color: rgba(59, 130, 246, 0.4);
}
.g7dt-action-item.g7dt-status-default {
background-color: #1f2937;
border-color: #374151;
}
/* 액션 상세 영역 (토글 펼침) */
.g7dt-action-details {
margin-top: 8px;
padding: 8px;
background-color: rgba(0, 0, 0, 0.2);
border-radius: 4px;
}
/* 상태 뱃지 */
.g7dt-status-badge {
display: inline-flex;
align-items: center;
padding: 2px 8px;
border-radius: 9999px;
font-size: 11px;
font-weight: 500;
margin-left: 8px;
}
.g7dt-status-success { background-color: rgba(34, 197, 94, 0.3); color: #4ade80; }
.g7dt-status-error { background-color: rgba(239, 68, 68, 0.3); color: #f87171; }
.g7dt-status-warning { background-color: rgba(234, 179, 8, 0.3); color: #facc15; }
.g7dt-status-pending { background-color: rgba(59, 130, 246, 0.3); color: #60a5fa; }
.g7dt-status-info { background-color: rgba(107, 114, 128, 0.3); color: #9ca3af; }
.g7dt-status-started { background-color: rgba(59, 130, 246, 0.3); color: #60a5fa; }
.g7dt-status-default { background-color: rgba(107, 114, 128, 0.3); color: #9ca3af; }
/* 코드 블록 */
.g7dt-code {
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
font-size: 12px;
background-color: #1f2937;
padding: 2px 6px;
border-radius: 4px;
}
/* 선택 불가 */
.g7dt-noselect {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/* 추가 유틸리티 클래스 - flex column으로 변경하여 자식이 늘어나도록 */
.g7dt-space-y-4 {
display: flex;
flex-direction: column;
flex: 1;
min-height: 0;
gap: 16px;
overflow-y: auto;
}
.g7dt-space-y-2 {
display: flex;
flex-direction: column;
gap: 8px;
}
/* 스크롤 리스트 내부용 - flex column 없이 gap만 */
.g7dt-space-y-2-flat {
display: flex;
flex-direction: column;
gap: 8px;
}
.g7dt-space-y-1 {
display: flex;
flex-direction: column;
gap: 4px;
}
.g7dt-text-muted { color: #6b7280; }
.g7dt-text-center { text-align: center; }
.g7dt-text-xxs { font-size: 10px; }
.g7dt-text-lg { font-size: 18px; }
.g7dt-flex-1 { flex: 1; }
.g7dt-flex-shrink-0 { flex-shrink: 0; }
.g7dt-flex-wrap { flex-wrap: wrap; }
.g7dt-items-start { align-items: flex-start; }
.g7dt-justify-center { justify-content: center; }
.g7dt-mb-3 { margin-bottom: 12px; }
.g7dt-mt-3 { margin-top: 12px; }
.g7dt-pt-3 { padding-top: 12px; }
.g7dt-mono { font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; }
.g7dt-uppercase { text-transform: uppercase; }
.g7dt-whitespace-pre-wrap { white-space: pre-wrap; }
.g7dt-w-32 { width: 128px; }
.g7dt-max-h-16 { max-height: 64px; }
.g7dt-max-h-40 { max-height: 160px; }
.g7dt-max-h-60 { max-height: 240px; }
.g7dt-overflow-auto { overflow: auto; }
.g7dt-border-t { border-top: 1px solid #374151; }
/* 그리드 레이아웃 */
.g7dt-grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); }
.g7dt-stats-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.g7dt-stats-grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; }
.g7dt-stats-grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.g7dt-stats-grid-5 { display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px; }
.g7dt-stats-grid-6 { display: grid; grid-template-columns: repeat(6, 1fr); gap: 8px; }
/* 카드 및 리스트 스타일 */
.g7dt-card {
background-color: #1f2937;
padding: 12px;
border-radius: 4px;
border: 1px solid #374151;
}
.g7dt-stat-card {
background-color: #1f2937;
padding: 12px;
border-radius: 4px;
text-align: center;
border: 1px solid #374151;
}
.g7dt-stat-card-sm {
background-color: #1f2937;
padding: 8px;
border-radius: 4px;
text-align: center;
border: 1px solid #374151;
}
.g7dt-stat-value {
font-size: 20px;
font-weight: 700;
}
.g7dt-stat-value-sm {
font-size: 18px;
font-weight: 700;
}
.g7dt-stat-label {
font-size: 11px;
color: #6b7280;
}
/* 스크롤 리스트 - flex로 남은 공간 채움 */
.g7dt-scroll-list {
flex: 1;
min-height: 0;
overflow-y: auto;
}
.g7dt-scroll-list > * + * { margin-top: 4px; }
.g7dt-scroll-list-sm {
flex: 1;
min-height: 0;
overflow-y: auto;
}
.g7dt-scroll-list-sm > * + * { margin-top: 4px; }
.g7dt-scroll-list-lg {
flex: 1;
min-height: 0;
overflow-y: auto;
}
.g7dt-scroll-list-lg > * + * { margin-top: 4px; }
.g7dt-scroll-list-xs {
flex: 1;
min-height: 0;
overflow-y: auto;
}
.g7dt-scroll-list-xs > * + * { margin-top: 4px; }
/* 탭 콘텐츠 래퍼 - flex column으로 자식이 늘어나도록 */
.g7dt-tab-content {
display: flex;
flex-direction: column;
height: 100%;
min-height: 0;
}
/* 섹션 래퍼 - flex로 스크롤 리스트가 늘어나도록 */
.g7dt-section {
display: flex;
flex-direction: column;
flex: 1;
min-height: 0;
}
/* 빈 상태 */
.g7dt-empty-state {
color: #6b7280;
font-size: 13px;
text-align: center;
padding: 16px;
}
/* 버튼 스타일 */
.g7dt-btn-secondary {
background-color: #374151;
color: #ffffff;
font-size: 12px;
padding: 4px 12px;
border: none;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.15s ease;
}
.g7dt-btn-secondary:hover {
background-color: #4b5563;
}
.g7dt-btn-danger {
background-color: #b91c1c;
color: #ffffff;
font-size: 12px;
padding: 4px 12px;
border: none;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.15s ease;
}
.g7dt-btn-danger:hover {
background-color: #dc2626;
}
.g7dt-close-btn {
color: #9ca3af;
font-size: 12px;
background: none;
border: none;
cursor: pointer;
padding: 4px;
}
.g7dt-close-btn:hover {
color: #ffffff;
}
.g7dt-filter-btn {
font-size: 12px;
padding: 4px 12px;
border-radius: 4px;
background-color: #1f2937;
color: #9ca3af;
border: none;
cursor: pointer;
transition: all 0.15s ease;
}
.g7dt-filter-btn:hover {
background-color: #374151;
}
.g7dt-filter-btn-active,
.g7dt-filter-btn-active-yellow {
background-color: #ca8a04;
color: #ffffff;
}
.g7dt-prefix-btn {
font-size: 12px;
padding: 4px 8px;
border-radius: 4px;
background-color: #1f2937;
border: 1px solid #374151;
color: #ffffff;
cursor: pointer;
transition: all 0.15s ease;
}
.g7dt-prefix-btn:hover {
border-color: #4b5563;
}
.g7dt-prefix-btn-active {
background-color: #2563eb;
border-color: #1d4ed8;
color: #ffffff;
}
/* Select 스타일 */
.g7dt-select {
background-color: #1f2937;
border: 1px solid #374151;
border-radius: 4px;
padding: 4px 12px;
color: #ffffff;
font-size: 13px;
cursor: pointer;
}
/* 리스트 아이템 */
.g7dt-list-item {
background-color: #1f2937;
padding: 8px;
border-radius: 4px;
font-size: 12px;
border: 1px solid #374151;
display: flex;
justify-content: space-between;
align-items: center;
}
.g7dt-list-item:hover {
background-color: #374151;
}
/* 렌더 로그 아이템 */
.g7dt-render-log-item {
background-color: #1f2937;
padding: 8px;
border-radius: 4px;
font-size: 12px;
border: 1px solid #374151;
cursor: pointer;
transition: all 0.15s ease;
}
.g7dt-render-log-item:hover {
border-color: #4b5563;
}
.g7dt-render-log-item.g7dt-selected {
border-color: #2563eb;
background-color: rgba(37, 99, 235, 0.2);
}
.g7dt-render-log-item.g7dt-warning {
border-color: rgba(161, 98, 7, 0.5);
}
.g7dt-render-log-item.g7dt-warning:hover {
border-color: #ca8a04;
}
.g7dt-render-comp-item {
background-color: #111827;
padding: 8px;
border-radius: 4px;
display: flex;
justify-content: space-between;
align-items: center;
}
/* 경고 박스 */
.g7dt-warning-box {
background-color: rgba(161, 98, 7, 0.2);
padding: 8px;
border-radius: 4px;
border: 1px solid rgba(161, 98, 7, 0.5);
}
.g7dt-list {
list-style-type: disc;
padding-left: 16px;
}
/* 태그 */
.g7dt-tag {
font-size: 12px;
background-color: #1f2937;
padding: 4px 8px;
border-radius: 4px;
border: 1px solid #374151;
}
.g7dt-role-tag {
background-color: rgba(37, 99, 235, 0.3);
color: #93c5fd;
padding: 2px 8px;
border-radius: 4px;
font-size: 12px;
}
.g7dt-perm-tag {
background-color: rgba(147, 51, 234, 0.3);
color: #d8b4fe;
padding: 2px 8px;
border-radius: 4px;
font-size: 12px;
}
/* Pre 스타일 */
.g7dt-pre {
margin-top: 4px;
padding: 8px;
background-color: #111827;
border-radius: 4px;
overflow: auto;
max-height: 80px;
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
font-size: 12px;
}
.g7dt-pre-stack {
margin-top: 4px;
padding: 8px;
background-color: #111827;
border-radius: 4px;
overflow: auto;
max-height: 128px;
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
font-size: 10px;
}
/* 인증 이벤트 아이템 */
.g7dt-auth-event-item {
background-color: #1f2937;
padding: 8px;
border-radius: 4px;
font-size: 12px;
border: 1px solid #374151;
cursor: pointer;
transition: all 0.15s ease;
}
.g7dt-auth-event-item:hover {
border-color: #4b5563;
}
.g7dt-auth-event-item.g7dt-selected {
border-color: #2563eb;
background-color: rgba(37, 99, 235, 0.2);
}
.g7dt-auth-event-item.g7dt-error {
border-color: rgba(185, 28, 28, 0.5);
}
.g7dt-auth-event-item.g7dt-error:hover {
border-color: #dc2626;
}
/* 헤더 아이템 */
.g7dt-header-item {
background-color: #1f2937;
padding: 8px;
border-radius: 4px;
font-size: 12px;
border: 1px solid #374151;
display: flex;
justify-content: space-between;
}
/* 로그 아이템 */
.g7dt-log-item {
padding: 8px;
border-radius: 4px;
font-size: 12px;
border: 1px solid;
cursor: pointer;
transition: all 0.15s ease;
}
.g7dt-log-item.g7dt-selected {
border-color: #2563eb;
background-color: rgba(37, 99, 235, 0.2);
}
.g7dt-log-error {
background-color: rgba(185, 28, 28, 0.3);
border-color: #b91c1c;
}
.g7dt-log-warn {
background-color: rgba(161, 98, 7, 0.3);
border-color: #a16207;
}
.g7dt-log-info {
background-color: rgba(37, 99, 235, 0.3);
border-color: #2563eb;
}
.g7dt-log-debug {
background-color: #1f2937;
border-color: #4b5563;
}
.g7dt-log-default {
background-color: #1f2937;
border-color: #374151;
}
/* 스타일 이슈 아이템 */
.g7dt-style-issue-item {
background-color: #1f2937;
padding: 8px;
border-radius: 4px;
font-size: 12px;
border: 1px solid;
cursor: pointer;
transition: all 0.15s ease;
}
.g7dt-style-issue-item:hover {
border-color: #4b5563;
}
.g7dt-style-issue-item.g7dt-selected {
border-color: #2563eb;
background-color: rgba(37, 99, 235, 0.2);
}
.g7dt-severity-error { border-color: rgba(185, 28, 28, 0.5); }
.g7dt-severity-warning { border-color: rgba(161, 98, 7, 0.5); }
.g7dt-severity-info { border-color: rgba(37, 99, 235, 0.5); }
/* 뱃지 */
.g7dt-badge-error {
font-size: 11px;
padding: 2px 8px;
border-radius: 4px;
background-color: rgba(185, 28, 28, 0.5);
color: #fca5a5;
}
.g7dt-badge-warning {
font-size: 11px;
padding: 2px 8px;
border-radius: 4px;
background-color: rgba(161, 98, 7, 0.5);
color: #fcd34d;
}
.g7dt-badge-info {
font-size: 11px;
padding: 2px 8px;
border-radius: 4px;
background-color: rgba(37, 99, 235, 0.5);
color: #93c5fd;
}
.g7dt-badge-success {
font-size: 11px;
padding: 2px 8px;
border-radius: 4px;
background-color: rgba(34, 197, 94, 0.5);
color: #86efac;
}
.g7dt-badge-gray {
font-size: 11px;
padding: 2px 8px;
border-radius: 4px;
background-color: rgba(107, 114, 128, 0.5);
color: #d1d5db;
}
.g7dt-badge-blue {
font-size: 11px;
padding: 2px 8px;
border-radius: 4px;
background-color: rgba(59, 130, 246, 0.5);
color: #93c5fd;
}
.g7dt-badge-purple {
font-size: 11px;
padding: 2px 8px;
border-radius: 4px;
background-color: rgba(147, 51, 234, 0.5);
color: #d8b4fe;
}
/* 미니 뱃지 */
.g7dt-mini-badge {
font-size: 10px;
padding: 1px 6px;
border-radius: 4px;
}
/* 데이터소스 그리드 */
.g7dt-ds-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 12px;
}
.g7dt-ds-item {
background-color: #1f2937;
padding: 12px;
border-radius: 8px;
border: 1px solid #374151;
cursor: pointer;
transition: all 0.15s ease;
}
.g7dt-ds-item:hover {
border-color: #4b5563;
background-color: #283548;
}
.g7dt-ds-selected {
border-color: #2563eb;
background-color: rgba(37, 99, 235, 0.15);
}
/* 액션 리스트 - flex 부모에서 늘어남 */
.g7dt-action-list {
flex: 1;
min-height: 0;
overflow-y: auto;
}
.g7dt-action-list > * + * { margin-top: 8px; }
/* 이벤트 리스트 - flex 부모에서 늘어남 */
.g7dt-event-list {
flex: 1;
min-height: 0;
overflow-y: auto;
}
.g7dt-event-list > * + * { margin-top: 4px; }
/* 핸들러 리스트 - flex 부모에서 늘어남 */
.g7dt-handler-list {
flex: 1;
min-height: 0;
overflow-y: auto;
}
.g7dt-handler-list > * + * { margin-top: 4px; }
/* 표현식 리스트 - flex 부모에서 늘어남 */
.g7dt-expr-list {
flex: 1;
min-height: 0;
overflow-y: auto;
}
.g7dt-expr-list > * + * { margin-top: 4px; }
.g7dt-expr-item {
background-color: #1f2937;
padding: 8px;
border-radius: 4px;
font-size: 12px;
border: 1px solid #374151;
cursor: pointer;
transition: all 0.15s ease;
}
.g7dt-expr-item:hover {
border-color: #4b5563;
}
.g7dt-expr-selected {
border-color: #2563eb;
background-color: rgba(37, 99, 235, 0.2);
}
.g7dt-expr-warning {
border-color: rgba(161, 98, 7, 0.5);
}
.g7dt-expr-warning:hover {
border-color: #ca8a04;
}
/* 조건 아이템 */
.g7dt-condition-item {
background-color: #1f2937;
padding: 8px;
border-radius: 4px;
font-size: 12px;
border: 1px solid #374151;
}
.g7dt-condition-true {
border-color: rgba(34, 197, 94, 0.5);
}
.g7dt-condition-false {
border-color: rgba(185, 28, 28, 0.5);
}
/* 키 태그 */
.g7dt-key-tag {
font-size: 11px;
background-color: #374151;
color: #d1d5db;
padding: 2px 6px;
border-radius: 4px;
}
/* 의존성 태그 */
.g7dt-dep-tag {
font-size: 11px;
background-color: rgba(34, 197, 94, 0.2);
color: #86efac;
padding: 2px 6px;
border-radius: 4px;
}
/* 타입 태그 */
.g7dt-type-tag {
font-size: 11px;
padding: 2px 8px;
border-radius: 4px;
background-color: #374151;
}
/* 태그 블루 */
.g7dt-tag-blue {
background-color: rgba(59, 130, 246, 0.3);
color: #93c5fd;
}
/* 경고 태그 */
.g7dt-warning-tag {
font-size: 11px;
background-color: rgba(161, 98, 7, 0.3);
color: #fcd34d;
padding: 2px 6px;
border-radius: 4px;
}
/* 신뢰도 뱃지 */
.g7dt-confidence-badge {
font-size: 11px;
padding: 2px 8px;
border-radius: 4px;
background-color: #374151;
}
/* 증상 버튼 */
.g7dt-symptom-btn {
font-size: 12px;
padding: 6px 12px;
border-radius: 4px;
background-color: #1f2937;
border: 1px solid #374151;
color: #9ca3af;
cursor: pointer;
transition: all 0.15s ease;
}
.g7dt-symptom-btn:hover {
border-color: #4b5563;
color: #ffffff;
}
.g7dt-symptom-active {
background-color: #2563eb;
border-color: #1d4ed8;
color: #ffffff;
}
/* 버튼 추가 스타일 */
.g7dt-btn-close {
color: #9ca3af;
background: none;
border: none;
cursor: pointer;
padding: 4px;
font-size: 14px;
transition: color 0.15s ease;
}
.g7dt-btn-close:hover {
color: #ffffff;
}
.g7dt-btn-danger-sm {
background-color: #b91c1c;
color: #ffffff;
font-size: 11px;
padding: 2px 8px;
border: none;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.15s ease;
}
.g7dt-btn-danger-sm:hover {
background-color: #dc2626;
}
.g7dt-btn-disabled {
opacity: 0.5;
cursor: not-allowed;
}
.g7dt-btn-text {
background: none;
border: none;
color: #60a5fa;
cursor: pointer;
font-size: 12px;
padding: 0;
}
.g7dt-btn-text:hover {
text-decoration: underline;
}
/* 필터 활성화 */
.g7dt-filter-active {
background-color: #2563eb;
color: #ffffff;
}
/* 체크박스 */
.g7dt-checkbox {
width: 16px;
height: 16px;
cursor: pointer;
}
.g7dt-checkbox-label {
font-size: 13px;
cursor: pointer;
display: flex;
align-items: center;
gap: 8px;
}
/* 카드 에러 */
.g7dt-card-error {
background-color: #1f2937;
padding: 12px;
border-radius: 4px;
border: 1px solid rgba(185, 28, 28, 0.5);
}
/* 에러 박스 */
.g7dt-error-box {
background-color: rgba(185, 28, 28, 0.2);
padding: 8px;
border-radius: 4px;
border: 1px solid rgba(185, 28, 28, 0.5);
}
.g7dt-error-inline {
color: #f87171;
font-size: 12px;
}
/* 경고 박스 라이트 */
.g7dt-warning-box-light {
background-color: rgba(161, 98, 7, 0.15);
padding: 8px;
border-radius: 4px;
border: 1px solid rgba(161, 98, 7, 0.3);
}
/* 경고 카드 (빨간 배경) */
.g7dt-warning-card {
background-color: rgba(185, 28, 28, 0.4);
padding: 12px;
border-radius: 4px;
border: 1px solid rgba(185, 28, 28, 0.6);
}
/* 빈 메시지 */
.g7dt-empty-message {
color: #6b7280;
font-size: 13px;
text-align: center;
}
/* 요약 (토글 헤더) - 투명 배경 */
.g7dt-summary {
font-size: 12px;
font-weight: 500;
cursor: pointer;
padding: 4px 0;
color: #9ca3af;
list-style: none;
}
.g7dt-summary::-webkit-details-marker {
display: none;
}
.g7dt-summary::before {
content: '▶ ';
font-size: 10px;
}
details[open] > .g7dt-summary::before {
content: '▼ ';
}
/* 상세 영역 - 배경 없음, 펼쳐진 내용만 스타일 */
.g7dt-details {
margin-top: 4px;
}
/* 펼쳐진 내용에만 배경색 적용 - 스크롤 제거 */
.g7dt-details > .g7dt-pre {
background-color: rgba(0, 0, 0, 0.3);
border-radius: 4px;
max-height: none;
overflow: visible;
}
/* 프로그레스 바 */
.g7dt-progress-bar {
width: 100%;
height: 8px;
background-color: #374151;
border-radius: 4px;
overflow: hidden;
}
.g7dt-progress-fill {
height: 100%;
background-color: #2563eb;
transition: width 0.3s ease;
}
/* 대기 중 요청 */
.g7dt-pending-request {
background-color: rgba(59, 130, 246, 0.2);
border: 1px solid rgba(59, 130, 246, 0.5);
padding: 8px;
border-radius: 4px;
animation: pulse 2s infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.7; }
}
/* 추가 유틸리티 */
.g7dt-space-y-3 > * + * { margin-top: 12px; }
.g7dt-space-y-6 > * + * { margin-top: 24px; }
.g7dt-mr-2 { margin-right: 8px; }
.g7dt-pl-2 { padding-left: 8px; }
.g7dt-py-4 { padding-top: 16px; padding-bottom: 16px; }
.g7dt-py-8 { padding-top: 32px; padding-bottom: 32px; }
.g7dt-col-span-2 { grid-column: span 2; }
.g7dt-min-w-0 { min-width: 0; }
.g7dt-items-end { align-items: flex-end; }
.g7dt-text-lightgray { color: #d1d5db; }
.g7dt-text-darkgray { color: #4b5563; }
.g7dt-truncate-60 {
max-width: 60%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.g7dt-stat-label-xs {
font-size: 10px;
color: #6b7280;
}
.g7dt-stat-value-lg {
font-size: 24px;
font-weight: 700;
}
.g7dt-status-default { background-color: rgba(107, 114, 128, 0.2); color: #9ca3af; }
.g7dt-status-started { background-color: rgba(59, 130, 246, 0.2); color: #60a5fa; }
/* Layout 탭 전용 스타일 */
.g7dt-btn-small {
padding: 4px 8px;
font-size: 11px;
border-radius: 4px;
background-color: #374151;
color: #9ca3af;
border: none;
cursor: pointer;
transition: all 0.15s ease;
}
.g7dt-btn-small:hover {
background-color: #4b5563;
color: #ffffff;
}
.g7dt-section-btn {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 12px;
background-color: #1f2937;
border: 1px solid #374151;
border-radius: 4px;
color: #d1d5db;
cursor: pointer;
font-size: 12px;
transition: all 0.15s ease;
}
.g7dt-section-btn:hover {
background-color: #374151;
border-color: #4b5563;
}
.g7dt-section-btn.g7dt-selected {
background-color: #1e40af;
border-color: #3b82f6;
color: #ffffff;
}
.g7dt-history-item {
padding: 8px;
background-color: #1f2937;
border-radius: 4px;
border: 1px solid #374151;
}
.g7dt-history-item:hover {
border-color: #4b5563;
}
.g7dt-max-h-96 {
max-height: 24rem;
}
.g7dt-overflow-auto {
overflow: auto;
}
.g7dt-list-disc {
list-style-type: disc;
}
.g7dt-cursor-pointer {
cursor: pointer;
}
`,pI=()=>{const n="g7-devtools-styles";if(document.getElementById(n))return;const e=document.createElement("style");e.id=n,e.textContent=fI,document.head.appendChild(e)},t_={state:"상태",actions:"액션",cache:"캐시",diagnose:"진단",performance:"성능",lifecycle:"라이프사이클",network:"네트워크",form:"Form",conditional:"조건부",expression:"표현식",handlers:"핸들러",events:"이벤트",datasources:"데이터소스",renders:"렌더링",styles:"스타일",auth:"인증",logs:"로그",layout:"레이아웃",changedetection:"변경감지",staleclosure:"Stale Closure",nestedcontext:"Context",modalscope:"모달스코프",namedactions:"Named Actions"},gI=700,hI=500,n_=400,s_=300,r_="g7-devtools-panel",Hh=n=>n===null||n===void 0?"g7dt-text-gray":typeof n=="string"?"g7dt-text-yellow":typeof n=="number"?"g7dt-text-cyan":typeof n=="boolean"?"g7dt-text-pink":Array.isArray(n)?"g7dt-text-orange":typeof n=="object"?"g7dt-text-blue":"g7dt-text-white",mI=n=>n===null?"null":n===void 0?"undefined":Array.isArray(n)?`Array(${n.length})`:typeof n=="object"?`Object(${Object.keys(n).length})`:typeof n,yI=n=>n===null?"null":n===void 0?"undefined":typeof n=="string"?n.length>50?`"${n.substring(0,50)}..."`:`"${n}"`:typeof n=="boolean"?n?"true":"false":typeof n=="number"?String(n):"",o_=()=>{try{const n=localStorage.getItem(r_);if(n)return JSON.parse(n)}catch(n){console.warn("[G7DevTools] 설정 로드 실패:",n)}return{}},a_=n=>{try{const t={...o_(),...n};localStorage.setItem(r_,JSON.stringify(t))}catch(e){console.warn("[G7DevTools] 설정 저장 실패:",e)}},Ki=({keyName:n,value:e,path:t,expandedPaths:s,onToggle:r,searchTerm:o,depth:l=0})=>{const d=e!==null&&typeof e=="object",u=s.has(t),f=Array.isArray(e),g=o&&(n.toLowerCase().includes(o.toLowerCase())||typeof e=="string"&&e.toLowerCase().includes(o.toLowerCase())||typeof e=="number"&&String(e).includes(o)),h=y=>{y.stopPropagation(),d&&r(t)},b=d?Object.entries(e):[];return a.jsxs("div",{style:{marginLeft:l>0?"16px":"0"},children:[a.jsxs("div",{className:`g7dt-tree-node g7dt-flex g7dt-items-center g7dt-gap-1 ${g?"g7dt-ring-highlight":""}`,onClick:h,children:[d?a.jsx("span",{className:"g7dt-text-gray g7dt-w-4 g7dt-text-xs g7dt-select-none",style:{textAlign:"center"},children:u?"▼":"▶"}):a.jsx("span",{className:"g7dt-w-4"}),a.jsx("span",{className:"g7dt-text-purple g7dt-text-xs",children:n}),a.jsx("span",{className:"g7dt-text-gray-dark g7dt-text-xs",children:":"}),d?a.jsxs("span",{className:`g7dt-text-xs ${Hh(e)}`,children:[f?"[":"{",!u&&a.jsx("span",{className:"g7dt-text-gray",style:{margin:"0 4px"},children:mI(e)}),!u&&(f?"]":"}")]}):a.jsx("span",{className:`g7dt-text-xs ${Hh(e)}`,children:yI(e)}),!d&&a.jsxs("span",{className:"g7dt-text-gray-dark g7dt-text-xs g7dt-ml-1",children:["(",typeof e,")"]})]}),d&&u&&a.jsxs("div",{className:"g7dt-border-l",style:{marginLeft:"8px"},children:[b.map(([y,v])=>a.jsx(Ki,{keyName:f?`[${y}]`:y,value:v,path:`${t}.${y}`,expandedPaths:s,onToggle:r,searchTerm:o,depth:l+1},`${t}.${y}`)),a.jsx("div",{className:"g7dt-ml-4 g7dt-text-xs",children:a.jsx("span",{className:Hh(e),children:f?"]":"}"})})]})]})},bI=({state:n,devTools:e})=>{const[t,s]=w.useState(new Set(["_global","_local","_computed","_isolated","$parent"])),[r,o]=w.useState(""),[l,d]=w.useState(!1),[u,f]=w.useState(!1),[g,h]=w.useState(null),b=w.useCallback(()=>{e&&h(e.getComputedDependencyTrackingInfo())},[e]);w.useEffect(()=>{if(u&&e){b();const T=setInterval(b,2e3);return()=>clearInterval(T)}},[u,e,b]);const y=T=>{switch(T){case"state-change":return"📊";case"prop-change":return"📥";case"dependency-change":return"🔗";case"manual":return"👆";case"initial":return"🚀";default:return"❓"}},v=w.useCallback(T=>{s(D=>{const I=new Set(D);return I.has(T)?I.delete(T):I.add(T),I})},[]),x=w.useCallback((T,D)=>{const I=[D];if(T!==null&&typeof T=="object")for(const[W,z]of Object.entries(T))I.push(...x(z,`${D}.${W}`));return I},[]),S=w.useCallback(()=>{if(l)s(new Set(["_global","_local","_computed","_isolated","$parent"]));else{const T=new Set;x(n._global,"_global").forEach(D=>T.add(D)),x(n._local,"_local").forEach(D=>T.add(D)),x(n._computed,"_computed").forEach(D=>T.add(D)),x(n._isolated,"_isolated").forEach(D=>T.add(D)),n.$parent&&x(n.$parent,"$parent").forEach(D=>T.add(D)),s(T)}d(!l)},[l,n,x]),_=Object.keys(n._global||{}).length,A=Object.keys(n._local||{}).length,C=Object.keys(n._computed||{}).length,j=Object.keys(n._isolated||{}).length,E=Object.keys(n.$parent||{}).length;return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{className:"g7dt-flex g7dt-gap-2 g7dt-items-center g7dt-flex-shrink-0",children:[a.jsx("input",{type:"text",placeholder:"키 또는 값 검색...",value:r,onChange:T=>o(T.target.value),className:"g7dt-input g7dt-flex-1"}),a.jsx("button",{onClick:S,className:"g7dt-btn g7dt-bg-gray-700",children:l?"모두 접기":"모두 펼치기"})]}),a.jsxs("div",{className:"g7dt-flex g7dt-gap-3 g7dt-text-xs g7dt-text-gray g7dt-flex-wrap g7dt-flex-shrink-0",children:[a.jsxs("span",{children:[a.jsx("span",{className:"g7dt-text-yellow",children:"●"})," string"]}),a.jsxs("span",{children:[a.jsx("span",{className:"g7dt-text-cyan",children:"●"})," number"]}),a.jsxs("span",{children:[a.jsx("span",{className:"g7dt-text-pink",children:"●"})," boolean"]}),a.jsxs("span",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"●"})," null"]}),a.jsxs("span",{children:[a.jsx("span",{className:"g7dt-text-orange",children:"●"})," array"]}),a.jsxs("span",{children:[a.jsx("span",{className:"g7dt-text-blue",children:"●"})," object"]})]}),a.jsxs("div",{className:"g7dt-bg-gray-800 g7dt-rounded g7dt-p-2 g7dt-overflow-auto g7dt-border",style:{flex:1,minHeight:0},children:[a.jsxs("div",{className:"g7dt-mb-2",children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2 g7dt-text-sm g7dt-font-bold g7dt-text-green g7dt-mb-1 g7dt-cursor-pointer",onClick:()=>v("_global"),children:[a.jsx("span",{children:t.has("_global")?"▼":"▶"}),a.jsx("span",{children:"_global"}),a.jsxs("span",{className:"g7dt-text-gray g7dt-text-xs",style:{fontWeight:"normal"},children:["(",_,"개 키)"]})]}),t.has("_global")&&a.jsx("div",{className:"g7dt-ml-2 g7dt-border-l",children:Object.entries(n._global||{}).map(([T,D])=>a.jsx(Ki,{keyName:T,value:D,path:`_global.${T}`,expandedPaths:t,onToggle:v,searchTerm:r},`_global.${T}`))})]}),a.jsxs("div",{className:"g7dt-mb-2",children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2 g7dt-text-sm g7dt-font-bold g7dt-text-blue g7dt-mb-1 g7dt-cursor-pointer",onClick:()=>v("_local"),children:[a.jsx("span",{children:t.has("_local")?"▼":"▶"}),a.jsx("span",{children:"_local"}),a.jsxs("span",{className:"g7dt-text-gray g7dt-text-xs",style:{fontWeight:"normal"},children:["(",A,"개 키)"]})]}),t.has("_local")&&a.jsx("div",{className:"g7dt-ml-2 g7dt-border-l",children:Object.entries(n._local||{}).map(([T,D])=>a.jsx(Ki,{keyName:T,value:D,path:`_local.${T}`,expandedPaths:t,onToggle:v,searchTerm:r},`_local.${T}`))})]}),a.jsxs("div",{className:"g7dt-mb-2",children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2 g7dt-text-sm g7dt-font-bold g7dt-text-purple g7dt-mb-1 g7dt-cursor-pointer",onClick:()=>v("_computed"),children:[a.jsx("span",{children:t.has("_computed")?"▼":"▶"}),a.jsx("span",{children:"_computed"}),a.jsxs("span",{className:"g7dt-text-gray g7dt-text-xs",style:{fontWeight:"normal"},children:["(",C,"개 키)"]})]}),t.has("_computed")&&a.jsx("div",{className:"g7dt-ml-2 g7dt-border-l",children:Object.entries(n._computed||{}).map(([T,D])=>a.jsx(Ki,{keyName:T,value:D,path:`_computed.${T}`,expandedPaths:t,onToggle:v,searchTerm:r},`_computed.${T}`))})]}),j>0&&a.jsxs("div",{children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2 g7dt-text-sm g7dt-font-bold g7dt-text-orange g7dt-mb-1 g7dt-cursor-pointer",onClick:()=>v("_isolated"),children:[a.jsx("span",{children:t.has("_isolated")?"▼":"▶"}),a.jsx("span",{children:"_isolated"}),a.jsxs("span",{className:"g7dt-text-gray g7dt-text-xs",style:{fontWeight:"normal"},children:["(",j,"개 스코프)"]})]}),t.has("_isolated")&&a.jsx("div",{className:"g7dt-ml-2 g7dt-border-l",children:Object.entries(n._isolated||{}).map(([T,D])=>a.jsx(Ki,{keyName:T,value:D,path:`_isolated.${T}`,expandedPaths:t,onToggle:v,searchTerm:r},`_isolated.${T}`))})]}),E>0&&a.jsxs("div",{children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2 g7dt-text-sm g7dt-font-bold g7dt-text-cyan g7dt-mb-1 g7dt-cursor-pointer",onClick:()=>v("$parent"),children:[a.jsx("span",{children:t.has("$parent")?"▼":"▶"}),a.jsx("span",{children:"$parent"}),a.jsxs("span",{className:"g7dt-text-gray g7dt-text-xs",style:{fontWeight:"normal"},children:["(",E,"개 키)"]})]}),t.has("$parent")&&a.jsx("div",{className:"g7dt-ml-2 g7dt-border-l",children:Object.entries(n.$parent||{}).map(([T,D])=>a.jsx(Ki,{keyName:T,value:D,path:`$parent.${T}`,expandedPaths:t,onToggle:v,searchTerm:r},`$parent.${T}`))})]})]}),e&&a.jsx("div",{className:"g7dt-flex g7dt-justify-end g7dt-mt-2",children:a.jsx("button",{onClick:()=>f(!u),className:`g7dt-tab-button ${u?"g7dt-tab-active":""}`,children:"🧮 Computed 추적"})}),u&&g&&a.jsxs("div",{className:"g7dt-card g7dt-mt-2",children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:["Computed 의존성 추적 (",g.properties.length,"개)"]}),a.jsxs("div",{className:"g7dt-stats-grid g7dt-mb-3",children:[a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-purple",children:g.stats.totalComputed}),a.jsx("div",{className:"g7dt-stat-label",children:"Computed"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-blue",children:g.stats.totalRecalculations}),a.jsx("div",{className:"g7dt-stat-label",children:"재계산"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-yellow",children:g.stats.unnecessaryRecalculations}),a.jsx("div",{className:"g7dt-stat-label",children:"불필요"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsxs("div",{className:"g7dt-stat-value g7dt-text-green",children:[g.stats.avgComputationTime.toFixed(1),"ms"]}),a.jsx("div",{className:"g7dt-stat-label",children:"평균시간"})]})]}),g.stats.cycleDetectionCount>0&&a.jsxs("div",{className:"g7dt-text-xs g7dt-text-red g7dt-mb-3 g7dt-p-2 g7dt-bg-red-900 g7dt-rounded",children:["⚠️ 순환 의존성 감지: ",g.stats.cycleDetectionCount,"건"]}),g.stats.topRecalculated.length>0&&a.jsxs("div",{className:"g7dt-mb-3",children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mb-2",children:"자주 재계산되는 속성"}),a.jsx("div",{className:"g7dt-space-y-1",children:g.stats.topRecalculated.slice(0,3).map((T,D)=>a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-text-xs",children:[a.jsx("span",{className:"g7dt-text-purple g7dt-font-mono",children:T.name}),a.jsxs("span",{className:"g7dt-text-muted",children:[T.count,"회"]})]},D))})]}),g.recalcLogs.length===0?a.jsx("div",{className:"g7dt-empty-state",children:"재계산 로그가 없습니다"}):a.jsx("div",{className:"g7dt-space-y-2 g7dt-max-h-40 g7dt-overflow-y-auto",children:g.recalcLogs.slice().reverse().slice(0,20).map(T=>a.jsxs("div",{className:`g7dt-list-item ${T.valueChanged?"":"g7dt-border-yellow"}`,children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{children:y(T.trigger)}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-purple g7dt-font-mono",children:T.computedName}),!T.valueChanged&&a.jsx("span",{className:"g7dt-badge g7dt-text-xs g7dt-text-yellow",children:"값 변경 없음"}),a.jsxs("span",{className:"g7dt-text-xs g7dt-text-muted g7dt-ml-auto",children:[T.computationTime.toFixed(1),"ms"]})]}),T.triggeredBy&&a.jsxs("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mt-1",children:["트리거: ",a.jsx("span",{className:"g7dt-text-blue",children:T.triggeredBy.path})]})]},T.id))})]})]})},xI=({actions:n,devTools:e})=>{const[t,s]=w.useState(""),[r,o]=w.useState("actions"),[l,d]=w.useState(null),[u,f]=w.useState(null),g=w.useCallback(()=>{e&&d(e.getSequenceTrackingInfo())},[e]);w.useEffect(()=>{if(r==="sequences"&&e){g();const x=setInterval(g,2e3);return()=>clearInterval(x)}},[r,e,g]);const h=t?n.filter(x=>x.type.toLowerCase().includes(t.toLowerCase())||x.status===t):n,b=x=>{switch(x){case"success":return"g7dt-status-success";case"error":return"g7dt-status-error";case"started":return"g7dt-status-started";default:return"g7dt-status-default"}},y=x=>{switch(x){case"success":return"g7dt-badge-success";case"error":return"g7dt-badge-error";default:return"g7dt-badge-warning"}},v=u&&l?l.executions.find(x=>x.id===u):null;return a.jsxs("div",{className:"g7dt-space-y-4",children:[e&&a.jsx("div",{className:"g7dt-card",children:a.jsxs("div",{className:"g7dt-flex g7dt-gap-2",children:[a.jsxs("button",{className:`g7dt-tab-button ${r==="actions"?"g7dt-tab-active":""}`,onClick:()=>o("actions"),children:["📋 액션 (",n.length,")"]}),a.jsxs("button",{className:`g7dt-tab-button ${r==="sequences"?"g7dt-tab-active":""}`,onClick:()=>o("sequences"),children:["🔗 Sequence (",l?.executions.length||0,")"]})]})}),r==="actions"&&a.jsxs("div",{className:"g7dt-flex g7dt-gap-2 g7dt-flex-shrink-0",children:[a.jsx("input",{type:"text",placeholder:"액션 타입 또는 상태로 필터...",value:t,onChange:x=>s(x.target.value),className:"g7dt-input g7dt-flex-1"}),a.jsx("button",{onClick:()=>s(""),className:"g7dt-btn-text",children:"초기화"})]}),r==="sequences"&&l&&a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"Sequence 통계"}),a.jsxs("div",{className:"g7dt-stats-grid-3",children:[a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-2xl g7dt-font-bold g7dt-text-blue",children:l.stats.totalSequences}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"총 실행"})]}),a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-2xl g7dt-font-bold g7dt-text-green",children:l.stats.successCount}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"성공"})]}),a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-2xl g7dt-font-bold g7dt-text-red",children:l.stats.errorCount}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"실패"})]})]})]}),a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"Sequence 실행 목록"}),l.executions.length===0?a.jsx("div",{className:"g7dt-empty-state",children:"실행된 Sequence가 없습니다"}):a.jsx("div",{className:"g7dt-space-y-2 g7dt-max-h-40 g7dt-overflow-y-auto",children:l.executions.slice().reverse().map(x=>a.jsx("div",{className:`g7dt-list-item g7dt-cursor-pointer ${u===x.id?"g7dt-selected":""} ${x.status==="error"?"g7dt-border-red":""}`,onClick:()=>f(u===x.id?null:x.id),children:a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{children:x.status==="completed"?"✅":x.status==="error"?"❌":"⏳"}),a.jsxs("span",{className:"g7dt-text-xs g7dt-text-white",children:[x.actions.length,"개 액션"]}),a.jsxs("span",{className:"g7dt-text-xs g7dt-text-muted g7dt-ml-auto",children:[x.totalDuration.toFixed(0),"ms"]})]})},x.id))})]}),v&&a.jsxs("div",{className:"g7dt-card g7dt-border-blue",children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:["🔗 Sequence 상세 (",v.actions.length,"개 액션)"]}),a.jsx("div",{className:"g7dt-space-y-2 g7dt-max-h-60 g7dt-overflow-y-auto",children:v.actions.map((x,S)=>a.jsxs("div",{className:`g7dt-list-item ${x.status==="error"?"g7dt-border-red":""}`,children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsxs("span",{className:"g7dt-text-xs g7dt-text-muted",children:["#",x.index+1]}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-white g7dt-font-mono",children:x.handler}),a.jsx("span",{className:`g7dt-text-xs ${x.status==="success"?"g7dt-text-green":"g7dt-text-red"}`,children:x.status==="success"?"✓":"✕"}),a.jsxs("span",{className:"g7dt-text-xs g7dt-text-muted g7dt-ml-auto",children:[x.duration.toFixed(0),"ms"]})]}),x.stateChanges&&x.stateChanges.length>0&&a.jsxs("div",{className:"g7dt-mt-1",children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"상태 변경:"}),x.stateChanges.slice(0,3).map((_,A)=>a.jsx("div",{className:"g7dt-text-xs g7dt-text-yellow g7dt-ml-2",children:_.path},A)),x.stateChanges.length>3&&a.jsxs("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-ml-2",children:["...외 ",x.stateChanges.length-3,"개"]})]})]},S))})]})]}),r==="actions"&&a.jsx("div",{className:"g7dt-section",children:a.jsx("div",{className:"g7dt-scroll-list g7dt-space-y-2-flat g7dt-action-list",children:h.length===0?a.jsx("div",{className:"g7dt-empty-message",children:"액션 이력이 없습니다"}):h.slice(-30).reverse().map((x,S)=>a.jsxs("div",{className:`g7dt-action-item ${b(x.status)}`,children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-start",children:[a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-font-mono g7dt-font-bold",children:x.type}),a.jsx("span",{className:`g7dt-status-badge ${y(x.status)}`,children:x.status})]}),a.jsx("span",{className:"g7dt-text-gray",children:x.duration?`${x.duration.toFixed(2)}ms`:"-"})]}),x.error&&a.jsx("div",{className:"g7dt-error-box",children:x.error.message}),x.params&&Object.keys(x.params).length>0&&a.jsxs("details",{className:"g7dt-details",children:[a.jsx("summary",{className:"g7dt-summary",children:"파라미터"}),a.jsx("pre",{className:"g7dt-pre",children:JSON.stringify(x.params,null,2)})]})]},`${x.id}-${S}`))})})]})},vI=({stats:n,devTools:e})=>{const[t,s]=w.useState(null),[r,o]=w.useState(!1),l=w.useCallback(()=>{s(e.getCacheDecisionTrackingInfo())},[e]);w.useEffect(()=>{if(r){l();const f=setInterval(l,2e3);return()=>clearInterval(f)}},[r,l]);const d=()=>{e.resetCacheStats(),console.log("[G7DevTools] 캐시 통계 초기화")},u=f=>{switch(f){case"use_cache":return"✅";case"skip_cache":return"⏭️";case"invalidate":return"🗑️";default:return"❓"}};return a.jsxs("div",{className:"g7dt-space-y-6",children:[a.jsxs("div",{className:"g7dt-stats-grid",children:[a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-green",children:n.hits}),a.jsx("div",{className:"g7dt-stat-label",children:"Cache Hits"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-red",children:n.misses}),a.jsx("div",{className:"g7dt-stat-label",children:"Cache Misses"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-blue",children:n.entries}),a.jsx("div",{className:"g7dt-stat-label",children:"Entries"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsxs("div",{className:"g7dt-stat-value g7dt-text-purple",children:[(n.hitRate*100).toFixed(1),"%"]}),a.jsx("div",{className:"g7dt-stat-label",children:"Hit Rate"})]})]}),a.jsxs("div",{className:"g7dt-space-y-2",children:[a.jsx("div",{className:"g7dt-text-sm g7dt-text-gray",children:"캐시 히트율"}),a.jsx("div",{className:"g7dt-progress-bar",children:a.jsx("div",{className:"g7dt-progress-fill",style:{width:`${n.hitRate*100}%`}})})]}),a.jsxs("div",{className:"g7dt-flex g7dt-gap-2",children:[a.jsx("button",{onClick:d,className:"g7dt-btn-danger",children:"캐시 통계 초기화"}),a.jsx("button",{onClick:()=>o(!r),className:`g7dt-tab-button ${r?"g7dt-tab-active":""}`,children:"📋 Decision Log"})]}),r&&t&&a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:["캐시 결정 로그 (",t.decisions.length,"개)"]}),t.decisions.length===0?a.jsx("div",{className:"g7dt-empty-state",children:"캐시 결정 기록이 없습니다"}):a.jsx("div",{className:"g7dt-space-y-2 g7dt-max-h-60 g7dt-overflow-y-auto",children:t.decisions.slice().reverse().slice(0,50).map(f=>a.jsxs("div",{className:`g7dt-list-item ${f.decision==="skip_cache"?"g7dt-border-yellow":f.decision==="invalidate"?"g7dt-border-red":""}`,children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{children:u(f.decision)}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-white g7dt-font-mono g7dt-truncate",style:{maxWidth:"200px"},children:f.expression}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-muted g7dt-ml-auto",children:f.decision})]}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mt-1",children:f.reason}),f.context&&a.jsxs("div",{className:"g7dt-flex g7dt-gap-2 g7dt-mt-1",children:[f.context.isInIteration&&a.jsx("span",{className:"g7dt-badge g7dt-text-xs",children:"🔄 iteration"}),f.context.isInAction&&a.jsx("span",{className:"g7dt-badge g7dt-text-xs",children:"⚡ action"})]})]},f.id))})]})]})},wI=()=>{const[n,e]=w.useState([]),[t,s]=w.useState([]),[r,o]=w.useState(""),l=["이전 값이 전송됨","모든 행이 같은 값","상태가 업데이트 안됨","API 호출이 안됨","초기값이 없음","무한 로딩","Form 값이 저장 안됨","iteration 데이터 중복"],d=g=>{e(h=>h.includes(g)?h.filter(b=>b!==g):[...h,g])},u=()=>{r&&!n.includes(r)&&(e(g=>[...g,r]),o(""))},f=async()=>{const{DiagnosticEngine:g}=await Promise.resolve().then(()=>cI),b=new g().analyze(n);s(b)};return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-2",children:"증상 선택"}),a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-2",children:l.map(g=>a.jsx("button",{onClick:()=>d(g),className:n.includes(g)?"g7dt-symptom-btn g7dt-symptom-active":"g7dt-symptom-btn",children:g},g))})]}),a.jsxs("div",{className:"g7dt-flex g7dt-gap-2",children:[a.jsx("input",{type:"text",placeholder:"직접 증상 입력...",value:r,onChange:g=>o(g.target.value),onKeyDown:g=>g.key==="Enter"&&u(),className:"g7dt-input g7dt-flex-1"}),a.jsx("button",{onClick:u,className:"g7dt-btn-secondary",children:"추가"})]}),a.jsxs("button",{onClick:f,disabled:n.length===0,className:n.length===0?"g7dt-btn-primary g7dt-btn-disabled g7dt-w-full":"g7dt-btn-primary g7dt-w-full",children:["진단 실행 (",n.length,"개 증상)"]}),t.length>0&&a.jsxs("div",{className:"g7dt-space-y-3",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold",children:"진단 결과"}),t.slice(0,5).map((g,h)=>a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center g7dt-mb-2",children:[a.jsx("span",{className:"g7dt-font-bold g7dt-text-yellow",children:g.rule.name}),a.jsxs("span",{className:"g7dt-confidence-badge",children:[(g.confidence*100).toFixed(0),"%"]})]}),a.jsx("div",{className:"g7dt-text-sm g7dt-text-lightgray",children:g.rule.solution}),g.rule.codeExample&&a.jsx("pre",{className:"g7dt-pre g7dt-mt-2",children:g.rule.codeExample})]},h))]})]})},_I=({devTools:n})=>{const e=n.getPerformanceInfo();return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{className:"g7dt-stats-grid-2",children:[a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-blue",children:e.bindingEvalCount}),a.jsx("div",{className:"g7dt-stat-label",children:"바인딩 평가 횟수"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-purple",children:e.renderCounts.size}),a.jsx("div",{className:"g7dt-stat-label",children:"렌더링된 컴포넌트"})]})]}),e.memoryWarnings.length>0&&a.jsxs("div",{children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-text-red g7dt-mb-2",children:"메모리 경고"}),a.jsx("div",{className:"g7dt-space-y-2",children:e.memoryWarnings.map((t,s)=>a.jsxs("div",{className:"g7dt-warning-card",children:[a.jsx("div",{className:"g7dt-font-bold",children:t.type}),a.jsx("div",{className:"g7dt-text-lightgray",children:t.message}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-gray g7dt-mt-1",children:t.suggestion})]},s))})]}),e.renderCounts.size>0&&a.jsxs("div",{children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-2",children:"컴포넌트별 렌더링"}),a.jsx("div",{className:"g7dt-space-y-1 g7dt-scroll-list",children:Array.from(e.renderCounts.entries()).sort((t,s)=>s[1]-t[1]).slice(0,10).map(([t,s])=>a.jsxs("div",{className:"g7dt-list-item",children:[a.jsx("span",{className:"g7dt-text-lightgray g7dt-truncate",children:t}),a.jsxs("span",{className:s>50?"g7dt-text-red":"g7dt-text-gray",children:[s,"회"]})]},t))})]})]})},SI=({devTools:n})=>{const e=n.getLifecycleInfo();return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{className:"g7dt-section",children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-text-green g7dt-mb-2 g7dt-flex-shrink-0",children:["마운트된 컴포넌트 (",e.mountedComponents.length,")"]}),a.jsx("div",{className:"g7dt-scroll-list",children:e.mountedComponents.length===0?a.jsx("div",{className:"g7dt-empty-message",children:"추적된 컴포넌트 없음"}):e.mountedComponents.map(t=>a.jsxs("div",{className:"g7dt-list-item g7dt-text-xs",children:[a.jsx("span",{className:"g7dt-text-lightgray",children:t.name}),a.jsx("span",{className:"g7dt-text-gray",children:t.id})]},t.id))})]}),e.orphanedListeners.length>0&&a.jsxs("div",{className:"g7dt-section",children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-text-red g7dt-mb-2 g7dt-flex-shrink-0",children:["정리되지 않은 리스너 (",e.orphanedListeners.length,")"]}),a.jsx("div",{className:"g7dt-scroll-list",children:e.orphanedListeners.map((t,s)=>a.jsxs("div",{className:"g7dt-warning-card g7dt-text-xs",children:[a.jsx("span",{className:"g7dt-text-lightgray",children:t.type}),a.jsxs("span",{className:"g7dt-text-gray g7dt-ml-2",children:["on ",t.target]})]},s))})]})]})},kI=({devTools:n})=>{const e=n.getNetworkInfo(),t=l=>{switch(l){case"success":return"g7dt-text-green";case"error":return"g7dt-text-red";case"pending":return"g7dt-text-yellow";default:return"g7dt-text-gray"}},s=l=>l.queryParams&&Object.keys(l.queryParams).length>0,r=l=>Object.entries(l).map(([d,u])=>a.jsxs("div",{className:"g7dt-flex g7dt-gap-2 g7dt-text-xs",children:[a.jsxs("span",{className:"g7dt-text-purple",children:[d,":"]}),a.jsx("span",{className:"g7dt-text-lightgray",children:Array.isArray(u)?JSON.stringify(u):u})]},d)),o=(l,d=5e3)=>{try{const u=JSON.stringify(l,null,2);return u.length>d?u.substring(0,d)+`
... (truncated)`:u}catch{return"(직렬화 불가)"}};return a.jsxs("div",{className:"g7dt-space-y-4",children:[e.activeRequests.length>0&&a.jsxs("div",{children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-text-yellow g7dt-mb-2",children:["진행 중 (",e.activeRequests.length,")"]}),a.jsx("div",{className:"g7dt-space-y-1",children:e.activeRequests.map(l=>a.jsxs("details",{className:"g7dt-details",children:[a.jsxs("summary",{className:"g7dt-summary g7dt-pending-request",children:[a.jsx("span",{className:"g7dt-font-bold",children:l.method}),a.jsx("span",{className:"g7dt-ml-2 g7dt-text-lightgray g7dt-truncate",children:l.fullUrl||l.url})]}),a.jsxs("div",{className:"g7dt-card g7dt-mt-1 g7dt-text-xs",children:[s(l)&&a.jsxs("div",{className:"g7dt-mb-2",children:[a.jsx("div",{className:"g7dt-text-blue g7dt-font-bold g7dt-mb-1",children:"쿼리 파라미터"}),a.jsx("div",{className:"g7dt-pl-2 g7dt-border-l-2 g7dt-border-blue",children:r(l.queryParams)})]}),l.requestBody&&a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-orange g7dt-font-bold g7dt-mb-1",children:"요청 본문"}),a.jsx("pre",{className:"g7dt-pre g7dt-text-xs",children:o(l.requestBody,2e3)})]})]})]},l.id))})]}),a.jsxs("div",{children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-2",children:"요청 이력"}),a.jsx("div",{className:"g7dt-space-y-1 g7dt-scroll-list-lg",children:e.requestHistory.length===0?a.jsx("div",{className:"g7dt-empty-message",children:"요청 이력 없음"}):e.requestHistory.slice(-20).reverse().map(l=>a.jsxs("details",{className:"g7dt-details",children:[a.jsxs("summary",{className:"g7dt-summary g7dt-card g7dt-text-xs",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center g7dt-w-full",children:[a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-font-bold",children:l.method}),a.jsx("span",{className:`g7dt-ml-2 ${t(l.status)}`,children:l.statusCode||l.status})]}),a.jsxs("span",{className:"g7dt-text-gray",children:[l.duration,"ms"]})]}),a.jsx("div",{className:"g7dt-text-gray g7dt-truncate g7dt-mt-1",children:l.fullUrl||l.url})]}),a.jsxs("div",{className:"g7dt-card g7dt-mt-1 g7dt-text-xs g7dt-ml-2 g7dt-border-l-2 g7dt-border-gray",children:[a.jsx("div",{className:"g7dt-mb-2",children:a.jsxs("div",{className:"g7dt-text-xs g7dt-space-y-1",children:[a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"URL:"})," ",a.jsx("span",{className:"g7dt-text-lightgray",children:l.fullUrl||l.url})]}),a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"상태:"})," ",a.jsx("span",{className:t(l.status),children:l.statusCode||l.status})]}),a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"소요시간:"})," ",a.jsxs("span",{className:"g7dt-text-lightgray",children:[l.duration,"ms"]})]}),l.dataSourceId&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"데이터소스:"})," ",a.jsx("span",{className:"g7dt-text-blue",children:l.dataSourceId})]}),l.error&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"에러:"})," ",a.jsx("span",{className:"g7dt-text-red",children:l.error})]})]})}),s(l)&&a.jsxs("div",{className:"g7dt-mb-2",children:[a.jsx("div",{className:"g7dt-text-blue g7dt-font-bold g7dt-mb-1",children:"쿼리 파라미터"}),a.jsx("div",{className:"g7dt-pl-2 g7dt-border-l-2 g7dt-border-blue",children:r(l.queryParams)})]}),l.requestBody&&a.jsxs("div",{className:"g7dt-mb-2",children:[a.jsx("div",{className:"g7dt-text-orange g7dt-font-bold g7dt-mb-1",children:"요청 본문"}),a.jsx("pre",{className:"g7dt-pre g7dt-text-xs g7dt-max-h-40 g7dt-overflow-auto",children:o(l.requestBody,2e3)})]}),l.response!==void 0&&a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-green g7dt-font-bold g7dt-mb-1",children:"응답 내용"}),a.jsx("pre",{className:"g7dt-pre g7dt-text-xs g7dt-max-h-60 g7dt-overflow-auto",children:o(l.response,5e3)})]})]})]},l.id))})]}),e.pendingDataSources.length>0&&a.jsxs("div",{children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-text-blue g7dt-mb-2",children:["대기 중인 데이터소스 (",e.pendingDataSources.length,")"]}),a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-2",children:e.pendingDataSources.map(l=>a.jsx("span",{className:"g7dt-tag-blue",children:l},l))})]})]})},CI=({devTools:n})=>{const e=n.getFormInfo(),[t,s]=w.useState(!1),[r,o]=w.useState(null),l=w.useCallback(()=>{o(n.getFormBindingValidationTrackingInfo())},[n]);w.useEffect(()=>{if(t){l();const f=setInterval(l,2e3);return()=>clearInterval(f)}},[t,l]);const d=f=>{switch(f){case"missing-datakey":return"🔑";case"missing-input-name":return"📝";case"context-not-propagated":return"🔗";case"sortable-context-break":return"📊";case"modal-context-isolation":return"🪟";case"duplicate-input-name":return"👯";case"value-type-mismatch":return"⚠️";case"binding-path-invalid":return"❌";default:return"❓"}},u=f=>{switch(f){case"error":return"g7dt-text-red";case"warning":return"g7dt-text-yellow";case"info":return"g7dt-text-blue";default:return"g7dt-text-gray"}};return a.jsxs("div",{className:"g7dt-space-y-4",children:[e.length===0?a.jsx("div",{className:"g7dt-empty-message g7dt-py-8",children:"추적된 Form이 없습니다"}):e.map(f=>a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center g7dt-mb-2",children:[a.jsx("span",{className:"g7dt-font-bold g7dt-text-blue",children:f.dataKey||"(no dataKey)"}),!f.dataKey&&a.jsx("span",{className:"g7dt-text-red g7dt-text-xs",children:"dataKey 필요"})]}),a.jsx("div",{className:"g7dt-space-y-1 g7dt-mb-2",children:f.inputs.map((g,h)=>a.jsxs("div",{className:"g7dt-text-xs g7dt-flex g7dt-justify-between",children:[a.jsx("span",{children:g.name||a.jsx("span",{className:"g7dt-text-red",children:"name 없음"})}),a.jsx("span",{className:"g7dt-text-gray",children:g.type})]},h))}),a.jsxs("details",{className:"g7dt-details",children:[a.jsx("summary",{className:"g7dt-summary",children:"현재 값 보기"}),a.jsx("pre",{className:"g7dt-pre",children:JSON.stringify(f,null,2)})]})]},f.id)),a.jsx("div",{className:"g7dt-flex g7dt-justify-end",children:a.jsx("button",{onClick:()=>s(!t),className:`g7dt-tab-button ${t?"g7dt-tab-active":""}`,children:"🔍 Auto-Binding Check"})}),t&&r&&a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"Form 바인딩 검증 결과"}),a.jsxs("div",{className:"g7dt-stats-grid g7dt-mb-3",children:[a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-blue",children:r.stats.totalFormsValidated}),a.jsx("div",{className:"g7dt-stat-label",children:"검증된 Form"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-green",children:r.stats.validForms}),a.jsx("div",{className:"g7dt-stat-label",children:"유효"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-red",children:r.stats.formsWithIssues}),a.jsx("div",{className:"g7dt-stat-label",children:"문제 있음"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-yellow",children:r.stats.totalIssues}),a.jsx("div",{className:"g7dt-stat-label",children:"총 이슈"})]})]}),r.stats.topIssues.length>0&&a.jsxs("div",{className:"g7dt-mb-3",children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mb-2",children:"자주 발생하는 이슈"}),a.jsx("div",{className:"g7dt-space-y-1",children:r.stats.topIssues.slice(0,3).map((f,g)=>a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2 g7dt-text-xs",children:[a.jsx("span",{children:d(f.type)}),a.jsx("span",{className:"g7dt-text-white",children:f.description}),a.jsxs("span",{className:"g7dt-text-muted",children:["(",f.count,")"]})]},g))})]}),r.issues.length===0?a.jsx("div",{className:"g7dt-empty-state",children:"바인딩 이슈가 없습니다 ✅"}):a.jsx("div",{className:"g7dt-space-y-2 g7dt-max-h-60 g7dt-overflow-y-auto",children:r.issues.slice().reverse().slice(0,30).map(f=>a.jsxs("div",{className:`g7dt-list-item ${f.severity==="error"?"g7dt-border-red":f.severity==="warning"?"g7dt-border-yellow":""}`,children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{children:d(f.type)}),a.jsx("span",{className:`g7dt-text-xs g7dt-font-bold ${u(f.severity)}`,children:f.type}),f.formDataKey&&a.jsx("span",{className:"g7dt-text-xs g7dt-text-blue g7dt-font-mono",children:f.formDataKey})]}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-white g7dt-mt-1",children:f.description}),a.jsxs("div",{className:"g7dt-text-xs g7dt-text-green g7dt-mt-1",children:["💡 ",f.suggestion]}),f.contextInfo&&a.jsxs("div",{className:"g7dt-flex g7dt-gap-2 g7dt-mt-1",children:[f.contextInfo.isInsideModal&&a.jsx("span",{className:"g7dt-badge g7dt-text-xs",children:"🪟 modal"}),f.contextInfo.isInsideSortable&&a.jsx("span",{className:"g7dt-badge g7dt-text-xs",children:"📊 sortable"}),a.jsxs("span",{className:"g7dt-text-xs g7dt-text-muted",children:["depth: ",f.contextInfo.depth]})]})]},f.id))})]})]})},jI=({devTools:n})=>{const e=n.getConditionalInfo();return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-text-purple g7dt-mb-2",children:["if 조건 (",e.ifConditions.length,")"]}),a.jsx("div",{className:"g7dt-space-y-1 g7dt-scroll-list",children:e.ifConditions.length===0?a.jsx("div",{className:"g7dt-empty-message",children:"추적된 if 조건 없음"}):e.ifConditions.map(t=>a.jsx("div",{className:`g7dt-condition-item ${t.evaluatedValue?"g7dt-condition-true":"g7dt-condition-false"}`,children:a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center",children:[a.jsx("span",{className:"g7dt-font-mono g7dt-text-lightgray g7dt-truncate-60",children:t.expression}),a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{className:t.evaluatedValue?"g7dt-badge-success":"g7dt-badge-error",children:t.evaluatedValue?"true":"false"}),a.jsxs("span",{className:"g7dt-text-gray",children:[t.evaluationCount,"회"]})]})]})},t.id))})]}),a.jsxs("div",{children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-text-cyan g7dt-mb-2",children:["iteration (",e.iterations.length,")"]}),a.jsx("div",{className:"g7dt-space-y-1 g7dt-scroll-list",children:e.iterations.length===0?a.jsx("div",{className:"g7dt-empty-message",children:"추적된 iteration 없음"}):e.iterations.map(t=>a.jsxs("div",{className:"g7dt-card g7dt-text-xs",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center g7dt-mb-1",children:[a.jsx("span",{className:"g7dt-font-mono g7dt-text-lightgray g7dt-truncate-60",children:t.source}),a.jsxs("span",{className:t.sourceLength>0?"g7dt-badge-blue":"g7dt-badge-warning",children:[t.sourceLength,"개 항목"]})]}),a.jsxs("div",{className:"g7dt-text-gray",children:[a.jsxs("span",{className:"g7dt-mr-2",children:["item_var: ",t.itemVar]}),t.indexVar&&a.jsxs("span",{children:["index_var: ",t.indexVar]})]})]},t.id))})]}),(e.ifConditions.some(t=>t.evaluatedValue===!1&&t.evaluationCount>5)||e.iterations.some(t=>t.sourceLength===0))&&a.jsxs("div",{className:"g7dt-warning-box",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-text-yellow g7dt-mb-2",children:"잠재적 문제"}),a.jsxs("div",{className:"g7dt-space-y-1 g7dt-text-xs",children:[e.ifConditions.filter(t=>t.evaluatedValue===!1&&t.evaluationCount>5).map(t=>a.jsxs("div",{className:"g7dt-text-lightgray",children:["⚠️ if 조건 항상 false: ",t.expression]},t.id)),e.iterations.filter(t=>t.sourceLength===0).map(t=>a.jsxs("div",{className:"g7dt-text-lightgray",children:["⚠️ iteration 소스 비어있음: ",t.source]},t.id))]})]})]})},EI=({devTools:n})=>{const[e,t]=w.useState([]),[s,r]=w.useState({totalEvaluations:0,uniqueExpressions:0,warningCount:0,cacheHitRate:0,averageDuration:0,byType:{},byWarning:{}}),[o,l]=w.useState(""),[d,u]=w.useState(!1),[f,g]=w.useState(null),h=w.useCallback(()=>{const _=n.getExpressionInfo();t(_.expressions),r(_.stats)},[n]);w.useEffect(()=>{h();const _=n.watchExpressions(()=>{h()}),A=setInterval(h,2e3);return()=>{_(),clearInterval(A)}},[n,h]);const b=e.filter(_=>{if(d&&!_.warning)return!1;if(o){const A=o.toLowerCase();return _.expression.toLowerCase().includes(A)||_.componentName?.toLowerCase().includes(A)||_.propName?.toLowerCase().includes(A)||_.resultType.toLowerCase().includes(A)}return!0}),y=_=>{switch(_){case"string":return"g7dt-text-green";case"number":return"g7dt-text-blue";case"boolean":return"g7dt-text-purple";case"array":return"g7dt-text-cyan";case"object":return"g7dt-text-yellow";case"undefined":case"null":return"g7dt-text-red";default:return"g7dt-text-gray"}},v=_=>{switch(_){case"undefined-result":return"undefined 결과";case"null-result":return"null 결과";case"array-to-string":return"배열→문자열";case"object-to-string":return"객체→문자열";case"missing-optional-chain":return"?. 누락 의심";case"wrong-iteration-var":return"잘못된 반복 변수";case"type-mismatch":return"타입 불일치";case"cache-stale":return"캐시 오래됨";case"slow-evaluation":return"느린 평가";default:return _}},x=(_,A)=>A==="undefined"?"undefined":A==="null"?"null":A==="string"?`"${String(_).substring(0,50)}${String(_).length>50?"...":""}"`:A==="array"?`Array(${Array.isArray(_)?_.length:"?"})`:A==="object"?"Object{...}":String(_),S=()=>{n.clearExpressions(),t([]),g(null)};return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{className:"g7dt-stats-grid-5",children:[a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsx("div",{className:"g7dt-stat-value-lg g7dt-text-blue",children:s.totalEvaluations}),a.jsx("div",{className:"g7dt-stat-label-xs",children:"총 평가"})]}),a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsx("div",{className:"g7dt-stat-value-lg g7dt-text-green",children:s.uniqueExpressions}),a.jsx("div",{className:"g7dt-stat-label-xs",children:"고유 표현식"})]}),a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsx("div",{className:"g7dt-stat-value-lg g7dt-text-yellow",children:s.warningCount}),a.jsx("div",{className:"g7dt-stat-label-xs",children:"경고"})]}),a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsxs("div",{className:"g7dt-stat-value-lg g7dt-text-purple",children:[(s.cacheHitRate*100).toFixed(0),"%"]}),a.jsx("div",{className:"g7dt-stat-label-xs",children:"캐시 히트"})]}),a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsxs("div",{className:"g7dt-stat-value-lg g7dt-text-cyan",children:[s.averageDuration.toFixed(1),"ms"]}),a.jsx("div",{className:"g7dt-stat-label-xs",children:"평균 시간"})]})]}),a.jsxs("div",{className:"g7dt-flex g7dt-gap-2 g7dt-items-center",children:[a.jsx("input",{type:"text",placeholder:"표현식, 컴포넌트, prop 검색...",value:o,onChange:_=>l(_.target.value),className:"g7dt-input g7dt-flex-1"}),a.jsxs("label",{className:"g7dt-checkbox-label",children:[a.jsx("input",{type:"checkbox",checked:d,onChange:_=>u(_.target.checked),className:"g7dt-checkbox"}),"경고만"]}),a.jsx("button",{onClick:S,className:"g7dt-btn-danger-sm",children:"초기화"})]}),Object.keys(s.byType).length>0&&a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-1",children:Object.entries(s.byType).map(([_,A])=>a.jsxs("span",{className:`g7dt-type-tag ${y(_)}`,children:[_,": ",A]},_))}),a.jsx("div",{className:"g7dt-space-y-1 g7dt-expr-list",children:b.length===0?a.jsx("div",{className:"g7dt-empty-message g7dt-py-4",children:o||d?"조건에 맞는 표현식이 없습니다":"추적된 표현식이 없습니다"}):b.slice(-50).reverse().map(_=>a.jsx("div",{onClick:()=>g(_),className:`g7dt-expr-item ${f?.id===_.id?"g7dt-expr-selected":_.warning?"g7dt-expr-warning":""}`,children:a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-start g7dt-gap-2",children:[a.jsxs("div",{className:"g7dt-flex-1 g7dt-min-w-0",children:[a.jsx("div",{className:"g7dt-font-mono g7dt-text-white g7dt-truncate",title:_.expression,children:_.expression}),a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2 g7dt-mt-1 g7dt-text-xxs",children:[_.componentName&&a.jsxs("span",{className:"g7dt-text-gray",children:[_.componentName,_.propName&&`.${_.propName}`]}),a.jsx("span",{className:y(_.resultType),children:x(_.result,_.resultType)})]})]}),a.jsxs("div",{className:"g7dt-flex g7dt-flex-col g7dt-items-end g7dt-gap-1",children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-1",children:[_.fromCache&&a.jsx("span",{className:"g7dt-mini-badge g7dt-badge-success",children:"캐시"}),_.warning&&a.jsx("span",{className:"g7dt-mini-badge g7dt-badge-warning",children:v(_.warning.type)})]}),_.duration!==void 0&&a.jsxs("span",{className:"g7dt-text-xxs g7dt-text-gray",children:[_.duration.toFixed(2),"ms"]})]})]})},_.id))}),f&&a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center g7dt-mb-2",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold",children:"표현식 상세"}),a.jsx("button",{onClick:()=>g(null),className:"g7dt-btn-close",children:"✕"})]}),a.jsxs("div",{className:"g7dt-space-y-2 g7dt-text-xs",children:[a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"표현식:"}),a.jsx("code",{className:"g7dt-code g7dt-text-green",children:f.expression})]}),a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"결과:"}),a.jsx("span",{className:`g7dt-ml-2 ${y(f.resultType)}`,children:JSON.stringify(f.result,null,2)?.substring(0,200)}),a.jsxs("span",{className:"g7dt-ml-2 g7dt-text-darkgray",children:["(",f.resultType,")"]})]}),f.componentName&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"컴포넌트:"}),a.jsx("span",{className:"g7dt-ml-2 g7dt-text-blue",children:f.componentName}),f.propName&&a.jsxs("span",{className:"g7dt-text-gray",children:[".",f.propName]})]}),f.method&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"메서드:"}),a.jsx("span",{className:"g7dt-ml-2 g7dt-text-purple",children:f.method})]}),a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"캐시:"}),a.jsxs("span",{className:`g7dt-ml-2 ${f.fromCache?"g7dt-text-green":"g7dt-text-gray"}`,children:[f.fromCache?"캐시에서 로드":"새로 평가",f.skipCache&&" (skipCache)"]})]}),f.duration!==void 0&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"소요 시간:"}),a.jsxs("span",{className:`g7dt-ml-2 ${f.duration>10?"g7dt-text-red":"g7dt-text-lightgray"}`,children:[f.duration.toFixed(3),"ms"]})]}),f.warning&&a.jsxs("div",{className:"g7dt-warning-box-light",children:[a.jsxs("div",{className:"g7dt-text-yellow g7dt-font-bold",children:["⚠️ ",v(f.warning.type)]}),a.jsx("div",{className:"g7dt-text-lightgray g7dt-mt-1",children:f.warning.message}),f.warning.suggestion&&a.jsxs("div",{className:"g7dt-text-gray g7dt-mt-1 g7dt-text-xxs",children:["💡 ",f.warning.suggestion]})]}),f.steps&&f.steps.length>0&&a.jsxs("details",{className:"g7dt-details",children:[a.jsxs("summary",{className:"g7dt-summary",children:["평가 단계 (",f.steps.length,")"]}),a.jsx("div",{className:"g7dt-mt-1 g7dt-space-y-1 g7dt-pl-2 g7dt-border-l",children:f.steps.map((_,A)=>a.jsxs("div",{className:"g7dt-text-xxs",children:[a.jsx("span",{className:"g7dt-text-purple",children:_.step}),_.path&&a.jsx("span",{className:"g7dt-text-gray g7dt-ml-1",children:_.path}),_.fromCache&&a.jsx("span",{className:"g7dt-text-green g7dt-ml-1",children:"(cached)"}),_.error&&a.jsx("span",{className:"g7dt-text-red g7dt-ml-1",children:_.error})]},A))})]})]})]}),Object.keys(s.byWarning).length>0&&a.jsxs("div",{className:"g7dt-warning-box-light",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-text-yellow g7dt-mb-2",children:"경고 요약"}),a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-2",children:Object.entries(s.byWarning).map(([_,A])=>a.jsxs("span",{className:"g7dt-warning-tag",children:[v(_),": ",A]},_))})]})]})},RI=({devTools:n})=>{const e=n.getHandlers(),[t,s]=w.useState(""),[r,o]=w.useState("all"),l={"built-in":e.filter(f=>f.category==="built-in"),custom:e.filter(f=>f.category==="custom"),module:e.filter(f=>f.category==="module"),plugin:e.filter(f=>f.category==="plugin")},d={all:e.length,"built-in":l["built-in"].length,custom:l.custom.length,module:l.module.length,plugin:l.plugin.length},u=e.filter(f=>r!=="all"&&f.category!==r?!1:t?f.name.toLowerCase().includes(t.toLowerCase())||f.description?.toLowerCase().includes(t.toLowerCase()):!0);return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsx("div",{className:"g7dt-flex g7dt-gap-2",children:["all","built-in","custom","module","plugin"].map(f=>a.jsxs("button",{onClick:()=>o(f),className:r===f?"g7dt-filter-btn g7dt-filter-active":"g7dt-filter-btn",children:[f==="all"?"전체":f," (",d[f],")"]},f))}),a.jsx("input",{type:"text",placeholder:"핸들러 이름 검색...",value:t,onChange:f=>s(f.target.value),className:"g7dt-input g7dt-w-full"}),a.jsx("div",{className:"g7dt-space-y-1 g7dt-handler-list",children:u.length===0?a.jsx("div",{className:"g7dt-empty-message g7dt-py-4",children:"등록된 핸들러가 없습니다"}):u.map(f=>a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center",children:[a.jsx("span",{className:"g7dt-font-mono g7dt-text-blue",children:f.name}),a.jsx("span",{className:f.category==="built-in"?"g7dt-mini-badge g7dt-badge-success":f.category==="module"?"g7dt-mini-badge g7dt-badge-purple":f.category==="plugin"?"g7dt-mini-badge g7dt-badge-info":"g7dt-mini-badge g7dt-badge-warning",children:f.category})]}),f.description&&a.jsx("div",{className:"g7dt-text-xs g7dt-text-gray g7dt-mt-1",children:f.description})]},f.name))}),a.jsxs("div",{className:"g7dt-text-xs g7dt-text-gray",children:["총 ",e.length,"개 핸들러 | 빌트인 ",d["built-in"]," | 커스텀 ",d.custom," | 모듈 ",d.module," | 플러그인 ",d.plugin]})]})},AI=({devTools:n})=>{const[e,t]=w.useState(n.getComponentEventInfo()),[s,r]=w.useState(null),o=w.useCallback(()=>{t(n.getComponentEventInfo())},[n]);w.useEffect(()=>{o();const d=setInterval(o,2e3);return()=>clearInterval(d)},[o]);const l=s?e.emitHistory.filter(d=>d.eventName===s):e.emitHistory;return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{className:"g7dt-stats-grid-3",children:[a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value-lg g7dt-text-blue",children:e.subscriptions.length}),a.jsx("div",{className:"g7dt-stat-label",children:"이벤트 타입"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value-lg g7dt-text-green",children:e.totalSubscribers}),a.jsx("div",{className:"g7dt-stat-label",children:"총 구독자"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value-lg g7dt-text-purple",children:e.totalEmits}),a.jsx("div",{className:"g7dt-stat-label",children:"총 발행"})]})]}),a.jsxs("div",{children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-2",children:"구독된 이벤트"}),a.jsxs("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-2",children:[a.jsx("button",{onClick:()=>r(null),className:s===null?"g7dt-filter-btn g7dt-filter-active":"g7dt-filter-btn",children:"전체"}),e.subscriptions.map(d=>a.jsxs("button",{onClick:()=>r(d.eventName),className:s===d.eventName?"g7dt-filter-btn g7dt-filter-active":"g7dt-filter-btn",children:[d.eventName," (",d.subscriberCount,")"]},d.eventName))]})]}),a.jsxs("div",{children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-2",children:["발행 이력 ",s&&`(${s})`]}),a.jsx("div",{className:"g7dt-space-y-1 g7dt-event-list",children:l.length===0?a.jsx("div",{className:"g7dt-empty-message g7dt-py-4",children:"이벤트 발행 이력이 없습니다"}):l.slice(-30).reverse().map(d=>a.jsxs("div",{className:`g7dt-card g7dt-text-xs ${d.hasError?"g7dt-card-error":""}`,children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center",children:[a.jsx("span",{className:"g7dt-font-mono g7dt-text-green",children:d.eventName}),a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsxs("span",{className:"g7dt-text-gray",children:[d.listenerCount," listeners"]}),d.hasError&&a.jsx("span",{className:"g7dt-text-red g7dt-text-xxs",children:"에러"})]})]}),d.data!==void 0&&a.jsxs("details",{className:"g7dt-details g7dt-mt-1",children:[a.jsx("summary",{className:"g7dt-summary",children:"데이터"}),a.jsx("pre",{className:"g7dt-pre",children:JSON.stringify(d.data,null,2)})]}),d.hasError&&d.errorMessage&&a.jsx("div",{className:"g7dt-error-inline",children:d.errorMessage})]},d.id))})]}),a.jsx("button",{onClick:o,className:"g7dt-btn-secondary",children:"새로고침"})]})},TI=({devTools:n})=>{const e=n.getDataSources(),[t,s]=w.useState("all"),[r,o]=w.useState(null),[l,d]=w.useState(!1),[u,f]=w.useState(null),g=w.useCallback(()=>{f(n.getDataPathTransformTrackingInfo())},[n]);w.useEffect(()=>{if(l){g();const S=setInterval(g,2e3);return()=>clearInterval(S)}},[l,g]);const h=S=>{switch(S){case"api_response":return"📥";case"extract_data":return"📄";case"apply_path":return"🔗";case"init_global":return"🌐";case"init_local":return"📌";default:return"❓"}},b=e.filter(S=>t==="all"?!0:S.status===t),y={all:e.length,idle:e.filter(S=>S.status==="idle").length,loading:e.filter(S=>S.status==="loading").length,loaded:e.filter(S=>S.status==="loaded").length,error:e.filter(S=>S.status==="error").length},v=S=>{switch(S){case"loaded":return"g7dt-badge-success";case"loading":return"g7dt-badge-warning";case"error":return"g7dt-badge-error";default:return"g7dt-badge-gray"}},x=r?e.find(S=>S.id===r):null;return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsx("div",{className:"g7dt-flex g7dt-gap-2",children:["all","idle","loading","loaded","error"].map(S=>a.jsxs("button",{onClick:()=>s(S),className:t===S?"g7dt-filter-btn g7dt-filter-active":"g7dt-filter-btn",children:[S==="all"?"전체":S," (",y[S],")"]},S))}),a.jsx("div",{className:"g7dt-ds-grid",children:b.length===0?a.jsx("div",{className:"g7dt-empty-message g7dt-col-span-2 g7dt-py-4",children:"데이터소스가 없습니다"}):b.map(S=>a.jsxs("div",{onClick:()=>o(S.id),className:`g7dt-ds-item ${r===S.id?"g7dt-ds-selected":""}`,children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center",children:[a.jsx("span",{className:"g7dt-font-mono g7dt-text-blue g7dt-truncate",children:S.id}),a.jsx("span",{className:`g7dt-mini-badge ${v(S.status)}`,children:S.status})]}),a.jsx("div",{className:"g7dt-text-gray g7dt-mt-1 g7dt-truncate",children:S.endpoint||"(endpoint 없음)"}),S.itemCount!==void 0&&a.jsxs("div",{className:"g7dt-text-lightgray g7dt-mt-1",children:[S.itemCount,"개 항목"]})]},S.id))}),x&&a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center g7dt-mb-2",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold",children:x.id}),a.jsx("button",{onClick:()=>o(null),className:"g7dt-btn-close",children:"✕"})]}),a.jsxs("div",{className:"g7dt-space-y-2 g7dt-text-xs",children:[a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"엔드포인트:"}),a.jsx("span",{className:"g7dt-ml-2 g7dt-text-green",children:x.endpoint||"-"})]}),x.dataPath&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"데이터 경로:"}),a.jsx("span",{className:"g7dt-ml-2 g7dt-text-yellow",children:x.dataPath})]}),a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"상태:"}),a.jsx("span",{className:`g7dt-ml-2 g7dt-mini-badge ${v(x.status)}`,children:x.status})]}),x.itemCount!==void 0&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"항목 수:"}),a.jsx("span",{className:"g7dt-ml-2 g7dt-text-blue",children:x.itemCount})]}),x.keys&&x.keys.length>0&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"키:"}),a.jsxs("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-1 g7dt-mt-1",children:[x.keys.slice(0,10).map(S=>a.jsx("span",{className:"g7dt-key-tag",children:S},S)),x.keys.length>10&&a.jsxs("span",{className:"g7dt-text-gray",children:["+",x.keys.length-10,"개"]})]})]}),x.dependencies&&x.dependencies.length>0&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-gray",children:"의존성:"}),a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-1 g7dt-mt-1",children:x.dependencies.map(S=>a.jsx("span",{className:"g7dt-dep-tag",children:S},S))})]})]})]}),a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center",children:[a.jsxs("div",{className:"g7dt-text-xs g7dt-text-gray",children:["총 ",e.length,"개 데이터소스 | 로드됨 ",y.loaded," | 로딩중 ",y.loading," | 에러 ",y.error]}),a.jsx("button",{onClick:()=>d(!l),className:`g7dt-tab-button ${l?"g7dt-tab-active":""}`,children:"🔀 Path Transform"})]}),l&&u&&a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:["데이터 경로 변환 추적 (",u.transforms.length,"개)"]}),a.jsxs("div",{className:"g7dt-stats-grid-3 g7dt-mb-3",children:[a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-xl g7dt-font-bold g7dt-text-blue",children:u.stats.totalTransforms}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"총 변환"})]}),a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-xl g7dt-font-bold g7dt-text-purple",children:Object.keys(u.stats.byDataSource).length}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"데이터소스"})]}),a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-xl g7dt-font-bold g7dt-text-yellow",children:u.stats.warningsCount}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"경고"})]})]}),u.transforms.length===0?a.jsx("div",{className:"g7dt-empty-state",children:"변환 기록이 없습니다"}):a.jsx("div",{className:"g7dt-space-y-2 g7dt-max-h-60 g7dt-overflow-y-auto",children:u.transforms.slice().reverse().slice(0,20).map((S,_)=>a.jsxs("div",{className:`g7dt-list-item ${S.warnings.length>0?"g7dt-border-yellow":""}`,children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{className:"g7dt-text-xs g7dt-text-blue g7dt-font-mono",children:S.dataSourceId}),S.warnings.length>0&&a.jsxs("span",{className:"g7dt-badge g7dt-text-xs g7dt-text-yellow",children:["⚠️ ",S.warnings.length]})]}),a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-1 g7dt-mt-1",children:S.transformSteps.map((A,C)=>a.jsxs("span",{className:"g7dt-badge g7dt-text-xs",title:`${A.inputPath} → ${A.outputPath}`,children:[h(A.step)," ",A.step]},C))}),S.finalBinding&&a.jsxs("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mt-1",children:["최종: ",a.jsx("span",{className:"g7dt-text-green",children:S.finalBinding.expression}),"→ ",a.jsx("span",{className:"g7dt-text-blue",children:S.finalBinding.resolvedPath})]}),S.warnings.length>0&&a.jsx("div",{className:"g7dt-text-xs g7dt-text-yellow g7dt-mt-1",children:S.warnings[0]})]},`${S.dataSourceId}-${_}`))}),u.stats.commonWarnings.length>0&&a.jsxs("div",{className:"g7dt-mt-3",children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mb-1",children:"자주 발생하는 경고"}),a.jsx("div",{className:"g7dt-space-y-1",children:u.stats.commonWarnings.slice(0,5).map((S,_)=>a.jsxs("div",{className:"g7dt-text-xs g7dt-text-yellow",children:[S.warning," (",S.count,"회)"]},_))})]})]})]})},$I=({devTools:n})=>{const[e,t]=w.useState(n.getStateRenderingInfo()),[s,r]=w.useState(null),[o,l]=w.useState(!1),[d,u]=w.useState(""),f=w.useCallback(()=>{t(n.getStateRenderingInfo())},[n]);w.useEffect(()=>{f();const v=setInterval(f,2e3);return()=>clearInterval(v)},[f]);const g=e.logs.filter(v=>!(o&&v.renderedComponents.length>0||d&&!v.statePath.toLowerCase().includes(d.toLowerCase()))),h=s?e.logs.find(v=>v.setStateId===s):null,b=e.stats,y=e.logs.filter(v=>v.renderedComponents.length===0).length;return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{className:"g7dt-stats-grid",children:[a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-blue",children:b.totalStateChanges}),a.jsx("div",{className:"g7dt-stat-label",children:"상태 변경"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-green",children:b.totalRenders}),a.jsx("div",{className:"g7dt-stat-label",children:"총 렌더링"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsxs("div",{className:"g7dt-stat-value g7dt-text-purple",children:[b.avgRenderDuration.toFixed(1),"ms"]}),a.jsx("div",{className:"g7dt-stat-label",children:"평균 렌더 시간"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:`g7dt-stat-value ${y>0?"g7dt-text-yellow":"g7dt-text-green"}`,children:y}),a.jsx("div",{className:"g7dt-stat-label",children:"렌더링 없음"})]})]}),a.jsxs("div",{className:"g7dt-flex g7dt-gap-2",children:[a.jsx("input",{type:"text",placeholder:"상태 경로 필터 (예: _global.user)",value:d,onChange:v=>u(v.target.value),className:"g7dt-input g7dt-flex-1"}),a.jsx("button",{onClick:()=>l(!o),className:o?"g7dt-filter-btn-active-yellow":"g7dt-filter-btn",children:"렌더링 없음만"})]}),a.jsx("div",{className:"g7dt-scroll-list",children:g.length===0?a.jsx("div",{className:"g7dt-empty-state",children:"상태-렌더링 로그가 없습니다"}):g.slice(-30).reverse().map(v=>{const x=v.renderedComponents.length>0,S=x?"✅":"⚠️",_=new Date(v.timestamp).toLocaleTimeString();return a.jsxs("div",{onClick:()=>r(v.setStateId),className:`g7dt-render-log-item ${s===v.setStateId?"g7dt-selected":x?"":"g7dt-warning"}`,children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center",children:[a.jsxs("span",{className:"g7dt-mono g7dt-text-blue",children:[S," ",v.statePath]}),a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[x?a.jsxs("span",{className:"g7dt-text-green",children:[v.renderedComponents.length,"개 렌더"]}):a.jsx("span",{className:"g7dt-text-yellow",children:"렌더링 없음"}),a.jsx("span",{className:"g7dt-text-muted",children:_})]})]}),v.triggeredBy?.handlerType&&a.jsxs("div",{className:"g7dt-text-muted g7dt-mt-1",children:["트리거: ",v.triggeredBy.handlerType]})]},v.setStateId)})}),h&&a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center g7dt-mb-2",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold",children:h.statePath}),a.jsx("button",{onClick:()=>r(null),className:"g7dt-close-btn",children:"✕"})]}),a.jsxs("div",{className:"g7dt-space-y-2 g7dt-text-xs",children:[a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"setStateId:"}),a.jsx("span",{className:"g7dt-ml-2 g7dt-text-purple g7dt-mono",children:h.setStateId})]}),h.triggeredBy&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"트리거:"}),a.jsxs("span",{className:"g7dt-ml-2 g7dt-text-yellow",children:[h.triggeredBy.handlerType,h.triggeredBy.actionId&&` (${h.triggeredBy.actionId})`]})]}),a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"이전 값:"}),a.jsx("pre",{className:"g7dt-pre g7dt-text-red",children:JSON.stringify(h.oldValue,null,2)?.slice(0,200)})]}),a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"새 값:"}),a.jsx("pre",{className:"g7dt-pre g7dt-text-green",children:JSON.stringify(h.newValue,null,2)?.slice(0,200)})]}),h.renderedComponents.length>0?a.jsxs("div",{children:[a.jsxs("span",{className:"g7dt-text-muted",children:["렌더링된 컴포넌트 (",h.renderedComponents.length,"개):"]}),a.jsxs("div",{className:"g7dt-mt-1 g7dt-space-y-1",children:[h.renderedComponents.slice(0,10).map((v,x)=>a.jsxs("div",{className:"g7dt-render-comp-item",children:[a.jsx("span",{className:"g7dt-text-blue",children:v.componentName}),a.jsxs("span",{className:"g7dt-text-muted",children:[v.renderDuration.toFixed(2),"ms"]})]},x)),h.renderedComponents.length>10&&a.jsxs("div",{className:"g7dt-text-muted g7dt-text-center",children:["... 외 ",h.renderedComponents.length-10,"개"]})]}),a.jsxs("div",{className:"g7dt-mt-2 g7dt-text-muted",children:["총 렌더 시간: ",h.totalRenderDuration.toFixed(2),"ms"]})]}):a.jsxs("div",{className:"g7dt-warning-box",children:[a.jsx("span",{className:"g7dt-text-yellow",children:"⚠️ 렌더링이 발생하지 않았습니다"}),a.jsxs("div",{className:"g7dt-text-muted g7dt-mt-1 g7dt-text-xxs",children:["가능한 원인:",a.jsxs("ul",{className:"g7dt-list g7dt-mt-1",children:[a.jsx("li",{children:"해당 상태를 바인딩하는 컴포넌트가 없음"}),a.jsx("li",{children:"컴포넌트가 마운트되지 않은 상태"}),a.jsx("li",{children:"동일한 값으로 상태 설정"})]})]})]})]})]}),b.topRenderedComponents.length>0&&a.jsxs("div",{children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-2",children:"가장 많이 렌더링된 컴포넌트"}),a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-2",children:b.topRenderedComponents.slice(0,5).map((v,x)=>a.jsxs("span",{className:"g7dt-tag",children:[v.name,": ",a.jsx("span",{className:"g7dt-text-blue",children:v.count})]},x))})]}),a.jsxs("div",{className:"g7dt-flex g7dt-gap-2",children:[a.jsx("button",{onClick:f,className:"g7dt-btn-secondary",children:"새로고침"}),a.jsx("button",{onClick:()=>{n.clearStateRenderingLogs(),f()},className:"g7dt-btn-danger",children:"로그 초기화"})]})]})},NI=({devTools:n})=>{const[e,t]=w.useState(null),[s,r]=w.useState(null),[o,l]=w.useState("all"),d=w.useCallback(()=>{t(n.getStyleValidationInfo())},[n]);if(w.useEffect(()=>{d();const h=setInterval(d,2e3);return()=>clearInterval(h)},[d]),!e)return a.jsx("div",{className:"g7dt-empty-state",children:"로딩 중..."});const u=e.issues.filter(h=>o==="all"?!0:h.type===o),f=s?e.issues.find(h=>h.componentId===s):null,g=e.stats;return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{className:"g7dt-stats-grid",children:[a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value g7dt-text-blue",children:g.totalComponents}),a.jsx("div",{className:"g7dt-stat-label",children:"총 컴포넌트"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:`g7dt-stat-value ${g.invisibleCount>0?"g7dt-text-red":"g7dt-text-green"}`,children:g.invisibleCount}),a.jsx("div",{className:"g7dt-stat-label",children:"숨겨진 요소"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:`g7dt-stat-value ${g.tailwindIssueCount>0?"g7dt-text-yellow":"g7dt-text-green"}`,children:g.tailwindIssueCount}),a.jsx("div",{className:"g7dt-stat-label",children:"Tailwind 이슈"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:`g7dt-stat-value ${g.darkModeIssueCount>0?"g7dt-text-purple":"g7dt-text-green"}`,children:g.darkModeIssueCount}),a.jsx("div",{className:"g7dt-stat-label",children:"다크모드 이슈"})]})]}),a.jsxs("div",{className:"g7dt-flex g7dt-gap-2",children:[a.jsxs("select",{value:o,onChange:h=>l(h.target.value),className:"g7dt-select",children:[a.jsx("option",{value:"all",children:"모든 이슈"}),a.jsx("option",{value:"invisible-element",children:"숨겨진 요소"}),a.jsx("option",{value:"tailwind-purging",children:"Tailwind 퍼징"}),a.jsx("option",{value:"dark-mode-missing",children:"다크모드 누락"})]}),a.jsx("button",{onClick:d,className:"g7dt-btn-secondary",children:"새로고침"})]}),a.jsx("div",{className:"g7dt-scroll-list",children:u.length===0?a.jsx("div",{className:"g7dt-empty-state",children:e.issues.length===0?"스타일 이슈가 없습니다 ✓":"필터에 맞는 이슈가 없습니다"}):u.map(h=>{const b=h.type==="invisible-element"?"👁️":h.type==="tailwind-purging"?"🎨":"🌙",y=h.severity==="error"?"g7dt-severity-error":h.severity==="warning"?"g7dt-severity-warning":"g7dt-severity-info";return a.jsxs("div",{onClick:()=>r(h.componentId),className:`g7dt-style-issue-item ${y} ${s===h.componentId?"g7dt-selected":""}`,children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center",children:[a.jsxs("span",{className:"g7dt-mono g7dt-text-blue",children:[b," ",h.componentName]}),a.jsx("span",{className:h.severity==="error"?"g7dt-badge-error":h.severity==="warning"?"g7dt-badge-warning":"g7dt-badge-info",children:h.type})]}),a.jsx("div",{className:"g7dt-text-muted g7dt-mt-1 g7dt-truncate",children:h.description})]},h.componentId)})}),f&&a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center g7dt-mb-2",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold",children:f.componentName}),a.jsx("button",{onClick:()=>r(null),className:"g7dt-close-btn",children:"✕"})]}),a.jsxs("div",{className:"g7dt-space-y-2 g7dt-text-xs",children:[a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"이슈 타입:"}),a.jsx("span",{className:"g7dt-ml-2 g7dt-text-yellow",children:f.type})]}),a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"설명:"}),a.jsx("div",{className:"g7dt-mt-1 g7dt-text-white",children:f.description})]}),a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"CSS 속성:"}),a.jsx("span",{className:"g7dt-ml-2 g7dt-text-purple",children:f.property}),a.jsxs("span",{className:"g7dt-ml-2 g7dt-text-muted",children:["= ",f.currentValue]}),f.expectedValue&&a.jsxs("span",{className:"g7dt-ml-2 g7dt-text-green",children:["(예상: ",f.expectedValue,")"]})]}),f.suggestion&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"해결 방법:"}),a.jsx("div",{className:"g7dt-mt-1 g7dt-text-green",children:f.suggestion})]})]})]}),e.componentStyles.length>0&&a.jsxs("div",{children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-2",children:["컴포넌트 스타일 (",e.componentStyles.length,")"]}),a.jsx("div",{className:"g7dt-scroll-list-sm",children:e.componentStyles.slice(0,20).map((h,b)=>a.jsxs("div",{className:"g7dt-list-item",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between",children:[a.jsx("span",{className:"g7dt-text-blue",children:h.componentName}),a.jsxs("span",{className:"g7dt-text-muted",children:[h.classes.length," classes"]})]}),h.classes.length>0&&a.jsxs("div",{className:"g7dt-text-muted g7dt-mt-1 g7dt-truncate",children:[h.classes.slice(0,5).join(" "),h.classes.length>5&&"..."]})]},b))})]})]})},DI=({devTools:n})=>{const[e,t]=w.useState(null),[s,r]=w.useState(null),[o,l]=w.useState("all"),d=w.useCallback(()=>{t(n.getAuthDebugInfo())},[n]);if(w.useEffect(()=>{d();const b=setInterval(d,2e3);return()=>clearInterval(b)},[d]),!e)return a.jsx("div",{className:"g7dt-empty-state",children:"로딩 중..."});const u=e.events.filter(b=>o==="all"?!0:b.type===o),f=s?e.events.find(b=>b.id===s):null,g=e.stats,h=e.state;return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-justify-between g7dt-mb-3",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold",children:"현재 인증 상태"}),a.jsxs("span",{className:"g7dt-text-xs g7dt-text-muted",children:["소스: ",h.source||"unknown"]})]}),a.jsxs("div",{className:"g7dt-stats-grid-3 g7dt-mb-3",children:[a.jsx("div",{className:"g7dt-text-center",children:a.jsx("div",{className:`g7dt-text-lg g7dt-font-bold ${h.isAuthenticated?"g7dt-text-green":"g7dt-text-red"}`,children:h.isAuthenticated?"✓ 인증됨":"✕ 미인증"})}),a.jsx("div",{className:"g7dt-text-center",children:a.jsx("div",{className:`g7dt-text-lg g7dt-font-bold ${h.tokens.hasAccessToken?"g7dt-text-green":"g7dt-text-yellow"}`,children:h.tokens.hasAccessToken?"✓ 토큰 유효":"⚠ 토큰 없음"})}),a.jsx("div",{className:"g7dt-text-center",children:a.jsx("div",{className:"g7dt-text-lg g7dt-font-bold g7dt-text-blue",children:h.user?.name||h.user?.email||"익명"})})]}),h.user&&a.jsxs("div",{className:"g7dt-border-t g7dt-pt-3 g7dt-mt-3",children:[a.jsxs("div",{className:"g7dt-grid-2 g7dt-gap-2 g7dt-text-xs",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between",children:[a.jsx("span",{className:"g7dt-text-muted",children:"ID:"}),a.jsx("span",{className:"g7dt-text-white g7dt-mono",children:h.user.id})]}),a.jsxs("div",{className:"g7dt-flex g7dt-justify-between",children:[a.jsx("span",{className:"g7dt-text-muted",children:"이메일:"}),a.jsx("span",{className:"g7dt-text-white g7dt-truncate g7dt-ml-2",title:h.user.email,children:h.user.email})]}),h.user.name&&a.jsxs("div",{className:"g7dt-flex g7dt-justify-between",children:[a.jsx("span",{className:"g7dt-text-muted",children:"이름:"}),a.jsx("span",{className:"g7dt-text-white",children:h.user.name})]}),h.user.nickname&&a.jsxs("div",{className:"g7dt-flex g7dt-justify-between",children:[a.jsx("span",{className:"g7dt-text-muted",children:"닉네임:"}),a.jsx("span",{className:"g7dt-text-white",children:h.user.nickname})]}),h.user.phone&&a.jsxs("div",{className:"g7dt-flex g7dt-justify-between",children:[a.jsx("span",{className:"g7dt-text-muted",children:"전화번호:"}),a.jsx("span",{className:"g7dt-text-white",children:h.user.phone})]}),h.user.status&&a.jsxs("div",{className:"g7dt-flex g7dt-justify-between",children:[a.jsx("span",{className:"g7dt-text-muted",children:"상태:"}),a.jsx("span",{className:h.user.status==="active"?"g7dt-text-green":"g7dt-text-yellow",children:h.user.status})]}),h.user.locale&&a.jsxs("div",{className:"g7dt-flex g7dt-justify-between",children:[a.jsx("span",{className:"g7dt-text-muted",children:"언어:"}),a.jsx("span",{className:"g7dt-text-white",children:h.user.locale})]})]}),h.user.roles&&h.user.roles.length>0&&a.jsxs("div",{className:"g7dt-mt-2",children:[a.jsx("span",{className:"g7dt-text-muted g7dt-text-xs",children:"역할: "}),a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-1 g7dt-mt-1",children:h.user.roles.map((b,y)=>a.jsx("span",{className:"g7dt-role-tag",title:b.guard_name?`guard: ${b.guard_name}`:void 0,children:typeof b=="string"?b:b.name},y))})]}),h.user.permissions&&h.user.permissions.length>0&&a.jsxs("div",{className:"g7dt-mt-2",children:[a.jsx("span",{className:"g7dt-text-muted g7dt-text-xs",children:"권한: "}),a.jsxs("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-1 g7dt-mt-1 g7dt-max-h-16 g7dt-overflow-auto",children:[h.user.permissions.slice(0,10).map((b,y)=>a.jsx("span",{className:"g7dt-perm-tag",title:b.guard_name?`guard: ${b.guard_name}`:void 0,children:typeof b=="string"?b:b.name},y)),h.user.permissions.length>10&&a.jsxs("span",{className:"g7dt-text-muted g7dt-text-xs",children:["+",h.user.permissions.length-10,"개"]})]})]}),a.jsxs("div",{className:"g7dt-mt-2 g7dt-grid-2 g7dt-gap-2 g7dt-text-xs",children:[h.user.created_at&&a.jsxs("div",{className:"g7dt-flex g7dt-justify-between",children:[a.jsx("span",{className:"g7dt-text-muted",children:"가입일:"}),a.jsx("span",{className:"g7dt-text-muted",children:new Date(h.user.created_at).toLocaleDateString()})]}),h.user.last_login_at&&a.jsxs("div",{className:"g7dt-flex g7dt-justify-between",children:[a.jsx("span",{className:"g7dt-text-muted",children:"마지막 로그인:"}),a.jsx("span",{className:"g7dt-text-muted",children:new Date(h.user.last_login_at).toLocaleString()})]}),h.user.email_verified_at&&a.jsxs("div",{className:"g7dt-flex g7dt-justify-between",children:[a.jsx("span",{className:"g7dt-text-muted",children:"이메일 인증:"}),a.jsx("span",{className:"g7dt-text-green",children:"✓ 인증됨"})]})]})]}),a.jsx("div",{className:"g7dt-border-t g7dt-pt-3 g7dt-mt-3",children:a.jsxs("div",{className:"g7dt-grid-2 g7dt-gap-2 g7dt-text-xs",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between",children:[a.jsx("span",{className:"g7dt-text-muted",children:"저장소:"}),a.jsx("span",{className:"g7dt-text-white",children:h.tokens.storage})]}),h.tokens.accessTokenPreview&&a.jsxs("div",{className:"g7dt-flex g7dt-justify-between",children:[a.jsx("span",{className:"g7dt-text-muted",children:"토큰:"}),a.jsx("span",{className:"g7dt-text-muted g7dt-mono",children:h.tokens.accessTokenPreview})]})]})}),h.tokens.accessTokenExpiresAt&&a.jsxs("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mt-2 g7dt-text-center",children:["토큰 만료: ",new Date(h.tokens.accessTokenExpiresAt).toLocaleString()]})]}),a.jsxs("div",{className:"g7dt-stats-grid-5",children:[a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsx("div",{className:"g7dt-stat-value-sm g7dt-text-blue",children:g.loginAttempts}),a.jsx("div",{className:"g7dt-stat-label",children:"로그인 시도"})]}),a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsx("div",{className:"g7dt-stat-value-sm g7dt-text-green",children:g.successfulLogins}),a.jsx("div",{className:"g7dt-stat-label",children:"성공"})]}),a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsx("div",{className:`g7dt-stat-value-sm ${g.failedLogins>0?"g7dt-text-red":"g7dt-text-muted"}`,children:g.failedLogins}),a.jsx("div",{className:"g7dt-stat-label",children:"실패"})]}),a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsx("div",{className:"g7dt-stat-value-sm g7dt-text-purple",children:g.tokenRefreshes}),a.jsx("div",{className:"g7dt-stat-label",children:"토큰 갱신"})]}),a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsx("div",{className:`g7dt-stat-value-sm ${g.unauthorizedResponses>0?"g7dt-text-red":"g7dt-text-muted"}`,children:g.unauthorizedResponses}),a.jsx("div",{className:"g7dt-stat-label",children:"401 응답"})]})]}),a.jsxs("div",{className:"g7dt-flex g7dt-gap-2",children:[a.jsxs("select",{value:o,onChange:b=>l(b.target.value),className:"g7dt-select",children:[a.jsx("option",{value:"all",children:"모든 이벤트"}),a.jsx("option",{value:"login",children:"로그인"}),a.jsx("option",{value:"logout",children:"로그아웃"}),a.jsx("option",{value:"token-refresh",children:"토큰 갱신"}),a.jsx("option",{value:"token-expired",children:"토큰 만료"}),a.jsx("option",{value:"api-unauthorized",children:"401 응답"})]}),a.jsx("button",{onClick:d,className:"g7dt-btn-secondary",children:"새로고침"})]}),a.jsx("div",{className:"g7dt-scroll-list-sm",children:u.length===0?a.jsx("div",{className:"g7dt-empty-state",children:"인증 이벤트가 없습니다"}):u.slice(-20).reverse().map(b=>{const y=b.success?"✅":"❌",v=new Date(b.timestamp).toLocaleTimeString();return a.jsxs("div",{onClick:()=>r(b.id),className:`g7dt-auth-event-item ${s===b.id?"g7dt-selected":b.success?"":"g7dt-error"}`,children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center",children:[a.jsxs("span",{className:"g7dt-mono",children:[y," ",b.type]}),a.jsx("span",{className:"g7dt-text-muted",children:v})]}),b.error&&a.jsx("div",{className:"g7dt-text-red g7dt-mt-1 g7dt-truncate",children:b.error})]},b.id)})}),f&&a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center g7dt-mb-2",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold",children:f.type}),a.jsx("button",{onClick:()=>r(null),className:"g7dt-close-btn",children:"✕"})]}),a.jsxs("div",{className:"g7dt-space-y-2 g7dt-text-xs",children:[a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"결과:"}),a.jsx("span",{className:`g7dt-ml-2 ${f.success?"g7dt-text-green":"g7dt-text-red"}`,children:f.success?"성공":"실패"})]}),f.error&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"에러:"}),a.jsx("div",{className:"g7dt-mt-1 g7dt-text-red",children:f.error})]}),f.details&&Object.keys(f.details).length>0&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"상세:"}),a.jsx("pre",{className:"g7dt-pre g7dt-text-green",children:JSON.stringify(f.details,null,2)})]})]})]}),e.headerAnalysis.length>0&&a.jsxs("div",{children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-2",children:"최근 API 인증 헤더"}),a.jsx("div",{className:"g7dt-scroll-list-xs",children:e.headerAnalysis.slice(-10).reverse().map((b,y)=>a.jsxs("div",{className:"g7dt-header-item",children:[a.jsx("span",{className:"g7dt-text-blue g7dt-truncate g7dt-flex-1",children:b.url}),a.jsx("span",{className:`g7dt-ml-2 ${b.hasAuthHeader?"g7dt-text-green":"g7dt-text-yellow"}`,children:b.hasAuthHeader?`✓ ${b.headerType}`:"✕ 헤더 없음"}),b.responseStatus&&a.jsx("span",{className:`g7dt-ml-2 ${b.responseStatus<400?"g7dt-text-muted":"g7dt-text-red"}`,children:b.responseStatus})]},y))})]})]})},II=({devTools:n})=>{const[e,t]=w.useState([]),[s,r]=w.useState(null),[o,l]=w.useState(null),[d,u]=w.useState("all"),[f,g]=w.useState(""),[h,b]=w.useState(""),y=w.useCallback(()=>{const C=n.getLogInfo();t(C.entries),r(C.stats)},[n]);w.useEffect(()=>{y();const C=setInterval(y,1e3);return()=>clearInterval(C)},[y]);const v=e.filter(C=>!(d!=="all"&&C.level!==d||f&&!C.prefix.toLowerCase().includes(f.toLowerCase())||h&&!C.message.toLowerCase().includes(h.toLowerCase()))),x=o?e.find(C=>C.id===o):null,S=()=>{n.clearLogs(),y(),l(null)},_=C=>{switch(C){case"error":return"g7dt-text-red";case"warn":return"g7dt-text-yellow";case"info":return"g7dt-text-blue";case"debug":return"g7dt-text-muted";default:return"g7dt-text-white"}},A=C=>{switch(C){case"error":return"g7dt-log-error";case"warn":return"g7dt-log-warn";case"info":return"g7dt-log-info";case"debug":return"g7dt-log-debug";default:return"g7dt-log-default"}};return a.jsxs("div",{className:"g7dt-space-y-4",children:[s&&a.jsxs("div",{className:"g7dt-stats-grid-6",children:[a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsx("div",{className:"g7dt-stat-value-sm g7dt-text-white",children:s.totalLogs}),a.jsx("div",{className:"g7dt-stat-label",children:"전체"})]}),a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsx("div",{className:"g7dt-stat-value-sm g7dt-text-red",children:s.byLevel.error}),a.jsx("div",{className:"g7dt-stat-label",children:"에러"})]}),a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsx("div",{className:"g7dt-stat-value-sm g7dt-text-yellow",children:s.byLevel.warn}),a.jsx("div",{className:"g7dt-stat-label",children:"경고"})]}),a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsx("div",{className:"g7dt-stat-value-sm g7dt-text-blue",children:s.byLevel.info}),a.jsx("div",{className:"g7dt-stat-label",children:"정보"})]}),a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsx("div",{className:`g7dt-stat-value-sm ${s.recentErrors>0?"g7dt-text-red":"g7dt-text-green"}`,children:s.recentErrors}),a.jsx("div",{className:"g7dt-stat-label",children:"최근 에러"})]}),a.jsxs("div",{className:"g7dt-stat-card-sm",children:[a.jsx("div",{className:`g7dt-stat-value-sm ${s.recentWarnings>0?"g7dt-text-yellow":"g7dt-text-green"}`,children:s.recentWarnings}),a.jsx("div",{className:"g7dt-stat-label",children:"최근 경고"})]})]}),a.jsxs("div",{className:"g7dt-flex g7dt-gap-2 g7dt-flex-wrap",children:[a.jsxs("select",{value:d,onChange:C=>u(C.target.value),className:"g7dt-select",children:[a.jsx("option",{value:"all",children:"모든 레벨"}),a.jsx("option",{value:"error",children:"에러"}),a.jsx("option",{value:"warn",children:"경고"}),a.jsx("option",{value:"info",children:"정보"}),a.jsx("option",{value:"log",children:"로그"}),a.jsx("option",{value:"debug",children:"디버그"})]}),a.jsx("input",{type:"text",placeholder:"prefix 필터",value:f,onChange:C=>g(C.target.value),className:"g7dt-input g7dt-w-32"}),a.jsx("input",{type:"text",placeholder:"메시지 검색",value:h,onChange:C=>b(C.target.value),className:"g7dt-input g7dt-flex-1"}),a.jsx("button",{onClick:y,className:"g7dt-btn-secondary",children:"새로고침"}),a.jsx("button",{onClick:S,className:"g7dt-btn-danger",children:"초기화"})]}),a.jsx("div",{className:"g7dt-scroll-list-lg",children:v.length===0?a.jsx("div",{className:"g7dt-empty-state",children:e.length===0?"로그가 없습니다":"필터에 맞는 로그가 없습니다"}):v.slice(-50).reverse().map(C=>{const j=new Date(C.timestamp).toLocaleTimeString();return a.jsxs("div",{onClick:()=>l(C.id),className:`g7dt-log-item ${o===C.id?"g7dt-selected":A(C.level)}`,children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center",children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{className:`g7dt-font-bold g7dt-uppercase ${_(C.level)}`,children:C.level}),a.jsxs("span",{className:"g7dt-text-purple",children:["[",C.prefix,"]"]})]}),a.jsx("span",{className:"g7dt-text-muted",children:j})]}),a.jsx("div",{className:"g7dt-text-white g7dt-mt-1 g7dt-truncate",children:C.message})]},C.id)})}),x&&a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center g7dt-mb-2",children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold",children:[a.jsx("span",{className:_(x.level),children:x.level.toUpperCase()})," ",a.jsxs("span",{className:"g7dt-text-purple",children:["[",x.prefix,"]"]})]}),a.jsx("button",{onClick:()=>l(null),className:"g7dt-close-btn",children:"✕"})]}),a.jsxs("div",{className:"g7dt-space-y-2 g7dt-text-xs",children:[a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"시간:"}),a.jsx("span",{className:"g7dt-ml-2 g7dt-text-white",children:new Date(x.timestamp).toLocaleString()})]}),a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"메시지:"}),a.jsx("pre",{className:"g7dt-pre g7dt-text-white g7dt-whitespace-pre-wrap",children:x.message})]}),x.args.length>0&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"인수:"}),a.jsx("pre",{className:"g7dt-pre g7dt-text-green",children:JSON.stringify(x.args,null,2)})]}),x.stack&&a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"스택 트레이스:"}),a.jsx("pre",{className:"g7dt-pre-stack g7dt-text-red",children:x.stack})]})]})]}),s&&Object.keys(s.byPrefix).length>0&&a.jsxs("div",{children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-2",children:"Prefix별 로그 수"}),a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-2",children:Object.entries(s.byPrefix).sort((C,j)=>j[1]-C[1]).slice(0,10).map(([C,j])=>a.jsxs("button",{onClick:()=>g(C),className:f===C?"g7dt-prefix-btn-active":"g7dt-prefix-btn",children:[C,": ",a.jsx("span",{className:"g7dt-text-blue",children:j})]},C))})]})]})},LI=({devTools:n})=>{const[e,t]=w.useState(n.getLayoutDebugInfo()),[s,r]=w.useState(!1),[o,l]=w.useState(null),[d,u]=w.useState(!1),[f,g]=w.useState({});w.useEffect(()=>{const _=setInterval(()=>{t(n.getLayoutDebugInfo())},1e3);return()=>clearInterval(_)},[n]),w.useEffect(()=>{(async()=>{try{const A=await fetch("/api/admin/permissions",{headers:{Authorization:`Bearer ${localStorage.getItem("auth_token")}`,Accept:"application/json"}});if(A.ok){const C=await A.json(),j={},E=T=>{T.forEach(D=>{j[D.identifier]=D.name,D.children?.length&&E(D.children)})};Object.values(C.data?.permissions||{}).forEach(T=>{T.permissions&&E(T.permissions)}),g(j)}}catch(A){console.warn("[G7DevTools] 권한 목록 조회 실패:",A)}})()},[]);const h=e.current,b=h?.layoutJson,y=e.history,v=e.stats,x=b?[{key:"components",label:"컴포넌트",count:Array.isArray(b.components)?b.components.length:0},{key:"data_sources",label:"데이터소스",count:Array.isArray(b.data_sources)?b.data_sources.length:0},{key:"computed",label:"Computed",count:b.computed?Object.keys(b.computed).length:0},{key:"defines",label:"Defines",count:b.defines?Object.keys(b.defines).length:0},{key:"slots",label:"Slots",count:b.slots?Object.keys(b.slots).length:0},{key:"modals",label:"Modals",count:b.modals?Object.keys(b.modals).length:0},{key:"init_actions",label:"초기화 액션",count:Array.isArray(b.init_actions)?b.init_actions.length:0},{key:"scripts",label:"스크립트",count:Array.isArray(b.scripts)?b.scripts.length:0},{key:"meta",label:"메타데이터",count:b.meta?Object.keys(b.meta).length:0},{key:"errorHandling",label:"에러핸들링",count:b.errorHandling?Object.keys(b.errorHandling).length:0},{key:"permissions",label:"권한",count:Array.isArray(b.permissions)?b.permissions.length:0}]:[],S=_=>{navigator.clipboard.writeText(JSON.stringify(_,null,2))};return h?a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-2",children:"📊 로드 통계"}),a.jsxs("div",{className:"g7dt-grid-3",children:[a.jsxs("div",{className:"g7dt-stat-item",children:[a.jsx("span",{className:"g7dt-text-muted",children:"총 로드:"}),a.jsx("span",{className:"g7dt-text-blue",children:v.totalLoads})]}),a.jsxs("div",{className:"g7dt-stat-item",children:[a.jsx("span",{className:"g7dt-text-muted",children:"캐시 히트:"}),a.jsx("span",{className:"g7dt-text-green",children:v.cacheHits})]}),a.jsxs("div",{className:"g7dt-stat-item",children:[a.jsx("span",{className:"g7dt-text-muted",children:"API 로드:"}),a.jsx("span",{className:"g7dt-text-yellow",children:v.apiLoads})]})]})]}),a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center g7dt-mb-2",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold",children:"📋 현재 레이아웃"}),a.jsxs("div",{className:"g7dt-flex g7dt-gap-2",children:[a.jsx("button",{onClick:()=>S(b),className:"g7dt-btn-small",title:"전체 JSON 복사",children:"📋 복사"}),a.jsx("button",{onClick:()=>r(!s),className:"g7dt-btn-small",children:s?"요약 보기":"전체 보기"})]})]}),a.jsxs("div",{className:"g7dt-space-y-2 g7dt-text-xs",children:[a.jsxs("div",{className:"g7dt-flex g7dt-gap-4",children:[a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"경로:"}),a.jsx("span",{className:"g7dt-ml-1 g7dt-text-white g7dt-font-mono",children:h.layoutPath})]}),a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"템플릿:"}),a.jsx("span",{className:"g7dt-ml-1 g7dt-text-blue",children:h.templateId})]})]}),a.jsxs("div",{className:"g7dt-flex g7dt-gap-4",children:[a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"버전:"}),a.jsx("span",{className:"g7dt-ml-1 g7dt-text-white",children:h.version||"-"})]}),a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"소스:"}),a.jsx("span",{className:`g7dt-ml-1 ${h.source==="cache"?"g7dt-text-green":"g7dt-text-yellow"}`,children:h.source==="cache"?"💾 캐시":"🌐 API"})]}),a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"로드 시간:"}),a.jsx("span",{className:"g7dt-ml-1 g7dt-text-white",children:h.loadedAt?new Date(h.loadedAt).toLocaleTimeString():"-"})]})]}),a.jsx("div",{className:"g7dt-flex g7dt-gap-4 g7dt-mt-2",children:a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-text-muted",children:"권한:"}),b.permissions&&b.permissions.length>0?a.jsxs("span",{className:"g7dt-ml-1 g7dt-text-yellow",children:["🔒 ",b.permissions.map(_=>f[_]||_).join(", ")]}):b.permissions&&b.permissions.length===0?a.jsx("span",{className:"g7dt-ml-1 g7dt-text-green",children:"🌐 공개"}):a.jsx("span",{className:"g7dt-ml-1 g7dt-text-muted",children:"미정의 (부모 상속)"})]})})]})]}),!s&&a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-2",children:"🏗️ 레이아웃 구조"}),a.jsx("div",{className:"g7dt-grid-2",children:x.map(_=>a.jsxs("button",{onClick:()=>l(o===_.key?null:_.key),className:`g7dt-section-btn ${o===_.key?"g7dt-selected":""}`,children:[a.jsx("span",{children:_.label}),a.jsxs("span",{className:"g7dt-text-blue",children:[_.count,"개"]})]},_.key))})]}),(s||o)&&a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center g7dt-mb-2",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold",children:s?"📄 전체 레이아웃 JSON":`📎 ${o} 섹션`}),a.jsx("button",{onClick:()=>{s?S(b):o&&b&&S(b[o])},className:"g7dt-btn-small",children:"복사"})]}),o==="permissions"&&!s?a.jsx("div",{className:"g7dt-text-xs",children:b.permissions&&b.permissions.length>0?a.jsxs("table",{className:"g7dt-table g7dt-w-full",children:[a.jsx("thead",{children:a.jsxs("tr",{className:"g7dt-border-b g7dt-border-gray-700",children:[a.jsx("th",{className:"g7dt-text-left g7dt-p-2 g7dt-text-muted",children:"권한 ID"}),a.jsx("th",{className:"g7dt-text-left g7dt-p-2 g7dt-text-muted",children:"명칭"})]})}),a.jsx("tbody",{children:b.permissions.map(_=>a.jsxs("tr",{className:"g7dt-border-b g7dt-border-gray-800",children:[a.jsx("td",{className:"g7dt-p-2 g7dt-font-mono g7dt-text-blue",children:_}),a.jsx("td",{className:"g7dt-p-2 g7dt-text-white",children:f[_]||a.jsx("span",{className:"g7dt-text-muted",children:"-"})})]},_))})]}):b.permissions&&b.permissions.length===0?a.jsx("p",{className:"g7dt-text-muted g7dt-p-2",children:"🌐 공개 레이아웃 (permissions: [])"}):a.jsx("p",{className:"g7dt-text-muted g7dt-p-2",children:"권한 미정의 (부모 레이아웃 상속)"})}):a.jsx("pre",{className:"g7dt-pre g7dt-text-green g7dt-max-h-96 g7dt-overflow-auto",children:JSON.stringify(s?b:o&&b?b[o]:null,null,2)})]}),y.length>0&&a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center g7dt-cursor-pointer",onClick:()=>u(!d),children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold",children:["📜 로드 이력 (",y.length,")"]}),a.jsx("span",{className:"g7dt-text-muted",children:d?"▼":"▶"})]}),d&&a.jsx("div",{className:"g7dt-mt-2 g7dt-space-y-1",children:y.slice(-20).reverse().map(_=>a.jsxs("div",{className:"g7dt-history-item",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center",children:[a.jsx("span",{className:"g7dt-font-mono g7dt-text-xs",children:_.layoutPath}),a.jsx("span",{className:`g7dt-text-xs ${_.source==="cache"?"g7dt-text-green":"g7dt-text-yellow"}`,children:_.source==="cache"?"💾":"🌐"})]}),a.jsxs("div",{className:"g7dt-text-xs g7dt-text-muted",children:[_.templateId," · ",_.loadedAt?new Date(_.loadedAt).toLocaleTimeString():"-"]})]},_.id))})]}),a.jsxs("div",{className:"g7dt-card g7dt-text-xs g7dt-text-muted",children:["💡 레이아웃 캐시 문제가 의심되면:",a.jsxs("ul",{className:"g7dt-ml-4 g7dt-list-disc",children:[a.jsx("li",{children:'"소스" 항목이 💾 캐시인지 🌐 API인지 확인'}),a.jsx("li",{children:"캐시에서 로드된 경우, JSON 내용이 최신인지 확인"}),a.jsxs("li",{children:["문제가 있으면 ",a.jsx("code",{className:"g7dt-code",children:"php artisan template:refresh-layout"})," 실행"]})]})]})]}):a.jsx("div",{className:"g7dt-space-y-4",children:a.jsxs("div",{className:"g7dt-empty-state",children:["현재 로드된 레이아웃이 없습니다.",a.jsx("br",{}),"페이지를 새로고침하거나 라우트를 변경해보세요."]})})},OI=({devTools:n})=>{const[e,t]=w.useState(n.getChangeDetectionInfo()),[s,r]=w.useState(null),[o,l]=w.useState(!1),[d,u]=w.useState(new Set);w.useEffect(()=>{const C=setInterval(()=>{t(n.getChangeDetectionInfo())},500);return()=>clearInterval(C)},[n]);const{executionDetails:f,alerts:g,stats:h}=e,b=o?f.filter(C=>C.alerts.length>0||C.stateChanges.length===0):f,y=s?f.find(C=>C.executionId===s):null,v=C=>{u(j=>{const E=new Set(j);return E.has(C)?E.delete(C):E.add(C),E})},x=C=>{switch(C){case"normal":return"✅";case"early-return-condition":return"⏎";case"early-return-validation":return"❌";case"error":return"💥";default:return"❓"}},S=C=>{switch(C){case"no-state-change":return"⚠️";case"no-datasource-change":return"📊";case"expected-not-fulfilled":return"❗";case"object-reference-same":return"🔄";case"early-return-detected":return"⏎";case"async-timing-issue":return"⏱️";default:return"📢"}},_=C=>{switch(C){case"error":return"g7dt-text-red";case"warning":return"g7dt-text-yellow";case"info":return"g7dt-text-blue";default:return"g7dt-text-white"}},A=C=>new Date(C).toLocaleTimeString("ko-KR",{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3});return a.jsxs("div",{className:"g7dt-space-y-4",children:[g.filter(C=>C.severity==="error"||C.severity==="warning").length>0&&a.jsx("div",{className:"g7dt-card",style:{backgroundColor:"#7f1d1d",borderColor:"#991b1b"},children:a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center",children:[a.jsxs("span",{className:"g7dt-font-bold",children:["⚠️ 변경 감지 알림: ",g.filter(C=>C.severity==="error").length,"개 에러,"," ",g.filter(C=>C.severity==="warning").length,"개 경고"]}),a.jsx("button",{onClick:()=>n.clearChangeDetectionData(),className:"g7dt-btn-small",children:"초기화"})]})}),a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-2",children:"📊 변경 감지 통계"}),a.jsxs("div",{className:"g7dt-grid-3",children:[a.jsxs("div",{className:"g7dt-stat-item",children:[a.jsx("span",{className:"g7dt-text-muted",children:"총 실행:"}),a.jsx("span",{className:"g7dt-text-blue",children:h.totalExecutions})]}),a.jsxs("div",{className:"g7dt-stat-item",children:[a.jsx("span",{className:"g7dt-text-muted",children:"상태 변경 있음:"}),a.jsx("span",{className:"g7dt-text-green",children:h.executionsWithStateChange})]}),a.jsxs("div",{className:"g7dt-stat-item",children:[a.jsx("span",{className:"g7dt-text-muted",children:"상태 변경 없음:"}),a.jsx("span",{className:h.executionsWithoutStateChange>0?"g7dt-text-yellow":"g7dt-text-gray",children:h.executionsWithoutStateChange})]}),a.jsxs("div",{className:"g7dt-stat-item",children:[a.jsx("span",{className:"g7dt-text-muted",children:"Early Return:"}),a.jsx("span",{className:"g7dt-text-orange",children:h.earlyReturnCount})]}),a.jsxs("div",{className:"g7dt-stat-item",children:[a.jsx("span",{className:"g7dt-text-muted",children:"알림:"}),a.jsx("span",{className:h.alertCount>0?"g7dt-text-red":"g7dt-text-gray",children:h.alertCount})]})]})]}),g.length>0&&a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-2",children:"🔔 최근 알림"}),a.jsx("div",{className:"g7dt-space-y-2",style:{maxHeight:"200px",overflowY:"auto"},children:g.slice(-10).reverse().map(C=>a.jsxs("div",{className:"g7dt-list-item",onClick:()=>v(C.id),style:{cursor:"pointer"},children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-start",children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{children:S(C.type)}),a.jsx("span",{className:`g7dt-text-xs ${_(C.severity)}`,children:C.message})]}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-muted",children:A(C.timestamp)})]}),d.has(C.id)&&a.jsxs("div",{className:"g7dt-mt-2 g7dt-text-xs g7dt-text-muted g7dt-pl-6",children:[a.jsx("p",{children:C.description}),C.statePath&&a.jsxs("p",{className:"g7dt-mt-1",children:[a.jsx("span",{className:"g7dt-text-cyan",children:"경로:"})," ",C.statePath]}),C.suggestion&&a.jsxs("p",{className:"g7dt-mt-1",children:[a.jsx("span",{className:"g7dt-text-green",children:"제안:"})," ",C.suggestion]}),C.docLink&&a.jsxs("p",{className:"g7dt-mt-1",children:[a.jsx("span",{className:"g7dt-text-blue",children:"문서:"})," ",a.jsx("code",{className:"g7dt-code",children:C.docLink})]})]})]},C.id))})]}),a.jsxs("div",{className:"g7dt-card",children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center g7dt-mb-2",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold",children:"🔧 핸들러 실행 이력"}),a.jsxs("label",{className:"g7dt-flex g7dt-items-center g7dt-gap-2 g7dt-text-xs",children:[a.jsx("input",{type:"checkbox",checked:o,onChange:C=>l(C.target.checked)}),a.jsx("span",{children:"경고만 표시"})]})]}),b.length===0?a.jsxs("div",{className:"g7dt-empty-state",children:["핸들러 실행 이력이 없습니다.",a.jsx("br",{}),"액션을 실행하면 여기에 표시됩니다."]}):a.jsx("div",{className:"g7dt-space-y-1",style:{maxHeight:"300px",overflowY:"auto"},children:b.slice(-20).reverse().map(C=>a.jsxs("div",{className:`g7dt-list-item ${s===C.executionId?"g7dt-selected":""}`,onClick:()=>r(s===C.executionId?null:C.executionId),style:{cursor:"pointer"},children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center",children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{children:x(C.exitReason)}),a.jsx("span",{className:"g7dt-text-white g7dt-font-mono g7dt-text-xs",children:C.handlerName}),C.alerts.length>0&&a.jsx("span",{className:"g7dt-badge g7dt-badge-warning",children:C.alerts.length})]}),a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2 g7dt-text-xs",children:[a.jsxs("span",{className:"g7dt-text-muted",children:["상태: ",C.stateChanges.length]}),a.jsx("span",{className:"g7dt-text-muted",children:C.duration?`${C.duration}ms`:"-"}),a.jsx("span",{className:"g7dt-text-muted",children:A(C.startTime)})]})]}),s===C.executionId&&y&&a.jsxs("div",{className:"g7dt-mt-3 g7dt-pt-3 g7dt-border-t g7dt-border-gray-700",children:[a.jsxs("div",{className:"g7dt-mb-2",children:[a.jsx("span",{className:"g7dt-text-xs g7dt-text-muted",children:"종료 사유: "}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-white",children:y.exitReason||"unknown"}),y.exitLocation&&a.jsxs(a.Fragment,{children:[a.jsx("span",{className:"g7dt-text-xs g7dt-text-muted g7dt-ml-2",children:"위치: "}),a.jsx("code",{className:"g7dt-code g7dt-text-xs",children:y.exitLocation})]})]}),y.exitDescription&&a.jsx("div",{className:"g7dt-mb-2 g7dt-text-xs g7dt-text-muted",children:y.exitDescription}),y.stateChanges.length>0&&a.jsxs("div",{className:"g7dt-mb-2",children:[a.jsxs("span",{className:"g7dt-text-xs g7dt-font-bold g7dt-text-green",children:["상태 변경 (",y.stateChanges.length,")"]}),a.jsx("div",{className:"g7dt-mt-1 g7dt-space-y-1",children:y.stateChanges.map(j=>a.jsxs("div",{className:"g7dt-text-xs g7dt-pl-2",children:[a.jsx("span",{className:"g7dt-text-cyan",children:j.path}),a.jsxs("span",{className:"g7dt-text-muted",children:[" (",j.changeType,")"]}),j.comparison.changedKeys&&a.jsxs("span",{className:"g7dt-text-muted g7dt-ml-1",children:["[변경: ",j.comparison.changedKeys.join(", "),"]"]})]},j.id))})]}),y.dataSourceChanges.length>0&&a.jsxs("div",{className:"g7dt-mb-2",children:[a.jsxs("span",{className:"g7dt-text-xs g7dt-font-bold g7dt-text-blue",children:["데이터소스 변경 (",y.dataSourceChanges.length,")"]}),a.jsx("div",{className:"g7dt-mt-1 g7dt-space-y-1",children:y.dataSourceChanges.map((j,E)=>a.jsxs("div",{className:"g7dt-text-xs g7dt-pl-2",children:[a.jsx("span",{className:"g7dt-text-cyan",children:j.dataSourceId}),a.jsxs("span",{className:"g7dt-text-muted",children:[" ","(",j.changeType,": ",j.previousStatus," → ",j.newStatus,")"]})]},E))})]}),y.expectedChanges&&a.jsxs("div",{className:"g7dt-mb-2",children:[a.jsx("span",{className:"g7dt-text-xs g7dt-font-bold g7dt-text-yellow",children:"기대 변경"}),a.jsxs("div",{className:"g7dt-mt-1 g7dt-text-xs g7dt-pl-2 g7dt-text-muted",children:["상태: ",y.expectedChanges.expectedStatePaths.join(", ")||"없음",a.jsx("br",{}),"데이터소스: ",y.expectedChanges.expectedDataSources.join(", ")||"없음"]})]}),y.alerts.length>0&&a.jsxs("div",{children:[a.jsxs("span",{className:"g7dt-text-xs g7dt-font-bold g7dt-text-red",children:["알림 (",y.alerts.length,")"]}),a.jsx("div",{className:"g7dt-mt-1 g7dt-space-y-1",children:y.alerts.map(j=>a.jsxs("div",{className:"g7dt-text-xs g7dt-pl-2",children:[a.jsx("span",{children:S(j.type)}),a.jsx("span",{className:`g7dt-ml-1 ${_(j.severity)}`,children:j.message})]},j.id))})]})]})]},C.executionId))})]}),a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-2",children:"💡 변경 감지 가이드"}),a.jsxs("ul",{className:"g7dt-help-list",children:[a.jsx("li",{children:"핸들러 실행 후 상태 변경이 없으면 ⚠️ 경고가 표시됩니다"}),a.jsx("li",{children:"early return으로 종료된 경우 ⏎ 아이콘으로 표시됩니다"}),a.jsx("li",{children:"객체 변경 시 참조가 동일하면 🔄 경고가 발생합니다"}),a.jsx("li",{children:"문제 해결: exitLocation 확인 → 조건문 검토 → 불변성 확인"})]})]})]})},MI=({devTools:n})=>{const[e,t]=w.useState(null),[s,r]=w.useState(null),[o,l]=w.useState("all"),d=w.useCallback(()=>{t(n.getStaleClosureTrackingInfo())},[n]);if(w.useEffect(()=>{d();const v=setInterval(d,2e3);return()=>clearInterval(v)},[d]),!e)return a.jsx("div",{className:"g7dt-empty-state",children:"로딩 중..."});const{warnings:u,stats:f}=e,g=u.filter(v=>o==="all"?!0:v.severity===o),h=s?u.find(v=>v.id===s):null,b=v=>{switch(v){case"error":return"❌";case"warning":return"⚠️";default:return"❓"}},y=v=>{switch(v){case"state-changed-during-async":return"⏳";case"captured-in-callback":return"📸";case"stale-in-handler":return"🔄";default:return"❓"}};return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"Stale Closure 통계"}),a.jsxs("div",{className:"g7dt-stats-grid-3",children:[a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-2xl g7dt-font-bold g7dt-text-yellow",children:f.totalWarnings||0}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"총 경고"})]}),a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-2xl g7dt-font-bold g7dt-text-red",children:f.warningsBySeverity?.error||0}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"에러"})]}),a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-2xl g7dt-font-bold g7dt-text-orange",children:f.warningsBySeverity?.warning||0}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"경고"})]})]})]}),f.warningsByType&&Object.keys(f.warningsByType).length>0&&a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"타입별 분포"}),a.jsx("div",{className:"g7dt-space-y-2",children:Object.entries(f.warningsByType).map(([v,x])=>a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-text-xs",children:[a.jsxs("span",{className:"g7dt-text-muted",children:[y(v)," ",v]}),a.jsx("span",{className:"g7dt-text-white g7dt-font-mono",children:x})]},v))})]}),a.jsx("div",{className:"g7dt-card",children:a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{className:"g7dt-text-xs g7dt-text-muted",children:"심각도:"}),a.jsxs("select",{value:o,onChange:v=>l(v.target.value),className:"g7dt-select",children:[a.jsx("option",{value:"all",children:"전체"}),a.jsx("option",{value:"error",children:"에러"}),a.jsx("option",{value:"warning",children:"경고"})]}),a.jsxs("span",{className:"g7dt-text-xs g7dt-text-muted g7dt-ml-auto",children:[g.length,"개 표시"]})]})}),a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"Stale Closure 경고"}),g.length===0?a.jsx("div",{className:"g7dt-empty-state g7dt-text-green",children:"✅ Stale Closure 경고가 없습니다"}):a.jsx("div",{className:"g7dt-space-y-2 g7dt-max-h-60 g7dt-overflow-y-auto",children:g.slice().reverse().map(v=>a.jsxs("div",{className:`g7dt-list-item g7dt-cursor-pointer ${s===v.id?"g7dt-selected":""}`,onClick:()=>r(s===v.id?null:v.id),children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{children:b(v.severity)}),a.jsx("span",{children:y(v.type)}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-white g7dt-truncate",children:v.location}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-muted g7dt-ml-auto",children:new Date(v.timestamp).toLocaleTimeString()})]}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mt-1 g7dt-truncate",children:v.statePath})]},v.id))})]}),h&&a.jsxs("div",{className:"g7dt-card g7dt-border-yellow",children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:[b(h.severity)," 경고 상세"]}),a.jsxs("div",{className:"g7dt-space-y-3",children:[a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"위치"}),a.jsx("div",{className:"g7dt-text-sm g7dt-text-white g7dt-mono",children:h.location})]}),a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"타입"}),a.jsxs("div",{className:"g7dt-text-sm g7dt-text-white",children:[y(h.type)," ",h.type]})]}),a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"상태 경로"}),a.jsx("div",{className:"g7dt-text-sm g7dt-text-yellow g7dt-mono",children:h.statePath})]}),a.jsxs("div",{className:"g7dt-grid-2 g7dt-gap-3",children:[a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"캡처된 값"}),a.jsx("pre",{className:"g7dt-code-block g7dt-text-red",children:JSON.stringify(h.capturedValue,null,2)})]}),a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"현재 값"}),a.jsx("pre",{className:"g7dt-code-block g7dt-text-green",children:JSON.stringify(h.currentValue,null,2)})]})]}),a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"시간 차이"}),a.jsxs("div",{className:"g7dt-text-sm g7dt-text-white",children:[h.timeDiff,"ms"]})]}),h.suggestion&&a.jsxs("div",{className:"g7dt-bg-blue-dark g7dt-p-2 g7dt-rounded",children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-blue",children:"💡 제안"}),a.jsx("div",{className:"g7dt-text-sm g7dt-text-white g7dt-mt-1",children:h.suggestion})]})]})]})]})},zI=({devTools:n})=>{const[e,t]=w.useState(null),[s,r]=w.useState(null),[o,l]=w.useState("all"),d=w.useCallback(()=>{t(n.getNestedContextTrackingInfo())},[n]);if(w.useEffect(()=>{d();const v=setInterval(d,2e3);return()=>clearInterval(v)},[d]),!e)return a.jsx("div",{className:"g7dt-empty-state",children:"로딩 중..."});const{contexts:u,stats:f}=e,g=u.filter(v=>o==="all"?!0:v.componentType===o),h=s?u.find(v=>v.id===s):null,b=v=>{switch(v){case"expandChildren":return"📂";case"cellChildren":return"📊";case"iteration":return"🔄";case"modal":return"🪟";case"slot":return"🔲";default:return"❓"}},y=v=>"│".repeat(Math.max(0,v-1))+(v>0?"├─":"");return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"Nested Context 통계"}),a.jsxs("div",{className:"g7dt-stats-grid-3",children:[a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-2xl g7dt-font-bold g7dt-text-blue",children:f.totalContexts||0}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"총 컨텍스트"})]}),a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-2xl g7dt-font-bold g7dt-text-purple",children:f.maxDepth||0}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"최대 깊이"})]}),a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-2xl g7dt-font-bold g7dt-text-red",children:f.failedAccessCount||0}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"접근 오류"})]})]})]}),f.byType&&Object.keys(f.byType).length>0&&a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"타입별 분포"}),a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-3",children:Object.entries(f.byType).map(([v,x])=>a.jsxs("div",{className:`g7dt-badge g7dt-cursor-pointer ${o===v?"g7dt-badge-selected":""}`,onClick:()=>l(o===v?"all":v),children:[b(v)," ",v,": ",x]},v))})]}),a.jsx("div",{className:"g7dt-card",children:a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{className:"g7dt-text-xs g7dt-text-muted",children:"타입:"}),a.jsxs("select",{value:o,onChange:v=>l(v.target.value),className:"g7dt-select",children:[a.jsx("option",{value:"all",children:"전체"}),a.jsx("option",{value:"expandChildren",children:"expandChildren"}),a.jsx("option",{value:"cellChildren",children:"cellChildren"}),a.jsx("option",{value:"iteration",children:"iteration"}),a.jsx("option",{value:"modal",children:"modal"}),a.jsx("option",{value:"slot",children:"slot"})]}),a.jsxs("span",{className:"g7dt-text-xs g7dt-text-muted g7dt-ml-auto",children:[g.length,"개 표시"]})]})}),a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"컨텍스트 목록"}),g.length===0?a.jsx("div",{className:"g7dt-empty-state",children:"추적된 Nested Context가 없습니다"}):a.jsx("div",{className:"g7dt-space-y-2 g7dt-max-h-60 g7dt-overflow-y-auto",children:g.slice().reverse().map(v=>{const x=v.accessAttempts?.some(_=>!_.found),S=v.mergedContext?.all||[];return a.jsxs("div",{className:`g7dt-list-item g7dt-cursor-pointer ${s===v.id?"g7dt-selected":""} ${x?"g7dt-border-red":""}`,onClick:()=>r(s===v.id?null:v.id),children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{className:"g7dt-text-muted g7dt-mono g7dt-text-xs",children:y(v.depth)}),a.jsx("span",{children:b(v.componentType)}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-white",children:v.componentId||v.componentType}),x&&a.jsx("span",{className:"g7dt-text-red g7dt-text-xs",children:"⚠️ 오류"}),a.jsxs("span",{className:"g7dt-text-xs g7dt-text-muted g7dt-ml-auto",children:["깊이: ",v.depth]})]}),a.jsxs("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mt-1",children:["변수: ",S.slice(0,5).join(", "),S.length>5&&"..."]})]},v.id)})})]}),h&&a.jsxs("div",{className:"g7dt-card g7dt-border-blue",children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:[b(h.componentType)," 컨텍스트 상세"]}),a.jsxs("div",{className:"g7dt-space-y-3",children:[a.jsxs("div",{className:"g7dt-grid-2 g7dt-gap-3",children:[a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"타입"}),a.jsx("div",{className:"g7dt-text-sm g7dt-text-white",children:h.componentType})]}),a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"깊이"}),a.jsx("div",{className:"g7dt-text-sm g7dt-text-white",children:h.depth})]})]}),h.componentId&&a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"컴포넌트 ID"}),a.jsx("div",{className:"g7dt-text-sm g7dt-text-blue g7dt-mono",children:h.componentId})]}),h.parentId&&a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"부모 컨텍스트"}),a.jsx("div",{className:"g7dt-text-sm g7dt-text-purple g7dt-mono",children:h.parentId})]}),a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mb-2",children:"사용 가능한 변수"}),a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-1",children:(h.mergedContext?.all||[]).map(v=>a.jsx("span",{className:"g7dt-badge g7dt-badge-blue g7dt-text-xs",children:v},v))})]}),h.ownContext?.added&&h.ownContext.added.length>0&&a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mb-2",children:"추가된 변수 (이 컨텍스트에서)"}),a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-1",children:h.ownContext.added.map(v=>a.jsxs("span",{className:"g7dt-badge g7dt-badge-green g7dt-text-xs",children:["+ ",v]},v))})]}),h.accessAttempts&&h.accessAttempts.length>0&&a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mb-2",children:"접근 시도"}),a.jsx("div",{className:"g7dt-space-y-1",children:h.accessAttempts.slice(0,10).map((v,x)=>a.jsxs("div",{className:`g7dt-flex g7dt-justify-between g7dt-text-xs ${v.found?"":"g7dt-text-red"}`,children:[a.jsx("span",{className:"g7dt-mono",children:v.path}),a.jsx("span",{children:v.found?"✓":"✕"})]},x))})]})]})]})]})},PI=({devTools:n})=>{const[e,t]=w.useState(null),[s,r]=w.useState(null),[o,l]=w.useState(null),[d,u]=w.useState("modals"),f=w.useCallback(()=>{t(n.getModalStateScopeTrackingInfo())},[n]);if(w.useEffect(()=>{f();const j=setInterval(f,2e3);return()=>clearInterval(j)},[f]),!e)return a.jsx("div",{className:"g7dt-empty-state",children:"로딩 중..."});const{modals:g,issues:h,relations:b,changeLogs:y,stats:v}=e,x=s?g.find(j=>j.modalId===s):null,S=o?h.find(j=>j.id===o):null,_=j=>{switch(j){case"isolated":return"🔒";case"shared":return"🔓";case"inherited":return"📥";default:return"❓"}},A=j=>{switch(j){case"state-leakage":return"💧";case"isolation-violation":return"🔓";case"parent-mutation":return"👆";case"orphaned-state":return"👻";case"scope-mismatch":return"🔀";case"cleanup-failure":return"🧹";case"missing-definition":return"🚫";default:return"❓"}},C=j=>{switch(j){case"error":return"❌";case"warning":return"⚠️";default:return"❓"}};return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"모달 상태 스코프 통계"}),a.jsxs("div",{className:"g7dt-stats-grid-3",children:[a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-2xl g7dt-font-bold g7dt-text-blue",children:v.totalModals}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"총 모달"})]}),a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-2xl g7dt-font-bold g7dt-text-green",children:v.openModals}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"열린 모달"})]}),a.jsxs("div",{className:"g7dt-text-center",children:[a.jsx("div",{className:"g7dt-text-2xl g7dt-font-bold g7dt-text-red",children:v.totalIssues}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"이슈"})]})]})]}),a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"스코프별 / 이슈별"}),a.jsxs("div",{className:"g7dt-grid-2 g7dt-gap-4",children:[a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mb-2",children:"스코프 타입"}),a.jsx("div",{className:"g7dt-space-y-1",children:Object.entries(v.byScope).map(([j,E])=>a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-text-xs",children:[a.jsxs("span",{children:[_(j)," ",j]}),a.jsx("span",{className:"g7dt-font-mono",children:E})]},j))})]}),a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mb-2",children:"이슈 타입"}),a.jsxs("div",{className:"g7dt-space-y-1",children:[Object.entries(v.issuesByType).filter(([j,E])=>E>0).map(([j,E])=>a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-text-xs",children:[a.jsxs("span",{children:[A(j)," ",j]}),a.jsx("span",{className:"g7dt-font-mono g7dt-text-red",children:E})]},j)),Object.values(v.issuesByType).every(j=>j===0)&&a.jsx("div",{className:"g7dt-text-xs g7dt-text-green",children:"✅ 이슈 없음"})]})]})]})]}),a.jsx("div",{className:"g7dt-card",children:a.jsxs("div",{className:"g7dt-flex g7dt-gap-2",children:[a.jsxs("button",{className:`g7dt-tab-button ${d==="modals"?"g7dt-tab-active":""}`,onClick:()=>u("modals"),children:["🪟 모달 (",g.length,")"]}),a.jsxs("button",{className:`g7dt-tab-button ${d==="issues"?"g7dt-tab-active":""}`,onClick:()=>u("issues"),children:["⚠️ 이슈 (",h.length,")"]}),a.jsxs("button",{className:`g7dt-tab-button ${d==="logs"?"g7dt-tab-active":""}`,onClick:()=>u("logs"),children:["📝 로그 (",y.length,")"]})]})}),d==="modals"&&a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"모달 목록"}),g.length===0?a.jsx("div",{className:"g7dt-empty-state",children:"추적된 모달이 없습니다"}):a.jsx("div",{className:"g7dt-space-y-2 g7dt-max-h-60 g7dt-overflow-y-auto",children:g.map(j=>{const E=h.some(T=>T.modalId===j.modalId);return a.jsx("div",{className:`g7dt-list-item g7dt-cursor-pointer ${s===j.modalId?"g7dt-selected":""} ${E?"g7dt-border-red":""}`,onClick:()=>r(s===j.modalId?null:j.modalId),children:a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{children:j.closedAt===null?"📭":"📪"}),a.jsx("span",{children:_(j.scopeType)}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-white",children:j.modalName}),E&&a.jsx("span",{className:"g7dt-text-red",children:"⚠️"}),a.jsxs("span",{className:"g7dt-text-xs g7dt-text-muted g7dt-ml-auto",children:["변경: ",j.stateChangeCount]})]})},j.modalId)})})]}),d==="issues"&&a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"이슈 목록"}),h.length===0?a.jsx("div",{className:"g7dt-empty-state g7dt-text-green",children:"✅ 모달 상태 이슈가 없습니다"}):a.jsx("div",{className:"g7dt-space-y-2 g7dt-max-h-60 g7dt-overflow-y-auto",children:h.slice().reverse().map(j=>a.jsxs("div",{className:`g7dt-list-item g7dt-cursor-pointer ${o===j.id?"g7dt-selected":""}`,onClick:()=>l(o===j.id?null:j.id),children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{children:C(j.severity)}),a.jsx("span",{children:A(j.type)}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-white",children:j.modalName}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-muted g7dt-ml-auto",children:new Date(j.timestamp).toLocaleTimeString()})]}),a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mt-1 g7dt-truncate",children:j.description})]},j.id))})]}),d==="logs"&&a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"상태 변경 로그"}),y.length===0?a.jsx("div",{className:"g7dt-empty-state",children:"상태 변경 로그가 없습니다"}):a.jsx("div",{className:"g7dt-space-y-2 g7dt-max-h-60 g7dt-overflow-y-auto",children:y.slice().reverse().slice(0,50).map(j=>a.jsxs("div",{className:`g7dt-list-item ${j.violatesIsolation?"g7dt-border-red":""}`,children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2",children:[a.jsx("span",{className:"g7dt-text-xs g7dt-text-white",children:j.modalName}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-blue g7dt-mono",children:j.stateKey}),j.violatesIsolation&&a.jsx("span",{className:"g7dt-text-red",children:"⚠️ 격리 위반"}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-muted g7dt-ml-auto",children:new Date(j.timestamp).toLocaleTimeString()})]}),a.jsxs("div",{className:"g7dt-flex g7dt-gap-2 g7dt-text-xs g7dt-mt-1",children:[a.jsx("span",{className:"g7dt-text-red g7dt-truncate",style:{maxWidth:"45%"},children:JSON.stringify(j.previousValue)}),a.jsx("span",{className:"g7dt-text-muted",children:"→"}),a.jsx("span",{className:"g7dt-text-green g7dt-truncate",style:{maxWidth:"45%"},children:JSON.stringify(j.newValue)})]})]},j.id))})]}),x&&d==="modals"&&a.jsxs("div",{className:"g7dt-card g7dt-border-blue",children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:[_(x.scopeType)," 모달 상세: ",x.modalName]}),a.jsxs("div",{className:"g7dt-space-y-3",children:[a.jsxs("div",{className:"g7dt-grid-2 g7dt-gap-3",children:[a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"스코프"}),a.jsxs("div",{className:"g7dt-text-sm g7dt-text-white",children:[_(x.scopeType)," ",x.scopeType]})]}),a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"상태"}),a.jsx("div",{className:"g7dt-text-sm g7dt-text-white",children:x.closedAt===null?"📭 열림":"📪 닫힘"})]})]}),x.parentModalId&&a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"부모 모달"}),a.jsx("div",{className:"g7dt-text-sm g7dt-text-purple g7dt-mono",children:x.parentModalId})]}),a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"상태 변경 횟수"}),a.jsx("div",{className:"g7dt-text-sm g7dt-text-white",children:x.stateChangeCount})]}),x.isolatedStateKeys.length>0&&a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mb-1",children:"격리된 상태 키"}),a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-1",children:x.isolatedStateKeys.map(j=>a.jsxs("span",{className:"g7dt-badge g7dt-badge-red g7dt-text-xs",children:["🔒 ",j]},j))})]}),x.sharedStateKeys.length>0&&a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted g7dt-mb-1",children:"공유된 상태 키"}),a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-1",children:x.sharedStateKeys.map(j=>a.jsxs("span",{className:"g7dt-badge g7dt-badge-blue g7dt-text-xs",children:["🔓 ",j]},j))})]})]})]}),S&&d==="issues"&&a.jsxs("div",{className:"g7dt-card g7dt-border-red",children:[a.jsxs("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:[C(S.severity)," 이슈 상세"]}),a.jsxs("div",{className:"g7dt-space-y-3",children:[a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"타입"}),a.jsxs("div",{className:"g7dt-text-sm g7dt-text-white",children:[A(S.type)," ",S.type]})]}),a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"설명"}),a.jsx("div",{className:"g7dt-text-sm g7dt-text-white",children:S.description})]}),S.affectedStateKeys.length>0&&a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"영향 받는 상태 키"}),a.jsx("div",{className:"g7dt-flex g7dt-flex-wrap g7dt-gap-1 g7dt-mt-1",children:S.affectedStateKeys.map(j=>a.jsx("span",{className:"g7dt-badge g7dt-text-xs",children:j},j))})]}),S.leakedValue!==void 0&&a.jsxs("div",{children:[a.jsx("div",{className:"g7dt-text-xs g7dt-text-muted",children:"유출된 값"}),a.jsx("pre",{className:"g7dt-code-block g7dt-text-red",children:JSON.stringify(S.leakedValue,null,2)})]})]})]}),b.length>0&&a.jsxs("div",{className:"g7dt-card",children:[a.jsx("h3",{className:"g7dt-text-sm g7dt-font-bold g7dt-mb-3",children:"모달 관계"}),a.jsx("div",{className:"g7dt-space-y-2",children:b.map((j,E)=>a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-gap-2 g7dt-text-xs",children:[a.jsx("span",{className:"g7dt-text-purple",children:j.parentModalId}),a.jsx("span",{className:"g7dt-text-muted",children:"→"}),a.jsx("span",{className:"g7dt-text-blue",children:j.childModalId}),a.jsx("span",{className:"g7dt-badge g7dt-text-xs g7dt-ml-auto",children:j.relationType})]},E))})]})]})},BI=({devTools:n})=>{const[e,t]=w.useState("definitions"),[s,r]=w.useState(null),[o,l]=w.useState(""),d=w.useCallback(()=>{n&&r(n.getNamedActionTrackingInfo())},[n]);if(w.useEffect(()=>{d();const v=setInterval(d,2e3);return()=>clearInterval(v)},[d]),!s)return a.jsx("div",{className:"g7dt-empty-message g7dt-py-4",children:"데이터 로딩 중..."});const{definitions:u,refLogs:f,stats:g}=s,h=Object.keys(u),b=h.filter(v=>!o||v.toLowerCase().includes(o.toLowerCase())||u[v]?.handler?.toLowerCase().includes(o.toLowerCase())),y=f.filter(v=>!o||v.actionRefName.toLowerCase().includes(o.toLowerCase())||v.resolvedHandler.toLowerCase().includes(o.toLowerCase()));return a.jsxs("div",{className:"g7dt-space-y-4",children:[a.jsxs("div",{className:"g7dt-grid g7dt-grid-cols-3 g7dt-gap-2",children:[a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value",children:g.totalDefinitions}),a.jsx("div",{className:"g7dt-stat-label",children:"정의"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value",children:g.totalRefs}),a.jsx("div",{className:"g7dt-stat-label",children:"참조"})]}),a.jsxs("div",{className:"g7dt-stat-card",children:[a.jsx("div",{className:"g7dt-stat-value",style:{color:g.unusedDefinitions.length>0?"#f59e0b":"#10b981"},children:g.unusedDefinitions.length}),a.jsx("div",{className:"g7dt-stat-label",children:"미사용"})]})]}),a.jsxs("div",{className:"g7dt-flex g7dt-gap-2",children:[a.jsxs("button",{onClick:()=>t("definitions"),className:e==="definitions"?"g7dt-filter-btn g7dt-filter-active":"g7dt-filter-btn",children:["정의 목록 (",h.length,")"]}),a.jsxs("button",{onClick:()=>t("refs"),className:e==="refs"?"g7dt-filter-btn g7dt-filter-active":"g7dt-filter-btn",children:["참조 이력 (",f.length,")"]}),a.jsx("button",{onClick:d,className:"g7dt-filter-btn",title:"새로고침",children:"↻"})]}),a.jsx("input",{type:"text",placeholder:e==="definitions"?"액션 이름 검색...":"actionRef 검색...",value:o,onChange:v=>l(v.target.value),className:"g7dt-input g7dt-w-full"}),e==="definitions"&&a.jsx("div",{className:"g7dt-space-y-1",children:b.length===0?a.jsx("div",{className:"g7dt-empty-message g7dt-py-4",children:h.length===0?"정의된 named_actions가 없습니다":"검색 결과 없음"}):b.map(v=>{const x=u[v],S=g.refCountByName[v]||0,_=g.unusedDefinitions.includes(v);return a.jsxs("div",{className:"g7dt-card",style:{borderLeft:_?"3px solid #f59e0b":"3px solid #10b981"},children:[a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center",children:[a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-font-bold",children:v}),a.jsxs("span",{className:"g7dt-text-muted g7dt-ml-2",children:["→ ",x.handler]})]}),a.jsxs("span",{className:"g7dt-badge",title:"참조 횟수",children:[S,"회"]})]}),x.params&&a.jsxs("details",{className:"g7dt-mt-1",children:[a.jsx("summary",{className:"g7dt-text-xs g7dt-text-muted g7dt-cursor-pointer",children:"params"}),a.jsx("pre",{className:"g7dt-pre g7dt-text-xs g7dt-mt-1",style:{maxHeight:"200px",overflow:"auto"},children:JSON.stringify(x.params,null,2)})]}),_&&a.jsx("div",{className:"g7dt-text-xs",style:{color:"#f59e0b",marginTop:"4px"},children:"⚠ 미사용 정의"})]},v)})}),e==="refs"&&a.jsx("div",{className:"g7dt-space-y-1",children:y.length===0?a.jsx("div",{className:"g7dt-empty-message g7dt-py-4",children:f.length===0?"actionRef 해석 이력이 없습니다":"검색 결과 없음"}):[...y].reverse().map(v=>a.jsx("div",{className:"g7dt-card",children:a.jsxs("div",{className:"g7dt-flex g7dt-justify-between g7dt-items-center",children:[a.jsxs("div",{children:[a.jsx("span",{className:"g7dt-font-bold",children:v.actionRefName}),a.jsxs("span",{className:"g7dt-text-muted g7dt-ml-2",children:["→ ",v.resolvedHandler]})]}),a.jsx("span",{className:"g7dt-text-xs g7dt-text-muted",children:new Date(v.timestamp).toLocaleTimeString()})]})},v.id))})]})},HI=()=>{w.useEffect(()=>{pI()},[]);const n=w.useRef(o_()),[e,t]=w.useState(n.current.isOpen??!1),[s,r]=w.useState(!1),[o,l]=w.useState("state"),[d,u]=w.useState({_global:{},_local:{},_computed:{}}),[f,g]=w.useState([]),[h,b]=w.useState({hits:0,misses:0,entries:0,hitRate:0}),[y,v]=w.useState(!1),[x,S]=w.useState(n.current.position??{x:-1,y:-1}),[_,A]=w.useState(!1),C=w.useRef(null),j=w.useRef(null),[E,T]=w.useState(n.current.size??{width:gI,height:hI}),[D,I]=w.useState(!1),[W,z]=w.useState(null),H=w.useRef(null),[G,F]=w.useState(!1),Z=w.useRef(null),Y=jr.getInstance(),U=e_();w.useEffect(()=>{if(x.x===-1&&x.y===-1){const V=window.innerWidth-E.width-16;S({x:V,y:16})}},[x,E.width]),w.useEffect(()=>{if(x.x===-1&&x.y===-1||_||D)return;const V=setTimeout(()=>{a_({position:x,size:E})},300);return()=>clearTimeout(V)},[x,E,_,D]),w.useEffect(()=>{a_({isOpen:e})},[e]);const B=w.useCallback(V=>{V.target.tagName!=="BUTTON"&&(A(!0),C.current={x:V.clientX,y:V.clientY,posX:x.x,posY:x.y},V.preventDefault())},[x]);w.useEffect(()=>{if(!_)return;const V=se=>{if(!C.current)return;const re=se.clientX-C.current.x,pe=se.clientY-C.current.y;let je=C.current.posX+re,me=C.current.posY+pe;const ce=window.innerWidth-E.width,be=window.innerHeight-E.height;je=Math.max(0,Math.min(je,ce)),me=Math.max(0,Math.min(me,be)),S({x:je,y:me})},ee=()=>{A(!1),C.current=null};return document.addEventListener("mousemove",V),document.addEventListener("mouseup",ee),()=>{document.removeEventListener("mousemove",V),document.removeEventListener("mouseup",ee)}},[_,E.width,E.height]);const te=w.useCallback(V=>ee=>{ee.preventDefault(),ee.stopPropagation(),I(!0),z(V),H.current={x:ee.clientX,y:ee.clientY,width:E.width,height:E.height,posX:x.x,posY:x.y}},[E,x]);w.useEffect(()=>{if(!D||!W)return;const V=se=>{if(!H.current)return;const re=se.clientX-H.current.x,pe=se.clientY-H.current.y;let je=H.current.width,me=H.current.height,ce=H.current.posX,be=H.current.posY;if(W.includes("e")&&(je=Math.max(n_,H.current.width+re)),W.includes("w")){const Be=Math.min(re,H.current.width-n_);je=H.current.width-Be,ce=H.current.posX+Be}if(W.includes("s")&&(me=Math.max(s_,H.current.height+pe)),W.includes("n")){const Be=Math.min(pe,H.current.height-s_);me=H.current.height-Be,be=H.current.posY+Be}je=Math.min(je,window.innerWidth-ce),me=Math.min(me,window.innerHeight-be),ce=Math.max(0,ce),be=Math.max(0,be),T({width:je,height:me}),S({x:ce,y:be})},ee=()=>{I(!1),z(null),H.current=null};return document.addEventListener("mousemove",V),document.addEventListener("mouseup",ee),()=>{document.removeEventListener("mousemove",V),document.removeEventListener("mouseup",ee)}},[D,W]);const q=w.useCallback(()=>{G?(Z.current&&(S(Z.current.position),T(Z.current.size)),F(!1)):(Z.current={position:x,size:E},S({x:0,y:0}),T({width:window.innerWidth,height:window.innerHeight}),F(!0))},[G,x,E]),M=w.useCallback(()=>{Y.isEnabled()&&(u(Y.getState()),g(Y.getActionHistory()),b(Y.getCacheStats()),v(U.isConnected()))},[Y,U]);w.useEffect(()=>{const V=ee=>{ee.ctrlKey&&ee.shiftKey&&ee.key==="G"&&(ee.preventDefault(),t(se=>!se))};return window.addEventListener("keydown",V),()=>window.removeEventListener("keydown",V)},[]),w.useEffect(()=>{if(!e||!Y.isEnabled())return;M();const V=Y.watchState("*",()=>{u(Y.getState())}),ee=Y.watchActions(()=>{g(Y.getActionHistory()),b(Y.getCacheStats())}),se=setInterval(M,5e3);return()=>{V(),ee(),clearInterval(se)}},[e,Y,M]);const N=async()=>{try{const V=await U.dumpState();console.log("[G7DevTools] 상태 덤프 완료:",V),v(!0)}catch(V){console.error("[G7DevTools] 상태 덤프 실패:",V),v(!1)}};return Y.isEnabled()?e?s?a.jsx("div",{className:"g7dt-minimized",children:a.jsxs("div",{className:"g7dt-minimized-content",children:[a.jsx("span",{className:"g7dt-font-bold g7dt-text-sm",children:"G7 DevTools"}),a.jsx("button",{onClick:()=>r(!1),className:"g7dt-btn g7dt-text-xs",title:"확장",children:"▲"}),a.jsx("button",{onClick:()=>t(!1),className:"g7dt-btn g7dt-text-xs",children:"✕"})]})}):a.jsxs("div",{ref:j,className:`g7dt-panel ${G?"maximized":""} ${D?"g7dt-resizing":""}`,style:{left:`${x.x>=0?x.x:0}px`,top:`${x.y>=0?x.y:0}px`,width:`${E.width}px`,height:`${E.height}px`},children:[!G&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"g7dt-resize-handle g7dt-resize-corner g7dt-resize-nw",onMouseDown:te("nw")}),a.jsx("div",{className:"g7dt-resize-handle g7dt-resize-corner g7dt-resize-ne",onMouseDown:te("ne")}),a.jsx("div",{className:"g7dt-resize-handle g7dt-resize-corner g7dt-resize-sw",onMouseDown:te("sw")}),a.jsx("div",{className:"g7dt-resize-handle g7dt-resize-corner g7dt-resize-se",onMouseDown:te("se")}),a.jsx("div",{className:"g7dt-resize-handle g7dt-resize-edge-h g7dt-resize-n",onMouseDown:te("n")}),a.jsx("div",{className:"g7dt-resize-handle g7dt-resize-edge-h g7dt-resize-s",onMouseDown:te("s")}),a.jsx("div",{className:"g7dt-resize-handle g7dt-resize-edge-v g7dt-resize-w",onMouseDown:te("w")}),a.jsx("div",{className:"g7dt-resize-handle g7dt-resize-edge-v g7dt-resize-e",onMouseDown:te("e")})]}),a.jsxs("div",{className:`g7dt-header ${_?"dragging":""}`,onMouseDown:B,children:[a.jsxs("div",{className:"g7dt-header-left",children:[a.jsx("span",{className:"g7dt-header-title",children:"G7 DevTools"}),a.jsx("span",{className:`g7dt-header-badge ${y?"connected":""}`,title:y?"서버 덤프 성공":"서버에 덤프되지 않음 (덤프 버튼 클릭)",children:y?"덤프 완료":"로컬 모드"})]}),a.jsxs("div",{className:"g7dt-header-right",children:[a.jsx("button",{onClick:N,className:"g7dt-btn g7dt-btn-primary",title:"서버로 상태 덤프",children:"덤프"}),a.jsx("button",{onClick:M,className:"g7dt-btn",title:"새로고침",children:"↻"}),a.jsx("button",{onClick:q,className:"g7dt-btn",title:G?"복원":"최대화",children:G?"❐":"□"}),a.jsx("button",{onClick:()=>r(!0),className:"g7dt-btn",title:"최소화",children:"▼"}),a.jsx("button",{onClick:()=>t(!1),className:"g7dt-btn",children:"✕"})]})]}),a.jsx("div",{className:"g7dt-tabs",children:Object.keys(t_).map(V=>a.jsx("button",{onClick:()=>l(V),className:`g7dt-tab ${o===V?"active":""}`,children:t_[V]},V))}),a.jsxs("div",{className:"g7dt-content",children:[o==="state"&&a.jsx(bI,{state:d,devTools:Y}),o==="actions"&&a.jsx(xI,{actions:f,devTools:Y}),o==="cache"&&a.jsx(vI,{stats:h,devTools:Y}),o==="diagnose"&&a.jsx(wI,{}),o==="performance"&&a.jsx(_I,{devTools:Y}),o==="lifecycle"&&a.jsx(SI,{devTools:Y}),o==="network"&&a.jsx(kI,{devTools:Y}),o==="form"&&a.jsx(CI,{devTools:Y}),o==="conditional"&&a.jsx(jI,{devTools:Y}),o==="expression"&&a.jsx(EI,{devTools:Y}),o==="handlers"&&a.jsx(RI,{devTools:Y}),o==="events"&&a.jsx(AI,{devTools:Y}),o==="datasources"&&a.jsx(TI,{devTools:Y}),o==="renders"&&a.jsx($I,{devTools:Y}),o==="styles"&&a.jsx(NI,{devTools:Y}),o==="auth"&&a.jsx(DI,{devTools:Y}),o==="logs"&&a.jsx(II,{devTools:Y}),o==="layout"&&a.jsx(LI,{devTools:Y}),o==="changedetection"&&a.jsx(OI,{devTools:Y}),o==="staleclosure"&&a.jsx(MI,{devTools:Y}),o==="nestedcontext"&&a.jsx(zI,{devTools:Y}),o==="modalscope"&&a.jsx(PI,{devTools:Y}),o==="namedactions"&&a.jsx(BI,{devTools:Y})]}),a.jsxs("div",{className:"g7dt-footer",children:[a.jsx("span",{children:"Ctrl+Shift+G 토글 | 헤더 드래그로 이동"}),a.jsxs("span",{children:["액션: ",f.length," | 캐시 히트율: ",(h.hitRate*100).toFixed(1),"%"]})]})]}):a.jsx("button",{onClick:()=>t(!0),className:"g7dt-floating-btn",title:"G7 DevTools (Ctrl+Shift+G)",children:a.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[a.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"}),a.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})]})}):e?a.jsxs("div",{className:"g7dt-disabled-notice",children:[a.jsxs("div",{className:"g7dt-flex g7dt-items-center g7dt-justify-between g7dt-mb-2",children:[a.jsx("span",{className:"g7dt-font-bold g7dt-text-yellow",children:"G7 DevTools"}),a.jsx("button",{onClick:()=>t(!1),className:"g7dt-btn",children:"✕"})]}),a.jsx("p",{className:"g7dt-text-sm g7dt-text-gray",children:"DevTools가 비활성화되어 있습니다."}),a.jsx("p",{className:"g7dt-text-xs g7dt-text-gray-dark g7dt-mt-2",children:"환경설정 > 고급 설정 > 디버그 모드를 켜세요."})]}):null},WI=["display","visibility","opacity","position","zIndex","overflow","width","height","backgroundColor","color"],si=class si{constructor(){ne(this,"enabled",!1);ne(this,"trackedComponents",new Map);ne(this,"mutationObserver",null);ne(this,"scanInterval",null);ne(this,"devTools");this.devTools=jr.getInstance()}static getInstance(){return si.instance||(si.instance=new si),si.instance}enable(){this.enabled||(this.enabled=!0,this.setupMutationObserver(),this.scanInterval=setInterval(()=>{this.scanVisibleComponents()},5e3),console.log("[StyleTracker] 스타일 추적 활성화됨"))}disable(){this.enabled&&(this.enabled=!1,this.mutationObserver&&(this.mutationObserver.disconnect(),this.mutationObserver=null),this.scanInterval&&(clearInterval(this.scanInterval),this.scanInterval=null),this.trackedComponents.clear(),console.log("[StyleTracker] 스타일 추적 비활성화됨"))}trackComponent(e,t,s){if(!this.enabled||!this.devTools.isEnabled()||!s)return;const r=this.extractClasses(s),o=this.getComputedStyles(s);this.devTools.trackComponentStyle(e,t,r,o),this.trackedComponents.set(e,{componentId:e,componentName:t,classes:r,computedStyles:o,element:new WeakRef(s),timestamp:Date.now()}),this.detectIssues(e,t,s,r,o)}untrackComponent(e){this.trackedComponents.delete(e)}scanVisibleComponents(){if(!this.enabled||!this.devTools.isEnabled())return;(this.devTools.getLifecycleInfo().mountedComponents||[]).forEach(r=>{const o=r.id,l=r.name;let d=null;if(o&&(d=document.getElementById(o)),!d&&o&&(d=document.querySelector(`[data-component-id="${o}"]`)),!d&&o&&(d=document.querySelector(`[data-editor-id="${o}"]`)),!d)return;const u=this.extractClasses(d),f=this.getComputedStyles(d);this.devTools.trackComponentStyle(o,l,u,f),this.detectIssues(o,l,d,u,f),this.trackedComponents.set(o,{componentId:o,componentName:l,classes:u,computedStyles:f,element:new WeakRef(d),timestamp:Date.now()})}),document.querySelectorAll('[data-editor-id], [id^="comp-"]').forEach(r=>{if(!(r instanceof HTMLElement))return;const o=r.getAttribute("data-editor-id")||r.id,l=r.getAttribute("data-editor-name")||r.tagName;if(!o||this.trackedComponents.has(o))return;const d=this.extractClasses(r),u=this.getComputedStyles(r);this.devTools.trackComponentStyle(o,l,d,u),this.detectIssues(o,l,r,d,u),this.trackedComponents.set(o,{componentId:o,componentName:l,classes:d,computedStyles:u,element:new WeakRef(r),timestamp:Date.now()})})}detectIssues(e,t,s,r,o){o.display==="none"&&this.addIssue({type:"invisible-element",componentId:e,componentName:t,property:"display",currentValue:"none",severity:"info",description:"요소가 display:none으로 숨겨져 있습니다",suggestion:"의도적인 숨김이 아니라면 조건부 렌더링(if)을 확인하세요"}),o.visibility==="hidden"&&this.addIssue({type:"invisible-element",componentId:e,componentName:t,property:"visibility",currentValue:"hidden",severity:"info",description:"요소가 visibility:hidden으로 숨겨져 있습니다",suggestion:"공간은 유지되지만 보이지 않습니다. 의도적인지 확인하세요"}),o.opacity==="0"&&this.addIssue({type:"invisible-element",componentId:e,componentName:t,property:"opacity",currentValue:"0",severity:"warning",description:"요소가 opacity:0으로 투명합니다",suggestion:"애니메이션 상태가 아니라면 스타일을 확인하세요"}),(o.width==="0px"||o.height==="0px")&&this.addIssue({type:"invisible-element",componentId:e,componentName:t,property:o.width==="0px"?"width":"height",currentValue:"0px",severity:"warning",description:"요소의 크기가 0입니다",suggestion:"컨텐츠가 있는데 크기가 0이라면 레이아웃 문제일 수 있습니다"}),o.overflow==="hidden"&&(s.scrollWidth>s.clientWidth||s.scrollHeight>s.clientHeight)&&this.addIssue({type:"overflow-hidden",componentId:e,componentName:t,property:"overflow",currentValue:"hidden",severity:"warning",description:"컨텐츠가 overflow:hidden으로 잘리고 있습니다",suggestion:"overflow-auto 또는 컨테이너 크기를 확인하세요"});const l=r.some(y=>y.startsWith("dark:"));r.some(y=>(y.startsWith("bg-white")||y.startsWith("bg-gray-"))&&!y.startsWith("dark:"))&&!l&&this.addIssue({type:"dark-mode-missing",componentId:e,componentName:t,property:"className",currentValue:r.filter(y=>y.startsWith("bg-")).join(" "),severity:"info",description:"다크 모드 변형 클래스가 누락되었을 수 있습니다",suggestion:"bg-white 사용 시 dark:bg-gray-800 등을 함께 지정하세요"});const u=parseInt(o.zIndex,10);!isNaN(u)&&u>50&&o.position!=="static"&&this.addIssue({type:"z-index-conflict",componentId:e,componentName:t,property:"z-index",currentValue:o.zIndex,severity:"info",description:`높은 z-index(${u})가 설정되어 있습니다`,suggestion:"z-index 충돌을 피하려면 10, 20, 30, 40, 50 단위를 사용하세요"});const f=r.some(y=>y.startsWith("sm:")||y.startsWith("md:")||y.startsWith("lg:")||y.startsWith("xl:")),g=r.includes("hidden"),h=r.includes("portable:block")||r.includes("portable:flex"),b=r.includes("desktop:block")||r.includes("desktop:flex");g&&!f&&!h&&!b&&this.addIssue({type:"responsive-issue",componentId:e,componentName:t,property:"className",currentValue:"hidden",severity:"info",description:"반응형 표시 클래스 없이 hidden이 설정되어 있습니다",suggestion:"조건에 따라 표시하려면 sm:block, desktop:flex 등을 추가하세요"})}addIssue(e){this.devTools.addStyleIssue(e)}extractClasses(e){return(e.getAttribute("class")||"").split(/\s+/).filter(Boolean)}getComputedStyles(e){const t=window.getComputedStyle(e),s={};for(const r of WI)s[r]=t.getPropertyValue(r.replace(/([A-Z])/g,"-$1").toLowerCase());return s}setupMutationObserver(){typeof MutationObserver>"u"||(this.mutationObserver=new MutationObserver(e=>{let t=!1;for(const s of e){if(s.type==="childList"&&s.addedNodes.length>0){t=!0;break}if(s.type==="attributes"&&(s.attributeName==="class"||s.attributeName==="style")){t=!0;break}}t&&setTimeout(()=>this.scanVisibleComponents(),100)}),this.mutationObserver.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["class","style"]}))}fullScan(){return this.scanVisibleComponents(),this.devTools.getStyleValidationInfo().issues}getIssues(){return this.devTools.getStyleValidationInfo().issues}getIssuesForComponent(e){return this.getIssues().filter(t=>t.componentId===e)}clear(){this.trackedComponents.clear(),this.devTools.clearStyleValidationData()}};ne(si,"instance",null);let Wh=si;function UI(){return Wh.getInstance()}function qI(n={}){const{checked:e,value:t,name:s,type:r="checkbox"}=n,l=t!==void 0?t:r==="checkbox"||r==="radio"?e??!1:String(e??""),d={checked:e??!1,value:l,name:s??"",type:r};return{target:d,currentTarget:d,preventDefault:()=>{},stopPropagation:()=>{},nativeEvent:new Event("change"),bubbles:!0,cancelable:!0,defaultPrevented:!1,eventPhase:Event.AT_TARGET,isTrusted:!1,timeStamp:Date.now(),type:"change",isDefaultPrevented:()=>!1,isPropagationStopped:()=>!1,persist:()=>{}}}function FI(n={}){const{button:e=0,clientX:t=0,clientY:s=0}=n;return{button:e,clientX:t,clientY:s,preventDefault:()=>{},stopPropagation:()=>{},nativeEvent:new MouseEvent("click"),bubbles:!0,cancelable:!0,defaultPrevented:!1,eventPhase:Event.AT_TARGET,isTrusted:!1,timeStamp:Date.now(),type:"click",isDefaultPrevented:()=>!1,isPropagationStopped:()=>!1,persist:()=>{},target:document.createElement("div"),currentTarget:document.createElement("div")}}function VI(){return{preventDefault:()=>{},stopPropagation:()=>{},nativeEvent:new Event("submit"),bubbles:!0,cancelable:!0,defaultPrevented:!1,eventPhase:Event.AT_TARGET,isTrusted:!1,timeStamp:Date.now(),type:"submit",isDefaultPrevented:()=>!1,isPropagationStopped:()=>!1,persist:()=>{},target:document.createElement("form"),currentTarget:document.createElement("form")}}function KI(n,e="keydown"){return{key:n,code:n.length===1?`Key${n.toUpperCase()}`:n,preventDefault:()=>{},stopPropagation:()=>{},nativeEvent:new KeyboardEvent(e,{key:n}),bubbles:!0,cancelable:!0,defaultPrevented:!1,eventPhase:Event.AT_TARGET,isTrusted:!1,timeStamp:Date.now(),type:e,isDefaultPrevented:()=>!1,isPropagationStopped:()=>!1,persist:()=>{},target:document.createElement("div"),currentTarget:document.createElement("div"),altKey:!1,ctrlKey:!1,metaKey:!1,shiftKey:!1,repeat:!1}}const GI={justify:/^justify-(start|end|center|between|around|evenly)$/,items:/^items-(start|end|center|baseline|stretch)$/,content:/^content-(start|end|center|between|around|evenly|stretch)$/,self:/^self-(auto|start|end|center|stretch|baseline)$/,flex:/^flex-(row|row-reverse|col|col-reverse|wrap|wrap-reverse|nowrap|1|auto|initial|none)$/,grow:/^(grow|grow-0)$/,shrink:/^(shrink|shrink-0)$/,basis:/^basis-/,order:/^(order-|-)order-/,gap:/^gap(-x|-y)?-/,gridCols:/^grid-cols-/,gridRows:/^grid-rows-/,colSpan:/^col-(span-|start-|end-)/,rowSpan:/^row-(span-|start-|end-)/,display:/^(block|inline-block|inline|flex|inline-flex|table|inline-table|table-caption|table-cell|table-column|table-column-group|table-footer-group|table-header-group|table-row-group|table-row|flow-root|grid|inline-grid|contents|list-item|hidden)$/,position:/^(static|fixed|absolute|relative|sticky)$/,inset:/^(inset|top|right|bottom|left)-/,zIndex:/^z-/,width:/^w-/,minWidth:/^min-w-/,maxWidth:/^max-w-/,height:/^h-/,minHeight:/^min-h-/,maxHeight:/^max-h-/,padding:/^p[xytblr]?-/,margin:/^-?m[xytblr]?-/,space:/^space-(x|y)-/,fontSize:/^text-(xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)$/,fontWeight:/^font-(thin|extralight|light|normal|medium|semibold|bold|extrabold|black)$/,fontStyle:/^(italic|not-italic)$/,fontFamily:/^font-(sans|serif|mono)/,textAlign:/^text-(left|center|right|justify|start|end)$/,textColor:/^text-(inherit|current|transparent|black|white|slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-/,textDecoration:/^(underline|overline|line-through|no-underline)$/,textTransform:/^(uppercase|lowercase|capitalize|normal-case)$/,lineHeight:/^leading-/,letterSpacing:/^tracking-/,textOverflow:/^(truncate|text-ellipsis|text-clip)$/,whitespace:/^whitespace-/,wordBreak:/^break-/,bgColor:/^bg-(inherit|current|transparent|black|white|slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-/,bgGradient:/^bg-gradient-/,bgSize:/^bg-(auto|cover|contain)$/,bgPosition:/^bg-(bottom|center|left|left-bottom|left-top|right|right-bottom|right-top|top)$/,bgRepeat:/^bg-(repeat|no-repeat|repeat-x|repeat-y|repeat-round|repeat-space)$/,bgAttachment:/^bg-(fixed|local|scroll)$/,bgClip:/^bg-clip-/,bgOrigin:/^bg-origin-/,borderWidth:/^border(-[xytblr])?(-0|-2|-4|-8)?$/,borderColor:/^border-(inherit|current|transparent|black|white|slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-/,borderStyle:/^border-(solid|dashed|dotted|double|hidden|none)$/,borderRadius:/^rounded(-[tblrse]{1,2})?(-none|-sm|-md|-lg|-xl|-2xl|-3xl|-full)?$/,ringWidth:/^ring(-0|-1|-2|-4|-8|-inset)?$/,ringColor:/^ring-(inherit|current|transparent|black|white|slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-/,ringOffset:/^ring-offset-/,shadow:/^shadow(-sm|-md|-lg|-xl|-2xl|-inner|-none)?$/,opacity:/^opacity-/,mixBlend:/^mix-blend-/,bgBlend:/^bg-blend-/,blur:/^blur(-none|-sm|-md|-lg|-xl|-2xl|-3xl)?$/,brightness:/^brightness-/,contrast:/^contrast-/,grayscale:/^grayscale(-0)?$/,hueRotate:/^-?hue-rotate-/,invert:/^invert(-0)?$/,saturate:/^saturate-/,sepia:/^sepia(-0)?$/,backdropBlur:/^backdrop-blur-/,backdropBrightness:/^backdrop-brightness-/,backdropContrast:/^backdrop-contrast-/,backdropGrayscale:/^backdrop-grayscale-/,backdropHueRotate:/^backdrop-hue-rotate-/,backdropInvert:/^backdrop-invert-/,backdropOpacity:/^backdrop-opacity-/,backdropSaturate:/^backdrop-saturate-/,backdropSepia:/^backdrop-sepia-/,scale:/^scale(-x|-y)?-/,rotate:/^-?rotate-/,translate:/^-?translate-[xy]-/,skew:/^-?skew-[xy]-/,transformOrigin:/^origin-/,transition:/^transition(-none|-all|-colors|-opacity|-shadow|-transform)?$/,duration:/^duration-/,ease:/^ease-(linear|in|out|in-out)$/,delay:/^delay-/,animate:/^animate-/,cursor:/^cursor-/,userSelect:/^select-/,pointerEvents:/^pointer-events-/,resize:/^resize(-none|-x|-y)?$/,scrollBehavior:/^scroll-(auto|smooth)$/,touchAction:/^touch-/,overflow:/^overflow(-x|-y)?-(auto|hidden|clip|visible|scroll)$/,overscroll:/^overscroll(-x|-y)?-(auto|contain|none)$/,visibility:/^(visible|invisible|collapse)$/,aspectRatio:/^aspect-/,columns:/^columns-/,breakAfter:/^break-after-/,breakBefore:/^break-before-/,breakInside:/^break-inside-/,boxDecorationBreak:/^box-decoration-/,boxSizing:/^box-(border|content)$/,float:/^float-(right|left|none)$/,clear:/^clear-(left|right|both|none)$/,isolation:/^(isolate|isolation-auto)$/,objectFit:/^object-(contain|cover|fill|none|scale-down)$/,objectPosition:/^object-/};function i_(n){const e=n.replace(/^(dark:|hover:|focus:|active:|disabled:|group-hover:|sm:|md:|lg:|xl:|2xl:)+/,"");for(const[t,s]of Object.entries(GI))if(s.test(e))return t;return null}function l_(n){const e=n.match(/^((dark:|hover:|focus:|active:|disabled:|group-hover:|sm:|md:|lg:|xl:|2xl:)+)/);return e?e[1]:""}function YI(n,e){if(!e||e.trim()==="")return n;if(!n||n.trim()==="")return e;const t=n.split(/\s+/).filter(Boolean),s=e.split(/\s+/).filter(Boolean),r=new Map;for(const l of s){const d=i_(l);if(d){const u=l_(l),f=`${d}:${u}`;r.set(f,l)}}return[...t.filter(l=>{const d=i_(l);if(!d)return!0;const u=l_(l),f=`${d}:${u}`;return!r.has(f)}),...s].join(" ")}function XI(n){return Object.entries(n).filter(([,e])=>e).map(([e])=>e).join(" ")}function JI(...n){return n.filter(e=>typeof e=="string"&&e.length>0).join(" ")}const Ze=Ht("G7CoreGlobals");function ZI(){window.React=qe,window.ReactDOM={...$g,createPortal:Vr.createPortal,unstable_batchedUpdates:n=>n()},window.ReactJSXRuntime=pN,Ze.log("전역 객체 window.React, window.ReactDOM, window.ReactJSXRuntime에 노출됨")}function QI(n){const e=new Map,t=jr.getInstance();n.componentEvent={on:(s,r)=>(e.has(s)||e.set(s,new Set),e.get(s).add(r),t.trackEventSubscribe(s),()=>{e.get(s)?.delete(r),t.trackEventUnsubscribe(s)}),emit:async(s,r)=>{const o=e.get(s),l=o?.size??0;if(!o||o.size===0)return t.trackEventEmit(s,r,0),[];let d,u=[];try{u=await Promise.all(Array.from(o).map(async f=>{try{return await f(r)}catch(g){throw Ze.error(`componentEvent: Error in listener for "${s}":`,g),g}}))}catch(f){d=f instanceof Error?f:new Error(String(f))}if(t.trackEventEmit(s,r,l,u,d),d)throw d;return u},off:s=>{e.delete(s),t.trackEventOff(s)},clear:()=>{e.clear(),t.trackEventClear()}},Ze.log("전역 객체 window.G7Core.componentEvent에 노출됨")}function eL(n){if(n.layoutEditor&&n.layoutEditor.__isStub!==!0||n.layoutEditor&&n.layoutEditor.__isStub===!0)return;const e=[],t=[];n.layoutEditor={__isStub:!0,__queue:e,__readyCallbacks:t,registerWidget:(s,r)=>e.push(["widget",s,r]),registerNodeEditor:(s,r)=>e.push(["nodeEditor",s,r]),registerCanvasOverlay:(s,r)=>e.push(["canvasOverlay",s,r]),onReady:s=>{typeof s=="function"&&t.push(s)}},Ze.log("전역 객체 window.G7Core.layoutEditor 예약 접수함(stub) 노출됨")}function tL(n,e){n.useTranslation=Mn,n.t=(t,s)=>{const r=e.getState();if(!r.translationEngine||!r.translationContext)return t;if(s){const o="|"+Object.entries(s).map(([l,d])=>`${l}=${d}`).join("|");return r.translationEngine.translate(t,r.translationContext,o)}return r.translationEngine.translate(t,r.translationContext)},Ze.log("전역 객체 window.G7Core.useTranslation에 노출됨")}function nL(n,e){n.createChangeEvent=qI,n.createClickEvent=FI,n.createSubmitEvent=VI,n.createKeyboardEvent=KI,n.uuid=()=>typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{const s=Math.random()*16|0;return(t==="x"?s:s&3|8).toString(16)}),n.createLogger=Ht,Ze.log("전역 객체 window.G7Core.createLogger에 노출됨"),n.renderItemChildren=(t,s,r,o,l)=>{const d=e.getState(),g={_global:window.__templateApp?.getGlobalState?.()||{},_local:s._local||{},_computed:s._computed||{},...s},h=new Set,b=(v,x)=>{const S=g._global?._remountKeys;return v&&S?.[v]&&!h.has(v)?(h.add(v),`${v}-remount-${S[v]}`):v||x},y={translationContext:d.translationContext,translationEngine:d.translationEngine,bindingEngine:d.bindingEngine,actionDispatcher:d.actionDispatcher,getRemountKey:b,...l};return lc(t,g,r,o,y)},n.getComponentMap=()=>xr.getInstance().getComponentMap(),n.renderComponentLayout=(t,s,r)=>{if(!t||!Array.isArray(t)||t.length===0)return null;const o=xr.getInstance().getComponentMap(),l=e.getState(),u=window.__templateApp?.getGlobalState?.()||{},f={_global:u._global||{},_local:u._local||{},_computed:u._computed||{},...s},g=new Set,h=(b,y)=>{const v=f._global?._remountKeys;return b&&v?.[b]&&!g.has(b)?(g.add(b),`${b}-remount-${v[b]}`):b||y};return lc(t,f,o,r,{translationContext:l.translationContext,translationEngine:l.translationEngine,bindingEngine:l.bindingEngine,actionDispatcher:l.actionDispatcher,getRemountKey:h})},n.renderExpandContent=t=>{const{children:s,row:r,expandContext:o,componentContext:l,keyPrefix:d}=t;if(!s||!Array.isArray(s)||s.length===0)return null;const u=t.componentMap||xr.getInstance().getComponentMap(),f=e.getState(),g=n.state?.get?.()||{},h=l?.stateRef?.current??l?.state??{},b={...g._local||{},...h},y=l?.computedRef?.current??g._computed??{},v=f.bindingEngine??n.getDataBindingEngine?.(),x={...g,_local:b,_computed:y,row:r,item:r,$item:r};let S={};if(o&&typeof o=="object"&&v)try{for(const[j,E]of Object.entries(o))if(typeof E=="string"){const T=E.match(/^\{\{([^}]+)\}\}$/);if(T){const D=T[1].trim();try{S[j]=v.evaluateExpression(D,x,{skipCache:!0})}catch{S[j]=void 0}}else S[j]=v.resolveBindings(E,x,{skipCache:!0})}else S[j]=E}catch(j){Ze.warn("renderExpandContent: expandContext 평가 오류:",j)}const _={row:r,item:r,$item:r,_local:b,_global:g._global||{},_computed:g._computed||{},...S},A=new Set,C=(j,E)=>{const T=_._global?._remountKeys;return j&&T?.[j]&&!A.has(j)?(A.add(j),`${j}-remount-${T[j]}`):j||E};return lc(s,_,u,d,{translationContext:f.translationContext,translationEngine:f.translationEngine??void 0,bindingEngine:f.bindingEngine??void 0,actionDispatcher:f.actionDispatcher,componentContext:l,getRemountKey:C})},n.$get=function(s,r,o=void 0){if(s==null)return o;const l=Array.isArray(r)?r:[r];if(l.length===0)return s;let d=s;for(const u of l){if(d==null||u==null)return o;d=d[u]}return d??o},Ze.log("전역 객체 window.G7Core.renderItemChildren에 노출됨"),Ze.log("전역 객체 window.G7Core.renderComponentLayout에 노출됨"),Ze.log("전역 객체 window.G7Core.renderExpandContent에 노출됨"),Ze.log("전역 객체 window.G7Core.$get에 노출됨")}function sL(n){n.dispatch=async(e,t)=>{const s=window.__templateApp;if(!s)return Ze.warn("G7Core.dispatch: TemplateApp이 초기화되지 않았습니다."),{success:!1,error:new Error("TemplateApp이 초기화되지 않았습니다.")};const r=s.getActionDispatcher?.();if(!r)return Ze.warn("G7Core.dispatch: ActionDispatcher를 찾을 수 없습니다."),{success:!1,error:new Error("ActionDispatcher를 찾을 수 없습니다.")};const o=s.getRouter?.(),l=s.getGlobalState?.(),d=s.setGlobalState?.bind(s),f=t?.componentContext||window.__g7ActionContext,g=window.__g7PendingLocalState;let h=f?.state??l;g&&f&&(h=g,Ze.log("[dispatch] Using __g7PendingLocalState for context.state:",g));let b=f?.data??l;g&&f?.data?._local&&(b={...f.data,_local:g},Ze.log("[dispatch] Updated context.data._local with pendingLocalState"));const y={navigate:o?(v,x)=>o.navigate(v,x):void 0,setState:f?.setState??d,state:h,data:b,_isDispatchFallbackContext:!f?.setState};if(e.debounce){const v=e.debounceKey||`dispatch-${e.handler}`,x=typeof e.debounce=="number"?e.debounce:e.debounce.delay;return r.debouncedCall(v,x,()=>{const{debounce:S,debounceKey:_,...A}=e;r.dispatchAction(A,y)}),{success:!0,debounced:!0}}try{return await r.dispatchAction(e,y)}catch(v){return Ze.error("G7Core.dispatch: 액션 실행 오류:",v),{success:!1,error:v instanceof Error?v:new Error(String(v))}}},Ze.log("전역 객체 window.G7Core.dispatch에 노출됨")}function Ac(n){const e={};for(const[t,s]of Object.entries(n))if(t.includes(".")){const r=t.split(".");let o=e;for(let l=0;l<r.length-1;l++){const d=r[l];d in o?(typeof o[d]!="object"||o[d]===null)&&(o[d]={}):o[d]={},o=o[d]}o[r[r.length-1]]=s}else e[t]=s;return e}function c_(n,e=""){const t=[];if(!n||typeof n!="object")return t;for(const s of Object.keys(n)){const r=e?`${e}.${s}`:s,o=n[s];o&&typeof o=="object"&&!Array.isArray(o)?t.push(...c_(o,r)):t.push(r)}return t}function rL(n){const e=Object.keys(n);return e.length>0&&e.every(t=>/^\d+$/.test(t))}function d_(n,e){const t={...n};for(const s of Object.keys(e))s in t?t[s]!==null&&typeof t[s]=="object"&&!Array.isArray(t[s])&&e[s]!==null&&typeof e[s]=="object"&&!Array.isArray(e[s])&&(t[s]=d_(t[s],e[s])):t[s]=e[s];return t}function ar(n,e){if(Array.isArray(n)&&!Array.isArray(e)&&rL(e)){const s=Object.keys(e).map(o=>parseInt(o,10));if(!((s.length>0?Math.max(...s):0)>=n.length+s.length+10)){const o=[...n];for(const[l,d]of Object.entries(e)){const u=parseInt(l,10);u>=0&&u<o.length?d!==null&&typeof d=="object"&&!Array.isArray(d)&&o[u]!==null&&typeof o[u]=="object"?o[u]=ar(o[u],d):o[u]=d:u>=o.length&&(o[u]=d)}return o}}const t={...n};for(const[s,r]of Object.entries(e))r!==null&&typeof r=="object"&&!Array.isArray(r)?t[s]!==null&&typeof t[s]=="object"?t[s]=ar(t[s],r):t[s]={...r}:t[s]=r;return t}function oL(n){n.state={get:()=>window.__templateApp?.getGlobalState?.()||{},set:(e,t)=>{const s=window.__templateApp;if(s?.setGlobalState&&s?.getGlobalState){const r=t?.merge||"deep",o=Ac(e);let l;if(r==="replace")l=o;else if(r==="shallow")l={...s.getGlobalState(),...o};else{const d=s.getGlobalState();l=ar(d,o)}s.setGlobalState(l,{render:t?.render})}else Ze.warn("G7Core.state.set: TemplateApp이 초기화되지 않았습니다.")},setLocal:(e,t)=>{const s=window.__templateApp;if(t?.render===!1&&!t?.selfManaged){const S=window.__g7AutoBindingPaths;S&&S.size>0&&c_(Ac(e)).some(A=>S.has(A))&&(Ze.log("[setLocal] render:false + 자동바인딩 경로 겹침 감지 → render:true 자동 승격 (engine-v1.43.0)"),t={...t,render:!0})}if(t?.debounce){const S=s?.getActionDispatcher?.();if(S){const _=t.debounceKey||`setLocal-${Object.keys(e).join(",")}`,{debounce:A,debounceKey:C,...j}=t;S.debouncedCall(_,t.debounce,()=>{n.state.setLocal(e,j)});return}}const r=t?.scope??"current",o=t?.merge||"deep",l=window.__g7ActionContext,d=Ac(e);if(r==="parent"||r==="root"){const S=window.__g7LayoutContextStack||[];if(S.length>0){const _=r==="parent"?S[S.length-1]:S[0];if(_?.setState){_.setState(A=>o==="replace"?d:o==="shallow"?{...A||{},...d}:ar(A||{},d)),Ze.log(`[setLocal] scope=${r}: 타겟 컨텍스트에 상태 업데이트 (mergeMode=${o})`,d);return}}Ze.warn(`[setLocal] scope=${r}: 레이아웃 컨텍스트 스택이 비어있습니다. current로 폴백합니다.`)}const u=window.__g7PendingLocalState,f=s?.getGlobalState?.()?._local||{},b=!((window.__g7LayoutContextStack||[]).length>0)&&l?.state?l.state:void 0,y=b?d_(f,b):f,v=u||y;let x;if(o==="replace"?x=d:o==="shallow"?x={...v,...d}:x=ar(v,d),s?.setGlobalState&&(s.setGlobalState({_local:x},{render:t?.render}),Ze.log(`[setLocal] globalLocal updated via setGlobalState (mergeMode=${o}, render=${t?.render??!0}):`,d)),window.__g7PendingLocalState=x,Ze.log("[setLocal] __g7PendingLocalState updated:",x),window.__g7SequenceLocalSync=x,window.__g7LastSetLocalSnapshot=x,o==="replace")window.__g7ForcedLocalFields=d;else{const S=window.__g7ForcedLocalFields||{};window.__g7ForcedLocalFields=ar(S,d)}if(Ze.log("[setLocal] __g7ForcedLocalFields updated:",d),o==="replace")window.__g7SetLocalOverrideKeys=d;else{const S=window.__g7SetLocalOverrideKeys||{};window.__g7SetLocalOverrideKeys=ar(S,d)}Ze.log("[setLocal] __g7SetLocalOverrideKeys updated:",d),l?.setState&&l.setState(S=>o==="replace"?d:o==="shallow"?{...S||{},...d}:ar(S||{},d)),s?.setGlobalState||Ze.warn("G7Core.state.setLocal: TemplateApp이 없습니다.")},getLocal:()=>{const s=(window.__templateApp?.getGlobalState?.()||{})._local||{},r=window.__g7PendingLocalState;if(r)return ar(s,r);const o=window.__g7LastSetLocalSnapshot;return o&&o!==s?ar(s,o):s},update:e=>{const t=window.__templateApp;if(t?.getGlobalState&&t?.setGlobalState){const s=t.getGlobalState(),r=e(s);t.setGlobalState(r)}else Ze.warn("G7Core.state.update: TemplateApp이 초기화되지 않았습니다.")},subscribe:e=>{const t=window.__templateApp;return t?.onGlobalStateChange?t.onGlobalStateChange(e):(Ze.warn("G7Core.state.subscribe: TemplateApp이 초기화되지 않았습니다."),()=>{})},getDataSource:e=>window.__templateApp?.getDataSource?.(e),getIsolated:e=>e?window.__g7IsolatedStates?.[e]?.state??null:window.__g7ActionContext?.isolatedContext?.state??null,setIsolated:(e,t,s)=>{let r,o,l;typeof e=="string"?(r=e,o=t||{},l=s):(o=e,l=t&&typeof t=="object"&&"merge"in t?t:s);const d=l?.merge||"deep",u=Ac(o);if(r){const h=window.__g7IsolatedStates?.[r];h?.mergeState?h.mergeState(u,d):Ze.warn(`G7Core.state.setIsolated: scopeId '${r}'를 찾을 수 없습니다.`);return}const f=window.__g7ActionContext;f?.isolatedContext?.mergeState?f.isolatedContext.mergeState(u,d):Ze.warn("G7Core.state.setIsolated: 액션 컨텍스트에 isolatedContext가 없습니다.")},getParent:()=>{const e=window.__g7LayoutContextStack||[];if(e.length===0)return Ze.log("[getParent] 레이아웃 컨텍스트 스택이 비어있습니다."),null;const t=e[e.length-1];if(!t)return null;const s=t.dataContext||{};return{_local:t.state||s._local||{},_global:s._global||n.state.get()||{},setState:t.setState}},setParentLocal:(e,t,s)=>{const r=window.__g7LayoutContextStack||[];if(r.length===0){Ze.warn("[setParentLocal] 레이아웃 컨텍스트 스택이 비어있습니다.");return}const o=r[r.length-1];if(!o?.setState){Ze.warn("[setParentLocal] 부모 컨텍스트에 setState가 없습니다.");return}let l,d;typeof e=="string"?(l={[e]:t},d=s):(l=e,d=t&&typeof t=="object"&&"merge"in t?t:s);const u=d?.merge||"deep",f=Ac(l),g=o.state?._local!==void 0,h=g?o.state._local:o.state||{};let b;u==="replace"?b=f:u==="shallow"?b={...h,...f}:b=ar(h,f),window.__g7PendingLocalState=b;const y=window.__templateApp;if(y?.setGlobalState&&y.setGlobalState({_local:b}),o.setState(b),g?o.state._local=b:o.state=b,o.dataContext&&(o.dataContext._local=b),u==="replace")window.__g7ForcedLocalFields=f;else{const v=window.__g7ForcedLocalFields||{};window.__g7ForcedLocalFields=ar(v,f)}ih()},setParentGlobal:(e,t)=>{let s;typeof e=="string"?s={[e]:t}:s=e,n.state.set(s),Ze.log("[setParentGlobal] 전역 상태 업데이트:",s)}},window.__g7IsolatedStates||(window.__g7IsolatedStates={}),n.state.getGlobal=n.state.get,n.state.setGlobal=n.state.set,Ze.log("전역 객체 window.G7Core.state에 노출됨")}function aL(n){n.dataSource={get:e=>window.__templateApp?.getDataSource?.(e),set:(e,t,s)=>{const r=window.__templateApp;r?.setDataSource?r.setDataSource(e,t,s):Ze.warn("G7Core.dataSource.set: TemplateApp이 초기화되지 않았습니다.")},refetch:async(e,t)=>{const s=window.__templateApp;if(s?.refetchDataSource)return s.refetchDataSource(e,t);Ze.warn("G7Core.dataSource.refetch: TemplateApp이 초기화되지 않았습니다.")},updateItem:(e,t,s,r,o)=>{const l=window.__templateApp;return l?.updateDataSourceItem?l.updateDataSourceItem(e,t,s,r,o):(Ze.warn("G7Core.dataSource.updateItem: TemplateApp이 초기화되지 않았습니다."),!1)},updateData:(e,t,s,r="append")=>{const o=window.__templateApp;if(!o?.getDataSource||!o?.setDataSource)return Ze.warn("G7Core.dataSource.updateData: TemplateApp이 초기화되지 않았습니다."),!1;const l=o.getDataSource(e);if(!l)return Ze.warn(`G7Core.dataSource.updateData: 데이터 소스 '${e}'를 찾을 수 없습니다.`),!1;let d,u=l,f=null;if(t){const h=t.split(".");f=h.pop();for(const b of h)if(u&&typeof u=="object"&&b in u)u=u[b];else return Ze.warn(`G7Core.dataSource.updateData: 경로 '${t}'를 찾을 수 없습니다.`),!1;d=u[f]}else d=l;if(!Array.isArray(d))return Ze.warn("G7Core.dataSource.updateData: 대상 경로의 데이터가 배열이 아닙니다."),!1;if(!Array.isArray(s))return Ze.warn("G7Core.dataSource.updateData: newData가 배열이 아닙니다."),!1;const g=r==="prepend"?[...s,...d]:[...d,...s];return t&&f?(u[f]=g,o.setDataSource(e,l,{merge:!1})):o.setDataSource(e,g,{merge:!1}),Ze.log(`G7Core.dataSource.updateData: '${e}'에 ${s.length}개 항목 ${r==="prepend"?"앞에":"뒤에"} 추가됨`),!0}},Ze.log("전역 객체 window.G7Core.dataSource에 노출됨")}function iL(n,e){n.locale={current:()=>window.__templateApp?.getLocale?.()||"ko",supported:()=>{const s=window.__templateApp?.globalState?.appConfig?.supportedLocales;return Array.isArray(s)&&s.length>0?s:e.getState().templateMetadata?.locales||["ko","en"]},change:async t=>{const s=window.__templateApp;s?.changeLocale?await s.changeLocale(t):Ze.warn("G7Core.locale.change: TemplateApp이 초기화되지 않았습니다.")}},Ze.log("전역 객체 window.G7Core.locale에 노출됨")}function lL(n){n.toast={show:(e,t)=>{n.dispatch({handler:"toast",params:{message:e,type:t?.type||"info",...t?.duration&&{duration:t.duration}}})},success:(e,t)=>{n.toast.show(e,{type:"success",duration:t})},error:(e,t)=>{n.toast.show(e,{type:"error",duration:t})},warning:(e,t)=>{n.toast.show(e,{type:"warning",duration:t})},info:(e,t)=>{n.toast.show(e,{type:"info",duration:t})}},Ze.log("전역 객체 window.G7Core.toast에 노출됨")}function cL(n){n.modal={open:e=>{n.dispatch({handler:"openModal",target:e})},close:e=>{n.dispatch({handler:"closeModal",...e&&{target:e}})},closeAll:()=>{n.dispatch({handler:"closeAllModals"})},isOpen:e=>{const t=n.state.get();return t._global?.activeModal===e||t._global?.modalStack?.includes(e)||!1},getStack:()=>n.state.get()._global?.modalStack||[]},Ze.log("전역 객체 window.G7Core.modal에 노출됨")}function dL(n){n.style={mergeClasses:YI,conditionalClass:XI,joinClasses:JI},Ze.log("전역 객체 window.G7Core.style에 노출됨")}function uL(n,e){const{webSocketManager:t}=e;n.websocket={manager:t,subscribe:(s,r,o,l)=>t.subscribe(s,r,o,l),unsubscribe:s=>t.unsubscribe(s),leaveChannel:s=>t.leaveChannel(s),disconnect:()=>t.disconnect(),isInitialized:()=>t.isInitialized(),getSubscriptionCount:()=>t.getSubscriptionCount()},Ze.log("전역 객체 window.G7Core.websocket에 노출됨")}function fL(n,e){const{transitionManager:t}=e;n.navigation={isPending:()=>t?.getIsPending?.()||!1,onComplete:s=>{if(!t)return s(),()=>{};let r=t.getIsPending();const o=t.subscribe(l=>{l?r=!0:r&&(s(),o())});return o}},Ze.log("전역 객체 window.G7Core.navigation에 노출됨")}function pL(n){n.plugin={getSettings:e=>window.G7Config?.plugins?.[e],get:(e,t,s)=>window.G7Config?.plugins?.[e]?.[t]??s,getAll:()=>window.G7Config?.plugins??{}},Ze.log("전역 객체 window.G7Core.plugin에 노출됨")}function gL(n){n.module={getSettings:e=>window.G7Config?.modules?.[e],get:(e,t,s)=>window.G7Config?.modules?.[e]?.[t]??s,getAll:()=>window.G7Config?.modules??{}},Ze.log("전역 객체 window.G7Core.module에 노출됨")}function hL(n,e){const{transitionManager:t,responsiveManager:s}=e;n.AuthManager=rr,n.api=qr(),n.TransitionManager=t,n.useTransitionState=Mw,n.ResponsiveManager=s,n.useResponsive=Bw,n.useControllableState=xN,n.shallowArrayEqual=vN,n.shallowObjectEqual=Hw,n.updateQueryParams=async(r,o)=>{const l=window.__templateApp;if(l?.updateQueryParams)return l.updateQueryParams(r,o);Ze.warn("G7Core.updateQueryParams: TemplateApp이 초기화되지 않았습니다.")},Ze.log("전역 객체 window.G7Core.AuthManager에 노출됨"),Ze.log("전역 객체 window.G7Core.api에 노출됨"),Ze.log("전역 객체 window.G7Core.ResponsiveManager에 노출됨"),Ze.log("전역 객체 window.G7Core.useResponsive에 노출됨"),Ze.log("전역 객체 window.G7Core.useControllableState에 노출됨"),Ze.log("전역 객체 window.G7Core.updateQueryParams에 노출됨")}function mL(n,e){n.getSlotContext=()=>window.__slotContextValue??null,n.getDynamicRenderer=()=>window.__DynamicRenderer??null,n.getComponentRegistry=()=>e.getComponentRegistry?.()??xr.getInstance(),n.getDataBindingEngine=()=>e.getDataBindingEngine?.()??e.getState().bindingEngine,n.getTranslationEngine=()=>e.getTranslationEngine?.()??e.getState().translationEngine,n.getActionDispatcher=()=>e.getActionDispatcher?.()??e.getState().actionDispatcher,Ze.log("전역 객체 window.G7Core 슬롯 API에 노출됨 (getSlotContext, getDynamicRenderer 등)")}function yL(n){n.identity={setLauncher:rn.setLauncher.bind(rn),handle:rn.handle.bind(rn),isIdentityRequired:rn.isIdentityRequired.bind(rn),hasLauncher:rn.hasLauncher.bind(rn),markDomainNoticeShown:rn.markDomainNoticeShown.bind(rn),redirectExternally:rn.redirectExternally.bind(rn),createDeferred:rn.createDeferred.bind(rn),resolveDeferred:rn.resolveDeferred.bind(rn),reset:rn.reset.bind(rn),redirectStashKey:th},Ze.log("전역 객체 window.G7Core 본인인증(IDV) API에 노출됨 (identity)")}function bL(n){if(typeof window>"u")return;ZI(),window.G7Core||(window.G7Core={});const e=window.G7Core;QI(e),eL(e),hL(e,n),tL(e,n),nL(e,n),sL(e),oL(e),aL(e),iL(e,n),lL(e),cL(e),dL(e),uL(e,n),fL(e,n),pL(e),gL(e),mL(e,n),yL(e),Ze.log("G7Core 전역 객체 초기화 완료")}function xL(){const n=window.G7Core;if(!n){Ze.warn("G7Core가 초기화되지 않았습니다.");return}const e=()=>jr.getInstance(),t={isEnabled:()=>{try{return e().isEnabled()}catch{return!1}},trackRender:s=>{try{e().isEnabled()&&e().trackRender(s)}catch{}},trackIteration:(s,r,o,l,d)=>{try{e().isEnabled()&&e().trackIteration(s,{source:r,itemVar:o,indexVar:l,sourceLength:d})}catch{}},trackIfCondition:(s,r,o,l)=>{try{e().isEnabled()&&e().trackIfCondition(s,r,o)}catch{}},trackMount:(s,r)=>{try{e().isEnabled()&&e().trackMount(s,{...r,id:s})}catch{}},trackUnmount:s=>{try{e().isEnabled()&&e().trackUnmount(s)}catch{}},trackExpressionEval:s=>{try{e().isEnabled()&&e().trackExpressionEval(s)}catch{}},trackBindingEval:s=>{try{e().isEnabled()&&e().trackBindingEval(s)}catch{}},recordCacheHit:()=>{try{e().isEnabled()&&e().recordCacheHit()}catch{}},recordCacheMiss:()=>{try{e().isEnabled()&&e().recordCacheMiss()}catch{}},trackHandlerRegistration:(s,r,o,l)=>{try{e().isEnabled()&&e().trackHandlerRegistration(s,r,o,l)}catch{}},trackHandlerUnregistration:s=>{try{e().isEnabled()&&e().trackHandlerUnregistration(s)}catch{}},logAction:s=>{try{e().isEnabled()&&e().logAction(s)}catch{}},trackRequest:(s,r)=>{try{return e().isEnabled()?e().trackRequest(s,r):""}catch{return""}},completeRequest:(s,r,o)=>{try{e().isEnabled()&&e().completeRequest(s,r,o)}catch{}},failRequest:(s,r)=>{try{e().isEnabled()&&e().failRequest(s,r)}catch{}},trackDataSourceDefinition:s=>{try{e().isEnabled()&&e().trackDataSourceDefinition(s)}catch{}},trackDataSourceLoading:s=>{try{e().isEnabled()&&e().trackDataSourceLoading(s)}catch{}},trackDataSourceLoaded:(s,r,o)=>{try{e().isEnabled()&&e().trackDataSourceLoaded(s,r,o)}catch{}},trackDataSourceError:(s,r)=>{try{e().isEnabled()&&e().trackDataSourceError(s,r)}catch{}},trackForm:(s,r,o)=>{try{e().isEnabled()&&e().trackForm(s,r,o)}catch{}},untrackForm:s=>{try{e().isEnabled()&&e().untrackForm(s)}catch{}},startStateChange:(s,r,o,l)=>{try{return e().isEnabled()?e().startStateChange(s,r,o,l):""}catch{return""}},completeStateChange:s=>{try{e().isEnabled()&&e().completeStateChange(s)}catch{}},trackComponentRender:(s,r,o,l,d,u)=>{try{e().isEnabled()&&e().trackComponentRender(s,r,o,l,d,u)}catch{}},updateLocalState:s=>{try{e().isEnabled()&&e().updateLocalState(s)}catch{}},updateComputedState:s=>{try{e().isEnabled()&&e().updateComputedState(s)}catch{}},updateParentContext:s=>{try{e().isEnabled()&&e().updateParentContext(s)}catch{}},trackComponentStateSource:(s,r,o,l)=>{try{e().isEnabled()&&e().trackComponentStateSource(s,r,o,l)}catch{}},trackDynamicState:(s,r)=>{try{e().isEnabled()&&e().trackDynamicState(s,r)}catch{}},trackContextFlow:(s,r,o,l,d,u)=>{try{e().isEnabled()&&e().trackContextFlow(s,r,o,l,d,u)}catch{}},trackComponentStyle:(s,r,o,l)=>{try{e().isEnabled()&&e().trackComponentStyle(s,r,o,l)}catch{}},trackAuthEvent:(s,r,o,l)=>{try{e().isEnabled()&&e().trackAuthEvent(s,r,o,l)}catch{}},trackAuthHeader:(s,r,o,l,d)=>{try{e().isEnabled()&&e().trackAuthHeader(s,r,o,l,d)}catch{}},trackLog:(s,r,o)=>{try{e().isEnabled()&&e().trackLog(s,r,o)}catch{}},trackAction:s=>{try{e().isEnabled()&&e().trackAction?.(s)}catch{}},trackDataSourceUpdate:s=>{try{e().isEnabled()&&e().trackDataSourceUpdate?.(s)}catch{}},startSequenceExecution:s=>{try{return e().isEnabled()?e().startSequenceExecution(s):""}catch{return""}},captureSequenceActionBefore:(s,r,o,l,d)=>{try{e().isEnabled()&&e().captureSequenceActionBefore(s,r,o,l,d)}catch{}},captureSequenceActionAfter:(s,r,o,l,d,u)=>{try{e().isEnabled()&&e().captureSequenceActionAfter(s,r,o,l,d,u)}catch{}},endSequenceExecution:(s,r)=>{try{e().isEnabled()&&e().endSequenceExecution(s,r)}catch{}},registerStateCaptureForHandler:(s,r,o)=>{try{e().isEnabled()&&e().registerStateCaptureForHandler(s,r,o)}catch{}},detectStaleClosure:(s,r,o,l,d)=>{try{return e().isEnabled()?e().detectStaleClosure(s,r,o,l,d):[]}catch{return[]}},trackStaleClosureWarning:s=>{try{e().isEnabled()&&e().trackStaleClosureWarning(s)}catch{}},trackModalOpen:s=>{try{e().isEnabled()&&e().trackModalOpen(s)}catch{}},trackModalClose:(s,r)=>{try{e().isEnabled()&&e().trackModalClose(s,r)}catch{}},trackModalStateChange:s=>{try{e().isEnabled()&&e().trackModalStateChange(s)}catch{}},trackNestedContext:s=>{try{return e().isEnabled()?e().trackNestedContext(s):""}catch{return""}},trackNestedContextAccess:(s,r)=>{try{e().isEnabled()&&e().trackNestedContextAccess(s,r)}catch{}},trackComputedProperty:(s,r,o,l,d,u,f)=>{try{e().isEnabled()&&e().trackComputedProperty(s,r,o,l,d,u,f)}catch{}},trackComputedRecalc:(s,r,o,l,d,u,f)=>{try{e().isEnabled()&&e().trackComputedRecalc(s,r,o,l,d,u,f)}catch{}},setNamedActionDefinitions:s=>{try{e().isEnabled()&&e().setNamedActionDefinitions(s)}catch{}},trackNamedActionRef:s=>{try{e().isEnabled()&&e().trackNamedActionRef(s)}catch{}}};n.devTools=t,Ze.log("G7Core.devTools 인터페이스 초기화 완료")}function vL(){const n=window.G7Core;if(!n){Ze.warn("G7Core가 초기화되지 않았습니다.");return}const e=jr.getInstance();if(e.initialize(),!e.isEnabled()){window.G7DevTools={isEnabled:()=>!1,enable:()=>{Ze.log("환경설정 > 고급 설정 > 디버그 모드를 켜세요")}},Dv(),Ze.log("G7DevTools 비활성화됨 (디버그 모드 꺼짐)");return}xL(),Dv();try{UI().enable(),Ze.log("StyleTracker 활성화됨")}catch(o){Ze.warn("StyleTracker 활성화 실패:",o)}const t=new Q0,s=e_(),r={isEnabled:()=>e.isEnabled(),state:{get:()=>e.getState(),getHistory:()=>e.getStateHistory(),watch:(o,l)=>e.watchState(o,l)},actions:{getHistory:()=>e.getActionHistory(),watch:o=>e.watchActions(o),getMetrics:()=>e.getActionMetrics()},binding:{evaluate:o=>{const l=n.getDataBindingEngine?.();if(!l){Ze.warn("DataBindingEngine이 없습니다.");return}return l.evaluateExpression(o,e.getState())},getCacheStats:()=>e.getCacheStats(),clearStats:()=>{e.resetCacheStats(),Ze.log("캐시 통계 초기화됨")}},diagnose:{analyze:o=>t.analyze(o),suggestFix:o=>t.suggestFix(o),getCommonIssues:()=>t.getCommonIssues(),getRulesByCategory:o=>t.getRulesByCategory(o)},server:{dumpState:o=>s.dumpState(o),sendLog:o=>s.sendLog(o),sendError:(o,l)=>s.sendError(o,l),isConnected:()=>s.isConnected(),testConnection:()=>s.testConnection()},config:{isDebugMode:()=>e.isEnabled(),setLogLevel:o=>e.setLogLevel(o),setMaxHistory:o=>e.setMaxHistory(o)},lifecycle:{getMountedComponents:()=>e.getLifecycleInfo().mountedComponents,getOrphanedListeners:()=>e.getLifecycleInfo().orphanedListeners},performance:{getRenderCount:()=>e.getPerformanceInfo().renderCounts,getBindingEvalCount:()=>e.getPerformanceInfo().bindingEvalCount,getMemoryWarnings:()=>e.getPerformanceInfo().memoryWarnings,startProfiling:()=>e.startProfiling(),stopProfiling:()=>e.stopProfiling()},network:{getActiveRequests:()=>e.getNetworkInfo().activeRequests,getRequestHistory:()=>e.getNetworkInfo().requestHistory,getPendingDataSources:()=>e.getNetworkInfo().pendingDataSources},conditional:{getIfConditions:()=>e.getConditionalInfo().ifConditions,getIterations:()=>e.getConditionalInfo().iterations},form:{getForms:()=>e.getFormInfo()},websocket:{getInfo:()=>e.getWebSocketInfo()}};window.G7DevTools=r,n.devtools=r,Ze.log("G7DevTools 전역 객체 초기화 완료 (window.G7DevTools)"),wL()}function wL(){if(document.getElementById("g7-devtools-root")){Ze.log("DevToolsPanel 이미 렌더링됨");return}const n=document.createElement("div");n.id="g7-devtools-root",document.body.appendChild(n);try{$g.createRoot(n).render(qe.createElement(HI)),Ze.log("DevToolsPanel UI 렌더링 완료")}catch(e){Ze.error("DevToolsPanel UI 렌더링 실패:",e)}}function Xn(){return typeof window>"u"?null:window.__g7Devtools??null}function u_(n,e){const t=Xn();if(!t?.trackEditorState)return;const s={templateIdentifier:n.templateIdentifier,editMode:n.editMode,selectedRoutePath:n.selectedRoute?.path??null,selectedLayoutName:n.selectedRoute?.layoutName??null,routeTreeSize:n.routeTree.length,isRouteTreeCollapsed:n.isRouteTreeCollapsed,locale:n.locale,previewDevice:n.previewDevice,previewZoom:n.previewZoom,lastAction:e,timestamp:Date.now()};try{t.trackEditorState(s)}catch{}}function _L(){const n=Xn();if(n?.clearEditorStateData)try{n.clearEditorStateData()}catch{}}function SL(n){const e=Xn();if(e?.trackEditorSampleMatch)try{e.trackEditorSampleMatch(n)}catch{}}function kL(){const n=Xn();if(n?.clearEditorSampleData)try{n.clearEditorSampleData()}catch{}}function CL(n){const e=Xn();if(e?.trackEditorHistoryEntry)try{e.trackEditorHistoryEntry(n)}catch{}}function jL(){const n=Xn();if(n?.clearEditorHistoryData)try{n.clearEditorHistoryData()}catch{}}function f_(n){const e=Xn();if(e?.trackEditorSelection)try{e.trackEditorSelection(n)}catch{}}function EL(){const n=Xn();if(n?.clearEditorSelectionData)try{n.clearEditorSelectionData()}catch{}}function Xu(n){const e=Xn();if(e?.trackEditorPropertyPatch)try{e.trackEditorPropertyPatch(n)}catch{}}function Ba(n){const e=Xn();if(e?.trackEditorDnd)try{e.trackEditorDnd(n)}catch{}}function RL(){const n=Xn();if(n?.clearEditorDndData)try{n.clearEditorDndData()}catch{}}function ss(n){const e=Xn();if(e?.trackEditorDocument)try{e.trackEditorDocument(n)}catch{}}function AL(){const n=Xn();if(n?.clearEditorDocumentData)try{n.clearEditorDocumentData()}catch{}}function TL(n){const e=Xn();if(e?.trackEditorSpecMerge)try{e.trackEditorSpecMerge(n)}catch{}}function $L(){const n=Xn();if(n?.clearEditorSpecMergeData)try{n.clearEditorSpecMergeData()}catch{}}function Uh(n){let e=5381;for(let t=0;t<n.length;t++)e=(e<<5)+e+n.charCodeAt(t)>>>0;return e}function ir(n){const e=Xn();if(e?.trackEditorI18n)try{e.trackEditorI18n(n)}catch{}}function NL(){const n=Xn();if(n?.clearEditorI18nData)try{n.clearEditorI18nData()}catch{}}function p_(n){const e=Xn();if(e?.trackPageState)try{e.trackPageState(n)}catch{}}function DL(){const n=Xn();if(n?.clearPageStateData)try{n.clearPageStateData()}catch{}}const g_="g7le.routeTree.collapsed";function IL(){if(typeof window>"u")return!1;try{return window.localStorage?.getItem(g_)==="1"}catch{return!1}}function LL(n){if(!(typeof window>"u"))try{window.localStorage?.setItem(g_,n?"1":"0")}catch{}}function OL(n,e){return{templateIdentifier:n,routeTree:[],routesError:null,selectedRoute:null,isRouteTreeCollapsed:IL(),editMode:"route",returnRoute:null,returnEditMode:null,locale:e,previewDevice:"desktop",previewZoom:1,previewCustomWidth:1024,previewColorScheme:"light",history:{canUndo:!1,canRedo:!1},isPaletteOpen:!1,availableStates:[],activeStateId:null,layoutVersions:{},extensionVersions:{}}}function ML(n,e){switch(e.type){case"SET_ROUTE_TREE":return{...n,routeTree:e.tree,routesError:null};case"SET_ROUTES_ERROR":return{...n,routesError:e.error};case"SELECT_ROUTE":return{...n,editMode:"route",selectedRoute:e.route,returnRoute:null,returnEditMode:null};case"TOGGLE_ROUTE_TREE":return{...n,isRouteTreeCollapsed:!n.isRouteTreeCollapsed};case"SET_LOCALE":return{...n,locale:e.locale};case"ENTER_BASE_EDIT":return{...n,editMode:"base",returnRoute:e.returnRoute!==void 0?e.returnRoute:n.selectedRoute,selectedRoute:{path:`__base__/${e.layoutName}`,layoutName:e.layoutName}};case"EXIT_BASE_EDIT":return{...n,editMode:"route",selectedRoute:n.returnRoute,returnRoute:null};case"ENTER_MODAL_EDIT":return{...n,editMode:"modal",returnRoute:e.returnRoute!==void 0?e.returnRoute:n.selectedRoute,selectedRoute:{path:`__modal__/${e.modalId}`,layoutName:e.hostLayout}};case"EXIT_MODAL_EDIT":return{...n,editMode:"route",selectedRoute:n.returnRoute,returnRoute:null};case"ENTER_EXTENSION_EDIT":return{...n,editMode:"extension",returnRoute:e.returnRoute!==void 0?e.returnRoute:n.selectedRoute,selectedRoute:{path:`__extension__/${e.extensionId}`,layoutName:e.extensionHost??null}};case"SET_RETURN_ROUTE":return n.editMode==="route"||n.returnRoute!==null?n:{...n,returnRoute:e.route};case"EXIT_EXTENSION_EDIT":return{...n,editMode:"route",selectedRoute:n.returnRoute,returnRoute:null};case"ENTER_ITERATION_ITEM_EDIT":return{...n,editMode:"iteration_item",returnRoute:e.returnRoute!==void 0?e.returnRoute:n.selectedRoute,returnEditMode:n.editMode,selectedRoute:{path:`__iteration__/${e.sourcePath}`,layoutName:e.hostLayout??n.selectedRoute?.layoutName??null}};case"EXIT_ITERATION_ITEM_EDIT":return{...n,editMode:n.returnEditMode??"route",selectedRoute:n.returnRoute,returnRoute:null,returnEditMode:null};case"SET_PREVIEW_DEVICE":return{...n,previewDevice:e.device};case"SET_PREVIEW_ZOOM":return{...n,previewZoom:e.zoom};case"SET_PREVIEW_CUSTOM_WIDTH":return{...n,previewCustomWidth:e.width};case"SET_PREVIEW_COLOR_SCHEME":return{...n,previewColorScheme:e.scheme};case"TOGGLE_PALETTE":return{...n,isPaletteOpen:!n.isPaletteOpen};case"SET_PALETTE_OPEN":return{...n,isPaletteOpen:e.open};case"SET_AVAILABLE_STATES":return{...n,availableStates:e.states,activeStateId:e.activeStateId};case"SET_ACTIVE_STATE":return{...n,activeStateId:e.activeStateId};case"SET_LAYOUT_VERSIONS":return{...n,layoutVersions:e.versions};case"SET_LAYOUT_VERSION":return{...n,layoutVersions:{...n.layoutVersions,[e.layoutName]:e.version}};case"SET_EXTENSION_VERSIONS":return{...n,extensionVersions:e.versions};case"SET_EXTENSION_VERSION":return{...n,extensionVersions:{...n.extensionVersions,[e.extensionId]:e.version}};default:return n}}function zL(n,e){const t=ML(n,e);return((t.selectedRoute?.path??null)!==(n.selectedRoute?.path??null)||t.editMode!==n.editMode)&&(t.availableStates.length>0||t.activeStateId!==null)?{...t,availableStates:[],activeStateId:null}:t}const h_=w.createContext(null);function PL(n,e){const t=zL(n,e);return u_(t,e.type),t}function BL({templateIdentifier:n,initialLocale:e,children:t}){const[s,r]=w.useReducer(PL,void 0,()=>{const l=OL(n,e);return u_(l,void 0),l});w.useEffect(()=>{LL(s.isRouteTreeCollapsed)},[s.isRouteTreeCollapsed]);const o=w.useMemo(()=>({state:s,dispatch:r}),[s]);return qe.createElement(h_.Provider,{value:o},t)}function Rn(){const n=w.useContext(h_);if(!n)throw new Error("useLayoutEditor must be used within LayoutEditorProvider");return n}const m_=w.createContext(null);function HL({value:n,children:e}){return qe.createElement(m_.Provider,{value:n},e)}function Gr(){return w.useContext(m_)}const qh=w.createContext(null);let WL=1;function UL({children:n,t:e}){const[t,s]=w.useState([]),r=w.useRef([]),[o,l]=w.useState({}),d=w.useCallback(_=>{const A=_.id??`editor-modal-${WL++}`,C={id:A,content:_.content,ariaLabel:_.ariaLabel??"",closeOnBackdrop:_.closeOnBackdrop??!0,closeOnEscape:_.closeOnEscape??!0,width:_.width??"auto",height:_.height??"auto",maxHeightRatio:_.maxHeightRatio??.85,draggable:_.draggable??!1,avoidRect:_.avoidRect,onClose:_.onClose};return s(j=>{const T=[...j.filter(D=>D.id!==A),C];return r.current=T,T}),A},[]),u=w.useCallback(_=>{s(A=>{const C=A.find(E=>E.id===_),j=A.filter(E=>E.id!==_);return r.current=j,C?.onClose&&queueMicrotask(()=>C.onClose?.()),j})},[]),f=w.useCallback(()=>{const _=r.current[r.current.length-1];_&&u(_.id)},[u]),g=w.useCallback(()=>{s(_=>{for(let A=_.length-1;A>=0;A--){const C=_[A];C?.onClose&&queueMicrotask(()=>C.onClose?.())}return r.current=[],[]})},[]),h=w.useCallback((_,A)=>{l(C=>{const j=r.current.find(T=>T.id===_),E=A??j?.ariaLabel??"";return{...C,[_]:E}})},[]),b=w.useCallback(_=>{l(A=>{if(!(_ in A))return A;const C={...A};return delete C[_],C})},[]),y=w.useCallback(_=>{b(_),u(_)},[b,u]),v=w.useCallback(()=>{l({}),g()},[g]),x=w.useMemo(()=>Object.keys(o),[o]),S=w.useMemo(()=>({open:d,close:y,closeTop:f,closeAll:v,stack:t,minimize:h,restore:b,minimizedStack:x}),[d,y,f,v,t,h,b,x]);return qe.createElement(qh.Provider,{value:S},n,qe.createElement(FL,{minimized:o,onRestore:b,t:e,key:"__min_bar"}))}function Tc(){const n=w.useContext(qh);if(!n)throw new Error("useEditorModal must be used within EditorModalProvider");return n}function qL(){const n=w.useContext(qh);if(!n)return null;const{stack:e,close:t,minimizedStack:s}=n,r=w.useMemo(()=>new Set(s),[s]);return w.useEffect(()=>{if(e.length===0)return;const o=l=>{if(l.key!=="Escape"&&l.key!=="Esc")return;const d=e.filter(f=>!r.has(f.id)),u=d[d.length-1];u?.closeOnEscape&&(l.preventDefault(),l.stopPropagation(),t(u.id))};return window.addEventListener("keydown",o,!0),()=>window.removeEventListener("keydown",o,!0)},[e,t,r]),e.length===0?null:a.jsx(a.Fragment,{children:e.map((o,l)=>a.jsx(KL,{entry:o,depth:l,hidden:r.has(o.id),onClose:()=>t(o.id)},o.id))})}function FL({minimized:n,onRestore:e,t}){const s=t??(o=>o),r=Object.keys(n);return r.length===0?null:a.jsx("div",{className:"g7le-minimized-bar","data-testid":"g7le-minimized-bar",style:{position:"fixed",left:16,bottom:16,display:"flex",gap:8,zIndex:9300},children:r.map(o=>a.jsxs("button",{type:"button","data-testid":`g7le-minimized-${o}`,onClick:()=>e(o),style:{display:"flex",alignItems:"center",gap:6,padding:"8px 12px",background:"#1e293b",color:"#fff",border:"none",borderRadius:8,boxShadow:"0 8px 24px rgba(15, 23, 42, 0.3)",cursor:"pointer",fontSize:13},children:[a.jsx("span",{"aria-hidden":"true",children:"🗗"}),a.jsx("span",{children:n[o]||s("layout_editor.modal.minimized_default")}),a.jsx("span",{style:{opacity:.7},children:s("layout_editor.modal.restore")})]},o))})}function VL(n,e,t){if(!n||typeof window>"u")return null;const s=window.innerWidth,r=window.innerHeight,o=16,l=n.left,d=s-(n.left+n.width),u=e+o;let f;if(d>=l&&d>=u)f=n.left+n.width+o;else if(l>=u)f=Math.max(o,n.left-o-e);else return null;f=Math.min(Math.max(o,f),Math.max(o,s-e-o));let g=n.top;return g=Math.min(Math.max(o,g),Math.max(o,r-t-o)),{left:f,top:g}}const y_="clamp(16px, 6vh, 56px)";function KL({entry:n,depth:e,hidden:t,onClose:s}){const r=9100+e*10,o=n.maxHeightRatio>0?`${n.maxHeightRatio*100}vh`:void 0,l=n.draggable?o:`calc(100vh - (${y_}) * 2)`,[d,u]=w.useState(null),f=w.useRef(null),g=w.useRef(null);w.useEffect(()=>{if(!n.draggable)return;const S=f.current;if(!S)return;const _=S.getBoundingClientRect(),A=VL(n.avoidRect,_.width,_.height);A&&u(A)},[n.id,n.draggable]);const h=w.useCallback(S=>{if(!n.draggable)return;const _=S.target;if(!_.closest("[data-modal-drag-handle]")||_.closest("button, a, input, textarea, select"))return;const C=f.current,j=C?.getBoundingClientRect(),E=d?.left??j?.left??0,T=d?.top??j?.top??0;g.current={startX:S.clientX,startY:S.clientY,baseLeft:E,baseTop:T};const D=W=>{const z=g.current;if(!z)return;const H=window.innerWidth,G=window.innerHeight,F=C?.offsetWidth??0,Z=C?.offsetHeight??0;let Y=z.baseLeft+(W.clientX-z.startX),U=z.baseTop+(W.clientY-z.startY);Y=Math.min(Math.max(0,Y),Math.max(0,H-F)),U=Math.min(Math.max(0,U),Math.max(0,G-Z)),u({left:Y,top:U})},I=()=>{g.current=null,window.removeEventListener("pointermove",D),window.removeEventListener("pointerup",I)};window.addEventListener("pointermove",D),window.addEventListener("pointerup",I)},[n.draggable,d]),b=S=>{n.closeOnBackdrop&&S.target===S.currentTarget&&s()},y=n.draggable&&d!==null,v=n.draggable?{position:"fixed",inset:0,background:"transparent",pointerEvents:"none",zIndex:r,...t?{display:"none"}:{}}:{position:"fixed",inset:0,background:"rgba(15, 23, 42, 0.45)",display:t?"none":"flex",alignItems:"flex-start",justifyContent:"center",paddingTop:y_,boxSizing:"border-box",zIndex:r},x={background:"#fff",borderRadius:10,boxShadow:"0 20px 60px rgba(15, 23, 42, 0.25)",width:n.width,height:n.height,maxHeight:l,maxWidth:"92vw",overflow:"hidden",display:"flex",flexDirection:"column",...n.draggable?{position:"absolute",pointerEvents:"auto",left:y?d.left:"50%",top:y?d.top:"50%",transform:y?void 0:"translate(-50%, -50%)"}:{}};return a.jsx("div",{className:"g7le-modal-backdrop",role:"presentation","data-testid":`g7le-modal-backdrop-${n.id}`,"data-draggable":n.draggable?"true":"false",onClick:b,style:v,children:a.jsx("div",{ref:f,className:"g7le-modal",role:"dialog","aria-modal":"true","aria-label":n.ariaLabel||void 0,"data-testid":`g7le-modal-${n.id}`,"data-positioned":y?"true":"false",onClick:S=>S.stopPropagation(),onPointerDown:n.draggable?h:void 0,style:x,children:n.content})})}function Ts({baseStyle:n,hoverStyle:e,disabled:t,style:s,children:r,...o}){const[l,d]=w.useState(!1),u={outline:"none",...n,...s,...l&&!t?e:{}};return a.jsx("button",{type:"button",disabled:t,onMouseEnter:()=>d(!0),onMouseLeave:()=>d(!1),style:u,...o,children:r})}function GL({templateIdentifier:n,templateName:e,templateVersion:t,templateList:s,onSwitch:r}){const{t:o}=Mn(),[l,d]=w.useState(!1),[u,f]=w.useState(!1),g=w.useRef(null);w.useEffect(()=>{if(!l)return;const S=A=>{g.current&&!g.current.contains(A.target)&&d(!1)},_=A=>{A.key==="Escape"&&d(!1)};return document.addEventListener("mousedown",S),document.addEventListener("keydown",_),()=>{document.removeEventListener("mousedown",S),document.removeEventListener("keydown",_)}},[l]);const h=s??[],b=h.some(S=>S.identifier!==n),y=!!r&&b,v=e||n,x=S=>{if(S===n){d(!1);return}d(!1),r?.(S)};return a.jsxs("div",{ref:g,className:"g7le-toolbar__template-switcher",style:{position:"relative",display:"inline-flex"},children:[a.jsxs("button",{type:"button",className:"g7le-toolbar__template","data-testid":"g7le-toolbar-template-label","data-can-switch":y?"true":"false","aria-haspopup":y?"listbox":void 0,"aria-expanded":y?l:void 0,disabled:!y,onClick:()=>y&&d(S=>!S),onMouseEnter:()=>f(!0),onMouseLeave:()=>f(!1),title:y?o("layout_editor.chrome.toolbar.switch_template"):v,style:{display:"inline-flex",alignItems:"center",gap:6,padding:"4px 8px",fontSize:13,fontWeight:600,color:"#0f172a",letterSpacing:.1,borderRadius:6,borderWidth:1,borderStyle:"solid",borderColor:y&&(u||l)?"#cbd5e1":"transparent",backgroundColor:y&&(u||l)?"#f1f5f9":"transparent",cursor:y?"pointer":"default",outline:"none",transition:"background-color 120ms, border-color 120ms"},children:[a.jsx("span",{className:"g7le-toolbar__template-name","data-testid":"g7le-toolbar-template-name",children:v}),t&&a.jsxs("span",{className:"g7le-toolbar__template-version","data-testid":"g7le-toolbar-template-version",style:{fontSize:11,fontWeight:500,color:"#64748b",padding:"1px 6px",borderRadius:999,background:"#f1f5f9",border:"1px solid #e2e8f0"},children:["v",t]}),y&&a.jsx("span",{className:"g7le-toolbar__template-caret","aria-hidden":"true",style:{fontSize:9,color:"#94a3b8",marginLeft:1},children:"▼"})]}),y&&l&&a.jsx("div",{className:"g7le-toolbar__template-menu","data-testid":"g7le-toolbar-template-menu",role:"listbox",style:{position:"absolute",top:"calc(100% + 4px)",left:0,minWidth:240,maxWidth:360,maxHeight:360,overflowY:"auto",background:"#ffffff",border:"1px solid #e2e8f0",borderRadius:8,boxShadow:"0 8px 24px rgba(15, 23, 42, 0.14)",zIndex:30,padding:4},children:h.map(S=>{const _=S.identifier===n;return a.jsxs("button",{type:"button",role:"option","aria-selected":_,"aria-current":_?"true":void 0,className:"g7le-toolbar__template-menu-item","data-testid":"g7le-toolbar-template-menu-item","data-identifier":S.identifier,"data-current":_?"true":"false",onClick:()=>x(S.identifier),style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:8,width:"100%",padding:"8px 10px",fontSize:13,color:"#1e293b",background:_?"#eff6ff":"transparent",border:"none",borderRadius:6,cursor:_?"default":"pointer",textAlign:"left",outline:"none"},onMouseEnter:A=>{_||(A.currentTarget.style.background="#f1f5f9")},onMouseLeave:A=>{A.currentTarget.style.background=_?"#eff6ff":"transparent"},children:[a.jsxs("span",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0},children:[a.jsx("span",{"aria-hidden":"true",style:{width:12,flex:"0 0 auto",color:"#2563eb",fontSize:12,textAlign:"center"},children:_?"✓":""}),a.jsxs("span",{style:{display:"flex",flexDirection:"column",gap:2,minWidth:0},children:[a.jsx("span",{style:{fontWeight:600,color:_?"#1d4ed8":"#1e293b",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:S.name||S.identifier}),a.jsx("span",{style:{fontSize:11,color:"#94a3b8",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:S.identifier})]})]}),a.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6,flex:"0 0 auto"},children:[a.jsx("span",{style:{fontSize:10,fontWeight:600,color:S.type==="admin"?"#7c3aed":"#0891b2",textTransform:"uppercase",letterSpacing:.4},children:S.type}),S.version&&a.jsxs("span",{style:{fontSize:11,color:"#64748b"},children:["v",S.version]})]})]},S.identifier)})})]})}function YL(n={}){const{onSave:e,isDirty:t=!1,onExit:s,onEditCode:r,onManageImages:o,onManageTranslations:l,onPageSettings:d,onReset:u,onShowShortcuts:f,onPreview:g,onShowVersions:h,templateName:b,templateVersion:y,templateList:v,onSwitchTemplate:x}=n,[S,_]=w.useState(!1),[A,C]=w.useState(!1),{t:j}=Mn(),{state:E,dispatch:T}=Rn(),[D,I]=w.useState(null);w.useEffect(()=>{const M=()=>{const V=window.__g7LayoutEditorHistory;I(V?{undo:V.undo,redo:V.redo,canUndo:!!V.canUndo,canRedo:!!V.canRedo}:null)};M();const N=window.setInterval(M,250);return()=>window.clearInterval(N)},[]);const W=()=>{T({type:"TOGGLE_ROUTE_TREE"})},z=()=>E.editMode==="base"?j("layout_editor.chrome.toolbar.mode_badge.base"):E.editMode==="modal"?j("layout_editor.chrome.toolbar.mode_badge.modal"):E.editMode==="extension"?j("layout_editor.chrome.toolbar.mode_badge.extension"):E.editMode==="iteration_item"?j("layout_editor.chrome.toolbar.mode_badge.iteration_item"):null,H=()=>{E.editMode==="base"?T({type:"EXIT_BASE_EDIT"}):E.editMode==="modal"?T({type:"EXIT_MODAL_EDIT"}):E.editMode==="extension"?T({type:"EXIT_EXTENSION_EDIT"}):E.editMode==="iteration_item"&&T({type:"EXIT_ITERATION_ITEM_EDIT"})},G=z(),F=E.editMode!=="route",Z={display:"inline-flex",alignItems:"center",gap:6,padding:"6px 12px",fontSize:13,fontWeight:500,borderRadius:6,borderWidth:1,borderStyle:"solid",borderColor:"transparent",backgroundColor:"transparent",color:"#475569",cursor:"pointer",transition:"background-color 120ms, color 120ms, border-color 120ms"},Y={...Z,backgroundColor:"#2563eb",color:"#ffffff",borderColor:"#2563eb",fontWeight:600},U={...Z,borderColor:"#e2e8f0",backgroundColor:"#ffffff",color:"#0f172a"},B={backgroundColor:"#f1f5f9",color:"#0f172a",borderColor:"#cbd5e1"},te={backgroundColor:"#1d4ed8",borderColor:"#1d4ed8"},q={backgroundColor:"#f8fafc",borderColor:"#cbd5e1"};return a.jsxs("div",{className:"g7le-toolbar","data-testid":"g7le-toolbar",role:"toolbar",style:{display:"flex",alignItems:"center",gap:6,padding:"8px 12px",borderBottom:"1px solid #e2e8f0",background:"#ffffff",boxShadow:"0 1px 2px rgba(15, 23, 42, 0.04)"},children:[a.jsx("style",{children:"@keyframes g7le-spin { to { transform: rotate(360deg); } }"}),a.jsx("button",{type:"button",className:"g7le-toolbar__route-tree-toggle","data-testid":"g7le-toolbar-toggle-route-tree","aria-label":j("layout_editor.chrome.toolbar.toggle_route_tree"),title:j("layout_editor.chrome.toolbar.toggle_route_tree"),onClick:W,style:{...Z,outline:"none",padding:"6px 10px",fontSize:16,lineHeight:1,color:"#64748b"},children:"☰"}),a.jsx(GL,{templateIdentifier:E.templateIdentifier,templateName:b,templateVersion:y,templateList:v,onSwitch:x}),G&&a.jsx("span",{className:"g7le-toolbar__mode-badge","data-testid":"g7le-toolbar-mode-badge","data-mode":E.editMode,style:{padding:"2px 8px",borderRadius:999,background:"#fef3c7",color:"#92400e",fontSize:11,fontWeight:600,border:"1px solid #fde68a"},children:G}),a.jsx("div",{style:{flex:1}}),a.jsxs(a.Fragment,{children:[a.jsx(Ts,{"data-testid":"g7le-toolbar-undo","aria-label":j("layout_editor.chrome.toolbar.undo"),title:j("layout_editor.chrome.toolbar.undo"),disabled:!D?.canUndo,onClick:()=>D?.undo?.(),baseStyle:Z,hoverStyle:B,style:{opacity:D?.canUndo?1:.4},children:"↶"}),a.jsx(Ts,{"data-testid":"g7le-toolbar-redo","aria-label":j("layout_editor.chrome.toolbar.redo"),title:j("layout_editor.chrome.toolbar.redo"),disabled:!D?.canRedo,onClick:()=>D?.redo?.(),baseStyle:Z,hoverStyle:B,style:{opacity:D?.canRedo?1:.4},children:"↷"}),a.jsxs(Ts,{"data-testid":"g7le-toolbar-add-element","data-open":E.isPaletteOpen?"true":"false",disabled:!E.selectedRoute,onClick:()=>T({type:"TOGGLE_PALETTE"}),"aria-pressed":E.isPaletteOpen,baseStyle:Z,hoverStyle:B,style:E.isPaletteOpen?{backgroundColor:"#eff6ff",color:"#1d4ed8",borderColor:"#93c5fd"}:void 0,children:["+ ",j("layout_editor.chrome.toolbar.add_element")]}),a.jsx(Ts,{"data-testid":"g7le-toolbar-preview","data-previewing":A?"true":"false",disabled:!g||!E.selectedRoute?.layoutName||A,onClick:()=>{const M=g?.();M&&typeof M.then=="function"&&(C(!0),M.finally(()=>C(!1)))},baseStyle:Z,hoverStyle:B,style:{opacity:A?.7:1},children:A?a.jsxs(a.Fragment,{children:[a.jsx("span",{"data-testid":"g7le-toolbar-preview-spinner","aria-hidden":"true",style:{display:"inline-block",width:12,height:12,border:"2px solid rgba(71,85,105,0.35)",borderTopColor:"#475569",borderRadius:"50%",animation:"g7le-spin 600ms linear infinite"}}),j("layout_editor.chrome.toolbar.previewing")]}):a.jsxs(a.Fragment,{children:["👁 ",j("layout_editor.chrome.toolbar.preview")]})}),a.jsxs(Ts,{"data-testid":"g7le-toolbar-versions",disabled:!h||!(E.selectedRoute?.layoutName||E.selectedRoute?.path?.startsWith("__extension__/")),onClick:()=>h?.(),"aria-label":j("layout_editor.chrome.toolbar.version_history"),title:j("layout_editor.chrome.toolbar.version_history"),baseStyle:Z,hoverStyle:B,children:["🕘 ",j("layout_editor.chrome.toolbar.version_history")]}),a.jsxs(Ts,{"data-testid":"g7le-toolbar-edit-code",disabled:!r,onClick:()=>r?.(),baseStyle:Z,hoverStyle:B,children:["⟨/⟩ ",j("layout_editor.chrome.toolbar.edit_code")]}),a.jsxs(Ts,{"data-testid":"g7le-toolbar-images",disabled:!o||!E.selectedRoute,onClick:()=>o?.(),baseStyle:Z,hoverStyle:B,children:["🖼 ",j("layout_editor.chrome.toolbar.images")]}),a.jsxs(Ts,{"data-testid":"g7le-toolbar-translations",disabled:!l||!E.selectedRoute,onClick:()=>l?.(),baseStyle:Z,hoverStyle:B,children:["🌐 ",j("layout_editor.chrome.toolbar.translations")]}),a.jsxs(Ts,{"data-testid":"g7le-toolbar-page-settings",disabled:!d||!E.selectedRoute||E.editMode==="extension"||E.editMode==="iteration_item",onClick:()=>d?.(),baseStyle:Z,hoverStyle:B,children:["⚙ ",j("layout_editor.chrome.toolbar.page_settings")]}),a.jsxs(Ts,{"data-testid":"g7le-toolbar-reset",disabled:!u||!t,onClick:()=>u?.(),"aria-label":j("layout_editor.chrome.toolbar.reset"),title:j("layout_editor.chrome.toolbar.reset"),baseStyle:Z,hoverStyle:B,style:{opacity:t?1:.4},children:["↺ ",j("layout_editor.chrome.toolbar.reset")]}),a.jsx(Ts,{"data-testid":"g7le-toolbar-save","data-dirty":t?"true":"false","data-saving":S?"true":"false",disabled:!e||S,onClick:()=>{const M=e?.();M&&typeof M.then=="function"&&(_(!0),M.finally(()=>_(!1)))},baseStyle:Y,hoverStyle:te,style:{opacity:S?.7:t?1:.7},children:S?a.jsxs(a.Fragment,{children:[a.jsx("span",{"data-testid":"g7le-toolbar-save-spinner","aria-hidden":"true",className:"g7le-toolbar__spinner",style:{display:"inline-block",width:12,height:12,border:"2px solid rgba(255,255,255,0.4)",borderTopColor:"#ffffff",borderRadius:"50%",animation:"g7le-spin 600ms linear infinite"}}),j("layout_editor.chrome.toolbar.saving")]}):a.jsxs(a.Fragment,{children:["💾 ",j("layout_editor.chrome.toolbar.save")]})}),a.jsx(Ts,{"data-testid":"g7le-toolbar-shortcuts",disabled:!f,onClick:()=>f?.(),"aria-label":j("layout_editor.shortcuts.title"),title:j("layout_editor.shortcuts.title"),baseStyle:Z,hoverStyle:B,children:"⌨"}),a.jsxs(Ts,{"data-testid":"g7le-toolbar-exit",disabled:!s,onClick:()=>s?.(),baseStyle:U,hoverStyle:q,children:["✕ ",j("layout_editor.chrome.toolbar.exit")]})]}),F&&a.jsxs(Ts,{"data-testid":"g7le-toolbar-exit-alt-mode",onClick:H,baseStyle:U,hoverStyle:q,children:["← ",E.editMode==="base"&&j("layout_editor.chrome.toolbar.exit_base_edit"),E.editMode==="modal"&&j("layout_editor.chrome.toolbar.exit_modal_edit"),E.editMode==="extension"&&j("layout_editor.chrome.toolbar.exit_extension_edit"),E.editMode==="iteration_item"&&j("layout_editor.chrome.toolbar.exit_iteration_item_edit")]})]})}function Ju(){if(typeof window>"u")return null;try{return window.localStorage?.getItem("auth_token")??null}catch{return null}}function on(n){const e={Accept:"application/json",...n??{}},t=Ju();return t&&(e.Authorization=`Bearer ${t}`),e}function Fh(n){return encodeURIComponent(n)}async function b_(n,e){const t=`/api/admin/templates/${Fh(n)}/layout-attachments?layout_name=${encodeURIComponent(e)}`;try{const s=await fetch(t,{method:"GET",headers:on(),credentials:"same-origin"}),r=await s.json().catch(()=>null);return!s.ok||!r?.success?{ok:!1,status:s.status,message:Vh(r,s.status)}:{ok:!0,data:Array.isArray(r?.data)?r.data:[]}}catch(s){return{ok:!1,status:0,message:s instanceof Error?s.message:"network error"}}}async function x_(n,e,t){const s=`/api/admin/templates/${Fh(n)}/layout-attachments`,r=new FormData;r.append("file",t),r.append("layout_name",e);try{const o=await fetch(s,{method:"POST",headers:on(),body:r,credentials:"same-origin"}),l=await o.json().catch(()=>null);return!o.ok||!l?.success||!l?.data?.url?{ok:!1,status:o.status,message:Vh(l,o.status)}:{ok:!0,data:l.data}}catch(o){return{ok:!1,status:0,message:o instanceof Error?o.message:"network error"}}}async function v_(n){const e=`/api/admin/templates/layout-attachments/${Fh(String(n))}`;try{const t=await fetch(e,{method:"DELETE",headers:on(),credentials:"same-origin"}),s=await t.json().catch(()=>null);return!t.ok||s&&s.success===!1?{ok:!1,status:t.status,message:Vh(s,t.status)}:{ok:!0,data:!0}}catch(t){return{ok:!1,status:0,message:t instanceof Error?t.message:"network error"}}}function Vh(n,e){if(n&&typeof n=="object"&&"message"in n){const t=n.message;if(typeof t=="string"&&t.length>0)return t}return`HTTP ${e}`}function XL(n){return n<1024?`${n} B`:n<1024*1024?`${Math.round(n/1024)} KB`:`${(n/(1024*1024)).toFixed(1)} MB`}function JL(n){if(!n)return"";const e=n.match(/^(\d{4})-(\d{2})-(\d{2})/);return e?`${e[2]}-${e[3]}`:""}function w_({templateIdentifier:n,layoutName:e,t,onSelect:s,onChanged:r,onClose:o}){const[l,d]=w.useState([]),[u,f]=w.useState("idle"),[g,h]=w.useState(!1),[b,y]=w.useState(null),v=w.useRef(null),x=w.useCallback(async()=>{f("loading"),y(null);const A=await b_(n,e);A.ok?(d(A.data),f("idle")):(y(A.message),f("error"))},[n,e]);w.useEffect(()=>{x()},[x]);const S=async A=>{const C=A.target.files?.[0];if(!C)return;h(!0),y(null);const j=await x_(n,e,C);j.ok?(d(E=>[j.data,...E.filter(T=>T.id!==j.data.id)]),r?.()):y(j.message),h(!1),v.current&&(v.current.value="")},_=async A=>{if(!(typeof window<"u"&&typeof window.confirm=="function"?window.confirm(t("layout_editor.attachment_manager.delete_confirm")):!0))return;const j=await v_(A.id);j.ok?(d(E=>E.filter(T=>T.id!==A.id)),r?.()):y(j.message)};return a.jsxs("div",{className:"g7le-attachment-manager","data-testid":"g7le-attachment-manager",style:ZL,children:[a.jsxs("div",{"data-modal-drag-handle":!0,style:QL,children:[a.jsx("span",{style:{fontSize:14,fontWeight:700},"data-testid":"g7le-attachment-manager-title",children:t("layout_editor.attachment_manager.title")}),a.jsx("button",{type:"button","aria-label":"close",onClick:o,style:eO,"data-testid":"g7le-attachment-manager-close",children:"✕"})]}),a.jsx("div",{style:tO,children:a.jsxs("label",{style:nO,"data-testid":"g7le-attachment-upload",children:[g?"…":`⬆ ${t("layout_editor.attachment_manager.upload")}`,a.jsx("input",{ref:v,type:"file",accept:"image/*",onChange:S,disabled:g,style:{display:"none"},"data-testid":"g7le-attachment-upload-input"})]})}),b&&a.jsx("div",{style:sO,"data-testid":"g7le-attachment-manager-error",children:b}),a.jsx("div",{style:rO,children:u==="loading"?a.jsx("div",{style:__,"data-testid":"g7le-attachment-manager-loading",children:t("layout_editor.attachment_manager.loading")}):l.length===0&&u!=="error"?a.jsx("div",{style:__,"data-testid":"g7le-attachment-manager-empty",children:t("layout_editor.attachment_manager.empty")}):a.jsx("div",{style:oO,"data-testid":"g7le-attachment-grid",children:l.map(A=>a.jsxs("div",{style:aO,"data-testid":`g7le-attachment-card-${A.id}`,children:[a.jsx("div",{style:{...iO,backgroundImage:`url(${A.url})`}}),a.jsx("div",{style:lO,title:A.original_name,children:A.original_name}),a.jsxs("div",{style:cO,children:[XL(A.size),A.created_at?` · ${JL(A.created_at)}`:""]}),a.jsxs("div",{style:dO,children:[s&&a.jsx("button",{type:"button",onClick:()=>s(A.url),style:uO,"data-testid":`g7le-attachment-use-${A.id}`,children:t("layout_editor.attachment_manager.use_as_bg")}),a.jsx("button",{type:"button",onClick:()=>_(A),style:fO,"data-testid":`g7le-attachment-delete-${A.id}`,children:"🗑"})]})]},A.id))})}),a.jsx("div",{style:pO,children:a.jsx("button",{type:"button",onClick:o,style:gO,"data-testid":"g7le-attachment-manager-footer-close",children:t("layout_editor.attachment_manager.close")})})]})}const ZL={display:"flex",flexDirection:"column",minHeight:0,flex:1},QL={display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 16px",borderBottom:"1px solid #e2e8f0"},eO={border:"none",background:"transparent",fontSize:16,color:"#94a3b8",cursor:"pointer"},tO={padding:"10px 16px",borderBottom:"1px solid #f1f5f9",display:"flex",gap:8},nO={padding:"6px 12px",fontSize:13,border:"1px solid #2563eb",borderRadius:6,background:"#fff",color:"#2563eb",cursor:"pointer",display:"inline-flex",alignItems:"center"},sO={padding:"8px 16px",fontSize:12,color:"#b91c1c",background:"#fef2f2"},rO={padding:16,overflow:"auto",flex:1,minHeight:120},__={fontSize:13,color:"#94a3b8",textAlign:"center",padding:"32px 0"},oO={display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(140px, 1fr))",gap:12},aO={display:"flex",flexDirection:"column",gap:4,border:"1px solid #e2e8f0",borderRadius:8,padding:8},iO={width:"100%",height:88,borderRadius:6,border:"1px solid #cbd5e1",backgroundSize:"cover",backgroundPosition:"center",backgroundColor:"#f8fafc"},lO={fontSize:12,fontWeight:600,color:"#0f172a",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},cO={fontSize:11,color:"#64748b"},dO={display:"flex",gap:6,marginTop:2},uO={flex:1,padding:"4px 6px",fontSize:11,border:"1px solid #2563eb",borderRadius:6,background:"#2563eb",color:"#fff",cursor:"pointer"},fO={padding:"4px 8px",fontSize:12,border:"1px solid #fecaca",borderRadius:6,background:"#fff",color:"#dc2626",cursor:"pointer"},pO={padding:"10px 16px",borderTop:"1px solid #e2e8f0",display:"flex",justifyContent:"flex-end"},gO={padding:"6px 14px",fontSize:13,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"};function Zu(n){return encodeURIComponent(n)}async function hO(n,e,t){const s=new URLSearchParams;e&&s.set("layout_name",e);const r=s.toString(),o=`/api/admin/templates/${Zu(n)}/custom-translations`+(r?`?${r}`:"");try{const l=await fetch(o,{method:"GET",headers:on(),credentials:"same-origin"}),d=await l.json().catch(()=>null);return!l.ok||!d?.success?{ok:!1,status:l.status,message:Qu(d,l.status)}:{ok:!0,data:Array.isArray(d?.data)?d.data:[]}}catch(l){return{ok:!1,status:0,message:l instanceof Error?l.message:"network error"}}}async function mO(n,e,t,s){const r=`/api/admin/templates/${Zu(n)}/custom-translations/${e}`;try{const o=await fetch(r,{method:"PUT",headers:on({"Content-Type":"application/json"}),body:JSON.stringify({values:t,expected_lock_version:s}),credentials:"same-origin"}),l=await o.json().catch(()=>null);return!o.ok||!l?.success||!l?.data?{ok:!1,status:o.status,message:Qu(l,o.status)}:{ok:!0,data:l.data}}catch(o){return{ok:!1,status:0,message:o instanceof Error?o.message:"network error"}}}async function yO(n,e){const t=`/api/admin/templates/${Zu(n)}/custom-translations/${e}`;try{const s=await fetch(t,{method:"DELETE",headers:on(),credentials:"same-origin"}),r=await s.json().catch(()=>null);return!s.ok||r&&r.success===!1?{ok:!1,status:s.status,message:Qu(r,s.status)}:{ok:!0,data:!0}}catch(s){return{ok:!1,status:0,message:s instanceof Error?s.message:"network error"}}}async function bO(n,e){const t=`/api/admin/templates/${Zu(n)}/custom-translations`;try{const s=await fetch(t,{method:"DELETE",headers:on({"Content-Type":"application/json"}),body:JSON.stringify({ids:e}),credentials:"same-origin"}),r=await s.json().catch(()=>null);return!s.ok||!r?.success?{ok:!1,status:s.status,message:Qu(r,s.status)}:{ok:!0,data:{deleted:typeof r?.data?.deleted=="number"?r.data.deleted:e.length}}}catch(s){return{ok:!1,status:0,message:s instanceof Error?s.message:"network error"}}}const S_=/\$t:(custom\.[A-Za-z0-9_\-]+\.\d+)/g;function xO(n){const e=new Set,t=s=>{if(typeof s=="string"){if(s.includes("$t:custom.")){let r;for(S_.lastIndex=0;(r=S_.exec(s))!==null;)e.add(r[1])}return}if(Array.isArray(s)){for(const r of s)t(r);return}if(s&&typeof s=="object")for(const r of Object.values(s))t(r)};return t(n),e}function Qu(n,e){if(n&&typeof n=="object"&&"message"in n){const t=n.message;if(typeof t=="string"&&t.length>0)return t}return`HTTP ${e}`}const Kh=Ht("EditorSpecLoader"),vO=["controls","componentCapabilities","actionRecipes","conditionRecipes","pageSettings","initActionRecipes","errorRecipes","computedRecipes","loadingComponents"],wO=["actionRecipes","initActionRecipes","errorRecipes","computedRecipes","loadingComponents"];function k_(n){if(typeof window>"u")return[];const t=window.G7Config?.[n];if(!Array.isArray(t))return[];const s=[];for(const r of t){const o=r?.identifier;typeof o=="string"&&o.length>0&&s.push(o)}return s}async function _O(n,e,t,s){const o=`${t}/${n==="template"?"templates":n==="module"?"modules":"plugins"}/${encodeURIComponent(e)}/editor-spec`;try{const l=await s(o);if(!l.ok)return l.status!==404&&Kh.warn(`fetchOneSpec: HTTP ${l.status}`,o),null;const d=await l.json();return!d?.success||!d.data?null:d.data.spec??null}catch(l){return Kh.warn("fetchOneSpec: fetch failed",o,l),null}}function SO(n){return wO.includes(n)}function kO(n,e){return n==null||typeof n!="object"?n:{...n,__source:e}}function CO(n,e,t,s){const r=e[t];if(!r||typeof r!="object")return;const o=n[t]??{};if(s&&SO(t)){const l={};for(const[d,u]of Object.entries(r))l[d]=kO(u,s);n[t]={...o,...l};return}n[t]={...o,...r}}function jO(n,e){if(!e.nesting)return;const t=n.nesting??{},s=new Set(t.draggable??[]);for(const r of e.nesting.draggable??[])s.add(r);t.draggable=Array.from(s),t.containers={...t.containers??{},...e.nesting.containers??{}},n.nesting=t}function EO(n,e){if(!e.componentPalette)return;const t=n.componentPalette??{},s=[...t.groups??[],...e.componentPalette.groups??[]];t.groups=s,t.entries={...t.entries??{},...e.componentPalette.entries??{}},n.componentPalette=t}function RO(n,e){if(!e.states)return;const t=n.states??{},s=[...t.groups??[],...e.states.groups??[]];t.groups=s,n.states=t}function AO(n,e){if(!Array.isArray(e.stateLabels)||e.stateLabels.length===0)return;const t=[...n.stateLabels??[],...e.stateLabels],s=new Map;for(const r of t)!r||typeof r.key!="string"||typeof r.scope!="string"||s.set(`${r.scope}:${r.key}`,r);n.stateLabels=Array.from(s.values())}function TO(n,e){if(!e.actionChipCandidates)return;const t=n.actionChipCandidates??{};for(const s of["response","error","payload"]){const r=e.actionChipCandidates[s];!Array.isArray(r)||r.length===0||(t[s]=[...t[s]??[],...r])}n.actionChipCandidates=t}function $O(n,e){if(!e.sampleData)return;const t=n.sampleData??{};t.byDataSourceId={...t.byDataSourceId??{},...e.sampleData.byDataSourceId??{}},t.byEndpointPattern={...t.byEndpointPattern??{},...e.sampleData.byEndpointPattern??{}},n.sampleData=t}function C_(n,e,t){for(const s of vO)CO(n,e,s,t);jO(n,e),EO(n,e),RO(n,e),AO(n,e),TO(n,e),$O(n,e),e.version&&(n.version=e.version)}async function NO(n){const e=n.apiBaseUrl??"/api",t=n.fetcher??(typeof fetch<"u"?fetch:void 0);if(!t)return Kh.warn("loadEditorSpecBundle: fetch unavailable, returning null spec"),{spec:null,sampleGlobalSources:[]};const s=n.activeModuleIdentifiers??k_("activeModules"),r=n.activePluginIdentifiers??k_("activePlugins"),o=[...s.map(g=>({kind:"module",id:g})),...r.map(g=>({kind:"plugin",id:g})),{kind:"template",id:n.templateIdentifier}],l=await Promise.all(o.map(g=>_O(g.kind,g.id,e,t)));let d=null;const u=[],f={};if(n.coreSeed&&(d={},C_(d,n.coreSeed,{kind:"core"})),o.forEach((g,h)=>{const b=l[h];if(!b)return;b.sampleGlobal&&typeof b.sampleGlobal=="object"&&u.push({id:g.id,kind:g.kind,sampleGlobal:b.sampleGlobal});const y=b.sampleData?.byDataSourceId;if(y&&typeof y=="object"){const v=g.kind==="template"?"template":`${g.kind}:${g.id}`;f[v]={...f[v]??{},...y}}d===null&&(d={}),C_(d,b,{kind:g.kind,id:g.id})}),d!==null&&Object.keys(f).length>0){const g=d;g.sampleData={...g.sampleData??{},bySource:f}}return{spec:d,sampleGlobalSources:u}}function Gh(n,e){return n?.componentCapabilities?.[e]??null}function Fs(n,e){return n?.controls?.[e]??null}function DO(n){return n?.initActionRecipes??{}}function IO(n){return n?.computedRecipes??{}}function LO(n){return n?.errorRecipes??{}}function OO(n){const e=n?.loadingComponents;return!e||typeof e!="object"?[]:Object.values(e).filter(t=>t!=null&&typeof t=="object"&&typeof t.name=="string")}function MO(n,e,t){const s=n?.stateLabels;if(!Array.isArray(s))return null;for(const r of s)if(r?.scope===e&&r?.key===t)return typeof r.label_key=="string"?r.label_key:null;return null}function Yh(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function zO(n){return n===null?"null":typeof n=="string"?n.length>40?`${n.slice(0,40)}…`:n:typeof n=="number"||typeof n=="boolean"?String(n):""}function PO(n){const e=n.find(t=>Yh(t));if(Yh(e))return Object.keys(e).slice(0,8)}function BO(n){return Object.keys(n).slice(0,8)}function HO(n){const e=Object.entries(n);return e.length===0?!1:e.some(([,t])=>t===null||typeof t!="object")}function Xh(n,e,t,s,r){if(Array.isArray(n)){r(e,"array",`[${n.length}]`,PO(n));return}if(Yh(n)){if(e&&HO(n)){const o=BO(n);r(e,"object",`{${o.length}}`,o)}if(t>=s)return;for(const[o,l]of Object.entries(n)){const d=e?`${e}.${o}`:o;Xh(l,d,t+1,s,r)}return}r(e,"scalar",zO(n))}function WO(n,e,t){const s=[];let r=n;for(const o of e){if(!r||(r=(Array.isArray(r.children)?r.children:[])[o],!r))break;const d=r.iteration;if(!(!d||d.source===void 0)&&(typeof d.index_var=="string"&&d.index_var.length>0&&s.push({name:d.index_var,kind:"index"}),typeof d.item_var=="string"&&d.item_var.length>0)){const u=typeof d.source=="string"?d.source:"",f=u&&t?.get(j_(u))||[];s.push({name:d.item_var,kind:"item",itemFields:f})}}return s}function j_(n){return n.replace(/^\{\{|\}\}$/g,"").trim()}function UO(n){const e=new Map;for(const t of n)t.shape==="array"&&t.itemFields&&t.itemFields.length>0&&e.set(j_(t.expression),t.itemFields);return e}function Jh(n){const e=n.maxDepth??4,t=[];for(const s of n.dataSources??[])!s||typeof s.id!="string"||s.id.length===0||Xh(s.sample,"",0,e,(r,o,l,d)=>{const u=r?`{{${s.id}.${r}}}`:`{{${s.id}}}`;t.push({expression:u,source:"data_source",sourceId:s.id,path:r,shape:o,groupLabelKey:s.labelKey?.startsWith("$t:")?s.labelKey.slice(3):s.labelKey,preview:l,itemFields:d})});for(const s of n.states??[])!s||typeof s.scope!="string"||Xh(s.tree,"",0,e,(r,o,l,d)=>{if(!r)return;const u=MO(n.spec,s.scope,r)??void 0;t.push({expression:`{{${s.scope}.${r}}}`,source:s.scope,sourceId:s.scope,path:r,shape:o,labelKey:u?.startsWith("$t:")?u.slice(3):u,preview:l,itemFields:d})});for(const s of n.iterationVars??[])if(!(!s||typeof s.name!="string"||s.name.length===0)){if(s.kind==="index"){t.push({expression:`{{${s.name}}}`,source:"iteration",sourceId:s.name,path:"",shape:"scalar",preview:"0"});continue}for(const r of s.itemFields??[])t.push({expression:`{{${s.name}.${r}}}`,source:"iteration",sourceId:s.name,path:r,shape:"scalar",preview:""})}return t}const qO=["$localized"];function FO(n){const e=n.trim(),t=e.indexOf("(");if(t===-1||!e.endsWith(")"))return{fn:null,inner:e};const s=e.slice(0,t).trim();if(!qO.includes(s))return{fn:null,inner:e};const r=e.slice(t+1,-1);let o=0,l=null;for(let d=0;d<r.length;d++){const u=r[d];if(l){if(u==="\\"){d++;continue}u===l&&(l=null);continue}if(u==="'"||u==='"'||u==="`"){l=u;continue}if(u==="("||u==="[")o++;else if(u===")"||u==="]"){if(o--,o<0)return{fn:null,inner:e}}else if(o===0&&u===",")return{fn:null,inner:e}}return o!==0?{fn:null,inner:e}:{fn:s,inner:r.trim()}}const VO=["_global","_local","route","query","_computed"];function Zh(n){let e=n.trim();for(;e.startsWith("(")&&e.endsWith(")");){let t=0,s=!0;for(let r=0;r<e.length;r++)if(e[r]==="(")t++;else if(e[r]===")"&&(t--,t===0&&r<e.length-1)){s=!1;break}if(!s)break;e=e.slice(1,-1).trim()}return e}function Yr(n){if(typeof n!="string")return null;const e=n.trim(),t=/^\{\{\s*([^{}]+?)\s*\}\}$/.exec(e);if(!t)return null;let s=Zh(t[1].trim()),r;{let y=0;for(let v=0;v<s.length-1;v++){const x=s[v];if(x==="("||x==="[")y++;else if(x===")"||x==="]")y--;else if(y===0&&x==="?"&&s[v+1]==="?"){r=s.slice(v+2).trim(),s=s.slice(0,v).trim();break}}}s=Zh(s);const o=FO(s),l=o.fn??void 0;l&&(s=Zh(o.inner));const d=s.includes("?."),u=s.replace(/\?\./g,".");if(!/^[A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*|\[\d+\])*$/.test(u)||r!==void 0&&!/^(\[\s*\]|\{\s*\}|''|""|`+`|-?\d+(\.\d+)?|true|false|null)$/.test(r))return null;const f=u.indexOf("."),g=f===-1?u:u.slice(0,f),h=f===-1?"":u.slice(f+1);return{...VO.includes(g)?{source:g,sourceId:g,path:h}:{source:"data_source",sourceId:g,path:h},optional:d,fallback:r,localeFn:l}}function Ha(n,e,t,s){const r=e?e.split(".").filter(Boolean):[];return`{{${[n,...r].join("?.")} ?? ${t==="array"?"[]":t==="object"?"{}":"''"}}}`}function Qh(n,e){return n.filter(t=>t.shape===e)}function em(n,e){const t=e.trim().toLowerCase();return t===""?n:n.filter(s=>[s.resolvedLabel??"",s.sourceId,s.path,s.preview].join(" ").toLowerCase().includes(t))}function E_(n,e,t){const s={response:[{path:"data",labelKey:"layout_editor.action_chip.response_data",shape:"object"},{path:"message",labelKey:"layout_editor.action_chip.response_message",shape:"scalar"}],error:[{path:"status",labelKey:"layout_editor.action_chip.error_status",shape:"scalar"},{path:"message",labelKey:"layout_editor.action_chip.error_message",shape:"scalar"},{path:"errors",labelKey:"layout_editor.action_chip.error_errors",shape:"object"},{path:"data",labelKey:"layout_editor.action_chip.error_data",shape:"object"},{path:"statusText",labelKey:"layout_editor.action_chip.error_status_text",shape:"scalar"}],payload:[{path:"data",labelKey:"layout_editor.action_chip.payload_data",shape:"object"}]},r=n==="response"?"response":n==="error"?"error":"message",o=new Set,l=[];for(const u of s[n])o.has(u.path)||(o.add(u.path),l.push(u));const d=t?.[n];if(Array.isArray(d))for(const u of d)!u||typeof u.path!="string"||typeof u.labelKey!="string"||o.has(u.path)||(o.add(u.path),l.push({path:u.path,labelKey:u.labelKey,shape:u.shape??"scalar"}));return l.map(u=>({expression:`{{${r}.${u.path}}}`,source:"_local",sourceId:r,path:u.path,shape:u.shape,labelKey:u.labelKey,preview:e(u.labelKey)}))}const tm=/\{\{(?:[^}]|\}(?!\}))*\}\}/g;function Wa(n){const e=[];if(typeof n!="string"||n.length===0)return e;let t=0,s=0;const r=new RegExp(tm.source,"g");let o;for(;(o=r.exec(n))!==null;){const l=o.index,d=l+o[0].length;l>t&&e.push({kind:"literal",raw:n.slice(t,l),start:t,end:l}),e.push({kind:"binding",raw:o[0],start:l,end:d,parsed:Yr(o[0]),bindingIndex:s++}),t=d}return t<n.length&&e.push({kind:"literal",raw:n.slice(t),start:t,end:n.length}),e}function ef(n){return Wa(n).filter(e=>e.kind==="binding")}function nm(n){return typeof n!="string"?!1:new RegExp(tm.source).test(n)}function KO(n){const e=new Set(n.map(s=>s.trim()));let t=0;for(;e.has(`p${t}`);)t+=1;return`p${t}`}function R_(n,e,t){const s=typeof n=="string"?n:"",r=Math.max(0,Math.min(e,s.length)),o=s.slice(0,r),l=s.slice(r),d=o.length>0&&!/\s$/.test(o)?" ":"",u=l.length>0&&!/^\s/.test(l)?" ":"";return`${o}${d}{${t}}${u}${l}`}function sm(n,e){const t=typeof n=="string"?n:"";return Ua(t).includes(e)?t:t.length===0?`{${e}}`:/\s$/.test(t)?`${t}{${e}}`:`${t} {${e}}`}function A_(n){return ef(n).map(e=>({bindingIndex:e.bindingIndex??0,expression:e.raw,parsed:e.parsed??null,isComplex:(e.parsed??null)===null}))}function tf(n){return typeof n!="string"?"":n.replace(new RegExp(tm.source,"g")," ").replace(/\s+/g," ").trim()}const GO=/\$t:([a-zA-Z0-9._-]+)/g,T_="custom.";function rm(n,e){return typeof n!="string"||n.length===0?typeof n=="string"?n:"":e?Wa(n).map(t=>t.kind!=="literal"?t.raw:t.raw.replace(GO,(s,r)=>{if(r.startsWith(T_))return s;const o=e(r);return o&&o!==r?o:s})).join(""):n}const Gi="(?:(?!\\|[a-zA-Z0-9_]+=).)*",YO=new RegExp(`^\\s*\\$t:([a-zA-Z0-9._-]+)((?:\\|[a-zA-Z0-9_]+=${Gi})*)`),XO=new RegExp(`\\|([a-zA-Z0-9_]+)=(${Gi})`,"g");function Xr(n){if(typeof n!="string")return"";const e=Yr(n);if(e)return e.path||e.sourceId;const t=n.trim().replace(/^\{\{\s*/,"").replace(/\s*\}\}$/,"");let s=-1;for(let d=0;d<t.length;d++)if(t[d]==="|"&&t[d+1]!=="|"&&t[d-1]!=="|"){s=d;break}if(s>0){const d=t.slice(0,s).trim(),u=Yr(`{{${d}}}`);if(u)return u.path||u.sourceId;const f=d.replace(/\?\./g,".").replace(/\s*\?\?.*$/,"").trim();if(/^[A-Za-z_$][\w$.]*$/.test(f)){const g=f.split(".").filter(Boolean);return g.length>1&&g.slice(1).join(".")||f}}const r=t.replace(/\s+/g," ").trim(),o=r.replace(/\s*(\?\?|\|\|)\s*(\[\s*\]|\{\s*\}|'[^']*'|"[^"]*"|\d+|null|undefined)\s*$/,"").trim(),l=/\.([A-Za-z_$][\w$]*)\s*$/.exec(o);return l?l[1]:r}const $_=/\$(?:core|module|plugin)_settings:[a-zA-Z0-9._:-]+/g;function N_(n){return typeof n=="string"&&new RegExp($_.source).test(n)}function JO(n){return typeof n!="string"?"":n.replace(/^\$(?:core|module|plugin)_settings:/,"").split(/[.:]/).filter(Boolean).pop()||n}function D_(n){const e=[];for(const t of Wa(n)){if(t.kind==="binding"){e.push({kind:"chip",label:Xr(t.raw)});continue}let s=0;const r=t.raw,o=new RegExp($_.source,"g");let l;for(;(l=o.exec(r))!==null;)l.index>s&&e.push({kind:"text",label:r.slice(s,l.index)}),e.push({kind:"chip",label:JO(l[0])}),s=l.index+l[0].length;s<r.length&&e.push({kind:"text",label:r.slice(s)})}return e}function ZO(n){return typeof n!="string"?!1:/\{\{/.test(n)?!0:N_(n)}function om(n,e){const t={chipValue:"",bindings:[],paramLabels:{},keyifiable:!1};if(typeof n!="string"||n.length===0)return t;const s=[],r={},o=y=>{const v=`p${s.length}`;return s.push(y),r[v]=Xr(y),`{${v}}`};let l=n,d="";const u=YO.exec(n);if(u&&!u[1].startsWith(T_)){const y=u[1],v=u[2]??"",x=n.slice(u[0].length),S=new Map,_=new RegExp(XO.source,"g");let A;for(;(A=_.exec(v))!==null;)A[2]&&A[2].includes("{{")&&S.set(A[1],A[2]);const C=e?e(y):"";if(C&&C!==y&&!C.startsWith("$t:"))d=C.replace(/\{\{?([a-zA-Z0-9_]+)\}?\}/g,(j,E)=>{const T=S.get(E);return T?o(T):j});else return t;l=x}const f=rm(l,e),g=Wa(f).map(y=>y.kind==="binding"?o(y.raw):y.raw).join(""),h=`${d}${g}`;return/\$t:[a-zA-Z0-9._-]+/.test(h)||s.length===0?t:{chipValue:h,bindings:s,paramLabels:r,keyifiable:!0}}function I_(n,e){return e.bindings.length?n+e.bindings.map((t,s)=>`|p${s}=${t}`).join(""):n}function L_(n,e){const t=ef(e).map(r=>r.raw);if(t.length===0)return n;const s=t.map((r,o)=>`|p${o}=${r}`).join("");return`${n}${s}`}function O_(n){if(typeof n!="string")return"";const e=Wa(n);let t=0;return e.map(s=>s.kind==="binding"?`{p${t++}}`:s.raw).join("")}const M_=new RegExp(`^\\s*\\$t:([a-zA-Z0-9._-]+)((?:\\|[a-zA-Z0-9_]+=${Gi})+)\\s*$`),QO=new RegExp(`\\|([a-zA-Z0-9_]+)=(${Gi})`,"g");function Ss(n){if(typeof n!="string")return null;const e=M_.exec(n);if(!e)return null;const t=e[1],s=e[2],r=[],o=new RegExp(QO.source,"g");let l;for(;(l=o.exec(s))!==null;){const d=l[1],u=l[2];r.push({name:d,expression:u,parsed:Yr(u)})}return{key:t,params:r}}function z_(n){return typeof n=="string"&&M_.test(n)}function Ua(n){if(typeof n!="string")return[];const e=[],t=/\{\{?(p\d+)\}?\}/g;let s;for(;(s=t.exec(n))!==null;)e.push(s[1]);return e.sort()}function eM(n,e,t){if(typeof n!="string")return n;const s=new RegExp(`(\\|${e}=)${Gi}`);return s.test(n)?n.replace(s,`$1${t}`):n}function $c(n,e){if(typeof n!="string")return n;const t=new RegExp(`\\|${e}=${Gi}`);return n.replace(t,"")}function P_(n,e){return typeof n!="string"?n:n.replace(new RegExp(`\\s*\\{\\{?${e}\\}?\\}\\s*`,"g")," ").replace(/\s+/g," ").trim()}function tM(n,e){const t=o=>ef(typeof o=="string"?o:"").map(l=>l.raw.replace(/\s+/g,"")).sort(),s=t(n),r=t(e);return s.length!==r.length?!1:s.every((o,l)=>o===r[l])}function B_(n){return n.__source?.kind==="base"}function H_(n){return n.__source?.kind==="partial"}function nM(n){return n.__source?.kind==="route"}function nf(n,e){return n.__source?.kind!=="extension"?!1:e==null?!0:n.__source.extensionId!==e}function W_(n){return n.type==="extension_point"}function am(n=[]){for(const e of n)if(e.iteration&&e.iteration.source!==void 0)return!0;return!1}function sM(n,e=[]){for(const t of e)if(t.iteration&&t.iteration.source!==void 0)return!0;return n.iteration&&n.iteration.source!==void 0?!0:U_(n)}function U_(n){if(typeof n.text=="string"&&q_(n.text)&&!rM(n.text))return!0;if(n.props&&typeof n.props=="object"){for(const e of Object.values(n.props))if(typeof e=="string"&&q_(e))return!0}return!1}function q_(n){return/\{\{[\s\S]*?\}\}/.test(n)}function rM(n){const e=Ss(n);return e!==null&&e.key.startsWith("custom.")}function oM(n,e){return n??e??null}function im(n,e,t){if(W_(n))return!0;switch(e){case"route":return B_(n)||H_(n)||nf(n);case"base":return nf(n);case"modal":return nf(n);case"extension":return nf(n,t)?!0:B_(n)||nM(n)||H_(n);default:return!1}}function zn(n){return typeof n=="object"&&n!==null&&typeof n.responsive=="string"}function sf(n,e){return zn(n)?zn(e)&&n.responsive===e.responsive:!zn(e)&&n===e}function rs(n){const e=[];let t=!1;for(const s of n){if(zn(s)){e.push("responsive",s.responsive),t=!0;continue}t?e.push("children",String(s)):(e.push(String(s)),t=!0)}return e.join(".")}function yo(n){return Array.isArray(n.children)?n.children:[]}function rf(n,e){const t=n.responsive?.[e];return t&&Array.isArray(t.children)?t.children:[]}function en(n,e){if(!n)return null;if(e.length===0)return n;let t=n,s=yo(n);for(const r of e){if(zn(r)){s=rf(t,r.responsive);continue}if(r<0||r>=s.length||(t=s[r],!t))return null;s=yo(t)}return t}function aM(n,e,t){if(!n||e.length===0)return e;let s=n,r=yo(n),o;for(let l=0;l<e.length;l++){const d=e[l];if(zn(d)){r=rf(s,d.responsive);continue}const u=r[d]??null;if(!u)return e;const f=u.__source?.kind,g=u.__source?.extensionId,h=f==="extension"&&t!=null&&g===t;if(f==="extension"&&o!=="extension"&&!h)return e.slice(0,l+1);o=f,s=u,r=yo(u)}return e}function F_(n,e){if(e.length===0)return null;const t=e[e.length-1];if(zn(t))return null;const s=t,r=e.length>=2?e[e.length-2]:void 0;if(r!==void 0&&zn(r)){const l=en(n,e.slice(0,-2));return l?{owner:l,children:rf(l,r.responsive),branchKey:r.responsive,index:s}:null}const o=en(n,e.slice(0,-1));return o?{owner:o,children:yo(o),index:s}:null}function lm(n,e){if(n.branchKey!==void 0){const t={...n.owner.responsive??{}};t[n.branchKey]={...t[n.branchKey]??{},children:e},n.owner.responsive=t}else n.owner.children=e}function bo(n){const e={...n};e.props&&typeof e.props=="object"&&(e.props={...e.props});const t=yo(n);if(t.length>0&&(e.children=t.map(bo)),n.responsive&&typeof n.responsive=="object"){const s={};for(const r of Object.keys(n.responsive)){const o=n.responsive[r];if(!o||typeof o!="object"){s[r]=o;continue}const l={...o};Array.isArray(o.children)&&(l.children=o.children.map(bo)),l.props&&typeof l.props=="object"&&(l.props={...l.props}),s[r]=l}e.responsive=s}return e}function cm(n,e,t,s){const r=bo(n),o=e.length>0?e[e.length-1]:void 0;if(o!==void 0&&zn(o)){const g=en(r,e.slice(0,-1));if(!g)return r;const h=rf(g,o.responsive),b=Math.max(0,Math.min(t,h.length)),y=[...h];return y.splice(b,0,s),lm({owner:g,branchKey:o.responsive},y),r}const l=en(r,e);if(!l)return r;const d=yo(l),u=Math.max(0,Math.min(t,d.length)),f=[...d];return f.splice(u,0,s),l.children=f,r}function dm(n,e){if(e.length===0)return n;const t=bo(n),s=F_(t,e);if(!s||s.index<0||s.index>=s.children.length)return t;const r=[...s.children];return r.splice(s.index,1),lm(s,r),t}function iM(n,e,t,s){if(e.length===0||!t||zn(e[e.length-1]))return n;const r=bo(n),o=en(r,e);if(!o)return r;const l=o.responsive&&typeof o.responsive=="object"?o.responsive[t]:void 0;if(l&&Array.isArray(l.children))return r;const d=s&&o.responsive&&typeof o.responsive=="object"?o.responsive[s]:void 0,f=(d&&Array.isArray(d.children)?d.children:yo(o)).map(bo),g={...o.responsive??{}};return g[t]={...g[t]??{},children:f},o.responsive=g,r}function lM(n,e,t){if(e.length===0||!t||zn(e[e.length-1]))return n;const s=bo(n),r=en(s,e);if(!r||!r.responsive||typeof r.responsive!="object")return s;const o=r.responsive[t];if(!o||!Array.isArray(o.children))return s;const l={...r.responsive},d={...l[t]};return delete d.children,Object.keys(d).length===0?delete l[t]:l[t]=d,r.responsive=Object.keys(l).length>0?l:void 0,s}function cM(n,e,t,s){if(e.length===0)return n;const r=en(n,e);if(!r||dM(e,t))return n;const o=bo(r),l=dm(n,e),d=V_(t,e);let u=s;const f=e.slice(0,-1);if(K_(f,t)){const g=e[e.length-1];(typeof g=="number"?g:0)<s&&(u=Math.max(0,s-1))}return cm(l,d,u,o)}function V_(n,e){if(e.length===0)return n;const t=e.length-1;if(n.length<=t)return n;for(let o=0;o<t;o++)if(!sf(n[o],e[o]))return n;const s=e[t],r=n[t];if(zn(s)||zn(r))return n;if(r>s){const o=[...n];return o[t]=r-1,o}return n}function K_(n,e){if(n.length!==e.length)return!1;for(let t=0;t<n.length;t++)if(!sf(n[t],e[t]))return!1;return!0}function dM(n,e){if(e.length<n.length)return!1;for(let t=0;t<n.length;t++)if(!sf(e[t],n[t]))return!1;return e.length>n.length||K_(n,e)}function um(n){const e={...n};if(e.props&&typeof e.props=="object"&&(e.props={...e.props}),typeof e.id=="string"&&e.id.length>0){const s=typeof e.name=="string"?e.name:"node";e.id=`${s}_${uM()}`}const t=yo(n);return t.length>0&&(e.children=t.map(um)),e}function Ar(n,e,t){if(e.length===0)return t(n);const s=bo(n),r=en(s,e);if(!r)return s;const o=t(r),l=F_(s,e);if(!l||l.index<0||l.index>=l.children.length)return s;const d=[...l.children];return d[l.index]=o,lm(l,d),s}function uM(){return Math.floor(Math.random()*2821109907456).toString(36).padStart(8,"0")}function Yi(n){if(!Array.isArray(n)||n.length===0)return[];const e=[];for(const t of n){const s=fM(t);s.length>0&&e.push(...s)}return e}function fM(n){if(!n||typeof n!="object")return[];const e=n.__source,t=n._fromBase===!0,s=e?.kind;if(s==="extension"||s==="partial")return[];if(s==="base"||t){const o=Array.isArray(n.children)?n.children:[];return Yi(o)}const r={...n};return delete r.__source,delete r._fromBase,delete r.__injectedProps,Array.isArray(r.children)&&(r.children=Yi(r.children)),[r]}function Nc(n){if(!n||typeof n!="object")return n;const e=n.__editor,t=e&&typeof e=="object"&&!Array.isArray(e)?e.original:void 0,s=t&&typeof t=="object"&&!Array.isArray(t)?t:void 0,r=Array.isArray(n.components)?n.components:[],o=r.length>0,l=Yi(r),d=s?{...s}:{...n};if(typeof d.extends=="string"&&d.extends.length>0){delete d.components;const f=d.slots&&typeof d.slots=="object"&&!Array.isArray(d.slots)?d.slots:{},g=Object.keys(f);if(!o&&g.length>0){const h={};for(const[b,y]of Object.entries(f))h[b]=Array.isArray(y)?Yi(y):y;d.slots=h}else if(g.length===1)d.slots={[g[0]]:l};else if(g.length===0)d.slots={content:l};else{const h={};for(const[b,y]of Object.entries(f))h[b]=Array.isArray(y)?Yi(y):y;d.slots=h}}else d.components=l,delete d.slots;return delete d.lock_version,delete d.__editor,d}const G_=/^\s*\$t:([a-zA-Z0-9._-]+)\s*$/,of="custom.",pM=/\{\{.*?\}\}/;function gM(n){return!!(!n||n.iteration&&typeof n.iteration=="object")}function Y_(n,e){const t=n?.text,s=typeof t=="string"?t:"";if(gM(n)||typeof t!="string")return{sourceState:"plain_text",editable:!1,customKey:null,displayValue:s};const r=Ss(s);if(r&&r.key.startsWith(of)){const l=e?e(r.key):r.key;return{sourceState:"custom_key",editable:!0,customKey:r.key,displayValue:l,isParamKey:!0}}const o=G_.exec(s);if(o){const l=o[1];if(l.startsWith(of)){const u=e?e(l):l;return{sourceState:"custom_key",editable:!0,customKey:l,displayValue:u}}const d=e?e(l):"";return{sourceState:"plain_text",editable:!0,customKey:null,displayValue:d&&d!==l?d:""}}if(pM.test(s)){const l=tf(s),d=G_.exec(l);if(d&&d[1].startsWith(of)){const h=d[1],b=e?e(h):h;return{sourceState:"custom_key",editable:!0,customKey:h,displayValue:b}}const u=rm(s,e),f=tf(u),g=/\$t:[a-zA-Z0-9._-]+/.test(f);if(f.length>0){const h=om(s,e);return{sourceState:"plain_with_binding",editable:!0,customKey:null,displayValue:g?"":f,chipValue:h.keyifiable?h.chipValue:void 0,chipParamLabels:h.keyifiable?h.paramLabels:void 0}}return{sourceState:"binding_expression",editable:!1,customKey:null,displayValue:s}}return{sourceState:"plain_text",editable:!0,customKey:null,displayValue:s}}function hM(){const{state:n}=Rn(),e=Gr(),t=n.templateIdentifier,s=n.locale,r=n.selectedRoute?.layoutName??null,o=w.useCallback(g=>{try{const b=ts.getInstance().translate(g,{templateId:t,locale:s});return b&&b!==g?b:""}catch{return""}},[t,s]),l=w.useCallback(g=>Y_(g,o),[o]),d=w.useCallback(g=>{ir({op:"inline_edit_cancel",componentPath:g?rs(g):null,timestamp:Date.now()})},[]),u=w.useCallback(async(g,h)=>{if(!e)return{kind:"error",message:"no document context"};const y={children:e.document?.raw?.components??[]},v=en(y,g),x=Y_(v,o);if(!x.editable)return ir({op:"inline_edit_blocked_binding",sourceState:x.sourceState,componentPath:rs(g),timestamp:Date.now()}),{kind:"blocked"};if(x.customKey){if(h===x.displayValue)return{kind:"noop",translationKey:x.customKey};Dc(t,s,x.customKey,h);const D=await af(t,x.customKey,s,h);return D.kind==="error"?{kind:"error",message:D.message}:(await xo(t,s),ir({op:"inline_edit_update_value",sourceState:"custom_key",componentPath:rs(g),translationKey:x.customKey,toLocale:s,valueLength:h.length,valueHash:Uh(h),timestamp:Date.now()}),{kind:"updated",translationKey:x.customKey})}const S=typeof v?.text=="string"?v.text:"",_=x.sourceState==="plain_with_binding",A=rm(S,o),C=_?O_(A):h,j=D=>_?L_(D,S):D;e.patchLayout(D=>Ar({children:D},g,z=>({...z,text:h})).children??[]);const E=await Xi(t,r,s,C);if(E.kind==="error"||!E.resource)return{kind:"error",message:E.message};const T=E.resource.translation_key;return Dc(t,s,T,C),e.patchLayout(D=>Ar({children:D},g,z=>({...z,text:j(`$t:${T}`)})).children??[]),await xo(t,s),ir({op:"inline_edit_create_key",sourceState:x.sourceState,componentPath:rs(g),translationKey:T,toLocale:s,valueLength:h.length,valueHash:Uh(h),timestamp:Date.now()}),{kind:"created",translationKey:T,id:E.resource.id}},[e,t,s,r,o]),f=w.useCallback(async(g,h)=>{if(!e)return{kind:"error",message:"no document context"};const y={children:e.document?.raw?.components??[]},v=en(y,g),x=typeof v?.text=="string"?v.text:"",S=Ss(x);if(S&&S.key.startsWith(of))return lf(t,S.key,s,h),Dc(t,s,S.key,h),e.markDirty?.(),{kind:"updated",translationKey:S.key};const _=om(x,o),A=tf(h.replace(/\{\{?p\d+\}?\}/g," ")).replace(/\s+/g," ").trim(),C=await Xi(t,r,s,A);if(C.kind==="error"||!C.resource)return{kind:"error",message:C.message};const j=C.resource.translation_key,E=Ua(h),T=C.resource.values??{},D={[s]:h};for(const I of Object.keys(T)){if(I===s)continue;let W=T[I]??"";for(const z of E)W=sm(W,z);D[I]=W}return Ic(t,j,D),Dc(t,s,j,h),e.patchLayout(I=>Ar({children:I},g,H=>({...H,text:I_(`$t:${j}`,_)})).children??[]),e.markDirty?.(),await xo(t,s),Dc(t,s,j,h),ir({op:"inline_edit_create_key",sourceState:"plain_with_binding",componentPath:rs(g),translationKey:j,toLocale:s,valueLength:h.length,valueHash:Uh(h),timestamp:Date.now()}),{kind:"created",translationKey:j}},[e,t,s,r]);return{classify:l,commit:u,trackCancel:d,keyifyChipValue:f}}async function Xi(n,e,t,s){const r=`/api/admin/templates/${encodeURIComponent(n)}/custom-translations`;try{const o=await fetch(r,{method:"POST",credentials:"same-origin",headers:on({"Content-Type":"application/json"}),body:JSON.stringify({layout_name:e,locale:t,value:s})}),l=await o.json().catch(()=>null);if(!o.ok)return{kind:"error",message:l?.message??`HTTP ${o.status}`};const d=l?.data;return!d||typeof d.translation_key!="string"?{kind:"error",message:"invalid response"}:{kind:"ok",resource:d}}catch(o){return{kind:"error",message:o instanceof Error?o.message:"network error"}}}async function af(n,e,t,s){const r=await Jo(n,e);if(!r)return{kind:"error",message:"custom key not found"};const o=`/api/admin/templates/${encodeURIComponent(n)}/custom-translations/${r.id}`,l={...r.values??{},[t]:s};try{const d=await fetch(o,{method:"PUT",credentials:"same-origin",headers:on({"Content-Type":"application/json"}),body:JSON.stringify({values:l,expected_lock_version:r.lock_version})}),u=await d.json().catch(()=>null);return d.status===409?{kind:"error",message:"concurrent_modification"}:d.ok?{kind:"ok"}:{kind:"error",message:u?.message??`HTTP ${d.status}`}}catch(d){return{kind:"error",message:d instanceof Error?d.message:"network error"}}}async function Jo(n,e){const t=`/api/admin/templates/${encodeURIComponent(n)}/custom-translations`;try{const s=await fetch(t,{method:"GET",credentials:"same-origin",headers:on()});if(!s.ok)return null;const o=(await s.json().catch(()=>null))?.data;return Array.isArray(o)?o.find(l=>l.translation_key===e)??null:null}catch{return null}}function Dc(n,e,t,s){try{ts.getInstance().setTranslationValue(n,e,t,s)}catch{}if(typeof window<"u")try{window.dispatchEvent(new CustomEvent($s,{detail:{templateIdentifier:n,locale:e}}))}catch{}}const $s="g7le:translations-refreshed";async function xo(n,e){if(typeof window>"u")return;const t=e??window.__g7EditorContentLocale;if(t){try{const s=ts.getInstance();try{const r=await fetch(`/api/templates/${encodeURIComponent(n)}/config.json`,{headers:{Accept:"application/json"},credentials:"same-origin"}).then(l=>l.ok?l.json():null),o=r?.data?.cache_version??r?.cache_version;if(typeof o=="number"&&o>0){s.setCacheVersion(o);const l=window;l.G7Config&&(l.G7Config.cache_version=o)}}catch{}await s.loadTranslations(n,t,"/api",!0)}catch{}try{window.dispatchEvent(new CustomEvent($s,{detail:{templateIdentifier:n,locale:t}}))}catch{}}}const vo=new Map;function lf(n,e,t,s){const r=vo.get(e)??{};r[t]=s,vo.set(e,r);try{ts.getInstance().setTranslationValue(n,t,e,s)}catch{}if(typeof window<"u")try{window.dispatchEvent(new CustomEvent($s,{detail:{templateIdentifier:n,locale:t}}))}catch{}}function Ic(n,e,t){for(const[s,r]of Object.entries(t))lf(n,e,s,r)}function lr(n,e){return vo.get(n)?.[e]}function mM(n){const e=vo.get(n);return e?{...e}:void 0}function yM(){return vo.size>0}function X_(n,e){for(const[t,s]of vo.entries())for(const[r,o]of Object.entries(s))try{n.setTranslationValue(e,r,t,o)}catch{}}async function bM(n){if(vo.size===0)return{ok:0,failed:[]};const e=Array.from(vo.entries());let t=0;const s=[];for(const[r,o]of e)try{const l=await Jo(n,r);if(!l){s.push(r);continue}const d={...l.values??{},...o},u=`/api/admin/templates/${encodeURIComponent(n)}/custom-translations/${l.id}`;if(!(await fetch(u,{method:"PUT",credentials:"same-origin",headers:on({"Content-Type":"application/json"}),body:JSON.stringify({values:d,expected_lock_version:l.lock_version})})).ok){s.push(r);continue}t+=1}catch{s.push(r)}for(const[r]of e)s.includes(r)||vo.delete(r);try{await xo(n)}catch{}return{ok:t,failed:s}}function Ji(n,e){const t=`layout_editor.locale.${n}`,s=e(t);return s&&s!==t?s:n.toUpperCase()}function J_(){if(typeof window>"u")return[];const e=window.G7Config?.appConfig?.supportedLocales;return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.length>0):[]}function xM({locales:n}={}){const{t:e}=Mn(),{state:t,dispatch:s}=Rn();w.useEffect(()=>{window.__g7EditorContentLocale=t.locale},[t.locale]);const r=n??J_(),o=r.includes(t.locale)?r:[t.locale,...r];if(o.length<=1)return a.jsxs("span",{className:"g7le-locale-switcher g7le-locale-switcher--single","data-testid":"g7le-locale-switcher-single",style:{fontSize:11,color:"#475569",padding:"0 4px"},children:[e("layout_editor.chrome.toolbar.locale_switcher_label"),": ",Ji(t.locale,e)]});const l=d=>{if(d===t.locale)return;const u=t.locale;s({type:"SET_LOCALE",locale:d}),ir({op:"locale_switch",fromLocale:u,toLocale:d,timestamp:Date.now()})};return a.jsxs("div",{className:"g7le-locale-switcher","data-testid":"g7le-locale-switcher",role:"group","aria-label":e("layout_editor.chrome.toolbar.locale_switcher_label"),style:{display:"inline-flex",alignItems:"center",gap:4},children:[a.jsx("span",{style:{fontSize:11,color:"#475569"},children:e("layout_editor.chrome.toolbar.locale_switcher_label")}),a.jsx("div",{style:{display:"inline-flex",gap:2},children:o.map(d=>{const u=d===t.locale;return a.jsx("button",{type:"button","data-testid":`g7le-locale-${d}`,"aria-pressed":u,onClick:()=>l(d),style:{padding:"2px 8px",fontSize:12,cursor:"pointer",background:u?"#0f172a":"#f8fafc",color:u?"#fff":"#0f172a",border:"1px solid #cbd5e1",borderRadius:4},children:Ji(d,e)},d)})})]})}const vM=/\{\{?(p\d+)\}?\}/g;function wM(n){const e=[];if(typeof n!="string"||n.length===0)return e;const t=new RegExp(vM.source,"g");let s=0,r;for(;(r=t.exec(n))!==null;){const o=r.index,l=o+r[0].length;o>s&&e.push({kind:"text",raw:n.slice(s,o),start:s,end:o}),e.push({kind:"chip",raw:r[0],paramName:r[1],start:o,end:l}),s=l}return s<n.length&&e.push({kind:"text",raw:n.slice(s),start:s,end:n.length}),e}function _M(n){const e=wM(n),t=[];let s="",r=!1;const o=l=>{t.push({kind:"text",text:l}),r=!0};for(const l of e)l.kind==="text"?(s=l.raw,o(s),s=""):(r||o(""),t.push({kind:"chip",paramName:l.paramName}),r=!1);return r||o(""),t}function SM(n,e,t,s){const r=[];return n.forEach((o,l)=>{if(o.kind==="chip"){if(o.paramName===e)return;r.push(`{${o.paramName}}`)}else{const d=o.text??"";if(l===t){const u=Math.max(0,Math.min(s,d.length));r.push(d.slice(0,u),`{${e}}`,d.slice(u))}else r.push(d)}}),r.join("")}function cf({value:n,onChange:e,t,paramLabels:s,onRequestInsert:r,onRemoveChip:o,testIdSuffix:l="pc",disabled:d=!1,hideInsertButton:u=!1,caretRef:f}){const g=w.useMemo(()=>_M(n),[n]),h=w.useRef(null),[b,y]=w.useState(null),[v,x]=w.useState(null),[S,_]=w.useState(null),A=w.useMemo(()=>g.map(U=>U.kind==="chip"?`c:${U.paramName}`:"t").join("|"),[g]),C=w.useRef(null),j=w.useRef([]),E=w.useRef(!1);w.useLayoutEffect(()=>{const U=E.current;E.current=!1,!(!U&&C.current===A)&&(C.current=A,g.forEach((B,te)=>{if(B.kind!=="text")return;const q=j.current[te];q&&q.textContent!==(B.text??"")&&(q.textContent=B.text??"")}))},[A,g,n]);const T=()=>{const U=h.current;if(!U)return n;const B=[];for(const te of Array.from(U.querySelectorAll("[data-seg]")))te.dataset.seg==="chip"?B.push(`{${te.dataset.param??""}}`):B.push(te.textContent??"");return B.join("")},D=()=>{d||e(T())},I=w.useRef(null),W=w.useRef(!1),z=(U,B)=>{if(!d){U.preventDefault(),U.stopPropagation(),I.current={param:B,pointerId:U.pointerId},W.current=!1,y(B);try{U.currentTarget.setPointerCapture(U.pointerId)}catch{}}},H=U=>{const B=I.current;if(!B||U.pointerId!==B.pointerId)return;W.current=!0;const te=Z(U.clientX,U.clientY);te&&(x({slotIdx:te.slotIdx,offset:te.offset}),_(CM(h.current,te.slotIdx,te.offset)))},G=(U,B)=>{if(U.stopPropagation(),W.current){W.current=!1;return}o?.(B)},F=U=>{const B=I.current;if(!B||U.pointerId!==B.pointerId)return;try{U.currentTarget.releasePointerCapture(U.pointerId)}catch{}I.current=null,W.current&&typeof setTimeout=="function"&&setTimeout(()=>{W.current=!1},0);const te=Z(U.clientX,U.clientY);if(y(null),x(null),_(null),!te)return;const q=h.current;if(!q)return;const N=Array.from(q.querySelectorAll("[data-seg]")).map(ee=>ee.dataset.seg==="chip"?{kind:"chip",paramName:ee.dataset.param??""}:{kind:"text",text:ee.textContent??""}),V=SM(N,B.param,te.slotIdx,te.offset);V!==n&&(E.current=!0,e(V))},Z=(U,B)=>{const te=h.current;if(!te)return null;const q=Array.from(te.querySelectorAll("[data-seg]")),M=te.ownerDocument,N=M.elementFromPoint(U,B);let V=N?.closest('[data-seg="text"]');if(V)return{slotIdx:q.indexOf(V),offset:kM(M,V,U,B)};const ee=N?.closest('[data-seg="chip"]');if(ee){const re=q.indexOf(ee),pe=ee.getBoundingClientRect();if(U<pe.left+pe.width/2&&re-1>=0){const je=q[re-1];return{slotIdx:re-1,offset:(je.textContent??"").length}}if(re+1<q.length)return{slotIdx:re+1,offset:0}}const se=q.map((re,pe)=>({s:re,i:pe})).filter(re=>re.s.dataset.seg==="text").pop();return se?{slotIdx:se.i,offset:(se.s.textContent??"").length}:null},Y=()=>{d||!r||r(Z_(h.current,n.length))};return w.useEffect(()=>{if(f)return f.current=()=>Z_(h.current,n.length),()=>{f.current=null}},[f,n.length]),a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[a.jsxs("div",{ref:h,"data-testid":`g7le-chip-input-${l}`,className:"g7le-chip-input",style:jM,children:[g.map((U,B)=>U.kind==="chip"?a.jsxs("span",{"data-seg":"chip","data-param":U.paramName,"data-testid":`g7le-chip-${l}-${U.paramName}`,contentEditable:!1,onPointerDown:te=>z(te,U.paramName??""),onPointerMove:H,onPointerUp:F,title:t("layout_editor.translation.placeholder_locked"),style:{...TM,...b===U.paramName?$M:null,touchAction:"none"},children:[a.jsx("span",{"aria-hidden":"true",style:NM,children:"⠿"}),a.jsx("span",{"aria-hidden":"true",style:{marginRight:3},children:"🔗"}),a.jsx("span",{style:DM,children:s?.[U.paramName??""]??U.paramName}),o&&!d&&a.jsx("button",{type:"button","data-testid":`g7le-chip-remove-${l}-${U.paramName}`,"aria-label":t("layout_editor.inline_binding.clear"),title:t("layout_editor.inline_binding.clear"),onPointerDown:te=>{te.stopPropagation(),te.preventDefault()},onClick:te=>G(te,U.paramName??""),style:IM,children:"✕"})]},`chip-${U.paramName}`):a.jsx("span",{ref:te=>{j.current[B]=te},"data-seg":"text",contentEditable:!d,suppressContentEditableWarning:!0,onInput:D,"data-testid":`g7le-chip-text-${l}-${B}`,style:{...EM,...b?RM:null,...v?.slotIdx===B?AM:null}},`text-slot-${B}`)),S&&a.jsx("span",{"aria-hidden":"true","data-testid":`g7le-chip-caret-${l}`,style:{position:"absolute",left:S.left,top:S.top,width:2,height:S.height,background:"#2563eb",borderRadius:1,pointerEvents:"none",boxShadow:"0 0 0 1px rgba(37,99,235,0.3)"}})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[r&&!u&&a.jsxs("button",{type:"button","data-testid":`g7le-chip-insert-${l}`,onClick:Y,disabled:d,style:LM,children:["+ ",t("layout_editor.inline_binding.insert_data")]}),a.jsx("span",{style:OM,children:t("layout_editor.translation.placeholder_locked")})]})]})}function kM(n,e,t,s){const r=(e.textContent??"").length;try{const l=n;let d=null,u=0;if(typeof l.caretRangeFromPoint=="function"){const f=l.caretRangeFromPoint(t,s);f&&(d=f.startContainer,u=f.startOffset)}else if(typeof l.caretPositionFromPoint=="function"){const f=l.caretPositionFromPoint(t,s);f&&(d=f.offsetNode,u=f.offset)}if(d&&e.contains(d))return Math.max(0,Math.min(u,r))}catch{}const o=e.getBoundingClientRect();return t>o.left+o.width/2?r:0}function CM(n,e,t){if(!n)return null;const r=Array.from(n.querySelectorAll("[data-seg]"))[e];if(!r)return null;const o=n.getBoundingClientRect();try{const u=r.firstChild,f=n.ownerDocument;if(u&&u.nodeType===Node.TEXT_NODE&&(u.textContent??"").length>0){const g=f.createRange(),h=Math.max(0,Math.min(t,(u.textContent??"").length));g.setStart(u,h),g.setEnd(u,h);const b=g.getClientRects(),y=b.length>0?b[0]:g.getBoundingClientRect();if(y&&(y.height>0||y.width>=0))return{left:y.left-o.left,top:y.top-o.top,height:y.height||r.getBoundingClientRect().height}}}catch{}const l=r.getBoundingClientRect();return{left:(t>0?l.right:l.left)-o.left,top:l.top-o.top,height:l.height||16}}function Z_(n,e){if(!n)return e;try{const t=n.ownerDocument.defaultView?.getSelection();if(!t||t.rangeCount===0)return e;const s=t.getRangeAt(0);let r=s.startContainer,o=null;for(;r&&r!==n;){if(r instanceof HTMLElement&&r.dataset.seg==="text"){o=r;break}r=r.parentNode}if(!o||!n.contains(o))return e;const l=Array.from(n.querySelectorAll("[data-seg]"));let d=0;for(const u of l){if(u===o)break;d+=u.dataset.seg==="chip"?`{${u.dataset.param??""}}`.length:(u.textContent??"").length}return d+s.startOffset}catch{return e}}const jM={position:"relative",display:"flex",flexWrap:"wrap",alignItems:"center",gap:2,minHeight:30,padding:"4px 8px",border:"1px solid #cbd5e1",borderRadius:4,background:"#fff",fontSize:13,lineHeight:1.6},EM={outline:"none",minWidth:8,minHeight:"1.2em",whiteSpace:"pre-wrap",color:"#0f172a",display:"inline-block"},RM={boxShadow:"inset 0 -2px 0 #93c5fd",background:"#eff6ff",borderRadius:2},AM={background:"#dbeafe",boxShadow:"inset 0 -2px 0 #2563eb"},TM={display:"inline-flex",alignItems:"center",gap:1,background:"linear-gradient(180deg,#eff6ff,#dbeafe)",color:"#1d4ed8",border:"1px dashed #60a5fa",borderRadius:9999,padding:"1px 8px 1px 4px",margin:"0 1px",fontSize:12,fontWeight:600,cursor:"grab",userSelect:"none",whiteSpace:"nowrap",boxShadow:"0 1px 2px rgba(37,99,235,0.18)",verticalAlign:"middle"},$M={opacity:.5,borderStyle:"solid",cursor:"grabbing"},NM={color:"#2563eb",opacity:.7,fontSize:11,marginRight:1,cursor:"grab"},DM={textDecoration:"none"},IM={marginLeft:4,width:14,height:14,lineHeight:"12px",padding:0,border:"none",borderRadius:9999,background:"rgba(29,78,216,0.12)",color:"#1d4ed8",fontSize:9,fontWeight:700,cursor:"pointer",display:"inline-flex",alignItems:"center",justifyContent:"center",flex:"0 0 auto"},LM={fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#334155",padding:"3px 10px",cursor:"pointer"},OM={fontSize:10,color:"#94a3b8"};function Q_(n){n&&(n.style.height="auto",n.style.height=`${Math.max(n.scrollHeight,28)}px`)}function MM(n){Q_(n)}function zM(n){const e=new Set;for(const t of n)for(const s of Object.keys(t.values??{}))e.add(s);return Array.from(e).sort()}function PM({templateIdentifier:n,layoutName:e,t,referencedKeys:s,onClose:r}){const[o,l]=w.useState([]),[d,u]=w.useState("idle"),[f,g]=w.useState(null),[h,b]=w.useState("all"),[y,v]=w.useState(new Set),[x,S]=w.useState({}),[_,A]=w.useState(null),[C,j]=w.useState({}),E=w.useCallback(async()=>{u("loading"),g(null);const B=await hO(n,e);B.ok?(l(B.data),S({}),v(new Set),j({}),u("idle")):(g(B.message),u("error"))},[n,e]);w.useEffect(()=>{E()},[E]);const T=w.useMemo(()=>zM(o),[o]),D=w.useMemo(()=>o.filter(B=>h==="all"?!0:B.status===h).slice().sort((B,te)=>{const q=B.updated_at?Date.parse(B.updated_at):0,M=te.updated_at?Date.parse(te.updated_at):0;return M!==q?M-q:te.id-B.id}),[o,h]),I=w.useMemo(()=>o.filter(B=>B.status==="orphaned"),[o]),W=w.useCallback(B=>{const te={...B.values??{}};for(const q of Object.keys(te)){const M=lr(B.translation_key,q);M!==void 0&&(te[q]=M)}return te},[]),z=w.useCallback(B=>x[B.id]??W(B),[x,W]),H=w.useCallback((B,te,q)=>{S(M=>{const N=M[B]??o.find(V=>V.id===B)?.values??{};return{...M,[B]:{...N,[te]:q}}})},[o]),G=w.useCallback(async B=>{A(B.id),j(M=>({...M,[B.id]:""}));const te=z(B),q=await mO(n,B.id,te,B.lock_version);if(q.ok)l(M=>M.map(N=>N.id===B.id?q.data:N)),S(M=>{const N={...M};return delete N[B.id],N});else{const M=q.status===409?t("layout_editor.translation_manager.conflict"):q.message;j(N=>({...N,[B.id]:M}))}A(null)},[n,z,t]),F=w.useCallback(B=>typeof window<"u"&&typeof window.confirm=="function"?window.confirm(t("layout_editor.translation_manager.delete_confirm",{count:B})):!0,[t]),Z=w.useCallback(async B=>{if(!F(1))return;const te=await yO(n,B.id);te.ok?(l(q=>q.filter(M=>M.id!==B.id)),v(q=>{const M=new Set(q);return M.delete(B.id),M})):g(te.message)},[n,F]),Y=w.useCallback(async B=>{if(B.length===0||!F(B.length))return;const te=await bO(n,B);if(te.ok){const q=new Set(B);l(M=>M.filter(N=>!q.has(N.id))),v(new Set)}else g(te.message)},[n,F]),U=w.useCallback(B=>{v(te=>{const q=new Set(te);return q.has(B)?q.delete(B):q.add(B),q})},[]);return a.jsxs("div",{className:"g7le-translation-manager","data-testid":"g7le-translation-manager",style:BM,children:[a.jsxs("div",{"data-modal-drag-handle":!0,style:HM,children:[a.jsx("span",{style:{fontSize:14,fontWeight:700},"data-testid":"g7le-translation-manager-title",children:t("layout_editor.translation_manager.title")}),a.jsx("button",{type:"button","aria-label":"close",onClick:r,style:WM,"data-testid":"g7le-translation-manager-close",children:"✕"})]}),a.jsxs("div",{style:UM,children:[a.jsx("div",{style:{display:"inline-flex",gap:4},role:"tablist","aria-label":t("layout_editor.translation_manager.filter_label"),children:["all","active","orphaned"].map(B=>a.jsx("button",{type:"button",role:"tab","aria-selected":h===B,"data-active":h===B?"true":"false",onClick:()=>b(B),style:h===B?qM:eS,"data-testid":`g7le-translation-filter-${B}`,children:t(`layout_editor.translation_manager.filter_${B}`)},B))}),a.jsx("div",{style:{flex:1}}),y.size>0&&a.jsxs("button",{type:"button",onClick:()=>{Y(Array.from(y))},style:tS,"data-testid":"g7le-translation-bulk-delete",children:["🗑 ",t("layout_editor.translation_manager.delete_selected",{count:y.size})]}),I.length>0&&a.jsxs("button",{type:"button",onClick:()=>{Y(I.map(B=>B.id))},style:tS,"data-testid":"g7le-translation-purge-orphaned",children:["🧹 ",t("layout_editor.translation_manager.purge_orphaned",{count:I.length})]})]}),f&&a.jsx("div",{style:FM,"data-testid":"g7le-translation-manager-error",children:f}),a.jsx("div",{style:VM,children:d==="loading"?a.jsx("div",{style:nS,"data-testid":"g7le-translation-manager-loading",children:t("layout_editor.translation_manager.loading")}):D.length===0&&d!=="error"?a.jsx("div",{style:nS,"data-testid":"g7le-translation-manager-empty",children:t("layout_editor.translation_manager.empty")}):a.jsx("div",{"data-testid":"g7le-translation-list",style:KM,children:D.map(B=>{const te=z(B),q=B.status==="orphaned",M=s?s.has(B.translation_key):null;return a.jsxs("div",{style:GM,"data-testid":`g7le-translation-row-${B.id}`,children:[a.jsxs("div",{style:YM,children:[a.jsx("input",{type:"checkbox",checked:y.has(B.id),onChange:()=>U(B.id),"aria-label":t("layout_editor.translation_manager.select_aria",{key:B.translation_key}),"data-testid":`g7le-translation-select-${B.id}`}),a.jsx("code",{style:XM,children:B.translation_key}),q&&a.jsx("span",{style:JM,"data-testid":`g7le-translation-badge-orphaned-${B.id}`,children:t("layout_editor.translation_manager.badge_orphaned")}),M===!0&&a.jsx("span",{style:ZM,"data-testid":`g7le-translation-badge-live-inuse-${B.id}`,children:t("layout_editor.translation_manager.badge_live_in_use")}),M===!1&&a.jsx("span",{style:QM,"data-testid":`g7le-translation-badge-live-unused-${B.id}`,children:t("layout_editor.translation_manager.badge_live_unused")}),a.jsx("div",{style:{flex:1}}),a.jsx("button",{type:"button",onClick:()=>{Z(B)},style:a4,"data-testid":`g7le-translation-delete-${B.id}`,children:"🗑"})]}),a.jsxs("div",{style:e4,children:[T.map(N=>{const V=te[N]??"",ee=Ua(V).length>0;return a.jsxs("div",{style:t4,"data-testid":`g7le-translation-field-${B.id}-${N}`,children:[a.jsxs("label",{style:n4,title:N,children:[Ji(N,t),a.jsxs("span",{style:s4,children:["(",N,")"]})]}),ee?a.jsx("div",{style:{flex:1},"data-testid":`g7le-translation-chip-${B.id}-${N}`,children:a.jsx(cf,{value:V,onChange:se=>H(B.id,N,se),t,testIdSuffix:`${B.id}-${N}`})}):a.jsx("textarea",{value:V,rows:1,ref:MM,onChange:se=>{H(B.id,N,se.currentTarget.value),Q_(se.currentTarget)},style:r4,"data-testid":`g7le-translation-input-${B.id}-${N}`})]},N)}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsx("button",{type:"button",disabled:_===B.id,onClick:()=>{G(B)},style:o4,"data-testid":`g7le-translation-save-${B.id}`,children:_===B.id?t("layout_editor.translation_manager.saving"):t("layout_editor.translation_manager.save")}),C[B.id]?a.jsx("span",{style:{fontSize:11,color:"#dc2626"},"data-testid":`g7le-translation-row-error-${B.id}`,children:C[B.id]}):null]})]})]},B.id)})})}),a.jsx("div",{style:i4,children:a.jsx("button",{type:"button",onClick:r,style:l4,"data-testid":"g7le-translation-manager-footer-close",children:t("layout_editor.translation_manager.close")})})]})}const BM={display:"flex",flexDirection:"column",minHeight:0,flex:1},HM={display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 16px",borderBottom:"1px solid #e2e8f0"},WM={border:"none",background:"transparent",fontSize:16,color:"#94a3b8",cursor:"pointer"},UM={padding:"10px 16px",borderBottom:"1px solid #f1f5f9",display:"flex",gap:8,alignItems:"center"},eS={padding:"4px 10px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},qM={...eS,borderColor:"#2563eb",background:"#eff6ff",color:"#1d4ed8",fontWeight:600},tS={padding:"4px 10px",fontSize:12,border:"1px solid #fecaca",borderRadius:6,background:"#fff",color:"#dc2626",cursor:"pointer"},FM={padding:"8px 16px",fontSize:12,color:"#b91c1c",background:"#fef2f2"},VM={padding:16,overflow:"auto",flex:1,minHeight:120,display:"flex",flexDirection:"column",gap:12},nS={fontSize:13,color:"#94a3b8",textAlign:"center",padding:"32px 0"},KM={display:"flex",flexDirection:"column",gap:20},GM={border:"1px solid #e2e8f0",borderRadius:8,padding:10,display:"flex",flexDirection:"column",gap:6},YM={display:"flex",alignItems:"center",gap:8},XM={fontSize:11,background:"#f1f5f9",padding:"2px 6px",borderRadius:4,color:"#0f172a"},JM={fontSize:10,color:"#b45309",background:"#fef3c7",padding:"1px 6px",borderRadius:4,fontWeight:600},ZM={fontSize:10,color:"#15803d",background:"#dcfce7",padding:"1px 6px",borderRadius:4,fontWeight:600},QM={fontSize:10,color:"#9f1239",background:"#ffe4e6",padding:"1px 6px",borderRadius:4,fontWeight:600},e4={display:"flex",flexDirection:"column",gap:6},t4={display:"flex",alignItems:"flex-start",gap:8},n4={fontSize:12,color:"#475569",minWidth:88,fontWeight:600,paddingTop:4,display:"flex",flexDirection:"column",lineHeight:1.2},s4={fontSize:10,color:"#94a3b8",fontWeight:400},r4={flex:1,padding:"4px 8px",fontSize:13,border:"1px solid #cbd5e1",borderRadius:4,color:"#0f172a",resize:"vertical",overflow:"hidden",minHeight:28,lineHeight:1.4,fontFamily:"inherit",boxSizing:"border-box"},o4={padding:"5px 12px",fontSize:12,border:"none",borderRadius:6,background:"#2563eb",color:"#fff",cursor:"pointer"},a4={padding:"4px 8px",fontSize:12,border:"1px solid #fecaca",borderRadius:6,background:"#fff",color:"#dc2626",cursor:"pointer"},i4={padding:"10px 16px",borderTop:"1px solid #e2e8f0",display:"flex",justifyContent:"flex-end"},l4={padding:"6px 14px",fontSize:13,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"};function c4(){const n=Gr(),{state:e}=Rn(),t=n?.document?.raw??null,s=e.templateIdentifier??"",r=e.selectedRoute?.layoutName??"",o=w.useCallback((f,g)=>{const h=t?.[f];return h===void 0?g:h},[t]),l=w.useCallback((f,g,...h)=>{n&&(h.length>=1?n.patchDocumentRaw(f,g,h[0]):n.patchDocumentRaw(f,g))},[n]),d=w.useCallback(async(f,g)=>!s||!r?null:Xi(s,r,f,g),[s,r]),u=w.useCallback(async(f,g,h)=>s?af(s,f,g,h):null,[s]);return{raw:t,getValue:o,patch:l,createI18nKey:d,updateI18nKeyValue:u}}function d4(n){const e=n.__source;return e&&(e.kind==="module"||e.kind==="plugin")&&e.identifier?`${e.kind}:${e.identifier}`:"template"}function sS(n,e){if(!e)return null;const t=d4(n);if(t&&e.bySource){const l=e.bySource[t]?.[n.id];if(l!==void 0)return{value:l,match:{dataSourceId:n.id,resolvedBy:"spec_byId",sourceKey:t}}}const s=e.byDataSourceId?.[n.id];if(s!==void 0)return{value:s,match:{dataSourceId:n.id,resolvedBy:"spec_byId"}};const r=n.endpoint??"";if(e.byEndpointPattern&&typeof r=="string"&&r.length>0){for(const[o,l]of Object.entries(e.byEndpointPattern))if(u4(r,o))return{value:l,match:{dataSourceId:n.id,resolvedBy:"spec_byEndpoint"}}}return null}function fm(n,e){const t=sS(n,e);if(t)return t;const s=n.fallback?.data;return s!==void 0?{value:{data:Array.isArray(s)?s:[s]},match:{dataSourceId:n.id,resolvedBy:"fallback"}}:{value:{},match:{dataSourceId:n.id,resolvedBy:"inferred"}}}function u4(n,e){const t=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${t}$`).test(n)}function f4(n={}){const{spec:e,overrideSpec:t,onMatch:s}=n;return{has(r){return!0},resolve(r){const o=t?sS(r,t):null,{value:l,match:d}=o??fm(r,e);if(s)try{s(d)}catch{}return l}}}const p4=new Set(["comment"]);function rS(n){if(!n||typeof n!="object")return[];const e=[];for(const[t,s]of Object.entries(n)){if(p4.has(t)||!s||typeof s!="object")continue;const r=s;typeof r.expr!="string"||r.expr.length===0||e.push({id:t,label:typeof r.label=="string"?r.label:void 0,params:Array.isArray(r.params)?r.params:[],expr:r.expr,group:typeof r.group=="string"?r.group:void 0,source:r.__source})}return e}function g4(n,e){let t=n.replace(/\{(\w+)\*\}(\s*\?\?\s*)?/g,(s,r,o)=>{const l=e[r],d=l==null?[]:String(l).split(",").map(u=>u.trim()).filter(Boolean);return d.length===0?"":d.join(" ?? ")+(o?" ?? ":"")});return t=t.replace(/\{(\w+)\}/g,(s,r)=>{const o=e[r];return o===void 0?s:o}),t}function df(n){const e=n.trim(),t=/^\{\{([\s\S]*)\}\}$/.exec(e);return t?t[1].trim():e}function oS(n){const e=n.trim();return/^\{\{[\s\S]*\}\}$/.test(e)?e:`{{ ${e} }}`}function aS(n,e){const t={};for(const[r,o]of Object.entries(e))t[r]=typeof o=="string"?df(o):o;const s=g4(n.expr,t);return oS(s)}function h4(n,e){if(typeof n!="string")return null;const t=iS(df(n));for(const s of e){const r=m4(t,s.expr,s.params);if(r)return{recipeId:s.id,params:r}}return null}function iS(n){return n.replace(/\s+/g," ").trim()}function lS(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function m4(n,e,t){const s=[],r=new Set;let o="";const l=/\{(\w+)(\*?)\}(\s*\?\?\s*)?/g;let d=0,u;const f=iS(e);for(;(u=l.exec(f))!==null;){const y=f.slice(d,u.index);o+=lS(y).replace(/\\ /g,"\\s*");const v=u[2]==="*",x=!!u[3];v?(r.add(u[1]),o+="(.*?)",x&&(o+="(?:\\s*\\?\\?\\s*)?")):(o+="(.+?)",x&&(o+="\\s*\\?\\?\\s*")),s.push(u[1]),d=l.lastIndex}o+=lS(f.slice(d)).replace(/\\ /g,"\\s*");let g;try{g=new RegExp(`^${o}$`)}catch{return null}const h=g.exec(n);if(!h)return null;const b={};if(s.forEach((y,v)=>{let x=(h[v+1]??"").trim();r.has(y)&&(x=x.split(/\s*\?\?\s*/).map(S=>S.trim()).filter(Boolean).join(", ")),b[y]=x}),t.length>0){const y=new Set(t.map(v=>v.key));for(const v of Object.keys(b))y.has(v)||delete b[v]}return b}function y4(n){const e=`x.${n.field}`,t=b4(n.value);switch(n.cmp){case"=":return`${e} === ${t}`;case"!=":return`${e} !== ${t}`;case">":return`${e} > ${t}`;case"<":return`${e} < ${t}`;case">=":return`${e} >= ${t}`;case"<=":return`${e} <= ${t}`;case"includes":return`(${e} ?? []).includes(${t})`;default:return`${e} === ${t}`}}function b4(n){const e=n.trim();return e==="true"||e==="false"||e!==""&&!Number.isNaN(Number(e))||/^['"].*['"]$/.test(e)||/[.([{]/.test(e)?e:`'${e.replace(/'/g,"\\'")}'`}function pm(n){return!n||n.length===0?"true":n.map(y4).join(" && ")}function x4(n){const t=`(${(n.source??"").trim()||"[]"} ?? [])`;let s;switch(n.op){case"count":s=`${t}.filter(x => ${pm(n.conditions)}).length`;break;case"sum":{const r=(n.sumField??"").trim()||"value";s=`${t}.filter(x => ${pm(n.conditions)}).reduce((s, x) => s + (x.${r} ?? 0), 0)`;break}case"filter":s=`${t}.filter(x => ${pm(n.conditions)})`;break;case"toOptions":{const r=(n.valueField??"").trim()||"value",o=(n.labelField??"").trim()||"label";s=`${t}.map(x => ({ value: x.${r}, label: x.${o} }))`;break}case"nth":{const r=(n.index??"").trim()||"0",o=(n.prop??"").trim();s=`${t}[${r}]${o?`?.${o}`:""}`;break}case"firstOf":{const r=(n.candidates??[]).map(d=>d.trim()).filter(Boolean),o=r.length>0?r.join(" ?? "):"''",l=(n.fallback??"").trim();s=l?`${o} ?? '${l.replace(/'/g,"\\'")}'`:o;break}case"literal":{const r=n.literalKind??"string",o=(n.literalValue??"").trim();r==="number"?s=o===""?"0":o:r==="boolean"?s=o==="true"?"true":"false":s=`'${o.replace(/'/g,"\\'")}'`;break}default:s="[]"}return oS(s)}function v4(n){if(typeof n!="string")return null;const e=df(n).trim();let t=/^\((.+?)\s*\?\?\s*\[\]\)\.filter\(x => (.+)\)\.length$/.exec(e);return t?{key:"",op:"count",source:t[1].trim(),conditions:gm(t[2])}:(t=/^\((.+?)\s*\?\?\s*\[\]\)\.filter\(x => (.+)\)\.reduce\(\(s, x\) => s \+ \(x\.(\w+(?:\.\w+)*) \?\? 0\), 0\)$/.exec(e),t?{key:"",op:"sum",source:t[1].trim(),conditions:gm(t[2]),sumField:t[3]}:(t=/^\((.+?)\s*\?\?\s*\[\]\)\.filter\(x => (.+)\)$/.exec(e),t?{key:"",op:"filter",source:t[1].trim(),conditions:gm(t[2])}:(t=/^\((.+?)\s*\?\?\s*\[\]\)\.map\(x => \(\{ value: x\.(\w+(?:\.\w+)*), label: x\.(\w+(?:\.\w+)*) \}\)\)$/.exec(e),t?{key:"",op:"toOptions",source:t[1].trim(),valueField:t[2],labelField:t[3]}:(t=/^\((.+?)\s*\?\?\s*\[\]\)\[(.+?)\](?:\?\.(\w+(?:\.\w+)*))?$/.exec(e),t?{key:"",op:"nth",source:t[1].trim(),index:t[2].trim(),prop:t[3]}:null))))}function gm(n){const e=n.trim();if(e==="true")return[];const t=[];for(const s of w4(e)){const r=_4(s.trim());r&&t.push(r)}return t}function w4(n){const e=[];let t=0,s=0;for(let r=0;r<n.length;r++){const o=n[r];o==="("||o==="["||o==="{"?t++:o===")"||o==="]"||o==="}"?t--:t===0&&o==="&"&&n[r+1]==="&"&&(e.push(n.slice(s,r)),r++,s=r+1)}return e.push(n.slice(s)),e}function _4(n){let e=/^\(x\.(\w+(?:\.\w+)*) \?\? \[\]\)\.includes\((.+)\)$/.exec(n);if(e)return{field:e[1],cmp:"includes",value:cS(e[2])};if(e=/^x\.(\w+(?:\.\w+)*)\s*(===|!==|>=|<=|>|<)\s*(.+)$/.exec(n),e){const t={"===":"=","!==":"!=",">":">","<":"<",">=":">=","<=":"<="};return{field:e[1],cmp:t[e[2]]??"=",value:cS(e[3])}}return null}function cS(n){const e=n.trim(),t=/^'(.*)'$/.exec(e)||/^"(.*)"$/.exec(e);return t?t[1]:e}function dS(n,e){const t=h4(n,e);if(t)return{kind:"preset",recipeId:t.recipeId,params:t.params};const s=v4(n);return s?{kind:"custom",model:s}:{kind:"advanced"}}function S4(n){if(n==null)return"null";if(Array.isArray(n))return"list";switch(typeof n){case"number":return"number";case"boolean":return"boolean";case"string":return"string";default:return"object"}}function uS(n,e){if(typeof n!="string"||n.trim()==="")return{ok:!1,reason:"empty"};const t=df(n);try{const s=fT.evaluateExpression(t,e??{},{skipCache:!0});return{ok:!0,value:s,type:S4(s)}}catch(s){return{ok:!1,reason:s instanceof Error?s.message:String(s)}}}function fS(n,e){const t=Array.isArray(n?.data_sources)?n.data_sources:[],s=[];for(const r of t){const o=r?.id;if(typeof o!="string"||o.length===0)continue;const{value:l}=fm(r,e?.sampleData),d=typeof r.label_key=="string"?r.label_key:void 0;s.push({id:o,sample:l,labelKey:d})}return s}function pS(n,e){const t=[];e?.sampleGlobal&&typeof e.sampleGlobal=="object"&&t.push({scope:"_global",tree:e.sampleGlobal});const s={},r={},o={},l=(d,u)=>{if(!(!u||typeof u!="object"||Array.isArray(u)))for(const[f,g]of Object.entries(u))if(g&&typeof g=="object"&&!Array.isArray(g)){const h=d[f]&&typeof d[f]=="object"&&!Array.isArray(d[f])?d[f]:d[f]={};l(h,g)}else f in d||(d[f]=g)};for(const d of e?.states?.groups??[])for(const u of d.items??[]){const f=u.initialState;f?.local&&l(s,f.local),f?.query&&l(r,f.query),f?.route&&l(o,f.route)}return Object.keys(s).length&&t.push({scope:"_local",tree:s}),Object.keys(r).length&&t.push({scope:"query",tree:r}),Object.keys(o).length&&t.push({scope:"route",tree:o}),n?.computed&&typeof n.computed=="object"&&!Array.isArray(n.computed)&&t.push({scope:"_computed",tree:n.computed}),t}function gS(n,e){const t={};for(const r of e)r.scope!=="_computed"&&(t[r.scope]=r.tree);const s={};for(const[r,o]of Object.entries(n)){if(typeof o!="string"){s[r]=o;continue}const l=uS(o,t);s[r]=l.ok?l.value:o}return s}function k4(n,e){const t=fS(n,e),s=pS(n,e),r={};for(const o of t)o.sample!==void 0&&(r[o.id]=o.sample);for(const o of s)o.scope==="_computed"?r[o.scope]=gS(o.tree,s):r[o.scope]=o.tree;return r}function hS(n){const{raw:e,spec:t,evaluateComputed:s}=n;return w.useMemo(()=>{const r=fS(e,t),o=pS(e,t);if(s){const l=o.findIndex(d=>d.scope==="_computed");if(l>=0){const d=gS(o[l].tree,o);o[l]={scope:"_computed",tree:d}}}return Jh({dataSources:r,states:o,spec:t??void 0})},[e,t,s])}function C4(n){const{raw:e,spec:t,pageType:s}=n;return w.useMemo(()=>{const r=Array.isArray(e?.data_sources)?e.data_sources:[],o=[];for(const u of r){const f=u?.id;if(typeof f!="string"||f.length===0)continue;const{value:g}=fm(u,t?.sampleData),h=typeof u.label_key=="string"?u.label_key:void 0;o.push({id:f,sample:g,labelKey:h})}const l=[];t?.sampleGlobal&&typeof t.sampleGlobal=="object"&&l.push({scope:"_global",tree:t.sampleGlobal}),e?.computed&&typeof e.computed=="object"&&!Array.isArray(e.computed)&&l.push({scope:"_computed",tree:e.computed});const d=Jh({dataSources:o,states:l,spec:t??void 0});if(typeof s=="string"&&s!=="")for(const u of["title","description"])d.push({expression:`{{_seo.${s}.${u}}}`,source:"_seo",sourceId:"_seo",path:`${s}.${u}`,shape:"scalar",preview:""});return d},[e,t,s])}function mS(n,e){const t=[],s=new Set,r=o=>{for(const l of o??[]){if(l.kind==="route"&&!l.isRedirect&&typeof l.path=="string"&&l.path.startsWith("/")&&!s.has(l.path)){s.add(l.path);const d=l.label.startsWith("$t:")?l.label.slice(3):l.label,u=l.label.startsWith("$t:")?e(d):d,f=u&&u!==d&&!u.startsWith("$t:")?u:"";t.push({value:l.path,label:f?`${f} (${l.path})`:l.path})}r(l.children)}};return r(n),t}function yS(n){const e=Array.isArray(n?.data_sources)?n.data_sources:[],t=[];for(const s of e){const r=s?.id;typeof r=="string"&&r.length>0&&t.push({value:r,label:r})}return t}function hm(n,e){const t=typeof n.id=="string"?n.id:"",s=typeof n.label_key=="string"?n.label_key:"";if(!s)return null;const r=s.startsWith("$t:")?s.slice(3):s,o=e(r);return o&&o!==r&&!o.startsWith("$t:")&&o!==t?o:null}function mm(n,e){const t=n.__source;if(!t||typeof t!="object"||Array.isArray(t))return null;const s=t;if(s.kind!=="extension")return null;const r=s.extensionSourceType==="plugin"?e("layout_editor.data_sources.source.plugin"):e("layout_editor.data_sources.source.module"),o=typeof s.extensionIdentifier=="string"?s.extensionIdentifier:"",l=typeof s.extensionName=="string"?s.extensionName:"",d=l&&l!==o?`${l} (${o})`:o;return d?`${r}: ${d}`:r}function j4(n,e,t){const s=Array.isArray(n?.data_sources)?n.data_sources:[],r=[],o=new Set;for(const l of s){const d=l?.id;typeof d!="string"||d.length===0||o.has(d)||(o.add(d),r.push({id:d,friendly:hm(l,e),source:mm(l,t)}))}return r}function bS(n){const e=n?.states?.groups??[],t=new Set;for(const s of e)for(const r of s.items??[]){for(const o of Object.keys(r.initialState?.local??{}))t.add(o);for(const o of Object.keys(r.initialState?.global??{}))t.add(o)}return Array.from(t).map(s=>({value:s,label:s}))}function E4(n,e){const t=Array.isArray(n?.modals)?n.modals:[],s=[],r=new Set;for(const o of t){const l=o?.id;typeof l!="string"||l.length===0||r.has(l)||(r.add(l),s.push({value:l,label:R4(o,l,e)}))}return s}function R4(n,e,t){const r=n?.meta?.editor_label;if(typeof r=="string"&&r.length>0)return xS(r,t);const o=n?.title;return typeof o=="string"&&o.length>0?xS(o,t):e}function xS(n,e){if(n.startsWith("$t:")){const t=n.slice(3),s=e?e(t):t;return s&&s!==t?s:t}return n}const vS=Ht("ActionRecipeEngine"),A4={api:"apiCall",nav:"navigate",showToast:"toast",setLocalState:"setState"},T4=new Set(["comment"]);function Lc(n){if(!n||typeof n!="object")return[];const e=[];for(const[t,s]of Object.entries(n)){if(T4.has(t)||!s||typeof s!="object")continue;const r=s,o=r.build&&typeof r.build=="object"?r.build:typeof r.handler=="string"?{handler:r.handler}:void 0;!o||typeof o.handler!="string"||o.handler.length===0||e.push({id:t,label:typeof r.label=="string"?r.label:void 0,params:Array.isArray(r.params)?r.params:[],build:o})}return e}function wo(n){const e=/^\{\{\s*([\w.]+)\s*\}\}$/.exec(n);return e?e[1]:null}const uf="...";function $4(n,e){return n.replace(/\{\{\s*([\w.]+)\s*\}\}/g,(t,s)=>{const r=e[s];return r==null?"":String(r)})}function ym(n,e){if(typeof n=="string"){const t=wo(n);return t!==null?t in e?e[t]:void 0:n.includes("{{")?$4(n,e):n}if(Array.isArray(n))return n.map(t=>ym(t,e)).filter(t=>t!==void 0);if(n&&typeof n=="object"){const t={};for(const[s,r]of Object.entries(n)){if(s===uf&&typeof r=="string"){const u=wo(r),f=u!==null?e[u]:void 0;if(f&&typeof f=="object"&&!Array.isArray(f))for(const[g,h]of Object.entries(f))h===void 0||g===""||(t[g]=h);continue}const o=ym(r,e);if(o===void 0||Array.isArray(o)&&o.length===0&&(s==="onSuccess"||s==="onError"))continue;const l=wo(s),d=l!==null?l in e?String(e[l]):null:s;d===null||d===""||o&&typeof o=="object"&&!Array.isArray(o)&&Object.keys(o).length===0||(t[d]=o)}return t}return n}function N4(n){const e=n.handler;if(typeof e!="string")return n;const t=A4[e];if(t)return vS.warn(`action recipe used forbidden handler "${e}" — corrected to "${t}" (CLAUDE.md CRITICAL RULES)`),{...n,handler:t};if(e==="apiCall"||e==="navigate"){const s=n.params;if(s&&typeof s=="object")for(const r of["target","onSuccess","onError"])r in s&&vS.warn(`action recipe build placed "${r}" inside params for handler "${e}" — should be top-level (CLAUDE.md)`)}return n}function ff(n,e){const t=ym(n.build,e);if(typeof t.handler!="string"&&n.build.handler.includes("{{")&&(t.handler=n.build.handler),n.build.handler.includes("{{")){const s=new Set(n.params.filter(r=>r.required).map(r=>r.key));s.size>0&&wS(n.build,t,s)}return N4(t)}function wS(n,e,t){if(!n||typeof n!="object"||Array.isArray(n)||!e||typeof e!="object"||Array.isArray(e))return;const s=n,r=e;for(const[o,l]of Object.entries(s))if(o!=="handler"){if(typeof l=="string"){const d=wo(l);d!==null&&t.has(d)&&!(o in r)&&(r[o]=l)}else if(l&&typeof l=="object"){if(!(o in r)||typeof r[o]!="object"||r[o]===null)if(JSON.stringify(l).includes("{{"))r[o]={};else continue;wS(l,r[o],t)}}}function D4(n,e){if(!n||typeof n!="object")return null;const t=n.handler;if(typeof t!="string")return null;let s=null,r=-1;for(const o of e){const l=o.build.handler.includes("{{");if(!l&&o.build.handler!==t||l&&!I4(o.build,n))continue;const d=L4(o.build,n);if(d===null)continue;const u=Object.keys(d).length;u>r&&(r=u,s={recipeId:o.id,values:d})}return s}function I4(n,e){if(typeof e.handler=="string"&&e.handler===n.handler)return!0;const t=n.params;if(!t||typeof t!="object")return!1;const s=e.params;if(!s||typeof s!="object")return!1;const r=s,o=Object.entries(t).filter(([,l])=>typeof l=="string"&&wo(l)!==null);return o.length===0?!1:o.every(([l])=>l in r)}function L4(n,e){const t={},s=(r,o)=>{if(typeof r=="string"){const l=wo(r);return l!==null?(t[l]=o,!0):r.includes("{{")?typeof o=="string":r===o}if(Array.isArray(r))return Array.isArray(o);if(r&&typeof r=="object"){if(!o||typeof o!="object"||Array.isArray(o))return!1;const l=o,d=r[uf],u=typeof d=="string"?wo(d):null,f=new Set(Object.keys(r).filter(g=>g!==uf));for(const[g,h]of Object.entries(r))if(g!==uf){if(typeof h=="string"&&wo(h)!==null){const b=wo(h);g in l&&(t[b]=l[g]);continue}if(!(g in l)){if(g==="onSuccess"||g==="onError"||g==="params"||g==="identity_target")continue;return!1}if(!s(h,l[g]))return!1}if(u!==null){const g={};for(const[h,b]of Object.entries(l))f.has(h)||(g[h]=b);Object.keys(g).length>0&&(t[u]=g)}return!0}return r===o};return s(n,e)?t:null}function Zi(n,e){const t=typeof n?.handler=="string"?n.handler:"",s=D4(n,e);return s?{kind:"preset",recipeId:s.recipeId,values:s.values,handler:t}:{kind:"advanced",handler:t}}function _S(n,e,t){const s=n?.label,r=s?t?t(s):s:"",o=[],l=n?.params??[];for(const d of l){if(d.advanced||d.widget==="action-list")continue;const u=e[d.key];if(u==null||u==="")continue;const f=O4(u);if(f!==""&&(o.push(f),o.length>=2))break}return o.length===0?r:`${r} (${o.join(", ")})`}function O4(n){return typeof n=="string"?n:typeof n=="number"||typeof n=="boolean"?String(n):Array.isArray(n)?`[${n.length}]`:n&&typeof n=="object"?"{…}":""}function SS(n,e){const t={...n};return typeof e=="string"&&e.trim().length>0?t.if=e.trim():delete t.if,t}function bm(n){const e=n?.if;return typeof e=="string"&&e.trim().length>0?e:null}const M4=/^\s*\$t:(custom\.[a-zA-Z0-9._-]+)\s*$/,z4=/^\s*\$t:([a-zA-Z0-9._-]+)\s*$/,P4=/\{\{.*?\}\}/;function kS(n,e){const t=typeof n=="string"?n:"",s=M4.exec(t);if(s){const l=s[1],d=e?e(l):"";return{customKey:l,binding:!1,paramKey:!1,displayValue:d}}const r=Ss(t);if(r&&r.key.startsWith("custom.")){const l=e?e(r.key):"";return{customKey:r.key,binding:!1,paramKey:!0,displayValue:l}}if(P4.test(t))return{customKey:null,binding:!0,paramKey:!1,displayValue:t};const o=z4.exec(t);if(o){const l=o[1],d=e?e(l):"";return{customKey:null,binding:!1,paramKey:!1,displayValue:d&&d!==l?d:""}}return{customKey:null,binding:!1,paramKey:!1,displayValue:t}}function B4(){const{state:n}=Rn(),e=n.templateIdentifier,t=n.locale,s=n.selectedRoute?.layoutName??null,r=w.useCallback(d=>{try{const f=ts.getInstance().translate(d,{templateId:e,locale:t});return f&&f!==d?f:""}catch{return""}},[e,t]),o=w.useCallback(d=>kS(d,r),[r]),l=w.useCallback(async(d,u)=>{const f=kS(d,r);if(f.binding)return{kind:"blocked"};if(f.customKey){if(u===f.displayValue)return{kind:"noop",customKey:f.customKey};const b=await af(e,f.customKey,t,u);return b.kind==="error"?{kind:"error",message:b.message}:(await xo(e,t),{kind:"updated",customKey:f.customKey})}const g=await Xi(e,s,t,u);if(g.kind==="error"||!g.resource)return{kind:"error",message:g.message};const h=g.resource.translation_key;return await xo(e,t),{kind:"created",customKey:h,token:`$t:${h}`}},[e,t,s,r]);return{locale:t,templateIdentifier:e,translate:r,classify:o,commitText:l}}async function xm(n,e,t,s,r,o,l,d,u,f){const g=f?om(s,f):null,h=!!(g&&g.keyifiable),b=u?u(s):s,y=h?g.chipValue:O_(b),x=`p${h?g.bindings.length:ef(b).length}`,S=Math.max(0,Math.min(r,y.length)),_=R_(y,S,x),A=tf(_).replace(/\{\{?p\d+\}?\}/g," ").replace(/\s+/g," ").trim(),C=A.length>0?A:_,j=await Xi(n,e,t,C);if(j.kind==="error"||!j.resource)return{kind:"error",message:j.message};const E=j.resource.translation_key,T=Ua(_),D=j.resource.values??{},I={[t]:_};for(const G of Object.keys(D)){if(G===t)continue;let F=D[G]??"";for(const Z of T)F=sm(F,Z);I[G]=F}Ic(n,E,I);const W=Ha(o,l,d);return{kind:"ok",text:`${h?I_(`$t:${E}`,g):L_(`$t:${E}`,b)}|${x}=${W}`,key:E}}async function pf(n,e,t,s,r,o,l){let d=Ss(t);if(!d&&typeof t=="string"){const x=/^\s*\$t:(custom\.[A-Za-z0-9._-]+)\s*$/.exec(t);x&&(d={key:x[1],params:[]})}if(!d)return{kind:"error",message:"not a param key"};if(!d.key.startsWith("custom."))return{kind:"error",message:"not a custom param key"};const u=KO(d.params.map(x=>x.name)),f=Ha(r,o,l),g=`${t.trim()}|${u}=${f}`,h=await Jo(n,d.key),b=mM(d.key)??{},y=new Set([...Object.keys(h?.values??{}),...Object.keys(b),e]);if(y.size===0)return{kind:"error",message:"custom key not found"};const v={};for(const x of y){const S=lr(d.key,x)??h?.values?.[x]??"";v[x]=x===e?R_(S,s,u):sm(S,u)}return Ic(n,d.key,v),{kind:"ok",text:g,paramName:u}}async function Oc(n,e,t,s){return lf(n,e,t,s),{kind:"ok"}}async function H4(n,e,t){const s=await Jo(n,e);if(!s)return{kind:"error",message:"custom key not found"};const r={};for(const[o,l]of Object.entries(s.values??{})){const d=lr(e,o)??l;r[o]=t(d)}Ic(n,e,r);try{const o=ts.getInstance();for(const[l,d]of Object.entries(r))o.setTranslationValue(n,l,e,d)}catch{}return{kind:"ok"}}function CS(n,e,t){return H4(n,e,s=>P_(s,t))}function jS(n,e){if(!(typeof window>"u"))try{window.dispatchEvent(new CustomEvent($s,{detail:{templateIdentifier:n,locale:e}}))}catch{}}async function gf(n,e,t,s){const r=await CS(n,e,t);return jS(n,s),r}const W4=/^\s*\$t:(custom\.[a-zA-Z0-9._-]+)\s*$/;function U4(n,e){const t=o=>{const l=[],d=/\{\{?(p\d+)\}?\}/g;let u;for(;(u=d.exec(o))!==null;)l.push(u[1]);return l},s=t(n),r=t(e);return s.length!==r.length?!0:s.some((o,l)=>o!==r[l])}function ES(n){const e=n.text;if(typeof e!="string")return null;const t=W4.exec(e);if(t)return t[1];const s=Ss(e);return s&&s.key.startsWith("custom.")?s.key:null}function vm(n){const e={},t=Ss(typeof n=="string"?n:"");for(const s of t?.params??[])e[s.name]=Xr(s.expression);return e}function q4(n){return vm(typeof n.text=="string"?n.text:"")}function RS({customKey:n,templateIdentifier:e,t,paramLabels:s,locales:r,onRemoveParam:o}){const l=r??J_(),d=Gr(),u=s??{},[f,g]=w.useState({status:"idle",values:{}}),[h,b]=w.useState(!1),[y,v]=w.useState(!1),[x,S]=w.useState(null),_=w.useRef({});w.useEffect(()=>{let z=!1;if(!n){g({status:"not_a_key",values:{}});return}return g({status:"loading",values:{}}),(async()=>{const H=await Jo(e,n);if(z)return;if(!H){g({status:"error",values:{}});return}const G={...H.values??{}};for(const F of Object.keys(G)){const Z=lr(n,F);Z!==void 0&&(G[F]=Z)}for(const F of l){const Z=lr(n,F);Z!==void 0&&(G[F]=Z)}_.current={...G},g({status:"loaded",id:H.id,lockVersion:H.lock_version,values:G})})(),()=>{z=!0}},[n,e]),w.useEffect(()=>{if(typeof window>"u"||!n)return;const z=H=>{const G=H.detail;G?.templateIdentifier&&G.templateIdentifier!==e||g(F=>{if(F.status!=="loaded")return F;let Z=!1;const Y={...F.values};for(const U of Object.keys(Y)){const B=lr(n,U);B!==void 0&&B!==Y[U]&&(Y[U]=B,Z=!0)}return Z?(_.current={..._.current,...Y},{...F,values:Y}):F})};return window.addEventListener($s,z),()=>window.removeEventListener($s,z)},[n,e]);const A=w.useCallback((z,H)=>{g(G=>{const F=G.values[z]??"",Z={...G,values:{...G.values,[z]:H}};return n&&U4(F,H)&&(lf(e,n,z,H),_.current={..._.current,[z]:H},d?.markDirty?.(),jS(e,z)),Z})},[n,e,d]),C=w.useCallback(z=>{g(H=>{const G={};for(const[F,Z]of Object.entries(H.values))G[F]=P_(Z,z);return _.current={...G},{...H,values:G}}),o?.(z)},[o]),j=w.useMemo(()=>[...Object.values(f.values),...Object.values(_.current)].some(H=>Ua(H).length>0),[f.values]),E=w.useRef(null),T=w.useCallback(()=>{v(!0),E.current&&clearTimeout(E.current),E.current=setTimeout(()=>v(!1),1500)},[]);w.useEffect(()=>()=>{E.current&&clearTimeout(E.current)},[]);const D=w.useCallback(async()=>{if(v(!1),f.status!=="loaded"||f.id===void 0)return;const z=_.current;for(const[G,F]of Object.entries(f.values)){const Z=z[G]??"";if(j){const Y=Ua(Z);if(Y.length===0)continue;const U=Ua(F);if(!(Y.length===U.length&&Y.every((te,q)=>te===U[q]))){S(t("layout_editor.translation.placeholder_mismatch"));return}continue}if(nm(Z)&&!tM(Z,F)){S(t("layout_editor.translation.token_mismatch"));return}}if(b(!0),S(null),j){Ic(e,n??"",f.values),_.current={...f.values},d?.markDirty?.(),ir({op:"translation_field_update",translationKey:n,changedLocales:Object.keys(f.values),timestamp:Date.now()}),await new Promise(G=>setTimeout(G,0)),b(!1),T();return}const H=`/api/admin/templates/${encodeURIComponent(e)}/custom-translations/${f.id}`;try{const G=await fetch(H,{method:"PUT",credentials:"same-origin",headers:on({"Content-Type":"application/json"}),body:JSON.stringify({values:f.values,expected_lock_version:f.lockVersion??0})}),F=await G.json().catch(()=>null);if(G.status===409){S(t("layout_editor.translation.conflict"));return}if(!G.ok){S(F?.message??t("layout_editor.translation.save_failed"));return}const Z=typeof F?.data?.lock_version=="number"?F.data.lock_version:(f.lockVersion??0)+1;g(Y=>({...Y,lockVersion:Z})),_.current={...f.values},await xo(e),ir({op:"translation_field_update",translationKey:n,changedLocales:Object.keys(f.values),timestamp:Date.now()}),T()}catch(G){S(G instanceof Error?G.message:t("layout_editor.translation.save_failed"))}finally{b(!1)}},[f,e,n,t]);if(f.status==="not_a_key"||!n)return a.jsx("div",{"data-testid":"g7le-translation-not-a-key",style:wm,children:t("layout_editor.translation.not_a_key")});if(f.status==="loading"||f.status==="idle")return a.jsx("div",{"data-testid":"g7le-translation-loading",style:wm,children:t("layout_editor.translation.loading")});if(f.status==="error")return a.jsx("div",{"data-testid":"g7le-translation-error",style:wm,children:t("layout_editor.translation.load_failed")});const I=new Set([...l,...Object.keys(f.values)]),W=Array.from(I);return a.jsxs("div",{"data-testid":"g7le-translation-field",style:{display:"flex",flexDirection:"column",gap:8},children:[a.jsxs("div",{"data-testid":"g7le-translation-key",style:F4,children:[t("layout_editor.translation.key_label"),": ",a.jsx("code",{style:V4,children:n})]}),W.map(z=>{const H=f.values[z]??"",G=H.trim().length===0;return a.jsxs("div",{className:"g7le-translation-row","data-testid":`g7le-translation-row-${z}`,style:K4,children:[a.jsxs("label",{htmlFor:`g7le-translation-input-${z}`,style:{fontSize:12,color:"#475569",minWidth:72,display:"inline-flex",alignItems:"center",gap:4},children:[Ji(z,t),G&&a.jsx("span",{"data-testid":`g7le-translation-missing-${z}`,style:G4,children:t("layout_editor.translation.needs_translation")})]}),j?a.jsx("div",{style:{flex:1},"data-testid":`g7le-translation-chip-${z}`,children:a.jsx(cf,{value:H,onChange:F=>A(z,F),t,paramLabels:u,testIdSuffix:z,onRemoveChip:o?C:void 0})}):a.jsx("input",{id:`g7le-translation-input-${z}`,type:"text","data-testid":`g7le-translation-input-${z}`,value:H,placeholder:G?t("layout_editor.translation.needs_translation"):"",onChange:F=>A(z,F.currentTarget.value),onBlur:D,style:{flex:1,padding:"4px 8px",fontSize:13,border:"1px solid #cbd5e1",borderRadius:4,color:G?"#94a3b8":"#0f172a"}})]},z)}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsx("button",{type:"button","data-testid":"g7le-translation-save",disabled:h,onClick:D,style:Y4,children:t(h?"layout_editor.translation.saving":"layout_editor.translation.save")}),y&&!h&&a.jsxs("span",{"data-testid":"g7le-translation-saved",style:{fontSize:11,color:"#16a34a",display:"inline-flex",alignItems:"center",gap:4},children:["✓ ",t("layout_editor.translation.saved")]}),x&&a.jsx("span",{"data-testid":"g7le-translation-save-error",style:{fontSize:11,color:"#dc2626"},children:x})]})]})}const wm={fontSize:12,color:"#94a3b8",padding:"16px 0",textAlign:"center"},F4={fontSize:12,color:"#475569"},V4={fontSize:11,background:"#f1f5f9",padding:"1px 4px",borderRadius:3,color:"#0f172a"},K4={display:"flex",alignItems:"center",gap:8},G4={fontSize:10,color:"#b45309",background:"#fef3c7",padding:"0 4px",borderRadius:3},Y4={padding:"6px 12px",fontSize:12,border:"none",borderRadius:6,background:"#2563eb",color:"#fff",cursor:"pointer"};function Qi({anchorRef:n,open:e,onClose:t,children:s,placement:r="bottom",minWidth:o=240,maxWidth:l=360,margin:d=8,testid:u}){const f=w.useRef(null),[g,h]=w.useState(null),b=w.useCallback(()=>{const v=n.current,x=f.current;if(!v||!x)return;const S=v.getBoundingClientRect(),_=window.innerWidth,A=window.innerHeight,C=x.getBoundingClientRect(),j=Math.min(Math.max(C.width,o),l),E=C.height;let T=S.left;T+j+d>_&&(T=S.right-j),T=Math.min(Math.max(T,d),_-j-d);const D=A-S.bottom-d,I=S.top-d;let W,z;const H=r==="bottom",G=D>=Math.min(E,160),F=I>=Math.min(E,160);H&&G||H&&!F?(W=S.bottom+4,z=D):!H&&F||F?(W=S.top-4-Math.min(E,I),z=I):D>=I?(W=S.bottom+4,z=D):(W=d,z=I),h({left:T,top:W,maxHeight:Math.max(z,120)})},[n,r,o,l,d]);if(w.useLayoutEffect(()=>{if(!e){h(null);return}b()},[e,b]),w.useEffect(()=>{if(!e)return;const v=()=>b();window.addEventListener("resize",v),window.addEventListener("scroll",v,!0);const x=_=>{const A=f.current,C=n.current,j=_.target;A?.contains(j)||C?.contains(j)||t()},S=_=>{_.key==="Escape"&&t()};return document.addEventListener("pointerdown",x,!0),document.addEventListener("keydown",S),()=>{window.removeEventListener("resize",v),window.removeEventListener("scroll",v,!0),document.removeEventListener("pointerdown",x,!0),document.removeEventListener("keydown",S)}},[e,b,t,n]),!e)return null;const y={...X4,minWidth:o,maxWidth:`min(${l}px, calc(100vw - ${d*2}px))`,...g?{left:g.left,top:g.top,maxHeight:g.maxHeight,visibility:"visible"}:{left:-9999,top:-9999,visibility:"hidden"}};return a.jsx("div",{ref:f,"data-testid":u,style:y,role:"dialog",children:s})}const X4={position:"fixed",zIndex:1e3,background:"#fff",border:"1px solid #cbd5e1",borderRadius:8,boxShadow:"0 4px 16px rgba(0,0,0,0.14)",padding:6,overflowY:"auto",boxSizing:"border-box"};function AS(n,e,t){if(!e)return t;const s=n(e);return!s||s===e||s.startsWith("$t:")?t:s}function Vs({candidates:n,t:e,onSelect:t,testIdSuffix:s,defaultOpen:r=!1,floating:o=!0}){const[l,d]=w.useState(r),[u,f]=w.useState(""),g=w.useRef(null),h=w.useMemo(()=>Qh(n,"scalar").map(x=>({...x,resolvedLabel:AS(e,x.labelKey,x.path||x.sourceId)})),[n,e]),b=w.useMemo(()=>em(h,u),[h,u]),y=a.jsxs(a.Fragment,{children:[a.jsx("input",{type:"text",autoFocus:!0,"data-testid":`g7le-inline-binding-search-input-${s}`,value:u,placeholder:e("layout_editor.inline_binding.search_placeholder"),onChange:v=>f(v.target.value),style:e6}),a.jsx("div",{style:t6,children:b.length===0?a.jsx("div",{style:n6,children:e("layout_editor.inline_binding.no_results")}):b.map(v=>a.jsxs("button",{type:"button","data-testid":`g7le-inline-binding-candidate-${v.expression}`,onClick:()=>{t(v),d(!1),f("")},style:s6,children:[a.jsxs("span",{style:{display:"flex",flexDirection:"column",alignItems:"flex-start"},children:[a.jsx("span",{style:{fontSize:12},children:v.resolvedLabel}),a.jsxs("span",{style:r6,children:[AS(e,v.groupLabelKey,v.sourceId)," · ",v.path||v.sourceId]})]}),a.jsx("span",{style:o6,children:v.preview})]},v.expression))})]});return a.jsxs("div",{style:o?Q4:{marginTop:4},children:[a.jsx("button",{ref:g,type:"button","data-testid":`g7le-inline-binding-search-toggle-${s}`,onClick:()=>d(v=>!v),title:e("layout_editor.inline_binding.search"),"aria-label":e("layout_editor.inline_binding.search"),"aria-expanded":l,style:J4,children:"🔍"}),o?a.jsx(Qi,{anchorRef:g,open:l,onClose:()=>d(!1),testid:`g7le-inline-binding-picker-${s}`,children:y}):l&&a.jsx("div",{"data-testid":`g7le-inline-binding-picker-${s}`,style:Z4,children:y})]})}const J4={fontSize:13,lineHeight:1,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#334155",padding:"4px 8px",cursor:"pointer",textAlign:"center",whiteSpace:"nowrap"},Z4={marginTop:4,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",padding:6},Q4={display:"inline-block"},e6={width:"100%",padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,boxSizing:"border-box"},t6={marginTop:4,maxHeight:200,overflowY:"auto",display:"flex",flexDirection:"column",gap:2},n6={fontSize:11,color:"#94a3b8",padding:"8px 0",textAlign:"center"},s6={display:"flex",alignItems:"center",justifyContent:"space-between",gap:8,border:"none",background:"transparent",cursor:"pointer",padding:"6px 8px",borderRadius:4,textAlign:"left"},r6={fontSize:10,color:"#94a3b8"},o6={fontSize:10,color:"#64748b",fontFamily:"monospace",whiteSpace:"nowrap"},a6=["$localized"];function el(n){const e=n.trim();if(!e.startsWith("{{")||!e.endsWith("}}")||e.length<4)return null;let t=0;for(let s=0;s<e.length;s++){if(e[s]==="{"&&e[s+1]==="{"){t++,s++;continue}if(e[s]==="}"&&e[s+1]==="}"&&(t--,s++,t===0))return s===e.length-1?e.slice(2,-2).trim():null}return null}function TS(n){if(typeof n!="string"||n.trim()===""||el(n)!==null)return!1;const e=n.match(/\{\{(?:[^}]|\}(?!\}))*\}\}/g);return!e||e.length===0?!1:e.some(t=>Zo(t).decomposed)}function Mc(n,e,t,s){switch(n.kind){case"leaf":$S(n.text,e,t,s);return;case"conditional":Mc(n.then,e,t,s),s.push({kind:"ellipsis",text:"⋯"});return;case"fallback":Mc(n.primary,e,t,s);return;case"concat":n.parts.forEach(r=>Mc(r,e,t,s));return;default:s.push({kind:"text",text:n.source});return}}function $S(n,e,t,s){const r=n.trim();if(/^\{\{([\s\S]*)\}\}$/.exec(r)&&!r.slice(2,-2).includes("}}")){s.push({kind:"chip",text:t(r)});return}if(r.startsWith("$t:")){const l=r.slice(3).split("|")[0];s.push({kind:"text",text:e(l)||l});return}for(const l of n.split(/(\{\{(?:[^}]|\}(?!\}))*\}\})/g))l!==""&&(/^\{\{[\s\S]*\}\}$/.test(l)?s.push({kind:"chip",text:t(l)}):s.push({kind:"text",text:l}))}function _m(n,e,t){const s=[];if(typeof n!="string"||n==="")return s;if(el(n)===null&&/\{\{/.test(n)){for(const l of n.split(/(\{\{(?:[^}]|\}(?!\}))*\}\})/g))if(!(l===void 0||l===""))if(/^\{\{[\s\S]*\}\}$/.test(l)){const d=Zo(l);Mc(d.node,e,t,s)}else $S(l,e,t,s);return s}const o=Zo(n);return Mc(o.node,e,t,s),s}function i6(n){if(typeof n!="string"||n.trim()==="")return"empty";const e=n.trim();if(el(e)===null)return"simple";const t=Zo(n);return t.node.kind==="leaf"?"simple":t.decomposed?"expression":"raw"}function Zo(n){const e=typeof n=="string"?n:"",t=e.trim();if(t==="")return{node:{kind:"leaf",text:e},decomposed:!1,original:e};const s=el(t);if(s===null)return{node:{kind:"leaf",text:e},decomposed:!1,original:e};let r;try{r=m6(s)}catch{r=null}if(r===null)return{node:{kind:"raw",source:s},decomposed:!1,original:e};if(r.kind==="leaf"||r.kind==="raw")return{node:r,decomposed:!1,original:e};if(r.kind==="fallback"&&r.op==="??"&&l6(r.primary)&&c6(r.fallback))return{node:{kind:"leaf",text:e},decomposed:!1,original:e};const o=tl(r,!0);return w6(s,o)?{node:r,decomposed:!0,original:e}:{node:{kind:"raw",source:s},decomposed:!1,original:e}}function tl(n,e=!1){const t=DS(n);return e?t:n.kind==="leaf"?n.text:`{{${t}}}`}function zc(n){return tl({kind:"conditional",condition:{kind:"simple",left:"",op:"truthy",right:""},then:{kind:"leaf",text:typeof n=="string"?n:""},else:{kind:"leaf",text:""}},!1)}function Sm(n){return tl({kind:"fallback",op:"??",primary:{kind:"leaf",text:typeof n=="string"?n:""},fallback:{kind:"leaf",text:""}},!1)}function Pc(n){switch(n.kind){case"leaf":return n.text;case"conditional":return Pc(n.then);case"fallback":return Pc(n.primary);case"concat":return n.parts.map(Pc).join("");default:return n.kind==="raw"?`{{${n.source}}}`:""}}function Aee(n){return n}function hf(n){if(typeof n!="string"||n.trim()==="")return"";if(el(n)===null&&/\{\{/.test(n)){for(const t of n.split(/(\{\{(?:[^}]|\}(?!\}))*\}\})/g))if(!(t===void 0||t===""))return/^\{\{[\s\S]*\}\}$/.test(t)?Pc(Zo(t).node):t;return""}return Pc(Zo(n).node)}function l6(n){if(n.kind!=="leaf")return!1;const e=/^\{\{([\s\S]*)\}\}$/.exec(n.text.trim());return e?nl(e[1].trim()):!1}function c6(n){if(n.kind!=="leaf")return!1;const e=n.text.trim();return!(/\{\{/.test(e)||e.startsWith("$t:"))}function mf(n){return`'${n.replace(/\\/g,"\\\\").replace(/'/g,"\\'")}'`}function d6(n){const e=[];let t=0,s=0;const r=n.length;for(;s<r;){if(n[s]==="{"&&n[s+1]==="{"){s>t&&e.push(mf(n.slice(t,s)));let o=s+2;for(;o<r&&!(n[o]==="}"&&n[o+1]==="}");)o++;if(o>=r)break;const l=n.slice(s+2,o).trim();e.push(l),s=o+2,t=s;continue}s++}return t<r&&e.push(mf(n.slice(t))),e.length===0?mf(n):e.join(" + ")}function u6(n){const e=n.trim(),t=/^\{\{([\s\S]*)\}\}$/.exec(e);return t?t[1].trim():!e.startsWith("$t:")&&/\{\{/.test(e)?d6(n):mf(n)}const NS="false";function f6(n){if(n.kind==="raw")return n.source;if(n.left.trim()==="")return NS;if(n.op==="truthy")return n.left;if(n.op==="falsy")return`!${p6(n.left)?`(${n.left})`:n.left}`;const e=n.right.trim()===""?"''":n.right;return`${n.left} ${n.op} ${e}`}function p6(n){return/[\s()?:|&+]/.test(n.trim())&&!/^[A-Za-z_$][\w$.?[\]]*$/.test(n.trim())}function DS(n){switch(n.kind){case"leaf":return u6(n.text);case"raw":return n.source;case"concat":return n.parts.map(e=>Bc(e,"concat")).join(" + ");case"fallback":return`${Bc(n.primary,"fallback")} ${n.op} ${Bc(n.fallback,"fallback")}`;case"conditional":return`${f6(n.condition)} ? ${Bc(n.then,"conditional")} : ${Bc(n.else,"conditional")}`;default:return""}}function Bc(n,e){const t=DS(n);return n.kind==="leaf"||n.kind==="raw"?t:n.kind==="conditional"?e==="conditional"?t:`(${t})`:n.kind==="fallback"?e==="concat"?`(${t})`:t:(n.kind==="concat",t)}const g6=["===","!==","??","||","&&","==","!=",">=","<="];function IS(n){const e=[];let t=0;const s=n.length;for(;t<s;){const r=n[t];if(/\s/.test(r)){t++;continue}if(r==="'"||r==='"'||r==="`"){const l=r;let d=t+1,u=l;for(;d<s;){if(n[d]==="\\"){u+=n[d]+(n[d+1]??""),d+=2;continue}if(n[d]==="{"&&n[d+1]==="{"){let f=d+2;for(;f<s&&!(n[f]==="}"&&n[f+1]==="}");)f++;if(f>=s)throw new Error("unterminated-binding-in-string");u+=n.slice(d,f+2),d=f+2;continue}if(n[d]===l){u+=l,d++;break}if(l==="`"&&n[d]==="$"&&n[d+1]==="{")throw new Error("template-literal-interpolation-unsupported");u+=n[d],d++}if(d>s||u[u.length-1]!==l)throw new Error("unterminated-string");e.push({kind:"string",value:u,start:t,end:d}),t=d;continue}if(r==="{"&&n[t+1]==="{"){let l=t+2;for(;l<s;){if(n[l]==="}"&&n[l+1]==="}"){l+=2;break}l++}if(n[l-1]!=="}"||n[l-2]!=="}")throw new Error("unterminated-binding");e.push({kind:"binding",value:n.slice(t,l),start:t,end:l}),t=l;continue}if(r==="$"&&n.startsWith("$t:",t)){let l=t+3;for(;l<s&&/[a-zA-Z0-9._-]/.test(n[l]);)l++;e.push({kind:"tkey",value:n.slice(t,l),start:t,end:l}),t=l;continue}let o="";for(const l of g6)if(n.startsWith(l,t)){o=l;break}if(o){e.push({kind:"op",value:o,start:t,end:t+o.length}),t+=o.length;continue}if(r==="?"){e.push({kind:"op",value:"?",start:t,end:t+1}),t++;continue}if(r===":"){e.push({kind:"op",value:":",start:t,end:t+1}),t++;continue}if(r==="+"){e.push({kind:"op",value:"+",start:t,end:t+1}),t++;continue}if(r===">"||r==="<"){e.push({kind:"op",value:r,start:t,end:t+1}),t++;continue}if(r==="!"){e.push({kind:"op",value:"!",start:t,end:t+1}),t++;continue}if(r==="("){e.push({kind:"lparen",value:"(",start:t,end:t+1}),t++;continue}if(r===")"){e.push({kind:"rparen",value:")",start:t,end:t+1}),t++;continue}if(r==="["){e.push({kind:"lbracket",value:"[",start:t,end:t+1}),t++;continue}if(r==="]"){e.push({kind:"rbracket",value:"]",start:t,end:t+1}),t++;continue}if(r==="."){e.push({kind:"dot",value:".",start:t,end:t+1}),t++;continue}if(/[0-9]/.test(r)){let l=t;for(;l<s&&/[0-9.]/.test(n[l]);)l++;e.push({kind:"number",value:n.slice(t,l),start:t,end:l}),t=l;continue}if(/[A-Za-z_$]/.test(r)){let l=t;for(;l<s&&/[A-Za-z0-9_$]/.test(n[l]);)l++;e.push({kind:"ident",value:n.slice(t,l),start:t,end:l}),t=l;continue}e.push({kind:"other",value:r,start:t,end:t+1}),t++}return e}class h6{constructor(e){ne(this,"toks");ne(this,"pos",0);ne(this,"src");this.src=e,this.toks=IS(e)}parse(){const e=this.parseTernary();if(this.pos<this.toks.length)throw new Error("trailing-tokens");return e}peek(){return this.toks[this.pos]}next(){return this.toks[this.pos++]}parseTernary(){const e=this.pos,t=this.findTopLevelQuestion(e);if(t===-1)return this.parseFallback();const s=this.sliceSource(e,t);this.pos=t+1;const r=this.parseTernary(),o=this.next();if(!o||o.kind!=="op"||o.value!==":")throw new Error("expected-colon");const l=this.parseTernary();return{kind:"conditional",condition:b6(s.trim()),then:r,else:l}}findTopLevelQuestion(e){let t=0;for(let s=e;s<this.toks.length;s++){const r=this.toks[s];if(r.kind==="lparen"||r.kind==="lbracket")t++;else if(r.kind==="rparen"||r.kind==="rbracket"){if(t===0)return-1;t--}else if(t===0&&r.kind==="op"&&r.value==="?"){if(this.toks[s+1]?.kind==="dot")continue;return s}else if(t===0&&r.kind==="op"&&r.value===":")return-1}return-1}sliceSource(e,t){if(e>=t)return"";const s=this.toks[e].start,r=this.toks[t-1].end;return this.src.slice(s,r)}parseFallback(){let e=this.parseConcat(),t=this.peek();for(;t&&t.kind==="op"&&(t.value==="??"||t.value==="||");){const s=t.value;this.next();const r=this.parseConcat();e={kind:"fallback",op:s,primary:e,fallback:r},t=this.peek()}return e}parseConcat(){const e=this.parseUnaryOrPrimary(),t=[e];let s=this.peek();for(;s&&s.kind==="op"&&s.value==="+";)this.next(),t.push(this.parseUnaryOrPrimary()),s=this.peek();return t.length===1?e:{kind:"concat",parts:t}}parseUnaryOrPrimary(){return this.parsePrimary()}parsePrimary(){const e=this.peek();if(!e)throw new Error("unexpected-end");if(e.kind==="lparen"){this.next();const t=this.parseTernary(),s=this.next();if(!s||s.kind!=="rparen")throw new Error("expected-rparen");return t}if(e.kind==="string")return this.next(),{kind:"leaf",text:OS(e.value)};if(e.kind==="tkey")return this.next(),{kind:"leaf",text:e.value};if(e.kind==="binding")return this.next(),{kind:"leaf",text:e.value};if(e.kind==="ident"&&a6.includes(e.value)&&this.toks[this.pos+1]?.kind==="lparen"){const t=this.tryParsePathWrapperCall(e.value);if(t!==null)return t;throw new Error("path-wrapper-non-simple-arg")}if(e.kind==="ident")return{kind:"leaf",text:`{{${this.parsePath()}}}`};if(e.kind==="number")return this.next(),{kind:"leaf",text:e.value};throw new Error(`unparseable-primary:${e.kind}`)}parsePath(){let e="";const t=this.next();if(!t||t.kind!=="ident")throw new Error("expected-ident");for(e+=t.value;;){const s=this.peek();if(!s)break;if(s.kind==="op"&&s.value==="?"&&this.toks[this.pos+1]?.kind==="dot"){this.next(),this.next();const r=this.next();if(!r||r.kind!=="ident")throw new Error("expected-ident-after-optional");e+="?."+r.value;continue}if(s.kind==="dot"){this.next();const r=this.next();if(!r||r.kind!=="ident")throw new Error("expected-ident-after-dot");e+="."+r.value;continue}if(s.kind==="lbracket"){this.next();const r=this.next(),o=this.next();if(!o||o.kind!=="rbracket")throw new Error("expected-rbracket");if(r&&(r.kind==="number"||r.kind==="string")){e+=`[${r.value}]`;continue}throw new Error("non-literal-index")}if(s.kind==="lparen")throw new Error("call-expression");break}return e}tryParsePathWrapperCall(e){const t=this.pos;this.next();const s=this.next();if(!s||s.kind!=="lparen")return this.pos=t,null;let r;try{if(this.peek()?.kind!=="ident")return this.pos=t,null;r=this.parsePath()}catch{return this.pos=t,null}const o=this.next();return!o||o.kind!=="rparen"?(this.pos=t,null):{kind:"leaf",text:`{{${e}(${r})}}`}}}function m6(n){return new h6(n).parse()}const y6=["===","!==","==","!=",">=","<=",">","<"];function b6(n,e){const t=n.trim();if(t==="")return{kind:"raw",source:t};if(t===NS)return{kind:"simple",left:"",op:"truthy",right:""};if(t.startsWith("!")){const o=t.slice(1).trim(),l=LS(o);return nl(l)?{kind:"simple",left:l,op:"falsy",right:""}:{kind:"raw",source:t}}const s=x6(t);if(s){const{left:o,op:l,right:d}=s,u=o.trim(),f=d.trim();return nl(u)&&(f==="''"||f==='""')?{kind:"simple",left:u,op:l,right:""}:nl(u)&&v6(f)?{kind:"simple",left:u,op:l,right:f}:{kind:"raw",source:t}}const r=LS(t);return nl(r)?{kind:"simple",left:r,op:"truthy",right:""}:{kind:"raw",source:t}}function x6(n){let e=0,t=null;for(let s=0;s<n.length;s++){const r=n[s];if(t){if(r==="\\"){s++;continue}r===t&&(t=null);continue}if(r==="'"||r==='"'||r==="`"){t=r;continue}if(r==="("||r==="["){e++;continue}if(r===")"||r==="]"){e--;continue}if(e===0){if(r==="&"&&n[s+1]==="&"||r==="|"&&n[s+1]==="|"||r==="?"&&n[s+1]==="?")return null;for(const o of y6)if(n.startsWith(o,s))return{left:n.slice(0,s),op:o,right:n.slice(s+o.length)}}}return null}function LS(n){let e=n.trim();for(;e.startsWith("(")&&e.endsWith(")");){let t=0,s=!0;for(let r=0;r<e.length;r++)if(e[r]==="(")t++;else if(e[r]===")"&&(t--,t===0&&r<e.length-1)){s=!1;break}if(!s)break;e=e.slice(1,-1).trim()}return e}function nl(n){const e=n.trim();if(e==="")return!1;let t=0;const s=e.length;if(!/[A-Za-z_$]/.test(e[0]))return!1;for(t++;t<s&&/[\w$]/.test(e[t]);)t++;for(;t<s;){if(e[t]==="?"&&e[t+1]==="."){if(t+=2,t>=s||!/[A-Za-z_$]/.test(e[t]))return!1;for(t++;t<s&&/[\w$]/.test(e[t]);)t++;continue}if(e[t]==="."){if(t++,t>=s||!/[A-Za-z_$]/.test(e[t]))return!1;for(t++;t<s&&/[\w$]/.test(e[t]);)t++;continue}if(e[t]==="["){const r=e.indexOf("]",t);if(r===-1)return!1;const o=e.slice(t+1,r).trim();if(!/^\d+$/.test(o)&&!/^'[^']*'$/.test(o)&&!/^"[^"]*"$/.test(o))return!1;t=r+1;continue}return!1}return!0}function v6(n){const e=n.trim();return/^'[^']*'$/.test(e)||/^"[^"]*"$/.test(e)||/^-?\d+(\.\d+)?$/.test(e)||/^(true|false|null|undefined)$/.test(e)?!0:nl(e)}function OS(n){const e=n.trim();return e.length>=2&&(e[0]==="'"||e[0]==='"'||e[0]==="`")?e.slice(1,-1).replace(/\\(['"`\\])/g,"$1"):e}function w6(n,e){try{return yf(n)===yf(e)}catch{return!1}}function yf(n){const e=el(n);return e!==null?yf(e):IS(n).map(s=>{if(s.kind==="string")return`S:${OS(s.value)}`;if(s.kind==="binding"){const r=/^\{\{([\s\S]*)\}\}$/.exec(s.value);return`B:${r?yf(r[1].trim()):s.value.replace(/\s+/g,"")}`}return s.kind==="tkey"?`S:${s.value}`:s.kind==="op"?`O:${s.value}`:s.kind==="ident"||s.kind==="number"?`I:${s.value}`:s.kind==="dot"?".":s.kind==="lbracket"?"[":s.kind==="rbracket"?"]":s.kind==="lparen"||s.kind==="rparen"?"":`X:${s.value}`}).join("")}function sl({active:n,testid:e}){return a.jsx("div",{"data-testid":e,"data-active":n?"true":"false","aria-hidden":"true",style:n?S6:_6})}const _6={height:0,margin:0,transition:"height 80ms"},S6={height:3,margin:"1px 0",borderRadius:2,background:"#2563eb",boxShadow:"0 0 0 1px #93c5fd"};function km(n){const{length:e,onMove:t,canDrag:s,canDropAt:r}=n,[o,l]=w.useState(null),[d,u]=w.useState(null),f=w.useCallback(v=>{s&&!s(v)||(l(v),u(v))},[s]),g=w.useCallback(()=>{l(null),u(null)},[]),h=w.useCallback((v,x)=>{if(o===null)return;const S=x==="before"?v:v+1;if(r&&!r(o,S)){u(null);return}u(S)},[o,r]),b=w.useCallback(()=>{if(o!==null&&d!==null){const v=d>o?d-1:d;v!==o&&(!r||r(o,d))&&t(o,v)}l(null),u(null)},[o,d,t,r]),y=w.useCallback(v=>o!==null&&d===v&&v<=e,[o,d,e]);return{dragIndex:o,dropIndex:d,dragging:o!==null,onDragStart:f,onDragEnd:g,onDragOverItem:h,onDrop:b,isDropTarget:y}}const k6={text:"",expression:"{{false ? '' : ''}}",fallback:"{{'' ?? ''}}",data:""};function MS(n,e){const t=Wa(n);let s=e;const r=t.map(o=>({id:s++,kind:o.kind==="literal"?"text":"expression",value:o.raw}));return r.length===0&&r.push({id:s++,kind:"text",value:""}),{segs:r,nextSeq:s}}function Cm({value:n,onChange:e,t,candidates:s,testidPrefix:r="g7le-seg-value",renderLeafInput:o}){const l=w.useRef(0),d=w.useRef(n),u=w.useMemo(()=>{const C=MS(n,l.current);return l.current=C.nextSeq,C.segs},[]),[f,g]=w.useState(u),[h,b]=w.useState(!1);if(n!==d.current){d.current=n;const C=f.map(j=>j.value).join("");if(n!==C){const j=MS(n,l.current);l.current=j.nextSeq,g(j.segs)}}const y=w.useCallback(C=>{g(C);const j=C.map(E=>E.value).join("");d.current=j,e(j)},[e]),v=w.useCallback((C,j)=>{y(f.map(E=>E.id===C?{...E,value:j??""}:E))},[f,y]),x=w.useCallback(C=>{const j=f.filter(E=>E.id!==C);y(j.length>0?j:[{id:l.current++,kind:"text",value:""}])},[f,y]),S=w.useCallback(C=>{y([...f,{id:l.current++,kind:C,value:k6[C]}])},[f,y]),_=w.useCallback((C,j)=>{if(C===j||C<0||j<0||C>=f.length||j>=f.length)return;const E=f.slice(),[T]=E.splice(C,1);E.splice(j,0,T),y(E)},[f,y]),A=km({length:f.length,onMove:_});return a.jsxs("div",{"data-testid":r,style:E6,children:[a.jsx("div",{style:R6,children:t("layout_editor.value_tree.segmented_hint")}),f.map((C,j)=>a.jsxs(qe.Fragment,{children:[a.jsx(sl,{active:A.isDropTarget(j),testid:`${r}-dropline-${j}`}),a.jsx(j6,{seg:C,index:j,t,candidates:s,testidPrefix:r,renderLeafInput:o,onValueChange:E=>v(C.id,E),onRemove:()=>x(C.id),dragging:A.dragIndex===j,onDragStartCard:()=>A.onDragStart(j),onDragEndCard:A.onDragEnd,onDragOverCard:E=>A.onDragOverItem(j,E),onDropCard:A.onDrop})]},C.id)),a.jsx(sl,{active:A.isDropTarget(f.length),testid:`${r}-dropline-end`}),a.jsxs("div",{style:I6,"data-testid":`${r}-add-row`,children:[a.jsxs("button",{type:"button","data-testid":`${r}-add-text`,onClick:()=>S("text"),style:bf,children:["+ ",t("layout_editor.value_tree.segment.text")]}),a.jsxs("button",{type:"button","data-testid":`${r}-add-expression`,onClick:()=>S("expression"),style:bf,children:["+ ",t("layout_editor.value_tree.segment.expression")]}),a.jsxs("button",{type:"button","data-testid":`${r}-add-fallback`,onClick:()=>S("fallback"),style:bf,children:["+ ",t("layout_editor.value_tree.segment.fallback")]}),a.jsxs("button",{type:"button","data-testid":`${r}-add-data`,onClick:()=>S("data"),style:bf,children:["+ ",t("layout_editor.value_tree.segment.data")]})]}),a.jsxs("div",{style:M6,children:[a.jsxs("button",{type:"button","data-testid":`${r}-source-toggle`,"aria-expanded":h,onClick:()=>b(C=>!C),style:z6,children:["</>"," ",t("layout_editor.value_tree.show_source")," ",h?"▴":"▾"]}),h&&a.jsx("code",{"data-testid":`${r}-source-code`,style:P6,children:f.map(C=>C.value).join("")})]})]})}function C6({t:n,candidates:e,onPick:t,testidPrefix:s}){return!e||e.length===0?a.jsx("div",{"data-testid":`${s}-data-empty`,style:O6,children:n("layout_editor.value_tree.segment.data_no_candidates")}):a.jsxs("div",{"data-testid":`${s}-data-picker`,style:{minWidth:0},children:[a.jsx("div",{style:L6,children:n("layout_editor.value_tree.segment.data_pick_hint")}),a.jsx(Vs,{candidates:e,t:n,onSelect:r=>{t(Ha(r.sourceId,r.path,"scalar"))},testIdSuffix:`${s}-data`,defaultOpen:!0,floating:!0})]})}function j6({seg:n,index:e,t,candidates:s,testidPrefix:r,renderLeafInput:o,onValueChange:l,onRemove:d,dragging:u,onDragStartCard:f,onDragEndCard:g,onDragOverCard:h,onDropCard:b}){const y=n.kind==="text"?"layout_editor.value_tree.segment.text":n.kind==="data"?"layout_editor.value_tree.segment.data":n.kind==="fallback"?"layout_editor.value_tree.segment.fallback":"layout_editor.value_tree.segment.expression";return a.jsxs("div",{"data-testid":`${r}-card-${e}`,"data-seg-kind":n.kind,style:u?{...zS,opacity:.5}:zS,onDragOver:v=>{v.preventDefault();const x=v.currentTarget.getBoundingClientRect();h(v.clientY<x.top+x.height/2?"before":"after")},onDrop:v=>{v.preventDefault(),b()},children:[a.jsxs("div",{style:A6,children:[a.jsx("span",{"data-testid":`${r}-drag-${e}`,style:N6,draggable:!0,onDragStart:f,onDragEnd:g,title:t("layout_editor.value_tree.drag_reorder"),"aria-label":t("layout_editor.value_tree.drag_reorder"),role:"button",children:"⠿"}),a.jsx("span",{style:T6,children:t(y)}),a.jsx("button",{type:"button","data-testid":`${r}-remove-${e}`,onClick:d,title:t("layout_editor.value_tree.segment.remove"),"aria-label":t("layout_editor.value_tree.segment.remove"),style:D6,children:"✕"})]}),a.jsx("div",{style:$6,children:n.kind==="data"&&n.value.trim()===""?a.jsx(C6,{t,candidates:s,onPick:l,testidPrefix:`${r}-field-${e}`}):o?o({value:n.value,onChange:l,t,candidates:s,testidPrefix:`${r}-field-${e}`}):a.jsx(ks,{value:n.value,onChange:l,t,candidates:s,testidPrefix:`${r}-field-${e}`,enableExpressionTree:!0,expressionSourceToggle:!1})})]})}const E6={display:"flex",flexDirection:"column",gap:6,width:"100%",minWidth:0},R6={fontSize:11,color:"#64748b"},zS={display:"flex",flexDirection:"column",gap:4,padding:"6px 8px",border:"1px solid #e2e8f0",borderLeft:"3px solid #6366f1",borderRadius:6,background:"#f8fafc",minWidth:0},A6={display:"flex",alignItems:"center",gap:6,minWidth:0},T6={fontSize:10,fontWeight:600,color:"#6366f1",flex:1,minWidth:0},$6={minWidth:0},N6={color:"#94a3b8",cursor:"grab",fontSize:14,userSelect:"none"},D6={border:"none",background:"transparent",color:"#94a3b8",cursor:"pointer",fontSize:12,padding:2,flexShrink:0},I6={display:"flex",flexWrap:"wrap",gap:6,marginTop:2},L6={fontSize:11,color:"#64748b",marginBottom:2},O6={fontSize:11,color:"#94a3b8",padding:"4px 0"},bf={padding:"4px 10px",fontSize:11,border:"1px dashed #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer",whiteSpace:"nowrap"},M6={display:"flex",flexDirection:"column",gap:4,marginTop:2},z6={alignSelf:"flex-start",padding:"3px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer",fontFamily:"monospace"},P6={fontSize:11,background:"#0f172a",color:"#e2e8f0",padding:"6px 8px",borderRadius:4,wordBreak:"break-all",fontFamily:"monospace"},B6=[{value:"truthy",labelKey:"layout_editor.value_tree.cond.op_truthy"},{value:"falsy",labelKey:"layout_editor.value_tree.cond.op_falsy"},{value:"===",labelKey:"layout_editor.value_tree.cond.op_eq"},{value:"!==",labelKey:"layout_editor.value_tree.cond.op_neq"},{value:">",labelKey:"layout_editor.value_tree.cond.op_gt"},{value:"<",labelKey:"layout_editor.value_tree.cond.op_lt"},{value:">=",labelKey:"layout_editor.value_tree.cond.op_gte"},{value:"<=",labelKey:"layout_editor.value_tree.cond.op_lte"}];function PS({node:n,onChange:e,t,candidates:s,testidPrefix:r="g7le-value-tree",depth:o=0,showSourceToggle:l=!0,renderLeafInput:d}){const[u,f]=w.useState(!1),g=o===0,h=a.jsx(rl,{node:n,onChange:e,t,candidates:s,testidPrefix:r,depth:o,renderLeafInput:d});return g?l?a.jsxs("div",{"data-testid":r,style:HS,children:[h,a.jsxs("div",{style:az,children:[a.jsxs("button",{type:"button","data-testid":`${r}-source-toggle`,"aria-expanded":u,onClick:()=>f(b=>!b),style:iz,children:["</>"," ",t("layout_editor.value_tree.show_source")," ",u?"▴":"▾"]}),u&&a.jsx("code",{"data-testid":`${r}-source-code`,style:lz,children:tl(n,!1)})]})]}):a.jsx("div",{"data-testid":r,style:HS,children:h}):h}function rl({node:n,onChange:e,t,candidates:s,testidPrefix:r,depth:o,renderLeafInput:l}){switch(n.kind){case"leaf":return a.jsx(Cm,{value:n.text,onChange:d=>e({kind:"leaf",text:d}),t,candidates:s,testidPrefix:`${r}-leaf`,renderLeafInput:l});case"conditional":return a.jsx(H6,{node:n,onChange:e,t,candidates:s,testidPrefix:r,depth:o,renderLeafInput:l});case"fallback":return a.jsx(W6,{node:n,onChange:e,t,candidates:s,testidPrefix:r,depth:o,renderLeafInput:l});case"concat":return a.jsx(q6,{node:n,onChange:e,t,candidates:s,testidPrefix:r,depth:o,renderLeafInput:l});default:return a.jsxs("div",{"data-testid":`${r}-raw`,style:cz,children:[a.jsx("code",{style:qS,children:n.source??""}),a.jsxs("span",{style:FS,children:["🔒 ",t("layout_editor.value_tree.raw_code_only")]})]})}}function H6({node:n,onChange:e,t,candidates:s,testidPrefix:r,depth:o,renderLeafInput:l}){const d=w.useCallback(g=>e({...n,condition:g}),[n,e]),u=w.useCallback(g=>e({...n,then:g}),[n,e]),f=w.useCallback(g=>e({...n,else:g}),[n,e]);return a.jsxs("div",{"data-testid":`${r}-conditional`,style:jm(o),children:[a.jsx(F6,{condition:n.condition,onChange:d,t,candidates:s,testidPrefix:r}),a.jsx(xf,{label:t("layout_editor.value_tree.cond.when_true"),testid:`${r}-then`,children:a.jsx(rl,{node:n.then,onChange:u,t,candidates:s,testidPrefix:`${r}-then`,depth:o+1,renderLeafInput:l})}),a.jsx(xf,{label:t("layout_editor.value_tree.cond.when_false"),testid:`${r}-else`,children:a.jsx(rl,{node:n.else,onChange:f,t,candidates:s,testidPrefix:`${r}-else`,depth:o+1,renderLeafInput:l})})]})}function W6({node:n,onChange:e,t,candidates:s,testidPrefix:r,depth:o,renderLeafInput:l}){const d=w.useCallback(f=>e({...n,primary:f}),[n,e]),u=w.useCallback(f=>e({...n,fallback:f}),[n,e]);return a.jsxs("div",{"data-testid":`${r}-fallback`,style:jm(o),children:[a.jsx(xf,{label:t("layout_editor.value_tree.fallback.primary"),testid:`${r}-primary`,children:a.jsx(rl,{node:n.primary,onChange:d,t,candidates:s,testidPrefix:`${r}-primary`,depth:o+1,renderLeafInput:l})}),a.jsx(xf,{label:t(n.op==="??"?"layout_editor.value_tree.fallback.when_empty":"layout_editor.value_tree.fallback.when_falsy"),testid:`${r}-fallback-branch`,children:a.jsx(rl,{node:n.fallback,onChange:u,t,candidates:s,testidPrefix:`${r}-fallbackb`,depth:o+1,renderLeafInput:l})})]})}const U6={text:()=>({kind:"leaf",text:""}),data:()=>({kind:"leaf",text:""}),expression:()=>({kind:"conditional",condition:{kind:"simple",left:"",op:"truthy",right:""},then:{kind:"leaf",text:""},else:{kind:"leaf",text:""}}),fallback:()=>({kind:"fallback",op:"??",primary:{kind:"leaf",text:""},fallback:{kind:"leaf",text:""}})};function q6({node:n,onChange:e,t,candidates:s,testidPrefix:r,depth:o,renderLeafInput:l}){const d=w.useCallback((y,v)=>{const x=n.parts.slice();x[y]=v,e({...n,parts:x})},[n,e]),u=w.useCallback(y=>{y.length===0?e({kind:"leaf",text:""}):y.length===1?e(y[0]):e({...n,parts:y})},[n,e]),f=w.useCallback(y=>u(n.parts.filter((v,x)=>x!==y)),[n.parts,u]),g=w.useCallback(y=>u([...n.parts,U6[y]()]),[n.parts,u]),h=w.useCallback((y,v)=>{if(y===v||y<0||v<0||y>=n.parts.length||v>=n.parts.length)return;const x=n.parts.slice(),[S]=x.splice(y,1);x.splice(v,0,S),u(x)},[n.parts,u]),b=km({length:n.parts.length,onMove:h});return a.jsxs("div",{"data-testid":`${r}-concat`,style:jm(o),children:[a.jsx("div",{style:ez,children:t("layout_editor.value_tree.concat.hint")}),n.parts.map((y,v)=>a.jsxs(qe.Fragment,{children:[a.jsx(sl,{active:b.isDropTarget(v),testid:`${r}-part-dropline-${v}`}),a.jsxs("div",{"data-testid":`${r}-part-card-${v}`,style:b.dragIndex===v?{...US,opacity:.5}:US,onDragOver:x=>{x.preventDefault();const S=x.currentTarget.getBoundingClientRect();b.onDragOverItem(v,x.clientY<S.top+S.height/2?"before":"after")},onDrop:x=>{x.preventDefault(),b.onDrop()},children:[a.jsxs("div",{style:tz,children:[a.jsx("span",{"data-testid":`${r}-part-handle-${v}`,style:rz,draggable:!0,onDragStart:()=>b.onDragStart(v),onDragEnd:b.onDragEnd,title:t("layout_editor.value_tree.drag_reorder"),"aria-label":t("layout_editor.value_tree.drag_reorder"),role:"button",children:"⠿"}),a.jsx("span",{style:nz,children:t("layout_editor.value_tree.concat.part",{n:v+1})}),a.jsx("button",{type:"button","data-testid":`${r}-part-remove-${v}`,onClick:()=>f(v),title:t("layout_editor.value_tree.segment.remove"),"aria-label":t("layout_editor.value_tree.segment.remove"),style:oz,children:"✕"})]}),a.jsx("div",{style:{minWidth:0},children:a.jsx(rl,{node:y,onChange:x=>d(v,x),t,candidates:s,testidPrefix:`${r}-part-${v}`,depth:o+1,renderLeafInput:l})})]})]},v)),a.jsx(sl,{active:b.isDropTarget(n.parts.length),testid:`${r}-part-dropline-end`}),a.jsxs("div",{style:sz,"data-testid":`${r}-part-add-row`,children:[a.jsxs("button",{type:"button","data-testid":`${r}-part-add-text`,onClick:()=>g("text"),style:vf,children:["+ ",t("layout_editor.value_tree.segment.text")]}),a.jsxs("button",{type:"button","data-testid":`${r}-part-add-expression`,onClick:()=>g("expression"),style:vf,children:["+ ",t("layout_editor.value_tree.segment.expression")]}),a.jsxs("button",{type:"button","data-testid":`${r}-part-add-fallback`,onClick:()=>g("fallback"),style:vf,children:["+ ",t("layout_editor.value_tree.segment.fallback")]}),a.jsxs("button",{type:"button","data-testid":`${r}-part-add-data`,onClick:()=>g("data"),style:vf,children:["+ ",t("layout_editor.value_tree.segment.data")]})]})]})}function F6({condition:n,onChange:e,t,candidates:s,testidPrefix:r}){if(n.kind==="raw")return a.jsxs("div",{"data-testid":`${r}-cond-raw`,style:X6,children:[a.jsx("span",{style:WS,children:t("layout_editor.value_tree.cond.label")}),a.jsx("code",{style:qS,children:n.source}),a.jsxs("span",{style:FS,children:["🔒 ",t("layout_editor.value_tree.cond.code_only")]})]});const o=n,l=o.op!=="truthy"&&o.op!=="falsy";return a.jsxs("div",{"data-testid":`${r}-cond`,style:Y6,children:[a.jsx("span",{style:WS,children:t("layout_editor.value_tree.cond.label")}),a.jsx(BS,{testid:`${r}-cond-left`,value:o.left,onCommit:d=>e({...o,left:d}),placeholder:t("layout_editor.value_tree.cond.field_placeholder"),candidates:s,t}),a.jsx("select",{"data-testid":`${r}-cond-op`,value:o.op,onChange:d=>e({...o,op:d.target.value}),style:Q6,children:B6.map(d=>a.jsx("option",{value:d.value,children:t(d.labelKey)},d.value))}),l&&a.jsx(BS,{testid:`${r}-cond-right`,value:o.right,onCommit:d=>e({...o,right:d}),placeholder:t("layout_editor.value_tree.cond.value_placeholder"),candidates:s,t,quoteDataPick:!0})]})}function BS({testid:n,value:e,onCommit:t,placeholder:s,candidates:r,t:o,quoteDataPick:l=!1}){const[d,u]=w.useState(null),f=d!==null?d:e,g=()=>{d!==null&&(d!==e&&t(d),u(null))},h=(b,y)=>{const v=Ha(b,y,"scalar"),x=/^\{\{\s*([\s\S]*?)\s*\}\}$/.exec(v.trim());let S=x?x[1]:v;S=S.replace(/\s*\?\?\s*''$/,"").trim(),t(l?`'${S}'`:S),u(null)};return a.jsxs("span",{style:J6,children:[a.jsx("input",{type:"text","data-testid":n,value:f,onChange:b=>u(b.target.value),onBlur:g,onKeyDown:b=>{b.key==="Enter"&&(b.preventDefault(),g())},placeholder:s,style:Z6}),r&&r.length>0&&o&&a.jsx(Vs,{candidates:r,t:o,onSelect:b=>h(b.sourceId,b.path),testIdSuffix:`${n}-data`,floating:!0})]})}function xf({label:n,testid:e,children:t}){return a.jsxs("div",{"data-testid":e,style:V6,children:[a.jsx("span",{style:K6,children:n}),a.jsx("div",{style:G6,children:t})]})}const HS={display:"flex",flexDirection:"column",gap:6,width:"100%",minWidth:0},jm=n=>({display:"flex",flexDirection:"column",gap:6,padding:"8px",border:"1px solid #e2e8f0",borderLeft:`3px solid ${n%2===0?"#6366f1":"#0ea5e9"}`,borderRadius:6,background:n%2===0?"#f8fafc":"#fefefe",minWidth:0}),V6={display:"flex",flexDirection:"column",gap:3,minWidth:0},K6={fontSize:11,fontWeight:600,color:"#475569"},G6={paddingLeft:8,minWidth:0},Y6={display:"flex",flexWrap:"wrap",gap:4,alignItems:"center",minWidth:0},X6={display:"flex",flexWrap:"wrap",gap:4,alignItems:"center",minWidth:0},WS={fontSize:11,fontWeight:600,color:"#0f172a",whiteSpace:"nowrap"},J6={display:"inline-flex",alignItems:"flex-start",gap:2,flex:"1 1 80px",minWidth:60},Z6={flex:"1 1 80px",minWidth:60,padding:"4px 6px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6},Q6={padding:"4px 6px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff"},ez={fontSize:11,color:"#94a3b8"},US={display:"flex",flexDirection:"column",gap:4,padding:"6px 8px",border:"1px solid #e2e8f0",borderLeft:"3px solid #6366f1",borderRadius:6,background:"#fff",minWidth:0},tz={display:"flex",alignItems:"center",gap:6,minWidth:0},nz={fontSize:10,fontWeight:600,color:"#6366f1",flex:1,minWidth:0},sz={display:"flex",flexWrap:"wrap",gap:6,marginTop:2},rz={color:"#94a3b8",cursor:"grab",fontSize:14,userSelect:"none"},oz={border:"none",background:"transparent",color:"#94a3b8",cursor:"pointer",fontSize:12,padding:2,flexShrink:0},vf={padding:"4px 10px",fontSize:11,border:"1px dashed #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer",whiteSpace:"nowrap"},az={display:"flex",flexDirection:"column",gap:4,marginTop:2},iz={alignSelf:"flex-start",padding:"3px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer",fontFamily:"monospace"},lz={fontSize:11,background:"#0f172a",color:"#e2e8f0",padding:"6px 8px",borderRadius:4,wordBreak:"break-all",fontFamily:"monospace"},cz={display:"flex",flexDirection:"column",gap:2,minWidth:0},qS={fontSize:11,background:"#f1f5f9",padding:"3px 6px",borderRadius:4,color:"#0f172a",wordBreak:"break-all",fontFamily:"monospace"},FS={fontSize:10,color:"#64748b"};function ks({value:n,onChange:e,t,placeholder:s,testidPrefix:r="g7le-i18n-text-field",locales:o,candidates:l,enableExpressionTree:d=!1,expressionTreeCollapsible:u=!1,expressionSourceToggle:f=!0}){const{locale:g,templateIdentifier:h,commitText:b,classify:y,translate:v}=B4(),[x,S]=w.useState(null),[_,A]=w.useState(!1),[C,j]=w.useState(!1),[E,T]=w.useState(!1),[D,I]=w.useState(!1),[W,z]=w.useState(!1),[,H]=w.useState(0);w.useEffect(()=>{if(typeof window>"u")return;const B=te=>{const q=te.detail;q?.templateIdentifier&&q.templateIdentifier!==h||H(M=>M+1)};return window.addEventListener($s,B),()=>window.removeEventListener($s,B)},[h]);const G=y(n);w.useEffect(()=>{S(null),z(!1)},[g,n]);const F=x!==null?x:G.displayValue,Z=w.useCallback(async()=>{if(x!==null){if(x===G.displayValue){S(null);return}A(!0);try{const B=await b(n,x);B.kind==="created"&&B.token?(e(B.token),ir({op:"prop_i18n_create_key",sourceState:"plain_text",translationKey:B.customKey,toLocale:g,valueLength:x.length,timestamp:Date.now()})):B.kind==="updated"&&ir({op:"prop_i18n_update_value",sourceState:"custom_key",translationKey:B.customKey,toLocale:g,valueLength:x.length,timestamp:Date.now()})}finally{A(!1),S(null)}}},[x,G.displayValue,b,n,e,g]),Y=w.useCallback(B=>{typeof n=="string"&&(e($c(n,B)),G.customKey&&gf(h,G.customKey,B,g))},[n,e,G.customKey,h,g]);if(G.binding){if(d&&typeof n=="string"){const B=TS(n),te=Zo(n),q=!B&&Yr(n)!==null,M=(B||te.decomposed)&&!q;if(M&&u&&!E)return a.jsx(fz,{value:n,t,translate:v,onEdit:()=>T(!0),testidPrefix:`${r}-preview`});const V=M&&(u||B)?a.jsx(Cm,{value:n,onChange:ee=>e(ee),t,candidates:l,testidPrefix:`${r}-seg`}):te.decomposed?a.jsx(PS,{node:te.node,onChange:ee=>e(tl(ee,!1)),t,candidates:l,testidPrefix:`${r}-tree`,showSourceToggle:f}):null;if(V){if(!u)return V;const ee=hf(n),se=ee?_m(ee,re=>{const pe=v(re);return pe&&pe!==re&&!pe.startsWith("$t:")?pe:""},re=>Xr(re)):[];return a.jsxs("div",{"data-testid":`${r}-builder`,style:{display:"flex",flexDirection:"column",gap:6,width:"100%",minWidth:0},children:[a.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:6},children:[a.jsxs("button",{type:"button","data-testid":`${r}-to-plain`,onClick:()=>I(!0),style:xz,title:t("layout_editor.value_tree.to_plain"),"aria-label":t("layout_editor.value_tree.to_plain"),children:["↩ ",t("layout_editor.value_tree.to_plain")]}),a.jsxs("button",{type:"button","data-testid":`${r}-builder-collapse`,onClick:()=>T(!1),style:GS,title:t("layout_editor.value_tree.collapse"),"aria-label":t("layout_editor.value_tree.collapse"),children:["▴ ",t("layout_editor.value_tree.collapse")]})]}),D&&a.jsxs("div",{"data-testid":`${r}-to-plain-confirm`,style:vz,children:[a.jsx("p",{style:wz,children:t("layout_editor.value_tree.to_plain_lead")}),a.jsx("div",{style:_z,children:se.length===0?a.jsx("span",{style:{color:"#94a3b8"},children:t("layout_editor.prop_i18n.placeholder")}):se.map((re,pe)=>re.kind==="chip"?a.jsxs("span",{style:VS,children:["🔗 ",re.text]},pe):a.jsx("span",{style:re.kind==="ellipsis"?KS:void 0,children:re.text},pe))}),a.jsxs("p",{style:Sz,children:["⚠ ",t("layout_editor.value_tree.to_plain_warn")]}),a.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:6},children:[a.jsx("button",{type:"button","data-testid":`${r}-to-plain-confirm-cancel`,onClick:()=>I(!1),style:GS,children:t("layout_editor.value_tree.to_plain_cancel")}),a.jsx("button",{type:"button","data-testid":`${r}-to-plain-confirm-ok`,onClick:()=>{I(!1),T(!1),e(hf(n)||void 0)},style:kz,children:t("layout_editor.value_tree.to_plain_ok")})]})]}),V]})}}return d&&typeof n=="string"&&l&&l.length>0&&Yr(n)!==null?a.jsx(pz,{value:n,onChange:e,t,candidates:l,testidPrefix:`${r}-data`}):a.jsxs("div",{"data-testid":`${r}-binding`,style:Tz,children:[a.jsx("code",{style:$z,children:typeof n=="string"?n:""}),a.jsxs("span",{style:Nz,children:["🔗 ",t("layout_editor.prop_i18n.bound_code_only")]})]})}if(!W&&typeof n=="string"&&N_(n)){const B=D_(n);return a.jsxs("div",{"data-testid":`${r}-settings-ref`,style:Ez,children:[a.jsx("div",{"data-testid":`${r}-settings-ref-chips`,style:Rz,children:B.map((te,q)=>te.kind==="chip"?a.jsxs("span",{style:Az,children:["🔗 ",te.label]},q):a.jsx("span",{children:te.label},q))}),a.jsxs("button",{type:"button","data-testid":`${r}-settings-ref-edit`,onClick:()=>z(!0),style:YS,title:t("layout_editor.value_tree.edit"),"aria-label":t("layout_editor.value_tree.edit"),children:["✎ ",t("layout_editor.value_tree.edit")]})]})}const U=a.jsxs("button",{type:"button","data-testid":`${r}-toggle`,title:`${t("layout_editor.prop_i18n.edit_languages")} (${Ji(g,t)})`,"aria-label":`${t("layout_editor.prop_i18n.edit_languages")} (${Ji(g,t)})`,"aria-expanded":C,onClick:()=>j(B=>!B),style:YS,children:["🌐 ",G.customKey?C?"⌃":"⌄":"+"]});return a.jsxs("div",{"data-testid":r,style:{display:"flex",flexDirection:"column",gap:4,width:"100%"},children:[a.jsx("div",{style:Cz,children:G.paramKey&&G.customKey?a.jsx(dz,{customKey:G.customKey,value:typeof n=="string"?n:"",onChange:e,t,candidates:l,testidPrefix:r,showExprButton:d&&u,onToExpression:()=>{T(!0),e(zc(typeof n=="string"?n:""))},langToggle:U}):a.jsxs(a.Fragment,{children:[a.jsx("input",{type:"text","data-testid":`${r}-preview`,value:F,placeholder:s??t("layout_editor.prop_i18n.placeholder"),onChange:B=>S(B.target.value),onBlur:()=>{Z(),W&&z(!1)},disabled:_,style:jz}),l&&l.length>0&&a.jsx(uz,{value:typeof n=="string"?n:"",customKey:G.customKey,onChange:e,t,candidates:l,testidPrefix:r}),d&&u&&a.jsx("button",{type:"button","data-testid":`${r}-to-expr`,onClick:()=>{T(!0),e(zc(typeof n=="string"?n:""))},title:t("layout_editor.value_tree.to_expression"),"aria-label":t("layout_editor.value_tree.to_expression"),style:Hc,children:"ƒx"}),U]})}),C&&(G.customKey?a.jsx(RS,{customKey:G.customKey,templateIdentifier:h,t,paramLabels:vm(n),locales:o,onRemoveParam:Y},G.customKey):a.jsx("div",{"data-testid":`${r}-expand-hint`,style:Dz,children:t("layout_editor.prop_i18n.create_first")}))]})}function dz({customKey:n,value:e,onChange:t,t:s,candidates:r,testidPrefix:o,showExprButton:l=!1,onToExpression:d,langToggle:u}){const{state:f}=Rn(),g=f.templateIdentifier,h=f.locale,b=Gr(),[y,v]=w.useState(null),x=w.useRef(""),S=w.useRef(null),_=w.useRef(null),A=w.useRef(null),[C,j]=w.useState(null),[E,T]=w.useState(!1),D=vm(e),I=w.useCallback(async()=>{const F=lr(n,h);if(F!==void 0){x.current=F,v(F);return}const Y=(await Jo(g,n))?.values?.[h]??"";x.current=Y,v(Y)},[n,g,h]);w.useEffect(()=>{let F=!1;return(async()=>{const Z=lr(n,h);if(Z!==void 0){F||(x.current=Z,v(Z));return}const Y=await Jo(g,n);if(F)return;const U=Y?.values?.[h]??"";x.current=U,v(U)})(),()=>{F=!0}},[n,g,h]),w.useEffect(()=>{if(typeof window>"u")return;const F=Z=>{const Y=Z.detail;if(Y?.templateIdentifier&&Y.templateIdentifier!==g)return;const U=lr(n,h);U!==void 0&&U!==y&&(x.current=U,v(U))};return window.addEventListener($s,F),()=>window.removeEventListener($s,F)},[n,g,h,y]);const W=w.useCallback(F=>{v(F),Oc(g,n,h,F).then(()=>{b?.markDirty?.()})},[g,n,h,b]),z=w.useCallback(F=>{t($c(e,F)),gf(g,n,F,h).then(()=>{I(),b?.markDirty?.()})},[e,t,g,n,h,I,b]),H=w.useCallback(async F=>{if(!(C===null||E)){T(!0);try{y!==null&&y!==x.current&&(await Oc(g,n,h,y),x.current=y);const Z=await pf(g,h,e,C,F.sourceId,F.path,"scalar");Z.kind==="ok"&&(t(Z.text),await I(),b?.markDirty?.())}finally{T(!1),j(null)}}},[C,E,y,e,g,n,h,t,I,b]),G=!!r&&r.length>0;return a.jsxs("div",{"data-testid":`${o}-chipfield-wrap`,style:{flex:1,minWidth:0,display:"flex",alignItems:"center",gap:4},children:[a.jsx("div",{ref:S,"data-testid":`${o}-chipfield`,style:{flex:1,minWidth:0},children:y===null?a.jsx("div",{"data-testid":`${o}-chipfield-loading`,style:{fontSize:11,color:"#94a3b8",padding:"4px 0"},children:s("layout_editor.translation.loading")}):a.jsx(cf,{value:y,onChange:W,t:s,paramLabels:D,testIdSuffix:`${o}-field`,onRequestInsert:G?F=>j(F):void 0,onRemoveChip:z,hideInsertButton:!0,caretRef:A})}),G&&a.jsx("button",{ref:_,type:"button","data-testid":`${o}-plus-data-btn`,onClick:()=>j(A.current?A.current():y?.length??0),title:s("layout_editor.inline_binding.insert_data"),"aria-label":s("layout_editor.inline_binding.insert_data"),style:Hc,children:"+"}),l&&d&&a.jsx("button",{type:"button","data-testid":`${o}-to-expr`,onClick:d,title:s("layout_editor.value_tree.to_expression"),"aria-label":s("layout_editor.value_tree.to_expression"),style:Hc,children:"ƒx"}),u,G&&a.jsx(Qi,{anchorRef:_,open:C!==null,onClose:()=>j(null),children:a.jsx("div",{"data-testid":`${o}-chipfield-picker`,children:a.jsx(Vs,{candidates:r,t:s,onSelect:F=>{H(F)},testIdSuffix:`${o}-field-insert`,defaultOpen:!0,floating:!1})})})]})}function uz({value:n,customKey:e,onChange:t,t:s,candidates:r,testidPrefix:o}){const{state:l}=Rn(),d=l.templateIdentifier,u=l.selectedRoute?.layoutName??null,f=l.locale,g=Gr(),[h,b]=w.useState(!1),[y,v]=w.useState(!1),x=w.useRef(null),S=w.useCallback(C=>{const j=s(C);return j&&j!==C&&!j.startsWith("$t:")?j:""},[s]),_=w.useCallback(C=>C.replace(/\$t:[a-zA-Z0-9._-]+/g,j=>S(j.slice(3))).replace(/\s+/g," ").trim(),[S]),A=w.useCallback(async C=>{if(!y){v(!0);try{if(e){const j=await pf(d,f,n,Number.MAX_SAFE_INTEGER,C.sourceId,C.path,"scalar");j.kind==="ok"&&(t(j.text),g?.markDirty?.())}else{const j=await xm(d,u,f,n,n.length,C.sourceId,C.path,"scalar",_,E=>s(E));j.kind==="ok"&&(t(j.text),g?.markDirty?.())}}finally{v(!1),b(!1)}}},[y,e,d,u,f,n,t,g,s,_]);return a.jsxs("div",{"data-testid":`${o}-plus-data`,style:{display:"inline-block"},children:[a.jsx("button",{ref:x,type:"button","data-testid":`${o}-plus-data-btn`,disabled:y,onClick:()=>b(C=>!C),title:s("layout_editor.inline_binding.insert_data"),"aria-label":s("layout_editor.inline_binding.insert_data"),style:Hc,children:"+"}),a.jsx(Qi,{anchorRef:x,open:h,onClose:()=>b(!1),children:a.jsx(Vs,{candidates:r,t:s,onSelect:C=>{A(C)},testIdSuffix:`${o}-plus-insert`,defaultOpen:!0,floating:!1})})]})}function fz({value:n,t:e,translate:t,onEdit:s,testidPrefix:r}){const o=_m(n,l=>{const d=t(l);return d&&d!==l&&!d.startsWith("$t:")?d:""},l=>Xr(l));return a.jsxs("div",{"data-testid":r,style:mz,children:[a.jsx("div",{"data-testid":`${r}-text`,style:yz,children:o.length===0?a.jsx("span",{style:{color:"#94a3b8"},children:e("layout_editor.prop_i18n.placeholder")}):o.map((l,d)=>l.kind==="chip"?a.jsxs("span",{style:VS,children:["🔗 ",l.text]},d):a.jsx("span",{style:l.kind==="ellipsis"?KS:void 0,children:l.text},d))}),a.jsxs("button",{type:"button","data-testid":`${r}-edit`,onClick:s,style:bz,title:e("layout_editor.value_tree.edit"),"aria-label":e("layout_editor.value_tree.edit"),children:["✎ ",e("layout_editor.value_tree.edit")]})]})}function pz({value:n,onChange:e,t,candidates:s,testidPrefix:r}){const[o,l]=w.useState(!1),d=w.useRef(null),u=Xr(n);return a.jsxs("div",{"data-testid":r,style:{display:"flex",flexDirection:"column",gap:4,width:"100%",minWidth:0},children:[a.jsxs("div",{style:gz,children:[a.jsxs("span",{"data-testid":`${r}-chip`,style:hz,children:["🔗 ",u]}),a.jsx("button",{ref:d,type:"button","data-testid":`${r}-change`,onClick:()=>l(f=>!f),style:Hc,title:t("layout_editor.value_tree.change_data"),"aria-label":t("layout_editor.value_tree.change_data"),children:t("layout_editor.value_tree.change_data")})]}),a.jsx(Qi,{anchorRef:d,open:o,onClose:()=>l(!1),children:a.jsx(Vs,{candidates:s,t,onSelect:f=>{const g=f.path?f.path.split(".").filter(Boolean):[],h=[f.sourceId,...g].join("?.");e(`{{${h}}}`),l(!1)},testIdSuffix:`${r}-pick`,defaultOpen:!0,floating:!1})})]})}const gz={display:"flex",alignItems:"center",gap:6,width:"100%",minWidth:0,flexWrap:"wrap"},hz={fontSize:11,background:"#eef2ff",color:"#4338ca",padding:"3px 8px",borderRadius:12,wordBreak:"break-all"},mz={display:"flex",alignItems:"center",gap:8,width:"100%",minWidth:0},yz={flex:1,minWidth:0,display:"flex",flexWrap:"wrap",alignItems:"center",gap:4,padding:"5px 8px",fontSize:12,color:"#334155",border:"1px solid #e2e8f0",borderRadius:6,background:"#f8fafc",overflow:"hidden"},VS={fontSize:11,background:"#eef2ff",color:"#4338ca",padding:"1px 6px",borderRadius:10,whiteSpace:"nowrap"},KS={color:"#94a3b8"},bz={padding:"4px 10px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#2563eb",cursor:"pointer",whiteSpace:"nowrap",flexShrink:0},GS={padding:"3px 10px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer",whiteSpace:"nowrap"},xz={padding:"3px 10px",fontSize:11,border:"1px solid #fca5a5",borderRadius:6,background:"#fef2f2",color:"#b91c1c",cursor:"pointer",whiteSpace:"nowrap"},vz={display:"flex",flexDirection:"column",gap:6,padding:10,border:"1px solid #fca5a5",borderRadius:8,background:"#fffbeb"},wz={margin:0,fontSize:12,color:"#334155"},_z={padding:"5px 8px",fontSize:12,color:"#0f172a",background:"#fff",border:"1px solid #e2e8f0",borderRadius:6,wordBreak:"break-all"},Sz={margin:0,fontSize:11,color:"#b45309"},kz={padding:"3px 12px",fontSize:11,border:"1px solid #dc2626",borderRadius:6,background:"#dc2626",color:"#fff",cursor:"pointer",whiteSpace:"nowrap"},Cz={display:"flex",gap:4,alignItems:"center",width:"100%",minWidth:0},jz={flex:1,padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,minWidth:0,width:"100%"},YS={padding:"4px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer",whiteSpace:"nowrap"},Hc={padding:"4px 8px",fontSize:13,lineHeight:1,border:"1px solid #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer",whiteSpace:"nowrap"},Ez={display:"flex",alignItems:"center",gap:6,width:"100%",minWidth:0,flexWrap:"wrap"},Rz={flex:1,minWidth:0,display:"flex",flexWrap:"wrap",alignItems:"center",gap:4,fontSize:12,color:"#334155"},Az={fontSize:11,background:"#eef2ff",color:"#4338ca",padding:"2px 8px",borderRadius:12,whiteSpace:"nowrap"},Tz={display:"flex",flexDirection:"column",gap:2,width:"100%"},$z={fontSize:11,background:"#f1f5f9",padding:"3px 6px",borderRadius:4,color:"#0f172a",wordBreak:"break-all"},Nz={fontSize:10,color:"#64748b"},Dz={fontSize:11,color:"#94a3b8",padding:"6px 8px",border:"1px dashed #cbd5e1",borderRadius:6,background:"#f8fafc"};function Em({value:n,onChange:e,candidates:t,t:s}){const r=Array.isArray(n)?n:[],o=t??[],[l,d]=w.useState(!1),u=y=>o.find(v=>v.value===y)?.label??y,f=y=>u(y)!==y,g=y=>{const v=r.filter(x=>x!==y);e(v.length===0?void 0:v)},h=y=>{r.includes(y)||(e([...r,y]),d(!1))},b=o.filter(y=>!r.includes(y.value));return a.jsxs("div",{className:"g7le-widget g7le-widget--tag-input","data-testid":"g7le-widget-tag-input",style:Iz,children:[a.jsxs("div",{style:Lz,children:[r.map(y=>a.jsxs("span",{"data-testid":`g7le-tag-chip-${y}`,style:Oz,children:[a.jsx("span",{style:Mz,children:u(y)}),f(y)&&a.jsx("code",{"data-testid":`g7le-tag-chip-id-${y}`,style:zz,children:y}),a.jsx("button",{type:"button","aria-label":`remove ${y}`,"data-testid":`g7le-tag-remove-${y}`,onClick:()=>g(y),style:Pz,children:"✕"})]},y)),a.jsx("button",{type:"button","data-testid":"g7le-tag-add",onClick:()=>d(y=>!y),disabled:b.length===0,style:Bz,children:s("layout_editor.control.tag_add")})]}),l&&b.length>0&&a.jsx("div",{"data-testid":"g7le-tag-candidates",style:Hz,children:b.map(y=>{const v=y.value!==y.label;return a.jsxs("button",{type:"button","data-testid":`g7le-tag-candidate-${y.value}`,onClick:()=>h(y.value),style:Wz,children:[a.jsx("span",{style:Uz,children:y.label}),v&&a.jsx("code",{"data-testid":`g7le-tag-candidate-id-${y.value}`,style:qz,children:y.value})]},y.value)})})]})}const Iz={display:"flex",flexDirection:"column",gap:6},Lz={display:"flex",flexWrap:"wrap",gap:4,alignItems:"center"},Oz={display:"inline-flex",alignItems:"center",gap:4,padding:"2px 6px",fontSize:12,background:"#e0e7ff",color:"#1d4ed8",borderRadius:12},Mz={fontSize:12},zz={fontSize:10,color:"#4f46e5",background:"#c7d2fe",borderRadius:4,padding:"0 4px",fontFamily:"monospace"},Pz={border:"none",background:"transparent",color:"#1d4ed8",cursor:"pointer",fontSize:10,padding:0,lineHeight:1},Bz={padding:"2px 8px",fontSize:12,border:"1px dashed #94a3b8",borderRadius:12,background:"#fff",cursor:"pointer",color:"#475569"},Hz={display:"flex",flexDirection:"column",maxHeight:180,overflowY:"auto",border:"1px solid #cbd5e1",borderRadius:6,background:"#fff"},Wz={display:"flex",flexDirection:"column",gap:1,textAlign:"left",padding:"6px 10px",fontSize:12,border:"none",borderBottom:"1px solid #f1f5f9",background:"transparent",cursor:"pointer",color:"#0f172a"},Uz={fontSize:12,color:"#0f172a"},qz={fontSize:10,color:"#64748b",fontFamily:"monospace"},XS=new Map;function Sn(n,e){XS.set(n,e)}function qa(n){return n?XS.get(n)??null:null}function wf(n,e){const s=n("meta",{})?.[e];return typeof s=="string"?s:""}function Fz({getValue:n,patch:e,t,fieldT:s,spec:r,permissionCandidates:o,bindingCandidates:l}){const d=s??t,u=wf(n,"title"),f=wf(n,"description"),g=wf(n,"icon"),h=wf(n,"editor_label"),b=n("permissions",[]),y=w.useCallback((_,A)=>{const C={...n("meta",{})??{}};A===void 0||A===""?delete C[_]:C[_]=A,e("meta",C)},[n,e]),v=w.useCallback(_=>{const A=Array.isArray(_)?_:[];A.length===0?e("permissions",void 0):e("permissions",A)},[e]),x=qa("icon-picker"),S=Fs(r,"icon-picker")??Fs(r,"icon")??(r?.controls?Object.values(r.controls).find(_=>_&&typeof _=="object"&&_.widget==="icon-picker")??null:null);return a.jsxs("div",{className:"g7le-meta-form","data-testid":"g7le-meta-form",style:Kz,children:[a.jsx(Wc,{label:t("layout_editor.page_settings.meta.title"),children:a.jsx(ks,{value:u,onChange:_=>y("title",_),t:d,testidPrefix:"g7le-meta-title",candidates:l,enableExpressionTree:!0,expressionTreeCollapsible:!0})}),a.jsx(Wc,{label:t("layout_editor.page_settings.meta.description"),children:a.jsx(ks,{value:f,onChange:_=>y("description",_),t:d,testidPrefix:"g7le-meta-description",candidates:l,enableExpressionTree:!0,expressionTreeCollapsible:!0})}),a.jsx(Wc,{label:t("layout_editor.page_settings.meta.icon"),children:x?a.jsx(Vz,{icon:g,t,onChange:_=>y("icon",typeof _=="string"?_:void 0),IconWidget:x,iconControl:S??{widget:"icon-picker"}}):a.jsx("input",{type:"text","data-testid":"g7le-meta-icon",value:g,placeholder:t("layout_editor.page_settings.meta.icon_placeholder"),onChange:_=>y("icon",_.target.value),style:Jz})}),a.jsx(Wc,{label:t("layout_editor.page_settings.meta.editor_label"),hint:t("layout_editor.page_settings.meta.editor_label_hint"),children:a.jsx(ks,{value:h,onChange:_=>y("editor_label",_),t:d,testidPrefix:"g7le-meta-editor-label",candidates:l,enableExpressionTree:!0,expressionTreeCollapsible:!0})}),a.jsx(Wc,{label:t("layout_editor.page_settings.meta.permissions"),hint:t("layout_editor.page_settings.meta.permissions_hint"),children:a.jsx("div",{"data-testid":"g7le-meta-permissions",children:a.jsx(Em,{control:{widget:"tag-input"},value:b,onChange:v,t,candidates:o})})})]})}function Wc({label:n,hint:e,children:t}){return a.jsxs("div",{className:"g7le-meta-field",style:Gz,children:[a.jsx("label",{style:Yz,children:n}),t,e?a.jsxs("p",{style:Xz,children:["ⓘ ",e]}):null]})}function Vz({icon:n,onChange:e,t,IconWidget:s,iconControl:r}){const[o,l]=w.useState(!1),d=n?/\bfa-/.test(n)?a.jsx("i",{className:n,"aria-hidden":"true"}):n:"📄";return a.jsxs("div",{"data-testid":"g7le-meta-icon",style:{display:"flex",flexDirection:"column",gap:6,minWidth:0},children:[a.jsxs("button",{type:"button","data-testid":"g7le-meta-icon-toggle","aria-expanded":o,onClick:()=>l(u=>!u),style:{display:"flex",alignItems:"center",gap:8,padding:"5px 8px",border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",cursor:"pointer",fontSize:12,color:"#475569",width:"fit-content"},children:[a.jsx("span",{style:{fontSize:16},"aria-hidden":"true",children:d}),a.jsx("span",{children:n||t("layout_editor.page_settings.meta.icon_placeholder")}),a.jsx("span",{"aria-hidden":"true",children:o?"▴":"▾"})]}),o?a.jsx(s,{control:r,value:n,onChange:u=>{e(u),l(!1)},t}):null]})}const Kz={display:"flex",flexDirection:"column",gap:16,minWidth:0},Gz={display:"flex",flexDirection:"column",gap:6,minWidth:0},Yz={fontSize:13,fontWeight:600,color:"#0f172a"},Xz={margin:0,fontSize:11,color:"#94a3b8"},Jz={padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,minWidth:0,width:"100%"};function _f({checked:n,onChange:e,label:t,testid:s,ariaLabel:r,disabled:o=!1}){return a.jsxs("label",{style:{...n3,...o?{cursor:"not-allowed"}:{}},children:[a.jsx("button",{type:"button","data-testid":s,role:"switch","aria-checked":n,"aria-label":r,disabled:o,onClick:()=>e(!n),style:s3(n,o),children:a.jsx("span",{style:r3(n)})}),t!=null?a.jsx("span",{style:o3(o),children:t}):null]})}function Sf({disabled:n,children:e,testid:t,style:s}){return a.jsx("div",{"data-testid":t,"data-disabled":n?"true":"false","aria-disabled":n,style:{...s,...n?{opacity:.5,pointerEvents:"none",userSelect:"none"}:{}},children:e})}function Zz({filled:n,sourceLabel:e,onRevert:t,revertLabel:s,hint:r,children:o,testid:l}){const d=n&&typeof t=="function",u=!n&&e!=null&&e!=="";return a.jsxs("div",{"data-testid":l,style:Qz,children:[o,d?a.jsxs("button",{type:"button","data-testid":l?`${l}-revert`:void 0,onClick:t,title:r??s,"aria-label":s,style:t3,children:["↩ ",s]}):u?a.jsx("span",{"data-testid":l?`${l}-source`:void 0,title:r,style:e3,children:e}):null]})}const Qz={position:"relative",minWidth:0,width:"100%"},e3={position:"absolute",right:8,top:"50%",transform:"translateY(-50%)",fontSize:10,color:"#94a3b8",background:"#f1f5f9",borderRadius:4,padding:"1px 6px",pointerEvents:"none",maxWidth:"45%",overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"},t3={position:"absolute",right:6,top:"50%",transform:"translateY(-50%)",fontSize:10,color:"#0369a1",background:"#e0f2fe",border:"1px solid #bae6fd",borderRadius:4,padding:"1px 6px",cursor:"pointer",whiteSpace:"nowrap"},n3={display:"inline-flex",alignItems:"center",gap:8,cursor:"pointer"},s3=(n,e)=>({position:"relative",width:38,height:22,flexShrink:0,borderRadius:999,border:"none",padding:0,background:e?"#e2e8f0":n?"#2563eb":"#cbd5e1",cursor:e?"not-allowed":"pointer",transition:"background 0.15s ease"}),r3=n=>({position:"absolute",top:2,left:n?18:2,width:18,height:18,borderRadius:"50%",background:"#fff",boxShadow:"0 1px 2px rgba(0,0,0,0.2)",transition:"left 0.15s ease"}),o3=n=>({fontSize:13,fontWeight:600,color:n?"#94a3b8":"#0f172a"}),a3=/\$(?:core|module|plugin)_settings:[a-zA-Z0-9._:-]+/;function i3(n){const e=[];let t=!1;const s=o=>{e.push({kind:"text",text:o}),t=!0},r=(o,l,d)=>{t||s(""),e.push({kind:"chip",raw:o,text:l,removable:d}),t=!1};for(const o of l3(n))o.kind==="text"?s(o.raw):r(o.raw,o.label,o.removable);return t||s(""),e}function l3(n){const e=[];if(typeof n!="string"||n.length===0)return e;const t=n.length;let s=0,r=0;const o=l=>{l>r&&e.push({kind:"text",raw:n.slice(r,l),label:"",removable:!1})};for(;s<t;){if(n[s]==="{"&&n[s+1]==="{"){let l=s+2;for(;l<t&&!(n[l]==="}"&&n[l+1]==="}");)l++;if(l>=t){s++;continue}o(s);const d=n.slice(s,l+2);e.push({kind:"chip",raw:d,label:Xr(d),removable:!0}),s=l+2,r=s;continue}if(n[s]==="$"){const l=a3.exec(n.slice(s));if(l&&l.index===0){o(s);const d=l[0],u=d.split(":").pop()||d;e.push({kind:"chip",raw:d,label:u,removable:!1}),s+=d.length,r=s;continue}}s++}return o(t),e}function c3(n,e,t,s){const r=[];let o=!1;return n.forEach((l,d)=>{if(l.kind==="chip"){if(!o&&l.raw===e){o=!0;return}r.push(l.raw??"")}else{const u=l.text??"";if(d===t){const f=Math.max(0,Math.min(s,u.length));r.push(u.slice(0,f),e,u.slice(f))}else r.push(u)}}),r.join("")}function d3(n,e,t){const s=Math.max(0,Math.min(e,n.length));return n.slice(0,s)+t+n.slice(s)}function u3(n,e){const t=n.indexOf(e);return t<0?n:n.slice(0,t)+n.slice(t+e.length)}function Rm({value:n,onChange:e,t,candidates:s,onDone:r,testidPrefix:o="g7le-binding-chip-text",disabled:l=!1}){const d=w.useMemo(()=>i3(n),[n]),u=w.useRef(null),f=!!s&&s.length>0,[g,h]=w.useState(null),[b,y]=w.useState(null),[v,x]=w.useState(null),[S,_]=w.useState(!1),A=w.useRef(0),C=w.useRef(null),j=w.useMemo(()=>d.map(q=>q.kind==="chip"?`c:${q.raw}`:"t").join("|"),[d]),E=w.useRef(null),T=w.useRef([]),D=w.useRef(!1);w.useLayoutEffect(()=>{const q=D.current;D.current=!1,!(!q&&E.current===j)&&(E.current=j,d.forEach((M,N)=>{if(M.kind!=="text")return;const V=T.current[N];V&&V.textContent!==(M.text??"")&&(V.textContent=M.text??"")}))},[j,d,n]);const I=w.useCallback(()=>{const q=u.current;if(!q)return n;const M=[];for(const N of Array.from(q.querySelectorAll("[data-seg]")))N.dataset.seg==="chip"?M.push(N.dataset.raw??""):M.push(N.textContent??"");return M.join("")},[n]),W=w.useCallback(()=>{l||e(I())},[l,e,I]),z=w.useRef(null),H=w.useRef(!1),G=(q,M)=>{if(!l){q.preventDefault(),q.stopPropagation(),z.current={raw:M,pointerId:q.pointerId},H.current=!1,h(M);try{q.currentTarget.setPointerCapture(q.pointerId)}catch{}}},F=q=>{const M=z.current;if(!M||q.pointerId!==M.pointerId)return;H.current=!0;const N=U(q.clientX,q.clientY);N&&(y({slotIdx:N.slotIdx,offset:N.offset}),x(p3(u.current,N.slotIdx,N.offset)))},Z=(q,M)=>{if(q.stopPropagation(),H.current){H.current=!1;return}D.current=!0,e(u3(n,M))},Y=q=>{const M=z.current;if(!M||q.pointerId!==M.pointerId)return;try{q.currentTarget.releasePointerCapture(q.pointerId)}catch{}z.current=null,H.current&&typeof setTimeout=="function"&&setTimeout(()=>{H.current=!1},0);const N=U(q.clientX,q.clientY);if(h(null),y(null),x(null),!N)return;const V=u.current;if(!V)return;const se=Array.from(V.querySelectorAll("[data-seg]")).map(pe=>pe.dataset.seg==="chip"?{kind:"chip",raw:pe.dataset.raw??""}:{kind:"text",text:pe.textContent??""}),re=c3(se,M.raw,N.slotIdx,N.offset);re!==n&&(D.current=!0,e(re))},U=(q,M)=>{const N=u.current;if(!N)return null;const V=Array.from(N.querySelectorAll("[data-seg]")),ee=N.ownerDocument,se=ee.elementFromPoint(q,M),re=se?.closest('[data-seg="text"]');if(re)return{slotIdx:V.indexOf(re),offset:f3(ee,re,q,M)};const pe=se?.closest('[data-seg="chip"]');if(pe){const me=V.indexOf(pe),ce=pe.getBoundingClientRect();if(q<ce.left+ce.width/2&&me-1>=0){const be=V[me-1];return{slotIdx:me-1,offset:(be.textContent??"").length}}if(me+1<V.length)return{slotIdx:me+1,offset:0}}const je=V.map((me,ce)=>({s:me,i:ce})).filter(me=>me.s.dataset.seg==="text").pop();return je?{slotIdx:je.i,offset:(je.s.textContent??"").length}:null},B=()=>{l||!f||(A.current=g3(u.current,n.length),_(q=>!q))},te=q=>{const M=q.path?q.path.split(".").filter(Boolean):[],N=[q.sourceId,...M].join("?.");D.current=!0,e(d3(n,A.current,`{{${N}}}`)),_(!1)};return a.jsxs("div",{"data-testid":o,style:{display:"flex",flexDirection:"column",gap:4},children:[a.jsxs("div",{ref:u,"data-testid":`${o}-box`,className:"g7le-binding-chip-input",style:h3,children:[d.map((q,M)=>q.kind==="chip"?a.jsxs("span",{"data-seg":"chip","data-raw":q.raw,"data-testid":`${o}-chip-${M}`,contentEditable:!1,onPointerDown:N=>G(N,q.raw??""),onPointerMove:F,onPointerUp:Y,title:q.removable?t("layout_editor.value_tree.change_data"):t("layout_editor.prop_i18n.bound_code_only"),style:{...x3,...g===q.raw?v3:null,touchAction:"none"},children:[a.jsx("span",{"aria-hidden":"true",style:w3,children:"⠿"}),a.jsx("span",{"aria-hidden":"true",style:{marginRight:3},children:"🔗"}),a.jsx("span",{children:q.text}),q.removable&&!l&&a.jsx("button",{type:"button","data-testid":`${o}-chip-remove-${M}`,"aria-label":t("layout_editor.inline_binding.clear"),title:t("layout_editor.inline_binding.clear"),onPointerDown:N=>{N.stopPropagation(),N.preventDefault()},onClick:N=>Z(N,q.raw??""),style:_3,children:"✕"})]},`chip-${q.raw}-${M}`):a.jsx("span",{ref:N=>{T.current[M]=N},"data-seg":"text",contentEditable:!l,suppressContentEditableWarning:!0,onInput:W,"data-testid":`${o}-text-${M}`,style:{...m3,...g?y3:null,...b?.slotIdx===M?b3:null}},`text-slot-${M}`)),v&&a.jsx("span",{"aria-hidden":"true","data-testid":`${o}-caret`,style:{position:"absolute",left:v.left,top:v.top,width:2,height:v.height,background:"#2563eb",borderRadius:1,pointerEvents:"none",boxShadow:"0 0 0 1px rgba(37,99,235,0.3)"}})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,flexWrap:"wrap"},children:[r&&a.jsxs("button",{type:"button","data-testid":`${o}-done`,onClick:r,style:JS,title:t("layout_editor.value_tree.done"),"aria-label":t("layout_editor.value_tree.done"),children:["✓ ",t("layout_editor.value_tree.done")]}),f&&a.jsxs("div",{style:{position:"relative"},children:[a.jsxs("button",{ref:C,type:"button","data-testid":`${o}-insert`,onClick:B,disabled:l,style:JS,title:t("layout_editor.inline_binding.insert_data"),"aria-label":t("layout_editor.inline_binding.insert_data"),children:["+ ",t("layout_editor.inline_binding.insert_data")]}),a.jsx(Qi,{anchorRef:C,open:S,onClose:()=>_(!1),children:a.jsx(Vs,{candidates:s,t,onSelect:te,testIdSuffix:`${o}-insert`,defaultOpen:!0,floating:!1})})]}),a.jsx("span",{style:S3,children:t("layout_editor.translation.placeholder_locked")})]})]})}function f3(n,e,t,s){const r=(e.textContent??"").length;try{const l=n;let d=null,u=0;if(typeof l.caretRangeFromPoint=="function"){const f=l.caretRangeFromPoint(t,s);f&&(d=f.startContainer,u=f.startOffset)}else if(typeof l.caretPositionFromPoint=="function"){const f=l.caretPositionFromPoint(t,s);f&&(d=f.offsetNode,u=f.offset)}if(d&&e.contains(d))return Math.max(0,Math.min(u,r))}catch{}const o=e.getBoundingClientRect();return t>o.left+o.width/2?r:0}function p3(n,e,t){if(!n)return null;const r=Array.from(n.querySelectorAll("[data-seg]"))[e];if(!r)return null;const o=n.getBoundingClientRect();try{const u=r.firstChild,f=n.ownerDocument;if(u&&u.nodeType===Node.TEXT_NODE&&(u.textContent??"").length>0){const g=f.createRange(),h=Math.max(0,Math.min(t,(u.textContent??"").length));g.setStart(u,h),g.setEnd(u,h);const b=g.getClientRects(),y=b.length>0?b[0]:g.getBoundingClientRect();if(y&&(y.height>0||y.width>=0))return{left:y.left-o.left,top:y.top-o.top,height:y.height||r.getBoundingClientRect().height}}}catch{}const l=r.getBoundingClientRect();return{left:(t>0?l.right:l.left)-o.left,top:l.top-o.top,height:l.height||16}}function g3(n,e){if(!n)return e;try{const t=n.ownerDocument.defaultView?.getSelection();if(!t||t.rangeCount===0)return e;const s=t.getRangeAt(0);let r=s.startContainer,o=null;for(;r&&r!==n;){if(r instanceof HTMLElement&&r.dataset.seg==="text"){o=r;break}r=r.parentNode}if(!o||!n.contains(o))return e;const l=Array.from(n.querySelectorAll("[data-seg]"));let d=0;for(const u of l){if(u===o)break;d+=u.dataset.seg==="chip"?(u.dataset.raw??"").length:(u.textContent??"").length}return d+s.startOffset}catch{return e}}const h3={position:"relative",display:"flex",flexWrap:"wrap",alignItems:"center",gap:2,minHeight:30,padding:"4px 8px",border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",fontSize:12,lineHeight:1.6,minWidth:0,width:"100%",boxSizing:"border-box"},m3={outline:"none",minWidth:8,minHeight:"1.2em",whiteSpace:"pre-wrap",color:"#0f172a",display:"inline-block",wordBreak:"break-all"},y3={boxShadow:"inset 0 -2px 0 #93c5fd",background:"#eff6ff",borderRadius:2},b3={background:"#dbeafe",boxShadow:"inset 0 -2px 0 #2563eb"},x3={display:"inline-flex",alignItems:"center",gap:1,background:"linear-gradient(180deg,#eff6ff,#dbeafe)",color:"#1d4ed8",border:"1px dashed #60a5fa",borderRadius:9999,padding:"1px 8px 1px 4px",margin:"0 1px",fontSize:11,fontWeight:600,cursor:"grab",userSelect:"none",whiteSpace:"nowrap",boxShadow:"0 1px 2px rgba(37,99,235,0.18)",verticalAlign:"middle"},v3={opacity:.5,borderStyle:"solid",cursor:"grabbing"},w3={color:"#2563eb",opacity:.7,fontSize:11,marginRight:1,cursor:"grab"},_3={marginLeft:4,width:14,height:14,lineHeight:"12px",padding:0,border:"none",borderRadius:9999,background:"rgba(29,78,216,0.12)",color:"#1d4ed8",fontSize:9,fontWeight:700,cursor:"pointer",display:"inline-flex",alignItems:"center",justifyContent:"center",flex:"0 0 auto"},JS={padding:"4px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer",whiteSpace:"nowrap"},S3={fontSize:10,color:"#94a3b8"},k3=D_;function Am(n){return ZO(n)}function gn({value:n,onChange:e,t,candidates:s,placeholder:r,testidPrefix:o="g7le-data-chip-value",readOnly:l=!1,enableExpressionTree:d=!0}){const u=typeof n=="string"?n:"",f=!!s&&s.length>0,[g,h]=w.useState(!1),[b,y]=w.useState(!1),[v,x]=w.useState(!1),S=w.useCallback(D=>a.jsx(gn,{value:D.value,onChange:I=>D.onChange(I),t:D.t,candidates:D.candidates,testidPrefix:D.testidPrefix,enableExpressionTree:!0}),[]),_=()=>a.jsx("div",{style:{display:"flex",gap:4,alignItems:"center",width:"100%",minWidth:0},children:a.jsx("input",{type:"text","data-testid":`${o}-input`,value:u,placeholder:r??t("layout_editor.page_settings.seo.value_placeholder"),readOnly:l,onChange:D=>e(D.target.value),onFocus:()=>h(!0),onBlur:()=>h(!1),style:{flex:1,padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,minWidth:0,width:"100%",background:l?"#f1f5f9":"#fff",color:l?"#64748b":"#0f172a"}})}),A=w.useCallback(D=>{const I=u?`${u} ${D.expression}`:D.expression;e(I)},[u,e]);if(!d||l)return a.jsxs("div",{"data-testid":o,style:Qo,children:[_(),!l&&f&&a.jsx(Vs,{candidates:s,t,onSelect:A,testIdSuffix:`${o}-pick`})]});const C=i6(u),j=TS(u),E=Yr(u),T=D=>{const I=hf(u),W=I?_m(I,()=>"",z=>Xr(z)):[];return a.jsxs(a.Fragment,{children:[a.jsx("div",{style:{display:"flex",justifyContent:"flex-start"},children:a.jsxs("button",{type:"button","data-testid":`${D}-to-plain`,onClick:()=>x(!0),style:R3,title:t("layout_editor.value_tree.to_plain"),"aria-label":t("layout_editor.value_tree.to_plain"),children:["↩ ",t("layout_editor.value_tree.to_plain")]})}),v&&a.jsxs("div",{"data-testid":`${D}-to-plain-confirm`,style:A3,children:[a.jsx("p",{style:T3,children:t("layout_editor.value_tree.to_plain_lead")}),a.jsx("div",{style:$3,children:W.length===0?a.jsx("span",{style:{color:"#94a3b8"},children:t("layout_editor.page_settings.seo.value_placeholder")}):W.map((z,H)=>z.kind==="chip"?a.jsxs("span",{style:Tm,children:["🔗 ",z.text]},H):a.jsx("span",{style:z.kind==="ellipsis"?{color:"#94a3b8"}:void 0,children:z.text},H))}),a.jsxs("p",{style:N3,children:["⚠ ",t("layout_editor.value_tree.to_plain_warn")]}),a.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:6},children:[a.jsx("button",{type:"button","data-testid":`${D}-to-plain-confirm-cancel`,onClick:()=>x(!1),style:Jr,children:t("layout_editor.value_tree.to_plain_cancel")}),a.jsx("button",{type:"button","data-testid":`${D}-to-plain-confirm-ok`,onClick:()=>{x(!1),e(hf(u)||"")},style:D3,children:t("layout_editor.value_tree.to_plain_ok")})]})]})]})};if(!g&&(C==="expression"||j)){if(j)return a.jsxs("div",{"data-testid":o,style:Qo,children:[!l&&T(`${o}-seg`),a.jsx(Cm,{value:u,onChange:I=>e(I),t,candidates:s,testidPrefix:`${o}-seg`,renderLeafInput:S})]});const D=Zo(u);return a.jsxs("div",{"data-testid":o,style:Qo,children:[!l&&T(`${o}-tree`),a.jsx(PS,{node:D.node,onChange:I=>e(tl(I,!1)),t,candidates:s,testidPrefix:`${o}-tree`,renderLeafInput:S})]})}if(E&&!g&&!b)return a.jsx(C3,{value:u,onChange:e,t,candidates:s,testidPrefix:o,onEditRaw:()=>y(!0)});if(!g&&!b&&Am(u)){const D=k3(u);return a.jsx("div",{"data-testid":o,style:Qo,children:a.jsxs("div",{style:ZS,children:[a.jsx("div",{"data-testid":`${o}-chips`,style:j3,children:D.map((I,W)=>I.kind==="chip"?a.jsxs("span",{style:Tm,children:["🔗 ",I.label]},W):a.jsx("span",{children:I.label},W))}),a.jsxs("button",{type:"button","data-testid":`${o}-edit-raw`,onClick:()=>y(!0),style:Jr,title:t("layout_editor.value_tree.edit"),"aria-label":t("layout_editor.value_tree.edit"),children:["✎ ",t("layout_editor.value_tree.edit")]})]})})}return b&&Am(u)?a.jsxs("div",{"data-testid":o,style:Qo,children:[a.jsx(Rm,{value:u,onChange:e,t,candidates:s,disabled:l,onDone:()=>y(!1),testidPrefix:`${o}-chipedit`}),!l&&C!=="raw"&&a.jsxs("div",{style:{display:"flex",gap:4,flexWrap:"wrap"},children:[a.jsxs("button",{type:"button","data-testid":`${o}-to-expr`,onClick:()=>e(zc(u)),style:Jr,title:t("layout_editor.value_tree.to_expression"),"aria-label":t("layout_editor.value_tree.to_expression"),children:["ƒx ",t("layout_editor.value_tree.to_expression")]}),a.jsxs("button",{type:"button","data-testid":`${o}-to-fallback`,onClick:()=>e(Sm(u)),style:Jr,title:t("layout_editor.value_tree.segment.fallback"),"aria-label":t("layout_editor.value_tree.segment.fallback"),children:["?? ",t("layout_editor.value_tree.segment.fallback")]})]}),C==="raw"&&a.jsxs("p",{"data-testid":`${o}-raw-hint`,style:$m,children:["ⓘ ",t("layout_editor.value_tree.raw_expression_hint")]})]}):!g&&Am(u)?a.jsxs("div",{"data-testid":o,style:Qo,children:[a.jsx(Rm,{value:u,onChange:e,t,candidates:s,disabled:l,onDone:()=>{y(!1),h(!1)},testidPrefix:`${o}-chipedit`}),!l&&C!=="raw"&&a.jsxs("div",{style:{display:"flex",gap:4,flexWrap:"wrap"},children:[a.jsxs("button",{type:"button","data-testid":`${o}-to-expr`,onClick:()=>e(zc(u)),style:Jr,title:t("layout_editor.value_tree.to_expression"),"aria-label":t("layout_editor.value_tree.to_expression"),children:["ƒx ",t("layout_editor.value_tree.to_expression")]}),a.jsxs("button",{type:"button","data-testid":`${o}-to-fallback`,onClick:()=>e(Sm(u)),style:Jr,title:t("layout_editor.value_tree.segment.fallback"),"aria-label":t("layout_editor.value_tree.segment.fallback"),children:["?? ",t("layout_editor.value_tree.segment.fallback")]})]}),C==="raw"&&a.jsxs("p",{"data-testid":`${o}-raw-hint`,style:$m,children:["ⓘ ",t("layout_editor.value_tree.raw_expression_hint")]})]}):a.jsxs("div",{"data-testid":o,style:Qo,children:[_(),a.jsxs("div",{style:E3,children:[f&&a.jsx(Vs,{candidates:s,t,onSelect:A,testIdSuffix:`${o}-pick`}),C!=="raw"&&a.jsxs("div",{style:{display:"flex",gap:4},children:[a.jsxs("button",{type:"button","data-testid":`${o}-to-expr`,onClick:()=>e(zc(u)),style:Jr,title:t("layout_editor.value_tree.to_expression"),"aria-label":t("layout_editor.value_tree.to_expression"),children:["ƒx ",t("layout_editor.value_tree.to_expression")]}),a.jsxs("button",{type:"button","data-testid":`${o}-to-fallback`,onClick:()=>e(Sm(u)),style:Jr,title:t("layout_editor.value_tree.segment.fallback"),"aria-label":t("layout_editor.value_tree.segment.fallback"),children:["?? ",t("layout_editor.value_tree.segment.fallback")]})]})]}),C==="raw"&&!g&&a.jsxs("p",{"data-testid":`${o}-raw-hint`,style:$m,children:["ⓘ ",t("layout_editor.value_tree.raw_expression_hint")]})]})}function C3({value:n,onChange:e,t,candidates:s,testidPrefix:r,onEditRaw:o}){const[l,d]=w.useState(!1),u=qe.useRef(null),f=Xr(n),g=!!s&&s.length>0,h=Yr(n)?.localeFn;return a.jsxs("div",{"data-testid":r,style:Qo,children:[a.jsxs("div",{style:ZS,children:[a.jsxs("span",{"data-testid":`${r}-chip`,style:Tm,children:["🔗 ",f]}),g&&a.jsx("button",{ref:u,type:"button","data-testid":`${r}-change`,onClick:()=>d(b=>!b),style:Jr,title:t("layout_editor.value_tree.change_data"),"aria-label":t("layout_editor.value_tree.change_data"),children:t("layout_editor.value_tree.change_data")}),a.jsx("button",{type:"button","data-testid":`${r}-edit-raw`,onClick:o,style:Jr,title:t("layout_editor.value_tree.edit"),"aria-label":t("layout_editor.value_tree.edit"),children:"✎"})]}),g&&a.jsx(Qi,{anchorRef:u,open:l,onClose:()=>d(!1),children:a.jsx(Vs,{candidates:s,t,onSelect:b=>{if(h){const x=[b.sourceId,...b.path?b.path.split(".").filter(Boolean):[]].join(".");e(`{{${h}(${x})}}`),d(!1);return}const y=b.path?b.path.split(".").filter(Boolean):[],v=[b.sourceId,...y].join("?.");e(`{{${v}}}`),d(!1)},testIdSuffix:`${r}-pick`,defaultOpen:!0,floating:!1})})]})}const Qo={display:"flex",flexDirection:"column",gap:4,width:"100%",minWidth:0},ZS={display:"flex",alignItems:"center",gap:6,width:"100%",minWidth:0,flexWrap:"wrap"},j3={flex:1,minWidth:0,display:"flex",flexWrap:"wrap",alignItems:"center",gap:4,padding:"5px 8px",fontSize:12,color:"#334155",border:"1px solid #e2e8f0",borderRadius:6,background:"#f8fafc"},Tm={fontSize:11,background:"#eef2ff",color:"#4338ca",padding:"2px 8px",borderRadius:12,whiteSpace:"nowrap"},Jr={padding:"4px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer",whiteSpace:"nowrap"},E3={display:"flex",flexWrap:"wrap",alignItems:"center",gap:6},$m={margin:"2px 0 0",fontSize:11,color:"#94a3b8",lineHeight:1.4},R3={padding:"3px 10px",fontSize:11,border:"1px solid #fca5a5",borderRadius:6,background:"#fef2f2",color:"#b91c1c",cursor:"pointer",whiteSpace:"nowrap"},A3={display:"flex",flexDirection:"column",gap:6,padding:10,border:"1px solid #fca5a5",borderRadius:8,background:"#fffbeb"},T3={margin:0,fontSize:12,color:"#334155"},$3={padding:"5px 8px",fontSize:12,color:"#0f172a",background:"#fff",border:"1px solid #e2e8f0",borderRadius:6,wordBreak:"break-all",display:"flex",flexWrap:"wrap",gap:4,alignItems:"center"},N3={margin:0,fontSize:11,color:"#b45309"},D3={padding:"3px 12px",fontSize:11,border:"1px solid #dc2626",borderRadius:6,background:"#dc2626",color:"#fff",cursor:"pointer",whiteSpace:"nowrap"};let QS=0;function kf({value:n,onChange:e,keyField:t,valueField:s="content",t:r,candidates:o,testidPrefix:l="g7le-kv-chip-editor",keyPlaceholder:d,valuePlaceholder:u,addLabel:f,renderKeyInput:g}){const h=w.useMemo(()=>(Array.isArray(n)?n:[]).map(C=>({id:QS++,k:typeof C[t]=="string"?C[t]:"",v:typeof C[s]=="string"?C[s]:""})),[]),[b,y]=w.useState(h),v=w.useCallback(C=>{y(C);const j=C.filter(E=>E.k.trim()!=="").map(E=>({[t]:E.k,[s]:E.v}));e(j)},[t,s,e]),x=w.useCallback(()=>{v([...b,{id:QS++,k:"",v:""}])},[b,v]),S=w.useCallback(C=>{v(b.filter(j=>j.id!==C))},[b,v]),_=w.useCallback((C,j)=>{v(b.map(E=>E.id===C?{...E,k:j}:E))},[b,v]),A=w.useCallback((C,j)=>{v(b.map(E=>E.id===C?{...E,v:j}:E))},[b,v]);return a.jsxs("div",{"data-testid":l,style:{display:"flex",flexDirection:"column",gap:6},children:[b.map(C=>a.jsxs("div",{"data-testid":`${l}-row-${C.id}`,style:{display:"flex",gap:6,alignItems:"flex-start",border:"1px solid #e2e8f0",borderRadius:8,padding:8},children:[a.jsxs("div",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:6},children:[a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:2,minWidth:0},children:g?a.jsx("div",{style:{minWidth:0},children:g({value:C.k,onChange:j=>_(C.id,j),testid:`${l}-key-${C.id}`,placeholder:d??r(`layout_editor.page_settings.seo.extra_${t}`)})}):a.jsx("input",{type:"text","data-testid":`${l}-key-${C.id}`,value:C.k,placeholder:d??r(`layout_editor.page_settings.seo.extra_${t}`),onChange:j=>_(C.id,j.target.value),style:{width:"100%",padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,minWidth:0,boxSizing:"border-box"}})}),a.jsx("div",{style:{minWidth:0},children:a.jsx(gn,{value:C.v,onChange:j=>A(C.id,j),t:r,candidates:o,placeholder:u??r("layout_editor.page_settings.seo.extra_content"),testidPrefix:`${l}-value-${C.id}`})})]}),a.jsx("button",{type:"button","data-testid":`${l}-remove-${C.id}`,onClick:()=>S(C.id),title:r("layout_editor.page_settings.seo.remove"),"aria-label":r("layout_editor.page_settings.seo.remove"),style:{flex:"0 0 auto",padding:"4px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#64748b",cursor:"pointer"},children:"✕"})]},C.id)),a.jsxs("button",{type:"button","data-testid":`${l}-add`,onClick:x,style:{alignSelf:"flex-start",padding:"5px 10px",fontSize:12,border:"1px dashed #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer"},children:["+ ",f??r("layout_editor.page_settings.seo.add_extra")]})]})}const I3=["website","article","product","profile"],L3=["summary","summary_large_image","app","player"];function O3(n){switch(n){case"core":return"layout_editor.page_settings.seo.og_source_core";case"inherited":return"layout_editor.page_settings.seo.og_source_inherited";case"filter":return"layout_editor.page_settings.seo.og_source_filter";case"layout":return null;default:return n?"layout_editor.page_settings.seo.og_source_module":null}}function ek(n){const e={};for(const t of n??[])e[t.key]=t;return e}function tk(n,e){return!!n&&e&&typeof n.sourceExpr=="string"&&n.sourceExpr!==""&&!n.overriddenByLayout&&!n.lockedByFilter}function nk({label:n,sourceExpr:e,onReplace:t,t:s,testid:r}){return a.jsxs("div",{"data-testid":r,style:V3,children:[a.jsxs("span",{"data-testid":`${r}-chip`,style:K3,title:e,children:["🔗 ",n||e]}),a.jsx("span",{"data-testid":`${r}-badge`,style:G3,children:s("layout_editor.page_settings.seo.auto_chip_source")}),a.jsx("button",{type:"button","data-testid":`${r}-replace`,onClick:t,style:Y3,children:s("layout_editor.page_settings.seo.auto_chip_replace")})]})}function M3({og:n,twitter:e,onChangeOg:t,onChangeTwitter:s,ogPreview:r,twitterPreview:o,defaultsAvailable:l=!1,candidates:d,t:u,testidPrefix:f="g7le-seo-og"}){const g=n&&typeof n=="object"?n:{},h=e&&typeof e=="object"?e:{},[b,y]=w.useState(g.image_height!=null||g.image_type!=null||g.image_secure_url!=null),v=ek(r),x=ek(o),S=w.useCallback((W,z)=>{const H={...g};z===void 0||z===""||z===null?delete H[W]:H[W]=z,t(H)},[g,t]),_=w.useCallback((W,z)=>{const H={...h};z===void 0||z===""||z===null?delete H[W]:H[W]=z,s(H)},[h,s]),A=(W,z,H)=>!H||!l||!H.lockedByFilter?null:a.jsx("div",{style:{display:"flex",gap:6,alignItems:"center",marginTop:2},children:a.jsxs("span",{"data-testid":`${W}-locked-${z}`,style:U3,children:["🔒 ",u("layout_editor.page_settings.seo.og_locked")]})}),C=W=>{if(!W||!l||W.lockedByFilter||W.overriddenByLayout)return;const z=O3(W.source);return z?u(z):void 0},j=(W,z)=>W&&l?W.overriddenByLayout===!0:z!=="",E=(W,z,H,G,F,Z)=>{const Y=Z[z],U=!!Y?.lockedByFilter,B=typeof G[z]=="string"?G[z]:"";return a.jsxs("div",{"data-testid":`${W}-${z}`,style:Fa,children:[a.jsx("label",{style:ol,children:u(H)}),U?a.jsx("div",{"data-testid":`${W}-locked-value-${z}`,style:W3,children:String(Y?.effectiveValue??"")}):tk(Y,l)?a.jsx(nk,{label:Y.label??"",sourceExpr:Y.sourceExpr,onReplace:()=>F(z,Y.sourceExpr),t:u,testid:`${W}-${z}-auto`}):a.jsx(ks,{value:B,onChange:te=>F(z,te??""),t:u,candidates:d,placeholder:l&&Y?.effectiveValue!=null?String(Y.effectiveValue):void 0,testidPrefix:`${W}-${z}-field`,enableExpressionTree:!0,expressionTreeCollapsible:!0}),A(W,z,Y)]})},T=(W,z,H,G,F,Z)=>{const Y=Z[z],U=!!Y?.lockedByFilter,B=typeof G[z]=="string"?G[z]:"";return a.jsxs("div",{"data-testid":`${W}-${z}`,style:Fa,children:[a.jsx("label",{style:ol,children:u(H)}),tk(Y,l)?a.jsx(nk,{label:Y.label??"",sourceExpr:Y.sourceExpr,onReplace:()=>F(z,Y.sourceExpr),t:u,testid:`${W}-${z}-auto`}):a.jsx(gn,{value:B,onChange:te=>F(z,te),t:u,candidates:d,readOnly:U,placeholder:l&&Y?.effectiveValue!=null?String(Y.effectiveValue):void 0,testidPrefix:`${W}-${z}-field`}),A(W,z,Y)]})},D=(W,z,H,G,F,Z)=>{const Y=Z[z],U=!!Y?.lockedByFilter,B=typeof G[z]=="string"?G[z]:"",te=j(Y,B),q=te?B:"";return a.jsxs("div",{"data-testid":`${W}-${z}`,style:Fa,children:[a.jsx("label",{style:ol,children:u(H)}),a.jsx(Zz,{filled:te,sourceLabel:C(Y),onRevert:U?void 0:()=>F(z,void 0),revertLabel:u("layout_editor.page_settings.seo.revert_default"),testid:`${W}-${z}-overlay`,children:a.jsx("div",{"data-testid":`${W}-${z}-input`,style:{minWidth:0},children:a.jsx(gn,{value:q,onChange:M=>F(z,M),t:u,candidates:d,readOnly:U,placeholder:l&&Y?.effectiveValue!=null?String(Y.effectiveValue):void 0,testidPrefix:`${W}-${z}-chip`})})}),A(W,z,Y)]})},I=(W,z,H,G,F,Z,Y)=>{const U=Y[z],B=typeof F[z]=="string"?F[z]:"",te=j(U,B),q=C(U),M=te?B:"";return a.jsxs("div",{"data-testid":`${W}-${z}`,style:Fa,children:[a.jsxs("div",{style:P3,children:[a.jsx("label",{style:ol,children:u(H)}),q?a.jsxs("span",{"data-testid":`${W}-${z}-source-inline`,style:B3,children:["· ",q]}):null]}),a.jsxs("select",{"data-testid":`${W}-${z}-select`,value:M,onChange:N=>Z(z,N.target.value),style:H3,children:[a.jsx("option",{value:"",children:l&&U?.effectiveValue!=null&&U.effectiveValue!==""?`${u("layout_editor.page_settings.seo.use_default")} (${String(U.effectiveValue)})`:u("layout_editor.page_settings.seo.use_default")}),G.map(N=>a.jsx("option",{value:N,children:N},N))]}),A(W,z,U)]})};return a.jsxs("div",{"data-testid":f,style:{display:"flex",flexDirection:"column",gap:12},children:[a.jsxs("div",{"data-testid":`${f}-og-section`,style:sk,children:[a.jsx("div",{style:rk,children:u("layout_editor.page_settings.seo.og_section")}),a.jsxs("p",{"data-testid":`${f}-intro`,style:z3,children:["ⓘ ",u("layout_editor.page_settings.seo.og_intro")]}),I(f,"type","layout_editor.page_settings.seo.og_type",I3,g,S,v),E(f,"title","layout_editor.page_settings.seo.og_title",g,S,v),E(f,"description","layout_editor.page_settings.seo.og_description",g,S,v),T(f,"image","layout_editor.page_settings.seo.og_image",g,S,v),E(f,"image_alt","layout_editor.page_settings.seo.og_image_alt",g,S,v),a.jsxs("div",{style:Fa,children:[a.jsxs("button",{type:"button","data-testid":`${f}-image-adv-toggle`,"aria-expanded":b,onClick:()=>y(W=>!W),style:q3,children:[b?"▾":"▸"," ",u("layout_editor.page_settings.seo.og_image_adv")]}),b?a.jsxs("div",{"data-testid":`${f}-image-adv`,style:F3,children:[D(f,"image_height","layout_editor.page_settings.seo.og_image_height",g,S,v),D(f,"image_type","layout_editor.page_settings.seo.og_image_type",g,S,v),D(f,"image_secure_url","layout_editor.page_settings.seo.og_image_secure_url",g,S,v)]}):null]}),D(f,"site_name","layout_editor.page_settings.seo.og_site_name",g,S,v),D(f,"locale","layout_editor.page_settings.seo.og_locale",g,S,v),a.jsxs("div",{"data-testid":`${f}-extra`,style:Fa,children:[a.jsx("label",{style:ol,children:u("layout_editor.page_settings.seo.og_extra")}),a.jsx(kf,{value:Array.isArray(g.extra)?g.extra:[],onChange:W=>S("extra",W.length>0?W:void 0),keyField:"property",t:u,candidates:d,testidPrefix:`${f}-extra-editor`})]})]}),a.jsxs("div",{"data-testid":`${f}-tw-section`,style:sk,children:[a.jsx("div",{style:rk,children:u("layout_editor.page_settings.seo.tw_section")}),a.jsx("p",{style:{margin:"0 0 6px",fontSize:11,color:"#94a3b8"},children:u("layout_editor.page_settings.seo.tw_fallback_note")}),I("g7le-seo-tw","card","layout_editor.page_settings.seo.tw_card",L3,h,_,x),D("g7le-seo-tw","site","layout_editor.page_settings.seo.tw_site",h,_,x),D("g7le-seo-tw","creator","layout_editor.page_settings.seo.tw_creator",h,_,x),E("g7le-seo-tw","title","layout_editor.page_settings.seo.tw_title",h,_,x),E("g7le-seo-tw","description","layout_editor.page_settings.seo.tw_description",h,_,x),T("g7le-seo-tw","image","layout_editor.page_settings.seo.tw_image",h,_,x),E("g7le-seo-tw","image_alt","layout_editor.page_settings.seo.tw_image_alt",h,_,x),a.jsxs("div",{"data-testid":"g7le-seo-tw-extra",style:Fa,children:[a.jsx("label",{style:ol,children:u("layout_editor.page_settings.seo.tw_extra")}),a.jsx(kf,{value:Array.isArray(h.extra)?h.extra:[],onChange:W=>_("extra",W.length>0?W:void 0),keyField:"name",t:u,candidates:d,testidPrefix:"g7le-seo-tw-extra-editor"})]})]})]})}const sk={border:"1px solid #e2e8f0",borderRadius:8,padding:12,display:"flex",flexDirection:"column",gap:10},rk={fontSize:13,fontWeight:600,color:"#0f172a"},z3={margin:0,fontSize:11,color:"#64748b",background:"#f8fafc",borderRadius:6,padding:"6px 8px"},Fa={display:"flex",flexDirection:"column",gap:4},ol={fontSize:12,color:"#475569"},P3={display:"flex",alignItems:"center",gap:6},B3={fontSize:11,color:"#94a3b8"},H3={padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,width:"100%",minWidth:0,boxSizing:"border-box"},W3={padding:"5px 8px",fontSize:12,border:"1px solid #e2e8f0",borderRadius:6,background:"#f1f5f9",color:"#64748b"},U3={fontSize:11,color:"#7c3aed"},q3={alignSelf:"flex-start",padding:"2px 0",fontSize:12,fontWeight:600,color:"#475569",background:"transparent",border:"none",cursor:"pointer"},F3={display:"flex",flexDirection:"column",gap:8,paddingLeft:14,marginTop:4,minWidth:0},V3={display:"flex",alignItems:"center",gap:8,flexWrap:"wrap",minWidth:0},K3={display:"inline-flex",alignItems:"center",maxWidth:"100%",padding:"3px 8px",fontSize:12,color:"#1d4ed8",background:"#eff6ff",border:"1px solid #bfdbfe",borderRadius:6,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},G3={fontSize:11,color:"#94a3b8"},Y3={padding:"2px 8px",fontSize:11,color:"#475569",background:"#fff",border:"1px solid #cbd5e1",borderRadius:6,cursor:"pointer"},X3=["WebPage","WebSite","ItemList","BreadcrumbList","Organization","Person","CollectionPage","AboutPage","ContactPage","SearchAction"];function Cf(n){const e=[],t=(s,r)=>{for(const[o,l]of Object.entries(s)){if(o==="@type"||o==="@context")continue;const d=r?`${r}.${o}`:o;l!==null&&typeof l=="object"&&!Array.isArray(l)?t(l,d):e.push({key:d,value:l==null?"":String(l)})}};return t(n,""),e}function ok(n,e){const t={"@type":n};for(const{key:s,value:r}of e){if(s.trim()==="")continue;const o=s.split(".");let l=t;for(let d=0;d<o.length-1;d++){const u=o[d];(typeof l[u]!="object"||l[u]===null||Array.isArray(l[u]))&&(l[u]={}),l=l[u]}l[o[o.length-1]]=r}return t}let Nm=0;function J3({value:n,onChange:e,autoBlock:t,autoMeta:s,lockedByFilter:r=!1,filteredBlock:o,pageType:l,candidates:d,t:u,testidPrefix:f="g7le-seo-sd"}){const g=!!n&&typeof n=="object",[h,b]=w.useState(g),y=g&&typeof n["@type"]=="string"?n["@type"]:"WebPage",[v,x]=w.useState(y),[S,_]=w.useState(()=>g?Cf(n).map(F=>({id:Nm++,...F})):[]),A=w.useCallback((F,Z)=>{x(F),_(Z),e(ok(F,Z.map(Y=>({key:Y.key,value:Y.value}))))},[e]),C=w.useCallback(()=>{const F=t,Z=typeof F["@type"]=="string"?F["@type"]:v,Y=Cf(F).map(U=>({id:Nm++,key:U.key,value:s?.[U.key]?.expr??U.value}));return{type:Z,rows:Y}},[t,s,v]),j=w.useCallback(F=>{if(b(F),F){if(S.length===0&&t&&typeof t=="object"){const Z=C();A(Z.type,Z.rows);return}e(ok(v,S.map(Z=>({key:Z.key,value:Z.value}))))}else e(null)},[v,S,t,C,A,e]),E=w.useCallback(()=>{if(!t)return;const F=C();A(F.type,F.rows)},[t,C,A]),T=w.useCallback(()=>{A(v,[...S,{id:Nm++,key:"",value:""}])},[v,S,A]),D=w.useCallback(F=>{A(v,S.filter(Z=>Z.id!==F))},[v,S,A]),I=w.useCallback((F,Z)=>{A(v,S.map(Y=>Y.id===F?{...Y,key:Z}:Y))},[v,S,A]),W=w.useCallback((F,Z)=>{A(v,S.map(Y=>Y.id===F?{...Y,value:Z}:Y))},[v,S,A]),z=w.useMemo(()=>t?Cf(t):[],[t]),H=w.useMemo(()=>o?Cf(o):[],[o]),G=S.some(F=>F.key.trim()!==""&&F.value.trim()==="");if(r){const F=o&&typeof o["@type"]=="string"?o["@type"]:"";return a.jsxs("div",{"data-testid":f,style:ak,children:[a.jsxs("div",{style:ik,children:[a.jsx("span",{style:Z3,children:"🔒"}),a.jsx("span",{style:{fontSize:13,fontWeight:600},children:u("layout_editor.page_settings.seo.sd_mode")}),a.jsx("span",{"data-testid":`${f}-locked-badge`,style:Q3,children:u("layout_editor.page_settings.seo.sd_filter_locked")})]}),a.jsxs("div",{"data-testid":`${f}-locked`,style:e5,children:[a.jsxs("p",{style:{margin:"0 0 6px",fontSize:12,color:"#475569"},children:["ⓘ ",u("layout_editor.page_settings.seo.sd_filter_locked_note")]}),a.jsxs("div",{"data-testid":`${f}-filtered-block`,children:[F?a.jsxs("div",{style:{fontSize:12,fontWeight:600,marginBottom:4},children:["@type: ",F]}):null,H.map(Z=>a.jsxs("div",{"data-testid":`${f}-filtered-row-${Z.key}`,style:lk,children:[a.jsx("code",{style:ck,children:Z.key}),a.jsx("span",{style:dk,children:Z.value})]},Z.key))]})]})]})}return a.jsxs("div",{"data-testid":f,style:ak,children:[a.jsx("div",{style:ik,children:a.jsx(_f,{checked:h,onChange:j,testid:`${f}-mode`,label:u("layout_editor.page_settings.seo.sd_manual_toggle")})}),!h&&a.jsxs("div",{"data-testid":`${f}-auto`,style:{marginTop:8},children:[a.jsxs("div",{"data-testid":`${f}-auto-preview`,style:t5,children:[a.jsxs("div",{style:{fontSize:12,fontWeight:600,marginBottom:6},children:[u("layout_editor.page_settings.seo.sd_auto_title"),t&&typeof t["@type"]=="string"?`: ${t["@type"]}`:"",l?a.jsxs("span",{style:{marginLeft:6,color:"#94a3b8",fontWeight:400},children:["(",l,")"]}):null]}),z.length===0?a.jsx("p",{style:{margin:0,fontSize:12,color:"#94a3b8"},children:u("layout_editor.page_settings.seo.sd_auto_empty")}):z.map(F=>{const Z=s?.[F.key];return a.jsxs("div",{"data-testid":`${f}-auto-row-${F.key}`,style:lk,children:[a.jsx("code",{style:ck,children:F.key}),Z?a.jsxs("span",{"data-testid":`${f}-auto-chip-${F.key}`,style:n5,title:Z.expr,children:["🔗 ",Z.label||Z.expr]}):a.jsx("span",{style:dk,children:F.value})]},F.key)})]}),a.jsxs("p",{"data-testid":`${f}-replace-warn`,style:s5,children:["ⓘ ",u("layout_editor.page_settings.seo.sd_replace_pre_warn")]})]}),h&&a.jsxs("div",{"data-testid":`${f}-manual`,style:{marginTop:8},children:[a.jsxs("p",{"data-testid":`${f}-replace-warn`,style:r5,children:["⚠ ",u("layout_editor.page_settings.seo.sd_replace_warn")]}),a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[a.jsx("label",{style:{fontSize:12,color:"#475569"},children:u("layout_editor.page_settings.seo.sd_type")}),a.jsx("input",{type:"text","data-testid":`${f}-type`,list:`${f}-type-options`,value:v,onChange:F=>A(F.target.value,S),style:o5}),a.jsx("datalist",{id:`${f}-type-options`,children:X3.map(F=>a.jsx("option",{value:F},F))})]}),a.jsx("div",{style:{marginTop:8,display:"flex",flexDirection:"column",gap:6},children:S.map(F=>a.jsxs("div",{"data-testid":`${f}-prop-${F.id}`,style:a5,children:[a.jsx("input",{type:"text","data-testid":`${f}-prop-key-${F.id}`,value:F.key,placeholder:u("layout_editor.page_settings.seo.sd_prop_key"),onChange:Z=>I(F.id,Z.target.value),style:{width:160,padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,minWidth:0}}),a.jsx("div",{style:{flex:1,minWidth:0},children:a.jsx(gn,{value:F.value,onChange:Z=>W(F.id,Z),t:u,candidates:d,placeholder:u("layout_editor.page_settings.seo.sd_prop_value"),testidPrefix:`${f}-prop-value-${F.id}`})}),a.jsx("button",{type:"button","data-testid":`${f}-prop-remove-${F.id}`,onClick:()=>D(F.id),title:u("layout_editor.page_settings.seo.remove"),"aria-label":u("layout_editor.page_settings.seo.remove"),style:i5,children:"✕"})]},F.id))}),a.jsxs("div",{style:{marginTop:8,display:"flex",gap:8},children:[a.jsxs("button",{type:"button","data-testid":`${f}-add`,onClick:T,style:uk,children:["+ ",u("layout_editor.page_settings.seo.sd_add_prop")]}),t?a.jsxs("button",{type:"button","data-testid":`${f}-seed-from-module`,onClick:E,style:uk,children:["↩ ",u("layout_editor.page_settings.seo.sd_seed_from_module")]}):null]}),a.jsxs("p",{"data-testid":`${f}-empty-note`,style:l5,children:["ⓘ ",u("layout_editor.page_settings.seo.sd_empty_note"),G?a.jsxs("span",{style:{color:"#b45309"},children:[" ",u("layout_editor.page_settings.seo.sd_has_empty")]}):null]})]})]})}const ak={display:"flex",flexDirection:"column"},ik={display:"flex",alignItems:"center",gap:8},Z3={fontSize:14},Q3={fontSize:11,padding:"2px 6px",borderRadius:4,background:"#f1f5f9",color:"#64748b"},e5={marginTop:8,border:"1px solid #fcd34d",borderRadius:8,padding:10,background:"#fffbeb"},t5={border:"1px solid #e2e8f0",borderRadius:8,padding:10,background:"#f8fafc"},lk={display:"flex",gap:8,alignItems:"center",padding:"2px 0"},ck={fontSize:11,color:"#475569",background:"#fff",padding:"2px 6px",borderRadius:4,minWidth:120},dk={fontSize:11,color:"#0f172a",fontFamily:"monospace",wordBreak:"break-all"},n5={display:"inline-flex",alignItems:"center",padding:"2px 8px",fontSize:11,color:"#1d4ed8",background:"#eff6ff",border:"1px solid #bfdbfe",borderRadius:6},s5={margin:"6px 0 0",fontSize:12,color:"#64748b"},r5={margin:"0 0 8px",fontSize:12,color:"#b45309",background:"#fffbeb",border:"1px solid #fcd34d",borderRadius:6,padding:"6px 8px"},o5={padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,width:"100%",minWidth:0},a5={display:"flex",gap:6,alignItems:"flex-start",border:"1px solid #e2e8f0",borderRadius:8,padding:8},i5={padding:"4px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#64748b",cursor:"pointer"},uk={padding:"5px 10px",fontSize:12,border:"1px dashed #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer"},l5={margin:"8px 0 0",fontSize:11,color:"#94a3b8"},fk=new Set(["core_setting","setting","query","route"]);function c5({vars:n,onChange:e,varCandidates:t,gatingMet:s=!1,candidates:r,t:o,testidPrefix:l="g7le-seo-vars"}){const d=w.useMemo(()=>n&&typeof n=="object"?{...n}:{},[n]),u=w.useMemo(()=>Array.isArray(t)?t:[],[t]),f=w.useMemo(()=>s?u.filter(E=>fk.has(E.source)):[],[u,s]),g=w.useMemo(()=>s?u.filter(E=>E.source==="data"):[],[u,s]);w.useMemo(()=>new Set(f.map(E=>E.name)),[f]);const h=w.useMemo(()=>new Set(g.map(E=>E.name)),[g]),b=w.useMemo(()=>{const E=new Set;for(const T of u)fk.has(T.source)&&E.add(T.name);return E},[u]),y=w.useMemo(()=>Object.keys(d).filter(E=>!h.has(E)),[d,h]),v=w.useCallback((E,T)=>{const D={...d};T===void 0?delete D[E]:D[E]=T,e(D)},[d,e]),[x,S]=w.useState(""),_=x.trim()!==""&&b.has(x.trim()),A=x.trim()!==""&&Object.prototype.hasOwnProperty.call(d,x.trim()),C=x.trim()!==""&&!_&&!A&&!h.has(x.trim()),j=w.useCallback(()=>{const E=x.trim();E===""||b.has(E)||Object.prototype.hasOwnProperty.call(d,E)||(e({...d,[E]:""}),S(""))},[x,b,d,e]);return a.jsxs("div",{"data-testid":l,style:{display:"flex",flexDirection:"column",gap:10},children:[a.jsx("span",{"data-testid":"g7le-seo-var-list",hidden:!0,"data-gating":s?"1":"0"}),!s&&a.jsxs("div",{"data-testid":`${l}-precondition`,style:d5,children:["⚠ ",o("layout_editor.page_settings.seo.vars_precondition")]}),f.length>0&&a.jsxs("div",{"data-testid":`${l}-auto-group`,style:Dm,children:[a.jsx("div",{style:Im,children:o("layout_editor.page_settings.seo.vars_auto_group")}),f.map(E=>a.jsxs("div",{"data-testid":`g7le-seo-var-auto-${E.name}`,style:u5,children:[a.jsx("span",{style:f5,children:"🔒"}),a.jsx("code",{style:Lm,children:E.name}),a.jsxs("span",{style:p5,children:["〔",o("layout_editor.page_settings.seo.vars_auto"),"·",E.source,"〕"]}),E.owner?.name?a.jsx("span",{style:g5,children:E.owner.name}):null]},E.name))]}),g.length>0&&a.jsxs("div",{"data-testid":`${l}-data-group`,style:Dm,children:[a.jsx("div",{style:Im,children:o("layout_editor.page_settings.seo.vars_data_group")}),g.map(E=>{const T=d[E.name]??"",D=T.trim()==="";return a.jsxs("div",{"data-testid":`g7le-seo-var-data-${E.name}`,style:pk,children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:4},children:[a.jsx("code",{style:Lm,children:E.name}),E.required?a.jsx("span",{"data-testid":`g7le-seo-var-required-${E.name}`,style:h5,children:"*"}):null]}),a.jsx(gn,{value:T,onChange:I=>v(E.name,I??""),t:o,candidates:r,testidPrefix:`g7le-seo-var-data-field-${E.name}`}),E.required&&D?a.jsxs("p",{"data-testid":`g7le-seo-var-empty-warn-${E.name}`,style:Om,children:["⚠ ",o("layout_editor.page_settings.seo.vars_required_empty")]}):null]},E.name)})]}),a.jsxs("div",{"data-testid":`${l}-custom-group`,style:Dm,children:[a.jsx("div",{style:Im,children:o("layout_editor.page_settings.seo.vars_custom_group")}),y.map(E=>a.jsxs("div",{"data-testid":`g7le-seo-var-custom-${E}`,style:pk,children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:4},children:[a.jsx("code",{style:Lm,children:E}),a.jsx("button",{type:"button","data-testid":`g7le-seo-var-custom-remove-${E}`,onClick:()=>v(E,void 0),title:o("layout_editor.page_settings.seo.remove"),"aria-label":o("layout_editor.page_settings.seo.remove"),style:{marginLeft:"auto",padding:"2px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#64748b",cursor:"pointer"},children:"✕"})]}),a.jsx(gn,{value:d[E]??"",onChange:T=>v(E,T??""),t:o,candidates:r,testidPrefix:`g7le-seo-var-custom-field-${E}`})]},E)),a.jsxs("div",{"data-testid":"g7le-seo-var-add",style:{display:"flex",flexDirection:"column",gap:4,marginTop:6},children:[a.jsxs("div",{style:{display:"flex",gap:6},children:[a.jsx("input",{type:"text","data-testid":"g7le-seo-var-add-name",value:x,placeholder:o("layout_editor.page_settings.seo.vars_add_name"),onChange:E=>S(E.target.value),style:{flex:1,padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,minWidth:0}}),a.jsxs("button",{type:"button","data-testid":"g7le-seo-var-add-confirm",onClick:j,disabled:x.trim()===""||_||A,style:m5,children:["+ ",o("layout_editor.page_settings.seo.vars_add")]})]}),_?a.jsxs("p",{"data-testid":"g7le-seo-var-add-reserved-warn",style:Om,children:["⚠ ",o("layout_editor.page_settings.seo.vars_name_reserved",{name:x.trim()})]}):null,A&&!_?a.jsxs("p",{"data-testid":"g7le-seo-var-add-duplicate-warn",style:Om,children:["⚠ ",o("layout_editor.page_settings.seo.vars_name_duplicate",{name:x.trim()})]}):null,C?a.jsxs("p",{"data-testid":"g7le-seo-var-add-not-provided-hint",style:{margin:0,fontSize:11,color:"#94a3b8"},children:["ⓘ ",o("layout_editor.page_settings.seo.vars_name_not_provided",{name:x.trim()})]}):null]})]}),a.jsxs("p",{style:{margin:0,fontSize:11,color:"#94a3b8"},children:["ⓘ ",o("layout_editor.page_settings.seo.vars_value_hint")]})]})}const d5={fontSize:12,color:"#b45309",background:"#fffbeb",border:"1px solid #fcd34d",borderRadius:6,padding:"6px 8px"},Dm={border:"1px solid #e2e8f0",borderRadius:8,padding:10,display:"flex",flexDirection:"column",gap:6},Im={fontSize:12,fontWeight:600,color:"#475569"},u5={display:"flex",alignItems:"center",gap:6,padding:"2px 0"},pk={display:"flex",flexDirection:"column",border:"1px solid #f1f5f9",borderRadius:6,padding:8},f5={fontSize:13},Lm={fontSize:12,color:"#0f172a",background:"#f1f5f9",padding:"2px 6px",borderRadius:4},p5={fontSize:11,color:"#64748b"},g5={fontSize:11,color:"#94a3b8"},h5={color:"#dc2626",fontWeight:700},Om={margin:"4px 0 0",fontSize:11,color:"#b45309"},m5={padding:"5px 10px",fontSize:12,border:"1px dashed #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer",whiteSpace:"nowrap"};function y5({templateIdentifier:n,layout:e,url:t,locale:s,seedContext:r,routeParams:o,settingsSignature:l,t:d,debounceMs:u=400,fetchImpl:f,testidPrefix:g="g7le-seo-bot-preview"}){const[h,b]=w.useState(!0),[y,v]=w.useState(null),[x,S]=w.useState(!1),[_,A]=w.useState(null),C=w.useRef(null),j=w.useRef({templateIdentifier:n,layout:e,url:t,locale:s,seedContext:r,routeParams:o});j.current={templateIdentifier:n,layout:e,url:t,locale:s,seedContext:r,routeParams:o};const E=w.useCallback(async()=>{const W=f??(typeof fetch<"u"?fetch:void 0);if(!W)return;const{templateIdentifier:z,layout:H,url:G,locale:F,seedContext:Z,routeParams:Y}=j.current;S(!0),A(null);try{const U=`/api/admin/templates/${encodeURIComponent(z)}/editor/seo-bot-preview`,B=await W(U,{method:"POST",credentials:"same-origin",headers:on({"Content-Type":"application/json"}),body:JSON.stringify({layout:H,url:G,locale:F,seed_context:Z??{},route_params:Y??{}})}),te=await B.json().catch(()=>null);if(!B.ok){A(te?.message??`HTTP ${B.status}`);return}const q=te?.data??null;v(q)}catch(U){A(U instanceof Error?U.message:String(U))}finally{S(!1)}},[f]);w.useEffect(()=>{if(h)return C.current&&clearTimeout(C.current),C.current=setTimeout(()=>{E()},u),()=>{C.current&&clearTimeout(C.current)}},[l,h,u,E]);const T=w.useCallback(()=>{C.current&&clearTimeout(C.current),E()},[E]),D=y?.html??null,I=y?.enabled??!0;return a.jsxs("div",{"data-testid":g,style:b5,children:[a.jsxs("div",{style:x5,children:[a.jsxs("button",{type:"button","data-testid":`${g}-toggle`,onClick:()=>b(W=>!W),"aria-expanded":h,style:v5,children:[h?"▾":"▸"," ",d("layout_editor.page_settings.seo.bot_preview_title")]}),h?a.jsxs("button",{type:"button","data-testid":`${g}-refresh`,onClick:T,disabled:x,style:w5,children:["⟳ ",d("layout_editor.page_settings.seo.bot_preview_refresh")]}):null]}),h&&a.jsxs("div",{style:{marginTop:8},children:[y&&!I?a.jsxs("p",{"data-testid":`${g}-disabled`,style:_5,children:["ⓘ ",d("layout_editor.page_settings.seo.bot_preview_disabled")]}):a.jsx("div",{"data-testid":`${g}-body`,style:S5,children:x&&!D?a.jsx("p",{style:Mm,children:d("layout_editor.translation.loading")}):_?a.jsx("p",{"data-testid":`${g}-error`,style:{...Mm,color:"#dc2626"},children:_}):D==null?a.jsx("p",{style:Mm,children:d("layout_editor.page_settings.seo.bot_preview_empty")}):a.jsx("pre",{"data-testid":`${g}-code`,style:k5,children:D})}),a.jsxs("p",{"data-testid":`${g}-sample-note`,style:C5,children:["ⓘ ",d("layout_editor.page_settings.seo.bot_preview_sample_note")]})]})]})}const b5={borderTop:"1px solid #e2e8f0",paddingTop:10,marginTop:12},x5={display:"flex",alignItems:"center",gap:8},v5={background:"none",border:"none",cursor:"pointer",fontSize:13,fontWeight:600,color:"#0f172a",padding:0},w5={marginLeft:"auto",padding:"4px 10px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},_5={margin:0,fontSize:12,color:"#64748b",background:"#f8fafc",border:"1px solid #e2e8f0",borderRadius:6,padding:"8px 10px"},S5={border:"1px solid #e2e8f0",borderRadius:8,background:"#0b1020",padding:0,minHeight:80,overflow:"hidden"},k5={margin:0,padding:12,fontSize:11,lineHeight:1.5,color:"#d1fae5",fontFamily:"monospace",whiteSpace:"pre-wrap",wordBreak:"break-word",maxHeight:360,overflow:"auto"},Mm={margin:0,padding:12,fontSize:12,color:"#94a3b8"},C5={margin:"8px 0 0",fontSize:11,color:"#94a3b8"};function gk({option:n,testIdPrefix:e}){const{id:t,friendly:s,source:r}=n;return a.jsxs("span",{style:j5,children:[a.jsx("span",{"data-testid":e?`${e}-title`:void 0,style:E5,children:s??t}),s?a.jsx("span",{"data-testid":e?`${e}-id`:void 0,style:R5,children:t}):null,r?a.jsx("span",{"data-testid":e?`${e}-source`:void 0,style:A5,children:r}):null]})}const j5={display:"inline-flex",alignItems:"baseline",gap:4,flexWrap:"wrap",minWidth:0},E5={fontSize:12,color:"#0f172a"},R5={fontSize:10,color:"#94a3b8",fontFamily:"ui-monospace, monospace"},A5={fontSize:9,fontWeight:600,color:"#7c3aed",background:"#f5f3ff",border:"1px solid #ddd6fe",borderRadius:4,padding:"0 5px",whiteSpace:"nowrap"},T5=["always","hourly","daily","weekly","monthly","yearly","never"];function $5({getValue:n,patch:e,t,templateIdentifier:s,candidates:r,availableExtensions:o=[],dataSourceOptions:l=[],previewUrl:d="/",previewLocale:u="ko",seedContext:f,candidatesFetcher:g,ogPreviewFetcher:h,botFetchImpl:b,testidPrefix:y="g7le-seo"}){const v=n("meta",{}).seo,x=v&&typeof v=="object"?v:{},S=w.useCallback((fe,De)=>{const Fe={...n("meta",{})},mt={...Fe.seo??{}};De==null||De===""?delete mt[fe]:mt[fe]=De,Fe.seo=mt,e("meta",Fe)},[n,e]),_=x.enabled===!0,A=typeof x.page_type=="string"?x.page_type:"",C=Array.isArray(x.extensions)?x.extensions:[],j=Array.isArray(x.data_sources)?x.data_sources:[],E=C.length>0&&A!=="",[T,D]=w.useState(null),[I,W]=w.useState(null),z=w.useCallback(async(fe,De)=>{if(g)return g(fe,De);if(typeof fetch>"u")return null;const Fe=new URLSearchParams;fe&&Fe.set("page_type",fe),Array.isArray(De)&&De.length>0&&Fe.set("extensions",JSON.stringify(De.map(Ot=>({type:Ot.type,id:Ot.id}))));const mt=Fe.toString()?`?${Fe.toString()}`:"",ft=await fetch(`/api/admin/templates/${encodeURIComponent(s)}/editor/seo-candidates.json${mt}`,{credentials:"same-origin",headers:on()}),xt=await ft.json().catch(()=>null);return ft.ok?xt?.data??null:null},[g,s]),H=w.useMemo(()=>{const Fe=(n("__editor",{})??{}).original?.meta?.seo;return Fe&&typeof Fe=="object"?Fe:void 0},[n]),G=w.useRef(H);G.current=H;const F=w.useCallback(async fe=>{if(h)return h(fe);if(typeof fetch>"u")return null;const De=await fetch(`/api/admin/templates/${encodeURIComponent(s)}/editor/seo-og-preview`,{method:"POST",credentials:"same-origin",headers:on({"Content-Type":"application/json"}),body:JSON.stringify({seo:fe,own_seo:G.current??null,seed_context:f??{},route_params:{}})}),Fe=await De.json().catch(()=>null);return De.ok?Fe?.data??null:null},[h,s,f]),Z=w.useMemo(()=>JSON.stringify(C),[C]),Y=w.useRef(x);Y.current=x,w.useEffect(()=>{let fe=!1;return(async()=>{const De=await z(A,C);fe||D(De)})(),()=>{fe=!0}},[A,Z]);const U=w.useMemo(()=>JSON.stringify({og:x.og??null,twitter:x.twitter??null,structured_data:x.structured_data??null}),[x.og,x.twitter,x.structured_data]),B=w.useRef(!1);w.useEffect(()=>{let fe=!1;const De=()=>{(async()=>{const mt=await F(Y.current);fe||W(mt)})()};if(!B.current)return B.current=!0,De(),()=>{fe=!0};const Fe=setTimeout(De,180);return()=>{fe=!0,clearTimeout(Fe)}},[A,Z,U]);const te=T?.page_types??[],q=T?.toggle_settings??[],M=T?.vars??[],N=w.useMemo(()=>JSON.stringify(x),[x]),V=w.useMemo(()=>n("meta")?{meta:n("meta"),components:n("components",[])}:{meta:{},components:[]},[n]),ee=w.useCallback(fe=>{C.some(De=>De.type===fe.type&&De.id===fe.id)||S("extensions",[...C,{type:fe.type,id:fe.id}])},[C,S]),se=w.useCallback(fe=>{const De=C.filter(Fe=>!(Fe.type===fe.type&&Fe.id===fe.id));S("extensions",De.length>0?De:void 0)},[C,S]),[re,pe]=w.useState(!1),[je,me]=w.useState(""),ce=w.useMemo(()=>{const fe=je.trim().toLowerCase();return fe?q.filter(De=>`${De.ref} ${De.label??""}`.toLowerCase().includes(fe)):q},[q,je]),be=typeof x.toggle_setting=="string"?x.toggle_setting:"",Be=w.useCallback(fe=>{const Fe=j.includes(fe)?j.filter(mt=>mt!==fe):[...j,fe];S("data_sources",Fe.length>0?Fe:void 0)},[j,S]);return a.jsxs("div",{"data-testid":y,style:{display:"flex",flexDirection:"column",gap:14},children:[a.jsxs("div",{style:Tr,children:[a.jsx(_f,{checked:_,onChange:fe=>S("enabled",fe),testid:`${y}-enabled`,label:t("layout_editor.page_settings.seo.enabled")}),_?null:a.jsxs("p",{"data-testid":`${y}-disabled-note`,style:al,children:["ⓘ ",t("layout_editor.page_settings.seo.disabled_note")]})]}),a.jsx(Sf,{disabled:!_,testid:`${y}-body`,style:{display:"flex",flexDirection:"column",gap:14},children:a.jsxs(a.Fragment,{children:[a.jsxs("div",{style:Tr,children:[a.jsx("label",{style:Zr,children:t("layout_editor.page_settings.seo.page_type")}),te.length>0?a.jsxs("select",{"data-testid":`${y}-page-type`,value:A,onChange:fe=>S("page_type",fe.target.value),style:jf,children:[a.jsx("option",{value:"",children:t("layout_editor.page_settings.seo.page_type_none")}),te.map(fe=>a.jsxs("option",{value:fe.value,children:[fe.label??fe.value,fe.owner?.name?` (${fe.owner.name})`:""]},fe.value))]}):a.jsxs(a.Fragment,{children:[a.jsx("input",{type:"text","data-testid":`${y}-page-type-free`,value:A,placeholder:t("layout_editor.page_settings.seo.page_type_free_placeholder"),onChange:fe=>S("page_type",fe.target.value),style:jf}),a.jsxs("p",{"data-testid":`${y}-page-type-free-note`,style:al,children:["ⓘ ",t("layout_editor.page_settings.seo.page_type_free_note")]})]})]}),a.jsxs("div",{style:Tr,children:[a.jsxs("label",{style:Zr,children:["★ ",t("layout_editor.page_settings.seo.extensions")]}),a.jsxs("div",{"data-testid":`${y}-extensions`,style:{display:"flex",flexWrap:"wrap",gap:6},children:[C.map(fe=>a.jsxs("span",{"data-testid":`${y}-extension-${fe.type}-${fe.id}`,style:hk,children:[fe.name??`${fe.type}:${fe.id}`,a.jsx("button",{type:"button","data-testid":`${y}-extension-remove-${fe.type}-${fe.id}`,onClick:()=>se(fe),style:mk,children:"✕"})]},`${fe.type}:${fe.id}`)),a.jsxs("button",{type:"button","data-testid":`${y}-extension-add`,onClick:()=>pe(fe=>!fe),style:I5,children:["+ ",t("layout_editor.page_settings.seo.add_extension")]})]}),re&&a.jsx("div",{"data-testid":`${y}-extension-picker`,style:yk,children:o.length===0?a.jsx("p",{style:al,children:t("layout_editor.page_settings.seo.no_extension_candidate")}):o.map(fe=>a.jsx("button",{type:"button","data-testid":`${y}-extension-option-${fe.type}-${fe.id}`,onClick:()=>{ee(fe),pe(!1)},style:bk,children:fe.name??`${fe.type}:${fe.id}`},`${fe.type}:${fe.id}`))})]}),!E&&a.jsxs("div",{"data-testid":`${y}-defaults-precondition`,style:D5,children:["⚠ ",t("layout_editor.page_settings.seo.defaults_precondition"),a.jsxs("div",{"data-testid":`${y}-defaults-missing`,style:{fontSize:11,marginTop:4},children:[C.length===0?t("layout_editor.page_settings.seo.missing_extensions"):"",A===""?` ${t("layout_editor.page_settings.seo.missing_page_type")}`:""]})]}),a.jsxs("div",{style:Tr,children:[a.jsx("label",{style:Zr,children:t("layout_editor.page_settings.seo.toggle_setting")}),a.jsxs("div",{"data-testid":`${y}-toggle-setting`,children:[be?a.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center",marginBottom:4},children:[a.jsx("code",{style:hk,children:be}),a.jsx("button",{type:"button","data-testid":`${y}-toggle-setting-clear`,onClick:()=>S("toggle_setting",void 0),style:mk,children:"✕"})]}):null,a.jsx("input",{type:"text","data-testid":`${y}-toggle-setting-search`,value:je,placeholder:t("layout_editor.page_settings.seo.toggle_setting_search"),onChange:fe=>me(fe.target.value),style:jf}),je.trim()!==""&&a.jsx("div",{"data-testid":`${y}-toggle-setting-results`,style:yk,children:ce.length===0?a.jsx("p",{style:al,children:t("layout_editor.inline_binding.no_results")}):ce.map(fe=>a.jsx("button",{type:"button","data-testid":`${y}-toggle-setting-option-${fe.ref}`,onClick:()=>{S("toggle_setting",fe.ref),me("")},style:bk,children:fe.label??fe.ref},fe.ref))})]})]}),a.jsxs("div",{style:Tr,children:[a.jsx("label",{style:Zr,children:t("layout_editor.page_settings.seo.data_sources")}),a.jsx("p",{style:al,children:t("layout_editor.page_settings.seo.data_sources_hint")}),a.jsx("div",{"data-testid":`${y}-data-sources`,style:{display:"flex",flexDirection:"column",gap:6},children:l.length===0?a.jsx("span",{style:al,children:t("layout_editor.page_settings.seo.data_sources_empty")}):l.map(fe=>{const De=j.includes(fe.id);return a.jsxs("label",{"data-testid":`${y}-data-source-${fe.id}`,style:N5(De),children:[a.jsx("input",{type:"checkbox","data-testid":`${y}-data-source-check-${fe.id}`,checked:De,onChange:()=>Be(fe.id)}),a.jsx(gk,{option:fe,testIdPrefix:`${y}-data-source-${fe.id}`})]},fe.id)})})]}),a.jsxs("div",{style:Tr,children:[a.jsx("label",{style:Zr,children:t("layout_editor.page_settings.seo.priority")}),a.jsx("input",{type:"range","data-testid":`${y}-priority`,min:0,max:1,step:.1,value:typeof x.priority=="number"?x.priority:.5,onChange:fe=>S("priority",Number(fe.target.value))}),a.jsx("span",{"data-testid":`${y}-priority-value`,style:{fontSize:12,color:"#475569"},children:typeof x.priority=="number"?x.priority:.5})]}),a.jsxs("div",{style:Tr,children:[a.jsx("label",{style:Zr,children:t("layout_editor.page_settings.seo.changefreq")}),a.jsxs("select",{"data-testid":`${y}-changefreq`,value:typeof x.changefreq=="string"?x.changefreq:"",onChange:fe=>S("changefreq",fe.target.value),style:jf,children:[a.jsx("option",{value:"",children:t("layout_editor.page_settings.seo.use_default")}),T5.map(fe=>a.jsx("option",{value:fe,children:fe},fe))]})]}),a.jsxs("div",{style:Tr,children:[a.jsx("label",{style:Zr,children:t("layout_editor.page_settings.seo.title")}),a.jsx(ks,{value:typeof x.title=="string"?x.title:"",onChange:fe=>S("title",fe??""),t,candidates:r,testidPrefix:`${y}-title`,enableExpressionTree:!0,expressionTreeCollapsible:!0})]}),a.jsxs("div",{style:Tr,children:[a.jsx("label",{style:Zr,children:t("layout_editor.page_settings.seo.description")}),a.jsx(ks,{value:typeof x.description=="string"?x.description:"",onChange:fe=>S("description",fe??""),t,candidates:r,testidPrefix:`${y}-description`,enableExpressionTree:!0,expressionTreeCollapsible:!0})]}),a.jsx(M3,{og:x.og,twitter:x.twitter,onChangeOg:fe=>S("og",Object.keys(fe).length>0?fe:void 0),onChangeTwitter:fe=>S("twitter",Object.keys(fe).length>0?fe:void 0),ogPreview:I?.og,twitterPreview:I?.twitter,defaultsAvailable:I?.defaultsAvailable??!1,candidates:r,t}),a.jsxs("div",{style:Tr,children:[a.jsx("label",{style:Zr,children:t("layout_editor.page_settings.seo.structured_data")}),a.jsx(J3,{value:x.structured_data,onChange:fe=>S("structured_data",fe??void 0),autoBlock:I?.structured?.autoBlock,autoMeta:I?.structured?.autoMeta,lockedByFilter:I?.structured?.lockedByFilter,filteredBlock:I?.structured?.filteredBlock,pageType:A,candidates:r,t})]}),a.jsxs("div",{style:Tr,children:[a.jsx("label",{style:Zr,children:t("layout_editor.page_settings.seo.vars")}),a.jsx(c5,{vars:x.vars,onChange:fe=>S("vars",Object.keys(fe).length>0?fe:void 0),varCandidates:M,gatingMet:E,candidates:r,t})]}),a.jsx(y5,{templateIdentifier:s,layout:V,url:d,locale:u,seedContext:f,settingsSignature:N,t,fetchImpl:b})]})})]})}const Tr={display:"flex",flexDirection:"column",gap:4},Zr={fontSize:12,fontWeight:600,color:"#334155"},jf={padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,width:"100%",minWidth:0,boxSizing:"border-box"},al={margin:"4px 0 0",fontSize:11,color:"#94a3b8"},N5=n=>({display:"flex",alignItems:"center",gap:8,padding:"6px 10px",fontSize:12,border:`1px solid ${n?"#3b82f6":"#e2e8f0"}`,borderRadius:8,background:n?"#eff6ff":"#fff",cursor:"pointer",minWidth:0}),D5={fontSize:12,color:"#b45309",background:"#fffbeb",border:"1px solid #fcd34d",borderRadius:6,padding:"8px 10px"},hk={display:"inline-flex",alignItems:"center",gap:4,fontSize:11,padding:"3px 8px",borderRadius:999,background:"#eef2ff",color:"#3730a3"},mk={border:"none",background:"transparent",cursor:"pointer",color:"#6366f1",fontSize:11,padding:0},I5={fontSize:11,padding:"3px 10px",borderRadius:999,border:"1px dashed #cbd5e1",background:"#f8fafc",color:"#475569",cursor:"pointer"},yk={marginTop:4,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",padding:6,display:"flex",flexDirection:"column",gap:2},bk={textAlign:"left",border:"none",background:"transparent",cursor:"pointer",padding:"5px 8px",borderRadius:4,fontSize:12,color:"#0f172a"},L5={setState:"state",loadFromLocalStorage:"state",saveToLocalStorage:"state",navigate:"nav",openWindow:"nav",navigateBack:"nav",navigateForward:"nav",replaceUrl:"nav",toast:"notify",openModal:"notify",closeModal:"notify",showAlert:"notify",setError:"notify",refetchDataSource:"data",appendDataSource:"data",updateDataSource:"data",apiCall:"data",scrollIntoView:"etc",login:"etc",logout:"etc",setLocale:"locale",emitEvent:"etc",conditions:"flow",sequence:"flow",parallel:"flow",switch:"flow",suppress:"flow",showErrorPage:"error"},O5={state:"layout_editor.action.group.state",nav:"layout_editor.action.group.nav",notify:"layout_editor.action.group.notify",data:"layout_editor.action.group.data",locale:"layout_editor.action.group.locale",etc:"layout_editor.action.group.etc",flow:"layout_editor.action.group.flow",error:"layout_editor.action.group.error",extension:"layout_editor.action.group.extension"},M5={init:["state","data","notify","nav","locale","etc","flow","error","extension"],component:["nav","notify","data","state","locale","etc","flow","error","extension"]};function z5(n,e){const t=n?.[e];if(t&&typeof t=="object"){const s=t.__source;if(s&&typeof s=="object")return s}return null}function P5(n,e){return!n||n.kind==="core"?e("layout_editor.action.source_core"):n.id??e(`layout_editor.action.source_${n.kind}`)}function xk(n,e,t){return typeof n!="string"?t:n.startsWith("$t:")?e(n.slice(3)):n}function B5({recipes:n,t:e,onAdd:t,context:s="init",testIdPrefix:r="g7le-action-add"}){const[o,l]=w.useState(!1),[d,u]=w.useState(""),f=w.useMemo(()=>Lc(n),[n]),g=w.useMemo(()=>{const h=M5[s],b=new Map;for(const v of f){const x=z5(n,v.id),_=x!=null&&x.kind!=="core"?"extension":L5[v.id]??"etc",A=b.get(_)??[];A.push({recipe:v,source:x}),b.set(_,A)}const y=d.trim().toLowerCase();return h.map(v=>{let x=b.get(v)??[];return y&&(x=x.filter(({recipe:S})=>xk(S.label,e,S.id).toLowerCase().includes(y)||S.id.toLowerCase().includes(y)||S.build.handler.toLowerCase().includes(y))),{groupKey:v,items:x}}).filter(v=>v.items.length>0)},[f,n,s,d,e]);return f.length===0?a.jsx("div",{"data-testid":`${r}-empty`,style:X5,children:e("layout_editor.action.no_recipes")}):a.jsxs("div",{className:r,"data-testid":r,style:{minWidth:0},children:[a.jsxs("button",{type:"button","data-testid":`${r}-toggle`,onClick:()=>l(h=>!h),style:H5,children:[e("layout_editor.action.add_action")," ▾"]}),o?a.jsxs("div",{"data-testid":`${r}-list`,style:W5,children:[a.jsx("input",{type:"text","data-testid":`${r}-search`,value:d,placeholder:e("layout_editor.action.add_search"),onChange:h=>u(h.target.value),style:U5}),g.map(({groupKey:h,items:b})=>a.jsxs("div",{"data-testid":`${r}-group-${h}`,children:[a.jsxs("div",{style:q5,children:["━━ ",e(O5[h]??h)," ━━"]}),b.map(({recipe:y,source:v})=>a.jsxs("button",{type:"button","data-testid":`g7le-init-action-spec-${y.id}`,onClick:()=>{t(ff(y,{})),l(!1),u("")},style:F5,children:[a.jsx("span",{style:V5,children:xk(y.label,e,y.id)}),a.jsxs("span",{"data-testid":`g7le-init-action-spec-source-${y.id}`,style:K5,children:["〔",P5(v,e),"〕"]}),a.jsx("code",{style:G5,children:y.build.handler})]},y.id))]},h)),g.length===0?a.jsx("div",{"data-testid":`${r}-no-match`,style:Y5,children:e("layout_editor.action.add_no_match")}):null]}):null]})}const H5={padding:"6px 12px",fontSize:12,border:"1px dashed #94a3b8",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},W5={marginTop:6,border:"1px solid #cbd5e1",borderRadius:8,background:"#fff",maxHeight:320,overflowY:"auto",padding:8},U5={width:"100%",padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,marginBottom:6,boxSizing:"border-box"},q5={fontSize:11,fontWeight:700,color:"#94a3b8",padding:"6px 4px 2px"},F5={display:"flex",alignItems:"center",gap:6,width:"100%",textAlign:"left",padding:"6px 8px",fontSize:12,border:"none",background:"transparent",cursor:"pointer",borderRadius:6},V5={flex:1,minWidth:0,color:"#0f172a"},K5={fontSize:10,color:"#64748b",whiteSpace:"nowrap"},G5={fontSize:10,color:"#cbd5e1",fontFamily:"monospace",whiteSpace:"nowrap"},Y5={fontSize:12,color:"#94a3b8",padding:"8px 4px"},X5={fontSize:12,color:"#94a3b8",padding:"8px 0"};function J5(n,e){return e.startsWith("$t:")?n(e.slice(3)):e}function Z5({action:n,recipe:e,values:t={},t:s,missingRequired:r=!1,showCodeButton:o=!0,testIdPrefix:l="g7le-action-preview"}){const[d,u]=w.useState(!1),f=e?_S(e,t,g=>J5(s,g)):typeof n.handler=="string"?n.handler:s("layout_editor.action.advanced_action");return a.jsxs("div",{className:l,"data-testid":l,style:Q5,children:[r?a.jsxs("span",{"data-testid":`${l}-missing`,style:t8,children:["⚠ ",s("layout_editor.action.summary_missing_required")]}):a.jsx("span",{"data-testid":`${l}-summary`,style:e8,children:f}),o?a.jsx("button",{type:"button","data-testid":`${l}-code-toggle`,onClick:()=>u(g=>!g),style:n8,"aria-expanded":d,"aria-label":s("layout_editor.action.view_code"),children:"</>"}):null,o&&d?a.jsx("pre",{"data-testid":`${l}-code`,style:s8,children:JSON.stringify(n,null,2)}):null]})}const Q5={display:"flex",flexWrap:"wrap",alignItems:"center",gap:6,minWidth:0},e8={flex:1,minWidth:0,fontSize:12,color:"#475569"},t8={flex:1,minWidth:0,fontSize:12,color:"#b45309"},n8={border:"1px solid #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer",fontSize:11,padding:"2px 6px",whiteSpace:"nowrap"},s8={flexBasis:"100%",margin:"6px 0 0",padding:8,background:"#0f172a",color:"#e2e8f0",borderRadius:6,fontSize:11,overflow:"auto"},vk="__g7le_custom__";function Ef({value:n,onChange:e,candidates:t,placeholder:s,testid:r,t:o,bindingCandidates:l}){const d=n==null?"":String(n),u=Array.isArray(t)&&t.length>0,f=u&&t.some(b=>b.value===d),[g,h]=qe.useState(!u||d!==""&&!f);return qe.useEffect(()=>{d!==""&&u&&!f&&h(!0)},[d,u,f]),u&&!g?a.jsxs("div",{style:kk,children:[a.jsxs("select",{className:"g7le-widget g7le-widget--picker","data-testid":r,value:f?d:"",onChange:b=>{const y=b.target.value;if(y===vk){h(!0);return}e(y===""?void 0:y)},style:{..._k,flex:1,minWidth:0},children:[a.jsx("option",{value:"",children:o("layout_editor.control.default")}),t.map(b=>a.jsx("option",{value:b.value,children:b.label},b.value)),a.jsx("option",{value:vk,children:o("layout_editor.recipe.custom_input")})]}),a.jsx("button",{type:"button","data-testid":`${r}-to-custom`,title:o("layout_editor.recipe.custom_input"),"aria-label":o("layout_editor.recipe.custom_input"),onClick:()=>h(!0),style:Ck,children:"✎"})]}):a.jsxs("div",{style:kk,children:[a.jsx("div",{style:{flex:1,minWidth:0},children:a.jsx(gn,{value:d,onChange:b=>e(b===""?void 0:b),t:o,candidates:l,placeholder:s,testidPrefix:`${r}-input`})}),u&&a.jsx("button",{type:"button","data-testid":`${r}-pick`,title:o("layout_editor.recipe.pick_from_list"),onClick:()=>{h(!1),e(void 0)},style:Ck,children:"≡"})]})}function r8({value:n,onChange:e,candidates:t,t:s,bindingCandidates:r}){return a.jsx(Ef,{value:n,onChange:e,candidates:t,placeholder:s("layout_editor.recipe.page_placeholder"),testid:"g7le-widget-page-picker",t:s,bindingCandidates:r})}function wk({value:n,onChange:e,candidates:t,t:s,bindingCandidates:r}){return a.jsx(Ef,{value:n,onChange:e,candidates:t,placeholder:s("layout_editor.recipe.datasource_placeholder"),testid:"g7le-widget-datasource-picker",t:s,bindingCandidates:r})}function zm({value:n,onChange:e,candidates:t,t:s,bindingCandidates:r}){return a.jsx(Ef,{value:n,onChange:e,candidates:t,placeholder:s("layout_editor.recipe.state_key_placeholder"),testid:"g7le-widget-state-key-picker",t:s,bindingCandidates:r})}function o8({value:n,onChange:e,candidates:t,t:s,bindingCandidates:r}){return a.jsx(Ef,{value:n,onChange:e,candidates:t,placeholder:s("layout_editor.recipe.modal_placeholder"),testid:"g7le-widget-modal-picker",t:s,bindingCandidates:r})}function a8({value:n,onChange:e,t,bindingCandidates:s}){const r=typeof n=="string"?n:n==null?"":String(n);return a.jsx("div",{className:"g7le-widget g7le-widget--i18n-text","data-testid":"g7le-widget-i18n-text",style:{flex:1,minWidth:100,width:"100%"},children:a.jsx(ks,{value:r,onChange:o=>e(o===""?void 0:o),t,placeholder:t("layout_editor.recipe.i18n_text_placeholder"),testidPrefix:"g7le-widget-i18n-text-field",candidates:s,enableExpressionTree:!0,expressionTreeCollapsible:!0})})}function i8({value:n,onChange:e,candidates:t,t:s}){const r=n==null?"":String(n),o=r.split(",").map(u=>u.trim()).filter(Boolean),l=Array.isArray(t)&&t.length>0,d=u=>{if(!u)return;const f=[...o,u];e(f.join(", "))};return a.jsxs("div",{className:"g7le-widget g7le-widget--binding-list","data-testid":"g7le-widget-binding-list",style:{display:"flex",flexDirection:"column",gap:4,width:"100%"},children:[a.jsx("input",{type:"text","data-testid":"g7le-widget-binding-list-input",value:r,placeholder:s("layout_editor.recipe.datasource_placeholder"),onChange:u=>e(u.target.value===""?void 0:u.target.value),style:Sk}),l?a.jsxs("select",{className:"g7le-widget g7le-widget--picker","data-testid":"g7le-widget-binding-list-add",value:"",onChange:u=>{d(u.target.value),u.target.value=""},style:{..._k,minWidth:0},children:[a.jsx("option",{value:"",children:s("layout_editor.recipe.pick_from_list")}),t.map(u=>a.jsx("option",{value:u.value,children:u.label},u.value))]}):null]})}function l8({value:n,onChange:e}){const t=n==null?"":String(n);return a.jsx("input",{type:"text",className:"g7le-widget g7le-widget--text","data-testid":"g7le-widget-text",value:t,onChange:s=>e(s.target.value===""?void 0:s.target.value),style:Sk})}const _k={padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",minWidth:140,width:"100%"},Sk={flex:1,padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,minWidth:100,width:"100%"},kk={display:"flex",gap:4,alignItems:"flex-start",width:"100%"},Ck={padding:"4px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#64748b",cursor:"pointer"};function c8(n){if(n==null)return"null";if(Array.isArray(n))return"list";switch(typeof n){case"number":return"number";case"boolean":return"boolean";case"string":return"string";default:return"object"}}function jk(n){switch(n){case"string":return"";case"number":return 0;case"boolean":return!1;case"null":return null;case"list":return[];case"object":return{};default:return null}}function Pm(n){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(n)}function d8(n,e,t){return e.includes(t)?"self":n.includes(t)?"inherited":"self"}function u8(n){const e=n.state&&typeof n.state=="object"&&Object.keys(n.state).length>0,t=n.initLocal&&typeof n.initLocal=="object"?n.initLocal:void 0;if(!e)return{initLocal:t??{},migrated:!1};const s={...n.state};if(t)for(const[r,o]of Object.entries(t))s[r]=o;return{initLocal:s,migrated:!0}}const Ek=[{kind:"string",labelKey:"layout_editor.initstate.kind_string"},{kind:"number",labelKey:"layout_editor.initstate.kind_number"},{kind:"boolean",labelKey:"layout_editor.initstate.kind_boolean"},{kind:"null",labelKey:"layout_editor.initstate.kind_null"},{kind:"list",labelKey:"layout_editor.initstate.kind_list"},{kind:"object",labelKey:"layout_editor.initstate.kind_object"}];function Va({value:n,onChange:e,t,path:s,scope:r,depth:o=0,renderStringLeaf:l}){const d=c8(n),u=f=>{e(jk(f))};return a.jsxs("div",{className:"g7le-initstate-value",style:{paddingLeft:o>0?12:0,minWidth:0},children:[a.jsxs("div",{style:p8,children:[a.jsx("select",{"data-testid":`g7le-initstate-type-${s}`,value:d,onChange:f=>u(f.target.value),style:Rk,children:Ek.map(({kind:f,labelKey:g})=>a.jsx("option",{value:f,children:t(g)},f))}),d==="string"?l?a.jsx("div",{style:{flex:1,minWidth:0},children:l({value:String(n??""),onChange:f=>e(f),testidPrefix:`g7le-initstate-value-${s}`})}):a.jsx("input",{type:"text","data-testid":`g7le-initstate-value-${s}`,value:String(n??""),onChange:f=>e(f.target.value),style:Ak}):d==="number"?a.jsx("input",{type:"number","data-testid":`g7le-initstate-value-${s}`,value:typeof n=="number"?n:"",onChange:f=>{const g=parseFloat(f.target.value);e(Number.isNaN(g)?0:g)},style:Ak}):d==="boolean"?a.jsx(_f,{checked:!!n,onChange:e,testid:`g7le-initstate-value-${s}`,label:t(n?"layout_editor.overlay.on":"layout_editor.overlay.off")}):d==="null"?a.jsx("span",{"data-testid":`g7le-initstate-value-${s}`,style:g8,children:"null"}):null]}),d==="list"?a.jsxs("div",{style:Tk,children:[n.map((f,g)=>a.jsxs("div",{style:h8,children:[a.jsxs("span",{style:m8,children:["[",g,"]"]}),a.jsx("div",{style:{flex:1,minWidth:0},children:a.jsx(Va,{value:f,onChange:h=>{const b=n.slice();b[g]=h,e(b)},t,path:`${s}.${g}`,scope:r,depth:o+1,renderStringLeaf:l})}),a.jsx("button",{type:"button","data-testid":`g7le-initstate-item-remove-${s}.${g}`,onClick:()=>e(n.filter((h,b)=>b!==g)),style:$k,children:"✕"})]},g)),a.jsxs("button",{type:"button","data-testid":`g7le-initstate-item-add-${s}`,onClick:()=>e([...n,""]),style:Nk,children:["+ ",t("layout_editor.initstate.add_item")]})]}):null,d==="object"?a.jsx(f8,{value:n,onChange:e,t,path:s,scope:r,depth:o+1,renderStringLeaf:l}):null]})}function f8({value:n,onChange:e,t,path:s,scope:r,depth:o,renderStringLeaf:l}){const[d,u]=w.useState(""),[f,g]=w.useState("string"),[h,b]=w.useState(null),y=Object.entries(n),v=()=>{const x=d.trim();if(!x){b(t("layout_editor.initstate.name_required"));return}if(!Pm(x)){b(t("layout_editor.initstate.name_invalid"));return}if(x in n){b(t("layout_editor.initstate.name_duplicate"));return}e({...n,[x]:jk(f)}),u(""),b(null)};return a.jsxs("div",{style:Tk,children:[y.map(([x,S])=>a.jsxs("div",{style:y8,children:[a.jsx("code",{style:b8,children:x}),a.jsx("div",{style:{flex:1,minWidth:0},children:a.jsx(Va,{value:S,onChange:_=>e({...n,[x]:_}),t,path:`${s}.${x}`,scope:r,depth:o,renderStringLeaf:l})}),a.jsx("button",{type:"button","data-testid":`g7le-initstate-subremove-${s}.${x}`,onClick:()=>{const _={...n};delete _[x],e(_)},style:$k,children:"✕"})]},x)),a.jsxs("div",{style:x8,children:[a.jsx("input",{type:"text","data-testid":`g7le-initstate-subkey-input-${s}`,value:d,placeholder:t("layout_editor.initstate.subkey_name"),onChange:x=>{u(x.target.value),h&&b(null)},onKeyDown:x=>{x.key==="Enter"&&(x.preventDefault(),v())},"aria-invalid":h?!0:void 0,style:{...v8,...h?w8:null}}),a.jsx("select",{"data-testid":`g7le-initstate-subkey-kind-${s}`,value:f,onChange:x=>g(x.target.value),"aria-label":t("layout_editor.initstate.value_kind"),style:Rk,children:Ek.map(({kind:x,labelKey:S})=>a.jsx("option",{value:x,children:t(S)},x))}),a.jsxs("button",{type:"button","data-testid":`g7le-initstate-subkey-add-${s}`,onClick:v,style:Nk,children:["+ ",t("layout_editor.initstate.add_subkey")]})]}),h?a.jsx("p",{"data-testid":`g7le-initstate-subkey-error-${s}`,style:_8,children:h}):null]})}const p8={display:"flex",gap:6,alignItems:"center",minWidth:0},Rk={padding:"4px 6px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,color:"#64748b"},Ak={flex:1,minWidth:0,padding:"4px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,boxSizing:"border-box"},g8={fontSize:12,color:"#94a3b8",fontFamily:"monospace"},Tk={display:"flex",flexDirection:"column",gap:6,marginTop:6,paddingLeft:8,borderLeft:"2px solid #e2e8f0"},h8={display:"flex",gap:6,alignItems:"flex-start",minWidth:0},m8={fontSize:11,color:"#94a3b8",minWidth:28,paddingTop:4},y8={display:"flex",gap:6,alignItems:"flex-start",minWidth:0},b8={fontSize:11,color:"#475569",fontFamily:"monospace",minWidth:72,paddingTop:4},$k={border:"none",background:"transparent",color:"#94a3b8",cursor:"pointer",fontSize:12},Nk={alignSelf:"flex-start",padding:"2px 8px",fontSize:11,border:"1px dashed #94a3b8",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},x8={display:"flex",gap:6,alignItems:"center"},v8={padding:"4px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6},w8={border:"1px solid #dc2626"},_8={margin:"2px 0 0",fontSize:11,color:"#dc2626"},S8=new Set(["text","data-chip","number"]),k8=new Set(["select","toggle","page-picker","datasource-picker","state-key-picker","modal-picker","component-target-picker","tag-input","locale-picker","i18n-text","segmented","slider","color","image"]);function C8(n,e,t){return typeof n!="string"?t:n.startsWith("$t:")?e(n.slice(3)):n}function j8(n,e){if(n==="page-picker")return e.pageCandidates;if(n==="datasource-picker")return e.dataSourceCandidates;if(n==="state-key-picker")return e.stateKeyCandidates;if(n==="modal-picker")return e.modalCandidates}function E8({param:n,value:e,t,pools:s,onChange:r,testIdPrefix:o,renderActionList:l,siblingValues:d}){const u=C8(n.label,t,n.key);if(n.advanced)return a.jsxs("div",{"data-testid":`${o}-locked-${n.key}`,style:M8,children:[a.jsx("span",{style:z8,children:u}),a.jsxs("span",{style:P8,children:["[",t("layout_editor.action.advanced"),"] ",t("layout_editor.init_actions.advanced_param_hint")]})]});if(n.widget==="action-list"&&l){const h=Array.isArray(e)?e.filter(b=>!!b&&typeof b=="object"):[];return a.jsxs("div",{"data-testid":`${o}-param-${n.key}`,style:{display:"flex",flexDirection:"column",gap:4},children:[a.jsx("span",{style:il,children:u}),l(h,b=>r(b.length===0?void 0:b),`${o}-${n.key}`,n.key)]})}if(n.widget==="branch-list"&&l){const h=Array.isArray(e)?e.filter(b=>!!b&&typeof b=="object"):[];return a.jsxs("div",{"data-testid":`${o}-param-${n.key}`,style:{display:"flex",flexDirection:"column",gap:4},children:[a.jsx("span",{style:il,children:u}),a.jsx(R8,{branches:h,onChange:b=>r(b.length===0?void 0:b),t,pools:s,renderActionList:l,testIdPrefix:`${o}-${n.key}`})]})}if(n.widget==="key-value")return a.jsxs("div",{"data-testid":`${o}-param-${n.key}`,style:{display:"flex",flexDirection:"column",gap:4},children:[a.jsx("span",{style:il,children:u}),a.jsx(D8,{value:e,onChange:r,t,candidates:s.bindingCandidates,testIdPrefix:`${o}-kv-${n.key}`})]});if(n.widget==="state-key-value")return a.jsxs("div",{"data-testid":`${o}-param-${n.key}`,style:{display:"flex",flexDirection:"column",gap:4},children:[a.jsx("span",{style:il,children:u}),a.jsx(I8,{value:e,onChange:r,t,candidates:s.bindingCandidates,stateKeyCandidates:s.stateKeyCandidates,param:n,siblingTarget:d?.target,testIdPrefix:`${o}-skv-${n.key}`})]});if(S8.has(n.widget??"")||!k8.has(n.widget??""))return a.jsxs("div",{"data-testid":`${o}-param-${n.key}`,style:Ik,children:[a.jsx("span",{style:il,children:u}),a.jsx("div",{style:{flex:1,minWidth:0},children:a.jsx(gn,{value:typeof e=="string"?e:e==null?"":String(e),onChange:h=>r(h===""?void 0:h),t,candidates:s.bindingCandidates,placeholder:n.widget==="number"?t("layout_editor.action_param.number_placeholder"):void 0,testidPrefix:`${o}-chip-${n.key}`})})]});const g=qa(n.widget);return a.jsxs("div",{"data-testid":`${o}-param-${n.key}`,style:Ik,children:[a.jsx("span",{style:il,children:u}),a.jsx("div",{style:{flex:1,minWidth:0},children:g?a.jsx(g,{control:{...n},value:e,onChange:r,t,candidates:j8(n.widget,s),bindingCandidates:s.bindingCandidates}):a.jsx(gn,{value:typeof e=="string"?e:e==null?"":String(e),onChange:h=>r(h===""?void 0:h),t,candidates:s.bindingCandidates,testidPrefix:`${o}-chip-${n.key}`})})]})}function R8({branches:n,onChange:e,t,pools:s,renderActionList:r,testIdPrefix:o}){const l=b=>Array.isArray(b)?b.filter(y=>!!y&&typeof y=="object"):b&&typeof b=="object"?[b]:[],d=b=>{if(b.length!==0)return b.length===1?b[0]:b},u=(b,y)=>{const v=n.slice();v[b]=y,e(v)},f=b=>{e(n.filter((y,v)=>v!==b))},g=(b,y)=>{if(y<0||y>=n.length)return;const v=n.slice(),[x]=v.splice(b,1);v.splice(y,0,x),e(v)},h=()=>{e([...n,{if:"",then:void 0}])};return a.jsxs("div",{"data-testid":`${o}-branches`,style:{display:"flex",flexDirection:"column",gap:8},children:[n.map((b,y)=>{const v=typeof b.if=="string"?b.if:"",x=l(b.then);return a.jsxs("div",{"data-testid":`${o}-branch-${y}`,style:A8,children:[a.jsxs("div",{style:T8,children:[a.jsxs("span",{style:$8,children:[t(v?"layout_editor.action_recipe.conditions.branch_when":"layout_editor.action_recipe.conditions.branch_else")," ",y+1]}),a.jsxs("span",{style:{display:"flex",gap:4},children:[a.jsx("button",{type:"button","data-testid":`${o}-branch-${y}-up`,onClick:()=>g(y,y-1),disabled:y===0,style:Bm,title:t("layout_editor.action_recipe.conditions.move_up"),children:"↑"}),a.jsx("button",{type:"button","data-testid":`${o}-branch-${y}-down`,onClick:()=>g(y,y+1),disabled:y===n.length-1,style:Bm,title:t("layout_editor.action_recipe.conditions.move_down"),children:"↓"}),a.jsx("button",{type:"button","data-testid":`${o}-branch-${y}-remove`,onClick:()=>f(y),style:Bm,title:t("layout_editor.action_recipe.conditions.remove_branch"),children:"✕"})]})]}),a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:3},children:[a.jsx("span",{style:Dk,children:t("layout_editor.action_recipe.conditions.param_if")}),a.jsx(gn,{value:v,onChange:S=>u(y,{...b,if:S}),t,candidates:s.bindingCandidates,testidPrefix:`${o}-branch-${y}-if`})]}),a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:3},children:[a.jsx("span",{style:Dk,children:t("layout_editor.action_recipe.conditions.param_then")}),r(x,S=>u(y,{...b,then:d(S)}),`${o}-branch-${y}-then`)]})]},y)}),a.jsxs("button",{type:"button","data-testid":`${o}-add-branch`,onClick:h,style:N8,children:["+ ",t("layout_editor.action_recipe.conditions.add_branch")]})]})}const A8={border:"1px solid #e2e8f0",borderRadius:6,padding:8,display:"flex",flexDirection:"column",gap:6,background:"#f8fafc"},T8={display:"flex",justifyContent:"space-between",alignItems:"center"},$8={fontSize:12,fontWeight:700,color:"#475569"},Dk={fontSize:11,color:"#64748b"},Bm={border:"1px solid #cbd5e1",background:"#fff",borderRadius:4,width:22,height:22,cursor:"pointer",fontSize:12,lineHeight:"1",color:"#475569"},N8={border:"1px dashed #94a3b8",background:"#fff",borderRadius:6,padding:"6px 10px",cursor:"pointer",fontSize:12,color:"#475569",alignSelf:"flex-start"};function D8({value:n,onChange:e,t,candidates:s,testIdPrefix:r,renderKeyInput:o}){const l=n&&typeof n=="object"&&!Array.isArray(n)?Object.entries(n).map(([d,u])=>({key:d,value:typeof u=="string"?u:u==null?"":String(u)})):[];return a.jsx(kf,{value:l,onChange:d=>{const u={};for(const f of d)f.key.trim()!==""&&(u[f.key]=f.value??"");e(Object.keys(u).length===0?void 0:u)},keyField:"key",valueField:"value",t,candidates:s,testidPrefix:r,keyPlaceholder:t("layout_editor.action_param.key_placeholder"),valuePlaceholder:t("layout_editor.action_param.value_placeholder"),addLabel:t("layout_editor.action_param.add_pair"),renderKeyInput:o})}function I8({value:n,onChange:e,t,candidates:s,stateKeyCandidates:r,param:o,siblingTarget:l,testIdPrefix:d}){const u=n&&typeof n=="object"&&!Array.isArray(n)?Object.entries(n):[],f=typeof l=="string"?l:"";if((f.startsWith("_local.")||f.startsWith("global.")||f.startsWith("$parent._local.")||f.startsWith("$root._local."))&&u.length===1&&u[0][0]==="value"){const _=u[0][1];return a.jsx("div",{"data-testid":`${d}-path-value`,style:{display:"flex",flexDirection:"column",gap:4},children:a.jsx(Va,{value:_,onChange:A=>e(A===void 0?void 0:{value:A}),t,path:"value",scope:`${d}-path-value-val`,renderStringLeaf:A=>a.jsx(gn,{value:A.value,onChange:A.onChange,t,candidates:s,testidPrefix:A.testidPrefix})})})}const b=(_,A)=>{const C={};for(const[j,E]of u)C[j]=j===_?A:E;e(Object.keys(C).length===0?void 0:C)},y=_=>{const A={};for(const[C,j]of u)C!==_&&(A[C]=j);e(Object.keys(A).length===0?void 0:A)},[v,x]=w.useState(""),S=()=>{const _=v.trim();if(_===""||u.some(([C])=>C===_))return;const A={};for(const[C,j]of u)A[C]=j;A[_]="",e(A),x("")};return a.jsxs("div",{"data-testid":d,style:{display:"flex",flexDirection:"column",gap:6},children:[u.map(([_,A])=>a.jsxs("div",{"data-testid":`${d}-row-${_}`,style:{display:"flex",gap:6,alignItems:"flex-start",border:"1px solid #e2e8f0",borderRadius:8,padding:8},children:[a.jsxs("div",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:6},children:[a.jsx("div",{style:{minWidth:0},children:a.jsx(zm,{control:{...o},value:_,onChange:C=>{const j=C==null?"":String(C);if(j===""||j===_||u.some(([T])=>T===j))return;const E={};for(const[T,D]of u)E[T===_?j:T]=D;e(E)},t,candidates:r})}),a.jsx("div",{style:{minWidth:0},children:a.jsx(Va,{value:A,onChange:C=>b(_,C),t,path:_,scope:`${d}-val`,renderStringLeaf:C=>a.jsx(gn,{value:C.value,onChange:C.onChange,t,candidates:s,testidPrefix:C.testidPrefix})})})]}),a.jsx("button",{type:"button","data-testid":`${d}-remove-${_}`,onClick:()=>y(_),title:t("layout_editor.page_settings.seo.remove"),"aria-label":t("layout_editor.page_settings.seo.remove"),style:{flex:"0 0 auto",padding:"4px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#64748b",cursor:"pointer"},children:"✕"})]},_)),a.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center"},children:[a.jsx("div",{style:{flex:1,minWidth:0},children:a.jsx(zm,{control:{...o},value:v,onChange:_=>x(_==null?"":String(_)),t,candidates:r})}),a.jsxs("button",{type:"button","data-testid":`${d}-add`,onClick:S,style:{flex:"0 0 auto",padding:"5px 10px",fontSize:12,border:"1px dashed #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer"},children:["+ ",t("layout_editor.action_param.add_pair")]})]})]})}function Hm({raw:n,recipe:e,values:t,t:s,pools:r,onChange:o,testIdPrefix:l,renderActionList:d}){const u=(f,g)=>{const h={...t,[f]:g},b=ff(e,h),y=bm(n);o(y?SS(b,y):b)};return a.jsx(a.Fragment,{children:e.params.filter(f=>L8(f,t)).map(f=>a.jsx(E8,{param:f,value:t[f.key],t:s,pools:r,onChange:g=>u(f.key,g),testIdPrefix:l,renderActionList:d,siblingValues:t},f.key))})}function L8(n,e){const t=n.dependsOn;return!t||typeof t!="object"||typeof t.param!="string"?!0:e[t.param]===t.equals}function O8({raw:n,t:e,onChange:t,testIdPrefix:s,candidates:r}){const[o,l]=w.useState(!1);return a.jsxs("div",{"data-testid":`${s}-if`,style:B8,children:[a.jsxs("button",{type:"button",onClick:()=>l(d=>!d),style:H8,children:["▸ ",e("layout_editor.init_actions.if_label")]}),o?a.jsx("div",{"data-testid":`${s}-if-input`,style:{minWidth:0},children:a.jsx(gn,{value:bm(n)??"",onChange:d=>t(SS(n,d)),t:e,candidates:r,placeholder:e("layout_editor.init_actions.if_placeholder"),testidPrefix:`${s}-if-chip`})}):null]})}const Ik={display:"flex",alignItems:"center",gap:8,minWidth:0},il={fontSize:11,color:"#64748b",minWidth:80},M8={display:"flex",alignItems:"center",gap:8,padding:"4px 0"},z8={fontSize:11,color:"#64748b",minWidth:80},P8={fontSize:11,color:"#92400e"},B8={display:"flex",flexDirection:"column",gap:4},H8={textAlign:"left",border:"none",background:"transparent",color:"#475569",cursor:"pointer",fontSize:11,padding:0};function W8(n,e,t){if(!e)return t("layout_editor.action.source_core");const s=n?.[e],r=s&&typeof s=="object"&&s.__source?s.__source:null;return!r||r.kind==="core"?t("layout_editor.action.source_core"):r.id??t(`layout_editor.action.source_${r.kind}`)}function U8(n,e,t){const s=Zi(n,e);if(s.kind==="preset"){const r=e.find(o=>o.id===s.recipeId);return _S(r??null,s.values,o=>t(o.startsWith("$t:")?o.slice(3):o))}return typeof n.handler=="string"?n.handler:t("layout_editor.action_list.unknown")}function Qr({actions:n,onChange:e,t,recipes:s,chipContext:r,actionChipCandidates:o,addContext:l="init",renderAddPicker:d,renderEditor:u,candidatePools:f,showSourceBadge:g=!1,canDrag:h,canDropAt:b,isLocked:y,hideAddPicker:v=!1,testIdPrefix:x="g7le-action-list"}){const S=qe.useMemo(()=>Lc(s),[s]),_=qe.useMemo(()=>{if(r==null||r==="init")return f;const Z=E_(r,t,o??null);if(Z.length===0)return f;const Y=f??{},U=new Set((Y.bindingCandidates??[]).map(te=>te.expression)),B=Z.filter(te=>!U.has(te.expression));return B.length===0?f:{...Y,bindingCandidates:[...B,...Y.bindingCandidates??[]]}},[r,o,f,t]),[A,C]=w.useState(null),[j,E]=w.useState(null),T=w.useCallback((Z,Y)=>{if(Z===Y||Z<0||Y<0||Z>=n.length||Y>=n.length)return;const U=n.slice(),[B]=U.splice(Z,1);U.splice(Y,0,B),e(U)},[n,e]),D=km({length:n.length,onMove:T,canDrag:h,canDropAt:b}),I=w.useCallback(Z=>{e(n.filter((Y,U)=>U!==Z))},[n,e]),W=w.useCallback((Z,Y)=>{const U=n.slice();U[Z]=Y,e(U)},[n,e]),z=w.useCallback(Z=>{e([...n,Z])},[n,e]),H=w.useCallback((Z,Y)=>{const U=Zi(Z,S),B=U.kind==="preset"?S.find(q=>q.id===U.recipeId)??null:null;if(!B)return null;const te=U.kind==="preset"?U.values:{};return a.jsxs("div",{style:K8,children:[a.jsx(Hm,{raw:Z,recipe:B,values:te,t,pools:_??{},onChange:Y,testIdPrefix:`${x}-edit`,renderActionList:(q,M,N,V)=>{const ee=V==="onSuccess"?"response":V==="onError"?"error":void 0;return a.jsx(Qr,{actions:q,onChange:M,t,recipes:s,chipContext:ee,actionChipCandidates:ee?o:void 0,candidatePools:ee?f:_,addContext:l,showSourceBadge:g,testIdPrefix:N})}}),a.jsx(O8,{raw:Z,t,onChange:Y,testIdPrefix:`${x}-edit`,candidates:_?.bindingCandidates})]})},[S,t,_,f,o,x,s,l,g]),G=u??(s?H:void 0),F=v?null:d?d(z):s?a.jsx(B5,{recipes:s,t,onAdd:z,context:l,testIdPrefix:`${x}-add-picker`}):null;return a.jsxs("div",{className:x,"data-testid":x,children:[a.jsxs("ul",{style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:6},children:[n.map((Z,Y)=>{const U=Zi(Z,S),B=U.kind==="preset"?U.recipeId:null,te=B?S.find(ee=>ee.id===B)??null:null,q=te===null,M=y?.(Y)??!1,N=bm(Z)!==null,V=G?G(Z,ee=>W(Y,ee)):null;return a.jsxs(qe.Fragment,{children:[M?null:a.jsx("li",{"aria-hidden":"true",style:{listStyle:"none",margin:0,padding:0},children:a.jsx(sl,{active:D.isDropTarget(Y),testid:`${x}-dropline-${Y}`})}),a.jsxs("li",{"data-testid":`${x}-item-${Y}`,"data-drag-source":D.dragIndex===Y?"true":void 0,style:{border:"1px solid #e2e8f0",borderRadius:8,padding:"8px 10px",...D.dragIndex===Y?{opacity:.5}:{}},onDragOver:D.dragging&&!M?ee=>{ee.preventDefault();const se=ee.currentTarget.getBoundingClientRect();D.onDragOverItem(Y,ee.clientY<se.top+se.height/2?"before":"after")}:void 0,onDrop:D.dragging&&!M?ee=>{ee.preventDefault(),D.onDrop()}:void 0,children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[M?a.jsx("span",{style:{fontSize:12},children:"🔒"}):a.jsx("span",{"data-testid":`${x}-drag-${Y}`,style:{color:"#94a3b8",cursor:"grab",fontSize:14,userSelect:"none"},draggable:!0,onDragStart:()=>D.onDragStart(Y),onDragEnd:D.onDragEnd,"aria-label":t("layout_editor.action_list.drag_reorder"),role:"button",children:"⠿"}),a.jsx("span",{style:{flex:1,minWidth:0,fontSize:13},"data-testid":`${x}-summary-${Y}`,children:U8(Z,S,t)}),g?a.jsxs("span",{"data-testid":`${x}-source-${Y}`,style:q8,children:["〔",W8(s,B,t),"〕"]}):null,N?a.jsxs("span",{"data-testid":`${x}-cond-badge-${Y}`,style:F8,children:["〔",t("layout_editor.init_actions.cond_badge"),"〕"]}):null,q?a.jsxs("span",{"data-testid":`${x}-advanced-${Y}`,style:V8,children:["[",t("layout_editor.action.advanced"),"]"]}):null,!M&&V?a.jsxs("button",{type:"button","data-testid":`${x}-edit-${Y}`,onClick:()=>E(j===Y?null:Y),"aria-label":t("layout_editor.init_actions.edit"),title:t("layout_editor.init_actions.edit"),style:j===Y?G8:Lk,children:["✎ ",t("layout_editor.init_actions.edit")]}):null,a.jsx("button",{type:"button","data-testid":`${x}-code-${Y}`,onClick:()=>C(A===Y?null:Y),"aria-label":t("layout_editor.action_list.view_code"),title:t("layout_editor.action_list.view_code"),style:A===Y?Y8:Wm,children:"</>"}),M?null:a.jsx("button",{type:"button","data-testid":`${x}-remove-${Y}`,onClick:()=>I(Y),"aria-label":t("layout_editor.action_list.remove"),title:t("layout_editor.action_list.remove"),style:X8,children:"✕"})]}),te?a.jsx(Z5,{action:Z,recipe:te,values:U.kind==="preset"?U.values:{},t,showCodeButton:!1,testIdPrefix:`${x}-preview-${Y}`}):null,j===Y&&!M&&V?a.jsx("div",{"data-testid":`${x}-edit-body-${Y}`,children:V}):null,u&&j!==Y?u(Z,ee=>W(Y,ee)):null,A===Y?a.jsx("pre",{"data-testid":`${x}-code-view-${Y}`,style:{margin:"8px 0 0",padding:8,background:"#0f172a",color:"#e2e8f0",borderRadius:6,fontSize:12,overflow:"auto"},children:JSON.stringify(Z,null,2)}):null]})]},Y)}),a.jsx("li",{"aria-hidden":"true",style:{listStyle:"none",margin:0,padding:0},children:a.jsx(sl,{active:D.isDropTarget(n.length),testid:`${x}-dropline-end`})})]}),F?a.jsx("div",{style:{marginTop:8},children:F}):null]})}const q8={fontSize:10,color:"#64748b",whiteSpace:"nowrap"},F8={fontSize:10,color:"#7c3aed",whiteSpace:"nowrap"},V8={fontSize:10,color:"#92400e",whiteSpace:"nowrap"},K8={display:"flex",flexDirection:"column",gap:6,paddingTop:6,borderTop:"1px dashed #e2e8f0",marginTop:6},Lk={flex:"0 0 auto",padding:"3px 8px",fontSize:11,fontWeight:500,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer",whiteSpace:"nowrap",lineHeight:1.4},G8={...Lk,background:"#eff6ff",borderColor:"#bfdbfe",color:"#2563eb"},Wm={flex:"0 0 auto",width:26,height:24,display:"inline-flex",alignItems:"center",justifyContent:"center",fontSize:11,border:"1px solid #e2e8f0",borderRadius:6,background:"#fff",color:"#64748b",cursor:"pointer",fontFamily:"ui-monospace, monospace"},Y8={...Wm,background:"#0f172a",borderColor:"#0f172a",color:"#e2e8f0"},X8={...Wm,color:"#dc2626",borderColor:"#fecaca",fontFamily:"inherit"};function Ok(n){const e=n.__source;return e&&typeof e=="object"?e:null}function J8({actions:n,onChange:e,recipes:t,t:s,bindingCandidates:r,pageCandidates:o,dataSourceCandidates:l,stateKeyCandidates:d,modalCandidates:u}){const f=w.useMemo(()=>({pageCandidates:o,dataSourceCandidates:l,stateKeyCandidates:d,modalCandidates:u,bindingCandidates:r}),[o,l,d,u,r]),g=w.useMemo(()=>n.filter(x=>Ok(x)?.kind==="base"),[n]),h=w.useMemo(()=>n.filter(x=>Ok(x)?.kind!=="base"),[n]),b=g.length>0,y=w.useCallback(x=>{e(b?[...g,...x]:x)},[e,b,g]),v=w.useCallback(()=>{},[]);return a.jsxs("div",{className:"g7le-init-actions-form","data-testid":"g7le-init-actions-form",style:Z8,children:[a.jsx("p",{style:Q8,children:s("layout_editor.page_settings.init_actions.heading")}),b?a.jsxs(a.Fragment,{children:[a.jsxs("div",{"data-testid":"g7le-init-action-group-base",style:Mk,children:[a.jsx("div",{style:zk,children:s("layout_editor.init_actions.group_base")}),a.jsx(Qr,{actions:g,onChange:v,t:s,recipes:t,candidatePools:f,addContext:"init",showSourceBadge:!0,isLocked:()=>!0,hideAddPicker:!0,testIdPrefix:"g7le-init-action-base"}),a.jsxs("p",{"data-testid":"g7le-init-action-base-hint",style:eP,children:["ⓘ ",s("layout_editor.init_actions.base_readonly_hint")]})]}),a.jsxs("div",{"data-testid":"g7le-init-action-group-self",style:Mk,children:[a.jsx("div",{style:zk,children:s("layout_editor.init_actions.group_self")}),h.length===0?a.jsx("p",{style:Pk,children:s("layout_editor.init_actions.empty_self")}):null,a.jsx(Qr,{actions:h,onChange:y,t:s,recipes:t,candidatePools:f,addContext:"init",showSourceBadge:!0,testIdPrefix:"g7le-init-action-self"})]}),a.jsxs("p",{"data-testid":"g7le-init-action-merge-order",style:tP,children:["ⓘ ",s("layout_editor.init_actions.merge_order")]})]}):a.jsxs(a.Fragment,{children:[n.length===0?a.jsx("p",{"data-testid":"g7le-init-action-empty",style:Pk,children:s("layout_editor.init_actions.empty")}):null,a.jsx(Qr,{actions:n,onChange:e,t:s,recipes:t,candidatePools:f,addContext:"init",showSourceBadge:!0,testIdPrefix:"g7le-init-action"})]})]})}const Z8={display:"flex",flexDirection:"column",gap:12,minWidth:0},Q8={margin:0,fontSize:13,fontWeight:700,color:"#0f172a"},Mk={border:"1px solid #e2e8f0",borderRadius:10,padding:10,display:"flex",flexDirection:"column",gap:8},zk={fontSize:12,fontWeight:700,color:"#475569"},eP={margin:0,fontSize:11,color:"#64748b"},Pk={margin:0,fontSize:12,color:"#94a3b8"},tP={margin:0,fontSize:11,color:"#64748b"};function nP(n){return n==="spinner"?new Set(["spinner","page"]):new Set(["skeleton"])}function Bk(n,e,t){return typeof n!="string"?t:n.startsWith("$t:")?e(n.slice(3)):n}function Hk({candidates:n,value:e,onSelect:t,styleKind:s,t:r,testIdPrefix:o="g7le-loading-component-picker"}){const l=Tc(),d=()=>{const u=l.open({ariaLabel:r("layout_editor.overlay.loading_picker.select"),width:520,maxHeightRatio:.7,content:a.jsx(sP,{candidates:n,value:e,styleKind:s,t:r,testIdPrefix:o,onPick:f=>{t(f),l.close(u)},onClose:()=>l.close(u)})})};return a.jsx("div",{className:o,"data-testid":o,style:{minWidth:0},children:a.jsxs("div",{style:rP,children:[a.jsx("span",{"data-testid":`${o}-current`,style:oP,children:e&&e.length>0?e:r("layout_editor.overlay.loading_picker.none")}),a.jsxs("button",{type:"button","data-testid":`${o}-open`,onClick:d,style:aP,children:["🔍 ",r("layout_editor.overlay.loading_picker.select")]})]})})}function sP({candidates:n,value:e,styleKind:t,t:s,testIdPrefix:r,onPick:o,onClose:l}){const[d,u]=w.useState(""),f=nP(t),g=w.useMemo(()=>{const h=d.trim().toLowerCase();return n.filter(b=>f.has(b.role)).filter(b=>h?Bk(b.label,s,b.name).toLowerCase().includes(h)||b.name.toLowerCase().includes(h):!0)},[n,t,d,s]);return a.jsxs("div",{"data-testid":`${r}-modal`,style:iP,children:[a.jsxs("div",{style:lP,children:[a.jsxs("span",{style:cP,children:["🔍 ",s("layout_editor.overlay.loading_picker.select")]}),a.jsx("button",{type:"button","data-testid":`${r}-close`,onClick:l,"aria-label":s("layout_editor.overlay.loading_picker.select"),style:dP,children:"✕"})]}),a.jsx("input",{type:"text","data-testid":`${r}-search`,value:d,placeholder:s("layout_editor.overlay.loading_picker.search"),onChange:h=>u(h.target.value),style:uP,autoFocus:!0}),g.length===0?a.jsx("p",{"data-testid":`${r}-empty`,style:bP,children:s("layout_editor.overlay.loading_picker.empty")}):a.jsx("ul",{style:fP,children:g.map(h=>a.jsx("li",{children:a.jsxs("button",{type:"button","data-testid":`${r}-item-${h.name}`,onClick:()=>o(h.name),style:{...pP,...e===h.name?gP:{}},children:[a.jsx("span",{style:hP,children:Bk(h.label,s,h.name)}),a.jsx("code",{style:mP,children:h.name}),a.jsx("span",{style:yP,children:h.role})]})},h.name))})]})}const rP={display:"flex",alignItems:"center",gap:6,minWidth:0},oP={flex:1,minWidth:0,fontSize:12,color:"#0f172a",fontFamily:"monospace"},aP={padding:"4px 10px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer",whiteSpace:"nowrap"},iP={display:"flex",flexDirection:"column",minHeight:0,padding:16,boxSizing:"border-box",fontFamily:"system-ui, -apple-system, sans-serif"},lP={display:"flex",alignItems:"center",gap:8,paddingBottom:8,borderBottom:"1px solid #e2e8f0",marginBottom:10},cP={flex:1,fontSize:14,fontWeight:700,color:"#0f172a",minWidth:0},dP={border:"none",background:"transparent",color:"#64748b",cursor:"pointer",fontSize:15,lineHeight:1,padding:4},uP={width:"100%",padding:"6px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,marginBottom:8,boxSizing:"border-box"},fP={listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:2,overflowY:"auto",minHeight:0},pP={display:"flex",alignItems:"center",gap:6,width:"100%",textAlign:"left",padding:"8px 10px",fontSize:12,border:"1px solid transparent",background:"transparent",cursor:"pointer",borderRadius:6},gP={border:"1px solid #3b82f6",background:"#eff6ff"},hP={flex:1,minWidth:0,color:"#0f172a"},mP={fontSize:10,color:"#94a3b8",fontFamily:"monospace"},yP={fontSize:10,color:"#64748b",background:"#f1f5f9",borderRadius:4,padding:"0 4px"},bP={margin:0,fontSize:12,color:"#94a3b8",padding:"8px 4px"};function Wk(n){return n===!0?{enabled:!0}:n===!1||n===void 0?{}:n}const xP=["opaque","blur","fade","skeleton","spinner"];function vP({value:n,patch:e,t,baseValue:s,ownValue:r,loadingComponents:o=[],progressiveDataSources:l=[],bindingCandidates:d}){const u=Wk(n),f=u.enabled??!1,g=!!s&&Object.keys(s).length>0,h=qa("component-target-picker"),[b,y]=w.useState((u.wait_for??[]).length>0),v=w.useCallback(j=>{const E={...Wk(n)};j(E),e(E)},[n,e]),x=r&&typeof r=="object"?r:n&&typeof n=="object"?n:{},S=w.useCallback(j=>g&&s!==void 0&&j in s&&!(j in x),[g,s,x]),_=w.useCallback(j=>{s&&v(E=>{E[j]=s[j]})},[s,v]),A=w.useCallback(j=>v(E=>{E.enabled=j}),[v]),C=u.target!==void 0?"region":"full";return a.jsxs("div",{className:"g7le-overlay-form","data-testid":"g7le-overlay-form",style:wP,children:[g?a.jsxs("p",{"data-testid":"g7le-overlay-inherit-banner",style:_P,children:["ⓘ ",t("layout_editor.overlay.inherit_banner")]}):null,a.jsxs("div",{style:Af,children:[a.jsx(Um,{label:t("layout_editor.overlay.enabled_label"),inherited:S("enabled"),hasInheritance:g,onOverride:()=>_("enabled"),testidKey:"enabled",t}),a.jsx(Sf,{disabled:S("enabled"),children:a.jsx(_f,{checked:f,onChange:A,testid:"g7le-overlay-enabled",ariaLabel:t("layout_editor.overlay.enabled_label"),label:t(f?"layout_editor.overlay.on":"layout_editor.overlay.off")})}),a.jsxs("p",{style:Tf,children:["ⓘ ",t("layout_editor.overlay.enabled_hint")]})]}),a.jsx(Sf,{disabled:!f,testid:"g7le-overlay-body",style:{display:"flex",flexDirection:"column",gap:16,minWidth:0},children:a.jsxs(a.Fragment,{children:[a.jsxs("div",{style:Af,children:[a.jsx(Um,{label:t("layout_editor.overlay.scope_label"),inherited:S("target"),hasInheritance:g,onOverride:()=>_("target"),testidKey:"target",t}),a.jsxs("div",{"data-testid":"g7le-overlay-scope",style:qm,children:[a.jsx(Rf,{active:C==="full",onClick:()=>v(j=>{delete j.target,delete j.fallback_target}),testid:"g7le-overlay-scope-full",children:t("layout_editor.overlay.scope_full")}),a.jsx(Rf,{active:C==="region",onClick:()=>v(j=>{j.target=j.target??""}),testid:"g7le-overlay-scope-region",children:t("layout_editor.overlay.scope_region")})]}),a.jsx(Sf,{disabled:C!=="region",testid:"g7le-overlay-region-box",style:jP,children:a.jsxs(a.Fragment,{children:[a.jsx(Ka,{label:t("layout_editor.overlay.target_label"),children:a.jsx("div",{"data-testid":"g7le-overlay-target-picker",children:h?a.jsx(h,{control:{label:t("layout_editor.overlay.target_label")},value:u.target??"",onChange:j=>v(E=>{E.target=typeof j=="string"?j:""}),t}):a.jsx("input",{type:"text","data-testid":"g7le-overlay-target-input",value:u.target??"",onChange:j=>v(E=>{E.target=j.target.value}),style:AP})})}),a.jsx(Ka,{label:t("layout_editor.overlay.fallback_label"),children:a.jsx("div",{"data-testid":"g7le-overlay-fallback-picker",children:h?a.jsx(h,{control:{label:t("layout_editor.overlay.fallback_label")},value:u.fallback_target??"",onChange:j=>v(E=>{const T=typeof j=="string"?j:"";T===""?delete E.fallback_target:E.fallback_target=T}),t}):null})}),a.jsxs("p",{style:Tf,children:["ⓘ ",t("layout_editor.overlay.fallback_hint")]})]})})]}),a.jsxs("div",{style:Af,children:[a.jsx(Um,{label:t("layout_editor.overlay.style_label"),inherited:S("style"),hasInheritance:g,onOverride:()=>_("style"),testidKey:"style",t}),a.jsx("div",{"data-testid":"g7le-overlay-style",style:qm,children:xP.map(j=>a.jsx(Rf,{active:(u.style??"opaque")===j,onClick:()=>v(E=>{E.style=j}),testid:`g7le-overlay-style-${j}`,children:t(`layout_editor.overlay.style_${j}`)},j))}),u.style==="skeleton"?a.jsxs("div",{style:Uk,children:[a.jsx(Ka,{label:t("layout_editor.overlay.skeleton_component"),children:a.jsx(Hk,{candidates:o,value:u.skeleton?.component,styleKind:"skeleton",onSelect:j=>v(E=>{E.skeleton={...E.skeleton,component:j}}),t,testIdPrefix:"g7le-overlay-skeleton-component"})}),a.jsx(Ka,{label:t("layout_editor.overlay.skeleton_animation"),children:a.jsx("div",{"data-testid":"g7le-overlay-skeleton-anim",style:qm,children:["wave","pulse","none"].map(j=>a.jsx(Rf,{active:(u.skeleton?.animation??"wave")===j,onClick:()=>v(E=>{E.skeleton={...E.skeleton,animation:j}}),testid:`g7le-overlay-skeleton-anim-${j}`,children:t(`layout_editor.overlay.anim_${j}`)},j))})}),a.jsx(Ka,{label:t("layout_editor.overlay.skeleton_count"),children:a.jsx("input",{type:"number","data-testid":"g7le-overlay-skeleton-count",value:u.skeleton?.iteration_count??"",onChange:j=>v(E=>{const T=parseInt(j.target.value,10);E.skeleton={...E.skeleton,iteration_count:Number.isNaN(T)?void 0:T}}),style:TP})})]}):null,u.style==="spinner"?a.jsxs("div",{style:Uk,children:[a.jsx(Ka,{label:t("layout_editor.overlay.spinner_component"),children:a.jsx(Hk,{candidates:o,value:u.spinner?.component,styleKind:"spinner",onSelect:j=>v(E=>{E.spinner={...E.spinner,component:j}}),t,testIdPrefix:"g7le-overlay-spinner-component"})}),a.jsx(Ka,{label:t("layout_editor.overlay.spinner_text"),children:a.jsx("div",{"data-testid":"g7le-overlay-spinner-text",style:{minWidth:0},children:a.jsx(ks,{value:u.spinner?.text??"",onChange:j=>v(E=>{E.spinner={...E.spinner,text:j===void 0||j===""?void 0:j}}),t,candidates:d,enableExpressionTree:!0,expressionTreeCollapsible:!0,testidPrefix:"g7le-overlay-spinner-text-field"})})})]}):null]}),a.jsxs("div",{style:Af,children:[a.jsxs("button",{type:"button","data-testid":"g7le-overlay-waitfor-toggle","aria-expanded":b,onClick:()=>y(j=>!j),style:DP,children:[b?"▾":"▸"," ",t("layout_editor.overlay.waitfor_label")]}),b?a.jsxs("div",{"data-testid":"g7le-overlay-waitfor-body",style:IP,children:[a.jsxs("p",{"data-testid":"g7le-overlay-waitfor-hint",style:Tf,children:["ⓘ ",t("layout_editor.overlay.waitfor_hint")]}),l.length===0?a.jsx("p",{"data-testid":"g7le-overlay-waitfor-empty",style:Tf,children:t("layout_editor.overlay.waitfor_empty")}):a.jsx("div",{"data-testid":"g7le-overlay-waitfor",style:{display:"flex",flexWrap:"wrap",gap:6},children:l.map(j=>{const E=(u.wait_for??[]).includes(j.id);return a.jsxs("label",{"data-testid":`g7le-overlay-waitfor-${j.id}`,style:$P(E),children:[a.jsx("input",{type:"checkbox",checked:E,onChange:()=>v(T=>{const D=new Set(T.wait_for??[]);D.has(j.id)?D.delete(j.id):D.add(j.id);const I=Array.from(D);I.length===0?delete T.wait_for:T.wait_for=I})}),a.jsx(gk,{option:j,testIdPrefix:`g7le-overlay-waitfor-${j.id}`})]},j.id)})})]}):null]}),g?a.jsxs("button",{type:"button","data-testid":"g7le-overlay-reset-inherit",onClick:()=>e(void 0),style:NP,children:["⟲ ",t("layout_editor.overlay.reset_inherit")]}):null]})})]})}function Rf({active:n,onClick:e,children:t,testid:s}){return a.jsx("button",{type:"button","data-testid":s,"aria-pressed":n,onClick:e,style:{...kP,...n?CP:{}},children:t})}function Um({label:n,inherited:e,hasInheritance:t,onOverride:s,testidKey:r,t:o}){return a.jsxs("div",{style:LP,children:[a.jsx("label",{style:SP,children:n}),t?e?a.jsxs(a.Fragment,{children:[a.jsxs("span",{"data-testid":`g7le-overlay-inherited-${r}`,style:OP,children:["〔",o("layout_editor.overlay.inherited_badge"),"〕"]}),a.jsx("button",{type:"button","data-testid":`g7le-overlay-override-${r}`,onClick:s,style:zP,children:o("layout_editor.overlay.override_field")})]}):a.jsxs("span",{"data-testid":`g7le-overlay-overridden-${r}`,style:MP,children:["〔",o("layout_editor.overlay.overridden_badge"),"〕"]}):null]})}function Ka({label:n,children:e}){return a.jsxs("div",{style:EP,children:[a.jsx("span",{style:RP,children:n}),a.jsx("div",{style:{flex:1,minWidth:0},children:e})]})}const wP={display:"flex",flexDirection:"column",gap:16,minWidth:0},_P={margin:0,fontSize:12,color:"#1d4ed8",background:"#eff6ff",padding:"8px 10px",borderRadius:6},Af={display:"flex",flexDirection:"column",gap:6,minWidth:0},SP={fontSize:13,fontWeight:600,color:"#0f172a"},Tf={margin:0,fontSize:11,color:"#94a3b8"},qm={display:"flex",gap:4,flexWrap:"wrap"},kP={padding:"4px 10px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},CP={border:"1px solid #3b82f6",background:"#eff6ff",color:"#1d4ed8"},jP={display:"flex",flexDirection:"column",gap:8,padding:8,border:"1px dashed #e2e8f0",borderRadius:8},Uk={display:"flex",flexDirection:"column",gap:8,padding:8,border:"1px dashed #e2e8f0",borderRadius:8},EP={display:"flex",alignItems:"center",gap:8,minWidth:0},RP={fontSize:11,color:"#64748b",minWidth:90},AP={width:"100%",padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,boxSizing:"border-box"},TP={width:80,padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6},$P=n=>({display:"inline-flex",alignItems:"center",gap:4,padding:"4px 8px",fontSize:12,border:`1px solid ${n?"#3b82f6":"#cbd5e1"}`,borderRadius:12,background:n?"#eff6ff":"#fff",cursor:"pointer"}),NP={alignSelf:"flex-start",padding:"6px 12px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},DP={alignSelf:"flex-start",padding:"4px 0",fontSize:13,fontWeight:600,color:"#0f172a",background:"transparent",border:"none",cursor:"pointer"},IP={display:"flex",flexDirection:"column",gap:6,paddingLeft:14,minWidth:0},LP={display:"flex",alignItems:"center",gap:8,flexWrap:"wrap",minWidth:0},OP={fontSize:11,color:"#64748b",background:"#f1f5f9",borderRadius:4,padding:"1px 6px"},MP={fontSize:11,color:"#0369a1",background:"#e0f2fe",borderRadius:4,padding:"1px 6px"},zP={padding:"2px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},PP="g7le:computed-effect-preview",BP={number:"layout_editor.computed.type_number",string:"layout_editor.computed.type_string",boolean:"layout_editor.computed.type_boolean",list:"layout_editor.computed.type_list",object:"layout_editor.computed.type_object",null:"layout_editor.computed.type_null"};function HP(n,e,t){if(e==="list"){const s=n,r=s.slice(0,2).map(o=>JSON.stringify(o)).join(", ");return s.length<=2?`[${r}]`:`[${r}, ${t("layout_editor.computed.list_more",{count:s.length})}]`}return e==="object"?JSON.stringify(n):e==="boolean"?n?"true":"false":e==="null"?t("layout_editor.computed.value_none"):String(n)}function qk({expr:n,computedKey:e,sampleContext:t,t:s,isEffect:r=!1,testIdPrefix:o="g7le-computed-preview"}){const l=uS(n,t),d=()=>{typeof window>"u"||!e||window.dispatchEvent(new CustomEvent(PP,{detail:{key:e}}))};return l.ok?a.jsxs("div",{className:o,"data-testid":o,style:WP,children:[a.jsx("span",{style:UP,children:s("layout_editor.computed.preview_label")}),a.jsx("span",{"data-testid":`${o}-value`,style:qP,children:HP(l.value,l.type,s)}),a.jsxs("span",{"data-testid":`${o}-type`,style:FP,children:["(",s(BP[l.type]),")"]}),r&&l.type==="boolean"?a.jsxs("button",{type:"button","data-testid":`${o}-effect`,onClick:d,style:VP,children:["▷ ",s("layout_editor.computed.effect_preview")]}):null]}):a.jsxs("div",{"data-testid":`${o}-error`,style:KP,children:["⚠ ",s("layout_editor.computed.preview_error")]})}const WP={display:"flex",alignItems:"center",flexWrap:"wrap",gap:6,minWidth:0},UP={fontSize:11,color:"#94a3b8"},qP={fontSize:12,color:"#0f172a",fontFamily:"monospace",wordBreak:"break-all"},FP={fontSize:10,color:"#64748b"},VP={padding:"2px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer"},KP={fontSize:12,color:"#b45309"},GP=[{op:"count",labelKey:"layout_editor.computed.op_count"},{op:"sum",labelKey:"layout_editor.computed.op_sum"},{op:"filter",labelKey:"layout_editor.computed.op_filter"},{op:"toOptions",labelKey:"layout_editor.computed.op_to_options"},{op:"nth",labelKey:"layout_editor.computed.op_nth"},{op:"firstOf",labelKey:"layout_editor.computed.op_first_of"},{op:"literal",labelKey:"layout_editor.computed.op_literal"}],YP=["=","!=",">","<",">=","<=","includes"],XP=new Set(["count","sum","filter"]);function Fk({model:n,onChange:e,t,dataSourceCandidates:s,bindingCandidates:r,existingKeys:o=[]}){const l=w.useCallback(y=>{const v={...n};y(v),e(v)},[n,e]),d=n.conditions??[],u=qa("datasource-picker"),f=n.key!==""&&o.includes(n.key),g=()=>l(y=>{y.conditions=[...y.conditions??[],{field:"",cmp:"=",value:""}]}),h=(y,v)=>l(x=>{const S=(x.conditions??[]).slice(),_={...S[y]};v(_),S[y]=_,x.conditions=S}),b=y=>l(v=>{v.conditions=(v.conditions??[]).filter((x,S)=>S!==y)});return a.jsxs("div",{className:"g7le-computed-custom","data-testid":"g7le-computed-custom",style:JP,children:[a.jsx(Fm,{label:`① ${t("layout_editor.computed.custom_step1")}`,children:a.jsx("div",{"data-testid":"g7le-computed-custom-source",children:u?a.jsx(u,{control:{},value:n.source,onChange:y=>l(v=>{v.source=typeof y=="string"?y:void 0}),t,candidates:s}):a.jsx("input",{type:"text",value:n.source??"",onChange:y=>l(v=>{v.source=y.target.value}),style:ll})})}),a.jsxs(Fm,{label:`② ${t("layout_editor.computed.custom_step2")}`,children:[a.jsx("select",{"data-testid":"g7le-computed-custom-op",value:n.op,onChange:y=>l(v=>{v.op=y.target.value}),style:ll,children:GP.map(({op:y,labelKey:v})=>a.jsx("option",{value:y,children:t(v)},y))}),n.op==="sum"?a.jsx("div",{"data-testid":"g7le-computed-custom-sumfield",style:{minWidth:0},children:a.jsx(gn,{value:n.sumField??"",onChange:y=>l(v=>{v.sumField=y}),t,candidates:r,placeholder:t("layout_editor.computed.custom_sum_field"),testidPrefix:"g7le-computed-custom-sumfield-chip"})}):null,n.op==="toOptions"?a.jsxs("div",{style:{display:"flex",gap:6},children:[a.jsx("div",{"data-testid":"g7le-computed-custom-valuefield",style:{flex:1,minWidth:0},children:a.jsx(gn,{value:n.valueField??"",onChange:y=>l(v=>{v.valueField=y}),t,candidates:r,placeholder:t("layout_editor.computed.custom_value_field"),testidPrefix:"g7le-computed-custom-valuefield-chip"})}),a.jsx("div",{"data-testid":"g7le-computed-custom-labelfield",style:{flex:1,minWidth:0},children:a.jsx(gn,{value:n.labelField??"",onChange:y=>l(v=>{v.labelField=y}),t,candidates:r,placeholder:t("layout_editor.computed.custom_label_field"),testidPrefix:"g7le-computed-custom-labelfield-chip"})})]}):null,n.op==="nth"?a.jsxs("div",{style:{display:"flex",gap:6},children:[a.jsx("input",{type:"text","data-testid":"g7le-computed-custom-index",value:n.index??"",placeholder:"0",onChange:y=>l(v=>{v.index=y.target.value}),style:ll}),a.jsx("div",{"data-testid":"g7le-computed-custom-prop",style:{flex:1,minWidth:0},children:a.jsx(gn,{value:n.prop??"",onChange:y=>l(v=>{v.prop=y}),t,candidates:r,placeholder:t("layout_editor.computed.custom_prop"),testidPrefix:"g7le-computed-custom-prop-chip"})})]}):null,n.op==="literal"?a.jsxs("div",{style:{display:"flex",gap:6},children:[a.jsxs("select",{"data-testid":"g7le-computed-custom-literalkind",value:n.literalKind??"string",onChange:y=>l(v=>{v.literalKind=y.target.value}),style:ll,children:[a.jsx("option",{value:"string",children:t("layout_editor.computed.kind_string")}),a.jsx("option",{value:"number",children:t("layout_editor.computed.kind_number")}),a.jsx("option",{value:"boolean",children:t("layout_editor.computed.kind_boolean")})]}),a.jsx("div",{"data-testid":"g7le-computed-custom-literalvalue",style:{flex:1,minWidth:0},children:a.jsx(gn,{value:n.literalValue??"",onChange:y=>l(v=>{v.literalValue=y}),t,candidates:r,testidPrefix:"g7le-computed-custom-literalvalue-chip"})})]}):null,n.op==="firstOf"?a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[a.jsx("input",{type:"text","data-testid":"g7le-computed-custom-candidates",value:(n.candidates??[]).join(", "),placeholder:t("layout_editor.computed.custom_candidates"),onChange:y=>l(v=>{v.candidates=y.target.value.split(",").map(x=>x.trim()).filter(Boolean)}),style:ll}),a.jsx("div",{"data-testid":"g7le-computed-custom-fallback",style:{minWidth:0},children:a.jsx(gn,{value:n.fallback??"",onChange:y=>l(v=>{v.fallback=y}),t,candidates:r,placeholder:t("layout_editor.computed.custom_fallback"),testidPrefix:"g7le-computed-custom-fallback-chip"})})]}):null,XP.has(n.op)?a.jsxs("div",{style:tB,children:[d.map((y,v)=>a.jsxs("div",{"data-testid":`g7le-computed-custom-cond-${v}`,style:nB,children:[a.jsx("div",{"data-testid":`g7le-computed-custom-cond-field-${v}`,style:{flex:1,minWidth:0},children:a.jsx(gn,{value:y.field,onChange:x=>h(v,S=>{S.field=x}),t,candidates:r,placeholder:t("layout_editor.computed.cond_field"),testidPrefix:`g7le-computed-custom-cond-field-${v}-chip`})}),a.jsx("select",{value:y.cmp,onChange:x=>h(v,S=>{S.cmp=x.target.value}),style:sB,children:YP.map(x=>a.jsx("option",{value:x,children:x},x))}),a.jsx("div",{"data-testid":`g7le-computed-custom-cond-value-${v}`,style:{flex:1,minWidth:0},children:a.jsx(gn,{value:y.value,onChange:x=>h(v,S=>{S.value=x}),t,candidates:r,placeholder:t("layout_editor.computed.cond_value"),testidPrefix:`g7le-computed-custom-cond-value-${v}-chip`})}),a.jsx("button",{type:"button","data-testid":`g7le-computed-custom-cond-remove-${v}`,onClick:()=>b(v),style:rB,children:"✕"})]},v)),a.jsxs("button",{type:"button","data-testid":"g7le-computed-custom-cond-add",onClick:g,style:oB,children:["+ ",t("layout_editor.computed.cond_add")]})]}):null]}),a.jsxs(Fm,{label:`③ ${t("layout_editor.computed.custom_step3")}`,children:[a.jsx("input",{type:"text","data-testid":"g7le-computed-custom-key",value:n.key,onChange:y=>l(v=>{v.key=y.target.value}),style:{...ll,...f?eB:{}}}),f?a.jsxs("p",{"data-testid":"g7le-computed-custom-key-dup",style:aB,children:["⚠ ",t("layout_editor.computed.key_duplicate")]}):null]})]})}function Fm({label:n,children:e}){return a.jsxs("div",{style:ZP,children:[a.jsx("div",{style:QP,children:n}),a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6,minWidth:0},children:e})]})}function Vm(n){return x4(n)}const JP={display:"flex",flexDirection:"column",gap:12,padding:10,border:"1px solid #cbd5e1",borderRadius:8,background:"#fff"},ZP={display:"flex",flexDirection:"column",gap:4,minWidth:0},QP={fontSize:12,fontWeight:600,color:"#475569"},ll={padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,minWidth:0,width:"100%",boxSizing:"border-box"},eB={border:"1px solid #ef4444"},tB={display:"flex",flexDirection:"column",gap:6,marginTop:4},nB={display:"flex",gap:4,alignItems:"center",minWidth:0},sB={padding:"4px 6px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6},rB={border:"none",background:"transparent",color:"#94a3b8",cursor:"pointer",fontSize:12},oB={alignSelf:"flex-start",padding:"2px 8px",fontSize:11,border:"1px dashed #94a3b8",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},aB={margin:0,fontSize:11,color:"#b45309"};function Km(n,e,t){return typeof n!="string"?t:n.startsWith("$t:")?e(n.slice(3)):n}function iB(n){if(n&&typeof n=="object"){const e=n.__source;if(e&&typeof e=="object")return e}return null}function lB({computed:n,onChange:e,recipes:t,t:s,sampleContext:r,dataSourceCandidates:o,bindingCandidates:l,computedSource:d={},effectKeys:u=[],onRevert:f}){const g=w.useMemo(()=>rS(t),[t]),[h,b]=w.useState(!1),[y,v]=w.useState(null),x=Object.keys(n),S=w.useCallback((E,T)=>{e({...n,[E]:T})},[n,e]),_=w.useCallback(E=>{const T={...n};delete T[E],e(T)},[n,e]),A=w.useCallback((E,T,D)=>{const I={...n};E&&E!==T&&delete I[E],I[T]=D,e(I)},[n,e]),C=w.useCallback(E=>{const T=aS(E,{});let D=E.id,I=1;for(;D in n;)D=`${E.id}${++I}`;e({...n,[D]:T}),b(!1)},[n,e]),j=w.useCallback(()=>{!y||!y.key||(e({...n,[y.key]:Vm(y)}),v(null),b(!1))},[y,n,e]);return a.jsxs("div",{className:"g7le-computed-form","data-testid":"g7le-computed-form",style:fB,children:[a.jsx("p",{style:pB,children:s("layout_editor.page_settings.computed.heading")}),x.length>0?x.map(E=>a.jsx(cB,{computedKey:E,expr:n[E],recipes:g,rawRecipes:t,t:s,sampleContext:r,dataSourceCandidates:o,bindingCandidates:l,source:d[E],isEffect:u.includes(E),existingKeys:x,onPatchExpr:T=>S(E,T),onRename:(T,D)=>A(E,T,D),onRemove:()=>_(E),onRevert:f?()=>f(E):void 0},E)):a.jsx("p",{"data-testid":"g7le-computed-empty",style:OB,children:s("layout_editor.computed.empty")}),a.jsxs("div",{style:{minWidth:0},children:[a.jsxs("button",{type:"button","data-testid":"g7le-computed-add",onClick:()=>b(E=>!E),style:RB,children:["+ ",s("layout_editor.computed.add")," ▾"]}),h?a.jsxs("div",{"data-testid":"g7le-computed-add-list",style:AB,children:[["common","more"].map(E=>{const T=g.filter(D=>(D.group??"more")===E);return T.length===0?null:a.jsxs("div",{children:[a.jsxs("div",{style:TB,children:["━━ ",s(`layout_editor.computed.group_${E}`)," ━━"]}),T.map(D=>{const I=iB(t?.[D.id]);return a.jsxs("button",{type:"button","data-testid":`g7le-computed-preset-${D.id}`,onClick:()=>C(D),style:$B,children:[a.jsx("span",{style:NB,children:Km(D.label,s,D.id)}),I&&I.kind!=="core"?a.jsxs("span",{"data-testid":`g7le-computed-preset-source-${D.id}`,style:DB,children:["〔",I.id??I.kind,"〕"]}):null]},D.id)})]},E)}),a.jsxs("div",{style:{borderTop:"1px solid #e2e8f0",marginTop:6,paddingTop:6},children:[a.jsxs("button",{type:"button","data-testid":"g7le-computed-custom-open",onClick:()=>v(y?null:{key:"",op:"count",source:"",conditions:[]}),style:IB,children:["⚙ ",s("layout_editor.computed.custom_open")," ▾"]}),y?a.jsxs("div",{style:{marginTop:6},children:[a.jsx(Fk,{model:y,onChange:v,t:s,dataSourceCandidates:o,bindingCandidates:l,existingKeys:x}),a.jsx("div",{"data-testid":"g7le-computed-custom-preview",style:{marginTop:6},children:a.jsx(qk,{expr:Vm(y),sampleContext:r,t:s,testIdPrefix:"g7le-computed-custom-preview-eval"})}),a.jsx("button",{type:"button","data-testid":"g7le-computed-custom-commit",disabled:!y.key||x.includes(y.key),onClick:j,style:LB,children:s("layout_editor.computed.custom_add")})]}):null]})]}):null]})]})}function cB({computedKey:n,expr:e,recipes:t,rawRecipes:s,t:r,sampleContext:o,dataSourceCandidates:l,bindingCandidates:d,source:u,isEffect:f,existingKeys:g,onPatchExpr:h,onRename:b,onRemove:y,onRevert:v}){const[x,S]=w.useState(!1),[_,A]=w.useState(!1),C=w.useMemo(()=>dS(e,t),[e,t]),j=u==="base",E=u==="route-override",T=C.kind==="advanced",D=C.kind==="preset"?t.find(z=>z.id===C.recipeId)??null:null,I=D?Km(D.label,r,n):n,W=(z,H)=>{if(C.kind!=="preset"||!D)return;const G={...C.params,[z]:H};h(aS(D,G))};return a.jsxs("div",{"data-testid":`g7le-computed-item-${n}`,style:gB,children:[a.jsxs("div",{style:hB,children:[a.jsx("span",{style:mB,children:I}),a.jsx("code",{style:yB,children:n}),j?a.jsxs("span",{"data-testid":`g7le-computed-source-${n}`,style:bB,children:["〔",r("layout_editor.computed.source_base"),"〕"]}):null,E?a.jsxs("span",{"data-testid":`g7le-computed-overridden-${n}`,style:xB,children:["〔",r("layout_editor.computed.source_overridden"),"〕"]}):null,T?a.jsxs("span",{"data-testid":"g7le-computed-advanced",style:vB,children:["[",r("layout_editor.action.advanced"),"]"]}):null,a.jsx("span",{style:{flex:1}}),a.jsx("button",{type:"button","data-testid":`g7le-computed-code-${n}`,onClick:()=>A(z=>!z),style:Gm,"aria-label":r("layout_editor.value_tree.show_source"),title:r("layout_editor.value_tree.show_source"),children:"</>"}),T?null:a.jsx("button",{type:"button","data-testid":`g7le-computed-edit-${n}`,onClick:()=>S(z=>!z),style:Gm,children:r("layout_editor.init_actions.edit")}),a.jsx("button",{type:"button","data-testid":`g7le-computed-remove-${n}`,onClick:y,style:Gm,"aria-label":r("layout_editor.init_actions.remove"),children:"✕"})]}),_?a.jsx("pre",{"data-testid":`g7le-computed-code-block-${n}`,style:MB,children:e}):null,a.jsx("div",{"data-testid":`g7le-computed-preview-${n}`,children:a.jsx(qk,{expr:e,computedKey:n,sampleContext:o,t:r,isEffect:f,testIdPrefix:`g7le-computed-preview-${n}-eval`})}),E&&v?a.jsxs("div",{style:wB,children:[a.jsxs("span",{style:_B,children:["ⓘ ",r("layout_editor.computed.overridden_hint")]}),a.jsx("button",{type:"button","data-testid":`g7le-computed-revert-${n}`,onClick:v,style:SB,children:r("layout_editor.computed.revert")})]}):null,x&&!T?a.jsxs("div",{style:kB,children:[j?a.jsxs("p",{"data-testid":`g7le-computed-override-notice-${n}`,style:CB,children:["⚠ ",r("layout_editor.computed.override_notice")]}):null,C.kind==="preset"&&D?a.jsx(a.Fragment,{children:D.params.map(z=>a.jsx(uB,{param:z,value:C.params[z.key]??"",t:r,dataSourceCandidates:l,bindingCandidates:d,onChange:H=>W(z.key,H)},z.key))}):C.kind==="custom"?a.jsx(Fk,{model:{...C.model,key:n},onChange:z=>b(z.key,Vm(z)),t:r,dataSourceCandidates:l,bindingCandidates:d,existingKeys:g.filter(z=>z!==n)}):null]}):null]})}const dB=new Set(["datasource-picker","binding-picker","select","toggle","state-key-picker","page-picker"]);function uB({param:n,value:e,t,dataSourceCandidates:s,bindingCandidates:r,onChange:o}){const l=Km(n.label,t,n.key),d=n.widget??"",f=dB.has(d)?qa(n.widget):null,g=d==="datasource-picker"||d==="binding-picker"?s:void 0;return a.jsxs("div",{"data-testid":`g7le-computed-param-${n.key}`,style:jB,children:[a.jsx("span",{style:EB,children:l}),a.jsx("div",{style:{flex:1,minWidth:0},children:f?a.jsx(f,{control:{...n},value:e,onChange:h=>o(typeof h=="string"?h:""),t,candidates:g}):a.jsx(gn,{value:e,onChange:h=>o(h),t,candidates:r,testidPrefix:`g7le-computed-param-${n.key}-chip`})})]})}const fB={display:"flex",flexDirection:"column",gap:12,minWidth:0},pB={margin:0,fontSize:13,fontWeight:700,color:"#0f172a"},gB={border:"1px solid #e2e8f0",borderRadius:8,padding:"8px 10px",display:"flex",flexDirection:"column",gap:6,background:"#f8fafc"},hB={display:"flex",alignItems:"center",gap:6},mB={fontSize:13,fontWeight:600,color:"#0f172a"},yB={fontSize:10,color:"#64748b",fontFamily:"monospace"},bB={fontSize:10,color:"#0891b2",whiteSpace:"nowrap"},xB={fontSize:10,color:"#7c3aed",whiteSpace:"nowrap"},vB={fontSize:10,color:"#92400e",whiteSpace:"nowrap"},wB={display:"flex",alignItems:"center",gap:8,marginTop:4,minWidth:0},_B={fontSize:11,color:"#7c3aed",flex:1,minWidth:0},SB={border:"1px solid #c4b5fd",borderRadius:6,background:"#f5f3ff",color:"#6d28d9",cursor:"pointer",fontSize:11,padding:"2px 8px",whiteSpace:"nowrap"},Gm={border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer",fontSize:11,padding:"2px 6px"},kB={display:"flex",flexDirection:"column",gap:6,paddingTop:6,borderTop:"1px dashed #e2e8f0"},CB={margin:0,fontSize:11,color:"#b45309",background:"#fef3c7",padding:"6px 8px",borderRadius:6},jB={display:"flex",alignItems:"center",gap:8,minWidth:0},EB={fontSize:11,color:"#64748b",minWidth:90},RB={padding:"6px 12px",fontSize:12,border:"1px dashed #94a3b8",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},AB={marginTop:6,border:"1px solid #cbd5e1",borderRadius:8,background:"#fff",padding:8,maxHeight:380,overflowY:"auto"},TB={fontSize:11,fontWeight:700,color:"#94a3b8",padding:"6px 4px 2px"},$B={display:"flex",alignItems:"center",gap:6,width:"100%",textAlign:"left",padding:"6px 8px",fontSize:12,border:"none",background:"transparent",cursor:"pointer",borderRadius:6},NB={flex:1,minWidth:0,color:"#0f172a"},DB={fontSize:10,color:"#64748b",whiteSpace:"nowrap"},IB={padding:"6px 10px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer"},LB={marginTop:6,padding:"6px 12px",fontSize:12,border:"1px solid #3b82f6",borderRadius:6,background:"#3b82f6",color:"#fff",cursor:"pointer"},OB={margin:0,fontSize:12,color:"#94a3b8"},MB={margin:"2px 0 0",padding:"6px 8px",fontSize:11,fontFamily:"monospace",color:"#0f172a",background:"#f1f5f9",border:"1px solid #e2e8f0",borderRadius:6,whiteSpace:"pre-wrap",wordBreak:"break-all",overflowX:"auto"};function zB(n,e){return e==="any"?!0:n===null||typeof n!="object"?!1:e==="object"?!Array.isArray(n):!0}function Ym({value:n,onChange:e,onValidityChange:t,t:s,shape:r="any",emptyValue:o=void 0,placeholder:l,minHeight:d=80,testidPrefix:u="g7le-json-block",shapeErrorKey:f,invalidErrorKey:g,ariaLabel:h,id:b,validate:y}){const[v,x]=w.useState(()=>$f(n)),[S,_]=w.useState(null),A=w.useRef(!1),C=w.useRef(n);w.useEffect(()=>{if(!A.current&&!Object.is(n,C.current)){if($f(n)===$f(C.current)){C.current=n;return}x($f(n)),_(null),C.current=n,t?.(!0)}},[n]);const j=E=>{if(A.current=!0,x(E),E.trim()===""){_(null),C.current=o,t?.(!0),e(o);return}let T;try{T=JSON.parse(E)}catch{_(s(g??"layout_editor.json_block.invalid")),t?.(!1);return}if(!zB(T,r)){_(s(f??"layout_editor.json_block.invalid")),t?.(!1);return}const D=y?.(T)??null;if(D){_(D),t?.(!1);return}_(null),C.current=T,t?.(!0),e(T)};return a.jsxs("div",{className:"g7le-json-block",style:PB,children:[a.jsx("textarea",{id:b,"data-testid":u,style:{...BB,minHeight:d},value:v,spellCheck:!1,"aria-label":h,"aria-invalid":S?!0:void 0,placeholder:l,onChange:E=>j(E.target.value),onBlur:()=>{A.current=!1}}),S?a.jsx("div",{"data-testid":`${u}-error`,style:HB,children:S}):null]})}function $f(n){if(n===void 0)return"";try{return JSON.stringify(n,null,2)??""}catch{return""}}const PB={display:"flex",flexDirection:"column",gap:4,minWidth:0},BB={width:"100%",boxSizing:"border-box",fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",fontSize:12,lineHeight:1.5,color:"#0f172a",background:"#fff",border:"1px solid #cbd5e1",borderRadius:6,padding:"6px 8px",resize:"vertical"},HB={fontSize:11,color:"#dc2626"},WB=[{kind:"string",labelKey:"layout_editor.initstate.kind_string"},{kind:"number",labelKey:"layout_editor.initstate.kind_number"},{kind:"boolean",labelKey:"layout_editor.initstate.kind_boolean"},{kind:"null",labelKey:"layout_editor.initstate.kind_null"},{kind:"list",labelKey:"layout_editor.initstate.kind_list"},{kind:"object",labelKey:"layout_editor.initstate.kind_object"}],Xm={local:"initLocal",global:"initGlobal",isolated:"initIsolated"};function UB({raw:n,own:e,patch:t,t:s,isolatedOrphan:r={}}){const o=w.useMemo(()=>{const h=e?.state&&typeof e.state=="object"?e.state:void 0,b=n?.state&&typeof n.state=="object"?n.state:void 0;if(!(!h&&!b))return{...b??{},...h??{}}},[e,n]),{initLocal:l,migrated:d}=w.useMemo(()=>u8({initLocal:n?.initLocal,state:o}),[n,o]),u=h=>{if(h==="local")return l;const b=n?.[Xm[h]];return b&&typeof b=="object"?b:{}},f=h=>{if(h==="local"){const b=e?.initLocal??{},y=o?Object.keys(o):[];return Array.from(new Set([...Object.keys(b),...y]))}return Object.keys(e?.[Xm[h]]??{})},g=w.useCallback((h,b)=>{const y=Xm[h];h==="local"&&d&&t("state",void 0),t(y,Object.keys(b).length===0?void 0:b)},[t,d]);return a.jsxs("div",{className:"g7le-initstate-form","data-testid":"g7le-initstate-form",style:FB,children:[a.jsx("p",{style:VB,children:s("layout_editor.page_settings.initstate.heading")}),d?a.jsxs("p",{"data-testid":"g7le-initstate-legacy-state",style:KB,children:["ⓘ ",s("layout_editor.initstate.legacy_state")]}):null,a.jsx(Jm,{scope:"local",label:s("layout_editor.initstate.section_local"),value:u("local"),ownKeys:f("local"),patchSection:g,t:s}),a.jsx(Jm,{scope:"global",label:s("layout_editor.initstate.section_global"),value:u("global"),ownKeys:f("global"),patchSection:g,t:s}),a.jsx(Jm,{scope:"isolated",label:s("layout_editor.initstate.section_isolated"),description:s("layout_editor.initstate.section_isolated_desc"),value:u("isolated"),ownKeys:f("isolated"),patchSection:g,t:s,orphan:r}),a.jsxs("p",{style:uH,children:["ⓘ ",s("layout_editor.initstate.isolated_dynamic_hint")]})]})}function Jm({scope:n,label:e,description:t,value:s,ownKeys:r,patchSection:o,t:l,orphan:d={}}){const[u,f]=w.useState(""),[g,h]=w.useState("string"),[b,y]=w.useState(null),[v,x]=w.useState(!1),S=Object.keys(s),_=S,A=(E,T)=>{o(n,{...s,[E]:T})},C=E=>{const T={...s};delete T[E],o(n,T)},j=()=>{const E=u.trim();if(!E){y(l("layout_editor.initstate.name_required"));return}if(!Pm(E)){y(l("layout_editor.initstate.name_invalid"));return}if(E in s){y(l("layout_editor.initstate.name_duplicate"));return}const T={string:"",number:0,boolean:!1,null:null,list:[],object:{}};o(n,{...s,[E]:T[g]}),f(""),y(null)};return a.jsxs("div",{"data-testid":`g7le-initstate-section-${n}`,style:GB,children:[a.jsxs("div",{style:YB,children:[a.jsx("div",{style:XB,children:e}),a.jsx("button",{type:"button","data-testid":`g7le-initstate-${n}-mode-toggle`,onClick:()=>x(E=>!E),style:ZB,children:l(v?"layout_editor.json_block.mode_block":"layout_editor.json_block.mode_code")})]}),t?a.jsxs("p",{style:JB,children:["ⓘ ",t]}):null,v?a.jsx(Ym,{value:s,shape:"object",emptyValue:{},onChange:E=>o(n,E??{}),t:l,testidPrefix:`g7le-initstate-${n}-code`,placeholder:`{
"keyword": "",
"page": 1
}`,shapeErrorKey:"layout_editor.json_block.must_be_object",validate:E=>{const T=Object.keys(E??{}).filter(D=>!Pm(D));return T.length?l("layout_editor.json_block.invalid_keys",{keys:T.join(", ")}):null}}):a.jsxs(a.Fragment,{children:[S.length===0?a.jsx("p",{"data-testid":`g7le-initstate-${n}-empty`,style:dH,children:l("layout_editor.initstate.no_values")}):S.map(E=>{const D=d8(_,r,E)==="inherited",I=n==="isolated"&&d[E];return a.jsx(qB,{scope:n,itemKey:E,value:s[E],inherited:D,isOrphan:!!I,onChangeValue:W=>A(E,W),onRemove:()=>C(E),t:l},E)}),a.jsxs("div",{style:rH,children:[a.jsx("input",{type:"text","data-testid":`g7le-initstate-${n}-add-name`,value:u,placeholder:l("layout_editor.initstate.value_name"),onChange:E=>{f(E.target.value),b&&y(null)},onKeyDown:E=>{E.key==="Enter"&&(E.preventDefault(),j())},"aria-invalid":b?!0:void 0,style:{...oH,...b?aH:null}}),a.jsx("select",{"data-testid":`g7le-initstate-${n}-add-kind`,value:g,onChange:E=>h(E.target.value),"aria-label":l("layout_editor.initstate.value_kind"),style:lH,children:WB.map(E=>a.jsx("option",{value:E.kind,children:l(E.labelKey)},E.kind))}),a.jsxs("button",{type:"button","data-testid":`g7le-initstate-${n}-add`,onClick:j,style:cH,children:["+ ",l("layout_editor.initstate.add_value")]})]}),b?a.jsx("p",{"data-testid":`g7le-initstate-${n}-add-error`,style:iH,children:b}):null]})]})}function qB({scope:n,itemKey:e,value:t,inherited:s,isOrphan:r,onChangeValue:o,onRemove:l,t:d}){const[u,f]=w.useState(!1);let g;try{g=JSON.stringify(t,null,2)??String(t)}catch{g=String(t)}return a.jsxs("div",{"data-testid":`g7le-initstate-${n}-item-${e}`,style:QB,children:[a.jsxs("div",{style:eH,children:[s?a.jsx("span",{"data-testid":`g7le-initstate-inherited-${e}`,style:tH,children:"🔗"}):null,a.jsx("code",{style:nH,children:e}),a.jsx("span",{style:{flex:1}}),a.jsx("button",{type:"button","data-testid":`g7le-initstate-code-${e}`,onClick:()=>f(h=>!h),style:Zm,"aria-label":d("layout_editor.value_tree.show_source"),title:d("layout_editor.value_tree.show_source"),children:"</>"}),s?a.jsx("button",{type:"button","data-testid":`g7le-initstate-revert-${e}`,onClick:l,style:Zm,children:d("layout_editor.initstate.revert")}):a.jsx("button",{type:"button","data-testid":`g7le-initstate-remove-${e}`,onClick:l,style:Zm,"aria-label":d("layout_editor.init_actions.remove"),children:"✕"})]}),u?a.jsx("pre",{"data-testid":`g7le-initstate-code-block-${e}`,style:fH,children:g}):null,a.jsx(Va,{value:t,onChange:o,t:d,path:e,scope:n}),r?a.jsxs("p",{"data-testid":`g7le-initstate-isolated-orphan-${e}`,style:sH,children:["⚠ ",d("layout_editor.initstate.isolated_orphan")]}):null]})}const FB={display:"flex",flexDirection:"column",gap:14,minWidth:0},VB={margin:0,fontSize:13,fontWeight:700,color:"#0f172a"},KB={margin:0,fontSize:11,color:"#1d4ed8",background:"#eff6ff",padding:"6px 8px",borderRadius:6},GB={display:"flex",flexDirection:"column",gap:8,padding:10,border:"1px solid #e2e8f0",borderRadius:10,minWidth:0},YB={display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},XB={fontSize:12,fontWeight:700,color:"#475569"},JB={margin:0,fontSize:11,color:"#94a3b8"},ZB={padding:"2px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},QB={display:"flex",flexDirection:"column",gap:4,padding:"6px 8px",border:"1px solid #f1f5f9",borderRadius:6,minWidth:0},eH={display:"flex",alignItems:"center",gap:6},tH={fontSize:12},nH={fontSize:12,color:"#0f172a",fontFamily:"monospace"},Zm={border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer",fontSize:11,padding:"2px 6px"},sH={margin:0,fontSize:11,color:"#b45309",background:"#fef3c7",padding:"4px 6px",borderRadius:6},rH={display:"flex",gap:6,alignItems:"center"},oH={padding:"4px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6},aH={border:"1px solid #dc2626"},iH={margin:0,fontSize:11,color:"#dc2626"},lH={padding:"4px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#0f172a"},cH={padding:"2px 10px",fontSize:11,border:"1px dashed #94a3b8",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},dH={margin:0,fontSize:12,color:"#94a3b8"},uH={margin:0,fontSize:11,color:"#94a3b8"},fH={margin:"2px 0",padding:"6px 8px",fontSize:11,fontFamily:"monospace",color:"#0f172a",background:"#f1f5f9",border:"1px solid #e2e8f0",borderRadius:6,whiteSpace:"pre-wrap",wordBreak:"break-all",overflowX:"auto"},pH={self:"layout_editor.error_rows.source_self",inherited:"layout_editor.error_rows.source_inherited",template:"layout_editor.error_rows.source_template",none:"layout_editor.error_rows.source_none"};function Qm({value:n,onChange:e,t,codes:s,mode:r="local",sourceOf:o,renderActionList:l,testIdPrefix:d="g7le-error-rows"}){const u=s??Object.keys(n),f=w.useCallback((h,b)=>{e({...n,[h]:b})},[n,e]),g=w.useCallback(h=>{const b={...n};delete b[h],e(b)},[n,e]);return a.jsx("div",{className:d,"data-testid":d,children:u.map(h=>{const b=n[h],y=b!==void 0,v=r==="badge"&&o?o(h):null;return a.jsxs("div",{"data-testid":`${d}-row-${h}`,style:{border:"1px solid #e2e8f0",borderRadius:8,padding:"8px 10px",marginBottom:6},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsx("strong",{"data-testid":`${d}-code-${h}`,style:{fontSize:13},children:h==="default"?t("layout_editor.error_rows.default"):h}),v?a.jsxs("span",{"data-testid":`${d}-source-${h}`,style:{fontSize:11,padding:"2px 6px",borderRadius:4,background:"#f1f5f9",color:"#475569"},children:["〔",t(pH[v]),"〕"]}):null,y?a.jsx("button",{type:"button","data-testid":`${d}-clear-${h}`,onClick:()=>g(h),style:{marginLeft:"auto",fontSize:12},children:t("layout_editor.error_rows.clear")}):a.jsx("span",{style:{marginLeft:"auto",fontSize:12,color:"#94a3b8"},children:t("layout_editor.error_rows.no_action")})]}),v==="inherited"||v==="template"?a.jsxs("div",{"data-testid":`${d}-override-${h}`,style:{marginTop:6,display:"flex",alignItems:"flex-start",gap:8},children:[a.jsxs("p",{style:{margin:0,flex:1,fontSize:12,color:"#64748b"},children:["ⓘ ",t(v==="inherited"?"layout_editor.error_rows.override_inherited":"layout_editor.error_rows.override_template")]}),y?a.jsx("button",{type:"button","data-testid":`${d}-revert-${h}`,onClick:()=>g(h),style:{fontSize:12,padding:"2px 8px",border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer",whiteSpace:"nowrap"},children:t("layout_editor.error_rows.revert")}):a.jsx("button",{type:"button","data-testid":`${d}-override-here-${h}`,onClick:()=>f(h,{}),style:{fontSize:12,padding:"2px 8px",border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer",whiteSpace:"nowrap"},children:t("layout_editor.error_rows.override_here")})]}):null,h==="default"?a.jsxs("p",{"data-testid":`${d}-default-warn-${h}`,style:{margin:"6px 0 0",fontSize:12,color:"#b45309"},children:["⚠ ",t("layout_editor.error_rows.default_warning")]}):null,a.jsx("div",{style:{marginTop:6},children:l?l(h,b,x=>f(h,x)):a.jsx("pre",{"data-testid":`${d}-json-${h}`,style:{margin:0,fontSize:12,color:"#475569"},children:y?JSON.stringify(b):""})})]},h)})})}function gH(n){return[...n.filter(t=>t!=="maintenance"),"default"]}function hH({value:n,onChange:e,t,errorConfigCodes:s=[],ownCodes:r=[],templateCodes:o=[],recipes:l,pageCandidates:d,modalCandidates:u,dataSourceCandidates:f,stateKeyCandidates:g}){const h=w.useMemo(()=>Lc(l),[l]),b=w.useMemo(()=>gH(s),[s]),y=h.length>0,v=w.useMemo(()=>E_("error",t),[t]),x=w.useMemo(()=>({pageCandidates:d,dataSourceCandidates:f,stateKeyCandidates:g,modalCandidates:u,bindingCandidates:v}),[d,f,g,u,v]),S=w.useCallback(_=>r.includes(_)?"self":_ in n?"inherited":o.includes(_)?"template":"none",[r,n,o]);return y?a.jsxs("div",{className:"g7le-error-form","data-testid":"g7le-error-form",style:Vk,children:[a.jsx("p",{style:Kk,children:t("layout_editor.page_settings.error.heading")}),a.jsxs("p",{style:yH,children:["ⓘ ",t("layout_editor.error.intro")]}),a.jsx(Qm,{value:n,onChange:e,t,codes:b,mode:"badge",sourceOf:S,testIdPrefix:"g7le-error-rows",renderActionList:(_,A,C)=>a.jsx(mH,{code:_,action:A,recipes:l,normalized:h,t,pools:x,onPatch:C})})]}):a.jsxs("div",{className:"g7le-error-form","data-testid":"g7le-error-form",style:Vk,children:[a.jsx("p",{style:Kk,children:t("layout_editor.page_settings.error.heading")}),a.jsxs("p",{"data-testid":"g7le-error-degrade",style:bH,children:["ⓘ ",t("layout_editor.error.degrade")]}),a.jsx(Qm,{value:n,onChange:e,t,codes:b,mode:"badge",sourceOf:S,testIdPrefix:"g7le-error-rows"})]})}function mH({code:n,action:e,recipes:t,normalized:s,t:r,pools:o,onPatch:l}){const[d,u]=w.useState(!1),f=Array.isArray(e)?e[0]:e,g=typeof f?.handler=="string"?f.handler:"",h=s.find(A=>A.id===g)??null,b=f?Zi(f,s):null,y=b?.kind==="preset"?b.values:{},v=g==="sequence"||g==="parallel",x=A=>{if(A===""){l({});return}const C=s.find(j=>j.id===A);C&&l(ff(C,{}))},S=["","showErrorPage","navigate","openModal","toast","setState","sequence","parallel"],_=v&&f?Array.isArray(f.params?.actions)?f.params.actions:[]:[];return a.jsxs("div",{"data-testid":`g7le-error-action-${n}`,style:xH,children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[a.jsx("select",{"data-testid":`g7le-error-handler-${n}`,value:g,onChange:A=>x(A.target.value),style:{...vH,flex:1},children:S.map(A=>a.jsx("option",{value:A,children:r(A===""?"layout_editor.error.handler_none":`layout_editor.error.handler_${A}`)},A))}),g!==""?a.jsx("button",{type:"button","data-testid":`g7le-error-code-${n}`,onClick:()=>u(A=>!A),"aria-label":r("layout_editor.action_list.view_code"),title:r("layout_editor.action_list.view_code"),style:d?wH:Gk,children:"</>"}):null]}),v?a.jsx("div",{"data-testid":`g7le-error-actions-${n}`,children:a.jsx(Qr,{actions:_,onChange:A=>l({handler:g,params:{actions:A}}),t:r,recipes:t,candidatePools:o,chipContext:"error",testIdPrefix:`g7le-error-seq-${n}`})}):h&&f?a.jsx(Hm,{raw:f,recipe:h,values:y,t:r,pools:o,onChange:A=>l(A),testIdPrefix:`g7le-error-action-${n}-edit`}):null,d&&f?a.jsx("pre",{"data-testid":`g7le-error-code-view-${n}`,style:_H,children:JSON.stringify(e,null,2)}):null]})}const Vk={display:"flex",flexDirection:"column",gap:12,minWidth:0},Kk={margin:0,fontSize:13,fontWeight:700,color:"#0f172a"},yH={margin:0,fontSize:11,color:"#94a3b8"},bH={margin:0,fontSize:12,color:"#b45309",background:"#fef3c7",padding:"8px 10px",borderRadius:6},xH={display:"flex",flexDirection:"column",gap:6,minWidth:0},vH={padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6},Gk={flex:"0 0 auto",width:26,height:26,display:"inline-flex",alignItems:"center",justifyContent:"center",fontSize:11,border:"1px solid #e2e8f0",borderRadius:6,background:"#fff",color:"#64748b",cursor:"pointer",fontFamily:"ui-monospace, monospace"},wH={...Gk,background:"#0f172a",borderColor:"#0f172a",color:"#e2e8f0"},_H={margin:"4px 0 0",padding:8,background:"#0f172a",color:"#e2e8f0",borderRadius:6,fontSize:12,overflow:"auto",fontFamily:"ui-monospace, monospace"};function Nf(n){const e=n.trim(),t=/^\{\{([\s\S]*)\}\}$/.exec(e);return t?t[1].trim():e}function SH(n){let e=n;for(;e.length>=2&&e[0]==="("&&e[e.length-1]===")";){let t=0,s=!0;for(let r=0;r<e.length;r++)if(e[r]==="(")t++;else if(e[r]===")"&&(t--,t===0&&r<e.length-1)){s=!1;break}if(!s)break;e=e.slice(1,-1)}return e}function Df(n){let e=n.replace(/\s+/g,"");for(e=e.replace(/\?\./g,".");e.startsWith("!!");)e=e.slice(2);return e=SH(e),e}function kH(n){if(!n||typeof n!="object")return[];const e=n.operators;if(Array.isArray(e))return e.filter(s=>!!s&&typeof s.value=="string"&&typeof s.expr=="string").map(s=>({value:s.value,label:typeof s.label=="string"?s.label:void 0,params:Array.isArray(s.params)?s.params:[],expr:Nf(s.expr),aliases:Yk(s.aliases)}));const t=[];for(const[s,r]of Object.entries(n)){if(s==="comment"||s==="operators"||!r||typeof r!="object")continue;const o=r;typeof o.expr=="string"&&t.push({value:s,label:typeof o.label=="string"?o.label:void 0,params:Array.isArray(o.params)?o.params:[],expr:Nf(o.expr),aliases:Yk(o.aliases)})}return t}function Yk(n){if(!Array.isArray(n))return[];const e=[];for(const t of n){if(typeof t!="string")continue;const s=Nf(t);s.trim().length>0&&e.push(s)}return e}function CH(n){const e=n.params.length*1e3;return Df(n.expr).replace(/\{\w+\}/g,"").length-e}function jH(n){return n.map((e,t)=>({op:e,idx:t,score:CH(e)})).sort((e,t)=>t.score-e.score||e.idx-t.idx).map(e=>e.op)}function EH(n,e){return n.replace(/\{(\w+)\}/g,(t,s)=>{const r=e[s];return r===void 0?t:r})}function RH(n,e){const t=e.find(s=>s.value===n.operator);return t?EH(t.expr,n.params??{}):null}function Xk(n,e,t){const s=n.map(l=>RH(l,t)).filter(l=>typeof l=="string"&&l.trim().length>0);if(s.length===0)return"";if(s.length===1)return`{{ ${s[0]} }}`;const r=e==="or"?" || ":" && ";return`{{ ${s.map(l=>`(${l})`).join(r)} }}`}function Jk(n,e){const t=Df(n);for(const s of jH(e)){if(s.params.length===0){for(const r of[s.expr,...s.aliases])if(Df(r)===t)return{operator:s.value,params:{}};continue}for(const r of[s.expr,...s.aliases]){const o=AH(s,r,t);if(o)return o}}return null}function AH(n,e,t){const s=e.trim(),r=[];let o="",l=0;for(;l<s.length;){const h=/^\{(\w+)\}/.exec(s.slice(l));if(h)r.push(h[1]),o+="(.+?)",l+=h[0].length;else{let b="";for(;l<s.length&&!/^\{(\w+)\}/.test(s.slice(l));)b+=s[l],l+=1;const y=Df(b);for(const v of y)o+=v.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}}const u=new RegExp("^"+o+"$").exec(t);if(!u)return null;const f={};for(let h=0;h<r.length;h++){const b=r[h],y=u[h+1];if(b in f&&f[b]!==y)return null;f[b]=y}const g=TH(s);for(const[h,b]of Object.entries(f))if(/&&|\|\|/.test(b)||!g.has(h)&&/===|!==|==|!=|>=|<=|>|<|\?|:|\(|\)|!/.test(b))return null;return{operator:n.value,params:f}}function TH(n){const e=new Set,t=/(['"])\{(\w+)\}\1/g;let s;for(;(s=t.exec(n))!==null;)e.add(s[2]);return e}function $H(n,e){if(typeof n!="string"||n.trim()==="")return null;const t=Nf(n),s=Jk(t,e);if(s)return{clauses:[s],combinator:"and"};const r=t.includes(") || (")?"or":(t.includes(") && ("),"and"),o=r==="or"?") || (":") && (";if(!t.startsWith("(")||!t.endsWith(")")||!t.includes(o))return null;const d=t.slice(1,-1).split(o),u=[];for(const f of d){const g=Jk(f.trim(),e);if(!g)return null;u.push(g)}return{clauses:u,combinator:r}}function Zk(n){const e=n.groupPrefixes;return{group:typeof n.group=="string"?n.group:void 0,apply:n.apply&&typeof n.apply=="object"?n.apply:void 0,options:Array.isArray(n.options)?n.options:void 0,scale:Array.isArray(n.scale)?n.scale:void 0,groupPrefixes:Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.length>0):void 0,groupTokens:Array.isArray(n.groupTokens)?n.groupTokens.filter(t=>typeof t=="string"&&t.length>0):void 0}}function Qk(n){const e={...n??{}},t=e.style&&typeof e.style=="object"&&!Array.isArray(e.style)?{...e.style}:{};return e.style=t,{props:e,style:t}}function If(n){return typeof n!="string"?[]:n.split(/\s+/).filter(e=>e.length>0)}function e1(n,e=!1){const t=new Set,s=[],r=o=>{if(o){for(const l of o.tokens??[])t.add(l);o.tokenTemplate&&o.tokenTemplate.includes("{value}")&&s.push(o.tokenTemplate.split("{value}")[0]??"")}};r(n.apply);for(const o of n.options??[])r(o.apply);for(const o of n.groupPrefixes??[])s.push(o);for(const o of n.groupTokens??[])t.add(o);return o=>{if(e){if(!eo(o))return!1;const l=sy(o);return t.has(l)?!0:s.some(d=>d.length>0&&l.startsWith(d))}return eo(o)?!1:t.has(o)?!0:s.some(l=>l.length>0&&o.startsWith(l))}}function NH(n,e,t,s,r=!1){const o=e1(e,r),l=If(n.className).filter(g=>!o(g)),d=[];if(Array.isArray(t.tokens))d.push(...t.tokens);else if(t.tokenTemplate&&t.tokenTemplate.includes("{value}")&&s!=null){const g=String(s).split(/\s+/).filter(h=>h.length>0);for(const h of g)d.push(t.tokenTemplate.replace("{value}",h))}const u=r?d.map(a1):d,f=[...l,...u];f.length===0?delete n.className:n.className=f.join(" ")}const ey={url:"backgroundImage",size:"backgroundSize",repeat:"backgroundRepeat",position:"backgroundPosition"};function DH(n){return!n||typeof n!="object"||Array.isArray(n)?!1:Object.keys(ey).some(e=>e in n)}function IH(n){return/^url\(/i.test(n.trim())?n:`url(${n})`}function t1(n){const e=/^url\(\s*(['"]?)(.*?)\1\s*\)$/i.exec(n.trim());return e?e[2]:n}function LH(n){return n.includes("backgroundImage")}function ty(n,e){if(n!=null){if(typeof n=="object"){const t=n[e];return typeof t=="string"||typeof t=="number"?t:void 0}return n}}function OH(n){const e=n.backgroundImage,t=ty(n.backgroundSize,"size"),s=ty(n.backgroundRepeat,"repeat"),r=ty(n.backgroundPosition,"position");let o;if(typeof e=="string"?o=t1(e):e&&typeof e=="object"?o=e.url:o=void 0,o===void 0&&t===void 0&&s===void 0&&r===void 0)return;const l={};return o!==void 0&&(l.url=typeof o=="string"?t1(o):o),t!==void 0&&(l.size=t),s!==void 0&&(l.repeat=s),r!==void 0&&(l.position=r),l}function MH(n,e,t){const s=(r,o)=>{o==null||o===""?delete n[r]:n[r]=o};if(Array.isArray(e.props)){if(!e.values&&DH(t)){for(const r of e.props){const o=Object.keys(ey).find(u=>ey[u]===r);let l=o?t[o]:void 0;l!==null&&typeof l=="object"&&(l=void 0);const d=r==="backgroundImage"&&typeof l=="string"&&l!==""?IH(l):l;s(r,d)}return}for(const r of e.props){const o=e.values&&r in e.values?e.values[r]:t;s(r,o)}return}typeof e.prop=="string"&&s(e.prop,e.value!==void 0?e.value:t)}function zH(n,e,t){if(typeof e.varName!="string")return;const s=e.value!==void 0?e.value:t;s==null||s===""?delete n[e.varName]:n[e.varName]=s}function PH(n,e,t){if(typeof e.propKey!="string")return;const s=e.value!==void 0?e.value:t;s==null||s===""?delete n[e.propKey]:n[e.propKey]=s}function ea(n,e,t,s=$r){const r=Zk(e),o=s.colorScheme==="dark";let l,d=!1;if(r.options){const b=r.options.find(y=>y.value===t);d=b!==void 0,l=b?.apply??r.apply}else l=r.apply;const u=t==null||t===""||d&&l===void 0,g=(u?r.apply:l)?.type==="classToken"||(r.options?.some(b=>b.apply?.type==="classToken")??!1);if(o&&!g)return n;const h=s.breakpoint!=="base"&&g?(()=>{const b=n.props??{};return typeof b.className=="string"?b.className:void 0})():void 0;return o1(n,s,(b,y)=>{if(h!==void 0&&typeof b.className!="string"&&(b.className=h),u){const v=e1(r,o),x=If(b.className).filter(S=>!v(S));if(x.length===0?delete b.className:b.className=x.join(" "),!o&&r.apply){const S=r.apply;if(S.type==="styleProp")for(const _ of S.props??(S.prop?[S.prop]:[]))delete y[_];else S.type==="cssVar"&&S.varName?delete y[S.varName]:S.type==="propValue"&&S.propKey&&delete b[S.propKey]}}else if(l)switch(l.type){case"classToken":NH(b,r,l,t,o);break;case"styleProp":MH(y,l,t);break;case"cssVar":zH(y,l,t);break;case"propValue":PH(b,l,t);break}})}function Lf(n,e){const t=If(n);return e?t.filter(eo).map(sy):t.filter(s=>!eo(s))}function BH(n,e,t,s){const r=new Set(e.filter(d=>typeof d=="string"&&d.length>0)),o=d=>s?eo(d)?r.has(sy(d)):!1:eo(d)?!1:r.has(d),l=If(n).filter(d=>!o(d));return t&&t.length>0&&l.push(s?a1(t):t),l.join(" ").trim()}function n1(n,e,t,s){if(n.options&&n.options.some(o=>o.apply)){const o=Lf(e.className,s),l=[];for(const d of n.options)d.apply&&WH(d.apply,o,t,e)&&l.push(d.value);if(l.length>0)return{value:l[0],matched:!0,conflict:l.length>1?!0:void 0};if(!n.apply)return{value:void 0,matched:!1}}const r=n.apply;if(!r)return{value:void 0,matched:!1};switch(r.type){case"styleProp":{if(!r.values&&Array.isArray(r.props)&&LH(r.props)){const d=OH(t);return d===void 0?{value:void 0,matched:!1}:{value:d,matched:!0}}const o=r.prop??r.props?.[0];if(!o)return{value:void 0,matched:!1};const l=t[o];return l===void 0?{value:void 0,matched:!1}:{value:l,matched:!0}}case"cssVar":{if(!r.varName)return{value:void 0,matched:!1};const o=t[r.varName];return o===void 0?{value:void 0,matched:!1}:{value:o,matched:!0}}case"propValue":{if(!r.propKey)return{value:void 0,matched:!1};const o=e[r.propKey];return o===void 0?{value:void 0,matched:!1}:{value:o,matched:!0}}case"classToken":{const o=Lf(e.className,s);if(r.tokenTemplate&&r.tokenTemplate.includes("{value}")){const[l,d]=r.tokenTemplate.split("{value}");if((l??"")===""&&(d??"")===""&&n.groupPrefixes?.length){const u=o.filter(f=>n.groupPrefixes.some(g=>f.startsWith(g)));return u.length>0?{value:u.join(" "),matched:!0}:{value:void 0,matched:!1}}for(const u of o)if(u.startsWith(l)&&u.endsWith(d??""))return{value:u.slice(l.length,d?u.length-d.length:void 0),matched:!0}}return Array.isArray(r.tokens)&&r.tokens.every(l=>o.includes(l))?{value:!0,matched:!0}:{value:void 0,matched:!1}}default:return{value:void 0,matched:!1}}}function s1(n){return n.style&&typeof n.style=="object"&&!Array.isArray(n.style)?n.style:{}}function Uc(n,e,t=$r){const s=Zk(e),r=t.colorScheme==="dark";if(r&&!ny(s.apply)&&!s.options?.some(v=>ny(v.apply)))return{value:void 0,matched:!1,darkReadonly:!0};const o=KH(n,t),l=s1(o),d=n1(s,o,l,r);if(t.breakpoint==="base")return d;const u=d.matched?d.value:void 0,f=n.props??{},g=s1(f),h=n1(s,f,g,r),b=d.matched&&d.value!==void 0,y=b&&!HH(d.value,h.value);return{value:b?d.value:h.value,matched:y?d.matched:h.matched,conflict:y?d.conflict:h.conflict,scopedValue:y?d.value:void 0,baseFallback:y?void 0:h.value,scopedRawValue:u}}function HH(n,e){if(n===e)return!0;if(n===null||e===null||typeof n!="object"||typeof e!="object")return!1;try{return JSON.stringify(n)===JSON.stringify(e)}catch{return!1}}function WH(n,e,t,s){switch(n.type){case"classToken":return Array.isArray(n.tokens)&&n.tokens.length>0?n.tokens.every(r=>e.includes(r)):!1;case"styleProp":{const r=n.prop??n.props?.[0];if(!r)return!1;const o=n.value;return o!==void 0?t[r]===o:t[r]!==void 0}case"cssVar":return n.varName?t[n.varName]!==void 0:!1;case"propValue":return n.propKey?n.value!==void 0?s[n.propKey]===n.value:s[n.propKey]!==void 0:!1;default:return!1}}const $r={colorScheme:"base",breakpoint:"base"},qc="dark:";function UH(n){return n==="base"?!0:Ws.parseRange(n)!==null}function r1(n){return n in Ko}function Of(n,e,t){if(n==="custom"){if(typeof t=="number"){const s=e.responsive;if(s&&typeof s=="object"){const r=Ws.getMatchingKey(s,t);if(r)return r}}return"base"}return n}function qH(n){return!!n&&typeof n=="object"&&Array.isArray(n.children)}function FH(n,e,t){let s,r,o;if(n!=="custom"&&n in Ko){s=n;const d=Ko[n];r=d.min,o=d.max}else if(n!=="custom"){const d=Ws.parseRange(n);if(d)s=n,r=d.min,o=d.max;else{const u=typeof t=="number"?t:Ws.getWidth();s=`${u}-${u}`,r=u,o=u}}else{const d=typeof t=="number"?t:Ws.getWidth();r=d,o=d,s=`${d}-${d}`}const l=e.responsive;if(l&&typeof l=="object"){let d=null,u=1/0;for(const f of Object.keys(l)){if(!qH(l[f]))continue;const g=Ws.parseRange(f);if(g){if(g.min===r&&g.max===o)return{mode:"merge",key:f};if(g.min<=r&&g.max>=o){const h=g.max-g.min;h<u&&(u=h,d=f)}}}if(d)return{mode:"separate",key:s,sourceKey:d}}return{mode:"separate",key:s}}function VH(n){switch(n){case"mobile":case"portable":return{i18nKey:"layout_editor.overlay.branch_mobile",raw:n};case"tablet":return{i18nKey:"layout_editor.overlay.branch_tablet",raw:n};case"desktop":return{i18nKey:"layout_editor.overlay.branch_desktop",raw:n};default:return{i18nKey:null,raw:n}}}function KH(n,e){return e.breakpoint==="base"?n.props??{}:n.responsive?.[e.breakpoint]?.props??{}}function o1(n,e,t){if(e.breakpoint==="base"){const{props:f,style:g}=Qk(n.props);return t(f,g),Object.keys(g).length===0&&delete f.style,{...n,props:f}}const s=e.breakpoint,r={...n.responsive??{}},o={...r[s]??{}},{props:l,style:d}=Qk(o.props);t(l,d),Object.keys(d).length===0&&delete l.style,Object.keys(l).length===0?delete o.props:o.props=l,Object.keys(o).length===0?delete r[s]:r[s]=o;const u={...n};return Object.keys(r).length===0?delete u.responsive:u.responsive=r,u}function GH(n,e){if(e.breakpoint==="base")return n.if;const t=n.responsive?.[e.breakpoint];return t&&typeof t=="object"&&"if"in t?t.if:n.if}function YH(n,e,t){const s=t==null||t==="";if(e.breakpoint==="base"){const u={...n};return s?delete u.if:u.if=t,u}const r=e.breakpoint,o={...n.responsive??{}},l={...o[r]??{}};s?delete l.if:l.if=t,Object.keys(l).length===0?delete o[r]:o[r]=l;const d={...n};return Object.keys(o).length===0?delete d.responsive:d.responsive=o,d}function ny(n){return n?.type==="classToken"}function eo(n){return n.startsWith(qc)}function sy(n){return n.startsWith(qc)?n.slice(qc.length):n}function a1(n){return n.startsWith(qc)?n:`${qc}${n}`}function Mf(n){return typeof n=="string"?n.split(/\s+/).filter(e=>e.length>0):[]}function XH(n,e){if(e.colorScheme==="dark")return o1(n,e,d=>{const u=Mf(d.className).filter(f=>!eo(f));u.length===0?delete d.className:d.className=u.join(" ")});if(e.breakpoint==="base")return n;const s=e.breakpoint;if(!n.responsive?.[s])return n;const r={...n.responsive},o={...r[s]};delete o.props,Object.keys(o).length===0?delete r[s]:r[s]=o;const l={...n};return Object.keys(r).length===0?delete l.responsive:l.responsive=r,l}function ry(n,e){if(e.colorScheme==="dark"){const f=e.breakpoint==="base"?n.props:n.responsive?.[e.breakpoint]?.props;return Mf(f?.className).some(eo)}if(e.breakpoint==="base")return!1;const s=n.responsive?.[e.breakpoint];if(!s)return!1;const r=s.props;if(Object.keys(s).filter(f=>f!=="props").length>0)return!0;if(!r)return!1;if(Object.keys(r).filter(f=>f!=="className").length>0)return!0;const d=new Set(Mf(n.props?.className).filter(f=>!eo(f))),u=Mf(r.className).filter(f=>!eo(f));return u.length!==d.size?!0:u.some(f=>!d.has(f))}function i1(n,e,t=""){return typeof n!="string"?t:n.startsWith("$t:")?e(n.slice(3)):n}function l1(n,e,t){if(t.breakpoint!=="base")return YH(n,t,e.trim());const s={...n};if(s.props&&typeof s.props=="object"&&"if"in s.props){const r={...s.props};delete r.if,s.props=r}return e.trim()===""?delete s.if:s.if=e,s}function c1({node:n,spec:e,t,onPatchNode:s,dataSourceCandidates:r,stateKeyCandidates:o,scope:l=$r}){const d=qe.useMemo(()=>kH(e?.conditionRecipes),[e]),u=l.breakpoint!=="base"?GH(n,l):n.if??n.props?.if,f=qe.useMemo(()=>$H(u,d),[u,d]),g=f?.clauses??[],h=f?.combinator??"and",b=typeof u=="string"&&u.trim()!==""&&f===null;if(d.length===0)return a.jsx("div",{"data-testid":"g7le-condition-no-recipes",style:JH,children:t("layout_editor.visibility.no_recipes")});const y=(C,j)=>{s(l1(n,Xk(C,j,d),l))},v=(C,j)=>{y(g.map((E,T)=>T===C?j:E),h)},x=C=>{y(g.filter((j,E)=>E!==C),h)},S=C=>{const j=d[0];y([...g,{operator:j.value,params:{}}],C)},_=C=>{if(C==="datasource-picker")return r;if(C==="state-key-picker")return o};if(b)return a.jsxs("div",{className:"g7le-condition-advanced","data-testid":"g7le-condition-advanced",style:{display:"flex",flexDirection:"column",gap:8},children:[a.jsx("div",{style:a9,children:t("layout_editor.visibility.advanced_preserved")}),a.jsx("code",{"data-testid":"g7le-condition-advanced-expr",style:u1,children:String(u)}),a.jsx("button",{type:"button","data-testid":"g7le-condition-clear-advanced",onClick:()=>s(l1(n,"",l)),style:i9,children:t("layout_editor.visibility.clear")})]});const A=Xk(g,h,d);return a.jsxs("div",{className:"g7le-condition-builder","data-testid":"g7le-condition-builder",style:{display:"flex",flexDirection:"column",gap:10},children:[a.jsx("div",{style:ZH,children:t("layout_editor.visibility.show_when")}),g.map((C,j)=>{const E=d.find(T=>T.value===C.operator)??d[0];return a.jsxs("div",{className:"g7le-condition-clause","data-testid":`g7le-condition-clause-${j}`,style:QH,children:[a.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center"},children:[j>0&&a.jsx("span",{"data-testid":`g7le-condition-combinator-${j}`,style:t9,children:t(h==="or"?"layout_editor.visibility.or":"layout_editor.visibility.and")}),a.jsx("select",{"data-testid":`g7le-condition-select-${j}`,value:C.operator,onChange:T=>v(j,{operator:T.target.value,params:{}}),style:e9,children:d.map(T=>a.jsx("option",{value:T.value,children:i1(T.label,t,T.value)},T.value))}),a.jsx("button",{type:"button","data-testid":`g7le-condition-remove-${j}`,"aria-label":t("layout_editor.visibility.remove"),onClick:()=>x(j),style:n9,children:"✕"})]}),E.params.map(T=>{const D=qa(T.widget);return a.jsxs("div",{className:"g7le-condition-param","data-testid":`g7le-condition-param-${j}-${T.key}`,style:s9,children:[a.jsx("span",{style:r9,children:i1(T.label,t,T.key)}),a.jsx("div",{style:{flex:1},children:D?a.jsx(D,{control:{...T},value:C.params[T.key],onChange:I=>v(j,{operator:C.operator,params:{...C.params,[T.key]:I===void 0?"":String(I)}}),t,candidates:_(T.widget)}):a.jsx("span",{style:{fontSize:11,color:"#94a3b8"},children:t("layout_editor.property_modal.unsupported_widget")})})]},T.key)})]},j)}),a.jsxs("div",{style:{display:"flex",gap:6},children:[a.jsxs("button",{type:"button","data-testid":"g7le-condition-add-and",onClick:()=>S("and"),style:d1,children:["+ ",t("layout_editor.visibility.and")]}),a.jsxs("button",{type:"button","data-testid":"g7le-condition-add-or",onClick:()=>S("or"),style:d1,children:["+ ",t("layout_editor.visibility.or")]})]}),A!==""&&a.jsxs("div",{"data-testid":"g7le-condition-preview",style:o9,children:[a.jsx("span",{style:{fontSize:11,color:"#64748b"},children:t("layout_editor.visibility.preview")}),a.jsx("code",{style:u1,children:A})]})]})}const JH={fontSize:12,color:"#94a3b8",padding:"16px 0",textAlign:"center"},ZH={fontSize:12,fontWeight:600,color:"#0f172a"},QH={border:"1px solid #e2e8f0",borderRadius:8,padding:10,display:"flex",flexDirection:"column",gap:8,background:"#f8fafc"},e9={flex:1,padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff"},t9={fontSize:11,fontWeight:700,color:"#2563eb",background:"#dbeafe",padding:"2px 8px",borderRadius:999},n9={border:"none",background:"transparent",color:"#94a3b8",cursor:"pointer",fontSize:12},d1={padding:"5px 12px",fontSize:12,border:"1px dashed #94a3b8",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},s9={display:"flex",alignItems:"center",gap:8},r9={fontSize:11,color:"#64748b",minWidth:64},o9={display:"flex",flexDirection:"column",gap:4,padding:10,background:"#f1f5f9",borderRadius:6},u1={fontSize:11,color:"#0f172a",fontFamily:"monospace",wordBreak:"break-all"},a9={fontSize:11,color:"#92400e",background:"#fef3c7",padding:"6px 8px",borderRadius:6},i9={padding:"5px 12px",fontSize:12,border:"1px solid #fecaca",borderRadius:6,background:"#fff",color:"#dc2626",cursor:"pointer",alignSelf:"flex-start"};function l9(n){return typeof n=="string"?n:n===void 0?"":JSON.stringify(n)}function c9(n){const e=n.trim();if(e==="")return"";if(/^-?\d+(\.\d+)?$/.test(e)||e==="true"||e==="false"||e==="null")try{return JSON.parse(e)}catch{return n}return n}function f1(n){return!n||typeof n!="object"||Array.isArray(n)?[]:Object.entries(n).map(([e,t])=>({key:e,value:l9(t)}))}function oy(n){const e={};for(const t of n){const s=t.key.trim();s!==""&&(e[s]=c9(t.value))}return e}function p1(n){return!n||typeof n!="object"||Array.isArray(n)?!1:Object.values(n).some(e=>e!==null&&typeof e=="object")}function d9(n){const e={};return typeof n.if=="string"&&n.if.trim().length>0&&(e.if=n.if),e}function u9(n,e){const t={...e},s=n.if;return typeof s=="string"&&s.trim().length>0?t.if=s:delete t.if,t}const f9=["api","static","route_params","query_params","websocket"],p9=["GET","POST","PUT","PATCH","DELETE"],g9=["none","optional","required"],h9=["progressive","blocking","background"],m9=["application/json","multipart/form-data"],y9=["public","private","presence"];function b9(n){if(!n||typeof n!="object")return{own:[],inherited:[]};const e=n.__editor,t=e&&typeof e=="object"&&!Array.isArray(e)?e.original:void 0,s=t&&typeof t=="object"&&!Array.isArray(t)?t.data_sources:n.data_sources,r=Array.isArray(s)?s.filter(f=>f&&typeof f=="object"):[],o=new Set(r.map(f=>typeof f.id=="string"?f.id:"").filter(Boolean)),l=n.data_sources,u=(Array.isArray(l)?l.filter(f=>f&&typeof f=="object"):[]).filter(f=>typeof f.id=="string"&&!o.has(f.id));return{own:r,inherited:u}}function x9(n,e){const t=(s,r="")=>typeof s=="string"?s:r;return{index:e,id:t(n.id),type:t(n.type,"api"),label_key:t(n.label_key),endpoint:t(n.endpoint),method:t(n.method,"GET"),auth_mode:t(n.auth_mode,"none"),loading_strategy:t(n.loading_strategy,"progressive"),auto_fetch:n.auto_fetch!==!1,paramRows:f1(n.params),paramsRaw:p1(n.params),paramsRawValue:n.params&&typeof n.params=="object"&&!Array.isArray(n.params)?n.params:{},paramsRawValid:!0,fallbackEnabled:n.fallback!==void 0,fallbackValue:n.fallback,if:t(n.if),contentType:t(n.contentType),refetchOnMount:n.refetchOnMount===!0,onSuccess:Array.isArray(n.onSuccess)?n.onSuccess.filter(s=>!!s&&typeof s=="object"):[],onError:Array.isArray(n.onError)?n.onError.filter(s=>!!s&&typeof s=="object"):[],errorHandling:n.errorHandling&&typeof n.errorHandling=="object"&&!Array.isArray(n.errorHandling)?n.errorHandling:{},channel:t(n.channel),event:t(n.event),channel_type:t(n.channel_type,"public"),target_source:t(n.target_source),onReceive:Array.isArray(n.onReceive)?n.onReceive.filter(s=>!!s&&typeof s=="object"):[]}}function v9(){return{index:-1,id:"",type:"api",label_key:"",endpoint:"",method:"GET",auth_mode:"none",loading_strategy:"progressive",auto_fetch:!0,paramRows:[],paramsRaw:!1,paramsRawValue:{},paramsRawValid:!0,fallbackEnabled:!1,fallbackValue:void 0,if:"",contentType:"",refetchOnMount:!1,onSuccess:[],onError:[],errorHandling:{},channel:"",event:"",channel_type:"public",target_source:"",onReceive:[]}}function w9(n,e,t,s){const r=n.id.trim();if(!r)return{error:s("layout_editor.data_sources.error.id_required")};if(!/^[A-Za-z_][\w]*$/.test(r))return{error:s("layout_editor.data_sources.error.id_invalid")};if(t.has(r))return{error:s("layout_editor.data_sources.error.id_duplicate",{id:r})};const o=e?{...e}:{};if(o.id=r,o.type=n.type,n.label_key.trim()?o.label_key=n.label_key.trim():delete o.label_key,n.type==="api"||n.type==="websocket"?(n.endpoint.trim()?o.endpoint=n.endpoint.trim():delete o.endpoint,o.method=n.method,o.auth_mode=n.auth_mode,o.loading_strategy=n.loading_strategy):(delete o.endpoint,delete o.method),o.auto_fetch=n.auto_fetch,n.paramsRaw){if(!n.paramsRawValid)return{error:s("layout_editor.data_sources.error.params_json")};const l=n.paramsRawValue;l&&typeof l=="object"&&Object.keys(l).length>0?o.params=l:delete o.params}else{const l=oy(n.paramRows);Object.keys(l).length>0?o.params=l:delete o.params}return n.fallbackEnabled?o.fallback=n.fallbackValue===void 0?{}:n.fallbackValue:delete o.fallback,n.if.trim()?o.if=n.if.trim():delete o.if,n.type==="api"&&n.contentType?o.contentType=n.contentType:delete o.contentType,n.refetchOnMount?o.refetchOnMount=!0:delete o.refetchOnMount,n.onSuccess.length>0?o.onSuccess=n.onSuccess:delete o.onSuccess,n.onError.length>0?o.onError=n.onError:delete o.onError,Object.keys(n.errorHandling).length>0?o.errorHandling=n.errorHandling:delete o.errorHandling,n.type==="websocket"?(n.channel?o.channel=n.channel:delete o.channel,n.event?o.event=n.event:delete o.event,o.channel_type=n.channel_type,n.target_source?o.target_source=n.target_source:delete o.target_source,n.onReceive.length>0?o.onReceive=n.onReceive:delete o.onReceive):(delete o.channel,delete o.event,delete o.channel_type,delete o.target_source,delete o.onReceive),{entry:o}}const Nr={width:"100%",padding:"6px 8px",fontSize:13,border:"1px solid #cbd5e1",borderRadius:6,outline:"none",boxSizing:"border-box",fontFamily:"inherit",color:"#0f172a",background:"#ffffff"},cs={display:"block",fontSize:12,fontWeight:600,color:"#475569",marginBottom:4},ds={marginBottom:12},_o={padding:"6px 12px",fontSize:13,fontWeight:500,borderRadius:6,border:"1px solid #cbd5e1",background:"#ffffff",color:"#0f172a",cursor:"pointer"},g1={..._o,background:"#2563eb",borderColor:"#2563eb",color:"#ffffff",fontWeight:600},Fc={marginTop:12,padding:10,border:"1px solid #e2e8f0",borderRadius:8,background:"#f8fafc"},Vc={fontSize:12,fontWeight:700,color:"#475569",marginBottom:8},_9={margin:"0 0 6px",fontSize:11,color:"#94a3b8"},h1={marginTop:8},m1={alignSelf:"flex-start",padding:"2px 0",fontSize:11,border:"none",background:"none",color:"#64748b",cursor:"pointer"},y1={margin:0,padding:8,background:"#0f172a",color:"#e2e8f0",borderRadius:6,fontSize:11,lineHeight:1.5,overflow:"auto",fontFamily:"ui-monospace, monospace"};function S9({code:n,action:e,recipes:t,pools:s,t:r,onPatch:o}){const[l,d]=qe.useState(!1),u=qe.useMemo(()=>Lc(t),[t]),f=Array.isArray(e)?e[0]:e,g=typeof f?.handler=="string"?f.handler:"",h=u.find(A=>A.id===g)??null,b=f?Zi(f,u):null,y=b?.kind==="preset"?b.values:{},v=g==="sequence"||g==="parallel",x=["","showErrorPage","navigate","openModal","toast","setState","sequence","parallel"],S=A=>{if(A===""){o({});return}const C=u.find(j=>j.id===A);o(C?ff(C,{}):{handler:A})},_=v&&f?Array.isArray(f.params?.actions)?f.params.actions:[]:[];return a.jsxs("div",{"data-testid":`g7le-ds-errorhandling-${n}`,style:{display:"flex",flexDirection:"column",gap:6},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[a.jsx("select",{"data-testid":`g7le-ds-eh-handler-${n}`,style:{...Nr,flex:1},value:g,onChange:A=>S(A.target.value),children:x.map(A=>a.jsx("option",{value:A,children:r(A===""?"layout_editor.error.handler_none":`layout_editor.error.handler_${A}`)},A))}),g!==""?a.jsx("button",{type:"button","data-testid":`g7le-ds-eh-code-${n}`,onClick:()=>d(A=>!A),"aria-label":r("layout_editor.action_list.view_code"),title:r("layout_editor.action_list.view_code"),style:l?k9:b1,children:"</>"}):null]}),v?a.jsx("div",{"data-testid":`g7le-ds-eh-actions-${n}`,children:a.jsx(Qr,{actions:_,onChange:A=>o({handler:g,params:{actions:A}}),t:r,recipes:t,candidatePools:s,chipContext:"error",testIdPrefix:`g7le-ds-eh-seq-${n}`})}):h&&f?a.jsx(Hm,{raw:f,recipe:h,values:y,t:r,pools:s,onChange:A=>o(A),testIdPrefix:`g7le-ds-eh-action-${n}-edit`}):null,l&&f?a.jsx("pre",{"data-testid":`g7le-ds-eh-code-view-${n}`,style:C9,children:JSON.stringify(e,null,2)}):null]})}const b1={flex:"0 0 auto",width:26,height:26,display:"inline-flex",alignItems:"center",justifyContent:"center",fontSize:11,border:"1px solid #e2e8f0",borderRadius:6,background:"#fff",color:"#64748b",cursor:"pointer",fontFamily:"ui-monospace, monospace"},k9={...b1,background:"#0f172a",borderColor:"#0f172a",color:"#e2e8f0"},C9={margin:"4px 0 0",padding:8,background:"#0f172a",color:"#e2e8f0",borderRadius:6,fontSize:12,overflow:"auto",fontFamily:"ui-monospace, monospace"};function j9({raw:n,onChange:e,t,resolveLabel:s,onClose:r,actionRecipes:o,errorRecipes:l,conditionSpec:d,bindingCandidates:u,pageCandidates:f,dataSourceCandidates:g,stateKeyCandidates:h}){const b=s??t,y=w.useMemo(()=>b9(n),[n]),v=y.inherited,[x,S]=w.useState(y.own),[_,A]=w.useState(null),[C,j]=w.useState(null),[E,T]=w.useState(!1),[D,I]=w.useState(!1),[W,z]=w.useState(()=>new Set),H=w.useCallback(M=>{z(N=>{const V=new Set(N);return V.has(M)?V.delete(M):V.add(M),V})},[]),G=w.useMemo(()=>({pageCandidates:f,dataSourceCandidates:g,stateKeyCandidates:h,bindingCandidates:u}),[f,g,h,u]),F=w.useCallback(M=>{S(M),e([...v,...M],M)},[v,e]),Z=w.useCallback(()=>{j(null),A(v9())},[]),Y=w.useCallback((M,N)=>{j(null),A(x9(M,N))},[]),U=w.useCallback(M=>{const N=x.filter((V,ee)=>ee!==M);F(N)},[x,F]),B=w.useCallback(()=>{A(null),j(null)},[]),te=w.useCallback(()=>{if(!_)return;const M=new Set;x.forEach((se,re)=>{re!==_.index&&typeof se.id=="string"&&M.add(se.id)}),v.forEach(se=>{typeof se.id=="string"&&M.add(se.id)});const N=_.index>=0?x[_.index]??null:null,V=w9(_,N,M,t);if("error"in V){j(V.error);return}const ee=_.index>=0?x.map((se,re)=>re===_.index?V.entry:se):[...x,V.entry];F(ee),A(null),j(null)},[_,x,v,F,t]),q=_?.type==="api"||_?.type==="websocket";return a.jsxs("div",{className:"g7le-data-sources","data-testid":"g7le-data-sources-panel",style:{flex:"1 1 auto",minHeight:0,display:"flex",flexDirection:"column",fontSize:13,color:"#0f172a",boxSizing:"border-box"},children:[a.jsxs("div",{className:"g7le-data-sources__header",style:{flex:"0 0 auto",padding:"16px 16px 12px",borderBottom:"1px solid #e2e8f0"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:8},children:[a.jsx("h2",{style:{margin:0,fontSize:16,fontWeight:700},children:t("layout_editor.data_sources.title")}),a.jsx("button",{type:"button","data-testid":"g7le-data-sources-close",onClick:r,"aria-label":t("layout_editor.data_sources.close"),style:{..._o,padding:"4px 10px"},children:"✕"})]}),a.jsx("p",{style:{margin:0,fontSize:12,color:"#64748b",lineHeight:1.5},children:t("layout_editor.data_sources.description")})]}),a.jsxs("div",{className:"g7le-data-sources__body",style:{flex:"1 1 auto",minHeight:0,overflowY:"auto",padding:16},children:[_&&a.jsxs("div",{className:"g7le-data-sources__form","data-testid":"g7le-data-sources-form",children:[a.jsx("div",{style:{fontSize:13,fontWeight:700,marginBottom:12},children:_.index>=0?t("layout_editor.data_sources.form.edit_title"):t("layout_editor.data_sources.form.add_title")}),a.jsxs("div",{style:ds,children:[a.jsx("label",{style:cs,htmlFor:"g7le-ds-id",children:t("layout_editor.data_sources.field.id")}),a.jsx("input",{id:"g7le-ds-id","data-testid":"g7le-data-sources-field-id",style:Nr,value:_.id,onChange:M=>A({..._,id:M.target.value}),placeholder:"products"})]}),a.jsxs("div",{style:ds,children:[a.jsx("label",{style:cs,htmlFor:"g7le-ds-label",children:t("layout_editor.data_sources.field.label_key")}),a.jsx(ks,{value:_.label_key,onChange:M=>A({..._,label_key:M??""}),t,placeholder:t("layout_editor.data_sources.field.label_key_placeholder"),testidPrefix:"g7le-data-sources-field-label",candidates:u,enableExpressionTree:!0,expressionTreeCollapsible:!0}),a.jsx("div",{style:{fontSize:11,color:"#94a3b8",marginTop:4},children:t("layout_editor.data_sources.field.label_key_hint")})]}),a.jsxs("div",{style:ds,children:[a.jsx("label",{style:cs,htmlFor:"g7le-ds-type",children:t("layout_editor.data_sources.field.type")}),a.jsx("select",{id:"g7le-ds-type","data-testid":"g7le-data-sources-field-type",style:Nr,value:_.type,onChange:M=>A({..._,type:M.target.value}),children:f9.map(M=>a.jsx("option",{value:M,children:t(`layout_editor.data_sources.ds_type.${M}`)},M))})]}),q&&a.jsxs(a.Fragment,{children:[a.jsxs("div",{style:ds,children:[a.jsx("label",{style:cs,children:t("layout_editor.data_sources.field.endpoint")}),a.jsx("div",{"data-testid":"g7le-data-sources-field-endpoint",children:a.jsx(gn,{value:_.endpoint,onChange:M=>A({..._,endpoint:M}),t,candidates:u,placeholder:"/api/shop/products/{{route.id}}",testidPrefix:"g7le-ds-endpoint"})})]}),a.jsxs("div",{style:{display:"flex",gap:12},children:[a.jsxs("div",{style:{...ds,flex:1},children:[a.jsx("label",{style:cs,htmlFor:"g7le-ds-method",children:t("layout_editor.data_sources.field.method")}),a.jsx("select",{id:"g7le-ds-method","data-testid":"g7le-data-sources-field-method",style:Nr,value:_.method,onChange:M=>A({..._,method:M.target.value}),children:p9.map(M=>a.jsx("option",{value:M,children:M},M))})]}),a.jsxs("div",{style:{...ds,flex:1},children:[a.jsx("label",{style:cs,htmlFor:"g7le-ds-auth",children:t("layout_editor.data_sources.field.auth_mode")}),a.jsx("select",{id:"g7le-ds-auth","data-testid":"g7le-data-sources-field-auth",style:Nr,value:_.auth_mode,onChange:M=>A({..._,auth_mode:M.target.value}),children:g9.map(M=>a.jsx("option",{value:M,children:t(`layout_editor.data_sources.auth_mode.${M}`)},M))})]})]}),a.jsxs("div",{style:ds,children:[a.jsx("label",{style:cs,htmlFor:"g7le-ds-loading",children:t("layout_editor.data_sources.field.loading_strategy")}),a.jsx("select",{id:"g7le-ds-loading","data-testid":"g7le-data-sources-field-loading",style:Nr,value:_.loading_strategy,onChange:M=>A({..._,loading_strategy:M.target.value}),children:h9.map(M=>a.jsx("option",{value:M,children:t(`layout_editor.data_sources.loading_strategy.${M}`)},M))})]}),_.type==="api"&&a.jsxs("div",{style:ds,children:[a.jsx("label",{style:cs,htmlFor:"g7le-ds-contenttype",children:t("layout_editor.data_sources.field.content_type")}),a.jsx("select",{id:"g7le-ds-contenttype","data-testid":"g7le-ds-contenttype",style:Nr,value:_.contentType||"application/json",onChange:M=>A({..._,contentType:M.target.value}),children:m9.map(M=>a.jsx("option",{value:M,children:M},M))})]})]}),a.jsx("div",{style:ds,children:a.jsxs("label",{style:{...cs,display:"flex",alignItems:"center",gap:8,cursor:"pointer"},children:[a.jsx("input",{type:"checkbox","data-testid":"g7le-data-sources-field-autofetch",checked:_.auto_fetch,onChange:M=>A({..._,auto_fetch:M.target.checked})}),t("layout_editor.data_sources.field.auto_fetch")]})}),a.jsx("div",{style:ds,children:a.jsxs("label",{style:{...cs,display:"flex",alignItems:"center",gap:8,cursor:"pointer"},children:[a.jsx("input",{type:"checkbox","data-testid":"g7le-ds-refetch",checked:_.refetchOnMount,onChange:M=>A({..._,refetchOnMount:M.target.checked})}),t("layout_editor.data_sources.field.refetch_on_mount")]})}),a.jsxs("div",{style:ds,children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsx("label",{style:cs,htmlFor:"g7le-ds-params",children:t("layout_editor.data_sources.field.params")}),a.jsx("button",{type:"button","data-testid":"g7le-ds-params-mode-toggle",onClick:()=>{if(_.paramsRaw){if(_.paramsRawValid){const M=_.paramsRawValue;M&&typeof M=="object"&&!Array.isArray(M)&&!p1(M)&&A({..._,paramsRaw:!1,paramRows:f1(M)})}}else{const M=oy(_.paramRows);A({..._,paramsRaw:!0,paramsRawValue:M,paramsRawValid:!0})}},style:{..._o,padding:"2px 8px",fontSize:11},children:_.paramsRaw?t("layout_editor.data_sources.field.params_mode_block"):t("layout_editor.data_sources.field.params_mode_code")})]}),_.paramsRaw?a.jsx(Ym,{id:"g7le-ds-params",value:_.paramsRawValue,shape:"object",emptyValue:{},minHeight:64,testidPrefix:"g7le-data-sources-field-params",placeholder:`{
"page": "{{query.page ?? 1}}"
}`,shapeErrorKey:"layout_editor.data_sources.error.params_object",invalidErrorKey:"layout_editor.data_sources.error.params_json",t,onChange:M=>A(N=>N&&{...N,paramsRawValue:M??{},paramsRawValid:!0}),onValidityChange:M=>A(N=>N&&{...N,paramsRawValid:M})}):a.jsxs("div",{"data-testid":"g7le-data-sources-field-params",children:[_.paramRows.length===0&&a.jsx("p",{"data-testid":"g7le-ds-params-empty",style:_9,children:t("layout_editor.data_sources.field.params_empty")}),a.jsx(kf,{value:_.paramRows.map(M=>({key:M.key,value:M.value})),onChange:M=>A({..._,paramRows:M.map(N=>({key:N.key??"",value:N.value??""}))}),keyField:"key",valueField:"value",t,candidates:u,testidPrefix:"g7le-ds-params-kv",keyPlaceholder:t("layout_editor.data_sources.field.param_key_placeholder"),valuePlaceholder:"{{query.page ?? 1}}",addLabel:t("layout_editor.data_sources.field.param_add")}),(()=>{const M=oy(_.paramRows);return Object.keys(M).length===0?null:a.jsxs("div",{style:h1,children:[a.jsxs("button",{type:"button","data-testid":"g7le-ds-params-preview-toggle","aria-expanded":E,onClick:()=>T(N=>!N),style:m1,children:[E?"▴":"▾"," ",t("layout_editor.data_sources.field.params_preview")]}),E&&a.jsx("pre",{"data-testid":"g7le-ds-params-preview",style:{...y1,marginTop:4},children:JSON.stringify(M,null,2)})]})})()]}),a.jsx("div",{style:{fontSize:11,color:"#94a3b8",marginTop:4},children:t("layout_editor.data_sources.field.params_hint")})]}),a.jsxs("div",{style:ds,children:[a.jsx("label",{style:cs,children:t("layout_editor.data_sources.field.fallback")}),_.fallbackEnabled?a.jsxs("div",{"data-testid":"g7le-data-sources-field-fallback",style:{display:"flex",flexDirection:"column",gap:6},children:[a.jsx(Va,{value:_.fallbackValue===void 0?{}:_.fallbackValue,onChange:M=>A({..._,fallbackValue:M}),t,path:"fallback",scope:"ds-fallback",renderStringLeaf:M=>a.jsx(gn,{value:M.value,onChange:M.onChange,t,candidates:u,testidPrefix:M.testidPrefix})}),(()=>{const M=_.fallbackValue===void 0?{}:_.fallbackValue;return a.jsxs("div",{style:h1,children:[a.jsxs("button",{type:"button","data-testid":"g7le-ds-fallback-preview-toggle","aria-expanded":D,onClick:()=>I(N=>!N),style:m1,children:[D?"▴":"▾"," ",t("layout_editor.data_sources.field.fallback_preview")]}),D&&a.jsx("pre",{"data-testid":"g7le-ds-fallback-preview",style:{...y1,marginTop:4},children:JSON.stringify(M,null,2)})]})})(),a.jsx("button",{type:"button","data-testid":"g7le-data-sources-field-fallback-clear",onClick:()=>A({..._,fallbackEnabled:!1,fallbackValue:void 0}),style:{..._o,padding:"2px 8px",fontSize:11,alignSelf:"flex-start",color:"#dc2626",borderColor:"#fecaca"},children:t("layout_editor.data_sources.field.fallback_clear")})]}):a.jsxs("button",{type:"button","data-testid":"g7le-data-sources-field-fallback-add",onClick:()=>A({..._,fallbackEnabled:!0,fallbackValue:{}}),style:{..._o,padding:"4px 10px",display:"block"},children:["+ ",t("layout_editor.data_sources.field.fallback_add")]})]}),_.type==="websocket"&&a.jsxs("div",{"data-testid":"g7le-ds-ws-section",style:Fc,children:[a.jsx("div",{style:Vc,children:t("layout_editor.data_sources.section.websocket")}),a.jsxs("div",{style:ds,children:[a.jsx("label",{style:cs,children:t("layout_editor.data_sources.field.channel")}),a.jsx("input",{"data-testid":"g7le-ds-ws-channel",style:Nr,value:_.channel,onChange:M=>A({..._,channel:M.target.value}),placeholder:"core.admin.dashboard"})]}),a.jsxs("div",{style:ds,children:[a.jsx("label",{style:cs,children:t("layout_editor.data_sources.field.event")}),a.jsx("input",{"data-testid":"g7le-ds-ws-event",style:Nr,value:_.event,onChange:M=>A({..._,event:M.target.value}),placeholder:"dashboard.stats.updated"})]}),a.jsxs("div",{style:ds,children:[a.jsx("label",{style:cs,children:t("layout_editor.data_sources.field.channel_type")}),a.jsx("select",{"data-testid":"g7le-ds-ws-channeltype",style:Nr,value:_.channel_type,onChange:M=>A({..._,channel_type:M.target.value}),children:y9.map(M=>a.jsx("option",{value:M,children:M},M))})]}),a.jsxs("div",{style:ds,children:[a.jsx("label",{style:cs,children:t("layout_editor.data_sources.field.target_source")}),a.jsx("input",{"data-testid":"g7le-ds-ws-target",style:Nr,value:_.target_source,onChange:M=>A({..._,target_source:M.target.value}),list:"g7le-ds-ws-target-list"}),a.jsx("datalist",{id:"g7le-ds-ws-target-list",children:x.filter(M=>M.id!==_.id).map(M=>typeof M.id=="string"?a.jsx("option",{value:M.id},M.id):null)})]}),a.jsxs("div",{style:ds,children:[a.jsx("label",{style:cs,children:t("layout_editor.data_sources.field.on_receive")}),a.jsx("div",{"data-testid":"g7le-ds-ws-onreceive",children:a.jsx(Qr,{actions:_.onReceive,onChange:M=>A({..._,onReceive:M}),t,recipes:o,candidatePools:G,chipContext:"payload",actionChipCandidates:d?.actionChipCandidates??null,testIdPrefix:"g7le-ds-onreceive-list"})})]})]}),a.jsxs("div",{style:Fc,children:[a.jsx("div",{style:Vc,children:t("layout_editor.data_sources.section.on_success")}),a.jsx("div",{"data-testid":"g7le-ds-onsuccess",children:a.jsx(Qr,{actions:_.onSuccess,onChange:M=>A({..._,onSuccess:M}),t,recipes:o,candidatePools:G,chipContext:"response",actionChipCandidates:d?.actionChipCandidates??null,testIdPrefix:"g7le-ds-onsuccess-list"})})]}),a.jsxs("div",{style:Fc,children:[a.jsx("div",{style:Vc,children:t("layout_editor.data_sources.section.on_error")}),a.jsx("div",{"data-testid":"g7le-ds-onerror",children:a.jsx(Qr,{actions:_.onError,onChange:M=>A({..._,onError:M}),t,recipes:o,candidatePools:G,chipContext:"error",actionChipCandidates:d?.actionChipCandidates??null,testIdPrefix:"g7le-ds-onerror-list"})})]}),a.jsxs("div",{style:Fc,children:[a.jsx("div",{style:Vc,children:t("layout_editor.data_sources.section.error_handling")}),a.jsxs("div",{"data-testid":"g7le-ds-errorhandling",children:[a.jsx(Qm,{value:_.errorHandling,onChange:M=>A({..._,errorHandling:M}),t,mode:"local",testIdPrefix:"g7le-ds-eh",renderActionList:(M,N,V)=>a.jsx(S9,{code:M,action:N,recipes:l,pools:G,t,onPatch:V})}),a.jsxs("button",{type:"button","data-testid":"g7le-ds-errorhandling-add",onClick:()=>{const M=Object.keys(_.errorHandling),N=["403","404","500","422","default"].find(V=>!M.includes(V))??"default";A({..._,errorHandling:{..._.errorHandling,[N]:{handler:"toast"}}})},style:{..._o,padding:"4px 10px",marginTop:6},children:["+ ",t("layout_editor.data_sources.add_error_code")]})]})]}),a.jsxs("div",{style:Fc,children:[a.jsx("div",{style:Vc,children:t("layout_editor.data_sources.section.load_condition")}),a.jsx("div",{"data-testid":"g7le-ds-loadcondition",children:a.jsx(c1,{node:d9({if:_.if||void 0}),spec:d??null,t,dataSourceCandidates:g,stateKeyCandidates:h,onPatchNode:M=>{const N=u9(M,{});A({..._,if:typeof N.if=="string"?N.if:""})}})})]})]}),!_&&a.jsxs("button",{type:"button","data-testid":"g7le-data-sources-add",onClick:Z,style:{...g1,marginBottom:16},children:["+ ",t("layout_editor.data_sources.add")]}),a.jsxs("div",{className:"g7le-data-sources__list","data-testid":"g7le-data-sources-list",style:{display:"flex",flexDirection:"column",gap:8},children:[x.length===0&&!_&&a.jsx("div",{"data-testid":"g7le-data-sources-empty",style:{fontSize:12,color:"#94a3b8",padding:"12px 0",textAlign:"center"},children:t("layout_editor.data_sources.empty")}),x.map((M,N)=>{const V=typeof M.id=="string"?M.id:`#${N}`,ee=typeof M.endpoint=="string"?M.endpoint:"",se=typeof M.label_key=="string"?M.label_key:"",re=hm(M,b);return a.jsxs("div",{"data-testid":"g7le-data-sources-item","data-ds-id":V,style:{border:"1px solid #e2e8f0",borderRadius:8,padding:"10px 12px",display:"flex",alignItems:"center",gap:8,background:"#ffffff"},children:[a.jsxs("div",{style:{flex:1,minWidth:0},children:[a.jsxs("div",{"data-testid":"g7le-data-sources-item-title",style:{fontWeight:600,fontSize:13,display:"flex",alignItems:"baseline",gap:6,flexWrap:"wrap"},children:[a.jsx("span",{children:re??V}),re&&a.jsx("span",{"data-testid":"g7le-data-sources-item-id",style:{fontSize:11,fontWeight:400,color:"#94a3b8"},children:V}),(()=>{const pe=mm(M,t);return pe?a.jsx("span",{"data-testid":"g7le-data-sources-ext-badge",style:{fontSize:10,fontWeight:600,color:"#7c3aed",background:"#f5f3ff",border:"1px solid #ddd6fe",borderRadius:4,padding:"1px 6px"},children:pe}):null})()]}),ee&&a.jsx("div",{style:{fontSize:11,color:"#94a3b8",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:ee}),!se&&a.jsx("div",{"data-testid":"g7le-data-sources-nolabel",style:{fontSize:11,color:"#f59e0b"},children:t("layout_editor.data_sources.no_label")})]}),a.jsx("button",{type:"button","data-testid":"g7le-data-sources-edit",onClick:()=>Y(M,N),style:{..._o,padding:"4px 10px"},children:t("layout_editor.data_sources.edit")}),a.jsx("button",{type:"button","data-testid":"g7le-data-sources-remove",onClick:()=>U(N),style:{..._o,padding:"4px 10px",color:"#dc2626",borderColor:"#fecaca"},children:t("layout_editor.data_sources.remove")})]},`${V}-${N}`)})]}),v.length>0&&a.jsxs("div",{style:{marginTop:16},children:[a.jsx("div",{style:{fontSize:12,fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:.4,marginBottom:8},children:t("layout_editor.data_sources.inherited_title")}),a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:v.map((M,N)=>{const V=typeof M.id=="string"?M.id:`#${N}`,ee=W.has(V),se=[],re=(pe,je)=>{const me=M[pe];me!=null&&se.push([je,typeof me=="object"?JSON.stringify(me):String(me)])};return re("type",t("layout_editor.data_sources.field.type")),re("endpoint",t("layout_editor.data_sources.field.endpoint")),re("method",t("layout_editor.data_sources.field.method")),re("auth_mode",t("layout_editor.data_sources.field.auth_mode")),re("loading_strategy",t("layout_editor.data_sources.field.loading_strategy")),re("auto_fetch",t("layout_editor.data_sources.field.auto_fetch")),re("params",t("layout_editor.data_sources.field.params")),a.jsxs("div",{"data-testid":"g7le-data-sources-inherited-item","data-ds-id":V,"data-expanded":ee?"true":"false",style:{border:"1px dashed #e2e8f0",borderRadius:6,fontSize:12,color:"#64748b",background:"#f8fafc",overflow:"hidden"},children:[a.jsxs("button",{type:"button","data-testid":"g7le-data-sources-inherited-toggle",onClick:()=>H(V),"aria-expanded":ee,style:{width:"100%",display:"flex",alignItems:"center",gap:8,padding:"8px 12px",background:"transparent",border:"none",cursor:"pointer",color:"inherit",fontSize:12,textAlign:"left",outline:"none"},children:[a.jsx("span",{style:{flex:"0 0 auto",width:12,transition:"transform 120ms",transform:ee?"rotate(90deg)":"none"},children:"▶"}),(()=>{const pe=hm(M,b),je=mm(M,t);return a.jsxs("span",{style:{flex:1,display:"inline-flex",alignItems:"baseline",gap:6,flexWrap:"wrap"},children:[a.jsx("span",{style:{fontWeight:600},children:pe??V}),pe&&a.jsx("span",{style:{fontSize:11,fontWeight:400,color:"#94a3b8"},children:V}),je&&a.jsx("span",{"data-testid":"g7le-data-sources-ext-badge",style:{fontSize:10,fontWeight:600,color:"#7c3aed",background:"#f5f3ff",border:"1px solid #ddd6fe",borderRadius:4,padding:"1px 6px"},children:je})]})})()]}),ee&&a.jsxs("div",{"data-testid":"g7le-data-sources-inherited-info",style:{padding:"0 12px 10px 32px",display:"flex",flexDirection:"column",gap:3},children:[se.length===0&&a.jsx("span",{style:{color:"#94a3b8"},children:"—"}),se.map(([pe,je])=>a.jsxs("div",{style:{display:"flex",gap:6},children:[a.jsxs("span",{style:{flex:"0 0 auto",color:"#94a3b8"},children:[pe,":"]}),a.jsx("span",{style:{flex:1,minWidth:0,wordBreak:"break-all",color:"#475569"},children:je})]},pe))]})]},`inh-${V}-${N}`)})})]})]}),_&&a.jsxs("div",{className:"g7le-data-sources__footer",style:{flex:"0 0 auto",padding:"12px 16px",borderTop:"1px solid #e2e8f0",background:"#ffffff"},children:[C&&a.jsx("div",{"data-testid":"g7le-data-sources-form-error",role:"alert",style:{fontSize:12,color:"#dc2626",marginBottom:10},children:C}),a.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:[a.jsx("button",{type:"button","data-testid":"g7le-data-sources-form-cancel",onClick:B,style:_o,children:t("layout_editor.data_sources.form.cancel")}),a.jsx("button",{type:"button","data-testid":"g7le-data-sources-form-submit",onClick:te,style:g1,children:t("layout_editor.data_sources.form.save")})]})]})]})}function E9(n){const e=n?.globalHeaders;return Array.isArray(e)?e:[]}function R9(n){const e=n?.scripts;return Array.isArray(e)?e:[]}function A9(n){const e=E9(n.raw),t=R9(n.raw);return a.jsxs("div",{className:"g7le-data-source-tab","data-testid":"g7le-data-source-tab",style:T9,children:[a.jsx(j9,{...n}),a.jsxs("div",{style:x1,"data-testid":"g7le-global-headers",children:[a.jsx("div",{style:v1,children:n.t("layout_editor.data_sources.global_headers")}),e.length===0?a.jsx("p",{"data-testid":"g7le-global-header-empty",style:C1,children:n.t("layout_editor.data_sources.global_headers_empty")}):e.map((s,r)=>a.jsxs("div",{"data-testid":`g7le-global-header-${r}`,style:w1,children:[a.jsx("code",{style:_1,children:s.pattern??"*"}),a.jsx("span",{style:$9,children:"→"}),a.jsx("span",{style:S1,children:Object.keys(s.headers??{}).join(", ")})]},r)),a.jsxs("p",{style:k1,children:["ⓘ ",n.t("layout_editor.data_sources.global_headers_hint")]})]}),a.jsxs("div",{style:x1,"data-testid":"g7le-scripts",children:[a.jsx("div",{style:v1,children:n.t("layout_editor.data_sources.scripts")}),t.length===0?a.jsx("p",{"data-testid":"g7le-script-empty",style:C1,children:n.t("layout_editor.data_sources.scripts_empty")}):t.map((s,r)=>a.jsxs("div",{"data-testid":`g7le-script-${s.id??r}`,style:w1,children:[a.jsx("code",{style:_1,children:s.id??`#${r}`}),a.jsx("span",{style:S1,children:s.src??""}),s.loading?a.jsx("span",{style:N9,children:s.loading}):null]},s.id??r)),a.jsxs("p",{style:k1,children:["ⓘ ",n.t("layout_editor.data_sources.scripts_hint")]})]})]})}const T9={display:"flex",flexDirection:"column",gap:16,minWidth:0},x1={borderTop:"1px solid #e2e8f0",paddingTop:12,display:"flex",flexDirection:"column",gap:6},v1={fontSize:12,fontWeight:700,color:"#475569"},w1={display:"flex",alignItems:"center",gap:8,fontSize:12,padding:"4px 8px",border:"1px solid #f1f5f9",borderRadius:6},_1={fontSize:11,color:"#0f172a",fontFamily:"monospace"},$9={color:"#94a3b8"},S1={flex:1,minWidth:0,color:"#475569",wordBreak:"break-all"},N9={fontSize:10,color:"#64748b",background:"#f1f5f9",borderRadius:4,padding:"0 4px"},k1={margin:0,fontSize:11,color:"#94a3b8"},C1={margin:0,fontSize:12,color:"#94a3b8"},D9=["meta","seo","init","overlay","computed","state","error","data"],I9=["401","403","404","500","503"],L9={meta:"layout_editor.page_settings.tab.meta",seo:"layout_editor.page_settings.tab.seo",init:"layout_editor.page_settings.tab.init",overlay:"layout_editor.page_settings.tab.overlay",computed:"layout_editor.page_settings.tab.computed",state:"layout_editor.page_settings.tab.state",error:"layout_editor.page_settings.tab.error",data:"layout_editor.page_settings.tab.data"};async function O9(n){if(typeof fetch!="function"||!n)return[];try{const e=await fetch(`/api/admin/templates/${encodeURIComponent(n)}/editor/seo-candidates.json`,{credentials:"same-origin",headers:on()});if(!e.ok)return[];const s=(await e.json().catch(()=>null))?.data?.extensions;if(!Array.isArray(s))return[];const r=[];for(const o of s)if(o&&typeof o=="object"){const l=o.type,d=o.id,u=o.label;typeof l=="string"&&typeof d=="string"&&d.length>0&&r.push({type:l,id:d,name:typeof u=="string"?u:d})}return r}catch{return[]}}function M9(n,e){let t=0;for(const s of n)Zi(s,e).kind==="advanced"&&(t+=1);return t}function z9(n,e){let t=0;for(const s of Object.keys(n))dS(n[s],e).kind==="advanced"&&(t+=1);return t}function P9(n,e,t){const s=n("meta",{})??{},r=s.title;if(typeof r=="string"&&r.length>0){if(r.startsWith("$t:")){const l=t(r.slice(3));if(l&&l!==r.slice(3))return l}else if(!/\{\{[\s\S]*\}\}/.test(r))return r}const o=s.editor_label;return typeof o=="string"&&o.length>0?o.startsWith("$t:")?t(o.slice(3)):o:e||""}function B9({templateIdentifier:n,spec:e,t,resolveLabel:s,permissionCandidates:r,onClose:o,initialTab:l="meta",extensionsFetcher:d}){const{state:u}=Rn(),{raw:f,getValue:g,patch:h}=c4(),[b,y]=w.useState(l),v=u.selectedRoute?.path??"",x=w.useMemo(()=>mS(u.routeTree,s),[u.routeTree,s]),S=w.useMemo(()=>yS(f),[f]),_=w.useMemo(()=>bS(e),[e]),A=w.useMemo(()=>E4(f,s),[f,s]),C=hS({raw:f,spec:e}),j=w.useMemo(()=>DO(e),[e]),E=w.useMemo(()=>IO(e),[e]),T=w.useMemo(()=>LO(e),[e]),D=w.useMemo(()=>OO(e),[e]),I=w.useMemo(()=>Lc(j),[j]),W=w.useMemo(()=>rS(E),[E]),z=g("init_actions",void 0)??g("initActions",[]),H=g("computed",{}),G=g("__computedSource",{}),F=g("errorHandling",{}),Z=g("transition_overlay",void 0),Y=(g("__editor",{})??{}).original,U=w.useMemo(()=>{if(Y===void 0)return;const ce=Y.transition_overlay;return ce&&typeof ce=="object"&&!Array.isArray(ce)?ce:{}},[Y]),B=w.useMemo(()=>{const ce=Z;if(!ce||typeof ce!="object"||Array.isArray(ce))return;const be=U??{},Be={};for(const[fe,De]of Object.entries(ce))fe in be||(Be[fe]=De);return Object.keys(Be).length>0?Be:void 0},[Z,U]),[te,q]=w.useState([]);w.useEffect(()=>{let ce=!1;const be=d??O9;return(async()=>{const Be=await be(n);ce||q(Be)})(),()=>{ce=!0}},[n,d]);const M=(g("meta",{})??{}).seo?.page_type,N=C4({raw:f,spec:e,pageType:typeof M=="string"?M:null}),V=w.useMemo(()=>k4(f,e),[f,e]),ee=w.useMemo(()=>({meta:0,seo:0,init:M9(z,I),overlay:0,computed:z9(H,W),state:0,error:0,data:0}),[z,I,H,W]),se=w.useMemo(()=>Object.values(ee).reduce((ce,be)=>ce+be,0),[ee]),re=w.useMemo(()=>j4(f,s,t),[f,s,t]),pe=w.useCallback(ce=>{const Be={...Y?.computed??{}};delete Be[ce];const fe={...H};delete fe[ce],h("computed",fe,Object.keys(Be).length===0?void 0:Be)},[Y,H,h]),je=P9(g,v,t),me=()=>{switch(b){case"meta":return a.jsx(Fz,{getValue:g,patch:h,t,fieldT:s,spec:e,permissionCandidates:r,bindingCandidates:C});case"seo":return a.jsx($5,{getValue:g,patch:h,t,templateIdentifier:n,candidates:N,availableExtensions:te,dataSourceOptions:re,previewUrl:v||"/",seedContext:V});case"init":return a.jsx(J8,{actions:z,onChange:ce=>h("init_actions",ce),recipes:j,t:s,bindingCandidates:C,pageCandidates:x,dataSourceCandidates:S,stateKeyCandidates:_,modalCandidates:A});case"overlay":return a.jsx(vP,{value:Z,ownValue:U,baseValue:B,patch:ce=>h("transition_overlay",ce),t:s,loadingComponents:D,progressiveDataSources:re,bindingCandidates:C});case"computed":return a.jsx(lB,{computed:H,onChange:ce=>h("computed",ce),recipes:E,t:s,sampleContext:V,dataSourceCandidates:S,bindingCandidates:C,computedSource:G,onRevert:pe});case"state":return a.jsx(UB,{raw:f,own:Y?{initLocal:Y.initLocal,initGlobal:Y.initGlobal,initIsolated:Y.initIsolated,state:Y.state}:void 0,patch:h,t});case"error":return a.jsx(hH,{value:F,onChange:ce=>h("errorHandling",ce),t:s,errorConfigCodes:I9,templateCodes:Object.keys(F),ownCodes:Object.keys(Y?.errorHandling??{}),recipes:T,pageCandidates:x,modalCandidates:A,dataSourceCandidates:S,stateKeyCandidates:_});case"data":return a.jsx(A9,{raw:f,t,resolveLabel:s,onChange:(ce,be)=>h("data_sources",ce,be),onClose:o,actionRecipes:j,errorRecipes:T,conditionSpec:e,bindingCandidates:C,pageCandidates:x,dataSourceCandidates:S,stateKeyCandidates:_});default:return a.jsx("div",{})}};return a.jsxs("div",{className:"g7le-page-settings","data-testid":"g7le-page-settings",style:H9,children:[a.jsxs("div",{style:W9,children:[a.jsx("span",{"data-testid":"g7le-page-settings-title",style:U9,children:t("layout_editor.page_settings.title",{name:je})}),a.jsx("button",{type:"button","data-testid":"g7le-page-settings-close-x",onClick:o,"aria-label":t("layout_editor.page_settings.close"),style:q9,children:"✕"})]}),a.jsx("div",{role:"tablist",style:F9,children:D9.map(ce=>{const be=ee[ce];return a.jsxs("button",{type:"button",role:"tab","aria-selected":b===ce,"data-testid":`g7le-page-settings-tab-${ce}`,"data-active":b===ce?"true":"false",onClick:()=>y(ce),style:b===ce?V9:j1,children:[t(L9[ce]),be>0?a.jsxs("span",{"data-testid":`g7le-page-settings-tab-badge-${ce}`,style:K9,children:["(",be,")"]}):null]},ce)})}),se>0?a.jsxs("p",{"data-testid":"g7le-page-settings-advanced-summary",style:G9,children:["⚠ ",t("layout_editor.page_settings.advanced_summary",{count:se})," ⓘ"]}):null,a.jsx("div",{"data-testid":"g7le-page-settings-panel",style:Y9,children:me()}),a.jsx("div",{style:X9,children:a.jsx("button",{type:"button","data-testid":"g7le-page-settings-close",onClick:o,style:J9,children:t("layout_editor.page_settings.close")})})]})}const H9={display:"flex",flexDirection:"column",minWidth:0,maxWidth:"100%",padding:"20px 24px",boxSizing:"border-box",flex:1,minHeight:0,maxHeight:"100%",overflow:"hidden",fontFamily:"system-ui, -apple-system, sans-serif"},W9={display:"flex",alignItems:"center",gap:8,paddingBottom:8,borderBottom:"1px solid #e2e8f0"},U9={flex:1,fontSize:15,fontWeight:700,color:"#0f172a",minWidth:0},q9={border:"none",background:"transparent",color:"#64748b",cursor:"pointer",fontSize:16,lineHeight:1,padding:4},F9={display:"flex",gap:2,paddingTop:8,borderBottom:"1px solid #e2e8f0",flexWrap:"nowrap",overflowX:"auto",overflowY:"hidden",flexShrink:0,minWidth:0},j1={border:"none",borderBottomWidth:"2px",borderBottomStyle:"solid",borderBottomColor:"transparent",background:"transparent",color:"#64748b",cursor:"pointer",fontSize:12,padding:"6px 10px",whiteSpace:"nowrap"},V9={...j1,color:"#2563eb",borderBottomColor:"#2563eb",fontWeight:600},K9={marginLeft:4,fontSize:10,color:"#b45309"},G9={margin:0,marginTop:8,fontSize:11,color:"#b45309",background:"#fffbeb",padding:"6px 8px",borderRadius:6},Y9={flex:1,overflowY:"auto",paddingTop:12,minWidth:0,minHeight:0},X9={display:"flex",justifyContent:"flex-end",paddingTop:8,borderTop:"1px solid #e2e8f0"},J9={border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer",fontSize:13,padding:"6px 16px"};function ay(n,e){const t=`/api/admin/templates/${encodeURIComponent(n)}`;return e.kind==="layout"?`${t}/layouts/${e.layoutName}/versions`:`${t}/layout-extensions/${encodeURIComponent(e.extensionId)}/versions`}function Z9(n,e,t){const[s,r]=w.useState([]),[o,l]=w.useState(!1),[d,u]=w.useState(null),[f,g]=w.useState(null),h=w.useCallback(async()=>{if(!e){r([]),u(null);return}l(!0),u(null);try{const v=ay(n,e),x=await fetch(v,{credentials:"same-origin",headers:on()}),S=await x.json().catch(()=>null);if(!x.ok){u(S?.message??`HTTP ${x.status}`),r([]);return}const _=S?.data;r(Array.isArray(_)?_:[])}catch(v){u(v instanceof Error?v.message:"network error"),r([])}finally{l(!1)}},[n,e]),b=w.useCallback(async v=>{if(!e)return{kind:"not_found"};g(v);try{const x=`${ay(n,e)}/${v}/restore`,S=await fetch(x,{method:"POST",credentials:"same-origin",headers:on({"Content-Type":"application/json"})}),_=await S.json().catch(()=>null);if(S.status===404)return{kind:"not_found"};if(!S.ok)return{kind:"network_error",message:_?.message??`HTTP ${S.status}`};const A=typeof _?.data?.version=="number"?_.data.version:-1;return await t?.(A>=0?A:void 0),{kind:"success",newVersion:A}}catch(x){return{kind:"network_error",message:x instanceof Error?x.message:"network error"}}finally{g(null)}},[n,e,t]),y=w.useCallback(async v=>{if(!e)return{kind:"not_found"};try{const x=`${ay(n,e)}/${v}`,S=await fetch(x,{credentials:"same-origin",headers:on()}),_=await S.json().catch(()=>null);if(S.status===404)return{kind:"not_found"};if(!S.ok)return{kind:"network_error",message:_?.message??`HTTP ${S.status}`};const A=_?.data;if(!A)return{kind:"not_found"};if(e.kind==="extension"&&!A.full_content){const C=A.content;if(typeof C=="string")try{const j=JSON.parse(C);j&&typeof j=="object"&&(A.full_content=j)}catch{}}return{kind:"success",detail:A}}catch(x){return{kind:"network_error",message:x instanceof Error?x.message:"network error"}}},[n,e]);return{versions:s,isLoading:o,error:d,restoringId:f,loadVersions:h,restore:b,loadVersionDetail:y}}function Q9(n,e){const t=n.length,s=e.length,r=Array.from({length:t+1},()=>new Array(s+1).fill(0));for(let o=t-1;o>=0;o--)for(let l=s-1;l>=0;l--)n[o]===e[l]?r[o][l]=r[o+1][l+1]+1:r[o][l]=Math.max(r[o+1][l],r[o][l+1]);return r}function eW(n,e,t){const s=[];let r=0,o=0;const l=n.length,d=e.length;for(;r<l&&o<d;)n[r]===e[o]?(s.push({kind:"context",oldIndex:r,newIndex:o,content:n[r]}),r++,o++):t[r+1][o]>=t[r][o+1]?(s.push({kind:"remove",oldIndex:r,content:n[r]}),r++):(s.push({kind:"add",newIndex:o,content:e[o]}),o++);for(;r<l;)s.push({kind:"remove",oldIndex:r,content:n[r]}),r++;for(;o<d;)s.push({kind:"add",newIndex:o,content:e[o]}),o++;return s}function E1(n){const e=n.replace(/\r\n/g,`
`).split(`
`);return e.length>0&&e[e.length-1]===""&&e.pop(),e}const R1=4e3;function tW(n,e,t=3){const s=E1(n),r=E1(e);let o=0;const l=Math.min(s.length,r.length);for(;o<l&&s[o]===r[o];)o++;let d=0;const u=Math.min(s.length,r.length)-o;for(;d<u&&s[s.length-1-d]===r[r.length-1-d];)d++;const f=s.slice(o,s.length-d),g=r.slice(o,r.length-d);if(f.length>R1||g.length>R1)return{hunks:[],addedCount:-1,removedCount:-1,identical:!1};const h=Q9(f,g),b=eW(f,g,h),y=[];let v=o,x=o,S=0,_=0;for(let j=0;j<o;j++)y.push({kind:"context",oldLine:j+1,newLine:j+1,content:s[j]});for(const j of b)j.kind==="context"?(v++,x++,y.push({kind:"context",oldLine:v,newLine:x,content:j.content})):j.kind==="remove"?(v++,_++,y.push({kind:"remove",oldLine:v,newLine:null,content:j.content})):(x++,S++,y.push({kind:"add",oldLine:null,newLine:x,content:j.content}));for(let j=0;j<d;j++){const E=s.length-d+j,T=r.length-d+j;y.push({kind:"context",oldLine:E+1,newLine:T+1,content:s[E]})}const A=S===0&&_===0;return{hunks:nW(y,t),addedCount:S,removedCount:_,identical:A}}function nW(n,e){const t=[];for(let r=0;r<n.length;r++)n[r].kind!=="context"&&t.push(r);if(t.length===0)return[];const s=[];for(const r of t){const o=Math.max(0,r-e),l=Math.min(n.length-1,r+e),d=s[s.length-1];d&&o<=d.end+1?d.end=Math.max(d.end,l):s.push({start:o,end:l})}return s.map(r=>{const o=n.slice(r.start,r.end+1);let l=0,d=0,u=0,f=0;for(const y of o)y.oldLine!==null&&(l===0&&(l=y.oldLine),u++),y.newLine!==null&&(d===0&&(d=y.newLine),f++);const g=l||(u===0?0:1),h=d||(f===0?0:1);return{header:`@@ -${g},${u} +${h},${f} @@`,oldStart:g,oldCount:u,newStart:h,newCount:f,lines:o}})}function A1(n){return JSON.stringify(iy(n),null,2)}function iy(n){if(Array.isArray(n))return n.map(iy);if(n&&typeof n=="object"){const e=n,t={};for(const s of Object.keys(e).sort())t[s]=iy(e[s]);return t}return n}const sW={display:"flex",flexDirection:"column",height:"100%",minHeight:0},rW={display:"flex",alignItems:"center",gap:8,padding:"12px 16px",borderBottom:"1px solid #e2e8f0",background:"#f8fafc"},oW={display:"inline-flex",alignItems:"center",gap:4,padding:"4px 10px",borderRadius:6,border:"1px solid #cbd5e1",background:"#ffffff",color:"#0f172a",fontSize:12,fontWeight:600,cursor:"pointer",outline:"none"},aW={marginLeft:"auto",border:"none",background:"transparent",fontSize:16,color:"#64748b",cursor:"pointer",outline:"none"},iW={display:"flex",alignItems:"center",gap:12,padding:"8px 16px",borderBottom:"1px solid #e2e8f0",background:"#ffffff",fontSize:12,fontWeight:600},lW={flex:1,minHeight:0,overflow:"auto",background:"#ffffff",fontFamily:'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace',fontSize:12,lineHeight:1.5},T1={padding:"24px 12px",textAlign:"center",color:"#94a3b8",fontSize:13},cW={padding:"2px 12px",background:"#f1f5f9",color:"#64748b",borderTop:"1px solid #e2e8f0",borderBottom:"1px solid #e2e8f0",userSelect:"none"};function dW(n){return n==="add"?{row:{background:"#e6ffed"},gutter:{background:"#cdffd8",color:"#22863a"},sign:"+",signColor:"#22863a"}:n==="remove"?{row:{background:"#ffeef0"},gutter:{background:"#ffdce0",color:"#b31d28"},sign:"-",signColor:"#b31d28"}:{row:{background:"#ffffff"},gutter:{background:"#f8fafc",color:"#94a3b8"},sign:" ",signColor:"#94a3b8"}}const $1={display:"inline-block",width:44,textAlign:"right",padding:"0 6px",color:"#94a3b8",userSelect:"none",borderRight:"1px solid #e2e8f0",whiteSpace:"nowrap"};function uW({oldVersion:n,newVersion:e,oldContent:t,newContent:s,t:r,onBack:o,onClose:l}){const d=w.useMemo(()=>{const f=A1(t),g=A1(s);return tW(f,g)},[t,s]),u=d.addedCount<0;return a.jsxs("div",{className:"g7le-version-diff","data-testid":"g7le-version-diff",style:sW,children:[a.jsxs("div",{"data-modal-drag-handle":!0,style:rW,children:[a.jsxs("button",{type:"button",onClick:o,style:oW,"data-testid":"g7le-version-diff-back",children:["← ",r("layout_editor.version_history.diff_back")]}),a.jsx("span",{style:{fontSize:14,fontWeight:700},"data-testid":"g7le-version-diff-title",children:r("layout_editor.version_history.diff_title",{old:n,new:e})}),a.jsx("button",{type:"button","aria-label":r("layout_editor.version_history.close"),onClick:l,style:aW,"data-testid":"g7le-version-diff-close",children:"✕"})]}),!u&&a.jsxs("div",{style:iW,"data-testid":"g7le-version-diff-summary",children:[a.jsx("span",{style:{color:"#16a34a"},"data-testid":"g7le-version-diff-added",children:r("layout_editor.version_history.added",{count:Math.max(0,d.addedCount)})}),a.jsx("span",{style:{color:"#dc2626"},"data-testid":"g7le-version-diff-removed",children:r("layout_editor.version_history.removed",{count:Math.max(0,d.removedCount)})})]}),a.jsx("div",{style:lW,children:u?a.jsx("div",{style:T1,"data-testid":"g7le-version-diff-too-large",children:r("layout_editor.version_history.diff_too_large")}):d.identical?a.jsx("div",{style:T1,"data-testid":"g7le-version-diff-identical",children:r("layout_editor.version_history.diff_identical")}):d.hunks.map((f,g)=>a.jsxs("div",{"data-testid":`g7le-version-diff-hunk-${g}`,children:[a.jsx("div",{style:cW,"data-testid":`g7le-version-diff-hunk-header-${g}`,children:f.header}),f.lines.map((h,b)=>{const y=dW(h.kind);return a.jsxs("div",{style:{display:"flex",alignItems:"stretch",...y.row},"data-kind":h.kind,"data-testid":`g7le-version-diff-line-${g}-${b}`,children:[a.jsx("span",{style:{...$1,...y.gutter},"aria-hidden":"true",children:h.oldLine??""}),a.jsx("span",{style:{...$1,...y.gutter},"aria-hidden":"true",children:h.newLine??""}),a.jsx("span",{style:{display:"inline-block",width:16,textAlign:"center",color:y.signColor,userSelect:"none",fontWeight:700},"aria-hidden":"true",children:y.sign}),a.jsx("span",{style:{whiteSpace:"pre-wrap",wordBreak:"break-word",flex:1,padding:"0 4px"},children:h.content})]},b)})]},g))})]})}const fW={display:"flex",flexDirection:"column",height:"100%",minHeight:0},pW={display:"flex",alignItems:"center",gap:8,padding:"12px 16px",borderBottom:"1px solid #e2e8f0",background:"#f8fafc"},gW={marginLeft:"auto",border:"none",background:"transparent",fontSize:16,color:"#64748b",cursor:"pointer",outline:"none"},hW={flex:1,minHeight:0,overflowY:"auto",padding:12},N1={padding:"24px 12px",textAlign:"center",color:"#94a3b8",fontSize:13},mW={margin:"8px 16px 0",padding:"8px 12px",borderRadius:6,background:"#fef2f2",color:"#b91c1c",fontSize:12,border:"1px solid #fecaca"},yW={display:"flex",flexDirection:"column",gap:8},bW={display:"flex",alignItems:"center",gap:12,padding:"10px 12px",borderRadius:8,border:"1px solid #e2e8f0",background:"#ffffff"},xW={display:"inline-flex",alignItems:"center",justifyContent:"center",minWidth:44,padding:"2px 8px",borderRadius:999,background:"#eff6ff",color:"#1d4ed8",fontSize:12,fontWeight:700},vW={display:"inline-flex",alignItems:"center",padding:"1px 8px",borderRadius:999,background:"#0f172a",color:"#ffffff",fontSize:10,fontWeight:700,letterSpacing:.3},wW={display:"flex",alignItems:"center",gap:10,fontSize:11,fontWeight:600},_W={display:"flex",flexDirection:"column",gap:2,minWidth:0,flex:1},D1={padding:"6px 12px",borderRadius:6,border:"1px solid #cbd5e1",background:"#ffffff",color:"#0f172a",fontSize:12,fontWeight:600,cursor:"pointer",outline:"none",whiteSpace:"nowrap"};function I1(n){return n.full_content&&typeof n.full_content=="object"?n.full_content:{endpoint:n.endpoint,components:n.components,data_sources:n.data_sources,metadata:n.metadata}}function SW(n){if(!n)return"";const e=Date.parse(n);if(Number.isNaN(e))return n;try{return new Date(e).toLocaleString()}catch{return n}}function kW({templateIdentifier:n,target:e,t,onRestored:s,onClose:r}){const{versions:o,isLoading:l,error:d,restoringId:u,loadVersions:f,restore:g,loadVersionDetail:h}=Z9(n,e,s),[b,y]=w.useState(null),[v,x]=w.useState(null),[S,_]=w.useState(null);w.useEffect(()=>{f()},[f]);const A=w.useCallback(async E=>{y(null),_(E.version);try{const T=await h(E.version);if(T.kind!=="success"){y(T.kind==="not_found"?t("layout_editor.version_history.restore_not_found"):T.message);return}const D=E.version-1,I=o.some(z=>z.version===D);let W={};if(I){const z=await h(D);if(z.kind==="success")W=I1(z.detail);else if(z.kind==="network_error"){y(z.message);return}}x({oldVersion:I?D:0,newVersion:E.version,oldContent:W,newContent:I1(T.detail)})}finally{_(null)}},[h,o,t]),C=w.useCallback(async E=>{y(null);const T=t("layout_editor.version_history.restore_confirm");if(!(typeof window<"u"?window.confirm(T):!0))return;const I=await g(E);I.kind==="success"?r():I.kind==="not_found"?y(t("layout_editor.version_history.restore_not_found")):y(I.message)},[g,r,t]),j=b??d;return v?a.jsx(uW,{oldVersion:v.oldVersion,newVersion:v.newVersion,oldContent:v.oldContent,newContent:v.newContent,t,onBack:()=>x(null),onClose:r}):a.jsxs("div",{className:"g7le-version-history","data-testid":"g7le-version-history",style:fW,children:[a.jsxs("div",{"data-modal-drag-handle":!0,style:pW,children:[a.jsxs("span",{style:{fontSize:14,fontWeight:700},"data-testid":"g7le-version-history-title",children:["🕘 ",t("layout_editor.version_history.title")]}),a.jsx("button",{type:"button","aria-label":t("layout_editor.version_history.close"),onClick:r,style:gW,"data-testid":"g7le-version-history-close",children:"✕"})]}),j&&a.jsx("div",{style:mW,"data-testid":"g7le-version-history-error",children:j}),a.jsx("div",{style:hW,children:l?a.jsx("div",{style:N1,"data-testid":"g7le-version-history-loading",children:t("layout_editor.version_history.loading")}):o.length===0?a.jsx("div",{style:N1,"data-testid":"g7le-version-history-empty",children:t("layout_editor.version_history.empty")}):a.jsx("div",{"data-testid":"g7le-version-history-list",style:yW,children:o.map((E,T)=>{const D=E.changes_summary,I=D?.added_count??0,W=D?.removed_count??0,z=D?.char_diff??0,H=SW(E.created_at),G=u===E.id,F=T===0;return a.jsxs("div",{style:bW,"data-testid":`g7le-version-row-${E.id}`,children:[a.jsxs("span",{style:xW,"data-testid":`g7le-version-badge-${E.id}`,children:["v",E.version]}),a.jsxs("div",{style:_W,children:[a.jsxs("span",{style:{display:"flex",alignItems:"center",gap:8},children:[H&&a.jsx("span",{style:{fontSize:12,color:"#475569",fontWeight:600},children:H}),F&&a.jsx("span",{style:vW,"data-testid":`g7le-version-latest-${E.id}`,children:t("layout_editor.version_history.latest")})]}),a.jsxs("span",{style:wW,"data-testid":`g7le-version-summary-${E.id}`,children:[a.jsx("span",{style:{color:"#16a34a"},"data-testid":`g7le-version-added-${E.id}`,children:t("layout_editor.version_history.added",{count:I})}),a.jsx("span",{style:{color:"#dc2626"},"data-testid":`g7le-version-removed-${E.id}`,children:t("layout_editor.version_history.removed",{count:W})}),a.jsx("span",{style:{color:"#94a3b8",fontWeight:500},"data-testid":`g7le-version-chars-${E.id}`,children:t("layout_editor.version_history.chars",{diff:`${z>=0?"+":""}${z}`})})]}),a.jsx("span",{style:{fontSize:11,color:"#94a3b8"},"data-testid":`g7le-version-author-${E.id}`,children:t("layout_editor.version_history.saved_by",{name:E.created_by_name??t("layout_editor.version_history.unknown_author")})})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[a.jsx("button",{type:"button",onClick:()=>{A(E)},disabled:S!==null,style:{...D1,background:"#f8fafc",opacity:S!==null?.6:1},"data-testid":`g7le-version-compare-${E.id}`,children:S===E.version?t("layout_editor.version_history.comparing"):t("layout_editor.version_history.compare")}),!F&&a.jsx("button",{type:"button",onClick:()=>{C(E.id)},disabled:G||u!==null,style:{...D1,opacity:G||u!==null?.6:1},"data-testid":`g7le-version-restore-${E.id}`,children:t(G?"layout_editor.version_history.restoring":"layout_editor.version_history.restore")})]})]},E.id)})})})]})}const L1=[{id:"copy",group:"clipboard",combos:[{key:"c",mod:!0}],labelKey:"layout_editor.shortcuts.action.copy",requiresSelection:!0},{id:"cut",group:"clipboard",combos:[{key:"x",mod:!0}],labelKey:"layout_editor.shortcuts.action.cut",requiresSelection:!0},{id:"paste",group:"clipboard",combos:[{key:"v",mod:!0}],labelKey:"layout_editor.shortcuts.action.paste"},{id:"openProps",group:"element",combos:[{key:"enter"}],labelKey:"layout_editor.shortcuts.action.open_props",requiresSelection:!0},{id:"delete",group:"element",combos:[{key:"delete"},{key:"backspace"}],labelKey:"layout_editor.shortcuts.action.delete",requiresSelection:!0},{id:"selectParent",group:"element",combos:[{key:"arrowup"}],labelKey:"layout_editor.shortcuts.action.select_parent",requiresSelection:!0},{id:"deselect",group:"element",combos:[{key:"escape"}],labelKey:"layout_editor.shortcuts.action.deselect"},{id:"addElement",group:"element",combos:[{key:"/",mod:!0}],labelKey:"layout_editor.shortcuts.action.add_element"},{id:"undo",group:"history",combos:[{key:"z",mod:!0}],labelKey:"layout_editor.shortcuts.action.undo"},{id:"redo",group:"history",combos:[{key:"z",mod:!0,shift:!0},{key:"y",mod:!0}],labelKey:"layout_editor.shortcuts.action.redo"},{id:"editCode",group:"view",combos:[{key:"e",mod:!0}],labelKey:"layout_editor.shortcuts.action.edit_code"},{id:"preview",group:"view",combos:[{key:"p",mod:!0}],labelKey:"layout_editor.shortcuts.action.preview"},{id:"translations",group:"view",combos:[{key:"l",mod:!0}],labelKey:"layout_editor.shortcuts.action.translations"},{id:"help",group:"view",combos:[{key:"?"}],labelKey:"layout_editor.shortcuts.action.help"},{id:"reset",group:"document",combos:[{key:"r",mod:!0,shift:!0}],labelKey:"layout_editor.shortcuts.action.reset"},{id:"save",group:"document",combos:[{key:"s",mod:!0}],labelKey:"layout_editor.shortcuts.action.save"},{id:"exit",group:"document",combos:[{key:"escape"}],labelKey:"layout_editor.shortcuts.action.exit"}];function CW(n){return{key:(n.key||"").toLowerCase(),mod:n.ctrlKey||n.metaKey,shift:n.shiftKey,alt:n.altKey}}function jW(n,e){return n.key===e.key&&!!n.mod==!!e.mod&&!!n.shift==!!e.shift&&!!n.alt==!!e.alt}function EW(n){for(const e of L1)if(e.combos.some(t=>jW(t,n)))return e;return null}function RW(n,e){const t=[];return n.mod&&t.push(e?"⌘":"Ctrl"),n.shift&&t.push(e?"⇧":"Shift"),n.alt&&t.push(e?"⌥":"Alt"),t.push(AW(n.key)),t.join(" + ")}function AW(n){return{arrowup:"↑",arrowdown:"↓",arrowleft:"←",arrowright:"→",enter:"Enter",escape:"Esc",delete:"Delete",backspace:"Backspace"," ":"Space"}[n]??(n.length===1?n.toUpperCase():n)}const TW=["clipboard","element","history","view","document"],$W={clipboard:"layout_editor.shortcuts.group.clipboard",element:"layout_editor.shortcuts.group.element",history:"layout_editor.shortcuts.group.history",view:"layout_editor.shortcuts.group.view",document:"layout_editor.shortcuts.group.document"};function NW(){return typeof navigator>"u"?!1:/mac|iphone|ipad|ipod/i.test(navigator.platform||navigator.userAgent||"")}function DW({t:n,onClose:e,isMac:t}){const s=t??NW(),r=w.useMemo(()=>{const o=new Map;for(const l of L1){const d=o.get(l.group)??[];d.push(l),o.set(l.group,d)}return o},[]);return a.jsxs("div",{className:"g7le-shortcut-help","data-testid":"g7le-shortcut-help",style:IW,children:[a.jsxs("div",{style:LW,children:[a.jsx("span",{style:OW,children:n("layout_editor.shortcuts.title")}),a.jsx("button",{type:"button","data-testid":"g7le-shortcut-help-close",onClick:e,"aria-label":n("layout_editor.shortcuts.close"),style:MW,children:"✕"})]}),a.jsx("div",{style:zW,children:TW.map(o=>{const l=r.get(o);return!l||l.length===0?null:a.jsxs("div",{style:PW,"data-testid":`g7le-shortcut-group-${o}`,children:[a.jsx("div",{style:BW,children:n($W[o])}),a.jsx("table",{style:HW,children:a.jsx("tbody",{children:l.map(d=>a.jsxs("tr",{"data-testid":`g7le-shortcut-row-${d.id}`,children:[a.jsx("td",{style:WW,children:n(d.labelKey)}),a.jsx("td",{style:UW,children:d.combos.map((u,f)=>a.jsxs(qe.Fragment,{children:[f>0&&a.jsx("span",{style:FW,children:n("layout_editor.shortcuts.or")}),a.jsx("kbd",{style:qW,children:RW(u,s)})]},f))})]},d.id))})})]},o)})}),a.jsx("div",{style:VW,children:n("layout_editor.shortcuts.footnote")})]})}const IW={display:"flex",flexDirection:"column",padding:20,gap:16,width:"100%",boxSizing:"border-box"},LW={display:"flex",alignItems:"center",justifyContent:"space-between",paddingBottom:12,borderBottom:"1px solid #e2e8f0"},OW={fontSize:15,fontWeight:700,color:"#0f172a"},MW={width:28,height:28,border:"none",background:"transparent",color:"#64748b",cursor:"pointer",fontSize:14,borderRadius:6},zW={display:"grid",gridTemplateColumns:"1fr 1fr",columnGap:28,rowGap:18,alignItems:"start"},PW={display:"flex",flexDirection:"column",gap:6},BW={fontSize:12,fontWeight:700,color:"#2563eb"},HW={width:"100%",borderCollapse:"collapse"},WW={padding:"4px 0",fontSize:12.5,color:"#334155",textAlign:"left",whiteSpace:"nowrap",verticalAlign:"middle"},UW={padding:"4px 0",paddingLeft:12,textAlign:"right",verticalAlign:"middle"},qW={display:"inline-block",padding:"1px 6px",fontSize:11,fontFamily:"ui-monospace, monospace",color:"#0f172a",background:"#f1f5f9",border:"1px solid #cbd5e1",borderBottomWidth:2,borderRadius:5,whiteSpace:"nowrap"},FW={fontSize:11,color:"#94a3b8",margin:"0 4px"},VW={fontSize:11,color:"#94a3b8",paddingTop:12,borderTop:"1px solid #f1f5f9"};function KW(n){if(!n||!(n instanceof HTMLElement))return!1;const e=n.tagName;return!!(e==="INPUT"||e==="TEXTAREA"||e==="SELECT"||n.isContentEditable)}function GW(){return typeof document>"u"?!1:!!document.querySelector(".g7le-modal-backdrop, .g7le-modal")}function O1(n){const{handlers:e,hasSelection:t,enabled:s=!0}=n;w.useEffect(()=>{if(!s||typeof window>"u")return;const r=o=>{if(KW(o.target))return;const l=CW(o),d=EW(l);if(!d||GW()||d.requiresSelection&&!t)return;if(d.key==="escape"||l.key==="escape"){if(t){const f=e.deselect;f&&(o.preventDefault(),f())}else{const f=e.exit;f&&(o.preventDefault(),f())}return}const u=e[d.id];u&&(o.preventDefault(),u())};return window.addEventListener("keydown",r),()=>window.removeEventListener("keydown",r)},[e,t,s])}function YW(n){const{result:e,onDismiss:t,onLoadLatest:s,onKeepMyChanges:r}=n,{t:o}=Mn();if(w.useEffect(()=>{if(!e||e.kind==="concurrent_modification"||e.kind==="validation_failed")return;const l=setTimeout(t,5e3);return()=>clearTimeout(l)},[e,t]),!e)return null;if(e.kind==="success")return a.jsx(Kc,{tone:"success",testId:"g7le-save-banner-success",onDismiss:t,children:o("layout_editor.save.success")});if(e.kind==="validation_failed"){const l=e.errors??{},d=Object.entries(l);return a.jsxs(Kc,{tone:"error",testId:"g7le-save-banner-validation",onDismiss:t,children:[a.jsx("strong",{children:o("layout_editor.save.validation_failed")}),d.length>0&&a.jsx("ul",{style:M1,"data-testid":"g7le-save-banner-validation-errors",children:d.map(([u,f])=>a.jsxs("li",{children:[a.jsx("code",{style:z1,children:u}),": ",f.join(", ")]},u))})]})}return e.kind==="blocked_inactive_extension"?a.jsxs(Kc,{tone:"warning",testId:"g7le-save-banner-blocked",onDismiss:t,children:[a.jsx("strong",{children:o("layout_editor.save.blocked_inactive_extension")}),e.blockedPaths.length>0&&a.jsx("ul",{style:M1,"data-testid":"g7le-save-banner-blocked-paths",children:e.blockedPaths.map(l=>a.jsx("li",{children:a.jsx("code",{style:z1,children:l})},l))})]}):e.kind==="network_error"?a.jsxs(Kc,{tone:"error",testId:"g7le-save-banner-network",onDismiss:t,children:[a.jsx("strong",{children:o("layout_editor.save.network_error_title")}),a.jsx("div",{style:{marginTop:4,fontSize:12},children:e.message})]}):e.kind==="guard_no_document"?a.jsx(Kc,{tone:"neutral",testId:"g7le-save-banner-guard-no-document",onDismiss:t,children:o("layout_editor.save.guard_no_document")}):a.jsx("div",{role:"dialog","aria-modal":"true","aria-label":o("layout_editor.save.concurrent.title"),"data-testid":"g7le-save-banner-concurrent",style:QW,children:a.jsxs("div",{style:eU,children:[a.jsx("h2",{style:tU,children:o("layout_editor.save.concurrent.title")}),a.jsx("p",{style:nU,children:o("layout_editor.save.concurrent.message")}),a.jsx("div",{style:sU,children:o("layout_editor.save.concurrent.version_info",{current:String(e.currentVersion),yours:String(e.yourVersion)})}),a.jsxs("div",{style:rU,children:[a.jsx("button",{type:"button","data-testid":"g7le-save-banner-concurrent-load-latest",onClick:()=>{s?.(),t()},style:oU,children:o("layout_editor.save.concurrent.load_latest")}),a.jsx("button",{type:"button","data-testid":"g7le-save-banner-concurrent-keep-mine",onClick:()=>{r?.(),t()},style:aU,children:o("layout_editor.save.concurrent.view_my_changes")}),a.jsx("button",{type:"button","data-testid":"g7le-save-banner-concurrent-cancel",onClick:t,style:iU,children:o("layout_editor.save.concurrent.cancel")})]})]})})}function Kc(n){const{tone:e,testId:t,onDismiss:s,children:r}=n,o=XW[e];return a.jsxs("div",{role:"status","data-testid":t,style:{...JW,background:o.bg,borderColor:o.border,color:o.fg},children:[a.jsx("div",{style:{flex:1,minWidth:0},children:r}),a.jsx("button",{type:"button",onClick:s,"aria-label":"close","data-testid":`${t}-close`,style:ZW,children:"×"})]})}const XW={success:{bg:"#dcfce7",border:"#86efac",fg:"#14532d"},error:{bg:"#fee2e2",border:"#fca5a5",fg:"#7f1d1d"},warning:{bg:"#fef3c7",border:"#fcd34d",fg:"#78350f"},neutral:{bg:"#f1f5f9",border:"#cbd5e1",fg:"#334155"}},JW={display:"flex",alignItems:"flex-start",gap:12,padding:"12px 16px",border:"1px solid",borderRadius:0,fontSize:13,lineHeight:1.5},ZW={background:"transparent",border:"none",fontSize:18,cursor:"pointer",lineHeight:1,color:"inherit",padding:"0 4px",flexShrink:0},M1={margin:"8px 0 0",paddingLeft:20,fontSize:12},z1={background:"rgba(0, 0, 0, 0.06)",padding:"1px 4px",borderRadius:3,fontFamily:"monospace"},QW={position:"fixed",inset:0,background:"rgba(15, 23, 42, 0.6)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e4},eU={background:"#fff",borderRadius:8,padding:24,width:"min(480px, 90vw)",boxShadow:"0 10px 25px rgba(0,0,0,0.15)"},tU={margin:"0 0 8px",fontSize:16,fontWeight:600,color:"#0f172a"},nU={margin:"0 0 12px",color:"#334155",fontSize:13,lineHeight:1.5},sU={marginBottom:16,padding:"8px 12px",background:"#f8fafc",borderRadius:6,fontSize:12,color:"#64748b",fontFamily:"monospace"},rU={display:"flex",gap:8,justifyContent:"flex-end"},oU={padding:"8px 14px",background:"#2563eb",color:"#fff",border:"none",borderRadius:6,fontSize:13,fontWeight:600,cursor:"pointer"},aU={padding:"8px 14px",background:"#fff",color:"#334155",border:"1px solid #cbd5e1",borderRadius:6,fontSize:13,fontWeight:500,cursor:"pointer"},iU={padding:"8px 14px",background:"transparent",color:"#64748b",border:"none",borderRadius:6,fontSize:13,cursor:"pointer"},lU=new Set;function ly(n){return n.path.startsWith("__group__/")||n.path.startsWith("__conngroup__/")}function P1(n,e){const{t,translationEngine:s,translationContext:r,templateIdentifier:o}=e,l=ly(n);if(!n.label.startsWith("$t:"))return n.label;const d=n.label.slice(3),u=d.indexOf("|"),f=u===-1?d:d.slice(0,u),g={};if(u!==-1)for(const b of d.slice(u+1).split("|")){const y=b.indexOf("=");y!==-1&&(g[b.slice(0,y)]=b.slice(y+1))}if((n.kind==="route"||n.kind==="modal")&&!l&&s&&r&&o!==r.templateId){const b={templateId:o,locale:r.locale},y=Object.keys(g).length>0?"|"+Object.entries(g).map(([x,S])=>`${x}=${S}`).join("|"):void 0,v=s.translate(f,b,y);if(v!==f)return v}const h=t(f,g);if(h===f&&typeof window<"u"){const b=window.G7Core?.t;if(typeof b=="function")try{const y=b(f,g);if(y!==f)return y}catch{}}if(h===f&&n.kind==="route"&&!l){const b=n.path;if(b&&b!=="/"){const y=b.split("/").filter(Boolean);return y[y.length-1]??b}return b==="/"?"/":f}return h}function cU(n){return n.trim().toLocaleLowerCase()}function B1(n,e){if(!e)return n;const t=n.toLocaleLowerCase(),s=[];let r=0,o=t.indexOf(e,r);if(o===-1)return n;let l=0;for(;o!==-1;)o>r&&s.push(n.slice(r,o)),s.push(a.jsx("mark",{className:"g7le-route-tree__highlight",style:{background:"#fde68a",color:"inherit",borderRadius:2,padding:"0 1px"},children:n.slice(o,o+e.length)},`m${l++}`)),r=o+e.length,o=t.indexOf(e,r);return r<n.length&&s.push(n.slice(r)),s}function dU(n){if(!n.layoutName)return null;const e=`${n.layoutName}.json`;switch(n.source.kind){case"module":case"plugin":return`${n.source.identifier?`${n.source.identifier} · `:""}resources/layouts/${e}`;case"template":return`${n.source.identifier?`${n.source.identifier} · `:""}layouts/${e}`;default:return`layouts/${e}`}}function uU({node:n}){const{t:e}=Mn(),t=[],s={display:"inline-flex",alignItems:"center",padding:"1px 6px",fontSize:10,fontWeight:600,borderRadius:4,letterSpacing:.3,textTransform:"uppercase",border:"1px solid transparent"};return n.isHidden&&t.push(a.jsx("span",{className:"g7le-route-tree__badge g7le-route-tree__badge--hidden","data-testid":"g7le-route-tree-badge-hidden",style:{...s,background:"#f1f5f9",color:"#64748b",borderColor:"#e2e8f0"},children:e("layout_editor.chrome.route_tree.badge.hidden")},"hidden")),n.isRedirect&&t.push(a.jsx("span",{className:"g7le-route-tree__badge g7le-route-tree__badge--redirect","data-testid":"g7le-route-tree-badge-redirect",style:{...s,background:"#fef3c7",color:"#92400e",borderColor:"#fde68a"},children:e("layout_editor.chrome.route_tree.badge.redirect")},"redirect")),t.length===0?null:a.jsx("span",{style:{marginLeft:"auto",display:"inline-flex",gap:4},children:t})}function H1({node:n,depth:e,onSelect:t,selectedRoutePath:s,activeHostRoutePath:r,dirtyLayoutNames:o,query:l,forceExpand:d}){const{t:u,translationEngine:f,translationContext:g}=Mn(),{state:h}=Rn(),b=ly(n),y=n.path.startsWith("__conngroup__/"),v=w.useMemo(()=>{const B=h.selectedRoute?.path??"";return B.startsWith("__extension__/")||B.startsWith("__modal__/")?B.slice(B.lastIndexOf("/")+1):null},[h.selectedRoute?.path]),x=w.useMemo(()=>!y||!v?!1:(n.children??[]).some(B=>B.kind==="extension"&&B.extensionId===v||B.kind==="modal"&&B.modalId===v),[y,v,n.children]),[S,_]=w.useState(!0);w.useEffect(()=>{x&&_(!1)},[x]);const A=h.editMode==="extension"?h.selectedRoute?.layoutName??null:null,C=n.kind==="extension"?W1(n,h.routeTree)??null:null,j=n.kind==="extension"&&s===n.path&&(A===null||C===null||A===C),E=h.editMode==="modal"&&s?.startsWith("__modal__/")?s.slice(s.lastIndexOf("/")+1):null,T=h.editMode==="modal"?h.selectedRoute?.layoutName??null:null,D=n.kind==="modal"&&!!E&&n.modalId===E&&(T===null||n.modalHostLayout==null||T===n.modalHostLayout),I=n.kind!=="extension"&&n.kind!=="modal"&&s===n.path||j||D||n.kind==="route"&&!b&&r===n.path,z=(n.children?.length??0)>0&&(!y||d||!S),H=!b&&!!n.layoutName&&o.has(n.layoutName),G=b?void 0:n.kind==="extension"?n.extensionId?h.extensionVersions[n.extensionId]:void 0:n.layoutName?h.layoutVersions[n.layoutName]:void 0,F=()=>{if(y){_(B=>!B);return}b||t(n)},Z=P1(n,{t:u,translationEngine:f,translationContext:g,templateIdentifier:h.templateIdentifier}),Y=b?null:dU(n),U={paddingLeft:12+e*14,paddingRight:12,paddingTop:4,paddingBottom:4,opacity:n.isHidden?.55:1,cursor:y?"pointer":b?"default":"pointer",background:I?"#eff6ff":"transparent",borderLeft:I?"2px solid #2563eb":"2px solid transparent",fontWeight:b||I?600:400,fontSize:b?11:13,color:b?"#64748b":I?"#1d4ed8":"#1e293b",textTransform:b?"uppercase":"none",letterSpacing:b?.6:void 0,transition:"background-color 100ms, color 100ms",display:"flex",flexDirection:"column",alignItems:"stretch",gap:2,userSelect:"none"};return a.jsxs("li",{children:[a.jsxs("div",{"data-testid":b?"g7le-route-tree-group":"g7le-route-tree-item","data-route-path":n.path,"data-route-kind":n.kind,"data-conn-collapsed":y?d?"false":String(S):void 0,role:y||!b?"button":void 0,tabIndex:y||!b?0:void 0,"aria-expanded":y?d?!0:!S:void 0,onClick:F,onKeyDown:B=>{y&&(B.key==="Enter"||B.key===" ")?(B.preventDefault(),_(te=>!te)):!b&&(B.key==="Enter"||B.key===" ")&&(B.preventDefault(),t(n))},style:U,children:[a.jsxs("span",{style:{display:"flex",alignItems:"center",gap:6,minWidth:0},children:[y&&a.jsx("span",{"aria-hidden":"true",style:{flex:"0 0 auto",fontSize:9,color:"#94a3b8",width:10,display:"inline-block"},children:d||!S?"▾":"▸"}),H&&a.jsx("span",{className:"g7le-route-tree__dirty-dot","data-testid":"g7le-route-tree-dirty",title:u("layout_editor.chrome.route_tree.badge.modified"),"aria-label":u("layout_editor.chrome.route_tree.badge.modified"),style:{width:7,height:7,borderRadius:"50%",background:"#f59e0b",flex:"0 0 auto"}}),b?Z:B1(Z,l),typeof G=="number"&&a.jsxs("span",{className:"g7le-route-tree__version-badge","data-testid":"g7le-route-tree-version",title:u("layout_editor.chrome.route_tree.badge.version_tooltip",{version:String(G)}),style:{flex:"0 0 auto",padding:"0 5px",fontSize:10,fontWeight:600,lineHeight:"16px",borderRadius:4,background:"#eef2ff",color:"#4f46e5",border:"1px solid #e0e7ff",letterSpacing:.2},children:["v",G]}),a.jsx(uU,{node:n})]}),Y&&a.jsx("span",{className:"g7le-route-tree__layout-path","data-testid":"g7le-route-tree-layout-path",title:Y,style:{fontSize:11,fontWeight:400,color:"#94a3b8",textTransform:"none",letterSpacing:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:B1(Y,l)})]}),z&&a.jsx("ul",{style:{listStyle:"none",margin:0,padding:0},children:n.children.map(B=>a.jsx(H1,{node:B,depth:e+1,onSelect:t,selectedRoutePath:s,activeHostRoutePath:r,dirtyLayoutNames:o,query:l,forceExpand:d},B.path))})]})}function fU(n,e){if(!e||!e.startsWith("__"))return null;const t=e.startsWith("__modal__/"),s=e.startsWith("__extension__/");if(!t&&!s)return null;const r=e.slice(e.lastIndexOf("/")+1),o=l=>{for(const d of l){if(d.connectedHostRoutePath&&(t&&d.kind==="modal"&&d.modalId===r||s&&d.kind==="extension"&&d.extensionId===r))return d.connectedHostRoutePath;if(d.children&&d.children.length>0){const u=o(d.children);if(u)return u}}return null};return o(n)}function W1(n,e){if(n.connectedHostRoutePath){const t=U1(e,n.connectedHostRoutePath);if(t?.layoutName)return t.layoutName}if(n.extensionType==="overlay"&&n.extensionTargetName)return n.extensionTargetName}function U1(n,e){for(const t of n){if(t.kind==="route"&&t.path===e)return t;if(t.children&&t.children.length>0){const s=U1(t.children,e);if(s)return s}}return null}function q1(n,e,t){const s=[];for(const r of n){const o=ly(r),l=r.children&&r.children.length>0?q1(r.children,e,t):[];if(o){l.length>0&&s.push({...r,children:l});continue}const d=P1(r,t).toLocaleLowerCase(),u=r.path.toLocaleLowerCase();(d.includes(e)||!u.startsWith("__")&&u.includes(e)||l.length>0)&&s.push({...r,children:l})}return s}function pU(){const{t:n,translationEngine:e,translationContext:t}=Mn(),{state:s,dispatch:r}=Rn(),l=Gr()?.dirtyLayoutNames??lU,[d,u]=w.useState(""),f=cU(d),g=w.useMemo(()=>f?q1(s.routeTree,f,{t:n,translationEngine:e,translationContext:t,templateIdentifier:s.templateIdentifier}):s.routeTree,[f,s.routeTree,s.templateIdentifier,n,e,t]),h=x=>{if(x.kind==="base"&&x.layoutName){r({type:"ENTER_BASE_EDIT",layoutName:x.layoutName});return}if(x.kind==="modal"&&x.modalId&&x.modalHostLayout){r({type:"ENTER_MODAL_EDIT",modalId:x.modalId,hostLayout:x.modalHostLayout});return}if(x.kind==="extension"&&x.extensionId){const S=W1(x,s.routeTree);r({type:"ENTER_EXTENSION_EDIT",extensionId:x.extensionId,extensionHost:S});return}if(r({type:"SELECT_ROUTE",route:{path:x.path,layoutName:x.layoutName}}),typeof window<"u"&&window.history?.pushState){const S=Oh(s.templateIdentifier,x.path);`${window.location.pathname}${window.location.search}`!==S&&window.history.pushState({source:nI,routePath:x.path},"",S)}},b=s.selectedRoute?.path??null,y=w.useMemo(()=>fU(s.routeTree,b),[s.routeTree,b]);if(s.isRouteTreeCollapsed)return a.jsx("aside",{className:"g7le-route-tree g7le-route-tree--collapsed","data-testid":"g7le-route-tree-panel","data-collapsed":"true",style:{width:28,borderRight:"1px solid #e2e8f0",background:"#ffffff"}});const v=s.routeTree.length>0;return a.jsxs("aside",{className:"g7le-route-tree","data-testid":"g7le-route-tree-panel","data-collapsed":"false",style:{width:280,borderRight:"1px solid #e2e8f0",background:"#ffffff",position:"sticky",top:"var(--g7le-header-h, 0px)",alignSelf:"start",height:"calc(100vh - var(--g7le-header-h, 0px))",overflow:"hidden",minHeight:0,display:"flex",flexDirection:"column"},"aria-label":n("layout_editor.chrome.route_tree.panel_title"),children:[a.jsx("div",{className:"g7le-route-tree__title",style:{padding:"10px 14px",fontSize:12,fontWeight:600,color:"#475569",textTransform:"uppercase",letterSpacing:.6,borderBottom:"1px solid #e2e8f0",background:"#f8fafc",flex:"0 0 auto"},children:n("layout_editor.chrome.route_tree.panel_title")}),v&&a.jsxs("div",{className:"g7le-route-tree__search",style:{padding:"8px 10px",borderBottom:"1px solid #e2e8f0",background:"#ffffff",flex:"0 0 auto",position:"relative"},children:[a.jsx("input",{type:"text",className:"g7le-route-tree__search-input","data-testid":"g7le-route-tree-search",value:d,onChange:x=>u(x.target.value),placeholder:n("layout_editor.chrome.route_tree.search_placeholder"),"aria-label":n("layout_editor.chrome.route_tree.search_placeholder"),style:{width:"100%",boxSizing:"border-box",padding:d?"6px 26px 6px 10px":"6px 10px",fontSize:12,lineHeight:1.4,color:"#1e293b",border:"1px solid #cbd5e1",borderRadius:6,outline:"none",background:"#f8fafc"}}),d&&a.jsx("button",{type:"button",className:"g7le-route-tree__search-clear","data-testid":"g7le-route-tree-search-clear",onClick:()=>u(""),"aria-label":n("layout_editor.chrome.route_tree.search_clear"),title:n("layout_editor.chrome.route_tree.search_clear"),style:{position:"absolute",right:16,top:"50%",transform:"translateY(-50%)",width:18,height:18,display:"inline-flex",alignItems:"center",justifyContent:"center",border:"none",background:"transparent",color:"#94a3b8",cursor:"pointer",fontSize:14,lineHeight:1,padding:0},children:"✕"})]}),!v&&a.jsx("div",{className:"g7le-route-tree__empty","data-testid":"g7le-route-tree-empty",style:{padding:16,fontSize:12,color:"#94a3b8",textAlign:"center"},children:n("layout_editor.chrome.route_tree.empty")}),v&&f&&g.length===0&&a.jsx("div",{className:"g7le-route-tree__no-results","data-testid":"g7le-route-tree-no-results",style:{padding:16,fontSize:12,color:"#94a3b8",textAlign:"center"},children:n("layout_editor.chrome.route_tree.search_no_results")}),v&&g.length>0&&a.jsx("nav",{className:"g7le-route-tree__scroll","data-testid":"g7le-route-tree-scroll",style:{flex:"1 1 auto",minHeight:0,overflowY:"auto"},children:a.jsx("ul",{style:{listStyle:"none",margin:0,padding:0},children:g.map(x=>a.jsx(H1,{node:x,depth:0,onSelect:h,selectedRoutePath:b,activeHostRoutePath:y,dirtyLayoutNames:l,query:f,forceExpand:!!f},x.path))})})]})}function zf(n,e,t){const s=e??{},r=s.message||s.error||`HTTP ${n}`,o=s?.data?.required_permissions??s?.required_permissions;let l;return n===401?l="unauthorized":n===403?l="forbidden":n===404?l="not_found":n>=500?l="server_error":l="unknown",{kind:l,status:n,message:String(r),requiredPermissions:o?String(o):void 0,source:t}}function cl(n,e){return{kind:"network",status:0,message:n instanceof Error?n.message:String(n??"Unknown network error"),source:e}}function F1(n){if(typeof n!="object"||n===null)return!1;const e=n;return typeof e.kind=="string"&&typeof e.status=="number"&&typeof e.message=="string"}function An(n){if(!n)return[];const e=[],t=n.split(".");for(let s=0;s<t.length;s++){const r=t[s];if(r==="children")continue;if(r==="iteration"||r==="sortable"){s+=1;continue}if(r==="responsive"){const l=t[s+1];typeof l=="string"&&l.length>0&&(e.push({responsive:l}),s+=1);continue}const o=Number(r);Number.isFinite(o)&&Number.isInteger(o)&&o>=0&&e.push(o)}return e}function gU(n,e){if(!n)return{affordance:"none",targetPath:null};const t=hU(n);return t?mU(t)?{affordance:"dynamic_path",targetPath:t}:/^(https?:)?\/\//.test(t)?{affordance:"external_url",targetPath:t}:t.startsWith("/")?e?{affordance:e(t),targetPath:t}:{affordance:"route_not_in_tree",targetPath:t}:{affordance:"route_not_in_tree",targetPath:t}:{affordance:"none",targetPath:null}}function hU(n){const e=n.actions;if(Array.isArray(e)){for(const t of e)if(t&&typeof t=="object"&&t.handler==="navigate"){const s=t.params?.path;if(typeof s=="string"&&s.length>0)return s}}if(n.name==="A"||n.type==="A"){const t=n.props?.href;if(typeof t=="string"&&t.length>0)return t}return null}function mU(n){return/\{\{[\s\S]*?\}\}/.test(n)}function yU(n,e,t){const s=o=>!!(o?.iteration&&o.iteration.source!==void 0),r=o=>{if(!o)return o;const l=o.indexOf(".iteration."),d=o.indexOf(".sortable."),u=[l,d].filter(f=>f>=0).sort((f,g)=>f-g)[0];return u===void 0?o:o.slice(0,u)};return s(n)?{isIteration:!0,iterationSourcePath:r(t)}:t&&t.includes(".iteration.")?{isIteration:!0,iterationSourcePath:r(t)}:e.some(s)?{isIteration:!0,iterationSourcePath:r(t)}:{isIteration:!1,iterationSourcePath:null}}function bU(n,e){const t=l=>{const d=l?.iteration&&l.iteration.source;return typeof d=="string"&&d.length>0?d:null},s=t(n)??e.map(t).find(l=>l!==null)??null;if(s!==null){const l=vU(s);if(l!==null)return l}const r=[];if(typeof n.text=="string"&&r.push(...V1(n.text)),n.props&&typeof n.props=="object")for(const l of Object.values(n.props))typeof l=="string"&&r.push(...V1(l));return r.length===0?null:r.find(l=>!xU.has(l))??r[0]}const xU=new Set(["_local","_global","_computed","route","query","props","item","index","event","$event","$response","response"]);function V1(n){const e=[],t=/\{\{([\s\S]*?)\}\}/g;let s;for(;(s=t.exec(n))!==null;){const r=K1(s[1]);r!==null&&e.push(r)}return e}function vU(n){const e=n.replace(/\{\{|\}\}/g,"");return K1(e)}function K1(n){const e=/[A-Za-z_$][A-Za-z0-9_$]*/.exec(n.trim());return e?e[0]:null}function ta(n,e,t,s=[]){if(!n)return"none";if(W_(n)||typeof n.slot=="string"||typeof n.__editorSlotName=="string")return"extension_point";if(e!=="route"&&im(n,e,t)){const o=n.__source?.kind;return o==="base"?"base":o==="partial"?"partial":o==="extension"?"extension":"base"}if(sM(n,s))return"data_bound";if(!im(n,e,t))return"none";const r=n.__source?.kind;return r==="base"?"base":r==="partial"?"partial":r==="extension"?"extension":"none"}function G1(n){if(!n)return null;if(n.__source?.kind==="extension"&&typeof n.__source.extensionId=="number")return n.__source.extensionId;const e=n.__injectedProps;if(Array.isArray(e)&&e.length>0){const t=e[0]?.extensionId;if(typeof t=="number")return t}return null}function wU(n,e){if(e<=0)return n;const t=n.split(".");let s=0;const r=[];for(let o=0;o<t.length;o++){const l=t[o];if(l==="children"){if(s>=e)break;r.push(l);continue}if(l==="iteration"||l==="sortable"){if(s>=e)break;r.push(l);continue}r.push(l);const d=t[o-1];if((d===void 0||d==="children")&&(s+=1),s>=e)break}return r.join(".")}function Y1(n,e,t,s){if(!n||!e)return e;const r=t(e),o=aM(n,r,s);return o.length===r.length?e:wU(e,o.length)}function X1(n){return n==="none"||n==="data_bound"}function _U(n){const{rootNode:e,editMode:t,currentExtensionId:s,editableRootPath:r,pathParser:o=An,resolveRouteMatch:l}=n,[d,u]=w.useState(null),[f,g]=w.useState(null),h=w.useCallback(A=>{if(A===null||t==="route")return!0;if(t==="iteration_item"||t==="modal"){if(!r||r.length===0)return!0;const T=o(A);return J1(T,r)}const C=cy(e,A,o);if(!C)return!0;const j=dy(e,A,o),E=ta(C,t,s,j);return E==="none"||E==="data_bound"},[e,o,t,s,r]),b=w.useCallback((A,C)=>{const E=(C?.currentTarget?.dataset??C?.dataset)?.editorPath??null,T=Y1(e,E,o,s);h(T)&&u(T)},[e,o,s,h]),y=w.useCallback((A,C)=>{if(A===null){g(null);return}const E=(C?.currentTarget?.dataset??C?.dataset)?.editorPath??null,T=Y1(e,E,o,s);if(!h(T)){g(null);return}g(T)},[e,o,s,h]),v=w.useCallback(()=>{u(null)},[]),x=w.useMemo(()=>{const A=cy(e,d,o),C=cy(e,f,o),j=A?dy(e,d,o):[];let E=ta(A,t,s,j);(t==="iteration_item"||t==="modal")&&d!==null&&A&&r&&r.length>0&&J1(o(d),r)&&(U_(A)?E="data_bound":E==="data_bound"&&(E="none"));const{affordance:T,targetPath:D}=gU(A,l),I=E==="base"&&typeof A?.__source?.layout=="string"?A.__source.layout:null,W=E==="data_bound"&&A?bU(A,j):null,{isIteration:z,iterationSourcePath:H}=E==="data_bound"&&A?yU(A,j,d):{isIteration:!1,iterationSourcePath:null};return{selectedNode:A,hoverNode:C,selectedLockKind:E,selectedNavAffordance:T,selectedNavTargetPath:D,selectedBaseLayout:I,selectedDataSourceId:W,selectedIsIteration:z,selectedIterationSourcePath:H}},[e,d,f,t,s,r,o,l]),S=w.useRef(void 0);S.current!==d&&(S.current=d,f_({op:d===null?"clear":"select",componentPath:d,componentName:Z1(x.selectedNode),lockKind:x.selectedLockKind,navAffordance:x.selectedNavAffordance,sourceExtensionId:G1(x.selectedNode),timestamp:Date.now()}));const _=w.useRef(void 0);return _.current!==f&&(_.current=f,f!==null&&f_({op:"hover",componentPath:f,componentName:Z1(x.hoverNode),lockKind:ta(x.hoverNode,t,s,dy(e,f,o)),navAffordance:"none",sourceExtensionId:G1(x.hoverNode),timestamp:Date.now()})),{selectedPath:d,hoverPath:f,...x,handleSelect:b,handleHover:y,clearSelection:v}}function cy(n,e,t){if(!n||!e)return null;const s=t(e);return en(n,s)}function J1(n,e){if(n.length<e.length)return!1;for(let t=0;t<e.length;t++)if(n[t]!==e[t])return!1;return!0}function dy(n,e,t){if(!n||!e)return[];const s=t(e),r=[];for(let o=0;o<s.length;o++){const l=s.slice(0,o),d=en(n,l);d&&r.push(d)}return r}function Z1(n){return n?typeof n.name=="string"&&n.name.length>0?n.name:typeof n.type=="string"&&n.type.length>0?n.type:null:null}let Q1=0;function eC(){return Q1}function uy(){Q1+=1}function SU(n){if(typeof n!="string")return null;const e="__modal__/";if(!n.startsWith(e))return null;const t=n.slice(e.length);return t===""||t.includes("/")?null:t}function kU(n){if(typeof n!="string")return null;const e="__iteration__/";if(!n.startsWith(e))return null;const t=n.slice(e.length);return t!==""?t:null}function tC(){const{state:n}=Rn(),e=n.templateIdentifier,t=n.selectedRoute?.layoutName??null,s=n.editMode,r=s==="modal"?SU(n.selectedRoute?.path):null,o=s==="iteration_item"?kU(n.selectedRoute?.path):null,[l,d]=w.useState(null),[u,f]=w.useState(!1),[g,h]=w.useState(null),[b,y]=w.useState(!1),[v,x]=w.useState(0),[S,_]=w.useState(0),A=w.useRef(new Map),[C,j]=w.useState(()=>new Set),E=w.useCallback((q,M)=>`${q}|${M??""}`,[]),T=w.useRef(null);w.useEffect(()=>{T.current=l},[l]);const D=w.useCallback((q,M)=>{const N=E(s,t);A.current.set(N,{raw:q,lockVersion:M}),j(V=>{if(V.has(N))return V;const ee=new Set(V);return ee.add(N),ee})},[E,s,t]),I=w.useCallback(q=>{A.current.delete(q),j(M=>{if(!M.has(q))return M;const N=new Set(M);return N.delete(q),N})},[]),W=w.useCallback(q=>{const M=`|${q??""}`,N=[];for(const V of A.current.keys())V.endsWith(M)&&N.push(V);for(const V of N)A.current.delete(V);N.length>0&&j(V=>{let ee=!1;const se=new Set(V);for(const re of N)se.delete(re)&&(ee=!0);return ee?se:V})},[]),z=w.useCallback(async()=>{if(!t){d(null),h(null),y(!1);return}const q=E(s,t),M=A.current.get(q);if(M){d({layoutName:t,raw:M.raw,lockVersion:M.lockVersion}),y(!0),h(null),f(!1),ss({op:"load",layoutName:t,editMode:s,statusCode:0,isDirty:!0,timestamp:Date.now()});return}f(!0),h(null);try{const N=window.G7Config?.cache_version??0,V=`/api/layouts/${encodeURIComponent(e)}/${t}.json?with_source_meta=1&v=${N}.${eC()}`,ee=Ju(),se={Accept:"application/json"};ee&&(se.Authorization=`Bearer ${ee}`);const re=await fetch(V,{headers:se,credentials:"same-origin"}),pe=await re.json().catch(()=>null);if(!re.ok){h(zf(re.status,pe,"layout")),d(null),y(!1);return}const je=(pe&&(pe.data||pe))??{},me=typeof je.lock_version=="number"?je.lock_version:0;if(s==="modal"&&r){const be=je,Be=Array.isArray(be.modals)?be.modals:[],fe=Be.findIndex(De=>De&&(De.id===r||De.modal_id===r));if(fe>=0){const De=Be[fe],Fe={...De,props:{...De.props??{},isOpen:!0}},ft=[...Array.isArray(be.components)?be.components:[],Fe],xt=[ft.length-1];d({layoutName:t,raw:{...be,components:ft},lockVersion:me,modalContext:{modalId:r,modalIndex:fe,hostRaw:be,originalModalNode:De,editIndexPath:xt}}),y(!1),ss({op:"load",layoutName:t,editMode:s,statusCode:re.status,timestamp:Date.now()});return}}if(s==="iteration_item"&&o){const be=je,Be=An(o),fe={children:be.components??[]},De=en(fe,Be);if(De&&Array.isArray(De.children)){d({layoutName:t,raw:be,lockVersion:me,iterationContext:{sourcePath:o,sourceIndexPath:Be,hostRaw:be}}),y(!1),ss({op:"load",layoutName:t,editMode:s,statusCode:re.status,timestamp:Date.now()});return}}d({layoutName:t,raw:je,lockVersion:me}),y(!1),ss({op:"load",layoutName:t,editMode:s,statusCode:re.status,timestamp:Date.now()})}catch(N){h(cl(N,"layout")),d(null),y(!1)}finally{f(!1)}},[e,t,s,r,o,E]);w.useEffect(()=>{z()},[z]);const H=w.useCallback(async()=>{I(E(s,t)),uy(),_(q=>q+1),await z()},[I,E,s,t,z]),G=w.useCallback(()=>{I(E(s,t))},[I,E,s,t]),F=w.useCallback(q=>{d(M=>{if(!M)return M;const N=M.raw.components??[],V=q(N),ee={...M.raw,components:V};return D(ee,M.lockVersion),{...M,raw:ee}}),y(!0),ss({op:"patch",layoutName:t,editMode:s,isDirty:!0,timestamp:Date.now()})},[t,s,D]),Z=w.useCallback(()=>{y(!0),ss({op:"patch",layoutName:t,editMode:s,isDirty:!0,timestamp:Date.now()})},[t,s]),Y=w.useCallback(q=>{d(M=>{if(!M)return M;const N={...M.raw,components:q};return D(N,M.lockVersion),{...M,raw:N}}),y(!0),ss({op:"patch",layoutName:t,editMode:s,isDirty:!0,timestamp:Date.now()})},[t,s,D]),U=w.useCallback((q,M,...N)=>{const V=N.length>=1?N[0]:M;d(ee=>{if(!ee)return ee;const se={...ee.raw,[q]:M},re=ee.raw.__editor;if(re&&typeof re=="object"&&!Array.isArray(re)){const pe=re,je=pe.original;je&&typeof je=="object"&&!Array.isArray(je)&&(se.__editor={...pe,original:{...je,[q]:V}})}return D(se,ee.lockVersion),{...ee,raw:se}}),y(!0),ss({op:"patch",layoutName:t,editMode:s,isDirty:!0,timestamp:Date.now()})},[t,s,D]),B=w.useCallback(async q=>{const M=T.current;if(!M)return ss({op:"save_guard_result",layoutName:t,editMode:s,guardBlocked:!1,timestamp:Date.now()}),{kind:"guard_no_document"};if(q?.resolveActiveExtensions&&q.sessionAddedPaths?.length)try{const Be=await q.resolveActiveExtensions(),fe=CU(M.raw.components,q.sessionAddedPaths,Be);if(fe.length>0)return ss({op:"save_guard_result",layoutName:t,editMode:s,guardBlocked:!0,guardBlockedPaths:fe,timestamp:Date.now()}),{kind:"blocked_inactive_extension",blockedPaths:fe}}catch{}if(yM())try{await bM(e)}catch{}const N=`/api/admin/templates/${encodeURIComponent(e)}/layouts/${M.layoutName}`,V=Ju(),ee={Accept:"application/json","Content-Type":"application/json"};V&&(ee.Authorization=`Bearer ${V}`);const se=!!M.modalContext,re=!!M.iterationContext,pe=se||re?"host_layout_modal_patch":"layout";ss({op:"save",layoutName:M.layoutName,editMode:s,saveTarget:pe,endpoint:N,isDirty:b,timestamp:Date.now()});let je;if(se&&M.modalContext){const{modalIndex:Be,hostRaw:fe,originalModalNode:De,editIndexPath:Fe}=M.modalContext,mt=Array.isArray(fe.modals)?[...fe.modals]:[],ft=Array.isArray(M.raw.components)?M.raw.components:[],xt=Fe&&Fe.length===1?Fe[0]:0,Ot=ft.length>xt?ft[xt]:void 0,St=Ot?Yi([Ot]):[],kt=St.length>0?{...St[0]}:void 0;if(Be>=0&&Be<mt.length&&kt){const Nt=De.props??{},tn={...kt.props??{}};"isOpen"in Nt?tn.isOpen=Nt.isOpen:delete tn.isOpen,kt.props=tn,mt[Be]=kt}je={...Nc(fe),modals:mt}}else if(re&&M.iterationContext){const{sourceIndexPath:Be,hostRaw:fe}=M.iterationContext,De=Nc(M.raw),Fe=Array.isArray(De.components)?De.components:[],mt=en({children:Fe},Be),ft=Array.isArray(mt?.children)?mt.children:[],xt=Nc(fe),St={children:Array.isArray(xt.components)?xt.components:[]},Vt=Ar(St,Be,Nt=>({...Nt,children:ft})).children??[];je={...xt,components:Vt}}else je=Nc(M.raw);const me=je;let ce;try{ce=await fetch(N,{method:"PUT",headers:ee,credentials:"same-origin",body:JSON.stringify({content:JSON.stringify(me),expected_lock_version:M.lockVersion})})}catch(Be){const fe=Be instanceof Error?Be.message:"network error";return ss({op:"save_response",layoutName:M.layoutName,editMode:s,endpoint:N,statusCode:0,timestamp:Date.now()}),{kind:"network_error",message:fe}}const be=await ce.json().catch(()=>null);if(ss({op:"save_response",layoutName:M.layoutName,editMode:s,endpoint:N,statusCode:ce.status,conflict:ce.status===409?{currentVersion:be?.current_version,yourVersion:be?.your_version}:void 0,timestamp:Date.now()}),ce.ok){const Be=typeof be?.data?.lock_version=="number"?be.data.lock_version:M.lockVersion+1;d({...M,lockVersion:Be}),y(!1),I(E(s,M.layoutName)),W(M.layoutName),uy(),x(De=>De+1);const fe=typeof be?.data?.current_version=="number"?be.data.current_version:void 0;return{kind:"success",newLockVersion:Be,newContentVersion:fe,savedLayoutName:M.layoutName}}return ce.status===409?{kind:"concurrent_modification",currentVersion:be?.current_version??-1,yourVersion:be?.your_version??M.lockVersion}:ce.status===422?{kind:"validation_failed",status:422,errors:be?.errors??null}:{kind:"network_error",message:be?.message??`HTTP ${ce.status}`}},[e,t,s,b,I,W,E,r,o]),te=w.useMemo(()=>{const q=new Set,M="route|";for(const N of C)if(N.startsWith(M)){const V=N.slice(M.length);V&&q.add(V)}return q},[C]);return{document:l,isLoading:u,error:g,isDirty:b,saveSuccessCounter:v,reloadCounter:S,dirtyKeys:C,dirtyLayoutNames:te,invalidateCurrentCache:G,reload:H,patchLayout:F,setLayoutComponents:Y,patchDocumentRaw:U,save:B,markDirty:Z}}function CU(n,e,t){if(!n||n.length===0)return[];const s=[],r=new Set([...t.moduleIds,...t.pluginIds]);for(const o of e){const l=jU(n,o);if(!l)continue;const d=l.__source;if(!d||d.kind!=="extension")continue;const u=String(d.extensionId??"");u.length!==0&&(r.has(u)||s.push(o))}return s}function jU(n,e){const t=An(e);return t.length===0?null:en({children:n},t)}function dl(n,e){if(!n)return null;const t=n.getBoundingClientRect();if(t.width===0&&t.height===0)return null;if(!e)return{left:t.left,top:t.top,width:t.width,height:t.height,scale:1};const s=e.getBoundingClientRect();return{left:t.left-s.left,top:t.top-s.top,width:t.width,height:t.height,scale:1}}function ul(n,e){if(!n)return!1;if(!e)return!0;const t=e.getBoundingClientRect(),s=1;return!(n.left>=t.width-s||n.left+n.width<=s||n.top>=t.height-s||n.top+n.height<=s)}function nC(n,e){if(typeof window>"u")return()=>{};const t=()=>{n()};window.addEventListener("scroll",t,!0),window.addEventListener("resize",t);let s=null;e&&typeof ResizeObserver<"u"&&(s=new ResizeObserver(()=>n()),s.observe(e));let r=null,o=null;const l=typeof requestAnimationFrame<"u",d=()=>{if(!l){n();return}o===null&&(o=requestAnimationFrame(()=>{o=null,n()}))};return e&&typeof MutationObserver<"u"&&(r=new MutationObserver(d),r.observe(e,{childList:!0,subtree:!0})),()=>{window.removeEventListener("scroll",t,!0),window.removeEventListener("resize",t),s&&(s.disconnect(),s=null),r&&(r.disconnect(),r=null),o!==null&&l&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(o),o=null)}}const sC=44;function rC(n){if(!n)return"inside";const e=n.scale||1,t=n.width*e,s=n.height*e;return t<sC||s<sC?"outside":"inside"}const EU=24,oC=6;function aC(n){const e=EU/2,t=n.width/2,s=n.height/2,r=e+oC,o=2*e-Math.min(t,s)+oC,l=Math.max(r,o);return{above:{left:t-e,top:-l-e},below:{left:t-e,top:n.height+l-e},left:{left:-l-e,top:s-e},right:{left:n.width+l-e,top:s-e}}}function iC(n){if(!n||typeof window>"u"||typeof window.getComputedStyle!="function")return{kind:"unknown",display:"",flexDirection:"",flexWrap:""};let e=n,t=(window.getComputedStyle(e).display??"").toLowerCase();for(;t==="contents"&&e.parentElement;)e=e.parentElement,t=(window.getComputedStyle(e).display??"").toLowerCase();const s=window.getComputedStyle(e),r=(s.display??"").toLowerCase(),o=(s.flexDirection??"").toLowerCase(),l=(s.flexWrap??"").toLowerCase(),d=r==="flex"||r==="inline-flex";if(r==="grid"||r==="inline-grid"){const h=Array.from(n.children).filter(x=>x.offsetParent!==null||x.getClientRects().length>0);if(h.length<=1)return{kind:"grid_2d",display:r,flexDirection:o,flexWrap:l};const b=h.map(x=>x.getBoundingClientRect()),y=new Set(b.map(x=>Math.round(x.top))),v=new Set(b.map(x=>Math.round(x.left)));return y.size===1?{kind:"grid_single_row",display:r,flexDirection:o,flexWrap:l}:v.size===1?{kind:"grid_single_column",display:r,flexDirection:o,flexWrap:l}:{kind:"grid_2d",display:r,flexDirection:o,flexWrap:l}}if(!d)return{kind:"block",display:r,flexDirection:o,flexWrap:l};const f=l==="wrap"||l==="wrap-reverse";return o==="column"||o==="column-reverse"?{kind:f?"flex_column_wrap":"flex_column_single",display:r,flexDirection:o,flexWrap:l}:{kind:f?"flex_row_wrap":"flex_row_single",display:r,flexDirection:o,flexWrap:l}}function RU(n){const{parentEl:e,selectedPath:t,selectedEl:s,explicitFlow:r}=n;return w.useMemo(()=>{if(!t||t.length===0)return{points:[],flow:"unknown"};const o=r??iC(e).kind,l=t.slice(0,-1),d=t[t.length-1]??0;if((o==="flex_row_wrap"||o==="flex_column_wrap"||o==="grid_2d")&&!!s){const g=AU(o,s,l,d);if(g)return{points:g,flow:o}}return{points:TU(o,l,d),flow:o}},[e,t,s,r])}function AU(n,e,t,s){let r=e.parentElement;for(;r&&lC(r)==="contents";)r=r.parentElement;if(!r)return null;const o=[];if(cC(r,o),o.length===0)return null;const l=e.getBoundingClientRect(),d=l.top+l.height/2,u=[],f=[],g=[];for(const S of o){const _=S.rect,A=_.top+_.height/2,C=Math.min(l.bottom,_.bottom)-Math.max(l.top,_.top),j=Math.min(l.height,_.height)||1;C/j>.4?u.push({rect:_,path:S.path}):A<d?f.push({rect:_,path:S.path}):g.push({rect:_,path:S.path})}u.sort((S,_)=>S.rect.left-_.rect.left),f.sort((S,_)=>S.rect.top-_.rect.top),g.sort((S,_)=>S.rect.top-_.rect.top);const h=u.findIndex(S=>Math.abs(S.rect.left-l.left)<1&&Math.abs(S.rect.top-l.top)<1),b={direction:"above",disabled:!0,insertion:null},y={direction:"below",disabled:!0,insertion:null},v={direction:"left",disabled:!0,insertion:null},x={direction:"right",disabled:!0,insertion:null};if(h>0){const S=u[h-1],_=Bf(S.path);_&&(v.disabled=!1,v.insertion=_)}else if(u.length>0){const S=u[0],_=Pf(S.path);_&&(v.disabled=!1,v.insertion=_)}if(h>=0&&h<u.length-1){const S=u[h+1],_=Pf(S.path);_&&(x.disabled=!1,x.insertion=_)}else if(u.length>0){const S=u[u.length-1],_=Bf(S.path);_&&(x.disabled=!1,x.insertion=_)}if(f.length>0){const S=f[f.length-1],_=Bf(S.path);_&&(b.disabled=!1,b.insertion=_)}else if(o.length>0){const S=o[0],_=Pf(S.path);_&&(b.disabled=!1,b.insertion=_)}if(g.length>0){const S=g[0],_=Pf(S.path);_&&(y.disabled=!1,y.insertion=_)}else if(o.length>0){const S=o[o.length-1],_=Bf(S.path);_&&(y.disabled=!1,y.insertion=_)}else y.disabled=!1,y.insertion={parentPath:t,index:s+1};return b.disabled&&y.disabled&&v.disabled&&x.disabled?null:[b,y,v,x]}function lC(n){return typeof window>"u"?"":(window.getComputedStyle(n).display??"").toLowerCase()}function cC(n,e){const t=Array.from(n.children);for(const s of t){if(lC(s)==="contents"){cC(s,e);continue}const o=s.getAttribute("data-editor-path");if(o&&/\.iteration\.\d+(?:$|\.)/.test(o)||!o)continue;const l=s.getBoundingClientRect();l.width===0&&l.height===0||e.push({el:s,rect:l,path:An(o)})}}function Pf(n){if(!n||n.length===0)return null;const e=n[n.length-1];return typeof e!="number"?null:{parentPath:n.slice(0,-1),index:e}}function Bf(n){if(!n||n.length===0)return null;const e=n[n.length-1];return typeof e!="number"?null:{parentPath:n.slice(0,-1),index:e+1}}function TU(n,e,t){const s={direction:"above",disabled:!0,insertion:null},r={direction:"below",disabled:!0,insertion:null},o={direction:"left",disabled:!0,insertion:null},l={direction:"right",disabled:!0,insertion:null},d=u=>({parentPath:e,index:u});switch(n){case"block":case"unknown":{s.disabled=!1,s.insertion=d(t),r.disabled=!1,r.insertion=d(t+1);break}case"flex_row_single":case"grid_single_row":{o.disabled=!1,o.insertion=d(t),l.disabled=!1,l.insertion=d(t+1);break}case"flex_column_single":case"grid_single_column":{s.disabled=!1,s.insertion=d(t),r.disabled=!1,r.insertion=d(t+1);break}case"flex_row_wrap":case"grid_2d":{o.disabled=!1,o.insertion=d(t),l.disabled=!1,l.insertion=d(t+1),s.disabled=!1,s.insertion=d(0),r.disabled=!1,r.insertion=d(-1);break}case"flex_column_wrap":{s.disabled=!1,s.insertion=d(t),r.disabled=!1,r.insertion=d(t+1),o.disabled=!1,o.insertion=d(0),l.disabled=!1,l.insertion=d(-1);break}}return[s,r,o,l]}function $U(n=50){const e=w.useRef([]),t=w.useRef(-1),[,s]=w.useState(0),r=()=>{s(g=>(g+1)%1e6)},o=(g,h)=>{const b=e.current.length,y=t.current;CL({op:g,actionKind:h?.actionKind,label:h?.label,stackSize:b,cursor:y,canUndo:y>0,canRedo:y>=0&&y<b-1,timestamp:Date.now()})},l=w.useCallback(g=>{const b=e.current.slice(0,t.current+1);for(b.push(g);b.length>n;)b.shift();e.current=b,t.current=b.length-1,r(),o("push",g)},[n]),d=w.useCallback(()=>{if(t.current<=0)return null;t.current-=1,r();const g=e.current[t.current]??null;return o("undo",g??void 0),g},[]),u=w.useCallback(()=>{const g=t.current+1;if(g>=e.current.length)return null;t.current=g,r();const h=e.current[g]??null;return o("redo",h??void 0),h},[]),f=w.useCallback(()=>{e.current=[],t.current=-1,r(),o("clear")},[]);return{push:l,undo:d,redo:u,clear:f,canUndo:t.current>0,canRedo:t.current>=0&&t.current<e.current.length-1}}function NU(n){if(!n||!(n instanceof HTMLElement))return!1;const e=n.tagName;return!!(e==="INPUT"||e==="TEXTAREA"||e==="SELECT"||n.isContentEditable)}function DU(n){const{onUndo:e,onRedo:t,enabled:s=!0}=n;w.useEffect(()=>{if(!s||typeof window>"u")return;const r=o=>{if(NU(o.target)||!(o.ctrlKey||o.metaKey))return;const d=o.key.toLowerCase();if(d==="z"&&!o.shiftKey){o.preventDefault(),e();return}if(d==="z"&&o.shiftKey||d==="y"){o.preventDefault(),t();return}};return window.addEventListener("keydown",r),()=>{window.removeEventListener("keydown",r)}},[e,t,s])}const IU=20,dC=50,LU=90,Ga=120,OU=130,uC=80,MU=9e3,fC=1e4;function zU(n){const e=n<0?0:n>dC?dC:n;return IU+e}function PU(n){const{anchor:e,open:t,onClose:s,onEditProps:r,onDuplicate:o,onDelete:l,onSeparateBranch:d,separateBranchLabel:u,onMergeBranch:f,mergeBranchLabel:g}=n,{t:h}=Mn(),[b,y]=w.useState(null);if(!t||!e)return null;const v=[{index:0,testid:"g7le-context-menu-edit-props",label:h("layout_editor.context_menu.edit_props"),onSelect:r},{index:1,testid:"g7le-context-menu-duplicate",label:h("layout_editor.context_menu.duplicate"),onSelect:o}];return d?v.push({index:v.length,testid:"g7le-context-menu-separate-branch",label:u??h("layout_editor.context_menu.separate_branch"),onSelect:d,hint:h("layout_editor.context_menu.separate_branch_hint")}):f&&v.push({index:v.length,testid:"g7le-context-menu-merge-branch",label:g??h("layout_editor.context_menu.merge_branch"),onSelect:f,hint:h("layout_editor.context_menu.merge_branch_hint")}),v.push({index:v.length,testid:"g7le-context-menu-delete",label:h("layout_editor.context_menu.delete"),onSelect:l,danger:!0}),a.jsx("div",{className:"g7le-context-menu","data-testid":"g7le-context-menu",role:"menu",style:{position:"absolute",left:e.left,top:e.top,background:"#fff",border:"1px solid #cbd5e1",borderRadius:6,boxShadow:"0 4px 12px rgba(0,0,0,0.15)",zIndex:1200,minWidth:160,padding:4,pointerEvents:"auto"},onMouseLeave:()=>{y(null),s()},children:v.map(x=>{const S=b===x.index,_=x.danger?"#dc2626":"#0f172a",A=x.danger?"#fee2e2":"#e0e7ff",C=x.danger?"#b91c1c":"#1d4ed8";return a.jsx("button",{type:"button",role:"menuitem","data-testid":x.testid,title:x.hint,onClick:j=>{j.stopPropagation(),x.onSelect(),y(null),s()},onMouseEnter:()=>y(x.index),onFocus:()=>y(x.index),style:{...BU,color:S?C:_,background:S?A:"transparent"},children:x.label},x.testid)})})}const BU={display:"block",width:"100%",textAlign:"left",padding:"6px 12px",border:"none",fontSize:13,cursor:"pointer",borderRadius:4,pointerEvents:"auto",transition:"background-color 120ms ease, color 120ms ease"};function HU(n){const{hoverBox:e,selectedBox:t,lockKind:s,navAffordance:r,onEditProps:o,onDuplicate:l,onDelete:d,onSeparateBranch:u,separateBranchLabel:f,onMergeBranch:g,mergeBranchLabel:h,definedDeviceBranches:b,onJumpToDevice:y,onLinkEditDestination:v,onEditBase:x,onEditExtension:S,extensionLabel:_,baseLayoutLabel:A,dataSourceLabel:C,branchLabel:j,onEditIteration:E,resizeEnabledAxes:T,onResizeHandlePointerDown:D,selectedName:I,onSelectParent:W}=n,{t:z}=Mn(),[H,G]=w.useState(!1),F=X1(s),Z=H&&F,Y=rC(t),U=Y==="outside",B=U&&t?aC(t):null,te=B?{left:B.right.left,top:B.above.top}:{right:-30,top:-30},q={top:-28,left:0},N=U&&!!I?{top:-50,left:0}:q,V=B?{top:B.below.top+28,left:0}:{top:"auto",bottom:-28},ee=B?{top:B.below.top+56,left:0}:{top:"auto",bottom:-56};return a.jsxs("div",{className:"g7le-element-overlay","data-testid":"g7le-element-overlay",style:{position:"absolute",inset:0,pointerEvents:"none"},children:[e&&a.jsx("div",{"data-testid":"g7le-overlay-hover",style:{position:"absolute",left:e.left,top:e.top,width:e.width,height:e.height,border:"1px dashed #2563eb",pointerEvents:"none"}}),t&&a.jsxs("div",{"data-testid":"g7le-overlay-selected","data-lock-kind":s,style:{position:"absolute",left:t.left,top:t.top,width:t.width,height:t.height,border:s==="none"?"2px solid #2563eb":"2px dashed #f59e0b",pointerEvents:"none"},children:[j?a.jsxs("span",{"data-testid":"g7le-overlay-branch-badge",style:UU,children:["📱 ",j]}):null,I&&(W?a.jsxs("button",{type:"button","data-testid":"g7le-overlay-type-label","data-placement":U?"outside":"inside",title:z("layout_editor.overlay.select_parent"),"aria-label":z("layout_editor.overlay.select_parent"),onClick:se=>{se.preventDefault(),se.stopPropagation(),W()},style:U?FU:qU,children:[a.jsx("span",{"aria-hidden":!0,style:{marginRight:3,opacity:.85},children:"↑"}),I]}):a.jsx("span",{"data-testid":"g7le-overlay-type-label","data-placement":U?"outside":"inside",style:U?gC:pC,children:I})),F&&a.jsx("button",{type:"button","data-testid":"g7le-overlay-info-button","aria-label":"info",onClick:se=>{se.stopPropagation(),G(re=>!re)},"data-placement":Y,style:{position:"absolute",...te,width:20,height:20,borderRadius:10,border:"1px solid #2563eb",background:"#fff",color:"#2563eb",fontSize:12,fontWeight:700,cursor:"pointer",pointerEvents:"auto",padding:0,lineHeight:"18px",zIndex:Ga},children:"ⓘ"}),s==="none"&&a.jsx(WU,{enabledAxes:T,onHandlePointerDown:D}),s==="base"&&x&&a.jsxs("button",{type:"button","data-testid":"g7le-overlay-edit-base",onClick:se=>{se.stopPropagation(),x()},style:{...Gc,...q},children:["🔒 ",z("layout_editor.overlay.edit_common_layout"),A?a.jsx("span",{"data-testid":"g7le-overlay-base-layout-label",style:py,children:A}):null]}),s==="extension"&&S&&a.jsxs("button",{type:"button","data-testid":"g7le-overlay-edit-extension",onClick:se=>{se.stopPropagation(),S()},style:{...Gc,...q},children:["🔒 ",z("layout_editor.overlay.edit_extension"),_?a.jsx("span",{"data-testid":"g7le-overlay-extension-label",style:py,children:_}):null]}),s==="data_bound"&&a.jsxs("span",{"data-testid":"g7le-overlay-data-bound-notice",style:{...Gc,...N,pointerEvents:"none",cursor:"default"},children:[z("layout_editor.overlay.locked_data_bound"),C?a.jsx("span",{"data-testid":"g7le-overlay-data-source-label",style:py,children:C}):null]}),s==="data_bound"&&E&&a.jsxs("button",{type:"button","data-testid":"g7le-overlay-edit-iteration",onClick:se=>{se.stopPropagation(),E()},style:{...Gc,...V},children:["↳ ",z("layout_editor.overlay.edit_iteration_item")]}),r==="route_in_tree"&&a.jsx("button",{type:"button","data-testid":"g7le-overlay-link-edit-destination",onClick:se=>{se.stopPropagation(),v()},style:{...Gc,...V},children:z("layout_editor.overlay.edit_destination_route")}),(u||g||y&&(b??[]).length>0)&&a.jsxs("div",{"data-testid":"g7le-overlay-branch-affordances",style:{position:"absolute",...ee,display:"flex",flexDirection:"column",alignItems:"flex-start",gap:4,pointerEvents:"none"},children:[y&&(b??[]).map(se=>a.jsxs("button",{type:"button","data-testid":`g7le-overlay-jump-device-${se.key}`,title:z("layout_editor.overlay.jump_device_hint",{device:se.label}),onClick:re=>{re.stopPropagation(),y(se.key)},style:fy,children:["↗ ",z("layout_editor.overlay.jump_device",{device:se.label})]},se.key)),u&&a.jsxs("button",{type:"button","data-testid":"g7le-overlay-separate-branch",title:z("layout_editor.context_menu.separate_branch_hint"),onClick:se=>{se.stopPropagation(),u()},style:fy,children:["📱 ",f??z("layout_editor.context_menu.separate_branch")]}),g&&a.jsxs("button",{type:"button","data-testid":"g7le-overlay-merge-branch",title:z("layout_editor.context_menu.merge_branch_hint"),onClick:se=>{se.stopPropagation(),g()},style:fy,children:["↩️ ",h??z("layout_editor.context_menu.merge_branch")]})]})]}),a.jsx(PU,{anchor:t&&Z?{left:t.left+t.width+8,top:t.top-4}:null,open:Z,onClose:()=>G(!1),onEditProps:o,onDuplicate:l,onDelete:d,onSeparateBranch:u,separateBranchLabel:f,onMergeBranch:g,mergeBranchLabel:h})]})}function WU(n){const{enabledAxes:e,onHandlePointerDown:t}=n,s=e?.width??!1,r=e?.height??!1,o=[{key:"nw",style:{left:-4,top:-4},cursor:"nwse-resize",needsWidth:!0,needsHeight:!0},{key:"n",style:{left:"50%",top:-4,transform:"translateX(-50%)"},cursor:"ns-resize",needsWidth:!1,needsHeight:!0},{key:"ne",style:{right:-4,top:-4},cursor:"nesw-resize",needsWidth:!0,needsHeight:!0},{key:"e",style:{right:-4,top:"50%",transform:"translateY(-50%)"},cursor:"ew-resize",needsWidth:!0,needsHeight:!1},{key:"se",style:{right:-4,bottom:-4},cursor:"nwse-resize",needsWidth:!0,needsHeight:!0},{key:"s",style:{left:"50%",bottom:-4,transform:"translateX(-50%)"},cursor:"ns-resize",needsWidth:!1,needsHeight:!0},{key:"sw",style:{left:-4,bottom:-4},cursor:"nesw-resize",needsWidth:!0,needsHeight:!0},{key:"w",style:{left:-4,top:"50%",transform:"translateY(-50%)"},cursor:"ew-resize",needsWidth:!0,needsHeight:!1}];return a.jsx(a.Fragment,{children:o.map(l=>{const d=!l.needsWidth||s,u=!l.needsHeight||r,f=d&&u&&!!t;return!d||!u?null:a.jsx("span",{"data-testid":`g7le-resize-handle-${l.key}`,"data-resize-handle-active":f?"true":"false",onPointerDown:f?g=>{g.preventDefault(),g.stopPropagation(),t?.(l.key,{clientX:g.clientX,clientY:g.clientY})}:void 0,style:{position:"absolute",...l.style,width:8,height:8,background:"#fff",border:"1px solid #2563eb",cursor:l.cursor,pointerEvents:f?"auto":"none",zIndex:Ga}},l.key)})})}const Gc={position:"absolute",top:-28,left:0,background:"#fff",border:"1px solid #2563eb",color:"#2563eb",padding:"2px 6px",fontSize:11,borderRadius:4,cursor:"pointer",pointerEvents:"auto",whiteSpace:"nowrap",zIndex:Ga},fy={background:"#fff",border:"1px solid #2563eb",color:"#2563eb",padding:"2px 6px",fontSize:11,borderRadius:4,cursor:"pointer",pointerEvents:"auto",whiteSpace:"nowrap",zIndex:Ga},py={marginLeft:6,padding:"0 5px",borderRadius:3,background:"#eef2ff",border:"1px solid #c7d2fe",fontSize:10,fontWeight:600,color:"#3730a3"},UU={position:"absolute",top:0,right:0,transform:"translateY(-100%)",background:"rgba(124,58,237,0.92)",color:"#fff",padding:"1px 6px",borderRadius:"3px 3px 0 0",fontSize:10,fontWeight:600,whiteSpace:"nowrap",pointerEvents:"none"},pC={position:"absolute",top:0,left:0,background:"rgba(37,99,235,0.55)",color:"#fff",padding:"1px 6px",fontSize:10,fontWeight:600,lineHeight:"14px",borderBottomRightRadius:4,letterSpacing:"0.02em",whiteSpace:"nowrap",pointerEvents:"none",userSelect:"none",maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis"},gC={position:"absolute",bottom:"100%",left:0,marginBottom:2,background:"rgba(37,99,235,0.55)",color:"#fff",padding:"1px 6px",fontSize:10,fontWeight:600,lineHeight:"14px",borderRadius:4,letterSpacing:"0.02em",whiteSpace:"nowrap",pointerEvents:"none",userSelect:"none"},qU={...pC,pointerEvents:"auto",cursor:"pointer",background:"rgba(37,99,235,0.82)",border:"none",display:"inline-flex",alignItems:"center",font:"inherit",fontSize:10,fontWeight:600,zIndex:Ga},FU={...gC,pointerEvents:"auto",cursor:"pointer",background:"rgba(37,99,235,0.82)",border:"none",display:"inline-flex",alignItems:"center",font:"inherit",fontSize:10,fontWeight:600,zIndex:Ga},VU={above:{top:-30,left:"50%",transform:"translateX(-50%)"},below:{bottom:-30,left:"50%",transform:"translateX(-50%)"},left:{left:-30,top:"50%",transform:"translateY(-50%)"},right:{right:-30,top:"50%",transform:"translateY(-50%)"}};function KU(n){const{selectedBox:e,points:t,onAddRequest:s}=n,{t:r}=Mn();if(!e||t.length===0)return null;const o=rC(e),d=o==="outside"?aC(e):null;return a.jsx("div",{className:"g7le-insertion-affordances","data-testid":"g7le-insertion-affordances",style:{position:"absolute",left:e.left,top:e.top,width:e.width,height:e.height,pointerEvents:"none"},children:t.map(u=>{const f=d?{left:d[u.direction].left,top:d[u.direction].top}:VU[u.direction],g=r(`layout_editor.insertion.${u.direction}`);return a.jsx("button",{type:"button",disabled:u.disabled,"data-testid":`g7le-insertion-${u.direction}`,"data-disabled":u.disabled?"true":"false","data-placement":o,"aria-label":g,title:g,onClick:h=>{h.stopPropagation(),u.disabled||s(u)},style:{position:"absolute",...f,width:24,height:24,borderRadius:12,border:"1px solid #2563eb",background:u.disabled?"#cbd5e1":"#fff",color:u.disabled?"#94a3b8":"#2563eb",cursor:u.disabled?"not-allowed":"pointer",opacity:u.disabled?.4:1,fontSize:16,fontWeight:700,lineHeight:"20px",padding:0,pointerEvents:"auto",boxShadow:"0 1px 3px rgba(0,0,0,0.15)",zIndex:Ga},children:"+"},u.direction)})})}function Yc(n,e){return!e||!Array.isArray(e.draggable)?!1:e.draggable.includes(n)}function GU({draggedComponentName:n,targetContainerName:e,nesting:t}){if(!t||!Yc(n,t))return!1;const s=t.containers;if(!s||typeof s!="object")return!1;const r=s[e];return!r||!Array.isArray(r.accepts)?!1:r.accepts.includes(n)}function hC(n,e){if(!e?.containers)return!1;const t=e.containers[n];return!!(t&&Array.isArray(t.accepts)&&t.accepts.length>0)}function YU(n,e,t,s,r){if(!t||t.length===0)return{parentPath:[],index:r};if(n&&hC(n,s))return{parentPath:t,index:e};const o=t.slice(0,-1),l=t[t.length-1]??0;return{parentPath:o,index:l+1}}function mC(n,e){return n===e||n.startsWith(`${e}.`)}function yC(n,e){if(n==="")return/^\d+$/.test(e)?Number(e):null;const t=`${n}.children.`;if(!e.startsWith(t))return null;const s=e.slice(t.length);return/^\d+$/.test(s)?Number(s):null}function XU(n,e){const t=[];return n.querySelectorAll("[data-editor-path]").forEach(s=>{if(s.hasAttribute("data-dnd-placeholder")||s.closest("[data-dnd-placeholder]"))return;const r=s.dataset.editorPath;typeof r=="string"&&t.push({path:e(r),domPath:r,rect:s.getBoundingClientRect()})}),t}const JU=16;function ZU(n){const{frameEl:e,draggedPath:t,acceptsContainer:s,allowsNestSlot:r,includeContainer:o}=n,l=n.normalizeContainerPath??(y=>y),d=e.getBoundingClientRect(),u=XU(e,l),f=new Map;for(const y of u)f.has(y.path)||f.set(y.path,y.domPath);const g=l(t),h=new Set([""]);for(const y of u){const v=eq(y.path);v!==null&&h.add(v)}for(const y of u)h.add(y.path);const b=[];for(const y of h){const v=y==="",x=v?null:f.get(y)??y,S=v?e:e.querySelector(`[data-editor-path="${vC(x)}"]`);if(!S&&!v||!v&&mC(y,g))continue;const _=y;if(!v&&o&&!o(_))continue;const A=T=>{const D=f.get(T);if(!D||typeof window>"u")return!1;const I=e.querySelector(`[data-editor-path="${vC(D)}"]`);return I?(window.getComputedStyle(I).display??"").toLowerCase()==="contents":!1},C=u.filter(T=>yC(y,T.path)!==null).filter(T=>!mC(T.path,g)).filter(T=>!A(T.path)).map(T=>({origIndex:yC(y,T.path),rect:QU(T.rect,T.path,u)})).filter(T=>T.rect.width>0||T.rect.height>0).sort((T,D)=>T.origIndex-D.origIndex),j=iC(v?e:S).kind,E=j==="flex_row_single"||j==="flex_row_wrap"||j==="grid_single_row"||j==="grid_2d";if(C.length>0){if(s(_)){C.forEach(D=>{b.push(bC(_,D.origIndex,D.rect,d,E,"before"))});const T=C[C.length-1];b.push(bC(_,T.origIndex+1,T.rect,d,E,"after"))}}else if(!v&&r(_)&&S){const T=S.getBoundingClientRect();T.width>0&&T.height>0&&b.push({id:`slot:${_}:0`,kind:"nest",containerPath:_,index:0,box:xC(T,d),orientation:"area"})}else v&&b.push({id:"slot::0",kind:"gap",containerPath:"",index:0,box:xC(d,d),orientation:"area"})}return b.filter(y=>ul(y.box,e))}function bC(n,e,t,s,r,o){const l=JU;let d;if(r)d={left:(o==="before"?t.left:t.right)-l/2,top:t.top,width:l,height:t.height};else{const u=o==="before"?t.top:t.bottom;d={left:t.left,top:u-l/2,width:t.width,height:l}}return{id:`slot:${n}:${e}`,kind:"gap",containerPath:n,index:e,box:{left:d.left-s.left,top:d.top-s.top,width:d.width,height:d.height,scale:1},orientation:r?"vertical":"horizontal"}}function QU(n,e,t){if(n.width>0||n.height>0)return n;const s=`${e}.children.`;let r=1/0,o=1/0,l=-1/0,d=-1/0;for(const u of t)u.path.startsWith(s)&&(u.rect.width===0&&u.rect.height===0||(r=Math.min(r,u.rect.left),o=Math.min(o,u.rect.top),l=Math.max(l,u.rect.right),d=Math.max(d,u.rect.bottom)));return r===1/0?n:{left:r,top:o,width:l-r,height:d-o,right:l,bottom:d,x:r,y:o,toJSON:()=>({})}}function xC(n,e){return{left:n.left-e.left,top:n.top-e.top,width:n.width,height:n.height,scale:1}}function eq(n){if(n==="")return null;const e=n.lastIndexOf(".children.");return e<0?"":n.slice(0,e)}function tq(n){if(!n.startsWith("slot:"))return null;const e=n.slice(5),t=e.lastIndexOf(":");if(t<0)return null;const s=e.slice(0,t),r=Number(e.slice(t+1));return Number.isFinite(r)?{containerPath:s,index:r}:null}function vC(n){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(n):n.replace(/[^a-zA-Z0-9_\-.]/g,e=>`\\${e}`)}function gy(n){return typeof n=="string"&&n.length>0?n:null}function hy(n,e){return e&&n.startsWith(`${e}.`)?e:n}function wC(n){if(typeof n!="string")return null;const e=tq(n);return e?{containerPath:e.containerPath,index:e.index}:null}function my(n,e){return e?n.startsWith(`${e}.iteration.`):!1}function yy(n,e,t){return e?t==="iteration_item"?my(n,e):n===e||n.startsWith(`${e}.`):!1}function nq(n){const{frameEl:e,nesting:t,editMode:s,currentExtensionId:r,editableRootPath:o,components:l,patchLayout:d,pushHistory:u,onMovePath:f,selectedPath:g,showBranchBoundaryHint:h}=n,b=(s==="iteration_item"||s==="modal")&&o&&o.length>0?rs(o):null,[y,v]=w.useState(null),[x,S]=w.useState(null),[_,A]=w.useState(null),C=w.useRef({components:l,nesting:t,editMode:s,currentExtensionId:r,selectedPath:g,editableRootSourcePath:b});C.current={components:l,nesting:t,editMode:s,currentExtensionId:r,selectedPath:g,editableRootSourcePath:b};const j=w.useRef(null),E=w.useCallback(Y=>({children:Y}),[]),T=w.useCallback((Y,U)=>{const B=en(E(Y),U);return B?typeof B.name=="string"?B.name:typeof B.type=="string"?B.type:null:null},[E]),D=w.useCallback(Y=>U=>{const B=C.current;if(U==="")return Yc(Y,B.nesting);const te=An(U),q=en(E(B.components),te);if(!q)return!1;const M=typeof q.name=="string"?q.name:typeof q.type=="string"?q.type:"";if(!M)return!1;const N=!!B.editableRootSourcePath&&(U===B.editableRootSourcePath||U.startsWith(`${B.editableRootSourcePath}.`));if(B.editableRootSourcePath&&!N)return!1;if(!N){const V=by(E(B.components),te);if(ta(q,B.editMode,B.currentExtensionId,V)!=="none")return!1}return hC(M,B.nesting)?GU({draggedComponentName:Y,targetContainerName:M,nesting:B.nesting}):!1},[E]),I=w.useCallback(Y=>{if(Y==="")return!0;const U=C.current,B=An(Y),te=j.current;if(te&&te.length>0){const N=te.slice(0,-1);if(Hf(B,N))return!0}const q=en(E(U.components),B);return q?(typeof q.name=="string"?q.name:typeof q.type=="string"?q.type:"").length>0:!1},[E]),W=w.useCallback(Y=>{const U=D(Y),B=C.current,te=j.current,q=te?te.slice(0,-1):null,M=new Set;if(q)for(let se=q.length;se>=0;se--)M.add(Wf(q.slice(0,se)));const N=Wf(te??[]),V=se=>!!te&&(se===N||se.startsWith(`${N}.`)),ee=(se,re)=>{for(let pe=0;pe<se.length;pe++){const je=[...re,pe],me=Wf(je);!M.has(me)&&!V(me)&&U(me)&&I(me)&&M.add(me);const ce=se[pe];if(ce&&Array.isArray(ce.children)&&ee(ce.children,je),ce&&ce.responsive&&typeof ce.responsive=="object")for(const be of Object.keys(ce.responsive)){const Be=ce.responsive[be];Be&&Array.isArray(Be.children)&&ee(Be.children,[...je,{responsive:be}])}}};return ee(B.components,[]),{acceptsContainer:U,includeContainer:se=>se===""?!0:V(se)?!1:M.has(se),allowsNestSlot:se=>{if(!U(se))return!1;if(q){const re=An(se);if(Hf(re,q))return!1}return I(se)}}},[D,I,E]),z=w.useCallback(Y=>{const U=gy(Y.active.id),B=C.current;if(!U)return;const te=hy(U,B.selectedPath),q=An(te),M=en(E(B.components),q),N=M&&typeof M.name=="string"?M.name:M&&typeof M.type=="string"?M.type:null;v(te),S(N),A(null),j.current=M?q:null;let V="allowed";if(!N||!Yc(N,B.nesting))V="denied_no_draggable";else if(M){const ee=by(E(B.components),q),se=ta(M,B.editMode,B.currentExtensionId,ee);B.editableRootSourcePath&&!yy(te,B.editableRootSourcePath,B.editMode)||am(ee)&&!my(te,B.editableRootSourcePath)?V="denied_data_bound":se==="base"||se==="partial"?V="denied_base_locked":(se==="extension"||se==="extension_point")&&(V="denied_extension_locked")}Ba({source:"drag",draggedComponentName:N,targetContainerName:null,targetContainerPath:null,decision:V,result:V==="allowed"?"completed":"denied",timestamp:Date.now()})},[E]),H=w.useCallback(Y=>{if(!e)return;const U=gy(Y.active.id);if(!U)return;const B=x;if(!B){A(null);return}const te=C.current,q=hy(U,te.selectedPath),M=An(q),N=en(E(te.components),M);if(!N||!Yc(B,te.nesting)){A(null);return}const V=by(E(te.components),M);if(te.editableRootSourcePath&&!yy(q,te.editableRootSourcePath,te.editMode)){A(null);return}const ee=ta(N,te.editMode,te.currentExtensionId,V),se=my(q,te.editableRootSourcePath);if(am(V)&&!se||ee!=="none"&&ee!=="data_bound"&&!se){A(null);return}A(wC(Y.over?.id))},[e,x,E]),G=w.useCallback(()=>{v(null),S(null),A(null),j.current=null},[]),F=w.useCallback(Y=>{const U=gy(Y.active.id),B=x,te=C.current,q=U?hy(U,te.selectedPath):null;if(!e||!q||!B){G();return}const M=wC(Y.over?.id),N=An(q);if(!M){Ba({source:"drag",draggedComponentName:B,targetContainerName:null,targetContainerPath:null,decision:"denied_no_accepts",result:"cancelled",timestamp:Date.now()}),G();return}const V=M.containerPath===""?[]:An(M.containerPath),ee=M.containerPath===""?null:T(te.components,V);if(!sq(N.slice(0,-1),V)){Ba({source:"drag",draggedComponentName:B,targetContainerName:ee,targetContainerPath:M.containerPath||null,decision:"denied_responsive_branch_boundary",result:"denied",timestamp:Date.now()}),h?.(),G();return}if(te.editableRootSourcePath&&!yy(M.containerPath,te.editableRootSourcePath,te.editMode)){Ba({source:"drag",draggedComponentName:B,targetContainerName:ee,targetContainerPath:M.containerPath||null,decision:"denied_data_bound",result:"denied",timestamp:Date.now()}),G();return}const se=N.slice(0,-1),re=N[N.length-1]??-1;if(Hf(se,V)&&(M.index===re||M.index===re+1)){Ba({source:"drag",draggedComponentName:B,targetContainerName:ee,targetContainerPath:M.containerPath||null,decision:"allowed",insertionIndex:M.index,result:"cancelled",timestamp:Date.now()}),G();return}const me=Hf(se,V),ce=M.index;let be=[];d(Fe=>{const xt=cM({children:Fe},N,V,ce).children??[];return be=xt,xt}),u(be,`move ${B}`);const Be=V_(V,N),fe=me&&re<ce?ce-1:ce,De=Wf([...Be,fe]);f?.(De),Ba({source:"drag",draggedComponentName:B,targetContainerName:ee,targetContainerPath:M.containerPath||null,decision:"allowed",insertionIndex:M.index,result:"completed",timestamp:Date.now()}),G()},[e,x,D,I,T,d,u,G,f]),Z=w.useCallback(()=>{G()},[G]);return{activeDragPath:y,activeDragName:x,activeDropZone:_,onDragStart:z,onDragMove:H,onDragEnd:F,onDragCancel:Z,buildSlotPredicates:W}}function by(n,e){const t=[];let s=n,r=Array.isArray(n.children)?n.children:[];for(let o=0;o<e.length-1;o++){const l=e[o];if(zn(l)){const u=s.responsive?.[l.responsive];r=u&&Array.isArray(u.children)?u.children:[];continue}const d=r[l]??null;if(!d)break;t.push(d),s=d,r=Array.isArray(d.children)?d.children:[]}return t}function Hf(n,e){if(n.length!==e.length)return!1;for(let t=0;t<n.length;t++)if(!sf(n[t],e[t]))return!1;return!0}function sq(n,e){const t=n.filter(zn),s=e.filter(zn);if(t.length!==s.length)return!1;for(let r=0;r<t.length;r++)if(t[r].responsive!==s[r].responsive)return!1;return!0}function Wf(n){return rs(n)}function rq(n){const e=/^(.*?)\.iteration\.\d+(?:\.|$)/.exec(n);return e?e[1]:null}function oq(n){const e=An(n);return rs(e)}function Xc(n,e){return e?n.startsWith(`${e}.iteration.`):!1}function aq(n,e,t){return e?t==="iteration_item"?Xc(n,e):n===e||n.startsWith(`${e}.`):!1}function iq(n){if(n.length===0)return null;let e=1/0,t=1/0,s=-1/0,r=-1/0;for(const o of n)e=Math.min(e,o.left),t=Math.min(t,o.top),s=Math.max(s,o.left+o.width),r=Math.max(r,o.top+o.height);return{left:e,top:t,width:s-e,height:r-t,scale:n[0].scale}}function lq(n){const{frameEl:e,nesting:t,editMode:s,currentExtensionId:r,editableRootPath:o,components:l,patchLayout:d,pushHistory:u,onSelectPath:f,onMovePath:g,onRequestInlineEdit:h,selectedPath:b}=n,y=(s==="iteration_item"||s==="modal")&&o&&o.length>0?rs(o):null,{t:v}=Mn(),[x,S]=w.useState(!1),_=w.useRef(null),A=w.useCallback(()=>{S(!0),_.current&&clearTimeout(_.current),_.current=setTimeout(()=>S(!1),2600)},[]);w.useEffect(()=>()=>{_.current&&clearTimeout(_.current)},[]);const C=nq({frameEl:e,nesting:t,editMode:s,currentExtensionId:r,editableRootPath:o,components:l,patchLayout:d,pushHistory:u,onMovePath:g,selectedPath:b,showBranchBoundaryHint:A}),j=Yw(fh(Iu,{activationConstraint:{distance:8}})),[E,T]=w.useState([]),D=w.useCallback(()=>{if(!e){T([]);return}if(C.activeDragPath!==null)return;const q={children:l},M=e.querySelectorAll("[data-editor-path]"),N=[],V=new Map;M.forEach(ee=>{const se=ee.dataset.editorPath;if(typeof se!="string"||s!=="iteration_item"&&y&&!aq(se,y,s))return;const re=rq(se);if(re!==null&&!Xc(se,y)){if(/\.iteration\.\d+$/.test(se)){const fe=dl(ee,e);if(fe&&ul(fe,e)){const De=V.get(re)??[];De.push(fe),V.set(re,De)}}return}if(Xc(se,y)&&/\.iteration\.\d+$/.test(se))return;const pe=An(se),je=en(q,pe);if(!je||je.iteration&&je.iteration.source!==void 0)return;const me=typeof je.name=="string"?je.name:typeof je.type=="string"?je.type:null;if(!me||!Yc(me,t))return;const ce=SC(q,pe);if(am(ce)&&!Xc(se,y))return;const be=ta(je,s,r,ce);if(be!=="none"&&be!=="data_bound"&&!Xc(se,y))return;const Be=dl(ee,e);Be&&ul(Be,e)&&N.push({path:se,name:me,box:Be})});for(const[ee,se]of V){const re=An(ee),pe=en(q,re);if(!pe)continue;const je=typeof pe.name=="string"?pe.name:typeof pe.type=="string"?pe.type:null;if(!je)continue;const me=SC(q,re),ce=ta(pe,s,r,me);if(ce!=="none"&&ce!=="data_bound")continue;const be=iq(se);be&&ul(be,e)&&N.push({path:ee,name:je,box:be,isIterationGroup:!0})}T(N)},[e,l,t,s,r,y,C.activeDragPath]);w.useEffect(()=>{D()},[D]),w.useEffect(()=>{if(e)return nC(D,e)},[e,D]);const I=C.activeDragPath!==null,W=C.activeDragName,z=C.activeDragPath,[H,G]=w.useState(null),F=w.useRef(null);w.useEffect(()=>{if(!z||!e){z||(F.current=null,G(null));return}if(F.current===z)return;F.current=z;const q=e.querySelector(`[data-editor-path="${_C(z)}"]`);if(q){const me=q.getBoundingClientRect();G({node:q.cloneNode(!0),width:me.width,height:me.height});return}const M=Array.from(e.querySelectorAll(`[data-editor-path^="${_C(z)}.iteration."]`)).filter(me=>/\.iteration\.\d+$/.test(me.dataset.editorPath??""));if(M.length===0){G(null);return}let N=1/0,V=1/0,ee=-1/0,se=-1/0;for(const me of M){const ce=me.getBoundingClientRect();N=Math.min(N,ce.left),V=Math.min(V,ce.top),ee=Math.max(ee,ce.right),se=Math.max(se,ce.bottom)}const re=ee-N,pe=se-V,je=document.createElement("div");je.style.position="relative",je.style.width=`${re}px`,je.style.height=`${pe}px`;for(const me of M){const ce=me.getBoundingClientRect(),be=me.cloneNode(!0);be.style.position="absolute",be.style.left=`${ce.left-N}px`,be.style.top=`${ce.top-V}px`,be.style.width=`${ce.width}px`,be.style.height=`${ce.height}px`,be.style.margin="0",je.appendChild(be)}G({node:je,width:re,height:pe})},[z,e]);const[Z,Y]=w.useState([]),U=w.useRef(null),B=w.useRef(C.buildSlotPredicates);if(B.current=C.buildSlotPredicates,w.useEffect(()=>{if(!z||!W||!e){U.current=null,Y(V=>V.length===0?V:[]);return}if(U.current===z)return;U.current=z;const{acceptsContainer:q,allowsNestSlot:M,includeContainer:N}=B.current(W);Y(ZU({frameEl:e,draggedPath:z,acceptsContainer:q,allowsNestSlot:M,includeContainer:N,normalizeContainerPath:V=>oq(V)}))},[z,W,e]),!e)return null;const te=C.activeDropZone?`slot:${C.activeDropZone.containerPath}:${C.activeDropZone.index}`:null;return a.jsxs(_0,{sensors:j,collisionDetection:QN,onDragStart:C.onDragStart,onDragMove:C.onDragMove,onDragEnd:C.onDragEnd,onDragCancel:C.onDragCancel,children:[E.map(q=>a.jsx(uq,{path:q.path,name:q.name,box:q.box,dimmed:I&&C.activeDragPath!==q.path,isIterationGroup:q.isIterationGroup,onSelect:f,onRequestInlineEdit:h},q.path)),I&&Z.map(q=>a.jsx(dq,{slot:q,active:q.id===te},q.id)),Vr.createPortal(a.jsx(oD,{dropAnimation:null,zIndex:fC,children:W?H?a.jsx(cq,{name:W,node:H.node,width:H.width,height:H.height}):a.jsx("div",{className:"g7le-dnd-drag-ghost","data-testid":"g7le-dnd-drag-ghost",style:{padding:"4px 10px",background:"rgba(79,70,229,0.95)",color:"#fff",fontSize:12,fontWeight:600,borderRadius:4,pointerEvents:"none",whiteSpace:"nowrap"},children:`<${W}>`}):null}),document.body),x&&Vr.createPortal(a.jsxs("div",{"data-testid":"g7le-branch-boundary-hint",role:"status",style:{position:"absolute",left:"50%",top:12,transform:"translateX(-50%)",background:"rgba(245,158,11,0.97)",color:"#fff",fontSize:13,fontWeight:600,padding:"8px 16px",borderRadius:8,boxShadow:"0 4px 14px rgba(0,0,0,0.2)",pointerEvents:"none",whiteSpace:"nowrap",zIndex:fC},children:["⚠️ ",v("layout_editor.overlay.branch_boundary_denied")]}),e)]})}function cq(n){const{node:e,width:t,height:s}=n,r=w.useRef(null);return w.useEffect(()=>{const o=r.current;if(o)return o.replaceChildren(),o.appendChild(e.cloneNode(!0)),()=>{o.replaceChildren()}},[e]),a.jsx("div",{ref:r,className:"g7le-dnd-drag-ghost","data-testid":"g7le-dnd-drag-ghost",style:{width:t,height:s,opacity:.7,pointerEvents:"none",boxShadow:"0 6px 18px rgba(0,0,0,0.25)",borderRadius:4,overflow:"hidden",cursor:"grabbing"}})}function dq(n){const{slot:e,active:t}=n,{setNodeRef:s}=j0({id:e.id}),r=e.orientation!=="area";return a.jsx("div",{ref:s,"data-testid":`g7le-dnd-slot-${e.id}`,"data-dnd-slot-id":e.id,style:{position:"absolute",left:e.box.left,top:e.box.top,width:e.box.width,height:e.box.height,pointerEvents:"auto",zIndex:MU,boxSizing:"border-box",...r?{background:t?"rgba(79,70,229,0.15)":"transparent",...t?e.orientation==="vertical"?{borderLeft:"2px solid #4f46e5"}:{borderTop:"2px solid #4f46e5"}:{}}:{border:t?"2px dashed #4f46e5":"1px dashed transparent",background:t?"rgba(79,70,229,0.08)":"transparent",borderRadius:4}}})}function _C(n){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(n):n.replace(/[^a-zA-Z0-9_\-.]/g,e=>`\\${e}`)}function uq(n){const{path:e,box:t,dimmed:s,isIterationGroup:r,onSelect:o,onRequestInlineEdit:l}=n,{attributes:d,listeners:u,setNodeRef:f,isDragging:g}=k0({id:e}),h=(e.match(/\.children\./g)||[]).length,b=zU(h);return a.jsx("div",{ref:f,"data-testid":`g7le-dnd-handle-${e}`,"data-dnd-handle-path":e,"data-dnd-iteration-group":r?"true":void 0,...u,...d,onClick:y=>{if(y.stopPropagation(),!r&&typeof document<"u"&&typeof document.elementsFromPoint=="function"){const v=document.elementsFromPoint(y.clientX,y.clientY);for(const x of v){const _=x.closest?.("[data-editor-path]")?.dataset?.editorPath;if(typeof _=="string"&&(_===e||_.startsWith(`${e}.`))){o(_);return}}}o(e)},onDoubleClick:y=>{y.stopPropagation(),y.preventDefault(),l?.(e)},style:{position:"absolute",left:t.left,top:t.top,width:t.width,height:t.height,cursor:"grab",pointerEvents:"auto",background:g?"rgba(79,70,229,0.06)":"transparent",...r?{border:"1px dashed rgba(79,70,229,0.5)",borderRadius:4}:{},opacity:s?.6:1,zIndex:b,touchAction:"none"}})}function SC(n,e){const t=[];let s=n,r=Array.isArray(n.children)?n.children:[];for(let o=0;o<e.length-1;o++){const l=e[o];if(zn(l)){const u=s.responsive?.[l.responsive];r=u&&Array.isArray(u.children)?u.children:[];continue}const d=r[l]??null;if(!d)break;t.push(d),s=d,r=Array.isArray(d.children)?d.children:[]}return t}function fq(n,e,t,s){if(e==="route")return[];if(e==="modal"||e==="iteration_item")return s&&s.length>0?[s]:[];const r=[],o=(l,d)=>{l.forEach((u,f)=>{const g=[...d,f];if(!im(u,e,t)){r.push(g);return}const b=Array.isArray(u.children)?u.children:[];b.length>0&&o(b,g)})};return o(n,[]),r}function pq(n){return rs(n)}function Uf(n){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(n):n.replace(/["\\]/g,"\\$&")}function gq({frameEl:n,components:e,editMode:t,currentExtensionId:s,editableRootPath:r}){const[o,l]=w.useState(null),[d]=w.useState(()=>`g7le-dim-mask-${Math.floor(Math.random()*1e9)}`);if(w.useEffect(()=>{if(!n){l(null);return}let y=0;const v=()=>{const A=fq(e,t,s,r);if(A.length===0){l(null);return}const C=n.getBoundingClientRect(),j={left:0,top:0,width:C.width,height:C.height},E=[];for(const T of A){const D=pq(T),I=n.querySelector(`[data-editor-path="${Uf(D)}"]`);let W=null;if(I){const z=I.getBoundingClientRect();z.width>0&&z.height>0&&(W={left:z.left,top:z.top,width:z.width,height:z.height})}if(!W){const z=Array.from(n.querySelectorAll(`[data-editor-path^="${Uf(D)}.iteration."], [data-editor-path^="${Uf(D)}.sortable."], [data-editor-path^="${Uf(D)}.children."]`));let H=1/0,G=1/0,F=-1/0,Z=-1/0;for(const Y of z){const U=Y.getBoundingClientRect();U.width<=0||U.height<=0||(H=Math.min(H,U.left),G=Math.min(G,U.top),F=Math.max(F,U.right),Z=Math.max(Z,U.bottom))}if(F>H&&Z>G&&(W={left:H,top:G,width:F-H,height:Z-G}),W&&z.length>0){const Y=z[0].closest('[role="dialog"]');if(Y&&n.contains(Y)){const U=Y.getBoundingClientRect();U.width>0&&U.height>0&&(W={left:U.left,top:U.top,width:U.width,height:U.height})}}}W&&E.push({left:W.left-C.left,top:W.top-C.top,width:W.width,height:W.height})}if(E.length===0){l(null);return}l({frame:j,holes:E})},x=()=>{y&&cancelAnimationFrame(y),y=requestAnimationFrame(v)};x();const S=typeof ResizeObserver<"u"?new ResizeObserver(x):null;S?.observe(n);const _=typeof MutationObserver<"u"?new MutationObserver(x):null;return _?.observe(n,{childList:!0,subtree:!0,attributes:!0}),window.addEventListener("scroll",x,!0),window.addEventListener("resize",x),()=>{y&&cancelAnimationFrame(y),S?.disconnect(),_?.disconnect(),window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",x)}},[n,e,t,s,r?.join(".")??""]),!o||o.holes.length===0)return null;const{frame:u,holes:f}=o,g=t==="modal"||t==="iteration_item";let h=[];if(g){let y=1/0,v=1/0,x=-1/0,S=-1/0;for(const T of f)y=Math.min(y,T.left),v=Math.min(v,T.top),x=Math.max(x,T.left+T.width),S=Math.max(S,T.top+T.height);const _=(T,D,I)=>Math.max(D,Math.min(I,T)),A=_(y,0,u.width),C=_(v,0,u.height),j=_(x,0,u.width),E=_(S,0,u.height);h=[{left:0,top:0,width:u.width,height:C},{left:0,top:E,width:u.width,height:u.height-E},{left:0,top:C,width:A,height:E-C},{left:j,top:C,width:u.width-j,height:E-C}].filter(T=>T.width>0&&T.height>0)}const b=y=>{y.preventDefault(),y.stopPropagation()};return a.jsxs(a.Fragment,{children:[h.map((y,v)=>a.jsx("div",{className:"g7le-source-lock-block","data-testid":"g7le-source-lock-block",onClickCapture:b,onPointerDownCapture:b,onMouseDownCapture:b,onDragStartCapture:b,style:{position:"absolute",left:y.left,top:y.top,width:y.width,height:y.height,zIndex:uC,pointerEvents:"auto",cursor:"not-allowed",background:"transparent"}},v)),a.jsxs("svg",{className:"g7le-source-lock-dim","data-testid":"g7le-source-lock-dim",width:u.width,height:u.height,style:{position:"absolute",left:0,top:0,width:u.width,height:u.height,zIndex:uC,pointerEvents:"none"},children:[a.jsx("defs",{children:a.jsxs("mask",{id:d,children:[a.jsx("rect",{x:0,y:0,width:u.width,height:u.height,fill:"white"}),f.map((y,v)=>a.jsx("rect",{"data-testid":"g7le-source-lock-dim-hole",x:y.left,y:y.top,width:y.width,height:y.height,rx:4,fill:"black"},v))]})}),a.jsx("rect",{"data-testid":"g7le-source-lock-dim-box",x:0,y:0,width:u.width,height:u.height,fill:"rgba(15, 23, 42, 0.45)",mask:`url(#${d})`})]})]})}function kC(n){const e={type:n.type??"basic",name:n.name},t={};if(n.props)for(const[s,r]of Object.entries(n.props))s!=="children"&&r?.default!==void 0&&(t[s]=r.default);return Object.keys(t).length>0&&(e.props=t),e}function hq(n){if(!n?.components)return[];const e=[];for(const[t,s]of Object.entries(n.components))if(Array.isArray(s))for(const r of s)e.push({...r,type:r.type??t});return e}function mq(n,e,t,s,r){const o=hq(n);let l=null;if(t&&e?.containers){const d=e.containers[t];d&&Array.isArray(d.accepts)?l=new Set(d.accepts):l=new Set}else!t&&e?.draggable&&(l=new Set(e.draggable));return o.filter(d=>{if(l&&!l.has(d.name))return!1;if(s){const u=s.toLowerCase(),f=r(d).toLowerCase(),g=d.name.toLowerCase();if(!f.includes(u)&&!g.includes(u)&&!`<${g}>`.includes(u)&&!(d.description??"").toLowerCase().includes(u))return!1}return!0})}function yq(n,e){const t={key:"all",label:"layout_editor.palette.category.all",entries:n,isI18nKey:!0};if(e?.groups&&e.groups.length>0){const l=new Map(n.map(g=>[g.name,g])),d=new Set,u=[];for(const g of e.groups){const h=[];for(const b of g.components??[]){const y=l.get(b);y&&(h.push(y),d.add(b))}h.length!==0&&u.push({key:g.kind??g.label,label:g.label,entries:h,isI18nKey:g.label.startsWith("$t:")||/^[a-z_.]+$/i.test(g.label)})}const f=n.filter(g=>!d.has(g.name));return f.length>0&&u.push({key:"other",label:"layout_editor.palette.category.other",entries:f,isI18nKey:!0}),[t,...u]}const s=new Map;for(const l of n){const d=(l.type??"basic").toLowerCase(),u=s.get(d)??[];u.push(l),s.set(d,u)}const r=["basic","composite","layout"],o=[];for(const l of r){const d=s.get(l);d&&d.length>0&&(o.push({key:l,label:`layout_editor.palette.category.fallback.${l}`,entries:d,isI18nKey:!0}),s.delete(l))}for(const[l,d]of s.entries())o.push({key:l,label:l,entries:d,isI18nKey:!1});return[t,...o]}function CC(n){const{manifest:e,nesting:t,componentPalette:s,targetParentPath:r,targetContainerName:o,onInsert:l,insertionIndex:d,onClose:u,editorTemplateId:f,editorLocale:g}=n,{t:h,translationEngine:b}=Mn(),y=w.useMemo(()=>{if(!f||!b)return h;const H=g??null;return G=>{const F={templateId:f,locale:H??"ko"},Z=b.translate(G,F);return Z!==G?Z:h(G)}},[f,g,b,h]),[v,x]=w.useState(""),[S,_]=w.useState("all"),A=s?.entries??null,C=w.useMemo(()=>H=>{const G=A?.[H.name];return G?.label?qf(G.label,y):H.description??H.name},[A,y]),j=w.useMemo(()=>mq(e,t,o,v,C),[e,t,o,v,C]),E=w.useMemo(()=>yq(j,s??null),[j,s]),T=E.find(H=>H.key===S)??E[0]??null,D=!t||!t.draggable&&!t.containers,I=j.length===0,W=T?.entries??[],z=H=>{const G=A?.[H.name],F=!!G?.defaultNode&&typeof G.defaultNode=="object";if(G?.requiresDefaultNode&&!F)return;const Z=F?JSON.parse(JSON.stringify(G.defaultNode)):kC(H),Y=r??[];l(Z,Y,d),Ba({source:"palette",draggedComponentName:H.name,targetContainerName:o,targetContainerPath:Y.length===0?null:Y.join("/"),decision:"allowed",insertionIndex:d,result:"completed",timestamp:Date.now()}),u()};return a.jsxs("div",{className:"g7le-palette","data-testid":"g7le-palette",style:wq,children:[a.jsxs("div",{style:_q,children:[a.jsx("strong",{style:{fontSize:16},children:h("layout_editor.palette.title")}),a.jsx("button",{type:"button",onClick:u,"aria-label":"close","data-testid":"g7le-palette-close",style:Sq,children:"×"})]}),a.jsxs("div",{style:kq,children:[a.jsx("aside",{style:Cq,"data-testid":"g7le-palette-sidebar",children:a.jsx("nav",{children:a.jsx("ul",{style:jq,children:E.map(H=>{const G=T?.key===H.key,F=H.isI18nKey?qf(H.label,y):H.label;return a.jsx("li",{children:a.jsxs("button",{type:"button","data-testid":`g7le-palette-category-${H.key}`,"data-active":G?"true":"false",onClick:()=>_(H.key),style:{...Eq,background:G?"#eff6ff":"transparent",color:G?"#1d4ed8":"#334155",fontWeight:G?600:500},children:[a.jsx("span",{children:F}),a.jsx("span",{style:$q,children:H.entries.length})]})},H.key)})})})}),a.jsxs("main",{style:Rq,children:[a.jsx("input",{type:"text",placeholder:h("layout_editor.palette.search_placeholder"),value:v,onChange:H=>x(H.target.value),"data-testid":"g7le-palette-search",style:Aq}),a.jsx("div",{style:Tq,children:D?a.jsx("div",{style:jC,"data-testid":"g7le-palette-spec-missing",children:h("layout_editor.palette.spec_missing")}):I||W.length===0?a.jsx("div",{style:jC,"data-testid":"g7le-palette-empty",children:h("layout_editor.palette.empty")}):a.jsx("div",{"data-testid":`g7le-palette-group-${T?.key??"all"}`,style:{marginBottom:16},children:a.jsx("div",{style:Nq,children:W.map(H=>a.jsx(bq,{entry:H,entrySpec:A?.[H.name]??null,onClick:z,t:h,entryT:y},H.name))})})})]})]})]})}function bq(n){const{entry:e,entrySpec:t,onClick:s,t:r,entryT:o}=n,l=t?.label?qf(t.label,o):e.description??e.name,d=(e.type??"").toLowerCase(),u=d==="basic"||d==="composite"||d==="layout",f=!!t?.defaultNode&&typeof t.defaultNode=="object",g=!!t?.requiresDefaultNode&&!f,h=!f,b=g?r("layout_editor.palette.requires_default_node_missing"):t?.label?qf(t.label,o):e.name;return a.jsxs("button",{type:"button",onClick:()=>s(e),disabled:g,"aria-disabled":g||void 0,"data-testid":`g7le-palette-item-${e.name}`,"data-component-type":d||void 0,"data-blocked":g?"true":void 0,"data-default-node-missing":h?"true":void 0,title:b,style:g?Iq:Dq,children:[a.jsx("div",{style:Oq,"aria-hidden":"true",children:vq(e)}),a.jsx("div",{style:Mq,children:l}),a.jsx("div",{"data-testid":`g7le-palette-item-${e.name}-tag`,style:zq,children:`<${e.name}>`}),u&&a.jsx("div",{"data-testid":`g7le-palette-item-${e.name}-badge`,style:xq(d),children:d}),h&&a.jsx("div",{"data-testid":`g7le-palette-item-${e.name}-default-missing-badge`,style:Lq,children:r("layout_editor.palette.default_node_missing_badge")})]})}function qf(n,e){return n.startsWith("$t:")?e(n.slice(3)):e(n)}function xq(n){const t={basic:{bg:"#dbeafe",fg:"#1e40af"},composite:{bg:"#dcfce7",fg:"#14532d"},layout:{bg:"#fef3c7",fg:"#854d0e"}}[n]??{bg:"#e2e8f0",fg:"#334155"};return{fontSize:9,fontWeight:600,color:t.fg,background:t.bg,padding:"1px 6px",borderRadius:999,textTransform:"uppercase",letterSpacing:.4,lineHeight:1.6}}function vq(n){const e=n.name;return{Button:"🔘",A:"🔗",Img:"🖼",Icon:"✨",Hr:"➖",P:"📄",Span:"T",H1:"H₁",H2:"H₂",H3:"H₃",H4:"H₄",Ul:"☰",Li:"•",Nav:"🧭",Div:"▢",Container:"▢",Flex:"⇆",Grid:"▦",SectionLayout:"▤",ThreeColumnLayout:"⫼",Form:"📝",Input:"⎕",Textarea:"▭",Select:"⏷",Checkbox:"☑",PasswordInput:"🔒",Label:"🏷",DataGrid:"▦",Pagination:"↔",SearchBar:"🔍",ProductCard:"🛍",ImageGallery:"🖼",Avatar:"👤",UserInfo:"👥",HtmlContent:"⟨/⟩",HtmlEditor:"✏",RichTextEditor:"✏",TabNavigation:"◰",QuantitySelector:"#",ProductImageViewer:"🖼",FileUploader:"📎",AvatarUploader:"📷",SocialLoginButtons:"🌐",PostReactions:"❤"}[e]??"◻"}const wq={display:"flex",flexDirection:"column",width:"100%",height:"100%",minHeight:0,fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Apple SD Gothic Neo", "Noto Sans KR", sans-serif'},_q={display:"flex",justifyContent:"space-between",alignItems:"center",padding:"14px 20px",borderBottom:"1px solid #e2e8f0",flexShrink:0},Sq={background:"transparent",border:"none",fontSize:24,cursor:"pointer",lineHeight:1,color:"#64748b",padding:"0 4px"},kq={display:"flex",flex:1,minHeight:0},Cq={width:180,flexShrink:0,borderRight:"1px solid #e2e8f0",padding:"14px 8px",background:"#f8fafc",overflowY:"auto"},jq={listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:4},Eq={display:"flex",width:"100%",alignItems:"center",justifyContent:"space-between",textAlign:"left",padding:"8px 12px",border:"none",borderRadius:6,fontSize:13,cursor:"pointer",transition:"background-color 120ms"},Rq={flex:1,display:"flex",flexDirection:"column",minHeight:0,padding:"14px 20px"},Aq={width:"100%",padding:"8px 10px",border:"1px solid #cbd5e1",borderRadius:6,marginBottom:12,fontSize:13,flexShrink:0,boxSizing:"border-box"},Tq={flex:1,overflowY:"auto",minHeight:0},$q={fontSize:11,color:"#94a3b8",marginLeft:8,fontWeight:500},Nq={display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(96px, 1fr))",gap:10},Dq={display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:6,padding:"14px 6px",background:"#fff",border:"1px solid #e2e8f0",borderRadius:8,cursor:"pointer",fontSize:12,minHeight:84,transition:"border-color 120ms, box-shadow 120ms"},Iq={display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:6,padding:"14px 6px",background:"#f8fafc",border:"1px dashed #cbd5e1",borderRadius:8,cursor:"not-allowed",fontSize:12,minHeight:84,color:"#94a3b8",opacity:.65},Lq={fontSize:9,fontWeight:600,color:"#92400e",background:"#fef3c7",padding:"1px 6px",borderRadius:999,textTransform:"none",letterSpacing:0,lineHeight:1.6},Oq={fontSize:22,lineHeight:1,color:"#475569"},Mq={fontSize:12,fontWeight:500,color:"#0f172a",textAlign:"center",wordBreak:"break-word"},zq={fontFamily:'ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace',fontSize:10,color:"#64748b",textAlign:"center",wordBreak:"break-all"},jC={padding:24,color:"#64748b",fontSize:13,textAlign:"center"};function Pq(n){const e=[],t=r=>{if(Array.isArray(r))for(const o of r)o&&typeof o=="object"&&e.push(o)};t(n.children);const s=n.responsive;if(s&&typeof s=="object")for(const r of Object.values(s))r&&typeof r=="object"&&t(r.children);return e}function EC(n){const e=[],t=s=>{const r="isolatedState"in s&&s.isolatedState!=null,o=s.isolatedScopeId;(r||typeof o=="string"&&o.length>0)&&e.push({scopeId:typeof o=="string"?o:void 0,initialState:s.isolatedState&&typeof s.isolatedState=="object"?s.isolatedState:void 0});for(const l of Pq(s))t(l)};if(Array.isArray(n))for(const s of n)s&&typeof s=="object"&&t(s);return e}const Bq=["scroll","selector","wizard","slider"];function Hq(n,e){const t=new Set;for(const s of n)s.scopeId&&t.add(s.scopeId);for(const s of e){t.add(s);for(const r of Bq)t.add(`${s}-${r}`)}return Array.from(t)}function Wq(n,e,t){const s=e.label;return typeof s=="string"?s.startsWith("$t:")?t(s.slice(3)):s:n}function Ff({controlKey:n,control:e,node:t,t:s,onPatch:r,candidates:o,bindingCandidates:l,scope:d=$r}){const u=qa(e.widget),f=Wq(n,e,s),g=qe.useMemo(()=>Uc(t,e,d),[t,e,d]),h=e.widget==="i18n-text"&&e.apply?.type==="propValue",b=e.widget==="text"&&e.apply?.type==="propValue",y=g.darkReadonly===!0||d.colorScheme==="dark"&&e.apply!==void 0&&!ny(e.apply),v=e.apply,x=d.colorScheme==="dark"&&!y&&v?.type==="classToken"&&typeof v.tokenTemplate=="string"&&v.tokenTemplate.includes("{value}"),S=g.scopedValue===void 0&&g.baseFallback!==void 0,_=qe.useCallback(A=>{if(y)return;const C=ea(t,e,A,d);r(C)},[t,e,r,d,y]);return a.jsxs("div",{className:"g7le-control-row","data-testid":`g7le-control-${n}`,style:Uq,children:[a.jsxs("span",{className:"g7le-control-label",style:qq,children:[f,g.conflict&&a.jsx("span",{"data-testid":`g7le-control-conflict-${n}`,title:s("layout_editor.property_modal.value_conflict"),style:Fq,children:"!"})]}),a.jsx("div",{className:"g7le-control-widget",style:{flex:1,minWidth:0,opacity:S?.45:1},"data-placeholder":S?"true":void 0,children:h?a.jsx(ks,{value:typeof g.value=="string"?g.value:"",onChange:A=>_(A),t:s,testidPrefix:`g7le-prop-i18n-${n}`,candidates:l,enableExpressionTree:!0,expressionTreeCollapsible:!0}):b?a.jsx(gn,{value:typeof g.value=="string"?g.value:"",onChange:A=>_(A===""?void 0:A),t:s,testidPrefix:`g7le-prop-value-${n}`,candidates:l}):y?a.jsx("span",{"data-testid":`g7le-control-dark-readonly-${n}`,style:Kq,children:s("layout_editor.property_modal.dark_code_only")}):u?a.jsx(u,{control:e,value:g.value,onChange:_,t:s,candidates:o,bindingCandidates:l,freeValueDisabled:x}):a.jsx("span",{"data-testid":`g7le-control-unsupported-${n}`,style:Vq,children:s("layout_editor.property_modal.unsupported_widget")})})]})}const Uq={display:"flex",alignItems:"center",gap:12,padding:"6px 0",minHeight:32,minWidth:0},qq={fontSize:12,color:"#475569",minWidth:88,display:"inline-flex",alignItems:"center",gap:4},Fq={display:"inline-flex",width:14,height:14,borderRadius:7,background:"#f59e0b",color:"#fff",fontSize:10,alignItems:"center",justifyContent:"center",fontWeight:700},Vq={fontSize:11,color:"#94a3b8",fontStyle:"italic"},Kq={fontSize:11,color:"#94a3b8",fontStyle:"italic"};function Vf(n,e,t){return typeof n=="string"?n.startsWith("$t:")?t(n.slice(3)):n:e}function Gq(n,e){const t=n.props??{};return e.key in t?t[e.key]:e.default}function Yq({spec:n,node:e,t,onPatchProp:s}){const r=n.groups??[];return a.jsx("div",{className:"g7le-composite-settings","data-testid":"g7le-composite-settings",style:Jq,children:r.map((o,l)=>a.jsxs("div",{className:"g7le-settings-group",style:Zq,children:[a.jsx("div",{style:Qq,children:Vf(o.label,t("layout_editor.property_modal.settings_group",{index:l+1}),t)}),(o.fields??[]).map(d=>a.jsxs("div",{className:"g7le-settings-field","data-testid":`g7le-setting-${d.key}`,style:eF,children:[a.jsx("span",{style:tF,children:Vf(d.label,d.key,t)}),a.jsx("div",{style:{flex:1},children:Xq(d,e,t,s)})]},d.key))]},l))})}function Xq(n,e,t,s){const r=Gq(e,n);switch(n.type){case"number":return a.jsx("input",{type:"number","data-testid":`g7le-setting-input-${n.key}`,value:typeof r=="number"?r:"",min:n.min,max:n.max,onChange:o=>s(n.key,o.target.value===""?void 0:Number(o.target.value)),style:xy});case"text":return a.jsx("input",{type:"text","data-testid":`g7le-setting-input-${n.key}`,value:typeof r=="string"?r:"",onChange:o=>s(n.key,o.target.value===""?void 0:o.target.value),style:xy});case"toggle":return a.jsx("input",{type:"checkbox","data-testid":`g7le-setting-input-${n.key}`,checked:r===!0,onChange:o=>s(n.key,o.target.checked)});case"checkbox-group":{const o=Array.isArray(r)?r:[];return a.jsx("div",{style:nF,"data-testid":`g7le-setting-input-${n.key}`,children:(n.options??[]).map(l=>{const d=o.includes(l.value);return a.jsxs("label",{style:sF,children:[a.jsx("input",{type:"checkbox",checked:d,onChange:u=>{const f=u.target.checked?[...o,l.value]:o.filter(g=>g!==l.value);s(n.key,f)}}),Vf(l.label,String(l.value),t)]},String(l.value))})})}default:return a.jsxs("select",{"data-testid":`g7le-setting-input-${n.key}`,value:r==null?"":String(r),onChange:o=>{const l=o.target.value;if(l===""){s(n.key,void 0);return}const d=(n.options??[]).find(u=>String(u.value)===l);s(n.key,d?d.value:l)},style:xy,children:[a.jsx("option",{value:"",children:"—"}),(n.options??[]).map(o=>a.jsx("option",{value:String(o.value),children:Vf(o.label,String(o.value),t)},String(o.value)))]})}}const Jq={display:"flex",flexDirection:"column",gap:16},Zq={display:"flex",flexDirection:"column",gap:6},Qq={fontSize:12,fontWeight:700,color:"#0f172a",borderBottom:"1px solid #e2e8f0",paddingBottom:4},eF={display:"flex",alignItems:"center",gap:12,minHeight:30},tF={fontSize:12,color:"#475569",minWidth:96},xy={padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,width:"100%",boxSizing:"border-box"},nF={display:"flex",flexWrap:"wrap",gap:10},sF={display:"inline-flex",alignItems:"center",gap:4,fontSize:12,color:"#0f172a"},rF=["data_binding","isolatedScopeId","parentFormContextProp","skipBindingKeys","isolatedState","component_layout","sortable","itemTemplate"],oF=/\{\{|\$switch|\$get|\|\s*(date|number|truncate|currency|relative)\b/;function Kf(n,e=0){return e>6?!1:typeof n=="string"?oF.test(n):Array.isArray(n)?n.some(t=>Kf(t,e+1)):n&&typeof n=="object"?Object.values(n).some(t=>Kf(t,e+1)):!1}function aF(n){if(z_(n))return!1;const e=A_(n);return e.length===0?!1:e.some(t=>t.isComplex)}function RC(n){const e=[],t=n.props??{};for(const s of rF)s in n&&n[s]!==void 0?e.push({key:s,kind:"developer_prop"}):s in t&&t[s]!==void 0&&e.push({key:`props.${s}`,kind:"developer_prop"});typeof n.text=="string"?aF(n.text)&&e.push({key:"text",kind:"complex_expression"}):Kf(n.text)&&e.push({key:"text",kind:"complex_expression"});for(const[s,r]of Object.entries(t))s==="style"||s==="className"||Kf(r)&&e.push({key:`props.${s}`,kind:"complex_expression"});return e}function iF(n){return RC(n).length>0}const lF=new Set(["permissions","blur_until_loaded","comment"]);function cF({node:n,advanced:e,t,onPatch:s,permissionCandidates:r}){const o=qe.useMemo(()=>RC(n),[n]),l=(d,u)=>{const f={...n};u===void 0?delete f[d]:f[d]=u,s(f)};return a.jsxs("div",{className:"g7le-advanced-props","data-testid":"g7le-advanced-props",style:dF,children:[e.map(d=>{if(!lF.has(d))return a.jsxs("div",{"data-testid":`g7le-advanced-deferred-${d}`,style:fF,children:[t("layout_editor.property_modal.advanced_deferred"),":",d]},d);if(d==="permissions")return a.jsxs("div",{className:"g7le-advanced-group","data-testid":"g7le-advanced-permissions",style:vy,children:[a.jsx("div",{style:wy,children:t("layout_editor.property_modal.advanced.permissions")}),a.jsx(Em,{control:{widget:"tag-input"},value:n.permissions,onChange:u=>l("permissions",u),t,candidates:r})]},d);if(d==="blur_until_loaded"){const u=n.blur_until_loaded===!0||n.blur_until_loaded!=null&&n.blur_until_loaded!==!1;return a.jsxs("div",{className:"g7le-advanced-group","data-testid":"g7le-advanced-blur",style:vy,children:[a.jsx("div",{style:wy,children:t("layout_editor.property_modal.advanced.blur_until_loaded")}),a.jsxs("label",{style:{display:"inline-flex",alignItems:"center",gap:6,fontSize:12},children:[a.jsx("input",{type:"checkbox","data-testid":"g7le-advanced-blur-toggle",checked:!!u,onChange:f=>l("blur_until_loaded",f.target.checked?!0:void 0)}),t("layout_editor.property_modal.advanced.blur_hint")]})]},d)}return a.jsxs("div",{className:"g7le-advanced-group","data-testid":"g7le-advanced-comment",style:vy,children:[a.jsx("div",{style:wy,children:t("layout_editor.property_modal.advanced.comment")}),a.jsx("input",{type:"text","data-testid":"g7le-advanced-comment-input",value:typeof n.comment=="string"?n.comment:"",onChange:u=>l("comment",u.target.value===""?void 0:u.target.value),style:uF})]},d)}),o.length>0&&a.jsxs("div",{className:"g7le-advanced-preserved","data-testid":"g7le-advanced-preserved",style:pF,children:[a.jsx("div",{style:gF,children:t("layout_editor.property_modal.advanced_preserved_title",{count:o.length})}),a.jsx("ul",{style:hF,children:o.map(d=>a.jsxs("li",{"data-testid":`g7le-advanced-preserved-${d.key}`,style:mF,children:[a.jsx("code",{style:{fontSize:11},children:d.key}),a.jsx("span",{style:{fontSize:11,color:"#94a3b8"},children:d.kind==="developer_prop"?t("layout_editor.property_modal.advanced_kind_developer"):t("layout_editor.property_modal.advanced_kind_expression")})]},d.key))})]})]})}const dF={display:"flex",flexDirection:"column",gap:14},vy={display:"flex",flexDirection:"column",gap:6},wy={fontSize:12,fontWeight:700,color:"#0f172a"},uF={padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,width:"100%",boxSizing:"border-box"},fF={fontSize:11,color:"#94a3b8",fontStyle:"italic"},pF={borderTop:"1px dashed #cbd5e1",paddingTop:10,marginTop:4},gF={fontSize:11,color:"#b45309",marginBottom:6},hF={listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:4},mF={display:"flex",justifyContent:"space-between",gap:8,padding:"3px 0"},yF={onClick:"click",onHover:"mouseenter",onChange:"change",onSubmit:"submit",onMount:"mount",onUnmount:"unmount",onFocus:"focus",onBlur:"blur"};function _y(n){return yF[n]??n.replace(/^on/,"").toLowerCase()}function AC(n){const e=n.actions;if(Array.isArray(e))return e.filter(r=>!!r&&typeof r=="object");const t=n.props??{};if(Array.isArray(t.actions))return t.actions.filter(r=>!!r&&typeof r=="object");const s=t.events;if(s&&typeof s=="object"){const r=[];for(const[o,l]of Object.entries(s)){if(!Array.isArray(l))continue;const d=_y(o);for(const u of l)u&&typeof u=="object"&&r.push("type"in u?u:{type:d,...u})}return r}return[]}function bF(n,e){const t=_y(e);return AC(n).filter(s=>s.type===t||e==="onClick"&&s.type===void 0)}function xF(n,e,t){const s=_y(e),r=AC(n).filter(u=>!(u.type===s||e==="onClick"&&u.type===void 0)),o=t.map(u=>"type"in u?u:{type:s,...u}),l={...n};if(l.props&&typeof l.props=="object"){const u={...l.props};let f=!1;"actions"in u&&(delete u.actions,f=!0),"events"in u&&(delete u.events,f=!0),f&&(l.props=u)}const d=[...r,...o];return d.length===0?delete l.actions:l.actions=d,l}function vF({node:n,spec:e,capability:t,t:s,onPatchNode:r,pageCandidates:o,dataSourceCandidates:l,stateKeyCandidates:d,bindingCandidates:u}){const f=e?.actionRecipes,g=w.useMemo(()=>({pageCandidates:o,dataSourceCandidates:l,stateKeyCandidates:d,bindingCandidates:u}),[o,l,d,u]),h=Array.isArray(t?.events)?t.events:[];return h.length===0?a.jsx("div",{"data-testid":"g7le-action-no-events",style:TC,children:s("layout_editor.action.no_events")}):!f||Object.keys(f).length===0?a.jsx("div",{"data-testid":"g7le-action-no-recipes",style:TC,children:s("layout_editor.action.no_recipes")}):a.jsx("div",{className:"g7le-action-editor","data-testid":"g7le-action-editor",style:{display:"flex",flexDirection:"column",gap:14},children:h.map(b=>a.jsxs("div",{className:"g7le-action-event-slot","data-testid":`g7le-action-event-${b}`,children:[a.jsx("div",{style:wF,children:s(`layout_editor.action.event.${b}`)}),a.jsx(Qr,{actions:bF(n,b),onChange:y=>r(xF(n,b,y)),t:s,recipes:f,candidatePools:g,actionChipCandidates:e?.actionChipCandidates??null,addContext:"component",showSourceBadge:!0,testIdPrefix:`g7le-action-slot-${b}`})]},b))})}const TC={fontSize:12,color:"#94a3b8",padding:"16px 0",textAlign:"center"},wF={fontSize:12,fontWeight:700,color:"#475569",marginBottom:6};function Sy(n,e,t){if(!e)return t;const s=n(e);return!s||s===e||s.startsWith("$t:")?t:s}function _F(n,e){return Sy(e,n.labelKey,n.path||n.sourceId)}function SF({node:n,spec:e,candidates:t,t:s,onPatchNode:r}){const l=(n.props??{})[e.propKey],d=typeof l=="string"?l:void 0,u=w.useMemo(()=>Yr(l),[l]),f=d!==void 0&&d!==""&&u===null,[g,h]=w.useState(!1),[b,y]=w.useState(""),v=Sy(s,e.label,e.propKey),x=s(e.shape==="array"?"layout_editor.binding.shape_array":e.shape==="object"?"layout_editor.binding.shape_object":"layout_editor.binding.shape_scalar"),S=w.useMemo(()=>Qh(t,e.shape).map(E=>({...E,resolvedLabel:_F(E,s)})),[t,e.shape,s]),_=w.useMemo(()=>em(S,b),[S,b]),A=j=>{const E={...n.props??{}};j===void 0?delete E[e.propKey]:E[e.propKey]=j,r({...n,props:E})},C=j=>{A(Ha(j.sourceId,j.path,e.shape)),h(!1),y("")};return a.jsxs("div",{"data-testid":`g7le-binding-row-${e.propKey}`,style:EF,children:[a.jsxs("div",{style:RF,children:[a.jsx("span",{style:{fontWeight:600,fontSize:12},children:v}),a.jsx("span",{style:AF,children:x}),e.required&&a.jsx("span",{"data-testid":`g7le-binding-required-${e.propKey}`,style:TF,children:s("layout_editor.binding.required")})]}),f?a.jsxs("div",{"data-testid":`g7le-binding-complex-${e.propKey}`,style:IF,children:[s("layout_editor.binding.complex"),a.jsx("code",{style:$C,children:d})]}):u?a.jsxs("div",{style:$F,children:[a.jsx("code",{"data-testid":`g7le-binding-expr-${e.propKey}`,style:$C,children:d}),a.jsx("button",{type:"button","data-testid":`g7le-binding-clear-${e.propKey}`,onClick:()=>A(void 0),style:DF,children:s("layout_editor.binding.clear")})]}):a.jsx("div",{"data-testid":`g7le-binding-empty-${e.propKey}`,style:NF,children:s("layout_editor.binding.not_connected")}),u&&(e.shape==="array"||e.shape==="object")&&e.itemFields&&e.itemFields.length>0&&a.jsxs("div",{style:LF,children:[s("layout_editor.binding.item_fields"),": ",e.itemFields.join(", ")]}),!f&&a.jsxs("div",{style:{marginTop:4},children:[a.jsxs("button",{type:"button","data-testid":`g7le-binding-search-toggle-${e.propKey}`,onClick:()=>h(j=>!j),style:OF,children:["🔍 ",s("layout_editor.binding.search")]}),g&&a.jsxs("div",{"data-testid":`g7le-binding-picker-${e.propKey}`,style:MF,children:[a.jsx("input",{type:"text",autoFocus:!0,"data-testid":`g7le-binding-search-input-${e.propKey}`,value:b,placeholder:s("layout_editor.binding.search_placeholder"),onChange:j=>y(j.target.value),style:zF}),a.jsx("div",{style:PF,children:_.length===0?a.jsx("div",{style:BF,children:s("layout_editor.binding.no_results")}):_.map(j=>a.jsxs("button",{type:"button","data-testid":`g7le-binding-candidate-${j.expression}`,onClick:()=>C(j),style:HF,children:[a.jsxs("span",{style:{display:"flex",flexDirection:"column",alignItems:"flex-start"},children:[a.jsx("span",{style:{fontSize:12},children:j.resolvedLabel}),a.jsxs("span",{style:WF,children:[Sy(s,j.groupLabelKey,j.sourceId)," · ",j.path||j.sourceId]})]}),a.jsx("span",{style:UF,children:j.preview})]},j.expression))})]})]})]})}function kF({node:n,dataProps:e,candidates:t,t:s,onPatchNode:r}){return!Array.isArray(e)||e.length===0?null:a.jsxs("div",{"data-testid":"g7le-data-binding-section",style:CF,children:[a.jsxs("div",{style:jF,children:["🔗 ",s("layout_editor.binding.section_title")]}),e.map(o=>a.jsx(SF,{node:n,spec:o,candidates:t,t:s,onPatchNode:r},o.propKey)),a.jsx("div",{style:qF})]})}const CF={display:"flex",flexDirection:"column",marginBottom:8},jF={fontSize:12,fontWeight:700,color:"#0f172a",marginBottom:6},EF={display:"flex",flexDirection:"column",gap:4,padding:"8px 0"},RF={display:"flex",alignItems:"center",gap:6},AF={fontSize:10,padding:"1px 6px",borderRadius:4,background:"#e0e7ff",color:"#3730a3"},TF={fontSize:10,padding:"1px 6px",borderRadius:4,background:"#fef3c7",color:"#92400e"},$F={display:"flex",alignItems:"center",gap:6},NF={fontSize:11,color:"#94a3b8"},$C={fontSize:11,fontFamily:"monospace",background:"#f1f5f9",padding:"2px 6px",borderRadius:4,color:"#0f172a",wordBreak:"break-all"},DF={fontSize:11,border:"1px solid #e2e8f0",borderRadius:4,background:"#fff",color:"#dc2626",padding:"2px 8px",cursor:"pointer"},IF={display:"flex",flexDirection:"column",gap:2,fontSize:11,color:"#64748b"},LF={fontSize:10,color:"#94a3b8"},OF={fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#334155",padding:"4px 10px",cursor:"pointer",textAlign:"left",width:"100%"},MF={marginTop:4,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",padding:6},zF={width:"100%",padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,boxSizing:"border-box"},PF={marginTop:4,maxHeight:200,overflowY:"auto",display:"flex",flexDirection:"column",gap:2},BF={fontSize:11,color:"#94a3b8",padding:"8px 0",textAlign:"center"},HF={display:"flex",alignItems:"center",justifyContent:"space-between",gap:8,border:"none",background:"transparent",cursor:"pointer",padding:"6px 8px",borderRadius:4,textAlign:"left"},WF={fontSize:10,color:"#94a3b8"},UF={fontSize:10,color:"#64748b",fontFamily:"monospace",whiteSpace:"nowrap"},qF={borderTop:"1px solid #e2e8f0",marginTop:4};function FF({node:n,candidates:e,t,onPatchNode:s,templateIdentifier:r}){const o=typeof n.text=="string"?n.text:"",{state:l}=Rn(),d=r??l.templateIdentifier,u=l.selectedRoute?.layoutName??null,f=l.locale,[g,h]=w.useState(!1),b=/^\s*\$t:custom\.[A-Za-z0-9._-]+\s*$/.test(o),v=z_(o)&&(Ss(o)?.key.startsWith("custom.")??!1)||b,x=w.useMemo(()=>v?Ss(o):null,[v,o]),S=w.useMemo(()=>v?[]:A_(o),[v,o]),_=W=>{s({...n,text:W})},A=()=>{if(!(typeof window>"u"))try{window.dispatchEvent(new CustomEvent($s,{detail:{templateIdentifier:d,locale:f}}))}catch{}},C=(W,z)=>{const H=Ha(z.sourceId,z.path,"scalar");_(eM(o,W,H))},j=W=>{const z=Ss(o);_($c(o,W));const H=z?.key;d&&H&&CS(d,H,W).then(A)},E=W=>{const z=t(W);return z&&z!==W&&!z.startsWith("$t:")?z:""},T=W=>W.replace(/\$t:[a-zA-Z0-9._-]+/g,z=>E(z.slice(3))).replace(/\s+/g," ").trim(),D=W=>{g||(h(!0),xm(d,u,f,o,o.length,W.sourceId,W.path,"scalar",T,z=>t(z)).then(z=>{z.kind==="ok"&&(_(z.text),A())}).finally(()=>h(!1)))},I=W=>{g||!x&&!b||(h(!0),pf(d,f,o,Number.MAX_SAFE_INTEGER,W.sourceId,W.path,"scalar").then(z=>{z.kind==="ok"&&(_(z.text),A())}).finally(()=>h(!1)))};if(v){const W=x?.params??[];return a.jsxs("div",{"data-testid":"g7le-inline-binding-section",style:NC,children:[a.jsxs("div",{style:DC,children:["🔗 ",t("layout_editor.inline_binding.section_title")]}),W.length===0?a.jsx("div",{"data-testid":"g7le-inline-binding-none",style:OC,children:t("layout_editor.inline_binding.none")}):W.map(z=>a.jsx("div",{"data-testid":`g7le-inline-binding-param-${z.name}`,style:IC,children:z.parsed===null?a.jsxs("div",{"data-testid":`g7le-inline-binding-param-complex-${z.name}`,style:KF,children:[t("layout_editor.inline_binding.complex"),a.jsx("code",{style:ky,children:z.expression})]}):a.jsxs(a.Fragment,{children:[a.jsxs("div",{style:LC,children:[a.jsx("code",{"data-testid":`g7le-inline-binding-param-expr-${z.name}`,style:ky,children:z.expression}),a.jsx("button",{type:"button","data-testid":`g7le-inline-binding-param-clear-${z.name}`,onClick:()=>j(z.name),style:VF,children:t("layout_editor.inline_binding.clear")})]}),a.jsx(Vs,{candidates:e,t,onSelect:H=>C(z.name,H),testIdSuffix:`param-${z.name}`})]})},z.name)),a.jsxs("div",{"data-testid":"g7le-inline-binding-param-append",style:MC,children:[a.jsx("div",{style:Cy,children:t("layout_editor.inline_binding.append_hint")}),a.jsx(Vs,{candidates:e,t,onSelect:I,testIdSuffix:"param-append"})]}),a.jsx("div",{"data-testid":"g7le-inline-binding-param-hint",style:Cy,children:t("layout_editor.inline_binding.param_hint")}),a.jsx("div",{style:zC})]})}return a.jsxs("div",{"data-testid":"g7le-inline-binding-section",style:NC,children:[a.jsxs("div",{style:DC,children:["🔗 ",t("layout_editor.inline_binding.section_title")]}),S.length===0?a.jsx("div",{"data-testid":"g7le-inline-binding-none",style:OC,children:t("layout_editor.inline_binding.none")}):S.map(W=>a.jsx("div",{"data-testid":`g7le-inline-binding-row-${W.bindingIndex}`,style:IC,children:a.jsx("div",{style:LC,children:a.jsx("code",{"data-testid":`g7le-inline-binding-expr-${W.bindingIndex}`,style:ky,children:W.expression})})},W.bindingIndex)),a.jsxs("div",{"data-testid":"g7le-inline-binding-append",style:MC,children:[a.jsx("div",{style:Cy,children:t("layout_editor.inline_binding.append_hint")}),a.jsx(Vs,{candidates:e,t,onSelect:D,testIdSuffix:"append"})]}),a.jsx("div",{style:zC})]})}const NC={display:"flex",flexDirection:"column",marginBottom:8},DC={fontSize:12,fontWeight:700,color:"#0f172a",marginBottom:6},IC={display:"flex",flexDirection:"column",gap:4,padding:"8px 0"},LC={display:"flex",alignItems:"center",gap:6},OC={fontSize:11,color:"#94a3b8"},ky={fontSize:11,fontFamily:"monospace",background:"#f1f5f9",padding:"2px 6px",borderRadius:4,color:"#0f172a",wordBreak:"break-all"},VF={fontSize:11,border:"1px solid #e2e8f0",borderRadius:4,background:"#fff",color:"#dc2626",padding:"2px 8px",cursor:"pointer"},KF={display:"flex",flexDirection:"column",gap:2,fontSize:11,color:"#64748b"},MC={display:"flex",flexDirection:"column",gap:2,padding:"8px 0 0"},Cy={fontSize:11,color:"#475569",fontWeight:600},zC={borderTop:"1px solid #e2e8f0",marginTop:4};function PC(n,e,t){if(!e)return t;const s=n(e);return!s||s===e||s.startsWith("$t:")?t:s}function GF(n,e){return PC(e,n.labelKey,n.path||n.sourceId)}function YF(n){const e=n.iteration;return e&&typeof e=="object"?e:null}function XF({node:n,candidates:e,t,onPatchNode:s}){const r=YF(n),o=r?.source,l=typeof o=="string"?o:void 0,d=w.useMemo(()=>Yr(o),[o]),u=l!==void 0&&l!==""&&d===null,[f,g]=w.useState(!1),[h,b]=w.useState(""),y=w.useMemo(()=>Qh(e,"array").map(j=>({...j,resolvedLabel:GF(j,t)})),[e,t]),v=w.useMemo(()=>em(y,h),[y,h]);if(!r)return null;const x=typeof r.item_var=="string"?r.item_var:void 0,S=typeof r.index_var=="string"?r.index_var:void 0,_=C=>{const j={...r};C===void 0?delete j.source:j.source=C,s({...n,iteration:j})},A=C=>{_(Ha(C.sourceId,C.path,"array")),g(!1),b("")};return a.jsxs("div",{"data-testid":"g7le-iteration-binding-section",style:JF,children:[a.jsxs("div",{style:ZF,children:["🔁 ",t("layout_editor.binding.iteration_title")]}),a.jsx("div",{style:QF,children:t("layout_editor.binding.iteration_hint")}),a.jsxs("div",{style:eV,children:[a.jsxs("div",{style:tV,children:[a.jsx("span",{style:{fontWeight:600,fontSize:12},children:t("layout_editor.binding.iteration_label")}),a.jsx("span",{style:nV,children:t("layout_editor.binding.shape_array")})]}),u?a.jsxs("div",{"data-testid":"g7le-iteration-binding-complex",style:aV,children:[t("layout_editor.binding.complex"),a.jsx("code",{style:BC,children:l})]}):d?a.jsxs("div",{style:sV,children:[a.jsx("code",{"data-testid":"g7le-iteration-binding-expr",style:BC,children:l}),a.jsx("button",{type:"button","data-testid":"g7le-iteration-binding-clear",onClick:()=>_(void 0),style:oV,children:t("layout_editor.binding.clear")})]}):a.jsx("div",{"data-testid":"g7le-iteration-binding-empty",style:rV,children:t("layout_editor.binding.not_connected")}),(x||S)&&a.jsxs("div",{"data-testid":"g7le-iteration-vars",style:iV,children:[x&&a.jsxs("span",{children:[t("layout_editor.binding.iteration_item_var"),": ",a.jsx("code",{style:HC,children:x})]}),S&&a.jsxs("span",{children:[t("layout_editor.binding.iteration_index_var"),": ",a.jsx("code",{style:HC,children:S})]})]}),!u&&a.jsxs("div",{style:{marginTop:4},children:[a.jsxs("button",{type:"button","data-testid":"g7le-iteration-binding-search-toggle",onClick:()=>g(C=>!C),style:lV,children:["🔍 ",t("layout_editor.binding.search")]}),f&&a.jsxs("div",{"data-testid":"g7le-iteration-binding-picker",style:cV,children:[a.jsx("input",{type:"text",autoFocus:!0,"data-testid":"g7le-iteration-binding-search-input",value:h,placeholder:t("layout_editor.binding.search_placeholder"),onChange:C=>b(C.target.value),style:dV}),a.jsx("div",{style:uV,children:v.length===0?a.jsx("div",{style:fV,children:t("layout_editor.binding.no_results")}):v.map(C=>a.jsxs("button",{type:"button","data-testid":`g7le-iteration-binding-candidate-${C.expression}`,onClick:()=>A(C),style:pV,children:[a.jsxs("span",{style:{display:"flex",flexDirection:"column",alignItems:"flex-start"},children:[a.jsx("span",{style:{fontSize:12},children:C.resolvedLabel}),a.jsxs("span",{style:gV,children:[PC(t,C.groupLabelKey,C.sourceId)," · ",C.path||C.sourceId]})]}),a.jsx("span",{style:hV,children:C.preview})]},C.expression))})]})]})]}),a.jsx("div",{style:mV})]})}const JF={display:"flex",flexDirection:"column",marginBottom:8},ZF={fontSize:12,fontWeight:700,color:"#0f172a",marginBottom:4},QF={fontSize:10,color:"#94a3b8",marginBottom:6,lineHeight:1.4},eV={display:"flex",flexDirection:"column",gap:4,padding:"8px 0"},tV={display:"flex",alignItems:"center",gap:6},nV={fontSize:10,padding:"1px 6px",borderRadius:4,background:"#e0e7ff",color:"#3730a3"},sV={display:"flex",alignItems:"center",gap:6},rV={fontSize:11,color:"#94a3b8"},BC={fontSize:11,fontFamily:"monospace",background:"#f1f5f9",padding:"2px 6px",borderRadius:4,color:"#0f172a",wordBreak:"break-all"},oV={fontSize:11,border:"1px solid #e2e8f0",borderRadius:4,background:"#fff",color:"#dc2626",padding:"2px 8px",cursor:"pointer"},aV={display:"flex",flexDirection:"column",gap:2,fontSize:11,color:"#64748b"},iV={display:"flex",gap:12,fontSize:10,color:"#94a3b8",marginTop:2},HC={fontSize:10,fontFamily:"monospace",background:"#f1f5f9",padding:"1px 4px",borderRadius:3,color:"#475569"},lV={fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#334155",padding:"4px 10px",cursor:"pointer",textAlign:"left",width:"100%"},cV={marginTop:4,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",padding:6},dV={width:"100%",padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,boxSizing:"border-box"},uV={marginTop:4,maxHeight:200,overflowY:"auto",display:"flex",flexDirection:"column",gap:2},fV={fontSize:11,color:"#94a3b8",padding:"8px 0",textAlign:"center"},pV={display:"flex",alignItems:"center",justifyContent:"space-between",gap:8,border:"none",background:"transparent",cursor:"pointer",padding:"6px 8px",borderRadius:4,textAlign:"left"},gV={fontSize:10,color:"#94a3b8"},hV={fontSize:10,color:"#64748b",fontFamily:"monospace",whiteSpace:"nowrap"},mV={borderTop:"1px solid #e2e8f0",marginTop:4},yV=new Set(["Span","P","H1","H2","H3","H4","H5","H6","A","Button","Li","Label"]);function bV(n,e){if(!n||n.iteration&&typeof n.iteration=="object")return!1;const t=e?.textBinding;if(t===!1)return!1;if(t===!0)return!0;const s=typeof n.name=="string"?n.name:"";return yV.has(s)?!0:typeof n.text=="string"}const na={direction:"flexDirection",justify:"flexJustify",align:"flexAlign",wrap:"flexWrap",gap:"flexGap",enable:"flexEnable"},Gf={grow:"flexItemGrow",selfAlign:"flexItemAlign",order:"flexItemOrder"};function WC(n){const e=n?.flexEditor;return e==="container"||e==="item"||e==="auto"?e:null}function xV(n){if(!n||typeof window>"u"||typeof window.getComputedStyle!="function")return!1;const e=(window.getComputedStyle(n).display??"").toLowerCase();return e==="flex"||e==="inline-flex"}function vV(n,e,t=$r){if(!n||!e)return!1;const s=Uc(n,e,t),r=e.options,o=Array.isArray(r)?e.onValue??r[0]?.value:void 0,l=d=>o!==void 0?d===o:d!==void 0&&d!==!1;return t.breakpoint!=="base"?l(s.scopedRawValue):s.matched&&l(s.value)}function wV(n,e,t=!1,s=!1,r=$r){if(n==="container")return{showContainer:!0,showEnableButton:!1,showDisableButton:!1};if(n==="item")return{showContainer:!1,showEnableButton:!1,showDisableButton:!1};if(n==="auto"){const o=r.breakpoint==="base";return!s&&!o?{showContainer:!1,showEnableButton:!1,showDisableButton:!1}:(s?t:xV(e))?{showContainer:!0,showEnableButton:!1,showDisableButton:s}:{showContainer:!1,showEnableButton:!0,showDisableButton:!1}}return{showContainer:!1,showEnableButton:!1,showDisableButton:!1}}const _V={[na.direction]:"layout_editor.flex.direction",[na.justify]:"layout_editor.flex.justify",[na.align]:"layout_editor.flex.align",[na.wrap]:"layout_editor.flex.wrap",[na.gap]:"layout_editor.flex.gap"},SV={[Gf.grow]:"layout_editor.flex.item_grow",[Gf.selfAlign]:"layout_editor.flex.item_align",[Gf.order]:"layout_editor.flex.item_order"};function kV({node:n,spec:e,capability:t,t:s,onPatchNode:r,liveElement:o,scope:l=$r}){const d=WC(t),u=Fs(e,na.enable),f=vV(n,u,l),{showContainer:g,showEnableButton:h,showDisableButton:b}=wV(d,o,f,!!u,l),y=Object.values(na).filter(E=>E!==na.enable&&Fs(e,E)),v=Object.values(Gf).filter(E=>Fs(e,E)),x=u?.options,S=u?.onValue??x?.[0]?.value??!0,_=Array.isArray(x)&&x.length>=2?x[1].value:void 0,A=()=>{if(!u)return;const E=ea(n,u,S,l);r(E)},C=()=>{if(!u)return;const E=l.breakpoint!=="base"&&_!==void 0?_:void 0,T=ea(n,u,E,l);r(T)},j=(E,T,D)=>a.jsx("div",{"data-testid":D,style:{display:"flex",flexDirection:"column"},children:E.map(I=>{const W=Fs(e,I);if(!W)return null;const z=W.label?W:{...W,label:`$t:${T[I]}`};return a.jsx(Ff,{controlKey:I,control:z,node:n,t:s,onPatch:r,scope:l},I)})});return a.jsxs("div",{className:"g7le-flex-editor","data-testid":"g7le-flex-editor",style:{display:"flex",flexDirection:"column",gap:12},children:[h&&a.jsx("button",{type:"button","data-testid":"g7le-flex-enable",onClick:A,style:CV,children:s("layout_editor.flex.make_flex")}),g&&y.length>0&&a.jsxs("div",{className:"g7le-flex-container-section","data-testid":"g7le-flex-container-section",children:[a.jsx("div",{style:UC,children:s("layout_editor.flex.container_title")}),j(y,_V,"g7le-flex-container-controls"),b&&a.jsx("button",{type:"button","data-testid":"g7le-flex-disable",onClick:C,style:jV,children:s("layout_editor.flex.unmake_flex")})]}),d==="item"&&v.length>0&&a.jsxs("div",{className:"g7le-flex-item-section","data-testid":"g7le-flex-item-section",children:[a.jsx("div",{style:UC,children:s("layout_editor.flex.item_title")}),j(v,SV,"g7le-flex-item-controls")]}),!g&&!h&&d!=="item"&&a.jsx("div",{"data-testid":"g7le-flex-empty",style:EV,children:s("layout_editor.flex.not_flex")})]})}const UC={fontSize:12,fontWeight:700,color:"#0f172a",marginBottom:6},CV={padding:"8px 12px",fontSize:12,border:"1px dashed #2563eb",borderRadius:6,background:"#eff6ff",color:"#2563eb",cursor:"pointer"},jV={marginTop:8,padding:"6px 10px",fontSize:12,border:"1px solid #e2e8f0",borderRadius:6,background:"#f8fafc",color:"#64748b",cursor:"pointer"},EV={fontSize:12,color:"#94a3b8",padding:"16px 0",textAlign:"center"},qC=["desktop","tablet","mobile","portable"],jy=1280,RV=820,AV=390,TV=1920,$V=320;function NV(n){const e=[],t=new Set,s=r=>{if(!r||typeof r!="object")return;const o=r.responsive;if(o&&typeof o=="object")for(const l of Object.keys(o)){t.has(l)||(t.add(l),e.push(l));const d=o[l]?.children;if(Array.isArray(d))for(const u of d)s(u)}if(Array.isArray(r.children))for(const l of r.children)s(l)};if(Array.isArray(n))for(const r of n)s(r);return e}function DV(n){const e=[...qC],t=new Set(qC);for(const s of NV(n))!t.has(s)&&!e.includes(s)&&e.push(s);return e}function IV(n,e){const t=n?.responsive;if(!t||typeof t!="object")return[];const s=[];for(const r of Object.keys(t)){const o=t[r];!o||!Array.isArray(o.children)||r!==e&&s.push(r)}return s}function LV(n){switch(n){case"desktop":return jy;case"tablet":return RV;case"mobile":return AV}const e=n in Ko?Ko[n]:Ws.parseRange(n);return!e||!Number.isFinite(e.max)?jy:Math.round(Math.max($V,Math.min(TV,e.max)))}function FC(){const e=Gr()?.document?.raw?.components;return w.useMemo(()=>DV(e??null),[e])}const OV={desktop:"layout_editor.property_modal.scope.device_desktop",tablet:"layout_editor.property_modal.scope.device_tablet",mobile:"layout_editor.property_modal.scope.device_mobile",portable:"layout_editor.property_modal.scope.device_portable"},MV=[{key:"base",labelKey:"layout_editor.property_modal.scope.scheme_light"},{key:"dark",labelKey:"layout_editor.property_modal.scope.scheme_dark"}];function VC({scope:n,onChange:e,node:t,t:s,showColorScheme:r=!0,onClearScope:o}){const[l,d]=qe.useState(!1),[u,f]=qe.useState(""),[g,h]=qe.useState(""),[b,y]=qe.useState(null),v=FC(),x=qe.useMemo(()=>{const C=["base",...v],j=new Set(C);for(const E of Object.keys(t.responsive??{}))E!=="base"&&!j.has(E)&&(j.add(E),C.push(E));return n.breakpoint!=="base"&&!j.has(n.breakpoint)&&C.push(n.breakpoint),C},[v,t.responsive,n.breakpoint]),S=C=>e({...n,colorScheme:C}),_=C=>e({...n,breakpoint:C}),A=()=>{const C=u.trim(),j=g.trim();if(C===""&&j===""){y(s("layout_editor.property_modal.scope.custom_invalid"));return}const E=`${C}-${j}`;if(!UH(E)){y(s("layout_editor.property_modal.scope.custom_invalid"));return}y(null),d(!1),f(""),h(""),_(E)};return a.jsxs("div",{className:"g7le-style-scope-tabs","data-testid":"g7le-style-scope-tabs",style:zV,children:[r&&a.jsx("div",{className:"g7le-style-scope-scheme","data-testid":"g7le-style-scope-scheme",role:"tablist","aria-label":s("layout_editor.property_modal.scope.scheme_light"),style:KC,children:MV.map(C=>{const j=n.colorScheme===C.key;return a.jsxs("button",{type:"button",role:"tab","aria-selected":j,"data-testid":`g7le-style-scheme-${C.key}`,"data-active":j?"true":"false",onClick:()=>S(C.key),style:GC(j),children:[s(C.labelKey),C.key==="dark"&&ry(t,{colorScheme:"dark",breakpoint:n.breakpoint})&&a.jsx("span",{"data-testid":"g7le-style-scheme-dark-dot",style:YC})]},C.key)})}),a.jsxs("div",{className:"g7le-style-scope-device","data-testid":"g7le-style-scope-device",role:"tablist","aria-label":s("layout_editor.property_modal.scope.device_base"),style:KC,children:[x.map(C=>{const j=n.breakpoint===C,E=C==="base"||r1(C),T=C==="base"?"layout_editor.property_modal.scope.device_base":OV[C],D=T?s(T):C,I=E?`g7le-style-bp-${C}`:`g7le-style-bp-custom-${C}`;return a.jsxs("button",{type:"button",role:"tab","aria-selected":j,"data-testid":I,"data-active":j?"true":"false",onClick:()=>_(C),style:GC(j),children:[D,ry(t,{colorScheme:"base",breakpoint:C})&&a.jsx("span",{"data-testid":`${I}-dot`,style:YC})]},String(C))}),a.jsxs("button",{type:"button","data-testid":"g7le-style-bp-add-custom",onClick:()=>d(C=>!C),style:HV,children:["+ ",s("layout_editor.property_modal.scope.add_custom")]})]}),l&&a.jsxs("div",{className:"g7le-style-scope-custom-input","data-testid":"g7le-style-scope-custom-input",style:PV,children:[a.jsx("input",{type:"number","data-testid":"g7le-style-custom-min",placeholder:s("layout_editor.property_modal.scope.custom_min"),value:u,onChange:C=>f(C.target.value),style:XC}),a.jsx("span",{style:{color:"#94a3b8"},children:"—"}),a.jsx("input",{type:"number","data-testid":"g7le-style-custom-max",placeholder:s("layout_editor.property_modal.scope.custom_max"),value:g,onChange:C=>h(C.target.value),style:XC}),a.jsx("button",{type:"button","data-testid":"g7le-style-custom-confirm",onClick:A,style:WV,children:s("layout_editor.property_modal.scope.add_custom")})]}),b&&a.jsx("div",{"data-testid":"g7le-style-custom-error",style:UV,children:b}),n.breakpoint!=="base"&&!r1(n.breakpoint)&&a.jsx("div",{"data-testid":"g7le-style-custom-priority-note",style:qV,children:s("layout_editor.property_modal.scope.custom_priority_note")}),o&&ry(t,n)&&a.jsxs("button",{type:"button","data-testid":"g7le-style-scope-reset",onClick:o,style:BV,children:["↺ ",s("layout_editor.property_modal.scope.reset_to_base")]})]})}const zV={display:"flex",flexDirection:"column",gap:0,padding:"0 0 8px",borderBottom:"1px solid #e2e8f0",marginBottom:8},PV={display:"flex",gap:6,alignItems:"center",marginTop:4},KC={display:"flex",gap:2,flexWrap:"wrap",borderBottom:"1px solid #e2e8f0",margin:"0 -16px",padding:"0 12px"};function GC(n){return{display:"inline-flex",alignItems:"center",gap:4,padding:"6px 12px",fontSize:12,border:"none",borderBottom:`2px solid ${n?"#2563eb":"transparent"}`,background:"transparent",color:n?"#2563eb":"#64748b",cursor:"pointer",fontWeight:n?700:500,marginBottom:-1}}const YC={display:"inline-block",width:5,height:5,borderRadius:3,background:"#f59e0b"},BV={alignSelf:"flex-start",marginTop:2,padding:"3px 8px",fontSize:10,border:"1px solid #cbd5e1",borderRadius:6,background:"#f8fafc",color:"#475569",cursor:"pointer"},HV={padding:"6px 12px",fontSize:11,border:"none",borderBottom:"2px dashed #cbd5e1",background:"transparent",color:"#475569",cursor:"pointer",marginBottom:-1},XC={width:70,padding:"4px 6px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6},WV={padding:"4px 10px",fontSize:11,border:"none",borderRadius:6,background:"#2563eb",color:"#fff",cursor:"pointer"},UV={fontSize:11,color:"#dc2626"},qV={fontSize:10,color:"#94a3b8"},JC=new Map;function Ya(n,e){JC.set(n,e)}function FV(n){return n?JC.get(n)??null:null}const Ey={id:{label:"$t:layout_editor.core_props.id.label",widget:"core-id",placeholder:"$t:layout_editor.core_props.id.placeholder",apply:{type:"propValue",propKey:"id"}},dataKey:{label:"$t:layout_editor.core_props.dataKey.label",widget:"core-datakey",placeholder:"$t:layout_editor.core_props.dataKey.placeholder",apply:{type:"nodeKey",nodeKey:"dataKey"}},isolatedState:{label:"$t:layout_editor.core_props.isolatedState.label",widget:"toggle",apply:{type:"nodeKey",nodeKey:"isolatedState"}},isolatedScopeId:{label:"$t:layout_editor.core_props.isolatedScopeId.label",widget:"core-scopeid",placeholder:"$t:layout_editor.core_props.isolatedScopeId.placeholder",apply:{type:"nodeKey",nodeKey:"isolatedScopeId"}}},VV=["id"];function KV(n){return n===!1?[]:Array.isArray(n)?n.filter(e=>e in Ey):[...VV]}function ZC(n){const e=n.props?.id??n.id;return typeof e=="string"&&e.length>0?`${e}-scope`:"scope"}function GV({node:n,onPatchNode:e,t,scopeIdCandidates:s=[],usedScopeIds:r=[]}){const o=n,l="isolatedState"in o&&o.isolatedState!=null,d=typeof o.isolatedScopeId=="string"?o.isolatedScopeId:"",[u,f]=w.useState(""),g=()=>{const x={...n};l?(delete x.isolatedState,delete x.isolatedScopeId):(x.isolatedState={},x.isolatedScopeId=ZC(n)),e(x)},h=x=>{const S={...n};S.isolatedScopeId=x.trim()===""?ZC(n):x,e(S)},b=x=>{const S={...n};S.isolatedState=x,e(S)},y=w.useMemo(()=>{const x=u.trim().toLowerCase();return s.filter(S=>!x||S.toLowerCase().includes(x))},[s,u]),v=d!==""&&r.includes(d);return a.jsxs("div",{className:"g7le-isolated-scope","data-testid":"g7le-isolated-scope-control",style:YV,children:[a.jsx("div",{style:XV,children:t("layout_editor.core_props.isolatedState.label")}),a.jsxs("div",{style:JV,children:[a.jsx("button",{type:"button","data-testid":"g7le-isolated-toggle",role:"switch","aria-checked":l,onClick:g,style:ZV(l),children:t(l?"layout_editor.overlay.on":"layout_editor.overlay.off")}),l?null:a.jsx("span",{"data-testid":"g7le-isolated-off-hint",style:QV,children:t("layout_editor.core_props.isolatedState.off_hint")})]}),l?a.jsxs(a.Fragment,{children:[a.jsxs("div",{style:QC,children:[a.jsx("label",{style:e7,children:t("layout_editor.core_props.isolatedScopeId.label")}),a.jsx("input",{type:"text","data-testid":"g7le-isolated-scopeid-input",value:d,placeholder:t("layout_editor.core_props.isolatedScopeId.placeholder"),onChange:x=>h(x.target.value),style:eK}),y.length>0?a.jsxs("div",{"data-testid":"g7le-isolated-scopeid-picker",style:tK,children:[a.jsx("input",{type:"text","data-testid":"g7le-isolated-scopeid-search",value:u,placeholder:t("layout_editor.core_props.isolatedScopeId.search"),onChange:x=>f(x.target.value),style:nK}),a.jsx("div",{style:sK,children:y.map(x=>a.jsx("button",{type:"button","data-testid":`g7le-isolated-scopeid-candidate-${x}`,onClick:()=>{h(x),f("")},style:rK,children:x},x))})]}):null,v?a.jsxs("p",{"data-testid":"g7le-isolated-scopeid-dup",style:oK,children:["ⓘ ",t("layout_editor.core_props.isolatedScopeId.duplicate")]}):null]}),a.jsxs("div",{style:QC,children:[a.jsx("label",{style:e7,children:t("layout_editor.core_props.isolatedState.initial_label")}),a.jsx("div",{"data-testid":"g7le-isolated-initial-value",children:a.jsx(Va,{value:o.isolatedState??{},onChange:b,t,path:"isolatedState",scope:"isolated-node"})})]})]}):null]})}const YV={display:"flex",flexDirection:"column",gap:8,padding:10,border:"1px solid #e2e8f0",borderRadius:8,minWidth:0},XV={fontSize:12,fontWeight:700,color:"#0f172a"},JV={display:"flex",gap:8,alignItems:"center"},ZV=n=>({padding:"4px 12px",fontSize:11,border:`1px solid ${n?"#3b82f6":"#cbd5e1"}`,borderRadius:14,background:n?"#eff6ff":"#fff",color:n?"#1d4ed8":"#64748b",cursor:"pointer"}),QV={fontSize:11,color:"#94a3b8"},QC={display:"flex",flexDirection:"column",gap:4,minWidth:0},e7={fontSize:11,color:"#64748b"},eK={padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,boxSizing:"border-box",width:"100%"},tK={border:"1px solid #e2e8f0",borderRadius:6,padding:4,background:"#fff"},nK={width:"100%",padding:"4px 6px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,marginBottom:4,boxSizing:"border-box"},sK={display:"flex",flexDirection:"column",maxHeight:120,overflowY:"auto"},rK={textAlign:"left",padding:"4px 6px",fontSize:12,border:"none",background:"transparent",cursor:"pointer",borderRadius:4,color:"#0f172a"},oK={margin:0,fontSize:11,color:"#64748b"},aK={borderTop:"2px solid #c7d2fe",background:"#eef2ff",padding:"10px 12px",display:"flex",flexDirection:"column",gap:8},t7={fontSize:13,fontWeight:700,color:"#3730a3",display:"flex",alignItems:"center",gap:6},iK={fontSize:11,fontWeight:600,color:"#4338ca",background:"#e0e7ff",border:"1px solid #c7d2fe",borderRadius:4,padding:"1px 6px"},Ry={fontSize:11,color:"#6366f1"},lK={alignSelf:"flex-start",fontSize:12,fontWeight:600,color:"#fff",background:"#4f46e5",border:"none",borderRadius:4,padding:"4px 10px",cursor:"pointer"},cK={opacity:.5,cursor:"not-allowed"},dK={fontSize:11,color:"#dc2626"};function uK({entry:n,t:e,onSave:t}){const[s,r]=w.useState(()=>n.props),[o,l]=w.useState(!0),[d,u]=w.useState(null),[f,g]=w.useState(!1),[h,b]=w.useState(!1),y=n.extensionName??n.extensionIdentifier??`#${n.extensionId}`,v=async()=>{if(!o){u(e("layout_editor.property_modal.injected_props.invalid_json"));return}u(null),g(!0),b(!1);try{await t(s),b(!0)}catch(x){u(x instanceof Error?x.message:String(x))}finally{g(!1)}};return a.jsxs("div",{"data-testid":`g7le-injected-props-entry-${n.extensionId}`,style:{display:"flex",flexDirection:"column",gap:6},children:[a.jsx("div",{style:t7,children:a.jsx("span",{style:iK,"data-testid":"g7le-injected-props-origin-badge",children:e("layout_editor.property_modal.injected_props.origin",{source:y})})}),a.jsx(Ym,{value:s,shape:"object",emptyValue:{},testidPrefix:"g7le-injected-props-json",minHeight:80,invalidErrorKey:"layout_editor.property_modal.injected_props.invalid_json",shapeErrorKey:"layout_editor.property_modal.injected_props.invalid_json",t:e,onChange:x=>{r(x??{}),b(!1)},onValidityChange:x=>{l(x),x&&u(null),b(!1)}}),d&&a.jsx("div",{style:dK,"data-testid":"g7le-injected-props-error",children:d}),h&&a.jsx("div",{style:{...Ry,color:"#16a34a"},"data-testid":"g7le-injected-props-saved",children:e("layout_editor.property_modal.injected_props.saved")}),a.jsx("div",{style:Ry,children:e("layout_editor.property_modal.injected_props.save_target")}),a.jsx("button",{type:"button","data-testid":"g7le-injected-props-save",style:{...lK,...f||!o?cK:null},disabled:f||!o,onClick:v,children:f?e("layout_editor.property_modal.injected_props.saving"):e("layout_editor.property_modal.injected_props.save_button",{source:y})})]})}function fK({injectedProps:n,t:e,onSaveInjectedProps:t}){return!Array.isArray(n)||n.length===0?null:a.jsxs("div",{style:aK,"data-testid":"g7le-injected-props-section",children:[a.jsxs("div",{style:t7,children:["🧩 ",e("layout_editor.property_modal.injected_props.title")]}),a.jsx("div",{style:Ry,children:e("layout_editor.property_modal.injected_props.help")}),n.map(s=>a.jsx(uK,{entry:s,t:e,onSave:r=>t(s.extensionId,r)},s.extensionId))]})}function pK(n,e){const t=n?.components??{};for(const s of Object.values(t)){const r=s?.find(o=>o.name===e);if(r)return r}return null}function gK({node:n,spec:e,manifest:t,t:s,onPatchNode:r,onClose:o,onDelete:l,permissionCandidates:d,pageCandidates:u,dataSourceCandidates:f,stateKeyCandidates:g,bindingCandidates:h,liveElement:b,scope:y=$r,onScopeChange:v,templateIdentifier:x,initialTab:S,onSaveInjectedProps:_,branchLabel:A,isolatedScopeIdCandidates:C,usedScopeIds:j}){const E=n.__injectedProps,T=Array.isArray(E)&&E.length>0&&!!_,D=Qe=>{v?.(Qe)},I=()=>{r(XH(n,y))},W=typeof n.name=="string"?n.name:"",z=Gh(e,W),G=pK(t,W)?.settings,F=!!(G?.groups&&G.groups.length>0),Z=Array.isArray(z?.propControls)?z.propControls:[],Y=KV(z?.coreProps),U=new Set(Y.map(Qe=>Ey[Qe].apply?.propKey)),B=Z.filter(Qe=>{const et=Fs(e,Qe)?.apply?.propKey;return!(et!==void 0&&U.has(et))}),te=typeof z?.nodeEditor?.kind=="string"?z.nodeEditor.kind:void 0,q=z?.nodeEditor?.params,M=te?FV(te):null,N=!!M,V=Array.isArray(z?.dataProps)?z.dataProps:[],ee=V.length>0,se=!!(n.iteration&&typeof n.iteration=="object"),re=bV(n,z),pe=Y.length>0||B.length>0||N||ee||re||se,je=Array.isArray(z?.styleControls)?z.styleControls:[],me=Array.isArray(z?.advanced)?z.advanced:[],be=(Array.isArray(z?.events)?z.events:[]).length>0,Be=WC(z),fe=je.length>0||Be!==null,Fe=!(z?.visibilityCondition===!1)&&(pe||fe||be||F||me.length>0),mt=w.useMemo(()=>{const Qe=[];return F&&Qe.push("settings"),pe&&Qe.push("props"),fe&&Qe.push("style"),be&&Qe.push("action"),Fe&&Qe.push("visibility"),Qe.push("translation"),me.length>0&&Qe.push("advanced"),Qe},[F,pe,fe,be,Fe,me.length]),ft=B.length>0||N||ee||se,[xt,Ot]=w.useState(S&&mt.includes(S)?S:F?"settings":ft?"props":fe?"style":pe?"props":mt[0]??"style"),St=iF(n),kt=!pe&&!fe&&!F&&!be&&!Fe&&me.length===0,Vt=z?.label?z.label.startsWith("$t:")?s(z.label.slice(3)):z.label:W||s("layout_editor.property_modal.element"),Nt=(Qe,Pe)=>{const et={...n.props??{}};Pe===void 0?delete et[Qe]:et[Qe]=Pe,r({...n,props:et})},tn={settings:s("layout_editor.property_modal.tab.settings"),props:s("layout_editor.property_modal.tab.props"),style:s("layout_editor.property_modal.tab.style"),action:s("layout_editor.property_modal.tab.action"),visibility:s("layout_editor.property_modal.tab.visibility"),translation:s("layout_editor.property_modal.tab.translation"),advanced:s("layout_editor.property_modal.tab.advanced")};return a.jsxs("div",{className:"g7le-property-modal","data-testid":"g7le-property-modal",style:hK,children:[a.jsxs("div",{"data-modal-drag-handle":!0,"data-testid":"g7le-property-modal-header",style:mK,children:[a.jsx("span",{"data-testid":"g7le-property-modal-title",style:{fontSize:14,fontWeight:700},children:F&&xt==="settings"?s("layout_editor.property_modal.settings_title",{name:Vt}):s("layout_editor.property_modal.title",{name:Vt})}),a.jsx("button",{type:"button","data-testid":"g7le-property-modal-close","aria-label":"close",onClick:o,style:yK,children:"✕"})]}),St&&a.jsx("div",{"data-testid":"g7le-property-modal-advanced-badge",style:bK,children:s("layout_editor.property_modal.advanced_badge")}),A&&a.jsx("div",{"data-testid":"g7le-property-modal-branch-badge",style:xK,children:s("layout_editor.property_modal.branch_badge",{device:A})}),a.jsx("div",{style:vK,role:"tablist",children:mt.map(Qe=>a.jsx("button",{type:"button",role:"tab","aria-selected":xt===Qe,"data-testid":`g7le-property-tab-${Qe}`,"data-active":xt===Qe?"true":"false",onClick:()=>Ot(Qe),style:{...wK,color:xt===Qe?"#2563eb":"#64748b",borderBottomColor:xt===Qe?"#2563eb":"transparent"},children:tn[Qe]},Qe))}),a.jsxs("div",{style:_K,"data-testid":"g7le-property-modal-body",children:[kt&&!T&&a.jsx("div",{"data-testid":"g7le-property-modal-no-editable",style:s7,children:s("layout_editor.property_modal.no_editable_props")}),T&&a.jsx(fK,{injectedProps:E,t:s,onSaveInjectedProps:_}),xt==="settings"&&G&&a.jsx(Yq,{spec:G,node:n,t:s,onPatchProp:Nt}),xt==="props"&&a.jsxs("div",{"data-testid":"g7le-property-props-tab",style:{display:"flex",flexDirection:"column"},children:[se&&a.jsx(XF,{node:n,candidates:h??[],t:s,onPatchNode:r}),ee&&a.jsx(kF,{node:n,dataProps:V,candidates:h??[],t:s,onPatchNode:r}),re&&a.jsx(FF,{node:n,candidates:h??[],t:s,onPatchNode:r,templateIdentifier:x}),N&&M&&a.jsx(M,{node:n,params:q,spec:e,manifest:t,t:s,onPatchNode:r,templateIdentifier:x,candidates:h}),Y.map(Qe=>a.jsx(Ff,{controlKey:`core-${Qe}`,control:Ey[Qe],node:n,t:s,onPatch:r,scope:$r,bindingCandidates:h},`core-${Qe}`)),B.map(Qe=>{const Pe=Fs(e,Qe);return Pe?a.jsx(Ff,{controlKey:Qe,control:Pe,node:n,t:s,onPatch:r,scope:$r,bindingCandidates:h},Qe):null}),a.jsx(GV,{node:n,onPatchNode:r,t:s,scopeIdCandidates:C,usedScopeIds:j})]}),xt==="style"&&a.jsxs("div",{"data-testid":"g7le-property-style-tab",style:{display:"flex",flexDirection:"column"},children:[a.jsx("div",{style:n7,children:a.jsx(VC,{scope:y,onChange:D,node:n,t:s,onClearScope:I})}),Be!==null&&a.jsx(kV,{node:n,spec:e,capability:z,t:s,onPatchNode:r,liveElement:b,scope:y}),je.map(Qe=>{const Pe=Fs(e,Qe);return Pe?a.jsx(Ff,{controlKey:Qe,control:Pe,node:n,t:s,onPatch:r,scope:y},Qe):null})]}),xt==="action"&&a.jsx(vF,{node:n,spec:e,capability:z,t:s,onPatchNode:r,pageCandidates:u,dataSourceCandidates:f,stateKeyCandidates:g,bindingCandidates:h}),xt==="visibility"&&a.jsxs("div",{"data-testid":"g7le-property-visibility-tab",style:{display:"flex",flexDirection:"column"},children:[a.jsx("div",{style:n7,children:a.jsx(VC,{scope:y,onChange:D,node:n,t:s,showColorScheme:!1})}),a.jsx(c1,{node:n,spec:e,t:s,onPatchNode:r,dataSourceCandidates:f,stateKeyCandidates:g,scope:y})]}),xt==="translation"&&(x?a.jsx(RS,{customKey:ES(n),templateIdentifier:x,t:s,paramLabels:q4(n),onRemoveParam:Qe=>{const Pe=typeof n.text=="string"?n.text:"";r({...n,text:$c(Pe,Qe)});const et=ES(n);x&&et&&gf(x,et,Qe)}}):a.jsx("div",{"data-testid":"g7le-property-translation-deferred",style:s7,children:s("layout_editor.translation.not_a_key")})),xt==="advanced"&&a.jsx(cF,{node:n,advanced:me,t:s,onPatch:r,permissionCandidates:d})]}),a.jsxs("div",{style:SK,children:[a.jsx("span",{"data-testid":"g7le-property-modal-node-id",style:{fontSize:11,color:"#94a3b8"},children:typeof n.id=="string"||typeof n.id=="number"?`ID: ${n.id}`:""}),a.jsxs("div",{style:{display:"flex",gap:8},children:[a.jsx("button",{type:"button","data-testid":"g7le-property-modal-delete",onClick:l,style:kK,children:s("layout_editor.property_modal.delete_element")}),a.jsx("button",{type:"button","data-testid":"g7le-property-modal-done",onClick:o,style:CK,children:s("layout_editor.property_modal.close")})]})]})]})}const hK={display:"flex",flexDirection:"column",width:420,maxWidth:"92vw"},mK={display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 16px",borderBottom:"1px solid #e2e8f0",cursor:"move",userSelect:"none"},yK={border:"none",background:"transparent",fontSize:14,cursor:"pointer",color:"#64748b"},bK={margin:"8px 16px 0",padding:"6px 10px",fontSize:11,background:"#fef3c7",color:"#92400e",borderRadius:6},xK={margin:"8px 16px 0",padding:"6px 10px",fontSize:11,background:"#dbeafe",color:"#1e40af",borderRadius:6},vK={display:"flex",gap:2,padding:"0 12px",borderBottom:"1px solid #e2e8f0",overflowX:"auto"},wK={padding:"8px 10px",fontSize:12,border:"none",borderBottom:"2px solid transparent",background:"transparent",cursor:"pointer",whiteSpace:"nowrap"},_K={padding:16,overflowY:"auto",maxHeight:"60vh"},n7={position:"sticky",top:-16,zIndex:2,background:"#fff",margin:"-16px -16px 0",padding:"6px 16px 0"},s7={fontSize:12,color:"#94a3b8",padding:"16px 0",textAlign:"center"},SK={display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 16px",borderTop:"1px solid #e2e8f0"},kK={padding:"6px 12px",fontSize:12,border:"1px solid #fecaca",borderRadius:6,background:"#fff",color:"#dc2626",cursor:"pointer"},CK={padding:"6px 12px",fontSize:12,border:"none",borderRadius:6,background:"#2563eb",color:"#fff",cursor:"pointer"},Ay="g7le:component-target-picked",Ty="g7le:component-target-pick-request";let jK=1;function EK({value:n,onChange:e,t,control:s}){const r=Tc(),o=n==null?"":String(n),l=s?.allowManualInput!==!1,d=w.useCallback(()=>{if(typeof window>"u")return;const u=`pick-${jK++}`,g=r.stack[r.stack.length-1]?.id;g&&r.minimize(g,t("layout_editor.target_picker.minimized_hint"));const h=b=>{const y=b.detail;y?.requestId===u&&(window.removeEventListener(Ay,h),g&&r.restore(g),!y.cancelled&&typeof y.id=="string"&&e(y.id))};window.addEventListener(Ay,h),window.dispatchEvent(new CustomEvent(Ty,{detail:{requestId:u}}))},[r,e,t]);return a.jsx("div",{className:"g7le-component-target-picker","data-testid":"g7le-component-target-picker",children:a.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center"},children:[l?a.jsx("input",{type:"text",className:"g7le-widget g7le-widget--text","data-testid":"g7le-component-target-input",value:o,placeholder:t("layout_editor.target_picker.id_placeholder"),onChange:u=>e(u.target.value===""?void 0:u.target.value),style:{flex:1,minWidth:0,padding:"6px 8px",border:"1px solid #cbd5e1",borderRadius:6,fontSize:13}}):a.jsx("span",{"data-testid":"g7le-component-target-value",style:{flex:1,minWidth:0},children:o||t("layout_editor.target_picker.none")}),a.jsxs("button",{type:"button","data-testid":"g7le-component-target-pick",onClick:d,style:{display:"flex",alignItems:"center",gap:4,padding:"6px 10px",background:"#1e293b",color:"#fff",border:"none",borderRadius:6,cursor:"pointer",fontSize:13,whiteSpace:"nowrap"},children:[a.jsx("span",{"aria-hidden":"true",children:"🎯"}),t("layout_editor.target_picker.select_area")]})]})})}async function RK(n,e,t,s,r=fetch){const o=`/api/admin/templates/${encodeURIComponent(n)}/layout-extensions/${e}`;let l;try{l=await r(o,{headers:on(),credentials:"same-origin"})}catch(_){return{kind:"error",message:_ instanceof Error?_.message:String(_)}}if(l.status===404)return{kind:"not_found"};if(!l.ok)return{kind:"error",message:`HTTP ${l.status}`};const d=await l.json().catch(()=>null),u=(d&&(d.data||d))??{};let f={};const g=u.content;if(typeof g=="string")try{f=JSON.parse(g)}catch{return{kind:"error",message:"invalid extension content"}}else g&&typeof g=="object"&&(f=g);const h=typeof u.lock_version=="number"?u.lock_version:0,b=Array.isArray(f.injections)?[...f.injections]:[],y=b.findIndex(_=>_&&_.position==="inject_props"&&_.target_id===t);if(y<0)return{kind:"injection_not_found"};b[y]={...b[y],props:s};const v={...f,injections:b};let x;try{x=await r(o,{method:"PUT",headers:on({"Content-Type":"application/json"}),credentials:"same-origin",body:JSON.stringify({content:v,expected_lock_version:h})})}catch(_){return{kind:"error",message:_ instanceof Error?_.message:String(_)}}const S=await x.json().catch(()=>null);return x.ok?{kind:"success",newLockVersion:typeof S?.data?.lock_version=="number"?S.data.lock_version:h+1}:x.status===409?{kind:"conflict",currentVersion:S?.current_version??-1,yourVersion:S?.your_version??h}:{kind:"error",message:S?.message??`HTTP ${x.status}`}}const r7=new Map;function $y(n,e){r7.set(n,e)}function AK(n){return n?r7.get(n)??null:null}const o7="g7le.clipboard";function a7(){try{return typeof window>"u"||!window.sessionStorage?null:window.sessionStorage}catch{return null}}function TK(n){const e=JSON.parse(JSON.stringify(n)),t=s=>{for(const r of Object.keys(s))r.startsWith("__")&&delete s[r];Array.isArray(s.children)&&s.children.forEach(t)};return t(e),e}function i7(n,e=0){const t=a7();if(!t)return!1;try{const s={node:TK(n),copiedAt:e};return t.setItem(o7,JSON.stringify(s)),!0}catch{return!1}}function $K(){const n=a7();if(!n)return null;try{const e=n.getItem(o7);if(!e)return null;const t=JSON.parse(e);return!t||typeof t.node!="object"||t.node===null?null:JSON.parse(JSON.stringify(t.node))}catch{return null}}const Jc={nw:{width:-1,height:-1},n:{width:0,height:-1},ne:{width:1,height:-1},e:{width:1,height:0},se:{width:1,height:1},s:{width:0,height:1},sw:{width:-1,height:1},w:{width:-1,height:0}};function Ny(n){if(typeof n=="number")return n;if(typeof n=="string"){const e=n.match(/^(-?\d+(?:\.\d+)?)px$/);if(e)return Number(e[1])}return null}function NK(n,e){const t=Array.isArray(n.options)?n.options:[],s=Array.isArray(n.scale)?n.scale:[],r=t.length>0?t.map(d=>d.value):s;if(r.length===0)return;let o=r[0],l=1/0;return r.forEach((d,u)=>{const f=Ny(d)??u*40,g=Math.abs(f-e);g<l&&(l=g,o=d)}),o}function DK(n,e){const t=typeof e.min=="number"?e.min:void 0,s=typeof e.max=="number"?e.max:void 0;let r=n;return t!==void 0&&(r=Math.max(t,r)),s!==void 0&&(r=Math.min(s,r)),r}function l7(n,e){const t=n.apply,s=DK(Math.max(0,Math.round(e)),n);return t?.type==="styleProp"?`${s}px`:t?.type==="classToken"&&t.tokenTemplate?`${s}px`:NK(n,s)}function IK(n){const{node:e,widthControl:t,heightControl:s,scale:r,measureStartSize:o,onResize:l,onResizeEnd:d,onResizeStateChange:u}=n,f={width:!!t,height:!!s},g=w.useRef(null),h=w.useCallback((b,y)=>{if(!e)return;const v=Jc[b];if(v.width!==0&&!t||v.height!==0&&!s)return;const x=e.props?.style??{},S=o?.()??null,_=Ny(x.width)??(S?Math.round(S.width):0),A=Ny(x.height)??(S?Math.round(S.height):0);g.current={handle:b,startX:y.clientX,startY:y.clientY,startW:_,startH:A,node:e};const C=v.width!==0&&v.height!==0?"both":v.width!==0?"width":"height";u?.(C);let j=null;const E=D=>{const I=g.current;if(!I)return;const W=r||1,z=(D.clientX-I.startX)/W*Jc[I.handle].width,H=(D.clientY-I.startY)/W*Jc[I.handle].height;let G=I.node;if(Jc[I.handle].width!==0&&t){const F=l7(t,I.startW+z);G=ea(G,t,F)}if(Jc[I.handle].height!==0&&s){const F=l7(s,I.startH+H);G=ea(G,s,F)}j=G,l(G,C)},T=()=>{g.current=null,u?.(null),window.removeEventListener("pointermove",E),window.removeEventListener("pointerup",T),j&&d?.(j,C)};window.addEventListener("pointermove",E),window.addEventListener("pointerup",T)},[e,t,s,r,l,d,u]);return{enabledAxes:f,onHandlePointerDown:h}}const c7=320,d7=1920,LK=1024;function Dy(n){return Number.isFinite(n)?Math.round(Math.max(c7,Math.min(d7,n))):LK}function Iy(n={}){const{state:e,dispatch:t}=Rn(),{previewDevice:s,previewZoom:r,previewCustomWidth:o,previewColorScheme:l}=e,d=s==="custom"?Dy(o):LV(s),u=w.useMemo(()=>{const y=n.availableWidth??d,v=d*r;return r>=1||v<=y?r:Math.min(r,y/d)},[d,r,n.availableWidth]),f=w.useCallback(y=>{t({type:"SET_PREVIEW_DEVICE",device:y})},[t]),g=w.useCallback(y=>{const v=Math.max(.5,Math.min(1,y));t({type:"SET_PREVIEW_ZOOM",zoom:v})},[t]),h=w.useCallback(y=>{t({type:"SET_PREVIEW_CUSTOM_WIDTH",width:Dy(y)})},[t]),b=w.useCallback(y=>{t({type:"SET_PREVIEW_COLOR_SCHEME",scheme:y})},[t]);return{device:s,deviceWidth:d,zoom:r,scale:u,customWidth:Dy(o),setDevice:f,setZoom:g,setCustomWidth:h,colorScheme:l,setColorScheme:b}}const Yf="g7le-dnd-handle-";function OK(n){if(typeof n!="string"||!n.startsWith(Yf))return null;const e=n.slice(Yf.length);return e.length>0?e:null}function MK(n){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(n):n.replace(/["\\\]]/g,"\\$&")}function zK(n,e,t,s){const r=s?.handleFallback??!1;if(n instanceof HTMLElement){const o=n.closest("[data-editor-path]");if(o)return o;const l=n.closest('[data-testid^="g7le-"]');if(l&&!(l.getAttribute("data-testid")??"").startsWith(Yf))return null;if(r){const d=n.closest(`[data-testid^="${Yf}"]`);if(d&&e){const u=OK(d.getAttribute("data-testid"));if(u){const f=e.querySelector(`[data-editor-path="${MK(u)}"]`);if(f)return f}}}}if(r&&t&&typeof document<"u"&&typeof document.elementsFromPoint=="function")for(const o of document.elementsFromPoint(t.x,t.y)){const l=o.closest?.("[data-editor-path]");if(l)return l}return null}function PK(n,e,t){if(typeof n=="string"&&n.trim().length>0)return{color:n};const s=typeof t?.color=="string"&&t.color.length>0,r=typeof e=="string"&&e.trim().length>0;return s||r?{}:{color:"#0f172a"}}const BK="#ffffff",HK="#0f172a";function WK(n){const e=n.trim(),t=e.match(/^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)/i);if(t)return[Number(t[1]),Number(t[2]),Number(t[3])];const s=e.replace(/^#/,"");return/^[0-9a-f]{3}$/i.test(s)?[parseInt(s[0]+s[0],16),parseInt(s[1]+s[1],16),parseInt(s[2]+s[2],16)]:/^[0-9a-f]{6}$/i.test(s)?[parseInt(s.slice(0,2),16),parseInt(s.slice(2,4),16),parseInt(s.slice(4,6),16)]:null}function UK(n){if(!n||/transparent/i.test(n))return!1;const e=n.trim().match(/^oklch\(\s*([\d.]+)(%?)/i);if(e)return(e[2]==="%"?Number(e[1])/100:Number(e[1]))>=.62;const t=WK(n);if(!t)return!1;const[s,r,o]=t;return .299*s+.587*r+.114*o>=180}function qK(n,e,t){const s=typeof t?.color=="string"?t.color:null;return UK(n??s??e)?HK:BK}function FK({box:n,initialValue:e,isCustomKey:t,t:s,onCommit:r,onCancel:o,mirrorClassName:l,mirrorStyle:d,nodeEffectiveColor:u,onOpenTranslations:f}){const g=w.useRef(null),h=w.useRef(!1),[b,y]=w.useState(e.trim().length>0),[v,x]=w.useState(null);w.useEffect(()=>{const j=g.current;if(j){j.textContent=e,j.focus();try{const E=window.document.createRange();E.selectNodeContents(j);const T=window.getSelection();T?.removeAllRanges(),T?.addRange(E)}catch{}h.current=!1}},[e]),w.useEffect(()=>{const j=g.current;if(!j||typeof window.getComputedStyle!="function"){x(null);return}try{x(window.getComputedStyle(j).color||null)}catch{x(null)}},[l,d]);const S=()=>(g.current?.textContent??"").trim(),_=()=>{h.current||(h.current=!0,r(S()))},A=()=>{h.current||(h.current=!0,o())},C=j=>{j.key==="Enter"&&!j.shiftKey?(j.preventDefault(),_()):j.key==="Escape"&&(j.preventDefault(),A())};return a.jsxs("div",{className:"g7le-inline-text-editor","data-testid":"g7le-inline-text-editor","data-custom-key":t?"true":"false",style:{position:"absolute",left:n.left,top:n.top,minWidth:Math.max(n.width,60),minHeight:n.height,pointerEvents:"auto",zIndex:1e4},children:[a.jsx("div",{ref:g,role:"textbox","aria-label":s("layout_editor.inline_edit.aria_label"),"aria-multiline":"false","data-testid":"g7le-inline-text-editable",className:l,contentEditable:!0,suppressContentEditableWarning:!0,spellCheck:!1,onInput:()=>y(S().length>0),onKeyDown:C,onBlur:_,style:{outline:"2px solid #2563eb",outlineOffset:1,borderRadius:3,background:qK(u,v,d),padding:"2px 4px",minHeight:n.height,whiteSpace:"pre-wrap",wordBreak:"break-word",boxShadow:"0 2px 8px rgba(37, 99, 235, 0.25)",...d??{},...PK(u,l,d)}}),a.jsxs("div",{className:"g7le-inline-text-editor__hint","data-testid":"g7le-inline-text-editor-hint",style:{marginTop:2,display:"inline-flex",alignItems:"center",gap:4,whiteSpace:"nowrap"},children:[f?a.jsxs("button",{type:"button","data-testid":"g7le-inline-text-editor-open-translations",onMouseDown:j=>j.preventDefault(),onClick:j=>{j.preventDefault(),j.stopPropagation(),f()},title:s("layout_editor.inline_edit.open_translations"),style:{padding:"2px 8px",fontSize:11,background:t?"#eff6ff":"#f0fdf4",color:t?"#1d4ed8":"#15803d",border:`1px solid ${t?"#bfdbfe":"#bbf7d0"}`,borderRadius:4,display:"inline-flex",alignItems:"center",gap:4,cursor:"pointer",whiteSpace:"nowrap"},children:[a.jsx("span",{"aria-hidden":"true",children:"🌐"}),a.jsx("span",{children:s(t?"layout_editor.inline_edit.existing_key_hint":"layout_editor.inline_edit.new_key_hint")}),a.jsxs("span",{"aria-hidden":"true",style:{opacity:.7},children:["· ",s("layout_editor.inline_edit.open_translations")," ›"]})]}):a.jsx("span",{style:{padding:"2px 6px",fontSize:11,background:t?"#eff6ff":"#f0fdf4",color:t?"#1d4ed8":"#15803d",border:`1px solid ${t?"#bfdbfe":"#bbf7d0"}`,borderRadius:4,display:"inline-flex",alignItems:"center",gap:4,whiteSpace:"nowrap"},children:t?a.jsxs(a.Fragment,{children:["⌐ ",s("layout_editor.inline_edit.existing_key_hint")]}):a.jsxs(a.Fragment,{children:["✎ ",s("layout_editor.inline_edit.new_key_hint")]})}),!b&&a.jsx("span",{"data-testid":"g7le-inline-text-editor-empty-warn",style:{color:"#b91c1c",marginLeft:4},children:s("layout_editor.inline_edit.empty_warning")})]})]})}function VK({box:n,node:e,customKey:t,initialChipValue:s,chipParamLabels:r,onKeyify:o,templateIdentifier:l,locale:d,t:u,candidates:f,onInsertBinding:g,onRemoveBinding:h,onCommit:b,onCancel:y}){const[v,x]=w.useState(null),S=w.useRef(""),[_,A]=w.useState(!1),C=w.useRef(!1),j=w.useRef(null),E=Gr(),T=w.useRef(()=>{}),[D,I]=w.useState(null),[W,z]=w.useState(!1),H=w.useRef(t??null);w.useEffect(()=>{t&&H.current!==t&&(H.current=t)},[t]);const G=w.useMemo(()=>{if(!t&&r)return r;const q={},M=Ss(typeof e.text=="string"?e.text:"");for(const N of M?.params??[])q[N.name]=Xr(N.expression);return q},[e.text,t,r]);w.useEffect(()=>{let q=!1;if(!t){const M=s??"";return S.current=M,x(M),()=>{q=!0}}return(async()=>{const M=lr(t,d);if(M!==void 0){S.current=M,x(M);return}const N=await Jo(l,t);if(q)return;const V=N?.values?.[d]??"";S.current=V,x(V)})(),()=>{q=!0}},[l,t,d,s]);const F=async()=>{if(C.current)return;C.current=!0;const q=v??"";if(q===S.current){b();return}A(!0);let M=H.current;if(!M){if(!o){A(!1),C.current=!1;return}if(M=await o(q),A(!1),!M){C.current=!1;return}H.current=M,b();return}const N=await Oc(l,M,d,q);if(A(!1),N.kind==="error"){C.current=!1;return}E?.markDirty?.(),b()},Z=()=>{C.current||(C.current=!0,y())},Y=q=>{I(q)},U=async q=>{if(!(D===null||!g||W)){z(!0);try{const M=H.current;M&&v!==null&&v!==S.current&&(await Oc(l,M,d,v),S.current=v);const N=await g(D,q);N!==null&&(x(N),S.current=N,E?.markDirty?.())}finally{z(!1),I(null)}}},B=async q=>{if(!(!h||W)){z(!0);try{const M=H.current;M&&v!==null&&v!==S.current&&(await Oc(l,M,d,v),S.current=v);const N=await h(q);N!==null&&(x(N),S.current=N,E?.markDirty?.())}finally{z(!1)}}},te=q=>{q.key==="Enter"&&!q.shiftKey?(q.preventDefault(),F()):q.key==="Escape"&&(q.preventDefault(),Z())};return T.current=()=>{F()},w.useEffect(()=>{const q=N=>{const V=j.current;if(!V)return;const ee=N.target;if(ee&&V.contains(ee))return;const se=ee;se&&se.closest&&se.closest('[data-testid="g7le-inline-toolbar"], .g7le-inline-toolbar')||T.current()},M=j.current?.ownerDocument??document;return M.addEventListener("pointerdown",q,!0),()=>M.removeEventListener("pointerdown",q,!0)},[]),a.jsxs("div",{ref:j,className:"g7le-inline-param-chip-editor","data-testid":"g7le-inline-param-chip-editor",onKeyDown:te,style:{position:"absolute",left:n.left,top:n.top,minWidth:Math.max(n.width,120),pointerEvents:"auto",zIndex:1e4,background:"#fff",border:"2px solid #2563eb",borderRadius:4,boxShadow:"0 2px 8px rgba(37,99,235,0.25)",padding:4},children:[v===null?a.jsx("div",{"data-testid":"g7le-inline-param-chip-loading",style:{fontSize:12,color:"#94a3b8",padding:4},children:u("layout_editor.translation.loading")}):a.jsx(cf,{value:v,onChange:x,t:u,paramLabels:G,testIdSuffix:"inline",onRequestInsert:g?Y:void 0,onRemoveChip:h?q=>{B(q)}:void 0}),D!==null&&g&&a.jsx("div",{"data-testid":"g7le-inline-param-chip-insert-picker",style:{marginTop:4},children:a.jsx(Vs,{candidates:f??[],t:u,onSelect:q=>{U(q)},testIdSuffix:"inline-insert",defaultOpen:!0,floating:!1})}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[a.jsx("button",{type:"button","data-testid":"g7le-inline-param-chip-save",disabled:_,onMouseDown:q=>q.preventDefault(),onClick:()=>{F()},style:{fontSize:11,border:"none",borderRadius:6,background:"#2563eb",color:"#fff",padding:"4px 12px",cursor:"pointer"},children:u(_?"layout_editor.translation.saving":"layout_editor.translation.save")}),a.jsx("span",{style:{fontSize:10,color:"#94a3b8"},children:u("layout_editor.translation.placeholder_locked")})]})]})}const KK=["fontWeight","fontBold","fontStyle","fontItalic","textDecoration","textUnderline","textAlign","fontSize","textColor"],GK={fontWeight:"B",fontBold:"B",fontStyle:"I",fontItalic:"I",textDecoration:"U",textUnderline:"U",textAlign:"≡",fontSize:"T",textColor:"A"},YK=[["fontWeight","fontBold"],["fontItalic","fontStyle"],["textUnderline","textDecoration"]];function u7({node:n,spec:e,t,onApplyControl:s,box:r,scope:o=$r}){const l=typeof n.name=="string"?n.name:"",d=Gh(e,l),u=Array.isArray(d?.styleControls)?d.styleControls:[];let f=KK.filter(g=>u.includes(g)&&Fs(e,g)!==null);for(const g of YK){const h=g.filter(b=>f.includes(b));if(h.length>1){const b=h[0];f=f.filter(y=>!g.includes(y)||y===b)}}return f.length===0?null:a.jsx("div",{className:"g7le-inline-toolbar","data-testid":"g7le-inline-toolbar",role:"toolbar","aria-label":t("layout_editor.inline_edit.toolbar_label"),style:{position:"absolute",left:r.left,top:r.top-40,display:"inline-flex",gap:2,padding:4,background:"#0f172a",borderRadius:8,boxShadow:"0 4px 12px rgba(15, 23, 42, 0.35)",pointerEvents:"auto",zIndex:10001},children:f.map(g=>a.jsx(JK,{controlKey:g,node:n,spec:e,t,scope:o,onApplyControl:s},g))})}const XK={fontWeight:"bold",fontBold:"bold",fontStyle:"italic",fontItalic:"italic",textDecoration:"underline",textUnderline:"underline"};function f7(n,e){const t=r=>(r.split(/[-\s]/).pop()??r)===e||r===e;return n.find(r=>{const o=typeof r.value=="string"?r.value:"",l=Array.isArray(r.apply?.tokens)?r.apply.tokens:[];return t(o)||l.some(t)})?.value}function JK({controlKey:n,node:e,spec:t,t:s,scope:r,onApplyControl:o}){const[l,d]=w.useState(!1),u=Fs(t,n);if(!u)return null;const f=u.options,g=Array.isArray(f),h=Uc(e,u,r),b=XK[n],y=b&&Array.isArray(f)?f7(f,b):void 0,v=!b,x=y!==void 0?h.value===y:g&&h.matched&&h.value!==void 0&&h.value!=="",S=s(`layout_editor.inline_edit.format.${n}`),_=E=>typeof E.label=="string"?E.label.startsWith("$t:")?s(E.label.slice(3)):E.label:String(E.value??""),A=()=>{o(n,E=>{const T=Uc(E,u,r),D=Array.isArray(f)?f7(f,b):void 0,I=D!==void 0&&T.value===D?void 0:D;return ea(E,u,I,r)})},C=E=>{o(n,T=>{const I=Uc(T,u,r).value===E?void 0:E;return ea(T,u,I,r)}),d(!1)},j=E=>{if(E.preventDefault(),E.stopPropagation(),!v&&Array.isArray(f)){A();return}d(T=>!T)};return a.jsxs("div",{style:{position:"relative",display:"inline-flex"},children:[a.jsxs("button",{type:"button","data-testid":`g7le-inline-format-${n}`,"data-active":x?"true":"false","aria-label":S,"aria-pressed":g?x:void 0,title:S,onMouseDown:E=>E.preventDefault(),onClick:j,style:{display:"inline-flex",alignItems:"center",gap:5,height:28,padding:"0 9px",fontSize:12,border:"none",borderRadius:5,cursor:"pointer",background:x?"#2563eb":"transparent",color:"#ffffff",whiteSpace:"nowrap"},children:[a.jsx("span",{"aria-hidden":"true",style:{fontWeight:n==="fontWeight"||n==="fontBold"?700:600,fontStyle:n==="fontStyle"||n==="fontItalic"?"italic":"normal",textDecoration:n==="textDecoration"||n==="textUnderline"?"underline":"none"},children:GK[n]}),a.jsx("span",{children:S}),v&&a.jsx("span",{"aria-hidden":"true",style:{fontSize:9,opacity:.8},children:"▾"})]}),v&&l&&a.jsx("div",{"data-testid":`g7le-inline-popover-${n}`,role:"listbox",onMouseDown:E=>E.preventDefault(),style:{position:"absolute",top:32,left:0,minWidth:140,maxHeight:240,overflowY:"auto",background:"#0f172a",border:"1px solid #334155",borderRadius:8,boxShadow:"0 8px 24px rgba(15,23,42,0.45)",padding:4,zIndex:10002},children:Array.isArray(f)&&f.length>0?f.map((E,T)=>{const D=h.value===E.value;return a.jsxs("button",{type:"button",role:"option","aria-selected":D,"data-testid":`g7le-inline-option-${n}-${String(E.value??T)}`,onMouseDown:I=>I.preventDefault(),onClick:I=>{I.preventDefault(),I.stopPropagation(),C(E.value)},style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"6px 8px",fontSize:12,textAlign:"left",border:"none",borderRadius:5,cursor:"pointer",background:D?"#2563eb":"transparent",color:"#ffffff"},children:[typeof E.swatch=="string"&&a.jsx("span",{"aria-hidden":"true",style:{width:14,height:14,borderRadius:3,background:E.swatch,border:"1px solid rgba(255,255,255,0.3)"}}),a.jsx("span",{children:_(E)}),D&&a.jsx("span",{"aria-hidden":"true",style:{marginLeft:"auto"},children:"✓"})]},String(E.value??T))}):a.jsx(ZK,{testid:`g7le-inline-freeinput-${n}`,placeholder:s(`layout_editor.inline_edit.prompt.${n}`),initial:typeof h.value=="string"?h.value:"",onSubmit:E=>{o(n,T=>ea(T,u,E,r)),d(!1)}})})]})}function ZK({testid:n,placeholder:e,initial:t,onSubmit:s}){const[r,o]=w.useState(t);return a.jsx("input",{type:"text","data-testid":n,value:r,placeholder:e,autoFocus:!0,onMouseDown:l=>l.stopPropagation(),onChange:l=>o(l.currentTarget.value),onKeyDown:l=>{l.key==="Enter"&&(l.preventDefault(),s(r.trim()))},style:{width:130,padding:"6px 8px",fontSize:12,border:"1px solid #334155",borderRadius:5,background:"#1e293b",color:"#ffffff"}})}function QK(n){const{frameEl:e,manifest:t,nesting:s,componentPalette:r,spec:o=null,permissionCandidates:l,resolveRouteMatch:d,onNavigateToDestination:u,onSessionAddedPathsChange:f,onEditProps:g}=n,{state:h,dispatch:b}=Rn(),{t:y}=Mn(),v=Iy(),x=w.useCallback((de,Ae)=>{const Me=window.G7Core;if(Me&&typeof Me.t=="function"){const Ue=Me.t(de,Ae);if(Ue&&Ue!==de&&!Ue.startsWith("$t:"))return Ue}return y(de,Ae)},[y]),S=Gr(),_=$U(50),A=Tc(),C=w.useRef([]),j=w.useMemo(()=>S?.document?.raw?.components??[],[S?.document?.raw?.components]),E=w.useMemo(()=>j.length===0?null:{children:j},[j]),T=w.useMemo(()=>{if(h.editMode!=="extension")return;const de=/^__extension__\/(\d+)/.exec(h.selectedRoute?.path??"");return de?Number(de[1]):void 0},[h.editMode,h.selectedRoute?.path]),D=w.useMemo(()=>{if(h.editMode==="iteration_item"){const de=S?.document?.iterationContext?.sourceIndexPath;return Array.isArray(de)&&de.length>0?de:null}if(h.editMode==="modal"){const de=S?.document?.modalContext?.editIndexPath;return Array.isArray(de)&&de.length>0?de:null}return null},[h.editMode,S?.document?.iterationContext?.sourceIndexPath,S?.document?.modalContext?.editIndexPath]),I=_U({rootNode:E,editMode:h.editMode,currentExtensionId:T,editableRootPath:D,pathParser:An,resolveRouteMatch:d}),[W,z]=w.useState(null),[H,G]=w.useState(null),[F,Z]=w.useState(null),Y=w.useRef(null);Y.current=F;const[U,B]=w.useState(null),te=w.useRef(null),q=w.useRef(null);q.current=I.selectedPath;const M=hM(),[N,V]=w.useState(null),ee=w.useCallback(de=>{if(!e)return;const Ae=An(de);if(!Ae)return;const Me={children:Nt.current.components},Ue=en(Me,Ae),rt=M.classify(Ue);if(!rt.editable){ir({op:"inline_edit_blocked_binding",sourceState:rt.sourceState,componentPath:rs(Ae),timestamp:Date.now()});return}const bt=fl(e,de);if(!bt)return;const Tt=Ue?.props??{},wt=g7(e,de);V({path:Ae,domPath:de,box:bt,initialValue:rt.displayValue,isCustomKey:rt.sourceState==="custom_key",isParamKey:rt.isParamKey===!0,customKey:rt.customKey,chipValue:rt.chipValue,chipParamLabels:rt.chipParamLabels,mirrorClassName:typeof Tt.className=="string"?Tt.className:void 0,mirrorStyle:Tt.style??void 0,nodeEffectiveColor:wt}),ir({op:"inline_edit_enter",sourceState:rt.sourceState,componentPath:rs(Ae),timestamp:Date.now()})},[e,M]),se=w.useCallback(()=>{if(!e){z(null),G(null);return}G(fl(e,I.selectedPath)),z(fl(e,I.hoverPath))},[e,I.selectedPath,I.hoverPath,j]);w.useEffect(()=>{if(se(),typeof window<"u"&&typeof window.requestAnimationFrame=="function"){const de=window.requestAnimationFrame(()=>se());return()=>window.cancelAnimationFrame(de)}},[se]),w.useEffect(()=>{if(e)return nC(se,e)},[e,se]);const re=w.useCallback((de,Ae)=>{if(typeof window>"u")return;window.dispatchEvent(new CustomEvent(Ay,{detail:Ae===null?{requestId:de,cancelled:!0}:{requestId:de,id:Ae}})),Z(null),B(null);const Me=te.current;Me?I.handleSelect("",{dataset:{editorPath:Me}}):I.clearSelection(),te.current=null},[I]);w.useEffect(()=>{if(typeof window>"u")return;const de=Ae=>{const Me=Ae.detail;if(typeof Me?.requestId!="string")return;const Ue=Y.current;Ue&&Ue!==Me.requestId&&re(Ue,null),te.current=q.current,Z(Me.requestId)};return window.addEventListener(Ty,de),()=>window.removeEventListener(Ty,de)},[re]),w.useEffect(()=>{if(!F)return;const de=Ae=>{Ae.key==="Escape"&&(Ae.preventDefault(),re(F,null))};return window.addEventListener("keydown",de,!0),()=>window.removeEventListener("keydown",de,!0)},[F,re]),w.useEffect(()=>{if(!e)return;const de=h.editMode==="iteration_item"||h.editMode==="modal",Ae=(gt,_t)=>zK(gt,e,_t?{x:_t.clientX,y:_t.clientY}:void 0,{handleFallback:de}),Me=gt=>{const _t=gt.dataset.editorPath??"",Kt=_t?An(_t):null,as={children:Nt.current.components},sn=Kt?en(as,Kt):null,wn=sn&&typeof sn.props?.id=="string"?sn.props.id:typeof sn?.id=="string"?sn.id:"";return wn.startsWith("auto_")?"":wn},Ue=gt=>{const _t=Ae(gt.target,gt);if(!_t)return;const Kt=Y.current;if(Kt){gt.preventDefault(),gt.stopPropagation();const as=Me(_t);as&&re(Kt,as);return}gt.preventDefault(),gt.stopPropagation(),I.handleSelect(_t.dataset.editorId??"",{currentTarget:_t,dataset:_t.dataset})},rt=gt=>{const _t=Ae(gt.target,gt);if(Y.current){if(!_t){B(null);return}const Kt=fl(e,_t.dataset.editorPath??null);if(!Kt){B(null);return}B({box:Kt,hasId:Me(_t)!==""});return}if(!_t){I.handleHover(null,{});return}I.handleHover(_t.dataset.editorId??"",{currentTarget:_t,dataset:_t.dataset})},bt=()=>{if(Y.current){B(null);return}I.handleHover(null,{})},Tt=gt=>{const _t=Ae(gt.target,gt);if(!_t)return;const Kt=_t.dataset.editorPath??"";Kt&&(gt.preventDefault(),gt.stopPropagation(),ee(Kt))},wt=e.parentElement??e;return wt.addEventListener("click",Ue,!0),wt.addEventListener("mousemove",rt,!0),wt.addEventListener("mouseleave",bt,!0),wt.addEventListener("dblclick",Tt,!0),()=>{wt.removeEventListener("click",Ue,!0),wt.removeEventListener("mousemove",rt,!0),wt.removeEventListener("mouseleave",bt,!0),wt.removeEventListener("dblclick",Tt,!0)}},[e,I,ee,h.editMode,re]);const pe=w.useMemo(()=>{const de=I.selectedPath;if(!de)return null;const Ae=de.match(/^(.*)\.children\.\d+$/);return Ae?Ae[1]:null},[I.selectedPath]),je=w.useCallback(()=>{pe&&I.handleSelect("",{dataset:{editorPath:pe}})},[pe,I]),me=w.useMemo(()=>!e||!I.selectedPath?null:e.querySelector(`[data-editor-path="${So(I.selectedPath)}"]`),[e,I.selectedPath]),ce=w.useMemo(()=>I.selectedPath?An(I.selectedPath):null,[I.selectedPath]),be=w.useMemo(()=>{if(!ce)return null;const de=ce.find(zn);if(!de)return null;const{i18nKey:Ae,raw:Me}=VH(de.responsive);return Ae?y(Ae):y("layout_editor.overlay.branch_custom",{range:Me})},[ce,y]),Be=w.useMemo(()=>I.selectedPath?I.selectedIsIteration&&I.selectedIterationSourcePath?I.selectedIterationSourcePath:I.selectedPath:null,[I.selectedPath,I.selectedIsIteration,I.selectedIterationSourcePath]),fe=w.useMemo(()=>Be?An(Be):null,[Be]),De=w.useMemo(()=>!e||!Be?null:e.querySelector(`[data-editor-path="${So(Be)}"]`),[e,Be]),Fe=w.useMemo(()=>{if(De?.parentElement)return De.parentElement;if(!e||!Be)return null;const de=Be.match(/^(.*)\.children\.\d+$/);return de?e.querySelector(`[data-editor-path="${So(de[1])}"]`):null},[De,e,Be]),mt=w.useMemo(()=>{const de=I.selectedNode;return de&&(typeof de.name=="string"?de.name:typeof de.type=="string"?de.type:"")||null},[I.selectedNode]),ft=w.useMemo(()=>{if(I.selectedLockKind!=="extension")return null;const de=I.selectedNode?.__source;if(!de||de.kind!=="extension")return null;const Ae=de.extensionName?.trim(),Me=de.extensionIdentifier?.trim();return Ae&&Me?`${Ae} (${Me})`:Ae||Me||de.extensionSourceType||null},[I.selectedLockKind,I.selectedNode]),xt=RU({parentEl:Fe,selectedPath:fe,selectedEl:De}),Ot=w.useMemo(()=>!e||!Be||Be===I.selectedPath?H:fl(e,Be),[e,Be,H,I.selectedPath,j]),St=w.useRef(null),kt=w.useCallback(()=>{const de=St.current;de&&(A.close(de),St.current=null)},[A]),Vt=w.useRef(()=>{}),Nt=w.useRef({manifest:t,nesting:s,componentPalette:r,components:j});Nt.current={manifest:t,nesting:s,componentPalette:r,components:j};const tn=w.useCallback(de=>{const Ae=de.insertion?.parentPath??[],Me=de.insertion?.index??0,Ue=Nt.current,rt=p7(Ue.components,Ae);kt();const bt=A.open({ariaLabel:x("layout_editor.palette.title"),width:880,maxHeightRatio:.82,content:qe.createElement(CC,{manifest:Ue.manifest,nesting:Ue.nesting,componentPalette:Ue.componentPalette??null,targetParentPath:Ae,targetContainerName:rt,onInsert:(Tt,wt,gt)=>{Vt.current(Tt,wt,gt)},insertionIndex:Me,onClose:()=>kt(),editorTemplateId:h.templateIdentifier,editorLocale:h.locale}),onClose:()=>{St.current=null}});St.current=bt},[A,kt]),Qe=w.useMemo(()=>{if(!h.isPaletteOpen)return null;if(!ce)return{parentPath:[],index:j.length};if(I.selectedLockKind!=="none"){const Ue=fe;return!Ue||Ue.length===0?{parentPath:[],index:j.length}:{parentPath:Ue.slice(0,-1),index:(Ue[Ue.length-1]??0)+1}}const Ae=I.selectedNode,Me=Array.isArray(Ae?.children)?Ae.children.length:0;return YU(Ae?.name,Me,ce,s,j.length)},[h.isPaletteOpen,ce,fe,I.selectedLockKind,I.selectedNode,j.length,s]),Pe=w.useCallback(()=>{b({type:"SET_PALETTE_OPEN",open:!1})},[b]),et=w.useRef(null);w.useEffect(()=>{if(!h.isPaletteOpen){const rt=et.current;rt&&(A.close(rt),et.current=null);return}if(!Qe||et.current)return;const de=Qe,Ae=Nt.current,Me=p7(Ae.components,de.parentPath),Ue=A.open({ariaLabel:x("layout_editor.palette.title"),width:880,maxHeightRatio:.82,content:qe.createElement(CC,{manifest:Ae.manifest,nesting:Ae.nesting,componentPalette:Ae.componentPalette??null,targetParentPath:de.parentPath,targetContainerName:Me,onInsert:(rt,bt,Tt)=>{Vt.current(rt,bt,Tt),Pe()},insertionIndex:de.index,onClose:()=>Pe(),editorTemplateId:h.templateIdentifier,editorLocale:h.locale}),onClose:()=>{et.current=null,b({type:"SET_PALETTE_OPEN",open:!1})}});et.current=Ue},[h.isPaletteOpen,Qe,A,Pe,b]);const Le=w.useRef({layoutName:null,pushed:!1});w.useEffect(()=>{const de=S?.document?.layoutName??null;if(!de){Le.current={layoutName:null,pushed:!1};return}Le.current.layoutName!==de&&(_.clear(),_.push({actionKind:"inline_text_edit",label:"baseline",snapshot:j}),Le.current={layoutName:de,pushed:!0})},[S?.document?.layoutName,j,_]);const He=w.useRef(0);w.useEffect(()=>{const de=S?.saveSuccessCounter??0;de!==He.current&&(He.current=de,de!==0&&(_.clear(),_.push({actionKind:"inline_text_edit",label:"save_baseline",snapshot:j}),C.current=[],f?.([])))},[S?.saveSuccessCounter,j,_,f]);const Ve=w.useRef(0);w.useEffect(()=>{const de=S?.reloadCounter??0;de!==Ve.current&&(Ve.current=de,de!==0&&(Le.current={layoutName:null,pushed:!1},C.current=[],f?.([])))},[S?.reloadCounter,f]);const Je=w.useCallback((de,Ae,Me)=>{if(!S)return;let Ue=[];S.patchLayout(wt=>{const gt={children:wt},_t=Ly(gt,Ae),Kt=Me<0?Array.isArray(_t?.children)?_t.children.length:0:Me,sn=cm(gt,Ae,Kt,de).children??[];return Ue=sn,sn}),_.push({actionKind:"insert",label:`insert ${de.name??de.type??""}`,snapshot:Ue});const rt=Ly({children:Ue},Ae),bt=Me<0?Array.isArray(rt?.children)?rt.children.length-1:0:Me,Tt=rs([...Ae,bt]);if(C.current=[...C.current,Tt],f?.(C.current),e){const wt=`[data-editor-path="${So(Tt)}"]`,gt=()=>{const _t=e.querySelector(wt);_t&&typeof _t.scrollIntoView=="function"&&_t.scrollIntoView({behavior:"smooth",block:"center",inline:"nearest"})};typeof window<"u"&&typeof window.requestAnimationFrame=="function"?window.requestAnimationFrame(()=>window.requestAnimationFrame(gt)):setTimeout(gt,32)}},[S,_,f,e]);Vt.current=Je;const jt=w.useCallback(()=>{if(!S||!I.selectedNode||!ce)return;const de=um(I.selectedNode);let Ae=[];S.patchLayout(Me=>{const Ue={children:Me},rt=ce.slice(0,-1),bt=ce[ce.length-1]??0,wt=cm(Ue,rt,bt+1,de).children??[];return Ae=wt,wt}),_.push({actionKind:"insert",label:"duplicate",snapshot:Ae})},[S,I.selectedNode,ce,_]),At=w.useCallback(()=>{if(!S||!ce)return;let de=[];S.patchLayout(Ae=>{const rt=dm({children:Ae},ce).children??[];return de=rt,rt}),_.push({actionKind:"remove",label:"remove",snapshot:de}),I.clearSelection()},[S,ce,_,I]),Rt=w.useMemo(()=>{if(!I.selectedNode||!ce||ce.some(zn))return null;const de=I.selectedNode;if(!Array.isArray(de.children))return null;const Ae=FH(h.previewDevice,de,h.previewCustomWidth);return{mode:Ae.mode,key:Ae.key,sourceKey:Ae.sourceKey}},[I.selectedNode,ce,h.previewDevice,h.previewCustomWidth]),xe=w.useCallback(()=>{if(!S||!ce||Rt?.mode!=="separate")return;const de=Rt.key,Ae=Rt.sourceKey;let Me=[];S.patchLayout(Ue=>(Me=iM({children:Ue},ce,de,Ae).children??[],Me)),_.push({actionKind:"insert",label:"separate_branch",snapshot:Me})},[S,ce,Rt,_]),We=w.useCallback(()=>{if(!S||!ce||Rt?.mode!=="merge")return;const de=Rt.key;let Ae=[];S.patchLayout(Me=>(Ae=lM({children:Me},ce,de).children??[],Ae)),_.push({actionKind:"remove",label:"merge_branch",snapshot:Ae})},[S,ce,Rt,_]),Q=w.useCallback(de=>{switch(de){case"mobile":return y("layout_editor.context_menu.device_mobile");case"portable":return y("layout_editor.context_menu.device_portable");case"tablet":return y("layout_editor.context_menu.device_tablet");case"desktop":return y("layout_editor.context_menu.device_desktop");default:return y("layout_editor.context_menu.device_custom",{range:de})}},[y]),ke=w.useMemo(()=>{if(!Rt)return null;const de=Q(Rt.key);return{separate:y("layout_editor.context_menu.separate_branch_device",{device:de}),merge:y("layout_editor.context_menu.merge_branch_device",{device:de})}},[Rt,y,Q]),ge=w.useMemo(()=>{if(!I.selectedNode||!ce)return[];if(ce.some(zn))return[];const de=Of(h.previewDevice,I.selectedNode,h.previewCustomWidth);return IV(I.selectedNode,de).map(Ae=>({key:Ae,label:Q(Ae)}))},[I.selectedNode,ce,h.previewDevice,h.previewCustomWidth,Q]),X=w.useCallback(de=>{if(de==="desktop"||de==="tablet"||de==="mobile"||de==="portable"){v.setDevice(de);return}v.setDevice(de)},[v]),he=w.useCallback(()=>{I.selectedNode&&i7(I.selectedNode)},[I.selectedNode]),_e=w.useCallback(()=>{I.selectedNode&&(i7(I.selectedNode),At())},[I.selectedNode,At]),ve=w.useCallback(()=>{if(!S)return;const de=$K();if(!de)return;const Ae=um(de);if(ce&&ce.length>0){const Me=ce.slice(0,-1),Ue=(ce[ce.length-1]??0)+1;Je(Ae,Me,Ue)}else Je(Ae,[],j.length)},[S,ce,Je,j.length]),Re=w.useCallback((de,Ae)=>{_.push({actionKind:"move",label:Ae,snapshot:de})},[_]),Ye=w.useCallback(()=>{if(I.selectedNavAffordance==="route_in_tree"&&I.selectedNavTargetPath){if(u){u(I.selectedNavTargetPath);return}b({type:"SELECT_ROUTE",route:{path:I.selectedNavTargetPath,layoutName:null}})}},[I.selectedNavAffordance,I.selectedNavTargetPath,u,b]),it=w.useCallback(()=>{const de=oM(I.selectedBaseLayout,h.selectedRoute?.layoutName);de&&b({type:"ENTER_BASE_EDIT",layoutName:de})},[I.selectedBaseLayout,h.selectedRoute?.layoutName,b]),ot=w.useCallback(()=>{const de=I.selectedNode?.__source?.extensionId;de!=null&&b({type:"ENTER_EXTENSION_EDIT",extensionId:String(de)})},[I.selectedNode,b]),tt=w.useCallback(()=>{const de=I.selectedIterationSourcePath;de&&b({type:"ENTER_ITERATION_ITEM_EDIT",sourcePath:de})},[I.selectedIterationSourcePath,b]),at=w.useRef(null),nt=w.useRef(null),Xe=w.useRef(null),st=w.useRef({colorScheme:"base",breakpoint:"base"}),pt=at.current!==null?A.stack.some(de=>de.id===at.current):!1,Lt=w.useMemo(()=>mS(h.routeTree,x),[h.routeTree,x]),an=w.useMemo(()=>yS(S?.document?.raw),[S?.document?.raw]),Tn=w.useMemo(()=>bS(o),[o?.states]),$n=w.useMemo(()=>{const de=S?.document?.raw,Ae=EC(de?.components),Me=de?.initIsolated,Ue=Me&&typeof Me=="object"&&!Array.isArray(Me)?Object.keys(Me):[];return Hq(Ae,Ue)},[S?.document?.raw]),Cs=w.useMemo(()=>{const de=S?.document?.raw;return EC(de?.components).map(Ae=>Ae.scopeId).filter(Ae=>typeof Ae=="string"&&Ae.length>0)},[S?.document?.raw]),Wn=hS({raw:S?.document?.raw,spec:o}),vn=w.useCallback((de,Ae)=>{if(!S)return;const Me={children:Nt.current.components},Ue=en(Me,de);if(!Ue)return;st.current={colorScheme:h.previewColorScheme==="dark"?"dark":"base",breakpoint:Of(h.previewDevice,Ue,h.previewCustomWidth)};const rt=e?.getBoundingClientRect(),bt=H&&rt?{left:rt.left+H.left,top:rt.top+H.top,width:H.width,height:H.height}:void 0,Tt=me,wt=de.find(zn),gt=wt?Q(wt.responsive):null,_t=de.filter(Ls=>typeof Ls=="number"),Kt=WO({children:Nt.current.components},_t,UO(Wn)),as=Kt.length>0?[...Jh({iterationVars:Kt}),...Wn]:Wn,sn=(Ls,li)=>qe.createElement(gK,{key:`pem-${rs(nt.current??[])}`,node:Ls,spec:o,manifest:Nt.current.manifest,t:x,permissionCandidates:l,pageCandidates:Lt,dataSourceCandidates:an,stateKeyCandidates:Tn,bindingCandidates:as,liveElement:Tt,templateIdentifier:h.templateIdentifier,initialTab:li,branchLabel:gt,isolatedScopeIdCandidates:$n,usedScopeIds:Cs,onSaveInjectedProps:async(mn,is)=>{const Ro=typeof Ls.id=="string"?Ls.id:"",Os=await RK(h.templateIdentifier,mn,Ro,is);if(ss({op:"save",layoutName:`extension:${mn}`,editMode:h.editMode,saveTarget:"layout_extension",endpoint:`/api/admin/templates/${h.templateIdentifier}/layout-extensions/${mn}`,isDirty:!0,timestamp:Date.now()}),Os.kind!=="success")throw new Error(Os.kind==="conflict"?x("layout_editor.save.conflict"):Os.kind==="injection_not_found"?"injection not found":Os.kind==="not_found"?"extension not found":Os.message??"save failed")},scope:st.current,onScopeChange:mn=>{st.current=mn;const is=at.current;is&&A.open({id:is,ariaLabel:x("layout_editor.property_modal.title"),width:420,draggable:!0,avoidRect:bt,content:sn(Ls),onClose:()=>{at.current=null,nt.current=null}})},onPatchNode:mn=>{let is=[];S.patchLayout(Os=>(is=Ar({children:Os},de,()=>mn).children??[],is)),_.push({actionKind:"inline_text_edit",label:"edit_props",snapshot:is}),Xu({source:"style_control",componentPath:rs(de),componentName:typeof mn.name=="string"?mn.name:null,patchKey:null,timestamp:Date.now()});const Ro=at.current;Ro&&A.open({id:Ro,ariaLabel:x("layout_editor.property_modal.title"),width:420,draggable:!0,avoidRect:bt,content:sn(mn),onClose:()=>{at.current=null,nt.current=null}})},onDelete:()=>{const mn=at.current;mn&&A.close(mn),At()},onClose:()=>{const mn=at.current;mn&&A.close(mn)}});nt.current=de;const wn=A.open({ariaLabel:x("layout_editor.property_modal.title"),width:420,draggable:!0,avoidRect:bt,content:sn(Ue,Ae),onClose:()=>{at.current=null,nt.current=null,Xe.current=null}});at.current=wn,Xe.current=Ls=>{A.open({id:wn,ariaLabel:x("layout_editor.property_modal.title"),width:420,draggable:!0,avoidRect:bt,content:sn(Ls),onClose:()=>{at.current=null,nt.current=null,Xe.current=null}})}},[S,o,x,l,Lt,an,Tn,Wn,me,_,A,At,e,H,h.previewColorScheme,h.previewDevice,h.previewCustomWidth,Q]);w.useEffect(()=>{const de=Xe.current,Ae=nt.current;if(!de||!Ae)return;const Me={children:Nt.current.components},Ue=en(Me,Ae);Ue?de(Ue):at.current&&A.close(at.current)},[j]);const os=()=>{if(!pt)return null;const Ae={position:"absolute",background:"rgba(15, 23, 42, 0.45)",pointerEvents:"auto",zIndex:LU},Me=wt=>{wt.preventDefault(),wt.stopPropagation()};if(!H)return a.jsx("div",{"data-testid":"g7le-edit-lock-full",onClick:Me,onMouseMove:Me,style:{...Ae,inset:0}});const{left:Ue,top:rt,width:bt,height:Tt}=H;return a.jsxs("div",{"data-testid":"g7le-edit-lock",style:{position:"absolute",inset:0,pointerEvents:"none"},children:[a.jsx("div",{"data-testid":"g7le-edit-lock-top",onClick:Me,onMouseMove:Me,style:{...Ae,left:0,top:0,right:0,height:Math.max(0,rt)}}),a.jsx("div",{"data-testid":"g7le-edit-lock-bottom",onClick:Me,onMouseMove:Me,style:{...Ae,left:0,top:rt+Tt,right:0,bottom:0}}),a.jsx("div",{"data-testid":"g7le-edit-lock-left",onClick:Me,onMouseMove:Me,style:{...Ae,left:0,top:rt,width:Math.max(0,Ue),height:Tt}}),a.jsx("div",{"data-testid":"g7le-edit-lock-right",onClick:Me,onMouseMove:Me,style:{...Ae,left:Ue+bt,top:rt,right:0,height:Tt}})]})},cr=w.useCallback(()=>{if(ce&&X1(I.selectedLockKind)){if(g&&I.selectedPath){g(I.selectedPath);return}vn(ce)}},[ce,I.selectedPath,I.selectedLockKind,g,vn]),{scale:Co}=v,ri=typeof I.selectedNode?.name=="string"?I.selectedNode.name:"",oi=o?.componentCapabilities?.[ri]??null,Gs=Array.isArray(oi?.styleControls)?oi.styleControls:[],jo=Gs.includes("width")?Fs(o,"width"):null,ai=Gs.includes("height")?Fs(o,"height"):null,ro=w.useCallback((de,Ae)=>{if(!S||!ce)return;let Me=[];S.patchLayout(Ue=>(Me=Ar({children:Ue},ce,()=>de).children??[],Me)),Xu({source:"resize",componentPath:rs(ce),componentName:ri||null,patchKey:Ae==="height"?"height":"width",resizeAxis:Ae,timestamp:Date.now()})},[S,ce,ri]),dr=w.useCallback((de,Ae)=>{if(!S||!ce)return;let Me=[];S.patchLayout(Ue=>(Me=Ar({children:Ue},ce,()=>de).children??[],Me)),_.push({actionKind:"inline_text_edit",label:`resize ${Ae}`,snapshot:Me})},[S,ce,_]),Or=w.useCallback(()=>{if(!me)return null;const de=me.getBoundingClientRect(),Ae=Co||1;return{width:de.width/Ae,height:de.height/Ae}},[me,Co]),Is=IK({node:I.selectedNode,widthControl:jo,heightControl:ai,scale:Co,measureStartSize:Or,onResize:ro,onResizeEnd:dr}),Nn=w.useCallback((de,Ae)=>{Is.onHandlePointerDown(de,Ae)},[Is]),la=w.useCallback(()=>{const de=_.undo();!de||!S||S.setLayoutComponents(de.snapshot)},[_,S]),ca=w.useCallback(()=>{const de=_.redo();!de||!S||S.setLayoutComponents(de.snapshot)},[_,S]);DU({onUndo:la,onRedo:ca});const Ys=w.useMemo(()=>({copy:he,cut:_e,paste:ve,delete:At,openProps:cr,selectParent:pe?je:void 0,deselect:I.clearSelection}),[he,_e,ve,At,cr,pe,je,I.clearSelection]);O1({handlers:Ys,hasSelection:!!I.selectedPath}),w.useEffect(()=>(window.__g7LayoutEditorHasSelection=!!I.selectedPath,()=>{try{delete window.__g7LayoutEditorHasSelection}catch{}}),[I.selectedPath]),w.useEffect(()=>(window.__g7LayoutEditorHistory={undo:la,redo:ca,canUndo:_.canUndo,canRedo:_.canRedo},()=>{try{delete window.__g7LayoutEditorHistory}catch{}}),[la,ca,_.canUndo,_.canRedo]);const oo=w.useCallback(de=>{const Ae=N;V(null),Ae&&(async()=>{if((await M.commit(Ae.path,de)).kind==="created"&&S){const Ue=S.document?.raw?.components??[];_.push({actionKind:"inline_text_edit",label:"inline_create_key",snapshot:Ue})}})()},[N,M,S,_]),bl=w.useCallback(()=>{const de=N;V(null),M.trackCancel(de?.path??null)},[N,M]),xl=w.useCallback(()=>{V(null)},[]),vl=w.useCallback(async de=>{const Ae=N;if(!Ae)return null;const Me=await M.keyifyChipValue(Ae.path,de);if(Me.kind!=="created"||!Me.translationKey)return null;const Ue=S?.document?.raw?.components??[];return _.push({actionKind:"inline_text_edit",label:"inline_keyify_chip",snapshot:Ue}),Me.translationKey},[N,M,S,_]),dd=w.useCallback(()=>{const de=N;de&&(V(null),I.handleSelect("",{dataset:{editorPath:de.domPath}}),vn(de.path,"translation"))},[N,I,vn]),nn=w.useMemo(()=>{if(!N)return null;const de=S?.document?.raw?.components??j;return en({children:de},N.path)},[N,S?.document,j]),Eo=w.useCallback(async(de,Ae)=>{const Me=N;if(!S||!Me)return null;const Ue=typeof nn?.text=="string"?nn.text:"";let rt;if(Me.isParamKey)rt=await pf(h.templateIdentifier,h.locale,Ue,de,Ae.sourceId,Ae.path,"scalar");else{const Kt=as=>as.replace(/\$t:[a-zA-Z0-9._-]+/g,sn=>{const wn=x(sn.slice(3));return wn&&wn!==sn.slice(3)&&!wn.startsWith("$t:")?wn:""}).replace(/\s+/g," ").trim();rt=await xm(h.templateIdentifier,h.selectedRoute?.layoutName??null,h.locale,Ue,de,Ae.sourceId,Ae.path,"scalar",Kt,x)}if(rt.kind==="error")return null;const bt=Me.path;let Tt=[];S.patchLayout(Kt=>(Tt=Ar({children:Kt},bt,wn=>({...wn,text:rt.text})).children??[],Tt)),_.push({actionKind:"inline_text_edit",label:"inline_insert_binding",snapshot:Tt});const wt=rt.kind==="ok"&&"key"in rt?rt.key:void 0;!Me.isParamKey&&wt&&V(Kt=>Kt&&Kt.path===bt?{...Kt,isParamKey:!0,customKey:wt,chipValue:void 0,chipParamLabels:void 0}:Kt);try{window.dispatchEvent(new CustomEvent($s,{detail:{templateIdentifier:h.templateIdentifier,locale:h.locale}}))}catch{}const gt=Ss(rt.text),_t=Me.customKey??gt?.key??"";return _t?lr(_t,h.locale)??null:null},[S,N,nn,h.templateIdentifier,h.locale,h.selectedRoute,_,x]),Jn=w.useCallback(async de=>{const Ae=N;if(!S||!Ae)return null;const Me=typeof nn?.text=="string"?nn.text:"",Ue=Ss(Me),rt=Ae.customKey??Ue?.key??null,bt=$c(Me,de),Tt=Ae.path;let wt=[];return S.patchLayout(gt=>(wt=Ar({children:gt},Tt,as=>({...as,text:bt})).children??[],wt)),_.push({actionKind:"inline_text_edit",label:"inline_remove_binding",snapshot:wt}),rt&&await gf(h.templateIdentifier,rt,de,h.locale),rt?lr(rt,h.locale)??null:null},[S,N,nn,h.templateIdentifier,h.locale,_]),[Un,ii]=w.useState({}),ud=["fontSize","color","fontStyle","textDecoration","textAlign","letterSpacing","lineHeight","fontFamily"];w.useEffect(()=>{if(!N||!e||typeof MutationObserver>"u"){ii({});return}const de=`[data-editor-path="${So(N.domPath)}"]`,Ae=()=>{const rt=e.querySelector(de);if(!rt)return;const bt={};for(const wt of ud){const gt=rt.style.getPropertyValue(wt.replace(/([A-Z])/g,"-$1").toLowerCase());gt&&(bt[wt]=gt)}const Tt=g7(e,N.domPath)??void 0;ii({className:rt.className,style:bt,effectiveColor:Tt})};Ae();const Me=e.querySelector(de);if(!Me)return;const Ue=new MutationObserver(Ae);return Ue.observe(Me,{attributes:!0,attributeFilter:["class","style"]}),Ue.observe(e,{childList:!0,subtree:!0}),()=>Ue.disconnect()},[N?.path?rs(N.path):null,e]);const da=w.useCallback((de,Ae)=>{if(!S||!N)return;const Me=N.path;let Ue=[],rt=null;S.patchLayout(bt=>(Ue=Ar({children:bt},Me,gt=>{const _t=Ae(gt);return rt=typeof _t.name=="string"?_t.name:null,_t}).children??[],Ue)),_.push({actionKind:"inline_text_edit",label:`inline_format ${de}`,snapshot:Ue}),Xu({source:"style_control",componentPath:rs(Me),componentName:rt,patchKey:de,timestamp:Date.now()})},[S,N,_]),Dn=w.useMemo(()=>{const de=I.selectedPath;if(!de||!E)return null;const Ae=[];let Me=de;for(;Me;){Ae.push(Me);const Ue=Me.match(/^(.*)\.children\.\d+$/);Me=Ue?Ue[1]:null}for(const Ue of Ae){const rt=An(Ue);if(!rt)continue;const bt=en(E,rt),Tt=typeof bt?.name=="string"?bt.name:null;if(!Tt)continue;const wt=Gh(o,Tt),gt=wt?.canvasOverlay?.kind;if(typeof gt!="string"||!gt||!bt)continue;const _t=wt.canvasOverlay.params&&typeof wt.canvasOverlay.params=="object"?wt.canvasOverlay.params:void 0,Kt=Ue===de?null:de.slice(Ue.length+1);return{kind:gt,params:_t,tablePath:Ue,tableNode:bt,selectedCellRel:Kt}}return null},[I.selectedPath,E,o]),js=Dn?AK(Dn.kind):null,wl=w.useMemo(()=>!js||!e||!Dn?null:fl(e,Dn.tablePath),[js,e,Dn,H,j]),vs=w.useMemo(()=>{if(!js||!e||!Dn)return[];const de=Dn.tablePath,Ae=So(de),Me=[];return e.querySelectorAll(`[data-editor-path^="${Ae}.children."]`).forEach(bt=>{const Tt=bt.dataset.editorPath??"";if(!Tt.startsWith(de+"."))return;const wt=Tt.slice(de.length+1),gt=dl(bt,e);gt&&Me.push({path:wt,top:gt.top,left:gt.left,width:gt.width,height:gt.height})}),e.querySelectorAll(`[data-editor-item-path^="${Ae}."]`).forEach(bt=>{const Tt=bt.dataset.editorItemPath??"";if(!Tt.startsWith(de+"."))return;const wt=Tt.slice(de.length+1),gt=dl(bt,e);gt&&Me.push({path:wt,top:gt.top,left:gt.left,width:gt.width,height:gt.height})}),Me},[js,e,Dn,H,j]),ua=w.useCallback(de=>{const Ae=Dn?An(Dn.tablePath):null;if(!S||!Ae)return;let Me=[];S.patchLayout(Ue=>(Me=Ar({children:Ue},Ae,()=>de).children??[],Me)),_.push({actionKind:"inline_text_edit",label:"inplace_edit",snapshot:Me}),Xu({source:"style_control",componentPath:Dn?.tablePath??"",componentName:typeof de.name=="string"?de.name:null,patchKey:"canvas_inplace",timestamp:Date.now()})},[S,ce,_]);return e?a.jsxs("div",{className:"g7le-editor-canvas-overlay","data-testid":"g7le-editor-canvas-overlay",style:{position:"absolute",inset:0,pointerEvents:"none"},children:[!F&&os(),F&&a.jsxs("div",{"data-testid":"g7le-canvas-pick-banner",style:{position:"absolute",top:8,left:"50%",transform:"translateX(-50%)",zIndex:9999,display:"flex",alignItems:"center",gap:12,padding:"8px 14px",background:"#1e293b",color:"#fff",borderRadius:8,fontSize:13,boxShadow:"0 4px 12px rgba(0,0,0,0.25)",pointerEvents:"auto"},children:[a.jsxs("span",{children:["🎯 ",x("layout_editor.target_picker.canvas_pick_hint")]}),a.jsx("button",{type:"button","data-testid":"g7le-canvas-pick-cancel",onClick:()=>re(F,null),style:{border:"1px solid #475569",borderRadius:6,background:"transparent",color:"#cbd5e1",cursor:"pointer",fontSize:12,padding:"3px 10px"},children:x("layout_editor.target_picker.cancel")})]}),h.editMode!=="route"&&a.jsx(gq,{frameEl:e,components:j,editMode:h.editMode,currentExtensionId:T,editableRootPath:D}),N&&((N.isParamKey&&N.customKey||N.chipValue)&&nn?a.jsxs(a.Fragment,{children:[nn&&a.jsx(u7,{node:nn,spec:o,t:x,onApplyControl:da,box:N.box,scope:{colorScheme:h.previewColorScheme==="dark"?"dark":"base",breakpoint:Of(h.previewDevice,nn,h.previewCustomWidth)}}),a.jsx(VK,{box:N.box,node:nn,customKey:N.customKey??null,initialChipValue:N.chipValue,chipParamLabels:N.chipParamLabels,onKeyify:vl,templateIdentifier:h.templateIdentifier,locale:h.locale,t:x,candidates:Wn,onInsertBinding:Eo,onRemoveBinding:Jn,onCommit:xl,onCancel:bl})]}):a.jsxs(a.Fragment,{children:[nn&&a.jsx(u7,{node:nn,spec:o,t:x,onApplyControl:da,box:N.box,scope:{colorScheme:h.previewColorScheme==="dark"?"dark":"base",breakpoint:nn?Of(h.previewDevice,nn,h.previewCustomWidth):"base"}}),a.jsx(FK,{box:N.box,initialValue:N.initialValue,isCustomKey:N.isCustomKey,t:x,onCommit:oo,onCancel:bl,mirrorClassName:Un.className,mirrorStyle:Un.style,nodeEffectiveColor:Un.effectiveColor??N.nodeEffectiveColor,onOpenTranslations:dd})]})),!F&&a.jsx(HU,{hoverBox:W,selectedBox:H,lockKind:I.selectedLockKind,navAffordance:I.selectedNavAffordance,onEditProps:cr,onDuplicate:jt,onDelete:At,onSeparateBranch:Rt?.mode==="separate"?xe:void 0,separateBranchLabel:ke?.separate,onMergeBranch:Rt?.mode==="merge"?We:void 0,mergeBranchLabel:ke?.merge,definedDeviceBranches:ge,onJumpToDevice:ge.length>0?X:void 0,onLinkEditDestination:Ye,onEditBase:it,onEditExtension:ot,extensionLabel:ft,baseLayoutLabel:I.selectedBaseLayout,dataSourceLabel:I.selectedDataSourceId,branchLabel:be,onEditIteration:I.selectedIsIteration&&h.editMode!=="iteration_item"?tt:void 0,resizeEnabledAxes:Is.enabledAxes,onResizeHandlePointerDown:Is.enabledAxes.width||Is.enabledAxes.height?Nn:void 0,selectedName:mt,onSelectParent:pe?je:void 0}),F&&U&&a.jsx("div",{"data-testid":"g7le-canvas-pick-hover","data-pick-has-id":U.hasId?"true":"false",style:{position:"absolute",left:U.box.left,top:U.box.top,width:U.box.width,height:U.box.height,pointerEvents:"none",zIndex:9998,boxSizing:"border-box",border:U.hasId?"2px solid #2563eb":"2px dashed #94a3b8",background:U.hasId?"rgba(37,99,235,0.10)":"repeating-linear-gradient(45deg, rgba(148,163,184,0.18) 0, rgba(148,163,184,0.18) 6px, transparent 6px, transparent 12px)",cursor:U.hasId?"pointer":"not-allowed"},children:!U.hasId&&a.jsx("span",{"data-testid":"g7le-canvas-pick-hover-hint",style:{position:"absolute",top:0,left:0,transform:"translateY(-100%)",background:"#475569",color:"#fff",fontSize:11,lineHeight:1.4,padding:"2px 6px",borderRadius:4,whiteSpace:"nowrap"},children:x("layout_editor.target_picker.needs_id")})}),!F&&a.jsx(KU,{selectedBox:Ot,points:xt.points,onAddRequest:tn}),js&&Dn&&wl&&I.selectedLockKind==="none"&&a.jsx(js,{node:Dn.tableNode,params:Dn.params,nodeBox:wl,cellBoxes:vs,selectedCellPath:Dn.selectedCellRel??void 0,colorScheme:h.previewColorScheme==="dark"?"dark":"light",t:x,onPatchNode:ua,onInsertChild:Je,onRemoveChild:de=>{const Ae=An(de);if(!S||!Ae)return;let Me=[];S.patchLayout(Ue=>(Me=dm({children:Ue},Ae).children??[],Me)),_.push({actionKind:"remove",label:"inplace_remove",snapshot:Me})},onRequestInlineEdit:de=>{Dn&&ee(`${Dn.tablePath}.${de}`)}}),S&&a.jsx(lq,{frameEl:e,nesting:s,editMode:h.editMode,currentExtensionId:T,editableRootPath:D,components:j,patchLayout:S.patchLayout,pushHistory:Re,selectedPath:I.selectedPath,onSelectPath:de=>I.handleSelect("",{dataset:{editorPath:de}}),onMovePath:de=>I.handleSelect("",{dataset:{editorPath:de}}),onRequestInlineEdit:ee})]}):null}function p7(n,e){if(e.length===0)return null;const s=Ly({children:n},e);return s&&typeof s.name=="string"?s.name:null}function Ly(n,e){return en(n,e)}function So(n){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(n):n.replace(/[^a-zA-Z0-9_\-.]/g,e=>`\\${e}`)}function g7(n,e){if(!e)return null;const t=n.querySelector(`[data-editor-path="${So(e)}"]`);if(!t||typeof window.getComputedStyle!="function")return null;let s=t;const r=t.ownerDocument.createTreeWalker(t,NodeFilter.SHOW_TEXT);let o=r.nextNode();for(;o;){if((o.textContent??"").trim().length>0){const l=o.parentElement;if(l&&t.contains(l)){s=l;break}}o=r.nextNode()}try{return window.getComputedStyle(s).color||null}catch{return null}}function fl(n,e){if(!e)return null;const t=n.querySelector(`[data-editor-path="${So(e)}"]`);if(t){const f=dl(t,n);return f&&ul(f,n)?f:null}const s=n.querySelectorAll(`[data-editor-path^="${So(e)}.iteration."]`);let r=1/0,o=1/0,l=-1/0,d=-1/0,u=!1;return s.forEach(f=>{const g=f.dataset.editorPath??"";if(!new RegExp("\\.iteration\\.\\d+$").test(g))return;const h=dl(f,n);h&&ul(h,n)&&(u=!0,r=Math.min(r,h.left),o=Math.min(o,h.top),l=Math.max(l,h.left+h.width),d=Math.max(d,h.top+h.height))}),u?{left:r,top:o,width:l-r,height:d-o,scale:1}:null}function eG({isEditMode:n,editorSpec:e,sampleOverride:t}){const s=e?.sampleData;return w.useMemo(()=>f4({spec:s,overrideSpec:t,onMatch:r=>{SL(r)}}),[n,s,t])}function tG(n){return n.split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join("")}async function nG(n){const e=typeof window<"u"?window.localStorage?.getItem("auth_token"):null,t={Accept:"application/json"};e&&(t.Authorization=`Bearer ${e}`);const s=await fetch(`/api/admin/templates/${encodeURIComponent(n)}/editor-assets`,{headers:t,credentials:"same-origin"});if(!s.ok){const o=await s.json().catch(()=>null);throw zf(s.status,o,"assets")}const r=await s.json();return r.data||r}async function sG(n){try{if(typeof fetch!="function")return 0;const e=await fetch(`/api/templates/${encodeURIComponent(n)}/config.json`,{credentials:"same-origin",headers:{Accept:"application/json"}});if(!e.ok)return 0;const t=await e.json().catch(()=>null),s=t?.data?.cache_version??t?.cache_version;return typeof s=="number"&&s>0?s:0}catch{return 0}}function rG(n){return new Promise((e,t)=>{if(typeof document>"u"){t(new Error("document undefined"));return}if(document.querySelector(`script[data-g7le-asset="${n}"]`)){e();return}const r=document.createElement("script");r.src=n,r.async=!1,r.setAttribute("data-g7le-asset",n),r.addEventListener("load",()=>e()),r.addEventListener("error",()=>t(new Error(`script load failed: ${n}`))),document.head.appendChild(r)})}async function oG(n){if(typeof document>"u")return;const e=`[data-g7le-asset="${n}"]`;if(document.querySelector(`link${e}, style${e}`))return;if(n.includes("/api/admin/"))try{const r=typeof window<"u"?window.localStorage?.getItem("auth_token"):null,o={Accept:"text/css"};r&&(o.Authorization=`Bearer ${r}`);const l=await fetch(n,{headers:o,credentials:"same-origin"});if(l.ok){const d=await l.text(),u=document.createElement("style");u.textContent=d,u.setAttribute("data-g7le-asset",n),document.head.appendChild(u);return}}catch{}const s=document.createElement("link");s.rel="stylesheet",s.href=n,s.setAttribute("data-g7le-asset",n),document.head.appendChild(s)}function aG(n,e,t="user"){const[s,r]=w.useState({componentRegistry:null,translationEngine:null,isReady:!1,error:null});return w.useEffect(()=>{let o=!1;return(async()=>{r(l=>({...l,isReady:!1,error:null}));try{const l=await nG(n);if(o)return;for(const b of l.css??[])if(await oG(b),o)return;const d=tG(n);if(!(typeof window<"u"&&typeof window[d]=="object")){for(const b of l.js??[])if(await rG(b),o)return}const f=xr.createIsolatedInstance();if(await f.loadComponents(n,t),o)return;const g=await sG(n);if(o)return;const h=new ts({defaultLocale:e});if(g>0&&h.setCacheVersion(g),await h.loadTranslations(n,e),o)return;X_(h,n);try{const b=ts.getInstance();g>b.getCacheVersion()&&b.setCacheVersion(g),await b.loadTranslations(n,e),X_(b,n)}catch{}if(o)return;r({componentRegistry:f,translationEngine:h,isReady:!0,error:null})}catch(l){if(o)return;const d=F1(l)?l:cl(l,"assets");r({componentRegistry:null,translationEngine:null,isReady:!1,error:d})}})(),()=>{o=!0}},[n,e,t]),s}function iG(n){switch(n){case"unauthorized":return{icon:"🔒",tone:"blue",titleKey:"layout_editor.access_error.unauthorized.title",messageKey:"layout_editor.access_error.unauthorized.message",showRequiredPermissions:!0};case"forbidden":return{icon:"⛔",tone:"rose",titleKey:"layout_editor.access_error.forbidden.title",messageKey:"layout_editor.access_error.forbidden.message",showRequiredPermissions:!0};case"not_found":return{icon:"🗂️",tone:"slate",titleKey:"layout_editor.access_error.not_found.title",messageKey:"layout_editor.access_error.not_found.message",showRequiredPermissions:!1};case"server_error":return{icon:"🛠️",tone:"amber",titleKey:"layout_editor.access_error.server_error.title",messageKey:"layout_editor.access_error.server_error.message",showRequiredPermissions:!1};case"network":return{icon:"📡",tone:"amber",titleKey:"layout_editor.access_error.network.title",messageKey:"layout_editor.access_error.network.message",showRequiredPermissions:!1};default:return{icon:"⚠️",tone:"slate",titleKey:"layout_editor.access_error.unknown.title",messageKey:"layout_editor.access_error.unknown.message",showRequiredPermissions:!1}}}const lG={blue:{bg:"#eff6ff",border:"#bfdbfe",iconBg:"#dbeafe"},rose:{bg:"#fff1f2",border:"#fecdd3",iconBg:"#ffe4e6"},amber:{bg:"#fffbeb",border:"#fde68a",iconBg:"#fef3c7"},slate:{bg:"#f8fafc",border:"#e2e8f0",iconBg:"#f1f5f9"}};function cG({error:n}){return w.useEffect(()=>{if(n.kind!=="unauthorized"||typeof window>"u")return;const e=rr.getInstance(),t=`${window.location.pathname}${window.location.search}`,s=e.getLoginRedirectUrl("admin",t,"session_expired"),r=window.setTimeout(()=>{window.location.href=s},600);return()=>window.clearTimeout(r)},[n.kind]),null}function Oy({error:n}){const{t:e}=Mn(),t=iG(n.kind),s=lG[t.tone],r=()=>{typeof window<"u"&&(window.location.href="/admin")},o=()=>{typeof window<"u"&&window.location.reload()},l=()=>{if(typeof window>"u")return;const d=rr.getInstance(),u=`${window.location.pathname}${window.location.search}`;window.location.href=d.getLoginRedirectUrl("admin",u)};return a.jsxs("div",{className:"g7le-access-error","data-testid":"g7le-access-error","data-error-kind":n.kind,style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",padding:24,background:"#f1f5f9"},children:[a.jsx(cG,{error:n}),a.jsxs("div",{style:{maxWidth:480,width:"100%",background:s.bg,border:`1px solid ${s.border}`,borderRadius:12,padding:"28px 32px",boxShadow:"0 2px 8px rgba(15, 23, 42, 0.05)",textAlign:"center"},children:[a.jsx("div",{style:{width:64,height:64,margin:"0 auto 16px",borderRadius:"50%",background:s.iconBg,display:"flex",alignItems:"center",justifyContent:"center",fontSize:32,lineHeight:1},"aria-hidden":"true",children:t.icon}),a.jsx("h2",{"data-testid":"g7le-access-error-title",style:{margin:"0 0 8px",fontSize:18,fontWeight:700,color:"#0f172a"},children:e(t.titleKey)}),a.jsx("p",{"data-testid":"g7le-access-error-message",style:{margin:"0 0 16px",fontSize:13,lineHeight:1.6,color:"#475569"},children:e(t.messageKey)}),t.showRequiredPermissions&&n.requiredPermissions&&a.jsxs("div",{"data-testid":"g7le-access-error-permissions",style:{display:"inline-flex",flexWrap:"wrap",gap:6,justifyContent:"center",padding:"8px 12px",marginBottom:16,background:"rgba(15, 23, 42, 0.04)",borderRadius:8,fontSize:12,color:"#475569"},children:[a.jsx("span",{style:{fontWeight:600},children:e("layout_editor.access_error.required_permission_label")}),n.requiredPermissions.split(/[,\s]+/).filter(Boolean).map(d=>a.jsx("code",{style:{padding:"2px 6px",background:"#fff",border:"1px solid #e2e8f0",borderRadius:4,fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",fontSize:11,color:"#1e293b"},children:d},d))]}),n.message&&a.jsxs("details",{"data-testid":"g7le-access-error-detail",style:{marginBottom:16,fontSize:11,color:"#94a3b8"},children:[a.jsx("summary",{style:{cursor:"pointer"},children:e("layout_editor.access_error.detail_summary")}),a.jsxs("pre",{style:{marginTop:8,padding:8,background:"#fff",border:"1px solid #e2e8f0",borderRadius:6,overflowX:"auto",whiteSpace:"pre-wrap",wordBreak:"break-word",textAlign:"left",fontSize:11,color:"#475569"},children:[n.status>0?`HTTP ${n.status}
`:"",n.message]})]}),a.jsxs("div",{style:{display:"flex",justifyContent:"center",gap:8,flexWrap:"wrap"},children:[n.kind==="unauthorized"&&a.jsx("button",{type:"button","data-testid":"g7le-access-error-action-signin",onClick:l,style:My,children:e("layout_editor.access_error.action.sign_in")}),n.kind==="forbidden"&&a.jsx("button",{type:"button","data-testid":"g7le-access-error-action-home",onClick:r,style:My,children:e("layout_editor.access_error.action.go_home")}),(n.kind==="not_found"||n.kind==="server_error"||n.kind==="network"||n.kind==="unknown")&&a.jsx("button",{type:"button","data-testid":"g7le-access-error-action-retry",onClick:o,style:My,children:e("layout_editor.access_error.action.retry")}),n.kind!=="unauthorized"&&a.jsx("button",{type:"button","data-testid":"g7le-access-error-action-home-secondary",onClick:r,style:dG,children:e("layout_editor.access_error.action.go_admin_home")})]})]})]})}const My={padding:"8px 16px",background:"#2563eb",color:"#fff",border:"1px solid #1d4ed8",borderRadius:6,fontSize:13,fontWeight:600,cursor:"pointer"},dG={padding:"8px 16px",background:"#fff",color:"#475569",border:"1px solid #cbd5e1",borderRadius:6,fontSize:13,fontWeight:500,cursor:"pointer"};function uG(n){const e=window;if(typeof e>"u")return{getSnapshot:()=>({globalState:{},localState:{}}),restore:()=>{}};const t=e.G7Core||{},s={templateApp:e.__templateApp,g7CoreState:t.state,g7CoreDispatch:t.dispatch,g7CoreData:t.data,g7CoreModal:t.modal,g7CoreToast:t.toast};let r={...n.initialGlobalState??{}};r._local||(r._local={});const o=[],l=()=>{const f={globalState:{...r},localState:{...r._local??{}}};for(const g of o)try{g(r)}catch{}n.onChange?.(f)},d={},u={getGlobalState:()=>r,setGlobalState:(f,g)=>{typeof f=="function"?r=f(r):r={...r,...f},l()},onGlobalStateChange:f=>(o.push(f),()=>{const g=o.indexOf(f);g>=0&&o.splice(g,1)}),get globalState(){return r},getActionDispatcher:()=>n.actionDispatcher,getDataSource:f=>d[f]??null,setDataSource:(f,g)=>{d[f]=g},refetchDataSource:async f=>null,updateDataSourceItem:(f,g,h)=>d[f]??null,getLocale:()=>n.locale,changeLocale:f=>{},getRouter:()=>({navigate:()=>{},replace:()=>{},push:()=>{}}),updateQueryParams:()=>{}};return e.__templateApp=u,t&&typeof t.dispatch=="function"&&(t.dispatch=(f,g)=>{try{return n.actionDispatcher.executeAction(f,g??{})}catch{return}}),t&&typeof t.modal=="object"&&t.modal!==null&&(t.modal={...t.modal,open:()=>{},close:()=>{},closeAll:()=>{}}),t&&typeof t.toast=="object"&&t.toast!==null&&(t.toast={...t.toast,push:()=>{},dismiss:()=>{}}),{getSnapshot:()=>({globalState:{...r},localState:{...r._local??{}}}),restore:()=>{e.__templateApp===u&&(e.__templateApp=s.templateApp),e.G7Core&&(s.g7CoreState!==void 0&&(e.G7Core.state=s.g7CoreState),s.g7CoreDispatch!==void 0&&(e.G7Core.dispatch=s.g7CoreDispatch),s.g7CoreData!==void 0&&(e.G7Core.data=s.g7CoreData),s.g7CoreModal!==void 0&&(e.G7Core.modal=s.g7CoreModal),s.g7CoreToast!==void 0&&(e.G7Core.toast=s.g7CoreToast)),o.length=0}}}const fG=new Set(["id","userId","postId","orderId","productId","categoryId","commentId","noticeId","inquiryId","addressId","wishlistId","notificationId","roleId","menuId"]);function pG(n){if(!n)return{};const e={},t=/:([a-zA-Z_][a-zA-Z0-9_]*)/g;let s;for(;(s=t.exec(n))!==null;){const r=s[1];e[r]=gG(r)}return e}function gG(n){return fG.has(n)||/Id$|_id$/.test(n)?"1":"sample"}const hG=Ht("LayoutEditor");function Zc(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Xf(n){if(Array.isArray(n))return n.map(e=>Xf(e));if(Zc(n)){const e={};for(const[t,s]of Object.entries(n))e[t]=Xf(s);return e}return n}function h7(n,e="",t=new Set){for(const[s,r]of Object.entries(n)){const o=e?`${e}.${s}`:s;Zc(r)?h7(r,o,t):t.add(o)}return t}function m7(n,e,t,s,r,o=""){for(const[l,d]of Object.entries(e)){const u=o?`${o}.${l}`:l;if(t.has(u)){r(`[LayoutEditor] sampleGlobal key conflict: extension '${s}' override of core key '${u}' ignored`);continue}const f=n[l];Zc(d)&&Zc(f)?m7(f,d,t,s,r,u):n[l]=Xf(d)}}function zy(n){const e=n.warn??(r=>hG.warn(r)),t=Xf(n.coreSeed??{});n.isGuestOnly&&"currentUser"in t&&delete t.currentUser;const s=h7(t);for(const r of n.sources)Zc(r.sampleGlobal)&&m7(t,r.sampleGlobal,s,r.id,e);return n.isGuestOnly&&"currentUser"in t&&delete t.currentUser,t}function mG(n){const e={};if(!n||typeof n!="object"||Array.isArray(n))return e;for(const[t,s]of Object.entries(n))t.startsWith("$")&&(e[t]=s);return e}function yG(n){const e={};if(!n||typeof n!="object"||Array.isArray(n))return e;for(const[t,s]of Object.entries(n))t.startsWith("$")||(e[t]=s);return e}function bG(n){if(typeof n!="string")return null;const e=/^\s*\{\{\s*([\s\S]*?)\s*\}\}\s*$/.exec(n);if(!e)return null;let t=e[1];const s=t.indexOf("??");return s>=0&&(t=t.slice(0,s)),t=t.replace(/\?\./g,".").replace(/\s+/g,""),t===""||!/^[A-Za-z_$][A-Za-z0-9_$]*(\.[A-Za-z_$][A-Za-z0-9_$]*)*$/.test(t)?null:t.split(".")}function xG(n,e){const t=bG(e);if(!t||t.length===0)return n;let s=n;for(let l=0;l<t.length;l++){if(s==null||typeof s!="object")return n;s=s[t[l]]}if(!Array.isArray(s)||s.length<=1)return n;const r={...n};let o=r;for(let l=0;l<t.length-1;l++){const d=t[l],u=o[d];if(u==null||typeof u!="object")return n;o[d]=Array.isArray(u)?[...u]:{...u},o=o[d]}return o[t[t.length-1]]=s.slice(0,1),r}const vG="SlotContainer";function y7(n,e=new Set){for(const t of n){if(!t||typeof t!="object")continue;const s=t;if(s.name===vG){const r=s.props?.slotId;typeof r=="string"&&e.add(r)}Array.isArray(s.children)&&y7(s.children,e)}return e}function wG(n){const e=y7(n),t=s=>s.map(r=>{if(!r||typeof r!="object")return r;const o=r;let l=o;if(typeof o.slot=="string"&&!e.has(o.slot)){const{slot:d,...u}=o;l={...u,__editorSlotName:d}}if(Array.isArray(l.children)){const d=t(l.children);d!==l.children&&(l={...l,children:d})}return l});return t(n)}function Ns(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function to(n){if(Array.isArray(n))return n.map(e=>to(e));if(Ns(n)){const e={};for(const[t,s]of Object.entries(n))e[t]=to(s);return e}return n}function Jf(n,e){for(const[t,s]of Object.entries(e)){const r=n[t];Ns(s)&&Ns(r)?Jf(r,s):n[t]=to(s)}}function _G(n){const e=[];let t="";for(let s=0;s<n.length;s+=1){const r=n[s];if(r==="["){t.length>0&&(e.push(t),t="");const o=n[s+1];if(o==="'"||o==='"'){const d=n.indexOf(`${o}]`,s+2);if(d!==-1){e.push(n.slice(s+2,d)),s=d+1;continue}}const l=n.indexOf("]",s+1);if(l!==-1){e.push(n.slice(s+1,l)),s=l;continue}t+=r}else r==="."?t.length>0&&(e.push(t),t=""):t+=r}return t.length>0&&e.push(t),e.filter(s=>s.length>0)}function Py(n,e,t){const s=_G(e);if(s.length===0)return;let r=n;for(let o=0;o<s.length-1;o+=1){const l=s[o],d=r[l];if(Ns(d)){const u=to(d);r[l]=u,r=u}else{const u={};r[l]=u,r=u}}r[s[s.length-1]]=to(t)}function SG(n){const e=to(n.globalBaseline??{}),t=to(n.localBaseline??{}),s=to(n.queryBaseline??{}),r=to(n.routeBaseline??{});if(n.patch&&(Ns(n.patch.global)&&Jf(e,n.patch.global),Ns(n.patch.local)&&Jf(t,n.patch.local),Ns(n.patch.query)&&Jf(s,n.patch.query),Ns(n.patch.route)))for(const[o,l]of Object.entries(n.patch.route))l===null?delete r[o]:r[o]=to(l);if(Ns(n.formErrors))for(const[o,l]of Object.entries(n.formErrors))o.startsWith("_global.")?Py(e,o.slice(8),l):o.startsWith("_local.")?Py(t,o.slice(7),l):Py(t,o,l);return{global:e,local:t,query:s,route:r}}function b7(n){if(!n||!Ns(n.sampleDataOverrides))return;const e=n.sampleDataOverrides;return Ns(e.byDataSourceId)||Ns(e.byEndpointPattern)||Ns(e.bySource)?e:void 0}function By(n){if(!n||!Ns(n.formErrors))return;const e=n.formErrors;return Object.keys(e).length>0?e:void 0}const Hy="g7le:editor-t-ready",x7="data-g7le-vh-expanded";function kG(n,e){if(!n||!e)return;const t=e;n.querySelectorAll("*").forEach(r=>{const o=window.getComputedStyle(r),l=parseFloat(o.height),d=Number.isFinite(l)&&Math.abs(l-t)<=2,u=parseFloat(o.minHeight),f=Number.isFinite(u)&&Math.abs(u-t)<=2,g=o.overflowY==="auto"||o.overflowY==="scroll"||o.overflowY==="hidden"||o.overflow==="auto"||o.overflow==="scroll"||o.overflow==="hidden";d&&g?(r.style.setProperty("height","auto","important"),f&&r.style.setProperty("min-height","0","important"),r.style.setProperty("overflow","visible","important"),r.setAttribute(x7,"1")):(o.overflowY==="auto"||o.overflowY==="scroll")&&r.scrollHeight>r.clientHeight+4&&r.clientHeight>120&&(r.style.setProperty("overflow","visible","important"),r.style.setProperty("height","auto","important"),r.setAttribute(x7,"1"))})}const CG=[];function jG(n={}){const{manifest:e=null,nesting:t=null,componentPalette:s=null,spec:r=null,permissionCandidates:o,sampleGlobalSources:l=CG,resolveRouteMatch:d,onNavigateToDestination:u,onSessionAddedPathsChange:f}=n,{state:g}=Rn(),h=Gr(),b=tC(),{document:y,isLoading:v,error:x}=h??b,S=w.useRef(null),[_,A]=w.useState(null),{deviceWidth:C,scale:j,colorScheme:E}=Iy(),T=w.useMemo(()=>g.activeStateId?g.availableStates.find(Le=>Le.id===g.activeStateId)??null:null,[g.activeStateId,g.availableStates]),D=w.useMemo(()=>b7(T),[T]),I=eG({isEditMode:!0,editorSpec:r??void 0,sampleOverride:D}),{t:W}=Mn(),{componentRegistry:z,translationEngine:H,isReady:G,error:F}=aG(g.templateIdentifier,g.locale),Z=w.useRef(null);Z.current===null&&(Z.current=new ms);const Y=w.useRef(null);if(Y.current===null){Y.current=new yc({navigate:()=>{}}),Y.current.setPreviewMode(!0);try{const He=window.__templateApp?.getActionDispatcher?.();if(He&&typeof He.getRegisteredHandlers=="function"){const Ve=He.getRegisteredHandlers();for(const Je of Ve){if(!Je.includes("."))continue;const jt=typeof He.getHandler=="function"?He.getHandler(Je):void 0;typeof jt=="function"&&Y.current.registerHandler(Je,jt,{category:"plugin",source:"preview-canvas-cloned-from-host"})}}}catch{}}w.useEffect(()=>{if(!G)return;const Le=Y.current;if(Le)try{const He=window.G7Core?.getActionDispatcher?.();if(!He||typeof He.getRegisteredHandlers!="function")return;const Ve=He.getRegisteredHandlers();for(const Je of Ve){if(!Je.includes(".")||typeof Le.getHandler=="function"&&Le.getHandler(Je))continue;const jt=typeof He.getHandler=="function"?He.getHandler(Je):void 0;typeof jt=="function"&&Le.registerHandler(Je,jt,{category:"plugin",source:"preview-canvas-iife-reclone"})}}catch{}},[G]);const U=w.useMemo(()=>new Rr({sampleProvider:I,actionDispatcher:Y.current}),[I]),B=w.useMemo(()=>y?.raw?.meta?.guest_only===!0,[y]),te=w.useMemo(()=>zy({sources:l,isGuestOnly:B}),[l,B]),q=w.useMemo(()=>{const Le=EG(By(T),H,{templateId:g.templateIdentifier,locale:g.locale}),He=te._local,{global:Ve,local:Je}=SG({globalBaseline:te,localBaseline:He??{},patch:T?.initialState??null,formErrors:Le});return{...Ve,_local:Je}},[te,T,H,g.templateIdentifier,g.locale]),M=w.useMemo(()=>!T||!(!!T.initialState?.local||!!By(T))?null:{...q._local??{},_forceLocalInit:T.id,_merge:"deep"},[T,q]),N=Le=>typeof Le=="object"&&Le!==null&&!Array.isArray(Le),V=w.useMemo(()=>N(T?.initialState?.query)?T.initialState.query:null,[T]),ee=w.useMemo(()=>N(T?.initialState?.route)?T.initialState.route:null,[T]),[se,re]=w.useState(()=>zy({sources:[],isGuestOnly:!1})),pe=w.useRef(null);w.useEffect(()=>{const Le={...q},He=uG({actionDispatcher:Y.current,locale:g.locale,initialGlobalState:Le,onChange:Je=>{re(Je.globalState)}});pe.current=He;const Ve=window.__templateApp;return Ve?.setGlobalState&&Y.current.setGlobalStateUpdater((Je,jt)=>{Ve.setGlobalState(Je,jt)}),re(Le),p_({kind:"applyPatch",activeStateId:g.activeStateId,routePath:g.selectedRoute?.path??null,hasInitialPatch:!!T?.initialState,hasFormErrors:!!By(T),hasSampleOverride:!!b7(T)}),()=>{He.restore(),pe.current=null}},[g.locale,q]),w.useEffect(()=>{if(!H)return;const Le=window.G7Core;if(!Le||typeof Le.t!="function")return;const He=Le.t,Ve=g.templateIdentifier,Je=g.locale;return Le.t=(jt,At)=>{try{const Rt=At?"|"+Object.entries(At).map(([We,Q])=>`${We}=${Q}`).join("|"):void 0,xe=H.translate(jt,{templateId:Ve,locale:Je},Rt);if(xe!==jt&&!xe.startsWith("$t:"))return xe}catch{}return He(jt,At)},typeof window<"u"&&window.dispatchEvent(new CustomEvent(Hy)),()=>{window.G7Core?.t&&window.G7Core.t!==He&&(window.G7Core.t=He)}},[H,g.templateIdentifier,g.locale]);const je=w.useMemo(()=>{const Le=y?.raw?.components??[];return g.editMode!=="base"?Le:wG(Le)},[y,g.editMode]),me=y?.raw?.__editability,ce=y?.raw?.__extensionId,be=w.useMemo(()=>g.editMode!=="extension"||me!=="ok"?[]:typeof ce!="number"?[]:RG(je,ce),[g.editMode,me,ce,je]),[Be,fe]=w.useState(null),[De,Fe]=w.useState(!1),mt=y?.layoutName??null,ft=w.useMemo(()=>{const Le=y?.raw?.scripts??[];return Array.isArray(Le)?Le.map(He=>He&&typeof He.src=="string"?He.src:"").join("|"):""},[y]);w.useEffect(()=>{Fe(!1)},[mt,ft]),w.useEffect(()=>{let Le=!1;const He=y?.raw?.scripts??[];if(!Array.isArray(He)||He.length===0){Fe(!0);return}const Ve=[];for(const Je of He){if(!Je?.src||typeof Je.src!="string")continue;const jt=Je.id?`script#${CSS.escape(Je.id)}, script[data-g7le-canvas-script="${Je.src}"]`:`script[data-g7le-canvas-script="${Je.src}"], script[src="${Je.src}"]`,At=window.document.querySelector(jt);if(At){const Rt=At.hasAttribute("data-g7le-canvas-script");if(At.hasAttribute("data-g7le-script-loaded")||!Rt)continue;Ve.push(new Promise(We=>{if(At.hasAttribute("data-g7le-script-loaded")){We();return}At.addEventListener("load",()=>We()),At.addEventListener("error",()=>We())}));continue}Ve.push(new Promise(Rt=>{const xe=window.document.createElement("script");xe.src=Je.src,xe.async=!1,Je.id&&(xe.id=Je.id),xe.setAttribute("data-g7le-canvas-script",Je.src);const We=()=>{xe.setAttribute("data-g7le-script-loaded","1"),Rt()};xe.addEventListener("load",We),xe.addEventListener("error",We),window.document.head.appendChild(xe)}))}if(Ve.length===0){Fe(!0);return}return Promise.all(Ve).then(()=>{Le||requestAnimationFrame(()=>{requestAnimationFrame(()=>{Le||Fe(!0)})})}),()=>{Le=!0}},[y]);const xt=w.useMemo(()=>y?.raw?.data_sources??[],[y]),Ot=w.useMemo(()=>y?.raw?.computed??{},[y]),[St,kt]=w.useState({}),Vt=w.useMemo(()=>{if(g.editMode!=="iteration_item")return St;const Le=y?.iterationContext;if(!Le)return St;const He=y?.raw?.components??[],Ve=en({children:He},Le.sourceIndexPath),Je=Ve&&Ve.iteration&&typeof Ve.iteration.source=="string"?Ve.iteration.source:null;return Je?xG(St,Je):St},[g.editMode,St,y]),[Nt,tn]=w.useState(0);w.useEffect(()=>{if(typeof window>"u")return;const Le=()=>tn(He=>He+1);return window.addEventListener($s,Le),()=>window.removeEventListener($s,Le)},[]);const Qe=w.useMemo(()=>pG(g.selectedRoute?.path??null),[g.selectedRoute?.path]);if(w.useEffect(()=>{let Le=!1;return(async()=>{if(xt.length===0){Le||kt({});return}try{const He=await U.fetchDataSources(xt,Qe,new URLSearchParams,void 0,void 0);Le||kt(He)}catch{Le||kt({})}})(),()=>{Le=!0}},[xt,U,Qe]),w.useEffect(()=>{const Le=_;if(!Le||typeof window>"u")return;let He=0,Ve=0,Je=0;const jt=()=>kG(Le,window.innerHeight);He=window.requestAnimationFrame(()=>{Ve=window.requestAnimationFrame(jt)});let At=null;return typeof MutationObserver<"u"&&(At=new MutationObserver(()=>{Je||(Je=window.requestAnimationFrame(()=>{Je=0,jt()}))}),At.observe(Le,{childList:!0,subtree:!0})),()=>{window.cancelAnimationFrame(He),window.cancelAnimationFrame(Ve),Je&&window.cancelAnimationFrame(Je),At&&At.disconnect()}},[_,je,De,C,St]),w.useEffect(()=>{const Le=_;if(!Le||typeof window>"u"||g.editMode!=="extension"||me!=="ok"||be.length===0){fe(null);return}let He=0,Ve=0;const Je=We=>{if(!We)return!1;const Q=We.getBoundingClientRect();return Q.width>0&&Q.height>0},jt=We=>{const Q=Le.querySelector(`[data-editor-path="${We}"]`);if(Je(Q))return!0;const ke=Le.querySelectorAll(`[data-editor-path^="${We}.children."]`);for(const ge of Array.from(ke))if(Je(ge))return!0;return!1},At=()=>{fe(be.some(jt))};He=window.requestAnimationFrame(()=>{Ve=window.requestAnimationFrame(At)});let Rt=null,xe=0;return typeof MutationObserver<"u"&&(Rt=new MutationObserver(()=>{xe||(xe=window.requestAnimationFrame(()=>{xe=0,At()}))}),Rt.observe(Le,{childList:!0,subtree:!0})),()=>{window.cancelAnimationFrame(He),window.cancelAnimationFrame(Ve),xe&&window.cancelAnimationFrame(xe),Rt&&Rt.disconnect()}},[_,g.editMode,me,be,De,St]),w.useEffect(()=>{if(typeof window>"u"||g.editMode!=="base")return;const Le=window.document,He="g7le-base-slot-style";if(Le.getElementById(He))return;const Ve=Le.createElement("style");Ve.id=He;const Je=W("layout_editor.preview.slot_area_label");return Ve.textContent=`.g7le-preview-frame [data-editor-slot]{position:relative;min-height:96px;outline:2px dashed #94a3b8;outline-offset:-2px;}.g7le-preview-frame [data-editor-slot]::after{content:'${Je.replace(/'/g,"\\'")} · ' attr(data-editor-slot);position:absolute;top:8px;left:50%;transform:translateX(-50%);font-size:12px;line-height:1;color:#64748b;background:rgba(241,245,249,0.92);border:1px solid #cbd5e1;border-radius:9999px;padding:4px 12px;pointer-events:none;white-space:nowrap;}`,Le.head.appendChild(Ve),()=>{Le.getElementById(He)?.remove()}},[g.editMode,W]),!(g.editMode==="extension"||g.editMode==="iteration_item")&&(g.selectedRoute?.layoutName===null||g.selectedRoute===null))return a.jsx("div",{className:"g7le-preview-canvas g7le-preview-canvas--empty","data-testid":"g7le-preview-empty",style:Qc,children:W("layout_editor.preview.empty")});if(v)return a.jsx("div",{className:"g7le-preview-canvas g7le-preview-canvas--loading","data-testid":"g7le-preview-loading",style:Qc,children:W("layout_editor.preview.loading")});if(x)return a.jsx(Oy,{error:x});if(F)return a.jsx(Oy,{error:F});if(!G||z===null||H===null)return a.jsx("div",{className:"g7le-preview-canvas g7le-preview-canvas--assets-loading","data-testid":"g7le-preview-assets-loading",style:Qc,children:W("layout_editor.preview.assets_loading")});if(je.length===0)return a.jsx("div",{className:"g7le-preview-canvas g7le-preview-canvas--empty-layout","data-testid":"g7le-preview-empty-layout",style:Qc,children:W("layout_editor.preview.empty_layout")});const et=g.editMode==="extension"?me==="no-injection"?"no-injection":me==="ok"&&be.length>0&&Be!==!0?"gated-no-state":null:null;return De?a.jsx("div",{className:"g7le-preview-canvas","data-testid":"g7le-preview-canvas",style:{overflow:"visible",background:"#f1f5f9",padding:24,display:"flex",justifyContent:"center",alignItems:"flex-start",minHeight:"calc(100vh - var(--g7le-header-h, 0px))",boxSizing:"border-box"},children:a.jsxs("div",{className:"g7le-preview-frame-wrapper","data-testid":"g7le-preview-frame-wrapper",style:{position:"relative",width:C,transform:`scale(${j})`,transformOrigin:"top center"},children:[a.jsx("div",{className:E==="dark"?"g7le-preview-frame g7le-preview-dark":"g7le-preview-frame","data-testid":"g7le-preview-frame","data-color-scheme":E,ref:Le=>{S.current=Le,A(Le)},style:{width:C,background:"#fff",border:"1px solid #cbd5e1",boxShadow:"0 1px 3px rgba(0,0,0,0.05)",minHeight:400,position:"relative",transform:"translateZ(0)",overflow:"hidden"},children:a.jsx(Cu,{overrideWidth:C,children:je.map((Le,He)=>a.jsx(Kr,{componentDef:Le,dataContext:{...Vt,...mG(se),_global:yG(se),_computedDefinitions:Ot,...M?{_localInit:M,_local:{...St._local??{},...se._local??{}}}:{},route:AG({...St.route??{},...Qe,path:g.selectedRoute?.path??""},ee),query:{...St.query??{},...V??{}}},translationContext:{templateId:g.templateIdentifier,locale:g.locale},registry:z,bindingEngine:Z.current,translationEngine:ts.getInstance(),actionDispatcher:Y.current,isEditMode:!0,isRootRenderer:He===0,componentPath:`${He}`,onComponentSelect:(Ve,Je)=>{},onComponentHover:(Ve,Je)=>{}},`${Le.id??`preview-${He}`}:t${Nt}${g.editMode==="extension"?`:s${De?1:0}`:""}`))})}),a.jsx("div",{className:"g7le-overlay-layer","data-testid":"g7le-overlay-layer",style:{position:"absolute",left:0,top:0,width:C,height:_?_.getBoundingClientRect().height/(j||1):"100%",overflow:"visible",pointerEvents:"none"},children:a.jsx(QK,{frameEl:_,manifest:e,nesting:t,componentPalette:s,spec:r,permissionCandidates:o,resolveRouteMatch:d,onNavigateToDestination:u,onSessionAddedPathsChange:f})}),et!==null&&a.jsx("div",{className:"g7le-preview-canvas--extension-fallback","data-testid":"g7le-preview-extension-fallback","data-fallback-reason":et,style:{position:"absolute",left:0,top:0,right:0,bottom:0,minHeight:_?_.getBoundingClientRect().height/(j||1):400,background:"#f1f5f9",display:"flex",alignItems:"flex-start",justifyContent:"center",padding:24,boxSizing:"border-box",pointerEvents:"auto",zIndex:50},children:a.jsxs("div",{className:"g7le-extension-fallback-card",style:{maxWidth:440,textAlign:"center",position:"sticky",top:"calc(40vh - var(--g7le-header-h, 0px))"},children:[a.jsx("p",{className:"g7le-extension-fallback-title",style:{fontWeight:600,marginBottom:8,color:"#0f172a"},children:W(et==="no-injection"?"layout_editor.preview.extension_no_injection_title":"layout_editor.preview.extension_gated_title")}),a.jsx("p",{className:"g7le-extension-fallback-desc",style:{color:"#475569",lineHeight:1.6},children:et==="no-injection"?W("layout_editor.preview.extension_no_injection_desc"):g.availableStates.length>1?W("layout_editor.preview.extension_gated_desc_with_states"):W("layout_editor.preview.extension_gated_desc")})]})})]})}):a.jsx("div",{className:"g7le-preview-canvas g7le-preview-canvas--scripts-loading","data-testid":"g7le-preview-scripts-loading",style:Qc,children:W("layout_editor.preview.loading")})}function EG(n,e,t){if(!n)return;if(!e)return n;const s=o=>{if(typeof o=="string"&&o.startsWith("$t:"))try{const l=o.slice(3),d=l.indexOf("|");if(d===-1)return e.translate(l,t);const u=l.slice(0,d),f=l.slice(d);return e.translate(u,t,f)}catch{return o}return Array.isArray(o)?o.map(s):o},r={};for(const[o,l]of Object.entries(n))r[o]=s(l);return r}function RG(n,e){const t=[],s=(r,o)=>{Array.isArray(r)&&r.forEach((l,d)=>{if(!l||typeof l!="object")return;const u=o?`${o}.children.${d}`:`${d}`,f=l.__source;if(f?.kind==="extension"&&f.extensionId===e){t.push(u);return}Array.isArray(l.children)&&s(l.children,u)})};return s(n,""),t}function AG(n,e){if(!e)return n;const t={...n};for(const[s,r]of Object.entries(e))r===null?delete t[s]:t[s]=r;return t}const Qc={flex:1,display:"flex",alignItems:"center",justifyContent:"center",padding:24,background:"#f1f5f9",color:"#64748b",fontSize:13},TG={desktop:"layout_editor.device.desktop",tablet:"layout_editor.device.tablet",mobile:"layout_editor.device.mobile",portable:"layout_editor.device.portable"};function $G(){const{device:n,zoom:e,customWidth:t,setDevice:s,setZoom:r,setCustomWidth:o,colorScheme:l,setColorScheme:d}=Iy(),{t:u}=Mn(),f=FC();return a.jsxs("div",{className:"g7le-device-toolbar","data-testid":"g7le-device-toolbar",style:{display:"inline-flex",alignItems:"center",gap:8,padding:"4px 8px",background:"#fff",border:"1px solid #cbd5e1",borderRadius:6},children:[a.jsxs("div",{role:"group","aria-label":u("layout_editor.device.group_label"),children:[f.map(g=>{const h=n===g,b=TG[g],y=b?u(b):g;return a.jsx("button",{type:"button","data-testid":`g7le-device-${g}`,"aria-pressed":h,onClick:()=>s(g),style:{padding:"2px 8px",marginRight:2,fontSize:12,cursor:"pointer",background:h?"#0f172a":"#f8fafc",color:h?"#fff":"#0f172a",border:"1px solid #cbd5e1",borderRadius:4},children:y},g)}),(()=>{const g=n==="custom";return a.jsx("button",{type:"button","data-testid":"g7le-device-custom","aria-pressed":g,onClick:()=>s("custom"),style:{padding:"2px 8px",marginRight:2,fontSize:12,cursor:"pointer",background:g?"#0f172a":"#f8fafc",color:g?"#fff":"#0f172a",border:"1px solid #cbd5e1",borderRadius:4},children:u("layout_editor.device.custom")})})()]}),n==="custom"&&a.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[a.jsx("label",{htmlFor:"g7le-custom-width-input",style:{fontSize:11,color:"#475569"},children:u("layout_editor.device.custom_width_label")}),a.jsx("input",{id:"g7le-custom-width-input",type:"number",min:c7,max:d7,step:10,value:t,"data-testid":"g7le-custom-width-input","aria-label":u("layout_editor.device.custom_width_label"),onChange:g=>{const h=parseInt(g.currentTarget.value,10);Number.isFinite(h)&&o(h)},style:{width:72,padding:"2px 6px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:4}}),a.jsx("span",{style:{fontSize:11,color:"#475569"},children:"px"})]}),a.jsx("div",{role:"group","aria-label":u("layout_editor.toolbar.color_scheme_group"),style:{display:"inline-flex",gap:2},children:["light","dark"].map(g=>{const h=l===g;return a.jsx("button",{type:"button","data-testid":`g7le-toolbar-scheme-${g}`,"aria-pressed":h,onClick:()=>d(g),style:{padding:"2px 8px",fontSize:12,cursor:"pointer",background:h?"#0f172a":"#f8fafc",color:h?"#fff":"#0f172a",border:"1px solid #cbd5e1",borderRadius:4},children:u(g==="light"?"layout_editor.toolbar.color_scheme_light":"layout_editor.toolbar.color_scheme_dark")},g)})}),a.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[a.jsx("span",{style:{fontSize:11,color:"#475569"},children:u("layout_editor.zoom.label")}),a.jsx("input",{type:"range",min:.5,max:1,step:.05,value:e,"data-testid":"g7le-zoom-slider","aria-label":u("layout_editor.zoom.aria_label"),onChange:g=>r(parseFloat(g.currentTarget.value)),style:{width:100}}),a.jsxs("span",{style:{fontSize:11,color:"#475569",minWidth:36,textAlign:"right"},children:[Math.round(e*100),"%"]})]}),a.jsx(xM,{})]})}function NG(){const{t:n}=Mn(),{state:e,dispatch:t}=Rn(),{availableStates:s,activeStateId:r}=e,[,o]=w.useState(0);w.useEffect(()=>{if(typeof window>"u")return;const g=()=>o(b=>b+1),h=window.requestAnimationFrame(g);return window.addEventListener(Hy,g),()=>{window.cancelAnimationFrame(h),window.removeEventListener(Hy,g)}},[]);const l=w.useCallback((g,h)=>{if(!g)return h;if(!g.startsWith("$t:"))return g;const b=g.slice(3),y=window.G7Core;if(y&&typeof y.t=="function"){const x=y.t(b);if(x&&x!==b&&!x.startsWith("$t:"))return x}const v=n(b);return v&&v!==b?v:h},[n]);if(!Array.isArray(s)||s.length<=1)return null;const d=g=>{const h=g.target.value;t({type:"SET_ACTIVE_STATE",activeStateId:h}),p_({kind:"change",activeStateId:h,routePath:e.selectedRoute?.path??null,availableCount:s.length})},u=s.find(g=>g.id===r)??s[0],f=u?.description?l(u.description,""):"";return a.jsxs("div",{className:"g7le-state-switcher","data-testid":"g7le-state-switcher","data-active-state":r??"",style:{display:"inline-flex",alignItems:"center",gap:6,padding:"4px 8px",background:"#fff",border:"1px solid #cbd5e1",borderRadius:6},children:[a.jsx("span",{style:{fontSize:12,fontWeight:600,color:"#475569",whiteSpace:"nowrap"},children:n("layout_editor.toolbar.state")}),a.jsx("select",{"data-testid":"g7le-state-switcher-select","aria-label":n("layout_editor.toolbar.state"),value:r??s[0].id,onChange:d,style:{fontSize:12,padding:"2px 6px",border:"1px solid #cbd5e1",borderRadius:4,background:"#fff",color:"#0f172a",cursor:"pointer",outline:"none"},children:s.map(g=>a.jsx("option",{value:g.id,children:l(g.label,g.id)},g.id))}),f&&a.jsx("span",{"data-testid":"g7le-state-switcher-description",style:{fontSize:11,color:"#94a3b8",whiteSpace:"nowrap"},children:f})]})}function DG(n,e,t){if(n==="extension"){if(typeof t=="string"&&t.length>0){const s=Wy(t,"__base__/");return s?{kind:"base",match:s}:{kind:"route",match:t}}return null}if(!e)return null;switch(n){case"route":return{kind:"route",match:e};case"base":{const s=Wy(e,"__base__/");return s?{kind:"base",match:s}:null}case"modal":{const s=Wy(e,"__modal__/");return s?{kind:"modal",match:s}:null}default:return null}}function IG(n,e){if(!e||!Array.isArray(n)||n.length===0)return[];const t=[];for(const s of n)if(OG(s.scope,e))for(const r of s.items??[])r&&typeof r.id=="string"&&r.id.length>0&&t.push(r);return t}function LG(n){if(n.length===0)return null;const e=n.find(t=>t.default===!0);return e?e.id:n[0].id}function OG(n,e){if(!n||n.kind!==e.kind)return!1;const t=n.match;return typeof t!="string"||t.length===0?!1:e.kind==="route"?MG(e.match,t):t===e.match}function MG(n,e){if(e===n)return!0;if(!e.includes("*"))return!1;const t=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,"[^/]+");return new RegExp(`^${t}$`).test(n)}function Wy(n,e){return n.startsWith(e)?n.slice(e.length):""}const zG="__conngroup__/modals/",PG="__conngroup__/extensions/";function BG(n){return n.meta?.editor_label?{label:n.meta.editor_label,labelSource:"editor_label"}:n.meta?.title?{label:n.meta.title,labelSource:"title"}:{label:n.path,labelSource:"path"}}function HG(n){switch(n.source.kind){case"template":return"template";case"module":return`module:${n.source.identifier??""}`;case"plugin":return`plugin:${n.source.identifier??""}`;case"core":return null;default:return null}}function WG(n,e){if(n.meta?.parent&&e.has(n.meta.parent))return n.meta.parent;const t=n.path.split("/").filter(Boolean);for(let s=t.length-1;s>=1;s--){const r="/"+t.slice(0,s).join("/");if(r!==n.path&&e.has(r))return r}return null}function UG(n){const e=new Map;for(const t of n)t.layout&&e.set(t.layout,(e.get(t.layout)??0)+1);return e}function qG(n){const e=new Map;for(const t of n){if(!t.hostLayout)continue;const s=e.get(t.hostLayout)??[];s.push(t),e.set(t.hostLayout,s)}return e}function FG(n){const e=new Map;for(const t of n)for(const s of t.extensions)for(const r of s.hostLayouts??[]){if(!r)continue;const o=e.get(r)??[];o.push({extension:s,group:t}),e.set(r,o)}return e}function VG(n,e){return{path:`__modal__/${n.hostLayout}/${n.modalId}`,layoutName:n.hostLayout,label:n.label??n.modalId,labelSource:n.label?"editor_label":"path",source:{kind:"core",identifier:null},kind:"modal",modalId:n.modalId,modalHostLayout:n.hostLayout,connectedHostRoutePath:e,children:[]}}function KG(n,e){const{extension:t,group:s}=n,r=s.sourceType==="plugin"?"🔌":"🧩";return{path:`__extension__/${t.id}`,layoutName:null,label:`${r} ${s.sourceLabel} · ${t.targetName}`,labelSource:"path",source:{kind:s.sourceType,identifier:s.sourceIdentifier},kind:"extension",extensionId:String(t.id),extensionType:t.extensionType,extensionPriority:t.priority,extensionTargetName:t.targetName,isModified:t.isModified,isInactive:!t.isActive,connectedHostRoutePath:e,children:[]}}function v7(n,e,t){if(n.kind!=="route"&&n.kind!=="base"||!n.layoutName)return;const s=[],r=e.get(n.layoutName)??[];r.length>0&&s.push({path:`${zG}${n.path}`,layoutName:null,label:`$t:layout_editor.chrome.route_tree.connected.modals|count=${r.length}`,labelSource:"editor_label",source:{kind:"core",identifier:null},kind:"route",children:r.map(l=>VG(l,n.path))});const o=t.get(n.layoutName)??[];o.length>0&&s.push({path:`${PG}${n.path}`,layoutName:null,label:`$t:layout_editor.chrome.route_tree.connected.extensions|count=${o.length}`,labelSource:"editor_label",source:{kind:"core",identifier:null},kind:"route",children:o.map(l=>KG(l,n.path))}),s.length>0&&(n.children=[...s,...n.children??[]])}function GG(n){const e=[],t=new Set(n.routes.map(s=>s.path));for(const s of n.routes){const r=HG(s);if(!r)continue;const{label:o,labelSource:l}=BG(s),d=WG(s,t),u={path:s.path,layoutName:s.layout??null,label:o,labelSource:l,icon:s.meta?.icon??null,source:s.source,isRedirect:!!s.redirect,isHidden:!!s.meta?.hidden,kind:"route",children:[]};e.push({node:u,parentKey:d,groupKey:r})}return e}function YG(n,e){if(n==="template")return"$t:layout_editor.chrome.route_tree.group.template";if(n.startsWith("module:")){const t=n.slice(7);return`$t:layout_editor.chrome.route_tree.group.module|name=${e.moduleDisplayNames[t]??t}`}if(n.startsWith("plugin:")){const t=n.slice(7);return`$t:layout_editor.chrome.route_tree.group.plugin|name=${e.pluginDisplayNames[t]??t}`}return n}function XG(n,e){UG(n.routes);const t=qG(n.modals),s=FG(n.extensionGroups??[]),r=new Map;for(const u of e)r.has(u.groupKey)||r.set(u.groupKey,[]),r.get(u.groupKey).push(u);const o=Array.from(r.keys()).sort((u,f)=>{const g=y=>y==="template"?1:y.startsWith("module:")?2:y.startsWith("plugin:")?3:4,h=g(u),b=g(f);return h!==b?h-b:u.localeCompare(f)}),l=[];if(n.baseLayouts.length>0){const u=n.baseLayouts.map(f=>({path:`__base__/${f.layoutName}`,layoutName:f.layoutName,label:f.label??f.layoutName,labelSource:f.label?"editor_label":"path",source:{kind:"core",identifier:null},kind:"base",children:[]}));for(const f of u)v7(f,t,s);l.push({path:"__group__/base",layoutName:null,label:"$t:layout_editor.chrome.route_tree.group.base",labelSource:"editor_label",source:{kind:"core",identifier:null},kind:"route",children:u})}for(const u of o){const f=r.get(u),g=new Map;for(const b of f)g.set(b.node.path,b);const h=[];for(const b of f)if(b.parentKey&&g.has(b.parentKey)){const y=g.get(b.parentKey);y.node.children=y.node.children??[],y.node.children.push(b.node)}else h.push(b.node);for(const b of f)v7(b.node,t,s);l.push({path:`__group__/${u}`,layoutName:null,label:YG(u,n),labelSource:"editor_label",source:{kind:"core",identifier:null},kind:"route",children:h})}if(n.modals.length>0){const u=n.modals.map(f=>({path:`__modal__/${f.hostLayout}/${f.modalId}`,layoutName:f.hostLayout,label:f.label??f.modalId,labelSource:f.label?"editor_label":"path",source:{kind:"core",identifier:null},kind:"modal",modalId:f.modalId,modalHostLayout:f.hostLayout,children:[]}));l.push({path:"__group__/modal",layoutName:null,label:"$t:layout_editor.chrome.route_tree.group.modal",labelSource:"editor_label",source:{kind:"core",identifier:null},kind:"route",children:u})}const d=n.extensionGroups??[];if(d.length>0){const u=d.map(f=>{const g=f.sourceType==="plugin"?"🔌":"🧩",h=f.extensions.map(b=>({path:`__extension__/${b.id}`,layoutName:null,label:`${f.sourceLabel} · ${b.targetName}`,labelSource:"path",source:{kind:f.sourceType,identifier:f.sourceIdentifier},kind:"extension",extensionId:String(b.id),extensionType:b.extensionType,extensionPriority:b.priority,extensionTargetName:b.targetName,isModified:b.isModified,isInactive:!b.isActive,children:[]}));return{path:`__extgroup__/${f.sourceType}/${f.sourceIdentifier}`,layoutName:null,label:`${g} ${f.sourceLabel}`,labelSource:"path",source:{kind:f.sourceType,identifier:f.sourceIdentifier},kind:"route",children:h}});l.push({path:"__group__/extension",layoutName:null,label:"$t:layout_editor.chrome.route_tree.group.extension",labelSource:"editor_label",source:{kind:"core",identifier:null},kind:"route",children:u})}return l}function JG(n){const e=GG(n);return XG(n,e)}const Xa=Ht("useEditorRoutes");function ZG(n,e){if(typeof n=="string")return n.length>0?n:null;if(n&&typeof n=="object"){const t=n[e];if(typeof t=="string"&&t.length>0)return t;if(typeof n.en=="string"&&n.en.length>0)return n.en;for(const s of Object.values(n))if(typeof s=="string"&&s.length>0)return s}return null}function w7(n,e){const t={};if(typeof window>"u")return t;const r=window.G7Config?.[n];if(!Array.isArray(r))return t;for(const o of r)o&&typeof o.identifier=="string"&&(t[o.identifier]=ZG(o.display_name,e)??o.identifier);return t}function QG(n){const e=new ms,t=typeof window<"u"?window.G7Config:void 0,s={_global:{settings:t?.settings??{},plugins:t?.plugins??{},modules:t?.modules??{},appConfig:t?.appConfig??{}}};return n.map(r=>{const o={...r};if(typeof o.path=="string"&&o.path.includes("{{")){const l=o.path;let d=e.resolveBindings(o.path,s);d=d.replace(/\/\/+/g,"/")||"/",d.includes("{{")&&(Xa.warn("편집기 route path 표현식 평가 실패 — fallback 적용",{originalPath:l}),d=l.replace(/\{\{[^}]+\}\}/g,"").replace(/\/\/+/g,"/")||"/"),o.path=d}if(typeof o.redirect=="string"&&o.redirect.includes("{{")){const l=o.redirect;let d=e.resolveBindings(l,s);d=d.replace(/\/\/+/g,"/")||"/",d.includes("{{")&&(Xa.warn("편집기 route redirect 표현식 평가 실패 — fallback 적용",{originalRedirect:l}),d=l.replace(/\{\{[^}]+\}\}/g,"").replace(/\/\/+/g,"/")||"/"),o.redirect=d}return o})}function eY(n){const{dispatch:e}=Rn(),{translationEngine:t,translationContext:s}=Mn(),{templateIdentifier:r,cacheVersion:o}=n;w.useEffect(()=>{let l=!1;const d=o??(typeof window<"u"?window.G7Config?.cache_version:void 0)??"",u=d!==""?`?v=${encodeURIComponent(String(d))}`:"",f=`/api/admin/templates/${encodeURIComponent(r)}/editor/routes.json${u}`,g=s?.locale??"ko",h=t&&r!==s?.templateId?t.loadTranslations(r,g).then(()=>{Xa.log("편집 대상 lang 로드 완료",{targetTemplate:r,locale:g})}).catch(x=>{Xa.warn("편집 대상 lang 로드 실패 — 라우트 라벨 fallback 사용",x)}):Promise.resolve(),b=(()=>{if(typeof fetch!="function")return Promise.reject(cl(new Error("fetch unavailable"),"routes"));try{const x=fetch(f,{credentials:"same-origin",headers:on()});return!x||typeof x.then!="function"?Promise.reject(cl(new Error("fetch returned non-Promise (test stub?)"),"routes")):x.then(async S=>{if(!S.ok){const _=await S.json().catch(()=>null);throw zf(S.status,_,"routes")}return S.json()})}catch(x){return Promise.reject(x)}})(),y=`/api/admin/templates/${encodeURIComponent(r)}/layout-extensions${u}`,v=(()=>{if(typeof fetch!="function")return Promise.resolve(null);try{const x=fetch(y,{credentials:"same-origin",headers:on()});return!x||typeof x.then!="function"?Promise.resolve(null):x.then(async S=>S.ok?await S.json():null).catch(()=>null)}catch{return Promise.resolve(null)}})();return Promise.all([b,h,v]).then(([x,,S])=>{if(l)return;if(!x||!x.success||!Array.isArray(x.data?.routes)){Xa.warn("routes 응답 형식이 비정상 — empty tree 로 둠",x),e({type:"SET_ROUTES_ERROR",error:{kind:"unknown",status:200,message:"routes 응답 형식이 비정상입니다.",source:"routes"}});return}const _=QG(x.data.routes),A=w7("activeModules",g),C=w7("activePlugins",g),j=(x.data.base_layouts??[]).map(H=>({layoutName:H.layout_name,label:H.label??void 0})),E=(x.data.modals??[]).map(H=>({modalId:H.modal_id,hostLayout:H.host_layout,label:H.label??void 0})),T=(S?.success&&Array.isArray(S.data)?S.data:[]).map(H=>({sourceIdentifier:H.source_identifier,sourceType:H.source_type,sourceLabel:H.source_label,extensions:(H.extensions??[]).map(G=>({id:G.id,extensionType:G.extension_type,targetName:G.target_name,priority:G.priority,isActive:G.is_active,isModified:G.is_modified,hostLayouts:Array.isArray(G.host_layouts)?G.host_layouts:[],currentVersion:typeof G.current_version=="number"?G.current_version:void 0}))})),D=JG({routes:_,modals:E,baseLayouts:j,extensionGroups:T,moduleDisplayNames:A,pluginDisplayNames:C});e({type:"SET_ROUTE_TREE",tree:D});const I=x.data.layout_versions,W={};if(I&&typeof I=="object"&&!Array.isArray(I))for(const[H,G]of Object.entries(I))typeof G=="number"&&Number.isFinite(G)&&(W[H]=G);e({type:"SET_LAYOUT_VERSIONS",versions:W});const z={};for(const H of T)for(const G of H.extensions){const F=G.currentVersion;typeof F=="number"&&Number.isFinite(F)&&(z[String(G.id)]=F)}e({type:"SET_EXTENSION_VERSIONS",versions:z}),Xa.log("routes 로드 완료",{count:_.length,groups:D.length})}).catch(x=>{if(l)return;Xa.error("routes 로드 실패",x);const S=F1(x)?x:cl(x,"routes");e({type:"SET_ROUTES_ERROR",error:S})}),()=>{l=!0}},[r,o,e,t,s?.locale,s?.templateId])}function _7(n,e,t,s=[]){const r=e?S7(s,e):null,o=r!==null?{path:r.path,layoutName:r.layoutName}:void 0;if(n.startsWith("__base__/")){const l=n.slice(9);if(l)return t({type:"ENTER_BASE_EDIT",layoutName:l,returnRoute:o}),!0}else if(n.startsWith("__modal__/")){const l=n.slice(10);return l&&!l.includes("/")&&e?(t({type:"ENTER_MODAL_EDIT",modalId:l,hostLayout:e,returnRoute:o}),!0):!1}else if(n.startsWith("__extension__/")){const l=n.slice(14);if(l&&!l.includes("/"))return t({type:"ENTER_EXTENSION_EDIT",extensionId:l,returnRoute:o}),!0}else if(n.startsWith("__iteration__/")){const l=n.slice(14);return l&&e?(t({type:"ENTER_ITERATION_ITEM_EDIT",sourcePath:l,hostLayout:e,returnRoute:o}),!0):!1}return!1}function S7(n,e){for(const t of n){if(t.kind==="route"&&t.layoutName===e)return t;if(t.children&&t.children.length>0){const s=S7(t.children,e);if(s)return s}}return null}function Uy(n,e){for(const t of n){if(t.kind==="route"&&t.path===e)return t;if(t.children&&t.children.length>0){const s=Uy(t.children,e);if(s)return s}}return null}function tY(n){const{state:e,dispatch:t}=Rn(),s=w.useRef(!1),r=w.useRef(e.editMode);r.current=e.editMode,w.useEffect(()=>{if(s.current||e.routeTree.length===0||typeof window>"u")return;const l=X0(window.location.search);if(l){const f=Y0(window.location.search),g=_7(l,f,t,e.routeTree);if(s.current=!0,g)return}const d=G0(window.location.search);if(!d){s.current=!0;return}const u=Uy(e.routeTree,d);u&&t({type:"SELECT_ROUTE",route:{path:u.path,layoutName:u.layoutName}}),s.current=!0},[e.routeTree,t]),w.useEffect(()=>{if(typeof window>"u")return;const l=()=>{const d=X0(window.location.search);if(d){const g=Y0(window.location.search);if(_7(d,g,t,e.routeTree))return}if(r.current!=="route")switch(r.current){case"base":t({type:"EXIT_BASE_EDIT"});return;case"modal":t({type:"EXIT_MODAL_EDIT"});return;case"extension":t({type:"EXIT_EXTENSION_EDIT"});return;case"iteration_item":t({type:"EXIT_ITERATION_ITEM_EDIT"});return}const u=G0(window.location.search);if(!u){t({type:"SELECT_ROUTE",route:null});return}const f=Uy(e.routeTree,u);f&&t({type:"SELECT_ROUTE",route:{path:f.path,layoutName:f.layoutName}})};return window.addEventListener("popstate",l),()=>{window.removeEventListener("popstate",l)}},[e.routeTree,t]);const o=w.useRef("route");w.useEffect(()=>{if(typeof window>"u"||!window.history?.replaceState||e.routeTree.length===0)return;const l=Oh(n,e.selectedRoute?.path??null,e.selectedRoute?.layoutName??null),d=`${window.location.pathname}${window.location.search}`,u=o.current;if(o.current=e.editMode,d===l)return;u==="route"&&e.editMode!=="route"&&window.history.pushState?window.history.pushState(window.history.state,"",l):window.history.replaceState(window.history.state,"",l)},[e.selectedRoute,e.editMode,e.routeTree,n])}function nY(){w.useEffect(()=>{if(typeof document>"u")return;const n=document.documentElement;let e=n.classList.contains("dark");const t=()=>{n.classList.contains("dark")&&(e=!0,n.classList.remove("dark"))};t();let s=null;return typeof MutationObserver<"u"&&(s=new MutationObserver(t),s.observe(n,{attributes:!0,attributeFilter:["class"]})),()=>{s?.disconnect(),e&&n.classList.add("dark")}},[])}function sY(){w.useEffect(()=>{if(typeof document>"u"||!document.body)return;const n=document.body,e=()=>{n.style.overflow==="hidden"&&(n.style.overflow=""),n.style.overflowY==="hidden"&&(n.style.overflowY="")};e();let t=null;return typeof MutationObserver<"u"&&(t=new MutationObserver(e),t.observe(n,{attributes:!0,attributeFilter:["style"]})),()=>{t?.disconnect()}},[])}function rY(n){if(typeof n!="string")return null;const e="__extension__/";if(!n.startsWith(e))return null;const t=n.slice(e.length);return t===""||t.includes("/")?null:t}function oY(n){if(Array.isArray(n.components))return n.components;if(Array.isArray(n.injections)){const e=[];return n.injections.forEach((t,s)=>{if(t&&Array.isArray(t.components))for(const r of t.components)e.push({...r,__injectionIndex:s})}),e}return[]}function aY(n,e){if(Array.isArray(n.components)){const t=e.map(s=>qy(s));return{...n,components:t}}if(Array.isArray(n.injections)){const t=n.injections.map(s=>({...s}));t.forEach(s=>{Array.isArray(s.components)&&(s.components=[])});for(const s of e){const r=s.__injectionIndex,o=typeof r=="number"&&r>=0&&r<t.length?t[r]:null;o&&(Array.isArray(o.components)||(o.components=[]),o.components.push(qy(s)))}return{...n,injections:t}}return n}function qy(n){if(!n||typeof n!="object")return n;const e={...n};return delete e.__injectionIndex,delete e.__source,delete e.__injectedProps,delete e._fromBase,Array.isArray(e.children)&&(e.children=e.children.map(t=>qy(t))),e}function k7(n,e){const t=[],s=r=>{if(Array.isArray(r))for(const o of r){if(!o||typeof o!="object")continue;const l=o.__source;if(l?.kind==="extension"&&l.extensionId===e){t.push(o);continue}Array.isArray(o.children)&&s(o.children)}};return s(n),t}function C7(n,e){const s=k7(n,e)[0]?.__source;return s&&s.kind==="extension"&&s.extensionId===e?s:{kind:"extension",extensionId:e}}function Fy(n,e){for(const t of n){const s=t?.__source;if(s?.kind==="extension"&&s.extensionId===e||Array.isArray(t.children)&&Fy(t.children,e))return!0}return!1}function iY(){const{state:n}=Rn(),e=n.templateIdentifier,t=n.editMode==="extension"?rY(n.selectedRoute?.path):null,s=n.editMode==="extension"&&typeof n.selectedRoute?.layoutName=="string"?n.selectedRoute.layoutName:null,[r,o]=w.useState(null),[l,d]=w.useState(!1),[u,f]=w.useState(null),[g,h]=w.useState(!1),[b,y]=w.useState(0),[v,x]=w.useState(null),S=w.useRef({}),_=w.useRef({kind:"extension",extensionId:0}),A=w.useRef(null);w.useEffect(()=>{A.current=r},[r]),w.useEffect(()=>{x(null)},[t]);const C=w.useCallback(async H=>{const G=window.G7Config?.cache_version??0,F=`/api/layouts/${encodeURIComponent(e)}/${H}.json?with_source_meta=1&v=${G}.${eC()}`,Z=Ju(),Y={Accept:"application/json"};Z&&(Y.Authorization=`Bearer ${Z}`);const U=await fetch(F,{headers:Y,credentials:"same-origin"});if(!U.ok)return null;const B=await U.json().catch(()=>null);return(B&&(B.data||B))??{}},[e]),j=w.useCallback(async()=>{if(!t){o(null),f(null),h(!1);return}d(!0),f(null);try{const H=window.G7Config?.cache_version??0,G=`/api/admin/templates/${encodeURIComponent(e)}/layout-extensions/${encodeURIComponent(t)}?v=${H}`,F=await fetch(G,{headers:on(),credentials:"same-origin"}),Z=await F.json().catch(()=>null);if(!F.ok){f(zf(F.status,Z,"layout")),o(null),h(!1);return}const Y=(Z&&(Z.data||Z))??{};let U={};const B=Y.content;if(typeof B=="string")try{U=JSON.parse(B)}catch{U={}}else B&&typeof B=="object"&&(U=B);const te=Y.extension_type==="overlay"?"overlay":"extension_point",q=typeof Y.lock_version=="number"?Y.lock_version:0,M=Array.isArray(Y?.host_layouts)?Y.host_layouts.filter(me=>typeof me=="string"):[],N=s??(M.length===1?M[0]:v&&M.includes(v)?v:null),V=Number(t);S.current=U;let se=oY(U),re={},pe="pending";const je={kind:"extension",extensionId:V};if(_.current=je,N){const me=await C(N);if(me){re=me;const ce=Array.isArray(me.components)?me.components:[],be=C7(ce,V);if(_.current=be,Fy(ce,V))se=ce,pe="ok";else{const fe=(Array.isArray(me.modals)?me.modals:[]).filter(De=>De&&typeof De=="object"&&Fy([De],V));if(fe.length>0){const De=fe.map(Fe=>({...Fe,props:{...Fe.props??{},isOpen:!0}}));se=[...ce,...De],_.current=C7(fe,V),pe="ok"}else se=ce,pe="no-injection"}}}o({extensionId:V,content:U,extensionType:te,components:se,lockVersion:q,hostLayouts:M,hostLayoutName:N,hostRaw:re,editability:pe}),h(!1),ss({op:"load",layoutName:`extension:${t}`,editMode:"extension",statusCode:F.status,timestamp:Date.now()})}catch(H){f(cl(H,"layout")),o(null),h(!1)}finally{d(!1)}},[e,t,v,s,C]);w.useEffect(()=>{j()},[j]);const E=w.useCallback(H=>{x(H)},[]),T=w.useCallback(H=>{o(G=>G&&{...G,components:H}),h(!0),ss({op:"patch",layoutName:`extension:${A.current?.extensionId??""}`,editMode:"extension",isDirty:!0,timestamp:Date.now()})},[]),D=w.useCallback(H=>{o(G=>G&&{...G,components:H(G.components)}),h(!0)},[]),I=w.useCallback(async()=>{const H=A.current;if(!H)return{kind:"guard_no_document"};const G=`/api/admin/templates/${encodeURIComponent(e)}/layout-extensions/${H.extensionId}`,F=k7(H.components,H.extensionId),Z=F.length>0?F:H.components,Y=aY(S.current,Z);ss({op:"save",layoutName:`extension:${H.extensionId}`,editMode:"extension",saveTarget:"layout_extension",endpoint:G,isDirty:g,timestamp:Date.now()});let U;try{U=await fetch(G,{method:"PUT",headers:on({"Content-Type":"application/json"}),credentials:"same-origin",body:JSON.stringify({content:Y,expected_lock_version:H.lockVersion})})}catch(te){return{kind:"network_error",message:te instanceof Error?te.message:"network error"}}const B=await U.json().catch(()=>null);if(ss({op:"save_response",layoutName:`extension:${H.extensionId}`,editMode:"extension",endpoint:G,statusCode:U.status,conflict:U.status===409?{currentVersion:B?.errors?.current_version??B?.current_version,yourVersion:B?.errors?.your_version??B?.your_version}:void 0,timestamp:Date.now()}),U.ok){const te=B?.data??{},q=typeof te.lock_version=="number"?te.lock_version:H.lockVersion+1;o(N=>N&&{...N,lockVersion:q}),h(!1),y(N=>N+1);const M=typeof te.current_version=="number"?te.current_version:void 0;return{kind:"success",newLockVersion:q,newContentVersion:M,savedExtensionId:String(H.extensionId)}}return U.status===409?{kind:"concurrent_modification",currentVersion:B?.current_version??-1,yourVersion:B?.your_version??H.lockVersion}:U.status===422?{kind:"validation_failed",status:422,errors:B?.errors??null}:{kind:"network_error",message:B?.message??`HTTP ${U.status}`}},[e,g]),W=w.useCallback(async()=>{uy(),await j()},[j]),z=!!r&&r.hostLayouts.length>1&&r.hostLayoutName===null;return{document:r,isLoading:l,error:u,isDirty:g,saveSuccessCounter:b,setLayoutComponents:T,patchLayout:D,save:I,reload:W,needsHostPicker:z,selectHost:E}}const j7=new Set;function lY(n,e,t){const r=n&&Object.keys(n).length>0?n:e,o=Array.isArray(r.data_sources)?r.data_sources:[],l=Array.isArray(e.data_sources)?e.data_sources:[],d=new Set,u=[];for(const f of[...o,...l]){const g=f&&typeof f=="object"?f.id:void 0,h=typeof g=="string"?g:`__anon_${u.length}`;d.has(h)||(d.add(h),u.push(f))}return{...r,components:t,...u.length>0?{data_sources:u}:{},lock_version:void 0}}function cY(n){return{document:n.document?{layoutName:`extension:${n.document.extensionId}`,raw:{...lY(n.document.hostRaw,n.document.content,n.document.components),__editability:n.document.editability,__extensionId:n.document.extensionId},lockVersion:n.document.lockVersion}:null,isLoading:n.isLoading,error:n.error,isDirty:n.isDirty,saveSuccessCounter:n.saveSuccessCounter,reload:n.reload,patchLayout:n.patchLayout,setLayoutComponents:n.setLayoutComponents,patchDocumentRaw:()=>{},dirtyKeys:j7,dirtyLayoutNames:j7,invalidateCurrentCache:()=>{},reloadCounter:0,save:()=>n.save(),markDirty:()=>{}}}function dY({hostLayouts:n,extensionLabel:e,onSelect:t}){const{t:s}=Mn();return a.jsx("div",{className:"g7le-host-picker__backdrop","data-testid":"g7le-host-picker",role:"dialog","aria-modal":"true","aria-label":s("layout_editor.host_picker.title"),style:{position:"fixed",inset:0,zIndex:9500,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(15, 23, 42, 0.55)"},children:a.jsxs("div",{className:"g7le-host-picker__panel",style:{width:"min(520px, 92vw)",maxHeight:"80vh",overflow:"auto",background:"#ffffff",color:"#0f172a",borderRadius:12,boxShadow:"0 20px 48px rgba(15, 23, 42, 0.28)",padding:"20px 22px"},children:[a.jsx("h2",{className:"g7le-host-picker__title",style:{margin:"0 0 6px",fontSize:16,fontWeight:700},children:s("layout_editor.host_picker.title")}),a.jsx("p",{className:"g7le-host-picker__desc",style:{margin:"0 0 16px",fontSize:13,color:"#475569",lineHeight:1.6},children:e?s("layout_editor.host_picker.description_with_label",{label:e}):s("layout_editor.host_picker.description")}),a.jsx("ul",{className:"g7le-host-picker__list",style:{listStyle:"none",margin:0,padding:0,display:"grid",gap:8},children:n.map(r=>a.jsx("li",{children:a.jsxs("button",{type:"button",className:"g7le-host-picker__item","data-testid":"g7le-host-picker-item","data-host":r,onClick:()=>t(r),style:{width:"100%",textAlign:"left",padding:"12px 14px",border:"1px solid #e2e8f0",borderRadius:8,background:"#f8fafc",cursor:"pointer",fontSize:13,fontWeight:600,color:"#0f172a",display:"flex",alignItems:"center",gap:8},children:[a.jsx("span",{"aria-hidden":!0,style:{fontSize:14},children:"🖼"}),a.jsx("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis"},children:r}),a.jsx("span",{"aria-hidden":!0,style:{color:"#94a3b8"},children:"→"})]})},r))})]})})}function uY(n,e){const[t,s]=w.useState(!1),[r,o]=w.useState(null),l=w.useCallback(async d=>{if(!e||!d)return{kind:"no_document"};s(!0),o(null);try{const u=Nc(d),f=`/api/admin/templates/${encodeURIComponent(n)}/layouts/${e}/preview`,g=await fetch(f,{method:"POST",credentials:"same-origin",headers:on({"Content-Type":"application/json"}),body:JSON.stringify({content:JSON.stringify(u)})}),h=await g.json().catch(()=>null);if(!g.ok){const x=h?.message??`HTTP ${g.status}`;return o(x),{kind:"network_error",message:x}}const b=h?.data,y=typeof b?.token=="string"?b.token:"",v=typeof b?.preview_url=="string"&&b.preview_url?b.preview_url:y?`/preview/${y}`:"";return v?(window.G7Core?.dispatch?.({handler:"openWindow",params:{path:v}}),{kind:"success",previewUrl:v,token:y}):(o("invalid preview response"),{kind:"network_error",message:"invalid preview response"})}catch(u){const f=u instanceof Error?u.message:"network error";return o(f),{kind:"network_error",message:f}}finally{s(!1)}},[n,e]);return{isCreating:t,error:r,createPreview:l}}const Ge="layout_editor.action_recipe",sa={setState:{label:`$t:${Ge}.set_state.label`,params:[{key:"target",label:`$t:${Ge}.set_state.param_target`,widget:"select",options:[{value:"local"},{value:"global"}]},{key:"state",label:`$t:${Ge}.set_state.param_state`,widget:"state-key-value"},{key:"merge",label:`$t:${Ge}.set_state.param_merge`,widget:"toggle"}],build:{handler:"setState",params:{target:"{{target}}",merge:"{{merge}}","...":"{{state}}"}}},loadFromLocalStorage:{label:`$t:${Ge}.load_local.label`,params:[{key:"key",label:`$t:${Ge}.load_local.param_key`,widget:"text",required:!0},{key:"stateKey",label:`$t:${Ge}.load_local.param_state_key`,widget:"state-key-picker"},{key:"defaultValue",label:`$t:${Ge}.load_local.param_default`,widget:"text"}],build:{handler:"loadFromLocalStorage",params:{key:"{{key}}",stateKey:"{{stateKey}}",defaultValue:"{{defaultValue}}"}}},saveToLocalStorage:{label:`$t:${Ge}.save_local.label`,params:[{key:"key",label:`$t:${Ge}.save_local.param_key`,widget:"text",required:!0},{key:"value",label:`$t:${Ge}.save_local.param_value`,widget:"data-chip"}],build:{handler:"saveToLocalStorage",params:{key:"{{key}}",value:"{{value}}"}}},navigate:{label:`$t:${Ge}.navigate.label`,params:[{key:"path",label:`$t:${Ge}.navigate.param_path`,widget:"page-picker",required:!0},{key:"query",label:`$t:${Ge}.navigate.param_query`,widget:"key-value"},{key:"mergeQuery",label:`$t:${Ge}.navigate.param_merge_query`,widget:"toggle"},{key:"scroll",label:`$t:${Ge}.navigate.param_scroll`,widget:"select",options:[{value:"top"},{value:"preserve"},{value:"none"}]},{key:"replace",label:`$t:${Ge}.navigate.param_replace`,widget:"toggle"},{key:"transition_overlay_target",label:`$t:${Ge}.navigate.param_overlay_target`,widget:"component-target-picker",dependsOn:{param:"replace",equals:!0}}],build:{handler:"navigate",params:{path:"{{path}}",query:"{{query}}",mergeQuery:"{{mergeQuery}}",scroll:"{{scroll}}",replace:"{{replace}}",transition_overlay_target:"{{transition_overlay_target}}"}}},openWindow:{label:`$t:${Ge}.open_window.label`,params:[{key:"target",label:`$t:${Ge}.open_window.param_target`,widget:"page-picker",required:!0},{key:"windowTarget",label:`$t:${Ge}.open_window.param_window_target`,widget:"select",options:[{value:"_blank"},{value:"_self"}]}],build:{handler:"openWindow",target:"{{target}}",params:{windowTarget:"{{windowTarget}}"}}},navigateBack:{label:`$t:${Ge}.navigate_back.label`,params:[],build:{handler:"navigateBack"}},navigateForward:{label:`$t:${Ge}.navigate_forward.label`,params:[],build:{handler:"navigateForward"}},replaceUrl:{label:`$t:${Ge}.replace_url.label`,params:[{key:"path",label:`$t:${Ge}.replace_url.param_path`,widget:"page-picker"},{key:"query",label:`$t:${Ge}.replace_url.param_query`,widget:"key-value"}],build:{handler:"replaceUrl",params:{path:"{{path}}",query:"{{query}}"}}},toast:{label:`$t:${Ge}.toast.label`,params:[{key:"message",label:`$t:${Ge}.toast.param_message`,widget:"i18n-text",required:!0},{key:"type",label:`$t:${Ge}.toast.param_type`,widget:"select",options:[{value:"info"},{value:"success"},{value:"warning"},{value:"error"}]},{key:"duration",label:`$t:${Ge}.toast.param_duration`,widget:"number"},{key:"icon",label:`$t:${Ge}.toast.param_icon`,widget:"text"}],build:{handler:"toast",params:{message:"{{message}}",type:"{{type}}",duration:"{{duration}}",icon:"{{icon}}"}}},openModal:{label:`$t:${Ge}.open_modal.label`,params:[{key:"target",label:`$t:${Ge}.open_modal.param_target`,widget:"modal-picker",required:!0}],build:{handler:"openModal",target:"{{target}}"}},closeModal:{label:`$t:${Ge}.close_modal.label`,params:[],build:{handler:"closeModal"}},showAlert:{label:`$t:${Ge}.show_alert.label`,params:[{key:"target",label:`$t:${Ge}.show_alert.param_message`,widget:"i18n-text",required:!0}],build:{handler:"showAlert",target:"{{target}}"}},setError:{label:`$t:${Ge}.set_error.label`,params:[{key:"target",label:`$t:${Ge}.set_error.param_message`,widget:"i18n-text"},{key:"stateTarget",label:`$t:${Ge}.set_error.param_state_target`,widget:"select",options:[{value:"local"},{value:"global"}]}],build:{handler:"setError",target:"{{target}}",params:{stateTarget:"{{stateTarget}}"}}},refetchDataSource:{label:`$t:${Ge}.refetch.label`,params:[{key:"dataSourceId",label:`$t:${Ge}.refetch.param_data_source`,widget:"datasource-picker",required:!0},{key:"sync",label:`$t:${Ge}.refetch.param_sync`,widget:"toggle"}],build:{handler:"refetchDataSource",params:{dataSourceId:"{{dataSourceId}}",sync:"{{sync}}"}}},appendDataSource:{label:`$t:${Ge}.append_data.label`,params:[{key:"dataSourceId",label:`$t:${Ge}.append_data.param_data_source`,widget:"datasource-picker",required:!0},{key:"dataPath",label:`$t:${Ge}.append_data.param_data_path`,widget:"text"},{key:"newData",label:`$t:${Ge}.append_data.param_new_data`,widget:"data-chip"}],build:{handler:"appendDataSource",params:{dataSourceId:"{{dataSourceId}}",dataPath:"{{dataPath}}",newData:"{{newData}}"}}},updateDataSource:{label:`$t:${Ge}.update_data.label`,params:[{key:"dataSourceId",label:`$t:${Ge}.update_data.param_data_source`,widget:"datasource-picker",required:!0},{key:"data",label:`$t:${Ge}.update_data.param_data`,widget:"data-chip"},{key:"merge",label:`$t:${Ge}.update_data.param_merge`,widget:"toggle"}],build:{handler:"updateDataSource",params:{dataSourceId:"{{dataSourceId}}",data:"{{data}}",merge:"{{merge}}"}}},scrollIntoView:{label:`$t:${Ge}.scroll.label`,params:[{key:"selector",label:`$t:${Ge}.scroll.param_selector`,widget:"text",required:!0},{key:"behavior",label:`$t:${Ge}.scroll.param_behavior`,widget:"select",options:[{value:"smooth"},{value:"auto"}]},{key:"block",label:`$t:${Ge}.scroll.param_block`,widget:"select",options:[{value:"start"},{value:"center"},{value:"end"},{value:"nearest"}]}],build:{handler:"scrollIntoView",params:{selector:"{{selector}}",behavior:"{{behavior}}",block:"{{block}}"}}},login:{label:`$t:${Ge}.login.label`,params:[{key:"body",label:`$t:${Ge}.login.param_body`,widget:"key-value"}],build:{handler:"login",params:{body:"{{body}}"}}},logout:{label:`$t:${Ge}.logout.label`,params:[{key:"target",label:`$t:${Ge}.logout.param_target`,widget:"text"}],build:{handler:"logout",target:"{{target}}"}},setLocale:{label:`$t:${Ge}.set_locale.label`,params:[{key:"target",label:`$t:${Ge}.set_locale.param_target`,widget:"locale-picker",required:!0}],build:{handler:"setLocale",target:"{{target}}"}},emitEvent:{label:`$t:${Ge}.emit_event.label`,params:[{key:"event",label:`$t:${Ge}.emit_event.param_event`,widget:"text",required:!0},{key:"data",label:`$t:${Ge}.emit_event.param_data`,widget:"data-chip"}],build:{handler:"emitEvent",params:{event:"{{event}}",data:"{{data}}"}}},apiCall:{label:`$t:${Ge}.api_call.label`,params:[{key:"target",label:`$t:${Ge}.api_call.param_target`,widget:"page-picker",required:!0},{key:"method",label:`$t:${Ge}.api_call.param_method`,widget:"select",options:[{value:"GET"},{value:"POST"},{value:"PUT"},{value:"PATCH"},{value:"DELETE"}]},{key:"body",label:`$t:${Ge}.api_call.param_body`,widget:"key-value"},{key:"query",label:`$t:${Ge}.api_call.param_query`,widget:"key-value"},{key:"identity_target_email",label:`$t:${Ge}.api_call.param_identity_target_email`,widget:"data-chip"},{key:"identity_target_phone",label:`$t:${Ge}.api_call.param_identity_target_phone`,widget:"data-chip"},{key:"onSuccess",label:`$t:${Ge}.api_call.param_on_success`,widget:"action-list"},{key:"onError",label:`$t:${Ge}.api_call.param_on_error`,widget:"action-list"}],build:{handler:"apiCall",target:"{{target}}",identity_target:{email:"{{identity_target_email}}",phone:"{{identity_target_phone}}"},onSuccess:"{{onSuccess}}",onError:"{{onError}}",params:{method:"{{method}}",body:"{{body}}",query:"{{query}}"}}},conditions:{label:`$t:${Ge}.conditions.label`,params:[{key:"branches",label:`$t:${Ge}.conditions.param_branches`,widget:"branch-list"}],build:{handler:"conditions",conditions:"{{branches}}"}},sequence:{label:`$t:${Ge}.sequence.label`,params:[{key:"actions",label:`$t:${Ge}.sequence.param_actions`,widget:"action-list"}],build:{handler:"sequence",params:{actions:"{{actions}}"}}},parallel:{label:`$t:${Ge}.parallel.label`,params:[{key:"actions",label:`$t:${Ge}.parallel.param_actions`,widget:"action-list"}],build:{handler:"parallel",params:{actions:"{{actions}}"}}},switch:{label:`$t:${Ge}.switch.label`,params:[{key:"value",label:`$t:${Ge}.switch.param_value`,widget:"data-chip"},{key:"cases",label:`$t:${Ge}.switch.param_cases`,widget:"action-list",advanced:!0}],build:{handler:"switch",params:{value:"{{value}}",cases:"{{cases}}"}}},suppress:{label:`$t:${Ge}.suppress.label`,params:[],build:{handler:"suppress"}}};function fY(){return{actionRecipes:sa,initActionRecipes:sa,errorRecipes:{navigate:sa.navigate,openModal:sa.openModal,toast:sa.toast,setState:sa.setState,sequence:sa.sequence,parallel:sa.parallel,showErrorPage:{label:`$t:${Ge}.show_error_page.label`,params:[{key:"target",label:`$t:${Ge}.show_error_page.param_target`,widget:"select",options:[{value:"content"},{value:"full"}]}],build:{handler:"showErrorPage",params:{target:"{{target}}"}}}}}}function Vy(n,e){return typeof n.label=="string"?n.label.startsWith("$t:")?e(n.label.slice(3)):n.label:String(n.value)}function Zf(n){return Array.isArray(n.options)?n.options:[]}function pY({control:n,value:e,onChange:t,t:s}){const r=Zf(n);return a.jsx("div",{className:"g7le-widget g7le-widget--segmented","data-testid":"g7le-widget-segmented",style:CY,children:r.map(o=>{const l=o.value===e;return a.jsx("button",{type:"button","data-testid":`g7le-segment-${String(o.value)}`,"data-active":l?"true":"false",onClick:()=>t(l?void 0:o.value),style:{...DY,background:l?"#2563eb":"#fff",color:l?"#fff":"#0f172a",borderColor:l?"#2563eb":"#cbd5e1"},children:Vy(o,s)},String(o.value))})})}function gY({control:n,value:e,onChange:t,t:s}){const r=Array.isArray(n.scale)?n.scale:[],o=r.findIndex(d=>d===e),l=e!=null;return a.jsxs("div",{className:"g7le-widget g7le-widget--slider","data-testid":"g7le-widget-slider",style:R7,children:[a.jsxs("label",{style:Ky,children:[a.jsx("input",{type:"checkbox","data-testid":"g7le-slider-enabled",checked:l,onChange:d=>{d.target.checked?t(r.length>0?r[Math.max(0,o===-1?0:o)]:void 0):t(void 0)}}),a.jsx("span",{style:{fontSize:12,color:"#64748b"},children:s("layout_editor.control.use")})]}),a.jsx("input",{type:"range","data-testid":"g7le-slider-range",min:0,max:Math.max(0,r.length-1),step:1,disabled:!l||r.length===0,value:o===-1?0:o,onChange:d=>{const u=Number(d.target.value);t(r[u])},style:{flex:1}}),a.jsx("span",{"data-testid":"g7le-slider-value",style:{fontSize:12,color:"#0f172a",minWidth:48,textAlign:"right"},children:l?String(e):s("layout_editor.control.default")})]})}function hY({control:n,value:e,onChange:t,t:s}){const r=Zf(n);return a.jsxs("select",{className:"g7le-widget g7le-widget--select","data-testid":"g7le-widget-select",value:e==null?"":String(e),onChange:o=>{const l=o.target.value;if(l===""){t(void 0);return}const d=r.find(u=>String(u.value)===l);t(d?d.value:l)},style:IY,children:[a.jsx("option",{value:"",children:s("layout_editor.control.default")}),r.map(o=>a.jsx("option",{value:String(o.value),children:Vy(o,s)},String(o.value)))]})}function mY({control:n,value:e,onChange:t}){const s=Zf(n),r=s[1]?.value??!0,o=s[0]?.value??void 0,l=e===r;return a.jsx("button",{type:"button",className:"g7le-widget g7le-widget--toggle","data-testid":"g7le-widget-toggle",role:"switch","aria-checked":l,onClick:()=>t(l?o:r),style:{...LY,background:l?"#2563eb":"#cbd5e1"},children:a.jsx("span",{style:{...OY,transform:l?"translateX(18px)":"translateX(0)"}})})}function yY({control:n,value:e,onChange:t,t:s,freeValueDisabled:r}){const o=Zf(n),l=e==null?"":String(e),[d,u]=qe.useState(l);qe.useEffect(()=>{u(l)},[l]);const f=g=>{const h=g.trim();if(h===""){t(void 0);return}t(h)};return a.jsxs("div",{className:"g7le-widget g7le-widget--dimension","data-testid":"g7le-widget-dimension",style:jY,children:[r?a.jsx("div",{"data-testid":"g7le-dimension-free-disabled",style:$Y,children:s("layout_editor.property_modal.dark_preset_only")}):a.jsxs("div",{style:EY,children:[a.jsx("input",{type:"text","data-testid":"g7le-dimension-input",value:d,placeholder:s("layout_editor.control.dimension.placeholder"),onChange:g=>u(g.target.value),onBlur:g=>f(g.target.value),onKeyDown:g=>{g.key==="Enter"&&(g.preventDefault(),f(g.target.value))},style:RY}),a.jsx("button",{type:"button","data-testid":"g7le-dimension-clear",title:s("layout_editor.control.default"),onClick:()=>{u(""),t(void 0)},style:AY,children:s("layout_editor.control.default")})]}),o.length>0&&a.jsx("div",{style:TY,"data-testid":"g7le-dimension-chips",children:o.map(g=>{const h=String(g.value),b=h===l;return a.jsx("button",{type:"button","data-testid":`g7le-dimension-chip-${h}`,"data-active":b?"true":"false",onClick:()=>{u(h),t(h)},style:{...NY,background:b?"#2563eb":"#fff",color:b?"#fff":"#0f172a",borderColor:b?"#2563eb":"#cbd5e1"},children:Vy(g,s)},h)})})]})}function bY(n){return[{key:"t",infix:`${n}t-`,labelKey:"layout_editor.control.spacing.top"},{key:"r",infix:`${n}r-`,labelKey:"layout_editor.control.spacing.right"},{key:"b",infix:`${n}b-`,labelKey:"layout_editor.control.spacing.bottom"},{key:"l",infix:`${n}l-`,labelKey:"layout_editor.control.spacing.left"}]}function xY(n,e,t,s){const r={all:-1,sides:{}};if(typeof n!="string"||n.trim()==="")return r;const o=n.split(/\s+/).filter(l=>l.length>0);for(const l of o){const d=t.find(u=>l.startsWith(u.infix));if(d){r.sides[d.key]=s.indexOf(l.slice(d.infix.length));continue}if(l.startsWith(`${e}x-`)){const u=s.indexOf(l.slice(`${e}x-`.length));r.sides.l=u,r.sides.r=u;continue}if(l.startsWith(`${e}y-`)){const u=s.indexOf(l.slice(`${e}y-`.length));r.sides.t=u,r.sides.b=u;continue}l.startsWith(`${e}-`)&&(r.all=s.indexOf(l.slice(`${e}-`.length)))}return r}function vY({control:n,value:e,onChange:t,t:s}){const r=typeof n.spacingPrefix=="string"?n.spacingPrefix:"p",o=(Array.isArray(n.scale)?n.scale:[]).map(_=>String(_)),l=bY(r),d=xY(e,r,l,o),u=Object.values(d.sides).some(_=>_>=0),f=d.all>=0||u,[g,h]=qe.useState(u);qe.useEffect(()=>{u&&h(!0)},[u]);const b=Math.min(4,Math.max(0,o.length-1)),y=_=>{const A=[];for(const C of l){const j=_[C.key];j!==void 0&&j>=0&&A.push(`${C.infix}${o[j]}`)}t(A.length>0?A.join(" "):void 0)},v=_=>{t(_>=0?`${r}-${o[Math.max(0,Math.min(_,o.length-1))]}`:void 0)},x=()=>({...d.sides}),S=(_,A,C,j,E)=>{const T=C>=0;return a.jsxs("div",{style:kY,"data-testid":_,children:[a.jsxs("label",{style:{...Ky,minWidth:64},children:[a.jsx("input",{type:"checkbox","data-testid":`${_}-enabled`,checked:T,onChange:D=>E(D.target.checked)}),a.jsx("span",{style:{fontSize:12,color:"#0f172a"},children:s(A)})]}),a.jsx("input",{type:"range","data-testid":`${_}-range`,min:0,max:Math.max(0,o.length-1),step:1,disabled:!T||o.length===0,value:C<0?0:C,onChange:D=>j(Number(D.target.value)),style:{flex:1}}),a.jsx("span",{"data-testid":`${_}-value`,style:{fontSize:12,color:T?"#0f172a":"#94a3b8",minWidth:28,textAlign:"right"},children:T?o[C]:"–"})]},_)};return a.jsxs("div",{className:"g7le-widget g7le-widget--spacing","data-testid":"g7le-widget-spacing",style:wY,children:[a.jsxs("div",{style:_Y,children:[a.jsxs("div",{style:SY,"data-testid":"g7le-spacing-mode",children:[a.jsx("button",{type:"button","data-testid":"g7le-spacing-mode-all","data-active":g?"false":"true",onClick:()=>{h(!1),u&&t(void 0)},style:{...E7,background:g?"#fff":"#2563eb",color:g?"#0f172a":"#fff",borderColor:g?"#cbd5e1":"#2563eb"},children:s("layout_editor.control.spacing.mode_all")}),a.jsx("button",{type:"button","data-testid":"g7le-spacing-mode-sides","data-active":g?"true":"false",onClick:()=>{if(h(!0),d.all>=0){const _={};for(const A of l)_[A.key]=d.all;y(_)}},style:{...E7,background:g?"#2563eb":"#fff",color:g?"#fff":"#0f172a",borderColor:g?"#2563eb":"#cbd5e1"},children:s("layout_editor.control.spacing.mode_sides")})]}),a.jsx("span",{"data-testid":"g7le-spacing-value",style:{fontSize:11,color:"#64748b",minWidth:80,textAlign:"right"},children:f?String(e):s("layout_editor.control.default")})]}),g?a.jsx("div",{"data-testid":"g7le-spacing-sides",style:{display:"flex",flexDirection:"column",gap:4},children:l.map(_=>S(`g7le-spacing-side-${_.key}`,_.labelKey,d.sides[_.key]??-1,A=>{const C=x();C[_.key]=A,y(C)},A=>{const C=x();A?C[_.key]=d.sides[_.key]>=0?d.sides[_.key]:b:delete C[_.key],y(C)}))}):a.jsxs("div",{style:R7,children:[a.jsxs("label",{style:{...Ky,minWidth:64},children:[a.jsx("input",{type:"checkbox","data-testid":"g7le-spacing-all-enabled",checked:d.all>=0,onChange:_=>v(_.target.checked?b:-1)}),a.jsx("span",{style:{fontSize:12,color:"#64748b"},children:s("layout_editor.control.spacing.all")})]}),a.jsx("input",{type:"range","data-testid":"g7le-spacing-all-range",min:0,max:Math.max(0,o.length-1),step:1,disabled:d.all<0||o.length===0,value:d.all<0?0:d.all,onChange:_=>v(Number(_.target.value)),style:{flex:1}}),a.jsx("span",{"data-testid":"g7le-spacing-all-value",style:{fontSize:12,color:d.all>=0?"#0f172a":"#94a3b8",minWidth:28,textAlign:"right"},children:d.all>=0?o[d.all]:"–"})]})]})}const wY={display:"flex",flexDirection:"column",gap:6,width:"100%"},_Y={display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},SY={display:"inline-flex",gap:0,border:"1px solid #cbd5e1",borderRadius:6,overflow:"hidden"},E7={padding:"3px 10px",fontSize:11,border:"none",borderRight:"1px solid #e2e8f0",cursor:"pointer"},kY={display:"flex",alignItems:"center",gap:8,width:"100%"},CY={display:"inline-flex",gap:0,border:"1px solid #cbd5e1",borderRadius:6,overflow:"hidden"},jY={display:"flex",flexDirection:"column",gap:6,width:"100%"},EY={display:"flex",gap:6,alignItems:"center"},RY={flex:1,padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,minWidth:80},AY={padding:"4px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#64748b",cursor:"pointer",whiteSpace:"nowrap"},TY={display:"flex",flexWrap:"wrap",gap:4},$Y={fontSize:11,color:"#94a3b8",fontStyle:"italic",padding:"2px 0"},NY={padding:"3px 9px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:999,background:"#fff",cursor:"pointer"},DY={padding:"4px 10px",fontSize:12,border:"none",borderRight:"1px solid #e2e8f0",cursor:"pointer"},R7={display:"flex",alignItems:"center",gap:8,width:"100%"},Ky={display:"inline-flex",alignItems:"center",gap:4},IY={padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",minWidth:120},LY={position:"relative",width:38,height:20,borderRadius:10,border:"none",cursor:"pointer",padding:2,display:"inline-flex",alignItems:"center",transition:"background 120ms ease"},OY={display:"block",width:16,height:16,borderRadius:8,background:"#fff",transition:"transform 120ms ease"},MY=["#0f172a","#334155","#64748b","#94a3b8","#e2e8f0","#ffffff","#dc2626","#ea580c","#d97706","#16a34a","#0891b2","#2563eb","#7c3aed","#db2777"],A7=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;function zY(n){return Array.isArray(n.options)?n.options.filter(e=>typeof e.value=="string").map(e=>({value:e.value,swatch:typeof e.swatch=="string"?e.swatch:void 0,label:typeof e.label=="string"?e.label:void 0})):[]}function PY({control:n,value:e,onChange:t,t:s,freeValueDisabled:r}){const o=zY(n),l=o.length>0,d=typeof e=="string"&&o.some(y=>y.value===e)?e:"",u=typeof e=="string"&&A7.test(e)?e:"",[f,g]=w.useState(u);qe.useEffect(()=>{g(u)},[u]);const h=y=>{const v=y.trim();if(v===""){t(void 0);return}const x=v.startsWith("#")?v:`#${v}`;A7.test(x)&&t(x)},b=MY;return a.jsxs("div",{className:"g7le-widget g7le-widget--color","data-testid":"g7le-widget-color",style:BY,children:[r?a.jsx("div",{"data-testid":"g7le-color-free-disabled",style:VY,children:s("layout_editor.property_modal.dark_preset_only")}):a.jsxs("div",{style:HY,children:[a.jsxs("label",{style:WY,children:[a.jsx("span",{"data-testid":"g7le-color-swatch",style:{...UY,background:u||"transparent",backgroundImage:u?void 0:"linear-gradient(45deg,#e2e8f0 25%,transparent 25%,transparent 75%,#e2e8f0 75%),linear-gradient(45deg,#e2e8f0 25%,#fff 25%,#fff 75%,#e2e8f0 75%)",backgroundSize:"8px 8px",backgroundPosition:"0 0, 4px 4px"}}),a.jsx("input",{type:"color","data-testid":"g7le-color-native",value:u||"#000000",onChange:y=>t(y.target.value),style:{width:0,height:0,opacity:0,position:"absolute"}})]}),a.jsx("input",{type:"text","data-testid":"g7le-color-hex",value:f,placeholder:s("layout_editor.control.color_hex_placeholder"),onChange:y=>g(y.target.value),onBlur:y=>h(y.target.value),onKeyDown:y=>{y.key==="Enter"&&h(y.target.value)},style:qY}),a.jsx("button",{type:"button","data-testid":"g7le-color-clear",onClick:()=>t(void 0),style:FY,children:s("layout_editor.control.default")})]}),l?a.jsx("div",{style:T7,"data-testid":"g7le-color-token-presets",children:o.map(y=>{const v=d===y.value,x=y.label?y.label.startsWith("$t:")?s(y.label.slice(3)):y.label:y.value;return a.jsx("button",{type:"button","aria-label":x,title:x,"data-testid":`g7le-color-token-${y.value}`,"data-active":v?"true":"false",onClick:()=>t(v?void 0:y.value),style:{...$7,background:y.swatch||"#e2e8f0",outline:v?"2px solid #2563eb":"none"}},y.value)})}):!r&&a.jsx("div",{style:T7,"data-testid":"g7le-color-presets",children:b.map(y=>a.jsx("button",{type:"button","aria-label":y,"data-testid":`g7le-color-preset-${y}`,onClick:()=>t(y),style:{...$7,background:y,outline:u.toLowerCase()===y.toLowerCase()?"2px solid #2563eb":"none"}},y))})]})}const BY={display:"flex",flexDirection:"column",gap:8},HY={display:"flex",alignItems:"center",gap:6},WY={position:"relative",display:"inline-flex",cursor:"pointer"},UY={width:24,height:24,borderRadius:4,border:"1px solid #cbd5e1",display:"inline-block"},qY={flex:1,padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,fontFamily:"monospace"},FY={padding:"4px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",cursor:"pointer",color:"#64748b"},T7={display:"grid",gridTemplateColumns:"repeat(7, 1fr)",gap:4},$7={width:"100%",height:18,borderRadius:4,border:"1px solid #cbd5e1",cursor:"pointer",padding:0},VY={fontSize:11,color:"#94a3b8",fontStyle:"italic",padding:"2px 0"},ed=[{value:"fill",labelKey:"layout_editor.control.background_image.mode_fill",size:"cover",repeat:"no-repeat"},{value:"fit",labelKey:"layout_editor.control.background_image.mode_fit",size:"contain",repeat:"no-repeat"},{value:"tile",labelKey:"layout_editor.control.background_image.mode_tile",size:"auto",repeat:"repeat"}];function KY(n){return n&&typeof n=="object"&&!Array.isArray(n)?n:{}}function N7(n){return ed.find(t=>t.size===n.size&&t.repeat===n.repeat)?.value??"fill"}function GY({value:n,onChange:e,t}){const s=KY(n),{state:r}=Rn(),o=Tc(),[l,d]=w.useState(!1),[u,f]=w.useState(null),[g,h]=w.useState(s.url??""),[b,y]=w.useState([]),v=w.useRef(null),x=r.templateIdentifier,S=r.selectedRoute?.layoutName??"";qe.useEffect(()=>{h(s.url??"")},[s.url]);const _=w.useCallback(async()=>{if(!x||!S){y([]);return}const D=await b_(x,S);D.ok&&y(D.data)},[x,S]);w.useEffect(()=>{_()},[_]);const A=D=>{if(!D){e(void 0);return}const I=ed.find(W=>W.value===N7(s))??ed[0];e({url:D,size:s.size??I.size,repeat:s.repeat??I.repeat,position:s.position??"center"})},C=D=>{const I=ed.find(W=>W.value===D);!I||!s.url||e({url:s.url,size:I.size,repeat:I.repeat,position:s.position??"center"})},j=async D=>{const I=D.target.files?.[0];if(!I)return;d(!0),f(null);const W=await x_(x,S,I);W.ok?(A(W.data.url),_()):f(t("layout_editor.control.background_image.upload_failed")),d(!1),v.current&&(v.current.value="")},E=async D=>{(await v_(D.id)).ok&&y(W=>W.filter(z=>z.id!==D.id))},T=()=>{const D=o.open({ariaLabel:t("layout_editor.attachment_manager.title"),width:720,maxHeightRatio:.82,content:qe.createElement(w_,{templateIdentifier:x,layoutName:S,t,onSelect:I=>{A(I),o.close(D)},onChanged:()=>{_()},onClose:()=>o.close(D)})})};return a.jsxs("div",{className:"g7le-widget g7le-widget--image","data-testid":"g7le-widget-image",style:YY,children:[s.url&&a.jsx("div",{"data-testid":"g7le-image-preview",style:{...XY,backgroundImage:`url(${s.url})`,backgroundSize:s.size??"cover",backgroundRepeat:s.repeat??"no-repeat",backgroundPosition:s.position??"center"}}),a.jsxs("div",{style:JY,children:[a.jsxs("label",{style:ZY,children:[l?"…":t("layout_editor.control.background_image.upload"),a.jsx("input",{ref:v,type:"file",accept:"image/*","data-testid":"g7le-image-file",onChange:j,disabled:l,style:{display:"none"}})]}),a.jsx("button",{type:"button","data-testid":"g7le-image-clear",onClick:()=>e(void 0),style:QY,children:t("layout_editor.control.background_image.clear")})]}),a.jsx("input",{type:"text","data-testid":"g7le-image-url",placeholder:"https://… / URL",value:g,onChange:D=>h(D.target.value),onBlur:D=>A(D.target.value.trim()||void 0),style:eX}),a.jsx("div",{style:tX,"data-testid":"g7le-image-modes",children:ed.map(D=>{const I=N7(s)===D.value;return a.jsx("button",{type:"button","data-testid":`g7le-image-mode-${D.value}`,"data-active":I?"true":"false",disabled:!s.url,onClick:()=>C(D.value),style:{...nX,background:I&&s.url?"#2563eb":"#fff",color:I&&s.url?"#fff":"#0f172a"},children:t(D.labelKey)},D.value)})}),a.jsxs("div",{style:sX,"data-testid":"g7le-image-gallery",children:[a.jsxs("div",{style:rX,children:[a.jsx("span",{style:{fontSize:11,color:"#64748b"},children:t("layout_editor.attachment_manager.recent")}),a.jsxs("button",{type:"button","data-testid":"g7le-image-manage",onClick:T,style:oX,children:["🖼 ",t("layout_editor.attachment_manager.manage_link")]})]}),b.length>0?a.jsx("div",{style:aX,"data-testid":"g7le-image-thumbs",children:b.slice(0,8).map(D=>a.jsxs("div",{style:iX,"data-testid":`g7le-image-thumb-${D.id}`,children:[a.jsx("button",{type:"button",title:D.original_name,onClick:()=>A(D.url),style:{...lX,backgroundImage:`url(${D.url})`},"data-testid":`g7le-image-thumb-use-${D.id}`}),a.jsx("button",{type:"button",title:t("layout_editor.attachment_manager.delete"),onClick:()=>E(D),style:cX,"data-testid":`g7le-image-thumb-del-${D.id}`,children:"✕"})]},D.id))}):a.jsx("span",{style:{fontSize:11,color:"#94a3b8"},children:t("layout_editor.attachment_manager.empty")})]}),u&&a.jsx("span",{"data-testid":"g7le-image-error",style:{fontSize:11,color:"#dc2626"},children:u})]})}const YY={display:"flex",flexDirection:"column",gap:6},XY={width:"100%",height:80,borderRadius:6,border:"1px solid #cbd5e1"},JY={display:"flex",gap:6},ZY={padding:"5px 10px",fontSize:12,border:"1px solid #2563eb",borderRadius:6,background:"#fff",color:"#2563eb",cursor:"pointer",display:"inline-flex",alignItems:"center"},QY={padding:"5px 10px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#64748b",cursor:"pointer"},eX={padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6},tX={display:"inline-flex",border:"1px solid #cbd5e1",borderRadius:6,overflow:"hidden"},nX={padding:"4px 10px",fontSize:12,border:"none",borderRight:"1px solid #e2e8f0",cursor:"pointer"},sX={display:"flex",flexDirection:"column",gap:4,border:"1px solid #e2e8f0",borderRadius:6,padding:6,marginTop:2},rX={display:"flex",alignItems:"center",justifyContent:"space-between"},oX={fontSize:11,color:"#2563eb",background:"transparent",border:"none",cursor:"pointer",padding:0},aX={display:"flex",gap:6,flexWrap:"wrap"},iX={position:"relative",width:44,height:44},lX={width:44,height:44,borderRadius:6,border:"1px solid #cbd5e1",backgroundSize:"cover",backgroundPosition:"center",cursor:"pointer",padding:0},cX={position:"absolute",top:-6,right:-6,width:16,height:16,borderRadius:"50%",border:"none",background:"#dc2626",color:"#fff",fontSize:9,lineHeight:"16px",cursor:"pointer",padding:0};function dX(n){return Array.isArray(n)&&n.every(e=>e!==null&&typeof e=="object"&&!Array.isArray(e))}function uX(n){return typeof n=="string"&&/\{\{.*\}\}/.test(n)}function fX({value:n,onChange:e,t,bindingCandidates:s}){if(uX(n))return a.jsx("div",{className:"g7le-widget g7le-widget--options-list","data-testid":"g7le-widget-options-list-bound",style:vX,children:t("layout_editor.list_editor.bound_degraded")});const r=dX(n)?n:[],o=b=>{e(b.length===0?void 0:b)},l=(b,y)=>{const v=r.map((x,S)=>S===b?{...x,...y}:x);o(v)},d=b=>{o(r.filter((y,v)=>v!==b))},u=(b,y)=>{const v=b+y;if(v<0||v>=r.length)return;const x=[...r];[x[b],x[v]]=[x[v],x[b]],o(x)},f=()=>{o([...r,{value:"",label:""}])},g=b=>typeof b.label=="string"?b.label:b.label==null?"":String(b.label),h=b=>b.value===void 0||b.value===null?"":String(b.value);return a.jsxs("div",{className:"g7le-widget g7le-widget--options-list","data-testid":"g7le-widget-options-list",style:pX,children:[r.length===0&&a.jsx("div",{"data-testid":"g7le-options-empty",style:xX,children:t("layout_editor.list_editor.empty")}),r.map((b,y)=>a.jsxs("div",{"data-testid":`g7le-options-row-${y}`,style:gX,children:[a.jsxs("div",{style:D7,children:[a.jsx("span",{style:I7,children:t("layout_editor.list_editor.option_value")}),a.jsx("input",{type:"text","data-testid":`g7le-options-value-${y}`,value:h(b),placeholder:t("layout_editor.list_editor.option_value"),onChange:v=>l(y,{value:v.target.value}),style:mX})]}),a.jsxs("div",{style:D7,children:[a.jsx("span",{style:I7,children:t("layout_editor.list_editor.option_label")}),a.jsx("div",{"data-testid":`g7le-options-label-${y}`,style:{flex:1,minWidth:0},children:a.jsx(ks,{value:g(b),onChange:v=>l(y,{label:v??""}),t,placeholder:t("layout_editor.list_editor.option_label"),testidPrefix:`g7le-options-label-i18n-${y}`,candidates:s,enableExpressionTree:!0,expressionTreeCollapsible:!0})})]}),a.jsxs("div",{style:hX,children:[a.jsx("button",{type:"button","data-testid":`g7le-options-up-${y}`,title:t("layout_editor.list_editor.move_up"),disabled:y===0,onClick:()=>u(y,-1),style:L7,children:"↑"}),a.jsx("button",{type:"button","data-testid":`g7le-options-down-${y}`,title:t("layout_editor.list_editor.move_down"),disabled:y===r.length-1,onClick:()=>u(y,1),style:L7,children:"↓"}),a.jsx("button",{type:"button","data-testid":`g7le-options-remove-${y}`,title:t("layout_editor.list_editor.remove"),onClick:()=>d(y),style:yX,children:"✕"})]})]},y)),a.jsx("button",{type:"button","data-testid":"g7le-options-add",onClick:f,style:bX,children:t("layout_editor.list_editor.add")})]})}const pX={display:"flex",flexDirection:"column",gap:8,width:"100%"},gX={display:"flex",flexDirection:"column",gap:4,width:"100%",minWidth:0,paddingBottom:6,borderBottom:"1px solid #f1f5f9"},D7={display:"flex",gap:6,alignItems:"center",width:"100%",minWidth:0},I7={flexShrink:0,width:36,fontSize:11,color:"#94a3b8",textAlign:"right"},hX={display:"flex",gap:4,alignItems:"center",justifyContent:"flex-end"},mX={flex:1,minWidth:0,padding:"4px 6px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6},L7={padding:"2px 6px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},yX={padding:"2px 6px",fontSize:12,border:"1px solid #fecaca",borderRadius:6,background:"#fff",color:"#dc2626",cursor:"pointer"},bX={padding:"4px 8px",fontSize:12,border:"1px dashed #94a3b8",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer",alignSelf:"flex-start"},xX={fontSize:11,color:"#94a3b8",fontStyle:"italic"},vX={fontSize:11,color:"#b45309",fontStyle:"italic",padding:"4px 2px"},O7=/[^A-Za-z0-9\-_:.]/g;function wX(n){return typeof n=="string"&&nm(n)}function M7(n){return nm(n)?Wa(n).map(e=>e.kind==="binding"?e.raw:e.raw.replace(O7,"")).join(""):n.replace(O7,"")}const _X={width:"100%",padding:"6px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:4,fontFamily:"monospace"},SX={marginTop:4,fontSize:11,color:"#94a3b8"},kX={display:"flex",gap:6,alignItems:"center"},CX={flexShrink:0,padding:"5px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:4,background:"#f8fafc",cursor:"pointer",whiteSpace:"nowrap"};function jX({value:n,onChange:e,t,bindingCandidates:s}){const r=n==null?"":String(n),o=wX(n),l=!!s&&s.length>0,[d,u]=w.useState(!1),f=g=>{const h=M7(g);e(h===""?void 0:h)};return o||d?a.jsxs("div",{"data-testid":"g7le-core-id-chip",children:[a.jsx(Rm,{value:r,onChange:f,t,candidates:s,onDone:()=>u(!1),testidPrefix:"g7le-core-id-chip-input"}),a.jsx("div",{style:SX,children:t("layout_editor.core_props.id.binding_hint")})]}):a.jsx("div",{children:a.jsxs("div",{style:kX,children:[a.jsx("input",{type:"text",className:"g7le-widget g7le-widget--core-id","data-testid":"g7le-widget-core-id",value:r,onChange:g=>{const h=M7(g.target.value);e(h===""?void 0:h)},spellCheck:!1,autoComplete:"off",style:_X}),l&&a.jsxs("button",{type:"button","data-testid":"g7le-core-id-add-data",onClick:()=>u(!0),style:CX,title:t("layout_editor.core_props.id.add_data"),children:["🔗 ",t("layout_editor.core_props.id.add_data")]})]})})}const EX=/[^A-Za-z0-9.\-_]/g;function RX(n){return typeof n=="string"&&/\{\{[\s\S]*?\}\}/.test(n)}function AX(n){return n.replace(EX,"")}const z7={width:"100%",padding:"6px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:4,fontFamily:"monospace",boxSizing:"border-box"},TX={...z7,background:"#f1f5f9",color:"#64748b",cursor:"not-allowed"},P7={marginTop:4,fontSize:11,color:"#94a3b8"};function $X({value:n,onChange:e,t}){const s=n==null?"":String(n);return RX(n)?a.jsxs("div",{"data-testid":"g7le-core-datakey-bound",children:[a.jsx("input",{type:"text",className:"g7le-widget g7le-widget--core-datakey-bound","data-testid":"g7le-widget-core-datakey",value:s,readOnly:!0,disabled:!0,style:TX}),a.jsx("div",{style:P7,children:t("layout_editor.core_props.dataKey.bound_degraded")})]}):a.jsxs("div",{children:[a.jsx("input",{type:"text",className:"g7le-widget g7le-widget--core-datakey","data-testid":"g7le-widget-core-datakey",value:s,placeholder:t("layout_editor.core_props.dataKey.placeholder"),onChange:o=>{const l=AX(o.target.value);e(l===""?void 0:l)},spellCheck:!1,autoComplete:"off",style:z7}),a.jsx("div",{style:P7,children:t("layout_editor.core_props.dataKey.hint")})]})}let B7=!1;function NX(){B7||(Sn("segmented",pY),Sn("slider",gY),Sn("select",hY),Sn("dimension",yY),Sn("spacing",vY),Sn("toggle",mY),Sn("color",PY),Sn("image",GY),Sn("tag-input",Em),Sn("page-picker",r8),Sn("datasource-picker",wk),Sn("binding-picker",wk),Sn("binding-list",i8),Sn("state-key-picker",zm),Sn("modal-picker",o8),Sn("i18n-text",a8),Sn("text",l8),Sn("options-list",fX),Sn("core-id",jX),Sn("core-datakey",$X),Sn("component-target-picker",EK),B7=!0)}function td(n){return Array.isArray(n.children)?n.children:[]}function nd(n){if(typeof n.text=="string")return[];let e=null;const t=(s,r)=>{const o=td(s);for(let l=0;l<o.length;l++){const d=o[l],u=[...r,l];if(typeof d.text=="string")if(d.text.trim().length<=1)e===null&&(e=u);else return u;const f=t(d,u);if(f)return f}return null};return t(n,[])??e}function Qf(n,e){let t=n;for(const s of e){if(!t)return null;t=td(t)[s]??null}return t}function sd(n,e,t){if(e.length===0)return{...n,text:t};const[s,...r]=e,l=td(n).map((d,u)=>u===s?sd(d,r,t):d);return{...n,children:l}}function H7(n,e){const t=r=>typeof r.props?.[e]=="string";if(t(n))return[];const s=(r,o)=>{const l=td(r);for(let d=0;d<l.length;d++){const u=l[d],f=[...o,d];if(t(u))return f;const g=s(u,f);if(g)return g}return null};return s(n,[])}function W7(n,e,t,s){if(e.length===0)return{...n,props:{...n.props??{},[t]:s}};const[r,...o]=e,d=td(n).map((u,f)=>f===r?W7(u,o,t,s):u);return{...n,children:d}}function DX(n){return Array.isArray(n.children)?n.children:[]}function IX(n){const e=n?.itemFields;if(!Array.isArray(e))return[{kind:"text"}];const t=[];for(const s of e){if(!s||typeof s!="object")continue;const r=s;r.kind==="text"?t.push({kind:"text",label:typeof r.label=="string"?r.label:void 0}):r.kind==="prop"&&typeof r.prop=="string"&&r.prop.length>0&&t.push({kind:"prop",prop:r.prop,label:typeof r.label=="string"?r.label:void 0})}return t.length>0?t:[{kind:"text"}]}function Gy(n,e){if(!(typeof n!="string"||n.length===0))return n.startsWith("$t:")?e(n.slice(3)):n}function U7({node:n,params:e,spec:t,manifest:s,t:r,onPatchNode:o,templateIdentifier:l,candidates:d}){const u=typeof e?.childComponent=="string"?e.childComponent:null,f=e?.childTemplate&&typeof e.childTemplate=="object"?e.childTemplate:null,g=IX(e),h=Gy(typeof e?.childLabel=="string"?e.childLabel:void 0,r)??u??"",b=DX(n),y=w.useCallback(E=>{o({...n,children:E})},[n,o]),v=w.useCallback(()=>{if(f)return JSON.parse(JSON.stringify(f));if(!u)return null;const E=t?.componentPalette?.entries?.[u];if(E?.defaultNode&&typeof E.defaultNode=="object")return JSON.parse(JSON.stringify(E.defaultNode));const T=s?.components??{};let D=null;for(const I of Object.values(T))if(Array.isArray(I)){const W=I.find(z=>z.name===u);if(W){D=W;break}}return D?kC(D):{type:"basic",name:u}},[f,u,t,s]),x=w.useCallback(()=>{const E=v();if(E){if(E.text==="")E.text=r("layout_editor.list_editor.new_item");else{const T=nd(E);if(T!==null&&T.length>0){const D=Qf(E,T);if(D&&D.text===""){const I=sd(E,T,r("layout_editor.list_editor.new_item"));y([...b,I]);return}}}y([...b,E])}},[v,y,b,r]),S=w.useCallback(E=>{y(b.filter((T,D)=>D!==E))},[y,b]),_=w.useCallback((E,T)=>{const D=E+T;if(D<0||D>=b.length)return;const I=[...b];[I[E],I[D]]=[I[D],I[E]],y(I)},[y,b]),A=w.useCallback((E,T)=>{if(typeof T!="string"||T.length===0)return;const D=b[E];if(!D)return;const I=nd(D);if(I===null)return;const W=b.map((z,H)=>H===E?sd(z,I,T):z);y(W)},[b,y]),C=w.useCallback((E,T,D)=>{if(typeof D!="string"||D.length===0)return;const I=b[E];if(!I)return;const W=H7(I,T);if(W===null)return;const z=b.map((H,G)=>G===E?W7(H,W,T,D):H);y(z)},[b,y]);if(!u&&!f)return a.jsx("div",{className:"g7le-node-editor g7le-node-editor--children","data-testid":"g7le-children-editor-misconfigured",style:V7,children:r("layout_editor.list_editor.no_child_component")});const j=g.length>1||g.some(E=>E.label);return a.jsxs("div",{className:"g7le-node-editor g7le-node-editor--children","data-testid":"g7le-children-editor",style:LX,children:[a.jsx("div",{style:OX,children:r("layout_editor.list_editor.items_title")}),b.length===0&&a.jsx("div",{"data-testid":"g7le-children-empty",style:V7,children:r("layout_editor.list_editor.empty")}),b.map((E,T)=>{const D=[];for(const W of g)if(W.kind==="text"){const z=nd(E),H=z!==null?Qf(E,z):null;H&&typeof H.text=="string"&&D.push({key:"text",caption:Gy(W.label,r)??(j?r("layout_editor.list_editor.item_label"):void 0),value:H.text,onChange:G=>A(T,G),testid:`g7le-children-i18n-${T}`})}else if(W.kind==="prop"&&W.prop){const z=H7(E,W.prop);if(z!==null){const G=Qf(E,z)?.props?.[W.prop];D.push({key:`prop-${W.prop}`,caption:Gy(W.label,r)??W.prop,value:typeof G=="string"?G:"",onChange:F=>C(T,W.prop,F),testid:`g7le-children-prop-${W.prop}-${T}`})}}const I=typeof E?.name=="string"?E.name:r("layout_editor.list_editor.item");return a.jsxs("div",{"data-testid":`g7le-children-row-${T}`,style:MX,children:[D.length>0?D.map(W=>a.jsx("div",{style:q7,children:a.jsxs("div",{"data-testid":W.key==="text"?`g7le-children-text-${T}`:`g7le-children-field-${W.key}-${T}`,style:zX,children:[W.caption!==void 0&&a.jsx("div",{"data-testid":`g7le-children-caption-${W.key}-${T}`,style:PX,children:W.caption}),a.jsx(ks,{value:W.value,onChange:W.onChange,t:r,placeholder:r("layout_editor.list_editor.item_text"),testidPrefix:W.testid,candidates:d,enableExpressionTree:!0,expressionTreeCollapsible:!0})]})},W.key)):a.jsx("div",{style:q7,children:a.jsx("span",{"data-testid":`g7le-children-label-${T}`,style:HX,children:I})}),a.jsxs("div",{style:BX,children:[a.jsx("button",{type:"button","data-testid":`g7le-children-up-${T}`,title:r("layout_editor.list_editor.move_up"),disabled:T===0,onClick:()=>_(T,-1),style:F7,children:"↑"}),a.jsx("button",{type:"button","data-testid":`g7le-children-down-${T}`,title:r("layout_editor.list_editor.move_down"),disabled:T===b.length-1,onClick:()=>_(T,1),style:F7,children:"↓"}),a.jsx("button",{type:"button","data-testid":`g7le-children-remove-${T}`,title:r("layout_editor.list_editor.remove"),onClick:()=>S(T),style:WX,children:"✕"})]})]},T)}),a.jsx("button",{type:"button","data-testid":"g7le-children-add",onClick:x,style:UX,children:r("layout_editor.list_editor.add_child",{component:h})})]})}const LX={display:"flex",flexDirection:"column",gap:6,width:"100%",marginBottom:12},OX={fontSize:12,fontWeight:700,color:"#0f172a",marginBottom:2},MX={display:"flex",flexDirection:"column",gap:4,width:"100%",minWidth:0,paddingBottom:6,borderBottom:"1px solid #f1f5f9"},q7={display:"flex",gap:4,alignItems:"flex-start",width:"100%",minWidth:0},zX={flex:1,minWidth:0},PX={fontSize:11,color:"#64748b",marginBottom:2},BX={display:"flex",gap:4,alignItems:"center",justifyContent:"flex-end"},HX={flex:1,minWidth:0,padding:"4px 6px",fontSize:12,color:"#475569",fontStyle:"italic",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},F7={padding:"2px 6px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},WX={padding:"2px 6px",fontSize:12,border:"1px solid #fecaca",borderRadius:6,background:"#fff",color:"#dc2626",cursor:"pointer"},UX={padding:"4px 8px",fontSize:12,border:"1px dashed #94a3b8",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer",alignSelf:"flex-start"},V7={fontSize:11,color:"#94a3b8",fontStyle:"italic"},pl={rowContainer:"Tbody",row:"Tr",cell:"Td",headerCell:"Th",colSpanProp:"colSpan",rowSpanProp:"rowSpan"};function bs(n){return{rowContainer:n?.rowContainer??pl.rowContainer,row:n?.row??pl.row,cell:n?.cell??pl.cell,headerCell:n?.headerCell??pl.headerCell,colSpanProp:n?.colSpanProp??pl.colSpanProp,rowSpanProp:n?.rowSpanProp??pl.rowSpanProp}}function Ja(n){return n?Array.isArray(n.children)?n.children:[]:[]}function K7(n,e){const t=n.props?.[e],s=typeof t=="number"?t:typeof t=="string"?parseInt(t,10):NaN;return Number.isFinite(s)&&s>=1?Math.floor(s):1}function Zt(n,e){const t=bs(e),s=[],r=Ja(n),o=[];r.forEach((h,b)=>{(Ja(h).some(x=>x.name===t.row)||h.name===t.rowContainer||h.name==="Thead"||h.name==="Tfoot")&&o.push({container:h,containerIndex:b,isHeader:h.name==="Thead"})}),o.length===0&&r.some(h=>h.name===t.row)&&o.push({container:n,containerIndex:-1,isHeader:!1});const l=[],d=[];let u=0,f=0;const g=h=>{for(;l.length<=h;)l.push([]);return l[h]};o.forEach((h,b)=>{Ja(h.container).filter(v=>v.name===t.row).forEach((v,x)=>{const S=[],_=g(u);let A=0;Ja(v).filter(j=>j.name===t.cell||j.name===t.headerCell).forEach((j,E)=>{for(;_[A];)A++;const T=K7(j,t.colSpanProp),D=K7(j,t.rowSpanProp),I={cell:j,sectionIndex:b,rowIndexInSection:x,cellIndexInRow:E,gridRow:u,gridCol:A,colSpan:T,rowSpan:D,isHeader:j.name===t.headerCell};S.push(I);for(let W=0;W<D;W++){const z=g(u+W);for(let H=0;H<T;H++)z[A+H]&&s.push(`overlap at row ${u+W}, col ${A+H}`),z[A+H]=!0}A+=T}),f=Math.max(f,A),d.push({cells:S,sectionIndex:b,rowIndexInSection:x,rowNode:v}),u++})});for(let h=0;h<u;h++){const b=l[h]??[];for(let y=0;y<f;y++)b[y]||s.push(`hole at row ${h}, col ${y}`)}return{sections:o,rows:d,colCount:f,valid:s.length===0,issues:s}}function Yy(n,e,t){const s=bs(t),o=Zt(n,t).sections[e.sectionIndex],l=[];let d;o&&o.containerIndex>=0?(l.push(o.containerIndex),d=Ja(n)[o.containerIndex]??n):d=n;let u=-1,f=-1,g=null;const h=Ja(d);for(let v=0;v<h.length;v++)if(h[v].name===s.row&&(u++,u===e.rowIndexInSection)){f=v,g=h[v];break}if(f<0||!g)return l;l.push(f);let b=-1;const y=Ja(g);for(let v=0;v<y.length;v++){const x=y[v].name;if((x===s.cell||x===s.headerCell)&&(b++,b===e.cellIndexInRow))return l.push(v),l}return l}function hn(n,e,t){for(const s of n.rows)for(const r of s.cells)if(e>=r.gridRow&&e<r.gridRow+r.rowSpan&&t>=r.gridCol&&t<r.gridCol+r.colSpan)return r;return null}function G7(n){if(n.colCount===0)return[];const e=new Set([0,n.colCount]);for(let r=1;r<n.colCount;r++){let o=!1;for(const l of n.rows){for(const d of l.cells)if(d.gridCol<r&&d.gridCol+d.colSpan>r){o=!0;break}if(o)break}o||e.add(r)}const t=Array.from(e).sort((r,o)=>r-o),s=[];for(let r=0;r<t.length-1;r++)s.push({start:t[r],end:t[r+1]});return s}function Y7(n){const e=n.rows.length;if(e===0)return[];const t=l=>n.rows.find(d=>(d.cells[0]?.gridRow??-1)===l)?.sectionIndex??n.rows[l]?.sectionIndex??0,s=new Set([0,e]);for(let l=1;l<e;l++){if(t(l)!==t(l-1)){s.add(l);continue}let d=!1;for(const u of n.rows){for(const f of u.cells)if(f.gridRow<l&&f.gridRow+f.rowSpan>l){d=!0;break}if(d)break}d||s.add(l)}const r=Array.from(s).sort((l,d)=>l-d),o=[];for(let l=0;l<r.length-1;l++)o.push({start:r[l],end:r[l+1],sectionIndex:t(r[l])});return o}function ep(n,e,t){const s=Y7(n),r=s.findIndex(l=>e>=l.start&&e<l.end);if(r<0)return{ok:!1,reason:"boundary"};const o=r+t;return o<0||o>=s.length?{ok:!1,reason:"boundary"}:s[r].sectionIndex!==s[o].sectionIndex?{ok:!1,reason:"section"}:{ok:!0}}function tp(n,e,t){const s=G7(n),r=s.findIndex(l=>e>=l.start&&e<l.end);if(r<0)return{ok:!1,reason:"boundary"};const o=r+t;return o<0||o>=s.length?{ok:!1,reason:"boundary"}:{ok:!0}}function xn(n){return n?Array.isArray(n.children)?n.children:[]:[]}function ra(n,e,t){const s={...n.props??{}};t<=1?delete s[e]:s[e]=t;const r={...n,props:s};return Object.keys(s).length===0&&delete r.props,r}function np(n,e,t=!1){const s={type:"basic",name:t?n.headerCell:n.cell},r=e?.props?.className;return typeof r=="string"&&r&&(s.props={className:r}),s.text="",s}function rd(n,e){return n.name===e.cell||n.name===e.headerCell}function Hn(n,e,t,s){const r=e.sections[t];if(!r)return n;if(r.containerIndex===-1)return s(n);const o=xn(n).map((l,d)=>d===r.containerIndex?s(l):l);return{...n,children:o}}function xs(n,e,t,s){let r=-1;const o=xn(n).map(l=>l.name===e&&(r++,r===t)?s(l):l);return{...n,children:o}}function sp(n,e,t){let s=-1;const r=xn(n);for(let o=0;o<r.length;o++)if(rd(r[o],e)&&(s++,s===t))return o;return-1}function Xy(n,e,t){const s=bs(e),r=Zt(n,e);if(r.rows.length===0||r.colCount===0){const _={type:"basic",name:s.row,children:[np(s)]};return r.sections.length>0?Hn(n,r,r.sections.length-1,A=>({...A,children:[...xn(A),_]})):{...n,children:[...xn(n),_]}}const o=Math.max(-1,Math.min(t,r.rows.length-1)),l=o<0?r.rows[0]:r.rows[o],d=l.cells[0]?.gridRow??o,u=o<0?0:d+1,f=l.sectionIndex,g=o<0?0:l.rowIndexInSection+1,h=[],b=[];let y=0;for(;y<r.colCount;){const _=u>0?hn(r,u-1,y):null;_&&_.gridRow+_.rowSpan>u&&_.rowSpan>1?(b.push(_),y+=_.colSpan):(h.push(np(s)),y+=1)}let v=n;for(const _ of b)v=Hn(v,r,_.sectionIndex,A=>xs(A,s.row,_.rowIndexInSection,C=>({...C,children:xn(C).map((j,E)=>E===_.cellIndexInRow?ra(j,s.rowSpanProp,_.rowSpan+1):j)})));const x={type:"basic",name:s.row,children:h},S=Zt(v,e);return v=Hn(v,S,f,_=>{const A=xn(_);let C=0,j=A.length;for(let E=0;E<A.length;E++)if(A[E].name===s.row){if(C===g){j=E;break}C++}return{..._,children:[...A.slice(0,j),x,...A.slice(j)]}}),v}function X7(n,e,t){const s=bs(e),r=Zt(n,e);if(t<0||t>=r.rows.length||r.rows.length<=1)return n;const o=r.rows[t],l=o.cells[0]?.gridRow??t;let d=n;const u=new Set;for(let g=0;g<r.colCount;){const h=hn(r,l,g);h&&h.gridRow<l&&!u.has(h.cell)&&(u.add(h.cell),d=Hn(d,r,h.sectionIndex,b=>xs(b,s.row,h.rowIndexInSection,y=>({...y,children:xn(y).map((v,x)=>x===h.cellIndexInRow?ra(v,s.rowSpanProp,h.rowSpan-1):v)})))),g+=h?h.colSpan:1}const f=Zt(d,e);return d=Hn(d,f,o.sectionIndex,g=>{let h=-1;const b=xn(g).filter(y=>y.name===s.row?(h++,h!==o.rowIndexInSection):!0);return{...g,children:b}}),d}function J7(n,e,t,s){const r=bs(e),o=Zt(n,e);if(!ep(o,t,s).ok)return n;const l=Y7(o),d=l.findIndex(x=>t>=x.start&&t<x.end),u=d+s,f=l[d],g=l[u],h=f.sectionIndex,b=x=>o.rows.filter(S=>{const _=S.cells[0]?.gridRow??-1;return S.sectionIndex===h&&_>=x.start&&_<x.end}).map(S=>S.rowIndexInSection),y=b(f),v=b(g);return y.length===0||v.length===0?n:Hn(n,o,h,x=>{const S=[...xn(x)],_=[];S.forEach((Y,U)=>{Y.name===r.row&&_.push(U)});const A=y.map(Y=>_[Y]).filter(Y=>Y!==void 0),C=v.map(Y=>_[Y]).filter(Y=>Y!==void 0);if(A.length===0||C.length===0)return x;const j=A.map(Y=>S[Y]),E=C.map(Y=>S[Y]),T=Math.min(...A)<Math.min(...C),D=T?A:C,I=T?j:E,W=T?C:A,z=T?E:j,H=Math.min(...D),G=Math.max(...W),F=[...z,...I],Z=[...S.slice(0,H),...F,...S.slice(G+1)];return{...x,children:Z}})}function Z7(n,e,t,s){const r=bs(e),o=Zt(n,e);if(!tp(o,t,s).ok)return n;const l=G7(o),d=l.findIndex(v=>t>=v.start&&t<v.end),u=d+s,f=l[d],g=l[u],h=f.start<g.start?f:g,b=f.start<g.start?g:f;let y=n;for(const v of o.rows){const x=v.cells.filter(j=>j.gridCol>=h.start&&j.gridCol<h.end),S=v.cells.filter(j=>j.gridCol>=b.start&&j.gridCol<b.end);if(x.length===0||S.length===0)continue;const _=x.map(j=>j.cellIndexInRow),A=S.map(j=>j.cellIndexInRow),C=Zt(y,e);y=Hn(y,C,v.sectionIndex,j=>xs(j,r.row,v.rowIndexInSection,E=>{const T=[...xn(E)],D=_.map(Y=>sp(E,r,Y)).filter(Y=>Y>=0),I=A.map(Y=>sp(E,r,Y)).filter(Y=>Y>=0);if(D.length===0||I.length===0)return E;const W=D.map(Y=>T[Y]),z=I.map(Y=>T[Y]),H=Math.min(...D,...I),G=Math.max(...D,...I),F=[...z,...W],Z=[...T.slice(0,H),...F,...T.slice(G+1)];return{...E,children:Z}}))}return y}function Q7(n,e,t){const s=bs(e),r=Zt(n,e);if(r.rows.length===0||r.colCount===0)return Xy(n,e,-1);const o=Math.max(0,Math.min(t+1,r.colCount));let l=n;const d=new Set;for(const u of r.rows){const f=u.cells[0]?.gridRow??0,g=o>0?hn(r,f,o-1):null,h=o<r.colCount?hn(r,f,o):null;if(g&&h&&g.cell===h.cell&&g.colSpan>1){if(!d.has(g.cell)){d.add(g.cell);const x=Zt(l,e);l=Hn(l,x,g.sectionIndex,S=>xs(S,s.row,g.rowIndexInSection,_=>({..._,children:xn(_).map((A,C)=>C===g.cellIndexInRow?ra(A,s.colSpanProp,g.colSpan+1):A)})))}continue}if(g&&g.gridRow<f||h&&h.gridRow<f)continue;const b=g&&g.gridRow===f?g.cellIndexInRow:-1,y=u.cells.length>0&&u.cells.every(x=>x.isHeader),v=Zt(l,e);l=Hn(l,v,u.sectionIndex,x=>xs(x,s.row,u.rowIndexInSection,S=>{const _=[...xn(S)];let A;if(b<0)A=_.findIndex(C=>rd(C,s)),A<0&&(A=_.length);else{const C=sp(S,s,b);A=C<0?_.length:C+1}return _.splice(A,0,np(s,void 0,y)),{...S,children:_}}))}return l}function ej(n,e,t){const s=bs(e),r=Zt(n,e);if(t<0||t>=r.colCount||r.colCount<=1)return n;let o=n;const l=new Set;for(const d of r.rows){const u=d.cells[0]?.gridRow??0,f=hn(r,u,t);if(!(!f||l.has(f.cell)||f.gridRow<u))if(l.add(f.cell),f.colSpan>1){const g=Zt(o,e);o=Hn(o,g,f.sectionIndex,h=>xs(h,s.row,f.rowIndexInSection,b=>({...b,children:xn(b).map((y,v)=>v===f.cellIndexInRow?ra(y,s.colSpanProp,f.colSpan-1):y)})))}else{const g=Zt(o,e);o=Hn(o,g,f.sectionIndex,h=>xs(h,s.row,f.rowIndexInSection,b=>{let y=-1;const v=xn(b).filter(x=>rd(x,s)?(y++,y!==f.cellIndexInRow):!0);return{...b,children:v}}))}}return o}function Jy(n,e,t,s,r,o){const l=bs(e),d=Zt(n,e),u=Math.min(t,r),f=Math.max(t,r),g=Math.min(s,o),h=Math.max(s,o);if(u===f&&g===h)return{table:n,ok:!1,reason:"single"};if(!d.valid)return{table:n,ok:!1,reason:"invalid-grid"};const b=new Set;for(let _=u;_<=f;_++)for(let A=g;A<=h;A++){const C=hn(d,_,A);if(!C)return{table:n,ok:!1,reason:"hole"};if(C.gridRow<u||C.gridCol<g||C.gridRow+C.rowSpan-1>f||C.gridCol+C.colSpan-1>h)return{table:n,ok:!1,reason:"not-rectangular"};b.add(C)}const y=hn(d,u,g),v=Array.from(b).filter(_=>_!==y);let x=Hn(n,d,y.sectionIndex,_=>xs(_,l.row,y.rowIndexInSection,A=>({...A,children:xn(A).map((C,j)=>{if(j!==y.cellIndexInRow)return C;let E=ra(C,l.colSpanProp,h-g+1);return E=ra(E,l.rowSpanProp,f-u+1),E})})));const S=new Map;for(const _ of v){const A=`${_.sectionIndex}:${_.rowIndexInSection}`,C=S.get(A)??[];C.push(_),S.set(A,C)}for(const[_,A]of S){const C=parseInt(_.split(":")[0],10),j=A[0].rowIndexInSection,E=new Set(A.map(D=>D.cellIndexInRow)),T=Zt(x,e);x=Hn(x,T,C,D=>xs(D,l.row,j,I=>{let W=-1;const z=xn(I).filter(H=>rd(H,l)?(W++,!E.has(W)):!0);return{...I,children:z}}))}return{table:x,ok:!0}}function tj(n,e,t,s){const r=bs(e),o=Zt(n,e),l=hn(o,t,s);if(!l||l.colSpan<=1&&l.rowSpan<=1)return n;const d=l.gridRow,u=l.gridCol,f=l.gridRow+l.rowSpan-1,g=l.gridCol+l.colSpan-1,h=l.isHeader,b=typeof l.cell.props?.className=="string"?l.cell.props.className:void 0;let y=Hn(n,o,l.sectionIndex,v=>xs(v,r.row,l.rowIndexInSection,x=>({...x,children:xn(x).map((S,_)=>{if(_!==l.cellIndexInRow)return S;let A=ra(S,r.colSpanProp,1);return A=ra(A,r.rowSpanProp,1),A})})));for(let v=d;v<=f;v++)for(let x=u;x<=g;x++){if(v===d&&x===u)continue;const S=Zt(y,e),_=S.rows.find(j=>j.cells.some(E=>E.gridRow===v))??S.rows[v];if(!_)continue;let A=-1;for(const j of _.cells)j.gridRow===v&&j.gridCol<x&&(A=Math.max(A,j.cellIndexInRow));const C=b?{props:{className:b}}:null;y=Hn(y,S,_.sectionIndex,j=>xs(j,r.row,_.rowIndexInSection,E=>{const T=[...xn(E)];let D;if(A<0)D=T.findIndex(I=>rd(I,r)),D<0&&(D=T.length);else{const I=sp(E,r,A);D=I<0?T.length:I+1}return T.splice(D,0,np(r,C,h)),{...E,children:T}}))}return y}function rp(n,e,t,s,r){const o=bs(e),l=Zt(n,e),d=hn(l,t,s);return d?Hn(n,l,d.sectionIndex,u=>xs(u,o.row,d.rowIndexInSection,f=>({...f,children:xn(f).map((g,h)=>{if(h!==d.cellIndexInRow)return g;const b={...g.props??{}};r.trim()===""?delete b.className:b.className=r;const y={...g,props:b};return Object.keys(b).length===0&&delete y.props,y})}))):n}function no(n,e,t,s,r,o){const l=bs(e),d=Zt(n,e),u=hn(d,t,s);return u?Hn(n,d,u.sectionIndex,f=>xs(f,l.row,u.rowIndexInSection,g=>({...g,children:xn(g).map((h,b)=>{if(b!==u.cellIndexInRow)return h;const y={...h.props??{}},v={...y.style??{}};!o||o.trim()===""?delete v[r]:v[r]=o,Object.keys(v).length===0?delete y.style:y.style=v;const x={...h,props:y};return Object.keys(y).length===0&&delete x.props,x})}))):n}function gl(n,e,t,s,r,o,l){const d=bs(e),u=Zt(n,e),f=hn(u,t,s);if(!f)return n;const g=l==="dark";return Hn(n,u,f.sectionIndex,h=>xs(h,d.row,f.rowIndexInSection,b=>({...b,children:xn(b).map((y,v)=>{if(v!==f.cellIndexInRow)return y;const x={...y.props??{}},S=typeof x.className=="string"?x.className:"",_=BH(S,o,r,g);_===""?delete x.className:x.className=_;const A={...y,props:x};return Object.keys(x).length===0&&delete A.props,A})})))}function nj(n,e,t,s,r){const o=bs(e),l=Zt(n,e),d=hn(l,t,s);return d?Hn(n,l,d.sectionIndex,u=>xs(u,o.row,d.rowIndexInSection,f=>({...f,children:xn(f).map((g,h)=>h===d.cellIndexInRow?{...g,text:r}:g)}))):n}function sj(n,e,t,s,r){const o=bs(e),l=Zt(n,e),d=hn(l,t,s);return d?Hn(n,l,d.sectionIndex,u=>xs(u,o.row,d.rowIndexInSection,f=>({...f,children:xn(f).map((g,h)=>h===d.cellIndexInRow?r:g)}))):n}const rj=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;function qX(n){return n.split(/\s+/).filter(Boolean)}function oj(n,e){for(const t of e)if(n===t||/^-?\d+$/.test(n.slice(t.length+1))&&n.startsWith(t+"-"))return!0;return!1}function aj({className:n,catalog:e,t,onChange:s,colorScheme:r="light",onPresetToken:o,colorStyle:l,onColorStyle:d,disabled:u}){const f=e?.sides??[],g=e?.widths??[],h=e?.colors??[],b=r==="dark",y=w.useMemo(()=>f.map(z=>z.prefix),[f]),v=w.useMemo(()=>new Set(h.map(z=>z.token)),[h]),x=w.useMemo(()=>qX(n),[n]),S=w.useMemo(()=>Lf(n,b),[n,b]),_=w.useMemo(()=>S.find(z=>v.has(z))??null,[S,v]),A=w.useMemo(()=>{const z=new Set;for(const H of f)x.some(F=>F===H.prefix||F.startsWith(H.prefix+"-")&&/^-?\d+$/.test(F.slice(H.prefix.length+1)))&&z.add(H.value);return z},[x,f]),C=w.useMemo(()=>{const z=x.find(G=>oj(G,y));if(!z)return"none";const H=g.filter(G=>G.value!=="none");for(const G of f){if(z===G.prefix)return H.find(F=>(F.suffix??"")==="")?.value??"thin";if(z.startsWith(G.prefix+"-")){const F=z.slice(G.prefix.length),Z=H.find(Y=>(Y.suffix??"")===F);if(Z)return Z.value}}return"thin"},[x,y,f,g]);if(!e||f.length===0||g.length===0)return null;function j(z){return z.filter(H=>!oj(H,y))}function E(z,H){const G=j(x),F=g.find(U=>U.value===H);if(!F||H==="none"||z.size===0)return G.join(" ").trim();const Z=F.suffix??"",Y=[...G];for(const U of f)z.has(U.value)&&Y.push(Z?`${U.prefix}${Z}`:U.prefix);return Y.join(" ").trim()}const T=z=>{const H=new Set(A);H.has(z)?H.delete(z):(z==="all"?H.clear():H.delete("all"),H.add(z));const G=C==="none"?g.find(F=>F.value!=="none")?.value??"thin":C;s(E(H,G))},D=z=>{const H=A.size===0?new Set(["all"]):A;s(E(H,z))},I=z=>{o?.(z)},W=(z,H)=>z&&z.startsWith("$t:")?t(z.slice(3)):z||H;return a.jsxs("div",{className:"g7le-cell-border","data-testid":"g7le-cell-border",style:FX,children:[a.jsx("div",{style:VX,children:a.jsx("span",{style:KX,children:t("layout_editor.table_editor.cell_border")})}),a.jsx("div",{style:Zy,"data-testid":"g7le-cell-border-widths",children:g.map(z=>a.jsx("button",{type:"button",disabled:u,"data-testid":`g7le-cell-border-width-${z.value}`,"aria-pressed":C===z.value,onClick:()=>D(z.value),style:C===z.value?ij:Qy,children:W(z.label,z.value)},z.value))}),C!=="none"&&a.jsx("div",{style:Zy,"data-testid":"g7le-cell-border-sides",children:f.map(z=>a.jsx("button",{type:"button",disabled:u,"data-testid":`g7le-cell-border-side-${z.value}`,"aria-pressed":A.has(z.value),onClick:()=>T(z.value),style:A.has(z.value)?ij:Qy,children:W(z.label,z.value)},z.value))}),C!=="none"&&(h.length>0||d)&&a.jsx(a.Fragment,{children:a.jsxs("div",{style:Zy,"data-testid":"g7le-cell-border-colors",children:[h.map(z=>{const H=_===z.token;return a.jsx("button",{type:"button",disabled:u,title:W(z.label,z.value),"data-testid":`g7le-cell-border-color-${z.value}`,"aria-pressed":H,onClick:()=>I(z.token),style:{...lj,background:z.swatch??"#fff",outline:H?"2px solid #2563eb":"1px solid #cbd5e1"}},z.value)}),d&&(()=>{const z=!!l&&h.some(G=>G.swatch&&G.swatch.toLowerCase()===l.toLowerCase()),H=!b&&!!l&&!z;return a.jsx("label",{title:t(b?"layout_editor.table_editor.dark_free_color_hint":"layout_editor.table_inplace.custom_color"),"data-testid":"g7le-cell-border-color-custom",style:{...lj,position:"relative",overflow:"hidden",display:"inline-flex",alignItems:"center",justifyContent:"center",background:H&&rj.test(l)?l:"conic-gradient(red, yellow, lime, aqua, blue, magenta, red)",outline:H?"2px solid #2563eb":"1px solid #cbd5e1",opacity:b?.4:1,cursor:b?"not-allowed":"pointer"},children:a.jsx("input",{type:"color",disabled:u||b,"data-testid":"g7le-cell-border-color-picker",value:l&&rj.test(l)?l:"#000000",onChange:G=>d(G.target.value),style:{position:"absolute",width:0,height:0,opacity:0}})})})()]})})]})}const FX={display:"flex",flexDirection:"column",gap:6},VX={display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},KX={fontSize:12,fontWeight:600,color:"#475569"},Zy={display:"flex",gap:4,flexWrap:"wrap",alignItems:"center"},Qy={padding:"3px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},ij={...Qy,border:"1px solid #2563eb",background:"#eff6ff",color:"#1d4ed8",fontWeight:600},lj={width:22,height:22,borderRadius:5,padding:0,cursor:"pointer",boxSizing:"border-box"},cj=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;function dj({colorStyle:n,className:e,catalog:t,t:s,colorScheme:r="light",onPresetToken:o,onCustomColor:l,onClear:d,disabled:u}){const f=t?.colors??[],g=r==="dark",h=n??"",b=Lf(e??"",g),y=f.find(A=>A.token&&b.includes(A.token))?.token??null,v=(A,C)=>A&&A.startsWith("$t:")?s(A.slice(3)):A||C,x=!y&&(g||h.trim()===""),S=!!h&&f.some(A=>A.swatch&&A.swatch.toLowerCase()===h.toLowerCase()),_=!g&&!!h&&!S;return a.jsxs("div",{className:"g7le-cell-fill","data-testid":"g7le-cell-fill",style:GX,children:[a.jsx("div",{style:YX,children:a.jsx("span",{style:XX,children:s("layout_editor.table_editor.cell_fill")})}),a.jsxs("div",{style:JX,"data-testid":"g7le-cell-fill-colors",children:[a.jsx("button",{type:"button",disabled:u,title:s("layout_editor.table_editor.cell_fill_none"),"data-testid":"g7le-cell-fill-none","aria-pressed":x,onClick:()=>d?.(),style:{...eb,background:"repeating-conic-gradient(#e2e8f0 0% 25%, #ffffff 0% 50%) 50% / 10px 10px",outline:x?"2px solid #2563eb":"1px solid #cbd5e1"}}),f.map(A=>{const C=!!A.token&&y===A.token,j=!g&&!!A.swatch&&h.toLowerCase()===(A.swatch??"").toLowerCase(),E=C||j,T=u||g&&!A.token;return a.jsx("button",{type:"button",disabled:T,title:v(A.label,A.value),"data-testid":`g7le-cell-fill-color-${A.value}`,"aria-pressed":E,onClick:()=>{A.token&&o?o(A.token):!g&&A.swatch&&l&&l(A.swatch)},style:{...eb,background:A.swatch??"#fff",outline:E?"2px solid #2563eb":"1px solid #cbd5e1",opacity:T?.4:1,cursor:T?"not-allowed":"pointer"}},A.value)}),l&&a.jsx("label",{title:s(g?"layout_editor.table_editor.dark_free_color_hint":"layout_editor.table_editor.cell_fill_custom"),"data-testid":"g7le-cell-fill-custom",style:{...eb,position:"relative",overflow:"hidden",display:"inline-flex",alignItems:"center",justifyContent:"center",background:_&&cj.test(h)?h:"conic-gradient(red, yellow, lime, aqua, blue, magenta, red)",outline:_?"2px solid #2563eb":"1px solid #cbd5e1",opacity:g?.4:1,cursor:g?"not-allowed":"pointer"},children:a.jsx("input",{type:"color",disabled:u||g,"data-testid":"g7le-cell-fill-color-picker",value:h&&cj.test(h)?h:"#ffffff",onChange:A=>l(A.target.value),style:{position:"absolute",width:0,height:0,opacity:0}})})]})]})}const GX={display:"flex",flexDirection:"column",gap:6},YX={display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},XX={fontSize:12,fontWeight:600,color:"#475569"},JX={display:"flex",gap:4,flexWrap:"wrap",alignItems:"center"},eb={width:22,height:22,borderRadius:5,padding:0,cursor:"pointer",boxSizing:"border-box"};function ZX(n){const e=/^(\d+)px$/.exec(n.trim());return e?parseInt(e[1],10):null}function uj({paddingStyle:n,catalog:e,t,onChange:s,disabled:r}){const o=e?.steps??[],l=n??"",d=ZX(l),u=(x,S)=>x&&x.startsWith("$t:")?t(x.slice(3)):x||S,f=o.some(x=>(x.px??0)===(d??-1)),g=d!==null&&!f?String(d):"",[h,b]=w.useState(g);w.useEffect(()=>{b(g)},[n]);const y=x=>{s(x&&x>0?`${x}px`:""),b("")},v=x=>{const S=parseInt(x,10);Number.isFinite(S)&&S>=0&&s(S>0?`${S}px`:"")};return a.jsxs("div",{className:"g7le-cell-padding","data-testid":"g7le-cell-padding",style:QX,children:[a.jsx("div",{style:eJ,children:t("layout_editor.table_editor.cell_padding")}),a.jsxs("div",{style:tJ,"data-testid":"g7le-cell-padding-steps",children:[o.map(x=>{const S=(x.px??0)===(d??-1)||!x.px&&l.trim()==="";return a.jsx("button",{type:"button",disabled:r,"data-testid":`g7le-cell-padding-step-${x.value}`,"aria-pressed":S,onClick:()=>y(x.px),style:S?nJ:fj,children:u(x.label,x.value)},x.value)}),a.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:3},children:[a.jsx("input",{type:"number",min:0,disabled:r,"data-testid":"g7le-cell-padding-free",value:h,placeholder:t("layout_editor.table_editor.cell_padding_custom"),onChange:x=>b(x.target.value),onBlur:()=>h.trim()!==""&&v(h),onKeyDown:x=>{x.key==="Enter"&&h.trim()!==""&&v(h)},style:sJ}),a.jsx("span",{style:{fontSize:11,color:"#94a3b8"},children:"px"})]})]})]})}const QX={display:"flex",flexDirection:"column",gap:6},eJ={fontSize:12,fontWeight:600,color:"#475569"},tJ={display:"flex",gap:4,flexWrap:"wrap",alignItems:"center"},fj={padding:"3px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},nJ={...fj,border:"1px solid #2563eb",background:"#eff6ff",color:"#1d4ed8",fontWeight:600},sJ={width:48,padding:"3px 5px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,boxSizing:"border-box"};function pj({colorScheme:n,onChange:e,t,disabled:s}){const r=n==="dark";return a.jsxs("div",{className:"g7le-color-scheme-tabs","data-testid":"g7le-color-scheme-tabs",style:rJ,children:[a.jsxs("div",{style:oJ,children:[a.jsx("span",{style:aJ,children:t("layout_editor.table_editor.cell_color")}),a.jsxs("div",{style:iJ,children:[a.jsx("button",{type:"button",disabled:s,"data-testid":"g7le-color-scheme-light","aria-pressed":!r,onClick:()=>e("light"),style:r?tb:gj,children:t("layout_editor.property_modal.scope.scheme_light")}),a.jsx("button",{type:"button",disabled:s,"data-testid":"g7le-color-scheme-dark","aria-pressed":r,onClick:()=>e("dark"),style:r?gj:tb,children:t("layout_editor.property_modal.scope.scheme_dark")})]})]}),r&&a.jsx("div",{style:lJ,"data-testid":"g7le-color-scheme-dark-hint",children:t("layout_editor.table_editor.dark_free_color_hint")})]})}const rJ={display:"flex",flexDirection:"column",gap:3},oJ={display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},aJ={fontSize:12,fontWeight:700,color:"#0f172a"},iJ={display:"flex",gap:2},tb={padding:"2px 9px",fontSize:11,border:"none",borderBottom:"2px solid transparent",background:"transparent",color:"#94a3b8",cursor:"pointer"},gj={...tb,color:"#1d4ed8",borderBottom:"2px solid #2563eb",fontWeight:600},lJ={fontSize:10,color:"#94a3b8",fontStyle:"italic"},nb="dark:";function hj(n){return typeof n=="string"?n.split(/\s+/).filter(Boolean):[]}function mj(n,e){return e==="dark"?n.filter(t=>t.startsWith(nb)).map(t=>t.slice(nb.length)):n.filter(t=>!t.startsWith(nb))}const cJ={none:0,thin:1,medium:2,thick:4},yj={top:{w:"borderTopWidth",s:"borderTopStyle",c:"borderTopColor"},bottom:{w:"borderBottomWidth",s:"borderBottomStyle",c:"borderBottomColor"},left:{w:"borderLeftWidth",s:"borderLeftStyle",c:"borderLeftColor"},right:{w:"borderRightWidth",s:"borderRightStyle",c:"borderRightColor"}},bj=["top","bottom","left","right"];function dJ(n,e,t="light"){if(!n||!e)return{};const s=e.sides??[],r=e.widths??[],o=e.colors??[],l=hj(n.props?.className);if(l.length===0&&!n.props?.style)return{};const d=[...r].filter(_=>_.value!=="none").sort((_,A)=>(A.suffix??"").length-(_.suffix??"").length),u={};for(const _ of s)for(const A of d){const C=A.suffix?`${_.prefix}${A.suffix}`:_.prefix;if(l.includes(C)){u[_.value]=A.value;break}}const f=n.props?.style??{},g=mj(l,t),h=o.find(_=>g.includes(_.token))?.swatch??"",y=(t==="light"&&typeof f.borderColor=="string"?f.borderColor:"")||h||"#94a3b8",v=_=>{const A=yj[_]?.c,C=A?f[A]:void 0;return typeof C=="string"&&C?C:y},x={},S=(_,A)=>{const C=yj[_];if(!C)return;const j=cJ[A]??1;x[C.w]=`${j}px`,x[C.s]=j>0?"solid":"none",j>0&&(x[C.c]=v(_))};if(u.all)for(const _ of bj)S(_,u.all);for(const _ of bj)u[_]&&S(_,u[_]);return x}function uJ(n,e,t="light"){if(!n?.props)return{};const s=n.props.style??{},r={},o=hj(n.props.className),l=e?.colors?.find(f=>f.token&&mj(o,t).includes(f.token))?.swatch??"",u=(t==="light"&&typeof s.backgroundColor=="string"?s.backgroundColor:"")||l;return u&&(r.backgroundColor=u),typeof s.padding=="string"&&s.padding&&(r.padding=s.padding),r}const fJ=/^\s*\$t:(custom\.[a-zA-Z0-9._-]+)\s*$/,pJ=/^\s*\$t:([a-zA-Z0-9._-]+)\s*$/,gJ=/\{\{.*?\}\}/;function xj(n,e,t){const s=n?.text;if(typeof s!="string")return{display:"",editable:!1,isKey:!1};const r=Ss(s);if(r&&r.key.startsWith("custom.")){let l="";try{const d=ts.getInstance().translate(r.key,{templateId:e,locale:t});l=d&&d!==r.key?d:""}catch{l=""}return{display:l,editable:!0,isKey:!0}}if(gJ.test(s))return{display:s,editable:!1,isKey:!1};const o=pJ.exec(s);if(o){const l=o[1];let d="";try{const u=ts.getInstance().translate(l,{templateId:e,locale:t});d=u&&u!==l?u:""}catch{d=""}return{display:d,editable:!0,isKey:!0}}return{display:s,editable:!0,isKey:!1}}function sb(n){const e=nd(n);return e===null?{node:null,path:null}:{node:Qf(n,e),path:e}}function hJ(n){if(!n||typeof n.text!="string")return null;const e=fJ.exec(n.text);if(e)return e[1];const t=Ss(n.text);return t&&t.key.startsWith("custom.")?t.key:null}function mJ({node:n,params:e,t,onPatchNode:s,templateIdentifier:r,candidates:o}){const{state:l}=Rn(),d=l.selectedRoute?.layoutName??null,u=l.locale,f=r??l.templateIdentifier,g=w.useMemo(()=>e&&typeof e=="object"?e:null,[e]);w.useMemo(()=>bs(g),[g]);const h=w.useMemo(()=>Zt(n,g),[n,g]),b=w.useMemo(()=>{const xe=g?.cellBorder;return xe&&typeof xe=="object"?xe:null},[g]),y=w.useMemo(()=>{const xe=g?.cellBackground;return xe&&typeof xe=="object"?xe:null},[g]),v=w.useMemo(()=>{const xe=g?.cellPadding;return xe&&typeof xe=="object"?xe:null},[g]),[x,S]=w.useState(null),[_,A]=w.useState(null),[C,j]=w.useState({}),[E,T]=w.useState(!1),[D,I]=w.useState(null),[W,z]=w.useState(null),[H,G]=w.useState("light"),F=w.useCallback(xe=>s(xe),[s]),Z=w.useMemo(()=>x?hn(h,x.r,x.c):null,[h,x]),Y=W!==null?W:x?.c??null,U=D!==null?D:x?.r??null,B=w.useMemo(()=>{const xe=(b?.sides??[]).find(ke=>ke.value==="all")??(b?.sides??[])[0],We=(b?.widths??[]).find(ke=>ke.value!=="none");if(!xe||!We)return[];const Q=We.suffix??"";return[Q?`${xe.prefix}${Q}`:xe.prefix]},[b]),te=w.useCallback((xe,We,Q)=>{if(B.length===0)return xe;const ke=(b?.sides??[]).map(ve=>ve.prefix),ge=hn(Zt(xe,g),We,Q),he=(typeof ge?.cell?.props?.className=="string"?ge.cell.props.className:"").split(/\s+/).filter(Boolean);return he.some(ve=>ke.some(Re=>ve===Re||ve.startsWith(Re+"-")&&/^-?\d+$/.test(ve.slice(Re.length+1))))?xe:rp(xe,g,We,Q,[...he,...B].join(" ").trim())},[B,b,g]),q=w.useCallback(xe=>{if(!x)return;const We=Math.min(x.r,_?.r??x.r),Q=Math.max(x.r,_?.r??x.r),ke=Math.min(x.c,_?.c??x.c),ge=Math.max(x.c,_?.c??x.c),X=new Set,he=[];for(let ve=We;ve<=Q;ve++)for(let Re=ke;Re<=ge;Re++)X.add(`${ve}:${Re}`),he.push({r:ve,c:Re});let _e=n;for(const ve of he){if(_e=te(_e,ve.r,ve.c),_e=no(_e,g,ve.r,ve.c,"borderColor",xe),ve.r>0&&!X.has(`${ve.r-1}:${ve.c}`)){const Re=hn(Zt(_e,g),ve.r-1,ve.c);Re&&(_e=no(_e,g,Re.gridRow,Re.gridCol,"borderBottomColor",xe))}if(ve.c>0&&!X.has(`${ve.r}:${ve.c-1}`)){const Re=hn(Zt(_e,g),ve.r,ve.c-1);Re&&(_e=no(_e,g,Re.gridRow,Re.gridCol,"borderRightColor",xe))}}F(_e)},[x,_,n,g,F,te]),M=w.useCallback(xe=>q(xe),[q]),N=w.useMemo(()=>(b?.colors??[]).map(xe=>xe.token).filter(Boolean),[b]),V=w.useCallback(xe=>{if(!x||N.length===0)return;const We=Math.min(x.r,_?.r??x.r),Q=Math.max(x.r,_?.r??x.r),ke=Math.min(x.c,_?.c??x.c),ge=Math.max(x.c,_?.c??x.c);let X=n;for(let he=We;he<=Q;he++)for(let _e=ke;_e<=ge;_e++)X=te(X,he,_e),X=gl(X,g,he,_e,xe,N,H);F(X)},[x,_,n,g,F,te,N,H]),ee=w.useMemo(()=>{if(H==="dark")return"";const xe=Z?.cell.props?.style;return typeof xe?.borderColor=="string"?xe.borderColor:""},[Z,H]),se=w.useCallback((xe,We)=>{if(!x)return;const Q=Math.min(x.r,_?.r??x.r),ke=Math.max(x.r,_?.r??x.r),ge=Math.min(x.c,_?.c??x.c),X=Math.max(x.c,_?.c??x.c);let he=n;for(let _e=Q;_e<=ke;_e++)for(let ve=ge;ve<=X;ve++)he=no(he,g,_e,ve,xe,We);F(he)},[x,_,n,g,F]),re=w.useMemo(()=>(y?.colors??[]).map(xe=>xe.token).filter(xe=>!!xe),[y]),pe=w.useCallback(()=>x?{r0:Math.min(x.r,_?.r??x.r),r1:Math.max(x.r,_?.r??x.r),c0:Math.min(x.c,_?.c??x.c),c1:Math.max(x.c,_?.c??x.c)}:null,[x,_]),je=w.useCallback(xe=>{const We=pe();if(!We||re.length===0)return;let Q=n;for(let ke=We.r0;ke<=We.r1;ke++)for(let ge=We.c0;ge<=We.c1;ge++)Q=gl(Q,g,ke,ge,xe,re,H);F(Q)},[pe,n,g,F,re,H]),me=w.useCallback(xe=>se("backgroundColor",xe),[se]),ce=w.useCallback(()=>{const xe=pe();if(!xe)return;let We=n;for(let Q=xe.r0;Q<=xe.r1;Q++)for(let ke=xe.c0;ke<=xe.c1;ke++)We=gl(We,g,Q,ke,void 0,re,H),H==="light"&&(We=no(We,g,Q,ke,"backgroundColor",void 0));F(We)},[pe,n,g,F,re,H]),be=w.useCallback(xe=>se("padding",xe),[se]),Be=w.useMemo(()=>{if(H==="dark")return"";const xe=Z?.cell.props?.style;return typeof xe?.backgroundColor=="string"?xe.backgroundColor:""},[Z,H]),fe=w.useMemo(()=>typeof Z?.cell.props?.className=="string"?Z.cell.props.className:"",[Z]),De=w.useMemo(()=>{const xe=Z?.cell.props?.style;return typeof xe?.padding=="string"?xe.padding:""},[Z]),Fe=w.useCallback(xe=>xe==="section"?t("layout_editor.table_editor.move_blocked_section"):"",[t]),mt=w.useCallback((xe,We)=>ep(h,xe,We),[h]),ft=w.useCallback((xe,We)=>tp(h,xe,We),[h]),xt=w.useCallback(xe=>F(Xy(n,g,xe)),[n,g,F]),Ot=w.useCallback(xe=>{F(X7(n,g,xe)),S(null),A(null)},[n,g,F]),St=w.useCallback((xe,We)=>F(J7(n,g,xe,We)),[n,g,F]),kt=w.useCallback(xe=>F(Q7(n,g,xe)),[n,g,F]),Vt=w.useCallback(xe=>{F(ej(n,g,xe)),S(null),A(null)},[n,g,F]),Nt=w.useCallback((xe,We)=>F(Z7(n,g,xe,We)),[n,g,F]),tn=w.useCallback(()=>{if(!x||!_)return;const xe=Jy(n,g,x.r,x.c,_.r,_.c);xe.ok&&(F(xe.table),S({r:Math.min(x.r,_.r),c:Math.min(x.c,_.c)}),A(null))},[n,g,x,_,F]),Qe=w.useCallback(()=>{x&&(F(tj(n,g,x.r,x.c)),A(null))},[n,g,x,F]),Pe=w.useCallback(xe=>{if(!x)return;const We=Math.min(x.r,_?.r??x.r),Q=Math.max(x.r,_?.r??x.r),ke=Math.min(x.c,_?.c??x.c),ge=Math.max(x.c,_?.c??x.c);let X=n;for(let he=We;he<=Q;he++)for(let _e=ke;_e<=ge;_e++)X=rp(X,g,he,_e,xe);F(X)},[n,g,x,_,F]),et=w.useCallback(async(xe,We)=>{const Q=`${xe}:${We}`,ke=C[Q];if(ke===void 0)return;const ge=hn(h,xe,We);if(!ge)return;const{node:X,path:he}=sb(ge.cell);if(he===null)return;const _e=xj(X,f,u);if(_e.editable){if(ke===_e.display){j(ve=>{const Re={...ve};return delete Re[Q],Re});return}T(!0);try{const ve=hJ(X);if(ve)await af(f,ve,u,ke),await xo(f,u);else{const Re=await Xi(f,d,u,ke);if(Re.kind==="ok"&&Re.resource){const Ye=`$t:${Re.resource.translation_key}`;if(he.length===0)F(nj(n,g,xe,We,Ye));else{const it=sd(ge.cell,he,Ye);F(sj(n,g,xe,We,it))}await xo(f,u)}}}finally{T(!1),j(ve=>{const Re={...ve};return delete Re[Q],Re})}}},[C,h,f,u,d,n,g,F]),Le=w.useMemo(()=>{if(!Z)return null;const{node:xe,path:We}=sb(Z.cell);return We===null?null:{value:typeof xe?.text=="string"?xe.text:"",editable:!0}},[Z]),He=w.useCallback(xe=>{if(typeof xe!="string"||xe.length===0||!x)return;const We=hn(h,x.r,x.c);if(!We)return;const Q=nd(We.cell);if(Q!==null)if(Q.length===0)F(nj(n,g,x.r,x.c,xe));else{const ke=sd(We.cell,Q,xe);F(sj(n,g,x.r,x.c,ke))}},[x,h,n,g,F]),Ve=w.useCallback((xe,We,Q)=>{Q?A({r:xe,c:We}):(S({r:xe,c:We}),A(null))},[]),Je=w.useMemo(()=>Array.from({length:h.colCount},(xe,We)=>We),[h.colCount]),jt=!!(x&&_&&(x.r!==_.r||x.c!==_.c)),At=!!(Z&&(Z.colSpan>1||Z.rowSpan>1)),Rt=Z&&typeof Z.cell.props?.className=="string"?Z.cell.props.className:"";return a.jsxs("div",{className:"g7le-node-editor g7le-node-editor--table","data-testid":"g7le-table-editor",style:yJ,children:[a.jsx("div",{style:bJ,children:t("layout_editor.table_editor.title")}),a.jsx("div",{style:{overflowX:"auto"},children:a.jsxs("table",{"data-testid":"g7le-table-editor-grid",style:xJ,children:[a.jsx("thead",{children:a.jsxs("tr",{children:[a.jsx("th",{style:vJ}),Je.map(xe=>{const We=ft(xe,-1),Q=ft(xe,1),ke=Y===xe;return a.jsx("th",{style:wJ,"data-testid":`g7le-table-colgutter-${xe}`,onMouseEnter:()=>z(xe),onMouseLeave:()=>z(ge=>ge===xe?null:ge),children:a.jsxs("div",{style:{...SJ,visibility:ke?"visible":"hidden"},children:[a.jsx("button",{type:"button",title:We.ok?t("layout_editor.table_editor.move_col_left"):Fe(We.reason)||t("layout_editor.table_editor.move_col_left"),disabled:!We.ok||E,onClick:()=>Nt(xe,-1),"data-testid":`g7le-table-col-left-${xe}`,style:We.ok?oa:op,children:"←"}),a.jsx("button",{type:"button",title:t("layout_editor.table_editor.add_col"),disabled:E,onClick:()=>kt(xe),"data-testid":`g7le-table-col-add-${xe}`,style:oa,children:"+"}),a.jsx("button",{type:"button",title:t("layout_editor.table_editor.remove_col"),disabled:h.colCount<=1||E,onClick:()=>Vt(xe),"data-testid":`g7le-table-col-remove-${xe}`,style:vj,children:"✕"}),a.jsx("button",{type:"button",title:Q.ok?t("layout_editor.table_editor.move_col_right"):Fe(Q.reason)||t("layout_editor.table_editor.move_col_right"),disabled:!Q.ok||E,onClick:()=>Nt(xe,1),"data-testid":`g7le-table-col-right-${xe}`,style:Q.ok?oa:op,children:"→"})]})},xe)})]})}),a.jsx("tbody",{children:h.rows.map((xe,We)=>{const Q=xe.cells[0]?.gridRow??We,ke=U===Q;return a.jsxs("tr",{"data-testid":`g7le-table-row-${Q}`,onMouseEnter:()=>I(Q),onMouseLeave:()=>I(ge=>ge===Q?null:ge),children:[a.jsx("td",{style:_J,"data-testid":`g7le-table-rowgutter-${Q}`,children:(()=>{const ge=mt(Q,-1),X=mt(Q,1);return a.jsxs("div",{style:{...kJ,visibility:ke?"visible":"hidden"},children:[a.jsx("button",{type:"button",title:ge.ok?t("layout_editor.table_editor.move_row_up"):Fe(ge.reason)||t("layout_editor.table_editor.move_row_up"),disabled:!ge.ok||E,onClick:()=>St(Q,-1),"data-testid":`g7le-table-row-up-${Q}`,style:ge.ok?oa:op,children:"↑"}),a.jsx("button",{type:"button",title:t("layout_editor.table_editor.add_row"),disabled:E,onClick:()=>xt(Q),"data-testid":`g7le-table-row-add-${Q}`,style:oa,children:"+"}),a.jsx("button",{type:"button",title:t("layout_editor.table_editor.remove_row"),disabled:h.rows.length<=1||E,onClick:()=>Ot(Q),"data-testid":`g7le-table-row-remove-${Q}`,style:vj,children:"✕"}),a.jsx("button",{type:"button",title:X.ok?t("layout_editor.table_editor.move_row_down"):Fe(X.reason)||t("layout_editor.table_editor.move_row_down"),disabled:!X.ok||E,onClick:()=>St(Q,1),"data-testid":`g7le-table-row-down-${Q}`,style:X.ok?oa:op,children:"↓"})]})})()}),xe.cells.map(ge=>{const X=`${ge.gridRow}:${ge.gridCol}`,{node:he,path:_e}=sb(ge.cell),ve=xj(he,f,u),Re=_e!==null&&ve.editable,Ye=_e===null,it=C[X],ot=it!==void 0?it:ve.display,tt=x&&x.r===ge.gridRow&&x.c===ge.gridCol,at=x&&_&&ge.gridRow>=Math.min(x.r,_.r)&&ge.gridRow<=Math.max(x.r,_.r)&&ge.gridCol>=Math.min(x.c,_.c)&&ge.gridCol<=Math.max(x.c,_.c);return a.jsx("td",{colSpan:ge.colSpan,rowSpan:ge.rowSpan,"data-testid":`g7le-table-cell-${ge.gridRow}-${ge.gridCol}`,onClick:nt=>Ve(ge.gridRow,ge.gridCol,nt.shiftKey),style:{...CJ,...dJ(ge.cell,b,H),...uJ(ge.cell,y,H),...ge.isHeader?jJ:{},...tt?EJ:{},...at&&!tt?RJ:{}},children:Re?a.jsx("input",{type:"text","data-testid":`g7le-table-cell-input-${ge.gridRow}-${ge.gridCol}`,value:ot,placeholder:t("layout_editor.table_editor.cell_text"),disabled:E,onMouseDown:nt=>{nt.shiftKey&&nt.preventDefault(),Ve(ge.gridRow,ge.gridCol,nt.shiftKey)},onClick:nt=>nt.stopPropagation(),onChange:nt=>j(Xe=>({...Xe,[X]:nt.target.value})),onBlur:()=>{et(ge.gridRow,ge.gridCol)},style:AJ}):Ye?a.jsx("span",{"data-testid":`g7le-table-cell-struct-${ge.gridRow}-${ge.gridCol}`,style:wj,children:t("layout_editor.table_editor.structural_cell")}):a.jsx("span",{style:wj,children:ve.display})},X)})]},We)})})]})}),a.jsxs("button",{type:"button","data-testid":"g7le-table-add-row-bottom",onClick:()=>xt(h.rows.length-1),disabled:E,style:TJ,children:["+ ",t("layout_editor.table_editor.add_row")]}),a.jsxs("div",{style:$J,"data-testid":"g7le-table-cell-tools",children:[a.jsx("button",{type:"button","data-testid":"g7le-table-merge",onClick:tn,disabled:!jt||E,style:_j,children:t("layout_editor.table_editor.merge_cells")}),a.jsx("button",{type:"button","data-testid":"g7le-table-unmerge",onClick:Qe,disabled:!At||E,style:_j,children:t("layout_editor.table_editor.unmerge_cells")})]}),Z&&Le&&a.jsxs("div",{style:DJ,"data-testid":"g7le-table-cell-i18n-section",children:[a.jsx("div",{style:IJ,children:t("layout_editor.table_editor.cell_i18n_label")}),a.jsx(ks,{value:Le.value,onChange:He,t,placeholder:t("layout_editor.table_editor.cell_text"),testidPrefix:"g7le-table-cell-i18n",candidates:o,enableExpressionTree:!0,expressionTreeCollapsible:!0})]}),Z&&a.jsxs("div",{style:NJ,"data-testid":"g7le-table-cell-color-section",children:[a.jsx(pj,{colorScheme:H,onChange:G,t,disabled:E}),b&&a.jsx("div",{style:rb,"data-testid":"g7le-table-cell-border-row",children:a.jsx(aj,{className:Rt,catalog:b,t,onChange:Pe,colorScheme:H,onPresetToken:V,colorStyle:ee,onColorStyle:M,disabled:E})}),a.jsx("div",{style:rb,"data-testid":"g7le-table-cell-fill-row",children:a.jsx(dj,{colorStyle:Be,className:fe,catalog:y,t,colorScheme:H,onPresetToken:je,onCustomColor:me,onClear:ce,disabled:E})})]}),Z&&a.jsx("div",{style:rb,"data-testid":"g7le-table-cell-padding-row",children:a.jsx(uj,{paddingStyle:De,catalog:v,t,onChange:be,disabled:E})}),Z&&!b&&a.jsxs("label",{style:LJ,"data-testid":"g7le-table-cell-border-row",children:[a.jsx("span",{style:OJ,children:t("layout_editor.table_editor.cell_border")}),a.jsx("input",{type:"text","data-testid":"g7le-table-cell-border-input",value:Rt,placeholder:t("layout_editor.table_editor.cell_class_placeholder"),onChange:xe=>Pe(xe.target.value),disabled:E,style:MJ})]}),!h.valid&&a.jsx("div",{"data-testid":"g7le-table-grid-warning",style:zJ,children:t("layout_editor.table_editor.grid_invalid")}),a.jsx("div",{style:PJ,children:t("layout_editor.table_editor.select_hint")})]})}const yJ={display:"flex",flexDirection:"column",gap:8,width:"100%",marginBottom:12},bJ={fontSize:12,fontWeight:700,color:"#0f172a"},xJ={borderCollapse:"collapse",width:"auto"},vJ={width:28,background:"transparent",border:"none"},wJ={padding:2,border:"none",background:"transparent"},_J={padding:2,border:"none",background:"transparent",verticalAlign:"middle"},SJ={display:"flex",gap:2,justifyContent:"center"},kJ={display:"grid",gridTemplateColumns:"repeat(2, 16px)",gap:2,justifyContent:"center"},oa={width:16,height:16,lineHeight:"14px",padding:0,fontSize:10,border:"1px solid #cbd5e1",borderRadius:4,background:"#fff",color:"#475569",cursor:"pointer"},vj={...oa,border:"1px solid #fecaca",color:"#dc2626"},op={...oa,cursor:"not-allowed",opacity:.4,color:"#94a3b8",borderColor:"#e2e8f0"},CJ={border:"1px solid #cbd5e1",padding:0,width:64,minWidth:64,maxWidth:120,height:24,background:"#fff",cursor:"pointer"},jJ={background:"#f1f5f9",fontWeight:600},EJ={outline:"2px solid #2563eb",outlineOffset:-2},RJ={background:"#dbeafe"},AJ={width:"100%",boxSizing:"border-box",padding:"2px 5px",fontSize:11,height:22,lineHeight:"18px",border:"none",background:"transparent",outline:"none"},wj={display:"block",padding:"2px 5px",fontSize:10,color:"#64748b",fontStyle:"italic",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:110},TJ={padding:"4px 8px",fontSize:12,border:"1px dashed #94a3b8",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer",alignSelf:"flex-start"},$J={display:"flex",gap:6},_j={padding:"4px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},NJ={display:"flex",flexDirection:"column",gap:8,borderTop:"1px solid #f1f5f9",paddingTop:8},DJ={display:"flex",flexDirection:"column",gap:6,borderTop:"1px solid #f1f5f9",paddingTop:8},IJ={fontSize:12,fontWeight:700,color:"#0f172a"},rb={display:"flex",flexDirection:"column",gap:6},LJ={display:"flex",alignItems:"center",gap:6},OJ={fontSize:12,color:"#475569",minWidth:60},MJ={flex:1,minWidth:0,padding:"4px 6px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6},zJ={fontSize:11,color:"#b45309",background:"#fffbeb",border:"1px solid #fde68a",borderRadius:6,padding:"4px 6px"},PJ={fontSize:11,color:"#94a3b8"},BJ=/\{\{.*?\}\}/;function HJ(n,e,t){const r=(n.props??{})[e];return Array.isArray(r)?r:r===void 0&&t?JSON.parse(JSON.stringify(t)):[]}function WJ(n){return typeof n=="string"&&BJ.test(n)}function ob(n,e,t){return n?n.startsWith("$t:")?e(n.slice(3)):n:t}function UJ(n,e,t){return typeof n=="object"&&n!==null?n[e.key]:t?n:void 0}function qJ(n,e,t,s){if(typeof n=="object"&&n!==null){const r={...n};return s===void 0?delete r[e.key]:r[e.key]=s,r}return t?s:{[e.key]:s}}function Sj({node:n,params:e,t,onPatchNode:s,templateIdentifier:r,candidates:o}){const l=typeof e?.arrayProp=="string"?e.arrayProp:null,d=Array.isArray(e?.fields)?e.fields:[],u=ob(typeof e?.itemLabel=="string"?e.itemLabel:void 0,t,t("layout_editor.array_editor.item")),f=e?.newItem,g=f&&typeof f=="object"?f:null,h=typeof f=="string"||typeof f=="number"?f:null,b=(d.find(T=>T.primary)??d[0])?.key,y=(n.props??{})[l??""],v=Array.isArray(e?.defaultItems)?e.defaultItems:null,x=l?HJ(n,l,v):[],S=w.useCallback(T=>{if(!l)return;const D={...n.props??{}};D[l]=T,s({...n,props:D})},[l,n,s]),_=w.useCallback(()=>{if(g)return JSON.parse(JSON.stringify(g));if(h!==null)return h;const T={};for(const D of d)(D.widget??"text")==="boolean"?T[D.key]=!1:T[D.key]="";return T},[g,h,d]),A=w.useCallback(()=>{S([...x,_()])},[S,x,_]),C=w.useCallback(T=>{S(x.filter((D,I)=>I!==T))},[S,x]),j=w.useCallback((T,D)=>{const I=T+D;if(I<0||I>=x.length)return;const W=[...x];[W[T],W[I]]=[W[I],W[T]],S(W)},[S,x]),E=w.useCallback((T,D,I)=>{const W=D.key===b,z=x.map((H,G)=>G===T?qJ(H,D,W,I):H);S(z)},[x,S,b]);return l?WJ(y)||y!==void 0&&!Array.isArray(y)?a.jsx("div",{className:"g7le-node-editor g7le-node-editor--array","data-testid":"g7le-array-editor-bound",style:QJ,children:t("layout_editor.array_editor.bound_degraded")}):a.jsxs("div",{className:"g7le-node-editor g7le-node-editor--array","data-testid":"g7le-array-editor",style:FJ,children:[a.jsx("div",{style:VJ,children:t("layout_editor.array_editor.items_title")}),x.length===0&&a.jsx("div",{"data-testid":"g7le-array-empty",style:Cj,children:t("layout_editor.array_editor.empty")}),x.map((T,D)=>a.jsxs("div",{"data-testid":`g7le-array-row-${D}`,style:KJ,children:[a.jsxs("div",{style:GJ,children:[a.jsxs("span",{style:YJ,children:["#",D+1]}),a.jsx("div",{style:{flex:1}}),a.jsx("button",{type:"button","data-testid":`g7le-array-up-${D}`,title:t("layout_editor.array_editor.move_up"),disabled:D===0,onClick:()=>j(D,-1),style:kj,children:"↑"}),a.jsx("button",{type:"button","data-testid":`g7le-array-down-${D}`,title:t("layout_editor.array_editor.move_down"),disabled:D===x.length-1,onClick:()=>j(D,1),style:kj,children:"↓"}),a.jsx("button",{type:"button","data-testid":`g7le-array-remove-${D}`,title:t("layout_editor.array_editor.remove"),onClick:()=>C(D),style:JJ,children:"✕"})]}),d.map(I=>{const W=I.widget??"text",z=I.key===b,H=ob(I.label,t,I.key),G=UJ(T,I,z),F=`g7le-array-field-${D}-${I.key}`;if(W==="boolean")return a.jsxs("label",{style:Za,children:[a.jsx("span",{style:Qa,children:H}),a.jsx("input",{type:"checkbox","data-testid":F,checked:G===!0,onChange:Y=>E(D,I,Y.target.checked)})]},I.key);if(W==="select"){const Y=Array.isArray(I.options)?I.options:[];return a.jsxs("label",{style:Za,children:[a.jsx("span",{style:Qa,children:H}),a.jsxs("select",{"data-testid":F,value:G==null?"":String(G),onChange:U=>E(D,I,U.target.value===""?void 0:U.target.value),style:od,children:[a.jsx("option",{value:"",children:"—"}),Y.map((U,B)=>a.jsx("option",{value:String(U.value),children:ob(U.label,t,String(U.value))},B))]})]},I.key)}if(W==="i18n-text"){const Y=typeof G=="string"?G:G==null?"":String(G);return a.jsxs("label",{style:Za,children:[a.jsx("span",{style:Qa,children:H}),a.jsx("div",{"data-testid":F,style:{flex:1,minWidth:0},children:a.jsx(ks,{value:Y,onChange:U=>E(D,I,U===""?void 0:U),t,placeholder:H,testidPrefix:`${F}-i18n`,candidates:o,enableExpressionTree:!0,expressionTreeCollapsible:!0})})]},I.key)}if(W==="number"){const Y=G==null?"":String(G);return a.jsxs("label",{style:Za,children:[a.jsx("span",{style:Qa,children:H}),a.jsx("input",{type:"number","data-testid":F,value:Y,onChange:U=>{const B=U.target.value;E(D,I,B===""?void 0:Number(B))},style:od})]},I.key)}if(W==="color"){const Y=typeof G=="string"?G:"",U=/^#[0-9a-fA-F]{6}$/.test(Y)?Y:"#000000";return a.jsxs("label",{style:Za,children:[a.jsx("span",{style:Qa,children:H}),a.jsx("input",{type:"color","data-testid":`${F}-swatch`,value:U,onChange:B=>E(D,I,B.target.value),style:XJ}),a.jsx("input",{type:"text","data-testid":F,value:Y,placeholder:"#7C3AED",onChange:B=>E(D,I,B.target.value===""?void 0:B.target.value),style:od})]},I.key)}if(W==="number-list"){const Y=Array.isArray(G)?G.join(", "):"";return a.jsxs("label",{style:Za,children:[a.jsx("span",{style:Qa,children:H}),a.jsx("input",{type:"text","data-testid":F,value:Y,placeholder:t("layout_editor.array_editor.number_list_placeholder"),onChange:U=>{const B=U.target.value.split(",").map(te=>te.trim()).filter(te=>te!=="").map(te=>Number(te)).filter(te=>!Number.isNaN(te));E(D,I,B)},style:od})]},I.key)}const Z=G==null?"":String(G);return a.jsxs("label",{style:Za,children:[a.jsx("span",{style:Qa,children:H}),a.jsx("input",{type:"text","data-testid":F,value:Z,placeholder:W==="icon"?t("layout_editor.array_editor.icon_placeholder"):H,onChange:Y=>E(D,I,Y.target.value===""?void 0:Y.target.value),style:od})]},I.key)})]},D)),a.jsx("button",{type:"button","data-testid":"g7le-array-add",onClick:A,style:ZJ,children:t("layout_editor.array_editor.add",{item:u})})]}):a.jsx("div",{className:"g7le-node-editor g7le-node-editor--array","data-testid":"g7le-array-editor-misconfigured",style:Cj,children:t("layout_editor.array_editor.no_array_prop")})}const FJ={display:"flex",flexDirection:"column",gap:8,width:"100%",marginBottom:12},VJ={fontSize:12,fontWeight:700,color:"#0f172a",marginBottom:2},KJ={display:"flex",flexDirection:"column",gap:4,padding:8,border:"1px solid #e2e8f0",borderRadius:8,background:"#f8fafc"},GJ={display:"flex",gap:4,alignItems:"center"},YJ={fontSize:11,fontWeight:700,color:"#64748b"},Za={display:"flex",flexWrap:"wrap",gap:6,alignItems:"center"},Qa={fontSize:11,color:"#475569",minWidth:64,flexShrink:0},od={flex:1,minWidth:0,padding:"4px 6px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6},XJ={width:32,height:28,padding:0,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",cursor:"pointer",flexShrink:0},kj={padding:"2px 6px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},JJ={padding:"2px 6px",fontSize:12,border:"1px solid #fecaca",borderRadius:6,background:"#fff",color:"#dc2626",cursor:"pointer"},ZJ={padding:"4px 8px",fontSize:12,border:"1px dashed #94a3b8",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer",alignSelf:"flex-start"},Cj={fontSize:11,color:"#94a3b8",fontStyle:"italic"},QJ={fontSize:11,color:"#b45309",fontStyle:"italic",padding:"4px 2px"};function eZ(n,e){return n?n.startsWith("$t:")?e(n.slice(3)):n:null}function tZ(n){const{params:e,t}=n,s=Array.isArray(e?.groups)?e.groups:[];return s.length===0?a.jsx("div",{className:"g7le-node-editor g7le-node-editor--array-group","data-testid":"g7le-array-group-misconfigured",style:oZ,children:t("layout_editor.array_editor.no_array_prop")}):a.jsx("div",{className:"g7le-node-editor g7le-node-editor--array-group","data-testid":"g7le-array-group-editor",style:nZ,children:s.map((r,o)=>{const l=eZ(r.title,t),{title:d,...u}=r;return a.jsxs("div",{"data-testid":`g7le-array-group-${r.arrayProp??o}`,style:sZ,children:[l&&a.jsx("div",{style:rZ,children:l}),a.jsx(Sj,{...n,params:u})]},r.arrayProp??o)})})}const nZ={display:"flex",flexDirection:"column",gap:16,width:"100%",marginBottom:12},sZ={display:"flex",flexDirection:"column",gap:4},rZ={fontSize:12,fontWeight:700,color:"#1e293b",borderBottom:"1px solid #e2e8f0",paddingBottom:4},oZ={fontSize:11,color:"#94a3b8",fontStyle:"italic"},aZ=/\{\{.*?\}\}/;function iZ(n){return typeof n=="string"&&aZ.test(n)}function lZ(n,e,t){return n?n.startsWith("$t:")?e(n.slice(3)):n:t}function cZ(n){const{node:e,params:t,t:s,onPatchNode:r}=n,o=typeof t?.arrayProp=="string"?t.arrayProp:null,l=typeof t?.idField=="string"?t.idField:"id",d=typeof t?.cellChildrenProp=="string"?t.cellChildrenProp:"cellChildren",u=typeof t?.cellChildComponent=="string"?t.cellChildComponent:"Div",f=lZ(typeof t?.itemLabel=="string"?t.itemLabel:void 0,s,s("layout_editor.array_editor.item")),[g,h]=w.useState(null),b=o?(e.props??{})[o]:void 0,y=Array.isArray(b)?b:[],v=w.useCallback(T=>{if(!o)return;const D={...e.props??{}};D[o]=T,r({...e,props:D})},[o,e,r]),x=w.useCallback(()=>{const T=t?.newItem;return T&&typeof T=="object"?JSON.parse(JSON.stringify(T)):{[l]:"",[d]:[]}},[t,l,d]),S=w.useCallback(()=>{v([...y,x()])},[v,y,x]),_=w.useCallback(T=>{v(y.filter((D,I)=>I!==T)),h(null)},[v,y]),A=w.useCallback((T,D)=>{const I=T+D;if(I<0||I>=y.length)return;const W=[...y];[W[T],W[I]]=[W[I],W[T]],v(W)},[v,y]),C=w.useCallback((T,D)=>{const I=y.map((W,z)=>z===T?{...W,[l]:D}:W);v(I)},[y,v,l]),j=w.useCallback(T=>({type:"composite",name:"CardGridCell",children:Array.isArray(T[d])?T[d]:[]}),[d]),E=w.useCallback(T=>D=>{const I=Array.isArray(D.children)?D.children:[],W=y.map((z,H)=>H===T?{...z,[d]:I}:z);v(W)},[y,v,d]);return o?iZ(b)||b!==void 0&&!Array.isArray(b)?a.jsx("div",{className:"g7le-node-editor g7le-node-editor--cell-tree","data-testid":"g7le-cell-tree-bound",style:vZ,children:s("layout_editor.array_editor.bound_degraded")}):a.jsxs("div",{className:"g7le-node-editor g7le-node-editor--cell-tree","data-testid":"g7le-cell-tree-editor",style:dZ,children:[a.jsx("div",{style:uZ,children:s("layout_editor.cell_tree_editor.columns_title")}),y.length===0&&a.jsx("div",{"data-testid":"g7le-cell-tree-empty",style:Ej,children:s("layout_editor.array_editor.empty")}),y.map((T,D)=>{const I=typeof T[l]=="string"?T[l]:"",W=g===D;return a.jsxs("div",{"data-testid":`g7le-cell-tree-row-${D}`,style:fZ,children:[a.jsxs("div",{style:pZ,children:[a.jsxs("span",{style:gZ,children:["#",D+1]}),a.jsx("input",{type:"text","data-testid":`g7le-cell-tree-id-${D}`,value:I,placeholder:s("layout_editor.cell_tree_editor.id_placeholder"),onChange:z=>C(D,z.target.value),style:hZ}),a.jsx("button",{type:"button","data-testid":`g7le-cell-tree-up-${D}`,title:s("layout_editor.array_editor.move_up"),disabled:D===0,onClick:()=>A(D,-1),style:jj,children:"↑"}),a.jsx("button",{type:"button","data-testid":`g7le-cell-tree-down-${D}`,title:s("layout_editor.array_editor.move_down"),disabled:D===y.length-1,onClick:()=>A(D,1),style:jj,children:"↓"}),a.jsx("button",{type:"button","data-testid":`g7le-cell-tree-remove-${D}`,title:s("layout_editor.array_editor.remove"),onClick:()=>_(D),style:mZ,children:"✕"})]}),a.jsx("button",{type:"button","data-testid":`g7le-cell-tree-toggle-${D}`,onClick:()=>h(W?null:D),style:yZ,children:s(W?"layout_editor.cell_tree_editor.collapse_cells":"layout_editor.cell_tree_editor.expand_cells")}),W&&a.jsx("div",{"data-testid":`g7le-cell-tree-cells-${D}`,style:bZ,children:a.jsx(U7,{...n,node:j(T),params:{childComponent:u},onPatchNode:E(D)})})]},D)}),a.jsx("button",{type:"button","data-testid":"g7le-cell-tree-add",onClick:S,style:xZ,children:s("layout_editor.cell_tree_editor.add_column",{item:f})})]}):a.jsx("div",{className:"g7le-node-editor g7le-node-editor--cell-tree","data-testid":"g7le-cell-tree-misconfigured",style:Ej,children:s("layout_editor.array_editor.no_array_prop")})}const dZ={display:"flex",flexDirection:"column",gap:8,width:"100%",marginBottom:12},uZ={fontSize:12,fontWeight:700,color:"#0f172a",marginBottom:2},fZ={display:"flex",flexDirection:"column",gap:6,padding:8,border:"1px solid #e2e8f0",borderRadius:8,background:"#f8fafc"},pZ={display:"flex",gap:4,alignItems:"center"},gZ={fontSize:11,fontWeight:700,color:"#64748b",flexShrink:0},hZ={flex:1,minWidth:0,padding:"4px 6px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6},jj={padding:"2px 6px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"},mZ={padding:"2px 6px",fontSize:12,border:"1px solid #fecaca",borderRadius:6,background:"#fff",color:"#dc2626",cursor:"pointer"},yZ={padding:"3px 8px",fontSize:11,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#2563eb",cursor:"pointer",alignSelf:"flex-start"},bZ={paddingLeft:8,borderLeft:"2px solid #e2e8f0"},xZ={padding:"4px 8px",fontSize:12,border:"1px dashed #94a3b8",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer",alignSelf:"flex-start"},Ej={fontSize:11,color:"#94a3b8",fontStyle:"italic"},vZ={fontSize:11,color:"#b45309",fontStyle:"italic",padding:"4px 2px"};function wZ(n,e,t){const s=Zt(n,e);if(!t||t.length===0)return{measured:[],grid:s};const r=[];for(const o of s.rows)for(const l of o.cells){const u=Yy(n,l,e).map(g=>`children.${g}`).join("."),f=t.find(g=>g.path===u||g.path.endsWith("."+u));f&&r.push({ref:l,box:{top:f.top,left:f.left,width:f.width,height:f.height}})}return{measured:r,grid:s}}const ab=26,ib=50,lb=6,Rj=44,Aj=18,Tj="g7le-table-inplace-empty-cell-style";function _Z(){if(typeof document>"u"||document.getElementById(Tj))return;const n=document.createElement("style");n.id=Tj,n.textContent=".g7le-preview-frame td[data-editor-name],.g7le-preview-frame th[data-editor-name]{min-width:56px;height:38px;}.g7le-preview-frame table[data-editor-name]{min-width:120px;}",document.head.appendChild(n)}function SZ({node:n,params:e,nodeBox:t,cellBoxes:s,selectedCellPath:r,colorScheme:o,t:l,onPatchNode:d,onRequestInlineEdit:u}){const f=w.useMemo(()=>e&&typeof e=="object"?e:null,[e]),{measured:g,grid:h}=w.useMemo(()=>wZ(n,f,s),[n,f,s]),[b,y]=w.useState(null),[v,x]=w.useState(null),S=w.useMemo(()=>{if(!r)return null;for(const X of h.rows)for(const he of X.cells){const _e=Yy(n,he,f).map(ve=>`children.${ve}`).join(".");if(r===_e||r.startsWith(_e+"."))return{r:he.gridRow,c:he.gridCol}}return null},[r,h,n,f]),_=w.useMemo(()=>b&&hn(h,b.r,b.c)?b:S,[b,S,h]),[A,C]=w.useState(!1),[j,E]=w.useState(o==="dark"?"dark":"light"),[T,D]=w.useState(null),[I,W]=w.useState(null),z=w.useRef(null),H=w.useCallback(()=>{z.current!==null&&(clearTimeout(z.current),z.current=null)},[]),G=w.useCallback(()=>{H(),z.current=setTimeout(()=>{D(null),W(null),z.current=null},240)},[H]);w.useEffect(()=>()=>H(),[H]),w.useEffect(()=>{_Z()},[]);const F=w.useCallback(X=>d(X),[d]),Z=w.useMemo(()=>_?hn(h,_.r,_.c):null,[h,_]),Y=w.useMemo(()=>Z&&typeof Z.cell.props?.className=="string"?Z.cell.props.className:"",[Z]),U=w.useCallback(X=>F(Xy(n,f,X)),[n,f,F]),B=w.useCallback(X=>F(X7(n,f,X)),[n,f,F]),te=w.useCallback((X,he)=>F(J7(n,f,X,he)),[n,f,F]),q=w.useCallback(X=>F(Q7(n,f,X)),[n,f,F]),M=w.useCallback(X=>F(ej(n,f,X)),[n,f,F]),N=w.useCallback((X,he)=>F(Z7(n,f,X,he)),[n,f,F]),V=w.useCallback(X=>{if(!Z)return;const he=Z.gridRow,_e=Z.gridCol,ve=X==="down"?he+Z.rowSpan:he+Z.rowSpan-1,Re=X==="right"?_e+Z.colSpan:_e+Z.colSpan-1;if(ve>=h.rows.length||Re>=h.colCount)return;const Ye=Jy(n,f,he,_e,ve,Re);Ye.ok&&F(Ye.table)},[Z,h,n,f,F]),ee=!!(Z&&Z.gridCol+Z.colSpan<h.colCount),se=!!(Z&&Z.gridRow+Z.rowSpan<h.rows.length),re=w.useMemo(()=>!_||!v||!hn(h,v.r,v.c)?null:{r0:Math.min(_.r,v.r),c0:Math.min(_.c,v.c),r1:Math.max(_.r,v.r),c1:Math.max(_.c,v.c)},[_,v,h]),pe=w.useMemo(()=>{if(!re)return[];const X=new Set,he=[];for(const _e of h.rows)for(const ve of _e.cells)if(ve.gridRow>=re.r0&&ve.gridRow<=re.r1&&ve.gridCol>=re.c0&&ve.gridCol<=re.c1){const Re=`${ve.gridRow}:${ve.gridCol}`;X.has(Re)||(X.add(Re),he.push({r:ve.gridRow,c:ve.gridCol}))}return he},[re,h]),je=pe.length>1,me=w.useCallback(()=>{if(!re)return;const X=Jy(n,f,re.r0,re.c0,re.r1,re.c1);X.ok&&(F(X.table),x(null))},[re,n,f,F]),ce=w.useCallback(()=>{_&&F(tj(n,f,_.r,_.c))},[n,f,_,F]),be=w.useMemo(()=>{const X=f?.cellBorder;return X&&typeof X=="object"?X:null},[f]),Be=w.useMemo(()=>{const X=f?.cellBackground;return X&&typeof X=="object"?X:null},[f]),fe=w.useMemo(()=>{const X=f?.cellPadding;return X&&typeof X=="object"?X:null},[f]),De=w.useMemo(()=>{if(A){const X=new Set,he=[];for(const _e of h.rows)for(const ve of _e.cells){const Re=`${ve.gridRow}:${ve.gridCol}`;X.has(Re)||(X.add(Re),he.push({r:ve.gridRow,c:ve.gridCol}))}return he}return je?pe:_?[{r:_.r,c:_.c}]:[]},[A,je,pe,_,h]),Fe=w.useCallback(X=>{if(De.length===0)return;let he=n;for(const _e of De){const ve=(be?.colors??[]).map(Ye=>Ye.token),Re=X.split(/\s+/).filter(Ye=>Ye&&!ve.includes(Ye)).join(" ");he=rp(he,f,_e.r,_e.c,Re)}F(he)},[n,f,De,be,F]),mt=w.useMemo(()=>{const X=(be?.sides??[]).find(ve=>ve.value==="all")??(be?.sides??[])[0],he=(be?.widths??[]).find(ve=>ve.value!=="none");if(!X||!he)return[];const _e=he.suffix??"";return[_e?`${X.prefix}${_e}`:X.prefix]},[be]),ft=w.useCallback((X,he,_e)=>{if(mt.length===0)return X;const ve=(be?.sides??[]).map(at=>at.prefix),Re=hn(Zt(X,f),he,_e),it=(typeof Re?.cell?.props?.className=="string"?Re.cell.props.className:"").split(/\s+/).filter(Boolean);if(it.some(at=>ve.some(nt=>at===nt||at.startsWith(nt+"-")&&/^-?\d+$/.test(at.slice(nt.length+1)))))return X;const tt=[...it,...mt].join(" ").trim();return rp(X,f,he,_e,tt)},[mt,be,f]),xt=w.useCallback((X,he)=>{if(X.length===0)return;const _e=new Set(X.map(Re=>`${Re.r}:${Re.c}`));let ve=n;for(const Re of X){if(ve=ft(ve,Re.r,Re.c),ve=no(ve,f,Re.r,Re.c,"borderColor",he),Re.r>0&&!_e.has(`${Re.r-1}:${Re.c}`)){const Ye=hn(Zt(ve,f),Re.r-1,Re.c);Ye&&(ve=no(ve,f,Ye.gridRow,Ye.gridCol,"borderBottomColor",he))}if(Re.c>0&&!_e.has(`${Re.r}:${Re.c-1}`)){const Ye=hn(Zt(ve,f),Re.r,Re.c-1);Ye&&(ve=no(ve,f,Ye.gridRow,Ye.gridCol,"borderRightColor",he))}}F(ve)},[n,f,F,ft]),Ot=w.useMemo(()=>(be?.colors??[]).map(X=>X.token).filter(Boolean),[be]),St=w.useCallback(X=>{if(De.length===0||Ot.length===0)return;let he=n;for(const _e of De)he=ft(he,_e.r,_e.c),he=gl(he,f,_e.r,_e.c,X,Ot,j);F(he)},[De,n,f,F,ft,Ot,j]),kt=w.useCallback(X=>xt(De,X),[xt,De]),Vt=w.useMemo(()=>{if(j==="dark")return"";const X=Z?.cell.props?.style;return typeof X?.borderColor=="string"?X.borderColor:""},[Z,j]),Nt=w.useCallback((X,he)=>{if(De.length===0)return;let _e=n;for(const ve of De)_e=no(_e,f,ve.r,ve.c,X,he);F(_e)},[De,n,f,F]),tn=w.useMemo(()=>(Be?.colors??[]).map(X=>X.token).filter(X=>!!X),[Be]),Qe=w.useCallback(X=>{if(De.length===0||tn.length===0)return;let he=n;for(const _e of De)he=gl(he,f,_e.r,_e.c,X,tn,j);F(he)},[De,n,f,F,tn,j]),Pe=w.useCallback(X=>Nt("backgroundColor",X),[Nt]),et=w.useCallback(()=>{if(De.length===0)return;let X=n;for(const he of De)X=gl(X,f,he.r,he.c,void 0,tn,j),j==="light"&&(X=no(X,f,he.r,he.c,"backgroundColor",void 0));F(X)},[De,n,f,F,tn,j]),Le=w.useCallback(X=>Nt("padding",X),[Nt]),He=w.useMemo(()=>{if(j==="dark")return"";const X=Z?.cell.props?.style;return typeof X?.backgroundColor=="string"?X.backgroundColor:""},[Z,j]),Ve=w.useMemo(()=>typeof Z?.cell.props?.className=="string"?Z.cell.props.className:"",[Z]),Je=w.useMemo(()=>{const X=Z?.cell.props?.style;return typeof X?.padding=="string"?X.padding:""},[Z]),jt=w.useCallback(X=>{const he=X.currentTarget,_e=he.style.pointerEvents;he.style.pointerEvents="none";const ve=document.elementFromPoint(X.clientX,X.clientY);he.style.pointerEvents=_e;const Re=ve?.closest?.("[data-dnd-handle-path]");Re&&Re.dispatchEvent(new PointerEvent("pointerdown",{bubbles:!0,cancelable:!0,clientX:X.clientX,clientY:X.clientY,pointerId:X.pointerId,pointerType:X.pointerType,button:X.button,isPrimary:!0}))},[]),At=w.useMemo(()=>{const X=new Map;for(const he of g)X.has(he.ref.gridCol)||X.set(he.ref.gridCol,he.box);return X},[g]),Rt=w.useMemo(()=>{const X=new Map;for(const he of g)X.has(he.ref.gridRow)||X.set(he.ref.gridRow,he.box);return X},[g]);if(g.length===0)return null;const xe=!!(Z&&(Z.colSpan>1||Z.rowSpan>1)),We=I!==null?I:_?.c??null,Q=T!==null?T:_?.r??null,ke=t.top-ab-lb-Rj,ge=t.left-ib-lb-Rj;return a.jsxs("div",{className:"g7le-table-inplace","data-testid":"g7le-table-inplace",style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:OU},children:[g.map(X=>{const he=_&&_.r===X.ref.gridRow&&_.c===X.ref.gridCol,_e=re&&X.ref.gridRow>=re.r0&&X.ref.gridRow<=re.r1&&X.ref.gridCol>=re.c0&&X.ref.gridCol<=re.c1;return a.jsx("div",{"data-testid":`g7le-inplace-cell-${X.ref.gridRow}-${X.ref.gridCol}`,role:"button",tabIndex:-1,"aria-label":l("layout_editor.table_inplace.select_cell"),onMouseEnter:()=>{H(),D(X.ref.gridRow),W(X.ref.gridCol)},onMouseLeave:()=>{G()},onPointerDown:ve=>jt(ve),onClick:ve=>{if(ve.stopPropagation(),ve.shiftKey&&(b||_))x({r:X.ref.gridRow,c:X.ref.gridCol});else{y({r:X.ref.gridRow,c:X.ref.gridCol}),x(null);const Re=Yy(n,X.ref,f).map(Ye=>`children.${Ye}`).join(".");u?.(Re)}},style:{position:"absolute",top:X.box.top,left:X.box.left,width:X.box.width,height:X.box.height,minWidth:Aj,minHeight:Aj,boxSizing:"border-box",pointerEvents:"auto",cursor:"pointer",outline:he?"2px solid #2563eb":"none",outlineOffset:-2,background:_e&&!he?"rgba(37,99,235,0.14)":"transparent"}},`cell-${X.ref.gridRow}-${X.ref.gridCol}`)}),a.jsx("div",{"data-testid":"g7le-inplace-col-rail",onMouseEnter:H,onMouseLeave:G,style:{position:"absolute",top:ke,left:t.left,width:t.width,height:ab,pointerEvents:"none"},children:We!==null&&At.has(We)&&(()=>{const X=We,he=At.get(X),_e=tp(h,X,-1),ve=tp(h,X,1),Re=he.left-t.left;return a.jsxs("div",{"data-testid":`g7le-inplace-colgutter-${X}`,onMouseEnter:()=>{H(),W(X)},onMouseLeave:G,style:{position:"absolute",top:0,left:Re,width:he.width,minWidth:96,height:ab,display:"flex",gap:3,justifyContent:"center",alignItems:"center",pointerEvents:"auto"},children:[a.jsx("button",{type:"button",title:l("layout_editor.table_inplace.move_col_left"),disabled:!_e.ok,onClick:()=>N(X,-1),"data-testid":`g7le-inplace-col-left-${X}`,style:_e.ok?aa:ap,children:"←"}),a.jsx("button",{type:"button",title:l("layout_editor.table_inplace.add_col"),onClick:()=>q(X),"data-testid":`g7le-inplace-col-add-${X}`,style:aa,children:"+"}),a.jsx("button",{type:"button",title:l("layout_editor.table_inplace.remove_col"),disabled:h.colCount<=1,onClick:()=>M(X),"data-testid":`g7le-inplace-col-remove-${X}`,style:$j,children:"✕"}),a.jsx("button",{type:"button",title:l("layout_editor.table_inplace.move_col_right"),disabled:!ve.ok,onClick:()=>N(X,1),"data-testid":`g7le-inplace-col-right-${X}`,style:ve.ok?aa:ap,children:"→"})]},`colgut-${X}`)})()}),a.jsx("div",{"data-testid":"g7le-inplace-row-rail",style:{position:"absolute",top:t.top,left:ge,width:ib,height:t.height,pointerEvents:"none"},children:Q!==null&&Rt.has(Q)&&(()=>{const X=Q,he=Rt.get(X),_e=ep(h,X,-1),ve=ep(h,X,1),Re=he.top-t.top;return a.jsxs("div",{"data-testid":`g7le-inplace-rowgutter-${X}`,onMouseEnter:()=>{H(),D(X)},onMouseLeave:G,style:{position:"absolute",top:Re,left:0,width:ib,height:he.height,minHeight:48,display:"grid",gridTemplateColumns:"repeat(2, 22px)",gridAutoRows:"22px",gap:3,justifyContent:"center",alignContent:"center",pointerEvents:"auto"},children:[a.jsx("button",{type:"button",title:l("layout_editor.table_inplace.move_row_up"),disabled:!_e.ok,onClick:()=>te(X,-1),"data-testid":`g7le-inplace-row-up-${X}`,style:_e.ok?aa:ap,children:"↑"}),a.jsx("button",{type:"button",title:l("layout_editor.table_inplace.add_row"),onClick:()=>U(X),"data-testid":`g7le-inplace-row-add-${X}`,style:aa,children:"+"}),a.jsx("button",{type:"button",title:l("layout_editor.table_inplace.remove_row"),disabled:h.rows.length<=1,onClick:()=>B(X),"data-testid":`g7le-inplace-row-remove-${X}`,style:$j,children:"✕"}),a.jsx("button",{type:"button",title:l("layout_editor.table_inplace.move_row_down"),disabled:!ve.ok,onClick:()=>te(X,1),"data-testid":`g7le-inplace-row-down-${X}`,style:ve.ok?aa:ap,children:"↓"})]},`rowgut-${X}`)})()}),a.jsxs("div",{"data-testid":"g7le-inplace-corner-add",style:{position:"absolute",top:t.top+t.height+lb,left:t.left,display:"flex",flexDirection:"column",gap:6,pointerEvents:"auto",minWidth:200,maxWidth:Math.max(240,t.width),background:"#fff",border:"1px solid #e2e8f0",borderRadius:8,padding:8,boxShadow:"0 2px 8px rgba(0,0,0,0.12)"},children:[a.jsxs("div",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:[a.jsxs("button",{type:"button","data-testid":"g7le-inplace-add-row-bottom",onClick:()=>U(h.rows.length-1),style:Nj,children:["+ ",l("layout_editor.table_inplace.add_row")]}),a.jsxs("button",{type:"button","data-testid":"g7le-inplace-add-col-right",onClick:()=>q(h.colCount-1),style:Nj,children:["+ ",l("layout_editor.table_inplace.add_col")]})]}),!_&&a.jsx("div",{"data-testid":"g7le-inplace-select-hint",style:{fontSize:11,color:"#94a3b8",borderTop:"1px solid #f1f5f9",paddingTop:6},children:l("layout_editor.table_inplace.select_cell_hint")}),_&&a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6,borderTop:"1px solid #f1f5f9",paddingTop:6},children:[je&&a.jsx("div",{"data-testid":"g7le-inplace-range-count",style:{fontSize:11,color:"#2563eb"},children:l("layout_editor.table_inplace.range_selected",{count:pe.length})}),a.jsxs("div",{style:{display:"flex",gap:6,flexWrap:"wrap",alignItems:"center"},children:[je?a.jsx("button",{type:"button","data-testid":"g7le-inplace-merge-range",onClick:me,style:ad,children:l("layout_editor.table_inplace.merge_range")}):a.jsxs(a.Fragment,{children:[a.jsx("button",{type:"button","data-testid":"g7le-inplace-merge-right",disabled:!ee,onClick:()=>V("right"),style:ee?ad:cb,children:l("layout_editor.table_inplace.merge_right")}),a.jsx("button",{type:"button","data-testid":"g7le-inplace-merge-down",disabled:!se,onClick:()=>V("down"),style:se?ad:cb,children:l("layout_editor.table_inplace.merge_down")})]}),a.jsx("button",{type:"button","data-testid":"g7le-inplace-unmerge",disabled:!xe,onClick:ce,style:xe?ad:cb,children:l("layout_editor.table_inplace.unmerge")})]}),a.jsxs("div",{"data-testid":"g7le-inplace-cell-color",style:{borderTop:"1px solid #f1f5f9",paddingTop:6,display:"flex",flexDirection:"column",gap:6},children:[a.jsxs("label",{style:{display:"flex",alignItems:"center",gap:6,fontSize:11,color:"#475569",cursor:"pointer"},children:[a.jsx("input",{type:"checkbox","data-testid":"g7le-inplace-border-all-toggle",checked:A,onChange:X=>C(X.target.checked)}),l("layout_editor.table_inplace.border_apply_all")]}),a.jsx(pj,{colorScheme:j,onChange:E,t:l}),be&&a.jsx("div",{"data-testid":"g7le-inplace-cell-border",children:a.jsx(aj,{className:A?"":Y,catalog:be,t:l,onChange:Fe,colorScheme:j,onPresetToken:St,colorStyle:A?"":Vt,onColorStyle:kt})}),a.jsx("div",{"data-testid":"g7le-inplace-cell-fill",children:a.jsx(dj,{colorStyle:A?"":He,className:A?"":Ve,catalog:Be,t:l,colorScheme:j,onPresetToken:Qe,onCustomColor:Pe,onClear:et})})]}),a.jsx("div",{"data-testid":"g7le-inplace-cell-padding",style:{borderTop:"1px solid #f1f5f9",paddingTop:6},children:a.jsx(uj,{paddingStyle:A?"":Je,catalog:fe,t:l,onChange:Le})})]})]})]})}const aa={width:22,height:22,lineHeight:"20px",padding:0,fontSize:13,border:"1px solid #cbd5e1",borderRadius:5,background:"#fff",color:"#475569",cursor:"pointer",boxShadow:"0 1px 3px rgba(0,0,0,0.18)"},$j={...aa,border:"1px solid #fecaca",color:"#dc2626"},ap={...aa,cursor:"not-allowed",opacity:.4,color:"#94a3b8",borderColor:"#e2e8f0"},ad={padding:"4px 10px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer",boxShadow:"0 1px 2px rgba(0,0,0,0.12)"},cb={...ad,cursor:"not-allowed",opacity:.4},Nj={padding:"3px 8px",fontSize:11,border:"1px dashed #94a3b8",borderRadius:6,background:"#fff",color:"#475569",cursor:"pointer"};let Dj=!1;function kZ(){Dj||(Ya("children",U7),Ya("table",mJ),Ya("array",Sj),Ya("array-group",tZ),Ya("array-cell-tree",cZ),$y("table",SZ),Dj=!0)}function CZ(){if(typeof window>"u")return;const n=window.G7Core;if(!n)return;const e=n.layoutEditor,t=Array.isArray(e?.__queue)?e.__queue:[],s=Array.isArray(e?.__readyCallbacks)?e.__readyCallbacks:[];n.layoutEditor={registerWidget:Sn,registerNodeEditor:Ya,registerCanvasOverlay:$y,onReady:r=>{typeof r=="function"&&r()}};for(const r of t){const[o,...l]=r;try{o==="widget"?Sn(l[0],l[1]):o==="nodeEditor"?Ya(l[0],l[1]):o==="canvasOverlay"&&$y(l[0],l[1])}catch{}}for(const r of s)try{r()}catch{}}NX(),kZ(),CZ();async function jZ(n){if(typeof fetch!="function")return[];try{const e=await fetch(`/api/admin/templates/${encodeURIComponent(n)}/editor/permission-candidates.json`,{credentials:"same-origin",headers:on()});if(!e.ok)return[];const s=(await e.json().catch(()=>null))?.data?.permissions;if(!Array.isArray(s))return[];const r=[];for(const o of s)if(o&&typeof o=="object"){const l=o.key,d=o.name;typeof l=="string"&&l.length>0&&r.push({value:l,label:typeof d=="string"&&d?d:l})}return r}catch{return[]}}function EZ({templateIdentifier:n}){eY({templateIdentifier:n}),tY(n);const{state:e,dispatch:t}=Rn(),{t:s}=Mn(),r=Tc(),o=tC(),l=iY(),d=e.selectedRoute?.layoutName??null,u=uY(n,d),f=e.editMode==="extension",g=w.useMemo(()=>f?cY(l):o,[f,l,o]),[h,b]=w.useState(null),[y,v]=w.useState(null),[x,S]=w.useState([]),[_,A]=w.useState("user"),[C,j]=w.useState(null),[E,T]=w.useState(null),[D,I]=w.useState([]);w.useEffect(()=>{let Pe=!1;return(async()=>{try{const et=await fetch(`/api/templates/${encodeURIComponent(n)}/components.json`,{credentials:"same-origin",headers:{Accept:"application/json"}});if(!et.ok)return;const Le=await et.json().catch(()=>null);!Pe&&Le&&typeof Le=="object"&&b(Le)}catch{}})(),()=>{Pe=!0}},[n]),w.useEffect(()=>{let Pe=!1;return(async()=>{const{spec:et,sampleGlobalSources:Le}=await NO({templateIdentifier:n,coreSeed:fY()});Pe||(v(et),S(Le),AZ(n,et,Le))})(),()=>{Pe=!0}},[n]),w.useEffect(()=>{let Pe=!1;return(async()=>{if(typeof fetch=="function")try{const et=await fetch(`/api/admin/templates/${encodeURIComponent(n)}`,{credentials:"same-origin",headers:on()});if(!et.ok)return;const He=(await et.json().catch(()=>null))?.data,Ve=He?.type;Pe||((Ve==="admin"||Ve==="user")&&A(Ve),typeof He?.name=="string"&&He.name&&j(He.name),typeof He?.version=="string"&&He.version&&T(He.version))}catch{}})(),()=>{Pe=!0}},[n]),w.useEffect(()=>{let Pe=!1;return(async()=>{if(typeof fetch=="function")try{const et=await fetch("/api/admin/templates/?per_page=100&page=1",{credentials:"same-origin",headers:on()});if(!et.ok)return;const He=(await et.json().catch(()=>null))?.data?.data;if(!Pe&&Array.isArray(He)){const Ve=[];for(const Je of He){if(!Je||typeof Je!="object")continue;const jt=Je.identifier;if(typeof jt!="string"||!jt||Je.is_pending===!0)continue;const Rt=Je.type==="admin"?"admin":"user",xe=Je.name,We=Je.version;Ve.push({identifier:jt,name:typeof xe=="string"?xe:jt,version:typeof We=="string"?We:"",type:Rt})}I(Ve)}}catch{}})(),()=>{Pe=!0}},[n]);const W=y?.nesting??null,z=e.selectedRoute?.path??null,H=e.editMode,G=e.selectedRoute?.layoutName??(f?l.document?.hostLayoutName??null:null),F=e.routeTree,Z=w.useMemo(()=>{if(H!=="extension"||!G)return null;const Pe=ub(F,G);return Pe||`__base__/${G}`},[H,G,F]),Y=f&&e.returnRoute===null&&!!G;w.useEffect(()=>{if(!Y||!G)return;const Pe=ub(F,G);Pe&&t({type:"SET_RETURN_ROUTE",route:{path:Pe,layoutName:G}})},[Y,G,F,t]),w.useEffect(()=>{const Pe=DG(H,z,Z),et=IG(y?.states?.groups,Pe);t({type:"SET_AVAILABLE_STATES",states:et,activeStateId:LG(et)})},[y,H,z,Z,t]);const[U,B]=w.useState([]);w.useEffect(()=>{let Pe=!1;return(async()=>{const et=await jZ(n);Pe||B(et)})(),()=>{Pe=!0}},[n]),nY(),sY();const te=w.useCallback(Pe=>{const et=e.routeTree,Le=Pe.split("?")[0]?.split("#")[0]??Pe;return RZ(et,Le)?"route_in_tree":"route_not_in_tree"},[e.routeTree]),q=w.useCallback(Pe=>{const et=Pe.split("?")[0]?.split("#")[0]??Pe,Le=db(e.routeTree,et);Le&&(g.isDirty&&!(!(typeof window<"u")||window.confirm(s("layout_editor.chrome.dirty_guard.message")))||t({type:"SELECT_ROUTE",route:{path:Le.path,layoutName:Le.layoutName}}))},[e.routeTree,g.isDirty,t]),M=qe.useRef([]),N=w.useCallback(Pe=>{M.current=Pe},[]),[V,ee]=w.useState(null),se=w.useCallback(()=>ee(null),[]),re=w.useRef(null),pe=w.useRef(null);w.useEffect(()=>{const Pe=pe.current,et=re.current;if(!Pe||!et||typeof ResizeObserver>"u")return;const Le=()=>{et.style.setProperty("--g7le-header-h",`${Math.round(Pe.getBoundingClientRect().height)}px`)};Le();const He=new ResizeObserver(Le);return He.observe(Pe),()=>He.disconnect()},[]);const je=w.useCallback(()=>{g.reload()},[g]),me=w.useCallback(()=>{g.isDirty&&!(!(typeof window<"u")||window.confirm(s("layout_editor.chrome.dirty_guard.message")))||window.G7Core?.dispatch?.({handler:"openWindow",params:{path:`/admin/templates/${_}`,target:"_self"}})},[g.isDirty,s,_]),ce=w.useCallback(Pe=>{if(!Pe||Pe===n||g.isDirty&&!(typeof window<"u"?window.confirm(s("layout_editor.chrome.dirty_guard.message")):!0))return;const et=Oh(Pe);window.G7Core?.dispatch?.({handler:"openWindow",params:{path:et,target:"_self"}})},[n,g.isDirty,s]),be=w.useCallback(()=>{const Pe=tI(n,e.selectedRoute?.path??null);window.G7Core?.dispatch?.({handler:"openWindow",params:{path:Pe}})},[n,e.selectedRoute]),Be=w.useCallback(()=>{const Pe=e.selectedRoute?.layoutName??"";if(!Pe)return;const et=r.open({ariaLabel:s("layout_editor.attachment_manager.title"),width:720,maxHeightRatio:.82,content:qe.createElement(w_,{templateIdentifier:n,layoutName:Pe,t:s,onClose:()=>r.close(et)})})},[r,n,e.selectedRoute,s]),fe=w.useCallback(()=>{const Pe=e.selectedRoute?.layoutName??"";if(!Pe)return;const et=xO(o.document?.raw??{}),Le=r.open({ariaLabel:s("layout_editor.translation_manager.title"),width:720,maxHeightRatio:.82,content:qe.createElement(PM,{templateIdentifier:n,layoutName:Pe,t:s,referencedKeys:et,onClose:()=>r.close(Le)})})},[r,n,e.selectedRoute,s,o.document]),De=w.useCallback((Pe,et)=>{const Le=window.G7Core;if(Le&&typeof Le.t=="function"){const He=Le.t(Pe,et);if(He&&He!==Pe&&!He.startsWith("$t:"))return He}return s(Pe,et)},[s]),Fe=w.useCallback(()=>{if(!e.selectedRoute||e.editMode==="extension"||e.editMode==="iteration_item")return;const Pe=r.open({ariaLabel:s("layout_editor.page_settings.title",{name:e.selectedRoute.path??""}),width:1080,maxHeightRatio:.88,closeOnEscape:!1,content:qe.createElement(B9,{templateIdentifier:n,spec:y,t:s,resolveLabel:De,permissionCandidates:U,onClose:()=>r.close(Pe)})})},[r,e.selectedRoute,e.editMode,s,De,n,y,U]),mt=w.useCallback(async()=>{const Pe=await u.createPreview(o.document?.raw??null);if(Pe.kind!=="success"){const et=Pe.kind==="network_error"?Pe.message:s("layout_editor.preview_action.no_document");typeof window<"u"&&window.alert(et)}},[u,o.document,s]),ft=w.useCallback(()=>{const Pe=e.selectedRoute?.layoutName??"",et=e.selectedRoute?.path??"",Le=e.editMode==="extension"&&et.startsWith("__extension__/")?et.slice(14):null,He=Le?{kind:"extension",extensionId:Le}:Pe?{kind:"layout",layoutName:Pe}:null;if(!He)return;const Ve=r.open({ariaLabel:s("layout_editor.version_history.title"),width:640,maxHeightRatio:.82,content:qe.createElement(kW,{templateIdentifier:n,target:He,t:s,onRestored:async Je=>{typeof Je=="number"&&(He.kind==="extension"?t({type:"SET_EXTENSION_VERSION",extensionId:He.extensionId,version:Je}):t({type:"SET_LAYOUT_VERSION",layoutName:He.layoutName,version:Je})),await g.reload()},onClose:()=>r.close(Ve)})})},[r,n,e.selectedRoute,e.editMode,s,g,t]),xt=g.dirtyKeys.size>0||g.isDirty;w.useEffect(()=>{if(!xt)return;const Pe=et=>{et.preventDefault(),et.returnValue=""};return window.addEventListener("beforeunload",Pe),()=>window.removeEventListener("beforeunload",Pe)},[xt]);const Ot=w.useCallback(()=>{!g.isDirty||!(!(typeof window<"u")||window.confirm(s("layout_editor.chrome.reset_guard.message")))||g.reload()},[g,s]),St=w.useCallback(async()=>{const Pe=await g.save({sessionAddedPaths:M.current});ee(Pe),Pe.kind==="success"&&typeof Pe.newContentVersion=="number"&&(Pe.savedExtensionId?t({type:"SET_EXTENSION_VERSION",extensionId:Pe.savedExtensionId,version:Pe.newContentVersion}):Pe.savedLayoutName&&t({type:"SET_LAYOUT_VERSION",layoutName:Pe.savedLayoutName,version:Pe.newContentVersion}))},[g,t]),kt=w.useCallback(()=>{const Pe=r.open({ariaLabel:s("layout_editor.shortcuts.title"),width:560,maxHeightRatio:.85,content:qe.createElement(DW,{t:s,onClose:()=>r.close(Pe)})})},[r,s]),Vt=w.useMemo(()=>({save:()=>{St()},exit:me,editCode:be,reset:Ot,translations:fe,addElement:()=>{e.selectedRoute&&t({type:"TOGGLE_PALETTE"})},help:kt,preview:()=>{e.selectedRoute?.layoutName&&mt()}}),[St,me,be,Ot,fe,e.selectedRoute,t,kt,mt]),[Nt,tn]=w.useState(!1);w.useEffect(()=>{const Pe=window.setInterval(()=>{tn(!!window.__g7LayoutEditorHasSelection)},200);return()=>window.clearInterval(Pe)},[]),O1({handlers:Vt,hasSelection:Nt});const Qe=g;return e.routesError?a.jsx("div",{className:"g7le-chrome g7le-chrome--routes-error","data-testid":"g7le-chrome-routes-error",style:{position:"fixed",inset:0,display:"flex",background:"#f8fafc",color:"#0f172a",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Apple SD Gothic Neo", "Noto Sans KR", sans-serif',fontSize:13,lineHeight:1.5,zIndex:9e3},children:a.jsx(Oy,{error:e.routesError})}):a.jsx("div",{className:"g7le-chrome","data-testid":"g7le-chrome",ref:re,style:{position:"static",minHeight:"100vh",background:"#f8fafc",color:"#0f172a",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Apple SD Gothic Neo", "Noto Sans KR", sans-serif',fontSize:13,lineHeight:1.5,zIndex:9e3},children:a.jsxs(HL,{value:Qe,children:[f&&l.needsHostPicker&&l.document&&a.jsx(dY,{hostLayouts:l.document.hostLayouts,extensionLabel:null,onSelect:l.selectHost}),a.jsxs("div",{className:"g7le-chrome__header","data-testid":"g7le-chrome-header",ref:pe,style:{position:"sticky",top:0,zIndex:20,background:"#f8fafc"},children:[a.jsx(YL,{onSave:()=>{St()},isDirty:g.isDirty,onExit:me,onEditCode:be,onManageImages:Be,onManageTranslations:fe,onPageSettings:Fe,onReset:Ot,onShowShortcuts:kt,onPreview:mt,onShowVersions:ft,templateName:C,templateVersion:E,templateList:D,onSwitchTemplate:ce}),a.jsx(YW,{result:V,onDismiss:se,onLoadLatest:je}),a.jsxs("div",{className:"g7le-chrome__device-toolbar","data-testid":"g7le-chrome-device-toolbar",style:{display:"flex",justifyContent:"center",padding:"6px 12px",background:"#f1f5f9",borderBottom:"1px solid #e2e8f0"},children:[a.jsx($G,{}),a.jsx(NG,{})]})]}),a.jsxs("div",{className:"g7le-chrome__body",style:{display:"grid",gridTemplateColumns:"auto 1fr",alignItems:"stretch"},children:[a.jsx(pU,{}),a.jsx(jG,{manifest:h,nesting:W,componentPalette:y?.componentPalette??null,spec:y,permissionCandidates:U,sampleGlobalSources:x,resolveRouteMatch:te,onNavigateToDestination:q,onSessionAddedPathsChange:N})]}),a.jsx(qL,{})]})})}function db(n,e){for(const t of n){if(t.kind==="route"&&t.path===e)return t;if(t.children&&t.children.length>0){const s=db(t.children,e);if(s)return s}}return null}function RZ(n,e){return db(n,e)!==null}function ub(n,e){for(const t of n){if(t.kind==="route"&&t.layoutName===e&&typeof t.path=="string")return t.path;if(t.children&&t.children.length>0){const s=ub(t.children,e);if(s)return s}}return null}function AZ(n,e,t){const s=[];zy({sources:t,isGuestOnly:!1,warn:o=>{const l=/extension '([^']+)' override of core key '([^']+)'/.exec(o);l&&s.push(`${l[1]}:${l[2]}`)}});const r=e?.sampleData?.byDataSourceId?Object.keys(e.sampleData.byDataSourceId).length:0;TL({templateIdentifier:n,mergedSources:[...t.map(o=>({kind:o.kind,id:o.id}))],blockCounts:{controls:e?.controls?Object.keys(e.controls).length:0,componentCapabilities:e?.componentCapabilities?Object.keys(e.componentCapabilities).length:0,actionRecipes:e?.actionRecipes?Object.keys(e.actionRecipes).length:0,conditionRecipes:e?.conditionRecipes?Object.keys(e.conditionRecipes).length:0,paletteGroups:e?.componentPalette?.groups?.length??0,stateGroups:e?.states?.groups?.length??0,sampleDataIds:r},sampleGlobalSourceCount:t.length,sampleGlobalConflicts:s,timestamp:Date.now()})}function TZ({templateIdentifier:n,initialLocale:e}){return w.useEffect(()=>()=>{_L(),kL(),jL(),EL(),RL(),AL(),$L(),NL(),DL()},[]),a.jsx(BL,{templateIdentifier:n,initialLocale:e,children:a.jsx(UL,{children:a.jsx(EZ,{templateIdentifier:n})})})}const It=Ht("TemplateEngine"),Ie={templateId:null,locale:"ko",isInitialized:!1,reactRoot:null,containerId:null,currentLayoutJson:null,currentDataContext:{},translationContext:{templateId:"",locale:"ko"},registry:null,bindingEngine:null,translationEngine:null,actionDispatcher:null,templateMetadata:null};let ip=!1;const id=[];async function $Z(n){try{It.log("템플릿 메타데이터 로드 중...",n);const e=n.split("-").map(s=>s.split("_").map(r=>r.charAt(0).toUpperCase()+r.slice(1)).join("")).join(""),t=window[e];return t?.templateMetadata?(It.log("템플릿 메타데이터 로드 완료 (전역 변수)",t.templateMetadata),t.templateMetadata):(It.warn(`템플릿 번들에 메타데이터가 없습니다. 전역 변수: ${e}`),{identifier:n,locales:["ko","en"],name:{ko:n,en:n},description:{ko:"",en:""},version:"1.0.0",type:"admin"})}catch(e){return It.error("템플릿 메타데이터 로드 실패",e),{identifier:n,locales:["ko","en"],name:{ko:n,en:n},description:{ko:"",en:""},version:"1.0.0",type:"admin"}}}function Ij(){const e=(typeof window<"u"?window.__templateApp:void 0)?.globalState?.appConfig?.supportedLocales,t=Ie.templateMetadata?.locales;return{$locale:Ie.locale,$locales:Array.isArray(e)&&e.length>0?e:t||["ko","en"],$templateLocales:t||["ko","en"],$templateId:Ie.templateId}}async function ld(n){try{if(It.log("템플릿 엔진 초기화 시작",n),Ie.isInitialized)throw new Error("템플릿 엔진이 이미 초기화되었습니다. destroyTemplate()을 먼저 호출하세요.");if(!n.templateId)throw new ZD;ip=n.debug??!1,typeof window<"u"&&(window.G7Config||(window.G7Config={}),window.G7Config.debug=ip),vL(),Ie.templateId=n.templateId,Ie.locale=n.locale||"ko",It.log("엔진 인스턴스 생성 중..."),Ie.registry=xr.getInstance(),Ie.bindingEngine=new ms,Ie.translationEngine=ts.getInstance(),n.cacheVersion!==void 0&&n.cacheVersion>0&&Ie.translationEngine.setCacheVersion(n.cacheVersion),Ie.translationContext={templateId:n.templateId,locale:Ie.locale},Ie.actionDispatcher=new yc({},Ie.translationEngine,Ie.translationContext),mN(Ie.actionDispatcher),It.log("다국어 파일 로드 중...",n.templateId,Ie.locale);const e="en",t=[Ie.translationEngine.loadTranslations(n.templateId,Ie.locale).then(()=>{It.log(`다국어 파일 로드 완료: ${Ie.locale}`)}).catch(s=>{It.warn(`다국어 파일 로드 실패 (${Ie.locale}):`,s instanceof Error?s.message:s)})];Ie.locale!==e&&t.push(Ie.translationEngine.loadTranslations(n.templateId,e).then(()=>{It.log(`폴백 다국어 파일 로드 완료: ${e}`)}).catch(s=>{It.warn(`폴백 다국어 파일 로드 실패 (${e}):`,s instanceof Error?s.message:s)})),await Promise.allSettled(t),It.log("템플릿 메타데이터 로드 중...",n.templateId),Ie.templateMetadata=await $Z(n.templateId),Ie.isInitialized=!0,It.log("템플릿 엔진 초기화 완료 (ComponentRegistry는 별도 로드)")}catch(e){throw It.error("템플릿 엔진 초기화 실패",e),Ie.isInitialized=!1,Ie.registry=null,Ie.bindingEngine=null,Ie.translationEngine=null,Ie.actionDispatcher=null,e}}async function hl(n){try{if(It.log("템플릿 렌더링 시작",n),!Ie.isInitialized)throw new Error("템플릿 엔진이 초기화되지 않았습니다. initTemplateEngine()을 먼저 호출하세요.");if(!n.containerId)throw new Error("containerId는 필수입니다.");if(!n.layoutJson)throw new Error("layoutJson은 필수입니다.");const e=document.getElementById(n.containerId);if(!e)throw new Error(`컨테이너를 찾을 수 없습니다: #${n.containerId}`);const t=Ij();if(Ie.containerId=n.containerId,Ie.currentLayoutJson=n.layoutJson,Ie.currentDataContext={...t,...n.dataContext||{}},Ie.translationContext=n.translationContext||{templateId:Ie.templateId||"",locale:Ie.locale},Ie.reactRoot||(It.log("React Root 생성"),Ie.reactRoot=$g.createRoot(e)),typeof window<"u"){const o=K0(window.location.pathname);if(o){It.log("레이아웃 편집기 모드 진입",o);const l=qe.createElement(TZ,{templateIdentifier:o.templateIdentifier,initialLocale:Ie.locale});Ie.reactRoot.render(qe.createElement(Th,{translationEngine:Ie.translationEngine,translationContext:Ie.translationContext,children:qe.createElement(lh,{children:qe.createElement(Cu,{children:qe.createElement($h,{children:l})})})}));return}}const s=n.layoutJson.components||[];if(s.length===0){It.warn("렌더링할 컴포넌트가 없습니다.");return}const r=n.layoutJson.modals||[];if(It.log("modals 배열:",r),It.log("modals 개수:",r.length),It.log("DynamicRenderer로 렌더링 시작"),Ie.reactRoot.render(qe.createElement(Th,{translationEngine:Ie.translationEngine,translationContext:Ie.translationContext},qe.createElement(lh,null,qe.createElement(Cu,null,qe.createElement($h,null,[...s.map((o,l)=>{const d=Ie.currentLayoutJson?.layout_name||"";return qe.createElement(Kr,{key:d&&!o._fromBase?`${o.id}_${d}`:o.id,componentDef:o,dataContext:Ie.currentDataContext,translationContext:Ie.translationContext,registry:Ie.registry,bindingEngine:Ie.bindingEngine,translationEngine:Ie.translationEngine,actionDispatcher:Ie.actionDispatcher,isRootRenderer:l===0,layoutKey:d})}),qe.createElement(Nw,{key:"__modal_parent_context_provider"},r.map(o=>{const l=Ie.currentDataContext._global?.modalStack||[],u=l.includes(o.id)||Ie.currentDataContext._global?.activeModal===o.id,f=l.indexOf(o.id),g=f>=0?50+f:50,h=window.__g7LayoutContextStack||[],y=h[h.length-1]?.dataContext,v=qe.createElement(Kr,{key:`modal_${o.id}_renderer`,componentDef:{...o,props:{...o.props,isOpen:u,style:{...o.props?.style,zIndex:g},onClose:Ie.actionDispatcher?.createHandler({type:"click",handler:"closeModal"},Ie.currentDataContext)}},dataContext:Ie.currentDataContext,translationContext:Ie.translationContext,registry:Ie.registry,bindingEngine:Ie.bindingEngine,translationEngine:Ie.translationEngine,actionDispatcher:Ie.actionDispatcher,parentDataContext:y});return o.data_sources&&o.data_sources.length>0?qe.createElement(F0,{key:`modal_${o.id}`,isOpen:u,modalId:o.id,dataSources:o.data_sources,dataContext:Ie.currentDataContext,globalStateUpdater:Ie.actionDispatcher?.getGlobalStateUpdater(),bindingEngine:Ie.bindingEngine,debug:ip,children:v}):v}))]))))),It.log("템플릿 렌더링 완료"),id.length>0){It.log(`대기 중인 데이터 업데이트 ${id.length}건 적용`);const o=[...id];id.length=0;for(const{data:l,options:d}of o)ml(l,d)}}catch(e){throw It.error("템플릿 렌더링 실패",e),e}}function ml(n,e){try{if(It.log("템플릿 데이터 업데이트 시작",Object.keys(n)),!Ie.isInitialized)throw new Error("템플릿 엔진이 초기화되지 않았습니다.");if(!Ie.reactRoot||!Ie.currentLayoutJson){It.log("React 미준비 - 데이터 업데이트 큐잉:",Object.keys(n)),id.push({data:n,options:e});return}const t=Ij(),s={...Ie.currentDataContext._global||{},...n._global||{}};Ie.currentDataContext={...t,...Ie.currentDataContext,...n,_global:s},s._local!==void 0&&(Ie.currentDataContext._local=s._local),s._computed!==void 0&&(Ie.currentDataContext._computed=s._computed);const r=Ie.currentLayoutJson.components||[],o=Ie.currentLayoutJson.modals||[];It.log("updateTemplateData - modals 배열:",o),It.log("updateTemplateData - modals 개수:",o.length),It.log("updateTemplateData - activeModal:",Ie.currentDataContext._global?.activeModal);const l=()=>{Ie.reactRoot.render(qe.createElement(Th,{translationEngine:Ie.translationEngine,translationContext:Ie.translationContext},qe.createElement(lh,null,qe.createElement(Cu,null,qe.createElement($h,null,[...r.map((d,u)=>{const f=Ie.currentLayoutJson?.layout_name||"";return qe.createElement(Kr,{key:f&&!d._fromBase?`${d.id}_${f}`:d.id,componentDef:d,dataContext:Ie.currentDataContext,translationContext:Ie.translationContext,registry:Ie.registry,bindingEngine:Ie.bindingEngine,translationEngine:Ie.translationEngine,actionDispatcher:Ie.actionDispatcher,isRootRenderer:u===0,layoutKey:f})}),qe.createElement(Nw,{key:"__modal_parent_context_provider_update"},o.map(d=>{const u=Ie.currentDataContext._global?.modalStack||[],g=u.includes(d.id)||Ie.currentDataContext._global?.activeModal===d.id,h=u.indexOf(d.id),b=h>=0?50+h:50,y=window.__g7LayoutContextStack||[],x=y[y.length-1]?.dataContext,S=qe.createElement(Kr,{key:`modal_${d.id}_renderer`,componentDef:{...d,props:{...d.props,isOpen:g,style:{...d.props?.style,zIndex:b},onClose:Ie.actionDispatcher?.createHandler({type:"click",handler:"closeModal"},Ie.currentDataContext)}},dataContext:Ie.currentDataContext,translationContext:Ie.translationContext,registry:Ie.registry,bindingEngine:Ie.bindingEngine,translationEngine:Ie.translationEngine,actionDispatcher:Ie.actionDispatcher,parentDataContext:x});return d.data_sources&&d.data_sources.length>0?qe.createElement(F0,{key:`modal_${d.id}`,isOpen:g,modalId:d.id,dataSources:d.data_sources,dataContext:Ie.currentDataContext,globalStateUpdater:Ie.actionDispatcher?.getGlobalStateUpdater(),bindingEngine:Ie.bindingEngine,debug:ip,children:S}):S}))])))))};e?.sync?(It.log("재렌더링 시작 (sync mode - 즉시 렌더링)"),l()):(It.log("재렌더링 시작 (with startTransition)"),w.startTransition(()=>{l()})),It.log("템플릿 데이터 업데이트 완료")}catch(t){throw It.error("템플릿 데이터 업데이트 실패",t),t}}function lp(){try{It.log("템플릿 정리 시작"),Ie.reactRoot&&(It.log("React Root 언마운트"),Ie.reactRoot.unmount(),Ie.reactRoot=null),Ie.templateId=null,Ie.locale="ko",Ie.isInitialized=!1,Ie.containerId=null,Ie.currentLayoutJson=null,Ie.currentDataContext={},Ie.translationContext={templateId:"",locale:"ko"},Ie.registry=null,Ie.bindingEngine=null,Ie.translationEngine=null,Ie.actionDispatcher=null,Ie.templateMetadata=null,It.log("템플릿 정리 완료")}catch(n){throw It.error("템플릿 정리 실패",n),n}}function ko(){return Object.freeze({...Ie})}function Lj(){return Ie.actionDispatcher}const cd={initTemplateEngine:ld,renderTemplate:hl,updateTemplateData:ml,destroyTemplate:lp,getState:ko};typeof window<"u"&&(window.G7Core||(window.G7Core={}),window.G7Core.TemplateEngine=cd,bL({getState:()=>({translationEngine:Ie.translationEngine,translationContext:Ie.translationContext,bindingEngine:Ie.bindingEngine,actionDispatcher:Ie.actionDispatcher,templateMetadata:Ie.templateMetadata}),transitionManager:Fr,responsiveManager:Ws,webSocketManager:Fu}),It.log("전역 객체 window.G7Core.TemplateEngine에 노출됨"));const so=Object.freeze(Object.defineProperty({__proto__:null,DataSourceManager:Rr,LayoutLoader:Ah,TemplateApp:Rc,TemplateEngine:cd,default:cd,destroyTemplate:lp,getActionDispatcher:Lj,getState:ko,initTemplateApp:Ph,initTemplateEngine:ld,renderTemplate:hl,updateTemplateData:ml},Symbol.toStringTag,{value:"Module"}));Gn.DataSourceManager=Rr,Gn.LayoutLoader=Ah,Gn.TemplateApp=Rc,Gn.TemplateEngine=cd,Gn.default=cd,Gn.destroyTemplate=lp,Gn.getActionDispatcher=Lj,Gn.getState=ko,Gn.initTemplateApp=Ph,Gn.initTemplateEngine=ld,Gn.renderTemplate=hl,Gn.updateTemplateData=ml,Object.defineProperties(Gn,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})})(this.G7Core=this.G7Core||{});
//# sourceMappingURL=template-engine.min.js.map