| 8 |
`+e.stack}return{value:e,source:t,stack:i,digest:null}}function ws(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function Ts(e,t){try{console.error(t.value)}catch(e){setTimeout(function(){throw e})}}var Es=typeof WeakMap==`function`?WeakMap:Map;function Ds(e,t,n){n=to(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){rl||(rl=!0,il=r),Ts(e,t)},n}function Os(e,t,n){n=to(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r==`function`){var i=t.value;n.payload=function(){return r(i)},n.callback=function(){Ts(e,t)}}var a=e.stateNode;return a!==null&&typeof a.componentDidCatch==`function`&&(n.callback=function(){Ts(e,t),typeof r!=`function`&&(al===null?al=new Set([this]):al.add(this));var n=t.stack;this.componentDidCatch(t.value,{componentStack:n===null?``:n})}),n}function ks(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Es;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(i.add(n),e=zl.bind(null,e,t,n),t.then(e,e))}function As(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t===null?!0:t.dehydrated!==null),t)return e;e=e.return}while(e!==null);return null}function js(e,t,n,r,i){return e.mode&1?(e.flags|=65536,e.lanes=i,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=to(-1,1),t.tag=2,no(n,t,1))),n.lanes|=1),e)}var Ms=C.ReactCurrentOwner,Ns=!1;function Ps(e,t,n,r){t.child=e===null?Ra(t,null,n,r):La(t,e.child,n,r)}function Fs(e,t,n,r,i){n=n.render;var a=t.ref;return Ka(t,i),r=Ao(e,t,n,r,a,i),n=jo(),e!==null&&!Ns?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~i,tc(e,t,i)):(K&&n&&ya(t),t.flags|=1,Ps(e,t,r,i),t.child)}function Is(e,t,n,r,i){if(e===null){var a=n.type;return typeof a==`function`&&!ql(a)&&a.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=a,Ls(e,t,a,r,i)):(e=Xl(n.type,null,r,t,t.mode,i),e.ref=t.ref,e.return=t,t.child=e)}if(a=e.child,(e.lanes&i)===0){var o=a.memoizedProps;if(n=n.compare,n=n===null?kr:n,n(o,r)&&e.ref===t.ref)return tc(e,t,i)}return t.flags|=1,e=Yl(a,r),e.ref=t.ref,e.return=t,t.child=e}function Ls(e,t,n,r,i){if(e!==null){var a=e.memoizedProps;if(kr(a,r)&&e.ref===t.ref)if(Ns=!1,t.pendingProps=r=a,(e.lanes&i)!==0)e.flags&131072&&(Ns=!0);else return t.lanes=e.lanes,tc(e,t,i)}return Bs(e,t,n,r,i)}function Rs(e,t,n){var r=t.pendingProps,i=r.children,a=e===null?null:e.memoizedState;if(r.mode===`hidden`)if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},G(Kc,Gc),Gc|=n;else{if(!(n&1073741824))return e=a===null?n:a.baseLanes|n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,G(Kc,Gc),Gc|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=a===null?n:a.baseLanes,G(Kc,Gc),Gc|=r}else a===null?r=n:(r=a.baseLanes|n,t.memoizedState=null),G(Kc,Gc),Gc|=r;return Ps(e,t,i,n),t.child}function zs(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Bs(e,t,n,r,i){var a=Xi(n)?Ji:Ki.current;return a=Yi(t,a),Ka(t,i),n=Ao(e,t,n,r,a,i),r=jo(),e!==null&&!Ns?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~i,tc(e,t,i)):(K&&r&&ya(t),t.flags|=1,Ps(e,t,n,i),t.child)}function Vs(e,t,n,r,i){if(Xi(n)){var a=!0;ea(t)}else a=!1;if(Ka(t,i),t.stateNode===null)ec(e,t),bs(t,n,r),Ss(t,n,r,i),r=!0;else if(e===null){var o=t.stateNode,s=t.memoizedProps;o.props=s;var c=o.context,l=n.contextType;typeof l==`object`&&l?l=qa(l):(l=Xi(n)?Ji:Ki.current,l=Yi(t,l));var u=n.getDerivedStateFromProps,d=typeof u==`function`||typeof o.getSnapshotBeforeUpdate==`function`;d||typeof o.UNSAFE_componentWillReceiveProps!=`function`&&typeof o.componentWillReceiveProps!=`function`||(s!==r||c!==l)&&xs(t,o,r,l),Qa=!1;var f=t.memoizedState;o.state=f,ao(t,r,o,i),c=t.memoizedState,s!==r||f!==c||qi.current||Qa?(typeof u==`function`&&(_s(t,n,u,r),c=t.memoizedState),(s=Qa||ys(t,n,s,r,f,c,l))?(d||typeof o.UNSAFE_componentWillMount!=`function`&&typeof o.componentWillMount!=`function`||(typeof o.componentWillMount==`function`&&o.componentWillMount(),typeof o.UNSAFE_componentWillMount==`function`&&o.UNSAFE_componentWillMount()),typeof o.componentDidMount==`function`&&(t.flags|=4194308)):(typeof o.componentDidMount==`function`&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=c),o.props=r,o.state=c,o.context=l,r=s):(typeof o.componentDidMount==`function`&&(t.flags|=4194308),r=!1)}else{o=t.stateNode,eo(e,t),s=t.memoizedProps,l=t.type===t.elementType?s:gs(t.type,s),o.props=l,d=t.pendingProps,f=o.context,c=n.contextType,typeof c==`object`&&c?c=qa(c):(c=Xi(n)?Ji:Ki.current,c=Yi(t,c));var p=n.getDerivedStateFromProps;(u=typeof p==`function`||typeof o.getSnapshotBeforeUpdate==`function`)||typeof o.UNSAFE_componentWillReceiveProps!=`function`&&typeof o.componentWillReceiveProps!=`function`||(s!==d||f!==c)&&xs(t,o,r,c),Qa=!1,f=t.memoizedState,o.state=f,ao(t,r,o,i);var m=t.memoizedState;s!==d||f!==m||qi.current||Qa?(typeof p==`function`&&(_s(t,n,p,r),m=t.memoizedState),(l=Qa||ys(t,n,l,r,f,m,c)||!1)?(u||typeof o.UNSAFE_componentWillUpdate!=`function`&&typeof o.componentWillUpdate!=`function`||(typeof o.componentWillUpdate==`function`&&o.componentWillUpdate(r,m,c),typeof o.UNSAFE_componentWillUpdate==`function`&&o.UNSAFE_componentWillUpdate(r,m,c)),typeof o.componentDidUpdate==`function`&&(t.flags|=4),typeof o.getSnapshotBeforeUpdate==`function`&&(t.flags|=1024)):(typeof o.componentDidUpdate!=`function`||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof o.getSnapshotBeforeUpdate!=`function`||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=m),o.props=r,o.state=m,o.context=c,r=l):(typeof o.componentDidUpdate!=`function`||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof o.getSnapshotBeforeUpdate!=`function`||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return Hs(e,t,n,r,a,i)}function Hs(e,t,n,r,i,a){zs(e,t);var o=(t.flags&128)!=0;if(!r&&!o)return i&&ta(t,n,!1),tc(e,t,a);r=t.stateNode,Ms.current=t;var s=o&&typeof n.getDerivedStateFromError!=`function`?null:r.render();return t.flags|=1,e!==null&&o?(t.child=La(t,e.child,null,a),t.child=La(t,null,s,a)):Ps(e,t,s,a),t.memoizedState=r.state,i&&ta(t,n,!0),t.child}function Us(e){var t=e.stateNode;t.pendingContext?Qi(e,t.pendingContext,t.pendingContext!==t.context):t.context&&Qi(e,t.context,!1),po(e,t.containerInfo)}function Ws(e,t,n,r,i){return q(),ja(i),t.flags|=256,Ps(e,t,n,r),t.child}var Gs={dehydrated:null,treeContext:null,retryLane:0};function Ks(e){return{baseLanes:e,cachePool:null,transitions:null}}function qs(e,t,n){var r=t.pendingProps,i=J.current,a=!1,o=(t.flags&128)!=0,s;if((s=o)||(s=e!==null&&e.memoizedState===null?!1:(i&2)!=0),s?(a=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(i|=1),G(J,i&1),e===null)return Da(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data===`$!`?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(o=r.children,e=r.fallback,a?(r=t.mode,a=t.child,o={mode:`hidden`,children:o},!(r&1)&&a!==null?(a.childLanes=0,a.pendingProps=o):a=Ql(o,r,0,null),e=Zl(e,r,n,null),a.return=t,e.return=t,a.sibling=e,t.child=a,t.child.memoizedState=Ks(n),t.memoizedState=Gs,e):Js(t,o));if(i=e.memoizedState,i!==null&&(s=i.dehydrated,s!==null))return Xs(e,t,o,r,s,i,n);if(a){a=r.fallback,o=t.mode,i=e.child,s=i.sibling;var c={mode:`hidden`,children:r.children};return!(o&1)&&t.child!==i?(r=t.child,r.childLanes=0,r.pendingProps=c,t.deletions=null):(r=Yl(i,c),r.subtreeFlags=i.subtreeFlags&14680064),s===null?(a=Zl(a,o,n,null),a.flags|=2):a=Yl(s,a),a.return=t,r.return=t,r.sibling=a,t.child=r,r=a,a=t.child,o=e.child.memoizedState,o=o===null?Ks(n):{baseLanes:o.baseLanes|n,cachePool:null,transitions:o.transitions},a.memoizedState=o,a.childLanes=e.childLanes&~n,t.memoizedState=Gs,r}return a=e.child,e=a.sibling,r=Yl(a,{mode:`visible`,children:r.children}),!(t.mode&1)&&(r.lanes=n),r.return=t,r.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=r,t.memoizedState=null,r}function Js(e,t){return t=Ql({mode:`visible`,children:t},e.mode,0,null),t.return=e,e.child=t}function Ys(e,t,n,r){return r!==null&&ja(r),La(t,e.child,null,n),e=Js(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Xs(e,t,n,i,a,o,s){if(n)return t.flags&256?(t.flags&=-257,i=ws(Error(r(422))),Ys(e,t,s,i)):t.memoizedState===null?(o=i.fallback,a=t.mode,i=Ql({mode:`visible`,children:i.children},a,0,null),o=Zl(o,a,s,null),o.flags|=2,i.return=t,o.return=t,i.sibling=o,t.child=i,t.mode&1&&La(t,e.child,null,s),t.child.memoizedState=Ks(s),t.memoizedState=Gs,o):(t.child=e.child,t.flags|=128,null);if(!(t.mode&1))return Ys(e,t,s,null);if(a.data===`$!`){if(i=a.nextSibling&&a.nextSibling.dataset,i)var c=i.dgst;return i=c,o=Error(r(419)),i=ws(o,i,void 0),Ys(e,t,s,i)}if(c=(s&e.childLanes)!==0,Ns||c){if(i=Hc,i!==null){switch(s&-s){case 4:a=2;break;case 16:a=8;break;case 64: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:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:a=32;break;case 536870912:a=268435456;break;default:a=0}a=(a&(i.suspendedLanes|s))===0?a:0,a!==0&&a!==o.retryLane&&(o.retryLane=a,Za(e,a),hl(i,e,a,-1))}return kl(),i=ws(Error(r(421))),Ys(e,t,s,i)}return a.data===`$?`?(t.flags|=128,t.child=e.child,t=Vl.bind(null,e),a._reactRetry=t,null):(e=o.treeContext,Sa=ki(a.nextSibling),xa=t,K=!0,Ca=null,e!==null&&(fa[pa++]=ha,fa[pa++]=ga,fa[pa++]=ma,ha=e.id,ga=e.overflow,ma=t),t=Js(t,i.children),t.flags|=4096,t)}function Zs(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),Ga(e.return,t,n)}function Qs(e,t,n,r,i){var a=e.memoizedState;a===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:i}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=i)}function $s(e,t,n){var r=t.pendingProps,i=r.revealOrder,a=r.tail;if(Ps(e,t,r.children,n),r=J.current,r&2)r=r&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)a:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Zs(e,n,t);else if(e.tag===19)Zs(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break a;for(;e.sibling===null;){if(e.return===null||e.return===t)break a;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(G(J,r),!(t.mode&1))t.memoizedState=null;else switch(i){case`forwards`:for(n=t.child,i=null;n!==null;)e=n.alternate,e!==null&&_o(e)===null&&(i=n),n=n.sibling;n=i,n===null?(i=t.child,t.child=null):(i=n.sibling,n.sibling=null),Qs(t,!1,i,n,a);break;case`backwards`:for(n=null,i=t.child,t.child=null;i!==null;){if(e=i.alternate,e!==null&&_o(e)===null){t.child=i;break}e=i.sibling,i.sibling=n,n=i,i=e}Qs(t,!0,n,null,a);break;case`together`:Qs(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function ec(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function tc(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),Yc|=t.lanes,(n&t.childLanes)===0)return null;if(e!==null&&t.child!==e.child)throw Error(r(153));if(t.child!==null){for(e=t.child,n=Yl(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=Yl(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function nc(e,t,n){switch(t.tag){case 3:Us(t),q();break;case 5:ho(t);break;case 1:Xi(t.type)&&ea(t);break;case 4:po(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,i=t.memoizedProps.value;G(za,r._currentValue),r._currentValue=i;break;case 13:if(r=t.memoizedState,r!==null)return r.dehydrated===null?(n&t.child.childLanes)===0?(G(J,J.current&1),e=tc(e,t,n),e===null?null:e.sibling):qs(e,t,n):(G(J,J.current&1),t.flags|=128,null);G(J,J.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&128){if(r)return $s(e,t,n);t.flags|=128}if(i=t.memoizedState,i!==null&&(i.rendering=null,i.tail=null,i.lastEffect=null),G(J,J.current),r)break;return null;case 22:case 23:return t.lanes=0,Rs(e,t,n)}return tc(e,t,n)}var rc=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},ic=function(e,t,n,r){var i=e.memoizedProps;if(i!==r){e=t.stateNode,fo(co.current);var o=null;switch(n){case`input`:i=ye(e,i),r=ye(e,r),o=[];break;case`select`:i=M({},i,{value:void 0}),r=M({},r,{value:void 0}),o=[];break;case`textarea`:i=De(e,i),r=De(e,r),o=[];break;default:typeof i.onClick!=`function`&&typeof r.onClick==`function`&&(e.onclick=yi)}Ve(n,r);var s;for(u in n=null,i)if(!r.hasOwnProperty(u)&&i.hasOwnProperty(u)&&i[u]!=null)if(u===`style`){var c=i[u];for(s in c)c.hasOwnProperty(s)&&(n||={},n[s]=``)}else u!==`dangerouslySetInnerHTML`&&u!==`children`&&u!==`suppressContentEditableWarning`&&u!==`suppressHydrationWarning`&&u!==`autoFocus`&&(a.hasOwnProperty(u)?o||=[]:(o||=[]).push(u,null));for(u in r){var l=r[u];if(c=i?.[u],r.hasOwnProperty(u)&&l!==c&&(l!=null||c!=null))if(u===`style`)if(c){for(s in c)!c.hasOwnProperty(s)||l&&l.hasOwnProperty(s)||(n||={},n[s]=``);for(s in l)l.hasOwnProperty(s)&&c[s]!==l[s]&&(n||={},n[s]=l[s])}else n||(o||=[],o.push(u,n)),n=l;else u===`dangerouslySetInnerHTML`?(l=l?l.__html:void 0,c=c?c.__html:void 0,l!=null&&c!==l&&(o||=[]).push(u,l)):u===`children`?typeof l!=`string`&&typeof l!=`number`||(o||=[]).push(u,``+l):u!==`suppressContentEditableWarning`&&u!==`suppressHydrationWarning`&&(a.hasOwnProperty(u)?(l!=null&&u===`onScroll`&&U(`scroll`,e),o||c===l||(o=[])):(o||=[]).push(u,l))}n&&(o||=[]).push(`style`,n);var u=o;(t.updateQueue=u)&&(t.flags|=4)}},ac=function(e,t,n,r){n!==r&&(t.flags|=4)};function oc(e,t){if(!K)switch(e.tailMode){case`hidden`:t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case`collapsed`:n=e.tail;for(var r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function sc(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var i=e.child;i!==null;)n|=i.lanes|i.childLanes,r|=i.subtreeFlags&14680064,r|=i.flags&14680064,i.return=e,i=i.sibling;else for(i=e.child;i!==null;)n|=i.lanes|i.childLanes,r|=i.subtreeFlags,r|=i.flags,i.return=e,i=i.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function cc(e,t,n){var i=t.pendingProps;switch(ba(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return sc(t),null;case 1:return Xi(t.type)&&Zi(),sc(t),null;case 3:return i=t.stateNode,mo(),W(qi),W(Ki),yo(),i.pendingContext&&(i.context=i.pendingContext,i.pendingContext=null),(e===null||e.child===null)&&(ka(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,Ca!==null&&(yl(Ca),Ca=null))),sc(t),null;case 5:go(t);var o=fo(uo.current);if(n=t.type,e!==null&&t.stateNode!=null)ic(e,t,n,i,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!i){if(t.stateNode===null)throw Error(r(166));return sc(t),null}if(e=fo(co.current),ka(t)){i=t.stateNode,n=t.type;var s=t.memoizedProps;switch(i[Mi]=t,i[Ni]=s,e=(t.mode&1)!=0,n){case`dialog`:U(`cancel`,i),U(`close`,i);break;case`iframe`:case`object`:case`embed`:U(`load`,i);break;case`video`:case`audio`:for(o=0;o<ni.length;o++)U(ni[o],i);break;case`source`:U(`error`,i);break;case`img`:case`image`:case`link`:U(`error`,i),U(`load`,i);break;case`details`:U(`toggle`,i);break;case`input`:be(i,s),U(`invalid`,i);break;case`select`:i._wrapperState={wasMultiple:!!s.multiple},U(`invalid`,i);break;case`textarea`:Oe(i,s),U(`invalid`,i)}for(var c in Ve(n,s),o=null,s)if(s.hasOwnProperty(c)){var l=s[c];c===`children`?typeof l==`string`?i.textContent!==l&&(!0!==s.suppressHydrationWarning&&vi(i.textContent,l,e),o=[`children`,l]):typeof l==`number`&&i.textContent!==``+l&&(!0!==s.suppressHydrationWarning&&vi(i.textContent,l,e),o=[`children`,``+l]):a.hasOwnProperty(c)&&l!=null&&c===`onScroll`&&U(`scroll`,i)}switch(n){case`input`:ge(i),Ce(i,s,!0);break;case`textarea`:ge(i),Ae(i);break;case`select`:case`option`:break;default:typeof s.onClick==`function`&&(i.onclick=yi)}i=o,t.updateQueue=i,i!==null&&(t.flags|=4)}else{c=o.nodeType===9?o:o.ownerDocument,e===`http://www.w3.org/1999/xhtml`&&(e=je(n)),e===`http://www.w3.org/1999/xhtml`?n===`script`?(e=c.createElement(`div`),e.innerHTML=`<script><\/script>`,e=e.removeChild(e.firstChild)):typeof i.is==`string`?e=c.createElement(n,{is:i.is}):(e=c.createElement(n),n===`select`&&(c=e,i.multiple?c.multiple=!0:i.size&&(c.size=i.size))):e=c.createElementNS(e,n),e[Mi]=t,e[Ni]=i,rc(e,t,!1,!1),t.stateNode=e;a:{switch(c=He(n,i),n){case`dialog`:U(`cancel`,e),U(`close`,e),o=i;break;case`iframe`:case`object`:case`embed`:U(`load`,e),o=i;break;case`video`:case`audio`:for(o=0;o<ni.length;o++)U(ni[o],e);o=i;break;case`source`:U(`error`,e),o=i;break;case`img`:case`image`:case`link`:U(`error`,e),U(`load`,e),o=i;break;case`details`:U(`toggle`,e),o=i;break;case`input`:be(e,i),o=ye(e,i),U(`invalid`,e);break;case`option`:o=i;break;case`select`:e._wrapperState={wasMultiple:!!i.multiple},o=M({},i,{value:void 0}),U(`invalid`,e);break;case`textarea`:Oe(e,i),o=De(e,i),U(`invalid`,e);break;default:o=i}for(s in Ve(n,o),l=o,l)if(l.hasOwnProperty(s)){var u=l[s];s===`style`?ze(e,u):s===`dangerouslySetInnerHTML`?(u=u?u.__html:void 0,u!=null&&Pe(e,u)):s===`children`?typeof u==`string`?(n!==`textarea`||u!==``)&&Fe(e,u):typeof u==`number`&&Fe(e,``+u):s!==`suppressContentEditableWarning`&&s!==`suppressHydrationWarning`&&s!==`autoFocus`&&(a.hasOwnProperty(s)?u!=null&&s===`onScroll`&&U(`scroll`,e):u!=null&&S(e,s,u,c))}switch(n){case`input`:ge(e),Ce(e,i,!1);break;case`textarea`:ge(e),Ae(e);break;case`option`:i.value!=null&&e.setAttribute(`value`,``+N(i.value));break;case`select`:e.multiple=!!i.multiple,s=i.value,s==null?i.defaultValue!=null&&Ee(e,!!i.multiple,i.defaultValue,!0):Ee(e,!!i.multiple,s,!1);break;default:typeof o.onClick==`function`&&(e.onclick=yi)}switch(n){case`button`:case`input`:case`select`:case`textarea`:i=!!i.autoFocus;break a;case`img`:i=!0;break a;default:i=!1}}i&&(t.flags|=4)}t.ref!==null&&(t.flags|=512,t.flags|=2097152)}return sc(t),null;case 6:if(e&&t.stateNode!=null)ac(e,t,e.memoizedProps,i);else{if(typeof i!=`string`&&t.stateNode===null)throw Error(r(166));if(n=fo(uo.current),fo(co.current),ka(t)){if(i=t.stateNode,n=t.memoizedProps,i[Mi]=t,(s=i.nodeValue!==n)&&(e=xa,e!==null))switch(e.tag){case 3:vi(i.nodeValue,n,(e.mode&1)!=0);break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&vi(i.nodeValue,n,(e.mode&1)!=0)}s&&(t.flags|=4)}else i=(n.nodeType===9?n:n.ownerDocument).createTextNode(i),i[Mi]=t,t.stateNode=i}return sc(t),null;case 13:if(W(J),i=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(K&&Sa!==null&&t.mode&1&&!(t.flags&128))Aa(),q(),t.flags|=98560,s=!1;else if(s=ka(t),i!==null&&i.dehydrated!==null){if(e===null){if(!s)throw Error(r(318));if(s=t.memoizedState,s=s===null?null:s.dehydrated,!s)throw Error(r(317));s[Mi]=t}else q(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;sc(t),s=!1}else Ca!==null&&(yl(Ca),Ca=null),s=!0;if(!s)return t.flags&65536?t:null}return t.flags&128?(t.lanes=n,t):(i=i!==null,i!==(e!==null&&e.memoizedState!==null)&&i&&(t.child.flags|=8192,t.mode&1&&(e===null||J.current&1?qc===0&&(qc=3):kl())),t.updateQueue!==null&&(t.flags|=4),sc(t),null);case 4:return mo(),e===null&&ci(t.stateNode.containerInfo),sc(t),null;case 10:return Wa(t.type._context),sc(t),null;case 17:return Xi(t.type)&&Zi(),sc(t),null;case 19:if(W(J),s=t.memoizedState,s===null)return sc(t),null;if(i=(t.flags&128)!=0,c=s.rendering,c===null)if(i)oc(s,!1);else{if(qc!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(c=_o(e),c!==null){for(t.flags|=128,oc(s,!1),i=c.updateQueue,i!==null&&(t.updateQueue=i,t.flags|=4),t.subtreeFlags=0,i=n,n=t.child;n!==null;)s=n,e=i,s.flags&=14680066,c=s.alternate,c===null?(s.childLanes=0,s.lanes=e,s.child=null,s.subtreeFlags=0,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=c.childLanes,s.lanes=c.lanes,s.child=c.child,s.subtreeFlags=0,s.deletions=null,s.memoizedProps=c.memoizedProps,s.memoizedState=c.memoizedState,s.updateQueue=c.updateQueue,s.type=c.type,e=c.dependencies,s.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return G(J,J.current&1|2),t.child}e=e.sibling}s.tail!==null&&F()>tl&&(t.flags|=128,i=!0,oc(s,!1),t.lanes=4194304)}else{if(!i)if(e=_o(c),e!==null){if(t.flags|=128,i=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),oc(s,!0),s.tail===null&&s.tailMode===`hidden`&&!c.alternate&&!K)return sc(t),null}else 2*F()-s.renderingStartTime>tl&&n!==1073741824&&(t.flags|=128,i=!0,oc(s,!1),t.lanes=4194304);s.isBackwards?(c.sibling=t.child,t.child=c):(n=s.last,n===null?t.child=c:n.sibling=c,s.last=c)}return s.tail===null?(sc(t),null):(t=s.tail,s.rendering=t,s.tail=t.sibling,s.renderingStartTime=F(),t.sibling=null,n=J.current,G(J,i?n&1|2:n&1),t);case 22:case 23:return Tl(),i=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==i&&(t.flags|=8192),i&&t.mode&1?Gc&1073741824&&(sc(t),t.subtreeFlags&6&&(t.flags|=8192)):sc(t),null;case 24:return null;case 25:return null}throw Error(r(156,t.tag))}function lc(e,t){switch(ba(t),t.tag){case 1:return Xi(t.type)&&Zi(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return mo(),W(qi),W(Ki),yo(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return go(t),null;case 13:if(W(J),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(r(340));q()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return W(J),null;case 4:return mo(),null;case 10:return Wa(t.type._context),null;case 22:case 23:return Tl(),null;case 24:return null;default:return null}}var uc=!1,dc=!1,fc=typeof WeakSet==`function`?WeakSet:Set,Z=null;function pc(e,t){var n=e.ref;if(n!==null)if(typeof n==`function`)try{n(null)}catch(n){$(e,t,n)}else n.current=null}function mc(e,t,n){try{n()}catch(n){$(e,t,n)}}var hc=!1;function gc(e,t){if(bi=mn,e=Nr(),Pr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var i=n.getSelection&&n.getSelection();if(i&&i.rangeCount!==0){n=i.anchorNode;var a=i.anchorOffset,o=i.focusNode;i=i.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||i!==0&&f.nodeType!==3||(l=s+i),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===i&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(xi={focusedElem:e,selectionRange:n},mn=!1,Z=t;Z!==null;)if(t=Z,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,Z=e;else for(;Z!==null;){t=Z;try{var h=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(h!==null){var g=h.memoizedProps,_=h.memoizedState,v=t.stateNode;v.__reactInternalSnapshotBeforeUpdate=v.getSnapshotBeforeUpdate(t.elementType===t.type?g:gs(t.type,g),_)}break;case 3:var y=t.stateNode.containerInfo;y.nodeType===1?y.textContent=``:y.nodeType===9&&y.documentElement&&y.removeChild(y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(r(163))}}catch(e){$(t,t.return,e)}if(e=t.sibling,e!==null){e.return=t.return,Z=e;break}Z=t.return}return h=hc,hc=!1,h}function _c(e,t,n){var r=t.updateQueue;if(r=r===null?null:r.lastEffect,r!==null){var i=r=r.next;do{if((i.tag&e)===e){var a=i.destroy;i.destroy=void 0,a!==void 0&&mc(t,n,a)}i=i.next}while(i!==r)}}function vc(e,t){if(t=t.updateQueue,t=t===null?null:t.lastEffect,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function yc(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t==`function`?t(e):t.current=e}}function bc(e){var t=e.alternate;t!==null&&(e.alternate=null,bc(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Mi],delete t[Ni],delete t[Fi],delete t[Ii],delete t[Li])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function xc(e){return e.tag===5||e.tag===3||e.tag===4}function Sc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||xc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Cc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=yi));else if(r!==4&&(e=e.child,e!==null))for(Cc(e,t,n),e=e.sibling;e!==null;)Cc(e,t,n),e=e.sibling}function wc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(wc(e,t,n),e=e.sibling;e!==null;)wc(e,t,n),e=e.sibling}var Tc=null,Ec=!1;function Dc(e,t,n){for(n=n.child;n!==null;)Oc(e,t,n),n=n.sibling}function Oc(e,t,n){if(Dt&&typeof Dt.onCommitFiberUnmount==`function`)try{Dt.onCommitFiberUnmount(Et,n)}catch{}switch(n.tag){case 5:dc||pc(n,t);case 6:var r=Tc,i=Ec;Tc=null,Dc(e,t,n),Tc=r,Ec=i,Tc!==null&&(Ec?(e=Tc,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Tc.removeChild(n.stateNode));break;case 18:Tc!==null&&(Ec?(e=Tc,n=n.stateNode,e.nodeType===8?Oi(e.parentNode,n):e.nodeType===1&&Oi(e,n),fn(e)):Oi(Tc,n.stateNode));break;case 4:r=Tc,i=Ec,Tc=n.stateNode.containerInfo,Ec=!0,Dc(e,t,n),Tc=r,Ec=i;break;case 0:case 11:case 14:case 15:if(!dc&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var a=i,o=a.destroy;a=a.tag,o!==void 0&&(a&2||a&4)&&mc(n,t,o),i=i.next}while(i!==r)}Dc(e,t,n);break;case 1:if(!dc&&(pc(n,t),r=n.stateNode,typeof r.componentWillUnmount==`function`))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(e){$(n,t,e)}Dc(e,t,n);break;case 21:Dc(e,t,n);break;case 22:n.mode&1?(dc=(r=dc)||n.memoizedState!==null,Dc(e,t,n),dc=r):Dc(e,t,n);break;default:Dc(e,t,n)}}function kc(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new fc),t.forEach(function(t){var r=Hl.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))})}}function Ac(e,t){var n=t.deletions;if(n!==null)for(var i=0;i<n.length;i++){var a=n[i];try{var o=e,s=t,c=s;a:for(;c!==null;){switch(c.tag){case 5:Tc=c.stateNode,Ec=!1;break a;case 3:Tc=c.stateNode.containerInfo,Ec=!0;break a;case 4:Tc=c.stateNode.containerInfo,Ec=!0;break a}c=c.return}if(Tc===null)throw Error(r(160));Oc(o,s,a),Tc=null,Ec=!1;var l=a.alternate;l!==null&&(l.return=null),a.return=null}catch(e){$(a,t,e)}}if(t.subtreeFlags&12854)for(t=t.child;t!==null;)jc(t,e),t=t.sibling}function jc(e,t){var n=e.alternate,i=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(Ac(t,e),Mc(e),i&4){try{_c(3,e,e.return),vc(3,e)}catch(t){$(e,e.return,t)}try{_c(5,e,e.return)}catch(t){$(e,e.return,t)}}break;case 1:Ac(t,e),Mc(e),i&512&&n!==null&&pc(n,n.return);break;case 5:if(Ac(t,e),Mc(e),i&512&&n!==null&&pc(n,n.return),e.flags&32){var a=e.stateNode;try{Fe(a,``)}catch(t){$(e,e.return,t)}}if(i&4&&(a=e.stateNode,a!=null)){var o=e.memoizedProps,s=n===null?o:n.memoizedProps,c=e.type,l=e.updateQueue;if(e.updateQueue=null,l!==null)try{c===`input`&&o.type===`radio`&&o.name!=null&&xe(a,o),He(c,s);var u=He(c,o);for(s=0;s<l.length;s+=2){var d=l[s],f=l[s+1];d===`style`?ze(a,f):d===`dangerouslySetInnerHTML`?Pe(a,f):d===`children`?Fe(a,f):S(a,d,f,u)}switch(c){case`input`:Se(a,o);break;case`textarea`:ke(a,o);break;case`select`:var p=a._wrapperState.wasMultiple;a._wrapperState.wasMultiple=!!o.multiple;var m=o.value;m==null?p!==!!o.multiple&&(o.defaultValue==null?Ee(a,!!o.multiple,o.multiple?[]:``,!1):Ee(a,!!o.multiple,o.defaultValue,!0)):Ee(a,!!o.multiple,m,!1)}a[Ni]=o}catch(t){$(e,e.return,t)}}break;case 6:if(Ac(t,e),Mc(e),i&4){if(e.stateNode===null)throw Error(r(162));a=e.stateNode,o=e.memoizedProps;try{a.nodeValue=o}catch(t){$(e,e.return,t)}}break;case 3:if(Ac(t,e),Mc(e),i&4&&n!==null&&n.memoizedState.isDehydrated)try{fn(t.containerInfo)}catch(t){$(e,e.return,t)}break;case 4:Ac(t,e),Mc(e);break;case 13:Ac(t,e),Mc(e),a=e.child,a.flags&8192&&(o=a.memoizedState!==null,a.stateNode.isHidden=o,!o||a.alternate!==null&&a.alternate.memoizedState!==null||(el=F())),i&4&&kc(e);break;case 22:if(d=n!==null&&n.memoizedState!==null,e.mode&1?(dc=(u=dc)||d,Ac(t,e),dc=u):Ac(t,e),Mc(e),i&8192){if(u=e.memoizedState!==null,(e.stateNode.isHidden=u)&&!d&&e.mode&1)for(Z=e,d=e.child;d!==null;){for(f=Z=d;Z!==null;){switch(p=Z,m=p.child,p.tag){case 0:case 11:case 14:case 15:_c(4,p,p.return);break;case 1:pc(p,p.return);var h=p.stateNode;if(typeof h.componentWillUnmount==`function`){i=p,n=p.return;try{t=i,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(e){$(i,n,e)}}break;case 5:pc(p,p.return);break;case 22:if(p.memoizedState!==null){Ic(f);continue}}m===null?Ic(f):(m.return=p,Z=m)}d=d.sibling}a:for(d=null,f=e;;){if(f.tag===5){if(d===null){d=f;try{a=f.stateNode,u?(o=a.style,typeof o.setProperty==`function`?o.setProperty(`display`,`none`,`important`):o.display=`none`):(c=f.stateNode,l=f.memoizedProps.style,s=l!=null&&l.hasOwnProperty(`display`)?l.display:null,c.style.display=Re(`display`,s))}catch(t){$(e,e.return,t)}}}else if(f.tag===6){if(d===null)try{f.stateNode.nodeValue=u?``:f.memoizedProps}catch(t){$(e,e.return,t)}}else if((f.tag!==22&&f.tag!==23||f.memoizedState===null||f===e)&&f.child!==null){f.child.return=f,f=f.child;continue}if(f===e)break a;for(;f.sibling===null;){if(f.return===null||f.return===e)break a;d===f&&(d=null),f=f.return}d===f&&(d=null),f.sibling.return=f.return,f=f.sibling}}break;case 19:Ac(t,e),Mc(e),i&4&&kc(e);break;case 21:break;default:Ac(t,e),Mc(e)}}function Mc(e){var t=e.flags;if(t&2){try{a:{for(var n=e.return;n!==null;){if(xc(n)){var i=n;break a}n=n.return}throw Error(r(160))}switch(i.tag){case 5:var a=i.stateNode;i.flags&32&&(Fe(a,``),i.flags&=-33),wc(e,Sc(e),a);break;case 3:case 4:var o=i.stateNode.containerInfo;Cc(e,Sc(e),o);break;default:throw Error(r(161))}}catch(t){$(e,e.return,t)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function Nc(e,t,n){Z=e,Pc(e,t,n)}function Pc(e,t,n){for(var r=(e.mode&1)!=0;Z!==null;){var i=Z,a=i.child;if(i.tag===22&&r){var o=i.memoizedState!==null||uc;if(!o){var s=i.alternate,c=s!==null&&s.memoizedState!==null||dc;s=uc;var l=dc;if(uc=o,(dc=c)&&!l)for(Z=i;Z!==null;)o=Z,c=o.child,o.tag===22&&o.memoizedState!==null||c===null?Lc(i):(c.return=o,Z=c);for(;a!==null;)Z=a,Pc(a,t,n),a=a.sibling;Z=i,uc=s,dc=l}Fc(e,t,n)}else i.subtreeFlags&8772&&a!==null?(a.return=i,Z=a):Fc(e,t,n)}}function Fc(e){for(;Z!==null;){var t=Z;if(t.flags&8772){var n=t.alternate;try{if(t.flags&8772)switch(t.tag){case 0:case 11:case 15:dc||vc(5,t);break;case 1:var i=t.stateNode;if(t.flags&4&&!dc)if(n===null)i.componentDidMount();else{var a=t.elementType===t.type?n.memoizedProps:gs(t.type,n.memoizedProps);i.componentDidUpdate(a,n.memoizedState,i.__reactInternalSnapshotBeforeUpdate)}var o=t.updateQueue;o!==null&&oo(t,o,i);break;case 3:var s=t.updateQueue;if(s!==null){if(n=null,t.child!==null)switch(t.child.tag){case 5:n=t.child.stateNode;break;case 1:n=t.child.stateNode}oo(t,s,n)}break;case 5:var c=t.stateNode;if(n===null&&t.flags&4){n=c;var l=t.memoizedProps;switch(t.type){case`button`:case`input`:case`select`:case`textarea`:l.autoFocus&&n.focus();break;case`img`:l.src&&(n.src=l.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(t.memoizedState===null){var u=t.alternate;if(u!==null){var d=u.memoizedState;if(d!==null){var f=d.dehydrated;f!==null&&fn(f)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(r(163))}dc||t.flags&512&&yc(t)}catch(e){$(t,t.return,e)}}if(t===e){Z=null;break}if(n=t.sibling,n!==null){n.return=t.return,Z=n;break}Z=t.return}}function Ic(e){for(;Z!==null;){var t=Z;if(t===e){Z=null;break}var n=t.sibling;if(n!==null){n.return=t.return,Z=n;break}Z=t.return}}function Lc(e){for(;Z!==null;){var t=Z;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{vc(4,t)}catch(e){$(t,n,e)}break;case 1:var r=t.stateNode;if(typeof r.componentDidMount==`function`){var i=t.return;try{r.componentDidMount()}catch(e){$(t,i,e)}}var a=t.return;try{yc(t)}catch(e){$(t,a,e)}break;case 5:var o=t.return;try{yc(t)}catch(e){$(t,o,e)}}}catch(e){$(t,t.return,e)}if(t===e){Z=null;break}var s=t.sibling;if(s!==null){s.return=t.return,Z=s;break}Z=t.return}}var Rc=Math.ceil,zc=C.ReactCurrentDispatcher,Bc=C.ReactCurrentOwner,Vc=C.ReactCurrentBatchConfig,Q=0,Hc=null,Uc=null,Wc=0,Gc=0,Kc=Wi(0),qc=0,Jc=null,Yc=0,Xc=0,Zc=0,Qc=null,$c=null,el=0,tl=1/0,nl=null,rl=!1,il=null,al=null,ol=!1,sl=null,cl=0,ll=0,ul=null,dl=-1,fl=0;function pl(){return Q&6?F():dl===-1?dl=F():dl}function ml(e){return e.mode&1?Q&2&&Wc!==0?Wc&-Wc:Ma.transition===null?(e=R,e===0?(e=window.event,e=e===void 0?16:bn(e.type),e):e):(fl===0&&(fl=zt()),fl):1}function hl(e,t,n,i){if(50<ll)throw ll=0,ul=null,Error(r(185));Vt(e,n,i),(!(Q&2)||e!==Hc)&&(e===Hc&&(!(Q&2)&&(Xc|=n),qc===4&&xl(e,Wc)),gl(e,i),n===1&&Q===0&&!(t.mode&1)&&(tl=F()+500,ra&&sa()))}function gl(e,t){var n=e.callbackNode;Lt(e,t);var r=Ft(e,e===Hc?Wc:0);if(r===0)n!==null&&vt(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(n!=null&&vt(n),t===1)e.tag===0?oa(Sl.bind(null,e)):aa(Sl.bind(null,e)),Ei(function(){!(Q&6)&&sa()}),n=null;else{switch(Wt(r)){case 1:n=I;break;case 4:n=St;break;case 16:n=Ct;break;case 536870912:n=Tt;break;default:n=Ct}n=Wl(n,_l.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function _l(e,t){if(dl=-1,fl=0,Q&6)throw Error(r(327));var n=e.callbackNode;if(Ll()&&e.callbackNode!==n)return null;var i=Ft(e,e===Hc?Wc:0);if(i===0)return null;if(i&30||(i&e.expiredLanes)!==0||t)t=Al(e,i);else{t=i;var a=Q;Q|=2;var o=Ol();(Hc!==e||Wc!==t)&&(nl=null,tl=F()+500,El(e,t));do try{Ml();break}catch(t){Dl(e,t)}while(1);Ua(),zc.current=o,Q=a,Uc===null?(Hc=null,Wc=0,t=qc):t=0}if(t!==0){if(t===2&&(a=Rt(e),a!==0&&(i=a,t=vl(e,a))),t===1)throw n=Jc,El(e,0),xl(e,i),gl(e,F()),n;if(t===6)xl(e,i);else{if(a=e.current.alternate,!(i&30)&&!bl(a)&&(t=Al(e,i),t===2&&(o=Rt(e),o!==0&&(i=o,t=vl(e,o))),t===1))throw n=Jc,El(e,0),xl(e,i),gl(e,F()),n;switch(e.finishedWork=a,e.finishedLanes=i,t){case 0:case 1:throw Error(r(345));case 2:Fl(e,$c,nl);break;case 3:if(xl(e,i),(i&130023424)===i&&(t=el+500-F(),10<t)){if(Ft(e,0)!==0)break;if(a=e.suspendedLanes,(a&i)!==i){pl(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=Ci(Fl.bind(null,e,$c,nl),t);break}Fl(e,$c,nl);break;case 4:if(xl(e,i),(i&4194240)===i)break;for(t=e.eventTimes,a=-1;0<i;){var s=31-kt(i);o=1<<s,s=t[s],s>a&&(a=s),i&=~o}if(i=a,i=F()-i,i=(120>i?120:480>i?480:1080>i?1080:1920>i?1920:3e3>i?3e3:4320>i?4320:1960*Rc(i/1960))-i,10<i){e.timeoutHandle=Ci(Fl.bind(null,e,$c,nl),i);break}Fl(e,$c,nl);break;case 5:Fl(e,$c,nl);break;default:throw Error(r(329))}}}return gl(e,F()),e.callbackNode===n?_l.bind(null,e):null}function vl(e,t){var n=Qc;return e.current.memoizedState.isDehydrated&&(El(e,t).flags|=256),e=Al(e,t),e!==2&&(t=$c,$c=n,t!==null&&yl(t)),e}function yl(e){$c===null?$c=e:$c.push.apply($c,e)}function bl(e){for(var t=e;;){if(t.flags&16384){var n=t.updateQueue;if(n!==null&&(n=n.stores,n!==null))for(var r=0;r<n.length;r++){var i=n[r],a=i.getSnapshot;i=i.value;try{if(!Or(a(),i))return!1}catch{return!1}}}if(n=t.child,t.subtreeFlags&16384&&n!==null)n.return=t,t=n;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function xl(e,t){for(t&=~Zc,t&=~Xc,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-kt(t),r=1<<n;e[n]=-1,t&=~r}}function Sl(e){if(Q&6)throw Error(r(327));Ll();var t=Ft(e,0);if(!(t&1))return gl(e,F()),null;var n=Al(e,t);if(e.tag!==0&&n===2){var i=Rt(e);i!==0&&(t=i,n=vl(e,i))}if(n===1)throw n=Jc,El(e,0),xl(e,t),gl(e,F()),n;if(n===6)throw Error(r(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,Fl(e,$c,nl),gl(e,F()),null}function Cl(e,t){var n=Q;Q|=1;try{return e(t)}finally{Q=n,Q===0&&(tl=F()+500,ra&&sa())}}function wl(e){sl!==null&&sl.tag===0&&!(Q&6)&&Ll();var t=Q;Q|=1;var n=Vc.transition,r=R;try{if(Vc.transition=null,R=1,e)return e()}finally{R=r,Vc.transition=n,Q=t,!(Q&6)&&sa()}}function Tl(){Gc=Kc.current,W(Kc)}function El(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(n!==-1&&(e.timeoutHandle=-1,wi(n)),Uc!==null)for(n=Uc.return;n!==null;){var r=n;switch(ba(r),r.tag){case 1:r=r.type.childContextTypes,r!=null&&Zi();break;case 3:mo(),W(qi),W(Ki),yo();break;case 5:go(r);break;case 4:mo();break;case 13:W(J);break;case 19:W(J);break;case 10:Wa(r.type._context);break;case 22:case 23:Tl()}n=n.return}if(Hc=e,Uc=e=Yl(e.current,null),Wc=Gc=t,qc=0,Jc=null,Zc=Xc=Yc=0,$c=Qc=null,Ja!==null){for(t=0;t<Ja.length;t++)if(n=Ja[t],r=n.interleaved,r!==null){n.interleaved=null;var i=r.next,a=n.pending;if(a!==null){var o=a.next;a.next=i,r.next=o}n.pending=r}Ja=null}return e}function Dl(e,t){do{var n=Uc;try{if(Ua(),bo.current=fs,wo){for(var i=Y.memoizedState;i!==null;){var a=i.queue;a!==null&&(a.pending=null),i=i.next}wo=!1}if(So=0,Co=X=Y=null,To=!1,Eo=0,Bc.current=null,n===null||n.return===null){qc=1,Jc=t,Uc=null;break}a:{var o=e,s=n.return,c=n,l=t;if(t=Wc,c.flags|=32768,typeof l==`object`&&l&&typeof l.then==`function`){var u=l,d=c,f=d.tag;if(!(d.mode&1)&&(f===0||f===11||f===15)){var p=d.alternate;p?(d.updateQueue=p.updateQueue,d.memoizedState=p.memoizedState,d.lanes=p.lanes):(d.updateQueue=null,d.memoizedState=null)}var m=As(s);if(m!==null){m.flags&=-257,js(m,s,c,o,t),m.mode&1&&ks(o,u,t),t=m,l=u;var h=t.updateQueue;if(h===null){var g=new Set;g.add(l),t.updateQueue=g}else h.add(l);break a}else{if(!(t&1)){ks(o,u,t),kl();break a}l=Error(r(426))}}else if(K&&c.mode&1){var _=As(s);if(_!==null){!(_.flags&65536)&&(_.flags|=256),js(_,s,c,o,t),ja(Cs(l,c));break a}}o=l=Cs(l,c),qc!==4&&(qc=2),Qc===null?Qc=[o]:Qc.push(o),o=s;do{switch(o.tag){case 3:o.flags|=65536,t&=-t,o.lanes|=t;var v=Ds(o,l,t);io(o,v);break a;case 1:c=l;var y=o.type,b=o.stateNode;if(!(o.flags&128)&&(typeof y.getDerivedStateFromError==`function`||b!==null&&typeof b.componentDidCatch==`function`&&(al===null||!al.has(b)))){o.flags|=65536,t&=-t,o.lanes|=t;var x=Os(o,c,t);io(o,x);break a}}o=o.return}while(o!==null)}Pl(n)}catch(e){t=e,Uc===n&&n!==null&&(Uc=n=n.return);continue}break}while(1)}function Ol(){var e=zc.current;return zc.current=fs,e===null?fs:e}function kl(){(qc===0||qc===3||qc===2)&&(qc=4),Hc===null||!(Yc&268435455)&&!(Xc&268435455)||xl(Hc,Wc)}function Al(e,t){var n=Q;Q|=2;var i=Ol();(Hc!==e||Wc!==t)&&(nl=null,El(e,t));do try{jl();break}catch(t){Dl(e,t)}while(1);if(Ua(),Q=n,zc.current=i,Uc!==null)throw Error(r(261));return Hc=null,Wc=0,qc}function jl(){for(;Uc!==null;)Nl(Uc)}function Ml(){for(;Uc!==null&&!yt();)Nl(Uc)}function Nl(e){var t=Ul(e.alternate,e,Gc);e.memoizedProps=e.pendingProps,t===null?Pl(e):Uc=t,Bc.current=null}function Pl(e){var t=e;do{var n=t.alternate;if(e=t.return,t.flags&32768){if(n=lc(n,t),n!==null){n.flags&=32767,Uc=n;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{qc=6,Uc=null;return}}else if(n=cc(n,t,Gc),n!==null){Uc=n;return}if(t=t.sibling,t!==null){Uc=t;return}Uc=t=e}while(t!==null);qc===0&&(qc=5)}function Fl(e,t,n){var r=R,i=Vc.transition;try{Vc.transition=null,R=1,Il(e,t,n,r)}finally{Vc.transition=i,R=r}return null}function Il(e,t,n,i){do Ll();while(sl!==null);if(Q&6)throw Error(r(327));n=e.finishedWork;var a=e.finishedLanes;if(n===null)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(r(177));e.callbackNode=null,e.callbackPriority=0;var o=n.lanes|n.childLanes;if(Ht(e,o),e===Hc&&(Uc=Hc=null,Wc=0),!(n.subtreeFlags&2064)&&!(n.flags&2064)||ol||(ol=!0,Wl(Ct,function(){return Ll(),null})),o=(n.flags&15990)!=0,n.subtreeFlags&15990||o){o=Vc.transition,Vc.transition=null;var s=R;R=1;var c=Q;Q|=4,Bc.current=null,gc(e,n),jc(n,e),Fr(xi),mn=!!bi,xi=bi=null,e.current=n,Nc(n,e,a),bt(),Q=c,R=s,Vc.transition=o}else e.current=n;if(ol&&(ol=!1,sl=e,cl=a),o=e.pendingLanes,o===0&&(al=null),Ot(n.stateNode,i),gl(e,F()),t!==null)for(i=e.onRecoverableError,n=0;n<t.length;n++)a=t[n],i(a.value,{componentStack:a.stack,digest:a.digest});if(rl)throw rl=!1,e=il,il=null,e;return cl&1&&e.tag!==0&&Ll(),o=e.pendingLanes,o&1?e===ul?ll++:(ll=0,ul=e):ll=0,sa(),null}function Ll(){if(sl!==null){var e=Wt(cl),t=Vc.transition,n=R;try{if(Vc.transition=null,R=16>e?16:e,sl===null)var i=!1;else{if(e=sl,sl=null,cl=0,Q&6)throw Error(r(331));var a=Q;for(Q|=4,Z=e.current;Z!==null;){var o=Z,s=o.child;if(Z.flags&16){var c=o.deletions;if(c!==null){for(var l=0;l<c.length;l++){var u=c[l];for(Z=u;Z!==null;){var d=Z;switch(d.tag){case 0:case 11:case 15:_c(8,d,o)}var f=d.child;if(f!==null)f.return=d,Z=f;else for(;Z!==null;){d=Z;var p=d.sibling,m=d.return;if(bc(d),d===u){Z=null;break}if(p!==null){p.return=m,Z=p;break}Z=m}}}var h=o.alternate;if(h!==null){var g=h.child;if(g!==null){h.child=null;do{var _=g.sibling;g.sibling=null,g=_}while(g!==null)}}Z=o}}if(o.subtreeFlags&2064&&s!==null)s.return=o,Z=s;else b:for(;Z!==null;){if(o=Z,o.flags&2048)switch(o.tag){case 0:case 11:case 15:_c(9,o,o.return)}var v=o.sibling;if(v!==null){v.return=o.return,Z=v;break b}Z=o.return}}var y=e.current;for(Z=y;Z!==null;){s=Z;var b=s.child;if(s.subtreeFlags&2064&&b!==null)b.return=s,Z=b;else b:for(s=y;Z!==null;){if(c=Z,c.flags&2048)try{switch(c.tag){case 0:case 11:case 15:vc(9,c)}}catch(e){$(c,c.return,e)}if(c===s){Z=null;break b}var x=c.sibling;if(x!==null){x.return=c.return,Z=x;break b}Z=c.return}}if(Q=a,sa(),Dt&&typeof Dt.onPostCommitFiberRoot==`function`)try{Dt.onPostCommitFiberRoot(Et,e)}catch{}i=!0}return i}finally{R=n,Vc.transition=t}}return!1}function Rl(e,t,n){t=Cs(n,t),t=Ds(e,t,1),e=no(e,t,1),t=pl(),e!==null&&(Vt(e,1,t),gl(e,t))}function $(e,t,n){if(e.tag===3)Rl(e,e,n);else for(;t!==null;){if(t.tag===3){Rl(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(al===null||!al.has(r))){e=Cs(n,e),e=Os(t,e,1),t=no(t,e,1),e=pl(),t!==null&&(Vt(t,1,e),gl(t,e));break}}t=t.return}}function zl(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),t=pl(),e.pingedLanes|=e.suspendedLanes&n,Hc===e&&(Wc&n)===n&&(qc===4||qc===3&&(Wc&130023424)===Wc&&500>F()-el?El(e,0):Zc|=n),gl(e,t)}function Bl(e,t){t===0&&(e.mode&1?(t=L,L<<=1,!(L&130023424)&&(L=4194304)):t=1);var n=pl();e=Za(e,t),e!==null&&(Vt(e,t,n),gl(e,n))}function Vl(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Bl(e,n)}function Hl(e,t){var n=0;switch(e.tag){case 13:var i=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:i=e.stateNode;break;default:throw Error(r(314))}i!==null&&i.delete(t),Bl(e,n)}var Ul=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||qi.current)Ns=!0;else{if((e.lanes&n)===0&&!(t.flags&128))return Ns=!1,nc(e,t,n);Ns=!!(e.flags&131072)}else Ns=!1,K&&t.flags&1048576&&va(t,da,t.index);switch(t.lanes=0,t.tag){case 2:var i=t.type;ec(e,t),e=t.pendingProps;var a=Yi(t,Ki.current);Ka(t,n),a=Ao(null,t,i,e,a,n);var o=jo();return t.flags|=1,typeof a==`object`&&a&&typeof a.render==`function`&&a.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Xi(i)?(o=!0,ea(t)):o=!1,t.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,$a(t),a.updater=vs,t.stateNode=a,a._reactInternals=t,Ss(t,i,e,n),t=Hs(null,t,i,!0,o,n)):(t.tag=0,K&&o&&ya(t),Ps(null,t,a,n),t=t.child),t;case 16:i=t.elementType;a:{switch(ec(e,t),e=t.pendingProps,a=i._init,i=a(i._payload),t.type=i,a=t.tag=Jl(i),e=gs(i,e),a){case 0:t=Bs(null,t,i,e,n);break a;case 1:t=Vs(null,t,i,e,n);break a;case 11:t=Fs(null,t,i,e,n);break a;case 14:t=Is(null,t,i,gs(i.type,e),n);break a}throw Error(r(306,i,``))}return t;case 0:return i=t.type,a=t.pendingProps,a=t.elementType===i?a:gs(i,a),Bs(e,t,i,a,n);case 1:return i=t.type,a=t.pendingProps,a=t.elementType===i?a:gs(i,a),Vs(e,t,i,a,n);case 3:a:{if(Us(t),e===null)throw Error(r(387));i=t.pendingProps,o=t.memoizedState,a=o.element,eo(e,t),ao(t,i,null,n);var s=t.memoizedState;if(i=s.element,o.isDehydrated)if(o={element:i,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){a=Cs(Error(r(423)),t),t=Ws(e,t,i,n,a);break a}else if(i!==a){a=Cs(Error(r(424)),t),t=Ws(e,t,i,n,a);break a}else for(Sa=ki(t.stateNode.containerInfo.firstChild),xa=t,K=!0,Ca=null,n=Ra(t,null,i,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(q(),i===a){t=tc(e,t,n);break a}Ps(e,t,i,n)}t=t.child}return t;case 5:return ho(t),e===null&&Da(t),i=t.type,a=t.pendingProps,o=e===null?null:e.memoizedProps,s=a.children,Si(i,a)?s=null:o!==null&&Si(i,o)&&(t.flags|=32),zs(e,t),Ps(e,t,s,n),t.child;case 6:return e===null&&Da(t),null;case 13:return qs(e,t,n);case 4:return po(t,t.stateNode.containerInfo),i=t.pendingProps,e===null?t.child=La(t,null,i,n):Ps(e,t,i,n),t.child;case 11:return i=t.type,a=t.pendingProps,a=t.elementType===i?a:gs(i,a),Fs(e,t,i,a,n);case 7:return Ps(e,t,t.pendingProps,n),t.child;case 8:return Ps(e,t,t.pendingProps.children,n),t.child;case 12:return Ps(e,t,t.pendingProps.children,n),t.child;case 10:a:{if(i=t.type._context,a=t.pendingProps,o=t.memoizedProps,s=a.value,G(za,i._currentValue),i._currentValue=s,o!==null)if(Or(o.value,s)){if(o.children===a.children&&!qi.current){t=tc(e,t,n);break a}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var c=o.dependencies;if(c!==null){s=o.child;for(var l=c.firstContext;l!==null;){if(l.context===i){if(o.tag===1){l=to(-1,n&-n),l.tag=2;var u=o.updateQueue;if(u!==null){u=u.shared;var d=u.pending;d===null?l.next=l:(l.next=d.next,d.next=l),u.pending=l}}o.lanes|=n,l=o.alternate,l!==null&&(l.lanes|=n),Ga(o.return,n,t),c.lanes|=n;break}l=l.next}}else if(o.tag===10)s=o.type===t.type?null:o.child;else if(o.tag===18){if(s=o.return,s===null)throw Error(r(341));s.lanes|=n,c=s.alternate,c!==null&&(c.lanes|=n),Ga(s,n,t),s=o.sibling}else s=o.child;if(s!==null)s.return=o;else for(s=o;s!==null;){if(s===t){s=null;break}if(o=s.sibling,o!==null){o.return=s.return,s=o;break}s=s.return}o=s}Ps(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,i=t.pendingProps.children,Ka(t,n),a=qa(a),i=i(a),t.flags|=1,Ps(e,t,i,n),t.child;case 14:return i=t.type,a=gs(i,t.pendingProps),a=gs(i.type,a),Is(e,t,i,a,n);case 15:return Ls(e,t,t.type,t.pendingProps,n);case 17:return i=t.type,a=t.pendingProps,a=t.elementType===i?a:gs(i,a),ec(e,t),t.tag=1,Xi(i)?(e=!0,ea(t)):e=!1,Ka(t,n),bs(t,i,a),Ss(t,i,a,n),Hs(null,t,i,!0,e,n);case 19:return $s(e,t,n);case 22:return Rs(e,t,n)}throw Error(r(156,t.tag))};function Wl(e,t){return _t(e,t)}function Gl(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Kl(e,t,n,r){return new Gl(e,t,n,r)}function ql(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Jl(e){if(typeof e==`function`)return+!!ql(e);if(e!=null){if(e=e.$$typeof,e===re)return 11;if(e===A)return 14}return 2}function Yl(e,t){var n=e.alternate;return n===null?(n=Kl(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Xl(e,t,n,i,a,o){var s=2;if(i=e,typeof e==`function`)ql(e)&&(s=1);else if(typeof e==`string`)s=5;else a:switch(e){case ee:return Zl(n.children,a,o,t);case E:s=8,a|=8;break;case te:return e=Kl(12,n,t,a|2),e.elementType=te,e.lanes=o,e;case O:return e=Kl(13,n,t,a),e.elementType=O,e.lanes=o,e;case k:return e=Kl(19,n,t,a),e.elementType=k,e.lanes=o,e;case ie:return Ql(n,a,o,t);default:if(typeof e==`object`&&e)switch(e.$$typeof){case D:s=10;break a;case ne:s=9;break a;case re:s=11;break a;case A:s=14;break a;case j:s=16,i=null;break a}throw Error(r(130,e==null?e:typeof e,``))}return t=Kl(s,n,t,a),t.elementType=e,t.type=i,t.lanes=o,t}function Zl(e,t,n,r){return e=Kl(7,e,r,t),e.lanes=n,e}function Ql(e,t,n,r){return e=Kl(22,e,r,t),e.elementType=ie,e.lanes=n,e.stateNode={isHidden:!1},e}function $l(e,t,n){return e=Kl(6,e,null,t),e.lanes=n,e}function eu(e,t,n){return t=Kl(4,e.children===null?[]:e.children,e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function tu(e,t,n,r,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Bt(0),this.expirationTimes=Bt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Bt(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function nu(e,t,n,r,i,a,o,s,c){return e=new tu(e,t,n,s,c),t===1?(t=1,!0===a&&(t|=8)):t=0,a=Kl(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},$a(a),e}function ru(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:T,key:r==null?null:``+r,children:e,containerInfo:t,implementation:n}}function iu(e){if(!e)return Gi;e=e._reactInternals;a:{if(dt(e)!==e||e.tag!==1)throw Error(r(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break a;case 1:if(Xi(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break a}}t=t.return}while(t!==null);throw Error(r(171))}if(e.tag===1){var n=e.type;if(Xi(n))return $i(e,n,t)}return t}function au(e,t,n,r,i,a,o,s,c){return e=nu(n,r,!0,e,i,a,o,s,c),e.context=iu(null),n=e.current,r=pl(),i=ml(n),a=to(r,i),a.callback=t??null,no(n,a,i),e.current.lanes=i,Vt(e,i,r),gl(e,r),e}function ou(e,t,n,r){var i=t.current,a=pl(),o=ml(i);return n=iu(n),t.context===null?t.context=n:t.pendingContext=n,t=to(a,o),t.payload={element:e},r=r===void 0?null:r,r!==null&&(t.callback=r),e=no(i,t,o),e!==null&&(hl(e,i,o,a),ro(e,i,o)),o}function su(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function cu(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function lu(e,t){cu(e,t),(e=e.alternate)&&cu(e,t)}function uu(){return null}var du=typeof reportError==`function`?reportError:function(e){console.error(e)};function fu(e){this._internalRoot=e}pu.prototype.render=fu.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(r(409));ou(e,t,null,null)},pu.prototype.unmount=fu.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;wl(function(){ou(null,e,null,null)}),t[Pi]=null}};function pu(e){this._internalRoot=e}pu.prototype.unstable_scheduleHydration=function(e){if(e){var t=Jt();e={blockedOn:null,target:e,priority:t};for(var n=0;n<rn.length&&t!==0&&t<rn[n].priority;n++);rn.splice(n,0,e),n===0&&B(e)}};function mu(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function hu(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==` react-mount-point-unstable `))}function gu(){}function _u(e,t,n,r,i){if(i){if(typeof r==`function`){var a=r;r=function(){var e=su(o);a.call(e)}}var o=au(t,r,e,0,null,!1,!1,``,gu);return e._reactRootContainer=o,e[Pi]=o.current,ci(e.nodeType===8?e.parentNode:e),wl(),o}for(;i=e.lastChild;)e.removeChild(i);if(typeof r==`function`){var s=r;r=function(){var e=su(c);s.call(e)}}var c=nu(e,0,!1,null,null,!1,!1,``,gu);return e._reactRootContainer=c,e[Pi]=c.current,ci(e.nodeType===8?e.parentNode:e),wl(function(){ou(t,c,n,r)}),c}function vu(e,t,n,r,i){var a=n._reactRootContainer;if(a){var o=a;if(typeof i==`function`){var s=i;i=function(){var e=su(o);s.call(e)}}ou(t,o,e,i)}else o=_u(n,t,e,i,r);return su(o)}Gt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=Pt(t.pendingLanes);n!==0&&(Ut(t,n|1),gl(t,F()),!(Q&6)&&(tl=F()+500,sa()))}break;case 13:wl(function(){var t=Za(e,1);t!==null&&hl(t,e,1,pl())}),lu(e,1)}},Kt=function(e){if(e.tag===13){var t=Za(e,134217728);t!==null&&hl(t,e,134217728,pl()),lu(e,134217728)}},qt=function(e){if(e.tag===13){var t=ml(e),n=Za(e,t);n!==null&&hl(n,e,t,pl()),lu(e,t)}},Jt=function(){return R},Yt=function(e,t){var n=R;try{return R=e,t()}finally{R=n}},We=function(e,t,n){switch(t){case`input`:if(Se(e,n),t=n.name,n.type===`radio`&&t!=null){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll(`input[name=`+JSON.stringify(``+t)+`][type="radio"]`),t=0;t<n.length;t++){var i=n[t];if(i!==e&&i.form===e.form){var a=Vi(i);if(!a)throw Error(r(90));_e(i),Se(i,a)}}}break;case`textarea`:ke(e,n);break;case`select`:t=n.value,t!=null&&Ee(e,!!n.multiple,t,!1)}},Xe=Cl,Ze=wl;var yu={usingClientEntryPoint:!1,Events:[zi,Bi,Vi,Je,Ye,Cl]},bu={findFiberByHostInstance:Ri,bundleType:0,version:`18.3.1`,rendererPackageName:`react-dom`},xu={bundleType:bu.bundleType,version:bu.version,rendererPackageName:bu.rendererPackageName,rendererConfig:bu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:C.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=ht(e),e===null?null:e.stateNode},findFiberByHostInstance:bu.findFiberByHostInstance||uu,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:`18.3.1-next-f1338f8080-20240426`};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`){var Su=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Su.isDisabled&&Su.supportsFiber)try{Et=Su.inject(xu),Dt=Su}catch{}}e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=yu,e.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!mu(t))throw Error(r(200));return ru(e,t,null,n)},e.createRoot=function(e,t){if(!mu(e))throw Error(r(299));var n=!1,i=``,a=du;return t!=null&&(!0===t.unstable_strictMode&&(n=!0),t.identifierPrefix!==void 0&&(i=t.identifierPrefix),t.onRecoverableError!==void 0&&(a=t.onRecoverableError)),t=nu(e,1,!1,null,null,n,!1,i,a),e[Pi]=t.current,ci(e.nodeType===8?e.parentNode:e),new fu(t)},e.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var t=e._reactInternals;if(t===void 0)throw typeof e.render==`function`?Error(r(188)):(e=Object.keys(e).join(`,`),Error(r(268,e)));return e=ht(t),e=e===null?null:e.stateNode,e},e.flushSync=function(e){return wl(e)},e.hydrate=function(e,t,n){if(!hu(t))throw Error(r(200));return vu(null,e,t,!0,n)},e.hydrateRoot=function(e,t,n){if(!mu(e))throw Error(r(405));var i=n!=null&&n.hydratedSources||null,a=!1,o=``,s=du;if(n!=null&&(!0===n.unstable_strictMode&&(a=!0),n.identifierPrefix!==void 0&&(o=n.identifierPrefix),n.onRecoverableError!==void 0&&(s=n.onRecoverableError)),t=au(t,null,e,1,n??null,a,!1,o,s),e[Pi]=t.current,ci(e),i)for(e=0;e<i.length;e++)n=i[e],a=n._getVersion,a=a(n._source),t.mutableSourceEagerHydrationData==null?t.mutableSourceEagerHydrationData=[n,a]:t.mutableSourceEagerHydrationData.push(n,a);return new pu(t)},e.render=function(e,t,n){if(!hu(t))throw Error(r(200));return vu(null,e,t,!1,n)},e.unmountComponentAtNode=function(e){if(!hu(e))throw Error(r(40));return e._reactRootContainer?(wl(function(){vu(null,null,e,!1,function(){e._reactRootContainer=null,e[Pi]=null})}),!0):!1},e.unstable_batchedUpdates=Cl,e.unstable_renderSubtreeIntoContainer=function(e,t,n,i){if(!hu(n))throw Error(r(200));if(e==null||e._reactInternals===void 0)throw Error(r(38));return vu(e,t,n,!1,i)},e.version=`18.3.1-next-f1338f8080-20240426`})),m=o(((e,t)=>{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)}}n(),t.exports=p()})),h=o((e=>{var t=m();e.createRoot=t.createRoot,e.hydrateRoot=t.hydrateRoot})),g=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),_=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),v={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},y=c(u()),b=(0,y.forwardRef)(({color:e=`currentColor`,size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>(0,y.createElement)(`svg`,{ref:c,...v,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:_(`lucide`,i),...s},[...o.map(([e,t])=>(0,y.createElement)(e,t)),...Array.isArray(a)?a:[a]])),x=(e,t)=>{let n=(0,y.forwardRef)(({className:n,...r},i)=>(0,y.createElement)(b,{ref:i,iconNode:t,className:_(`lucide-${g(e)}`,n),...r}));return n.displayName=`${e}`,n},S=x(`Activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),C=x(`ArrowLeft`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),w=x(`ArrowRight`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),T=x(`ArrowUpRight`,[[`path`,{d:`M7 7h10v10`,key:`1tivn9`}],[`path`,{d:`M7 17 17 7`,key:`1vkiza`}]]),ee=x(`BadgeCheck`,[[`path`,{d:`M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z`,key:`3c2336`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),E=x(`BookOpen`,[[`path`,{d:`M12 7v14`,key:`1akyts`}],[`path`,{d:`M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z`,key:`ruj8y`}]]),te=x(`Boxes`,[[`path`,{d:`M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z`,key:`lc1i9w`}],[`path`,{d:`m7 16.5-4.74-2.85`,key:`1o9zyk`}],[`path`,{d:`m7 16.5 5-3`,key:`va8pkn`}],[`path`,{d:`M7 16.5v5.17`,key:`jnp8gn`}],[`path`,{d:`M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z`,key:`8zsnat`}],[`path`,{d:`m17 16.5-5-3`,key:`8arw3v`}],[`path`,{d:`m17 16.5 4.74-2.85`,key:`8rfmw`}],[`path`,{d:`M17 16.5v5.17`,key:`k6z78m`}],[`path`,{d:`M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z`,key:`1xygjf`}],[`path`,{d:`M12 8 7.26 5.15`,key:`1vbdud`}],[`path`,{d:`m12 8 4.74-2.85`,key:`3rx089`}],[`path`,{d:`M12 13.5V8`,key:`1io7kd`}]]),D=x(`CalendarCheck`,[[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`,key:`1hopcy`}],[`path`,{d:`M3 10h18`,key:`8toen8`}],[`path`,{d:`m9 16 2 2 4-4`,key:`19s6y9`}]]),ne=x(`CalendarClock`,[[`path`,{d:`M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5`,key:`1osxxc`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`path`,{d:`M3 10h5`,key:`r794hk`}],[`path`,{d:`M17.5 17.5 16 16.3V14`,key:`akvzfd`}],[`circle`,{cx:`16`,cy:`16`,r:`6`,key:`qoo3c4`}]]),re=x(`ChartColumn`,[[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`,key:`c24i48`}],[`path`,{d:`M18 17V9`,key:`2bz60n`}],[`path`,{d:`M13 17V5`,key:`1frdt8`}],[`path`,{d:`M8 17v-3`,key:`17ska0`}]]),O=x(`Check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),k=x(`ChevronDown`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),A=x(`ChevronLeft`,[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]),j=x(`ChevronRight`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),ie=x(`ChevronUp`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),ae=x(`CircleAlert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),oe=x(`CircleCheck`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),M=x(`CircleX`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]),se=x(`Clock`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`polyline`,{points:`12 6 12 12 16 14`,key:`68esgv`}]]),ce=x(`Cloud`,[[`path`,{d:`M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z`,key:`p7xjir`}]]),le=x(`Copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),ue=x(`CornerDownLeft`,[[`polyline`,{points:`9 10 4 15 9 20`,key:`r3jprv`}],[`path`,{d:`M20 4v7a4 4 0 0 1-4 4H4`,key:`6o5b7l`}]]),de=x(`Crown`,[[`path`,{d:`M11.562 3.266a.5.5 0 0 1 .876 0L15.39 8.87a1 1 0 0 0 1.516.294L21.183 5.5a.5.5 0 0 1 .798.519l-2.834 10.246a1 1 0 0 1-.956.734H5.81a1 1 0 0 1-.957-.734L2.02 6.02a.5.5 0 0 1 .798-.519l4.276 3.664a1 1 0 0 0 1.516-.294z`,key:`1vdc57`}],[`path`,{d:`M5 21h14`,key:`11awu3`}]]),fe=x(`Database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]),pe=x(`Download`,[[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`polyline`,{points:`7 10 12 15 17 10`,key:`2ggqvy`}],[`line`,{x1:`12`,x2:`12`,y1:`15`,y2:`3`,key:`1vk2je`}]]),N=x(`ExternalLink`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),me=x(`EyeOff`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),he=x(`Eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),ge=x(`FileX`,[[`path`,{d:`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`,key:`1rqfz7`}],[`path`,{d:`M14 2v4a2 2 0 0 0 2 2h4`,key:`tnqrlb`}],[`path`,{d:`m14.5 12.5-5 5`,key:`b62r18`}],[`path`,{d:`m9.5 12.5 5 5`,key:`1rk7el`}]]),_e=x(`Filter`,[[`polygon`,{points:`22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3`,key:`1yg77f`}]]),ve=x(`Flame`,[[`path`,{d:`M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z`,key:`96xj49`}]]),ye=x(`Gauge`,[[`path`,{d:`m12 14 4-4`,key:`9kzdfg`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`,key:`19p75a`}]]),be=x(`Gift`,[[`rect`,{x:`3`,y:`8`,width:`18`,height:`4`,rx:`1`,key:`bkv52`}],[`path`,{d:`M12 8v13`,key:`1c76mn`}],[`path`,{d:`M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7`,key:`6wjy6b`}],[`path`,{d:`M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5`,key:`1ihvrl`}]]),xe=x(`GitCompare`,[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M13 6h3a2 2 0 0 1 2 2v7`,key:`1yeb86`}],[`path`,{d:`M11 18H8a2 2 0 0 1-2-2V9`,key:`19pyzm`}]]),Se=x(`Globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),Ce=x(`HardDrive`,[[`line`,{x1:`22`,x2:`2`,y1:`12`,y2:`12`,key:`1y58io`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}],[`line`,{x1:`6`,x2:`6.01`,y1:`16`,y2:`16`,key:`sgf278`}],[`line`,{x1:`10`,x2:`10.01`,y1:`16`,y2:`16`,key:`1l4acy`}]]),we=x(`HeartPulse`,[[`path`,{d:`M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z`,key:`c3ymky`}],[`path`,{d:`M3.22 12H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27`,key:`1uw2ng`}]]),Te=x(`History`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}],[`path`,{d:`M12 7v5l4 2`,key:`1fdv2h`}]]),Ee=x(`ImagePlus`,[[`path`,{d:`M16 5h6`,key:`1vod17`}],[`path`,{d:`M19 2v6`,key:`4bpg5p`}],[`path`,{d:`M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5`,key:`1ue2ih`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}]]),De=x(`Image`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]),Oe=x(`Import`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m8 11 4 4 4-4`,key:`1dohi6`}],[`path`,{d:`M8 5H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-4`,key:`1ywtjm`}]]),ke=x(`Info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),Ae=x(`KeyRound`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),je=x(`Layers`,[[`path`,{d:`m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z`,key:`8b97xw`}],[`path`,{d:`m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65`,key:`dd6zsq`}],[`path`,{d:`m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65`,key:`ep9fru`}]]),Me=x(`LayoutDashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),Ne=x(`LifeBuoy`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m4.93 4.93 4.24 4.24`,key:`1ymg45`}],[`path`,{d:`m14.83 9.17 4.24-4.24`,key:`1cb5xl`}],[`path`,{d:`m14.83 14.83 4.24 4.24`,key:`q42g0n`}],[`path`,{d:`m9.17 14.83-4.24 4.24`,key:`bqpfvv`}],[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}]]),Pe=x(`Lightbulb`,[[`path`,{d:`M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5`,key:`1gvzjb`}],[`path`,{d:`M9 18h6`,key:`x1upvd`}],[`path`,{d:`M10 22h4`,key:`ceow96`}]]),Fe=x(`LoaderCircle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),Ie=x(`Lock`,[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]),Le=x(`Moon`,[[`path`,{d:`M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z`,key:`a7tn18`}]]),Re=x(`Network`,[[`rect`,{x:`16`,y:`16`,width:`6`,height:`6`,rx:`1`,key:`4q2zg0`}],[`rect`,{x:`2`,y:`16`,width:`6`,height:`6`,rx:`1`,key:`8cvhb9`}],[`rect`,{x:`9`,y:`2`,width:`6`,height:`6`,rx:`1`,key:`1egb70`}],[`path`,{d:`M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3`,key:`1jsf9p`}],[`path`,{d:`M12 12V8`,key:`2874zd`}]]),ze=x(`Pencil`,[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]),Be=x(`Play`,[[`polygon`,{points:`6 3 20 12 6 21 6 3`,key:`1oa8hb`}]]),Ve=x(`PlugZap`,[[`path`,{d:`M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z`,key:`goz73y`}],[`path`,{d:`m2 22 3-3`,key:`19mgm9`}],[`path`,{d:`M7.5 13.5 10 11`,key:`7xgeeb`}],[`path`,{d:`M10.5 16.5 13 14`,key:`10btkg`}],[`path`,{d:`m18 3-4 4h6l-4 4`,key:`16psg9`}]]),He=x(`Plug`,[[`path`,{d:`M12 22v-5`,key:`1ega77`}],[`path`,{d:`M9 8V2`,key:`14iosj`}],[`path`,{d:`M15 8V2`,key:`18g5xt`}],[`path`,{d:`M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z`,key:`osxo6l`}]]),Ue=x(`Power`,[[`path`,{d:`M12 2v10`,key:`mnfbl`}],[`path`,{d:`M18.4 6.6a9 9 0 1 1-12.77.04`,key:`obofu9`}]]),P=x(`RefreshCw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),We=x(`Replace`,[[`path`,{d:`M14 4a2 2 0 0 1 2-2`,key:`1w2hp7`}],[`path`,{d:`M16 10a2 2 0 0 1-2-2`,key:`shjach`}],[`path`,{d:`M20 2a2 2 0 0 1 2 2`,key:`188mtx`}],[`path`,{d:`M22 8a2 2 0 0 1-2 2`,key:`ddf4tu`}],[`path`,{d:`m3 7 3 3 3-3`,key:`x25e72`}],[`path`,{d:`M6 10V5a3 3 0 0 1 3-3h1`,key:`3y3t5z`}],[`rect`,{x:`2`,y:`14`,width:`8`,height:`8`,rx:`2`,key:`4rksxw`}]]),Ge=x(`Rocket`,[[`path`,{d:`M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z`,key:`m3kijz`}],[`path`,{d:`m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z`,key:`1fmvmk`}],[`path`,{d:`M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0`,key:`1f8sc4`}],[`path`,{d:`M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5`,key:`qeys4`}]]),Ke=x(`RotateCw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),qe=x(`Rss`,[[`path`,{d:`M4 11a9 9 0 0 1 9 9`,key:`pv89mb`}],[`path`,{d:`M4 4a16 16 0 0 1 16 16`,key:`k0647b`}],[`circle`,{cx:`5`,cy:`19`,r:`1`,key:`bfqh0e`}]]),Je=x(`Scissors`,[[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M8.12 8.12 12 12`,key:`1alkpv`}],[`path`,{d:`M20 4 8.12 15.88`,key:`xgtan2`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}],[`path`,{d:`M14.8 14.8 20 20`,key:`ptml3r`}]]),Ye=x(`ScrollText`,[[`path`,{d:`M15 12h-5`,key:`r7krc0`}],[`path`,{d:`M15 8h-5`,key:`1khuty`}],[`path`,{d:`M19 17V5a2 2 0 0 0-2-2H4`,key:`zz82l3`}],[`path`,{d:`M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3`,key:`1ph1d7`}]]),Xe=x(`Search`,[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`path`,{d:`m21 21-4.3-4.3`,key:`1qie3q`}]]),Ze=x(`Server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]),Qe=x(`Settings`,[[`path`,{d:`M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z`,key:`1qme2f`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),$e=x(`Shield`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}]]),et=x(`Shrink`,[[`path`,{d:`m15 15 6 6m-6-6v4.8m0-4.8h4.8`,key:`17vawe`}],[`path`,{d:`M9 19.8V15m0 0H4.2M9 15l-6 6`,key:`chjx8e`}],[`path`,{d:`M15 4.2V9m0 0h4.8M15 9l6-6`,key:`lav6yq`}],[`path`,{d:`M9 4.2V9m0 0H4.2M9 9 3 3`,key:`1pxi2q`}]]),tt=x(`SlidersVertical`,[[`line`,{x1:`4`,x2:`4`,y1:`21`,y2:`14`,key:`1p332r`}],[`line`,{x1:`4`,x2:`4`,y1:`10`,y2:`3`,key:`gb41h5`}],[`line`,{x1:`12`,x2:`12`,y1:`21`,y2:`12`,key:`hf2csr`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`3`,key:`1kfi7u`}],[`line`,{x1:`20`,x2:`20`,y1:`21`,y2:`16`,key:`1lhrwl`}],[`line`,{x1:`20`,x2:`20`,y1:`12`,y2:`3`,key:`16vvfq`}],[`line`,{x1:`2`,x2:`6`,y1:`14`,y2:`14`,key:`1uebub`}],[`line`,{x1:`10`,x2:`14`,y1:`8`,y2:`8`,key:`1yglbp`}],[`line`,{x1:`18`,x2:`22`,y1:`16`,y2:`16`,key:`1jxqpz`}]]),nt=x(`Smartphone`,[[`rect`,{width:`14`,height:`20`,x:`5`,y:`2`,rx:`2`,ry:`2`,key:`1yt0o3`}],[`path`,{d:`M12 18h.01`,key:`mhygvu`}]]),rt=x(`Sparkles`,[[`path`,{d:`M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z`,key:`4pj2yx`}],[`path`,{d:`M20 3v4`,key:`1olli1`}],[`path`,{d:`M22 5h-4`,key:`1gvqau`}],[`path`,{d:`M4 17v2`,key:`vumght`}],[`path`,{d:`M5 18H3`,key:`zchphs`}]]),it=x(`Square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),at=x(`Star`,[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]),ot=x(`Sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),st=x(`Tag`,[[`path`,{d:`M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z`,key:`vktsd0`}],[`circle`,{cx:`7.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`kqv944`}]]),ct=x(`Timer`,[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`,key:`14vaq8`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`,key:`17fdiu`}],[`circle`,{cx:`12`,cy:`14`,r:`8`,key:`1e1u0o`}]]),lt=x(`Trash2`,[[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6`,key:`4alrt4`}],[`path`,{d:`M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2`,key:`v07s0e`}],[`line`,{x1:`10`,x2:`10`,y1:`11`,y2:`17`,key:`1uufr5`}],[`line`,{x1:`14`,x2:`14`,y1:`11`,y2:`17`,key:`xtxkd`}]]),ut=x(`TrendingUp`,[[`polyline`,{points:`22 7 13.5 15.5 8.5 10.5 2 17`,key:`126l90`}],[`polyline`,{points:`16 7 22 7 22 13`,key:`kwv8wd`}]]),dt=x(`TriangleAlert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),ft=x(`Type`,[[`polyline`,{points:`4 7 4 4 20 4 20 7`,key:`1nosan`}],[`line`,{x1:`9`,x2:`15`,y1:`20`,y2:`20`,key:`swin9y`}],[`line`,{x1:`12`,x2:`12`,y1:`4`,y2:`20`,key:`1tx1rr`}]]),pt=x(`Upload`,[[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`polyline`,{points:`17 8 12 3 7 8`,key:`t8dd8p`}],[`line`,{x1:`12`,x2:`12`,y1:`3`,y2:`15`,key:`widbto`}]]),mt=x(`WandSparkles`,[[`path`,{d:`m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72`,key:`ul74o6`}],[`path`,{d:`m14 7 3 3`,key:`1r5n42`}],[`path`,{d:`M5 6v4`,key:`ilb8ba`}],[`path`,{d:`M19 14v4`,key:`blhpug`}],[`path`,{d:`M10 2v2`,key:`7u0qdc`}],[`path`,{d:`M7 8H3`,key:`zfb6yr`}],[`path`,{d:`M21 16h-4`,key:`1cnmox`}],[`path`,{d:`M11 3H9`,key:`1obp7u`}]]),ht=x(`Webhook`,[[`path`,{d:`M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2`,key:`q3hayz`}],[`path`,{d:`m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06`,key:`1go1hn`}],[`path`,{d:`m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8`,key:`qlwsc0`}]]),gt=x(`Wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z`,key:`cbrjhi`}]]),_t=x(`X`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),vt=x(`Zap`,[[`path`,{d:`M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z`,key:`1xq2db`}]]),yt=o((e=>{var t=u(),n=Symbol.for(`react.element`),r=Symbol.for(`react.fragment`),i=Object.prototype.hasOwnProperty,a=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,o={key:!0,ref:!0,__self:!0,__source:!0};function s(e,t,r){var s,c={},l=null,u=null;for(s in r!==void 0&&(l=``+r),t.key!==void 0&&(l=``+t.key),t.ref!==void 0&&(u=t.ref),t)i.call(t,s)&&!o.hasOwnProperty(s)&&(c[s]=t[s]);if(e&&e.defaultProps)for(s in t=e.defaultProps,t)c[s]===void 0&&(c[s]=t[s]);return{$$typeof:n,type:e,key:l,ref:u,props:c,_owner:a.current}}e.Fragment=r,e.jsx=s,e.jsxs=s})),bt=o(((e,t)=>{t.exports=yt()})),F=c(m(),1),xt=h(),I=bt(),St={Activity:S,BarChart3:re,CalendarClock:ne,Clock:se,Cloud:ce,Database:fe,Eye:he,FileX:ge,Filter:_e,Gauge:ye,Globe:Se,HardDrive:Ce,HeartPulse:we,Image:De,Import:Oe,KeyRound:Ae,Layers:je,LayoutDashboard:Me,LifeBuoy:Ne,Lightbulb:Pe,Network:Re,Replace:We,Rss:qe,Scissors:Je,Search:Xe,Server:Ze,Settings:Qe,Shield:$e,Shrink:et,Sliders:tt,Sparkles:rt,Square:it,Tag:st,Trash2:lt,TrendingUp:ut,Type:ft,Wand2:mt,Webhook:ht,Wrench:gt,Zap:vt};function Ct({name:e,size:t=15,className:n}){return(0,I.jsx)(St[e]??it,{size:t,className:n})}var wt=[{slug:`pagespeed`,label:`PageSpeed`,icon:`Gauge`,description:`Run Google PageSpeed Insights audits without leaving the dashboard. Scores + CWV cached 24h.`,teaser:`pagespeed`,embedded:!0},{slug:`recommendations`,label:`Recommendations`,icon:`Lightbulb`,description:`Rule-based engine surfaces the 5 things most likely to improve your score.`,teaser:`recommendations`,embedded:!0},{slug:`rum`,label:`Real-User Monitoring`,icon:`Eye`,description:`Sample LCP / FCP / CLS / INP / TTFB from real visitors. Per-URL percentile charts.`,teaser:`rum`,embedded:!0},{slug:`images`,label:`Image Optimization`,icon:`Replace`,description:`Convert new JPEG/PNG uploads to WebP and AVIF; serve modern formats to supporting browsers.`,teaser:`webp-avif`,embedded:!0},{slug:`cloudflare-apo`,label:`Cloudflare APO`,icon:`Zap`,description:`Toggle Automatic Platform Optimization, edge cache level, and TTL. No separate dashboard.`,teaser:`cloudflare-apo`,embedded:!0},{slug:`feed-cache`,label:`Feed Caching`,icon:`Rss`,description:`Cache RSS / Atom / comment feeds so polling aggregators skip a full render. Correct feed content-type preserved; purges on new posts.`,teaser:`feed-cache`,embedded:!0},{slug:`cache-404`,label:`404 Caching`,icon:`FileX`,description:`Serve one cached 404 so bot / scanner floods on unknown URLs don't each cost a render. Short-lived, shared entry, purged on publish.`,teaser:`cache-404`,embedded:!0},{slug:`search-cache`,label:`Search Caching`,icon:`Search`,description:`Cache internal search-results pages (/?s=…) so popular repeated searches skip a full query + render. Keyed per term, short-lived, purged on publish.`,teaser:`search-cache`,embedded:!0},{slug:`rest-cache`,label:`REST API Cache`,icon:`Webhook`,description:`Cache read-only REST responses with a TTL you set per route — built for headless sites and app backends. Auth'd and write requests never cache.`,teaser:`rest-cache`,embedded:!0},{slug:`maintenance-cache`,label:`Maintenance`,icon:`Wrench`,description:`Skip caching while the site is in maintenance / coming-soon mode, and auto-purge when it goes live again.`,teaser:null,embedded:!0},{slug:`prewarm-schedule`,label:`On a Schedule`,icon:`CalendarClock`,description:`Warm target URLs ahead of posts, sales, and campaigns so the spike hits a warm cache. One-off, recurring, and auto-warm on scheduled-post publish.`,teaser:`prewarm-schedule`,embedded:!0},{slug:`predictive-warm`,label:`Auto (AI)`,icon:`TrendingUp`,description:`Proactively warm the hottest URLs — ranked by real traffic, recency, and content — so popular and about-to-be-popular pages always serve from cache.`,teaser:`predictive-warm`,embedded:!0},{slug:`brotli-compression`,label:`Brotli`,icon:`Shrink`,description:`Serve Brotli where supported — smaller than GZIP — with automatic GZIP fallback.`,teaser:`brotli`,embedded:!0},{slug:`custom-rules`,label:`Custom Cache Rules`,icon:`Filter`,description:`Bypass cache or override expiry by URL glob, post type, category, tag, or author.`,teaser:`custom-rules`,embedded:!0},{slug:`analytics`,label:`Analytics`,icon:`BarChart3`,description:`Hit-ratio trends, slowest URLs from RUM samples, recent activity timeline.`,teaser:`analytics`,embedded:!0},{slug:`critical-css`,label:`Critical CSS`,icon:`Sparkles`,description:`Inline above-the-fold styles, defer the rest. Pluggable generator endpoint.`,teaser:`critical-css`,embedded:!0},{slug:`unused-css`,label:`Unused CSS`,icon:`Scissors`,description:`Per-URL pruned stylesheet inlined; original <link> tags stripped.`,teaser:`unused-css`,embedded:!0},{slug:`license`,label:`License`,icon:`KeyRound`,description:`Activate xSpeed Pro and manage automatic updates.`,teaser:null},{slug:`white-label`,label:`Branding`,icon:`Tag`,description:`Rebrand the dashboard chrome — name, footer credit, hide help links.`,teaser:`white-label`},{slug:`multisite`,label:`Multisite`,icon:`Network`,description:`One dashboard across every site in a WP Multisite network with network-wide purge.`,teaser:`multisite`},{slug:`ai-provider`,label:`AI Provider`,icon:`Sparkles`,description:`Connect OpenAI, Anthropic, Gemini, or OpenRouter once — every Pro AI feature shares the connection.`,teaser:null},{slug:`smart-predict`,label:`Speculation Rules`,icon:`Wand2`,description:`Predict each visitor's next page and prefetch it via Chrome's Speculation Rules API.`,teaser:null,embedded:!0},{slug:`performance-health`,label:`Performance Health`,icon:`HeartPulse`,description:`Core Web Vitals health monitor with AI anomaly detection and a 7-day regression baseline.`,teaser:null,embedded:!0},{slug:`smart-image`,label:`AI Suggestions`,icon:`Sparkles`,description:`AI-recommended format + quality settings, applied into Image Optimization in one click.`,teaser:null,embedded:!0},{slug:`adaptive-cache`,label:`Adaptive Cache`,icon:`Lightbulb`,description:`AI-tuned cache TTL based on 24-hour traffic patterns, applied into the Cache module in one click.`,teaser:null}],Tt=new Set(wt.filter(e=>e.embedded).map(e=>e.slug)),Et=[{id:`cache`,label:`Cache`,icon:`Zap`,description:`Page, object and browser caching, plus preload.`,slugs:[`cache`,`preloader`,`browser-cache`,`object-cache`,`cache-coverage`,`adaptive-cache`]},{id:`performance`,label:`Optimization`,icon:`Gauge`,description:`Minify, compress, lazy-load, fonts and hints.`,slugs:[`minify`,`gzip`,`lazy`,`resource-hints`,`fonts`,`bloat`,`heartbeat`]},{id:`network`,label:`Network`,icon:`Network`,description:`CDN and Cloudflare edge delivery.`,slugs:[`cdn`,`cloudflare`]},{id:`insights`,label:`Health & insights`,icon:`HeartPulse`,description:`Speed score, diagnostics and analytics.`,slugs:[`health`,`score`]},{id:`tools`,label:`Tools`,icon:`Sliders`,description:`Database cleanup, migration and logs.`,slugs:[`database`,`migration`,`logs`]},{id:`ai-agents`,label:`AI & agents`,icon:`Sparkles`,description:`Hub, MCP access, AI provider and privacy.`,slugs:[`ai-provider`,`mcp`,`ai-privacy`]},{id:`settings`,label:`Settings`,icon:`Settings`,description:`License, branding, multisite and support.`,slugs:[`license`,`white-label`,`multisite`,`support`]}],Dt=Et.map(e=>e.id);function Ot(e){return Et.find(t=>t.id===e)}function kt(e){return Et.find(t=>t.slugs.includes(e))?.id}function At(e,t=!0){let n=new Map(e.map(e=>[e.slug,e])),r=new Set,i=[];for(let e of Et){let t=[];for(let i of e.slugs){let e=n.get(i);e&&(t.push(e),r.add(i))}t.length>0&&i.push({id:e.id,label:e.label,icon:e.icon,modules:t,leaf:e.leaf})}let a=e.filter(e=>!r.has(e.slug)&&!Tt.has(e.slug));return a.length>0&&i.push({id:`other`,label:`Other`,icon:`Square`,modules:a}),i}var jt=`overview`,Mt=`xspeed`;function Nt(){return typeof window>`u`?null:window.wp?.i18n??null}function L(e,t=Mt){let n=Nt();return n?n.__(e,t):e}function Pt(e,...t){let n=Nt();if(n)return n.sprintf(e,...t);let r=0;return e.replace(/%[sd]/g,()=>String(t[r++]??``))}var Ft={},It=`xspeed:panels-changed`,Lt=`xspeed:tier-changed`,Rt=`xspeed:branding-changed`;function zt(e){return Ft[e]}function Bt(){typeof window>`u`||window.XSpeedPro||(window.XSpeedPro={panels:Ft,registerPanel(e,t){Ft[e]=t,window.dispatchEvent(new CustomEvent(It,{detail:{slug:e}}))},setTier(e){let t=window.XSpeedConfig;t&&(t.tier=e),window.dispatchEvent(new CustomEvent(Lt,{detail:{tier:e}}))},setBranding(e){let t=window.XSpeedConfig;t&&(t.branding=e),window.dispatchEvent(new CustomEvent(Rt,{detail:{branding:e}}))}})}function Vt(){let[e,t]=(0,y.useState)(0);return(0,y.useEffect)(()=>{let e=()=>t(e=>e+1);return window.addEventListener(It,e),()=>window.removeEventListener(It,e)},[]),e}var Ht={name:`xSpeed Cache`,footer_credit:null,hide_help_links:!1,logo_svg:null};function Ut(){let e=window.XSpeedConfig?.branding;return e?{...Ht,...e}:Ht}function R(){let[e,t]=(0,y.useState)(Ut);return(0,y.useEffect)(()=>{let e=()=>t(Ut());return window.addEventListener(Rt,e),()=>window.removeEventListener(Rt,e)},[]),e}function Wt(){return typeof window>`u`?`free`:window.XSpeedConfig?.tier??`free`}function Gt(){if(typeof window>`u`)return`not_installed`;let e=window.XSpeedConfig;return e?.proState?e.proState:qt()?`active`:`not_installed`}function Kt(){let[e,t]=(0,y.useState)(Wt);return(0,y.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>t(Wt());return window.addEventListener(Lt,e),()=>window.removeEventListener(Lt,e)},[]),e}function qt(){let e=Wt();return e===`pro`||e===`trial`}function Jt(){let[e,t]=(0,y.useState)(Gt);return(0,y.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>t(Gt());return window.addEventListener(Lt,e),()=>window.removeEventListener(Lt,e)},[]),e}var Yt=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='-12.5%20-6.2%2084.8%2084.8'%20fill='currentColor'%3e%3cpath%20d='M48.5785%2036.0175C49.1085%2036.0095%2049.5752%2036.0326%2050.0151%2036.0942C54.5584%2036.7301%2058.2798%2040.0242%2059.4625%2044.4568C59.8495%2045.9073%2059.8483%2047.7319%2059.8483%2051.3252C59.8483%2054.5498%2059.8493%2056.1876%2059.5156%2057.5401C58.4986%2061.6597%2055.2818%2064.8767%2051.1621%2065.8935C49.8096%2066.2274%2048.172%2066.2263%2044.9472%2066.2263H27.605L22.8577%2071.3378C21.8413%2072.432%2020.213%2072.6993%2018.9001%2071.9875C17.5872%2071.2756%2016.9228%2069.765%2017.2853%2068.3162L17.8083%2066.2257C14.8099%2066.2255%2012.5338%2066.2195%2010.7131%2066.0664C8.85549%2065.9102%207.46018%2065.6005%206.24471%2064.9812C4.09536%2063.8861%202.34772%2062.1383%201.25248%2059.989C0.62595%2058.7594%200.316091%2057.3455%200.16153%2055.4551C0.00710842%2053.5663%200.00702338%2051.1895%200.00690304%2048.0317L0.00662692%2040.2236H7.48311L26.4898%2040.3834C27.4111%2040.3913%2028.0706%2041.2763%2027.8149%2042.1614L20.2426%2068.3463C20.0955%2068.8549%2020.7483%2069.2025%2021.088%2068.7964L48.4749%2036.0666L48.5152%2036.0183L48.5785%2036.0175Z'/%3e%3cpath%20d='M40.3093%201.07568C41.635%20-0.187017%2043.6612%20-0.357074%2045.1792%200.666468C46.697%201.6902%2047.2986%203.63244%2046.6249%205.33481L46.2831%206.19741C49.6878%206.2672%2051.8385%206.51454%2053.6049%207.41454C55.7543%208.50975%2057.502%2010.2577%2058.5972%2012.4071C59.2237%2013.6367%2059.5337%2015.0508%2059.6881%2016.9412C59.8424%2018.8301%2059.8422%2021.207%2059.8422%2024.3649V32.521H51.6809L33.5137%2032.4287C32.5191%2032.4236%2031.8506%2031.4069%2032.2405%2030.4918L43.3822%204.34465C43.5955%203.84378%2042.9544%203.42105%2042.5781%203.8145L10.4605%2037.4094L10.0645%2037.4315L10.0607%2037.4317H10.0568C4.50287%2037.4325%202.60655e-05%2032.9302%206.13307e-08%2027.3763V21.8001C2.87832e-08%2017.8963%20-0.00154013%2015.9137%200.48597%2014.2963C1.59122%2010.6297%204.46019%207.76069%208.12674%206.65549C9.74417%206.16799%2011.7267%206.16952%2015.6306%206.16952H34.9617L40.3093%201.07568Z'/%3e%3c/svg%3e`;function Xt({className:e=`w-6 h-6 rounded shrink-0`,onDark:t=!1}){let n=R(),r=n.logo_svg?.trim(),i=n.name||`xSpeed Cache`,[a,o]=(0,y.useState)(!1);return(0,y.useEffect)(()=>{o(!1)},[r]),r&&!a?r.startsWith(`<svg`)?(0,I.jsx)(`span`,{className:`inline-flex items-center justify-center ${e}`,role:`img`,"aria-label":i,dangerouslySetInnerHTML:{__html:r}}):(0,I.jsx)(`img`,{src:r,alt:i,className:e,onError:()=>o(!0)}):(0,I.jsx)(`img`,{src:Yt,alt:i,className:`${e} ${t?`invert`:`dark:invert`}`})}function Zt({activeGroup:e,onNavigate:t,onUpgrade:n,onManageLicense:r,modules:i=[]}){let a=R(),o=Jt(),s=e=>e.reduce((e,t)=>e+ +(i.find(e=>e.slug===t)?.settings?.enabled===!0),0),c=`group w-full flex items-center gap-3 px-3 py-2 rounded-control text-[13.5px] font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40`;return(0,I.jsxs)(`aside`,{className:`w-60 shrink-0 flex flex-col text-rail-text`,style:{background:`linear-gradient(180deg, var(--rail-top), var(--rail-bottom))`},children:[(0,I.jsxs)(`div`,{className:`h-14 shrink-0 flex items-center gap-2.5 px-4 border-b`,style:{borderColor:`var(--rail-edge)`},children:[(0,I.jsx)(Xt,{className:`w-6 h-6 rounded`,onDark:!0}),(0,I.jsx)(`span`,{className:`font-display font-semibold text-[15px] text-white truncate`,children:a.name})]}),(0,I.jsxs)(`nav`,{"aria-label":L(`Primary`),className:`flex-1 overflow-y-auto p-3 space-y-1`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:()=>t(jt),"aria-current":e===`overview`?`page`:void 0,className:e===`overview`?`${c} bg-primary text-on-primary shadow-primary-glow`:`${c} text-rail-text hover:text-white hover:bg-white/[.06]`,children:[(0,I.jsx)(Me,{size:16,className:`shrink-0`,"aria-hidden":`true`}),(0,I.jsx)(`span`,{className:`flex-1 text-left truncate`,children:L(`Overview`)})]}),(0,I.jsx)(`div`,{className:`pt-2`}),Et.map(n=>{let r=e===n.id,i=s(n.slugs);return(0,I.jsxs)(`button`,{type:`button`,onClick:()=>t(n.id),"aria-current":r?`page`:void 0,className:r?`${c} bg-primary text-on-primary shadow-primary-glow`:`${c} text-rail-text hover:text-white hover:bg-white/[.06]`,children:[(0,I.jsx)(Ct,{name:n.icon,size:16,className:`shrink-0`}),(0,I.jsx)(`span`,{className:`flex-1 text-left truncate`,children:n.label}),i>0&&(0,I.jsx)(`span`,{className:`shrink-0 text-[11px] tabular-nums ${r?`text-on-primary`:`text-rail-text`}`,children:i})]},n.id)})]}),(0,I.jsx)(`div`,{className:`p-3 border-t`,style:{borderColor:`var(--rail-edge)`},children:o===`active`?(0,I.jsxs)(`button`,{type:`button`,onClick:r,title:L(`Manage your license`),className:`w-full flex items-center gap-2.5 px-3 py-2 rounded-control text-[13px] font-medium text-rail-text hover:text-white hover:bg-white/[.06] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40`,children:[(0,I.jsx)(ee,{size:15,className:`shrink-0 text-success`,"aria-hidden":`true`}),(0,I.jsx)(`span`,{className:`flex-1 text-left`,children:L(`Pro Licensed`)}),(0,I.jsx)(T,{size:14,className:`shrink-0 opacity-50`,"aria-hidden":`true`})]}):(0,I.jsxs)(`button`,{type:`button`,onClick:o===`unlicensed`?r:n,className:`w-full flex items-center gap-2.5 px-3 py-2 rounded-control text-[13px] font-medium text-white bg-white/[.06] hover:bg-white/[.1] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40`,children:[o===`unlicensed`?(0,I.jsx)(Ae,{size:15,className:`shrink-0 text-warning`,"aria-hidden":`true`}):(0,I.jsx)(rt,{size:15,className:`shrink-0 text-warning`,"aria-hidden":`true`}),(0,I.jsx)(`span`,{className:`flex-1 text-left`,children:L(o===`unlicensed`?`Activate License`:`Upgrade to Pro`)}),(0,I.jsx)(T,{size:14,className:`shrink-0 opacity-70`,"aria-hidden":`true`})]})})]})}var Qt=typeof navigator<`u`&&/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent||``)?`⌘K`:`Ctrl K`;function $t({crumb:e,onOpenSearch:t,onPurge:n,onPreload:r,onConnectHub:i,purging:a=!1,preloading:o=!1,hubConnected:s=!1,theme:c,onToggleTheme:l}){return(0,I.jsxs)(`header`,{className:`sticky top-0 z-30 h-14 shrink-0 flex items-center justify-between gap-3 px-4 sm:px-6 border-b border-line bg-paper`,children:[(0,I.jsxs)(`nav`,{"aria-label":L(`Breadcrumb`),className:`flex items-center gap-2 min-w-0`,children:[e.backLabel&&(0,I.jsxs)(`button`,{type:`button`,onClick:e.onBack,className:`inline-flex items-center gap-1 shrink-0 rounded-control px-2 py-1 text-[13px] text-ink-soft hover:text-ink hover:bg-panel transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary`,children:[(0,I.jsx)(A,{size:15,"aria-hidden":`true`}),e.backLabel]}),e.backLabel&&(0,I.jsx)(`span`,{className:`text-faint shrink-0`,"aria-hidden":`true`,children:`/`}),(0,I.jsx)(`span`,{className:`truncate text-[14px] font-medium text-ink`,children:e.current})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:t,"aria-label":L(`Search`),"aria-keyshortcuts":`Meta+K Control+K`,className:`inline-flex items-center gap-2 rounded-control border border-line px-2.5 py-1.5 text-[12.5px] text-muted hover:text-ink hover:bg-panel transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary`,children:[(0,I.jsx)(Xe,{size:14,"aria-hidden":`true`}),(0,I.jsx)(`span`,{className:`hidden md:inline`,children:L(`Search`)}),(0,I.jsx)(`kbd`,{className:`hidden md:inline-flex items-center h-[18px] px-1 rounded text-[10px] font-medium bg-panel text-muted`,children:Qt})]}),(0,I.jsxs)(`button`,{type:`button`,onClick:n,disabled:a,className:`inline-flex items-center gap-2 rounded-control px-3 py-1.5 text-[13px] font-medium bg-primary text-on-primary shadow-primary-glow hover:bg-primary-hover transition-colors disabled:opacity-60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-1`,children:[(0,I.jsx)(P,{size:14,className:a?`xspeed-anim-spin animate-spin`:``,"aria-hidden":`true`}),L(`Purge all`)]}),(0,I.jsxs)(`button`,{type:`button`,onClick:r,disabled:o,className:`inline-flex items-center gap-2 rounded-control px-3 py-1.5 text-[13px] font-medium border border-line-strong text-ink hover:bg-panel transition-colors disabled:opacity-60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary`,children:[(0,I.jsx)(Ge,{size:14,className:o?`animate-pulse`:``,"aria-hidden":`true`}),L(`Preload`)]}),(0,I.jsxs)(`button`,{type:`button`,onClick:i,className:`hidden sm:inline-flex items-center gap-1.5 rounded-pill px-3 py-1.5 text-[12.5px] text-ink-soft hover:text-ink hover:bg-panel transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary`,children:[(0,I.jsx)(ce,{size:14,"aria-hidden":`true`}),L(s?`Hub connected`:`Connect Hub`),s&&(0,I.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-success`,"aria-hidden":`true`})]}),(0,I.jsx)(`button`,{type:`button`,onClick:l,"aria-label":L(c===`dark`?`Switch to light mode`:`Switch to dark mode`),className:`inline-flex items-center justify-center w-8 h-8 rounded-control text-ink-soft hover:text-ink hover:bg-panel transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary`,children:c===`dark`?(0,I.jsx)(ot,{size:16,"aria-hidden":`true`}):(0,I.jsx)(Le,{size:16,"aria-hidden":`true`})})]})]})}function en(e){if(e.locked)return`locked`;let t=e.settings?.enabled;return typeof t==`boolean`?t?`on`:`off`:null}function tn({state:e}){return e===`locked`?(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-pill px-2 py-0.5 text-[11px] font-medium bg-primary-tint text-primary`,children:[(0,I.jsx)(Ie,{size:11,"aria-hidden":`true`}),` `,L(`Pro`)]}):e===`on`?(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 rounded-pill px-2 py-0.5 text-[11px] font-medium bg-success-tint text-success`,children:[(0,I.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-success`,"aria-hidden":`true`}),` `,L(`On`)]}):e===`off`?(0,I.jsx)(`span`,{className:`rounded-pill px-2 py-0.5 text-[11px] font-medium bg-panel text-muted`,children:L(`Off`)}):null}function nn({groupId:e,modules:t,onOpen:n}){let r=Ot(e);if(!r)return null;let i=r.slugs.map(e=>{if(e===`logs`)return{slug:e,label:L(`Logs`),description:L(`Recent cache and settings activity.`),icon:`Activity`,state:null};let n=t.find(t=>t.slug===e);return n?{slug:e,label:n.label??e,description:n.description??``,icon:n.icon??`Square`,state:en(n)}:null}).filter(e=>e!==null),a=i.filter(e=>e.state!==null).length,o=i.filter(e=>e.state===`on`).length;return(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`p`,{className:`text-[12px] font-medium uppercase tracking-wide text-muted`,children:r.label}),(0,I.jsxs)(`div`,{className:`mt-1 flex items-baseline gap-3 flex-wrap`,children:[(0,I.jsx)(`h1`,{className:`font-display text-[22px] font-semibold text-ink`,children:r.description??r.label}),a>0&&(0,I.jsxs)(`span`,{className:`text-[13px] text-muted tabular-nums`,children:[o,` `,L(`of`),` `,a,` `,L(`on`)]})]}),(0,I.jsx)(`div`,{className:`mt-5 grid gap-4 grid-cols-[repeat(auto-fill,minmax(260px,1fr))]`,children:i.map(e=>(0,I.jsxs)(`button`,{type:`button`,onClick:()=>n(e.slug),className:`text-left rounded-card border border-line bg-paper p-4 transition-all hover:border-line-strong hover:-translate-y-0.5 hover:shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary`,children:[(0,I.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,I.jsx)(`span`,{className:`inline-flex items-center justify-center w-9 h-9 rounded-control bg-panel text-ink-soft`,children:e.icon===`Activity`?(0,I.jsx)(S,{size:17}):(0,I.jsx)(Ct,{name:e.icon,size:17})}),(0,I.jsx)(tn,{state:e.state})]}),(0,I.jsx)(`p`,{className:`mt-3 text-[15px] font-semibold text-ink`,children:e.label}),e.description&&(0,I.jsx)(`p`,{className:`mt-1 text-[13px] leading-relaxed text-ink-soft line-clamp-2`,children:e.description})]},e.slug))})]})}function rn(e){if(e.locked)return`locked`;let t=e.settings?.enabled;return typeof t==`boolean`?t?`on`:`off`:null}function an({state:e}){return e===`locked`?(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-pill px-2.5 py-0.5 text-[12px] font-medium bg-primary-tint text-primary`,children:[(0,I.jsx)(Ie,{size:12,"aria-hidden":`true`}),` `,L(`Pro`)]}):e===`on`?(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 rounded-pill px-2.5 py-0.5 text-[12px] font-medium bg-success-tint text-success`,children:[(0,I.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-success`,"aria-hidden":`true`}),` `,L(`On`)]}):e===`off`?(0,I.jsx)(`span`,{className:`rounded-pill px-2.5 py-0.5 text-[12px] font-medium bg-panel text-muted`,children:L(`Off`)}):null}function on({module:e,eyebrow:t}){return(0,I.jsxs)(`div`,{children:[t&&(0,I.jsx)(`p`,{className:`text-[12px] font-medium uppercase tracking-wide text-muted`,children:t}),(0,I.jsxs)(`div`,{className:`mt-1 flex items-center gap-3 flex-wrap`,children:[(0,I.jsx)(`h1`,{className:`font-display text-[22px] font-semibold text-ink`,children:e.label}),(0,I.jsx)(an,{state:rn(e)})]}),e.description&&(0,I.jsx)(`p`,{className:`mt-1 text-[13px] leading-relaxed text-ink-soft max-w-2xl`,children:e.description})]})}var sn=window.XSpeedConfig;async function z(e,t={}){let n=await fetch(`${sn.restUrl}${e}`,{...t,headers:{"Content-Type":`application/json`,"X-WP-Nonce":sn.nonce,...t.headers||{}},credentials:`same-origin`});if(!n.ok)throw Error(`HTTP ${n.status}`);return n.json()}var B={request:(e,t={})=>z(e,t),getStatus:()=>z(`/status`),getSettings:()=>z(`/settings`),getModules:()=>z(`/modules`),getBranding:()=>z(`/branding`),updateSettings:e=>z(`/settings`,{method:`POST`,body:JSON.stringify(e)}),toggleCache:e=>z(`/cache/toggle`,{method:`POST`,body:JSON.stringify({enabled:e})}),purge:()=>z(`/cache/purge`,{method:`POST`}),preload:()=>z(`/preloader/start`,{method:`POST`}),getRecommendations:()=>z(`/recommendations`),applyRecommendation:e=>z(`/recommendations/apply`,{method:`POST`,body:JSON.stringify({id:e})}),getProAudit:()=>z(`/audit/pro`),getActivity:()=>z(`/activity`),mobileEqualityProbe:()=>z(`/cache/mobile-probe`,{method:`POST`}),dismissMobileReview:()=>z(`/cache/mobile-review-dismiss`,{method:`POST`}),onboardingApply:e=>z(`/onboarding/apply`,{method:`POST`,body:JSON.stringify(e)}),onboardingComplete:()=>z(`/onboarding/complete`,{method:`POST`}),getModuleSettings:e=>z(`/${e}/`),updateModuleSettings:(e,t)=>z(`/${e}/`,{method:`POST`,body:JSON.stringify(t)})};function cn(e){return Math.round(Number(e??0)).toLocaleString()}function ln(e){let t=Number(e??0),n=t<=1?t*100:t;return`${Math.round(n)}%`}function un(e){let t=Math.max(0,Math.floor(Date.now()/1e3)-Number(e||0));if(t<60)return`just now`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);if(r<24)return`${r}h ago`;let i=Math.floor(r/24);return i<30?`${i}d ago`:`${Math.floor(i/30)}mo ago`}function dn(e){let t=Number(e??0);if(t<=0)return`0 KB`;let n=[`B`,`KB`,`MB`,`GB`,`TB`],r=Math.min(n.length-1,Math.floor(Math.log(t)/Math.log(1024))),i=t/1024**r;return`${r>=2?Math.round(i*10)/10:Math.round(i)} ${n[r]}`}function fn(e){switch(e){case`success`:return`bg-success`;case`warn`:return`bg-warning`;case`error`:return`bg-danger`;default:return`bg-line-strong`}}function pn(){let[e,t]=(0,y.useState)(null);return(0,y.useEffect)(()=>{let e=!0;return B.getActivity().then(n=>{e&&t(n.activity??[])}).catch(()=>{e&&t([])}),()=>{e=!1}},[]),(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`p`,{className:`text-[12px] font-medium uppercase tracking-wide text-muted`,children:L(`Tools`)}),(0,I.jsx)(`h1`,{className:`mt-1 font-display text-[22px] font-semibold text-ink`,children:L(`Logs`)}),(0,I.jsx)(`p`,{className:`mt-1 text-[13px] text-ink-soft`,children:L(`Recent cache and settings activity on this site.`)}),(0,I.jsx)(`div`,{className:`mt-5 rounded-card border border-line bg-paper overflow-hidden`,children:e===null?(0,I.jsxs)(`div`,{className:`p-4 space-y-2`,"aria-busy":`true`,children:[(0,I.jsx)(`span`,{className:`block h-4 rounded bg-panel animate-pulse`}),(0,I.jsx)(`span`,{className:`block h-4 w-2/3 rounded bg-panel animate-pulse`})]}):e.length===0?(0,I.jsx)(`div`,{className:`p-8 text-center text-[13px] text-muted`,children:L(`No activity recorded yet.`)}):(0,I.jsx)(`ul`,{className:`divide-y divide-line`,children:e.map((e,t)=>(0,I.jsxs)(`li`,{className:`flex items-center gap-3 px-4 py-2.5`,children:[(0,I.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full shrink-0 ${fn(e.severity)}`,"aria-hidden":`true`}),(0,I.jsx)(`span`,{className:`flex-1 min-w-0 truncate text-[13.5px] text-ink`,children:e.message}),(0,I.jsx)(`span`,{className:`shrink-0 text-[11px] text-muted tabular-nums font-mono`,children:un(e.ts)})]},`${e.ts}-${t}`))})})]})}function mn(){return(0,I.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center gap-5 px-6`,role:`status`,"aria-label":L(`Loading`),children:[(0,I.jsx)(Xt,{className:`w-12 h-12 rounded-card shrink-0 motion-safe:animate-pulse`}),(0,I.jsxs)(`div`,{className:`w-full max-w-[220px] space-y-2.5`,children:[(0,I.jsx)(`div`,{className:`h-3 rounded bg-line motion-safe:animate-pulse mx-auto w-1/2`}),(0,I.jsx)(`div`,{className:`h-2.5 rounded bg-panel motion-safe:animate-pulse w-full`}),(0,I.jsx)(`div`,{className:`h-2.5 rounded bg-panel motion-safe:animate-pulse w-5/6 mx-auto`})]}),(0,I.jsx)(`span`,{className:`sr-only`,children:L(`Loading…`)})]})}function hn({message:e}){return(0,I.jsx)(`div`,{className:`fixed bottom-6 left-1/2 -translate-x-1/2 bg-neutral-900 dark:bg-neutral-50 text-white dark:text-neutral-900 text-[13px] px-4 py-2 rounded shadow-sm z-50`,children:e})}function gn({checked:e,onChange:t,size:n=`md`,label:r=`Toggle`}){let i=n===`lg`?{track:`w-11 h-6`,dot:`w-5 h-5`,tx:`translate-x-[22px]`,off:`translate-x-0.5`}:{track:`w-9 h-5`,dot:`w-4 h-4`,tx:`translate-x-[18px]`,off:`translate-x-0.5`};return(0,I.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e?`true`:`false`,"aria-label":r,title:r,onClick:()=>t(!e),className:`relative inline-flex shrink-0 ${i.track} items-center rounded-full transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-1 ${e?`bg-primary`:`bg-line-strong`}`,children:(0,I.jsx)(`span`,{className:`inline-block ${i.dot} transform rounded-full bg-white shadow-sm transition-transform duration-150 ${e?i.tx:i.off}`})})}function _n(e){if(!e.module)return`#`;let t=`#${e.module}`;e.subtab&&(t+=`/${e.subtab}`);let n=[];return e.focus&&n.push(`focus=${encodeURIComponent(e.focus)}`),e.suggest!==void 0&&e.suggest!==null&&n.push(`suggest=${encodeURIComponent(String(e.suggest))}`),n.length>0&&(t+=`?${n.join(`&`)}`),t}function vn(e){let[t=``,n=``]=(e||``).replace(/^#/,``).split(`?`),[r=``,i=``]=t.split(`/`),a={module:r};i&&(a.subtab=i);for(let e of n.split(`&`)){if(!e)continue;let t=e.indexOf(`=`);if(t<0)continue;let n=e.slice(0,t),r=decodeURIComponent(e.slice(t+1));n===`focus`&&r&&(a.focus=r),n===`suggest`&&r!==``&&(a.suggest=r)}return a}function yn(e){if(!e)return null;let t=e.indexOf(`:`);return t<=0||t===e.length-1?null:{module:e.slice(0,t),field:e.slice(t+1)}}var bn={info:{border:`border-line`,bg:`bg-info-tint`,iconColor:`text-info`,titleColor:`text-on-tint`,bodyColor:`text-ink-soft`,preBorder:`border-line`,preBg:`bg-paper`,preText:`text-ink`,copyBtnBorder:`border-line-strong`,copyBtnBg:`bg-paper`,copyBtnText:`text-primary`,copyBtnHover:`hover:bg-panel`,Icon:ke},warn:{border:`border-amber-200 dark:border-amber-900/60`,bg:`bg-amber-50 dark:bg-amber-950/40`,iconColor:`text-amber-600 dark:text-amber-400`,titleColor:`text-amber-900 dark:text-amber-200`,bodyColor:`text-amber-800/90 dark:text-amber-200/80`,preBorder:`border-amber-200 dark:border-amber-900/60`,preBg:`bg-white dark:bg-neutral-900`,preText:`text-neutral-800 dark:text-neutral-200`,copyBtnBorder:`border-amber-300 dark:border-amber-800`,copyBtnBg:`bg-white dark:bg-neutral-900`,copyBtnText:`text-amber-800 dark:text-amber-200`,copyBtnHover:`hover:bg-amber-100 dark:hover:bg-amber-900/40`,Icon:dt},danger:{border:`border-red-200 dark:border-red-900/60`,bg:`bg-red-50 dark:bg-red-950/40`,iconColor:`text-red-600 dark:text-red-400`,titleColor:`text-red-900 dark:text-red-200`,bodyColor:`text-red-800/90 dark:text-red-200/80`,preBorder:`border-red-200 dark:border-red-900/60`,preBg:`bg-white dark:bg-neutral-900`,preText:`text-neutral-800 dark:text-neutral-200`,copyBtnBorder:`border-red-300 dark:border-red-800`,copyBtnBg:`bg-white dark:bg-neutral-900`,copyBtnText:`text-red-800 dark:text-red-200`,copyBtnHover:`hover:bg-red-100 dark:hover:bg-red-900/40`,Icon:ae},success:{border:`border-emerald-200 dark:border-emerald-900/60`,bg:`bg-emerald-50 dark:bg-emerald-950/40`,iconColor:`text-emerald-600 dark:text-emerald-400`,titleColor:`text-emerald-900 dark:text-emerald-200`,bodyColor:`text-emerald-800/90 dark:text-emerald-200/80`,preBorder:`border-emerald-200 dark:border-emerald-900/60`,preBg:`bg-white dark:bg-neutral-900`,preText:`text-neutral-800 dark:text-neutral-200`,copyBtnBorder:`border-emerald-300 dark:border-emerald-800`,copyBtnBg:`bg-white dark:bg-neutral-900`,copyBtnText:`text-emerald-800 dark:text-emerald-200`,copyBtnHover:`hover:bg-emerald-100 dark:hover:bg-emerald-900/40`,Icon:oe}};function V({tone:e,title:t,body:n,snippet:r,action:i}){let a=bn[e],[o,s]=(0,y.useState)(!1);return(0,I.jsx)(`div`,{className:`border ${a.border} ${a.bg} rounded-lg p-4 sm:p-5`,children:(0,I.jsxs)(`div`,{className:`flex items-start gap-2.5`,children:[(0,I.jsx)(a.Icon,{size:16,className:`${a.iconColor} shrink-0 mt-0.5`}),(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,I.jsx)(`div`,{className:`font-medium ${a.titleColor} text-[13px]`,children:t}),n&&(0,I.jsx)(`p`,{className:`text-[12px] ${a.bodyColor} mt-1`,children:n}),r&&(0,I.jsxs)(`div`,{className:`mt-3 relative`,children:[(0,I.jsx)(`pre`,{className:`text-[11px] font-mono ${a.preBg} border ${a.preBorder} rounded p-3 overflow-x-auto whitespace-pre ${a.preText}`,children:r}),(0,I.jsxs)(`button`,{type:`button`,onClick:async()=>{r&&(await navigator.clipboard.writeText(r),s(!0),setTimeout(()=>s(!1),1500))},className:`absolute top-2 right-2 flex items-center gap-1 text-[11px] px-2 py-1 rounded border ${a.copyBtnBorder} ${a.copyBtnBg} ${a.copyBtnText} ${a.copyBtnHover} transition-colors`,children:[o?(0,I.jsx)(O,{size:11}):(0,I.jsx)(le,{size:11}),o?`Copied`:`Copy`]})]}),i&&(0,I.jsxs)(`a`,{href:_n(i),className:`mt-3 inline-flex items-center gap-1.5 text-[12px] px-2.5 py-1 rounded border ${a.copyBtnBorder} ${a.copyBtnBg} ${a.copyBtnText} ${a.copyBtnHover} transition-colors`,children:[i.label,(0,I.jsx)(w,{size:12})]})]})]})})}function xn(){return window.wp?.media}function Sn({value:e,onChange:t,label:n}){let r=xn(),i=()=>{if(!r)return;let e=r({title:n,button:{text:`Use this image`},library:{type:`image`},multiple:!1});e.on(`select`,()=>{let n=e.state().get(`selection`).first();n&&t(n.toJSON().url)}),e.open()};return r?(0,I.jsx)(`div`,{className:`flex items-center gap-2`,children:e?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`img`,{src:e,alt:n,className:`w-8 h-8 rounded object-contain border border-neutral-200 dark:border-neutral-700 bg-white`}),(0,I.jsx)(`button`,{type:`button`,onClick:i,className:`text-[12px] px-2.5 py-1 rounded border border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors`,children:`Change`}),(0,I.jsx)(`button`,{type:`button`,onClick:()=>t(``),"aria-label":`Remove ${n}`,className:`text-neutral-400 hover:text-red-600 dark:hover:text-red-400 transition-colors`,children:(0,I.jsx)(_t,{size:14})})]}):(0,I.jsxs)(`button`,{type:`button`,onClick:i,className:`text-[12px] px-2.5 py-1 rounded border border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors inline-flex items-center gap-1.5`,children:[(0,I.jsx)(Ee,{size:13}),`Select image`]})}):(0,I.jsx)(`input`,{type:`url`,value:e??``,onChange:e=>t(e.target.value),className:`w-56`,"aria-label":n,placeholder:`https://…`})}function Cn({title:e,body:t}){let[n,r]=(0,y.useState)(null),i=(0,y.useRef)(null),a=(0,y.useRef)(null),o=(0,y.useId)(),s=n!==null,c=()=>{let e=i.current;if(!e)return;let t=e.getBoundingClientRect();r({top:t.bottom+6,left:t.left})};return(0,y.useEffect)(()=>{if(!s)return;let e=e=>{!a.current?.contains(e.target)&&!i.current?.contains(e.target)&&r(null)},t=e=>{e.key===`Escape`&&r(null)},n=()=>r(null);return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),window.addEventListener(`scroll`,n,!0),window.addEventListener(`resize`,n),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t),window.removeEventListener(`scroll`,n,!0),window.removeEventListener(`resize`,n)}},[s]),(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`button`,{ref:i,type:`button`,onClick:()=>s?r(null):c(),"aria-expanded":s,"aria-label":e?`Info: ${e}`:`More information`,className:`inline-flex items-center justify-center text-neutral-400 hover:text-accent dark:hover:text-primary transition-colors align-middle`,children:(0,I.jsx)(ke,{size:14})}),s&&typeof document<`u`&&(0,F.createPortal)((0,I.jsxs)(`div`,{ref:a,role:`dialog`,"aria-labelledby":e?o:void 0,style:{position:`fixed`,top:n.top,left:n.left,zIndex:60},className:`w-[min(20rem,calc(100vw-2rem))] rounded-md bg-white dark:bg-neutral-900 border border-neutral-200 dark:border-neutral-700 shadow-md p-3`,children:[e&&(0,I.jsx)(`div`,{id:o,className:`text-[12px] font-medium text-neutral-900 dark:text-neutral-50 mb-1`,children:e}),(0,I.jsx)(`p`,{className:`text-[12px] leading-relaxed text-neutral-600 dark:text-neutral-400`,children:t})]}),document.getElementById(`xspeed-app`)??document.body)]})}var wn={ok:`bg-success`,warn:`bg-warning`,fail:`bg-danger`,info:`bg-line-strong`};function Tn({tone:e,label:t,labelAfter:n,detail:r,trailing:i,first:a=!1}){return(0,I.jsxs)(`div`,{className:`flex items-start gap-3 px-4 sm:px-5 py-3.5 ${a?``:`border-t border-line`}`,children:[(0,I.jsx)(`span`,{className:`w-2 h-2 rounded-full mt-1.5 shrink-0 ${wn[e]}`}),(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,I.jsxs)(`div`,{className:`inline-flex items-center gap-1.5 text-[13px] font-medium text-ink`,children:[(0,I.jsx)(`span`,{children:t}),n]}),r!=null&&r!==``&&(0,I.jsx)(`div`,{className:`text-[12px] text-muted mt-0.5`,children:r})]}),i&&(0,I.jsx)(`div`,{className:`shrink-0`,children:i})]})}function En({content:e,tone:t=`neutral`}){let[n,r]=(0,y.useState)(!1);return(0,I.jsxs)(`div`,{className:`relative rounded ${t===`amber`?`bg-white dark:bg-neutral-900 border border-amber-200 dark:border-amber-900/60`:t===`blue`?`bg-primary-tint border border-line`:`bg-neutral-50 dark:bg-neutral-950 border border-neutral-200 dark:border-neutral-800`}`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:async()=>{try{await navigator.clipboard.writeText(e),r(!0),window.setTimeout(()=>r(!1),1800)}catch{}},className:`absolute top-2 right-2 inline-flex items-center gap-1 text-[11px] px-2 py-1 rounded border border-neutral-300 dark:border-neutral-700 bg-white/90 dark:bg-neutral-800/90 text-neutral-700 dark:text-neutral-200 hover:bg-neutral-100 dark:hover:bg-neutral-700 transition-colors`,"aria-label":n?`Snippet copied`:`Copy snippet`,children:[n?(0,I.jsx)(O,{size:12}):(0,I.jsx)(le,{size:12}),n?`Copied`:`Copy`]}),(0,I.jsx)(`pre`,{className:`text-[11px] font-mono p-3 pr-16 overflow-x-auto whitespace-pre text-neutral-800 dark:text-neutral-200`,children:e})]})}function Dn(e){if(!e)return`Never`;let t=Math.floor(Date.now()/1e3)-e;return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}var On={info:`bg-neutral-300 dark:bg-neutral-600`,warn:`bg-amber-500`,error:`bg-red-500`,success:`bg-emerald-500`};function kn({module:e}){let[t,n]=(0,y.useState)(null),[r,i]=(0,y.useState)(null);if((0,y.useEffect)(()=>{B.getModuleSettings(`health`).then(n).catch(e=>i(e instanceof Error?e.message:`Failed to load`))},[]),r)return(0,I.jsx)(`div`,{className:`text-[12px] text-red-600 dark:text-red-400`,children:r});if(!t)return(0,I.jsx)(`div`,{className:`text-[13px] text-neutral-500 dark:text-neutral-400`,children:`Loading…`});let{checks:a,stats:o,buckets:s,activity:c}=t;return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsx)(An,{stats:o,buckets:s}),(0,I.jsx)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg overflow-hidden`,children:a.map((e,t)=>(0,I.jsxs)(`div`,{children:[(0,I.jsx)(Tn,{first:t===0,tone:e.tone,label:e.label,detail:e.detail,labelAfter:e.id===`static_rewrite_nginx`?(0,I.jsx)(Cn,{title:`Good to know`,body:`You added this snippet to your nginx config yourself, so it's yours to manage — xSpeed never touches it. If you ever need to uninstall xSpeed, just remove this snippet from your nginx config first to keep everything tidy and your server running happily.`}):void 0}),e.snippet&&(0,I.jsx)(`div`,{className:`px-4 pb-4 pt-1 border-b border-neutral-200 dark:border-neutral-800 last:border-b-0`,children:(0,I.jsx)(En,{content:e.snippet})})]},e.id))}),(0,I.jsx)(Mn,{activity:c})]})}function An({stats:e,buckets:t}){let n=e.hits_24h+e.misses_24h,r=n>0?Math.round(e.hit_ratio*100):0;return(0,I.jsxs)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,I.jsx)(`div`,{className:`text-[11px] uppercase tracking-wider text-neutral-500 dark:text-neutral-400 font-medium`,children:`Hit ratio · 24h`}),(0,I.jsx)(S,{size:14,className:`text-neutral-400 dark:text-neutral-500`})]}),(0,I.jsxs)(`div`,{className:`flex items-baseline gap-3 mb-3`,children:[(0,I.jsx)(`div`,{className:`text-[28px] font-semibold text-neutral-900 dark:text-neutral-50 leading-none`,children:n>0?`${r}%`:`—`}),(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400`,children:n>0?`${e.hits_24h} hits · ${e.misses_24h} misses`:`No traffic captured in the last 24h yet.`})]}),(0,I.jsx)(jn,{buckets:t})]})}function jn({buckets:e}){if(!e.length)return(0,I.jsx)(`div`,{className:`h-8`});let t=Math.max(1,...e.map(e=>e.hits+e.misses)),n=480/Math.max(e.length-1,1),r=e.map((e,r)=>{let i=32-(e.hits+e.misses)/t*28-2;return`${(r*n).toFixed(1)},${i.toFixed(1)}`}).join(` `);return(0,I.jsx)(`svg`,{viewBox:`0 0 480 32`,preserveAspectRatio:`none`,className:`w-full h-8 text-accent`,role:`img`,"aria-label":`24-hour cache request volume`,children:(0,I.jsx)(`polyline`,{points:r,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})}function Mn({activity:e}){return e.length===0?(0,I.jsx)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-5 text-center text-[13px] text-neutral-500 dark:text-neutral-400`,children:`No activity yet.`}):(0,I.jsxs)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg overflow-hidden`,children:[(0,I.jsxs)(`div`,{className:`px-4 sm:px-5 py-3 border-b border-neutral-200 dark:border-neutral-800`,children:[(0,I.jsx)(`div`,{className:`font-medium text-[13px] text-neutral-900 dark:text-neutral-50`,children:`Recent activity`}),(0,I.jsxs)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400 mt-0.5`,children:[`Most recent `,e.length,` event`,e.length===1?``:`s`,` captured by the cache engine.`]})]}),(0,I.jsx)(`ul`,{className:`divide-y divide-neutral-200 dark:divide-neutral-800`,children:e.map((e,t)=>(0,I.jsxs)(`li`,{className:`px-4 sm:px-5 py-3 flex items-start gap-3`,children:[(0,I.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full mt-2 shrink-0 ${On[e.severity]}`}),(0,I.jsxs)(`div`,{className:`min-w-0 flex-1 flex items-baseline justify-between gap-3`,children:[(0,I.jsx)(`div`,{className:`text-[13px] text-neutral-700 dark:text-neutral-300 min-w-0 truncate`,children:e.message}),(0,I.jsx)(`div`,{className:`text-[11px] text-neutral-500 dark:text-neutral-400 shrink-0`,children:Dn(e.ts)})]})]},`${e.ts}-${t}`))})]})}var Nn=52,Pn=2*Math.PI*Nn;function Fn({percent:e,label:t}){let n=Math.max(0,Math.min(100,Math.round(e))),[r,i]=(0,y.useState)(!1);(0,y.useEffect)(()=>{let e=window.requestAnimationFrame(()=>i(!0));return()=>window.cancelAnimationFrame(e)},[]);let a=r?Pn*(1-n/100):Pn;return(0,I.jsxs)(`div`,{className:`relative inline-flex items-center justify-center`,role:`img`,"aria-label":`${t}: ${n}%`,children:[(0,I.jsxs)(`svg`,{width:`128`,height:`128`,viewBox:`0 0 128 128`,children:[(0,I.jsx)(`circle`,{cx:`64`,cy:`64`,r:Nn,fill:`none`,stroke:`var(--panel)`,strokeWidth:`10`}),(0,I.jsx)(`circle`,{cx:`64`,cy:`64`,r:Nn,fill:`none`,stroke:`var(--primary)`,strokeWidth:`10`,strokeLinecap:`round`,strokeDasharray:Pn,strokeDashoffset:a,transform:`rotate(-90 64 64)`,style:{transition:`stroke-dashoffset 900ms ease-out`}})]}),(0,I.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center`,children:[(0,I.jsxs)(`span`,{className:`font-display text-[26px] font-semibold text-ink tabular-nums`,children:[n,`%`]}),(0,I.jsx)(`span`,{className:`text-[11px] text-muted`,children:t})]})]})}function In({getModule:e}){let t=window.XSpeedConfig?.bootstrap,n=t?.status?.stats,r=t?.settings?.cache_enabled===!0,i=parseInt(ln(n?.hit_ratio),10)||0,a=t=>e?.(t)?.settings?.enabled===!0,o=[r,a(`object-cache`),a(`browser-cache`),a(`preloader`)],s=Math.round(o.filter(Boolean).length/o.length*100),c=(n?.hits_24h??0)+(n?.misses_24h??0),l=[{label:L(`Cache coverage`),value:`${s}%`,hint:L(`of cache features on`)},{label:L(`Cached pages`),value:cn(n?.cached_pages),hint:L(`served without PHP`)},{label:L(`Cache size`),value:dn(n?.cache_size),hint:L(`on disk`)},{label:L(`Requests (24h)`),value:cn(c),hint:L(`hits + misses`)}];return(0,I.jsx)(`section`,{className:`rounded-card border border-line bg-paper p-5`,"aria-label":L(`Health summary`),children:(0,I.jsxs)(`div`,{className:`flex flex-col sm:flex-row items-center gap-6`,children:[(0,I.jsx)(Fn,{percent:i,label:L(`Hit ratio`)}),(0,I.jsx)(`div`,{className:`flex-1 grid grid-cols-2 lg:grid-cols-4 gap-4 w-full`,children:l.map(e=>(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`p`,{className:`text-[12px] text-ink-soft`,children:e.label}),(0,I.jsx)(`p`,{className:`mt-0.5 font-display text-[20px] font-semibold text-ink tabular-nums`,children:e.value}),(0,I.jsx)(`p`,{className:`text-[11px] text-muted`,children:e.hint})]},e.label))})]})})}function Ln({items:e,value:t,onChange:n,idBase:r}){let i=(0,y.useId)(),a=r??i;function o(r){let i=e.findIndex(e=>e.key===t);if(i===-1)return;let a=e[(i+r+e.length)%e.length];n(a.key)}return(0,I.jsx)(`div`,{role:`tablist`,className:`flex items-center gap-1 border-b border-neutral-200 dark:border-neutral-800`,onKeyDown:e=>{e.key===`ArrowRight`?(e.preventDefault(),o(1)):e.key===`ArrowLeft`&&(e.preventDefault(),o(-1))},children:e.map(e=>{let r=e.key===t;return(0,I.jsx)(`button`,{id:Rn(a,e.key),role:`tab`,type:`button`,"aria-selected":r,"aria-controls":zn(a,e.key),tabIndex:r?0:-1,onClick:()=>n(e.key),className:`text-[12px] px-3 py-1.5 -mb-px border-b-2 transition-colors ${r?`border-accent text-neutral-900 dark:text-neutral-50 font-medium`:`border-transparent text-neutral-500 dark:text-neutral-400 hover:text-neutral-700 dark:hover:text-neutral-200`} ${e.locked?`opacity-70`:``}`,children:(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e.label,e.locked&&(0,I.jsx)(`span`,{"aria-hidden":`true`,className:`inline-block w-[10px] h-[10px] rounded-[2px] bg-amber-400/80`,title:`Pro`})]})},e.key)})})}function Rn(e,t){return`xspeed-tab-${e}-${t}`}function zn(e,t){return`xspeed-tabpanel-${e}-${t}`}var Bn=`https://xspeedcache.com/pricing/`,Vn=`admin.php?page=xspeed#/settings/license`,Hn={"critical-css":{id:`critical-css`,icon:`Sparkles`,title:`Critical CSS`,body:`Inline above-the-fold styles and defer the rest. Cuts first paint on theme-heavy pages by 30-60%.`},"unused-css":{id:`unused-css`,icon:`Scissors`,title:`Remove Unused CSS`,body:`Per-URL pruned stylesheet inlined; original <link> tags stripped. Pairs with Critical CSS.`},"webp-avif":{id:`webp-avif`,icon:`Replace`,title:`Auto WebP / AVIF on upload`,body:`New JPEG/PNG uploads get .webp + .avif siblings; browsers that support modern formats get them automatically.`},"cloudflare-apo":{id:`cloudflare-apo`,icon:`Zap`,title:`Cloudflare APO + edge cache`,body:`Toggle Automatic Platform Optimization right from here, set edge cache TTL, no separate dashboard.`},"feed-cache":{id:`feed-cache`,icon:`Rss`,title:`Feed caching`,body:`Cache RSS / Atom / comment feeds so aggregators polling your feed skip a full render — with the correct feed content-type preserved and auto-purge on new posts.`},"cache-404":{id:`cache-404`,icon:`FileX`,title:`404 caching`,body:`Serve one short-lived cached 404 so bot and scanner floods on nonexistent URLs don't each trigger a full render. Shared entry, correct 404 status, purged when you publish.`},"search-cache":{id:`search-cache`,icon:`Search`,title:`Search caching`,body:`Cache internal search-results pages (/?s=…) so popular repeated searches skip a full query + render. Keyed per term, short-lived, and purged when you publish new content.`},"rest-cache":{id:`rest-cache`,icon:`Webhook`,title:`REST API per-route cache`,body:`Cache read-only REST responses with a TTL you set per route — ideal for headless front-ends and app backends. Authenticated and write requests are never cached.`},"prewarm-schedule":{id:`prewarm-schedule`,icon:`CalendarClock`,title:`Scheduled prewarming`,body:`Warm target URLs ahead of a post going live, a sale, or a campaign so the traffic spike hits a warm cache. One-off, recurring, and auto-warm when a scheduled post publishes.`},"predictive-warm":{id:`predictive-warm`,icon:`TrendingUp`,title:`Predictive warming`,body:`Proactively warm the pages most likely to be visited next — ranked by real traffic, recency, and content — so your hottest URLs are always served from cache, not a cold render.`},brotli:{id:`brotli`,icon:`Shrink`,title:`Brotli compression`,body:`Serve Brotli where the browser and server support it — typically 15-25% smaller than GZIP — with automatic GZIP fallback.`},rum:{id:`rum`,icon:`Eye`,title:`Real-User Monitoring`,body:`See actual LCP / CLS / INP from your visitors’ browsers, not synthetic Lighthouse. Per-URL percentiles.`},pagespeed:{id:`pagespeed`,icon:`Gauge`,title:`PageSpeed Insights, in-dashboard`,body:`Run Google PSI on any URL without leaving xSpeed. Scores + Core Web Vitals + cached for 24h.`},recommendations:{id:`recommendations`,icon:`Lightbulb`,title:`Smart recommendations`,body:`Pro audits your current settings + server state and surfaces the 5 things most likely to move your score.`},analytics:{id:`analytics`,icon:`BarChart3`,title:`Per-URL cache analytics`,body:`Slowest pages, hit-ratio chart, recent activity timeline. Powered by the RUM data you’re already collecting.`},migration:{id:`migration`,icon:`Import`,title:`One-click migration`,body:`Import settings from WP Rocket, W3 Total Cache, or WP Super Cache. No manual reconfiguration.`},"white-label":{id:`white-label`,icon:`Tag`,title:`White-label dashboard`,body:`Rebrand the plugin name, footer credit, and help links for client work.`},multisite:{id:`multisite`,icon:`Network`,title:`Multisite network view`,body:`One dashboard across every site in your network with per-site cache state and network-wide purge.`},"custom-rules":{id:`custom-rules`,icon:`Filter`,title:`Pattern-based cache rules`,body:`Bypass cache or override expiry by URL glob, post type, category, tag, or author — beyond per-post settings.`}};function Un({icon:e,title:t,description:n,teaser:r}){let i=r?Hn[r]:null,a=Jt()===`unlicensed`,o={card:`border-line bg-primary-tint`,iconWrap:`bg-paper border-line text-primary`,badge:`text-primary bg-paper border-line`,cta:`bg-primary hover:bg-primary-hover text-on-primary`};return(0,I.jsx)(`div`,{className:`border rounded-card p-4 sm:p-5 ${o.card}`,children:(0,I.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,I.jsx)(`div`,{className:`shrink-0 w-9 h-9 rounded-full border flex items-center justify-center ${o.iconWrap}`,children:(0,I.jsx)(Ct,{name:e,size:17})}),(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2 mb-0.5`,children:[(0,I.jsx)(`h3`,{className:`text-[14px] font-semibold text-ink`,children:t}),(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[10px] uppercase tracking-wider font-medium border rounded-full px-1.5 py-0.5 ${o.badge}`,children:[a?(0,I.jsx)(Ae,{size:9}):(0,I.jsx)(Ie,{size:9}),(0,I.jsx)(`span`,{children:L(a?`License`:`Pro`)})]})]}),n&&(0,I.jsx)(`p`,{className:`text-[12px] text-ink-soft leading-relaxed`,children:n}),i&&(0,I.jsx)(`p`,{className:`text-[12px] text-muted mt-2 leading-relaxed`,children:i.body}),a?(0,I.jsxs)(`a`,{href:Vn,className:`inline-flex items-center gap-1.5 mt-3 px-3 py-1.5 rounded-md text-[12px] font-medium transition-colors ${o.cta}`,children:[L(`Activate your license`),(0,I.jsx)(w,{size:12})]}):(0,I.jsxs)(`a`,{href:Bn,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1.5 mt-3 px-3 py-1.5 rounded-md text-[12px] font-medium transition-colors ${o.cta}`,children:[L(`Upgrade to Pro`),(0,I.jsx)(w,{size:12})]})]})]})})}function H({panel:e,slug:t,getModule:n,onSaved:r,title:i,description:a,icon:o}){Vt();let s=Kt(),c=wt.find(e=>e.slug===t),l=(0,I.jsx)(Un,{icon:o??c?.icon??`Sparkles`,title:i??c?.label??t,description:a??c?.description,teaser:c?.teaser??void 0});if(s!==`pro`&&s!==`trial`)return l;let u=n?.(t);if(!u)return l;let d=e?zt(e):void 0;return d?(0,I.jsx)(d,{module:u,onSaved:r}):e?l:(0,I.jsx)(Qi,{module:u,onSaved:r})}var Wn={"ai-provider":{id:`ai-provider`,title:`One AI connection, every AI feature`,subtitle:`Connect OpenAI, Anthropic, Gemini, or OpenRouter once — every Pro AI feature shares the same key, no per-feature setup.`,icon:`Sparkles`,mock:{kind:`toggles`,rows:[{label:`OpenAI`,on:!0,stat:`connected`},{label:`Anthropic`,on:!1,stat:`available`},{label:`Google Gemini`,on:!1,stat:`available`},{label:`OpenRouter`,on:!1,stat:`available`}]},points:[{icon:`Sparkles`,text:`Connect one provider; Speculation Rules, AI Suggestions, and Adaptive Cache all use it.`},{icon:`Lock`,text:`Your key stays on your server — stored in wp-config or the database, never shipped to us.`},{icon:`Check`,text:`Swap providers any time without reconfiguring each feature.`}]},"adaptive-cache":{id:`adaptive-cache`,title:`Cache TTL that tunes itself`,subtitle:`xSpeed reads your last 24 hours of traffic and recommends the cache lifetime that balances freshness against hit-rate — applied in one click.`,icon:`Lightbulb`,mock:{kind:`chart`,headline:`+18%`,headlineNote:`projected hit-rate at the suggested TTL`,bars:[{label:`Now`,value:71},{label:`Suggested`,value:89}]},points:[{icon:`Lightbulb`,text:`AI-tuned TTL from real 24-hour traffic patterns — no more guessing a number.`},{icon:`Check`,text:`Review the recommendation, then apply it into the Cache module in one click.`}]},"coverage-what":{id:`coverage-what`,title:`Cache more than HTML pages`,subtitle:`Page Cache serves anonymous HTML. Pro extends that to the requests that quietly cost you the most renders.`,icon:`Layers`,mock:{kind:`toggles`,rows:[{label:`404 Caching`,on:!0,stat:`3,180 bot hits absorbed`},{label:`Search Caching`,on:!0,stat:`/?s= results cached`}]},points:[{icon:`FileX`,text:`Serve one shared cached 404 so scanner floods stop costing a render each.`},{icon:`Search`,text:`Cache internal search pages (/?s=…), keyed per term, purged on publish.`},{icon:`ShieldCheck`,text:`Correct status codes preserved; auto-purge when you publish new content.`}]},"coverage-beyond":{id:`coverage-beyond`,title:`Cache feeds & API responses`,subtitle:`Aggregators and headless front-ends hammer endpoints Page Cache never touches. Pro caches those too.`,icon:`Rss`,mock:{kind:`toggles`,rows:[{label:`Feed Caching (RSS / Atom)`,on:!0,stat:`content-type preserved`},{label:`REST API Cache`,on:!0,stat:`per-route TTL`}]},points:[{icon:`Rss`,text:`Cache RSS / Atom / comment feeds so polling aggregators skip a full render.`},{icon:`Webhook`,text:`Cache read-only REST routes with a TTL you set — built for headless sites.`},{icon:`Lock`,text:`Authenticated and write requests are never cached.`}]},"coverage-rules":{id:`coverage-rules`,title:`Bypass & override by rule`,subtitle:`Go past per-post toggles: shape caching with patterns, and stand down cleanly during maintenance.`,icon:`Filter`,mock:{kind:`code`,code:[`BYPASS /cart/* (never cache)`,`BYPASS post_type=product when logged in`,`EXPIRE /blog/* override → 12h`,`MAINT. coming-soon mode → skip + auto-purge on go-live`]},points:[{icon:`Filter`,text:`Bypass or override expiry by URL glob, post type, category, tag, or author.`},{icon:`Wrench`,text:`Skip caching in maintenance / coming-soon mode, auto-purge when live again.`}]},"media-formats":{id:`media-formats`,title:`Modern image formats, automatically`,subtitle:`Every new upload gets lighter WebP + AVIF siblings, served to the browsers that support them.`,icon:`Replace`,mock:{kind:`formats`,badges:[`JPEG`,`WebP`,`AVIF`],headline:`−62%`,headlineNote:`typical transfer saved vs original JPEG`},points:[{icon:`Replace`,text:`New JPEG/PNG uploads get .webp + .avif siblings generated automatically.`},{icon:`Zap`,text:`Browsers that support modern formats get them; others fall back cleanly.`}]},"media-smart":{id:`media-smart`,title:`AI-tuned image settings`,subtitle:`Let xSpeed recommend the format and quality for each image, then apply it into Image Optimization in one click.`,icon:`Sparkles`,mock:{kind:`toggles`,rows:[{label:`hero.jpg → AVIF @ 72`,on:!0,stat:`−240 KB`},{label:`logo.png → WebP lossless`,on:!0,stat:`−31 KB`}]},points:[{icon:`Sparkles`,text:`AI recommends the best format + quality per image, not a blanket setting.`},{icon:`Check`,text:`Review the suggestions, then apply them all with one click.`}]},"compression-brotli":{id:`compression-brotli`,title:`Brotli compression`,subtitle:`Smaller than GZIP where the browser supports it — with automatic GZIP fallback everywhere else.`,icon:`Shrink`,mock:{kind:`chart`,headline:`−21%`,headlineNote:`smaller responses vs GZIP (typical)`,bars:[{label:`None`,value:100},{label:`GZIP`,value:34},{label:`Brotli`,value:27}]},points:[{icon:`Shrink`,text:`Serve Brotli where the browser and server support it — typically 15–25% smaller.`},{icon:`ShieldCheck`,text:`Automatic GZIP fallback, so nothing breaks on older clients.`}]},"cssjs-critical":{id:`cssjs-critical`,title:`Inline critical CSS, defer the rest`,subtitle:`Send only the styles the first screen needs up front so the page paints without waiting on the full stylesheet.`,icon:`Sparkles`,mock:{kind:`chart`,headline:`−48%`,headlineNote:`render-blocking CSS on first paint`,bars:[{label:`Before`,value:100},{label:`Critical`,value:52}]},points:[{icon:`Sparkles`,text:`Inline above-the-fold CSS and defer the rest — cuts first paint 30–60%.`},{icon:`Gauge`,text:`Pluggable generator endpoint; regenerates when your theme changes.`}]},"cssjs-unused":{id:`cssjs-unused`,title:`Strip the CSS a page never uses`,subtitle:`Most themes ship one giant stylesheet for the whole site. Pro serves each URL only the rules it actually needs.`,icon:`Scissors`,mock:{kind:`chart`,headline:`−71%`,headlineNote:`stylesheet bytes on a typical post`,bars:[{label:`Full CSS`,value:100},{label:`Pruned`,value:29}]},points:[{icon:`Scissors`,text:`Per-URL pruned stylesheet inlined; original <link> tags stripped.`},{icon:`Sparkles`,text:`Pairs with Critical CSS for the smallest possible first paint.`}]},"health-pagespeed":{id:`health-pagespeed`,title:`Real scores, in your dashboard`,subtitle:`Run Google PageSpeed on any URL and watch Core Web Vitals from real visitors — without leaving xSpeed.`,icon:`Gauge`,mock:{kind:`chart`,headline:`98`,headlineNote:`PageSpeed score · mobile`,bars:[{label:`LCP`,value:92},{label:`CLS`,value:99},{label:`INP`,value:95}]},points:[{icon:`Gauge`,text:`Run Google PSI on any URL — scores + Core Web Vitals, cached 24h.`},{icon:`Eye`,text:`Real-User Monitoring: LCP / CLS / INP from actual visitors, per-URL percentiles.`},{icon:`HeartPulse`,text:`Performance Health flags regressions against a 7-day baseline.`}]},"hints-speculation":{id:`hints-speculation`,title:`Prefetch the next page, before the click`,subtitle:`xSpeed predicts where each visitor is headed and quietly prefetches it via Chrome’s Speculation Rules API — so the next page feels instant.`,icon:`Wand2`,mock:{kind:`toggles`,rows:[{label:`Prefetch on hover / viewport`,on:!0,stat:`eager`},{label:`Prerender top predicted page`,on:!0,stat:`moderate`}]},points:[{icon:`Wand2`,text:`Predict each visitor’s next page and prefetch it via Speculation Rules.`},{icon:`Zap`,text:`The next navigation feels instant — the page is already there.`}]},"network-cloudflare":{id:`network-cloudflare`,title:`Drive Cloudflare from here`,subtitle:`Toggle Automatic Platform Optimization and edge cache without a second dashboard.`,icon:`Zap`,mock:{kind:`toggles`,rows:[{label:`Automatic Platform Optimization`,on:!0,stat:`edge HTML cache`},{label:`Edge cache TTL`,on:!0,stat:`4 hours`}]},points:[{icon:`Zap`,text:`Toggle APO, set edge cache level and TTL from inside xSpeed.`},{icon:`RefreshCw`,text:`Edge purge stays in sync with your local cache purges.`}]},"preloader-scheduled":{id:`preloader-scheduled`,title:`Warm the cache before the traffic`,subtitle:`Schedule warm-ups around launches, sales, and scheduled posts so the spike hits a warm cache — never a cold render.`,icon:`CalendarClock`,mock:{kind:`toggles`,rows:[{label:`Nightly full-site warm`,on:!0,stat:`02:00`},{label:`On scheduled-post publish`,on:!0,stat:`auto`},{label:`One-off: /black-friday`,on:!0,stat:`Fri 08:00`}]},points:[{icon:`CalendarClock`,text:`Warm target URLs ahead of a post, sale, or campaign going live.`},{icon:`RefreshCw`,text:`One-off, recurring, and auto-warm when a scheduled post publishes.`}]},"preloader-predictive":{id:`preloader-predictive`,title:`Keep the hottest pages always warm`,subtitle:`Let xSpeed rank your URLs by real traffic, recency, and content, and warm the ones most likely to be hit next.`,icon:`TrendingUp`,mock:{kind:`toggles`,rows:[{label:`/pricing`,on:!0,stat:`rank #1 · warm`},{label:`/blog/new-release`,on:!0,stat:`rank #2 · warm`},{label:`/features`,on:!0,stat:`rank #3 · warm`}]},points:[{icon:`TrendingUp`,text:`Proactively warm the pages most likely to be visited next.`},{icon:`BarChart3`,text:`Ranked by real traffic, recency, and content — no manual list to maintain.`}]},"health-visitors":{id:`health-visitors`,title:`Measure real visitors, not lab tests`,subtitle:`A lightweight beacon samples Core Web Vitals from your actual visitors’ browsers — the numbers Google ranks on.`,icon:`Eye`,mock:{kind:`chart`,headline:`p75`,headlineNote:`real-user Core Web Vitals`,bars:[{label:`LCP`,value:88},{label:`CLS`,value:96},{label:`INP`,value:91}]},points:[{icon:`Eye`,text:`Sample LCP / FCP / CLS / INP / TTFB from real visitors, per-URL percentiles.`},{icon:`BarChart3`,text:`See which pages actually feel slow — powered by the data you already collect.`}]}};function Gn(e){return Wn[e]}function Kn({id:e}){let t=Gn(e),n=Jt()===`unlicensed`;if(!t)return null;let r={frame:`border-line bg-primary-tint`,iconWrap:`bg-paper border-line text-primary`,badge:`text-primary bg-paper border-line`,cta:`bg-primary hover:bg-primary-hover text-on-primary`,accent:`text-primary`,check:`text-primary`};return(0,I.jsxs)(`div`,{className:`border rounded-card overflow-hidden ${r.frame}`,children:[(0,I.jsxs)(`div`,{className:`flex items-start gap-3 p-4 sm:p-5 pb-3`,children:[(0,I.jsx)(`div`,{className:`shrink-0 w-9 h-9 rounded-full border flex items-center justify-center ${r.iconWrap}`,children:(0,I.jsx)(Ct,{name:t.icon,size:17})}),(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2 mb-0.5`,children:[(0,I.jsx)(`h3`,{className:`text-[14px] font-semibold text-ink`,children:t.title}),(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[10px] uppercase tracking-wider font-medium border rounded-full px-1.5 py-0.5 ${r.badge}`,children:[n?(0,I.jsx)(Ae,{size:9}):(0,I.jsx)(Ie,{size:9}),(0,I.jsx)(`span`,{children:L(n?`License`:`Pro`)})]})]}),(0,I.jsx)(`p`,{className:`text-[12px] text-ink-soft leading-relaxed`,children:t.subtitle})]})]}),(0,I.jsx)(`div`,{className:`px-4 sm:px-5`,children:(0,I.jsx)(qn,{mock:t.mock,accent:r.accent})}),(0,I.jsxs)(`div`,{className:`p-4 sm:p-5 pt-4`,children:[(0,I.jsx)(`ul`,{className:`space-y-2`,children:t.points.map((e,t)=>(0,I.jsxs)(`li`,{className:`flex items-start gap-2.5`,children:[(0,I.jsx)(O,{size:15,className:`shrink-0 mt-0.5 ${r.check}`,strokeWidth:2.5}),(0,I.jsx)(`span`,{className:`text-[12px] text-ink-soft leading-relaxed`,children:e.text})]},t))}),n?(0,I.jsxs)(`a`,{href:Vn,className:`inline-flex items-center gap-1.5 mt-4 px-3.5 py-2 rounded-md text-[12px] font-medium transition-colors ${r.cta}`,children:[L(`Activate your license`),(0,I.jsx)(w,{size:12})]}):(0,I.jsxs)(`a`,{href:Bn,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1.5 mt-4 px-3.5 py-2 rounded-md text-[12px] font-medium transition-colors ${r.cta}`,children:[L(`Upgrade to Pro`),(0,I.jsx)(w,{size:12})]})]})]})}function qn({mock:e,accent:t}){return(0,I.jsxs)(`div`,{className:`relative rounded-card border border-line bg-panel p-3.5 overflow-hidden`,children:[(0,I.jsxs)(`div`,{className:`absolute right-2 top-2 z-10 flex items-center gap-1 rounded-full bg-paper border border-line px-1.5 py-0.5 text-[9px] uppercase tracking-wider text-faint`,children:[(0,I.jsx)(Ie,{size:8}),L(`Preview`)]}),(0,I.jsxs)(`div`,{"aria-hidden":`true`,className:`select-none`,children:[e.kind===`toggles`&&(0,I.jsx)(Jn,{mock:e,accent:t}),e.kind===`chart`&&(0,I.jsx)(Yn,{mock:e,accent:t}),e.kind===`code`&&(0,I.jsx)(Xn,{mock:e}),e.kind===`formats`&&(0,I.jsx)(Zn,{mock:e,accent:t})]})]})}function Jn({mock:e,accent:t}){return(0,I.jsx)(`div`,{className:`space-y-2`,children:(e.rows??[]).map((e,n)=>(0,I.jsxs)(`div`,{className:`flex items-center gap-3 rounded-md bg-paper border border-line px-3 py-2`,children:[(0,I.jsx)(`span`,{className:`relative inline-flex shrink-0 w-9 h-5 items-center rounded-full ${e.on?`bg-primary`:`bg-line-strong`}`,children:(0,I.jsx)(`span`,{className:`inline-block w-4 h-4 rounded-full bg-white shadow-sm transform ${e.on?`translate-x-[18px]`:`translate-x-0.5`}`})}),(0,I.jsx)(`span`,{className:`text-[12px] font-medium text-ink flex-1 min-w-0 truncate`,children:e.label}),e.stat&&(0,I.jsx)(`span`,{className:`text-[11px] font-medium tabular-nums ${t}`,children:e.stat})]},n))})}function Yn({mock:e,accent:t}){let n=e.bars??[];return(0,I.jsxs)(`div`,{className:`flex items-end gap-4`,children:[e.headline&&(0,I.jsxs)(`div`,{className:`shrink-0`,children:[(0,I.jsx)(`div`,{className:`text-[26px] font-bold leading-none tabular-nums ${t}`,children:e.headline}),e.headlineNote&&(0,I.jsx)(`div`,{className:`text-[10px] text-muted mt-1 max-w-[130px] leading-snug`,children:e.headlineNote})]}),(0,I.jsx)(`div`,{className:`flex-1 flex items-end justify-around gap-2 h-[64px]`,children:n.map((e,t)=>(0,I.jsxs)(`div`,{className:`flex flex-col items-center gap-1 flex-1 h-full justify-end`,children:[(0,I.jsx)(`div`,{className:`w-full rounded-t ${t===n.length-1?`bg-primary`:`bg-line-strong`}`,style:{height:`${Math.max(6,e.value)}%`}}),(0,I.jsx)(`span`,{className:`text-[9px] text-muted truncate max-w-full`,children:e.label})]},t))})]})}function Xn({mock:e}){return(0,I.jsx)(`div`,{className:`font-mono text-[11px] leading-relaxed text-ink-soft space-y-0.5 overflow-x-auto`,children:(e.code??[]).map((e,t)=>(0,I.jsx)(`div`,{className:`whitespace-pre`,children:e},t))})}function Zn({mock:e,accent:t}){let n=e.badges??[];return(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,I.jsx)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:n.map((e,t)=>{let r=t===n.length-1;return(0,I.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,I.jsx)(`span`,{className:`rounded-md border px-2 py-1 text-[11px] font-semibold ${r?`border-primary/40 bg-primary/10 text-primary`:`border-line bg-paper text-muted`}`,children:e}),!r&&(0,I.jsx)(`span`,{className:`text-faint text-[11px]`,children:`→`})]},t)})}),e.headline&&(0,I.jsxs)(`div`,{className:`text-right shrink-0`,children:[(0,I.jsx)(`div`,{className:`text-[22px] font-bold leading-none tabular-nums ${t}`,children:e.headline}),e.headlineNote&&(0,I.jsx)(`div`,{className:`text-[10px] text-muted mt-1 max-w-[130px] leading-snug`,children:e.headlineNote})]})]})}function Qn({demo:e,children:t}){return qt()?(0,I.jsx)(I.Fragment,{children:t}):(0,I.jsx)(Kn,{id:e})}var $n=[{key:`cache`,label:`Overview`},{key:`visitors`,label:`Visitors`,locked:!0},{key:`pagespeed`,label:`PageSpeed`,locked:!0}],er=`cache`,tr=new Set($n.map(e=>e.key));function nr({module:e,onSaved:t,subtab:n,onSubtabChange:r,getModule:i}){let a=Kt(),o=a===`pro`||a===`trial`,s=$n.map(e=>({...e,locked:e.locked&&!o})),c=n&&tr.has(n)?n:er;return(0,y.useEffect)(()=>{n&&!tr.has(n)&&r?.(er)},[n,r]),(0,I.jsxs)(`div`,{className:`space-y-5`,children:[(0,I.jsx)(In,{getModule:i}),(0,I.jsx)(H,{panel:`RecommendationsPanel`,slug:`recommendations`,getModule:i,onSaved:t}),(0,I.jsx)(Ln,{items:s,value:c,onChange:e=>r?.(e),idBase:`health`}),c===`cache`&&(0,I.jsxs)(`div`,{className:`space-y-5`,children:[(0,I.jsx)(kn,{module:e}),(0,I.jsx)(H,{panel:`AnalyticsPanel`,slug:`analytics`,getModule:i,onSaved:t})]}),c===`visitors`&&(0,I.jsx)(Qn,{demo:`health-visitors`,children:(0,I.jsx)(`div`,{className:`space-y-5`,children:(0,I.jsx)(H,{panel:`RumPanel`,slug:`rum`,getModule:i,onSaved:t})})}),c===`pagespeed`&&(0,I.jsxs)(`div`,{className:`space-y-5`,children:[(0,I.jsx)(H,{panel:`PageSpeedPanel`,slug:`pagespeed`,getModule:i,onSaved:t}),(0,I.jsx)(H,{panel:`PerformanceHealthPanel`,slug:`performance-health`,getModule:i,onSaved:t})]})]})}function rr({state:e}){let[t,n]=(0,y.useState)(null),r=(0,y.useRef)(`saving`);if((e===`saving`||e===`saved`)&&(r.current=e),(0,y.useEffect)(()=>{if(typeof document>`u`)return;let e=document.getElementById(`xspeed-toast-host`);if(!e){let t=document.getElementById(`xspeed-app`);if(!t)return;e=document.createElement(`div`),e.id=`xspeed-toast-host`,t.appendChild(e)}n(e)},[]),!t)return null;let i=e!==`idle`,a=e===`saved`||e===`idle`&&r.current===`saved`;return(0,F.createPortal)((0,I.jsx)(`div`,{"aria-hidden":!i,className:`fixed bottom-6 left-1/2 -translate-x-1/2 z-50 pointer-events-none transition-opacity duration-150 ${i?`opacity-100`:`opacity-0`}`,children:(0,I.jsx)(`div`,{className:`flex items-center gap-2 px-4 py-2 rounded-full border shadow-md text-[12px] font-medium ${a?`bg-emerald-50 dark:bg-emerald-950/60 border-emerald-200 dark:border-emerald-800 text-emerald-700 dark:text-emerald-300`:`bg-white dark:bg-neutral-900 border-neutral-200 dark:border-neutral-700 text-neutral-600 dark:text-neutral-300`}`,children:a?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(O,{size:14,className:`text-emerald-600 dark:text-emerald-400`}),(0,I.jsx)(`span`,{children:L(`Settings saved`)})]}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Fe,{size:13,className:`animate-spin text-neutral-400 dark:text-neutral-500`}),(0,I.jsx)(`span`,{children:L(`Saving changes…`)})]})})}),t)}var ir=1500;function ar({saving:e}){let[t,n]=(0,y.useState)(`idle`),r=(0,y.useRef)(`idle`),i=(0,y.useRef)(!1),a=(0,y.useRef)(null);return(0,y.useEffect)(()=>{r.current=t},[t]),(0,y.useEffect)(()=>{if(e){r.current!==`saved`&&(a.current&&=(window.clearTimeout(a.current),null),n(`saving`)),i.current=!0;return}i.current&&(i.current=!1,n(`saved`),a.current&&window.clearTimeout(a.current),a.current=window.setTimeout(()=>{n(`idle`),a.current=null},ir))},[e]),(0,y.useEffect)(()=>()=>{a.current&&window.clearTimeout(a.current)},[]),(0,I.jsx)(rr,{state:t})}function or(e,t,n){let r={...t},i=!1,a=new Set([...Object.keys(t),...Object.keys(n),...Object.keys(e)]);for(let o of a)sr(n[o],e[o])?Object.prototype.hasOwnProperty.call(t,o)?r[o]=t[o]:r[o]=n[o]:(r[o]=n[o],i=!0);return{next:r,dirty:i}}function sr(e,t){if(e===t)return!0;if(e===null||t===null||e===void 0||t===void 0||typeof e!=`object`||typeof t!=`object`)return!1;try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}}var cr=4e3;function lr({module:e,onSaved:t}){let[n,r]=(0,y.useState)(e.settings),[i,a]=(0,y.useState)(null),[o,s]=(0,y.useState)(!1),[c,l]=(0,y.useState)(null),[u,d]=(0,y.useState)(null),f=(0,y.useRef)(null),p=(0,y.useRef)(!0),m=(0,y.useRef)(JSON.stringify(e.settings)),h=(0,y.useRef)(n);(0,y.useEffect)(()=>{h.current=n},[n]),(0,y.useEffect)(()=>{let e=!1,t=async()=>{try{let t=await B.request(`/preloader/status`);e||a(t)}catch{}};t();let n=window.setInterval(()=>{i?.running&&t()},cr);return()=>{e=!0,window.clearInterval(n)}},[i?.running]),(0,y.useEffect)(()=>{if(p.current){p.current=!1;return}if(JSON.stringify(n)!==m.current)return f.current&&window.clearTimeout(f.current),f.current=window.setTimeout(async()=>{s(!0);let i=n;try{let{next:n,dirty:a}=or(i,await B.updateModuleSettings(e.slug,i),h.current);r(n),m.current=a?``:JSON.stringify(n),t?.(n)}catch(e){l(e instanceof Error?e.message:`Save failed`)}finally{s(!1)}},600),()=>{f.current&&window.clearTimeout(f.current)}},[n,e.slug]);let g=(e,t)=>r(n=>({...n,[e]:t})),_=(0,y.useMemo)(()=>Object.entries(e.schema),[e.schema]);return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsx)(ur,{state:i,enabled:!!n.enabled,percent:i&&i.total>0?Math.round(i.processed/i.total*100):0,actioning:u,onStart:async()=>{d(`start`),l(null);try{a(await B.request(`/preloader/start`,{method:`POST`}))}catch(e){l(e instanceof Error?e.message:`Failed to start`)}finally{d(null)}},onStop:async()=>{d(`stop`);try{a(await B.request(`/preloader/stop`,{method:`POST`}))}catch(e){l(e instanceof Error?e.message:`Failed to stop`)}finally{d(null)}}}),c&&(0,I.jsx)(V,{tone:`danger`,title:`Preloader error`,body:c}),(0,I.jsx)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg overflow-hidden`,children:_.map(([e,t],r)=>(0,I.jsx)(dr,{fieldKey:e,spec:t,value:n[e],onChange:t=>g(e,t),first:r===0},e))}),(0,I.jsx)(ar,{saving:o})]})}function ur({state:e,enabled:t,percent:n,actioning:r,onStart:i,onStop:a}){let o=!!e?.running,s=!!(e&&(e.total>0||e.finished_at>0)),c=e?.sitemap_error??``,l=e?.source===`fallback`,u=!!c&&!l&&e?.total===0;return(0,I.jsxs)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-4 mb-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,I.jsx)(`span`,{className:`w-2 h-2 rounded-full shrink-0 ${o?`bg-accent animate-pulse`:t?`bg-emerald-500`:`bg-neutral-300 dark:bg-neutral-600`}`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50`,children:o?`Crawling…`:u?`Couldn't start`:t?`Ready`:`Disabled`}),(0,I.jsx)(`div`,{className:`text-[12px] ${u?`text-amber-700 dark:text-amber-400`:`text-neutral-500 dark:text-neutral-400`}`,children:e?u?c:s?`${e.processed} / ${e.total} URLs warmed${e.errors.length>0?` · ${e.errors.length} error${e.errors.length===1?``:`s`}`:``}`:t?`No crawl yet. Hit "Start now" to warm the cache.`:`Enable below, then start a crawl.`:`Loading…`}),l&&(0,I.jsx)(`div`,{className:`text-[12px] text-amber-700 dark:text-amber-400 mt-0.5`,children:o?`Warming from site content — the sitemap couldn’t be read.`:`Warmed from site content — the sitemap couldn’t be read.`})]})]}),(0,I.jsx)(`div`,{className:`flex items-center gap-2 shrink-0`,children:o?(0,I.jsxs)(`button`,{type:`button`,onClick:a,disabled:r!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors disabled:opacity-50`,children:[(0,I.jsx)(it,{size:13}),`Stop`]}):(0,I.jsxs)(`button`,{type:`button`,onClick:i,disabled:!t||r!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-accent text-white hover:bg-primary-hover transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,children:[r===`start`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(Be,{size:13}),`Start now`]})})]}),(o||s)&&e&&e.total>0&&(0,I.jsxs)(`div`,{className:`mt-3`,children:[(0,I.jsx)(`div`,{className:`h-1.5 w-full bg-neutral-100 dark:bg-neutral-800 rounded-full overflow-hidden`,children:(0,I.jsx)(`div`,{className:`h-full bg-accent transition-all duration-300`,style:{width:`${n}%`}})}),e.last_url&&(0,I.jsxs)(`div`,{className:`mt-2 text-[11px] text-neutral-500 dark:text-neutral-400 font-mono truncate`,children:[`Last: `,e.last_url]})]})]})}function dr({fieldKey:e,spec:t,value:n,onChange:r,first:i}){let a=t.label??e;return(0,I.jsxs)(`div`,{className:`px-4 sm:px-5 py-4 flex items-center justify-between gap-3 sm:gap-4 ${i?``:`border-t border-neutral-200 dark:border-neutral-800`}`,children:[(0,I.jsxs)(`div`,{className:`min-w-0 pr-2`,children:[(0,I.jsx)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50`,children:a}),t.description&&(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400 mt-0.5`,children:t.description})]}),(0,I.jsx)(`div`,{className:`shrink-0`,children:fr(t,n,r,a)})]})}function fr(e,t,n,r){switch(e.type){case`bool`:return(0,I.jsx)(gn,{checked:!!t,onChange:n,label:r});case`int`:return(0,I.jsx)(`input`,{type:`number`,min:e.min,max:e.max,value:t==null?``:Number(t),onChange:e=>n(Number(e.target.value)),className:`w-20 text-right`,"aria-label":r});case`enum`:return(0,I.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:(e.options??[]).map(r=>{let i=t===r,a=e.option_labels?.[r]??r;return(0,I.jsx)(`button`,{type:`button`,onClick:()=>n(r),className:`text-[12px] px-2.5 py-1 rounded border transition-colors ${i?`bg-accent border-accent text-white`:`border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800`}`,children:a},r)})});case`string`:case`url`:return(0,I.jsx)(`input`,{type:e.type===`url`?`url`:`text`,value:t==null?``:String(t),onChange:e=>n(e.target.value),className:`w-56`,"aria-label":r});default:return na(e,t,n,r)}}var pr=Object.fromEntries(wt.map(e=>[e.slug,e.label]));function mr(e,t){let{module:n,getModule:r,isPro:i,subtab:a}=t,o=(0,y.useMemo)(()=>e.map(e=>{let t;return t=e.self?n.tab_label??n.label??e.slug:r?.(e.slug)?.label??pr[e.slug]??e.slug,{key:e.key,label:t,locked:!!e.pro&&!i}}),[e,n,r,i]);return{items:o,active:a&&o.some(e=>e.key===a)?a:e[0]?.key??``}}var hr=[{key:`manual`,slug:`preloader`,self:!0},{key:`scheduled`,slug:`prewarm-schedule`,panel:`PrewarmSchedulePanel`,pro:!0},{key:`predictive`,slug:`predictive-warm`,panel:`PredictiveWarmPanel`,pro:!0}];function gr({module:e,onSaved:t,subtab:n,onSubtabChange:r,getModule:i}){let a=Kt(),{items:o,active:s}=mr(hr,{module:e,getModule:i,isPro:a===`pro`||a===`trial`,subtab:n});return(0,y.useEffect)(()=>{n&&!o.some(e=>e.key===n)&&r?.(hr[0].key)},[n,o,r]),(0,I.jsxs)(`div`,{className:`space-y-5`,children:[(0,I.jsx)(Ln,{items:o,value:s,onChange:e=>r?.(e),idBase:`preloader`}),s===`manual`&&(0,I.jsx)(lr,{module:e,onSaved:t}),s===`scheduled`&&(0,I.jsx)(Qn,{demo:`preloader-scheduled`,children:(0,I.jsx)(H,{panel:`PrewarmSchedulePanel`,slug:`prewarm-schedule`,getModule:i,onSaved:t})}),s===`predictive`&&(0,I.jsx)(Qn,{demo:`preloader-predictive`,children:(0,I.jsx)(H,{panel:`PredictiveWarmPanel`,slug:`predictive-warm`,getModule:i,onSaved:t})})]})}function _r({title:e,body:t,confirmLabel:n,cancelLabel:r=`Cancel`,busy:i=!1,onConfirm:a,onCancel:o}){return(0,I.jsx)(`div`,{role:`alertdialog`,"aria-labelledby":`xspeed-inline-confirm-title`,className:`border border-red-200 dark:border-red-900/60 bg-red-50 dark:bg-red-950/40 rounded-lg p-4 sm:p-5`,children:(0,I.jsxs)(`div`,{className:`flex items-start gap-2.5`,children:[(0,I.jsx)(dt,{size:16,className:`text-red-600 dark:text-red-400 shrink-0 mt-0.5`}),(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,I.jsx)(`div`,{id:`xspeed-inline-confirm-title`,className:`font-medium text-red-900 dark:text-red-200 text-[13px]`,children:e}),t&&(0,I.jsx)(`p`,{className:`text-[12px] text-red-800/90 dark:text-red-200/80 mt-1`,children:t}),(0,I.jsxs)(`div`,{className:`mt-3 flex items-center gap-2`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:a,disabled:i,style:{height:32,boxSizing:`border-box`},className:`flex items-center gap-1.5 whitespace-nowrap text-[12px] px-3 rounded-md !border !border-solid !border-red-600 dark:!border-red-500 bg-red-600 dark:bg-red-500 text-white hover:bg-red-700 hover:!border-red-700 dark:hover:bg-red-600 transition-colors disabled:opacity-50`,children:[i&&(0,I.jsx)(Fe,{size:12,className:`animate-spin`}),n]}),(0,I.jsx)(`button`,{type:`button`,onClick:o,disabled:i,style:{height:32,boxSizing:`border-box`},className:`flex items-center gap-1.5 whitespace-nowrap text-[12px] px-3 rounded-md !border !border-solid !border-red-300 dark:!border-red-800 bg-white dark:bg-neutral-900 text-red-800 dark:text-red-200 hover:bg-red-100 dark:hover:bg-red-900/40 transition-colors disabled:opacity-50`,children:r})]})]})]})})}function vr({id:e}){if(Kt()!==`free`)return null;let t=Hn[e];return t?(0,I.jsxs)(`div`,{className:`relative overflow-hidden border border-line bg-primary-tint rounded-card p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`absolute top-3 right-3 flex items-center gap-1 text-[10px] uppercase tracking-wider font-medium text-warning`,children:[(0,I.jsx)(de,{size:11}),(0,I.jsx)(`span`,{children:L(`Pro`)})]}),(0,I.jsxs)(`div`,{className:`flex items-start gap-3 pr-12`,children:[(0,I.jsx)(`span`,{className:`shrink-0 mt-0.5 text-warning`,children:(0,I.jsx)(Ct,{name:t.icon,size:18})}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`text-[14px] font-medium text-ink`,children:t.title}),(0,I.jsx)(`p`,{className:`text-[12px] text-ink-soft mt-1 leading-relaxed`,children:t.body}),(0,I.jsxs)(`a`,{href:Bn,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 mt-2.5 text-[12px] font-medium text-primary hover:text-primary-hover transition-colors`,children:[t.cta??L(`Learn more about Pro`),(0,I.jsx)(w,{size:12})]})]})]})]}):(typeof console<`u`&&console.warn(`[xSpeed] Unknown ProTeaser id: "${String(e)}"`),null)}function yr({module:e,onSaved:t}){let[n,r]=(0,y.useState)(e.settings),[i,a]=(0,y.useState)(null),[o,s]=(0,y.useState)({}),[c,l]=(0,y.useState)({}),[u,d]=(0,y.useState)(null),[f,p]=(0,y.useState)(null),[m,h]=(0,y.useState)(null),[g,_]=(0,y.useState)(!1),[v,b]=(0,y.useState)(!1),x=(0,y.useRef)(null),S=(0,y.useRef)(!0),C=(0,y.useRef)(JSON.stringify(e.settings)),w=(0,y.useRef)(n);(0,y.useEffect)(()=>{w.current=n},[n]);let T=async()=>{d(`scan`),p(null);try{let e=await B.request(`/database/scan`);a(e.scan),s(e.labels)}catch(e){p(e instanceof Error?e.message:`Scan failed`)}finally{d(null)}};(0,y.useEffect)(()=>{T()},[]),(0,y.useEffect)(()=>{if(S.current){S.current=!1;return}if(JSON.stringify(n)!==C.current)return x.current&&window.clearTimeout(x.current),x.current=window.setTimeout(async()=>{b(!0);let i=n;try{let{next:n,dirty:a}=or(i,await B.updateModuleSettings(e.slug,i),w.current);r(n),C.current=a?``:JSON.stringify(n),t?.(n)}catch(e){p(e instanceof Error?e.message:`Save failed`)}finally{b(!1)}},600),()=>{x.current&&window.clearTimeout(x.current)}},[n,e.slug]);let ee=(e,t)=>r(n=>({...n,[e]:t})),E=(0,y.useMemo)(()=>Object.keys(c).filter(e=>c[e]&&(i?.[e]?.count??0)>0),[c,i]),te=(0,y.useMemo)(()=>E.reduce((e,t)=>e+(i?.[t]?.count??0),0),[E,i]),D=e=>l(t=>({...t,[e]:!t[e]})),ne=()=>{if(!i)return;let e={};Object.entries(i).forEach(([t,n])=>{n.count>0&&(e[t]=!0)}),l(e)},re=()=>l({}),O=async()=>{if(E.length!==0){_(!1),d(`clean`),p(null),h(null);try{let e=await B.request(`/database/clean`,{method:`POST`,body:JSON.stringify({types:E})});a(e.scan);let t=Object.values(e.cleaned).reduce((e,t)=>e+t,0);h(`Removed ${t.toLocaleString()} row${t===1?``:`s`}.`),l({})}catch(e){p(e instanceof Error?e.message:`Cleanup failed`)}finally{d(null)}}},k=async()=>{d(`optimize`),p(null),h(null);try{let e=await B.request(`/database/optimize`,{method:`POST`}),t=Object.keys(e.optimized).length;h(`Optimized ${t} table${t===1?``:`s`}.`)}catch(e){p(e instanceof Error?e.message:`Optimize failed`)}finally{d(null)}},A=(0,y.useMemo)(()=>Object.entries(e.schema),[e.schema]),j=i?Object.entries(i):[],ie=j.reduce((e,[,t])=>e+t.count,0);return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-card p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-4 mb-4`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,I.jsx)(fe,{size:18,className:`text-primary shrink-0`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-ink`,children:`Database bloat`}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted`,children:i?ie===0?`Nothing to clean — your database is tidy.`:`${ie.toLocaleString()} row${ie===1?``:`s`} across ${j.filter(([,e])=>e.count>0).length} categor${j.filter(([,e])=>e.count>0).length===1?`y`:`ies`}`:`Scanning…`})]})]}),(0,I.jsx)(`div`,{className:`flex items-center gap-2 shrink-0`,children:(0,I.jsxs)(`button`,{type:`button`,onClick:T,disabled:u!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-line text-ink-soft hover:bg-panel transition-colors disabled:opacity-50`,children:[(0,I.jsx)(P,{size:13,className:u===`scan`?`animate-spin`:``}),`Rescan`]})})]}),j.length>0&&(0,I.jsx)(`div`,{className:`border border-line rounded overflow-hidden`,children:j.map(([e,t],n)=>{let r=!!c[e],i=t.count===0;return(0,I.jsxs)(`label`,{className:`flex items-center justify-between gap-3 px-3 py-2.5 cursor-pointer ${n===0?``:`border-t border-line`} ${i?`opacity-50 cursor-not-allowed`:`hover:bg-panel/40`}`,children:[(0,I.jsxs)(`span`,{className:`flex items-center gap-2.5 min-w-0`,children:[(0,I.jsx)(`input`,{type:`checkbox`,checked:r,disabled:i,onChange:()=>D(e),className:`accent-primary`}),(0,I.jsx)(`span`,{className:`text-[13px] text-ink truncate`,children:o[e]??t.label})]}),(0,I.jsx)(`span`,{className:`text-[12px] tabular-nums text-muted shrink-0`,children:t.count.toLocaleString()})]},e)})}),(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2 mt-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2 text-[12px]`,children:[(0,I.jsx)(`button`,{type:`button`,onClick:ne,className:`text-primary hover:underline`,disabled:!i||ie===0,children:`Select all`}),(0,I.jsx)(`span`,{className:`text-line-strong`,children:`·`}),(0,I.jsx)(`button`,{type:`button`,onClick:re,className:`text-muted hover:underline`,disabled:E.length===0,children:`Clear`})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:k,disabled:u!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-line text-ink-soft hover:bg-panel transition-colors disabled:opacity-50`,children:[(0,I.jsx)(vt,{size:13,className:u===`optimize`?`animate-pulse`:``}),`Optimize tables`]}),(0,I.jsxs)(`button`,{type:`button`,onClick:()=>_(!0),disabled:u!==null||E.length===0,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-primary text-on-primary hover:bg-primary-hover transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,children:[u===`clean`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(lt,{size:13}),`Clean selected`,te>0?` (${te.toLocaleString()})`:``]})]})]}),g&&(0,I.jsx)(`div`,{className:`mt-3`,children:(0,I.jsx)(_r,{title:`Permanently delete ${te.toLocaleString()} row${te===1?``:`s`}?`,body:`This removes the selected rows from your database. It can't be undone — take a backup first if you're unsure.`,confirmLabel:`Delete rows`,busy:u===`clean`,onConfirm:O,onCancel:()=>_(!1)})}),u===`clean`&&(0,I.jsx)(`div`,{className:`mt-3 h-1.5 rounded-pill bg-panel overflow-hidden`,role:`progressbar`,"aria-label":`Cleaning`,children:(0,I.jsx)(`div`,{className:`h-full w-full rounded-pill xspeed-anim-sweep`,style:{backgroundImage:`linear-gradient(90deg, var(--primary) 0%, #5BD6CE 50%, var(--primary) 100%)`}})})]}),f&&(0,I.jsx)(V,{tone:`danger`,title:`Database error`,body:f}),m&&!f&&(0,I.jsx)(V,{tone:`success`,title:`Done`,body:m}),A.length>0&&(0,I.jsx)(`div`,{className:`border border-line bg-paper rounded-card overflow-hidden`,children:A.map(([e,t],r)=>(0,I.jsx)(br,{fieldKey:e,spec:t,value:n[e],labels:o,onChange:t=>ee(e,t),first:r===0},e))}),(0,I.jsx)(ar,{saving:v}),(0,I.jsx)(vr,{id:`migration`})]})}function br({fieldKey:e,spec:t,value:n,labels:r,onChange:i,first:a}){let o=t.label??e,s=e===`included_types`;return(0,I.jsxs)(`div`,{className:`px-4 sm:px-5 py-4 ${a?``:`border-t border-line`}`,children:[(0,I.jsxs)(`div`,{className:`flex items-start justify-between gap-3 sm:gap-4`,children:[(0,I.jsxs)(`div`,{className:`min-w-0 pr-2`,children:[(0,I.jsx)(`div`,{className:`font-medium text-ink`,children:o}),t.description&&(0,I.jsx)(`div`,{className:`text-[12px] text-muted mt-0.5`,children:t.description})]}),!s&&(0,I.jsx)(`div`,{className:`shrink-0`,children:Sr(t,n,i,o)})]}),s&&Object.keys(r).length>0&&(0,I.jsx)(xr,{value:Array.isArray(n)?n:[],labels:r,onChange:i})]})}function xr({value:e,labels:t,onChange:n}){let r=t=>{n(e.includes(t)?e.filter(e=>e!==t):[...e,t])};return(0,I.jsx)(`div`,{className:`flex flex-wrap gap-1.5 mt-3`,children:Object.entries(t).map(([t,n])=>(0,I.jsx)(`button`,{type:`button`,onClick:()=>r(t),className:`text-[12px] px-2.5 py-1 rounded border transition-colors ${e.includes(t)?`bg-primary border-primary text-on-primary`:`border-line text-ink-soft hover:bg-panel`}`,children:n},t))})}function Sr(e,t,n,r){switch(e.type){case`bool`:return(0,I.jsx)(gn,{checked:!!t,onChange:n,label:r});case`enum`:return(0,I.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:(e.options??[]).map(r=>{let i=t===r,a=e.option_labels?.[r]??r;return(0,I.jsx)(`button`,{type:`button`,onClick:()=>n(r),className:`text-[12px] px-2.5 py-1 rounded border transition-colors ${i?`bg-primary border-primary text-on-primary`:`border-line text-ink-soft hover:bg-panel`}`,children:a},r)})});default:return na(e,t,n,r)}}function Cr(e,t,n){return e.dependsOn?wr(e.dependsOn,t,n,new Set):!0}function wr(e,t,n,r){if(`all`in e)return e.all.every(e=>wr(e,t,n,r));if(`any`in e)return e.any.some(e=>wr(e,t,n,r));if(r.has(e.field))return!0;let i=n[e.field];if(i?.dependsOn){let a=new Set(r);if(a.add(e.field),!wr(i.dependsOn,t,n,a))return!1}let a=t[e.field];return Object.prototype.hasOwnProperty.call(e,`value`)?a===e.value:!!a}function Tr(e,t,n){return(0,y.useMemo)(()=>Object.entries(e).filter(([r,i])=>Cr(i,t,e)&&(n?n(r,i):!0)),[e,t])}function Er({module:e,onSaved:t,getModule:n}){let[r,i]=(0,y.useState)(e.settings),[a,o]=(0,y.useState)(null),[s,c]=(0,y.useState)(null),[l,u]=(0,y.useState)(null),[d,f]=(0,y.useState)(null),[p,m]=(0,y.useState)(!1),h=(0,y.useRef)(null),g=(0,y.useRef)(!0),_=(0,y.useRef)(JSON.stringify(e.settings)),v=(0,y.useRef)(r);(0,y.useEffect)(()=>{v.current=r},[r]),(0,y.useEffect)(()=>{if(g.current){g.current=!1;return}if(JSON.stringify(r)!==_.current)return h.current&&window.clearTimeout(h.current),h.current=window.setTimeout(async()=>{m(!0);let n=r;try{let{next:r,dirty:a}=or(n,await B.updateModuleSettings(e.slug,n),v.current);i(r),_.current=a?``:JSON.stringify(r),t?.(r)}catch(e){u(e instanceof Error?e.message:`Save failed`)}finally{m(!1)}},600),()=>{h.current&&window.clearTimeout(h.current)}},[r,e.slug]);let b=(e,t)=>i(n=>({...n,[e]:t})),x=async(e,t,n=`POST`,r)=>{c(e),u(null),f(null);try{let i=await B.request(t,{method:n,body:r?JSON.stringify(r):void 0});t===`/cloudflare/verify`&&o(i),i.ok?f(`Cloudflare: ${Dr(e)} succeeded.`):u(i.body?.message||`Cloudflare API returned HTTP ${i.status}.`)}catch(e){u(e instanceof Error?e.message:`Request failed`)}finally{c(null)}},S=String(r.auth_method??`token`),C=Tr(e.schema,r,e=>!(S===`token`&&(e===`email`||e===`api_key`)||S===`key`&&e===`api_token`));return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[a?.ok?(0,I.jsx)(oe,{size:18,className:`text-emerald-500 shrink-0`}):a?(0,I.jsx)(ae,{size:18,className:`text-rose-500 shrink-0`}):(0,I.jsx)(`span`,{className:`w-2 h-2 rounded-full bg-neutral-300 dark:bg-neutral-600 shrink-0 ml-2`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50`,children:a?.ok?`Connected: ${a.body.result?.name??`zone`}`:a?`Verification failed`:`Not verified yet`}),(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400`,children:a?.ok?`Plan: ${a.body.result?.plan?.name??`unknown`}`:`Fill in credentials below, then click Verify.`})]})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:()=>x(`verify`,`/cloudflare/verify`),disabled:s!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors disabled:opacity-50`,children:[(0,I.jsx)(P,{size:13,className:s===`verify`?`animate-spin`:``}),`Verify`]}),(0,I.jsxs)(`button`,{type:`button`,onClick:()=>x(`purge`,`/cloudflare/purge`),disabled:s!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-accent text-white hover:bg-primary-hover transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,children:[s===`purge`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(lt,{size:13}),`Purge Cloudflare`]})]})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2 mt-3`,children:[(0,I.jsx)(`button`,{type:`button`,onClick:()=>x(`devon`,`/cloudflare/dev-mode`,`POST`,{on:!0}),disabled:s!==null,className:`text-[12px] px-2.5 py-1 rounded border border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors disabled:opacity-50`,children:`Dev mode: ON`}),(0,I.jsx)(`button`,{type:`button`,onClick:()=>x(`devoff`,`/cloudflare/dev-mode`,`POST`,{on:!1}),disabled:s!==null,className:`text-[12px] px-2.5 py-1 rounded border border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors disabled:opacity-50`,children:`Dev mode: OFF`})]})]}),l&&(0,I.jsx)(V,{tone:`danger`,title:`Cloudflare error`,body:l}),d&&!l&&(0,I.jsx)(V,{tone:`success`,title:`Done`,body:d}),(0,I.jsx)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg overflow-hidden`,children:C.map(([e,t],n)=>(0,I.jsx)(Or,{fieldKey:e,spec:t,value:r[e],onChange:t=>b(e,t),first:n===0},e))}),(0,I.jsx)(ar,{saving:p}),(0,I.jsxs)(`div`,{className:`pt-2`,children:[(0,I.jsx)(`div`,{className:`text-[11px] uppercase tracking-wider text-neutral-500 dark:text-neutral-400 font-medium mb-2`,children:`Automatic Platform Optimization`}),(0,I.jsx)(Qn,{demo:`network-cloudflare`,children:(0,I.jsx)(H,{panel:`CloudflareApoPanel`,slug:`cloudflare-apo`,getModule:n,onSaved:t})})]})]})}function Dr(e){switch(e){case`verify`:return`verify`;case`purge`:return`purge`;case`devon`:return`dev mode on`;case`devoff`:return`dev mode off`;default:return`action`}}function Or({fieldKey:e,spec:t,value:n,onChange:r,first:i}){let a=t.label??e;return(0,I.jsxs)(`div`,{"data-field-anchor":`cloudflare:${e}`,className:`xspeed-field px-4 sm:px-5 py-4 flex items-start justify-between gap-3 sm:gap-4 ${i?``:`border-t border-neutral-200 dark:border-neutral-800`}`,children:[(0,I.jsxs)(`div`,{className:`min-w-0 pr-2`,children:[(0,I.jsx)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50`,children:a}),t.description&&(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400 mt-0.5`,children:t.description})]}),(0,I.jsx)(`div`,{className:`shrink-0`,children:kr(t,n,r,a)})]})}function kr(e,t,n,r){switch(e.type){case`bool`:return(0,I.jsx)(gn,{checked:!!t,onChange:n,label:r});case`enum`:return(0,I.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:(e.options??[]).map(r=>{let i=t===r,a=e.option_labels?.[r]??r;return(0,I.jsx)(`button`,{type:`button`,onClick:()=>n(r),className:`text-[12px] px-2.5 py-1 rounded border transition-colors ${i?`bg-accent border-accent text-white`:`border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800`}`,children:a},r)})});case`string`:return(0,I.jsx)(`input`,{type:`text`,value:t==null?``:String(t),onChange:e=>n(e.target.value),className:`w-64`,autoComplete:`off`,"aria-label":r});default:return na(e,t,n,r)}}function Ar({module:e,onSaved:t}){let[n,r]=(0,y.useState)(e.settings),[i,a]=(0,y.useState)(null),[o,s]=(0,y.useState)(``),[c,l]=(0,y.useState)(null),[u,d]=(0,y.useState)(null),[f,p]=(0,y.useState)(null),[m,h]=(0,y.useState)(null),[g,_]=(0,y.useState)(!1),[v,b]=(0,y.useState)(!1),[x,S]=(0,y.useState)(!1),C=(0,y.useRef)(null),w=(0,y.useRef)(!0),T=(0,y.useRef)(JSON.stringify(e.settings)),ee=(0,y.useRef)(n);(0,y.useEffect)(()=>{ee.current=n},[n]);let E=async()=>{l(`detect`),d(null);try{let[e,t]=await Promise.all([B.request(`/object-cache/detect`),B.request(`/object-cache/snippet`)]);a(e),s(t.snippet)}catch(e){d(e instanceof Error?e.message:`Detection failed`)}finally{l(null)}};(0,y.useEffect)(()=>{E()},[]),(0,y.useEffect)(()=>{if(w.current){w.current=!1;return}if(JSON.stringify(n)!==T.current)return C.current&&window.clearTimeout(C.current),C.current=window.setTimeout(async()=>{S(!0);let i=n;try{let{next:n,dirty:a}=or(i,await B.updateModuleSettings(e.slug,i),ee.current);r(n),T.current=a?``:JSON.stringify(n),t?.(n),s((await B.request(`/object-cache/snippet`)).snippet)}catch(e){d(e instanceof Error?e.message:`Save failed`)}finally{S(!1)}},600),()=>{C.current&&window.clearTimeout(C.current)}},[n,e.slug]);let te=(e,t)=>r(n=>({...n,[e]:t})),D=async()=>{l(`flush`),d(null),p(null);try{p((await B.request(`/object-cache/flush`,{method:`POST`})).ok?`Object cache flushed.`:`Flush returned false — cache backend may not be active.`)}catch(e){d(e instanceof Error?e.message:`Flush failed`)}finally{l(null)}},ne=async()=>{l(`test`),d(null),p(null),h(null);try{let e=await B.request(`/object-cache/test-connection`,{method:`POST`,body:JSON.stringify(n)});h(e),e.ok||d(e.message)}catch(e){d(e instanceof Error?e.message:`Connection test failed`)}finally{l(null)}},re=async()=>{l(`enable`),d(null),p(null),_(!1);try{let e=await B.request(`/object-cache/enable`,{method:`POST`,body:JSON.stringify(n)});h(e.test??null),e.ok?(p(e.message),a(e.detect)):(d(e.message),e.steps.drop_in&&!e.steps.wp_config&&_(!0)),await E()}catch(e){d(e instanceof Error?e.message:`Enable failed`)}finally{l(null)}},O=async()=>{l(`disable`),d(null),p(null);try{p((await B.request(`/object-cache/disable`,{method:`POST`})).message),h(null),_(!1),await E()}catch(e){d(e instanceof Error?e.message:`Disable failed`)}finally{l(null)}},k=async()=>{try{await navigator.clipboard.writeText(o),b(!0),window.setTimeout(()=>b(!1),1500)}catch{d(`Clipboard write blocked — select + copy the snippet manually.`)}},A=String(n.backend??`redis`),j=(0,y.useMemo)(()=>Object.entries(e.schema),[e.schema]).filter(([e])=>!(A===`redis`&&(e===`memcached_host`||e===`memcached_port`)||A===`memcached`&&(e===`redis_host`||e===`redis_port`||e===`redis_user`||e===`redis_password`||e===`redis_database`))),ie=i?i.wp_cache_active?{tone:`ok`,label:`Active: ${i.drop_in_label||i.backend}`,sub:`Backend: ${i.backend}`}:{tone:`warn`,label:`No persistent object cache`,sub:`WordPress is using its built-in in-memory cache (resets every request).`}:null;return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[ie?.tone===`ok`?(0,I.jsx)(oe,{size:18,className:`text-emerald-500 shrink-0`}):ie?.tone===`warn`?(0,I.jsx)(ae,{size:18,className:`text-amber-500 shrink-0`}):(0,I.jsx)(Ze,{size:18,className:`text-neutral-400 shrink-0`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50`,children:ie?ie.label:`Detecting…`}),(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400`,children:ie?.sub??``})]})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:E,disabled:c!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors disabled:opacity-50`,children:[(0,I.jsx)(P,{size:13,className:c===`detect`?`animate-spin`:``}),`Re-detect`]}),i?.drop_in_installed&&(0,I.jsxs)(`button`,{type:`button`,onClick:D,disabled:c!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors disabled:opacity-50`,children:[c===`flush`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(lt,{size:13}),`Flush`]})]})]}),i&&(()=>{let e=A===`redis`?!!i.class_available.Redis:!!(i.class_available.Memcached||i.class_available.Memcache);return(0,I.jsxs)(`div`,{className:`mt-3 flex items-center gap-2 text-[12px]`,children:[(0,I.jsxs)(`span`,{className:`px-2 py-0.5 rounded border border-emerald-300 bg-emerald-50 text-emerald-700 dark:border-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-300 whitespace-nowrap`,children:[A===`redis`?`Redis`:`Memcached`,` ready`]}),(0,I.jsx)(`span`,{className:`text-neutral-500 dark:text-neutral-400`,children:e?`Native ${A===`redis`?`phpredis`:`memcached`} extension detected — fastest path.`:`xSpeed uses its built-in client — no extension to install.`})]})})()]}),u&&(0,I.jsx)(V,{tone:`danger`,title:`Error`,body:u}),f&&!u&&(0,I.jsx)(V,{tone:`success`,title:`Done`,body:f}),(0,I.jsx)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-4 sm:p-5`,children:(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsxs)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50 flex items-center gap-2`,children:[(0,I.jsx)(vt,{size:15,className:`text-accent`}),`One-click setup`]}),(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400 mt-0.5`,children:i?.drop_in_installed?`Object cache is installed. Disable to remove the drop-in and clean wp-config.php.`:`Test the ${A} connection, then enable — xSpeed writes the drop-in and wp-config.php for you. No manual steps.`}),m&&(0,I.jsxs)(`div`,{className:`mt-2 inline-flex items-center gap-1.5 text-[12px] px-2 py-1 rounded ${m.ok?`bg-emerald-50 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-300`:`bg-red-50 text-red-700 dark:bg-red-900/30 dark:text-red-300`}`,children:[m.ok?(0,I.jsx)(oe,{size:13}):(0,I.jsx)(ae,{size:13}),m.message,m.latency_ms!=null&&m.ok?` (${m.latency_ms} ms)`:``]})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:ne,"data-field-anchor":`object-cache:connection_test`,disabled:c!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors disabled:opacity-50`,children:[c===`test`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(He,{size:13}),`Test connection`]}),i?.drop_in_installed?(0,I.jsxs)(`button`,{type:`button`,onClick:O,disabled:c!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-red-300 dark:border-red-800 text-red-700 dark:text-red-300 hover:bg-red-50 dark:hover:bg-red-900/20 transition-colors disabled:opacity-50`,children:[c===`disable`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(Ue,{size:13}),`Disable`]}):(0,I.jsxs)(`button`,{type:`button`,onClick:re,disabled:c!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-accent text-white hover:bg-primary-hover transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,children:[c===`enable`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(Ue,{size:13}),`Enable object cache`]})]})]})}),(0,I.jsx)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg overflow-hidden`,children:j.map(([e,t],r)=>(0,I.jsx)(jr,{fieldKey:e,spec:t,value:n[e],onChange:t=>te(e,t),first:r===0},e))}),g&&(0,I.jsxs)(`div`,{className:`border border-amber-200 dark:border-amber-800 bg-amber-50/40 dark:bg-amber-900/10 rounded-lg p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-3 mb-3`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50`,children:`Manual step needed — wp-config.php isn’t writable`}),(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400 mt-0.5`,children:`The drop-in was installed, but xSpeed couldn’t edit wp-config.php automatically. Paste this above the “That’s all, stop editing!” comment to finish.`})]}),(0,I.jsxs)(`button`,{type:`button`,onClick:k,disabled:!o,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors disabled:opacity-50`,children:[v?(0,I.jsx)(oe,{size:13,className:`text-emerald-500`}):(0,I.jsx)(le,{size:13}),v?`Copied`:`Copy`]})]}),(0,I.jsx)(`pre`,{className:`text-[11px] leading-relaxed font-mono whitespace-pre-wrap break-all bg-neutral-50 dark:bg-neutral-950 text-neutral-700 dark:text-neutral-300 border border-neutral-200 dark:border-neutral-800 rounded p-3 max-h-72 overflow-auto`,children:o||`// Adjust the settings above to generate a snippet.`})]}),(0,I.jsx)(ar,{saving:x})]})}function jr({fieldKey:e,spec:t,value:n,onChange:r,first:i}){let a=t.label??e;return(0,I.jsxs)(`div`,{className:`px-4 sm:px-5 py-4 flex items-start justify-between gap-3 sm:gap-4 ${i?``:`border-t border-neutral-200 dark:border-neutral-800`}`,children:[(0,I.jsxs)(`div`,{className:`min-w-0 pr-2`,children:[(0,I.jsx)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50`,children:a}),t.description&&(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400 mt-0.5`,children:t.description})]}),(0,I.jsx)(`div`,{className:`shrink-0`,children:Mr(t,n,r,a)})]})}function Mr(e,t,n,r){switch(e.type){case`bool`:return(0,I.jsx)(gn,{checked:!!t,onChange:n,label:r});case`enum`:return(0,I.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:(e.options??[]).map(r=>{let i=t===r,a=e.option_labels?.[r]??r;return(0,I.jsx)(`button`,{type:`button`,onClick:()=>n(r),className:`text-[12px] px-2.5 py-1 rounded border transition-colors ${i?`bg-accent border-accent text-white`:`border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800`}`,children:a},r)})});case`string`:return(0,I.jsx)(`input`,{type:`text`,value:t==null?``:String(t),onChange:e=>n(e.target.value),className:`w-56`,autoComplete:`off`,"aria-label":r});default:return na(e,t,n,r)}}var Nr=`xspeed_migration_applied_${typeof window<`u`?window.location.host:``}`;function Pr(){if(typeof window>`u`)return[];try{let e=window.localStorage.getItem(Nr),t=e?JSON.parse(e):[];return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}}function Fr(e){if(!(typeof window>`u`))try{window.localStorage.setItem(Nr,JSON.stringify(e))}catch{}}var Ir={cache:`Page Cache`,minify:`Minify`,lazy:`Lazy Load`,preloader:`Preloader`,"browser-cache":`Browser Cache`,"object-cache":`Object Cache`},Lr={cache_enabled:`Enable caching`,cache_expiry:`Cache lifetime (hours)`,mobile_separate:`Separate mobile cache`,excluded_urls:`Excluded URLs`,excluded_cookies:`Excluded cookies`,bypass_user_agents:`Bypass user agents`,ignored_query_params:`Ignored query params`,minify_html:`Minify HTML`,minify_css:`Minify CSS`,minify_js:`Minify JS`,lazy_images:`Lazy-load images`,lazy_iframes:`Lazy-load iframes`,lazy_videos:`Lazy-load videos`,enabled:`Enabled`,schedule:`Schedule`};function Rr(e){return Lr[e]??e.replace(/_/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function zr(e){return typeof e==`boolean`?e?`On`:`Off`:Array.isArray(e)?e.length?`${e.length} item${e.length===1?``:`s`}: ${e.join(`, `)}`:`—`:e==null||e===``?`—`:String(e)}function Br({patch:e,title:t}){return(0,I.jsxs)(`div`,{className:`mt-4 space-y-2`,children:[(0,I.jsx)(`div`,{className:`text-[11px] font-medium text-muted uppercase tracking-wider`,children:t}),Object.entries(e).map(([e,t])=>(0,I.jsxs)(`div`,{className:`rounded-card overflow-hidden bg-panel`,children:[(0,I.jsx)(`div`,{className:`px-4 pt-2.5 pb-1.5 text-[12px] font-semibold text-ink`,children:Ir[e]??Rr(e)}),Object.entries(t).map(([e,t])=>(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-4 px-4 py-2`,children:[(0,I.jsx)(`span`,{className:`text-[12px] text-muted shrink-0`,children:Rr(e)}),(0,I.jsx)(`span`,{className:`text-[12px] text-ink text-right truncate`,title:zr(t),children:zr(t)})]},e))]},e))]})}function Vr(e){let t=Kt(),n=t===`pro`||t===`trial`,[r,i]=(0,y.useState)(null),[a,o]=(0,y.useState)({}),[s,c]=(0,y.useState)(null),[l,u]=(0,y.useState)([]),[d,f]=(0,y.useState)(null),[p,m]=(0,y.useState)(null),[h,g]=(0,y.useState)(null),[_,v]=(0,y.useState)(null),[b,x]=(0,y.useState)({}),[S,C]=(0,y.useState)(null),[T,ee]=(0,y.useState)(()=>Pr()),[E,te]=(0,y.useState)(null);(0,y.useEffect)(()=>{Fr(T)},[T]);let[D,ne]=(0,y.useState)(``),[re,O]=(0,y.useState)(null),[k,A]=(0,y.useState)(null),[j,ie]=(0,y.useState)(null),[ae,M]=(0,y.useState)(null),[se,ce]=(0,y.useState)(!1),le=async()=>{c({source:`*`,op:`status`}),m(null);try{i((await B.request(`/migration/status`)).sources)}catch(e){m(e instanceof Error?e.message:`Status check failed`)}finally{c(null)}},ue=async()=>{try{v((await B.request(`/migration-pro/profiles`)).profiles)}catch{v([])}};(0,y.useEffect)(()=>{le(),n&&ue()},[n]);let fe=async e=>{c({source:e,op:`preview`}),m(null);try{let t=await B.request(`/migration/preview`,{method:`POST`,body:JSON.stringify({source:e})});o(n=>({...n,[e]:t.patch}))}catch(e){m(e instanceof Error?e.message:`Preview failed`)}finally{c(null)}},N=e=>{e.active?g(e):ge(e.id)},ge=async e=>{g(null),c({source:e,op:`apply`}),m(null),f(null);try{let t=await B.request(`/migration/apply`,{method:`POST`,body:JSON.stringify({source:e})});u(t=>[...t,e]);let n=t.source_label||`the source plugin`;f({title:`Imported settings from ${n}`,body:t.deactivated?`Your ${n} settings are now active in xSpeed, and ${n} has been deactivated so the two caching plugins don't conflict. Review the imported values in the panels and re-enable anything you want to tweak.`:`Your ${n} settings are now active in xSpeed. Review the imported values in the panels. (${n} was already inactive, so nothing was changed there.)`}),le()}catch(e){m(e instanceof Error?e.message:`Apply failed`)}finally{c(null)}},_e=async e=>{if(b[e]){x(t=>{let n={...t};return delete n[e],n});return}C({id:e,op:`preview`}),m(null);try{let t=await B.request(`/migration-pro/profiles/preview`,{method:`POST`,body:JSON.stringify({profile:e})});x(n=>({...n,[e]:t.patch}))}catch(e){m(e instanceof Error?e.message:`Preview failed`)}finally{C(null)}},ve=e=>te(e),ye=async e=>{te(null),C({id:e,op:`apply`}),m(null);try{await B.request(`/migration-pro/profiles/apply`,{method:`POST`,body:JSON.stringify({profile:e})}),ee(t=>t.includes(e)?t:[...t,e])}catch(e){m(e instanceof Error?e.message:`Apply failed`)}finally{C(null)}},be=async()=>{A(`export`),m(null),ie(null);try{let e=await B.request(`/migration-pro/profile/export`),t=JSON.stringify(e.profile,null,2),n=new Blob([t],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=`xspeed-profile.json`,document.body.appendChild(i),i.click(),i.remove(),URL.revokeObjectURL(r),ie(`Profile exported — saved as xspeed-profile.json.`)}catch(e){m(e instanceof Error?e.message:`Export failed`)}finally{A(null)}},xe=e=>{let t=e instanceof Error?e.message:``;return/422|format|profile|parse|json/i.test(t)||!t?`That doesn’t look like an xSpeed profile. Paste the JSON from an exported profile, or choose a .json file.`:t},Se=async()=>{if(D.trim()){A(`preview`),M(null),ie(null),O(null);try{O((await B.request(`/migration-pro/profile/import/preview`,{method:`POST`,body:JSON.stringify({profile:D.trim()})})).patch)}catch(e){M(xe(e))}finally{A(null)}}},Ce=()=>{D.trim()&&(M(null),ce(!0))},we=async()=>{ce(!1),A(`apply`),M(null),ie(null);try{let e=await B.request(`/migration-pro/profile/import/apply`,{method:`POST`,body:JSON.stringify({profile:D.trim()})}),t=Object.keys(e.results).length;ie(`Imported — applied settings to ${t} module${t===1?``:`s`}.`),O(null),ne(``)}catch(e){M(xe(e))}finally{A(null)}},Te=e=>{let t=new FileReader;t.onload=()=>ne(String(t.result??``)),t.readAsText(e)};return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsx)(`div`,{className:`border border-line bg-paper rounded-card p-4 sm:p-5`,children:(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,I.jsx)(Oe,{size:18,className:`text-primary shrink-0`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-ink`,children:`Migrate from another plugin`}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted`,children:`Read settings from a detected caching plugin and apply the equivalent xSpeed configuration.`})]})]}),(0,I.jsxs)(`button`,{type:`button`,onClick:le,disabled:s!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-line text-ink-soft hover:bg-panel transition-colors disabled:opacity-50`,children:[(0,I.jsx)(P,{size:13,className:s?.op===`status`?`animate-spin`:``}),`Re-scan`]})]})}),p&&(0,I.jsx)(V,{tone:`danger`,title:`Migration error`,body:p}),d&&(0,I.jsx)(V,{tone:`success`,title:d.title,body:d.body}),r?.map(e=>{let t=l.includes(e.id)||e.imported,n=a[e.id],r=e.mapped_count,i=`${r} ${r===1?`setting`:`settings`}`,o=t?`Imported${e.active?``:` · plugin deactivated`}`:e.detected?`Detected — imports ${i}`:`Not installed (or settings not present)`;return(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-card p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,I.jsx)(`span`,{className:`w-2 h-2 rounded-full shrink-0 ${t||e.detected?`bg-success`:`bg-line-strong`}`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-ink`,children:e.label}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted`,children:o})]})]}),(0,I.jsx)(`div`,{className:`flex items-center gap-2 shrink-0`,children:t?(0,I.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 text-success font-medium`,children:[(0,I.jsx)(oe,{size:14}),`Imported`]}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`button`,{type:`button`,onClick:()=>fe(e.id),disabled:!e.detected||s!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-line text-ink-soft hover:bg-panel transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,children:[s?.source===e.id&&s?.op===`preview`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(he,{size:13}),`Preview`]}),(0,I.jsxs)(`button`,{type:`button`,onClick:()=>N(e),disabled:!e.detected||s!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-primary text-on-primary hover:bg-primary-hover transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,children:[s?.source===e.id&&s?.op===`apply`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(w,{size:13}),`Import`]})]})})]}),h?.id===e.id&&(0,I.jsx)(`div`,{className:`mt-4`,children:(0,I.jsx)(_r,{title:`${e.label} will be deactivated after import`,body:(0,I.jsxs)(I.Fragment,{children:[`xSpeed will import `,e.label,`’s `,i,`, then deactivate`,` `,e.label,` — two page-caching plugins can’t run together (they double-cache and fight over the cache drop-in, breaking caching for both). Your `,e.label,` settings stay saved in its own options, so you can reactivate it anytime to switch back.`]}),confirmLabel:`Import & switch to xSpeed`,cancelLabel:`Cancel`,busy:s?.source===e.id&&s?.op===`apply`,onConfirm:()=>ge(e.id),onCancel:()=>g(null)})}),n&&(0,I.jsx)(Br,{patch:n,title:`Translation preview`})]},e.id)}),(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-card p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,I.jsx)(mt,{size:18,className:`text-primary shrink-0`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,I.jsx)(`span`,{className:`font-medium text-ink`,children:`One-click cache profiles`}),!n&&(0,I.jsx)(de,{size:12,className:`text-warning shrink-0`})]}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted`,children:`Apply a curated, best-practice xSpeed setup for your site type — no manual tuning.`})]})]}),n?_===null?(0,I.jsx)(`div`,{className:`mt-4 text-[12px] text-muted text-center py-4`,children:`Loading…`}):_.length===0?(0,I.jsx)(`div`,{className:`mt-4 text-[12px] text-muted text-center py-4`,children:`No profiles available.`}):(0,I.jsx)(`div`,{className:`mt-4 space-y-3`,children:_.map(e=>{let t=T.includes(e.id),n=b[e.id],r=!!n,i=E?.id===e.id;return(0,I.jsxs)(`div`,{className:`border border-line rounded-card p-4`,children:[(0,I.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-ink`,children:e.label}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted mt-0.5`,children:e.description})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:()=>_e(e.id),disabled:S!==null,"aria-expanded":r?`true`:`false`,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-line text-ink-soft hover:bg-panel transition-colors disabled:opacity-40`,children:[S?.id===e.id&&S?.op===`preview`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):r?(0,I.jsx)(me,{size:13}):(0,I.jsx)(he,{size:13}),r?`Hide preview`:`Preview`]}),(0,I.jsxs)(`button`,{type:`button`,onClick:()=>ve(e),disabled:S!==null||t,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-primary text-on-primary hover:bg-primary-hover transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,children:[S?.id===e.id&&S?.op===`apply`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):t?(0,I.jsx)(oe,{size:13}):(0,I.jsx)(w,{size:13}),t?`Applied`:`Apply`]})]})]}),n&&(0,I.jsx)(Br,{patch:n,title:`Will set`}),i&&(0,I.jsx)(`div`,{className:`mt-4`,children:(0,I.jsx)(_r,{title:`Apply the "${e.label}" profile?`,body:(0,I.jsxs)(I.Fragment,{children:[`This overwrites your site-wide cache settings (cache lifetime, exclusions, minify & lazy options) with the `,e.label,` preset. Your existing safety exclusions are kept. You can re-tune anything afterward in each panel.`]}),confirmLabel:`Apply profile`,cancelLabel:`Cancel`,busy:S?.id===e.id&&S?.op===`apply`,onConfirm:()=>ye(e.id),onCancel:()=>te(null)})})]},e.id)})}):(0,I.jsx)(`div`,{className:`mt-4 rounded-card border border-dashed border-line-strong px-4 py-3 text-[12px] text-muted`,children:`Curated one-click profiles (Blog, WooCommerce, Membership, LMS, News) and portable save\xA0&\xA0share are a Pro feature. Activate Pro to unlock them here.`})]}),n&&(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-card p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,I.jsx)(pe,{size:18,className:`text-primary shrink-0`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-ink`,children:`Save & share your config`}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted`,children:`Export this site’s xSpeed settings as a portable profile, then import it on another site.`})]})]}),(0,I.jsxs)(`button`,{type:`button`,onClick:be,disabled:k!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-primary text-on-primary hover:bg-primary-hover transition-colors disabled:opacity-40 shrink-0`,children:[k===`export`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(pe,{size:13}),`Export profile`]})]}),(0,I.jsxs)(`div`,{className:`mt-3 text-[11px] text-muted leading-snug`,children:[`For your security, API keys, tokens, and other secrets are `,(0,I.jsx)(`strong`,{children:`excluded`}),` from the exported file — re-enter them manually on the destination site after importing.`]}),j&&!ae&&(0,I.jsx)(`div`,{className:`mt-3`,children:(0,I.jsx)(V,{tone:`success`,title:`Done`,body:j})}),(0,I.jsxs)(`div`,{className:`mt-5`,children:[(0,I.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider font-medium text-muted mb-1`,children:`Import a profile`}),(0,I.jsx)(`textarea`,{rows:4,value:D,onChange:e=>{ne(e.target.value),O(null)},placeholder:`Paste an xSpeed profile JSON here, or choose a .json file below.`,className:`w-full font-mono text-[11px]`,"aria-label":`Profile JSON to import`}),(0,I.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2`,children:[(0,I.jsxs)(`label`,{className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-line text-ink-soft hover:bg-panel transition-colors cursor-pointer`,children:[(0,I.jsx)(pt,{size:13}),`Choose file`,(0,I.jsx)(`input`,{type:`file`,accept:`application/json,.json`,className:`hidden`,onChange:e=>{let t=e.target.files?.[0];t&&Te(t)}})]}),(0,I.jsxs)(`button`,{type:`button`,onClick:Se,disabled:k!==null||!D.trim(),className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-line text-ink-soft hover:bg-panel transition-colors disabled:opacity-40`,children:[k===`preview`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(he,{size:13}),`Preview`]}),(0,I.jsxs)(`button`,{type:`button`,onClick:Ce,disabled:k!==null||!D.trim(),className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-primary text-on-primary hover:bg-primary-hover transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,children:[k===`apply`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(w,{size:13}),`Import & apply`]})]}),ae&&(0,I.jsx)(`div`,{className:`mt-3`,children:(0,I.jsx)(V,{tone:`danger`,title:`Import error`,body:ae})}),se&&(0,I.jsx)(`div`,{className:`mt-3`,children:(0,I.jsx)(_r,{title:`Apply this imported profile?`,body:(0,I.jsx)(I.Fragment,{children:`This overwrites your site-wide xSpeed settings with the values in the imported profile (cache lifetime, exclusions, minify & lazy options, …). Secrets aren’t included — re-enter them after. You can re-tune anything afterward in each panel.`}),confirmLabel:`Import & apply`,cancelLabel:`Cancel`,busy:k===`apply`,onConfirm:we,onCancel:()=>ce(!1)})}),re&&(0,I.jsx)(Br,{patch:re,title:`Will import`})]})]})]})}function Hr({module:e}){let[t,n]=(0,y.useState)(null),[r,i]=(0,y.useState)(!1),[a,o]=(0,y.useState)(null),[s,c]=(0,y.useState)(!1),l=R(),u=String(e.settings.support_url??`https://wpdeveloper.com/support`),d=async()=>{i(!0),o(null);try{n(await B.request(`/support/snapshot`))}catch(e){o(e instanceof Error?e.message:`Snapshot failed`)}finally{i(!1)}};return(0,y.useEffect)(()=>{d()},[]),(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsx)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-4 sm:p-5`,children:(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,I.jsx)(Ne,{size:18,className:`text-accent shrink-0`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50`,children:`Help & Support`}),(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400`,children:`Open a ticket with your system snapshot already attached so we can help faster.`})]})]}),!l.hide_help_links&&(0,I.jsxs)(`a`,{href:u,target:`_blank`,rel:`noopener noreferrer`,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-accent text-white hover:bg-primary-hover transition-colors`,children:[(0,I.jsx)(N,{size:13}),`Open ticket`]})]})}),a&&(0,I.jsx)(V,{tone:`danger`,title:`Support snapshot error`,body:a}),(0,I.jsxs)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-3 mb-3`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50`,children:`System snapshot`}),(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400`,children:`Paste this into your support ticket. License key is masked — first 4 + last 4 only.`})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:d,disabled:r,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors disabled:opacity-50`,children:[(0,I.jsx)(P,{size:13,className:r?`animate-spin`:``}),`Refresh`]}),(0,I.jsxs)(`button`,{type:`button`,onClick:async()=>{if(t)try{await navigator.clipboard.writeText(t.markdown),c(!0),window.setTimeout(()=>c(!1),1500)}catch{o(`Clipboard blocked. Select the text below and copy manually.`)}},disabled:!t,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors disabled:opacity-50`,children:[s?(0,I.jsx)(oe,{size:13,className:`text-emerald-500`}):(0,I.jsx)(le,{size:13}),s?`Copied`:`Copy markdown`]})]})]}),t?(0,I.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-2 text-[12px]`,children:Object.entries(t.snapshot).map(([e,t])=>(0,I.jsxs)(`div`,{className:`flex justify-between gap-3 border-b border-neutral-100 dark:border-neutral-800 pb-1`,children:[(0,I.jsx)(`span`,{className:`text-neutral-500 dark:text-neutral-400 font-mono`,children:e}),(0,I.jsx)(`span`,{className:`text-neutral-900 dark:text-neutral-100 text-right truncate font-mono`,children:Array.isArray(t)?t.join(`, `):typeof t==`boolean`?t?`yes`:`no`:String(t)})]},e))}):(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400 italic`,children:`Loading snapshot…`})]}),(()=>{let e=l.footer_credit?.trim();return e?(0,I.jsx)(`div`,{className:`text-[11px] text-neutral-400 dark:text-neutral-500 text-center pt-1`,children:e}):l.hide_help_links?null:(0,I.jsxs)(`div`,{className:`text-[11px] text-neutral-400 dark:text-neutral-500 text-center pt-1`,children:[`Built by`,` `,(0,I.jsx)(`a`,{href:`https://wpdeveloper.com`,target:`_blank`,rel:`noopener noreferrer`,className:`hover:text-accent`,children:`WPDeveloper`})]})})()]})}function Ur(e){let t=Math.max(0,Math.floor(Date.now()/1e3)-e);return t<60?`just now`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}function Wr(){let[e,t]=(0,y.useState)(!1),[n,r]=(0,y.useState)(null),[i,a]=(0,y.useState)(!1),[o,s]=(0,y.useState)(!1),c=async()=>{a(!0);try{r(await B.request(`/mcp/activity?limit=50`))}catch{r({entries:[],summary:{total:0,failed:0,last_ts:0,top_tool:``}})}finally{a(!1)}};(0,y.useEffect)(()=>{e&&n===null&&c()},[e]);let l=async()=>{a(!0);try{r(await B.request(`/mcp/activity/clear`,{method:`POST`}))}finally{a(!1),s(!1)}},u=n?.summary,d=n?.entries??[];return(0,I.jsxs)(`div`,{className:`mt-4 rounded-card border border-line`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:()=>t(e=>!e),"aria-expanded":e,className:`flex w-full items-center gap-2 px-3 py-2.5 text-left`,children:[e?(0,I.jsx)(k,{size:14,className:`text-faint`}):(0,I.jsx)(j,{size:14,className:`text-faint`}),(0,I.jsx)(Ye,{size:14,className:`text-muted`}),(0,I.jsx)(`span`,{className:`text-[13px] font-medium text-ink`,children:`Activity log`}),u&&u.total>0&&(0,I.jsxs)(`span`,{className:`text-[11px] text-faint`,children:[u.total,` call`,u.total===1?``:`s`,u.failed>0&&(0,I.jsxs)(`span`,{className:`text-danger`,children:[` · `,u.failed,` failed`]})]}),(0,I.jsx)(`span`,{className:`ml-auto text-[11px] text-faint`,children:`what the AI did`})]}),e&&(0,I.jsxs)(`div`,{className:`border-t border-line px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[(0,I.jsx)(`p`,{className:`text-[11px] text-muted`,children:`Every tool call an assistant dispatched to this site, newest first.`}),(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,I.jsx)(`button`,{type:`button`,onClick:c,disabled:i,"aria-label":`Refresh activity log`,className:`rounded border border-line p-1.5 text-muted hover:bg-panel disabled:opacity-40`,children:(0,I.jsx)(P,{size:12,className:i?`animate-spin`:``})}),d.length>0&&(0,I.jsx)(`button`,{type:`button`,onClick:()=>o?l():s(!0),onBlur:()=>s(!1),disabled:i,className:`rounded border px-2 py-1 text-[11px] disabled:opacity-40 ${o?`border-danger text-danger`:`border-line text-muted hover:bg-panel`}`,children:o?`Confirm clear`:`Clear`})]})]}),d.length===0?(0,I.jsx)(`p`,{className:`py-4 text-center text-[12px] text-faint`,children:n===null?`Loading…`:`No tool calls recorded yet.`}):(0,I.jsx)(`ul`,{className:`space-y-1`,children:d.map((e,t)=>(0,I.jsxs)(`li`,{className:`flex items-start gap-2 rounded-md bg-panel/50 px-2.5 py-1.5`,children:[e.ok?(0,I.jsx)(oe,{size:13,className:`mt-0.5 shrink-0 text-success`,"aria-label":`succeeded`}):(0,I.jsx)(M,{size:13,className:`mt-0.5 shrink-0 text-danger`,"aria-label":`failed`}),(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,I.jsx)(`code`,{className:`text-[12px] font-medium text-ink`,children:e.tool}),e.scope===`read`?(0,I.jsx)(he,{size:11,className:`text-faint`,"aria-label":`read-only call`}):(0,I.jsx)(ze,{size:11,className:`text-warning`,"aria-label":`write call`})]}),e.args!==``&&(0,I.jsx)(`div`,{className:`truncate text-[11px] text-muted`,children:e.args}),e.error!==``&&(0,I.jsx)(`div`,{className:`text-[11px] text-danger`,children:e.error})]}),(0,I.jsx)(`span`,{className:`shrink-0 text-[11px] tabular-nums text-faint`,children:Ur(e.ts)})]},`${e.ts}-${e.tool}-${t}`))})]})]})}function Gr({active:e}){let[t,n]=(0,y.useState)(null),[r,i]=(0,y.useState)(null),[a,o]=(0,y.useState)(null),[s,c]=(0,y.useState)(!1),[l,u]=(0,y.useState)(!1),[d,f]=(0,y.useState)(!1),p=async()=>{i(`load`),o(null);try{n(await B.request(`/mcp/hub`))}catch(e){o(e instanceof Error?e.message:`Failed to load xSpeed Hub status.`)}finally{i(null),u(!0)}},m=async(e=!1)=>{try{let t=e?{headers:{"X-XSpeed-Reconcile":`1`}}:{};n(await B.request(`/mcp/hub`,t))}catch{}};(0,y.useEffect)(()=>{e&&!l&&r!==`load`&&p()},[e]),(0,y.useEffect)(()=>{let t=()=>{document.visibilityState===`visible`&&e&&l&&m(!0)};return document.addEventListener(`visibilitychange`,t),window.addEventListener(`focus`,t),()=>{document.removeEventListener(`visibilitychange`,t),window.removeEventListener(`focus`,t)}},[e,l]);let h=async()=>{i(`token`),o(null);try{n(await B.request(`/mcp/hub/token`,{method:`POST`}))}catch(e){o(e instanceof Error?e.message:`Could not generate a token.`)}finally{i(null)}},g=async()=>{c(!1),i(`disconnect`),o(null);try{n(await B.request(`/mcp/hub/disconnect`,{method:`POST`}))}catch(e){o(e instanceof Error?e.message:`Disconnect failed.`)}finally{i(null)}};if(!l)return(0,I.jsxs)(`div`,{className:`flex items-center gap-2 text-[12px] text-faint py-6`,children:[(0,I.jsx)(P,{size:13,className:`animate-spin`}),` Loading xSpeed Hub…`]});let _=!!t?.attached,v=(()=>{let e=t?.attach_url;if(!e||typeof window>`u`)return e;try{let t=new URL(e),n=new URL(window.location.href);return n.searchParams.set(`xspeed_connected`,`1`),t.searchParams.set(`return_url`,n.toString()),t.toString()}catch{return e}})(),b=!!t?.site_token;return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,I.jsx)(te,{size:18,className:`text-primary shrink-0`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-ink`,children:`xSpeed Hub`}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted`,children:`Control caching on all your sites from one AI connection.`})]})]}),_&&(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-[12px] text-success shrink-0`,children:[(0,I.jsx)(oe,{size:14}),`Connected`]})]}),_&&(0,I.jsxs)(`div`,{className:`rounded-md border border-line bg-success-tint px-3 py-2.5 flex flex-wrap items-center justify-between gap-2`,children:[(0,I.jsxs)(`p`,{className:`text-[12px] text-ink-soft`,children:[`This site is managed at xSpeed Hub`,t?.account_email?(0,I.jsxs)(I.Fragment,{children:[` — signed in as `,(0,I.jsx)(`strong`,{children:t.account_email})]}):``,`.`]}),(0,I.jsxs)(`a`,{href:t?.hub_url,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-primary text-on-primary hover:bg-primary-hover transition-colors shrink-0`,children:[(0,I.jsx)(N,{size:13}),` Go to dashboard`]})]}),(0,I.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-3 gap-2 text-[12px]`,children:[[`1`,`Connect this site`,`One click — sign in and approve`],[`2`,`Connect AI once`,`Add one connection from your xSpeed Hub dashboard`],[`3`,`Control every site`,`“Purge cache on acme” — done`]].map(([e,t,n])=>(0,I.jsxs)(`div`,{className:`rounded-md border border-line bg-panel px-3 py-2`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium text-ink`,children:[(0,I.jsx)(`span`,{className:`inline-flex h-4 w-4 items-center justify-center rounded-full bg-primary text-on-primary text-[10px]`,children:e}),t]}),(0,I.jsx)(`div`,{className:`text-muted mt-0.5`,children:n})]},e))}),a&&(0,I.jsx)(V,{tone:`danger`,title:`xSpeed Hub error`,body:a}),!_&&(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsxs)(`a`,{href:v,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-primary text-on-primary hover:bg-primary-hover transition-colors`,children:[(0,I.jsx)(rt,{size:13}),` Connect via xSpeed Hub`]}),(0,I.jsx)(`p`,{className:`text-[12px] text-muted`,children:`One click — sign in to your account and approve. No token to copy.`})]}),!_&&(0,I.jsxs)(`div`,{className:`border-t border-line pt-3`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:()=>{b||h(),f(e=>!e)},className:`flex items-center gap-1.5 text-[12px] text-muted hover:text-ink`,children:[(0,I.jsx)(Ae,{size:12}),`Can't redirect? Add with a token instead`]}),d&&(0,I.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[(0,I.jsxs)(`p`,{className:`text-[12px] text-muted`,children:[`Paste this site's URL + token into the`,` `,(0,I.jsxs)(`a`,{href:t?.add_site_url,target:`_blank`,rel:`noreferrer`,className:`text-primary hover:underline inline-flex items-center gap-0.5`,children:[`Add site form `,(0,I.jsx)(N,{size:11})]}),` `,`on xspeedcache.com.`]}),(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`text-[11px] font-medium text-muted mb-1`,children:`Site URL`}),(0,I.jsx)(En,{content:t?.site_url??``})]}),(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`text-[11px] font-medium text-muted mb-1`,children:`Token`}),(0,I.jsx)(En,{content:t?.site_token??``,tone:`blue`})]}),(0,I.jsx)(`p`,{className:`text-[12px] text-muted`,children:`Same token as your MCP connection — treat it like a password.`})]})]}),_&&(0,I.jsx)(`div`,{className:`border-t border-line pt-3`,children:s?(0,I.jsx)(_r,{title:`Disconnect this site from xSpeed Hub?`,body:`This clears the hub link on this site. To fully cut off the hub's access, also Rotate the token above so its stored copy stops working.`,confirmLabel:`Disconnect`,busy:r===`disconnect`,onConfirm:g,onCancel:()=>c(!1)}):(0,I.jsxs)(`button`,{type:`button`,onClick:()=>c(!0),disabled:r!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-line text-danger hover:bg-danger-tint transition-colors disabled:opacity-50`,children:[(0,I.jsx)(Ue,{size:13}),` Disconnect from Hub`]})})]})}var Kr=!1;function qr({module:e}){let[t,n]=(0,y.useState)(null),[r,i]=(0,y.useState)(null),[a,o]=(0,y.useState)(null),[s,c]=(0,y.useState)(!1),[l,u]=(0,y.useState)(`cli`),[d,f]=(0,y.useState)(!1),[p,m]=(0,y.useState)(null),h=async()=>{i(`load`),o(null);try{n(await B.request(`/mcp/connection`))}catch(e){o(e instanceof Error?e.message:`Failed to load MCP status.`)}finally{i(null)}};(0,y.useEffect)(()=>{h()},[]);let g=async()=>{i(`connect`),o(null);try{n(await B.request(`/mcp/connect`,{method:`POST`,body:JSON.stringify({read_only:s})}))}catch(e){o(e instanceof Error?e.message:`Could not connect to xSpeed MCP.`)}finally{i(null)}},_=async()=>{m(null),i(`rotate`),o(null);try{n(await B.request(`/mcp/rotate`,{method:`POST`}))}catch(e){o(e instanceof Error?e.message:`Token rotation failed.`)}finally{i(null)}},v=async()=>{m(null),i(`disconnect`),o(null);try{n(await B.request(`/mcp/disconnect`,{method:`POST`}))}catch(e){o(e instanceof Error?e.message:`Disconnect failed.`)}finally{i(null)}},b=!!t?.connected;return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-card p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[b?(0,I.jsx)(oe,{size:18,className:`text-success shrink-0`}):(0,I.jsx)(Ue,{size:18,className:`text-faint shrink-0`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2 font-medium text-ink`,children:[b?`Connected`:`Not connected`,Kr]}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted`,children:`Control this site's cache from Claude and other MCP-compatible AI agents.`})]})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:h,disabled:r!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-line text-ink-soft hover:bg-panel transition-colors disabled:opacity-50`,children:[(0,I.jsx)(P,{size:13,className:r===`load`?`animate-spin`:``}),`Refresh`]}),b?(0,I.jsxs)(I.Fragment,{children:[Kr,(0,I.jsxs)(`button`,{type:`button`,onClick:()=>m(`rotate`),disabled:r!==null||p!==null,title:`Mint a fresh token and invalidate the current one`,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-line text-ink-soft hover:bg-panel transition-colors disabled:opacity-50`,children:[r===`rotate`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(Ke,{size:13}),`Rotate`]}),(0,I.jsxs)(`button`,{type:`button`,onClick:()=>m(`disconnect`),disabled:r!==null||p!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-line text-danger hover:bg-danger-tint transition-colors disabled:opacity-50`,children:[r===`disconnect`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(Ue,{size:13}),`Disconnect`]})]}):(0,I.jsxs)(`button`,{type:`button`,onClick:g,disabled:r!==null,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-primary text-on-primary hover:bg-primary-hover transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,children:[r===`connect`?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(rt,{size:13}),`Connect`]})]})]}),Kr]}),p===`rotate`&&(0,I.jsx)(_r,{title:`Rotate the MCP token?`,body:`A fresh token is minted and the current one is invalidated immediately. Any AI agent using the old token stops working until you paste the new one.`,confirmLabel:`Rotate token`,busy:r===`rotate`,onConfirm:_,onCancel:()=>m(null)}),p===`disconnect`&&(0,I.jsx)(_r,{title:`Disconnect MCP?`,body:`This revokes the token and every OAuth grant immediately — any AI agent using this site stops working until you reconnect.`,confirmLabel:`Disconnect`,busy:r===`disconnect`,onConfirm:v,onCancel:()=>m(null)}),a&&(0,I.jsx)(V,{tone:`danger`,title:`MCP error`,body:a}),t&&(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-card p-4 sm:p-5 space-y-3`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`font-medium text-ink`,children:`Add this MCP server to your AI client`}),(0,I.jsxs)(`div`,{className:`text-[12px] text-muted mt-0.5`,children:[`Pick the format your client uses. The token travels in an`,` `,(0,I.jsx)(`code`,{className:`font-mono text-[11px]`,children:`Authorization`}),` header, so it never lands in a URL or server log.`]})]}),(0,I.jsx)(`div`,{className:`flex items-center gap-1 border-b border-line`,children:[[`cli`,`Claude Code (CLI)`],[`json`,`JSON config`],[`prompt`,`AI prompt`],[`oauth`,`Remote (OAuth)`]].map(([e,t])=>(0,I.jsx)(`button`,{type:`button`,onClick:()=>u(e),className:`flex items-center gap-1.5 text-[12px] px-3 py-1.5 -mb-px border-b-2 transition-colors ${l===e?`border-primary text-ink font-medium`:`border-transparent text-muted hover:text-ink`}`,children:t},e))}),!b&&(0,I.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-line bg-panel px-3 py-2 text-[12px] text-muted`,children:[(0,I.jsx)(rt,{size:14,className:`mt-0.5 shrink-0 text-primary`}),(0,I.jsxs)(`span`,{children:[`Click `,(0,I.jsx)(`strong`,{className:`font-medium text-ink-soft`,children:`Connect`}),` `,`above to mint this site's token, then copy your connection config here.`]})]}),l===`cli`&&b&&(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(`div`,{className:`text-[12px] text-muted`,children:`Run this once in your terminal — it registers xSpeed with Claude Code:`}),(0,I.jsx)(En,{content:t.config.cli,tone:`blue`})]}),l===`json`&&b&&(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(`div`,{className:`text-[12px] text-muted`,children:`Add this to your client's MCP config (e.g. Claude Desktop's config file):`}),(0,I.jsx)(En,{content:t.config.json,tone:`blue`})]}),l===`prompt`&&b&&(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-line bg-warning-tint px-3 py-2 text-[12px] text-warning`,children:[(0,I.jsx)(dt,{size:14,className:`mt-0.5 shrink-0`}),(0,I.jsxs)(`span`,{children:[(0,I.jsx)(`strong`,{className:`font-semibold`,children:`Not recommended.`}),` This pastes your token into a chat, so the AI provider may see and store it. Prefer the`,` `,(0,I.jsx)(`strong`,{className:`font-medium`,children:`Claude Code (CLI)`}),`,`,` `,(0,I.jsx)(`strong`,{className:`font-medium`,children:`JSON config`}),`, or`,` `,(0,I.jsx)(`strong`,{className:`font-medium`,children:`Remote (OAuth)`}),` methods, which keep the token out of the conversation.`]})]}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted`,children:`Paste this to your AI agent so it knows what it's connected to and how to act:`}),(0,I.jsx)(En,{content:t.ai_prompt})]}),l===`oauth`&&b&&(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(0,I.jsx)(`div`,{className:`text-[12px] text-muted`,children:`For clients that connect by URL only (e.g. claude.ai connectors). Paste just the server URL — no token field:`}),(0,I.jsx)(En,{content:t.mcp_endpoint,tone:`blue`}),(0,I.jsxs)(`div`,{className:`flex items-start gap-2 text-[12px] text-muted pt-1`,children:[(0,I.jsx)(`span`,{className:`text-primary shrink-0`,children:`•`}),(0,I.jsxs)(`span`,{children:[`No token needed. Your client opens a browser page where you`,` `,(0,I.jsx)(`strong`,{className:`font-medium text-ink-soft`,children:`approve access`}),` `,`(you must be signed in here as an administrator). Approval grants the same`,` `,t.read_only?`read-only`:`read & write`,` access as the token above.`]})]})]}),b&&(0,I.jsxs)(`div`,{className:`flex items-start gap-2 text-[12px] text-muted pt-1`,children:[(0,I.jsx)(`span`,{className:`text-warning shrink-0`,children:`•`}),(0,I.jsxs)(`span`,{children:[`Treat the token like a password — it lets an AI control this site.`,` `,(0,I.jsx)(`strong`,{className:`font-medium text-ink-soft`,children:`Rotate`}),` `,`if it may have leaked;`,` `,(0,I.jsx)(`strong`,{className:`font-medium text-ink-soft`,children:`Disconnect`}),` `,`to revoke entirely.`,t.scopes.length>0&&(0,I.jsxs)(I.Fragment,{children:[` Granted scopes: `,t.scopes.join(`, `),`.`]})]})]})]}),b&&t&&t.tools.length>0&&(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-card p-4 sm:p-5`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:()=>f(e=>!e),"aria-expanded":d?`true`:`false`,className:`flex w-full items-center gap-2 rounded text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-1`,children:[d?(0,I.jsx)(k,{size:16,className:`shrink-0 text-muted`}):(0,I.jsx)(j,{size:16,className:`shrink-0 text-muted`}),(0,I.jsx)(`span`,{className:`font-medium text-ink`,children:`Tools your AI agent can call`}),(0,I.jsxs)(`span`,{className:`text-[12px] text-faint`,children:[`(`,t.tools.length,`)`]})]}),d&&(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`text-[12px] text-muted mt-2`,children:t.read_only?(0,I.jsxs)(I.Fragment,{children:[`This is a `,(0,I.jsx)(`strong`,{className:`font-medium`,children:`read-only`}),` connection, so the`,` `,(0,I.jsx)(`span`,{className:`text-warning`,children:`write`}),` tools below are refused.`]}):(0,I.jsx)(I.Fragment,{children:`Each tool maps to an xSpeed action. Write tools can change this site.`})}),(0,I.jsx)(`ul`,{className:`mt-3 divide-y divide-line`,children:t.tools.map(e=>(0,I.jsxs)(`li`,{className:`flex items-start gap-3 py-2`,children:[(0,I.jsx)(`code`,{className:`font-mono text-[11px] text-ink shrink-0 mt-0.5`,children:e.name}),(0,I.jsx)(`span`,{className:`shrink-0 mt-0.5 text-[10px] font-medium px-1.5 py-0.5 rounded ${e.write?`bg-warning-tint text-warning`:`bg-panel text-muted`}`,children:e.write?`write`:`read`}),(0,I.jsx)(`span`,{className:`text-[12px] text-muted`,children:e.description})]},e.name))})]})]}),!b&&t!==null&&(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-card p-4 sm:p-5`,children:[(0,I.jsx)(`div`,{className:`font-medium text-ink`,children:`What your AI agent can do`}),(0,I.jsxs)(`div`,{className:`text-[12px] text-muted mt-1`,children:[`Once connected, your AI can read cache status & stats, purge the cache, toggle caching on or off, and read or change module settings — all scoped to this site.`,Kr,` `,`Rotate or disconnect any time to revoke access.`]})]}),(0,I.jsx)(`div`,{className:`border border-line bg-paper rounded-card p-4 sm:p-5`,children:(0,I.jsx)(Gr,{active:!0})}),(0,I.jsx)(Wr,{})]})}var Jr=[{key:`gzip`,slug:`gzip`,self:!0},{key:`brotli`,slug:`brotli-compression`,pro:!0}];function Yr({module:e,onSaved:t,subtab:n,onSubtabChange:r,getModule:i}){let a=Kt(),{items:o,active:s}=mr(Jr,{module:e,getModule:i,isPro:a===`pro`||a===`trial`,subtab:n});return(0,y.useEffect)(()=>{n&&!o.some(e=>e.key===n)&&r?.(Jr[0].key)},[n,o,r]),(0,I.jsxs)(`div`,{className:`space-y-5`,children:[(0,I.jsx)(Ln,{items:o,value:s,onChange:e=>r?.(e),idBase:`compression`}),s===`gzip`&&(0,I.jsx)(Qi,{module:e,onSaved:t}),s===`brotli`&&(0,I.jsx)(Qn,{demo:`compression-brotli`,children:(0,I.jsx)(H,{slug:`brotli-compression`,getModule:i,onSaved:t})})]})}var Xr=[{key:`minify`,slug:`minify`,self:!0},{key:`critical`,slug:`critical-css`,panel:`CriticalCssPanel`,pro:!0},{key:`unused`,slug:`unused-css`,panel:`UnusedCssPanel`,pro:!0}];function Zr({module:e,onSaved:t,subtab:n,onSubtabChange:r,getModule:i}){let a=Kt(),{items:o,active:s}=mr(Xr,{module:e,getModule:i,isPro:a===`pro`||a===`trial`,subtab:n});return(0,y.useEffect)(()=>{n&&!o.some(e=>e.key===n)&&r?.(Xr[0].key)},[n,o,r]),(0,I.jsxs)(`div`,{className:`space-y-5`,children:[(0,I.jsx)(Ln,{items:o,value:s,onChange:e=>r?.(e),idBase:`cssjs`}),s===`minify`&&(0,I.jsx)(Qi,{module:e,onSaved:t}),s===`critical`&&(0,I.jsx)(Qn,{demo:`cssjs-critical`,children:(0,I.jsx)(H,{panel:`CriticalCssPanel`,slug:`critical-css`,getModule:i,onSaved:t})}),s===`unused`&&(0,I.jsx)(Qn,{demo:`cssjs-unused`,children:(0,I.jsx)(H,{panel:`UnusedCssPanel`,slug:`unused-css`,getModule:i,onSaved:t})})]})}var Qr=[{key:`lazy`,slug:`lazy`,self:!0},{key:`images`,slug:`images`,panel:`ImagesPanel`,pro:!0},{key:`smart`,slug:`smart-image`,panel:`SmartImagePanel`,pro:!0}];function $r({module:e,onSaved:t,subtab:n,onSubtabChange:r,getModule:i}){let a=Kt(),{items:o,active:s}=mr(Qr,{module:e,getModule:i,isPro:a===`pro`||a===`trial`,subtab:n});return(0,y.useEffect)(()=>{n&&!o.some(e=>e.key===n)&&r?.(Qr[0].key)},[n,o,r]),(0,I.jsxs)(`div`,{className:`space-y-5`,children:[(0,I.jsx)(Ln,{items:o,value:s,onChange:e=>r?.(e),idBase:`media`}),s===`lazy`&&(0,I.jsx)(Qi,{module:e,onSaved:t}),s===`images`&&(0,I.jsx)(Qn,{demo:`media-formats`,children:(0,I.jsx)(H,{panel:`ImagesPanel`,slug:`images`,getModule:i,onSaved:t})}),s===`smart`&&(0,I.jsx)(Qn,{demo:`media-smart`,children:(0,I.jsx)(H,{panel:`SmartImagePanel`,slug:`smart-image`,getModule:i,onSaved:t})})]})}var ei=[{key:`hints`,slug:`resource-hints`,self:!0},{key:`speculation`,slug:`smart-predict`,panel:`SmartPredictPanel`,pro:!0}];function ti({module:e,onSaved:t,subtab:n,onSubtabChange:r,getModule:i}){let a=Kt(),{items:o,active:s}=mr(ei,{module:e,getModule:i,isPro:a===`pro`||a===`trial`,subtab:n});return(0,y.useEffect)(()=>{n&&!o.some(e=>e.key===n)&&r?.(ei[0].key)},[n,o,r]),(0,I.jsxs)(`div`,{className:`space-y-5`,children:[(0,I.jsx)(Ln,{items:o,value:s,onChange:e=>r?.(e),idBase:`resource-hints`}),s===`hints`&&(0,I.jsx)(Qi,{module:e,onSaved:t}),s===`speculation`&&(0,I.jsx)(Qn,{demo:`hints-speculation`,children:(0,I.jsx)(H,{panel:`SmartPredictPanel`,slug:`smart-predict`,getModule:i,onSaved:t})})]})}var ni=[{key:`coverage`,label:`What to cache`,locked:!0},{key:`beyond`,label:`Feeds & API`,locked:!0},{key:`rules`,label:`Rules & bypass`,locked:!0}],ri=`coverage`,ii=new Set(ni.map(e=>e.key));function ai({getModule:e,onSaved:t,subtab:n,onSubtabChange:r}){let i=Kt(),a=i===`pro`||i===`trial`,o=ni.map(e=>({...e,locked:e.locked&&!a})),s=n&&ii.has(n)?n:ri;return(0,y.useEffect)(()=>{n&&!ii.has(n)&&r?.(ri)},[n,r]),(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsx)(Ln,{items:o,value:s,onChange:e=>r?.(e),idBase:`cache-extras`}),s===`coverage`&&(a?(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsx)(H,{slug:`cache-404`,getModule:e,onSaved:t}),(0,I.jsx)(H,{slug:`search-cache`,getModule:e,onSaved:t})]}):(0,I.jsx)(Kn,{id:`coverage-what`})),s===`beyond`&&(a?(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsx)(H,{slug:`feed-cache`,getModule:e,onSaved:t}),(0,I.jsx)(H,{panel:`RestCachePanel`,slug:`rest-cache`,getModule:e,onSaved:t})]}):(0,I.jsx)(Kn,{id:`coverage-beyond`})),s===`rules`&&(a?(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsx)(H,{panel:`CustomRulesPanel`,slug:`custom-rules`,getModule:e,onSaved:t}),(0,I.jsx)(H,{panel:`MaintenanceCachePanel`,slug:`maintenance-cache`,getModule:e,onSaved:t})]}):(0,I.jsx)(Kn,{id:`coverage-rules`}))]})}function U({onSaved:e,subtab:t,onSubtabChange:n,getModule:r}){return(0,I.jsx)(ai,{getModule:e=>r?.(e),subtab:t,onSubtabChange:n,onSaved:e})}function oi({open:e,onClose:t,title:n,children:r,dismissible:i=!0,labelledBy:a}){let o=(0,y.useRef)(null),s=(0,y.useRef)(null),c=(0,y.useCallback)(()=>{i&&t()},[i,t]);return(0,y.useEffect)(()=>{if(!e)return;s.current=document.activeElement;let t=window.requestAnimationFrame(()=>{(o.current?.querySelector(si)??o.current)?.focus()});return()=>{window.cancelAnimationFrame(t);let e=s.current;e&&e.isConnected&&e.focus()}},[e]),(0,y.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`Escape`&&(e.stopPropagation(),c())};return document.addEventListener(`keydown`,t),()=>document.removeEventListener(`keydown`,t)},[e,c]),(0,y.useEffect)(()=>{if(!e)return;let t=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=t}},[e]),e?(0,F.createPortal)((0,I.jsxs)(`div`,{className:`fixed inset-0 z-[100000] flex items-center justify-center p-4`,onMouseDown:e=>{o.current&&!o.current.contains(e.target)&&c()},children:[(0,I.jsx)(`div`,{className:`absolute inset-0 bg-black/40`,"aria-hidden":`true`}),(0,I.jsxs)(`div`,{ref:o,role:`dialog`,"aria-modal":`true`,"aria-label":a?void 0:n,"aria-labelledby":a,tabIndex:-1,onKeyDown:e=>{if(e.key!==`Tab`)return;let t=o.current?.querySelectorAll(si);if(!t||t.length===0)return;let n=t[0],r=t[t.length-1];!n||!r||(e.shiftKey&&document.activeElement===n?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus()))},className:`relative w-full max-w-md rounded-card border border-line bg-paper shadow-xl focus:outline-none`,children:[(0,I.jsxs)(`div`,{className:`flex items-start gap-3 px-5 pt-5`,children:[(0,I.jsx)(`h2`,{className:`flex-1 text-[15px] font-medium text-ink`,children:n}),i&&(0,I.jsx)(`button`,{type:`button`,onClick:t,"aria-label":L(`Close`),className:`-mr-1 -mt-1 shrink-0 rounded p-1 text-muted hover:text-ink hover:bg-panel transition-colors`,children:(0,I.jsx)(_t,{size:16})})]}),(0,I.jsx)(`div`,{className:`px-5 pb-5 pt-3`,children:r})]})]}),document.getElementById(`xspeed-app`)??document.body):null}var si=`a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`,ci=typeof window<`u`?window.XSpeedConfig?.bootstrap?.hub??null:null,li=ci,ui=ci!=null,di=!1,fi=!1,pi=new Set;function mi(e){li=e,ui=!0,pi.forEach(e=>e())}function hi(e){return pi.add(e),()=>pi.delete(e)}function gi({active:e=!0,initial:t}={}){let n=(0,y.useSyncExternalStore)(hi,()=>li),r=(0,y.useSyncExternalStore)(hi,()=>ui),[i,a]=(0,y.useState)(null),[o,s]=(0,y.useState)(null),c=(0,y.useCallback)(async()=>{if(!di){di=!0,a(`load`),s(null);try{mi(await B.request(`/mcp/hub`))}catch(e){s(e instanceof Error?e.message:`Failed to load xSpeed Hub status.`)}finally{di=!1,a(null)}}},[]),l=(0,y.useCallback)(async(e=!1)=>{try{let t=e?{headers:{"X-XSpeed-Reconcile":`1`}}:{};mi(await B.request(`/mcp/hub`,t))}catch{}},[]),u=(0,y.useCallback)(async()=>{a(`token`),s(null);try{mi(await B.request(`/mcp/hub/token`,{method:`POST`}))}catch(e){s(e instanceof Error?e.message:`Could not generate a token.`)}finally{a(null)}},[]),d=(0,y.useCallback)(async()=>{a(`disconnect`),s(null);try{mi(await B.request(`/mcp/hub/disconnect`,{method:`POST`}))}catch(e){s(e instanceof Error?e.message:`Disconnect failed.`)}finally{a(null)}},[]);return(0,y.useEffect)(()=>{if(!(fi||!e)){if(fi=!0,t!=null&&!ui){mi(t);return}c()}},[e]),(0,y.useEffect)(()=>{if(typeof window>`u`)return;let e=new URL(window.location.href);e.searchParams.get(`xspeed_connected`)===`1`&&(l(!0),e.searchParams.delete(`xspeed_connected`),e.searchParams.delete(`xspeed_hub_nonce`),e.searchParams.delete(`xspeed_hub_email`),window.history.replaceState(null,``,e.toString()))},[]),(0,y.useEffect)(()=>{let t=()=>{document.visibilityState===`visible`&&e&&r&&l(!0)};return document.addEventListener(`visibilitychange`,t),window.addEventListener(`focus`,t),()=>{document.removeEventListener(`visibilitychange`,t),window.removeEventListener(`focus`,t)}},[e,r,l]),{status:n,connectUrl:(()=>{let e=n?.attach_url;if(!e||typeof window>`u`)return e;try{let t=new URL(e),n=new URL(window.location.href);return n.searchParams.set(`xspeed_connected`,`1`),t.searchParams.set(`return_url`,n.toString()),t.toString()}catch{return e}})(),busy:i,error:o,loaded:r,attached:!!n?.attached,hasToken:!!n?.site_token,load:c,reload:l,generateToken:u,disconnect:d,setError:s}}var _i=[`not_connected`,`unauthorized`];function vi(e){return e!==void 0&&_i.includes(e)}function yi({open:e,onClose:t,onConnected:n,local:r=!1}){let{connectUrl:i,attached:a,busy:o,error:s,generateToken:c}=gi({active:e}),l=o===`token`,[u,d]=(0,y.useState)(!1),f=(0,y.useRef)(!1);(0,y.useEffect)(()=>{e||(d(!1),f.current=!1)},[e]),(0,y.useEffect)(()=>{if(!e||!a||!u||f.current)return;f.current=!0;let r=window.setTimeout(()=>{n(),t()},900);return()=>window.clearTimeout(r)},[e,a,u,n,t]);let p=async()=>{d(!0);let e=i||await c();e&&window.open(e,`_blank`,`noopener`)};return(0,I.jsx)(oi,{open:e,onClose:t,title:L(`Run a GTmetrix test`),children:a&&u?(0,I.jsxs)(`div`,{className:`flex items-center gap-2 py-2 text-[13px] text-ink`,children:[(0,I.jsx)(O,{size:16,className:`text-success`}),L(`Connected — starting your test…`)]}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`flex gap-3`,children:[(0,I.jsx)(ye,{size:18,className:`mt-0.5 shrink-0 text-accent`}),(0,I.jsxs)(`div`,{className:`space-y-2 text-[13px] leading-relaxed text-ink-soft`,children:[(0,I.jsx)(`p`,{children:L(`Connect this site to xSpeed Hub to run GTmetrix tests from here.`)}),(0,I.jsx)(`p`,{className:`text-muted`,children:L(`It takes a few seconds.`)})]})]}),r&&(0,I.jsxs)(`div`,{className:`mt-3 flex gap-2 rounded border border-line bg-panel px-3 py-2 text-[12px] text-muted`,children:[(0,I.jsx)(ke,{size:14,className:`mt-0.5 shrink-0`}),(0,I.jsx)(`span`,{children:L(`This site looks local, so it may not be reachable for testing. Your own GTmetrix API key works either way — see the settings below.`)})]}),s&&(0,I.jsx)(`p`,{className:`mt-3 text-[12px] text-danger`,children:s}),(0,I.jsxs)(`div`,{className:`mt-4 flex items-center justify-end gap-2`,children:[(0,I.jsx)(`button`,{type:`button`,onClick:t,className:`rounded px-3 py-1.5 text-[13px] text-muted hover:text-ink hover:bg-panel transition-colors`,children:L(`Not now`)}),(0,I.jsxs)(`button`,{type:`button`,onClick:()=>void p(),disabled:l,className:`inline-flex items-center gap-1.5 rounded bg-accent px-3 py-1.5 text-[13px] text-white hover:bg-primary-hover transition-colors disabled:opacity-50`,children:[l?(0,I.jsx)(Fe,{size:13,className:`animate-spin`}):(0,I.jsx)(N,{size:13}),L(u?`Waiting for connection…`:`Connect`)]})]}),u&&(0,I.jsx)(`p`,{className:`mt-2 text-right text-[11px] text-muted`,children:L(`Finish in the tab that opened, then come back here.`)})]})})}var bi=e=>e?.status===`queued`||e?.status===`running`;function xi(e,t){return L(`%1$d of %2$d left`).replace(`%1$d`,String(e)).replace(`%2$d`,String(t))}var Si=[{key:`lcp`,label:`LCP`,unit:`ms`,title:`Largest Contentful Paint — when the main content finished rendering`},{key:`fcp`,label:`FCP`,unit:`ms`,title:`First Contentful Paint — when the first text or image appeared`},{key:`tbt`,label:`TBT`,unit:`ms`,title:`Total Blocking Time — how long the page was unresponsive to input`},{key:`cls`,label:`CLS`,unit:`raw`,title:`Cumulative Layout Shift — how much the page moved while loading`},{key:`si`,label:`SI`,unit:`ms`,title:`Speed Index — how quickly the page visibly filled in`},{key:`ttfb`,label:`TTFB`,unit:`ms`,title:`Time to First Byte — how long the server took to respond`}];function Ci(e,t,n){let r=n[e];return t==null||!r?`unknown`:t<=r.good?`good`:t<=r.poor?`needs-improvement`:`poor`}var wi={good:`bg-success`,"needs-improvement":`bg-warning`,poor:`bg-danger`,unknown:`bg-line-strong`};function Ti(e){return e===null?`stroke-line`:e>=90?`stroke-success`:e>=50?`stroke-warning`:`stroke-danger`}function Ei(e){return e===null?`text-faint`:e>=90?`text-success`:e>=50?`text-warning`:`text-danger`}function Di(e,t){return e==null?`—`:t===`raw`?e.toFixed(3):`${Math.round(e)} ms`}function Oi({runs:e}){let t=e.filter(e=>e.ok&&typeof e.score==`number`).slice(0,12).reverse().map(e=>e.score);if(t.length<2)return null;let n=t.map((e,n)=>`${n/(t.length-1)*120},${28-e/100*28}`).join(` `),r=t[0]??0,i=(t[t.length-1]??0)-r;return(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(`svg`,{width:120,height:28,viewBox:`0 0 120 28`,"aria-hidden":`true`,className:`overflow-visible`,children:(0,I.jsx)(`polyline`,{points:n,fill:`none`,strokeWidth:`1.5`,className:i>=0?`stroke-success`:`stroke-danger`,strokeLinejoin:`round`,strokeLinecap:`round`})}),(0,I.jsxs)(`span`,{className:`text-[11px] tabular-nums ${i>0?`text-success`:i<0?`text-danger`:`text-muted`}`,title:L(`Change across the runs shown`),children:[i>0?`+`:``,i===0?L(`no change`):i]})]})}function ki(e){let t=Math.floor(Date.now()/1e3)-e;return t<60?L(`just now`):t<3600?`${Math.floor(t/60)}m ${L(`ago`)}`:t<86400?`${Math.floor(t/3600)}h ${L(`ago`)}`:`${Math.floor(t/86400)}d ${L(`ago`)}`}function Ai({module:e,onSaved:t}){let[n,r]=(0,y.useState)(null),[i,a]=(0,y.useState)(!1),[o,s]=(0,y.useState)(!1),[c,l]=(0,y.useState)(null),u=(0,y.useRef)(null),[d,f]=(0,y.useState)(null),[p,m]=(0,y.useState)(null),[h,g]=(0,y.useState)(!1),[_,v]=(0,y.useState)(!1),[b,x]=(0,y.useState)([]),S=(0,y.useRef)(null),C=e.settings?.enabled===!0,w=e.settings?.provider===`gtmetrix`&&typeof e.settings?.gtmetrix_api_key==`string`&&e.settings.gtmetrix_api_key!==``,T=d?.available===!0&&(d.quota?.remaining??0)>0,ee=!w&&(d?.available===!0||(d?vi(d.reason):!1)),E=(0,y.useCallback)(async()=>{try{r(await B.request(`/score/history`))}catch{r({runs:[],latest:null,thresholds:{}})}},[]);(0,y.useEffect)(()=>{E()},[E]);let te=(0,y.useCallback)(async()=>{try{let e=await B.request(`/score/hub-status`);f(e),m(e.runs?.[0]??null)}catch{f({available:!1})}},[]);(0,y.useEffect)(()=>{te()},[te]);let D=(0,y.useCallback)(async()=>{try{if(!(await B.request(`/score/status`)).pending){s(!1),await E();return}u.current=window.setTimeout(()=>void D(),6e3)}catch(e){s(!1),l(e instanceof Error?e.message:L(`Could not check the test status.`))}},[E]);(0,y.useEffect)(()=>()=>{u.current&&window.clearTimeout(u.current)},[]);let ne=(0,y.useCallback)(async()=>{try{let e=await B.request(`/score/hub-status`);f(e);let t=e.runs?.[0]??null;if(m(t),bi(t)){S.current=window.setTimeout(()=>void ne(),5e3);return}t?.status===`error`&&t.error&&l(t.error),await E()}catch{await E()}},[E]);(0,y.useEffect)(()=>()=>{S.current&&window.clearTimeout(S.current)},[]);let re=(0,y.useCallback)(async()=>{g(!0),l(null);try{let e=await B.request(`/score/hub-test`,{method:`POST`,body:JSON.stringify({})});m(e.run),f(t=>t&&{...t,quota:e.quota??t.quota}),S.current=window.setTimeout(()=>void ne(),5e3)}catch(e){l(e instanceof Error?e.message:L(`The test could not be started.`))}finally{g(!1)}},[ne]),O=(0,y.useCallback)(()=>{if(d?.available){re();return}v(!0)},[d?.available,re]),k=async()=>{a(!0),l(null);try{let e=await B.request(`/score/run`,{method:`POST`,body:JSON.stringify({})});e.pending?(s(!0),u.current=window.setTimeout(()=>void D(),6e3)):(await E(),!e.ok&&e.error&&l(e.error))}catch(e){l(e instanceof Error?e.message:L(`The test could not be started.`))}finally{a(!1)}},A=n?.latest??null,j=n?.thresholds??{};return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-lg p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,I.jsx)(ye,{size:18,className:`text-accent shrink-0`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-ink`,children:L(ee?`Speed test`:`External score`)}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted`,children:A?`${A.provider===`gtmetrix`?`GTmetrix`:`PageSpeed Insights`} · ${ki(A.ts)}`:L(ee?`Performance score and Core Web Vitals.`:`No audit run yet.`)})]})]}),ee?(0,I.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[d?.quota&&(0,I.jsx)(`span`,{className:`text-[11px] text-muted`,title:L(`Free tests included with your plan`),children:xi(d.quota.remaining,d.quota.limit)}),(0,I.jsxs)(`button`,{type:`button`,onClick:O,disabled:h||bi(p)||d?.available===!0&&!T,title:d?.available&&(d.quota?.remaining??0)===0?L(`You have used this month’s free tests.`):L(`Run a GTmetrix test on this site`),className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-accent text-white hover:bg-primary-hover transition-colors disabled:opacity-50`,children:[(h||bi(p))&&(0,I.jsx)(P,{size:13,className:`animate-spin`}),bi(p)?L(`Testing…`):L(`Test with GTmetrix`)]})]}):(0,I.jsxs)(`button`,{type:`button`,onClick:k,disabled:!C||i||o,title:C?void 0:L(`Turn on external scores below first.`),className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-accent text-white hover:bg-primary-hover transition-colors disabled:opacity-50`,children:[(i||o)&&(0,I.jsx)(P,{size:13,className:`animate-spin`}),L(o?`Running…`:`Test now`)]})]}),!C&&!ee&&(0,I.jsx)(`p`,{className:`mt-3 text-[12px] text-muted`,children:L(`External scores are off. Turning them on lets you run an audit from here — nothing is sent anywhere until you press Test.`)}),c&&(0,I.jsxs)(`div`,{className:`mt-3 flex items-start gap-2 text-[12px] text-danger`,children:[(0,I.jsx)(dt,{size:13,className:`mt-0.5 shrink-0`}),(0,I.jsx)(`span`,{children:c})]}),A&&(0,I.jsxs)(`div`,{className:`mt-4 rounded-lg border border-line p-4`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-6 gap-y-4`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,I.jsxs)(`div`,{className:`relative h-16 w-16 shrink-0`,children:[(0,I.jsxs)(`svg`,{viewBox:`0 0 36 36`,className:`h-16 w-16 -rotate-90`,children:[(0,I.jsx)(`circle`,{cx:`18`,cy:`18`,r:`15.9155`,fill:`none`,strokeWidth:`2.5`,className:`stroke-line`}),A.score!==null&&(0,I.jsx)(`circle`,{cx:`18`,cy:`18`,r:`15.9155`,fill:`none`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeDasharray:`${A.score}, 100`,className:Ti(A.score)})]}),(0,I.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center text-[20px] font-semibold tabular-nums ${Ei(A.score)}`,children:A.score===null?`—`:A.score})]}),(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`text-[12px] font-medium text-ink`,children:L(`Performance`)}),(0,I.jsx)(`div`,{className:`text-[11px] text-muted`,children:A.strategy||L(`score out of 100`)})]})]}),(0,I.jsx)(`div`,{className:`grid flex-1 grid-cols-2 gap-x-4 gap-y-2 sm:grid-cols-3`,children:Si.map(e=>{let t=A.metrics?.[e.key]??null,n=Ci(e.key,t,j);return(0,I.jsxs)(`div`,{className:`min-w-0`,title:e.title,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,I.jsx)(`span`,{className:`h-1.5 w-1.5 shrink-0 rounded-full ${wi[n]}`}),(0,I.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted`,children:e.label})]}),(0,I.jsx)(`div`,{className:`mt-0.5 text-[14px] font-medium tabular-nums text-ink`,children:Di(t,e.unit)})]},e.key)})})]}),(0,I.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-x-4 gap-y-1 border-t border-line pt-3 text-[11px] text-muted`,children:[A.url&&(0,I.jsx)(`span`,{className:`truncate max-w-[22rem]`,children:A.url}),A.report_url&&(0,I.jsxs)(`a`,{href:A.report_url,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 hover:text-accent`,children:[L(`View on GTmetrix`),(0,I.jsx)(N,{size:11})]})]})]}),A?.opportunities&&A.opportunities.length>0&&(0,I.jsxs)(`div`,{className:`mt-4 border-t border-line pt-3`,children:[(0,I.jsxs)(`div`,{className:`mb-1.5 flex items-center gap-1.5 text-[12px] font-medium text-ink`,children:[(0,I.jsx)(Pe,{size:13,className:`text-accent`}),L(`What to improve`)]}),(0,I.jsx)(`ul`,{className:`space-y-1`,children:A.opportunities.slice(0,6).map(e=>(0,I.jsxs)(`li`,{className:`flex items-baseline justify-between gap-3 text-[12px] text-ink-soft`,children:[(0,I.jsx)(`span`,{className:`min-w-0`,children:e.title}),e.metrics.length>0&&(0,I.jsx)(`span`,{className:`shrink-0 text-[10px] uppercase tracking-wide text-faint`,children:e.metrics.join(` · `)})]},e.id))})]}),A?.issues&&A.issues.length>0&&(0,I.jsx)(`ul`,{className:`mt-4 space-y-1`,children:A.issues.slice(0,3).map(e=>(0,I.jsxs)(`li`,{className:`flex items-baseline justify-between gap-3 text-[12px] text-ink-soft`,children:[(0,I.jsx)(`span`,{className:`min-w-0 truncate`,children:e.title}),(0,I.jsxs)(`span`,{className:`tabular-nums text-muted shrink-0`,children:[`−`,Math.round(e.savings_ms),` ms`]})]},e.id))})]}),n&&n.runs.length>1&&(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-lg p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`mb-2 flex flex-wrap items-center justify-between gap-2`,children:[(0,I.jsx)(`div`,{className:`text-[12px] font-medium text-ink`,children:L(`Run history`)}),(0,I.jsx)(Oi,{runs:n.runs})]}),b.length===2&&(()=>{let e=n.runs.find(e=>e.ts===b[0]),t=n.runs.find(e=>e.ts===b[1]);if(!e||!t)return null;let[r,i]=e.ts<=t.ts?[e,t]:[t,e],a=[[L(`Performance`),r.score,i.score,`score`],[`LCP`,r.metrics?.lcp??null,i.metrics?.lcp??null,`ms`],[`TBT`,r.metrics?.tbt??null,i.metrics?.tbt??null,`ms`],[`CLS`,r.metrics?.cls??null,i.metrics?.cls??null,`raw`],[`TTFB`,r.metrics?.ttfb??null,i.metrics?.ttfb??null,`ms`]];return(0,I.jsxs)(`div`,{className:`mb-3 rounded border border-line p-3`,children:[(0,I.jsxs)(`div`,{className:`mb-2 flex items-center justify-between text-[11px] text-muted`,children:[(0,I.jsxs)(`span`,{children:[ki(r.ts),` → `,ki(i.ts)]}),(0,I.jsx)(`button`,{type:`button`,onClick:()=>x([]),className:`text-accent hover:underline`,children:L(`Clear`)})]}),(0,I.jsxs)(`table`,{className:`w-full border-collapse text-left`,children:[(0,I.jsx)(`thead`,{children:(0,I.jsxs)(`tr`,{className:`text-[10px] uppercase tracking-wider text-faint`,children:[(0,I.jsx)(`th`,{scope:`col`,className:`py-1 font-medium`,children:L(`Metric`)}),(0,I.jsx)(`th`,{scope:`col`,className:`w-20 py-1 text-right font-medium`,children:L(`Before`)}),(0,I.jsx)(`th`,{scope:`col`,className:`w-20 py-1 text-right font-medium`,children:L(`After`)}),(0,I.jsx)(`th`,{scope:`col`,className:`w-24 py-1 text-right font-medium`,children:L(`Change`)})]})}),(0,I.jsx)(`tbody`,{children:a.map(([e,t,n,r])=>{let i=r===`score`,a=t!==null&&n!==null?n-t:null,o=a===null||a===0?null:i?a>0:a<0;return(0,I.jsxs)(`tr`,{className:`border-t border-line`,children:[(0,I.jsx)(`td`,{className:`py-1 text-[12px] text-muted`,children:e}),(0,I.jsx)(`td`,{className:`py-1 text-right text-[12px] tabular-nums text-muted`,children:r===`score`?t??`—`:Di(t,r===`raw`?`raw`:`ms`)}),(0,I.jsx)(`td`,{className:`py-1 text-right text-[12px] tabular-nums text-ink`,children:r===`score`?n??`—`:Di(n,r===`raw`?`raw`:`ms`)}),(0,I.jsxs)(`td`,{className:`py-1 text-right text-[12px] tabular-nums ${o===!0?`text-success`:o===!1?`text-danger`:`text-faint`}`,children:[a===null?`—`:a===0?L(`no change`):`${a>0?`+`:`−`}${r===`score`?Math.abs(a):Di(Math.abs(a),r===`raw`?`raw`:`ms`)}`,o===!0&&` ▲`,o===!1&&` ▼`]})]},e)})})]})]})})(),n.runs.length>1&&b.length<2&&(0,I.jsx)(`p`,{className:`mb-2 text-[11px] text-muted`,children:b.length===1?L(`Pick one more run to compare.`):L(`Pick two runs to compare them.`)}),(0,I.jsx)(`div`,{className:`overflow-x-auto`,children:(0,I.jsxs)(`table`,{className:`w-full min-w-[34rem] border-collapse text-left`,children:[(0,I.jsx)(`thead`,{children:(0,I.jsxs)(`tr`,{className:`border-b border-line text-[10px] uppercase tracking-wider text-faint`,children:[(0,I.jsx)(`th`,{scope:`col`,className:`w-8 py-1.5 font-medium`,children:(0,I.jsx)(`span`,{className:`sr-only`,children:L(`Compare`)})}),(0,I.jsx)(`th`,{scope:`col`,className:`w-20 py-1.5 font-medium`,children:L(`When`)}),(0,I.jsx)(`th`,{scope:`col`,className:`py-1.5 font-medium`,children:L(`Provider`)}),(0,I.jsx)(`th`,{scope:`col`,className:`w-12 py-1.5 text-right font-medium`,children:L(`Score`)}),(0,I.jsx)(`th`,{scope:`col`,className:`w-20 py-1.5 text-right font-medium`,title:`Largest Contentful Paint`,children:`LCP`}),(0,I.jsx)(`th`,{scope:`col`,className:`w-16 py-1.5 text-right font-medium`,title:`Total Blocking Time`,children:`TBT`}),(0,I.jsx)(`th`,{scope:`col`,className:`w-14 py-1.5 text-right font-medium`,title:`Cumulative Layout Shift`,children:`CLS`}),(0,I.jsx)(`th`,{scope:`col`,className:`w-20 py-1.5 text-right font-medium`,title:`Time to First Byte`,children:`TTFB`})]})}),(0,I.jsx)(`tbody`,{children:n.runs.slice(0,10).map((e,t)=>(0,I.jsxs)(`tr`,{className:`border-b border-line last:border-b-0 ${b.includes(e.ts)?`bg-panel`:``}`,children:[(0,I.jsx)(`td`,{className:`py-1.5`,children:(0,I.jsx)(`button`,{type:`button`,onClick:()=>x(t=>t.includes(e.ts)?t.filter(t=>t!==e.ts):[...t,e.ts].slice(-2)),"aria-pressed":b.includes(e.ts),title:L(`Compare this run`),className:`rounded p-0.5 ${b.includes(e.ts)?`text-accent`:`text-faint hover:text-accent`}`,children:(0,I.jsx)(xe,{size:12})})}),(0,I.jsx)(`td`,{className:`py-1.5 text-[11px] text-muted`,children:ki(e.ts)}),(0,I.jsx)(`td`,{className:`min-w-0 py-1.5 text-[12px] text-muted`,children:(0,I.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,I.jsx)(`span`,{className:`truncate`,children:e.ok?e.provider===`gtmetrix`?`GTmetrix`:`PageSpeed`:e.error}),e.ok&&e.report_url&&(0,I.jsx)(`a`,{href:e.report_url,target:`_blank`,rel:`noopener noreferrer`,className:`shrink-0 text-faint hover:text-accent`,"aria-label":L(`Open the full report`),children:(0,I.jsx)(N,{size:11})})]})}),(0,I.jsx)(`td`,{className:`py-1.5 text-right text-[13px] font-medium tabular-nums ${Ei(e.score)}`,children:e.ok?e.score??`—`:`—`}),(0,I.jsx)(`td`,{className:`py-1.5 text-right text-[11px] tabular-nums text-muted`,children:Di(e.metrics?.lcp??null,`ms`)}),(0,I.jsx)(`td`,{className:`py-1.5 text-right text-[11px] tabular-nums text-muted`,children:Di(e.metrics?.tbt??null,`ms`)}),(0,I.jsx)(`td`,{className:`py-1.5 text-right text-[11px] tabular-nums text-muted`,children:Di(e.metrics?.cls??null,`raw`)}),(0,I.jsx)(`td`,{className:`py-1.5 text-right text-[11px] tabular-nums text-muted`,children:Di(e.metrics?.ttfb??null,`ms`)})]},`${e.ts}-${t}`))})]})})]}),(0,I.jsx)(yi,{open:_,onClose:()=>v(!1),local:d?.local===!0,onConnected:()=>{te().then(()=>void re())}}),(0,I.jsx)(Qi,{module:e,onSaved:t})]})}var ji={HealthPanel:nr,PreloaderHost:gr,DatabaseCleanerPanel:yr,CloudflarePanel:Er,ObjectCachePanel:Ar,MigrationPanel:Vr,SupportPanel:Hr,McpPanel:qr,CompressionPanel:Yr,CssJsPanel:Zr,MediaPanel:$r,ResourceHintsPanel:ti,CacheCoveragePanel:U,ScorePanel:Ai};function Mi({module:e}){let t=wt.find(t=>t.slug===e.slug),n=t?.teaser?Hn[t.teaser]:null,r=Jt()===`unlicensed`;if(Gn(e.slug))return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsx)(Kn,{id:e.slug}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted text-center px-4`,children:L(r?`Activating your license unlocks this module + every other locked row in the sidebar. Your current settings stay unchanged.`:`Pro unlocks this module + every other locked row in the sidebar. Your current Free settings stay unchanged.`)})]});let i={card:`border-line bg-primary-tint`,iconWrap:`bg-paper border-line text-primary`,badge:`text-primary bg-paper border-line`,cta:`bg-primary hover:bg-primary-hover text-on-primary`,link:`text-primary`};return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsx)(`div`,{className:`relative overflow-hidden border rounded-card p-6 sm:p-8 ${i.card}`,children:(0,I.jsxs)(`div`,{className:`flex items-start gap-4`,children:[(0,I.jsx)(`div`,{className:`shrink-0 w-12 h-12 rounded-full border flex items-center justify-center ${i.iconWrap}`,children:(0,I.jsx)(Ct,{name:e.icon,size:22})}),(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,I.jsx)(`div`,{className:`flex items-center gap-2 mb-1`,children:(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[10px] uppercase tracking-wider font-medium border rounded-full px-2 py-0.5 ${i.badge}`,children:[r?(0,I.jsx)(Ae,{size:10}):(0,I.jsx)(Ie,{size:10}),(0,I.jsx)(`span`,{children:L(r?`Pro — license needed`:`Pro feature`)})]})}),(0,I.jsx)(`h2`,{className:`text-[18px] font-semibold text-ink`,children:e.label}),e.description&&(0,I.jsx)(`p`,{className:`text-[13px] text-ink-soft mt-2 leading-relaxed`,children:e.description}),r?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`p`,{className:`text-[13px] text-ink-soft mt-3 leading-relaxed`,children:L(`xSpeed Pro is installed — activate your license to unlock this module and every other Pro feature.`)}),(0,I.jsxs)(`a`,{href:Vn,className:`inline-flex items-center gap-1.5 mt-4 px-4 py-2 rounded-md text-[13px] font-medium transition-colors ${i.cta}`,children:[L(`Activate your license`),(0,I.jsx)(w,{size:13})]})]}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`a`,{href:Bn,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1.5 mt-4 px-4 py-2 rounded-md text-[13px] font-medium transition-colors ${i.cta}`,children:[L(`Upgrade to Pro`),(0,I.jsx)(w,{size:13})]}),(0,I.jsxs)(`a`,{href:Bn,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 ml-3 text-[12px] hover:underline ${i.link}`,children:[L(`Compare plans`),(0,I.jsx)(N,{size:11})]})]})]})]})}),n&&(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-card p-4 sm:p-5`,children:[(0,I.jsx)(`div`,{className:`text-[11px] uppercase tracking-wider text-muted font-medium mb-2`,children:L(`What this adds`)}),(0,I.jsx)(`p`,{className:`text-[13px] text-ink-soft leading-relaxed`,children:n.body})]}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted text-center px-4`,children:L(r?`Activating your license unlocks this module + every other locked row in the sidebar. Your current settings stay unchanged.`:`Pro unlocks this module + every other locked row in the sidebar. Your current Free settings stay unchanged.`)})]})}var Ni=null,Pi=new Set;function Fi(){for(let e of Pi)e(Ni)}function Ii(e){Ni=e,Fi()}function Li(){return Ni}function Ri(e,t){e&&t&&(Ni?.module!==e||Ni?.field!==t)||(Ni=null,Fi())}function zi(e){return Pi.add(e),()=>{Pi.delete(e)}}function Bi(e,t){switch(t){case`bool`:case`boolean`:return e===`1`||e===`true`?!0:e===`0`||e===`false`?!1:void 0;case`int`:return/^-?\d+$/.test(e.trim())?parseInt(e,10):void 0;case`list`:return e.split(`,`).map(e=>e.trim()).filter(Boolean);default:return e}}function Vi(e,t){let n=Bi(e,t);return n===void 0?e:typeof n==`boolean`?n?`On`:`Off`:Array.isArray(n)?n.join(`, `):String(n)}function Hi(e,t,n,r,i){let[a,o]=(0,y.useState)(()=>Li());if((0,y.useEffect)(()=>zi(o),[]),!a||a.module!==e||a.field!==t)return null;let s=Bi(a.value,n.type);if(s===void 0||!Ui(s,n)||JSON.stringify(s)===JSON.stringify(r))return null;let c=Vi(a.value,n.type);return c.trim()===``?null:{display:c,value:s,apply:()=>{i(s),Ri(e,t)},dismiss:()=>Ri(e,t)}}function Ui(e,t){if(t.type===`int`)return!(typeof e!=`number`||t.min!==void 0&&e<t.min||t.max!==void 0&&e>t.max);if(t.type===`enum`){let n=Array.isArray(t.options)?t.options:[];return n.length>0&&n.includes(String(e))}if(t.type===`list`)return Array.isArray(e)&&e.length>0;if(t.type===`url`){let t=String(e??``).trim();return t!==``&&/^https?:\/\//i.test(t)}return!0}function Wi({strip:e}){return(0,I.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 rounded border border-amber-200 dark:border-amber-900/60 bg-amber-50 dark:bg-amber-950/40 px-2.5 py-1.5`,children:[(0,I.jsx)(Pe,{size:13,className:`text-amber-600 dark:text-amber-400 shrink-0`}),(0,I.jsxs)(`span`,{className:`text-[12px] text-amber-900 dark:text-amber-200`,children:[L(`Recommended:`),` `,(0,I.jsx)(`span`,{className:`font-medium`,children:e.display})]}),(0,I.jsxs)(`button`,{type:`button`,onClick:e.apply,className:`ml-auto inline-flex items-center gap-1 text-[12px] px-2 py-1 rounded bg-accent text-white hover:bg-primary-hover transition-colors`,children:[(0,I.jsx)(O,{size:12}),L(`Apply`)]}),(0,I.jsx)(`button`,{type:`button`,onClick:e.dismiss,className:`text-[12px] text-amber-800 dark:text-amber-300 hover:underline`,children:L(`Dismiss`)})]})}function W(e){return typeof e==`string`&&e.includes(`••••`)}function G({value:e,onChange:t,label:n,inputClassName:r}){let i=W(e),a=(0,y.useRef)(i?e:``);i&&a.current!==e&&(a.current=e);let o=i?``:String(e??``),s=a.current!==``;return(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,I.jsx)(`input`,{type:`password`,value:o,onChange:e=>{let n=e.target.value;t(n===``?a.current:n)},autoComplete:`off`,spellCheck:!1,placeholder:i?String(e):n,title:s?L(`A key is saved. Type to replace it; use ✕ to remove it.`):void 0,className:r??`w-56 rounded-control border border-line bg-paper px-2.5 py-1.5 text-[13px] text-ink focus:outline-none focus:ring-2 focus:ring-primary`,"aria-label":n}),s&&i&&(0,I.jsx)(`button`,{type:`button`,onClick:()=>{a.current=``,t(``)},className:`shrink-0 p-1.5 rounded border border-line text-ink-soft hover:text-danger hover:border-danger transition-colors`,title:L(`Remove the saved key`),"aria-label":`${L(`Remove`)} ${n}`,children:(0,I.jsx)(_t,{size:13})})]})}var Gi={ms:1/1e3,seconds:1,minutes:60,hours:3600,days:86400},Ki=[{seconds:604800,one:`week`,many:`weeks`},{seconds:86400,one:`day`,many:`days`},{seconds:3600,one:`hour`,many:`hours`},{seconds:60,one:`minute`,many:`minutes`},{seconds:1,one:`second`,many:`seconds`}],qi=3;function Ji(e,t){if(!Number.isFinite(e)||e<=0)return``;let n=Math.floor(e*Gi[t]);if(n<1||t===`seconds`&&n<60)return``;let r=[],i=n;for(let e of Ki){if(r.length>=qi)break;let t=Math.floor(i/e.seconds);t<=0||(r.push(`${t} ${t===1?e.one:e.many}`),i-=t*e.seconds)}return r.join(` `)}function Yi(e,t){return Ji(e,t)}function Xi({notices:e}){return!e||e.length===0?null:(0,I.jsx)(I.Fragment,{children:e.map((e,t)=>(0,I.jsx)(V,{tone:e.tone,title:e.title,body:e.body,snippet:e.snippet,action:e.action},t))})}function Zi({module:e,onSaved:t,subtab:n,onSubtabChange:r,getModule:i}){if(Vt(),e.locked)return(0,I.jsx)(Mi,{module:e});if(e.custom_panel){let a={onSaved:t,subtab:n,onSubtabChange:r,getModule:i},o=ji[e.custom_panel]??zt(e.custom_panel);if(o)return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsx)(Xi,{notices:e.notices}),(0,I.jsx)(o,{module:e,...a})]})}return(0,I.jsx)(Qi,{module:e,onSaved:t})}function Qi({module:e,onSaved:t}){let[n,r]=(0,y.useState)(e.settings),[i,a]=(0,y.useState)(`idle`),[o,s]=(0,y.useState)(null),c=(0,y.useRef)(!0),l=(0,y.useRef)(null),u=(0,y.useRef)(null),d=(0,y.useRef)(JSON.stringify(e.settings)),f=(0,y.useRef)(`idle`);(0,y.useEffect)(()=>{f.current=i},[i]);let p=(0,y.useRef)(n);(0,y.useEffect)(()=>{p.current=n},[n]),(0,y.useEffect)(()=>{r(e.settings),d.current=JSON.stringify(e.settings),c.current=!0,a(`idle`),s(null)},[e.slug]),(0,y.useEffect)(()=>{if(c.current){c.current=!1;return}if(JSON.stringify(n)!==d.current)return l.current&&window.clearTimeout(l.current),l.current=window.setTimeout(async()=>{f.current!==`saved`&&a(`saving`),s(null);let i=n;try{let n=await B.updateModuleSettings(e.slug,i),{next:o,dirty:s}=or(i,n,p.current);r(o),d.current=s?``:JSON.stringify(o),a(`saved`),u.current&&window.clearTimeout(u.current),u.current=window.setTimeout(()=>a(`idle`),1500),t?.(n)}catch(e){s(e instanceof Error?e.message:`Save failed`),a(`idle`)}},600),()=>{l.current&&window.clearTimeout(l.current)}},[n,e.slug]);let m=Tr(e.schema,n),h=(e,t)=>r(n=>({...n,[e]:t}));return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsx)(rr,{state:i}),(0,I.jsx)(Xi,{notices:e.notices}),(0,I.jsx)(`div`,{className:`border border-line bg-paper rounded-card overflow-hidden`,children:m.map(([t,r],i)=>(0,I.jsx)($i,{moduleSlug:e.slug,fieldKey:t,spec:r,value:n[t],onChange:e=>h(t,e),first:i===0},t))}),o&&(0,I.jsx)(`div`,{className:`text-[12px] text-danger`,children:o})]})}function $i({moduleSlug:e,fieldKey:t,spec:n,value:r,onChange:i,first:a}){let o=n.label??ra(t),s=`${e}:${t}`,c=Hi(e,t,n,r,i),l=n.description,u=n.type===`int`&&(n.min!==void 0||n.max!==void 0)?`Range: ${n.min??`-∞`} – ${n.max??`∞`}`:null,d=n.type===`list`,f=a?``:`border-t border-line`;return d?(0,I.jsxs)(`div`,{"data-field-anchor":s,className:`xspeed-field px-4 sm:px-5 py-4 ${f}`,children:[(0,I.jsxs)(`div`,{className:`mb-1.5`,children:[(0,I.jsxs)(`div`,{className:`font-medium text-ink inline-flex items-center gap-1.5`,children:[(0,I.jsx)(`span`,{children:o}),n.info&&(0,I.jsx)(Cn,{title:n.info_title,body:n.info})]}),(0,I.jsx)(ea,{spec:n})]}),na(n,r,i,o),c&&(0,I.jsx)(Wi,{strip:c})]}):(0,I.jsxs)(`div`,{"data-field-anchor":s,className:`xspeed-field px-4 sm:px-5 py-4 ${f}`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-3 sm:gap-4`,children:[(0,I.jsxs)(`div`,{className:`min-w-0 max-w-[70%] pr-2`,children:[(0,I.jsxs)(`div`,{className:`font-medium text-ink inline-flex items-center gap-1.5`,children:[(0,I.jsx)(`span`,{children:o}),n.info&&(0,I.jsx)(Cn,{title:n.info_title,body:n.info})]}),(0,I.jsx)(ea,{spec:n}),!l&&u&&(0,I.jsx)(`div`,{className:`text-[12px] text-ink-soft mt-0.5`,children:u})]}),(0,I.jsx)(`div`,{className:`shrink-0`,children:na(n,r,i,o)})]}),c&&(0,I.jsx)(Wi,{strip:c})]})}function ea({spec:e}){return!e.description&&!e.doc_url?null:(0,I.jsxs)(`div`,{className:`text-[12px] text-ink-soft mt-0.5`,children:[e.description,e.doc_url&&(0,I.jsxs)(I.Fragment,{children:[e.description?` `:``,(0,I.jsx)(`a`,{href:e.doc_url,target:`_blank`,rel:`noopener noreferrer`,className:`text-accent hover:underline`,children:`Check the documentation`})]})]})}function ta({value:e,label:t,onChange:n}){let r=Array.isArray(e)?e.map(String):[],[i,a]=(0,y.useState)(null),o=i??r.join(` |
| 12 |
`).length;return(0,I.jsxs)(`section`,{"data-field-anchor":ca,className:`xspeed-field border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg overflow-hidden`,children:[(0,I.jsxs)(`div`,{className:`flex items-start gap-2.5 p-4 sm:p-5`,children:[(0,I.jsx)(`button`,{type:`button`,onClick:a,"aria-expanded":r?`true`:`false`,"aria-label":r?`Collapse server config`:`Expand server config`,className:`shrink-0 mt-0.5 rounded text-neutral-500 dark:text-neutral-400 hover:text-neutral-700 dark:hover:text-neutral-200 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-1`,children:r?(0,I.jsx)(k,{size:16}):(0,I.jsx)(j,{size:16})}),(0,I.jsx)(Ze,{size:16,className:`shrink-0 mt-0.5 text-neutral-500 dark:text-neutral-400`}),(0,I.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,I.jsxs)(`h2`,{className:`inline-flex items-center gap-1.5 text-[13px] font-semibold text-neutral-900 dark:text-neutral-50`,children:[(0,I.jsxs)(`span`,{children:[`Server config `,(0,I.jsxs)(`span`,{className:`text-neutral-400 dark:text-neutral-500 font-normal`,children:[`· `,s,` lines`]})]}),(0,I.jsx)(Cn,{title:`Good to know`,body:`You added this snippet to your nginx config yourself, so it's yours to manage — xSpeed never touches it. If you ever need to uninstall xSpeed, just remove this snippet from your nginx config first to keep everything tidy and your server running happily.`})]}),(0,I.jsxs)(`p`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400 mt-0.5`,children:[`Paste this once into `,o,`, above the `,(0,I.jsx)(`code`,{className:`text-[11px]`,children:`location /`}),` block, then reload nginx.`]})]})]}),r&&(0,I.jsx)(`div`,{className:`px-4 pb-4 sm:px-5 sm:pb-5`,children:(0,I.jsx)(En,{content:e,tone:`neutral`})})]})}function ua({label:e,value:t,icon:n,onClick:r,expanded:i,hint:a}){let o=(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,I.jsx)(`div`,{className:`text-[11px] uppercase tracking-wider text-neutral-500 dark:text-neutral-400 font-medium`,children:e}),r?(0,I.jsx)(k,{size:14,className:`text-neutral-400 dark:text-neutral-500 transition-transform ${i?`rotate-180`:``}`}):n&&(0,I.jsx)(n,{size:14,className:`text-neutral-400 dark:text-neutral-500`})]}),(0,I.jsx)(`div`,{className:`text-[22px] font-semibold text-neutral-900 dark:text-neutral-50 leading-none`,children:t})]}),s=`border bg-white dark:bg-neutral-900 rounded-lg p-5 text-left w-full transition-colors`;return r?(0,I.jsx)(`button`,{type:`button`,onClick:r,"aria-expanded":i??!1,"aria-label":a?`${e} — ${a}`:e,className:`${s} cursor-pointer hover:border-neutral-300 dark:hover:border-neutral-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent ${i?`border-accent dark:border-accent`:`border-neutral-200 dark:border-neutral-800`}`,children:o}):(0,I.jsx)(`div`,{className:`${s} border-neutral-200 dark:border-neutral-800`,children:o})}var da={events:[],last_purge:0,last_gc:0,gc_removed:0,gc_removed_total:0,gc_next_run:0};function fa(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`}function pa(e){return e<60?`${e}s`:e<3600?`${Math.floor(e/60)}m`:e<86400?`${Math.floor(e/3600)}h`:`${Math.floor(e/86400)}d`}function ma({title:e,busy:t,onRefresh:n,children:r}){return(0,I.jsxs)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,I.jsx)(`div`,{className:`text-[12px] font-medium text-neutral-900 dark:text-neutral-50`,children:e}),(0,I.jsx)(`button`,{type:`button`,onClick:n,disabled:t,"aria-label":L(`Refresh`),className:`text-neutral-400 dark:text-neutral-500 hover:text-neutral-700 dark:hover:text-neutral-300 disabled:opacity-40`,children:(0,I.jsx)(P,{size:13,className:t?`animate-spin`:``})})]}),r]})}function ha({text:e}){return(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400 py-2`,children:e})}function ga(){let[e,t]=(0,y.useState)(null),[n,r]=(0,y.useState)(!1),i=async(e=!1)=>{r(!0);try{t(await B.request(`/cache/inventory?limit=50${e?`&fresh=1`:``}`))}catch{t({entries:[],total:0,capped:!1})}finally{r(!1)}};return(0,y.useEffect)(()=>{i()},[]),(0,I.jsx)(ma,{title:L(`Cached pages`),busy:n,onRefresh:()=>void i(!0),children:e?e.entries.length===0?(0,I.jsx)(ha,{text:L(`Nothing cached yet. Visit a page as a logged-out visitor to warm the cache.`)}):(0,I.jsxs)(I.Fragment,{children:[e.capped&&(0,I.jsxs)(`div`,{className:`flex items-start gap-2 mb-3 text-[11px] text-amber-700 dark:text-amber-400`,children:[(0,I.jsx)(dt,{size:12,className:`mt-0.5 shrink-0`}),(0,I.jsx)(`span`,{children:L(`This cache is large enough that the scan stopped early — the list below is a recent sample, not every page.`)})]}),(0,I.jsx)(`div`,{className:`overflow-x-auto`,children:(0,I.jsxs)(`table`,{className:`w-full text-[12px]`,children:[(0,I.jsx)(`thead`,{children:(0,I.jsxs)(`tr`,{className:`text-[11px] uppercase tracking-wider text-neutral-500 dark:text-neutral-400`,children:[(0,I.jsx)(`th`,{className:`text-left font-medium pb-2`,children:L(`Page`)}),(0,I.jsx)(`th`,{className:`text-right font-medium pb-2 whitespace-nowrap`,children:L(`Size`)}),(0,I.jsx)(`th`,{className:`text-right font-medium pb-2 whitespace-nowrap`,children:L(`Age`)}),(0,I.jsx)(`th`,{className:`text-right font-medium pb-2 whitespace-nowrap`,children:L(`Stored`)})]})}),(0,I.jsx)(`tbody`,{children:e.entries.map(e=>(0,I.jsxs)(`tr`,{className:`border-t border-neutral-100 dark:border-neutral-800`,children:[(0,I.jsx)(`td`,{className:`py-1.5 pr-3 max-w-0`,children:e.url?(0,I.jsxs)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,className:`text-neutral-800 dark:text-neutral-200 hover:underline inline-flex items-center gap-1 truncate max-w-full`,children:[(0,I.jsx)(`span`,{className:`truncate`,children:e.url}),(0,I.jsx)(N,{size:10,className:`shrink-0 opacity-60`})]}):(0,I.jsx)(`span`,{className:`text-neutral-500 dark:text-neutral-400 font-mono text-[11px]`,title:e.key,children:L(`Address not recorded`)})}),(0,I.jsx)(`td`,{className:`py-1.5 text-right tabular-nums text-neutral-600 dark:text-neutral-400 whitespace-nowrap`,children:fa(e.bytes)}),(0,I.jsx)(`td`,{className:`py-1.5 pl-3 text-right tabular-nums text-neutral-600 dark:text-neutral-400 whitespace-nowrap`,children:pa(e.age)}),(0,I.jsx)(`td`,{className:`py-1.5 pl-3 text-right text-[11px] text-neutral-500 dark:text-neutral-400 whitespace-nowrap`,children:e.stored_in.join(` + `)})]},e.url??e.key))})]})}),(0,I.jsxs)(`div`,{className:`mt-2 text-[11px] text-neutral-500 dark:text-neutral-400`,children:[L(`Showing`),` `,e.entries.length,` `,L(`of`),` `,e.total]})]}):(0,I.jsx)(ha,{text:L(`Loading…`)})})}function _a(){let[e,t]=(0,y.useState)(null),[n,r]=(0,y.useState)(!1),i=async()=>{r(!0);try{t(await B.request(`/cache/size`))}catch{t(null)}finally{r(!1)}};(0,y.useEffect)(()=>{i()},[]);let a=e?.buckets.filter(e=>e.files>0)??[],o=a.reduce((e,t)=>Math.max(e,t.bytes),0);return(0,I.jsx)(ma,{title:L(`Where the cache size goes`),busy:n,onRefresh:()=>void i(),children:e?a.length===0?(0,I.jsx)(ha,{text:L(`Nothing on disk yet.`)}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`space-y-2`,children:a.map(e=>(0,I.jsxs)(`div`,{children:[(0,I.jsxs)(`div`,{className:`flex items-baseline justify-between text-[12px]`,children:[(0,I.jsx)(`span`,{className:`text-neutral-700 dark:text-neutral-300`,children:e.label}),(0,I.jsxs)(`span`,{className:`tabular-nums text-neutral-600 dark:text-neutral-400`,children:[fa(e.bytes),(0,I.jsxs)(`span`,{className:`text-neutral-400 dark:text-neutral-500`,children:[` · `,e.files]})]})]}),(0,I.jsx)(`div`,{className:`mt-1 h-1.5 rounded-full bg-neutral-100 dark:bg-neutral-800 overflow-hidden`,children:(0,I.jsx)(`div`,{className:`h-full rounded-full bg-accent`,style:{width:o>0?`${Math.max(2,e.bytes/o*100)}%`:`0%`}})})]},e.key))}),e.compressed_bytes>0&&(0,I.jsxs)(`div`,{className:`mt-3 text-[11px] text-neutral-500 dark:text-neutral-400`,children:[L(`Precompressed copies on disk:`),` `,fa(e.compressed_bytes),`.`,` `,L(`Pages without one are compressed by the server when requested.`)]})]}):(0,I.jsx)(ha,{text:L(`Loading…`)})})}function va(){let[e,t]=(0,y.useState)(null),[n,r]=(0,y.useState)(!1),i=async()=>{r(!0);try{t(await B.request(`/cache/purge-log?limit=25`))}catch{t(da)}finally{r(!1)}};(0,y.useEffect)(()=>{i()},[]);let a=Math.floor(Date.now()/1e3),o=e?e.last_gc>0?Pt(L(`Automatic cleanup ran %1$s ago — %2$d file(s) removed, %3$d in total.`),pa(Math.max(0,a-e.last_gc)),e.gc_removed,e.gc_removed_total):e.gc_next_run>0?Pt(L(`Automatic cleanup has not run yet — first sweep in %s.`),pa(Math.max(0,e.gc_next_run-a))):null:null;return(0,I.jsxs)(ma,{title:L(`Purge history`),busy:n,onRefresh:()=>void i(),children:[o&&(0,I.jsx)(`p`,{className:`text-[11px] text-neutral-500 dark:text-neutral-400 mb-2`,children:o}),e?e.events.length===0?(0,I.jsx)(ha,{text:L(`No purges recorded yet.`)}):(0,I.jsx)(`ul`,{className:`space-y-1.5`,children:e.events.map((e,t)=>(0,I.jsxs)(`li`,{className:`flex items-baseline gap-3 text-[12px] border-t border-neutral-100 dark:border-neutral-800 first:border-t-0 pt-1.5 first:pt-0`,children:[(0,I.jsx)(`span`,{className:`tabular-nums text-[11px] text-neutral-500 dark:text-neutral-400 w-12 shrink-0`,children:pa(Math.max(0,a-e.ts))}),(0,I.jsx)(`span`,{className:`text-neutral-700 dark:text-neutral-300`,children:e.message})]},`${e.ts}-${t}`))}):(0,I.jsx)(ha,{text:L(`Loading…`)})]})}function ya({which:e}){return e===`pages`?(0,I.jsx)(ga,{}):e===`size`?(0,I.jsx)(_a,{}):e===`purge`?(0,I.jsx)(va,{}):null}function ba(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`}function xa(e){return(e.hits_24h??0)+(e.misses_24h??0)===0?`—`:`${Math.round((e.hit_ratio??0)*100)}%`}function Sa(e){if(!e)return`Never`;let t=Math.floor(Date.now()/1e3)-e;return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}function K({settings:e,stats:t,onToggle:n,onPurge:r}){let[i,a]=(0,y.useState)(null),o=e=>a(t=>t===e?null:e);return(0,I.jsxs)(`div`,{className:`space-y-6`,children:[(0,I.jsxs)(`div`,{"data-field-anchor":`cache:cache_enabled`,className:`xspeed-field border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-4 sm:p-5 flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,I.jsx)(`span`,{className:`w-2 h-2 rounded-full shrink-0 ${e.cache_enabled?`bg-emerald-500`:`bg-neutral-300 dark:bg-neutral-600`}`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50`,children:`Enable Cache`}),(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400`,children:e.cache_enabled?`Active — serving cached HTML`:`Inactive`})]})]}),(0,I.jsxs)(`div`,{className:`flex items-center justify-end gap-3 shrink-0`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:r,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-neutral-200 dark:border-neutral-700 text-neutral-700 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors`,children:[(0,I.jsx)(lt,{size:13}),`Purge`]}),(0,I.jsx)(gn,{checked:e.cache_enabled,onChange:n,size:`lg`,label:`Enable Cache`})]})]}),(0,I.jsxs)(`div`,{className:`grid grid-cols-2 sm:grid-cols-2 lg:grid-cols-4 gap-3 sm:gap-4`,children:[(0,I.jsx)(ua,{label:`Cached Pages`,value:String(t.cached_pages),onClick:()=>o(`pages`),expanded:i===`pages`,hint:L(`show which pages are cached`)}),(0,I.jsx)(ua,{label:`Cache Size`,value:ba(t.cache_size),onClick:()=>o(`size`),expanded:i===`size`,hint:L(`show what is taking the space`)}),(0,I.jsx)(ua,{label:`Last Purge`,value:Sa(t.last_purge),onClick:()=>o(`purge`),expanded:i===`purge`,hint:L(`show what cleared the cache and why`)}),(0,I.jsx)(ua,{label:t.edge_cache?L(`Hit Ratio · 24h · origin`):L(`Hit Ratio · 24h`),value:xa(t),onClick:()=>{document.querySelector(`[data-xspeed-anchor="hit-trend"]`)?.scrollIntoView({block:`start`,behavior:`smooth`})},hint:L(`jump to the hit-ratio trend`)})]}),(t.edge_cache||(t.excluded_24h??0)>0)&&(0,I.jsxs)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400 space-y-1 -mt-2`,children:[t.edge_cache&&(0,I.jsx)(`p`,{children:L(`An edge cache (Cloudflare) is in front, so this hit ratio is origin-layer only — hits served at the edge never reach the origin and aren’t counted here.`)}),(t.excluded_24h??0)>0&&(0,I.jsxs)(`p`,{children:[L(`Absorbed`),` `,(0,I.jsx)(`span`,{className:`tabular-nums text-neutral-700 dark:text-neutral-300 font-medium`,children:(t.excluded_24h??0).toLocaleString()}),` `,L(`bot / 404 requests in 24h — excluded from the hit ratio.`)]})]}),i&&(0,I.jsx)(ya,{which:i})]})}function Ca(e){let t=e/1e3;return t<60?`${t.toFixed(1)}s`:t<3600?`${(t/60).toFixed(1)} ${L(`min`)}`:`${(t/3600).toFixed(1)} ${L(`hrs`)}`}function wa({stats:e}){let[t,n]=(0,y.useState)(void 0),[r,i]=(0,y.useState)([]);if((0,y.useEffect)(()=>{(async()=>{try{let[e,t]=await Promise.all([B.request(`/cache/benchmark/history`),B.request(`/stats/hit-daily?days=30`)]),r=e.runs.filter(e=>e.cache_enabled&&e.savings_ms!=null&&e.savings_ms>0);n(r.length?r[r.length-1].savings_ms:null),i(t.days)}catch{n(null)}})()},[]),t===void 0)return null;let a=e.hits_24h??0;if(t===null||a===0)return(0,I.jsxs)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-4 sm:p-5 flex items-center gap-3`,children:[(0,I.jsx)(ct,{size:18,className:`text-neutral-400 dark:text-neutral-500 shrink-0`}),(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400`,children:L(t===null?`Run the benchmark once and this card shows how much combined wait time the cache saves your visitors.`:`Serving cached pages… impact numbers appear once today’s hits accumulate.`)})]});let o=e=>r.slice(-e).reduce((e,t)=>e+(t.hits??0),0),s=[{label:L(`last 24h`),hits:a},{label:L(`7 days`),hits:o(7)},{label:L(`30 days`),hits:o(30)}];return(0,I.jsxs)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2 mb-1`,children:[(0,I.jsx)(vt,{size:16,className:`text-accent shrink-0`}),(0,I.jsx)(`span`,{className:`text-[11px] uppercase tracking-wider font-medium text-neutral-500 dark:text-neutral-400`,children:L(`Real visitor impact`)})]}),(0,I.jsxs)(`div`,{className:`text-neutral-900 dark:text-neutral-50`,children:[L(`xSpeed served`),` `,(0,I.jsx)(`span`,{className:`font-semibold tabular-nums`,children:a.toLocaleString()}),` `,L(`cached pages in 24h — saving your visitors`),` `,(0,I.jsx)(`span`,{className:`font-semibold text-emerald-600 dark:text-emerald-400 tabular-nums`,children:Ca(a*t)}),` `,L(`of combined wait time`),` `,(0,I.jsxs)(`span`,{className:`text-neutral-500 dark:text-neutral-400 text-[13px]`,children:[`(`,Math.round(t),`ms `,L(`faster per page`),`)`]})]}),(0,I.jsx)(`div`,{className:`flex flex-wrap gap-x-5 gap-y-1 mt-2 text-[12px] text-neutral-500 dark:text-neutral-400`,children:s.slice(1).map(e=>e.hits>0?(0,I.jsxs)(`span`,{children:[e.label,`:`,` `,(0,I.jsx)(`span`,{className:`tabular-nums text-neutral-700 dark:text-neutral-300 font-medium`,children:Ca(e.hits*t)}),` `,L(`saved across`),` `,e.hits.toLocaleString(),` `,L(`hits`)]},e.label):null)})]})}function Ta(){let[e,t]=(0,y.useState)(null),[n,r]=(0,y.useState)(!1),[i,a]=(0,y.useState)(!1),[o,s]=(0,y.useState)(null),c=(0,y.useCallback)(async()=>{try{t((await B.request(`/recommendations`)).recommendations)}catch{t([])}},[]);(0,y.useEffect)(()=>{c()},[c]);let l=e?.[0];return e===null?null:l?(0,I.jsx)(`div`,{className:`border border-amber-200 dark:border-amber-900/60 bg-amber-50 dark:bg-amber-950/40 rounded-lg p-4 sm:p-5`,children:(0,I.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-center gap-3 sm:gap-4`,children:[(0,I.jsx)(Pe,{size:18,className:`text-amber-600 dark:text-amber-300 shrink-0 hidden sm:block`}),(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,I.jsxs)(`div`,{className:`text-[11px] uppercase tracking-wider font-medium text-amber-700 dark:text-amber-300 mb-0.5`,children:[L(`Next best action`),e.length>1&&(0,I.jsxs)(`span`,{className:`normal-case tracking-normal font-normal`,children:[` `,`· `,e.length-1,` `,L(`more after this`)]})]}),(0,I.jsx)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50`,children:l.title}),(0,I.jsx)(`div`,{className:`text-[12px] text-amber-900/80 dark:text-amber-200/80 mt-0.5`,children:l.detail}),o&&(0,I.jsx)(`div`,{className:`text-[12px] text-red-700 dark:text-red-300 mt-1`,children:o})]}),(0,I.jsx)(`div`,{className:`shrink-0`,children:l.action.type===`apply`?(0,I.jsxs)(`button`,{type:`button`,onClick:async()=>{if(l){r(!0),s(null);try{let e=await B.request(`/recommendations/apply`,{method:`POST`,body:JSON.stringify({id:l.id})});a(!0),setTimeout(()=>{a(!1),t(e.recommendations)},1600)}catch(e){s(e instanceof Error?e.message:L(`Could not apply the fix.`))}finally{r(!1)}}},disabled:n||i,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-accent text-white hover:bg-primary-hover transition-colors disabled:opacity-60`,children:[n?(0,I.jsx)(P,{size:13,className:`animate-spin`}):i?(0,I.jsx)(O,{size:13}):null,i?L(`Applied`):l.action.label]}):(0,I.jsxs)(`a`,{href:l.action.module?_n({module:l.action.module,subtab:l.action.subtab,focus:l.action.focus,suggest:l.action.suggest}):`#`,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded border border-amber-300 dark:border-amber-800 text-amber-800 dark:text-amber-200 hover:bg-amber-100 dark:hover:bg-amber-900/40 transition-colors`,children:[l.action.label,` `,(0,I.jsx)(w,{size:13})]})})]})}):(0,I.jsxs)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-4 sm:p-5 flex items-center gap-3`,children:[(0,I.jsx)(oe,{size:18,className:`text-emerald-500 shrink-0`}),(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50`,children:L(`No recommendations right now`)}),(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400`,children:L(`Every deterministic check passes — your configuration looks healthy.`)})]})]})}function Ea({compact:e=!1}){let[t,n]=(0,y.useState)(null),[r,i]=(0,y.useState)(!1),[a,o]=(0,y.useState)(null);return(0,I.jsxs)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 mb-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,I.jsx)(vt,{size:18,className:`text-accent shrink-0`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50`,children:L(`Cache impact benchmark`)}),(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400`,children:L(`Compare your homepage with and without cache.`)})]})]}),(0,I.jsxs)(`button`,{type:`button`,onClick:async()=>{i(!0),o(null);try{n(await B.request(`/cache/benchmark`))}catch(e){o(e instanceof Error?e.message:L(`Benchmark failed`))}finally{i(!1)}},disabled:r,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-accent text-white hover:bg-primary-hover transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,children:[r?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(vt,{size:13}),L(t?`Re-run`:`Run benchmark`)]})]}),a&&(0,I.jsxs)(`div`,{className:`text-[13px] text-red-700 dark:text-red-300 bg-red-50 dark:bg-red-950/40 border border-red-200 dark:border-red-900/60 rounded p-2.5 flex items-start gap-2 mb-3`,children:[(0,I.jsx)(ae,{size:14,className:`shrink-0 mt-0.5`}),a]}),t&&(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,I.jsx)(Da,{label:L(`Without cache`),tone:`warn`,ms:t.without_cache.time_ms,bytes:t.without_cache.bytes}),(0,I.jsx)(Da,{label:L(`With cache`),tone:`ok`,ms:t.with_cache.time_ms,bytes:t.with_cache.bytes})]}),t.savings_pct!==null&&t.savings_ms!==null&&(0,I.jsx)(`div`,{className:`mt-3 text-center text-[13px]`,children:t.savings_pct>5?(0,I.jsxs)(`span`,{className:`text-emerald-700 dark:text-emerald-300 font-medium`,children:[`⚡ `,L(`Cache is`),` `,(0,I.jsxs)(`span`,{className:`tabular-nums`,children:[t.savings_pct.toFixed(0),`%`]}),` `,L(`faster`),` `,`(`,t.savings_ms.toFixed(0),` ms `,L(`saved per request`),`)`]}):(0,I.jsx)(`span`,{className:`text-neutral-500 dark:text-neutral-400`,children:L(`Negligible difference — page is cheap to render or cache is cold.`)})}),!t.cache_enabled&&(0,I.jsx)(`div`,{className:`mt-3 text-[12px] text-amber-700 dark:text-amber-300 text-center`,children:L(`Cache is disabled — both runs hit the same uncached path. Enable Cache to see a real difference.`)}),!e&&(0,I.jsx)(`div`,{className:`mt-3 text-[11px] text-neutral-400 text-center font-mono truncate`,children:t.url})]}),!t&&!r&&!a&&(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400 text-center py-3`,children:L(`Click "Run benchmark" to compare load times.`)})]})}function Da({label:e,tone:t,ms:n,bytes:r}){return(0,I.jsxs)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 rounded p-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,I.jsx)(`span`,{className:`w-2 h-2 rounded-full ${t===`ok`?`bg-emerald-500`:`bg-amber-500`}`}),(0,I.jsx)(`span`,{className:`text-[11px] uppercase tracking-wider text-neutral-500 dark:text-neutral-400 font-medium`,children:e})]}),(0,I.jsxs)(`div`,{className:`text-2xl font-semibold tabular-nums ${t===`ok`?`text-emerald-600 dark:text-emerald-400`:`text-amber-600 dark:text-amber-400`}`,children:[Math.round(n),(0,I.jsx)(`span`,{className:`text-[13px] font-normal text-neutral-500 dark:text-neutral-400 ml-1`,children:`ms`})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2 mt-2 text-[11px] text-neutral-500 dark:text-neutral-400`,children:[(0,I.jsx)(se,{size:11}),(0,I.jsxs)(`span`,{className:`tabular-nums`,children:[Math.round(n),` ms`]}),(0,I.jsx)(`span`,{className:`text-neutral-300 dark:text-neutral-700`,children:`·`}),(0,I.jsx)(fe,{size:11}),(0,I.jsxs)(`span`,{className:`tabular-nums`,children:[(r/1024).toFixed(1),` KB`]})]})]})}function Oa(){let[e,t]=(0,y.useState)(null),[n,r]=(0,y.useState)(null),[i,a]=(0,y.useState)([]),[o,s]=(0,y.useState)(30),[c,l]=(0,y.useState)(!1),u=async()=>{l(!0);try{let[e,n]=await Promise.all([B.request(`/stats/hit-daily?days=30`),B.request(`/cache/benchmark/history`)]);t(e.days),r(n.runs),a(e.changes.length?e.changes:n.changes)}catch{t([]),r([])}finally{l(!1)}};(0,y.useEffect)(()=>{u()},[]);let d=(e??[]).slice(-o),f=d.length>=2,p=(n??[]).length>=2;return(0,I.jsxs)(`div`,{"data-xspeed-anchor":`hit-trend`,className:`border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 rounded-lg p-4 sm:p-5 scroll-mt-6`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 mb-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,I.jsx)(ut,{size:18,className:`text-accent shrink-0`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-neutral-900 dark:text-neutral-50`,children:L(`Trends`)}),(0,I.jsx)(`div`,{className:`text-[12px] text-neutral-500 dark:text-neutral-400`,children:L(`Hit ratio and benchmark history, with your settings changes marked.`)})]})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(`div`,{className:`flex rounded border border-neutral-200 dark:border-neutral-700 overflow-hidden text-[12px]`,children:[7,30].map(e=>(0,I.jsxs)(`button`,{type:`button`,onClick:()=>s(e),className:o===e?`px-2.5 py-1 bg-accent text-white`:`px-2.5 py-1 text-neutral-600 dark:text-neutral-300 hover:bg-neutral-50 dark:hover:bg-neutral-800`,children:[e,`d`]},e))}),(0,I.jsx)(`button`,{type:`button`,onClick:u,disabled:c,"aria-label":L(`Refresh trends`),className:`p-1.5 rounded border border-neutral-200 dark:border-neutral-700 text-neutral-500 dark:text-neutral-400 hover:bg-neutral-50 dark:hover:bg-neutral-800 disabled:opacity-40`,children:(0,I.jsx)(P,{size:13,className:c?`animate-spin`:``})})]})]}),(0,I.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-3`,children:[(0,I.jsxs)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 rounded p-3`,children:[(0,I.jsxs)(`div`,{className:`text-[11px] uppercase tracking-wider text-neutral-500 dark:text-neutral-400 font-medium mb-2`,children:[L(`Hit ratio`),` · `,o,`d`]}),f?(0,I.jsx)(Na,{rows:d,changes:i}):(0,I.jsx)(Fa,{text:L(`Trends appear after a couple of days of traffic. The daily series is being collected now.`)})]}),(0,I.jsxs)(`div`,{className:`border border-neutral-200 dark:border-neutral-800 rounded p-3`,children:[(0,I.jsx)(`div`,{className:`text-[11px] uppercase tracking-wider text-neutral-500 dark:text-neutral-400 font-medium mb-2`,children:L(`Benchmark: cached vs uncached (ms)`)}),p?(0,I.jsx)(Pa,{rows:n??[],changes:i}):(0,I.jsx)(Fa,{text:L(`Run the benchmark at least twice to see a trend.`)})]})]}),i.length>0&&(0,I.jsxs)(`div`,{className:`mt-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] uppercase tracking-wider text-neutral-500 dark:text-neutral-400 font-medium mb-1.5`,children:[(0,I.jsx)(Te,{size:11}),` `,L(`Recent changes`)]}),(0,I.jsx)(`ul`,{className:`space-y-0.5`,children:i.slice(0,5).map(e=>(0,I.jsxs)(`li`,{className:`text-[12px] text-neutral-600 dark:text-neutral-300 truncate`,children:[(0,I.jsx)(`span`,{className:`text-neutral-400 dark:text-neutral-500 tabular-nums mr-2`,children:new Date(e.ts*1e3).toLocaleDateString()}),e.message]},`${e.ts}-${e.message}`))})]})]})}var ka=280,Aa=80,q=4;function ja(e,t){return t<=1?q:q+e*(ka-2*q)/(t-1)}function Ma({changes:e,t0:t,t1:n}){return n<=t?null:(0,I.jsx)(I.Fragment,{children:e.filter(e=>e.ts>=t&&e.ts<=n).map(e=>{let r=q+(e.ts-t)/(n-t)*(ka-2*q);return(0,I.jsx)(`line`,{x1:r,x2:r,y1:q,y2:Aa-q,className:`stroke-amber-500/70`,strokeWidth:`1`,strokeDasharray:`2 3`,children:(0,I.jsx)(`title`,{children:e.message})},`${e.ts}-${e.message}`)})})}function Na({rows:e,changes:t}){let n=e=>Aa-q-e*(Aa-2*q),r=e.map((t,r)=>`${ja(r,e.length)},${n(t.ratio)}`).join(` `),i=n(1),a=n(.8),o=Date.parse(e[0]?.date??``)/1e3,s=Date.parse(e[e.length-1]?.date??``)/1e3+86399,c=e[e.length-1];return(0,I.jsxs)(`div`,{children:[(0,I.jsxs)(`svg`,{viewBox:`0 0 ${ka} ${Aa}`,className:`w-full h-20`,role:`img`,"aria-label":L(`Hit ratio trend`),children:[(0,I.jsx)(`rect`,{x:q,y:i,width:ka-2*q,height:a-i,className:`fill-emerald-500/10`}),(0,I.jsx)(`line`,{x1:q,x2:ka-q,y1:a,y2:a,className:`stroke-emerald-500/40`,strokeWidth:`1`,strokeDasharray:`3 3`}),Number.isFinite(o)&&Number.isFinite(s)&&(0,I.jsx)(Ma,{changes:t,t0:o,t1:s}),(0,I.jsx)(`polyline`,{points:r,fill:`none`,className:`stroke-accent`,strokeWidth:`2`,strokeLinejoin:`round`,strokeLinecap:`round`}),e.map((t,r)=>(0,I.jsx)(`circle`,{cx:ja(r,e.length),cy:n(t.ratio),r:`2`,className:`fill-accent`,children:(0,I.jsx)(`title`,{children:`${t.date} — ${(t.ratio*100).toFixed(1)}% (${t.hits} hits / ${t.misses} misses)`})},t.date))]}),c&&(0,I.jsxs)(`div`,{className:`mt-1 text-[12px] text-neutral-500 dark:text-neutral-400`,children:[L(`Latest`),`:`,` `,(0,I.jsxs)(`span`,{className:c.ratio>=.8?`text-emerald-600 dark:text-emerald-400 font-medium`:`text-amber-600 dark:text-amber-400 font-medium`,children:[(c.ratio*100).toFixed(1),`%`]}),` `,`· `,L(`target ≥80%`)]})]})}function Pa({rows:e,changes:t}){let n=Math.max(...e.map(e=>e.uncached_ms),1),r=e=>Aa-q-e/n*(Aa-2*q),i=t=>e.map((n,i)=>`${ja(i,e.length)},${r(t(n))}`).join(` `),a=e[0]?.ts??0,o=e[e.length-1]?.ts??0,s=e[e.length-1];return(0,I.jsxs)(`div`,{children:[(0,I.jsxs)(`svg`,{viewBox:`0 0 ${ka} ${Aa}`,className:`w-full h-20`,role:`img`,"aria-label":L(`Benchmark trend`),children:[o>a&&(0,I.jsx)(Ma,{changes:t,t0:a,t1:o}),(0,I.jsx)(`polyline`,{points:i(e=>e.uncached_ms),fill:`none`,className:`stroke-amber-500`,strokeWidth:`1.5`,strokeDasharray:`4 3`}),(0,I.jsx)(`polyline`,{points:i(e=>e.cached_ms),fill:`none`,className:`stroke-emerald-500`,strokeWidth:`2`,strokeLinejoin:`round`,strokeLinecap:`round`}),e.map((t,n)=>(0,I.jsx)(`circle`,{cx:ja(n,e.length),cy:r(t.cached_ms),r:`2`,className:`fill-emerald-500`,children:(0,I.jsx)(`title`,{children:`${new Date(t.ts*1e3).toLocaleString()} — ${Math.round(t.cached_ms)}ms cached vs ${Math.round(t.uncached_ms)}ms uncached`})},t.ts))]}),(0,I.jsxs)(`div`,{className:`mt-1 flex items-center gap-3 text-[12px] text-neutral-500 dark:text-neutral-400`,children:[(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,I.jsx)(`span`,{className:`inline-block w-3 h-0.5 bg-emerald-500 rounded`}),` `,L(`cached`)]}),(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,I.jsx)(`span`,{className:`inline-block w-3 h-0.5 bg-amber-500 rounded`}),` `,L(`uncached`)]}),s?.savings_ms!=null&&(0,I.jsxs)(`span`,{className:`ml-auto tabular-nums`,children:[`−`,Math.round(s.savings_ms),`ms`]})]})]})}function Fa({text:e}){return(0,I.jsx)(`div`,{className:`h-20 flex items-center justify-center text-center text-[12px] text-neutral-400 dark:text-neutral-500 px-4`,children:e})}function Ia(){let e=Kt(),[t,n]=(0,y.useState)(!1),[r,i]=(0,y.useState)(null),[a,o]=(0,y.useState)(null),[s,c]=(0,y.useState)(!1);return e===`free`?(0,I.jsxs)(`div`,{className:`border border-line bg-primary-tint rounded-card p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,I.jsx)(`span`,{className:`shrink-0 w-9 h-9 rounded-full bg-paper border border-line flex items-center justify-center text-warning`,children:(0,I.jsx)(rt,{size:18})}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,I.jsx)(`span`,{className:`font-medium text-ink`,children:L(`What would Pro do for your site?`)}),(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[10px] uppercase tracking-wider font-medium text-warning`,children:[(0,I.jsx)(de,{size:10}),L(`Pro`)]})]}),(0,I.jsx)(`div`,{className:`text-[12px] text-ink-soft mt-0.5`,children:L(`Scans your current settings + 24h cache stats and shows exactly which Pro features would help.`)})]})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[r&&(0,I.jsxs)(`button`,{type:`button`,onClick:()=>c(e=>!e),className:`flex items-center gap-1 text-[12px] text-ink-soft hover:text-ink transition-colors`,children:[(0,I.jsx)(ie,{size:13,className:`transition-transform ${s?``:`rotate-180`}`}),L(s?`Hide`:`Show`)]}),(0,I.jsxs)(`button`,{type:`button`,onClick:async()=>{n(!0),o(null);try{i(await B.request(`/audit/pro`)),c(!0)}catch(e){o(e instanceof Error?e.message:L(`Audit failed`))}finally{n(!1)}},disabled:t,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded-md bg-primary hover:bg-primary-hover text-on-primary font-medium transition-colors disabled:opacity-50`,children:[t?(0,I.jsx)(P,{size:13,className:`animate-spin`}):(0,I.jsx)(rt,{size:13}),L(r?`Re-run`:`Run Pro audit`)]})]})]}),a&&(0,I.jsx)(`div`,{className:`mt-3 text-[12px] text-danger`,children:a}),r&&s&&(0,I.jsxs)(`div`,{className:`mt-4 space-y-2`,children:[r.suggestions.map(e=>(0,I.jsx)(Ra,{suggestion:e},`${e.id}-${e.severity}`)),(0,I.jsx)(`div`,{className:`text-center pt-2`,children:(0,I.jsxs)(`a`,{href:`https://xspeedcache.com/pricing/`,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1.5 px-4 py-2 rounded-md bg-primary hover:bg-primary-hover text-on-primary text-[13px] font-medium transition-colors`,children:[L(`Upgrade to Pro`),(0,I.jsx)(w,{size:13})]})})]})]}):null}var La={high:{dot:`bg-danger`,chip:`bg-danger-tint text-danger border-line`,label:`High`},med:{dot:`bg-warning`,chip:`bg-warning-tint text-warning border-line`,label:`Medium`},low:{dot:`bg-info`,chip:`bg-info-tint text-info border-line`,label:`Low`}};function Ra({suggestion:e}){let t=Hn[e.id],n=La[e.severity];return(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-md p-3 sm:p-4 flex items-start gap-3`,children:[(0,I.jsx)(`span`,{className:`shrink-0 w-2 h-2 rounded-full mt-2.5 ${n.dot}`,"aria-hidden":!0}),(0,I.jsx)(`span`,{className:`shrink-0 text-warning mt-0.5`,children:t&&(0,I.jsx)(Ct,{name:t.icon,size:16})}),(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,I.jsx)(`span`,{className:`text-[13px] font-medium text-ink`,children:t?.title??e.id}),(0,I.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider px-1.5 py-0.5 rounded border ${n.chip}`,children:n.label}),e.fact&&(0,I.jsx)(`span`,{className:`text-[10px] font-mono px-1.5 py-0.5 rounded bg-panel text-ink-soft`,children:e.fact})]}),(0,I.jsx)(`p`,{className:`text-[12px] text-ink-soft mt-1 leading-relaxed`,children:e.reason})]})]})}function za(){let e=Jt(),t=e===`unlicensed`,n=e===`active`,r=Object.values(Hn);return(0,I.jsxs)(`div`,{className:`mx-auto max-w-5xl space-y-6`,children:[(0,I.jsxs)(`section`,{className:`relative overflow-hidden rounded-card border border-line bg-primary-tint p-6 sm:p-8`,children:[(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[10px] uppercase tracking-wider font-medium border border-line bg-paper text-primary rounded-full px-2 py-0.5`,children:[n?(0,I.jsx)(ee,{size:10}):t?(0,I.jsx)(Ae,{size:10}):(0,I.jsx)(Ie,{size:10}),(0,I.jsx)(`span`,{children:L(n?`Pro Licensed`:t?`Pro — license needed`:`xSpeed Pro`)})]}),(0,I.jsx)(`h1`,{className:`mt-3 font-display text-[26px] font-semibold text-ink`,children:L(n?`Pro is licensed on this site.`:`Everything in Free, plus the heavy lifting.`)}),(0,I.jsx)(`p`,{className:`mt-2 max-w-2xl text-[14px] leading-relaxed text-ink-soft`,children:L(n?`Every feature below is unlocked and available from its own page. This screen stays as a reference for what Pro adds — manage your license from the License page.`:t?`xSpeed Pro is installed — activate your license to unlock every feature below. Your current settings stay exactly as they are.`:`Pro layers deeper optimization, real-user insight, and automation on top of the cache you already run. Nothing you have set up changes.`)}),(0,I.jsx)(`div`,{className:`mt-5`,children:n?(0,I.jsxs)(`a`,{href:Vn,className:`inline-flex items-center gap-1.5 px-4 py-2 rounded-control text-[13px] font-medium border border-line-strong text-ink no-underline hover:bg-panel transition-colors`,children:[L(`Manage license`),(0,I.jsx)(w,{size:14})]}):t?(0,I.jsxs)(`a`,{href:Vn,className:`inline-flex items-center gap-1.5 px-5 py-2.5 rounded-control text-[14px] font-medium bg-primary hover:bg-primary-hover text-on-primary no-underline shadow-primary-glow transition-colors`,children:[L(`Activate License`),(0,I.jsx)(w,{size:15})]}):(0,I.jsxs)(`a`,{href:Bn,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1.5 px-5 py-2.5 rounded-control text-[14px] font-medium bg-primary hover:bg-primary-hover text-on-primary no-underline shadow-primary-glow transition-colors`,children:[L(`Upgrade to Pro`),(0,I.jsx)(w,{size:15})]})})]}),(0,I.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4`,children:r.map(e=>(0,I.jsx)(`div`,{className:`rounded-card border border-line bg-paper p-4`,children:(0,I.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,I.jsx)(`div`,{className:`shrink-0 w-9 h-9 rounded-full border border-line bg-primary-tint text-primary flex items-center justify-center`,children:(0,I.jsx)(Ct,{name:e.icon,size:17})}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`h3`,{className:`text-[14px] font-semibold text-ink`,children:e.title}),(0,I.jsx)(`p`,{className:`mt-1 text-[12px] leading-relaxed text-ink-soft`,children:e.body})]})]})},e.id))}),!n&&(0,I.jsxs)(`div`,{className:`flex items-center justify-center gap-1.5 text-[12px] text-muted`,children:[(0,I.jsx)(O,{size:13,className:`text-success`}),(0,I.jsx)(`span`,{children:L(`Your Free tier keeps working exactly as it does today.`)})]})]})}function Ba({settings:e,stats:t,rewriteProbe:n}){let r=e.cache_enabled,i=ln(t.hit_ratio),a=parseInt(i,10)||0,o=(()=>{if(!r)return L(`Turn on the page cache to start serving pages instantly.`);let e=cn(t.cached_pages);if(n?.active){let t=n.server_type===`nginx`?`nginx`:L(`your web server`);return`${L(`Serving from`)} ${t}, ${L(`bypassing PHP`)} · ${e} ${L(`pages cached`)}`}return`${L(`Serving from the PHP cache`)} · ${e} ${L(`pages cached`)}`})();return(0,I.jsxs)(`section`,{className:`rounded-card border border-line bg-paper p-5 flex flex-col`,"aria-label":L(`Cache status`),children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,I.jsx)(`span`,{className:`inline-flex items-center justify-center w-6 h-6 rounded-full ${r?`bg-success-tint text-success xspeed-anim-boltpulse`:`bg-panel text-faint`}`,"aria-hidden":`true`,children:(0,I.jsx)(vt,{size:14})}),(0,I.jsx)(`h2`,{className:`font-display text-[18px] font-semibold text-ink`,children:L(r?`Cache active`:`Cache inactive`)})]}),(0,I.jsx)(`p`,{className:`mt-1.5 text-[13px] leading-relaxed text-ink-soft`,children:o}),(0,I.jsxs)(`div`,{className:`mt-auto pt-5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between text-[12px] mb-1.5`,children:[(0,I.jsx)(`span`,{className:`text-ink-soft`,children:L(`Cache warmth`)}),(0,I.jsx)(`span`,{className:`font-mono tabular-nums text-ink`,children:i})]}),(0,I.jsx)(`div`,{className:`h-2 rounded-pill bg-panel overflow-hidden`,role:`progressbar`,"aria-valuenow":a,"aria-valuemin":0,"aria-valuemax":100,"aria-label":L(`Cache warmth`),children:(0,I.jsx)(`div`,{className:`h-full rounded-pill ${r?`xspeed-anim-sweep`:``}`,style:{width:`${a}%`,backgroundImage:r?`linear-gradient(90deg, var(--primary) 0%, #5BD6CE 50%, var(--primary) 100%)`:`var(--line-strong)`,backgroundColor:r?void 0:`var(--line-strong)`}})}),(0,I.jsxs)(`p`,{className:`mt-2 text-[12px] text-muted`,children:[L(`Last purged`),` `,t.last_purge?un(t.last_purge):L(`never`)]})]})]})}function Va({onNavigate:e}){let[t,n]=(0,y.useState)(null),[r,i]=(0,y.useState)(!0),a=(e=!1)=>B.request(`/mcp/hub`,e?{headers:{"X-XSpeed-Reconcile":`1`}}:{}).then(e=>n(e)).catch(()=>void 0);(0,y.useEffect)(()=>{let e=!0;return B.request(`/mcp/hub`).then(t=>{e&&n(t)}).catch(()=>{e&&n(null)}).finally(()=>{e&&i(!1)}),()=>{e=!1}},[]),(0,y.useEffect)(()=>{let e=()=>{document.visibilityState===`visible`&&a(!0)};return document.addEventListener(`visibilitychange`,e),window.addEventListener(`focus`,e),()=>{document.removeEventListener(`visibilitychange`,e),window.removeEventListener(`focus`,e)}},[]);let o=`rounded-card border border-line bg-paper p-5 flex flex-col`,s=`inline-flex items-center gap-2 rounded border border-line-strong px-3 py-1.5 text-[13px] font-medium text-ink-soft hover:bg-panel transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary`;if(r)return(0,I.jsxs)(`section`,{className:o,"aria-busy":`true`,"aria-label":L(`xSpeed Hub`),children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,I.jsx)(ce,{size:18,className:`text-muted`,"aria-hidden":`true`}),(0,I.jsx)(`span`,{className:`h-4 w-28 rounded bg-panel animate-pulse`})]}),(0,I.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[(0,I.jsx)(`span`,{className:`block h-3 w-full rounded bg-panel animate-pulse`}),(0,I.jsx)(`span`,{className:`block h-3 w-2/3 rounded bg-panel animate-pulse`})]})]});let c=t?.attached===!0;return(0,I.jsxs)(`section`,{className:o,"aria-label":L(`xSpeed Hub`),children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,I.jsx)(ce,{size:18,className:`text-ink-soft`,"aria-hidden":`true`}),(0,I.jsx)(`h2`,{className:`text-[15px] font-semibold text-ink`,children:L(`xSpeed Hub`)}),c&&(0,I.jsxs)(`span`,{className:`ml-auto inline-flex items-center gap-1.5 text-[12px] text-success`,children:[(0,I.jsx)(`span`,{className:`w-2 h-2 rounded-full bg-success`,"aria-hidden":`true`}),L(`Connected`)]})]}),c?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`p`,{className:`mt-1.5 text-[13px] leading-relaxed text-ink-soft`,children:t?.account_email?`${L(`Connected as`)} ${t.account_email}. ${L(`Control caching remotely and from AI agents.`)}`:L(`Control caching remotely, drive it from AI agents, and manage your sites in one place.`)}),(0,I.jsx)(`div`,{className:`mt-auto pt-4`,children:(0,I.jsxs)(`a`,{href:t?.hub_url,target:`_blank`,rel:`noopener noreferrer`,className:s,children:[L(`Open Hub dashboard`),(0,I.jsx)(N,{size:14})]})})]}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`p`,{className:`mt-1.5 text-[13px] leading-relaxed text-ink-soft`,children:L(`Connect to control caching remotely, drive it from AI agents, and manage all your sites in one place.`)}),(0,I.jsxs)(`div`,{className:`mt-auto pt-4 flex flex-wrap items-center gap-3`,children:[t?.attach_url?(0,I.jsxs)(`a`,{href:t.attach_url,target:`_blank`,rel:`noopener noreferrer`,className:s,children:[L(`Connect to Hub`),(0,I.jsx)(N,{size:14})]}):(0,I.jsx)(`button`,{type:`button`,onClick:()=>e(`mcp`),className:s,children:L(`Connect to Hub`)}),(0,I.jsx)(`button`,{type:`button`,onClick:()=>e(`mcp`),className:`text-[13px] text-ink-soft hover:text-ink underline underline-offset-2`,children:L(`More options`)})]})]})]})}function Ha({stats:e}){let[t,n]=(0,y.useState)(void 0);(0,y.useEffect)(()=>{let e=!0;return B.request(`/cache/benchmark/history?limit=1`).then(t=>{e&&n(t.runs&&t.runs.length>0?t.runs[0].savings_ms??null:null)}).catch(()=>{e&&n(null)}),()=>{e=!1}},[]);let r=t==null||t<=0?`—`:t>=950?`${(t/1e3).toFixed(1)}s`:`${Math.round(t)} ms`,i=[{label:L(`Hit ratio`),value:ln(e.hit_ratio),hint:L(`last 24 hours`)},{label:L(`Cached pages`),value:cn(e.cached_pages),hint:L(`served without PHP`)},{label:L(`Cache size`),value:dn(e.cache_size),hint:L(`on disk`)},{label:L(`Avg saved`),value:r,hint:L(`per page load`)}];return(0,I.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4`,"aria-label":L(`Key metrics`),children:i.map(e=>(0,I.jsxs)(`div`,{className:`rounded-card border border-line bg-paper p-4`,children:[(0,I.jsx)(`p`,{className:`text-[13px] text-ink-soft`,children:e.label}),(0,I.jsx)(`p`,{className:`mt-1 font-display text-[24px] font-semibold text-ink tabular-nums`,children:e.value}),(0,I.jsx)(`p`,{className:`mt-0.5 text-[11px] text-muted`,children:e.hint})]},e.label))})}var Ua=`https://calendly.com/xspeed-cache/book-expert-setup`;function Wa({settings:e,stats:t,rewriteProbe:n,showToast:r}){let i=Kt(),[a,o]=(0,y.useState)(null),[s,c]=(0,y.useState)([]),[l,u]=(0,y.useState)(!0),[d,f]=(0,y.useState)(null);(0,y.useEffect)(()=>{let e=!0,t=[B.getRecommendations().then(t=>{e&&o(t.recommendations??[])}).catch(()=>{e&&o([])})];return i===`free`&&t.push(B.getProAudit().then(t=>{e&&c(t.suggestions??[])}).catch(()=>void 0)),Promise.all(t).finally(()=>{e&&u(!1)}),()=>{e=!1}},[i]);let p=e=>e.action.module?_n({module:e.action.module,subtab:e.action.subtab,focus:e.action.focus,suggest:e.action.suggest}):`#`,m=async e=>{let{action:t}=e;if(t.type===`apply`){if(d)return;f(e.id);try{o((await B.applyRecommendation(e.id)).recommendations??[]),r(L(`Applied`))}catch{r(L(`Could not apply that fix`))}finally{f(null)}}},h=(t.hits_24h??0)+(t.misses_24h??0)>=50&&(t.hit_ratio??0)<.5,g=n?n.active===!1:!1,_=!e.cache_enabled||g||h,v=a&&a.length>0||s.length>0||_;return(0,I.jsxs)(`section`,{className:`rounded-card border border-line bg-info-tint p-4 sm:p-5`,"aria-label":L(`Recommended for your site`),children:[(0,I.jsxs)(`h2`,{className:`flex items-center gap-1.5 text-[14px] font-semibold text-on-tint mb-3`,children:[(0,I.jsx)(vt,{size:15,className:`text-primary`,"aria-hidden":`true`}),L(`Recommended for your site`)]}),l?(0,I.jsxs)(`div`,{className:`space-y-2`,"aria-busy":`true`,children:[(0,I.jsx)(`span`,{className:`block h-10 rounded-lg bg-paper animate-pulse`}),(0,I.jsx)(`span`,{className:`block h-10 w-5/6 rounded-lg bg-paper animate-pulse`})]}):v?(0,I.jsxs)(`div`,{className:`space-y-2`,children:[(a??[]).map(e=>(0,I.jsxs)(`div`,{className:`flex items-start gap-3 rounded-lg border border-line bg-paper px-3 py-2.5`,children:[(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,I.jsx)(`p`,{className:`text-[13px] font-medium text-ink`,children:e.title}),(0,I.jsx)(`p`,{className:`mt-0.5 text-[12px] leading-relaxed text-ink-soft`,children:e.detail})]}),e.action.type===`link`?(0,I.jsxs)(`a`,{href:p(e),className:`shrink-0 inline-flex items-center gap-1.5 rounded border border-line-strong px-2.5 py-1 text-[12px] font-medium text-ink-soft hover:bg-panel transition-colors no-underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary`,children:[(0,I.jsx)(w,{size:13}),e.action.label]}):(0,I.jsxs)(`button`,{type:`button`,onClick:()=>m(e),disabled:d===e.id,className:`shrink-0 inline-flex items-center gap-1.5 rounded border border-line-strong px-2.5 py-1 text-[12px] font-medium text-ink-soft hover:bg-panel transition-colors disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary`,children:[(0,I.jsx)(mt,{size:13,className:d===e.id?`animate-pulse`:``}),e.action.label]})]},e.id)),s.length>0&&(0,I.jsxs)(`div`,{className:`pt-1`,children:[(0,I.jsx)(`p`,{className:`px-1 pb-1 text-[11px] font-semibold uppercase tracking-wide text-muted`,children:L(`Also worth a look`)}),(0,I.jsx)(`div`,{className:`space-y-1.5`,children:s.map(e=>(0,I.jsxs)(`div`,{className:`flex items-start gap-2.5 px-1`,children:[(0,I.jsx)(`span`,{className:`mt-1.5 w-1.5 h-1.5 rounded-full shrink-0 ${e.severity===`high`||e.severity===`med`?`bg-warning`:`bg-line-strong`}`,"aria-hidden":`true`}),(0,I.jsxs)(`p`,{className:`text-[12px] leading-relaxed text-ink-soft`,children:[e.reason,e.fact&&(0,I.jsxs)(`span`,{className:`ml-1.5 text-muted`,children:[`· `,e.fact]})]})]},e.id))})]}),_&&(0,I.jsxs)(`div`,{className:`flex items-start gap-3 rounded-lg border border-line bg-paper px-3 py-2.5`,children:[(0,I.jsx)(D,{size:16,className:`mt-0.5 shrink-0 text-ink-soft`,"aria-hidden":`true`}),(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,I.jsx)(`p`,{className:`text-[13px] font-medium text-ink`,children:L(`Want a hand?`)}),(0,I.jsx)(`p`,{className:`mt-0.5 text-[12px] leading-relaxed text-ink-soft`,children:L(`Book a free setup review with our team.`)})]}),(0,I.jsx)(`a`,{href:Ua,target:`_blank`,rel:`noopener noreferrer`,className:`shrink-0 inline-flex items-center gap-1.5 rounded border border-line-strong px-2.5 py-1 text-[12px] font-medium text-ink-soft hover:bg-panel transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary`,children:L(`Book`)})]})]}):(0,I.jsxs)(`p`,{className:`flex items-center gap-2 text-[13px] text-ink-soft`,children:[(0,I.jsx)(oe,{size:15,className:`text-success`,"aria-hidden":`true`}),L(`You're all set — no recommendations right now.`)]})]})}var Ga=e=>e?.status===`queued`||e?.status===`running`;function Ka({onOpenPanel:e}){let[t,n]=(0,y.useState)(null),[r,i]=(0,y.useState)(null),[a,o]=(0,y.useState)(!1),[s,c]=(0,y.useState)(null),[l,u]=(0,y.useState)(!1),d=(0,y.useRef)(null),f=(0,y.useCallback)(async()=>{try{let e=await B.request(`/score/hub-status`);n(e),i(e.runs?.[0]??null)}catch{n({available:!1})}},[]);(0,y.useEffect)(()=>{f()},[f]),(0,y.useEffect)(()=>()=>{d.current&&window.clearTimeout(d.current)},[]);let p=(0,y.useCallback)(async()=>{try{let e=await B.request(`/score/hub-status`);n(e);let t=e.runs?.[0]??null;i(t),Ga(t)?d.current=window.setTimeout(()=>void p(),5e3):t?.status===`error`&&t.error&&c(t.error)}catch{}},[]),m=(0,y.useCallback)(async()=>{o(!0),c(null);try{let e=await B.request(`/score/hub-test`,{method:`POST`,body:JSON.stringify({})});i(e.run),n(t=>t&&{...t,quota:e.quota??t.quota}),d.current=window.setTimeout(()=>void p(),5e3)}catch(e){c(e instanceof Error?e.message:L(`The test could not be started.`))}finally{o(!1)}},[p]);if(!t)return null;let h=!t.available&&vi(t.reason);if(!t.available&&!h)return null;let g=t.available&&(t.quota?.remaining??0)===0;return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-lg p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,I.jsx)(ye,{size:18,className:`text-accent shrink-0`}),(0,I.jsxs)(`div`,{className:`min-w-0`,children:[(0,I.jsx)(`div`,{className:`font-medium text-ink`,children:L(`GTmetrix test`)}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted`,children:L(g?`No tests left this month.`:`Performance score and Core Web Vitals for your home page.`)})]})]}),(0,I.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[t.available&&t.quota&&(0,I.jsx)(`span`,{className:`text-[11px] text-muted`,children:L(`%1$d of %2$d left`).replace(`%1$d`,String(t.quota.remaining)).replace(`%2$d`,String(t.quota.limit))}),(0,I.jsxs)(`button`,{type:`button`,onClick:()=>t.available?void m():u(!0),disabled:a||Ga(r)||g,className:`flex items-center gap-1.5 text-[13px] px-3 py-1.5 rounded bg-accent text-white hover:bg-primary-hover transition-colors disabled:opacity-50`,children:[(a||Ga(r))&&(0,I.jsx)(P,{size:13,className:`animate-spin`}),Ga(r)?L(`Testing…`):L(`Run test`)]})]})]}),s&&(0,I.jsx)(`p`,{className:`mt-3 text-[12px] text-danger`,children:s}),r?.status===`done`&&e&&(0,I.jsxs)(`button`,{type:`button`,onClick:e,className:`mt-3 inline-flex items-center gap-1 text-[12px] text-accent hover:underline`,children:[L(`View the result`),(0,I.jsx)(w,{size:12})]})]}),(0,I.jsx)(yi,{open:l,onClose:()=>u(!1),local:t.local===!0,onConnected:()=>{f().then(()=>void m())}})]})}var qa=3,Ja=[`cache`,`performance`,`network`,`tools`];function Ya(e){if(e.locked)return`locked`;let t=e.settings?.enabled;return typeof t==`boolean`?t?`on`:`off`:null}function Xa({state:e}){return e===`locked`?(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[11px] text-ink-soft`,children:[(0,I.jsx)(Ie,{size:11,"aria-hidden":`true`}),L(`Pro`)]}):e===`on`?(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-[11px] text-success`,children:[(0,I.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-success`,"aria-hidden":`true`}),L(`On`)]}):e===`off`?(0,I.jsx)(`span`,{className:`text-[11px] text-muted`,children:L(`Off`)}):null}function Za({modules:e,onNavigate:t}){let[n,r]=(0,y.useState)(!1),i=At(e),a=n?i:Ja.map(e=>i.find(t=>t.id===e)).filter(e=>!!e),o=e.length;return(0,I.jsxs)(`section`,{"aria-label":L(`Your setup`),children:[(0,I.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,I.jsx)(`h2`,{className:`text-[14px] font-semibold text-ink`,children:L(`Your setup`)}),o>0&&(0,I.jsxs)(`button`,{type:`button`,onClick:()=>r(e=>!e),className:`inline-flex items-center gap-1 text-[12px] text-ink-soft hover:text-ink underline underline-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary rounded`,"aria-expanded":n,children:[n?L(`Show less`):`${L(`Browse all`)} ${o} ${L(`features`)}`,!n&&(0,I.jsx)(w,{size:12,"aria-hidden":`true`})]})]}),(0,I.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-x-5 gap-y-5`,children:a.map(e=>{let r=n?e.modules:e.modules.slice(0,qa);return r.length===0?null:(0,I.jsxs)(`div`,{children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2 mb-1.5 px-1`,children:[(0,I.jsx)(Ct,{name:e.icon,size:13,className:`text-muted`}),(0,I.jsx)(`span`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted`,children:e.label})]}),(0,I.jsx)(`div`,{className:`rounded-card border border-line bg-paper divide-y divide-line overflow-hidden`,children:r.map(e=>(0,I.jsxs)(`button`,{type:`button`,onClick:()=>t(e.slug),className:`w-full flex items-center gap-3 px-3 py-2 text-left hover:bg-panel transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-inset`,children:[(0,I.jsx)(Ct,{name:e.icon,size:15,className:`shrink-0 text-ink-soft`}),(0,I.jsx)(`span`,{className:`flex-1 min-w-0 truncate text-[13px] text-ink-soft`,children:e.label}),(0,I.jsx)(Xa,{state:Ya(e)})]},e.slug))})]},e.id)})})]})}var Qa=6;function $a(e){switch(e){case`success`:return`bg-success`;case`warn`:return`bg-warning`;case`error`:return`bg-red-500`;default:return`bg-line-strong`}}function eo(){let[e,t]=(0,y.useState)(null);return(0,y.useEffect)(()=>{let e=!0;return B.getActivity().then(n=>{e&&t(n.activity??[])}).catch(()=>{e&&t([])}),()=>{e=!1}},[]),!e||e.length===0?null:(0,I.jsxs)(`section`,{"aria-label":L(`Recent activity`),children:[(0,I.jsx)(`h2`,{className:`text-[14px] font-semibold text-ink mb-3`,children:L(`Recent activity`)}),(0,I.jsx)(`ul`,{className:`rounded-card border border-line bg-paper divide-y divide-line`,children:e.slice(0,Qa).map((e,t)=>(0,I.jsxs)(`li`,{className:`flex items-center gap-3 px-3 py-2`,children:[(0,I.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full shrink-0 ${$a(e.severity)}`,"aria-hidden":`true`}),(0,I.jsx)(`span`,{className:`flex-1 min-w-0 truncate text-[13px] text-ink-soft`,children:e.message}),(0,I.jsx)(`span`,{className:`shrink-0 text-[11px] text-muted tabular-nums`,children:un(e.ts)})]},`${e.ts}-${t}`))})]})}var to=`https://xspeedcache.com/docs/`,no=`https://wpdeveloper.com/support/`,ro=`https://wordpress.org/support/plugin/xspeed/reviews/#new-post`;function io(){let e=`inline-flex items-center gap-2 text-ink-soft hover:text-ink transition-colors`;return(0,I.jsxs)(`section`,{className:`flex flex-wrap items-center gap-x-6 gap-y-2 pt-2 text-[13px]`,"aria-label":L(`Help and resources`),children:[(0,I.jsxs)(`a`,{href:to,target:`_blank`,rel:`noopener noreferrer`,className:e,children:[(0,I.jsx)(E,{size:14,"aria-hidden":`true`}),L(`Documentation`)]}),(0,I.jsxs)(`a`,{href:no,target:`_blank`,rel:`noopener noreferrer`,className:e,children:[(0,I.jsx)(Ne,{size:14,"aria-hidden":`true`}),L(`Help and support`)]}),(0,I.jsxs)(`a`,{href:ro,target:`_blank`,rel:`noopener noreferrer`,className:e,children:[(0,I.jsx)(at,{size:14,"aria-hidden":`true`}),L(`Review us on WordPress.org`)]})]})}function ao({settings:e,stats:t,rewriteProbe:n,modules:r,onNavigate:i,showToast:a}){return(0,I.jsxs)(`div`,{className:`space-y-6`,children:[(0,I.jsxs)(`div`,{className:`grid grid-cols-1 lg:grid-cols-2 gap-4`,children:[(0,I.jsx)(Ba,{settings:e,stats:t,rewriteProbe:n}),(0,I.jsx)(Va,{onNavigate:i})]}),(0,I.jsx)(Ha,{stats:t}),(0,I.jsx)(Ka,{onOpenPanel:()=>i(`score`)}),(0,I.jsx)(Wa,{settings:e,stats:t,rewriteProbe:n,showToast:a}),(0,I.jsx)(Za,{modules:r,onNavigate:i}),(0,I.jsx)(eo,{}),(0,I.jsx)(io,{})]})}var oo={"critical-css":{host:`minify`,subtab:`critical`},"unused-css":{host:`minify`,subtab:`unused`},"brotli-compression":{host:`gzip`,subtab:`brotli`},images:{host:`lazy`,subtab:`images`},"smart-image":{host:`lazy`,subtab:`smart`},"smart-predict":{host:`resource-hints`,subtab:`speculation`},"prewarm-schedule":{host:`preloader`,subtab:`scheduled`},"predictive-warm":{host:`preloader`,subtab:`predictive`},"cloudflare-apo":{host:`cloudflare`},analytics:{host:`health`,subtab:`cache`},rum:{host:`health`,subtab:`visitors`},pagespeed:{host:`health`,subtab:`pagespeed`},"performance-health":{host:`health`,subtab:`pagespeed`},recommendations:{host:`health`},"cache-404":{host:`cache-coverage`,subtab:`coverage`},"search-cache":{host:`cache-coverage`,subtab:`coverage`},"feed-cache":{host:`cache-coverage`,subtab:`beyond`},"rest-cache":{host:`cache-coverage`,subtab:`beyond`},"custom-rules":{host:`cache-coverage`,subtab:`rules`},"maintenance-cache":{host:`cache-coverage`,subtab:`rules`}};function so(e){return oo[e]??null}var co=(0,y.createContext)(``);function lo({query:e,children:t}){return(0,I.jsx)(co.Provider,{value:e,children:t})}function uo(e,t){let n=new Map(e.map(e=>[e.slug,e])),r=(e,t)=>{let r={displayLabel:e.label??e.slug,displayDescription:e.description,...t?.fieldKey?{fieldModuleSlug:e.slug}:{},...t},i=so(e.slug);if(!i)return{module:e,isChild:!1,...r};let a=n.get(i.host);return a?{module:a,subtab:i.subtab,parentLabel:a.label,isChild:!0,...r}:{module:e,isChild:!1,...r}},i=t.trim().toLowerCase();if(!i)return e.filter(e=>!so(e.slug)).map(e=>({module:e,isChild:!1,displayLabel:e.label??e.slug,displayDescription:e.description}));let a=new Set,o=e=>{if(!e)return;let t=`${e.module.slug}::${e.subtab??``}`;a.has(t)||(a.add(t),s.push(e))},s=[];for(let t of e){let e=(t.label??``).toLowerCase().includes(i),n=(t.description??``).toLowerCase().includes(i),a=(t.tab_label??``).toLowerCase().includes(i);if(e||n||a){o(r(t));continue}let s=t.schema??{},c=null;for(let[e,n]of Object.entries(s)){let a=(n.label??e).toString();if(`${a} ${(n.description??``).toString()} ${n.option_labels?Object.values(n.option_labels).join(` `):``} ${e}`.toLowerCase().includes(i)){c=r(t,{fieldKey:e,fieldLabel:a});break}}c&&o(c)}return s}function fo(e){let[t,n]=(0,y.useState)(``);return{query:t,setQuery:n,results:(0,y.useMemo)(()=>uo(e,t),[e,t])}}var po=new Set([`INPUT`,`TEXTAREA`,`SELECT`,`OPTION`,`PRE`,`CODE`,`KBD`,`SVG`,`STYLE`,`SCRIPT`]),mo=`xspeed-search`;function ho(){return typeof CSS<`u`&&!!CSS.highlights&&typeof globalThis.Highlight==`function`}function go(e,t){let n=t.trim();if(!n)return[];let r=n.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),i=new RegExp(r,`gi`),a=[],o=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(t){if(!t.nodeValue||!t.nodeValue.trim())return NodeFilter.FILTER_REJECT;let n=t.parentNode;for(;n&&n!==e;){if(n instanceof Element&&po.has(n.tagName))return NodeFilter.FILTER_REJECT;n=n.parentNode}return NodeFilter.FILTER_ACCEPT}}),s=o.nextNode();for(;s;){let e=s.nodeValue??``;i.lastIndex=0;let t;for(;(t=i.exec(e))!==null;){let e=document.createRange();e.setStart(s,t.index),e.setEnd(s,t.index+t[0].length),a.push(e),t[0].length===0&&i.lastIndex++}s=o.nextNode()}return a}function J({query:e,children:t}){let n=(0,y.useRef)(null);return(0,y.useEffect)(()=>{let t=n.current;if(!t||!ho())return;let r=CSS.highlights,i=globalThis.Highlight,a=0,o=()=>{let n=go(t,e);if(n.length===0){r.delete(mo);return}r.set(mo,new i(...n))};o();let s=new MutationObserver(()=>{cancelAnimationFrame(a),a=requestAnimationFrame(o)});return s.observe(t,{childList:!0,subtree:!0,characterData:!0}),()=>{s.disconnect(),cancelAnimationFrame(a),r.delete(mo)}},[e]),(0,I.jsx)(`div`,{ref:n,className:`contents`,children:t})}function _o(e,t){if(!e)return e;let n=t.trim();if(!n)return e;let r=n.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),i=RegExp(`(${r})`,`gi`),a=e.split(i);return a.length===1?e:(0,I.jsx)(I.Fragment,{children:a.map((e,t)=>t%2==1?(0,I.jsx)(`mark`,{className:`bg-warning-tint text-inherit rounded-sm`,children:e},t):(0,I.jsx)(y.Fragment,{children:e},t))})}function vo({open:e,onClose:t,modules:n,onSelectResult:r,onPurge:i,onPreload:a}){let{query:o,setQuery:s,results:c}=fo(n),[l,u]=(0,y.useState)(0),d=(0,y.useRef)(null),f=(0,y.useRef)(null),p=(0,y.useRef)(null),m=(0,y.useRef)(null),h=(0,y.useMemo)(()=>[{id:`purge`,label:L(`Purge all`),icon:P,run:i},{id:`preload`,label:L(`Preload`),icon:Ge,run:a}],[i,a]),g=(0,y.useMemo)(()=>{let e=o.trim().toLowerCase();return[...h.filter(t=>!e||t.label.toLowerCase().includes(e)).map(e=>({kind:`command`,command:e})),...c.slice(0,40).map(e=>({kind:`result`,result:e}))]},[h,c,o]);if((0,y.useEffect)(()=>{if(e){m.current=document.activeElement??null,s(``),u(0);let e=window.requestAnimationFrame(()=>d.current?.focus());return()=>window.cancelAnimationFrame(e)}m.current?.focus?.()},[e]),(0,y.useEffect)(()=>{u(e=>Math.min(e,Math.max(0,g.length-1)))},[g.length]),(0,y.useEffect)(()=>{e&&f.current?.querySelector(`[aria-selected="true"]`)?.scrollIntoView({block:`nearest`})},[l,e]),(0,y.useEffect)(()=>{if(!e)return;let n=e=>{e.key===`Escape`&&(e.preventDefault(),t())};return document.addEventListener(`keydown`,n),()=>document.removeEventListener(`keydown`,n)},[e,t]),!e)return null;let _=e=>{e.kind===`command`?e.command.run():r(e.result),t()},v=e=>{if(e.key===`Escape`)e.preventDefault(),t();else if(e.key===`ArrowDown`)e.preventDefault(),u(e=>g.length?(e+1)%g.length:0);else if(e.key===`ArrowUp`)e.preventDefault(),u(e=>g.length?(e-1+g.length)%g.length:0);else if(e.key===`Enter`){e.preventDefault();let t=g[l];t&&_(t)}else e.key===`Tab`&&e.preventDefault()},b=e=>`xspeed-cmdk-opt-${e}`;return(0,I.jsxs)(`div`,{className:`fixed inset-0 z-[100] flex items-start justify-center px-4 pt-[12vh]`,onMouseDown:e=>{p.current&&!p.current.contains(e.target)&&t()},children:[(0,I.jsx)(`div`,{className:`absolute inset-0 bg-black/40`,"aria-hidden":`true`}),(0,I.jsxs)(`div`,{ref:p,role:`dialog`,"aria-modal":`true`,"aria-label":L(`Command palette`),className:`relative w-full max-w-xl rounded-card border border-line bg-paper shadow-xl overflow-hidden`,onKeyDown:v,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-3 px-4 py-3 border-b border-line`,children:[(0,I.jsx)(Xe,{size:18,className:`shrink-0 text-muted`,"aria-hidden":`true`}),(0,I.jsx)(`input`,{ref:d,type:`text`,role:`combobox`,"aria-expanded":`true`,"aria-controls":`xspeed-cmdk-list`,"aria-activedescendant":g.length?b(l):void 0,"aria-label":L(`Search settings, modules, actions`),value:o,onChange:e=>{s(e.target.value),u(0)},placeholder:L(`Search settings, modules, actions…`),className:`w-full bg-transparent py-0.5 text-[15px] text-ink placeholder-muted focus:outline-none`}),(0,I.jsx)(`kbd`,{className:`shrink-0 hidden sm:inline-flex items-center h-[20px] px-1.5 rounded text-[10px] font-medium bg-panel text-muted`,children:`esc`})]}),g.length===0?(0,I.jsx)(`div`,{className:`px-4 py-8 text-center text-[13px] text-muted`,children:L(`No matches`)}):(0,I.jsx)(`ul`,{ref:f,id:`xspeed-cmdk-list`,role:`listbox`,"aria-label":L(`Results`),className:`max-h-[52vh] overflow-y-auto py-1.5`,children:g.map((e,t)=>{let n=t===l,r=`flex items-center gap-3 px-4 py-2 cursor-pointer ${n?`bg-primary-tint`:``}`;if(e.kind===`command`){let i=e.command.icon;return(0,I.jsxs)(`li`,{id:b(t),role:`option`,"aria-selected":n,className:r,onMouseEnter:()=>u(t),onMouseDown:t=>{t.preventDefault(),_(e)},children:[(0,I.jsx)(`span`,{className:`shrink-0 inline-flex h-6 w-6 items-center justify-center rounded-control bg-panel text-ink-soft`,children:(0,I.jsx)(i,{size:14,"aria-hidden":`true`})}),(0,I.jsx)(`span`,{className:`flex-1 min-w-0 truncate text-[13px] text-ink`,children:_o(e.command.label,o)}),(0,I.jsx)(`span`,{className:`shrink-0 text-[11px] text-muted`,children:L(`Action`)}),n&&(0,I.jsx)(ue,{size:13,className:`shrink-0 text-muted`,"aria-hidden":`true`})]},`cmd-${e.command.id}`)}let i=e.result,a=i.parentLabel??Ot(kt(i.module.slug)??``)?.label??``;return(0,I.jsxs)(`li`,{id:b(t),role:`option`,"aria-selected":n,className:r,onMouseEnter:()=>u(t),onMouseDown:t=>{t.preventDefault(),_(e)},children:[(0,I.jsx)(`span`,{className:`shrink-0 inline-flex h-6 w-6 items-center justify-center rounded-control bg-panel text-ink-soft`,children:(0,I.jsx)(Ct,{name:i.module.icon,size:14})}),(0,I.jsxs)(`span`,{className:`flex-1 min-w-0 truncate text-[13px] text-ink`,children:[_o(i.displayLabel,o),i.fieldLabel&&(0,I.jsxs)(`span`,{className:`text-muted`,children:[` · `,_o(i.fieldLabel,o)]})]}),a&&(0,I.jsx)(`span`,{className:`shrink-0 text-[11px] text-muted`,children:a}),n&&(0,I.jsx)(ue,{size:13,className:`shrink-0 text-muted`,"aria-hidden":`true`})]},`res-${i.module.slug}:${i.subtab??``}:${i.fieldKey??``}`)})})]})]})}var yo=null,bo=0,xo=`xspeed-field-blink`,So=40;function Y(e,t){if(yo!==e)return;let n=document.querySelector(`[data-field-anchor="${Co(e)}"]`);if(n&&n.offsetParent!==null){yo=null,n.scrollIntoView({block:`center`,behavior:`smooth`}),n.classList.remove(xo),n.offsetWidth,n.classList.add(xo);let e=()=>n.classList.remove(xo);n.addEventListener(`animationend`,e,{once:!0}),window.setTimeout(e,1500);return}t<So?bo=window.requestAnimationFrame(()=>Y(e,t+1)):yo=null}function X(e,t){if(typeof window>`u`)return;let n=`${e}:${t}`;yo=n,window.cancelAnimationFrame(bo),bo=window.requestAnimationFrame(()=>Y(n,0))}function Co(e){return typeof CSS<`u`&&typeof CSS.escape==`function`?CSS.escape(e):e.replace(/["\\]/g,`\\$&`)}function wo(e){if(e.view===`overview`)return`#/overview`;if(e.view===`pro`)return`#/pro`;if(e.view===`group`)return`#/${e.group}`;let t=`#/${e.group}/${e.module}`;return e.subtab&&(t+=`/${e.subtab}`),t}function To(e){if(!e)return{};let t=new URLSearchParams(e);return{focus:t.get(`focus`)||void 0,suggest:t.get(`suggest`)??void 0}}var Eo={"migration-pro":{module:`migration`}};function Do(e){return e.module===`lazy`&&e.subtab===`fonts`?{...e,group:kt(`fonts`)??e.group,module:`fonts`,subtab:``}:e}function Oo(e){let t=(e||``).replace(/^#/,``),n=t.indexOf(`?`),r=n===-1?t:t.slice(0,n),{focus:i,suggest:a}=To(n===-1?``:t.slice(n+1));if(r.startsWith(`/`)){let e=r.slice(1).split(`/`).filter(Boolean);return e.length===0||e[0]===`overview`?{view:`overview`,focus:i,suggest:a}:e[0]===`pro`?{view:`pro`,focus:i,suggest:a}:Dt.includes(e[0])?e.length===1?{view:`group`,group:e[0],focus:i,suggest:a}:Do({view:`module`,group:e[0],module:e[1],subtab:e[2]||``,focus:i,suggest:a}):{view:`overview`,focus:i,suggest:a}}let o=vn(e),s=o.module;if(!s||s===`overview`)return{view:`overview`,focus:o.focus,suggest:o.suggest,legacy:!0};let c=Eo[s],l=c?c.module:s;c?.subtab&&!o.subtab&&(o.subtab=c.subtab);let u=kt(l);return u?Do({view:`module`,group:u,module:l,subtab:o.subtab??``,focus:o.focus,suggest:o.suggest,legacy:!0}):{view:`overview`,focus:o.focus,suggest:o.suggest,legacy:!0}}function ko(e,t){if(t!==`free`)return e;let n=new Set(e.map(e=>e.slug)),r=wt.filter(e=>!n.has(e.slug)&&!e.embedded).map(e=>({slug:e.slug,tier:`pro`,version:`0.0.0`,label:e.label,icon:e.icon,description:e.description,settings:{},schema:{},locked:!0}));return[...e,...r]}var Ao=`xspeed-theme`,jo=`xspeed_theme`;function Mo(e){document.cookie=`${jo}=${e}; path=/; max-age=31536000; SameSite=Lax`}function No(){let[e,t]=(0,y.useState)(()=>localStorage.getItem(Ao)===`dark`?`dark`:`light`);return(0,y.useEffect)(()=>{let t=document.getElementById(`xspeed-app`);t&&(t.classList.toggle(`dark`,e===`dark`),document.body.classList.toggle(`xspeed-dark`,e===`dark`),localStorage.setItem(Ao,e),Mo(e))},[e]),{theme:e,toggle:()=>t(e=>e===`dark`?`light`:`dark`)}}function Po(){let e=Kt(),[t,n]=(0,y.useState)({}),[r,i]=(0,y.useState)(()=>window.XSpeedConfig?.bootstrap?.modules??[]);(0,y.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>{B.getModules().then(i).catch(()=>void 0)};return window.addEventListener(`xspeed:tier-changed`,e),()=>window.removeEventListener(`xspeed:tier-changed`,e)},[]);let a=(0,y.useMemo)(()=>ko(r,e).map(e=>t[e.slug]?{...e,settings:t[e.slug]}:e),[e,t,r]),o=(0,y.useCallback)((e,t)=>{n(n=>({...n,[e]:t})),e===`white-label`&&B.getBranding().then(e=>{window.XSpeedPro?.setBranding?.(e)}).catch(()=>void 0)},[]),s=(0,y.useCallback)((e,t)=>{let n=yn(e);n&&(X(n.module,n.field),Ii(t===void 0?null:{module:n.module,field:n.field,value:t}))},[]),[c,l]=(0,y.useState)(()=>Oo(window.location.hash));(0,y.useEffect)(()=>{let e=Oo(window.location.hash);if(e.legacy){let t=wo(e);window.location.hash!==t&&history.replaceState(null,``,t)}s(e.focus,e.suggest)},[]),(0,y.useEffect)(()=>{let e=wo(c);typeof window<`u`&&window.location.hash!==e&&history.replaceState(null,``,e)},[c]),(0,y.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>{let e=Oo(window.location.hash);l(e),s(e.focus,e.suggest)};return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[s]);let u=(0,y.useCallback)(e=>{l(e===`overview`?{view:`overview`}:{view:`group`,group:e})},[]),d=(0,y.useCallback)((e,t=``)=>{let n=kt(e);n&&l({view:`module`,group:n,module:e,subtab:t})},[]),f=(0,y.useCallback)(()=>l({view:`pro`}),[]),p=c.view===`overview`?jt:c.group??`overview`,m=c.view===`module`?c.module??null:null,h=c.view===`module`?c.subtab??``:``,g=(0,y.useMemo)(()=>m?a.find(e=>e.slug===m)??null:null,[a,m]),_=(0,y.useRef)(null);(0,y.useEffect)(()=>{_.current?.scrollTo({top:0})},[c]);let v=window.XSpeedConfig?.bootstrap,[b,x]=(0,y.useState)(v?.settings??null),[S,C]=(0,y.useState)(v?.status?.stats??null),[w,T]=(0,y.useState)(v?.status?.rewrite_probe??null),[ee,E]=(0,y.useState)(v?.status?.mobile_separate??null),[te,D]=(0,y.useState)(v?.status?.nginx_server_block??null),[ne,re]=(0,y.useState)(null),[O,k]=(0,y.useState)(!1),[A,j]=(0,y.useState)(!1),[ie,ae]=(0,y.useState)(!1),{theme:oe,toggle:M}=No(),[se,ce]=(0,y.useState)(!1),le=(0,y.useCallback)(e=>{d(e.module.slug,e.subtab??``),e.fieldKey&&X(e.fieldModuleSlug??e.module.slug,e.fieldKey)},[d]);(0,y.useEffect)(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&!e.altKey&&!e.shiftKey&&e.key.toLowerCase()===`k`&&(e.preventDefault(),e.stopPropagation(),ce(e=>!e))};return window.addEventListener(`keydown`,e,{capture:!0}),()=>window.removeEventListener(`keydown`,e,{capture:!0})},[]);let ue=(0,y.useCallback)(e=>{re(e),setTimeout(()=>re(null),2e3)},[]);(0,y.useEffect)(()=>{B.request(`/mcp/hub`).then(e=>ae(e?.attached===!0)).catch(()=>void 0)},[]),(0,y.useEffect)(()=>{b&&S||Promise.all([B.getSettings(),B.getStatus()]).then(([e,t])=>{x(e),C(t.stats),T(t.rewrite_probe??null),E(t.mobile_separate??null),D(t.nginx_server_block??null)}).catch(()=>ue(L(`Failed to load`)))},[]);let de=(0,y.useCallback)(async e=>{if(!b)return;let t=b;x({...b,cache_enabled:e});try{let t=await B.toggleCache(e);x(e=>e&&{...e,cache_enabled:t.enabled}),C(t.stats),D(t.install_state.nginx_server_block??null),e&&!t.install_state.wp_cache_constant&&t.install_state.manual_snippet?ue(`Cache enabled. Add to wp-config.php: ${t.install_state.manual_snippet}`):e&&t.install_state.nginx_snippet?ue(`Cache enabled. nginx detected — re-run the setup wizard to copy the server-block snippet for max speed.`):ue(L(e?`Cache enabled`:`Cache disabled`))}catch{x(t),ue(L(e?`Failed to enable cache`:`Failed to disable cache`))}},[b,ue]),fe=(0,y.useCallback)(async()=>{if(!O){k(!0);try{C((await B.purge()).stats),ue(L(`Cache purged`))}catch{ue(L(`Purge failed`))}finally{k(!1)}}},[O,ue]),pe=(0,y.useCallback)(async()=>{if(!A){j(!0);try{await B.preload(),ue(L(`Preload started`))}catch{ue(L(`Preload could not start`))}finally{j(!1)}}},[A,ue]),N=(0,y.useCallback)(async()=>{try{let e=await B.getStatus();C(e.stats),T(e.rewrite_probe??null),E(e.mobile_separate??null),D(e.nginx_server_block??null)}catch{}},[]),me=(0,y.useCallback)(()=>d(`mcp`),[d]),he=(0,y.useMemo)(()=>{if(c.view===`overview`)return{current:L(`Overview`)};if(c.view===`group`)return{current:Ot(c.group??``)?.label??``};let e=Ot(c.group??``),t=c.module===`logs`?L(`Logs`):g?.label??c.module??``;return{backLabel:e?.label,onBack:()=>u(c.group??`overview`),current:t}},[c,g,u]),ge=(0,I.jsx)(Zt,{activeGroup:p,onNavigate:u,onUpgrade:f,onManageLicense:()=>d(`license`),modules:a}),_e=(0,I.jsx)($t,{crumb:he,onOpenSearch:()=>ce(!0),onPurge:fe,onPreload:pe,onConnectHub:me,purging:O,preloading:A,hubConnected:ie,theme:oe,onToggleTheme:M});if(!b||!S)return(0,I.jsxs)(lo,{query:``,children:[ge,(0,I.jsxs)(`div`,{className:`flex-1 flex flex-col min-w-0`,children:[_e,(0,I.jsx)(`main`,{className:`flex-1 flex bg-canvas`,children:(0,I.jsx)(mn,{})})]})]});let ve=c.view===`module`&&c.module!==`logs`&&!g;return(0,I.jsxs)(lo,{query:``,children:[ge,(0,I.jsxs)(`div`,{className:`flex-1 flex flex-col min-w-0`,children:[_e,(0,I.jsx)(`main`,{ref:_,className:`flex-1 overflow-auto bg-canvas`,children:(0,I.jsx)(J,{query:``,children:(0,I.jsxs)(`div`,{className:`px-4 sm:px-6 lg:px-8 py-5 sm:py-6`,children:[c.view===`overview`&&(0,I.jsx)(ao,{settings:b,stats:S,rewriteProbe:w,modules:a,onNavigate:d,showToast:ue}),c.view===`pro`&&(0,I.jsx)(za,{}),(c.view===`group`||ve)&&(0,I.jsx)(nn,{groupId:c.group??`cache`,modules:a,onOpen:d}),c.view===`module`&&c.module===`logs`&&(0,I.jsx)(pn,{}),c.view===`module`&&g&&(0,I.jsxs)(`div`,{className:`space-y-6`,children:[(0,I.jsx)(on,{module:g,eyebrow:Ot(c.group??``)?.label}),g.slug===`cache`&&(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(ia,{probe:w,onOpenHealth:()=>d(`health`)}),(0,I.jsx)(oa,{mobile:ee,onOpenCacheSettings:()=>d(`cache`)}),(0,I.jsx)(wa,{stats:S}),(0,I.jsx)(Ta,{}),(0,I.jsx)(K,{settings:b,stats:S,onToggle:de,onPurge:fe}),(0,I.jsx)(la,{snippet:te,topology:w?.topology,focus:c.focus}),(0,I.jsx)(Ia,{}),(0,I.jsx)(Ea,{}),(0,I.jsx)(Oa,{})]}),(0,I.jsx)(Zi,{module:g,subtab:h,onSubtabChange:e=>l(t=>t.view===`module`?{...t,subtab:e}:t),getModule:e=>a.find(t=>t.slug===e),onSaved:e=>{o(g.slug,e),N()}})]})]})})})]}),ne&&(0,I.jsx)(hn,{message:ne}),(0,I.jsx)(`div`,{id:`xspeed-toast-host`}),(0,I.jsx)(vo,{open:se,onClose:()=>ce(!1),modules:a,onSelectResult:le,onPurge:fe,onPreload:pe})]})}var Fo=[{id:`review`,label:`Environment`},{id:`configure`,label:`Configure`},{id:`done`,label:`Summary`},{id:`connect`,label:`Connect`}];function Io(){return typeof window>`u`?!1:!!window.XSpeedConfig?.bootstrap?.hub?.attached}function Lo({current:e,showConnect:t=!Io()}){let n=t||e===`connect`?Fo:Fo.filter(e=>e.id!==`connect`).map(e=>e.id===`done`?{...e,label:`Done`}:e),r=n.findIndex(t=>t.id===e);return(0,I.jsx)(`div`,{className:`flex items-center justify-center gap-2 sm:gap-3 py-4 sm:py-5 border-b border-line`,children:n.map((e,t)=>{let i=t<r,a=t===r;return(0,I.jsxs)(`div`,{className:`flex items-center gap-2 sm:gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(`span`,{className:`w-6 h-6 rounded-full flex items-center justify-center text-[11px] font-medium transition-colors ${a?`bg-primary text-on-primary`:i?`bg-success text-white`:`bg-line text-muted`}`,children:i?(0,I.jsx)(O,{size:12}):t+1}),(0,I.jsx)(`span`,{className:`hidden sm:inline text-[13px] font-medium ${a?`text-ink`:i?`text-ink-soft`:`text-faint`}`,children:e.label})]}),t<n.length-1&&(0,I.jsx)(`span`,{className:`w-8 sm:w-12 h-px ${i?`bg-success`:`bg-line`}`})]},e.id)})})}function Ro({step:e,hero:t,children:n,footer:r}){return(0,I.jsxs)(`div`,{className:`max-w-3xl mx-auto my-6 sm:my-10 bg-paper border border-line rounded-card overflow-hidden flex flex-col`,children:[(0,I.jsx)(Lo,{current:e}),t,(0,I.jsx)(`div`,{className:`px-4 sm:px-6 py-2 space-y-4`,children:n}),r&&(0,I.jsx)(`div`,{className:`border-t border-line px-4 sm:px-6 py-3 sm:py-4 flex items-center justify-between gap-3 bg-paper mt-6`,children:r})]})}function zo({icon:e,logo:t,title:n,subtitle:r}){return(0,I.jsxs)(`div`,{className:`text-center max-w-2xl mx-auto px-4 sm:px-6 py-6 sm:py-8`,children:[t?(0,I.jsx)(`div`,{className:`mb-3 flex justify-center`,children:t}):e&&(0,I.jsx)(`div`,{className:`mb-3 flex justify-center`,children:(0,I.jsx)(e,{size:28,className:`text-primary`})}),(0,I.jsx)(`h1`,{className:`text-[22px] sm:text-[24px] font-semibold text-ink leading-tight`,children:n}),r&&(0,I.jsx)(`p`,{className:`text-[13px] text-muted mt-2`,children:r})]})}function Bo({children:e,onClick:t,disabled:n,type:r=`button`}){return(0,I.jsx)(`button`,{type:r,onClick:t,disabled:n,className:`px-4 py-2 rounded text-[13px] font-medium flex items-center gap-1.5 transition-colors ${n?`bg-primary text-on-primary opacity-50 cursor-not-allowed`:`bg-primary text-on-primary hover:bg-primary-hover`}`,children:e})}function Vo({children:e,onClick:t}){return(0,I.jsx)(`button`,{type:`button`,onClick:t,className:`text-[13px] text-muted hover:text-ink transition-colors`,children:e})}function Ho({step:e,rows:t=3}){return(0,I.jsxs)(`div`,{className:`max-w-3xl mx-auto my-6 sm:my-10 bg-paper border border-line rounded-card overflow-hidden flex flex-col`,children:[(0,I.jsx)(Lo,{current:e}),(0,I.jsxs)(`div`,{className:`text-center max-w-2xl mx-auto px-4 sm:px-6 py-6 sm:py-8 w-full`,children:[(0,I.jsx)(`div`,{className:`mx-auto mb-4 h-11 w-11 rounded-card bg-line motion-safe:animate-pulse`}),(0,I.jsx)(`div`,{className:`mx-auto h-5 w-1/2 rounded bg-line motion-safe:animate-pulse`}),(0,I.jsx)(`div`,{className:`mx-auto mt-3 h-3 w-3/4 rounded bg-panel motion-safe:animate-pulse`})]}),(0,I.jsx)(`div`,{className:`px-4 sm:px-6 py-2 space-y-3 pb-8`,children:(0,I.jsx)(`div`,{className:`rounded-card border border-line bg-panel px-5 py-5 space-y-3`,children:Array.from({length:t}).map((e,t)=>(0,I.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,I.jsx)(`div`,{className:`h-4 w-4 rounded-full bg-line motion-safe:animate-pulse shrink-0`}),(0,I.jsx)(`div`,{className:`h-3 rounded bg-line motion-safe:animate-pulse`,style:{width:`${80-t*12}%`}})]},t))})})]})}function Uo({initialHub:e,onNext:t,onSkip:n}){let{status:r,connectUrl:i,error:a,attached:o,hasToken:s,busy:c,loaded:l,generateToken:u}=gi({active:!0,initial:e}),[d,f]=(0,y.useState)(!1);return!l&&!o?(0,I.jsx)(Ho,{step:`connect`,rows:3}):o?(0,I.jsx)(Ro,{step:`connect`,hero:(0,I.jsx)(zo,{icon:O,title:L(`Connected to xSpeed Hub`),subtitle:r?.account_email?Pt(L(`Connected as %s. Your caching is ready to manage from anywhere.`),r.account_email):L(`Your caching is ready to manage from anywhere.`)}),footer:(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`span`,{className:`text-[12px] text-faint`,children:L(`You're all set`)}),(0,I.jsxs)(Bo,{onClick:t,children:[L(`Go to Dashboard`),(0,I.jsx)(w,{size:14})]})]}),children:(0,I.jsxs)(`div`,{className:`rounded-card border border-line bg-success-tint px-4 py-3.5`,children:[(0,I.jsx)(`p`,{className:`text-[11px] font-semibold uppercase tracking-wide text-success mb-2.5`,children:L(`Now unlocked`)}),(0,I.jsx)(`ul`,{className:`space-y-2`,children:[L(`One AI connection controls the cache on every site you connect`),L(`Purge, benchmark, preload and tune settings by asking your AI`),L(`Manage this site from the central xSpeed Hub dashboard`)].map(e=>(0,I.jsxs)(`li`,{className:`flex items-start gap-2 text-[12.5px] text-ink-soft`,children:[(0,I.jsx)(O,{size:14,className:`text-success mt-0.5 shrink-0`}),e]},e))})]})}):(0,I.jsxs)(Ro,{step:`connect`,hero:(0,I.jsx)(zo,{logo:(0,I.jsx)(Xt,{className:`w-11 h-11 rounded-card`}),title:L(`Run your site just by asking`),subtitle:L(`Connect this site to your free xSpeed Hub — then manage caching here and on every other site straight from ChatGPT, Claude, or any AI assistant. Free, forever.`)}),footer:(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Vo,{onClick:n,children:L(`I'll connect later`)}),(0,I.jsxs)(Bo,{onClick:t,children:[L(`Go to Dashboard`),(0,I.jsx)(w,{size:14})]})]}),children:[a&&(0,I.jsx)(V,{tone:`danger`,title:L(`xSpeed Hub error`),body:a}),(0,I.jsxs)(`div`,{className:`rounded-card bg-panel border border-line px-5 sm:px-8 py-5 sm:py-6`,children:[(0,I.jsx)(`p`,{className:`text-[13px] font-medium text-ink mb-4`,children:L(`Your Hub is home base for all your sites. Once connected, you can:`)}),(0,I.jsxs)(`ul`,{className:`space-y-3.5`,children:[(0,I.jsxs)(`li`,{className:`flex items-start gap-3`,children:[(0,I.jsx)(vt,{size:16,className:`text-primary mt-0.5 shrink-0`}),(0,I.jsxs)(`p`,{className:`text-[13px] leading-relaxed text-ink-soft`,children:[(0,I.jsx)(`span`,{className:`font-medium text-ink`,children:L(`Just say what you want`)}),` — `,(0,I.jsx)(`em`,{className:`not-italic text-ink`,children:L(`“clear the cache on my store,” “warm up the homepage,” “how fast is my blog?”`)}),` — `,L(`and it happens.`)]})]}),(0,I.jsxs)(`li`,{className:`flex items-start gap-3`,children:[(0,I.jsx)(Se,{size:16,className:`text-primary mt-0.5 shrink-0`}),(0,I.jsxs)(`p`,{className:`text-[13px] leading-relaxed text-ink-soft`,children:[(0,I.jsx)(`span`,{className:`font-medium text-ink`,children:L(`Run every site from one place`)}),` — `,L(`no logging into each dashboard separately.`)]})]}),(0,I.jsxs)(`li`,{className:`flex items-start gap-3`,children:[(0,I.jsx)(be,{size:16,className:`text-primary mt-0.5 shrink-0`}),(0,I.jsxs)(`p`,{className:`text-[13px] leading-relaxed text-ink-soft`,children:[(0,I.jsx)(`span`,{className:`font-medium text-ink`,children:L(`Get more over time`)}),` — `,L(`new Hub features arrive automatically, free.`)]})]})]}),(0,I.jsx)(`p`,{className:`text-[13px] mt-4`,children:(0,I.jsx)(`a`,{href:`${r?.hub_url??`https://xspeedcache.com`}`,target:`_blank`,rel:`noreferrer`,className:`text-primary hover:underline`,children:L(`See everything it does.`)})})]}),(0,I.jsxs)(`div`,{className:`flex flex-col items-center gap-3 pt-2`,children:[(0,I.jsxs)(`a`,{href:i,className:`inline-flex items-center justify-center gap-2 px-8 py-3 rounded-md text-[14px] font-semibold bg-primary text-on-primary hover:bg-primary-hover transition-colors shadow-sm`,children:[(0,I.jsx)(rt,{size:16}),L(`Connect to xSpeed Hub`)]}),(0,I.jsx)(`div`,{className:`flex flex-wrap items-center justify-center gap-x-4 gap-y-1`,children:[L(`Free forever`),L(`Under a minute`),L(`No card, no catch`)].map(e=>(0,I.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-[11.5px] text-muted`,children:[(0,I.jsx)(O,{size:13,className:`text-success`}),e]},e))})]}),(0,I.jsxs)(`div`,{className:`border-t border-line pt-3 text-center`,children:[(0,I.jsxs)(`button`,{type:`button`,onClick:()=>{s||u(),f(e=>!e)},className:`inline-flex items-center gap-1.5 text-[11.5px] text-faint hover:text-ink-soft transition-colors`,children:[c===`token`?(0,I.jsx)(P,{size:12,className:`animate-spin`}):(0,I.jsx)(Ae,{size:12}),L(`No redirect? Connect with a token instead.`)]}),d&&(0,I.jsxs)(`div`,{className:`mt-3 space-y-2 text-left`,children:[(0,I.jsxs)(`p`,{className:`text-[12px] text-muted`,children:[L(`Paste this site’s URL + token into the`),` `,(0,I.jsxs)(`a`,{href:r?.add_site_url,target:`_blank`,rel:`noreferrer`,className:`text-primary hover:underline inline-flex items-center gap-0.5`,children:[L(`Add site form`),` `,(0,I.jsx)(N,{size:11})]}),` `,L(`on your xSpeed Hub account.`)]}),(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`text-[11px] font-medium text-muted mb-1`,children:L(`Site URL`)}),(0,I.jsx)(En,{content:r?.site_url??``})]}),(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`text-[11px] font-medium text-muted mb-1`,children:L(`Token`)}),(0,I.jsx)(En,{content:r?.site_token??``,tone:`blue`})]})]})]})]})}var Wo={apache:`Apache`,litespeed:`LiteSpeed`,nginx:`nginx`,iis:`IIS`,unknown:`Unknown`};function Go({env:e,onNext:t}){let n=R(),r=!!n.logo_svg?.trim(),i=e.conflicts.length>0,a=e.wp.ok?`ok`:`fail`,o=e.php.modern?`ok`:e.php.ok?`warn`:`fail`,s=e.cache_dir.writable?`ok`:`fail`,c=e.permalinks_ok?`ok`:`warn`,l=i?`warn`:`ok`,u=e.server.gzip_mode===`auto`?`GZIP can be auto-configured via .htaccess.`:`GZIP requires a manual server-config snippet (we'll show it).`;return(0,I.jsx)(Ro,{step:`review`,hero:(0,I.jsx)(zo,{icon:Ge,logo:r?(0,I.jsx)(Xt,{className:`w-8 h-8 rounded`}):void 0,title:`Let's review your setup`,subtitle:`A quick 30-second check of your environment before we turn on a sensible caching profile.`}),footer:(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`span`,{}),(0,I.jsxs)(Bo,{onClick:t,children:[`Get Started`,(0,I.jsx)(w,{size:14})]})]}),children:(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-card overflow-hidden`,children:[(0,I.jsx)(Tn,{first:!0,tone:a,label:`WordPress ${e.wp.version}`,detail:e.wp.ok?`Meets the 6.0+ minimum.`:`Upgrade to 6.0 or higher.`}),(0,I.jsx)(Tn,{tone:o,label:`PHP ${e.php.version}`,detail:e.php.modern?`Modern PHP — full speed.`:e.php.ok?`Works, but 8.1+ is recommended for best performance.`:`Upgrade to PHP 7.4 or higher.`}),(0,I.jsx)(Tn,{tone:`info`,label:`Server: ${Wo[e.server.type]}`,detail:u}),(0,I.jsx)(Tn,{tone:s,label:`Cache directory writable`,detail:e.cache_dir.writable?e.cache_dir.path:`Cannot write to ${e.cache_dir.path}. Adjust file permissions before continuing.`}),(0,I.jsx)(Tn,{tone:c,label:`Permalinks`,detail:e.permalinks_ok?`Pretty permalinks active.`:`Set permalinks to anything other than "Plain" — required for page caching.`}),(0,I.jsx)(Tn,{tone:l,label:`Caching plugin conflicts`,detail:i?`Detected: ${e.conflicts.join(`, `)}. Deactivate before enabling ${n.name} cache to avoid double-caching.`:`No other caching plugins detected.`})]})})}var Ko=[{value:12,label:`12 hours`},{value:24,label:`24 hours`},{value:168,label:`7 days`},{value:720,label:`30 days`}],qo=[{id:`conservative`,label:`Conservative`,description:`Page cache + GZIP only. No minify, no lazy-load, no browser cache headers. Safest on themes with finicky CSS / JS.`,icon:$e,choices:{cache_enabled:!0,minify_html:!1,minify_css:!1,minify_js:!1,defer_js:!1,gzip_enabled:!0,lazy_images:!1,browser_cache:!1,cache_expiry:12}},{id:`balanced`,label:`Balanced`,description:`Cache + GZIP + safe minify (HTML/CSS only) + lazy images + browser cache headers + LCP image preload & font preconnect. Recommended for most sites.`,icon:vt,choices:{cache_enabled:!0,minify_html:!0,minify_css:!0,minify_js:!1,defer_js:!1,gzip_enabled:!0,lazy_images:!0,browser_cache:!0,resource_hints:!0,cache_expiry:24}},{id:`aggressive`,label:`Aggressive`,description:`Everything Balanced does, plus JS minify + defer non-critical JS, and a 7-day cache lifetime. Test after enabling — some themes break.`,icon:ve,choices:{cache_enabled:!0,minify_html:!0,minify_css:!0,minify_js:!0,defer_js:!0,gzip_enabled:!0,lazy_images:!0,browser_cache:!0,resource_hints:!0,cache_expiry:168}}],Jo={cache_enabled:`Enable Page Cache`,minify_html:`Minify HTML`,minify_css:`Minify CSS`,minify_js:`Minify JS`,defer_js:`Defer JavaScript`,gzip_enabled:`Enable GZIP Compression`,lazy_images:`Lazy-load Images`,browser_cache:`Browser cache headers`,resource_hints:`LCP image preload + preconnect`};function Yo(e,t){return e?Object.keys(Jo).filter(n=>e[n]===!0&&t[n]!==!0).map(e=>Jo[e]):[]}function Xo(e){if(e>=168&&e%168==0){let t=e/168;return`${t} week${t===1?``:`s`}`}if(e>=24&&e%24==0){let t=e/24;return`${t} day${t===1?``:`s`}`}return`${e} hour${e===1?``:`s`}`}function Zo(e,t){if(!e)return[];let n=e.cache_expiry,r=t.cache_expiry;return typeof n!=`number`||typeof r!=`number`||n===r?[]:[`Cache expiry: ${Xo(n)} → ${Xo(r)}`]}function Qo(e){let t=e;return qo.find(e=>Object.entries(e.choices).every(([e,n])=>t[e]===n))?.id??`custom`}function $o({env:e,initial:t,current:n,onApply:r,onSkip:i,onBack:a,busy:o}){let[s,c]=(0,y.useState)(t),l=(e,t)=>c(n=>({...n,[e]:t})),u=e=>c(t=>({...t,...e.choices})),d=(0,y.useMemo)(()=>Qo(s),[s]),f=(0,y.useMemo)(()=>Yo(n,s),[n,s]),p=(0,y.useMemo)(()=>Zo(n,s),[n,s]),m=(0,y.useMemo)(()=>{let e=s.cache_expiry;return typeof e!=`number`||Ko.some(t=>t.value===e)?Ko:[...Ko,{value:e,label:Xo(e)}].sort((e,t)=>e.value-t.value)},[s.cache_expiry]);return(0,I.jsxs)(Ro,{step:`configure`,hero:(0,I.jsx)(zo,{icon:Qe,title:`Pick a starting point`,subtitle:`Choose a preset to fill the toggles below — or skip and configure each one yourself. You can change everything later.`}),footer:(0,I.jsxs)(I.Fragment,{children:[a&&(0,I.jsxs)(Vo,{onClick:a,children:[(0,I.jsx)(C,{size:14}),` Back`]}),(0,I.jsx)(Vo,{onClick:i,children:`Skip — I'll configure manually`}),(0,I.jsxs)(Bo,{onClick:()=>r(s),disabled:o,children:[o?`Applying…`:`Apply & Continue`,!o&&(0,I.jsx)(w,{size:14})]})]}),children:[(f.length>0||p.length>0)&&(0,I.jsxs)(`div`,{role:`status`,className:`flex gap-2.5 rounded-card border border-warning bg-warning-tint p-3.5 text-[13px] text-ink`,children:[(0,I.jsx)(dt,{size:16,className:`mt-px shrink-0 text-warning`,"aria-hidden":`true`}),(0,I.jsxs)(`div`,{className:`m-0`,children:[f.length>0&&(0,I.jsxs)(`p`,{className:`m-0`,children:[`Applying will turn off `,(0,I.jsx)(`strong`,{children:f.join(`, `)}),`, which`,` `,f.length===1?`is`:`are`,` currently on. Switch`,` `,f.length===1?`it`:`them`,` back on below to keep`,` `,f.length===1?`it`:`them`,`.`]}),p.length>0&&(0,I.jsxs)(`p`,{className:f.length>0?`m-0 mt-1.5`:`m-0`,children:[`Applying will also change `,(0,I.jsx)(`strong`,{children:p.join(`, `)}),`.`]})]})]}),(0,I.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-3 gap-2.5`,children:qo.map(e=>{let t=e.icon,n=d===e.id;return(0,I.jsxs)(`button`,{type:`button`,onClick:()=>u(e),className:`text-left rounded-card p-3.5 border transition-colors ${n?`border-primary bg-primary-tint`:`border-line bg-paper hover:border-line-strong`}`,"aria-pressed":n,children:[(0,I.jsx)(t,{size:16,className:n?`text-primary`:`text-muted`}),(0,I.jsx)(`div`,{className:`text-[13px] font-medium mt-1.5 ${n?`text-primary`:`text-ink`}`,children:e.label}),(0,I.jsx)(`div`,{className:`text-[11px] text-muted mt-0.5 leading-snug`,children:e.description})]},e.id)})}),(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-card overflow-hidden`,children:[(0,I.jsx)(es,{first:!0,label:`Enable Page Cache`,hint:`Serve static HTML to non-logged-in visitors. The single biggest speed win.`,checked:s.cache_enabled,onChange:e=>l(`cache_enabled`,e)}),(0,I.jsx)(es,{label:`Minify HTML`,hint:`Strip whitespace and comments from HTML output.`,checked:s.minify_html,onChange:e=>l(`minify_html`,e)}),(0,I.jsx)(es,{label:`Minify CSS`,hint:`Compress and rewrite enqueued local stylesheets.`,checked:s.minify_css,onChange:e=>l(`minify_css`,e)}),(0,I.jsx)(es,{label:`Minify JS`,hint:`Compress enqueued local scripts. Higher conflict risk than HTML/CSS — turn off if scripts break.`,checked:s.minify_js,onChange:e=>l(`minify_js`,e)}),(0,I.jsx)(es,{label:`Defer JavaScript`,hint:`Add defer to enqueued <script> tags so they don't block first paint. Safest paired with Minify JS off; flip on after testing.`,checked:s.defer_js,onChange:e=>l(`defer_js`,e)}),(0,I.jsx)(es,{label:`Enable GZIP Compression`,hint:e.server.gzip_mode===`auto`?`Reduces transfer size. We will write the .htaccess rules.`:`Reduces transfer size. On ${e.server.type===`nginx`?`nginx`:`this server`} you'll need to paste a snippet into your server config — we'll show it after.`,checked:s.gzip_enabled,onChange:e=>l(`gzip_enabled`,e)}),(0,I.jsx)(es,{label:`Lazy-load Images`,hint:`Defer off-screen images + iframes until they scroll into view. Keeps the first image eager so your LCP isn't deferred.`,checked:s.lazy_images,onChange:e=>l(`lazy_images`,e)}),(0,I.jsx)(es,{label:`Browser cache headers`,hint:`Send Cache-Control + Expires so returning visitors fetch nothing. 1-year immutable for static assets, 1-hour for HTML.`,checked:s.browser_cache,onChange:e=>l(`browser_cache`,e)}),(0,I.jsx)(es,{label:`LCP image preload + preconnect`,hint:`Preload the largest above-the-fold image and preconnect to font hosts so the main content paints sooner. Safe on every theme — only adds resource hints, never removes anything.`,checked:s.resource_hints??!0,onChange:e=>l(`resource_hints`,e)})]}),(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-card p-4 sm:p-5`,children:[(0,I.jsx)(`label`,{htmlFor:`xspeed-onb-expiry`,className:`block text-[13px] font-medium text-ink mb-1.5`,children:`Cache Expiry`}),(0,I.jsx)(`p`,{className:`text-[12px] text-muted mb-2.5`,children:`How long cached pages live before regenerating.`}),(0,I.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:m.map(e=>(0,I.jsx)(`button`,{type:`button`,onClick:()=>l(`cache_expiry`,e.value),className:`text-[13px] px-3 py-1.5 rounded border transition-colors ${s.cache_expiry===e.value?`bg-primary border-primary text-on-primary`:`border-line text-ink-soft hover:bg-panel`}`,children:e.label},e.value))})]}),(0,I.jsx)(`div`,{className:`border border-line bg-paper rounded-card p-4 sm:p-5`,children:(0,I.jsxs)(`div`,{className:`flex items-start justify-between gap-3 sm:gap-4`,children:[(0,I.jsxs)(`div`,{className:`min-w-0 pr-2`,children:[(0,I.jsx)(`div`,{className:`text-[13px] font-medium text-ink mb-1.5`,children:`Help improve xSpeed`}),(0,I.jsx)(`p`,{className:`text-[12px] text-muted leading-snug`,children:`Share a few anonymous basics — WordPress & PHP version, active theme & plugins, server type, and which features you enable. Never personal data or page content. Change it anytime from the dashboard.`})]}),(0,I.jsx)(`div`,{className:`shrink-0`,children:(0,I.jsx)(gn,{checked:s.usage_tracking,onChange:e=>l(`usage_tracking`,e),label:`Share anonymous usage data`})})]})})]})}function es({label:e,hint:t,checked:n,onChange:r,first:i=!1}){return(0,I.jsxs)(`div`,{className:`px-4 sm:px-5 py-4 flex items-center justify-between gap-3 sm:gap-4 ${i?``:`border-t border-line`}`,children:[(0,I.jsxs)(`div`,{className:`min-w-0 pr-2`,children:[(0,I.jsx)(`div`,{className:`font-medium text-ink`,children:e}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted mt-0.5`,children:t})]}),(0,I.jsx)(`div`,{className:`shrink-0`,children:(0,I.jsx)(gn,{checked:n,onChange:r,label:e})})]})}function ts({choices:e,applyResult:t,onDashboard:n,onNext:r}){let i=R(),a=!!i.logo_svg?.trim(),o=t?.settings.cache_enabled??e.cache_enabled,s=t?.install_state,c=o&&s&&!s.wp_cache_constant&&s.manual_snippet,l=[];o&&l.push(`Page cache`),e.minify_html&&l.push(`HTML minify`),e.minify_css&&l.push(`CSS minify`),e.minify_js&&l.push(`JS minify`),e.defer_js&&l.push(`Defer JS`),e.gzip_enabled&&l.push(`GZIP`),e.lazy_images&&l.push(`Lazy images`),e.browser_cache&&l.push(`Browser cache`);let u=e.cache_expiry>=168?`${Math.round(e.cache_expiry/168)}-week`:e.cache_expiry>=24?`${Math.round(e.cache_expiry/24)}-day`:`${e.cache_expiry}-hour`;return(0,I.jsxs)(Ro,{step:`done`,hero:(0,I.jsx)(zo,{icon:O,logo:a?(0,I.jsx)(Xt,{className:`w-8 h-8 rounded`}):void 0,title:`${i.name} is ready`,subtitle:o?`Caching is active. Your site is now faster for non-logged-in visitors.`:`Your preferences are saved. Enable cache from the dashboard whenever you are ready.`}),footer:(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`span`,{}),(0,I.jsxs)(Bo,{onClick:r??n,children:[r?`Continue`:`Go to Dashboard`,(0,I.jsx)(w,{size:14})]})]}),children:[l.length>0&&(0,I.jsxs)(`div`,{className:`border border-line bg-paper rounded-card p-4 sm:p-5`,children:[(0,I.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 mb-3`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`text-[11px] uppercase tracking-wider text-muted font-medium`,children:`Optimizations active`}),(0,I.jsxs)(`div`,{className:`text-2xl font-semibold text-success tabular-nums mt-1`,children:[l.length,(0,I.jsxs)(`span`,{className:`text-faint text-[14px] font-normal`,children:[` / `,8]})]})]}),(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`text-[11px] uppercase tracking-wider text-muted font-medium`,children:`Cache lifetime`}),(0,I.jsx)(`div`,{className:`text-2xl font-semibold text-ink tabular-nums mt-1`,children:u})]})]}),(0,I.jsx)(`div`,{className:`text-[11px] uppercase tracking-wider text-muted font-medium mb-2`,children:`Enabled`}),(0,I.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:l.map(e=>(0,I.jsx)(`span`,{className:`text-[12px] px-2 py-0.5 rounded bg-success-tint text-success border border-line`,children:e},e))})]}),(0,I.jsx)(Ea,{compact:!0}),c&&(0,I.jsxs)(`div`,{className:`border border-line bg-warning-tint rounded-card p-4 sm:p-5`,children:[(0,I.jsx)(`div`,{className:`text-[13px] font-medium text-warning mb-1.5`,children:`One manual step`}),(0,I.jsxs)(`p`,{className:`text-[12px] text-warning mb-2`,children:[`Your `,(0,I.jsx)(`code`,{children:`wp-config.php`}),` isn't writable, so we couldn't set `,(0,I.jsx)(`code`,{children:`WP_CACHE`}),`. Add this line above the "That's all, stop editing!" comment:`]}),(0,I.jsx)(En,{content:s.manual_snippet,tone:`amber`})]}),o&&s?.nginx_server_block&&(0,I.jsxs)(`div`,{className:`space-y-3`,children:[(0,I.jsxs)(`div`,{className:`border border-line bg-info-tint rounded-card p-4 sm:p-5`,children:[(0,I.jsx)(`div`,{className:`text-[13px] font-medium text-info mb-1.5`,children:`nginx detected — one-time server config`}),(0,I.jsxs)(`p`,{className:`text-[12px] text-info`,children:[i.name,` can't write nginx config (it lives outside WordPress). Paste the snippet below into your site's `,(0,I.jsx)(`code`,{children:`server { }`}),` block, then reload nginx — cache hits will be served without booting PHP at all (~5-15ms TTFB). Without this you still get the PHP drop-in path (~85ms).`]})]}),(0,I.jsx)(la,{snippet:s.nginx_server_block})]}),(0,I.jsxs)(`div`,{className:`grid grid-cols-1 gap-3 ${i.hide_help_links?`sm:grid-cols-1`:`sm:grid-cols-2`}`,children:[(0,I.jsx)(ns,{icon:tt,title:`Fine-tune performance`,body:`HTML/CSS/JS minify, lazy-load, browser cache.`,onClick:()=>n(`minify`)}),!i.hide_help_links&&(0,I.jsx)(ns,{icon:E,title:`Read the docs`,body:`Per-module guides, troubleshooting, conflict matrix.`,href:`https://xspeedcache.com/docs`})]})]})}function ns({icon:e,title:t,body:n,onClick:r,href:i}){let a=`text-left border border-line bg-paper rounded-card p-4 sm:p-5 hover:border-primary transition-colors block`,o=(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(e,{size:16,className:`text-primary mb-2`}),(0,I.jsx)(`div`,{className:`text-[13px] font-medium text-ink`,children:t}),(0,I.jsx)(`div`,{className:`text-[12px] text-muted mt-1`,children:n})]});return i?(0,I.jsx)(`a`,{href:i,target:`_blank`,rel:`noopener noreferrer`,className:a,children:o}):(0,I.jsx)(`button`,{type:`button`,onClick:r,className:a,children:o})}function rs(e,t){let n=e.conflicts.length>0,r={cache_enabled:!n,minify_html:!0,minify_css:!0,minify_js:!1,defer_js:!1,gzip_enabled:!0,lazy_images:!0,browser_cache:!0,resource_hints:!0,cache_expiry:24,usage_tracking:!0};if(!t)return r;let i={...r};return Object.keys(r).forEach(e=>{if(e===`usage_tracking`)return;let n=t[e];n!=null&&(i[e]=n)}),n&&(i.cache_enabled=!1),i}function is(){let e=window.XSpeedConfig,t=e.bootstrap?.env,n=e.bootstrap?.settings,r=e.bootstrap?.current??null,i=e.bootstrap?.hub??null,[a,o]=(0,y.useState)(()=>typeof window>`u`?`review`:new URL(window.location.href).searchParams.get(`xspeed_step`)===`connect`?`connect`:`review`),[s,c]=(0,y.useState)(()=>rs(t,r)),[l,u]=(0,y.useState)(null),[d,f]=(0,y.useState)(!1),[p,m]=(0,y.useState)(null),h=e.dashboardUrl||``,g=async e=>{try{await B.onboardingComplete()}catch{}h&&(window.location.href=e?`${h}#${e}`:h)};return!t||!n?(0,I.jsxs)(`div`,{className:`max-w-md mx-auto my-10 rounded-card border border-line bg-paper p-8 text-center`,children:[(0,I.jsx)(`div`,{className:`mx-auto mb-3 flex h-11 w-11 items-center justify-center rounded-full bg-panel text-muted`,children:(0,I.jsx)(Ve,{size:22})}),(0,I.jsx)(`h1`,{className:`font-display text-[18px] font-semibold text-ink`,children:L(`Onboarding data unavailable`)}),(0,I.jsx)(`p`,{className:`mt-1.5 text-[13px] text-muted`,children:L(`We couldn't load the setup wizard. Your site is unaffected — you can configure everything from the dashboard.`)}),(0,I.jsxs)(`a`,{href:h,className:`mt-5 inline-flex items-center gap-1.5 rounded-control bg-primary px-4 py-2 text-[13px] font-medium text-on-primary hover:bg-primary-hover transition-colors`,children:[L(`Go to the dashboard`),(0,I.jsx)(w,{size:14})]})]}):(0,I.jsxs)(I.Fragment,{children:[a===`review`&&(0,I.jsx)(Go,{env:t,onNext:()=>o(`configure`)}),a===`configure`&&(0,I.jsx)($o,{env:t,initial:s,current:r,onApply:async e=>{f(!0),m(null),c(e);try{u(await B.onboardingApply(e)),await B.onboardingComplete(),o(`done`)}catch(e){m(e instanceof Error?e.message:`Failed to apply settings`)}finally{f(!1)}},onSkip:async()=>{try{await B.onboardingComplete()}catch{}h&&(window.location.href=h)},onBack:()=>o(`review`),busy:d}),a===`done`&&(0,I.jsx)(ts,{choices:s,applyResult:l,onDashboard:g,onNext:i?.attached?void 0:()=>o(`connect`)}),a===`connect`&&(0,I.jsx)(Uo,{initialHub:i,onNext:g,onSkip:g}),p&&(0,I.jsx)(`div`,{className:`fixed bottom-6 left-1/2 -translate-x-1/2 bg-danger-tint border border-line text-danger text-[12px] px-4 py-2 rounded-full shadow-md z-50`,children:p})]})}window.React=y.default,window.ReactDOM=F,Bt();var as=document.getElementById(`xspeed-app`);if(as){let e=window.XSpeedConfig?.mode===`onboarding`||as.classList.contains(`xspeed-onboarding-host`);(0,xt.createRoot)(as).render((0,I.jsx)(y.StrictMode,{children:e?(0,I.jsx)(is,{}):(0,I.jsx)(Po,{})}))}})(); |