From f46b5b452f610d1822d5c9faf2ff005320d48dd7 Mon Sep 17 00:00:00 2001 From: Alex Newman Date: Thu, 6 Nov 2025 13:10:35 -0500 Subject: [PATCH] feat: implement theme toggle functionality with light, dark, and system preferences - Added theme variables for light and dark modes in viewer-template.html. - Created a custom hook `useTheme` to manage theme preferences and resolve the current theme based on user selection or system settings. - Introduced `ThemeToggle` component to allow users to switch between themes. - Updated `Header` component to include the `ThemeToggle` and pass theme preference and change handler. - Modified `App` component to integrate theme management and pass relevant props to child components. --- plugin/ui/viewer-bundle.js | 12 +- plugin/ui/viewer.html | 383 ++++++++++++++++++----- src/ui/viewer-template.html | 383 ++++++++++++++++++----- src/ui/viewer/App.tsx | 4 + src/ui/viewer/components/Header.tsx | 12 +- src/ui/viewer/components/ThemeToggle.tsx | 73 +++++ src/ui/viewer/hooks/useTheme.ts | 76 +++++ 7 files changed, 796 insertions(+), 147 deletions(-) create mode 100644 src/ui/viewer/components/ThemeToggle.tsx create mode 100644 src/ui/viewer/hooks/useTheme.ts diff --git a/plugin/ui/viewer-bundle.js b/plugin/ui/viewer-bundle.js index e94ac12e..5fc28295 100644 --- a/plugin/ui/viewer-bundle.js +++ b/plugin/ui/viewer-bundle.js @@ -1,13 +1,13 @@ -"use strict";(()=>{var kf=Object.create;var wu=Object.defineProperty;var _f=Object.getOwnPropertyDescriptor;var Cf=Object.getOwnPropertyNames;var Nf=Object.getPrototypeOf,xf=Object.prototype.hasOwnProperty;var Ze=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Pf=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of Cf(t))!xf.call(e,l)&&l!==n&&wu(e,l,{get:()=>t[l],enumerable:!(r=_f(t,l))||r.enumerable});return e};var L=(e,t,n)=>(n=e!=null?kf(Nf(e)):{},Pf(t||!e||!e.__esModule?wu(n,"default",{value:e,enumerable:!0}):n,e));var Ru=Ze(P=>{"use strict";var Mn=Symbol.for("react.element"),Tf=Symbol.for("react.portal"),Of=Symbol.for("react.fragment"),Lf=Symbol.for("react.strict_mode"),Mf=Symbol.for("react.profiler"),Rf=Symbol.for("react.provider"),zf=Symbol.for("react.context"),Df=Symbol.for("react.forward_ref"),If=Symbol.for("react.suspense"),Af=Symbol.for("react.memo"),Uf=Symbol.for("react.lazy"),Eu=Symbol.iterator;function Ff(e){return e===null||typeof e!="object"?null:(e=Eu&&e[Eu]||e["@@iterator"],typeof e=="function"?e:null)}var Cu={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Nu=Object.assign,xu={};function Yt(e,t,n){this.props=e,this.context=t,this.refs=xu,this.updater=n||Cu}Yt.prototype.isReactComponent={};Yt.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Yt.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Pu(){}Pu.prototype=Yt.prototype;function ql(e,t,n){this.props=e,this.context=t,this.refs=xu,this.updater=n||Cu}var bl=ql.prototype=new Pu;bl.constructor=ql;Nu(bl,Yt.prototype);bl.isPureReactComponent=!0;var ku=Array.isArray,Tu=Object.prototype.hasOwnProperty,eo={current:null},Ou={key:!0,ref:!0,__self:!0,__source:!0};function Lu(e,t,n){var r,l={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)Tu.call(t,r)&&!Ou.hasOwnProperty(r)&&(l[r]=t[r]);var u=arguments.length-2;if(u===1)l.children=n;else if(1{"use strict";zu.exports=Ru()});var Wu=Ze(z=>{"use strict";function oo(e,t){var n=e.length;e.push(t);e:for(;0>>1,l=e[r];if(0>>1;rTr(u,n))sTr(c,u)?(e[r]=c,e[s]=n,r=s):(e[r]=u,e[i]=n,r=i);else if(sTr(c,n))e[r]=c,e[s]=n,r=s;else break e}}return t}function Tr(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}typeof performance=="object"&&typeof performance.now=="function"?(Du=performance,z.unstable_now=function(){return Du.now()}):(no=Date,Iu=no.now(),z.unstable_now=function(){return no.now()-Iu});var Du,no,Iu,$e=[],st=[],Wf=1,Ce=null,ee=3,Mr=!1,Rt=!1,zn=!1,Fu=typeof setTimeout=="function"?setTimeout:null,ju=typeof clearTimeout=="function"?clearTimeout:null,Au=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function io(e){for(var t=De(st);t!==null;){if(t.callback===null)Lr(st);else if(t.startTime<=e)Lr(st),t.sortIndex=t.expirationTime,oo($e,t);else break;t=De(st)}}function uo(e){if(zn=!1,io(e),!Rt)if(De($e)!==null)Rt=!0,ao(so);else{var t=De(st);t!==null&&co(uo,t.startTime-e)}}function so(e,t){Rt=!1,zn&&(zn=!1,ju(Dn),Dn=-1),Mr=!0;var n=ee;try{for(io(t),Ce=De($e);Ce!==null&&(!(Ce.expirationTime>t)||e&&!Hu());){var r=Ce.callback;if(typeof r=="function"){Ce.callback=null,ee=Ce.priorityLevel;var l=r(Ce.expirationTime<=t);t=z.unstable_now(),typeof l=="function"?Ce.callback=l:Ce===De($e)&&Lr($e),io(t)}else Lr($e);Ce=De($e)}if(Ce!==null)var o=!0;else{var i=De(st);i!==null&&co(uo,i.startTime-t),o=!1}return o}finally{Ce=null,ee=n,Mr=!1}}var Rr=!1,Or=null,Dn=-1,Vu=5,Bu=-1;function Hu(){return!(z.unstable_now()-Bue||125r?(e.sortIndex=n,oo(st,e),De($e)===null&&e===De(st)&&(zn?(ju(Dn),Dn=-1):zn=!0,co(uo,n-r))):(e.sortIndex=l,oo($e,e),Rt||Mr||(Rt=!0,ao(so))),e};z.unstable_shouldYield=Hu;z.unstable_wrapCallback=function(e){var t=ee;return function(){var n=ee;ee=t;try{return e.apply(this,arguments)}finally{ee=n}}}});var Qu=Ze((nm,$u)=>{"use strict";$u.exports=Wu()});var Yc=Ze(Ee=>{"use strict";var $f=ze(),Se=Qu();function g(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Do=Object.prototype.hasOwnProperty,Qf=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Ku={},Gu={};function Kf(e){return Do.call(Gu,e)?!0:Do.call(Ku,e)?!1:Qf.test(e)?Gu[e]=!0:(Ku[e]=!0,!1)}function Gf(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Xf(e,t,n,r){if(t===null||typeof t>"u"||Gf(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function ce(e,t,n,r,l,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var b={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){b[e]=new ce(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];b[t]=new ce(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){b[e]=new ce(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){b[e]=new ce(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){b[e]=new ce(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){b[e]=new ce(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){b[e]=new ce(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){b[e]=new ce(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){b[e]=new ce(e,5,!1,e.toLowerCase(),null,!1,!1)});var xi=/[\-:]([a-z])/g;function Pi(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(xi,Pi);b[t]=new ce(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(xi,Pi);b[t]=new ce(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(xi,Pi);b[t]=new ce(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){b[e]=new ce(e,1,!1,e.toLowerCase(),null,!1,!1)});b.xlinkHref=new ce("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){b[e]=new ce(e,1,!1,e.toLowerCase(),null,!0,!0)});function Ti(e,t,n,r){var l=b.hasOwnProperty(t)?b[t]:null;(l!==null?l.type!==0:r||!(2{var Rf=Object.create;var xu=Object.defineProperty;var zf=Object.getOwnPropertyDescriptor;var Df=Object.getOwnPropertyNames;var If=Object.getPrototypeOf,Af=Object.prototype.hasOwnProperty;var Je=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Uf=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of Df(t))!Af.call(e,l)&&l!==n&&xu(e,l,{get:()=>t[l],enumerable:!(r=zf(t,l))||r.enumerable});return e};var O=(e,t,n)=>(n=e!=null?Rf(If(e)):{},Uf(t||!e||!e.__esModule?xu(n,"default",{value:e,enumerable:!0}):n,e));var Uu=Je(T=>{"use strict";var Dn=Symbol.for("react.element"),Ff=Symbol.for("react.portal"),jf=Symbol.for("react.fragment"),Vf=Symbol.for("react.strict_mode"),Bf=Symbol.for("react.profiler"),Hf=Symbol.for("react.provider"),Wf=Symbol.for("react.context"),$f=Symbol.for("react.forward_ref"),Qf=Symbol.for("react.suspense"),Kf=Symbol.for("react.memo"),Gf=Symbol.for("react.lazy"),Nu=Symbol.iterator;function Yf(e){return e===null||typeof e!="object"?null:(e=Nu&&e[Nu]||e["@@iterator"],typeof e=="function"?e:null)}var Lu={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ou=Object.assign,Mu={};function Jt(e,t,n){this.props=e,this.context=t,this.refs=Mu,this.updater=n||Lu}Jt.prototype.isReactComponent={};Jt.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Jt.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Ru(){}Ru.prototype=Jt.prototype;function no(e,t,n){this.props=e,this.context=t,this.refs=Mu,this.updater=n||Lu}var ro=no.prototype=new Ru;ro.constructor=no;Ou(ro,Jt.prototype);ro.isPureReactComponent=!0;var Tu=Array.isArray,zu=Object.prototype.hasOwnProperty,lo={current:null},Du={key:!0,ref:!0,__self:!0,__source:!0};function Iu(e,t,n){var r,l={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)zu.call(t,r)&&!Du.hasOwnProperty(r)&&(l[r]=t[r]);var u=arguments.length-2;if(u===1)l.children=n;else if(1{"use strict";Fu.exports=Uu()});var Yu=Je(z=>{"use strict";function ao(e,t){var n=e.length;e.push(t);e:for(;0>>1,l=e[r];if(0>>1;rMr(u,n))sMr(c,u)?(e[r]=c,e[s]=n,r=s):(e[r]=u,e[i]=n,r=i);else if(sMr(c,n))e[r]=c,e[s]=n,r=s;else break e}}return t}function Mr(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}typeof performance=="object"&&typeof performance.now=="function"?(ju=performance,z.unstable_now=function(){return ju.now()}):(io=Date,Vu=io.now(),z.unstable_now=function(){return io.now()-Vu});var ju,io,Vu,Qe=[],at=[],bf=1,xe=null,te=3,Dr=!1,zt=!1,An=!1,Wu=typeof setTimeout=="function"?setTimeout:null,$u=typeof clearTimeout=="function"?clearTimeout:null,Bu=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function co(e){for(var t=De(at);t!==null;){if(t.callback===null)zr(at);else if(t.startTime<=e)zr(at),t.sortIndex=t.expirationTime,ao(Qe,t);else break;t=De(at)}}function fo(e){if(An=!1,co(e),!zt)if(De(Qe)!==null)zt=!0,mo(po);else{var t=De(at);t!==null&&vo(fo,t.startTime-e)}}function po(e,t){zt=!1,An&&(An=!1,$u(Un),Un=-1),Dr=!0;var n=te;try{for(co(t),xe=De(Qe);xe!==null&&(!(xe.expirationTime>t)||e&&!Gu());){var r=xe.callback;if(typeof r=="function"){xe.callback=null,te=xe.priorityLevel;var l=r(xe.expirationTime<=t);t=z.unstable_now(),typeof l=="function"?xe.callback=l:xe===De(Qe)&&zr(Qe),co(t)}else zr(Qe);xe=De(Qe)}if(xe!==null)var o=!0;else{var i=De(at);i!==null&&vo(fo,i.startTime-t),o=!1}return o}finally{xe=null,te=n,Dr=!1}}var Ir=!1,Rr=null,Un=-1,Qu=5,Ku=-1;function Gu(){return!(z.unstable_now()-Kue||125r?(e.sortIndex=n,ao(at,e),De(Qe)===null&&e===De(at)&&(An?($u(Un),Un=-1):An=!0,vo(fo,n-r))):(e.sortIndex=l,ao(Qe,e),zt||Dr||(zt=!0,mo(po))),e};z.unstable_shouldYield=Gu;z.unstable_wrapCallback=function(e){var t=te;return function(){var n=te;te=t;try{return e.apply(this,arguments)}finally{te=n}}}});var Zu=Je((pm,Xu)=>{"use strict";Xu.exports=Yu()});var ef=Je(Ee=>{"use strict";var ed=Ce(),Se=Zu();function g(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Fo=Object.prototype.hasOwnProperty,td=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Ju={},qu={};function nd(e){return Fo.call(qu,e)?!0:Fo.call(Ju,e)?!1:td.test(e)?qu[e]=!0:(Ju[e]=!0,!1)}function rd(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function ld(e,t,n,r){if(t===null||typeof t>"u"||rd(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function ce(e,t,n,r,l,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var ee={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){ee[e]=new ce(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];ee[t]=new ce(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){ee[e]=new ce(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){ee[e]=new ce(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){ee[e]=new ce(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){ee[e]=new ce(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){ee[e]=new ce(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){ee[e]=new ce(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){ee[e]=new ce(e,5,!1,e.toLowerCase(),null,!1,!1)});var Oi=/[\-:]([a-z])/g;function Mi(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Oi,Mi);ee[t]=new ce(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Oi,Mi);ee[t]=new ce(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Oi,Mi);ee[t]=new ce(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){ee[e]=new ce(e,1,!1,e.toLowerCase(),null,!1,!1)});ee.xlinkHref=new ce("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){ee[e]=new ce(e,1,!1,e.toLowerCase(),null,!0,!0)});function Ri(e,t,n,r){var l=ee.hasOwnProperty(t)?ee[t]:null;(l!==null?l.type!==0:r||!(2u||l[i]!==o[u]){var s=` -`+l[i].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=i&&0<=u);break}}}finally{po=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Wn(e):""}function Yf(e){switch(e.tag){case 5:return Wn(e.type);case 16:return Wn("Lazy");case 13:return Wn("Suspense");case 19:return Wn("SuspenseList");case 0:case 2:case 15:return e=mo(e.type,!1),e;case 11:return e=mo(e.type.render,!1),e;case 1:return e=mo(e.type,!0),e;default:return""}}function Fo(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case bt:return"Fragment";case qt:return"Portal";case Io:return"Profiler";case Oi:return"StrictMode";case Ao:return"Suspense";case Uo:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case ea:return(e.displayName||"Context")+".Consumer";case bs:return(e._context.displayName||"Context")+".Provider";case Li:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Mi:return t=e.displayName||null,t!==null?t:Fo(e.type)||"Memo";case ct:t=e._payload,e=e._init;try{return Fo(e(t))}catch{}}return null}function Zf(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Fo(t);case 8:return t===Oi?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Ct(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function na(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Jf(e){var t=na(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Dr(e){e._valueTracker||(e._valueTracker=Jf(e))}function ra(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=na(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function sl(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function jo(e,t){var n=t.checked;return V({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Yu(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Ct(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function la(e,t){t=t.checked,t!=null&&Ti(e,"checked",t,!1)}function Vo(e,t){la(e,t);var n=Ct(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Bo(e,t.type,n):t.hasOwnProperty("defaultValue")&&Bo(e,t.type,Ct(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Zu(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Bo(e,t,n){(t!=="number"||sl(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var $n=Array.isArray;function fn(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=Ir.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function rr(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Gn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qf=["Webkit","ms","Moz","O"];Object.keys(Gn).forEach(function(e){qf.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Gn[t]=Gn[e]})});function sa(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Gn.hasOwnProperty(e)&&Gn[e]?(""+t).trim():t+"px"}function aa(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=sa(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var bf=V({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function $o(e,t){if(t){if(bf[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(g(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(g(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(g(61))}if(t.style!=null&&typeof t.style!="object")throw Error(g(62))}}function Qo(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Ko=null;function Ri(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Go=null,dn=null,pn=null;function bu(e){if(e=Er(e)){if(typeof Go!="function")throw Error(g(280));var t=e.stateNode;t&&(t=Al(t),Go(e.stateNode,e.type,t))}}function ca(e){dn?pn?pn.push(e):pn=[e]:dn=e}function fa(){if(dn){var e=dn,t=pn;if(pn=dn=null,bu(e),t)for(e=0;e>>=0,e===0?32:31-(cd(e)/fd|0)|0}var Ar=64,Ur=4194304;function Qn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function dl(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var u=i&~l;u!==0?r=Qn(u):(o&=i,o!==0&&(r=Qn(o)))}else i=n&~l,i!==0?r=Qn(i):o!==0&&(r=Qn(o));if(r===0)return 0;if(t!==0&&t!==r&&(t&l)===0&&(l=r&-r,o=t&-t,l>=o||l===16&&(o&4194240)!==0))return t;if((r&4)!==0&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function Sr(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-je(t),e[t]=n}function vd(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Yn),ss=" ",as=!1;function Ma(e,t){switch(e){case"keyup":return Wd.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ra(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var en=!1;function Qd(e,t){switch(e){case"compositionend":return Ra(t);case"keypress":return t.which!==32?null:(as=!0,ss);case"textInput":return e=t.data,e===ss&&as?null:e;default:return null}}function Kd(e,t){if(en)return e==="compositionend"||!Vi&&Ma(e,t)?(e=Oa(),br=Ui=mt=null,en=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ds(n)}}function Aa(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Aa(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Ua(){for(var e=window,t=sl();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=sl(e.document)}return t}function Bi(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function tp(e){var t=Ua(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Aa(n.ownerDocument.documentElement,n)){if(r!==null&&Bi(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=ps(n,o);var i=ps(n,r);l&&i&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,tn=null,bo=null,Jn=null,ei=!1;function ms(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;ei||tn==null||tn!==sl(r)||(r=tn,"selectionStart"in r&&Bi(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Jn&&ar(Jn,r)||(Jn=r,r=vl(bo,"onSelect"),0ln||(e.current=ii[ln],ii[ln]=null,ln--)}function D(e,t){ln++,ii[ln]=e.current,e.current=t}var Nt={},le=Pt(Nt),pe=Pt(!1),Vt=Nt;function yn(e,t){var n=e.type.contextTypes;if(!n)return Nt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function me(e){return e=e.childContextTypes,e!=null}function gl(){A(pe),A(le)}function _s(e,t,n){if(le.current!==Nt)throw Error(g(168));D(le,t),D(pe,n)}function Ka(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(g(108,Zf(e)||"Unknown",l));return V({},n,r)}function yl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Nt,Vt=le.current,D(le,e),D(pe,pe.current),!0}function Cs(e,t,n){var r=e.stateNode;if(!r)throw Error(g(169));n?(e=Ka(e,t,Vt),r.__reactInternalMemoizedMergedChildContext=e,A(pe),A(le),D(le,e)):A(pe),D(pe,n)}var qe=null,Ul=!1,No=!1;function Ga(e){qe===null?qe=[e]:qe.push(e)}function fp(e){Ul=!0,Ga(e)}function Tt(){if(!No&&qe!==null){No=!0;var e=0,t=M;try{var n=qe;for(M=1;e>=i,l-=i,be=1<<32-je(t)+l|n<x?(H=N,N=null):H=N.sibling;var T=v(f,N,d[x],h);if(T===null){N===null&&(N=H);break}e&&N&&T.alternate===null&&t(f,N),a=o(T,a,x),C===null?E=T:C.sibling=T,C=T,N=H}if(x===d.length)return n(f,N),U&&zt(f,x),E;if(N===null){for(;xx?(H=N,N=null):H=N.sibling;var ie=v(f,N,T.value,h);if(ie===null){N===null&&(N=H);break}e&&N&&ie.alternate===null&&t(f,N),a=o(ie,a,x),C===null?E=ie:C.sibling=ie,C=ie,N=H}if(T.done)return n(f,N),U&&zt(f,x),E;if(N===null){for(;!T.done;x++,T=d.next())T=m(f,T.value,h),T!==null&&(a=o(T,a,x),C===null?E=T:C.sibling=T,C=T);return U&&zt(f,x),E}for(N=r(f,N);!T.done;x++,T=d.next())T=S(N,f,x,T.value,h),T!==null&&(e&&T.alternate!==null&&N.delete(T.key===null?x:T.key),a=o(T,a,x),C===null?E=T:C.sibling=T,C=T);return e&&N.forEach(function(Cr){return t(f,Cr)}),U&&zt(f,x),E}function R(f,a,d,h){if(typeof d=="object"&&d!==null&&d.type===bt&&d.key===null&&(d=d.props.children),typeof d=="object"&&d!==null){switch(d.$$typeof){case zr:e:{for(var E=d.key,C=a;C!==null;){if(C.key===E){if(E=d.type,E===bt){if(C.tag===7){n(f,C.sibling),a=l(C,d.props.children),a.return=f,f=a;break e}}else if(C.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===ct&&Ps(E)===C.type){n(f,C.sibling),a=l(C,d.props),a.ref=jn(f,C,d),a.return=f,f=a;break e}n(f,C);break}else t(f,C);C=C.sibling}d.type===bt?(a=jt(d.props.children,f.mode,h,d.key),a.return=f,f=a):(h=ul(d.type,d.key,d.props,null,f.mode,h),h.ref=jn(f,a,d),h.return=f,f=h)}return i(f);case qt:e:{for(C=d.key;a!==null;){if(a.key===C)if(a.tag===4&&a.stateNode.containerInfo===d.containerInfo&&a.stateNode.implementation===d.implementation){n(f,a.sibling),a=l(a,d.children||[]),a.return=f,f=a;break e}else{n(f,a);break}else t(f,a);a=a.sibling}a=zo(d,f.mode,h),a.return=f,f=a}return i(f);case ct:return C=d._init,R(f,a,C(d._payload),h)}if($n(d))return y(f,a,d,h);if(In(d))return w(f,a,d,h);Xr(f,d)}return typeof d=="string"&&d!==""||typeof d=="number"?(d=""+d,a!==null&&a.tag===6?(n(f,a.sibling),a=l(a,d),a.return=f,f=a):(n(f,a),a=Ro(d,f.mode,h),a.return=f,f=a),i(f)):n(f,a)}return R}var wn=Ja(!0),qa=Ja(!1),El=Pt(null),kl=null,sn=null,Qi=null;function Ki(){Qi=sn=kl=null}function Gi(e){var t=El.current;A(El),e._currentValue=t}function ai(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function vn(e,t){kl=e,Qi=sn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(de=!0),e.firstContext=null)}function Oe(e){var t=e._currentValue;if(Qi!==e)if(e={context:e,memoizedValue:t,next:null},sn===null){if(kl===null)throw Error(g(308));sn=e,kl.dependencies={lanes:0,firstContext:e}}else sn=sn.next=e;return t}var At=null;function Xi(e){At===null?At=[e]:At.push(e)}function ba(e,t,n,r){var l=t.interleaved;return l===null?(n.next=n,Xi(t)):(n.next=l.next,l.next=n),t.interleaved=n,lt(e,r)}function lt(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var ft=!1;function Yi(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function ec(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function tt(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function wt(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,(O&2)!==0){var l=r.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),r.pending=t,lt(e,n)}return l=r.interleaved,l===null?(t.next=t,Xi(r)):(t.next=l.next,l.next=t),r.interleaved=t,lt(e,n)}function tl(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Di(e,n)}}function Ts(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var l=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?l=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?l=o=t:o=o.next=t}else l=o=t;n={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function _l(e,t,n,r){var l=e.updateQueue;ft=!1;var o=l.firstBaseUpdate,i=l.lastBaseUpdate,u=l.shared.pending;if(u!==null){l.shared.pending=null;var s=u,c=s.next;s.next=null,i===null?o=c:i.next=c,i=s;var p=e.alternate;p!==null&&(p=p.updateQueue,u=p.lastBaseUpdate,u!==i&&(u===null?p.firstBaseUpdate=c:u.next=c,p.lastBaseUpdate=s))}if(o!==null){var m=l.baseState;i=0,p=c=s=null,u=o;do{var v=u.lane,S=u.eventTime;if((r&v)===v){p!==null&&(p=p.next={eventTime:S,lane:0,tag:u.tag,payload:u.payload,callback:u.callback,next:null});e:{var y=e,w=u;switch(v=t,S=n,w.tag){case 1:if(y=w.payload,typeof y=="function"){m=y.call(S,m,v);break e}m=y;break e;case 3:y.flags=y.flags&-65537|128;case 0:if(y=w.payload,v=typeof y=="function"?y.call(S,m,v):y,v==null)break e;m=V({},m,v);break e;case 2:ft=!0}}u.callback!==null&&u.lane!==0&&(e.flags|=64,v=l.effects,v===null?l.effects=[u]:v.push(u))}else S={eventTime:S,lane:v,tag:u.tag,payload:u.payload,callback:u.callback,next:null},p===null?(c=p=S,s=m):p=p.next=S,i|=v;if(u=u.next,u===null){if(u=l.shared.pending,u===null)break;v=u,u=v.next,v.next=null,l.lastBaseUpdate=v,l.shared.pending=null}}while(!0);if(p===null&&(s=m),l.baseState=s,l.firstBaseUpdate=c,l.lastBaseUpdate=p,t=l.shared.interleaved,t!==null){l=t;do i|=l.lane,l=l.next;while(l!==t)}else o===null&&(l.shared.lanes=0);Wt|=i,e.lanes=i,e.memoizedState=m}}function Os(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=Po.transition;Po.transition={};try{e(!1),t()}finally{M=n,Po.transition=r}}function gc(){return Le().memoizedState}function vp(e,t,n){var r=kt(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},yc(e))Sc(t,n);else if(n=ba(e,t,n,r),n!==null){var l=ae();Ve(n,e,r,l),wc(n,t,r)}}function hp(e,t,n){var r=kt(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(yc(e))Sc(t,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,u=o(i,n);if(l.hasEagerState=!0,l.eagerState=u,Be(u,i)){var s=t.interleaved;s===null?(l.next=l,Xi(t)):(l.next=s.next,s.next=l),t.interleaved=l;return}}catch{}finally{}n=ba(e,t,l,r),n!==null&&(l=ae(),Ve(n,e,r,l),wc(n,t,r))}}function yc(e){var t=e.alternate;return e===j||t!==null&&t===j}function Sc(e,t){qn=Nl=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function wc(e,t,n){if((n&4194240)!==0){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Di(e,n)}}var xl={readContext:Oe,useCallback:te,useContext:te,useEffect:te,useImperativeHandle:te,useInsertionEffect:te,useLayoutEffect:te,useMemo:te,useReducer:te,useRef:te,useState:te,useDebugValue:te,useDeferredValue:te,useTransition:te,useMutableSource:te,useSyncExternalStore:te,useId:te,unstable_isNewReconciler:!1},gp={readContext:Oe,useCallback:function(e,t){return Ke().memoizedState=[e,t===void 0?null:t],e},useContext:Oe,useEffect:Ms,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,rl(4194308,4,dc.bind(null,t,e),n)},useLayoutEffect:function(e,t){return rl(4194308,4,e,t)},useInsertionEffect:function(e,t){return rl(4,2,e,t)},useMemo:function(e,t){var n=Ke();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ke();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=vp.bind(null,j,e),[r.memoizedState,e]},useRef:function(e){var t=Ke();return e={current:e},t.memoizedState=e},useState:Ls,useDebugValue:ru,useDeferredValue:function(e){return Ke().memoizedState=e},useTransition:function(){var e=Ls(!1),t=e[0];return e=mp.bind(null,e[1]),Ke().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=j,l=Ke();if(U){if(n===void 0)throw Error(g(407));n=n()}else{if(n=t(),Z===null)throw Error(g(349));(Ht&30)!==0||lc(r,t,n)}l.memoizedState=n;var o={value:n,getSnapshot:t};return l.queue=o,Ms(ic.bind(null,r,o,e),[e]),r.flags|=2048,gr(9,oc.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Ke(),t=Z.identifierPrefix;if(U){var n=et,r=be;n=(r&~(1<<32-je(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=vr++,0")&&(s=s.replace("",e.displayName)),s}while(1<=i&&0<=u);break}}}finally{go=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Kn(e):""}function od(e){switch(e.tag){case 5:return Kn(e.type);case 16:return Kn("Lazy");case 13:return Kn("Suspense");case 19:return Kn("SuspenseList");case 0:case 2:case 15:return e=yo(e.type,!1),e;case 11:return e=yo(e.type.render,!1),e;case 1:return e=yo(e.type,!0),e;default:return""}}function Ho(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case tn:return"Fragment";case en:return"Portal";case jo:return"Profiler";case zi:return"StrictMode";case Vo:return"Suspense";case Bo:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case oa:return(e.displayName||"Context")+".Consumer";case la:return(e._context.displayName||"Context")+".Provider";case Di:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Ii:return t=e.displayName||null,t!==null?t:Ho(e.type)||"Memo";case ft:t=e._payload,e=e._init;try{return Ho(e(t))}catch{}}return null}function id(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Ho(t);case 8:return t===zi?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function xt(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function ua(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function ud(e){var t=ua(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Ur(e){e._valueTracker||(e._valueTracker=ud(e))}function sa(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=ua(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function fl(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Wo(e,t){var n=t.checked;return V({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function es(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=xt(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function aa(e,t){t=t.checked,t!=null&&Ri(e,"checked",t,!1)}function $o(e,t){aa(e,t);var n=xt(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Qo(e,t.type,n):t.hasOwnProperty("defaultValue")&&Qo(e,t.type,xt(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function ts(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Qo(e,t,n){(t!=="number"||fl(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Gn=Array.isArray;function pn(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=Fr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function ir(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Zn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},sd=["Webkit","ms","Moz","O"];Object.keys(Zn).forEach(function(e){sd.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Zn[t]=Zn[e]})});function pa(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Zn.hasOwnProperty(e)&&Zn[e]?(""+t).trim():t+"px"}function ma(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=pa(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var ad=V({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Yo(e,t){if(t){if(ad[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(g(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(g(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(g(61))}if(t.style!=null&&typeof t.style!="object")throw Error(g(62))}}function Xo(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Zo=null;function Ai(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Jo=null,mn=null,vn=null;function ls(e){if(e=Cr(e)){if(typeof Jo!="function")throw Error(g(280));var t=e.stateNode;t&&(t=jl(t),Jo(e.stateNode,e.type,t))}}function va(e){mn?vn?vn.push(e):vn=[e]:mn=e}function ha(){if(mn){var e=mn,t=vn;if(vn=mn=null,ls(e),t)for(e=0;e>>=0,e===0?32:31-(wd(e)/Ed|0)|0}var jr=64,Vr=4194304;function Yn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function vl(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var u=i&~l;u!==0?r=Yn(u):(o&=i,o!==0&&(r=Yn(o)))}else i=n&~l,i!==0?r=Yn(i):o!==0&&(r=Yn(o));if(r===0)return 0;if(t!==0&&t!==r&&(t&l)===0&&(l=r&-r,o=t&-t,l>=o||l===16&&(o&4194240)!==0))return t;if((r&4)!==0&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function kr(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-je(t),e[t]=n}function xd(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=qn),ps=" ",ms=!1;function Aa(e,t){switch(e){case"keyup":return bd.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ua(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var nn=!1;function tp(e,t){switch(e){case"compositionend":return Ua(t);case"keypress":return t.which!==32?null:(ms=!0,ps);case"textInput":return e=t.data,e===ps&&ms?null:e;default:return null}}function np(e,t){if(nn)return e==="compositionend"||!$i&&Aa(e,t)?(e=Da(),nl=Bi=vt=null,nn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=gs(n)}}function Ba(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ba(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Ha(){for(var e=window,t=fl();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=fl(e.document)}return t}function Qi(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function fp(e){var t=Ha(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Ba(n.ownerDocument.documentElement,n)){if(r!==null&&Qi(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=ys(n,o);var i=ys(n,r);l&&i&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,rn=null,ri=null,er=null,li=!1;function Ss(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;li||rn==null||rn!==fl(r)||(r=rn,"selectionStart"in r&&Qi(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),er&&dr(er,r)||(er=r,r=yl(ri,"onSelect"),0un||(e.current=ci[un],ci[un]=null,un--)}function D(e,t){un++,ci[un]=e.current,e.current=t}var Nt={},oe=Pt(Nt),pe=Pt(!1),Bt=Nt;function wn(e,t){var n=e.type.contextTypes;if(!n)return Nt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function me(e){return e=e.childContextTypes,e!=null}function wl(){A(pe),A(oe)}function Ps(e,t,n){if(oe.current!==Nt)throw Error(g(168));D(oe,t),D(pe,n)}function Ja(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(g(108,id(e)||"Unknown",l));return V({},n,r)}function El(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Nt,Bt=oe.current,D(oe,e),D(pe,pe.current),!0}function Ls(e,t,n){var r=e.stateNode;if(!r)throw Error(g(169));n?(e=Ja(e,t,Bt),r.__reactInternalMemoizedMergedChildContext=e,A(pe),A(oe),D(oe,e)):A(pe),D(pe,n)}var be=null,Vl=!1,Lo=!1;function qa(e){be===null?be=[e]:be.push(e)}function Ep(e){Vl=!0,qa(e)}function Lt(){if(!Lo&&be!==null){Lo=!0;var e=0,t=M;try{var n=be;for(M=1;e>=i,l-=i,et=1<<32-je(t)+l|n<C?(Q=x,x=null):Q=x.sibling;var P=v(f,x,d[C],h);if(P===null){x===null&&(x=Q);break}e&&x&&P.alternate===null&&t(f,x),a=o(P,a,C),N===null?_=P:N.sibling=P,N=P,x=Q}if(C===d.length)return n(f,x),U&&Dt(f,C),_;if(x===null){for(;CC?(Q=x,x=null):Q=x.sibling;var $e=v(f,x,P.value,h);if($e===null){x===null&&(x=Q);break}e&&x&&$e.alternate===null&&t(f,x),a=o($e,a,C),N===null?_=$e:N.sibling=$e,N=$e,x=Q}if(P.done)return n(f,x),U&&Dt(f,C),_;if(x===null){for(;!P.done;C++,P=d.next())P=m(f,P.value,h),P!==null&&(a=o(P,a,C),N===null?_=P:N.sibling=P,N=P);return U&&Dt(f,C),_}for(x=r(f,x);!P.done;C++,P=d.next())P=S(x,f,C,P.value,h),P!==null&&(e&&P.alternate!==null&&x.delete(P.key===null?C:P.key),a=o(P,a,C),N===null?_=P:N.sibling=P,N=P);return e&&x.forEach(function(Tr){return t(f,Tr)}),U&&Dt(f,C),_}function R(f,a,d,h){if(typeof d=="object"&&d!==null&&d.type===tn&&d.key===null&&(d=d.props.children),typeof d=="object"&&d!==null){switch(d.$$typeof){case Ar:e:{for(var _=d.key,N=a;N!==null;){if(N.key===_){if(_=d.type,_===tn){if(N.tag===7){n(f,N.sibling),a=l(N,d.props.children),a.return=f,f=a;break e}}else if(N.elementType===_||typeof _=="object"&&_!==null&&_.$$typeof===ft&&Rs(_)===N.type){n(f,N.sibling),a=l(N,d.props),a.ref=Hn(f,N,d),a.return=f,f=a;break e}n(f,N);break}else t(f,N);N=N.sibling}d.type===tn?(a=Vt(d.props.children,f.mode,h,d.key),a.return=f,f=a):(h=cl(d.type,d.key,d.props,null,f.mode,h),h.ref=Hn(f,a,d),h.return=f,f=h)}return i(f);case en:e:{for(N=d.key;a!==null;){if(a.key===N)if(a.tag===4&&a.stateNode.containerInfo===d.containerInfo&&a.stateNode.implementation===d.implementation){n(f,a.sibling),a=l(a,d.children||[]),a.return=f,f=a;break e}else{n(f,a);break}else t(f,a);a=a.sibling}a=Uo(d,f.mode,h),a.return=f,f=a}return i(f);case ft:return N=d._init,R(f,a,N(d._payload),h)}if(Gn(d))return y(f,a,d,h);if(Fn(d))return w(f,a,d,h);Jr(f,d)}return typeof d=="string"&&d!==""||typeof d=="number"?(d=""+d,a!==null&&a.tag===6?(n(f,a.sibling),a=l(a,d),a.return=f,f=a):(n(f,a),a=Ao(d,f.mode,h),a.return=f,f=a),i(f)):n(f,a)}return R}var kn=nc(!0),rc=nc(!1),Cl=Pt(null),xl=null,cn=null,Xi=null;function Zi(){Xi=cn=xl=null}function Ji(e){var t=Cl.current;A(Cl),e._currentValue=t}function pi(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function gn(e,t){xl=e,Xi=cn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(de=!0),e.firstContext=null)}function Oe(e){var t=e._currentValue;if(Xi!==e)if(e={context:e,memoizedValue:t,next:null},cn===null){if(xl===null)throw Error(g(308));cn=e,xl.dependencies={lanes:0,firstContext:e}}else cn=cn.next=e;return t}var Ut=null;function qi(e){Ut===null?Ut=[e]:Ut.push(e)}function lc(e,t,n,r){var l=t.interleaved;return l===null?(n.next=n,qi(t)):(n.next=l.next,l.next=n),t.interleaved=n,ot(e,r)}function ot(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var dt=!1;function bi(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function oc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function nt(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Et(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,(L&2)!==0){var l=r.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),r.pending=t,ot(e,n)}return l=r.interleaved,l===null?(t.next=t,qi(r)):(t.next=l.next,l.next=t),r.interleaved=t,ot(e,n)}function ll(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Fi(e,n)}}function zs(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var l=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?l=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?l=o=t:o=o.next=t}else l=o=t;n={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Nl(e,t,n,r){var l=e.updateQueue;dt=!1;var o=l.firstBaseUpdate,i=l.lastBaseUpdate,u=l.shared.pending;if(u!==null){l.shared.pending=null;var s=u,c=s.next;s.next=null,i===null?o=c:i.next=c,i=s;var p=e.alternate;p!==null&&(p=p.updateQueue,u=p.lastBaseUpdate,u!==i&&(u===null?p.firstBaseUpdate=c:u.next=c,p.lastBaseUpdate=s))}if(o!==null){var m=l.baseState;i=0,p=c=s=null,u=o;do{var v=u.lane,S=u.eventTime;if((r&v)===v){p!==null&&(p=p.next={eventTime:S,lane:0,tag:u.tag,payload:u.payload,callback:u.callback,next:null});e:{var y=e,w=u;switch(v=t,S=n,w.tag){case 1:if(y=w.payload,typeof y=="function"){m=y.call(S,m,v);break e}m=y;break e;case 3:y.flags=y.flags&-65537|128;case 0:if(y=w.payload,v=typeof y=="function"?y.call(S,m,v):y,v==null)break e;m=V({},m,v);break e;case 2:dt=!0}}u.callback!==null&&u.lane!==0&&(e.flags|=64,v=l.effects,v===null?l.effects=[u]:v.push(u))}else S={eventTime:S,lane:v,tag:u.tag,payload:u.payload,callback:u.callback,next:null},p===null?(c=p=S,s=m):p=p.next=S,i|=v;if(u=u.next,u===null){if(u=l.shared.pending,u===null)break;v=u,u=v.next,v.next=null,l.lastBaseUpdate=v,l.shared.pending=null}}while(!0);if(p===null&&(s=m),l.baseState=s,l.firstBaseUpdate=c,l.lastBaseUpdate=p,t=l.shared.interleaved,t!==null){l=t;do i|=l.lane,l=l.next;while(l!==t)}else o===null&&(l.shared.lanes=0);$t|=i,e.lanes=i,e.memoizedState=m}}function Ds(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=Mo.transition;Mo.transition={};try{e(!1),t()}finally{M=n,Mo.transition=r}}function kc(){return Me().memoizedState}function xp(e,t,n){var r=_t(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},_c(e))Cc(t,n);else if(n=lc(e,t,n,r),n!==null){var l=ae();Ve(n,e,r,l),xc(n,t,r)}}function Np(e,t,n){var r=_t(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(_c(e))Cc(t,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,u=o(i,n);if(l.hasEagerState=!0,l.eagerState=u,Be(u,i)){var s=t.interleaved;s===null?(l.next=l,qi(t)):(l.next=s.next,s.next=l),t.interleaved=l;return}}catch{}finally{}n=lc(e,t,l,r),n!==null&&(l=ae(),Ve(n,e,r,l),xc(n,t,r))}}function _c(e){var t=e.alternate;return e===j||t!==null&&t===j}function Cc(e,t){tr=Pl=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function xc(e,t,n){if((n&4194240)!==0){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Fi(e,n)}}var Ll={readContext:Oe,useCallback:ne,useContext:ne,useEffect:ne,useImperativeHandle:ne,useInsertionEffect:ne,useLayoutEffect:ne,useMemo:ne,useReducer:ne,useRef:ne,useState:ne,useDebugValue:ne,useDeferredValue:ne,useTransition:ne,useMutableSource:ne,useSyncExternalStore:ne,useId:ne,unstable_isNewReconciler:!1},Tp={readContext:Oe,useCallback:function(e,t){return Ge().memoizedState=[e,t===void 0?null:t],e},useContext:Oe,useEffect:As,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,il(4194308,4,gc.bind(null,t,e),n)},useLayoutEffect:function(e,t){return il(4194308,4,e,t)},useInsertionEffect:function(e,t){return il(4,2,e,t)},useMemo:function(e,t){var n=Ge();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ge();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=xp.bind(null,j,e),[r.memoizedState,e]},useRef:function(e){var t=Ge();return e={current:e},t.memoizedState=e},useState:Is,useDebugValue:uu,useDeferredValue:function(e){return Ge().memoizedState=e},useTransition:function(){var e=Is(!1),t=e[0];return e=Cp.bind(null,e[1]),Ge().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=j,l=Ge();if(U){if(n===void 0)throw Error(g(407));n=n()}else{if(n=t(),J===null)throw Error(g(349));(Wt&30)!==0||ac(r,t,n)}l.memoizedState=n;var o={value:n,getSnapshot:t};return l.queue=o,As(fc.bind(null,r,o,e),[e]),r.flags|=2048,wr(9,cc.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Ge(),t=J.identifierPrefix;if(U){var n=tt,r=et;n=(r&~(1<<32-je(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=yr++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[Ge]=t,e[dr]=r,Lc(e,t,!1,!1),t.stateNode=e;e:{switch(i=Qo(n,r),n){case"dialog":I("cancel",e),I("close",e),l=r;break;case"iframe":case"object":case"embed":I("load",e),l=r;break;case"video":case"audio":for(l=0;l_n&&(t.flags|=128,r=!0,Vn(o,!1),t.lanes=4194304)}else{if(!r)if(e=Cl(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Vn(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!U)return ne(t),null}else 2*W()-o.renderingStartTime>_n&&n!==1073741824&&(t.flags|=128,r=!0,Vn(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=W(),t.sibling=null,n=F.current,D(F,r?n&1|2:n&1),t):(ne(t),null);case 22:case 23:return au(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&(t.mode&1)!==0?(he&1073741824)!==0&&(ne(t),t.subtreeFlags&6&&(t.flags|=8192)):ne(t),null;case 24:return null;case 25:return null}throw Error(g(156,t.tag))}function Np(e,t){switch(Wi(t),t.tag){case 1:return me(t.type)&&gl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return En(),A(pe),A(le),qi(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return Ji(t),null;case 13:if(A(F),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(g(340));Sn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return A(F),null;case 4:return En(),null;case 10:return Gi(t.type._context),null;case 22:case 23:return au(),null;case 24:return null;default:return null}}var Zr=!1,re=!1,xp=typeof WeakSet=="function"?WeakSet:Set,k=null;function an(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){B(e,t,r)}else n.current=null}function yi(e,t,n){try{n()}catch(r){B(e,t,r)}}var Hs=!1;function Pp(e,t){if(ti=pl,e=Ua(),Bi(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,u=-1,s=-1,c=0,p=0,m=e,v=null;t:for(;;){for(var S;m!==n||l!==0&&m.nodeType!==3||(u=i+l),m!==o||r!==0&&m.nodeType!==3||(s=i+r),m.nodeType===3&&(i+=m.nodeValue.length),(S=m.firstChild)!==null;)v=m,m=S;for(;;){if(m===e)break t;if(v===n&&++c===l&&(u=i),v===o&&++p===r&&(s=i),(S=m.nextSibling)!==null)break;m=v,v=m.parentNode}m=S}n=u===-1||s===-1?null:{start:u,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(ni={focusedElem:e,selectionRange:n},pl=!1,k=t;k!==null;)if(t=k,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,k=e;else for(;k!==null;){t=k;try{var y=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(y!==null){var w=y.memoizedProps,R=y.memoizedState,f=t.stateNode,a=f.getSnapshotBeforeUpdate(t.elementType===t.type?w:Ae(t.type,w),R);f.__reactInternalSnapshotBeforeUpdate=a}break;case 3:var d=t.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(g(163))}}catch(h){B(t,t.return,h)}if(e=t.sibling,e!==null){e.return=t.return,k=e;break}k=t.return}return y=Hs,Hs=!1,y}function bn(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&yi(t,n,o)}l=l.next}while(l!==r)}}function Vl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,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 Si(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 zc(e){var t=e.alternate;t!==null&&(e.alternate=null,zc(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ge],delete t[dr],delete t[oi],delete t[ap],delete t[cp])),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 Dc(e){return e.tag===5||e.tag===3||e.tag===4}function Ws(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Dc(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 e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function wi(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=hl));else if(r!==4&&(e=e.child,e!==null))for(wi(e,t,n),e=e.sibling;e!==null;)wi(e,t,n),e=e.sibling}function Ei(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(Ei(e,t,n),e=e.sibling;e!==null;)Ei(e,t,n),e=e.sibling}var J=null,Ue=!1;function at(e,t,n){for(n=n.child;n!==null;)Ic(e,t,n),n=n.sibling}function Ic(e,t,n){if(Xe&&typeof Xe.onCommitFiberUnmount=="function")try{Xe.onCommitFiberUnmount(Rl,n)}catch{}switch(n.tag){case 5:re||an(n,t);case 6:var r=J,l=Ue;J=null,at(e,t,n),J=r,Ue=l,J!==null&&(Ue?(e=J,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):J.removeChild(n.stateNode));break;case 18:J!==null&&(Ue?(e=J,n=n.stateNode,e.nodeType===8?Co(e.parentNode,n):e.nodeType===1&&Co(e,n),ur(e)):Co(J,n.stateNode));break;case 4:r=J,l=Ue,J=n.stateNode.containerInfo,Ue=!0,at(e,t,n),J=r,Ue=l;break;case 0:case 11:case 14:case 15:if(!re&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,i=o.destroy;o=o.tag,i!==void 0&&((o&2)!==0||(o&4)!==0)&&yi(n,t,i),l=l.next}while(l!==r)}at(e,t,n);break;case 1:if(!re&&(an(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(u){B(n,t,u)}at(e,t,n);break;case 21:at(e,t,n);break;case 22:n.mode&1?(re=(r=re)||n.memoizedState!==null,at(e,t,n),re=r):at(e,t,n);break;default:at(e,t,n)}}function $s(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new xp),t.forEach(function(r){var l=Ap.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function Ie(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=i),r&=~o}if(r=l,r=W()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Op(r/1960))-r,10e?16:e,vt===null)var r=!1;else{if(e=vt,vt=null,Ol=0,(O&6)!==0)throw Error(g(331));var l=O;for(O|=4,k=e.current;k!==null;){var o=k,i=o.child;if((k.flags&16)!==0){var u=o.deletions;if(u!==null){for(var s=0;sW()-uu?Ft(e,0):iu|=n),ve(e,t)}function Wc(e,t){t===0&&((e.mode&1)===0?t=1:(t=Ur,Ur<<=1,(Ur&130023424)===0&&(Ur=4194304)));var n=ae();e=lt(e,t),e!==null&&(Sr(e,t,n),ve(e,n))}function Ip(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Wc(e,n)}function Ap(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(g(314))}r!==null&&r.delete(t),Wc(e,n)}var $c;$c=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||pe.current)de=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return de=!1,_p(e,t,n);de=(e.flags&131072)!==0}else de=!1,U&&(t.flags&1048576)!==0&&Xa(t,wl,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;ll(e,t),e=t.pendingProps;var l=yn(t,le.current);vn(t,n),l=eu(null,t,r,e,l,n);var o=tu();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,me(r)?(o=!0,yl(t)):o=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,Yi(t),l.updater=jl,t.stateNode=l,l._reactInternals=t,fi(t,r,e,n),t=mi(null,t,r,!0,o,n)):(t.tag=0,U&&o&&Hi(t),se(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(ll(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=Fp(r),e=Ae(r,e),l){case 0:t=pi(null,t,r,e,n);break e;case 1:t=js(null,t,r,e,n);break e;case 11:t=Us(null,t,r,e,n);break e;case 14:t=Fs(null,t,r,Ae(r.type,e),n);break e}throw Error(g(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ae(r,l),pi(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ae(r,l),js(e,t,r,l,n);case 3:e:{if(Pc(t),e===null)throw Error(g(387));r=t.pendingProps,o=t.memoizedState,l=o.element,ec(e,t),_l(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){l=kn(Error(g(423)),t),t=Vs(e,t,r,n,l);break e}else if(r!==l){l=kn(Error(g(424)),t),t=Vs(e,t,r,n,l);break e}else for(ge=St(t.stateNode.containerInfo.firstChild),ye=t,U=!0,Fe=null,n=qa(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Sn(),r===l){t=ot(e,t,n);break e}se(e,t,r,n)}t=t.child}return t;case 5:return tc(t),e===null&&si(t),r=t.type,l=t.pendingProps,o=e!==null?e.memoizedProps:null,i=l.children,ri(r,l)?i=null:o!==null&&ri(r,o)&&(t.flags|=32),xc(e,t),se(e,t,i,n),t.child;case 6:return e===null&&si(t),null;case 13:return Tc(e,t,n);case 4:return Zi(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=wn(t,null,r,n):se(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ae(r,l),Us(e,t,r,l,n);case 7:return se(e,t,t.pendingProps,n),t.child;case 8:return se(e,t,t.pendingProps.children,n),t.child;case 12:return se(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,o=t.memoizedProps,i=l.value,D(El,r._currentValue),r._currentValue=i,o!==null)if(Be(o.value,i)){if(o.children===l.children&&!pe.current){t=ot(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var u=o.dependencies;if(u!==null){i=o.child;for(var s=u.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=tt(-1,n&-n),s.tag=2;var c=o.updateQueue;if(c!==null){c=c.shared;var p=c.pending;p===null?s.next=s:(s.next=p.next,p.next=s),c.pending=s}}o.lanes|=n,s=o.alternate,s!==null&&(s.lanes|=n),ai(o.return,n,t),u.lanes|=n;break}s=s.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(g(341));i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),ai(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}se(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,vn(t,n),l=Oe(l),r=r(l),t.flags|=1,se(e,t,r,n),t.child;case 14:return r=t.type,l=Ae(r,t.pendingProps),l=Ae(r.type,l),Fs(e,t,r,l,n);case 15:return Cc(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ae(r,l),ll(e,t),t.tag=1,me(r)?(e=!0,yl(t)):e=!1,vn(t,n),Ec(t,r,l),fi(t,r,l,n),mi(null,t,r,!0,e,n);case 19:return Oc(e,t,n);case 22:return Nc(e,t,n)}throw Error(g(156,t.tag))};function Qc(e,t){return ya(e,t)}function Up(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 Pe(e,t,n,r){return new Up(e,t,n,r)}function fu(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Fp(e){if(typeof e=="function")return fu(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Li)return 11;if(e===Mi)return 14}return 2}function _t(e,t){var n=e.alternate;return n===null?(n=Pe(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 ul(e,t,n,r,l,o){var i=2;if(r=e,typeof e=="function")fu(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case bt:return jt(n.children,l,o,t);case Oi:i=8,l|=8;break;case Io:return e=Pe(12,n,t,l|2),e.elementType=Io,e.lanes=o,e;case Ao:return e=Pe(13,n,t,l),e.elementType=Ao,e.lanes=o,e;case Uo:return e=Pe(19,n,t,l),e.elementType=Uo,e.lanes=o,e;case ta:return Hl(n,l,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case bs:i=10;break e;case ea:i=9;break e;case Li:i=11;break e;case Mi:i=14;break e;case ct:i=16,r=null;break e}throw Error(g(130,e==null?e:typeof e,""))}return t=Pe(i,n,t,l),t.elementType=e,t.type=r,t.lanes=o,t}function jt(e,t,n,r){return e=Pe(7,e,r,t),e.lanes=n,e}function Hl(e,t,n,r){return e=Pe(22,e,r,t),e.elementType=ta,e.lanes=n,e.stateNode={isHidden:!1},e}function Ro(e,t,n){return e=Pe(6,e,null,t),e.lanes=n,e}function zo(e,t,n){return t=Pe(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function jp(e,t,n,r,l){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=ho(0),this.expirationTimes=ho(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=ho(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function du(e,t,n,r,l,o,i,u,s){return e=new jp(e,t,n,u,s),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Pe(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Yi(o),e}function Vp(e,t,n){var r=3{"use strict";function Zc(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Zc)}catch(e){console.error(e)}}Zc(),Jc.exports=Yc()});var ef=Ze(hu=>{"use strict";var bc=qc();hu.createRoot=bc.createRoot,hu.hydrateRoot=bc.hydrateRoot;var om});var nf=Ze(Gl=>{"use strict";var Qp=ze(),Kp=Symbol.for("react.element"),Gp=Symbol.for("react.fragment"),Xp=Object.prototype.hasOwnProperty,Yp=Qp.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Zp={key:!0,ref:!0,__self:!0,__source:!0};function tf(e,t,n){var r,l={},o=null,i=null;n!==void 0&&(o=""+n),t.key!==void 0&&(o=""+t.key),t.ref!==void 0&&(i=t.ref);for(r in t)Xp.call(t,r)&&!Zp.hasOwnProperty(r)&&(l[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)l[r]===void 0&&(l[r]=t[r]);return{$$typeof:Kp,type:e,key:o,ref:i,props:l,_owner:Yp.current}}Gl.Fragment=Gp;Gl.jsx=tf;Gl.jsxs=tf});var $=Ze((sm,rf)=>{"use strict";rf.exports=nf()});var wf=L(ef(),1);var oe=L(ze(),1);var K=L($(),1);function lf({isConnected:e,projects:t,currentFilter:n,onFilterChange:r,onSettingsToggle:l,sidebarOpen:o,isProcessing:i}){return(0,K.jsxs)("div",{className:"header",children:[(0,K.jsxs)("h1",{children:[(0,K.jsx)("img",{src:"claude-mem-logomark.webp",alt:"",className:`logomark ${i?"spinning":""}`}),(0,K.jsx)("span",{className:"logo-text",children:"claude-mem"})]}),(0,K.jsxs)("div",{className:"status",children:[(0,K.jsx)("a",{href:"https://github.com/thedotmack/claude-mem/",target:"_blank",rel:"noopener noreferrer",title:"GitHub",style:{display:"block",padding:"8px 4px 8px 8px",color:"#a0a0a0",transition:"color 0.2s",lineHeight:0},onMouseEnter:u=>u.currentTarget.style.color="#ffffff",onMouseLeave:u=>u.currentTarget.style.color="#a0a0a0",children:(0,K.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",children:(0,K.jsx)("path",{d:"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"})})}),(0,K.jsx)("a",{href:"https://x.com/Claude_Memory",target:"_blank",rel:"noopener noreferrer",title:"X (Twitter)",style:{display:"block",padding:"8px 8px 8px 4px",color:"#a0a0a0",transition:"color 0.2s",lineHeight:0},onMouseEnter:u=>u.currentTarget.style.color="#ffffff",onMouseLeave:u=>u.currentTarget.style.color="#a0a0a0",children:(0,K.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",children:(0,K.jsx)("path",{d:"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"})})}),(0,K.jsxs)("select",{value:n,onChange:u=>r(u.target.value),children:[(0,K.jsx)("option",{value:"",children:"All Projects"}),t.map(u=>(0,K.jsx)("option",{value:u,children:u},u))]}),(0,K.jsx)("button",{className:`settings-btn ${o?"active":""}`,onClick:l,title:"Settings",children:(0,K.jsxs)("svg",{className:"settings-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,K.jsx)("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"}),(0,K.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})})]})]})}var Lt=L(ze(),1);function xn(e){return new Date(e).toLocaleString()}function of(e){if(!e)return"-";let t=Math.floor(e/3600),n=Math.floor(e%3600/60);return`${t}h ${n}m`}function uf(e){return e?e<1024?e+" B":e<1024*1024?(e/1024).toFixed(1)+" KB":(e/(1024*1024)).toFixed(1)+" MB":"-"}var ut=L($(),1);function sf({observation:e}){let t=xn(e.created_at_epoch);return(0,ut.jsxs)("div",{className:"card",children:[(0,ut.jsxs)("div",{className:"card-header",children:[(0,ut.jsx)("span",{className:"card-type",children:e.type}),(0,ut.jsx)("span",{children:e.project})]}),(0,ut.jsx)("div",{className:"card-title",children:e.title||"Untitled"}),e.subtitle&&(0,ut.jsx)("div",{className:"card-subtitle",children:e.subtitle}),(0,ut.jsxs)("div",{className:"card-meta",children:["#",e.id," \u2022 ",t]})]})}var He=L($(),1);function af({summary:e}){let t=xn(e.created_at_epoch);return(0,He.jsxs)("div",{className:"card summary-card",children:[(0,He.jsxs)("div",{className:"card-header",children:[(0,He.jsx)("span",{className:"card-type",children:"SUMMARY"}),(0,He.jsx)("span",{children:e.project})]}),e.request&&(0,He.jsxs)("div",{className:"card-title",children:["Request: ",e.request]}),e.learned&&(0,He.jsxs)("div",{className:"card-subtitle",children:["Learned: ",e.learned]}),e.completed&&(0,He.jsxs)("div",{className:"card-subtitle",children:["Completed: ",e.completed]}),e.next_steps&&(0,He.jsxs)("div",{className:"card-subtitle",children:["Next: ",e.next_steps]}),(0,He.jsxs)("div",{className:"card-meta",children:["#",e.id," \u2022 ",t]})]})}var ke=L($(),1);function cf({sessionId:e,project:t}){return(0,ke.jsxs)("div",{className:"card summary-card summary-skeleton",children:[(0,ke.jsxs)("div",{className:"card-header",children:[(0,ke.jsx)("span",{className:"card-type",children:"SUMMARY"}),t&&(0,ke.jsx)("span",{children:t}),(0,ke.jsxs)("div",{className:"processing-indicator",children:[(0,ke.jsx)("div",{className:"spinner"}),(0,ke.jsx)("span",{children:"Generating..."})]})]}),(0,ke.jsx)("div",{className:"skeleton-line skeleton-title"}),(0,ke.jsx)("div",{className:"skeleton-line skeleton-subtitle"}),(0,ke.jsx)("div",{className:"skeleton-line skeleton-subtitle short"}),(0,ke.jsxs)("div",{className:"card-meta",children:["Session: ",e]})]})}var Ot=L($(),1);function ff({prompt:e}){return(0,Ot.jsxs)("div",{className:"card prompt-card",children:[(0,Ot.jsxs)("div",{className:"card-header",children:[(0,Ot.jsx)("span",{className:"card-type",children:"Prompt"}),(0,Ot.jsx)("span",{children:e.project})]}),(0,Ot.jsx)("div",{className:"card-content",children:e.prompt_text}),(0,Ot.jsx)("div",{className:"card-meta",children:xn(e.created_at_epoch)})]})}var _r={PAGINATION_PAGE_SIZE:50,LOAD_MORE_THRESHOLD:.1};var _e=L($(),1);function df({observations:e,summaries:t,prompts:n,processingSessions:r,onLoadMore:l,isLoading:o,hasMore:i}){let u=(0,Lt.useRef)(null),s=(0,Lt.useRef)(l);(0,Lt.useEffect)(()=>{s.current=l},[l]),(0,Lt.useEffect)(()=>{let p=u.current;if(!p)return;let m=new IntersectionObserver(v=>{v[0].isIntersecting&&i&&!o&&s.current?.()},{threshold:_r.LOAD_MORE_THRESHOLD});return m.observe(p),()=>{p&&m.unobserve(p),m.disconnect()}},[i,o]);let c=(0,Lt.useMemo)(()=>{let p=new Set(t.map(y=>y.session_id)),m=new Map;n.forEach(y=>{let w=m.get(y.claude_session_id);(!w||y.created_at_epoch>w.created_at_epoch)&&m.set(y.claude_session_id,y)});let v=[];return r.forEach(y=>{if(!p.has(y)){let w=m.get(y);v.push({itemType:"skeleton",id:y,session_id:y,project:w?.project,created_at_epoch:Date.now()})}}),[...e.map(y=>({...y,itemType:"observation"})),...t.map(y=>({...y,itemType:"summary"})),...n.map(y=>({...y,itemType:"prompt"})),...v].sort((y,w)=>w.created_at_epoch-y.created_at_epoch)},[e,t,n,r]);return(0,_e.jsx)("div",{className:"feed",children:(0,_e.jsxs)("div",{className:"feed-content",children:[c.map(p=>{let m=`${p.itemType}-${p.id}`;return p.itemType==="observation"?(0,_e.jsx)(sf,{observation:p},m):p.itemType==="summary"?(0,_e.jsx)(af,{summary:p},m):p.itemType==="skeleton"?(0,_e.jsx)(cf,{sessionId:p.session_id,project:p.project},m):(0,_e.jsx)(ff,{prompt:p},m)}),c.length===0&&!o&&(0,_e.jsx)("div",{style:{textAlign:"center",padding:"40px",color:"#8b949e"},children:"No items to display"}),o&&(0,_e.jsxs)("div",{style:{textAlign:"center",padding:"20px",color:"#8b949e"},children:[(0,_e.jsx)("div",{className:"spinner",style:{display:"inline-block",marginRight:"10px"}}),"Loading more..."]}),i&&!o&&c.length>0&&(0,_e.jsx)("div",{ref:u,style:{height:"20px",margin:"10px 0"}}),!i&&c.length>0&&(0,_e.jsx)("div",{style:{textAlign:"center",padding:"20px",color:"#8b949e",fontSize:"14px"},children:"No more items to load"})]})})}var Pn=L(ze(),1);var Me={CLAUDE_MEM_MODEL:"claude-haiku-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777"};var _=L($(),1);function pf({isOpen:e,settings:t,stats:n,isSaving:r,saveStatus:l,isConnected:o,onSave:i,onClose:u}){let[s,c]=(0,Pn.useState)(t.CLAUDE_MEM_MODEL||Me.CLAUDE_MEM_MODEL),[p,m]=(0,Pn.useState)(t.CLAUDE_MEM_CONTEXT_OBSERVATIONS||Me.CLAUDE_MEM_CONTEXT_OBSERVATIONS),[v,S]=(0,Pn.useState)(t.CLAUDE_MEM_WORKER_PORT||Me.CLAUDE_MEM_WORKER_PORT);return(0,Pn.useEffect)(()=>{c(t.CLAUDE_MEM_MODEL||Me.CLAUDE_MEM_MODEL),m(t.CLAUDE_MEM_CONTEXT_OBSERVATIONS||Me.CLAUDE_MEM_CONTEXT_OBSERVATIONS),S(t.CLAUDE_MEM_WORKER_PORT||Me.CLAUDE_MEM_WORKER_PORT)},[t]),(0,_.jsxs)("div",{className:`sidebar ${e?"open":""}`,children:[(0,_.jsxs)("div",{className:"sidebar-header",children:[(0,_.jsx)("h1",{children:"Settings"}),(0,_.jsxs)("div",{style:{display:"flex",gap:"8px",alignItems:"center"},children:[(0,_.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[(0,_.jsx)("span",{className:`status-dot ${o?"connected":""}`}),(0,_.jsx)("span",{style:{fontSize:"11px",opacity:.5,fontWeight:300},children:o?"Connected":"Disconnected"})]}),(0,_.jsx)("button",{onClick:()=>{i({CLAUDE_MEM_MODEL:s,CLAUDE_MEM_CONTEXT_OBSERVATIONS:p,CLAUDE_MEM_WORKER_PORT:v})},disabled:r,children:r?"Saving...":"Save"}),(0,_.jsx)("button",{onClick:u,title:"Close settings",style:{background:"transparent",border:"1px solid #404040",padding:"8px",width:"36px",height:"36px",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,_.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,_.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,_.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})]}),(0,_.jsxs)("div",{className:"stats-scroll",children:[(0,_.jsxs)("div",{className:"settings-section",children:[(0,_.jsx)("h3",{children:"Environment Variables"}),(0,_.jsxs)("div",{className:"form-group",children:[(0,_.jsx)("label",{htmlFor:"model",children:"CLAUDE_MEM_MODEL"}),(0,_.jsx)("div",{className:"setting-description",children:"Model used for AI compression of tool observations. Haiku is fast and cheap, Sonnet offers better quality, Opus is most capable but expensive."}),(0,_.jsxs)("select",{id:"model",value:s,onChange:w=>c(w.target.value),children:[(0,_.jsx)("option",{value:"claude-haiku-4-5",children:"claude-haiku-4-5"}),(0,_.jsx)("option",{value:"claude-sonnet-4-5",children:"claude-sonnet-4-5"}),(0,_.jsx)("option",{value:"claude-opus-4",children:"claude-opus-4"})]})]}),(0,_.jsxs)("div",{className:"form-group",children:[(0,_.jsx)("label",{htmlFor:"contextObs",children:"CLAUDE_MEM_CONTEXT_OBSERVATIONS"}),(0,_.jsx)("div",{className:"setting-description",children:"Number of recent observations to inject at session start. Higher values provide more context but increase token usage. Default: 50"}),(0,_.jsx)("input",{type:"number",id:"contextObs",min:"1",max:"200",value:p,onChange:w=>m(w.target.value)})]}),(0,_.jsxs)("div",{className:"form-group",children:[(0,_.jsx)("label",{htmlFor:"workerPort",children:"CLAUDE_MEM_WORKER_PORT"}),(0,_.jsx)("div",{className:"setting-description",children:"Port number for the background worker service. Change only if port 37777 conflicts with another service."}),(0,_.jsx)("input",{type:"number",id:"workerPort",min:"1024",max:"65535",value:v,onChange:w=>S(w.target.value)})]}),l&&(0,_.jsx)("div",{className:"save-status",children:l})]}),(0,_.jsxs)("div",{className:"settings-section",children:[(0,_.jsx)("h3",{children:"Worker Stats"}),(0,_.jsxs)("div",{className:"stats-grid",children:[(0,_.jsxs)("div",{className:"stat",children:[(0,_.jsx)("div",{className:"stat-label",children:"Version"}),(0,_.jsx)("div",{className:"stat-value",children:n.worker?.version||"-"})]}),(0,_.jsxs)("div",{className:"stat",children:[(0,_.jsx)("div",{className:"stat-label",children:"Uptime"}),(0,_.jsx)("div",{className:"stat-value",children:of(n.worker?.uptime)})]}),(0,_.jsxs)("div",{className:"stat",children:[(0,_.jsx)("div",{className:"stat-label",children:"Active Sessions"}),(0,_.jsx)("div",{className:"stat-value",children:n.worker?.activeSessions||"0"})]}),(0,_.jsxs)("div",{className:"stat",children:[(0,_.jsx)("div",{className:"stat-label",children:"SSE Clients"}),(0,_.jsx)("div",{className:"stat-value",children:n.worker?.sseClients||"0"})]})]})]}),(0,_.jsxs)("div",{className:"settings-section",children:[(0,_.jsx)("h3",{children:"Database Stats"}),(0,_.jsxs)("div",{className:"stats-grid",children:[(0,_.jsxs)("div",{className:"stat",children:[(0,_.jsx)("div",{className:"stat-label",children:"DB Size"}),(0,_.jsx)("div",{className:"stat-value",children:uf(n.database?.size)})]}),(0,_.jsxs)("div",{className:"stat",children:[(0,_.jsx)("div",{className:"stat-label",children:"Observations"}),(0,_.jsx)("div",{className:"stat-value",children:n.database?.observations||"0"})]}),(0,_.jsxs)("div",{className:"stat",children:[(0,_.jsx)("div",{className:"stat-label",children:"Sessions"}),(0,_.jsx)("div",{className:"stat-value",children:n.database?.sessions||"0"})]}),(0,_.jsxs)("div",{className:"stat",children:[(0,_.jsx)("div",{className:"stat-label",children:"Summaries"}),(0,_.jsx)("div",{className:"stat-value",children:n.database?.summaries||"0"})]})]})]})]})]})}var Re=L(ze(),1);var We={OBSERVATIONS:"/api/observations",SUMMARIES:"/api/summaries",PROMPTS:"/api/prompts",SETTINGS:"/api/settings",STATS:"/api/stats",STREAM:"/stream"};var Tn={SSE_RECONNECT_DELAY_MS:3e3,STATS_REFRESH_INTERVAL_MS:1e4,SAVE_STATUS_DISPLAY_DURATION_MS:3e3};function mf(){let[e,t]=(0,Re.useState)([]),[n,r]=(0,Re.useState)([]),[l,o]=(0,Re.useState)([]),[i,u]=(0,Re.useState)([]),[s,c]=(0,Re.useState)(!1),[p,m]=(0,Re.useState)(new Set),v=(0,Re.useRef)(null),S=(0,Re.useRef)();return(0,Re.useEffect)(()=>{let y=()=>{v.current&&v.current.close();let w=new EventSource(We.STREAM);v.current=w,w.onopen=()=>{console.log("[SSE] Connected"),c(!0),S.current&&clearTimeout(S.current)},w.onerror=R=>{console.error("[SSE] Connection error:",R),c(!1),w.close(),S.current=setTimeout(()=>{S.current=void 0,console.log("[SSE] Attempting to reconnect..."),y()},Tn.SSE_RECONNECT_DELAY_MS)},w.onmessage=R=>{try{let f=JSON.parse(R.data);switch(f.type){case"initial_load":console.log("[SSE] Initial load:",{projects:f.projects?.length||0}),u(f.projects||[]);break;case"new_observation":f.observation&&(console.log("[SSE] New observation:",f.observation.id),t(a=>[f.observation,...a]));break;case"new_summary":if(f.summary){let a=f.summary;console.log("[SSE] New summary:",a.id),r(d=>[a,...d]),m(d=>{let h=new Set(d);return h.delete(a.session_id),h})}break;case"new_prompt":if(f.prompt){let a=f.prompt;console.log("[SSE] New prompt:",a.id),o(d=>[a,...d])}break;case"processing_status":if(f.processing){let a=f.processing;console.log("[SSE] Processing status:",a),m(d=>{let h=new Set(d);return a.is_processing?h.add(a.session_id):h.delete(a.session_id),h})}break}}catch(f){console.error("[SSE] Failed to parse message:",f)}}};return y(),()=>{v.current&&v.current.close(),S.current&&clearTimeout(S.current)}},[]),{observations:e,summaries:n,prompts:l,projects:i,processingSessions:p,isConnected:s}}var On=L(ze(),1);function vf(){let[e,t]=(0,On.useState)(Me),[n,r]=(0,On.useState)(!1),[l,o]=(0,On.useState)("");return(0,On.useEffect)(()=>{fetch(We.SETTINGS).then(u=>u.json()).then(u=>{t({CLAUDE_MEM_MODEL:u.CLAUDE_MEM_MODEL||Me.CLAUDE_MEM_MODEL,CLAUDE_MEM_CONTEXT_OBSERVATIONS:u.CLAUDE_MEM_CONTEXT_OBSERVATIONS||Me.CLAUDE_MEM_CONTEXT_OBSERVATIONS,CLAUDE_MEM_WORKER_PORT:u.CLAUDE_MEM_WORKER_PORT||Me.CLAUDE_MEM_WORKER_PORT})}).catch(u=>{console.error("Failed to load settings:",u)})},[]),{settings:e,saveSettings:async u=>{r(!0),o("Saving...");try{let c=await(await fetch(We.SETTINGS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)})).json();c.success?(t(u),o("\u2713 Saved"),setTimeout(()=>o(""),Tn.SAVE_STATUS_DISPLAY_DURATION_MS)):o(`\u2717 Error: ${c.error}`)}catch(s){o(`\u2717 Error: ${s instanceof Error?s.message:"Unknown error"}`)}finally{r(!1)}},isSaving:n,saveStatus:l}}var Xl=L(ze(),1);function hf(){let[e,t]=(0,Xl.useState)({});return(0,Xl.useEffect)(()=>{let n=async()=>{try{let o=await(await fetch(We.STATS)).json();t(o)}catch(l){console.error("Failed to load stats:",l)}};n();let r=setInterval(n,Tn.STATS_REFRESH_INTERVAL_MS);return()=>clearInterval(r)},[]),{stats:e}}var Gt=L(ze(),1);function gu(e,t,n){let[r,l]=(0,Gt.useState)({isLoading:!1,hasMore:!0}),[o,i]=(0,Gt.useState)(0);(0,Gt.useEffect)(()=>{i(0),l({isLoading:!1,hasMore:!0})},[n]);let u=(0,Gt.useCallback)(async()=>{if(r.isLoading||!r.hasMore)return[];l(s=>({...s,isLoading:!0}));try{let s=new URLSearchParams({offset:o.toString(),limit:_r.PAGINATION_PAGE_SIZE.toString()});n&&s.append("project",n);let c=await fetch(`${e}?${s}`);if(!c.ok)throw new Error(`Failed to load ${t}: ${c.statusText}`);let p=await c.json();return l(m=>({...m,isLoading:!1,hasMore:p.hasMore})),i(m=>m+_r.PAGINATION_PAGE_SIZE),p[t]}catch(s){return console.error(`Failed to load ${t}:`,s),l(c=>({...c,isLoading:!1})),[]}},[o,r.hasMore,r.isLoading,n,e,t]);return{...r,loadMore:u}}function gf(e){let t=gu(We.OBSERVATIONS,"observations",e),n=gu(We.SUMMARIES,"summaries",e),r=gu(We.PROMPTS,"prompts",e);return{observations:t,summaries:n,prompts:r}}function Yl(e,t,n){let r=n?e.filter(o=>o.project===n):e,l=new Set;return[...r,...t].filter(o=>l.has(o.id)?!1:(l.add(o.id),!0))}var Xt=L($(),1);function yf(){let[e,t]=(0,oe.useState)(""),[n,r]=(0,oe.useState)(!1),[l,o]=(0,oe.useState)([]),[i,u]=(0,oe.useState)([]),[s,c]=(0,oe.useState)([]),{observations:p,summaries:m,prompts:v,projects:S,processingSessions:y,isConnected:w}=mf(),{settings:R,saveSettings:f,isSaving:a,saveStatus:d}=vf(),{stats:h}=hf(),E=gf(e);(0,oe.useEffect)(()=>{o([]),u([]),c([])},[e]);let C=(0,oe.useMemo)(()=>Yl(p,l,e),[p,l,e]),N=(0,oe.useMemo)(()=>Yl(m,i,e),[m,i,e]),x=(0,oe.useMemo)(()=>Yl(v,s,e),[v,s,e]),H=(0,oe.useCallback)(()=>{r(ie=>!ie)},[]),T=(0,oe.useCallback)(async()=>{try{let[ie,Cr,Su]=await Promise.all([E.observations.loadMore(),E.summaries.loadMore(),E.prompts.loadMore()]);ie.length>0&&o(Ln=>[...Ln,...ie]),Cr.length>0&&u(Ln=>[...Ln,...Cr]),Su.length>0&&c(Ln=>[...Ln,...Su])}catch(ie){console.error("Failed to load more data:",ie)}},[E]);return(0,oe.useEffect)(()=>{T()},[e,T]),(0,Xt.jsxs)("div",{className:"container",children:[(0,Xt.jsxs)("div",{className:"main-col",children:[(0,Xt.jsx)(lf,{isConnected:w,projects:S,currentFilter:e,onFilterChange:t,onSettingsToggle:H,sidebarOpen:n,isProcessing:y.size>0}),(0,Xt.jsx)(df,{observations:C,summaries:N,prompts:x,processingSessions:y,onLoadMore:T,isLoading:E.observations.isLoading||E.summaries.isLoading||E.prompts.isLoading,hasMore:E.observations.hasMore||E.summaries.hasMore||E.prompts.hasMore})]}),(0,Xt.jsx)(pf,{isOpen:n,settings:R,stats:h,isSaving:a,saveStatus:d,isConnected:w,onSave:f,onClose:H})]})}var Sf=L(ze(),1),Mt=L($(),1),Zl=class extends Sf.Component{constructor(t){super(t),this.state={hasError:!1,error:null,errorInfo:null}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,n){console.error("[ErrorBoundary] Caught error:",t,n),this.setState({error:t,errorInfo:n})}render(){return this.state.hasError?(0,Mt.jsxs)("div",{style:{padding:"20px",color:"#ff6b6b",backgroundColor:"#1a1a1a",minHeight:"100vh"},children:[(0,Mt.jsx)("h1",{style:{fontSize:"24px",marginBottom:"10px"},children:"Something went wrong"}),(0,Mt.jsx)("p",{style:{marginBottom:"10px",color:"#8b949e"},children:"The application encountered an error. Please refresh the page to try again."}),this.state.error&&(0,Mt.jsxs)("details",{style:{marginTop:"20px",color:"#8b949e"},children:[(0,Mt.jsx)("summary",{style:{cursor:"pointer",marginBottom:"10px"},children:"Error details"}),(0,Mt.jsxs)("pre",{style:{backgroundColor:"#0d1117",padding:"10px",borderRadius:"6px",overflow:"auto"},children:[this.state.error.toString(),this.state.errorInfo&&` +`+o.stack}return{value:e,source:t,stack:l,digest:null}}function Do(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function hi(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var Op=typeof WeakMap=="function"?WeakMap:Map;function Tc(e,t,n){n=nt(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Ml||(Ml=!0,Ni=r),hi(e,t)},n}function Pc(e,t,n){n=nt(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var l=t.value;n.payload=function(){return r(l)},n.callback=function(){hi(e,t)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(n.callback=function(){hi(e,t),typeof r!="function"&&(kt===null?kt=new Set([this]):kt.add(this));var i=t.stack;this.componentDidCatch(t.value,{componentStack:i!==null?i:""})}),n}function js(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Op;var l=new Set;r.set(t,l)}else l=r.get(t),l===void 0&&(l=new Set,r.set(t,l));l.has(n)||(l.add(n),e=$p.bind(null,e,t,n),t.then(e,e))}function Vs(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function Bs(e,t,n,r,l){return(e.mode&1)===0?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=nt(-1,1),t.tag=2,Et(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=l,e)}var Mp=ut.ReactCurrentOwner,de=!1;function se(e,t,n,r){t.child=e===null?rc(t,null,n,r):kn(t,e.child,n,r)}function Hs(e,t,n,r,l){n=n.render;var o=t.ref;return gn(t,l),r=lu(e,t,n,r,o,l),n=ou(),e!==null&&!de?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,it(e,t,l)):(U&&n&&Ki(t),t.flags|=1,se(e,t,r,l),t.child)}function Ws(e,t,n,r,l){if(e===null){var o=n.type;return typeof o=="function"&&!vu(o)&&o.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=o,Lc(e,t,o,r,l)):(e=cl(n.type,null,r,t,t.mode,l),e.ref=t.ref,e.return=t,t.child=e)}if(o=e.child,(e.lanes&l)===0){var i=o.memoizedProps;if(n=n.compare,n=n!==null?n:dr,n(i,r)&&e.ref===t.ref)return it(e,t,l)}return t.flags|=1,e=Ct(o,r),e.ref=t.ref,e.return=t,t.child=e}function Lc(e,t,n,r,l){if(e!==null){var o=e.memoizedProps;if(dr(o,r)&&e.ref===t.ref)if(de=!1,t.pendingProps=r=o,(e.lanes&l)!==0)(e.flags&131072)!==0&&(de=!0);else return t.lanes=e.lanes,it(e,t,l)}return gi(e,t,n,r,l)}function Oc(e,t,n){var r=t.pendingProps,l=r.children,o=e!==null?e.memoizedState:null;if(r.mode==="hidden")if((t.mode&1)===0)t.memoizedState={baseLanes:0,cachePool:null,transitions:null},D(dn,he),he|=n;else{if((n&1073741824)===0)return e=o!==null?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,D(dn,he),he|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=o!==null?o.baseLanes:n,D(dn,he),he|=r}else o!==null?(r=o.baseLanes|n,t.memoizedState=null):r=n,D(dn,he),he|=r;return se(e,t,l,n),t.child}function Mc(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function gi(e,t,n,r,l){var o=me(n)?Bt:oe.current;return o=wn(t,o),gn(t,l),n=lu(e,t,n,r,o,l),r=ou(),e!==null&&!de?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,it(e,t,l)):(U&&r&&Ki(t),t.flags|=1,se(e,t,n,l),t.child)}function $s(e,t,n,r,l){if(me(n)){var o=!0;El(t)}else o=!1;if(gn(t,l),t.stateNode===null)ul(e,t),Nc(t,n,r),vi(t,n,r,l),r=!0;else if(e===null){var i=t.stateNode,u=t.memoizedProps;i.props=u;var s=i.context,c=n.contextType;typeof c=="object"&&c!==null?c=Oe(c):(c=me(n)?Bt:oe.current,c=wn(t,c));var p=n.getDerivedStateFromProps,m=typeof p=="function"||typeof i.getSnapshotBeforeUpdate=="function";m||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(u!==r||s!==c)&&Fs(t,i,r,c),dt=!1;var v=t.memoizedState;i.state=v,Nl(t,r,i,l),s=t.memoizedState,u!==r||v!==s||pe.current||dt?(typeof p=="function"&&(mi(t,n,p,r),s=t.memoizedState),(u=dt||Us(t,n,u,r,v,s,c))?(m||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount=="function"&&(t.flags|=4194308)):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=c,r=u):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,oc(e,t),u=t.memoizedProps,c=t.type===t.elementType?u:Ae(t.type,u),i.props=c,m=t.pendingProps,v=i.context,s=n.contextType,typeof s=="object"&&s!==null?s=Oe(s):(s=me(n)?Bt:oe.current,s=wn(t,s));var S=n.getDerivedStateFromProps;(p=typeof S=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(u!==m||v!==s)&&Fs(t,i,r,s),dt=!1,v=t.memoizedState,i.state=v,Nl(t,r,i,l);var y=t.memoizedState;u!==m||v!==y||pe.current||dt?(typeof S=="function"&&(mi(t,n,S,r),y=t.memoizedState),(c=dt||Us(t,n,c,r,v,y,s)||!1)?(p||typeof i.UNSAFE_componentWillUpdate!="function"&&typeof i.componentWillUpdate!="function"||(typeof i.componentWillUpdate=="function"&&i.componentWillUpdate(r,y,s),typeof i.UNSAFE_componentWillUpdate=="function"&&i.UNSAFE_componentWillUpdate(r,y,s)),typeof i.componentDidUpdate=="function"&&(t.flags|=4),typeof i.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof i.componentDidUpdate!="function"||u===e.memoizedProps&&v===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||u===e.memoizedProps&&v===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=y),i.props=r,i.state=y,i.context=s,r=c):(typeof i.componentDidUpdate!="function"||u===e.memoizedProps&&v===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||u===e.memoizedProps&&v===e.memoizedState||(t.flags|=1024),r=!1)}return yi(e,t,n,r,o,l)}function yi(e,t,n,r,l,o){Mc(e,t);var i=(t.flags&128)!==0;if(!r&&!i)return l&&Ls(t,n,!1),it(e,t,o);r=t.stateNode,Mp.current=t;var u=i&&typeof n.getDerivedStateFromError!="function"?null:r.render();return t.flags|=1,e!==null&&i?(t.child=kn(t,e.child,null,o),t.child=kn(t,null,u,o)):se(e,t,u,o),t.memoizedState=r.state,l&&Ls(t,n,!0),t.child}function Rc(e){var t=e.stateNode;t.pendingContext?Ps(e,t.pendingContext,t.pendingContext!==t.context):t.context&&Ps(e,t.context,!1),eu(e,t.containerInfo)}function Qs(e,t,n,r,l){return En(),Yi(l),t.flags|=256,se(e,t,n,r),t.child}var Si={dehydrated:null,treeContext:null,retryLane:0};function wi(e){return{baseLanes:e,cachePool:null,transitions:null}}function zc(e,t,n){var r=t.pendingProps,l=F.current,o=!1,i=(t.flags&128)!==0,u;if((u=i)||(u=e!==null&&e.memoizedState===null?!1:(l&2)!==0),u?(o=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(l|=1),D(F,l&1),e===null)return di(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?((t.mode&1)===0?t.lanes=1:e.data==="$!"?t.lanes=8:t.lanes=1073741824,null):(i=r.children,e=r.fallback,o?(r=t.mode,o=t.child,i={mode:"hidden",children:i},(r&1)===0&&o!==null?(o.childLanes=0,o.pendingProps=i):o=Ql(i,r,0,null),e=Vt(e,r,n,null),o.return=t,e.return=t,o.sibling=e,t.child=o,t.child.memoizedState=wi(n),t.memoizedState=Si,e):su(t,i));if(l=e.memoizedState,l!==null&&(u=l.dehydrated,u!==null))return Rp(e,t,i,r,u,l,n);if(o){o=r.fallback,i=t.mode,l=e.child,u=l.sibling;var s={mode:"hidden",children:r.children};return(i&1)===0&&t.child!==l?(r=t.child,r.childLanes=0,r.pendingProps=s,t.deletions=null):(r=Ct(l,s),r.subtreeFlags=l.subtreeFlags&14680064),u!==null?o=Ct(u,o):(o=Vt(o,i,n,null),o.flags|=2),o.return=t,r.return=t,r.sibling=o,t.child=r,r=o,o=t.child,i=e.child.memoizedState,i=i===null?wi(n):{baseLanes:i.baseLanes|n,cachePool:null,transitions:i.transitions},o.memoizedState=i,o.childLanes=e.childLanes&~n,t.memoizedState=Si,r}return o=e.child,e=o.sibling,r=Ct(o,{mode:"visible",children:r.children}),(t.mode&1)===0&&(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 su(e,t){return t=Ql({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function qr(e,t,n,r){return r!==null&&Yi(r),kn(t,e.child,null,n),e=su(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Rp(e,t,n,r,l,o,i){if(n)return t.flags&256?(t.flags&=-257,r=Do(Error(g(422))),qr(e,t,i,r)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(o=r.fallback,l=t.mode,r=Ql({mode:"visible",children:r.children},l,0,null),o=Vt(o,l,i,null),o.flags|=2,r.return=t,o.return=t,r.sibling=o,t.child=r,(t.mode&1)!==0&&kn(t,e.child,null,i),t.child.memoizedState=wi(i),t.memoizedState=Si,o);if((t.mode&1)===0)return qr(e,t,i,null);if(l.data==="$!"){if(r=l.nextSibling&&l.nextSibling.dataset,r)var u=r.dgst;return r=u,o=Error(g(419)),r=Do(o,r,void 0),qr(e,t,i,r)}if(u=(i&e.childLanes)!==0,de||u){if(r=J,r!==null){switch(i&-i){case 4:l=2;break;case 16:l=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:l=32;break;case 536870912:l=268435456;break;default:l=0}l=(l&(r.suspendedLanes|i))!==0?0:l,l!==0&&l!==o.retryLane&&(o.retryLane=l,ot(e,l),Ve(r,e,l,-1))}return mu(),r=Do(Error(g(421))),qr(e,t,i,r)}return l.data==="$?"?(t.flags|=128,t.child=e.child,t=Qp.bind(null,e),l._reactRetry=t,null):(e=o.treeContext,ge=wt(l.nextSibling),ye=t,U=!0,Fe=null,e!==null&&(Ne[Te++]=et,Ne[Te++]=tt,Ne[Te++]=Ht,et=e.id,tt=e.overflow,Ht=t),t=su(t,r.children),t.flags|=4096,t)}function Ks(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),pi(e.return,t,n)}function Io(e,t,n,r,l){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:l}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=l)}function Dc(e,t,n){var r=t.pendingProps,l=r.revealOrder,o=r.tail;if(se(e,t,r.children,n),r=F.current,(r&2)!==0)r=r&1|2,t.flags|=128;else{if(e!==null&&(e.flags&128)!==0)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Ks(e,n,t);else if(e.tag===19)Ks(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(D(F,r),(t.mode&1)===0)t.memoizedState=null;else switch(l){case"forwards":for(n=t.child,l=null;n!==null;)e=n.alternate,e!==null&&Tl(e)===null&&(l=n),n=n.sibling;n=l,n===null?(l=t.child,t.child=null):(l=n.sibling,n.sibling=null),Io(t,!1,l,n,o);break;case"backwards":for(n=null,l=t.child,t.child=null;l!==null;){if(e=l.alternate,e!==null&&Tl(e)===null){t.child=l;break}e=l.sibling,l.sibling=n,n=l,l=e}Io(t,!0,n,null,o);break;case"together":Io(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function ul(e,t){(t.mode&1)===0&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function it(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),$t|=t.lanes,(n&t.childLanes)===0)return null;if(e!==null&&t.child!==e.child)throw Error(g(153));if(t.child!==null){for(e=t.child,n=Ct(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=Ct(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function zp(e,t,n){switch(t.tag){case 3:Rc(t),En();break;case 5:ic(t);break;case 1:me(t.type)&&El(t);break;case 4:eu(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,l=t.memoizedProps.value;D(Cl,r._currentValue),r._currentValue=l;break;case 13:if(r=t.memoizedState,r!==null)return r.dehydrated!==null?(D(F,F.current&1),t.flags|=128,null):(n&t.child.childLanes)!==0?zc(e,t,n):(D(F,F.current&1),e=it(e,t,n),e!==null?e.sibling:null);D(F,F.current&1);break;case 19:if(r=(n&t.childLanes)!==0,(e.flags&128)!==0){if(r)return Dc(e,t,n);t.flags|=128}if(l=t.memoizedState,l!==null&&(l.rendering=null,l.tail=null,l.lastEffect=null),D(F,F.current),r)break;return null;case 22:case 23:return t.lanes=0,Oc(e,t,n)}return it(e,t,n)}var Ic,Ei,Ac,Uc;Ic=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}};Ei=function(){};Ac=function(e,t,n,r){var l=e.memoizedProps;if(l!==r){e=t.stateNode,Ft(Ze.current);var o=null;switch(n){case"input":l=Wo(e,l),r=Wo(e,r),o=[];break;case"select":l=V({},l,{value:void 0}),r=V({},r,{value:void 0}),o=[];break;case"textarea":l=Ko(e,l),r=Ko(e,r),o=[];break;default:typeof l.onClick!="function"&&typeof r.onClick=="function"&&(e.onclick=Sl)}Yo(n,r);var i;n=null;for(c in l)if(!r.hasOwnProperty(c)&&l.hasOwnProperty(c)&&l[c]!=null)if(c==="style"){var u=l[c];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else c!=="dangerouslySetInnerHTML"&&c!=="children"&&c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&c!=="autoFocus"&&(or.hasOwnProperty(c)?o||(o=[]):(o=o||[]).push(c,null));for(c in r){var s=r[c];if(u=l?.[c],r.hasOwnProperty(c)&&s!==u&&(s!=null||u!=null))if(c==="style")if(u){for(i in u)!u.hasOwnProperty(i)||s&&s.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in s)s.hasOwnProperty(i)&&u[i]!==s[i]&&(n||(n={}),n[i]=s[i])}else n||(o||(o=[]),o.push(c,n)),n=s;else c==="dangerouslySetInnerHTML"?(s=s?s.__html:void 0,u=u?u.__html:void 0,s!=null&&u!==s&&(o=o||[]).push(c,s)):c==="children"?typeof s!="string"&&typeof s!="number"||(o=o||[]).push(c,""+s):c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&(or.hasOwnProperty(c)?(s!=null&&c==="onScroll"&&I("scroll",e),o||u===s||(o=[])):(o=o||[]).push(c,s))}n&&(o=o||[]).push("style",n);var c=o;(t.updateQueue=c)&&(t.flags|=4)}};Uc=function(e,t,n,r){n!==r&&(t.flags|=4)};function Wn(e,t){if(!U)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 re(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var l=e.child;l!==null;)n|=l.lanes|l.childLanes,r|=l.subtreeFlags&14680064,r|=l.flags&14680064,l.return=e,l=l.sibling;else for(l=e.child;l!==null;)n|=l.lanes|l.childLanes,r|=l.subtreeFlags,r|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Dp(e,t,n){var r=t.pendingProps;switch(Gi(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return re(t),null;case 1:return me(t.type)&&wl(),re(t),null;case 3:return r=t.stateNode,_n(),A(pe),A(oe),nu(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(e===null||e.child===null)&&(Zr(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&(t.flags&256)===0||(t.flags|=1024,Fe!==null&&(Li(Fe),Fe=null))),Ei(e,t),re(t),null;case 5:tu(t);var l=Ft(gr.current);if(n=t.type,e!==null&&t.stateNode!=null)Ac(e,t,n,r,l),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(t.stateNode===null)throw Error(g(166));return re(t),null}if(e=Ft(Ze.current),Zr(t)){r=t.stateNode,n=t.type;var o=t.memoizedProps;switch(r[Ye]=t,r[vr]=o,e=(t.mode&1)!==0,n){case"dialog":I("cancel",r),I("close",r);break;case"iframe":case"object":case"embed":I("load",r);break;case"video":case"audio":for(l=0;l<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[Ye]=t,e[vr]=r,Ic(e,t,!1,!1),t.stateNode=e;e:{switch(i=Xo(n,r),n){case"dialog":I("cancel",e),I("close",e),l=r;break;case"iframe":case"object":case"embed":I("load",e),l=r;break;case"video":case"audio":for(l=0;lxn&&(t.flags|=128,r=!0,Wn(o,!1),t.lanes=4194304)}else{if(!r)if(e=Tl(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Wn(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!U)return re(t),null}else 2*W()-o.renderingStartTime>xn&&n!==1073741824&&(t.flags|=128,r=!0,Wn(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=W(),t.sibling=null,n=F.current,D(F,r?n&1|2:n&1),t):(re(t),null);case 22:case 23:return pu(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&(t.mode&1)!==0?(he&1073741824)!==0&&(re(t),t.subtreeFlags&6&&(t.flags|=8192)):re(t),null;case 24:return null;case 25:return null}throw Error(g(156,t.tag))}function Ip(e,t){switch(Gi(t),t.tag){case 1:return me(t.type)&&wl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return _n(),A(pe),A(oe),nu(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return tu(t),null;case 13:if(A(F),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(g(340));En()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return A(F),null;case 4:return _n(),null;case 10:return Ji(t.type._context),null;case 22:case 23:return pu(),null;case 24:return null;default:return null}}var br=!1,le=!1,Ap=typeof WeakSet=="function"?WeakSet:Set,E=null;function fn(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){H(e,t,r)}else n.current=null}function ki(e,t,n){try{n()}catch(r){H(e,t,r)}}var Gs=!1;function Up(e,t){if(oi=hl,e=Ha(),Qi(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,u=-1,s=-1,c=0,p=0,m=e,v=null;t:for(;;){for(var S;m!==n||l!==0&&m.nodeType!==3||(u=i+l),m!==o||r!==0&&m.nodeType!==3||(s=i+r),m.nodeType===3&&(i+=m.nodeValue.length),(S=m.firstChild)!==null;)v=m,m=S;for(;;){if(m===e)break t;if(v===n&&++c===l&&(u=i),v===o&&++p===r&&(s=i),(S=m.nextSibling)!==null)break;m=v,v=m.parentNode}m=S}n=u===-1||s===-1?null:{start:u,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(ii={focusedElem:e,selectionRange:n},hl=!1,E=t;E!==null;)if(t=E,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,E=e;else for(;E!==null;){t=E;try{var y=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(y!==null){var w=y.memoizedProps,R=y.memoizedState,f=t.stateNode,a=f.getSnapshotBeforeUpdate(t.elementType===t.type?w:Ae(t.type,w),R);f.__reactInternalSnapshotBeforeUpdate=a}break;case 3:var d=t.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(g(163))}}catch(h){H(t,t.return,h)}if(e=t.sibling,e!==null){e.return=t.return,E=e;break}E=t.return}return y=Gs,Gs=!1,y}function nr(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&ki(t,n,o)}l=l.next}while(l!==r)}}function Wl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,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 _i(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 Fc(e){var t=e.alternate;t!==null&&(e.alternate=null,Fc(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ye],delete t[vr],delete t[ai],delete t[Sp],delete t[wp])),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 jc(e){return e.tag===5||e.tag===3||e.tag===4}function Ys(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||jc(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 e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Ci(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=Sl));else if(r!==4&&(e=e.child,e!==null))for(Ci(e,t,n),e=e.sibling;e!==null;)Ci(e,t,n),e=e.sibling}function xi(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(xi(e,t,n),e=e.sibling;e!==null;)xi(e,t,n),e=e.sibling}var q=null,Ue=!1;function ct(e,t,n){for(n=n.child;n!==null;)Vc(e,t,n),n=n.sibling}function Vc(e,t,n){if(Xe&&typeof Xe.onCommitFiberUnmount=="function")try{Xe.onCommitFiberUnmount(Il,n)}catch{}switch(n.tag){case 5:le||fn(n,t);case 6:var r=q,l=Ue;q=null,ct(e,t,n),q=r,Ue=l,q!==null&&(Ue?(e=q,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):q.removeChild(n.stateNode));break;case 18:q!==null&&(Ue?(e=q,n=n.stateNode,e.nodeType===8?Po(e.parentNode,n):e.nodeType===1&&Po(e,n),cr(e)):Po(q,n.stateNode));break;case 4:r=q,l=Ue,q=n.stateNode.containerInfo,Ue=!0,ct(e,t,n),q=r,Ue=l;break;case 0:case 11:case 14:case 15:if(!le&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,i=o.destroy;o=o.tag,i!==void 0&&((o&2)!==0||(o&4)!==0)&&ki(n,t,i),l=l.next}while(l!==r)}ct(e,t,n);break;case 1:if(!le&&(fn(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(u){H(n,t,u)}ct(e,t,n);break;case 21:ct(e,t,n);break;case 22:n.mode&1?(le=(r=le)||n.memoizedState!==null,ct(e,t,n),le=r):ct(e,t,n);break;default:ct(e,t,n)}}function Xs(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Ap),t.forEach(function(r){var l=Kp.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function Ie(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=i),r&=~o}if(r=l,r=W()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*jp(r/1960))-r,10e?16:e,ht===null)var r=!1;else{if(e=ht,ht=null,Rl=0,(L&6)!==0)throw Error(g(331));var l=L;for(L|=4,E=e.current;E!==null;){var o=E,i=o.child;if((E.flags&16)!==0){var u=o.deletions;if(u!==null){for(var s=0;sW()-fu?jt(e,0):cu|=n),ve(e,t)}function Yc(e,t){t===0&&((e.mode&1)===0?t=1:(t=Vr,Vr<<=1,(Vr&130023424)===0&&(Vr=4194304)));var n=ae();e=ot(e,t),e!==null&&(kr(e,t,n),ve(e,n))}function Qp(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Yc(e,n)}function Kp(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(g(314))}r!==null&&r.delete(t),Yc(e,n)}var Xc;Xc=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||pe.current)de=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return de=!1,zp(e,t,n);de=(e.flags&131072)!==0}else de=!1,U&&(t.flags&1048576)!==0&&ba(t,_l,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;ul(e,t),e=t.pendingProps;var l=wn(t,oe.current);gn(t,n),l=lu(null,t,r,e,l,n);var o=ou();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,me(r)?(o=!0,El(t)):o=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,bi(t),l.updater=Hl,t.stateNode=l,l._reactInternals=t,vi(t,r,e,n),t=yi(null,t,r,!0,o,n)):(t.tag=0,U&&o&&Ki(t),se(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(ul(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=Yp(r),e=Ae(r,e),l){case 0:t=gi(null,t,r,e,n);break e;case 1:t=$s(null,t,r,e,n);break e;case 11:t=Hs(null,t,r,e,n);break e;case 14:t=Ws(null,t,r,Ae(r.type,e),n);break e}throw Error(g(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ae(r,l),gi(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ae(r,l),$s(e,t,r,l,n);case 3:e:{if(Rc(t),e===null)throw Error(g(387));r=t.pendingProps,o=t.memoizedState,l=o.element,oc(e,t),Nl(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){l=Cn(Error(g(423)),t),t=Qs(e,t,r,n,l);break e}else if(r!==l){l=Cn(Error(g(424)),t),t=Qs(e,t,r,n,l);break e}else for(ge=wt(t.stateNode.containerInfo.firstChild),ye=t,U=!0,Fe=null,n=rc(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(En(),r===l){t=it(e,t,n);break e}se(e,t,r,n)}t=t.child}return t;case 5:return ic(t),e===null&&di(t),r=t.type,l=t.pendingProps,o=e!==null?e.memoizedProps:null,i=l.children,ui(r,l)?i=null:o!==null&&ui(r,o)&&(t.flags|=32),Mc(e,t),se(e,t,i,n),t.child;case 6:return e===null&&di(t),null;case 13:return zc(e,t,n);case 4:return eu(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=kn(t,null,r,n):se(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ae(r,l),Hs(e,t,r,l,n);case 7:return se(e,t,t.pendingProps,n),t.child;case 8:return se(e,t,t.pendingProps.children,n),t.child;case 12:return se(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,o=t.memoizedProps,i=l.value,D(Cl,r._currentValue),r._currentValue=i,o!==null)if(Be(o.value,i)){if(o.children===l.children&&!pe.current){t=it(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var u=o.dependencies;if(u!==null){i=o.child;for(var s=u.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=nt(-1,n&-n),s.tag=2;var c=o.updateQueue;if(c!==null){c=c.shared;var p=c.pending;p===null?s.next=s:(s.next=p.next,p.next=s),c.pending=s}}o.lanes|=n,s=o.alternate,s!==null&&(s.lanes|=n),pi(o.return,n,t),u.lanes|=n;break}s=s.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(g(341));i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),pi(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}se(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,gn(t,n),l=Oe(l),r=r(l),t.flags|=1,se(e,t,r,n),t.child;case 14:return r=t.type,l=Ae(r,t.pendingProps),l=Ae(r.type,l),Ws(e,t,r,l,n);case 15:return Lc(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ae(r,l),ul(e,t),t.tag=1,me(r)?(e=!0,El(t)):e=!1,gn(t,n),Nc(t,r,l),vi(t,r,l,n),yi(null,t,r,!0,e,n);case 19:return Dc(e,t,n);case 22:return Oc(e,t,n)}throw Error(g(156,t.tag))};function Zc(e,t){return _a(e,t)}function Gp(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 Pe(e,t,n,r){return new Gp(e,t,n,r)}function vu(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Yp(e){if(typeof e=="function")return vu(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Di)return 11;if(e===Ii)return 14}return 2}function Ct(e,t){var n=e.alternate;return n===null?(n=Pe(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 cl(e,t,n,r,l,o){var i=2;if(r=e,typeof e=="function")vu(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case tn:return Vt(n.children,l,o,t);case zi:i=8,l|=8;break;case jo:return e=Pe(12,n,t,l|2),e.elementType=jo,e.lanes=o,e;case Vo:return e=Pe(13,n,t,l),e.elementType=Vo,e.lanes=o,e;case Bo:return e=Pe(19,n,t,l),e.elementType=Bo,e.lanes=o,e;case ia:return Ql(n,l,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case la:i=10;break e;case oa:i=9;break e;case Di:i=11;break e;case Ii:i=14;break e;case ft:i=16,r=null;break e}throw Error(g(130,e==null?e:typeof e,""))}return t=Pe(i,n,t,l),t.elementType=e,t.type=r,t.lanes=o,t}function Vt(e,t,n,r){return e=Pe(7,e,r,t),e.lanes=n,e}function Ql(e,t,n,r){return e=Pe(22,e,r,t),e.elementType=ia,e.lanes=n,e.stateNode={isHidden:!1},e}function Ao(e,t,n){return e=Pe(6,e,null,t),e.lanes=n,e}function Uo(e,t,n){return t=Pe(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xp(e,t,n,r,l){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=wo(0),this.expirationTimes=wo(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=wo(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function hu(e,t,n,r,l,o,i,u,s){return e=new Xp(e,t,n,u,s),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Pe(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},bi(o),e}function Zp(e,t,n){var r=3{"use strict";function tf(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(tf)}catch(e){console.error(e)}}tf(),nf.exports=ef()});var of=Je(wu=>{"use strict";var lf=rf();wu.createRoot=lf.createRoot,wu.hydrateRoot=lf.hydrateRoot;var hm});var sf=Je(Zl=>{"use strict";var tm=Ce(),nm=Symbol.for("react.element"),rm=Symbol.for("react.fragment"),lm=Object.prototype.hasOwnProperty,om=tm.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,im={key:!0,ref:!0,__self:!0,__source:!0};function uf(e,t,n){var r,l={},o=null,i=null;n!==void 0&&(o=""+n),t.key!==void 0&&(o=""+t.key),t.ref!==void 0&&(i=t.ref);for(r in t)lm.call(t,r)&&!im.hasOwnProperty(r)&&(l[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)l[r]===void 0&&(l[r]=t[r]);return{$$typeof:nm,type:e,key:o,ref:i,props:l,_owner:om.current}}Zl.Fragment=rm;Zl.jsx=uf;Zl.jsxs=uf});var B=Je((Sm,af)=>{"use strict";af.exports=sf()});var Of=O(of(),1);var ie=O(Ce(),1);var X=O(B(),1);function cf({preference:e,onThemeChange:t}){let n=()=>{let o=["system","light","dark"],u=(o.indexOf(e)+1)%o.length;t(o[u])},r=()=>{switch(e){case"light":return(0,X.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,X.jsx)("circle",{cx:"12",cy:"12",r:"5"}),(0,X.jsx)("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),(0,X.jsx)("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),(0,X.jsx)("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),(0,X.jsx)("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"}),(0,X.jsx)("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),(0,X.jsx)("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),(0,X.jsx)("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),(0,X.jsx)("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"})]});case"dark":return(0,X.jsx)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,X.jsx)("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"})});case"system":default:return(0,X.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,X.jsx)("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"}),(0,X.jsx)("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),(0,X.jsx)("line",{x1:"12",y1:"17",x2:"12",y2:"21"})]})}},l=()=>{switch(e){case"light":return"Theme: Light (click for Dark)";case"dark":return"Theme: Dark (click for System)";case"system":default:return"Theme: System (click for Light)"}};return(0,X.jsx)("button",{className:"theme-toggle-btn",onClick:n,title:l(),"aria-label":l(),children:r()})}var $=O(B(),1);function ff({isConnected:e,projects:t,currentFilter:n,onFilterChange:r,onSettingsToggle:l,sidebarOpen:o,isProcessing:i,themePreference:u,onThemeChange:s}){return(0,$.jsxs)("div",{className:"header",children:[(0,$.jsxs)("h1",{children:[(0,$.jsx)("img",{src:"claude-mem-logomark.webp",alt:"",className:`logomark ${i?"spinning":""}`}),(0,$.jsx)("span",{className:"logo-text",children:"claude-mem"})]}),(0,$.jsxs)("div",{className:"status",children:[(0,$.jsx)("a",{href:"https://github.com/thedotmack/claude-mem/",target:"_blank",rel:"noopener noreferrer",title:"GitHub",style:{display:"block",padding:"8px 4px 8px 8px",color:"#a0a0a0",transition:"color 0.2s",lineHeight:0},onMouseEnter:c=>c.currentTarget.style.color="#ffffff",onMouseLeave:c=>c.currentTarget.style.color="#a0a0a0",children:(0,$.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",children:(0,$.jsx)("path",{d:"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"})})}),(0,$.jsx)("a",{href:"https://x.com/Claude_Memory",target:"_blank",rel:"noopener noreferrer",title:"X (Twitter)",style:{display:"block",padding:"8px 8px 8px 4px",color:"#a0a0a0",transition:"color 0.2s",lineHeight:0},onMouseEnter:c=>c.currentTarget.style.color="#ffffff",onMouseLeave:c=>c.currentTarget.style.color="#a0a0a0",children:(0,$.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",children:(0,$.jsx)("path",{d:"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"})})}),(0,$.jsxs)("select",{value:n,onChange:c=>r(c.target.value),children:[(0,$.jsx)("option",{value:"",children:"All Projects"}),t.map(c=>(0,$.jsx)("option",{value:c,children:c},c))]}),(0,$.jsx)(cf,{preference:u,onThemeChange:s}),(0,$.jsx)("button",{className:`settings-btn ${o?"active":""}`,onClick:l,title:"Settings",children:(0,$.jsxs)("svg",{className:"settings-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,$.jsx)("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"}),(0,$.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})})]})]})}var Mt=O(Ce(),1);function Pn(e){return new Date(e).toLocaleString()}function df(e){if(!e)return"-";let t=Math.floor(e/3600),n=Math.floor(e%3600/60);return`${t}h ${n}m`}function pf(e){return e?e<1024?e+" B":e<1024*1024?(e/1024).toFixed(1)+" KB":(e/(1024*1024)).toFixed(1)+" MB":"-"}var st=O(B(),1);function mf({observation:e}){let t=Pn(e.created_at_epoch);return(0,st.jsxs)("div",{className:"card",children:[(0,st.jsxs)("div",{className:"card-header",children:[(0,st.jsx)("span",{className:"card-type",children:e.type}),(0,st.jsx)("span",{children:e.project})]}),(0,st.jsx)("div",{className:"card-title",children:e.title||"Untitled"}),e.subtitle&&(0,st.jsx)("div",{className:"card-subtitle",children:e.subtitle}),(0,st.jsxs)("div",{className:"card-meta",children:["#",e.id," \u2022 ",t]})]})}var He=O(B(),1);function vf({summary:e}){let t=Pn(e.created_at_epoch);return(0,He.jsxs)("div",{className:"card summary-card",children:[(0,He.jsxs)("div",{className:"card-header",children:[(0,He.jsx)("span",{className:"card-type",children:"SUMMARY"}),(0,He.jsx)("span",{children:e.project})]}),e.request&&(0,He.jsxs)("div",{className:"card-title",children:["Request: ",e.request]}),e.learned&&(0,He.jsxs)("div",{className:"card-subtitle",children:["Learned: ",e.learned]}),e.completed&&(0,He.jsxs)("div",{className:"card-subtitle",children:["Completed: ",e.completed]}),e.next_steps&&(0,He.jsxs)("div",{className:"card-subtitle",children:["Next: ",e.next_steps]}),(0,He.jsxs)("div",{className:"card-meta",children:["#",e.id," \u2022 ",t]})]})}var ke=O(B(),1);function hf({sessionId:e,project:t}){return(0,ke.jsxs)("div",{className:"card summary-card summary-skeleton",children:[(0,ke.jsxs)("div",{className:"card-header",children:[(0,ke.jsx)("span",{className:"card-type",children:"SUMMARY"}),t&&(0,ke.jsx)("span",{children:t}),(0,ke.jsxs)("div",{className:"processing-indicator",children:[(0,ke.jsx)("div",{className:"spinner"}),(0,ke.jsx)("span",{children:"Generating..."})]})]}),(0,ke.jsx)("div",{className:"skeleton-line skeleton-title"}),(0,ke.jsx)("div",{className:"skeleton-line skeleton-subtitle"}),(0,ke.jsx)("div",{className:"skeleton-line skeleton-subtitle short"}),(0,ke.jsxs)("div",{className:"card-meta",children:["Session: ",e]})]})}var Ot=O(B(),1);function gf({prompt:e}){return(0,Ot.jsxs)("div",{className:"card prompt-card",children:[(0,Ot.jsxs)("div",{className:"card-header",children:[(0,Ot.jsx)("span",{className:"card-type",children:"Prompt"}),(0,Ot.jsx)("span",{children:e.project})]}),(0,Ot.jsx)("div",{className:"card-content",children:e.prompt_text}),(0,Ot.jsx)("div",{className:"card-meta",children:Pn(e.created_at_epoch)})]})}var Nr={PAGINATION_PAGE_SIZE:50,LOAD_MORE_THRESHOLD:.1};var _e=O(B(),1);function yf({observations:e,summaries:t,prompts:n,processingSessions:r,onLoadMore:l,isLoading:o,hasMore:i}){let u=(0,Mt.useRef)(null),s=(0,Mt.useRef)(l);(0,Mt.useEffect)(()=>{s.current=l},[l]),(0,Mt.useEffect)(()=>{let p=u.current;if(!p)return;let m=new IntersectionObserver(v=>{v[0].isIntersecting&&i&&!o&&s.current?.()},{threshold:Nr.LOAD_MORE_THRESHOLD});return m.observe(p),()=>{p&&m.unobserve(p),m.disconnect()}},[i,o]);let c=(0,Mt.useMemo)(()=>{let p=new Set(t.map(y=>y.session_id)),m=new Map;n.forEach(y=>{let w=m.get(y.claude_session_id);(!w||y.created_at_epoch>w.created_at_epoch)&&m.set(y.claude_session_id,y)});let v=[];return r.forEach(y=>{if(!p.has(y)){let w=m.get(y);v.push({itemType:"skeleton",id:y,session_id:y,project:w?.project,created_at_epoch:Date.now()})}}),[...e.map(y=>({...y,itemType:"observation"})),...t.map(y=>({...y,itemType:"summary"})),...n.map(y=>({...y,itemType:"prompt"})),...v].sort((y,w)=>w.created_at_epoch-y.created_at_epoch)},[e,t,n,r]);return(0,_e.jsx)("div",{className:"feed",children:(0,_e.jsxs)("div",{className:"feed-content",children:[c.map(p=>{let m=`${p.itemType}-${p.id}`;return p.itemType==="observation"?(0,_e.jsx)(mf,{observation:p},m):p.itemType==="summary"?(0,_e.jsx)(vf,{summary:p},m):p.itemType==="skeleton"?(0,_e.jsx)(hf,{sessionId:p.session_id,project:p.project},m):(0,_e.jsx)(gf,{prompt:p},m)}),c.length===0&&!o&&(0,_e.jsx)("div",{style:{textAlign:"center",padding:"40px",color:"#8b949e"},children:"No items to display"}),o&&(0,_e.jsxs)("div",{style:{textAlign:"center",padding:"20px",color:"#8b949e"},children:[(0,_e.jsx)("div",{className:"spinner",style:{display:"inline-block",marginRight:"10px"}}),"Loading more..."]}),i&&!o&&c.length>0&&(0,_e.jsx)("div",{ref:u,style:{height:"20px",margin:"10px 0"}}),!i&&c.length>0&&(0,_e.jsx)("div",{style:{textAlign:"center",padding:"20px",color:"#8b949e",fontSize:"14px"},children:"No more items to load"})]})})}var Ln=O(Ce(),1);var Re={CLAUDE_MEM_MODEL:"claude-haiku-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777"};var k=O(B(),1);function Sf({isOpen:e,settings:t,stats:n,isSaving:r,saveStatus:l,isConnected:o,onSave:i,onClose:u}){let[s,c]=(0,Ln.useState)(t.CLAUDE_MEM_MODEL||Re.CLAUDE_MEM_MODEL),[p,m]=(0,Ln.useState)(t.CLAUDE_MEM_CONTEXT_OBSERVATIONS||Re.CLAUDE_MEM_CONTEXT_OBSERVATIONS),[v,S]=(0,Ln.useState)(t.CLAUDE_MEM_WORKER_PORT||Re.CLAUDE_MEM_WORKER_PORT);return(0,Ln.useEffect)(()=>{c(t.CLAUDE_MEM_MODEL||Re.CLAUDE_MEM_MODEL),m(t.CLAUDE_MEM_CONTEXT_OBSERVATIONS||Re.CLAUDE_MEM_CONTEXT_OBSERVATIONS),S(t.CLAUDE_MEM_WORKER_PORT||Re.CLAUDE_MEM_WORKER_PORT)},[t]),(0,k.jsxs)("div",{className:`sidebar ${e?"open":""}`,children:[(0,k.jsxs)("div",{className:"sidebar-header",children:[(0,k.jsx)("h1",{children:"Settings"}),(0,k.jsxs)("div",{style:{display:"flex",gap:"8px",alignItems:"center"},children:[(0,k.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[(0,k.jsx)("span",{className:`status-dot ${o?"connected":""}`}),(0,k.jsx)("span",{style:{fontSize:"11px",opacity:.5,fontWeight:300},children:o?"Connected":"Disconnected"})]}),(0,k.jsx)("button",{onClick:()=>{i({CLAUDE_MEM_MODEL:s,CLAUDE_MEM_CONTEXT_OBSERVATIONS:p,CLAUDE_MEM_WORKER_PORT:v})},disabled:r,children:r?"Saving...":"Save"}),(0,k.jsx)("button",{onClick:u,title:"Close settings",style:{background:"transparent",border:"1px solid #404040",padding:"8px",width:"36px",height:"36px",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,k.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,k.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,k.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})]}),(0,k.jsxs)("div",{className:"stats-scroll",children:[(0,k.jsxs)("div",{className:"settings-section",children:[(0,k.jsx)("h3",{children:"Environment Variables"}),(0,k.jsxs)("div",{className:"form-group",children:[(0,k.jsx)("label",{htmlFor:"model",children:"CLAUDE_MEM_MODEL"}),(0,k.jsx)("div",{className:"setting-description",children:"Model used for AI compression of tool observations. Haiku is fast and cheap, Sonnet offers better quality, Opus is most capable but expensive."}),(0,k.jsxs)("select",{id:"model",value:s,onChange:w=>c(w.target.value),children:[(0,k.jsx)("option",{value:"claude-haiku-4-5",children:"claude-haiku-4-5"}),(0,k.jsx)("option",{value:"claude-sonnet-4-5",children:"claude-sonnet-4-5"}),(0,k.jsx)("option",{value:"claude-opus-4",children:"claude-opus-4"})]})]}),(0,k.jsxs)("div",{className:"form-group",children:[(0,k.jsx)("label",{htmlFor:"contextObs",children:"CLAUDE_MEM_CONTEXT_OBSERVATIONS"}),(0,k.jsx)("div",{className:"setting-description",children:"Number of recent observations to inject at session start. Higher values provide more context but increase token usage. Default: 50"}),(0,k.jsx)("input",{type:"number",id:"contextObs",min:"1",max:"200",value:p,onChange:w=>m(w.target.value)})]}),(0,k.jsxs)("div",{className:"form-group",children:[(0,k.jsx)("label",{htmlFor:"workerPort",children:"CLAUDE_MEM_WORKER_PORT"}),(0,k.jsx)("div",{className:"setting-description",children:"Port number for the background worker service. Change only if port 37777 conflicts with another service."}),(0,k.jsx)("input",{type:"number",id:"workerPort",min:"1024",max:"65535",value:v,onChange:w=>S(w.target.value)})]}),l&&(0,k.jsx)("div",{className:"save-status",children:l})]}),(0,k.jsxs)("div",{className:"settings-section",children:[(0,k.jsx)("h3",{children:"Worker Stats"}),(0,k.jsxs)("div",{className:"stats-grid",children:[(0,k.jsxs)("div",{className:"stat",children:[(0,k.jsx)("div",{className:"stat-label",children:"Version"}),(0,k.jsx)("div",{className:"stat-value",children:n.worker?.version||"-"})]}),(0,k.jsxs)("div",{className:"stat",children:[(0,k.jsx)("div",{className:"stat-label",children:"Uptime"}),(0,k.jsx)("div",{className:"stat-value",children:df(n.worker?.uptime)})]}),(0,k.jsxs)("div",{className:"stat",children:[(0,k.jsx)("div",{className:"stat-label",children:"Active Sessions"}),(0,k.jsx)("div",{className:"stat-value",children:n.worker?.activeSessions||"0"})]}),(0,k.jsxs)("div",{className:"stat",children:[(0,k.jsx)("div",{className:"stat-label",children:"SSE Clients"}),(0,k.jsx)("div",{className:"stat-value",children:n.worker?.sseClients||"0"})]})]})]}),(0,k.jsxs)("div",{className:"settings-section",children:[(0,k.jsx)("h3",{children:"Database Stats"}),(0,k.jsxs)("div",{className:"stats-grid",children:[(0,k.jsxs)("div",{className:"stat",children:[(0,k.jsx)("div",{className:"stat-label",children:"DB Size"}),(0,k.jsx)("div",{className:"stat-value",children:pf(n.database?.size)})]}),(0,k.jsxs)("div",{className:"stat",children:[(0,k.jsx)("div",{className:"stat-label",children:"Observations"}),(0,k.jsx)("div",{className:"stat-value",children:n.database?.observations||"0"})]}),(0,k.jsxs)("div",{className:"stat",children:[(0,k.jsx)("div",{className:"stat-label",children:"Sessions"}),(0,k.jsx)("div",{className:"stat-value",children:n.database?.sessions||"0"})]}),(0,k.jsxs)("div",{className:"stat",children:[(0,k.jsx)("div",{className:"stat-label",children:"Summaries"}),(0,k.jsx)("div",{className:"stat-value",children:n.database?.summaries||"0"})]})]})]})]})]})}var ze=O(Ce(),1);var We={OBSERVATIONS:"/api/observations",SUMMARIES:"/api/summaries",PROMPTS:"/api/prompts",SETTINGS:"/api/settings",STATS:"/api/stats",STREAM:"/stream"};var On={SSE_RECONNECT_DELAY_MS:3e3,STATS_REFRESH_INTERVAL_MS:1e4,SAVE_STATUS_DISPLAY_DURATION_MS:3e3};function wf(){let[e,t]=(0,ze.useState)([]),[n,r]=(0,ze.useState)([]),[l,o]=(0,ze.useState)([]),[i,u]=(0,ze.useState)([]),[s,c]=(0,ze.useState)(!1),[p,m]=(0,ze.useState)(new Set),v=(0,ze.useRef)(null),S=(0,ze.useRef)();return(0,ze.useEffect)(()=>{let y=()=>{v.current&&v.current.close();let w=new EventSource(We.STREAM);v.current=w,w.onopen=()=>{console.log("[SSE] Connected"),c(!0),S.current&&clearTimeout(S.current)},w.onerror=R=>{console.error("[SSE] Connection error:",R),c(!1),w.close(),S.current=setTimeout(()=>{S.current=void 0,console.log("[SSE] Attempting to reconnect..."),y()},On.SSE_RECONNECT_DELAY_MS)},w.onmessage=R=>{try{let f=JSON.parse(R.data);switch(f.type){case"initial_load":console.log("[SSE] Initial load:",{projects:f.projects?.length||0}),u(f.projects||[]);break;case"new_observation":f.observation&&(console.log("[SSE] New observation:",f.observation.id),t(a=>[f.observation,...a]));break;case"new_summary":if(f.summary){let a=f.summary;console.log("[SSE] New summary:",a.id),r(d=>[a,...d]),m(d=>{let h=new Set(d);return h.delete(a.session_id),h})}break;case"new_prompt":if(f.prompt){let a=f.prompt;console.log("[SSE] New prompt:",a.id),o(d=>[a,...d])}break;case"processing_status":if(f.processing){let a=f.processing;console.log("[SSE] Processing status:",a),m(d=>{let h=new Set(d);return a.is_processing?h.add(a.session_id):h.delete(a.session_id),h})}break}}catch(f){console.error("[SSE] Failed to parse message:",f)}}};return y(),()=>{v.current&&v.current.close(),S.current&&clearTimeout(S.current)}},[]),{observations:e,summaries:n,prompts:l,projects:i,processingSessions:p,isConnected:s}}var Mn=O(Ce(),1);function Ef(){let[e,t]=(0,Mn.useState)(Re),[n,r]=(0,Mn.useState)(!1),[l,o]=(0,Mn.useState)("");return(0,Mn.useEffect)(()=>{fetch(We.SETTINGS).then(u=>u.json()).then(u=>{t({CLAUDE_MEM_MODEL:u.CLAUDE_MEM_MODEL||Re.CLAUDE_MEM_MODEL,CLAUDE_MEM_CONTEXT_OBSERVATIONS:u.CLAUDE_MEM_CONTEXT_OBSERVATIONS||Re.CLAUDE_MEM_CONTEXT_OBSERVATIONS,CLAUDE_MEM_WORKER_PORT:u.CLAUDE_MEM_WORKER_PORT||Re.CLAUDE_MEM_WORKER_PORT})}).catch(u=>{console.error("Failed to load settings:",u)})},[]),{settings:e,saveSettings:async u=>{r(!0),o("Saving...");try{let c=await(await fetch(We.SETTINGS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)})).json();c.success?(t(u),o("\u2713 Saved"),setTimeout(()=>o(""),On.SAVE_STATUS_DISPLAY_DURATION_MS)):o(`\u2717 Error: ${c.error}`)}catch(s){o(`\u2717 Error: ${s instanceof Error?s.message:"Unknown error"}`)}finally{r(!1)}},isSaving:n,saveStatus:l}}var Jl=O(Ce(),1);function kf(){let[e,t]=(0,Jl.useState)({});return(0,Jl.useEffect)(()=>{let n=async()=>{try{let o=await(await fetch(We.STATS)).json();t(o)}catch(l){console.error("Failed to load stats:",l)}};n();let r=setInterval(n,On.STATS_REFRESH_INTERVAL_MS);return()=>clearInterval(r)},[]),{stats:e}}var Yt=O(Ce(),1);function Eu(e,t,n){let[r,l]=(0,Yt.useState)({isLoading:!1,hasMore:!0}),[o,i]=(0,Yt.useState)(0);(0,Yt.useEffect)(()=>{i(0),l({isLoading:!1,hasMore:!0})},[n]);let u=(0,Yt.useCallback)(async()=>{if(r.isLoading||!r.hasMore)return[];l(s=>({...s,isLoading:!0}));try{let s=new URLSearchParams({offset:o.toString(),limit:Nr.PAGINATION_PAGE_SIZE.toString()});n&&s.append("project",n);let c=await fetch(`${e}?${s}`);if(!c.ok)throw new Error(`Failed to load ${t}: ${c.statusText}`);let p=await c.json();return l(m=>({...m,isLoading:!1,hasMore:p.hasMore})),i(m=>m+Nr.PAGINATION_PAGE_SIZE),p[t]}catch(s){return console.error(`Failed to load ${t}:`,s),l(c=>({...c,isLoading:!1})),[]}},[o,r.hasMore,r.isLoading,n,e,t]);return{...r,loadMore:u}}function _f(e){let t=Eu(We.OBSERVATIONS,"observations",e),n=Eu(We.SUMMARIES,"summaries",e),r=Eu(We.PROMPTS,"prompts",e);return{observations:t,summaries:n,prompts:r}}var Rn=O(Ce(),1),Nf="claude-mem-theme";function um(){return typeof window>"u"||window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function Cf(){try{let e=localStorage.getItem(Nf);if(e==="system"||e==="light"||e==="dark")return e}catch(e){console.warn("Failed to read theme preference from localStorage:",e)}return"system"}function xf(e){return e==="system"?um():e}function Tf(){let[e,t]=(0,Rn.useState)(Cf),[n,r]=(0,Rn.useState)(()=>xf(Cf()));return(0,Rn.useEffect)(()=>{let o=xf(e);r(o),document.documentElement.setAttribute("data-theme",o)},[e]),(0,Rn.useEffect)(()=>{if(e!=="system")return;let o=window.matchMedia("(prefers-color-scheme: dark)"),i=u=>{let s=u.matches?"dark":"light";r(s),document.documentElement.setAttribute("data-theme",s)};return o.addEventListener("change",i),()=>o.removeEventListener("change",i)},[e]),{preference:e,resolvedTheme:n,setThemePreference:o=>{try{localStorage.setItem(Nf,o),t(o)}catch(i){console.warn("Failed to save theme preference to localStorage:",i),t(o)}}}}function ql(e,t,n){let r=n?e.filter(o=>o.project===n):e,l=new Set;return[...r,...t].filter(o=>l.has(o.id)?!1:(l.add(o.id),!0))}var Xt=O(B(),1);function Pf(){let[e,t]=(0,ie.useState)(""),[n,r]=(0,ie.useState)(!1),[l,o]=(0,ie.useState)([]),[i,u]=(0,ie.useState)([]),[s,c]=(0,ie.useState)([]),{observations:p,summaries:m,prompts:v,projects:S,processingSessions:y,isConnected:w}=wf(),{settings:R,saveSettings:f,isSaving:a,saveStatus:d}=Ef(),{stats:h}=kf(),{preference:_,resolvedTheme:N,setThemePreference:x}=Tf(),C=_f(e);(0,ie.useEffect)(()=>{o([]),u([]),c([])},[e]);let Q=(0,ie.useMemo)(()=>ql(p,l,e),[p,l,e]),P=(0,ie.useMemo)(()=>ql(m,i,e),[m,i,e]),$e=(0,ie.useMemo)(()=>ql(v,s,e),[v,s,e]),Tr=(0,ie.useCallback)(()=>{r(Zt=>!Zt)},[]),eo=(0,ie.useCallback)(async()=>{try{let[Zt,_u,Cu]=await Promise.all([C.observations.loadMore(),C.summaries.loadMore(),C.prompts.loadMore()]);Zt.length>0&&o(zn=>[...zn,...Zt]),_u.length>0&&u(zn=>[...zn,..._u]),Cu.length>0&&c(zn=>[...zn,...Cu])}catch(Zt){console.error("Failed to load more data:",Zt)}},[C]);return(0,ie.useEffect)(()=>{eo()},[e,eo]),(0,Xt.jsxs)("div",{className:"container",children:[(0,Xt.jsxs)("div",{className:"main-col",children:[(0,Xt.jsx)(ff,{isConnected:w,projects:S,currentFilter:e,onFilterChange:t,onSettingsToggle:Tr,sidebarOpen:n,isProcessing:y.size>0,themePreference:_,onThemeChange:x}),(0,Xt.jsx)(yf,{observations:Q,summaries:P,prompts:$e,processingSessions:y,onLoadMore:eo,isLoading:C.observations.isLoading||C.summaries.isLoading||C.prompts.isLoading,hasMore:C.observations.hasMore||C.summaries.hasMore||C.prompts.hasMore})]}),(0,Xt.jsx)(Sf,{isOpen:n,settings:R,stats:h,isSaving:a,saveStatus:d,isConnected:w,onSave:f,onClose:Tr})]})}var Lf=O(Ce(),1),Rt=O(B(),1),bl=class extends Lf.Component{constructor(t){super(t),this.state={hasError:!1,error:null,errorInfo:null}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,n){console.error("[ErrorBoundary] Caught error:",t,n),this.setState({error:t,errorInfo:n})}render(){return this.state.hasError?(0,Rt.jsxs)("div",{style:{padding:"20px",color:"#ff6b6b",backgroundColor:"#1a1a1a",minHeight:"100vh"},children:[(0,Rt.jsx)("h1",{style:{fontSize:"24px",marginBottom:"10px"},children:"Something went wrong"}),(0,Rt.jsx)("p",{style:{marginBottom:"10px",color:"#8b949e"},children:"The application encountered an error. Please refresh the page to try again."}),this.state.error&&(0,Rt.jsxs)("details",{style:{marginTop:"20px",color:"#8b949e"},children:[(0,Rt.jsx)("summary",{style:{cursor:"pointer",marginBottom:"10px"},children:"Error details"}),(0,Rt.jsxs)("pre",{style:{backgroundColor:"#0d1117",padding:"10px",borderRadius:"6px",overflow:"auto"},children:[this.state.error.toString(),this.state.errorInfo&&` -`+this.state.errorInfo.componentStack]})]})]}):this.props.children}};var yu=L($(),1),Ef=document.getElementById("root");if(!Ef)throw new Error("Root element not found");var Jp=(0,wf.createRoot)(Ef);Jp.render((0,yu.jsx)(Zl,{children:(0,yu.jsx)(yf,{})}));})(); +`+this.state.errorInfo.componentStack]})]})]}):this.props.children}};var ku=O(B(),1),Mf=document.getElementById("root");if(!Mf)throw new Error("Root element not found");var sm=(0,Of.createRoot)(Mf);sm.render((0,ku.jsx)(bl,{children:(0,ku.jsx)(Pf,{})}));})(); /*! Bundled license information: react/cjs/react.production.min.js: diff --git a/plugin/ui/viewer.html b/plugin/ui/viewer.html index fdc98293..fa9e845c 100644 --- a/plugin/ui/viewer.html +++ b/plugin/ui/viewer.html @@ -15,6 +15,246 @@ font-display: swap; } + /* Theme Variables - Light Mode */ + :root, + [data-theme="light"] { + --color-bg-primary: #ffffff; + --color-bg-secondary: #f6f8fa; + --color-bg-tertiary: #f0f0f0; + --color-bg-header: #f6f8fa; + --color-bg-card: #ffffff; + --color-bg-card-hover: #f6f8fa; + --color-bg-input: #ffffff; + --color-bg-button: #0969da; + --color-bg-button-hover: #1177e6; + --color-bg-button-active: #0860ca; + --color-bg-summary: #fffbf0; + --color-bg-prompt: #f6f3fb; + --color-bg-stat: #f6f8fa; + --color-bg-scrollbar-track: #ffffff; + --color-bg-scrollbar-thumb: #d1d5da; + --color-bg-scrollbar-thumb-hover: #b1b5ba; + + --color-border-primary: #d0d7de; + --color-border-secondary: #d8dee4; + --color-border-hover: #0969da; + --color-border-focus: #0969da; + --color-border-summary: #d4a72c; + --color-border-summary-hover: #c29d29; + --color-border-prompt: #8250df; + --color-border-prompt-hover: #6e40c9; + + --color-text-primary: #24292f; + --color-text-secondary: #57606a; + --color-text-tertiary: #6e7781; + --color-text-muted: #8b949e; + --color-text-header: #24292f; + --color-text-title: #24292f; + --color-text-subtitle: #57606a; + --color-text-button: #ffffff; + --color-text-summary: #8a6116; + --color-text-logo: #24292f; + + --color-accent-primary: #0969da; + --color-accent-focus: #0969da; + --color-accent-success: #1a7f37; + --color-accent-error: #d1242f; + --color-accent-summary: #9a6700; + --color-accent-prompt: #8250df; + + --color-type-badge-bg: rgba(9, 105, 218, 0.12); + --color-type-badge-text: #0969da; + --color-summary-badge-bg: rgba(154, 103, 0, 0.12); + --color-summary-badge-text: #9a6700; + --color-prompt-badge-bg: rgba(130, 80, 223, 0.12); + --color-prompt-badge-text: #8250df; + + --color-skeleton-base: #d0d7de; + --color-skeleton-highlight: #e8ecef; + + --shadow-focus: 0 0 0 2px rgba(9, 105, 218, 0.3); + } + + /* Theme Variables - Dark Mode */ + [data-theme="dark"] { + --color-bg-primary: #1e1e1e; + --color-bg-secondary: #2d2d2d; + --color-bg-tertiary: #252526; + --color-bg-header: #252526; + --color-bg-card: #2d2d2d; + --color-bg-card-hover: #333333; + --color-bg-input: #2d2d2d; + --color-bg-button: #0969da; + --color-bg-button-hover: #1177e6; + --color-bg-button-active: #0860ca; + --color-bg-summary: #3d2f00; + --color-bg-prompt: #2d1b4e; + --color-bg-stat: #2d2d2d; + --color-bg-scrollbar-track: #1e1e1e; + --color-bg-scrollbar-thumb: #424242; + --color-bg-scrollbar-thumb-hover: #4e4e4e; + + --color-border-primary: #404040; + --color-border-secondary: #404040; + --color-border-hover: #505050; + --color-border-focus: #58a6ff; + --color-border-summary: #9e6a03; + --color-border-summary-hover: #ae7a13; + --color-border-prompt: #6e40c9; + --color-border-prompt-hover: #8e6cdb; + + --color-text-primary: #cccccc; + --color-text-secondary: #a0a0a0; + --color-text-tertiary: #6e7681; + --color-text-muted: #8b949e; + --color-text-header: #e0e0e0; + --color-text-title: #e0e0e0; + --color-text-subtitle: #a0a0a0; + --color-text-button: #ffffff; + --color-text-summary: #f2cc60; + --color-text-logo: #dadada; + + --color-accent-primary: #58a6ff; + --color-accent-focus: #58a6ff; + --color-accent-success: #16c60c; + --color-accent-error: #e74856; + --color-accent-summary: #f2cc60; + --color-accent-prompt: #8e6cdb; + + --color-type-badge-bg: rgba(88, 166, 255, 0.125); + --color-type-badge-text: #58a6ff; + --color-summary-badge-bg: rgba(242, 204, 96, 0.125); + --color-summary-badge-text: #f2cc60; + --color-prompt-badge-bg: rgba(110, 64, 201, 0.125); + --color-prompt-badge-text: #8e6cdb; + + --color-skeleton-base: #404040; + --color-skeleton-highlight: #505050; + + --shadow-focus: 0 0 0 2px rgba(88, 166, 255, 0.2); + } + + /* System preference default */ + @media (prefers-color-scheme: light) { + :root:not([data-theme]) { + --color-bg-primary: #ffffff; + --color-bg-secondary: #f6f8fa; + --color-bg-tertiary: #f0f0f0; + --color-bg-header: #f6f8fa; + --color-bg-card: #ffffff; + --color-bg-card-hover: #f6f8fa; + --color-bg-input: #ffffff; + --color-bg-button: #0969da; + --color-bg-button-hover: #1177e6; + --color-bg-button-active: #0860ca; + --color-bg-summary: #fffbf0; + --color-bg-prompt: #f6f3fb; + --color-bg-stat: #f6f8fa; + --color-bg-scrollbar-track: #ffffff; + --color-bg-scrollbar-thumb: #d1d5da; + --color-bg-scrollbar-thumb-hover: #b1b5ba; + + --color-border-primary: #d0d7de; + --color-border-secondary: #d8dee4; + --color-border-hover: #0969da; + --color-border-focus: #0969da; + --color-border-summary: #d4a72c; + --color-border-summary-hover: #c29d29; + --color-border-prompt: #8250df; + --color-border-prompt-hover: #6e40c9; + + --color-text-primary: #24292f; + --color-text-secondary: #57606a; + --color-text-tertiary: #6e7781; + --color-text-muted: #8b949e; + --color-text-header: #24292f; + --color-text-title: #24292f; + --color-text-subtitle: #57606a; + --color-text-button: #ffffff; + --color-text-summary: #8a6116; + --color-text-logo: #24292f; + + --color-accent-primary: #0969da; + --color-accent-focus: #0969da; + --color-accent-success: #1a7f37; + --color-accent-error: #d1242f; + --color-accent-summary: #9a6700; + --color-accent-prompt: #8250df; + + --color-type-badge-bg: rgba(9, 105, 218, 0.12); + --color-type-badge-text: #0969da; + --color-summary-badge-bg: rgba(154, 103, 0, 0.12); + --color-summary-badge-text: #9a6700; + --color-prompt-badge-bg: rgba(130, 80, 223, 0.12); + --color-prompt-badge-text: #8250df; + + --color-skeleton-base: #d0d7de; + --color-skeleton-highlight: #e8ecef; + + --shadow-focus: 0 0 0 2px rgba(9, 105, 218, 0.3); + } + } + + @media (prefers-color-scheme: dark) { + :root:not([data-theme]) { + --color-bg-primary: #1e1e1e; + --color-bg-secondary: #2d2d2d; + --color-bg-tertiary: #252526; + --color-bg-header: #252526; + --color-bg-card: #2d2d2d; + --color-bg-card-hover: #333333; + --color-bg-input: #2d2d2d; + --color-bg-button: #0969da; + --color-bg-button-hover: #1177e6; + --color-bg-button-active: #0860ca; + --color-bg-summary: #3d2f00; + --color-bg-prompt: #2d1b4e; + --color-bg-stat: #2d2d2d; + --color-bg-scrollbar-track: #1e1e1e; + --color-bg-scrollbar-thumb: #424242; + --color-bg-scrollbar-thumb-hover: #4e4e4e; + + --color-border-primary: #404040; + --color-border-secondary: #404040; + --color-border-hover: #505050; + --color-border-focus: #58a6ff; + --color-border-summary: #9e6a03; + --color-border-summary-hover: #ae7a13; + --color-border-prompt: #6e40c9; + --color-border-prompt-hover: #8e6cdb; + + --color-text-primary: #cccccc; + --color-text-secondary: #a0a0a0; + --color-text-tertiary: #6e7681; + --color-text-muted: #8b949e; + --color-text-header: #e0e0e0; + --color-text-title: #e0e0e0; + --color-text-subtitle: #a0a0a0; + --color-text-button: #ffffff; + --color-text-summary: #f2cc60; + --color-text-logo: #dadada; + + --color-accent-primary: #58a6ff; + --color-accent-focus: #58a6ff; + --color-accent-success: #16c60c; + --color-accent-error: #e74856; + --color-accent-summary: #f2cc60; + --color-accent-prompt: #8e6cdb; + + --color-type-badge-bg: rgba(88, 166, 255, 0.125); + --color-type-badge-text: #58a6ff; + --color-summary-badge-bg: rgba(242, 204, 96, 0.125); + --color-summary-badge-text: #f2cc60; + --color-prompt-badge-bg: rgba(110, 64, 201, 0.125); + --color-prompt-badge-text: #8e6cdb; + + --color-skeleton-base: #404040; + --color-skeleton-highlight: #505050; + + --shadow-focus: 0 0 0 2px rgba(88, 166, 255, 0.2); + } + } + * { margin: 0; padding: 0; @@ -23,8 +263,8 @@ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica', 'Arial', sans-serif; - background: #1e1e1e; - color: #cccccc; + background: var(--color-bg-primary); + color: var(--color-text-primary); font-size: 14px; overflow: hidden; } @@ -48,8 +288,8 @@ top: 0; width: 400px; height: 100vh; - background: #1e1e1e; - border-left: 1px solid #404040; + background: var(--color-bg-primary); + border-left: 1px solid var(--color-border-primary); display: flex; flex-direction: column; transform: translate3d(100%, 0, 0); @@ -64,32 +304,32 @@ .header { padding: 14px 18px; - border-bottom: 1px solid #404040; + border-bottom: 1px solid var(--color-border-primary); display: flex; justify-content: space-between; align-items: center; - background: #252526; + background: var(--color-bg-header); } .sidebar-header { padding: 14px 18px; - border-bottom: 1px solid #404040; + border-bottom: 1px solid var(--color-border-primary); display: flex; justify-content: space-between; align-items: center; - background: #252526; + background: var(--color-bg-header); } .sidebar-header h1 { font-size: 16px; font-weight: 500; - color: #e0e0e0; + color: var(--color-text-header); } .header h1 { font-size: 16px; font-weight: 500; - color: #e0e0e0; + color: var(--color-text-header); display: flex; align-items: center; gap: 10px; @@ -113,7 +353,7 @@ font-weight: 100; font-size: 20px; letter-spacing: -0.03em; - color: #dadada; + color: var(--color-text-logo); } .status { @@ -123,9 +363,10 @@ font-size: 13px; } - .settings-btn { + .settings-btn, + .theme-toggle-btn { background: transparent; - border: 1px solid #404040; + border: 1px solid var(--color-border-primary); padding: 8px; width: 36px; height: 36px; @@ -133,22 +374,24 @@ display: flex; align-items: center; justify-content: center; - color: #cccccc; + color: var(--color-text-primary); transition: all 0.15s ease; } - .settings-btn:hover { - background: #2d2d2d; - border-color: #58a6ff; + .settings-btn:hover, + .theme-toggle-btn:hover { + background: var(--color-bg-secondary); + border-color: var(--color-border-focus); } .settings-btn.active { - background: #0969da; - border-color: #0969da; - color: white; + background: var(--color-bg-button); + border-color: var(--color-bg-button); + color: var(--color-text-button); } - .settings-icon { + .settings-icon, + .theme-toggle-btn svg { width: 18px; height: 18px; } @@ -157,12 +400,12 @@ width: 8px; height: 8px; border-radius: 50%; - background: #e74856; + background: var(--color-accent-error); animation: pulse 2s ease-in-out infinite; } .status-dot.connected { - background: #16c60c; + background: var(--color-accent-success); animation: none; } @@ -181,9 +424,9 @@ select, input, button { - background: #2d2d2d; - color: #cccccc; - border: 1px solid #404040; + background: var(--color-bg-input); + color: var(--color-text-primary); + border: 1px solid var(--color-border-primary); padding: 6px 12px; font-family: inherit; font-size: 13px; @@ -193,30 +436,30 @@ select:hover, input:hover { - border-color: #58a6ff; + border-color: var(--color-border-focus); } select:focus, input:focus { outline: none; - border-color: #58a6ff; - box-shadow: 0 0 0 2px rgba(88, 166, 255, 0.2); + border-color: var(--color-border-focus); + box-shadow: var(--shadow-focus); } button { - background: #0969da; - color: #ffffff; + background: var(--color-bg-button); + color: var(--color-text-button); border: none; font-weight: 500; cursor: pointer; } button:hover:not(:disabled) { - background: #1177e6; + background: var(--color-bg-button-hover); } button:active:not(:disabled) { - background: #0860ca; + background: var(--color-bg-button-active); } button:disabled { @@ -240,8 +483,8 @@ .card { margin-bottom: 24px; padding: 20px 24px; - background: #2d2d2d; - border: 1px solid #404040; + background: var(--color-bg-card); + border: 1px solid var(--color-border-primary); border-radius: 8px; transition: all 0.15s ease; animation: slideIn 0.3s ease-out; @@ -261,7 +504,7 @@ } .card:hover { - border-color: #505050; + border-color: var(--color-border-hover); } .card-header { @@ -270,14 +513,14 @@ gap: 10px; margin-bottom: 8px; font-size: 12px; - color: #8b949e; + color: var(--color-text-muted); font-family: 'Monaco', 'Menlo', 'Consolas', monospace; } .card-type { padding: 2px 8px; - background: #58a6ff20; - color: #58a6ff; + background: var(--color-type-badge-bg); + color: var(--color-type-badge-text); border-radius: 3px; font-weight: 500; text-transform: uppercase; @@ -288,7 +531,7 @@ .card-title { font-size: 17px; margin-bottom: 8px; - color: #e0e0e0; + color: var(--color-text-title); font-weight: 600; line-height: 1.4; letter-spacing: -0.01em; @@ -296,46 +539,46 @@ .card-subtitle { font-size: 14px; - color: #a0a0a0; + color: var(--color-text-subtitle); margin-bottom: 8px; line-height: 1.6; } .card-meta { font-size: 12px; - color: #6e7681; + color: var(--color-text-tertiary); margin-top: 8px; font-family: 'Monaco', 'Menlo', 'Consolas', monospace; } .summary-card { - border-color: #9e6a03; - background: #3d2f00; + border-color: var(--color-border-summary); + background: var(--color-bg-summary); } .summary-card:hover { - border-color: #ae7a13; + border-color: var(--color-border-summary-hover); } .summary-card .card-type { - background: #f2cc6020; - color: #f2cc60; + background: var(--color-summary-badge-bg); + color: var(--color-summary-badge-text); } .summary-card .card-title { - color: #f2cc60; + color: var(--color-text-summary); } .settings-section { padding: 18px; - border-bottom: 1px solid #404040; + border-bottom: 1px solid var(--color-border-primary); } .settings-section h3 { font-size: 14px; font-weight: 600; margin-bottom: 14px; - color: #e0e0e0; + color: var(--color-text-header); letter-spacing: 0.3px; } @@ -347,13 +590,13 @@ display: block; margin-bottom: 6px; font-size: 12px; - color: #8b949e; + color: var(--color-text-muted); font-family: 'Monaco', 'Menlo', 'Consolas', monospace; } .setting-description { font-size: 12px; - color: #8b949e; + color: var(--color-text-muted); margin-bottom: 8px; line-height: 1.5; } @@ -366,13 +609,13 @@ .stat { padding: 10px 12px; - background: #2d2d2d; - border: 1px solid #404040; + background: var(--color-bg-stat); + border: 1px solid var(--color-border-primary); border-radius: 4px; } .stat-label { - color: #8b949e; + color: var(--color-text-muted); margin-bottom: 4px; font-size: 11px; text-transform: uppercase; @@ -381,7 +624,7 @@ .stat-value { font-size: 18px; - color: #e0e0e0; + color: var(--color-text-header); font-weight: 600; font-family: 'Monaco', 'Menlo', 'Consolas', monospace; } @@ -396,42 +639,42 @@ } ::-webkit-scrollbar-track { - background: #1e1e1e; + background: var(--color-bg-scrollbar-track); } ::-webkit-scrollbar-thumb { - background: #424242; + background: var(--color-bg-scrollbar-thumb); border-radius: 5px; } ::-webkit-scrollbar-thumb:hover { - background: #4e4e4e; + background: var(--color-bg-scrollbar-thumb-hover); } .save-status { margin-top: 8px; font-size: 12px; - color: #8b949e; + color: var(--color-text-muted); } .prompt-card { - border-color: #6e40c9; - background: #2d1b4e; + border-color: var(--color-border-prompt); + background: var(--color-bg-prompt); } .prompt-card:hover { - border-color: #8e6cdb; + border-color: var(--color-border-prompt-hover); } .prompt-card .card-type { - background: #6e40c920; - color: #8e6cdb; + background: var(--color-prompt-badge-bg); + color: var(--color-prompt-badge-text); } .card-content { margin-top: 12px; line-height: 1.6; - color: #cccccc; + color: var(--color-text-primary); white-space: pre-wrap; word-wrap: break-word; } @@ -440,7 +683,7 @@ display: inline-flex; align-items: center; gap: 6px; - color: #58a6ff; + color: var(--color-accent-focus); font-size: 11px; font-weight: 500; margin-left: auto; @@ -449,8 +692,8 @@ .spinner { width: 12px; height: 12px; - border: 2px solid #404040; - border-top-color: #58a6ff; + border: 2px solid var(--color-border-primary); + border-top-color: var(--color-accent-focus); border-radius: 50%; animation: spin 0.8s linear infinite; } @@ -471,7 +714,7 @@ .skeleton-line { height: 16px; - background: linear-gradient(90deg, #404040 25%, #505050 50%, #404040 75%); + background: linear-gradient(90deg, var(--color-skeleton-base) 25%, var(--color-skeleton-highlight) 50%, var(--color-skeleton-base) 75%); background-size: 200% 100%; animation: shimmer 1.5s infinite; border-radius: 4px; diff --git a/src/ui/viewer-template.html b/src/ui/viewer-template.html index fdc98293..fa9e845c 100644 --- a/src/ui/viewer-template.html +++ b/src/ui/viewer-template.html @@ -15,6 +15,246 @@ font-display: swap; } + /* Theme Variables - Light Mode */ + :root, + [data-theme="light"] { + --color-bg-primary: #ffffff; + --color-bg-secondary: #f6f8fa; + --color-bg-tertiary: #f0f0f0; + --color-bg-header: #f6f8fa; + --color-bg-card: #ffffff; + --color-bg-card-hover: #f6f8fa; + --color-bg-input: #ffffff; + --color-bg-button: #0969da; + --color-bg-button-hover: #1177e6; + --color-bg-button-active: #0860ca; + --color-bg-summary: #fffbf0; + --color-bg-prompt: #f6f3fb; + --color-bg-stat: #f6f8fa; + --color-bg-scrollbar-track: #ffffff; + --color-bg-scrollbar-thumb: #d1d5da; + --color-bg-scrollbar-thumb-hover: #b1b5ba; + + --color-border-primary: #d0d7de; + --color-border-secondary: #d8dee4; + --color-border-hover: #0969da; + --color-border-focus: #0969da; + --color-border-summary: #d4a72c; + --color-border-summary-hover: #c29d29; + --color-border-prompt: #8250df; + --color-border-prompt-hover: #6e40c9; + + --color-text-primary: #24292f; + --color-text-secondary: #57606a; + --color-text-tertiary: #6e7781; + --color-text-muted: #8b949e; + --color-text-header: #24292f; + --color-text-title: #24292f; + --color-text-subtitle: #57606a; + --color-text-button: #ffffff; + --color-text-summary: #8a6116; + --color-text-logo: #24292f; + + --color-accent-primary: #0969da; + --color-accent-focus: #0969da; + --color-accent-success: #1a7f37; + --color-accent-error: #d1242f; + --color-accent-summary: #9a6700; + --color-accent-prompt: #8250df; + + --color-type-badge-bg: rgba(9, 105, 218, 0.12); + --color-type-badge-text: #0969da; + --color-summary-badge-bg: rgba(154, 103, 0, 0.12); + --color-summary-badge-text: #9a6700; + --color-prompt-badge-bg: rgba(130, 80, 223, 0.12); + --color-prompt-badge-text: #8250df; + + --color-skeleton-base: #d0d7de; + --color-skeleton-highlight: #e8ecef; + + --shadow-focus: 0 0 0 2px rgba(9, 105, 218, 0.3); + } + + /* Theme Variables - Dark Mode */ + [data-theme="dark"] { + --color-bg-primary: #1e1e1e; + --color-bg-secondary: #2d2d2d; + --color-bg-tertiary: #252526; + --color-bg-header: #252526; + --color-bg-card: #2d2d2d; + --color-bg-card-hover: #333333; + --color-bg-input: #2d2d2d; + --color-bg-button: #0969da; + --color-bg-button-hover: #1177e6; + --color-bg-button-active: #0860ca; + --color-bg-summary: #3d2f00; + --color-bg-prompt: #2d1b4e; + --color-bg-stat: #2d2d2d; + --color-bg-scrollbar-track: #1e1e1e; + --color-bg-scrollbar-thumb: #424242; + --color-bg-scrollbar-thumb-hover: #4e4e4e; + + --color-border-primary: #404040; + --color-border-secondary: #404040; + --color-border-hover: #505050; + --color-border-focus: #58a6ff; + --color-border-summary: #9e6a03; + --color-border-summary-hover: #ae7a13; + --color-border-prompt: #6e40c9; + --color-border-prompt-hover: #8e6cdb; + + --color-text-primary: #cccccc; + --color-text-secondary: #a0a0a0; + --color-text-tertiary: #6e7681; + --color-text-muted: #8b949e; + --color-text-header: #e0e0e0; + --color-text-title: #e0e0e0; + --color-text-subtitle: #a0a0a0; + --color-text-button: #ffffff; + --color-text-summary: #f2cc60; + --color-text-logo: #dadada; + + --color-accent-primary: #58a6ff; + --color-accent-focus: #58a6ff; + --color-accent-success: #16c60c; + --color-accent-error: #e74856; + --color-accent-summary: #f2cc60; + --color-accent-prompt: #8e6cdb; + + --color-type-badge-bg: rgba(88, 166, 255, 0.125); + --color-type-badge-text: #58a6ff; + --color-summary-badge-bg: rgba(242, 204, 96, 0.125); + --color-summary-badge-text: #f2cc60; + --color-prompt-badge-bg: rgba(110, 64, 201, 0.125); + --color-prompt-badge-text: #8e6cdb; + + --color-skeleton-base: #404040; + --color-skeleton-highlight: #505050; + + --shadow-focus: 0 0 0 2px rgba(88, 166, 255, 0.2); + } + + /* System preference default */ + @media (prefers-color-scheme: light) { + :root:not([data-theme]) { + --color-bg-primary: #ffffff; + --color-bg-secondary: #f6f8fa; + --color-bg-tertiary: #f0f0f0; + --color-bg-header: #f6f8fa; + --color-bg-card: #ffffff; + --color-bg-card-hover: #f6f8fa; + --color-bg-input: #ffffff; + --color-bg-button: #0969da; + --color-bg-button-hover: #1177e6; + --color-bg-button-active: #0860ca; + --color-bg-summary: #fffbf0; + --color-bg-prompt: #f6f3fb; + --color-bg-stat: #f6f8fa; + --color-bg-scrollbar-track: #ffffff; + --color-bg-scrollbar-thumb: #d1d5da; + --color-bg-scrollbar-thumb-hover: #b1b5ba; + + --color-border-primary: #d0d7de; + --color-border-secondary: #d8dee4; + --color-border-hover: #0969da; + --color-border-focus: #0969da; + --color-border-summary: #d4a72c; + --color-border-summary-hover: #c29d29; + --color-border-prompt: #8250df; + --color-border-prompt-hover: #6e40c9; + + --color-text-primary: #24292f; + --color-text-secondary: #57606a; + --color-text-tertiary: #6e7781; + --color-text-muted: #8b949e; + --color-text-header: #24292f; + --color-text-title: #24292f; + --color-text-subtitle: #57606a; + --color-text-button: #ffffff; + --color-text-summary: #8a6116; + --color-text-logo: #24292f; + + --color-accent-primary: #0969da; + --color-accent-focus: #0969da; + --color-accent-success: #1a7f37; + --color-accent-error: #d1242f; + --color-accent-summary: #9a6700; + --color-accent-prompt: #8250df; + + --color-type-badge-bg: rgba(9, 105, 218, 0.12); + --color-type-badge-text: #0969da; + --color-summary-badge-bg: rgba(154, 103, 0, 0.12); + --color-summary-badge-text: #9a6700; + --color-prompt-badge-bg: rgba(130, 80, 223, 0.12); + --color-prompt-badge-text: #8250df; + + --color-skeleton-base: #d0d7de; + --color-skeleton-highlight: #e8ecef; + + --shadow-focus: 0 0 0 2px rgba(9, 105, 218, 0.3); + } + } + + @media (prefers-color-scheme: dark) { + :root:not([data-theme]) { + --color-bg-primary: #1e1e1e; + --color-bg-secondary: #2d2d2d; + --color-bg-tertiary: #252526; + --color-bg-header: #252526; + --color-bg-card: #2d2d2d; + --color-bg-card-hover: #333333; + --color-bg-input: #2d2d2d; + --color-bg-button: #0969da; + --color-bg-button-hover: #1177e6; + --color-bg-button-active: #0860ca; + --color-bg-summary: #3d2f00; + --color-bg-prompt: #2d1b4e; + --color-bg-stat: #2d2d2d; + --color-bg-scrollbar-track: #1e1e1e; + --color-bg-scrollbar-thumb: #424242; + --color-bg-scrollbar-thumb-hover: #4e4e4e; + + --color-border-primary: #404040; + --color-border-secondary: #404040; + --color-border-hover: #505050; + --color-border-focus: #58a6ff; + --color-border-summary: #9e6a03; + --color-border-summary-hover: #ae7a13; + --color-border-prompt: #6e40c9; + --color-border-prompt-hover: #8e6cdb; + + --color-text-primary: #cccccc; + --color-text-secondary: #a0a0a0; + --color-text-tertiary: #6e7681; + --color-text-muted: #8b949e; + --color-text-header: #e0e0e0; + --color-text-title: #e0e0e0; + --color-text-subtitle: #a0a0a0; + --color-text-button: #ffffff; + --color-text-summary: #f2cc60; + --color-text-logo: #dadada; + + --color-accent-primary: #58a6ff; + --color-accent-focus: #58a6ff; + --color-accent-success: #16c60c; + --color-accent-error: #e74856; + --color-accent-summary: #f2cc60; + --color-accent-prompt: #8e6cdb; + + --color-type-badge-bg: rgba(88, 166, 255, 0.125); + --color-type-badge-text: #58a6ff; + --color-summary-badge-bg: rgba(242, 204, 96, 0.125); + --color-summary-badge-text: #f2cc60; + --color-prompt-badge-bg: rgba(110, 64, 201, 0.125); + --color-prompt-badge-text: #8e6cdb; + + --color-skeleton-base: #404040; + --color-skeleton-highlight: #505050; + + --shadow-focus: 0 0 0 2px rgba(88, 166, 255, 0.2); + } + } + * { margin: 0; padding: 0; @@ -23,8 +263,8 @@ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica', 'Arial', sans-serif; - background: #1e1e1e; - color: #cccccc; + background: var(--color-bg-primary); + color: var(--color-text-primary); font-size: 14px; overflow: hidden; } @@ -48,8 +288,8 @@ top: 0; width: 400px; height: 100vh; - background: #1e1e1e; - border-left: 1px solid #404040; + background: var(--color-bg-primary); + border-left: 1px solid var(--color-border-primary); display: flex; flex-direction: column; transform: translate3d(100%, 0, 0); @@ -64,32 +304,32 @@ .header { padding: 14px 18px; - border-bottom: 1px solid #404040; + border-bottom: 1px solid var(--color-border-primary); display: flex; justify-content: space-between; align-items: center; - background: #252526; + background: var(--color-bg-header); } .sidebar-header { padding: 14px 18px; - border-bottom: 1px solid #404040; + border-bottom: 1px solid var(--color-border-primary); display: flex; justify-content: space-between; align-items: center; - background: #252526; + background: var(--color-bg-header); } .sidebar-header h1 { font-size: 16px; font-weight: 500; - color: #e0e0e0; + color: var(--color-text-header); } .header h1 { font-size: 16px; font-weight: 500; - color: #e0e0e0; + color: var(--color-text-header); display: flex; align-items: center; gap: 10px; @@ -113,7 +353,7 @@ font-weight: 100; font-size: 20px; letter-spacing: -0.03em; - color: #dadada; + color: var(--color-text-logo); } .status { @@ -123,9 +363,10 @@ font-size: 13px; } - .settings-btn { + .settings-btn, + .theme-toggle-btn { background: transparent; - border: 1px solid #404040; + border: 1px solid var(--color-border-primary); padding: 8px; width: 36px; height: 36px; @@ -133,22 +374,24 @@ display: flex; align-items: center; justify-content: center; - color: #cccccc; + color: var(--color-text-primary); transition: all 0.15s ease; } - .settings-btn:hover { - background: #2d2d2d; - border-color: #58a6ff; + .settings-btn:hover, + .theme-toggle-btn:hover { + background: var(--color-bg-secondary); + border-color: var(--color-border-focus); } .settings-btn.active { - background: #0969da; - border-color: #0969da; - color: white; + background: var(--color-bg-button); + border-color: var(--color-bg-button); + color: var(--color-text-button); } - .settings-icon { + .settings-icon, + .theme-toggle-btn svg { width: 18px; height: 18px; } @@ -157,12 +400,12 @@ width: 8px; height: 8px; border-radius: 50%; - background: #e74856; + background: var(--color-accent-error); animation: pulse 2s ease-in-out infinite; } .status-dot.connected { - background: #16c60c; + background: var(--color-accent-success); animation: none; } @@ -181,9 +424,9 @@ select, input, button { - background: #2d2d2d; - color: #cccccc; - border: 1px solid #404040; + background: var(--color-bg-input); + color: var(--color-text-primary); + border: 1px solid var(--color-border-primary); padding: 6px 12px; font-family: inherit; font-size: 13px; @@ -193,30 +436,30 @@ select:hover, input:hover { - border-color: #58a6ff; + border-color: var(--color-border-focus); } select:focus, input:focus { outline: none; - border-color: #58a6ff; - box-shadow: 0 0 0 2px rgba(88, 166, 255, 0.2); + border-color: var(--color-border-focus); + box-shadow: var(--shadow-focus); } button { - background: #0969da; - color: #ffffff; + background: var(--color-bg-button); + color: var(--color-text-button); border: none; font-weight: 500; cursor: pointer; } button:hover:not(:disabled) { - background: #1177e6; + background: var(--color-bg-button-hover); } button:active:not(:disabled) { - background: #0860ca; + background: var(--color-bg-button-active); } button:disabled { @@ -240,8 +483,8 @@ .card { margin-bottom: 24px; padding: 20px 24px; - background: #2d2d2d; - border: 1px solid #404040; + background: var(--color-bg-card); + border: 1px solid var(--color-border-primary); border-radius: 8px; transition: all 0.15s ease; animation: slideIn 0.3s ease-out; @@ -261,7 +504,7 @@ } .card:hover { - border-color: #505050; + border-color: var(--color-border-hover); } .card-header { @@ -270,14 +513,14 @@ gap: 10px; margin-bottom: 8px; font-size: 12px; - color: #8b949e; + color: var(--color-text-muted); font-family: 'Monaco', 'Menlo', 'Consolas', monospace; } .card-type { padding: 2px 8px; - background: #58a6ff20; - color: #58a6ff; + background: var(--color-type-badge-bg); + color: var(--color-type-badge-text); border-radius: 3px; font-weight: 500; text-transform: uppercase; @@ -288,7 +531,7 @@ .card-title { font-size: 17px; margin-bottom: 8px; - color: #e0e0e0; + color: var(--color-text-title); font-weight: 600; line-height: 1.4; letter-spacing: -0.01em; @@ -296,46 +539,46 @@ .card-subtitle { font-size: 14px; - color: #a0a0a0; + color: var(--color-text-subtitle); margin-bottom: 8px; line-height: 1.6; } .card-meta { font-size: 12px; - color: #6e7681; + color: var(--color-text-tertiary); margin-top: 8px; font-family: 'Monaco', 'Menlo', 'Consolas', monospace; } .summary-card { - border-color: #9e6a03; - background: #3d2f00; + border-color: var(--color-border-summary); + background: var(--color-bg-summary); } .summary-card:hover { - border-color: #ae7a13; + border-color: var(--color-border-summary-hover); } .summary-card .card-type { - background: #f2cc6020; - color: #f2cc60; + background: var(--color-summary-badge-bg); + color: var(--color-summary-badge-text); } .summary-card .card-title { - color: #f2cc60; + color: var(--color-text-summary); } .settings-section { padding: 18px; - border-bottom: 1px solid #404040; + border-bottom: 1px solid var(--color-border-primary); } .settings-section h3 { font-size: 14px; font-weight: 600; margin-bottom: 14px; - color: #e0e0e0; + color: var(--color-text-header); letter-spacing: 0.3px; } @@ -347,13 +590,13 @@ display: block; margin-bottom: 6px; font-size: 12px; - color: #8b949e; + color: var(--color-text-muted); font-family: 'Monaco', 'Menlo', 'Consolas', monospace; } .setting-description { font-size: 12px; - color: #8b949e; + color: var(--color-text-muted); margin-bottom: 8px; line-height: 1.5; } @@ -366,13 +609,13 @@ .stat { padding: 10px 12px; - background: #2d2d2d; - border: 1px solid #404040; + background: var(--color-bg-stat); + border: 1px solid var(--color-border-primary); border-radius: 4px; } .stat-label { - color: #8b949e; + color: var(--color-text-muted); margin-bottom: 4px; font-size: 11px; text-transform: uppercase; @@ -381,7 +624,7 @@ .stat-value { font-size: 18px; - color: #e0e0e0; + color: var(--color-text-header); font-weight: 600; font-family: 'Monaco', 'Menlo', 'Consolas', monospace; } @@ -396,42 +639,42 @@ } ::-webkit-scrollbar-track { - background: #1e1e1e; + background: var(--color-bg-scrollbar-track); } ::-webkit-scrollbar-thumb { - background: #424242; + background: var(--color-bg-scrollbar-thumb); border-radius: 5px; } ::-webkit-scrollbar-thumb:hover { - background: #4e4e4e; + background: var(--color-bg-scrollbar-thumb-hover); } .save-status { margin-top: 8px; font-size: 12px; - color: #8b949e; + color: var(--color-text-muted); } .prompt-card { - border-color: #6e40c9; - background: #2d1b4e; + border-color: var(--color-border-prompt); + background: var(--color-bg-prompt); } .prompt-card:hover { - border-color: #8e6cdb; + border-color: var(--color-border-prompt-hover); } .prompt-card .card-type { - background: #6e40c920; - color: #8e6cdb; + background: var(--color-prompt-badge-bg); + color: var(--color-prompt-badge-text); } .card-content { margin-top: 12px; line-height: 1.6; - color: #cccccc; + color: var(--color-text-primary); white-space: pre-wrap; word-wrap: break-word; } @@ -440,7 +683,7 @@ display: inline-flex; align-items: center; gap: 6px; - color: #58a6ff; + color: var(--color-accent-focus); font-size: 11px; font-weight: 500; margin-left: auto; @@ -449,8 +692,8 @@ .spinner { width: 12px; height: 12px; - border: 2px solid #404040; - border-top-color: #58a6ff; + border: 2px solid var(--color-border-primary); + border-top-color: var(--color-accent-focus); border-radius: 50%; animation: spin 0.8s linear infinite; } @@ -471,7 +714,7 @@ .skeleton-line { height: 16px; - background: linear-gradient(90deg, #404040 25%, #505050 50%, #404040 75%); + background: linear-gradient(90deg, var(--color-skeleton-base) 25%, var(--color-skeleton-highlight) 50%, var(--color-skeleton-base) 75%); background-size: 200% 100%; animation: shimmer 1.5s infinite; border-radius: 4px; diff --git a/src/ui/viewer/App.tsx b/src/ui/viewer/App.tsx index bcff4f88..5716632f 100644 --- a/src/ui/viewer/App.tsx +++ b/src/ui/viewer/App.tsx @@ -6,6 +6,7 @@ import { useSSE } from './hooks/useSSE'; import { useSettings } from './hooks/useSettings'; import { useStats } from './hooks/useStats'; import { usePagination } from './hooks/usePagination'; +import { useTheme } from './hooks/useTheme'; import { Observation, Summary, UserPrompt } from './types'; import { mergeAndDeduplicateByProject } from './utils/data'; @@ -19,6 +20,7 @@ export function App() { const { observations, summaries, prompts, projects, processingSessions, isConnected } = useSSE(); const { settings, saveSettings, isSaving, saveStatus } = useSettings(); const { stats } = useStats(); + const { preference, resolvedTheme, setThemePreference } = useTheme(); const pagination = usePagination(currentFilter); // Reset paginated data when filter changes @@ -88,6 +90,8 @@ export function App() { onSettingsToggle={toggleSidebar} sidebarOpen={sidebarOpen} isProcessing={processingSessions.size > 0} + themePreference={preference} + onThemeChange={setThemePreference} /> void; sidebarOpen: boolean; isProcessing: boolean; + themePreference: ThemePreference; + onThemeChange: (theme: ThemePreference) => void; } export function Header({ @@ -17,7 +21,9 @@ export function Header({ onFilterChange, onSettingsToggle, sidebarOpen, - isProcessing + isProcessing, + themePreference, + onThemeChange }: HeaderProps) { return (
@@ -73,6 +79,10 @@ export function Header({ ))} + + ); +} diff --git a/src/ui/viewer/hooks/useTheme.ts b/src/ui/viewer/hooks/useTheme.ts new file mode 100644 index 00000000..c81cc760 --- /dev/null +++ b/src/ui/viewer/hooks/useTheme.ts @@ -0,0 +1,76 @@ +import { useState, useEffect } from 'react'; + +export type ThemePreference = 'system' | 'light' | 'dark'; +export type ResolvedTheme = 'light' | 'dark'; + +const STORAGE_KEY = 'claude-mem-theme'; + +function getSystemTheme(): ResolvedTheme { + if (typeof window === 'undefined') return 'dark'; + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; +} + +function getStoredPreference(): ThemePreference { + try { + const stored = localStorage.getItem(STORAGE_KEY); + if (stored === 'system' || stored === 'light' || stored === 'dark') { + return stored; + } + } catch (e) { + console.warn('Failed to read theme preference from localStorage:', e); + } + return 'system'; +} + +function resolveTheme(preference: ThemePreference): ResolvedTheme { + if (preference === 'system') { + return getSystemTheme(); + } + return preference; +} + +export function useTheme() { + const [preference, setPreference] = useState(getStoredPreference); + const [resolvedTheme, setResolvedTheme] = useState(() => + resolveTheme(getStoredPreference()) + ); + + // Update resolved theme when preference changes + useEffect(() => { + const newResolvedTheme = resolveTheme(preference); + setResolvedTheme(newResolvedTheme); + document.documentElement.setAttribute('data-theme', newResolvedTheme); + }, [preference]); + + // Listen for system theme changes when preference is 'system' + useEffect(() => { + if (preference !== 'system') return; + + const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); + const handleChange = (e: MediaQueryListEvent) => { + const newTheme = e.matches ? 'dark' : 'light'; + setResolvedTheme(newTheme); + document.documentElement.setAttribute('data-theme', newTheme); + }; + + mediaQuery.addEventListener('change', handleChange); + return () => mediaQuery.removeEventListener('change', handleChange); + }, [preference]); + + const setThemePreference = (newPreference: ThemePreference) => { + try { + localStorage.setItem(STORAGE_KEY, newPreference); + setPreference(newPreference); + } catch (e) { + console.warn('Failed to save theme preference to localStorage:', e); + // Still update the theme even if localStorage fails + setPreference(newPreference); + } + }; + + return { + preference, + resolvedTheme, + setThemePreference + }; +}