diff --git a/.gitignore b/.gitignore
index f3fd91a..18af867 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,31 @@
-node_modules
-dist
+# Dependencies
+node_modules/
+
+# Build output
+dist/
+
+# Local environment files
+.env
+.env.local
.env.development
+.env.development.local
.env.production
+.env.production.local
+.env.test
+.env.test.local
+
+# Logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Vite cache
+.vite/
+
+# Editor and OS files
+.DS_Store
+Thumbs.db
+.idea/
+.vscode/
diff --git a/dist/assets/favicon_blue-CzkOczz3.png b/dist/assets/favicon_blue-CzkOczz3.png
deleted file mode 100644
index d953c4f..0000000
Binary files a/dist/assets/favicon_blue-CzkOczz3.png and /dev/null differ
diff --git a/dist/assets/index-1xjqdjIG.js b/dist/assets/index-1xjqdjIG.js
deleted file mode 100644
index 385e977..0000000
--- a/dist/assets/index-1xjqdjIG.js
+++ /dev/null
@@ -1,68 +0,0 @@
-function Rd(e,t){for(var r=0;rn[l]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))n(l);new MutationObserver(l=>{for(const i of l)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function r(l){const i={};return l.integrity&&(i.integrity=l.integrity),l.referrerPolicy&&(i.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?i.credentials="include":l.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function n(l){if(l.ep)return;l.ep=!0;const i=r(l);fetch(l.href,i)}})();function Pd(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var _d={exports:{}},Di={},Td={exports:{}},Y={};/**
- * @license React
- * react.production.min.js
- *
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */var ml=Symbol.for("react.element"),Sp=Symbol.for("react.portal"),kp=Symbol.for("react.fragment"),Cp=Symbol.for("react.strict_mode"),Ep=Symbol.for("react.profiler"),jp=Symbol.for("react.provider"),Rp=Symbol.for("react.context"),Pp=Symbol.for("react.forward_ref"),_p=Symbol.for("react.suspense"),Tp=Symbol.for("react.memo"),Lp=Symbol.for("react.lazy"),Vs=Symbol.iterator;function zp(e){return e===null||typeof e!="object"?null:(e=Vs&&e[Vs]||e["@@iterator"],typeof e=="function"?e:null)}var Ld={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},zd=Object.assign,Md={};function pn(e,t,r){this.props=e,this.context=t,this.refs=Md,this.updater=r||Ld}pn.prototype.isReactComponent={};pn.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")};pn.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Nd(){}Nd.prototype=pn.prototype;function Ma(e,t,r){this.props=e,this.context=t,this.refs=Md,this.updater=r||Ld}var Na=Ma.prototype=new Nd;Na.constructor=Ma;zd(Na,pn.prototype);Na.isPureReactComponent=!0;var $s=Array.isArray,Dd=Object.prototype.hasOwnProperty,Da={current:null},Id={key:!0,ref:!0,__self:!0,__source:!0};function Od(e,t,r){var n,l={},i=null,o=null;if(t!=null)for(n in t.ref!==void 0&&(o=t.ref),t.key!==void 0&&(i=""+t.key),t)Dd.call(t,n)&&!Id.hasOwnProperty(n)&&(l[n]=t[n]);var a=arguments.length-2;if(a===1)l.children=r;else if(1>>1,ie=z[le];if(0>>1;lel(Ie,$))Oel(rt,Ie)?(z[le]=rt,z[Oe]=$,le=Oe):(z[le]=Ie,z[Ye]=$,le=Ye);else if(Oel(rt,$))z[le]=rt,z[Oe]=$,le=Oe;else break e}}return B}function l(z,B){var $=z.sortIndex-B.sortIndex;return $!==0?$:z.id-B.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var o=Date,a=o.now();e.unstable_now=function(){return o.now()-a}}var s=[],u=[],h=1,c=null,p=3,w=!1,k=!1,S=!1,L=typeof setTimeout=="function"?setTimeout:null,m=typeof clearTimeout=="function"?clearTimeout:null,f=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function v(z){for(var B=r(u);B!==null;){if(B.callback===null)n(u);else if(B.startTime<=z)n(u),B.sortIndex=B.expirationTime,t(s,B);else break;B=r(u)}}function E(z){if(S=!1,v(z),!k)if(r(s)!==null)k=!0,Ft(j);else{var B=r(u);B!==null&&At(E,B.startTime-z)}}function j(z,B){k=!1,S&&(S=!1,m(P),P=-1),w=!0;var $=p;try{for(v(B),c=r(s);c!==null&&(!(c.expirationTime>B)||z&&!V());){var le=c.callback;if(typeof le=="function"){c.callback=null,p=c.priorityLevel;var ie=le(c.expirationTime<=B);B=e.unstable_now(),typeof ie=="function"?c.callback=ie:c===r(s)&&n(s),v(B)}else n(s);c=r(s)}if(c!==null)var ut=!0;else{var Ye=r(u);Ye!==null&&At(E,Ye.startTime-B),ut=!1}return ut}finally{c=null,p=$,w=!1}}var M=!1,y=null,P=-1,W=5,N=-1;function V(){return!(e.unstable_now()-Nz||125le?(z.sortIndex=$,t(u,z),r(s)===null&&z===r(u)&&(S?(m(P),P=-1):S=!0,At(E,$-le))):(z.sortIndex=ie,t(s,z),k||w||(k=!0,Ft(j))),z},e.unstable_shouldYield=V,e.unstable_wrapCallback=function(z){var B=p;return function(){var $=p;p=B;try{return z.apply(this,arguments)}finally{p=$}}}})(Bd);Wd.exports=Bd;var Hp=Wd.exports;/**
- * @license React
- * react-dom.production.min.js
- *
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */var Vp=R,qe=Hp;function T(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Fo=Object.prototype.hasOwnProperty,$p=/^[: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]*$/,Ks={},Ys={};function Qp(e){return Fo.call(Ys,e)?!0:Fo.call(Ks,e)?!1:$p.test(e)?Ys[e]=!0:(Ks[e]=!0,!1)}function Kp(e,t,r,n){if(r!==null&&r.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:r!==null?!r.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Yp(e,t,r,n){if(t===null||typeof t>"u"||Kp(e,t,r,n))return!0;if(n)return!1;if(r!==null)switch(r.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 We(e,t,r,n,l,i,o){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=l,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=o}var Te={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Te[e]=new We(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Te[t]=new We(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Te[e]=new We(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Te[e]=new We(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){Te[e]=new We(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Te[e]=new We(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Te[e]=new We(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Te[e]=new We(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Te[e]=new We(e,5,!1,e.toLowerCase(),null,!1,!1)});var Oa=/[\-:]([a-z])/g;function Fa(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(Oa,Fa);Te[t]=new We(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(Oa,Fa);Te[t]=new We(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(Oa,Fa);Te[t]=new We(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Te[e]=new We(e,1,!1,e.toLowerCase(),null,!1,!1)});Te.xlinkHref=new We("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Te[e]=new We(e,1,!1,e.toLowerCase(),null,!0,!0)});function Aa(e,t,r,n){var l=Te.hasOwnProperty(t)?Te[t]:null;(l!==null?l.type!==0:n||!(2a||l[o]!==i[a]){var s=`
-`+l[o].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=o&&0<=a);break}}}finally{ao=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?In(e):""}function Xp(e){switch(e.tag){case 5:return In(e.type);case 16:return In("Lazy");case 13:return In("Suspense");case 19:return In("SuspenseList");case 0:case 2:case 15:return e=so(e.type,!1),e;case 11:return e=so(e.type.render,!1),e;case 1:return e=so(e.type,!0),e;default:return""}}function Wo(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 Br:return"Fragment";case Wr:return"Portal";case Ao:return"Profiler";case ba:return"StrictMode";case bo:return"Suspense";case Uo:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case $d:return(e.displayName||"Context")+".Consumer";case Vd:return(e._context.displayName||"Context")+".Provider";case Ua:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Wa:return t=e.displayName||null,t!==null?t:Wo(e.type)||"Memo";case Ht:t=e._payload,e=e._init;try{return Wo(e(t))}catch{}}return null}function Gp(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 Wo(t);case 8:return t===ba?"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 lr(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Kd(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Jp(e){var t=Kd(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var l=r.get,i=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(o){n=""+o,i.call(this,o)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(o){n=""+o},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Ll(e){e._valueTracker||(e._valueTracker=Jp(e))}function Yd(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n="";return e&&(n=Kd(e)?e.checked?"true":"false":e.value),e=n,e!==r?(t.setValue(e),!0):!1}function ai(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 Bo(e,t){var r=t.checked;return he({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function Gs(e,t){var r=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;r=lr(t.value!=null?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Xd(e,t){t=t.checked,t!=null&&Aa(e,"checked",t,!1)}function Ho(e,t){Xd(e,t);var r=lr(t.value),n=t.type;if(r!=null)n==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Vo(e,t.type,r):t.hasOwnProperty("defaultValue")&&Vo(e,t.type,lr(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Js(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function Vo(e,t,r){(t!=="number"||ai(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var On=Array.isArray;function qr(e,t,r,n){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=zl.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Gn(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var Un={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},Zp=["Webkit","ms","Moz","O"];Object.keys(Un).forEach(function(e){Zp.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Un[t]=Un[e]})});function qd(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||Un.hasOwnProperty(e)&&Un[e]?(""+t).trim():t+"px"}function ec(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var n=r.indexOf("--")===0,l=qd(r,t[r],n);r==="float"&&(r="cssFloat"),n?e.setProperty(r,l):e[r]=l}}var qp=he({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 Ko(e,t){if(t){if(qp[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(T(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(T(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(T(61))}if(t.style!=null&&typeof t.style!="object")throw Error(T(62))}}function Yo(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 Xo=null;function Ba(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Go=null,en=null,tn=null;function eu(e){if(e=yl(e)){if(typeof Go!="function")throw Error(T(280));var t=e.stateNode;t&&(t=bi(t),Go(e.stateNode,e.type,t))}}function tc(e){en?tn?tn.push(e):tn=[e]:en=e}function rc(){if(en){var e=en,t=tn;if(tn=en=null,eu(e),t)for(e=0;e>>=0,e===0?32:31-(dh(e)/ch|0)|0}var Ml=64,Nl=4194304;function Fn(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 ci(e,t){var r=e.pendingLanes;if(r===0)return 0;var n=0,l=e.suspendedLanes,i=e.pingedLanes,o=r&268435455;if(o!==0){var a=o&~l;a!==0?n=Fn(a):(i&=o,i!==0&&(n=Fn(i)))}else o=r&~l,o!==0?n=Fn(o):i!==0&&(n=Fn(i));if(n===0)return 0;if(t!==0&&t!==n&&!(t&l)&&(l=n&-n,i=t&-t,l>=i||l===16&&(i&4194240)!==0))return t;if(n&4&&(n|=r&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0r;r++)t.push(e);return t}function gl(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-mt(t),e[t]=r}function mh(e,t){var r=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 n=e.eventTimes;for(e=e.expirationTimes;0=Bn),uu=" ",du=!1;function kc(e,t){switch(e){case"keyup":return Hh.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Cc(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Hr=!1;function $h(e,t){switch(e){case"compositionend":return Cc(t);case"keypress":return t.which!==32?null:(du=!0,uu);case"textInput":return e=t.data,e===uu&&du?null:e;default:return null}}function Qh(e,t){if(Hr)return e==="compositionend"||!Ga&&kc(e,t)?(e=wc(),Gl=Ka=Kt=null,Hr=!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:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=hu(r)}}function Pc(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Pc(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function _c(){for(var e=window,t=ai();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=ai(e.document)}return t}function Ja(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 tm(e){var t=_c(),r=e.focusedElem,n=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&Pc(r.ownerDocument.documentElement,r)){if(n!==null&&Ja(r)){if(t=n.start,e=n.end,e===void 0&&(e=t),"selectionStart"in r)r.selectionStart=t,r.selectionEnd=Math.min(e,r.value.length);else if(e=(t=r.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=r.textContent.length,i=Math.min(n.start,l);n=n.end===void 0?i:Math.min(n.end,l),!e.extend&&i>n&&(l=n,n=i,i=l),l=mu(r,i);var o=mu(r,n);l&&o&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==o.node||e.focusOffset!==o.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),i>n?(e.addRange(t),e.extend(o.node,o.offset)):(t.setEnd(o.node,o.offset),e.addRange(t)))}}for(t=[],e=r;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;r=document.documentMode,Vr=null,ra=null,Vn=null,na=!1;function gu(e,t,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;na||Vr==null||Vr!==ai(n)||(n=Vr,"selectionStart"in n&&Ja(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Vn&&rl(Vn,n)||(Vn=n,n=hi(ra,"onSelect"),0Kr||(e.current=ua[Kr],ua[Kr]=null,Kr--)}function ae(e,t){Kr++,ua[Kr]=e.current,e.current=t}var ir={},De=ar(ir),$e=ar(!1),jr=ir;function an(e,t){var r=e.type.contextTypes;if(!r)return ir;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var l={},i;for(i in r)l[i]=t[i];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function Qe(e){return e=e.childContextTypes,e!=null}function gi(){ue($e),ue(De)}function Cu(e,t,r){if(De.current!==ir)throw Error(T(168));ae(De,t),ae($e,r)}function Fc(e,t,r){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var l in n)if(!(l in t))throw Error(T(108,Gp(e)||"Unknown",l));return he({},r,n)}function vi(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||ir,jr=De.current,ae(De,e),ae($e,$e.current),!0}function Eu(e,t,r){var n=e.stateNode;if(!n)throw Error(T(169));r?(e=Fc(e,t,jr),n.__reactInternalMemoizedMergedChildContext=e,ue($e),ue(De),ae(De,e)):ue($e),ae($e,r)}var Pt=null,Ui=!1,Co=!1;function Ac(e){Pt===null?Pt=[e]:Pt.push(e)}function pm(e){Ui=!0,Ac(e)}function sr(){if(!Co&&Pt!==null){Co=!0;var e=0,t=ne;try{var r=Pt;for(ne=1;e>=o,l-=o,_t=1<<32-mt(t)+l|r<P?(W=y,y=null):W=y.sibling;var N=p(m,y,v[P],E);if(N===null){y===null&&(y=W);break}e&&y&&N.alternate===null&&t(m,y),f=i(N,f,P),M===null?j=N:M.sibling=N,M=N,y=W}if(P===v.length)return r(m,y),ce&&mr(m,P),j;if(y===null){for(;PP?(W=y,y=null):W=y.sibling;var V=p(m,y,N.value,E);if(V===null){y===null&&(y=W);break}e&&y&&V.alternate===null&&t(m,y),f=i(V,f,P),M===null?j=V:M.sibling=V,M=V,y=W}if(N.done)return r(m,y),ce&&mr(m,P),j;if(y===null){for(;!N.done;P++,N=v.next())N=c(m,N.value,E),N!==null&&(f=i(N,f,P),M===null?j=N:M.sibling=N,M=N);return ce&&mr(m,P),j}for(y=n(m,y);!N.done;P++,N=v.next())N=w(y,m,P,N.value,E),N!==null&&(e&&N.alternate!==null&&y.delete(N.key===null?P:N.key),f=i(N,f,P),M===null?j=N:M.sibling=N,M=N);return e&&y.forEach(function(J){return t(m,J)}),ce&&mr(m,P),j}function L(m,f,v,E){if(typeof v=="object"&&v!==null&&v.type===Br&&v.key===null&&(v=v.props.children),typeof v=="object"&&v!==null){switch(v.$$typeof){case Tl:e:{for(var j=v.key,M=f;M!==null;){if(M.key===j){if(j=v.type,j===Br){if(M.tag===7){r(m,M.sibling),f=l(M,v.props.children),f.return=m,m=f;break e}}else if(M.elementType===j||typeof j=="object"&&j!==null&&j.$$typeof===Ht&&Pu(j)===M.type){r(m,M.sibling),f=l(M,v.props),f.ref=Pn(m,M,v),f.return=m,m=f;break e}r(m,M);break}else t(m,M);M=M.sibling}v.type===Br?(f=Er(v.props.children,m.mode,E,v.key),f.return=m,m=f):(E=li(v.type,v.key,v.props,null,m.mode,E),E.ref=Pn(m,f,v),E.return=m,m=E)}return o(m);case Wr:e:{for(M=v.key;f!==null;){if(f.key===M)if(f.tag===4&&f.stateNode.containerInfo===v.containerInfo&&f.stateNode.implementation===v.implementation){r(m,f.sibling),f=l(f,v.children||[]),f.return=m,m=f;break e}else{r(m,f);break}else t(m,f);f=f.sibling}f=zo(v,m.mode,E),f.return=m,m=f}return o(m);case Ht:return M=v._init,L(m,f,M(v._payload),E)}if(On(v))return k(m,f,v,E);if(kn(v))return S(m,f,v,E);Ul(m,v)}return typeof v=="string"&&v!==""||typeof v=="number"?(v=""+v,f!==null&&f.tag===6?(r(m,f.sibling),f=l(f,v),f.return=m,m=f):(r(m,f),f=Lo(v,m.mode,E),f.return=m,m=f),o(m)):r(m,f)}return L}var un=Bc(!0),Hc=Bc(!1),wi=ar(null),Si=null,Gr=null,ts=null;function rs(){ts=Gr=Si=null}function ns(e){var t=wi.current;ue(wi),e._currentValue=t}function fa(e,t,r){for(;e!==null;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,n!==null&&(n.childLanes|=t)):n!==null&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===r)break;e=e.return}}function nn(e,t){Si=e,ts=Gr=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Ve=!0),e.firstContext=null)}function at(e){var t=e._currentValue;if(ts!==e)if(e={context:e,memoizedValue:t,next:null},Gr===null){if(Si===null)throw Error(T(308));Gr=e,Si.dependencies={lanes:0,firstContext:e}}else Gr=Gr.next=e;return t}var wr=null;function ls(e){wr===null?wr=[e]:wr.push(e)}function Vc(e,t,r,n){var l=t.interleaved;return l===null?(r.next=r,ls(t)):(r.next=l.next,l.next=r),t.interleaved=r,Dt(e,n)}function Dt(e,t){e.lanes|=t;var r=e.alternate;for(r!==null&&(r.lanes|=t),r=e,e=e.return;e!==null;)e.childLanes|=t,r=e.alternate,r!==null&&(r.childLanes|=t),r=e,e=e.return;return r.tag===3?r.stateNode:null}var Vt=!1;function is(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function $c(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 Lt(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function er(e,t,r){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,G&2){var l=n.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),n.pending=t,Dt(e,r)}return l=n.interleaved,l===null?(t.next=t,ls(n)):(t.next=l.next,l.next=t),n.interleaved=t,Dt(e,r)}function Zl(e,t,r){if(t=t.updateQueue,t!==null&&(t=t.shared,(r&4194240)!==0)){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,Va(e,r)}}function _u(e,t){var r=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,r===n)){var l=null,i=null;if(r=r.firstBaseUpdate,r!==null){do{var o={eventTime:r.eventTime,lane:r.lane,tag:r.tag,payload:r.payload,callback:r.callback,next:null};i===null?l=i=o:i=i.next=o,r=r.next}while(r!==null);i===null?l=i=t:i=i.next=t}else l=i=t;r={baseState:n.baseState,firstBaseUpdate:l,lastBaseUpdate:i,shared:n.shared,effects:n.effects},e.updateQueue=r;return}e=r.lastBaseUpdate,e===null?r.firstBaseUpdate=t:e.next=t,r.lastBaseUpdate=t}function ki(e,t,r,n){var l=e.updateQueue;Vt=!1;var i=l.firstBaseUpdate,o=l.lastBaseUpdate,a=l.shared.pending;if(a!==null){l.shared.pending=null;var s=a,u=s.next;s.next=null,o===null?i=u:o.next=u,o=s;var h=e.alternate;h!==null&&(h=h.updateQueue,a=h.lastBaseUpdate,a!==o&&(a===null?h.firstBaseUpdate=u:a.next=u,h.lastBaseUpdate=s))}if(i!==null){var c=l.baseState;o=0,h=u=s=null,a=i;do{var p=a.lane,w=a.eventTime;if((n&p)===p){h!==null&&(h=h.next={eventTime:w,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var k=e,S=a;switch(p=t,w=r,S.tag){case 1:if(k=S.payload,typeof k=="function"){c=k.call(w,c,p);break e}c=k;break e;case 3:k.flags=k.flags&-65537|128;case 0:if(k=S.payload,p=typeof k=="function"?k.call(w,c,p):k,p==null)break e;c=he({},c,p);break e;case 2:Vt=!0}}a.callback!==null&&a.lane!==0&&(e.flags|=64,p=l.effects,p===null?l.effects=[a]:p.push(a))}else w={eventTime:w,lane:p,tag:a.tag,payload:a.payload,callback:a.callback,next:null},h===null?(u=h=w,s=c):h=h.next=w,o|=p;if(a=a.next,a===null){if(a=l.shared.pending,a===null)break;p=a,a=p.next,p.next=null,l.lastBaseUpdate=p,l.shared.pending=null}}while(!0);if(h===null&&(s=c),l.baseState=s,l.firstBaseUpdate=u,l.lastBaseUpdate=h,t=l.shared.interleaved,t!==null){l=t;do o|=l.lane,l=l.next;while(l!==t)}else i===null&&(l.shared.lanes=0);_r|=o,e.lanes=o,e.memoizedState=c}}function Tu(e,t,r){if(e=t.effects,t.effects=null,e!==null)for(t=0;tr?r:4,e(!0);var n=jo.transition;jo.transition={};try{e(!1),t()}finally{ne=r,jo.transition=n}}function uf(){return st().memoizedState}function vm(e,t,r){var n=rr(e);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},df(e))cf(t,r);else if(r=Vc(e,t,r,n),r!==null){var l=be();gt(r,e,n,l),ff(r,t,n)}}function ym(e,t,r){var n=rr(e),l={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(df(e))cf(t,l);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var o=t.lastRenderedState,a=i(o,r);if(l.hasEagerState=!0,l.eagerState=a,vt(a,o)){var s=t.interleaved;s===null?(l.next=l,ls(t)):(l.next=s.next,s.next=l),t.interleaved=l;return}}catch{}finally{}r=Vc(e,t,l,n),r!==null&&(l=be(),gt(r,e,n,l),ff(r,t,n))}}function df(e){var t=e.alternate;return e===pe||t!==null&&t===pe}function cf(e,t){$n=Ei=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function ff(e,t,r){if(r&4194240){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,Va(e,r)}}var ji={readContext:at,useCallback:ze,useContext:ze,useEffect:ze,useImperativeHandle:ze,useInsertionEffect:ze,useLayoutEffect:ze,useMemo:ze,useReducer:ze,useRef:ze,useState:ze,useDebugValue:ze,useDeferredValue:ze,useTransition:ze,useMutableSource:ze,useSyncExternalStore:ze,useId:ze,unstable_isNewReconciler:!1},xm={readContext:at,useCallback:function(e,t){return wt().memoizedState=[e,t===void 0?null:t],e},useContext:at,useEffect:zu,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,ei(4194308,4,nf.bind(null,t,e),r)},useLayoutEffect:function(e,t){return ei(4194308,4,e,t)},useInsertionEffect:function(e,t){return ei(4,2,e,t)},useMemo:function(e,t){var r=wt();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var n=wt();return t=r!==void 0?r(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=vm.bind(null,pe,e),[n.memoizedState,e]},useRef:function(e){var t=wt();return e={current:e},t.memoizedState=e},useState:Lu,useDebugValue:ps,useDeferredValue:function(e){return wt().memoizedState=e},useTransition:function(){var e=Lu(!1),t=e[0];return e=gm.bind(null,e[1]),wt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var n=pe,l=wt();if(ce){if(r===void 0)throw Error(T(407));r=r()}else{if(r=t(),je===null)throw Error(T(349));Pr&30||Xc(n,t,r)}l.memoizedState=r;var i={value:r,getSnapshot:t};return l.queue=i,zu(Jc.bind(null,n,i,e),[e]),n.flags|=2048,dl(9,Gc.bind(null,n,i,r,t),void 0,null),r},useId:function(){var e=wt(),t=je.identifierPrefix;if(ce){var r=Tt,n=_t;r=(n&~(1<<32-mt(n)-1)).toString(32)+r,t=":"+t+"R"+r,r=sl++,0<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=o.createElement(r,{is:n.is}):(e=o.createElement(r),r==="select"&&(o=e,n.multiple?o.multiple=!0:n.size&&(o.size=n.size))):e=o.createElementNS(e,r),e[St]=t,e[il]=n,kf(e,t,!1,!1),t.stateNode=e;e:{switch(o=Yo(r,n),r){case"dialog":se("cancel",e),se("close",e),l=n;break;case"iframe":case"object":case"embed":se("load",e),l=n;break;case"video":case"audio":for(l=0;lfn&&(t.flags|=128,n=!0,_n(i,!1),t.lanes=4194304)}else{if(!n)if(e=Ci(o),e!==null){if(t.flags|=128,n=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),_n(i,!0),i.tail===null&&i.tailMode==="hidden"&&!o.alternate&&!ce)return Me(t),null}else 2*ye()-i.renderingStartTime>fn&&r!==1073741824&&(t.flags|=128,n=!0,_n(i,!1),t.lanes=4194304);i.isBackwards?(o.sibling=t.child,t.child=o):(r=i.last,r!==null?r.sibling=o:t.child=o,i.last=o)}return i.tail!==null?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=ye(),t.sibling=null,r=fe.current,ae(fe,n?r&1|2:r&1),t):(Me(t),null);case 22:case 23:return xs(),n=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(t.flags|=8192),n&&t.mode&1?Xe&1073741824&&(Me(t),t.subtreeFlags&6&&(t.flags|=8192)):Me(t),null;case 24:return null;case 25:return null}throw Error(T(156,t.tag))}function Pm(e,t){switch(qa(t),t.tag){case 1:return Qe(t.type)&&gi(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return dn(),ue($e),ue(De),ss(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return as(t),null;case 13:if(ue(fe),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(T(340));sn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return ue(fe),null;case 4:return dn(),null;case 10:return ns(t.type._context),null;case 22:case 23:return xs(),null;case 24:return null;default:return null}}var Bl=!1,Ne=!1,_m=typeof WeakSet=="function"?WeakSet:Set,I=null;function Jr(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){ve(e,t,n)}else r.current=null}function Sa(e,t,r){try{r()}catch(n){ve(e,t,n)}}var Bu=!1;function Tm(e,t){if(la=fi,e=_c(),Ja(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var n=r.getSelection&&r.getSelection();if(n&&n.rangeCount!==0){r=n.anchorNode;var l=n.anchorOffset,i=n.focusNode;n=n.focusOffset;try{r.nodeType,i.nodeType}catch{r=null;break e}var o=0,a=-1,s=-1,u=0,h=0,c=e,p=null;t:for(;;){for(var w;c!==r||l!==0&&c.nodeType!==3||(a=o+l),c!==i||n!==0&&c.nodeType!==3||(s=o+n),c.nodeType===3&&(o+=c.nodeValue.length),(w=c.firstChild)!==null;)p=c,c=w;for(;;){if(c===e)break t;if(p===r&&++u===l&&(a=o),p===i&&++h===n&&(s=o),(w=c.nextSibling)!==null)break;c=p,p=c.parentNode}c=w}r=a===-1||s===-1?null:{start:a,end:s}}else r=null}r=r||{start:0,end:0}}else r=null;for(ia={focusedElem:e,selectionRange:r},fi=!1,I=t;I!==null;)if(t=I,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,I=e;else for(;I!==null;){t=I;try{var k=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(k!==null){var S=k.memoizedProps,L=k.memoizedState,m=t.stateNode,f=m.getSnapshotBeforeUpdate(t.elementType===t.type?S:ct(t.type,S),L);m.__reactInternalSnapshotBeforeUpdate=f}break;case 3:var v=t.stateNode.containerInfo;v.nodeType===1?v.textContent="":v.nodeType===9&&v.documentElement&&v.removeChild(v.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(T(163))}}catch(E){ve(t,t.return,E)}if(e=t.sibling,e!==null){e.return=t.return,I=e;break}I=t.return}return k=Bu,Bu=!1,k}function Qn(e,t,r){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var l=n=n.next;do{if((l.tag&e)===e){var i=l.destroy;l.destroy=void 0,i!==void 0&&Sa(t,r,i)}l=l.next}while(l!==n)}}function Hi(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function ka(e){var t=e.ref;if(t!==null){var r=e.stateNode;switch(e.tag){case 5:e=r;break;default:e=r}typeof t=="function"?t(e):t.current=e}}function jf(e){var t=e.alternate;t!==null&&(e.alternate=null,jf(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[St],delete t[il],delete t[sa],delete t[cm],delete t[fm])),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 Rf(e){return e.tag===5||e.tag===3||e.tag===4}function Hu(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Rf(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 Ca(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=mi));else if(n!==4&&(e=e.child,e!==null))for(Ca(e,t,r),e=e.sibling;e!==null;)Ca(e,t,r),e=e.sibling}function Ea(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(Ea(e,t,r),e=e.sibling;e!==null;)Ea(e,t,r),e=e.sibling}var Pe=null,ft=!1;function Wt(e,t,r){for(r=r.child;r!==null;)Pf(e,t,r),r=r.sibling}function Pf(e,t,r){if(kt&&typeof kt.onCommitFiberUnmount=="function")try{kt.onCommitFiberUnmount(Ii,r)}catch{}switch(r.tag){case 5:Ne||Jr(r,t);case 6:var n=Pe,l=ft;Pe=null,Wt(e,t,r),Pe=n,ft=l,Pe!==null&&(ft?(e=Pe,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):Pe.removeChild(r.stateNode));break;case 18:Pe!==null&&(ft?(e=Pe,r=r.stateNode,e.nodeType===8?ko(e.parentNode,r):e.nodeType===1&&ko(e,r),el(e)):ko(Pe,r.stateNode));break;case 4:n=Pe,l=ft,Pe=r.stateNode.containerInfo,ft=!0,Wt(e,t,r),Pe=n,ft=l;break;case 0:case 11:case 14:case 15:if(!Ne&&(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){l=n=n.next;do{var i=l,o=i.destroy;i=i.tag,o!==void 0&&(i&2||i&4)&&Sa(r,t,o),l=l.next}while(l!==n)}Wt(e,t,r);break;case 1:if(!Ne&&(Jr(r,t),n=r.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(a){ve(r,t,a)}Wt(e,t,r);break;case 21:Wt(e,t,r);break;case 22:r.mode&1?(Ne=(n=Ne)||r.memoizedState!==null,Wt(e,t,r),Ne=n):Wt(e,t,r);break;default:Wt(e,t,r)}}function Vu(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new _m),t.forEach(function(n){var l=Am.bind(null,e,n);r.has(n)||(r.add(n),n.then(l,l))})}}function dt(e,t){var r=t.deletions;if(r!==null)for(var n=0;nl&&(l=o),n&=~i}if(n=l,n=ye()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*zm(n/1960))-n,10e?16:e,Yt===null)var n=!1;else{if(e=Yt,Yt=null,_i=0,G&6)throw Error(T(331));var l=G;for(G|=4,I=e.current;I!==null;){var i=I,o=i.child;if(I.flags&16){var a=i.deletions;if(a!==null){for(var s=0;sye()-vs?Cr(e,0):gs|=r),Ke(e,t)}function If(e,t){t===0&&(e.mode&1?(t=Nl,Nl<<=1,!(Nl&130023424)&&(Nl=4194304)):t=1);var r=be();e=Dt(e,t),e!==null&&(gl(e,t,r),Ke(e,r))}function Fm(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),If(e,r)}function Am(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,l=e.memoizedState;l!==null&&(r=l.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(T(314))}n!==null&&n.delete(t),If(e,r)}var Of;Of=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||$e.current)Ve=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return Ve=!1,jm(e,t,r);Ve=!!(e.flags&131072)}else Ve=!1,ce&&t.flags&1048576&&bc(t,xi,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;ti(e,t),e=t.pendingProps;var l=an(t,De.current);nn(t,r),l=ds(null,t,n,e,l,r);var i=cs();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,Qe(n)?(i=!0,vi(t)):i=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,is(t),l.updater=Bi,t.stateNode=l,l._reactInternals=t,ha(t,n,e,r),t=va(null,t,n,!0,i,r)):(t.tag=0,ce&&i&&Za(t),Ae(null,t,l,r),t=t.child),t;case 16:n=t.elementType;e:{switch(ti(e,t),e=t.pendingProps,l=n._init,n=l(n._payload),t.type=n,l=t.tag=Um(n),e=ct(n,e),l){case 0:t=ga(null,t,n,e,r);break e;case 1:t=bu(null,t,n,e,r);break e;case 11:t=Fu(null,t,n,e,r);break e;case 14:t=Au(null,t,n,ct(n.type,e),r);break e}throw Error(T(306,n,""))}return t;case 0:return n=t.type,l=t.pendingProps,l=t.elementType===n?l:ct(n,l),ga(e,t,n,l,r);case 1:return n=t.type,l=t.pendingProps,l=t.elementType===n?l:ct(n,l),bu(e,t,n,l,r);case 3:e:{if(xf(t),e===null)throw Error(T(387));n=t.pendingProps,i=t.memoizedState,l=i.element,$c(e,t),ki(t,n,null,r);var o=t.memoizedState;if(n=o.element,i.isDehydrated)if(i={element:n,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){l=cn(Error(T(423)),t),t=Uu(e,t,n,r,l);break e}else if(n!==l){l=cn(Error(T(424)),t),t=Uu(e,t,n,r,l);break e}else for(Je=qt(t.stateNode.containerInfo.firstChild),Ze=t,ce=!0,ht=null,r=Hc(t,null,n,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(sn(),n===l){t=It(e,t,r);break e}Ae(e,t,n,r)}t=t.child}return t;case 5:return Qc(t),e===null&&ca(t),n=t.type,l=t.pendingProps,i=e!==null?e.memoizedProps:null,o=l.children,oa(n,l)?o=null:i!==null&&oa(n,i)&&(t.flags|=32),yf(e,t),Ae(e,t,o,r),t.child;case 6:return e===null&&ca(t),null;case 13:return wf(e,t,r);case 4:return os(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=un(t,null,n,r):Ae(e,t,n,r),t.child;case 11:return n=t.type,l=t.pendingProps,l=t.elementType===n?l:ct(n,l),Fu(e,t,n,l,r);case 7:return Ae(e,t,t.pendingProps,r),t.child;case 8:return Ae(e,t,t.pendingProps.children,r),t.child;case 12:return Ae(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(n=t.type._context,l=t.pendingProps,i=t.memoizedProps,o=l.value,ae(wi,n._currentValue),n._currentValue=o,i!==null)if(vt(i.value,o)){if(i.children===l.children&&!$e.current){t=It(e,t,r);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var a=i.dependencies;if(a!==null){o=i.child;for(var s=a.firstContext;s!==null;){if(s.context===n){if(i.tag===1){s=Lt(-1,r&-r),s.tag=2;var u=i.updateQueue;if(u!==null){u=u.shared;var h=u.pending;h===null?s.next=s:(s.next=h.next,h.next=s),u.pending=s}}i.lanes|=r,s=i.alternate,s!==null&&(s.lanes|=r),fa(i.return,r,t),a.lanes|=r;break}s=s.next}}else if(i.tag===10)o=i.type===t.type?null:i.child;else if(i.tag===18){if(o=i.return,o===null)throw Error(T(341));o.lanes|=r,a=o.alternate,a!==null&&(a.lanes|=r),fa(o,r,t),o=i.sibling}else o=i.child;if(o!==null)o.return=i;else for(o=i;o!==null;){if(o===t){o=null;break}if(i=o.sibling,i!==null){i.return=o.return,o=i;break}o=o.return}i=o}Ae(e,t,l.children,r),t=t.child}return t;case 9:return l=t.type,n=t.pendingProps.children,nn(t,r),l=at(l),n=n(l),t.flags|=1,Ae(e,t,n,r),t.child;case 14:return n=t.type,l=ct(n,t.pendingProps),l=ct(n.type,l),Au(e,t,n,l,r);case 15:return gf(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,l=t.pendingProps,l=t.elementType===n?l:ct(n,l),ti(e,t),t.tag=1,Qe(n)?(e=!0,vi(t)):e=!1,nn(t,r),pf(t,n,l),ha(t,n,l,r),va(null,t,n,!0,e,r);case 19:return Sf(e,t,r);case 22:return vf(e,t,r)}throw Error(T(156,t.tag))};function Ff(e,t){return uc(e,t)}function bm(e,t,r,n){this.tag=e,this.key=r,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=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function it(e,t,r,n){return new bm(e,t,r,n)}function Ss(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Um(e){if(typeof e=="function")return Ss(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ua)return 11;if(e===Wa)return 14}return 2}function nr(e,t){var r=e.alternate;return r===null?(r=it(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function li(e,t,r,n,l,i){var o=2;if(n=e,typeof e=="function")Ss(e)&&(o=1);else if(typeof e=="string")o=5;else e:switch(e){case Br:return Er(r.children,l,i,t);case ba:o=8,l|=8;break;case Ao:return e=it(12,r,t,l|2),e.elementType=Ao,e.lanes=i,e;case bo:return e=it(13,r,t,l),e.elementType=bo,e.lanes=i,e;case Uo:return e=it(19,r,t,l),e.elementType=Uo,e.lanes=i,e;case Qd:return $i(r,l,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Vd:o=10;break e;case $d:o=9;break e;case Ua:o=11;break e;case Wa:o=14;break e;case Ht:o=16,n=null;break e}throw Error(T(130,e==null?e:typeof e,""))}return t=it(o,r,t,l),t.elementType=e,t.type=n,t.lanes=i,t}function Er(e,t,r,n){return e=it(7,e,n,t),e.lanes=r,e}function $i(e,t,r,n){return e=it(22,e,n,t),e.elementType=Qd,e.lanes=r,e.stateNode={isHidden:!1},e}function Lo(e,t,r){return e=it(6,e,null,t),e.lanes=r,e}function zo(e,t,r){return t=it(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Wm(e,t,r,n,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=co(0),this.expirationTimes=co(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=co(0),this.identifierPrefix=n,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function ks(e,t,r,n,l,i,o,a,s){return e=new Wm(e,t,r,a,s),t===1?(t=1,i===!0&&(t|=8)):t=0,i=it(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},is(i),e}function Bm(e,t,r){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Wf)}catch(e){console.error(e)}}Wf(),Ud.exports=et;var Rs=Ud.exports;const Km=Pd(Rs),Ym=Rd({__proto__:null,default:Km},[Rs]);var Zu=Rs;Oo.createRoot=Zu.createRoot,Oo.hydrateRoot=Zu.hydrateRoot;/**
- * @remix-run/router v1.23.2
- *
- * Copyright (c) Remix Software Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE.md file in the root directory of this source tree.
- *
- * @license MIT
- */function de(){return de=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function Lr(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function Gm(){return Math.random().toString(36).substr(2,8)}function ed(e,t){return{usr:e.state,key:e.key,idx:t}}function fl(e,t,r,n){return r===void 0&&(r=null),de({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?ur(t):t,{state:r,key:t&&t.key||n||Gm()})}function zr(e){let{pathname:t="/",search:r="",hash:n=""}=e;return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function ur(e){let t={};if(e){let r=e.indexOf("#");r>=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function Jm(e,t,r,n){n===void 0&&(n={});let{window:l=document.defaultView,v5Compat:i=!1}=n,o=l.history,a=we.Pop,s=null,u=h();u==null&&(u=0,o.replaceState(de({},o.state,{idx:u}),""));function h(){return(o.state||{idx:null}).idx}function c(){a=we.Pop;let L=h(),m=L==null?null:L-u;u=L,s&&s({action:a,location:S.location,delta:m})}function p(L,m){a=we.Push;let f=fl(S.location,L,m);u=h()+1;let v=ed(f,u),E=S.createHref(f);try{o.pushState(v,"",E)}catch(j){if(j instanceof DOMException&&j.name==="DataCloneError")throw j;l.location.assign(E)}i&&s&&s({action:a,location:S.location,delta:1})}function w(L,m){a=we.Replace;let f=fl(S.location,L,m);u=h();let v=ed(f,u),E=S.createHref(f);o.replaceState(v,"",E),i&&s&&s({action:a,location:S.location,delta:0})}function k(L){let m=l.location.origin!=="null"?l.location.origin:l.location.href,f=typeof L=="string"?L:zr(L);return f=f.replace(/ $/,"%20"),K(m,"No window.location.(origin|href) available to create URL for href: "+f),new URL(f,m)}let S={get action(){return a},get location(){return e(l,o)},listen(L){if(s)throw new Error("A history only accepts one active listener");return l.addEventListener(qu,c),s=L,()=>{l.removeEventListener(qu,c),s=null}},createHref(L){return t(l,L)},createURL:k,encodeLocation(L){let m=k(L);return{pathname:m.pathname,search:m.search,hash:m.hash}},push:p,replace:w,go(L){return o.go(L)}};return S}var re;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(re||(re={}));const Zm=new Set(["lazy","caseSensitive","path","id","index","children"]);function qm(e){return e.index===!0}function zi(e,t,r,n){return r===void 0&&(r=[]),n===void 0&&(n={}),e.map((l,i)=>{let o=[...r,String(i)],a=typeof l.id=="string"?l.id:o.join("-");if(K(l.index!==!0||!l.children,"Cannot specify children on an index route"),K(!n[a],'Found a route id collision on id "'+a+`". Route id's must be globally unique within Data Router usages`),qm(l)){let s=de({},l,t(l),{id:a});return n[a]=s,s}else{let s=de({},l,t(l),{id:a,children:void 0});return n[a]=s,l.children&&(s.children=zi(l.children,t,o,n)),s}})}function vr(e,t,r){return r===void 0&&(r="/"),ii(e,t,r,!1)}function ii(e,t,r,n){let l=typeof t=="string"?ur(t):t,i=gn(l.pathname||"/",r);if(i==null)return null;let o=Bf(e);tg(o);let a=null;for(let s=0;a==null&&s{let s={relativePath:a===void 0?i.path||"":a,caseSensitive:i.caseSensitive===!0,childrenIndex:o,route:i};s.relativePath.startsWith("/")&&(K(s.relativePath.startsWith(n),'Absolute route path "'+s.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),s.relativePath=s.relativePath.slice(n.length));let u=zt([n,s.relativePath]),h=r.concat(s);i.children&&i.children.length>0&&(K(i.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+u+'".')),Bf(i.children,t,h,u)),!(i.path==null&&!i.index)&&t.push({path:u,score:sg(u,i.index),routesMeta:h})};return e.forEach((i,o)=>{var a;if(i.path===""||!((a=i.path)!=null&&a.includes("?")))l(i,o);else for(let s of Hf(i.path))l(i,o,s)}),t}function Hf(e){let t=e.split("/");if(t.length===0)return[];let[r,...n]=t,l=r.endsWith("?"),i=r.replace(/\?$/,"");if(n.length===0)return l?[i,""]:[i];let o=Hf(n.join("/")),a=[];return a.push(...o.map(s=>s===""?i:[i,s].join("/"))),l&&a.push(...o),a.map(s=>e.startsWith("/")&&s===""?"/":s)}function tg(e){e.sort((t,r)=>t.score!==r.score?r.score-t.score:ug(t.routesMeta.map(n=>n.childrenIndex),r.routesMeta.map(n=>n.childrenIndex)))}const rg=/^:[\w-]+$/,ng=3,lg=2,ig=1,og=10,ag=-2,td=e=>e==="*";function sg(e,t){let r=e.split("/"),n=r.length;return r.some(td)&&(n+=ag),t&&(n+=lg),r.filter(l=>!td(l)).reduce((l,i)=>l+(rg.test(i)?ng:i===""?ig:og),n)}function ug(e,t){return e.length===t.length&&e.slice(0,-1).every((n,l)=>n===t[l])?e[e.length-1]-t[t.length-1]:0}function dg(e,t,r){r===void 0&&(r=!1);let{routesMeta:n}=e,l={},i="/",o=[];for(let a=0;a{let{paramName:p,isOptional:w}=h;if(p==="*"){let S=a[c]||"";o=i.slice(0,i.length-S.length).replace(/(.)\/+$/,"$1")}const k=a[c];return w&&!k?u[p]=void 0:u[p]=(k||"").replace(/%2F/g,"/"),u},{}),pathname:i,pathnameBase:o,pattern:e}}function cg(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!0),Lr(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],l="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(o,a,s)=>(n.push({paramName:a,isOptional:s!=null}),s?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(n.push({paramName:"*"}),l+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?l+="\\/*$":e!==""&&e!=="/"&&(l+="(?:(?=\\/|$))"),[new RegExp(l,t?void 0:"i"),n]}function fg(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return Lr(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function gn(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&n!=="/"?null:e.slice(r)||"/"}const pg=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,hg=e=>pg.test(e);function mg(e,t){t===void 0&&(t="/");let{pathname:r,search:n="",hash:l=""}=typeof e=="string"?ur(e):e,i;if(r)if(hg(r))i=r;else{if(r.includes("//")){let o=r;r=r.replace(/\/\/+/g,"/"),Lr(!1,"Pathnames cannot have embedded double slashes - normalizing "+(o+" -> "+r))}r.startsWith("/")?i=nd(r.substring(1),"/"):i=nd(r,t)}else i=t;return{pathname:i,search:vg(n),hash:yg(l)}}function nd(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(l=>{l===".."?r.length>1&&r.pop():l!=="."&&r.push(l)}),r.length>1?r.join("/"):"/"}function Mo(e,t,r,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+r+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function Vf(e){return e.filter((t,r)=>r===0||t.route.path&&t.route.path.length>0)}function Gi(e,t){let r=Vf(e);return t?r.map((n,l)=>l===r.length-1?n.pathname:n.pathnameBase):r.map(n=>n.pathnameBase)}function Ji(e,t,r,n){n===void 0&&(n=!1);let l;typeof e=="string"?l=ur(e):(l=de({},e),K(!l.pathname||!l.pathname.includes("?"),Mo("?","pathname","search",l)),K(!l.pathname||!l.pathname.includes("#"),Mo("#","pathname","hash",l)),K(!l.search||!l.search.includes("#"),Mo("#","search","hash",l)));let i=e===""||l.pathname==="",o=i?"/":l.pathname,a;if(o==null)a=r;else{let c=t.length-1;if(!n&&o.startsWith("..")){let p=o.split("/");for(;p[0]==="..";)p.shift(),c-=1;l.pathname=p.join("/")}a=c>=0?t[c]:"/"}let s=mg(l,a),u=o&&o!=="/"&&o.endsWith("/"),h=(i||o===".")&&r.endsWith("/");return!s.pathname.endsWith("/")&&(u||h)&&(s.pathname+="/"),s}const zt=e=>e.join("/").replace(/\/\/+/g,"/"),gg=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),vg=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,yg=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;class Mi{constructor(t,r,n,l){l===void 0&&(l=!1),this.status=t,this.statusText=r||"",this.internal=l,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}}function pl(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const $f=["post","put","patch","delete"],xg=new Set($f),wg=["get",...$f],Sg=new Set(wg),kg=new Set([301,302,303,307,308]),Cg=new Set([307,308]),No={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},Eg={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},Ln={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},Ps=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,jg=e=>({hasErrorBoundary:!!e.hasErrorBoundary}),Qf="remix-router-transitions";function Rg(e){const t=e.window?e.window:typeof window<"u"?window:void 0,r=typeof t<"u"&&typeof t.document<"u"&&typeof t.document.createElement<"u",n=!r;K(e.routes.length>0,"You must provide a non-empty routes array to createRouter");let l;if(e.mapRouteProperties)l=e.mapRouteProperties;else if(e.detectErrorBoundary){let g=e.detectErrorBoundary;l=x=>({hasErrorBoundary:g(x)})}else l=jg;let i={},o=zi(e.routes,l,void 0,i),a,s=e.basename||"/",u=e.dataStrategy||Lg,h=e.patchRoutesOnNavigation,c=de({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_partialHydration:!1,v7_prependBasename:!1,v7_relativeSplatPath:!1,v7_skipActionErrorRevalidation:!1},e.future),p=null,w=new Set,k=null,S=null,L=null,m=e.hydrationData!=null,f=vr(o,e.history.location,s),v=!1,E=null;if(f==null&&!h){let g=Be(404,{pathname:e.history.location.pathname}),{matches:x,route:C}=hd(o);f=x,E={[C.id]:g}}f&&!e.hydrationData&&El(f,o,e.history.location.pathname).active&&(f=null);let j;if(f)if(f.some(g=>g.route.lazy))j=!1;else if(!f.some(g=>g.route.loader))j=!0;else if(c.v7_partialHydration){let g=e.hydrationData?e.hydrationData.loaderData:null,x=e.hydrationData?e.hydrationData.errors:null;if(x){let C=f.findIndex(_=>x[_.route.id]!==void 0);j=f.slice(0,C+1).every(_=>!La(_.route,g,x))}else j=f.every(C=>!La(C.route,g,x))}else j=e.hydrationData!=null;else if(j=!1,f=[],c.v7_partialHydration){let g=El(null,o,e.history.location.pathname);g.active&&g.matches&&(v=!0,f=g.matches)}let M,y={historyAction:e.history.action,location:e.history.location,matches:f,initialized:j,navigation:No,restoreScrollPosition:e.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:e.hydrationData&&e.hydrationData.loaderData||{},actionData:e.hydrationData&&e.hydrationData.actionData||null,errors:e.hydrationData&&e.hydrationData.errors||E,fetchers:new Map,blockers:new Map},P=we.Pop,W=!1,N,V=!1,J=new Map,Z=null,te=!1,Le=!1,Ft=[],At=new Set,z=new Map,B=0,$=-1,le=new Map,ie=new Set,ut=new Map,Ye=new Map,Ie=new Set,Oe=new Map,rt=new Map,Sl;function lp(){if(p=e.history.listen(g=>{let{action:x,location:C,delta:_}=g;if(Sl){Sl(),Sl=void 0;return}Lr(rt.size===0||_!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let D=Us({currentLocation:y.location,nextLocation:C,historyAction:x});if(D&&_!=null){let U=new Promise(H=>{Sl=H});e.history.go(_*-1),Cl(D,{state:"blocked",location:C,proceed(){Cl(D,{state:"proceeding",proceed:void 0,reset:void 0,location:C}),U.then(()=>e.history.go(_))},reset(){let H=new Map(y.blockers);H.set(D,Ln),Fe({blockers:H})}});return}return fr(x,C)}),r){Vg(t,J);let g=()=>$g(t,J);t.addEventListener("pagehide",g),Z=()=>t.removeEventListener("pagehide",g)}return y.initialized||fr(we.Pop,y.location,{initialHydration:!0}),M}function ip(){p&&p(),Z&&Z(),w.clear(),N&&N.abort(),y.fetchers.forEach((g,x)=>kl(x)),y.blockers.forEach((g,x)=>bs(x))}function op(g){return w.add(g),()=>w.delete(g)}function Fe(g,x){x===void 0&&(x={}),y=de({},y,g);let C=[],_=[];c.v7_fetcherPersist&&y.fetchers.forEach((D,U)=>{D.state==="idle"&&(Ie.has(U)?_.push(U):C.push(U))}),Ie.forEach(D=>{!y.fetchers.has(D)&&!z.has(D)&&_.push(D)}),[...w].forEach(D=>D(y,{deletedFetchers:_,viewTransitionOpts:x.viewTransitionOpts,flushSync:x.flushSync===!0})),c.v7_fetcherPersist?(C.forEach(D=>y.fetchers.delete(D)),_.forEach(D=>kl(D))):_.forEach(D=>Ie.delete(D))}function Ir(g,x,C){var _,D;let{flushSync:U}=C===void 0?{}:C,H=y.actionData!=null&&y.navigation.formMethod!=null&&pt(y.navigation.formMethod)&&y.navigation.state==="loading"&&((_=g.state)==null?void 0:_._isRedirect)!==!0,F;x.actionData?Object.keys(x.actionData).length>0?F=x.actionData:F=null:H?F=y.actionData:F=null;let A=x.loaderData?fd(y.loaderData,x.loaderData,x.matches||[],x.errors):y.loaderData,O=y.blockers;O.size>0&&(O=new Map(O),O.forEach((X,Re)=>O.set(Re,Ln)));let b=W===!0||y.navigation.formMethod!=null&&pt(y.navigation.formMethod)&&((D=g.state)==null?void 0:D._isRedirect)!==!0;a&&(o=a,a=void 0),te||P===we.Pop||(P===we.Push?e.history.push(g,g.state):P===we.Replace&&e.history.replace(g,g.state));let Q;if(P===we.Pop){let X=J.get(y.location.pathname);X&&X.has(g.pathname)?Q={currentLocation:y.location,nextLocation:g}:J.has(g.pathname)&&(Q={currentLocation:g,nextLocation:y.location})}else if(V){let X=J.get(y.location.pathname);X?X.add(g.pathname):(X=new Set([g.pathname]),J.set(y.location.pathname,X)),Q={currentLocation:y.location,nextLocation:g}}Fe(de({},x,{actionData:F,loaderData:A,historyAction:P,location:g,initialized:!0,navigation:No,revalidation:"idle",restoreScrollPosition:Bs(g,x.matches||y.matches),preventScrollReset:b,blockers:O}),{viewTransitionOpts:Q,flushSync:U===!0}),P=we.Pop,W=!1,V=!1,te=!1,Le=!1,Ft=[]}async function Ms(g,x){if(typeof g=="number"){e.history.go(g);return}let C=Ta(y.location,y.matches,s,c.v7_prependBasename,g,c.v7_relativeSplatPath,x==null?void 0:x.fromRouteId,x==null?void 0:x.relative),{path:_,submission:D,error:U}=ld(c.v7_normalizeFormMethod,!1,C,x),H=y.location,F=fl(y.location,_,x&&x.state);F=de({},F,e.history.encodeLocation(F));let A=x&&x.replace!=null?x.replace:void 0,O=we.Push;A===!0?O=we.Replace:A===!1||D!=null&&pt(D.formMethod)&&D.formAction===y.location.pathname+y.location.search&&(O=we.Replace);let b=x&&"preventScrollReset"in x?x.preventScrollReset===!0:void 0,Q=(x&&x.flushSync)===!0,X=Us({currentLocation:H,nextLocation:F,historyAction:O});if(X){Cl(X,{state:"blocked",location:F,proceed(){Cl(X,{state:"proceeding",proceed:void 0,reset:void 0,location:F}),Ms(g,x)},reset(){let Re=new Map(y.blockers);Re.set(X,Ln),Fe({blockers:Re})}});return}return await fr(O,F,{submission:D,pendingError:U,preventScrollReset:b,replace:x&&x.replace,enableViewTransition:x&&x.viewTransition,flushSync:Q})}function ap(){if(to(),Fe({revalidation:"loading"}),y.navigation.state!=="submitting"){if(y.navigation.state==="idle"){fr(y.historyAction,y.location,{startUninterruptedRevalidation:!0});return}fr(P||y.historyAction,y.navigation.location,{overrideNavigation:y.navigation,enableViewTransition:V===!0})}}async function fr(g,x,C){N&&N.abort(),N=null,P=g,te=(C&&C.startUninterruptedRevalidation)===!0,vp(y.location,y.matches),W=(C&&C.preventScrollReset)===!0,V=(C&&C.enableViewTransition)===!0;let _=a||o,D=C&&C.overrideNavigation,U=C!=null&&C.initialHydration&&y.matches&&y.matches.length>0&&!v?y.matches:vr(_,x,s),H=(C&&C.flushSync)===!0;if(U&&y.initialized&&!Le&&Og(y.location,x)&&!(C&&C.submission&&pt(C.submission.formMethod))){Ir(x,{matches:U},{flushSync:H});return}let F=El(U,_,x.pathname);if(F.active&&F.matches&&(U=F.matches),!U){let{error:oe,notFoundMatches:ee,route:me}=ro(x.pathname);Ir(x,{matches:ee,loaderData:{},errors:{[me.id]:oe}},{flushSync:H});return}N=new AbortController;let A=Ur(e.history,x,N.signal,C&&C.submission),O;if(C&&C.pendingError)O=[yr(U).route.id,{type:re.error,error:C.pendingError}];else if(C&&C.submission&&pt(C.submission.formMethod)){let oe=await sp(A,x,C.submission,U,F.active,{replace:C.replace,flushSync:H});if(oe.shortCircuited)return;if(oe.pendingActionResult){let[ee,me]=oe.pendingActionResult;if(Ge(me)&&pl(me.error)&&me.error.status===404){N=null,Ir(x,{matches:oe.matches,loaderData:{},errors:{[ee]:me.error}});return}}U=oe.matches||U,O=oe.pendingActionResult,D=Do(x,C.submission),H=!1,F.active=!1,A=Ur(e.history,A.url,A.signal)}let{shortCircuited:b,matches:Q,loaderData:X,errors:Re}=await up(A,x,U,F.active,D,C&&C.submission,C&&C.fetcherSubmission,C&&C.replace,C&&C.initialHydration===!0,H,O);b||(N=null,Ir(x,de({matches:Q||U},pd(O),{loaderData:X,errors:Re})))}async function sp(g,x,C,_,D,U){U===void 0&&(U={}),to();let H=Bg(x,C);if(Fe({navigation:H},{flushSync:U.flushSync===!0}),D){let O=await jl(_,x.pathname,g.signal);if(O.type==="aborted")return{shortCircuited:!0};if(O.type==="error"){let b=yr(O.partialMatches).route.id;return{matches:O.partialMatches,pendingActionResult:[b,{type:re.error,error:O.error}]}}else if(O.matches)_=O.matches;else{let{notFoundMatches:b,error:Q,route:X}=ro(x.pathname);return{matches:b,pendingActionResult:[X.id,{type:re.error,error:Q}]}}}let F,A=bn(_,x);if(!A.route.action&&!A.route.lazy)F={type:re.error,error:Be(405,{method:g.method,pathname:x.pathname,routeId:A.route.id})};else if(F=(await yn("action",y,g,[A],_,null))[A.route.id],g.signal.aborted)return{shortCircuited:!0};if(kr(F)){let O;return U&&U.replace!=null?O=U.replace:O=ud(F.response.headers.get("Location"),new URL(g.url),s,e.history)===y.location.pathname+y.location.search,await pr(g,F,!0,{submission:C,replace:O}),{shortCircuited:!0}}if(Xt(F))throw Be(400,{type:"defer-action"});if(Ge(F)){let O=yr(_,A.route.id);return(U&&U.replace)!==!0&&(P=we.Push),{matches:_,pendingActionResult:[O.route.id,F]}}return{matches:_,pendingActionResult:[A.route.id,F]}}async function up(g,x,C,_,D,U,H,F,A,O,b){let Q=D||Do(x,U),X=U||H||gd(Q),Re=!te&&(!c.v7_partialHydration||!A);if(_){if(Re){let ge=Ns(b);Fe(de({navigation:Q},ge!==void 0?{actionData:ge}:{}),{flushSync:O})}let q=await jl(C,x.pathname,g.signal);if(q.type==="aborted")return{shortCircuited:!0};if(q.type==="error"){let ge=yr(q.partialMatches).route.id;return{matches:q.partialMatches,loaderData:{},errors:{[ge]:q.error}}}else if(q.matches)C=q.matches;else{let{error:ge,notFoundMatches:Fr,route:Sn}=ro(x.pathname);return{matches:Fr,loaderData:{},errors:{[Sn.id]:ge}}}}let oe=a||o,[ee,me]=od(e.history,y,C,X,x,c.v7_partialHydration&&A===!0,c.v7_skipActionErrorRevalidation,Le,Ft,At,Ie,ut,ie,oe,s,b);if(no(q=>!(C&&C.some(ge=>ge.route.id===q))||ee&&ee.some(ge=>ge.route.id===q)),$=++B,ee.length===0&&me.length===0){let q=Fs();return Ir(x,de({matches:C,loaderData:{},errors:b&&Ge(b[1])?{[b[0]]:b[1].error}:null},pd(b),q?{fetchers:new Map(y.fetchers)}:{}),{flushSync:O}),{shortCircuited:!0}}if(Re){let q={};if(!_){q.navigation=Q;let ge=Ns(b);ge!==void 0&&(q.actionData=ge)}me.length>0&&(q.fetchers=dp(me)),Fe(q,{flushSync:O})}me.forEach(q=>{Ut(q.key),q.controller&&z.set(q.key,q.controller)});let Or=()=>me.forEach(q=>Ut(q.key));N&&N.signal.addEventListener("abort",Or);let{loaderResults:xn,fetcherResults:jt}=await Ds(y,C,ee,me,g);if(g.signal.aborted)return{shortCircuited:!0};N&&N.signal.removeEventListener("abort",Or),me.forEach(q=>z.delete(q.key));let yt=$l(xn);if(yt)return await pr(g,yt.result,!0,{replace:F}),{shortCircuited:!0};if(yt=$l(jt),yt)return ie.add(yt.key),await pr(g,yt.result,!0,{replace:F}),{shortCircuited:!0};let{loaderData:lo,errors:wn}=cd(y,C,xn,b,me,jt,Oe);Oe.forEach((q,ge)=>{q.subscribe(Fr=>{(Fr||q.done)&&Oe.delete(ge)})}),c.v7_partialHydration&&A&&y.errors&&(wn=de({},y.errors,wn));let hr=Fs(),Rl=As($),Pl=hr||Rl||me.length>0;return de({matches:C,loaderData:lo,errors:wn},Pl?{fetchers:new Map(y.fetchers)}:{})}function Ns(g){if(g&&!Ge(g[1]))return{[g[0]]:g[1].data};if(y.actionData)return Object.keys(y.actionData).length===0?null:y.actionData}function dp(g){return g.forEach(x=>{let C=y.fetchers.get(x.key),_=zn(void 0,C?C.data:void 0);y.fetchers.set(x.key,_)}),new Map(y.fetchers)}function cp(g,x,C,_){if(n)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");Ut(g);let D=(_&&_.flushSync)===!0,U=a||o,H=Ta(y.location,y.matches,s,c.v7_prependBasename,C,c.v7_relativeSplatPath,x,_==null?void 0:_.relative),F=vr(U,H,s),A=El(F,U,H);if(A.active&&A.matches&&(F=A.matches),!F){Et(g,x,Be(404,{pathname:H}),{flushSync:D});return}let{path:O,submission:b,error:Q}=ld(c.v7_normalizeFormMethod,!0,H,_);if(Q){Et(g,x,Q,{flushSync:D});return}let X=bn(F,O),Re=(_&&_.preventScrollReset)===!0;if(b&&pt(b.formMethod)){fp(g,x,O,X,F,A.active,D,Re,b);return}ut.set(g,{routeId:x,path:O}),pp(g,x,O,X,F,A.active,D,Re,b)}async function fp(g,x,C,_,D,U,H,F,A){to(),ut.delete(g);function O(xe){if(!xe.route.action&&!xe.route.lazy){let Ar=Be(405,{method:A.formMethod,pathname:C,routeId:x});return Et(g,x,Ar,{flushSync:H}),!0}return!1}if(!U&&O(_))return;let b=y.fetchers.get(g);bt(g,Hg(A,b),{flushSync:H});let Q=new AbortController,X=Ur(e.history,C,Q.signal,A);if(U){let xe=await jl(D,new URL(X.url).pathname,X.signal,g);if(xe.type==="aborted")return;if(xe.type==="error"){Et(g,x,xe.error,{flushSync:H});return}else if(xe.matches){if(D=xe.matches,_=bn(D,C),O(_))return}else{Et(g,x,Be(404,{pathname:C}),{flushSync:H});return}}z.set(g,Q);let Re=B,ee=(await yn("action",y,X,[_],D,g))[_.route.id];if(X.signal.aborted){z.get(g)===Q&&z.delete(g);return}if(c.v7_fetcherPersist&&Ie.has(g)){if(kr(ee)||Ge(ee)){bt(g,Bt(void 0));return}}else{if(kr(ee))if(z.delete(g),$>Re){bt(g,Bt(void 0));return}else return ie.add(g),bt(g,zn(A)),pr(X,ee,!1,{fetcherSubmission:A,preventScrollReset:F});if(Ge(ee)){Et(g,x,ee.error);return}}if(Xt(ee))throw Be(400,{type:"defer-action"});let me=y.navigation.location||y.location,Or=Ur(e.history,me,Q.signal),xn=a||o,jt=y.navigation.state!=="idle"?vr(xn,y.navigation.location,s):y.matches;K(jt,"Didn't find any matches after fetcher action");let yt=++B;le.set(g,yt);let lo=zn(A,ee.data);y.fetchers.set(g,lo);let[wn,hr]=od(e.history,y,jt,A,me,!1,c.v7_skipActionErrorRevalidation,Le,Ft,At,Ie,ut,ie,xn,s,[_.route.id,ee]);hr.filter(xe=>xe.key!==g).forEach(xe=>{let Ar=xe.key,Hs=y.fetchers.get(Ar),wp=zn(void 0,Hs?Hs.data:void 0);y.fetchers.set(Ar,wp),Ut(Ar),xe.controller&&z.set(Ar,xe.controller)}),Fe({fetchers:new Map(y.fetchers)});let Rl=()=>hr.forEach(xe=>Ut(xe.key));Q.signal.addEventListener("abort",Rl);let{loaderResults:Pl,fetcherResults:q}=await Ds(y,jt,wn,hr,Or);if(Q.signal.aborted)return;Q.signal.removeEventListener("abort",Rl),le.delete(g),z.delete(g),hr.forEach(xe=>z.delete(xe.key));let ge=$l(Pl);if(ge)return pr(Or,ge.result,!1,{preventScrollReset:F});if(ge=$l(q),ge)return ie.add(ge.key),pr(Or,ge.result,!1,{preventScrollReset:F});let{loaderData:Fr,errors:Sn}=cd(y,jt,Pl,void 0,hr,q,Oe);if(y.fetchers.has(g)){let xe=Bt(ee.data);y.fetchers.set(g,xe)}As(yt),y.navigation.state==="loading"&&yt>$?(K(P,"Expected pending action"),N&&N.abort(),Ir(y.navigation.location,{matches:jt,loaderData:Fr,errors:Sn,fetchers:new Map(y.fetchers)})):(Fe({errors:Sn,loaderData:fd(y.loaderData,Fr,jt,Sn),fetchers:new Map(y.fetchers)}),Le=!1)}async function pp(g,x,C,_,D,U,H,F,A){let O=y.fetchers.get(g);bt(g,zn(A,O?O.data:void 0),{flushSync:H});let b=new AbortController,Q=Ur(e.history,C,b.signal);if(U){let ee=await jl(D,new URL(Q.url).pathname,Q.signal,g);if(ee.type==="aborted")return;if(ee.type==="error"){Et(g,x,ee.error,{flushSync:H});return}else if(ee.matches)D=ee.matches,_=bn(D,C);else{Et(g,x,Be(404,{pathname:C}),{flushSync:H});return}}z.set(g,b);let X=B,oe=(await yn("loader",y,Q,[_],D,g))[_.route.id];if(Xt(oe)&&(oe=await _s(oe,Q.signal,!0)||oe),z.get(g)===b&&z.delete(g),!Q.signal.aborted){if(Ie.has(g)){bt(g,Bt(void 0));return}if(kr(oe))if($>X){bt(g,Bt(void 0));return}else{ie.add(g),await pr(Q,oe,!1,{preventScrollReset:F});return}if(Ge(oe)){Et(g,x,oe.error);return}K(!Xt(oe),"Unhandled fetcher deferred data"),bt(g,Bt(oe.data))}}async function pr(g,x,C,_){let{submission:D,fetcherSubmission:U,preventScrollReset:H,replace:F}=_===void 0?{}:_;x.response.headers.has("X-Remix-Revalidate")&&(Le=!0);let A=x.response.headers.get("Location");K(A,"Expected a Location header on the redirect Response"),A=ud(A,new URL(g.url),s,e.history);let O=fl(y.location,A,{_isRedirect:!0});if(r){let ee=!1;if(x.response.headers.has("X-Remix-Reload-Document"))ee=!0;else if(Ps.test(A)){const me=e.history.createURL(A);ee=me.origin!==t.location.origin||gn(me.pathname,s)==null}if(ee){F?t.location.replace(A):t.location.assign(A);return}}N=null;let b=F===!0||x.response.headers.has("X-Remix-Replace")?we.Replace:we.Push,{formMethod:Q,formAction:X,formEncType:Re}=y.navigation;!D&&!U&&Q&&X&&Re&&(D=gd(y.navigation));let oe=D||U;if(Cg.has(x.response.status)&&oe&&pt(oe.formMethod))await fr(b,O,{submission:de({},oe,{formAction:A}),preventScrollReset:H||W,enableViewTransition:C?V:void 0});else{let ee=Do(O,D);await fr(b,O,{overrideNavigation:ee,fetcherSubmission:U,preventScrollReset:H||W,enableViewTransition:C?V:void 0})}}async function yn(g,x,C,_,D,U){let H,F={};try{H=await zg(u,g,x,C,_,D,U,i,l)}catch(A){return _.forEach(O=>{F[O.route.id]={type:re.error,error:A}}),F}for(let[A,O]of Object.entries(H))if(Fg(O)){let b=O.result;F[A]={type:re.redirect,response:Dg(b,C,A,D,s,c.v7_relativeSplatPath)}}else F[A]=await Ng(O);return F}async function Ds(g,x,C,_,D){let U=g.matches,H=yn("loader",g,D,C,x,null),F=Promise.all(_.map(async b=>{if(b.matches&&b.match&&b.controller){let X=(await yn("loader",g,Ur(e.history,b.path,b.controller.signal),[b.match],b.matches,b.key))[b.match.route.id];return{[b.key]:X}}else return Promise.resolve({[b.key]:{type:re.error,error:Be(404,{pathname:b.path})}})})),A=await H,O=(await F).reduce((b,Q)=>Object.assign(b,Q),{});return await Promise.all([Ug(x,A,D.signal,U,g.loaderData),Wg(x,O,_)]),{loaderResults:A,fetcherResults:O}}function to(){Le=!0,Ft.push(...no()),ut.forEach((g,x)=>{z.has(x)&&At.add(x),Ut(x)})}function bt(g,x,C){C===void 0&&(C={}),y.fetchers.set(g,x),Fe({fetchers:new Map(y.fetchers)},{flushSync:(C&&C.flushSync)===!0})}function Et(g,x,C,_){_===void 0&&(_={});let D=yr(y.matches,x);kl(g),Fe({errors:{[D.route.id]:C},fetchers:new Map(y.fetchers)},{flushSync:(_&&_.flushSync)===!0})}function Is(g){return Ye.set(g,(Ye.get(g)||0)+1),Ie.has(g)&&Ie.delete(g),y.fetchers.get(g)||Eg}function kl(g){let x=y.fetchers.get(g);z.has(g)&&!(x&&x.state==="loading"&&le.has(g))&&Ut(g),ut.delete(g),le.delete(g),ie.delete(g),c.v7_fetcherPersist&&Ie.delete(g),At.delete(g),y.fetchers.delete(g)}function hp(g){let x=(Ye.get(g)||0)-1;x<=0?(Ye.delete(g),Ie.add(g),c.v7_fetcherPersist||kl(g)):Ye.set(g,x),Fe({fetchers:new Map(y.fetchers)})}function Ut(g){let x=z.get(g);x&&(x.abort(),z.delete(g))}function Os(g){for(let x of g){let C=Is(x),_=Bt(C.data);y.fetchers.set(x,_)}}function Fs(){let g=[],x=!1;for(let C of ie){let _=y.fetchers.get(C);K(_,"Expected fetcher: "+C),_.state==="loading"&&(ie.delete(C),g.push(C),x=!0)}return Os(g),x}function As(g){let x=[];for(let[C,_]of le)if(_0}function mp(g,x){let C=y.blockers.get(g)||Ln;return rt.get(g)!==x&&rt.set(g,x),C}function bs(g){y.blockers.delete(g),rt.delete(g)}function Cl(g,x){let C=y.blockers.get(g)||Ln;K(C.state==="unblocked"&&x.state==="blocked"||C.state==="blocked"&&x.state==="blocked"||C.state==="blocked"&&x.state==="proceeding"||C.state==="blocked"&&x.state==="unblocked"||C.state==="proceeding"&&x.state==="unblocked","Invalid blocker state transition: "+C.state+" -> "+x.state);let _=new Map(y.blockers);_.set(g,x),Fe({blockers:_})}function Us(g){let{currentLocation:x,nextLocation:C,historyAction:_}=g;if(rt.size===0)return;rt.size>1&&Lr(!1,"A router only supports one blocker at a time");let D=Array.from(rt.entries()),[U,H]=D[D.length-1],F=y.blockers.get(U);if(!(F&&F.state==="proceeding")&&H({currentLocation:x,nextLocation:C,historyAction:_}))return U}function ro(g){let x=Be(404,{pathname:g}),C=a||o,{matches:_,route:D}=hd(C);return no(),{notFoundMatches:_,route:D,error:x}}function no(g){let x=[];return Oe.forEach((C,_)=>{(!g||g(_))&&(C.cancel(),x.push(_),Oe.delete(_))}),x}function gp(g,x,C){if(k=g,L=x,S=C||null,!m&&y.navigation===No){m=!0;let _=Bs(y.location,y.matches);_!=null&&Fe({restoreScrollPosition:_})}return()=>{k=null,L=null,S=null}}function Ws(g,x){return S&&S(g,x.map(_=>eg(_,y.loaderData)))||g.key}function vp(g,x){if(k&&L){let C=Ws(g,x);k[C]=L()}}function Bs(g,x){if(k){let C=Ws(g,x),_=k[C];if(typeof _=="number")return _}return null}function El(g,x,C){if(h)if(g){if(Object.keys(g[0].params).length>0)return{active:!0,matches:ii(x,C,s,!0)}}else return{active:!0,matches:ii(x,C,s,!0)||[]};return{active:!1,matches:null}}async function jl(g,x,C,_){if(!h)return{type:"success",matches:g};let D=g;for(;;){let U=a==null,H=a||o,F=i;try{await h({signal:C,path:x,matches:D,fetcherKey:_,patch:(b,Q)=>{C.aborted||sd(b,Q,H,F,l)}})}catch(b){return{type:"error",error:b,partialMatches:D}}finally{U&&!C.aborted&&(o=[...o])}if(C.aborted)return{type:"aborted"};let A=vr(H,x,s);if(A)return{type:"success",matches:A};let O=ii(H,x,s,!0);if(!O||D.length===O.length&&D.every((b,Q)=>b.route.id===O[Q].route.id))return{type:"success",matches:null};D=O}}function yp(g){i={},a=zi(g,l,void 0,i)}function xp(g,x){let C=a==null;sd(g,x,a||o,i,l),C&&(o=[...o],Fe({}))}return M={get basename(){return s},get future(){return c},get state(){return y},get routes(){return o},get window(){return t},initialize:lp,subscribe:op,enableScrollRestoration:gp,navigate:Ms,fetch:cp,revalidate:ap,createHref:g=>e.history.createHref(g),encodeLocation:g=>e.history.encodeLocation(g),getFetcher:Is,deleteFetcher:hp,dispose:ip,getBlocker:mp,deleteBlocker:bs,patchRoutes:xp,_internalFetchControllers:z,_internalActiveDeferreds:Oe,_internalSetRoutes:yp},M}function Pg(e){return e!=null&&("formData"in e&&e.formData!=null||"body"in e&&e.body!==void 0)}function Ta(e,t,r,n,l,i,o,a){let s,u;if(o){s=[];for(let c of t)if(s.push(c),c.route.id===o){u=c;break}}else s=t,u=t[t.length-1];let h=Ji(l||".",Gi(s,i),gn(e.pathname,r)||e.pathname,a==="path");if(l==null&&(h.search=e.search,h.hash=e.hash),(l==null||l===""||l===".")&&u){let c=Ts(h.search);if(u.route.index&&!c)h.search=h.search?h.search.replace(/^\?/,"?index&"):"?index";else if(!u.route.index&&c){let p=new URLSearchParams(h.search),w=p.getAll("index");p.delete("index"),w.filter(S=>S).forEach(S=>p.append("index",S));let k=p.toString();h.search=k?"?"+k:""}}return n&&r!=="/"&&(h.pathname=h.pathname==="/"?r:zt([r,h.pathname])),zr(h)}function ld(e,t,r,n){if(!n||!Pg(n))return{path:r};if(n.formMethod&&!bg(n.formMethod))return{path:r,error:Be(405,{method:n.formMethod})};let l=()=>({path:r,error:Be(400,{type:"invalid-body"})}),i=n.formMethod||"get",o=e?i.toUpperCase():i.toLowerCase(),a=Xf(r);if(n.body!==void 0){if(n.formEncType==="text/plain"){if(!pt(o))return l();let p=typeof n.body=="string"?n.body:n.body instanceof FormData||n.body instanceof URLSearchParams?Array.from(n.body.entries()).reduce((w,k)=>{let[S,L]=k;return""+w+S+"="+L+`
-`},""):String(n.body);return{path:r,submission:{formMethod:o,formAction:a,formEncType:n.formEncType,formData:void 0,json:void 0,text:p}}}else if(n.formEncType==="application/json"){if(!pt(o))return l();try{let p=typeof n.body=="string"?JSON.parse(n.body):n.body;return{path:r,submission:{formMethod:o,formAction:a,formEncType:n.formEncType,formData:void 0,json:p,text:void 0}}}catch{return l()}}}K(typeof FormData=="function","FormData is not available in this environment");let s,u;if(n.formData)s=za(n.formData),u=n.formData;else if(n.body instanceof FormData)s=za(n.body),u=n.body;else if(n.body instanceof URLSearchParams)s=n.body,u=dd(s);else if(n.body==null)s=new URLSearchParams,u=new FormData;else try{s=new URLSearchParams(n.body),u=dd(s)}catch{return l()}let h={formMethod:o,formAction:a,formEncType:n&&n.formEncType||"application/x-www-form-urlencoded",formData:u,json:void 0,text:void 0};if(pt(h.formMethod))return{path:r,submission:h};let c=ur(r);return t&&c.search&&Ts(c.search)&&s.append("index",""),c.search="?"+s,{path:zr(c),submission:h}}function id(e,t,r){r===void 0&&(r=!1);let n=e.findIndex(l=>l.route.id===t);return n>=0?e.slice(0,r?n+1:n):e}function od(e,t,r,n,l,i,o,a,s,u,h,c,p,w,k,S){let L=S?Ge(S[1])?S[1].error:S[1].data:void 0,m=e.createURL(t.location),f=e.createURL(l),v=r;i&&t.errors?v=id(r,Object.keys(t.errors)[0],!0):S&&Ge(S[1])&&(v=id(r,S[0]));let E=S?S[1].statusCode:void 0,j=o&&E&&E>=400,M=v.filter((P,W)=>{let{route:N}=P;if(N.lazy)return!0;if(N.loader==null)return!1;if(i)return La(N,t.loaderData,t.errors);if(_g(t.loaderData,t.matches[W],P)||s.some(Z=>Z===P.route.id))return!0;let V=t.matches[W],J=P;return ad(P,de({currentUrl:m,currentParams:V.params,nextUrl:f,nextParams:J.params},n,{actionResult:L,actionStatus:E,defaultShouldRevalidate:j?!1:a||m.pathname+m.search===f.pathname+f.search||m.search!==f.search||Kf(V,J)}))}),y=[];return c.forEach((P,W)=>{if(i||!r.some(te=>te.route.id===P.routeId)||h.has(W))return;let N=vr(w,P.path,k);if(!N){y.push({key:W,routeId:P.routeId,path:P.path,matches:null,match:null,controller:null});return}let V=t.fetchers.get(W),J=bn(N,P.path),Z=!1;p.has(W)?Z=!1:u.has(W)?(u.delete(W),Z=!0):V&&V.state!=="idle"&&V.data===void 0?Z=a:Z=ad(J,de({currentUrl:m,currentParams:t.matches[t.matches.length-1].params,nextUrl:f,nextParams:r[r.length-1].params},n,{actionResult:L,actionStatus:E,defaultShouldRevalidate:j?!1:a})),Z&&y.push({key:W,routeId:P.routeId,path:P.path,matches:N,match:J,controller:new AbortController})}),[M,y]}function La(e,t,r){if(e.lazy)return!0;if(!e.loader)return!1;let n=t!=null&&t[e.id]!==void 0,l=r!=null&&r[e.id]!==void 0;return!n&&l?!1:typeof e.loader=="function"&&e.loader.hydrate===!0?!0:!n&&!l}function _g(e,t,r){let n=!t||r.route.id!==t.route.id,l=e[r.route.id]===void 0;return n||l}function Kf(e,t){let r=e.route.path;return e.pathname!==t.pathname||r!=null&&r.endsWith("*")&&e.params["*"]!==t.params["*"]}function ad(e,t){if(e.route.shouldRevalidate){let r=e.route.shouldRevalidate(t);if(typeof r=="boolean")return r}return t.defaultShouldRevalidate}function sd(e,t,r,n,l){var i;let o;if(e){let u=n[e];K(u,"No route found to patch children into: routeId = "+e),u.children||(u.children=[]),o=u.children}else o=r;let a=t.filter(u=>!o.some(h=>Yf(u,h))),s=zi(a,l,[e||"_","patch",String(((i=o)==null?void 0:i.length)||"0")],n);o.push(...s)}function Yf(e,t){return"id"in e&&"id"in t&&e.id===t.id?!0:e.index===t.index&&e.path===t.path&&e.caseSensitive===t.caseSensitive?(!e.children||e.children.length===0)&&(!t.children||t.children.length===0)?!0:e.children.every((r,n)=>{var l;return(l=t.children)==null?void 0:l.some(i=>Yf(r,i))}):!1}async function Tg(e,t,r){if(!e.lazy)return;let n=await e.lazy();if(!e.lazy)return;let l=r[e.id];K(l,"No route found in manifest");let i={};for(let o in n){let s=l[o]!==void 0&&o!=="hasErrorBoundary";Lr(!s,'Route "'+l.id+'" has a static property "'+o+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+o+'" will be ignored.')),!s&&!Zm.has(o)&&(i[o]=n[o])}Object.assign(l,i),Object.assign(l,de({},t(l),{lazy:void 0}))}async function Lg(e){let{matches:t}=e,r=t.filter(l=>l.shouldLoad);return(await Promise.all(r.map(l=>l.resolve()))).reduce((l,i,o)=>Object.assign(l,{[r[o].route.id]:i}),{})}async function zg(e,t,r,n,l,i,o,a,s,u){let h=i.map(w=>w.route.lazy?Tg(w.route,s,a):void 0),c=i.map((w,k)=>{let S=h[k],L=l.some(f=>f.route.id===w.route.id);return de({},w,{shouldLoad:L,resolve:async f=>(f&&n.method==="GET"&&(w.route.lazy||w.route.loader)&&(L=!0),L?Mg(t,n,w,S,f,u):Promise.resolve({type:re.data,result:void 0}))})}),p=await e({matches:c,request:n,params:i[0].params,fetcherKey:o,context:u});try{await Promise.all(h)}catch{}return p}async function Mg(e,t,r,n,l,i){let o,a,s=u=>{let h,c=new Promise((k,S)=>h=S);a=()=>h(),t.signal.addEventListener("abort",a);let p=k=>typeof u!="function"?Promise.reject(new Error("You cannot call the handler for a route which defines a boolean "+('"'+e+'" [routeId: '+r.route.id+"]"))):u({request:t,params:r.params,context:i},...k!==void 0?[k]:[]),w=(async()=>{try{return{type:"data",result:await(l?l(S=>p(S)):p())}}catch(k){return{type:"error",result:k}}})();return Promise.race([w,c])};try{let u=r.route[e];if(n)if(u){let h,[c]=await Promise.all([s(u).catch(p=>{h=p}),n]);if(h!==void 0)throw h;o=c}else if(await n,u=r.route[e],u)o=await s(u);else if(e==="action"){let h=new URL(t.url),c=h.pathname+h.search;throw Be(405,{method:t.method,pathname:c,routeId:r.route.id})}else return{type:re.data,result:void 0};else if(u)o=await s(u);else{let h=new URL(t.url),c=h.pathname+h.search;throw Be(404,{pathname:c})}K(o.result!==void 0,"You defined "+(e==="action"?"an action":"a loader")+" for route "+('"'+r.route.id+"\" but didn't return anything from your `"+e+"` ")+"function. Please return a value or `null`.")}catch(u){return{type:re.error,result:u}}finally{a&&t.signal.removeEventListener("abort",a)}return o}async function Ng(e){let{result:t,type:r}=e;if(Gf(t)){let c;try{let p=t.headers.get("Content-Type");p&&/\bapplication\/json\b/.test(p)?t.body==null?c=null:c=await t.json():c=await t.text()}catch(p){return{type:re.error,error:p}}return r===re.error?{type:re.error,error:new Mi(t.status,t.statusText,c),statusCode:t.status,headers:t.headers}:{type:re.data,data:c,statusCode:t.status,headers:t.headers}}if(r===re.error){if(md(t)){var n,l;if(t.data instanceof Error){var i,o;return{type:re.error,error:t.data,statusCode:(i=t.init)==null?void 0:i.status,headers:(o=t.init)!=null&&o.headers?new Headers(t.init.headers):void 0}}return{type:re.error,error:new Mi(((n=t.init)==null?void 0:n.status)||500,void 0,t.data),statusCode:pl(t)?t.status:void 0,headers:(l=t.init)!=null&&l.headers?new Headers(t.init.headers):void 0}}return{type:re.error,error:t,statusCode:pl(t)?t.status:void 0}}if(Ag(t)){var a,s;return{type:re.deferred,deferredData:t,statusCode:(a=t.init)==null?void 0:a.status,headers:((s=t.init)==null?void 0:s.headers)&&new Headers(t.init.headers)}}if(md(t)){var u,h;return{type:re.data,data:t.data,statusCode:(u=t.init)==null?void 0:u.status,headers:(h=t.init)!=null&&h.headers?new Headers(t.init.headers):void 0}}return{type:re.data,data:t}}function Dg(e,t,r,n,l,i){let o=e.headers.get("Location");if(K(o,"Redirects returned/thrown from loaders/actions must have a Location header"),!Ps.test(o)){let a=n.slice(0,n.findIndex(s=>s.route.id===r)+1);o=Ta(new URL(t.url),a,l,!0,o,i),e.headers.set("Location",o)}return e}function ud(e,t,r,n){let l=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];if(Ps.test(e)){let i=e,o=i.startsWith("//")?new URL(t.protocol+i):new URL(i);if(l.includes(o.protocol))throw new Error("Invalid redirect location");let a=gn(o.pathname,r)!=null;if(o.origin===t.origin&&a)return o.pathname+o.search+o.hash}try{let i=n.createURL(e);if(l.includes(i.protocol))throw new Error("Invalid redirect location")}catch{}return e}function Ur(e,t,r,n){let l=e.createURL(Xf(t)).toString(),i={signal:r};if(n&&pt(n.formMethod)){let{formMethod:o,formEncType:a}=n;i.method=o.toUpperCase(),a==="application/json"?(i.headers=new Headers({"Content-Type":a}),i.body=JSON.stringify(n.json)):a==="text/plain"?i.body=n.text:a==="application/x-www-form-urlencoded"&&n.formData?i.body=za(n.formData):i.body=n.formData}return new Request(l,i)}function za(e){let t=new URLSearchParams;for(let[r,n]of e.entries())t.append(r,typeof n=="string"?n:n.name);return t}function dd(e){let t=new FormData;for(let[r,n]of e.entries())t.append(r,n);return t}function Ig(e,t,r,n,l){let i={},o=null,a,s=!1,u={},h=r&&Ge(r[1])?r[1].error:void 0;return e.forEach(c=>{if(!(c.route.id in t))return;let p=c.route.id,w=t[p];if(K(!kr(w),"Cannot handle redirect results in processLoaderData"),Ge(w)){let k=w.error;h!==void 0&&(k=h,h=void 0),o=o||{};{let S=yr(e,p);o[S.route.id]==null&&(o[S.route.id]=k)}i[p]=void 0,s||(s=!0,a=pl(w.error)?w.error.status:500),w.headers&&(u[p]=w.headers)}else Xt(w)?(n.set(p,w.deferredData),i[p]=w.deferredData.data,w.statusCode!=null&&w.statusCode!==200&&!s&&(a=w.statusCode),w.headers&&(u[p]=w.headers)):(i[p]=w.data,w.statusCode&&w.statusCode!==200&&!s&&(a=w.statusCode),w.headers&&(u[p]=w.headers))}),h!==void 0&&r&&(o={[r[0]]:h},i[r[0]]=void 0),{loaderData:i,errors:o,statusCode:a||200,loaderHeaders:u}}function cd(e,t,r,n,l,i,o){let{loaderData:a,errors:s}=Ig(t,r,n,o);return l.forEach(u=>{let{key:h,match:c,controller:p}=u,w=i[h];if(K(w,"Did not find corresponding fetcher result"),!(p&&p.signal.aborted))if(Ge(w)){let k=yr(e.matches,c==null?void 0:c.route.id);s&&s[k.route.id]||(s=de({},s,{[k.route.id]:w.error})),e.fetchers.delete(h)}else if(kr(w))K(!1,"Unhandled fetcher revalidation redirect");else if(Xt(w))K(!1,"Unhandled fetcher deferred data");else{let k=Bt(w.data);e.fetchers.set(h,k)}}),{loaderData:a,errors:s}}function fd(e,t,r,n){let l=de({},t);for(let i of r){let o=i.route.id;if(t.hasOwnProperty(o)?t[o]!==void 0&&(l[o]=t[o]):e[o]!==void 0&&i.route.loader&&(l[o]=e[o]),n&&n.hasOwnProperty(o))break}return l}function pd(e){return e?Ge(e[1])?{actionData:{}}:{actionData:{[e[0]]:e[1].data}}:{}}function yr(e,t){return(t?e.slice(0,e.findIndex(n=>n.route.id===t)+1):[...e]).reverse().find(n=>n.route.hasErrorBoundary===!0)||e[0]}function hd(e){let t=e.length===1?e[0]:e.find(r=>r.index||!r.path||r.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:t}],route:t}}function Be(e,t){let{pathname:r,routeId:n,method:l,type:i,message:o}=t===void 0?{}:t,a="Unknown Server Error",s="Unknown @remix-run/router error";return e===400?(a="Bad Request",l&&r&&n?s="You made a "+l+' request to "'+r+'" but '+('did not provide a `loader` for route "'+n+'", ')+"so there is no way to handle the request.":i==="defer-action"?s="defer() is not supported in actions":i==="invalid-body"&&(s="Unable to encode submission body")):e===403?(a="Forbidden",s='Route "'+n+'" does not match URL "'+r+'"'):e===404?(a="Not Found",s='No route matches URL "'+r+'"'):e===405&&(a="Method Not Allowed",l&&r&&n?s="You made a "+l.toUpperCase()+' request to "'+r+'" but '+('did not provide an `action` for route "'+n+'", ')+"so there is no way to handle the request.":l&&(s='Invalid request method "'+l.toUpperCase()+'"')),new Mi(e||500,a,new Error(s),!0)}function $l(e){let t=Object.entries(e);for(let r=t.length-1;r>=0;r--){let[n,l]=t[r];if(kr(l))return{key:n,result:l}}}function Xf(e){let t=typeof e=="string"?ur(e):e;return zr(de({},t,{hash:""}))}function Og(e,t){return e.pathname!==t.pathname||e.search!==t.search?!1:e.hash===""?t.hash!=="":e.hash===t.hash?!0:t.hash!==""}function Fg(e){return Gf(e.result)&&kg.has(e.result.status)}function Xt(e){return e.type===re.deferred}function Ge(e){return e.type===re.error}function kr(e){return(e&&e.type)===re.redirect}function md(e){return typeof e=="object"&&e!=null&&"type"in e&&"data"in e&&"init"in e&&e.type==="DataWithResponseInit"}function Ag(e){let t=e;return t&&typeof t=="object"&&typeof t.data=="object"&&typeof t.subscribe=="function"&&typeof t.cancel=="function"&&typeof t.resolveData=="function"}function Gf(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.headers=="object"&&typeof e.body<"u"}function bg(e){return Sg.has(e.toLowerCase())}function pt(e){return xg.has(e.toLowerCase())}async function Ug(e,t,r,n,l){let i=Object.entries(t);for(let o=0;o(p==null?void 0:p.route.id)===a);if(!u)continue;let h=n.find(p=>p.route.id===u.route.id),c=h!=null&&!Kf(h,u)&&(l&&l[u.route.id])!==void 0;Xt(s)&&c&&await _s(s,r,!1).then(p=>{p&&(t[a]=p)})}}async function Wg(e,t,r){for(let n=0;n(u==null?void 0:u.route.id)===i)&&Xt(a)&&(K(o,"Expected an AbortController for revalidating fetcher deferred result"),await _s(a,o.signal,!0).then(u=>{u&&(t[l]=u)}))}}async function _s(e,t,r){if(r===void 0&&(r=!1),!await e.deferredData.resolveData(t)){if(r)try{return{type:re.data,data:e.deferredData.unwrappedData}}catch(l){return{type:re.error,error:l}}return{type:re.data,data:e.deferredData.data}}}function Ts(e){return new URLSearchParams(e).getAll("index").some(t=>t==="")}function bn(e,t){let r=typeof t=="string"?ur(t).search:t.search;if(e[e.length-1].route.index&&Ts(r||""))return e[e.length-1];let n=Vf(e);return n[n.length-1]}function gd(e){let{formMethod:t,formAction:r,formEncType:n,text:l,formData:i,json:o}=e;if(!(!t||!r||!n)){if(l!=null)return{formMethod:t,formAction:r,formEncType:n,formData:void 0,json:void 0,text:l};if(i!=null)return{formMethod:t,formAction:r,formEncType:n,formData:i,json:void 0,text:void 0};if(o!==void 0)return{formMethod:t,formAction:r,formEncType:n,formData:void 0,json:o,text:void 0}}}function Do(e,t){return t?{state:"loading",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}:{state:"loading",location:e,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function Bg(e,t){return{state:"submitting",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}}function zn(e,t){return e?{state:"loading",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:t}}function Hg(e,t){return{state:"submitting",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t?t.data:void 0}}function Bt(e){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:e}}function Vg(e,t){try{let r=e.sessionStorage.getItem(Qf);if(r){let n=JSON.parse(r);for(let[l,i]of Object.entries(n||{}))i&&Array.isArray(i)&&t.set(l,new Set(i||[]))}}catch{}}function $g(e,t){if(t.size>0){let r={};for(let[n,l]of t)r[n]=[...l];try{e.sessionStorage.setItem(Qf,JSON.stringify(r))}catch(n){Lr(!1,"Failed to save applied view transitions in sessionStorage ("+n+").")}}}/**
- * React Router v6.30.3
- *
- * Copyright (c) Remix Software Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE.md file in the root directory of this source tree.
- *
- * @license MIT
- */function Ni(){return Ni=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.current=!0}),R.useCallback(function(u,h){if(h===void 0&&(h={}),!a.current)return;if(typeof u=="number"){n.go(u);return}let c=Ji(u,JSON.parse(o),i,h.relative==="path");e==null&&t!=="/"&&(c.pathname=c.pathname==="/"?t:zt([t,c.pathname])),(h.replace?n.replace:n.push)(c,h.state,h)},[t,n,o,i,e])}function ep(e,t){let{relative:r}=t===void 0?{}:t,{future:n}=R.useContext(dr),{matches:l}=R.useContext(cr),{pathname:i}=wl(),o=JSON.stringify(Gi(l,n.v7_relativeSplatPath));return R.useMemo(()=>Ji(e,JSON.parse(o),i,r==="path"),[e,o,i,r])}function Yg(e,t,r,n){vn()||K(!1);let{navigator:l}=R.useContext(dr),{matches:i}=R.useContext(cr),o=i[i.length-1],a=o?o.params:{};o&&o.pathname;let s=o?o.pathnameBase:"/";o&&o.route;let u=wl(),h;h=u;let c=h.pathname||"/",p=c;if(s!=="/"){let S=s.replace(/^\//,"").split("/");p="/"+c.replace(/^\//,"").split("/").slice(S.length).join("/")}let w=vr(e,{pathname:p});return qg(w&&w.map(S=>Object.assign({},S,{params:Object.assign({},a,S.params),pathname:zt([s,l.encodeLocation?l.encodeLocation(S.pathname).pathname:S.pathname]),pathnameBase:S.pathnameBase==="/"?s:zt([s,l.encodeLocation?l.encodeLocation(S.pathnameBase).pathname:S.pathnameBase])})),i,r,n)}function Xg(){let e=nv(),t=pl(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,l={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return R.createElement(R.Fragment,null,R.createElement("h2",null,"Unexpected Application Error!"),R.createElement("h3",{style:{fontStyle:"italic"}},t),r?R.createElement("pre",{style:l},r):null,null)}const Gg=R.createElement(Xg,null);class Jg extends R.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error!==void 0?R.createElement(cr.Provider,{value:this.props.routeContext},R.createElement(Zf.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function Zg(e){let{routeContext:t,match:r,children:n}=e,l=R.useContext(Zi);return l&&l.static&&l.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(l.staticContext._deepestRenderedBoundaryId=r.route.id),R.createElement(cr.Provider,{value:t},n)}function qg(e,t,r,n){var l;if(t===void 0&&(t=[]),r===void 0&&(r=null),n===void 0&&(n=null),e==null){var i;if(!r)return null;if(r.errors)e=r.matches;else if((i=n)!=null&&i.v7_partialHydration&&t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let o=e,a=(l=r)==null?void 0:l.errors;if(a!=null){let h=o.findIndex(c=>c.route.id&&(a==null?void 0:a[c.route.id])!==void 0);h>=0||K(!1),o=o.slice(0,Math.min(o.length,h+1))}let s=!1,u=-1;if(r&&n&&n.v7_partialHydration)for(let h=0;h=0?o=o.slice(0,u+1):o=[o[0]];break}}}return o.reduceRight((h,c,p)=>{let w,k=!1,S=null,L=null;r&&(w=a&&c.route.id?a[c.route.id]:void 0,S=c.route.errorElement||Gg,s&&(u<0&&p===0?(iv("route-fallback"),k=!0,L=null):u===p&&(k=!0,L=c.route.hydrateFallbackElement||null)));let m=t.concat(o.slice(0,p+1)),f=()=>{let v;return w?v=S:k?v=L:c.route.Component?v=R.createElement(c.route.Component,null):c.route.element?v=c.route.element:v=h,R.createElement(Zg,{match:c,routeContext:{outlet:h,matches:m,isDataRoute:r!=null},children:v})};return r&&(c.route.ErrorBoundary||c.route.errorElement||p===0)?R.createElement(Jg,{location:r.location,revalidation:r.revalidation,component:S,error:w,children:f(),routeContext:{outlet:null,matches:m,isDataRoute:!0}}):f()},null)}var tp=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(tp||{}),rp=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(rp||{});function ev(e){let t=R.useContext(Zi);return t||K(!1),t}function tv(e){let t=R.useContext(Jf);return t||K(!1),t}function rv(e){let t=R.useContext(cr);return t||K(!1),t}function np(e){let t=rv(),r=t.matches[t.matches.length-1];return r.route.id||K(!1),r.route.id}function nv(){var e;let t=R.useContext(Zf),r=tv(rp.UseRouteError),n=np();return t!==void 0?t:(e=r.errors)==null?void 0:e[n]}function lv(){let{router:e}=ev(tp.UseNavigateStable),t=np(),r=R.useRef(!1);return qf(()=>{r.current=!0}),R.useCallback(function(l,i){i===void 0&&(i={}),r.current&&(typeof l=="number"?e.navigate(l):e.navigate(l,Ni({fromRouteId:t},i)))},[e,t])}const vd={};function iv(e,t,r){vd[e]||(vd[e]=!0)}function ov(e,t){e==null||e.v7_startTransition,(e==null?void 0:e.v7_relativeSplatPath)===void 0&&(!t||t.v7_relativeSplatPath),t&&(t.v7_fetcherPersist,t.v7_normalizeFormMethod,t.v7_partialHydration,t.v7_skipActionErrorRevalidation)}function av(e){let{to:t,replace:r,state:n,relative:l}=e;vn()||K(!1);let{future:i,static:o}=R.useContext(dr),{matches:a}=R.useContext(cr),{pathname:s}=wl(),u=Dr(),h=Ji(t,Gi(a,i.v7_relativeSplatPath),s,l==="path"),c=JSON.stringify(h);return R.useEffect(()=>u(JSON.parse(c),{replace:r,state:n,relative:l}),[u,c,l,r,n]),null}function sv(e){let{basename:t="/",children:r=null,location:n,navigationType:l=we.Pop,navigator:i,static:o=!1,future:a}=e;vn()&&K(!1);let s=t.replace(/^\/*/,"/"),u=R.useMemo(()=>({basename:s,navigator:i,static:o,future:Ni({v7_relativeSplatPath:!1},a)}),[s,a,i,o]);typeof n=="string"&&(n=ur(n));let{pathname:h="/",search:c="",hash:p="",state:w=null,key:k="default"}=n,S=R.useMemo(()=>{let L=gn(h,s);return L==null?null:{location:{pathname:L,search:c,hash:p,state:w,key:k},navigationType:l}},[s,h,c,p,w,k,l]);return S==null?null:R.createElement(dr.Provider,{value:u},R.createElement(Ls.Provider,{children:r,value:S}))}new Promise(()=>{});function uv(e){let t={hasErrorBoundary:e.ErrorBoundary!=null||e.errorElement!=null};return e.Component&&Object.assign(t,{element:R.createElement(e.Component),Component:void 0}),e.HydrateFallback&&Object.assign(t,{hydrateFallbackElement:R.createElement(e.HydrateFallback),HydrateFallback:void 0}),e.ErrorBoundary&&Object.assign(t,{errorElement:R.createElement(e.ErrorBoundary),ErrorBoundary:void 0}),t}/**
- * React Router DOM v6.30.3
- *
- * Copyright (c) Remix Software Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE.md file in the root directory of this source tree.
- *
- * @license MIT
- */function hl(){return hl=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(r[l]=e[l]);return r}function cv(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function fv(e,t){return e.button===0&&(!t||t==="_self")&&!cv(e)}const pv=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],hv="6";try{window.__reactRouterVersion=hv}catch{}function mv(e,t){return Rg({basename:void 0,future:hl({},void 0,{v7_prependBasename:!0}),history:Xm({window:void 0}),hydrationData:gv(),routes:e,mapRouteProperties:uv,dataStrategy:void 0,patchRoutesOnNavigation:void 0,window:void 0}).initialize()}function gv(){var e;let t=(e=window)==null?void 0:e.__staticRouterHydrationData;return t&&t.errors&&(t=hl({},t,{errors:vv(t.errors)})),t}function vv(e){if(!e)return null;let t=Object.entries(e),r={};for(let[n,l]of t)if(l&&l.__type==="RouteErrorResponse")r[n]=new Mi(l.status,l.statusText,l.data,l.internal===!0);else if(l&&l.__type==="Error"){if(l.__subType){let i=window[l.__subType];if(typeof i=="function")try{let o=new i(l.message);o.stack="",r[n]=o}catch{}}if(r[n]==null){let i=new Error(l.message);i.stack="",r[n]=i}}else r[n]=l;return r}const yv=R.createContext({isTransitioning:!1}),xv=R.createContext(new Map),wv="startTransition",yd=Op[wv],Sv="flushSync",xd=Ym[Sv];function kv(e){yd?yd(e):e()}function Mn(e){xd?xd(e):e()}class Cv{constructor(){this.status="pending",this.promise=new Promise((t,r)=>{this.resolve=n=>{this.status==="pending"&&(this.status="resolved",t(n))},this.reject=n=>{this.status==="pending"&&(this.status="rejected",r(n))}})}}function Ev(e){let{fallbackElement:t,router:r,future:n}=e,[l,i]=R.useState(r.state),[o,a]=R.useState(),[s,u]=R.useState({isTransitioning:!1}),[h,c]=R.useState(),[p,w]=R.useState(),[k,S]=R.useState(),L=R.useRef(new Map),{v7_startTransition:m}=n||{},f=R.useCallback(P=>{m?kv(P):P()},[m]),v=R.useCallback((P,W)=>{let{deletedFetchers:N,flushSync:V,viewTransitionOpts:J}=W;P.fetchers.forEach((te,Le)=>{te.data!==void 0&&L.current.set(Le,te.data)}),N.forEach(te=>L.current.delete(te));let Z=r.window==null||r.window.document==null||typeof r.window.document.startViewTransition!="function";if(!J||Z){V?Mn(()=>i(P)):f(()=>i(P));return}if(V){Mn(()=>{p&&(h&&h.resolve(),p.skipTransition()),u({isTransitioning:!0,flushSync:!0,currentLocation:J.currentLocation,nextLocation:J.nextLocation})});let te=r.window.document.startViewTransition(()=>{Mn(()=>i(P))});te.finished.finally(()=>{Mn(()=>{c(void 0),w(void 0),a(void 0),u({isTransitioning:!1})})}),Mn(()=>w(te));return}p?(h&&h.resolve(),p.skipTransition(),S({state:P,currentLocation:J.currentLocation,nextLocation:J.nextLocation})):(a(P),u({isTransitioning:!0,flushSync:!1,currentLocation:J.currentLocation,nextLocation:J.nextLocation}))},[r.window,p,h,L,f]);R.useLayoutEffect(()=>r.subscribe(v),[r,v]),R.useEffect(()=>{s.isTransitioning&&!s.flushSync&&c(new Cv)},[s]),R.useEffect(()=>{if(h&&o&&r.window){let P=o,W=h.promise,N=r.window.document.startViewTransition(async()=>{f(()=>i(P)),await W});N.finished.finally(()=>{c(void 0),w(void 0),a(void 0),u({isTransitioning:!1})}),w(N)}},[f,o,h,r.window]),R.useEffect(()=>{h&&o&&l.location.key===o.location.key&&h.resolve()},[h,p,l.location,o]),R.useEffect(()=>{!s.isTransitioning&&k&&(a(k.state),u({isTransitioning:!0,flushSync:!1,currentLocation:k.currentLocation,nextLocation:k.nextLocation}),S(void 0))},[s.isTransitioning,k]),R.useEffect(()=>{},[]);let E=R.useMemo(()=>({createHref:r.createHref,encodeLocation:r.encodeLocation,go:P=>r.navigate(P),push:(P,W,N)=>r.navigate(P,{state:W,preventScrollReset:N==null?void 0:N.preventScrollReset}),replace:(P,W,N)=>r.navigate(P,{replace:!0,state:W,preventScrollReset:N==null?void 0:N.preventScrollReset})}),[r]),j=r.basename||"/",M=R.useMemo(()=>({router:r,navigator:E,static:!1,basename:j}),[r,E,j]),y=R.useMemo(()=>({v7_relativeSplatPath:r.future.v7_relativeSplatPath}),[r.future.v7_relativeSplatPath]);return R.useEffect(()=>ov(n,r.future),[n,r.future]),R.createElement(R.Fragment,null,R.createElement(Zi.Provider,{value:M},R.createElement(Jf.Provider,{value:l},R.createElement(xv.Provider,{value:L.current},R.createElement(yv.Provider,{value:s},R.createElement(sv,{basename:j,location:l.location,navigationType:l.historyAction,navigator:E,future:y},l.initialized||r.future.v7_partialHydration?R.createElement(jv,{routes:r.routes,future:r.future,state:l}):t))))),null)}const jv=R.memo(Rv);function Rv(e){let{routes:t,future:r,state:n}=e;return Yg(t,void 0,n,r)}const Pv=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",_v=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,zs=R.forwardRef(function(t,r){let{onClick:n,relative:l,reloadDocument:i,replace:o,state:a,target:s,to:u,preventScrollReset:h,viewTransition:c}=t,p=dv(t,pv),{basename:w}=R.useContext(dr),k,S=!1;if(typeof u=="string"&&_v.test(u)&&(k=u,Pv))try{let v=new URL(window.location.href),E=u.startsWith("//")?new URL(v.protocol+u):new URL(u),j=gn(E.pathname,w);E.origin===v.origin&&j!=null?u=j+E.search+E.hash:S=!0}catch{}let L=Qg(u,{relative:l}),m=Tv(u,{replace:o,state:a,target:s,preventScrollReset:h,relative:l,viewTransition:c});function f(v){n&&n(v),v.defaultPrevented||m(v)}return R.createElement("a",hl({},p,{href:k||L,onClick:S||i?n:f,ref:r,target:s}))});var wd;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(wd||(wd={}));var Sd;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(Sd||(Sd={}));function Tv(e,t){let{target:r,replace:n,state:l,preventScrollReset:i,relative:o,viewTransition:a}=t===void 0?{}:t,s=Dr(),u=wl(),h=ep(e,{relative:o});return R.useCallback(c=>{if(fv(c,r)){c.preventDefault();let p=n!==void 0?n:zr(u)===zr(h);s(e,{replace:p,state:l,preventScrollReset:i,relative:o,viewTransition:a})}},[u,s,h,n,l,r,e,i,o,a])}const Lv=450;async function zv(){return await new Promise(e=>window.setTimeout(e,Lv)),{id:"agent-001",name:"Ana Camolesi",email:"ana.camolesi@sothis.local"}}function Mv(){const e=Dr(),[t,r]=R.useState(!1);async function n(){r(!0);try{await zv(),e("/home")}finally{r(!1)}}return{isSubmitting:t,login:n}}const kd={width:"100%",border:"1px solid var(--color-border)",borderRadius:"16px",padding:"0.95rem 1rem",background:"#fff",color:"var(--color-text)",outline:"none"},Nv={width:"100%",padding:"0.95rem 1rem",borderRadius:"16px",border:"none",background:"linear-gradient(135deg, var(--color-primary), #0b5a86)",color:"#fff",fontWeight:700,boxShadow:"var(--shadow-md)"},Dv={width:"100%",padding:"0.95rem 1rem",borderRadius:"16px",border:"1px solid rgba(0, 49, 80, 0.16)",background:"#fff",color:"var(--color-primary)",fontWeight:700},Iv={username:"",password:""};function Ov(){const[e,t]=R.useState(Iv),{login:r,isSubmitting:n}=Mv();async function l(i){i.preventDefault(),await r(e)}return d.jsxs("form",{onSubmit:l,style:{display:"grid",gap:"1rem"},children:[d.jsxs("label",{style:{display:"grid",gap:"0.5rem"},children:[d.jsx("span",{style:{fontWeight:600},children:"Usuario AD"}),d.jsx("input",{style:kd,type:"text",placeholder:"seu.usuario",value:e.username,onChange:i=>t(o=>({...o,username:i.target.value}))})]}),d.jsxs("label",{style:{display:"grid",gap:"0.5rem"},children:[d.jsx("span",{style:{fontWeight:600},children:"Senha"}),d.jsx("input",{style:kd,type:"password",placeholder:"Digite sua senha",value:e.password,onChange:i=>t(o=>({...o,password:i.target.value}))})]}),d.jsx("button",{style:Nv,type:"submit",disabled:n,children:n?"Entrando...":"Entrar"}),d.jsx("button",{style:Dv,type:"button",children:"Entrar com Microsoft"}),d.jsx("a",{href:"#forgot-password",style:{justifySelf:"center",color:"var(--color-secondary)",fontWeight:600},children:"Esqueci minha senha"})]})}const Fv="/assets/logo_white_mode-BIHgqUPv.png",Av="/assets/logo_white_dark_mode-BKcVSu03.png",Cd={sm:{gap:"0.75rem",logoHeight:42,titleSize:"1rem",subtitleSize:"0.85rem"},md:{gap:"1rem",logoHeight:54,titleSize:"1.2rem",subtitleSize:"0.95rem"},lg:{gap:"1.25rem",logoHeight:78,titleSize:"1.5rem",subtitleSize:"1.05rem"}};function qi({compact:e=!1,theme:t="light",size:r}){const n=t==="dark"?Av:Fv,i=Cd[r||(e?"sm":"md")]||Cd.md;return d.jsxs("div",{style:{display:"flex",alignItems:"center",gap:i.gap},children:[d.jsx("img",{src:n,alt:"Sothis",style:{height:i.logoHeight,width:"auto",objectFit:"contain"}}),d.jsxs("div",{children:[d.jsx("div",{style:{fontSize:i.titleSize,fontWeight:800},children:"Sothis Omnichannel"}),d.jsx("div",{style:{color:"var(--color-text-soft)",fontSize:i.subtitleSize},children:"Central de atendimento unificada"})]})]})}function bv(){return d.jsx("main",{style:{minHeight:"100vh",display:"grid",placeItems:"center",padding:"2rem"},children:d.jsxs("section",{style:{width:"min(100%, 1080px)",display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(320px, 1fr))",gap:"1.5rem",alignItems:"stretch"},children:[d.jsxs("article",{style:{background:"linear-gradient(180deg, rgba(0, 49, 80, 0.98) 0%, rgba(11, 90, 134, 0.95) 100%)",color:"#fff",borderRadius:"32px",padding:"2.5rem",boxShadow:"var(--shadow-lg)",position:"relative",overflow:"hidden",display:"grid",gap:"1.5rem",alignContent:"space-between",minHeight:"540px"},children:[d.jsx("div",{"aria-hidden":"true",style:{position:"absolute",inset:0,background:"radial-gradient(circle at top right, rgba(229, 162, 42, 0.3), transparent 30%), radial-gradient(circle at bottom left, rgba(0, 164, 183, 0.22), transparent 35%)"}}),d.jsxs("div",{style:{position:"relative",display:"grid",gap:"1.5rem"},children:[d.jsx(qi,{theme:"dark"}),d.jsxs("div",{children:[d.jsx("p",{style:{textTransform:"uppercase",letterSpacing:"0.12em",fontWeight:700,color:"rgba(255, 255, 255, 0.7)",margin:0},children:"MVP de atendimento"}),d.jsx("h1",{style:{margin:"0.75rem 0",fontSize:"clamp(2.2rem, 4vw, 3.4rem)",lineHeight:1.05},children:"Conecte-se com seu cliente em uma unica tela."}),d.jsx("p",{style:{margin:0,maxWidth:"34rem",color:"rgba(255, 255, 255, 0.78)",fontSize:"1.05rem"},children:"Acesse a exeriência all in one e acompanhe o produto pensado para facilitar o contato no dia a dia."})]})]}),d.jsx("div",{style:{position:"relative",display:"grid",gridTemplateColumns:"repeat(3, minmax(0, 1fr))",gap:"0.75rem"},children:[{label:"Canais",value:"WhatsApp, SMS e Voz"},{label:"Fila",value:"Distribuicao rapida"},{label:"UX",value:"Padrao SaaS responsivo"}].map(e=>d.jsxs("div",{style:{padding:"1rem",borderRadius:"20px",background:"rgba(255, 255, 255, 0.1)",backdropFilter:"blur(10px)"},children:[d.jsx("div",{style:{fontSize:"0.8rem",opacity:.7},children:e.label}),d.jsx("strong",{style:{display:"block",marginTop:"0.35rem"},children:e.value})]},e.label))})]}),d.jsxs("article",{style:{background:"var(--color-surface)",backdropFilter:"blur(12px)",border:"1px solid rgba(255, 255, 255, 0.65)",borderRadius:"32px",padding:"2.5rem",boxShadow:"var(--shadow-lg)",display:"grid",gap:"1.75rem",alignContent:"center"},children:[d.jsxs("div",{style:{display:"grid",gap:"0.75rem"},children:[d.jsx("span",{style:{width:"fit-content",padding:"0.4rem 0.8rem",borderRadius:999,background:"rgba(0, 164, 183, 0.12)",color:"var(--color-primary)",fontWeight:700,fontSize:"0.85rem"},children:"Login seguro"}),d.jsxs("div",{children:[d.jsx("h2",{style:{margin:0,fontSize:"2rem"},children:"Entrar na plataforma"}),d.jsx("p",{style:{margin:"0.75rem 0 0",color:"var(--color-text-soft)",lineHeight:1.6},children:"Use seu usuario corporativo para acessar o MVP. A autenticacao e mockada nesta etapa e leva voce diretamente para a dashboard principal."})]})]}),d.jsx(Ov,{})]})]})})}function Uv({items:e,activeItem:t,isMobile:r=!1}){const n=Dr();return d.jsxs("aside",{style:{background:"linear-gradient(180deg, rgba(0, 49, 80, 0.98), rgba(7, 64, 98, 0.96))",color:"#fff",borderRadius:"28px",padding:"1.5rem",display:"grid",gap:"1.25rem",alignContent:"start"},children:[d.jsx("button",{type:"button",onClick:()=>n("/new-attendance"),style:{border:"none",borderRadius:"20px",padding:"1rem 1.15rem",background:"linear-gradient(135deg, var(--color-highlight), #f3b94d)",color:"#132534",fontWeight:800,textAlign:"left"},children:"+ Novo Atendimento"}),d.jsx("nav",{style:{display:"grid",gap:"0.5rem",gridTemplateColumns:r?"repeat(auto-fit, minmax(180px, 1fr))":"1fr"},children:e.map(l=>{const i=l.id===t;return d.jsxs("button",{type:"button",onClick:()=>l.route&&n(l.route),style:{border:"none",borderRadius:"18px",padding:"0.9rem 1rem",background:i?"rgba(255, 255, 255, 0.14)":"transparent",color:"#fff",display:"flex",alignItems:"center",justifyContent:"space-between",fontWeight:i?700:500,width:"100%"},children:[d.jsx("span",{children:l.label}),l.count?d.jsx("span",{style:{minWidth:30,borderRadius:999,padding:"0.2rem 0.5rem",background:"rgba(255, 255, 255, 0.12)",fontSize:"0.82rem"},children:l.count}):null]},l.id)})})]})}function Wv({activeTab:e,onTabChange:t,searchValue:r,onSearchChange:n,isWideDesktop:l=!1,isDesktop:i=!1,isTablet:o=!1,isMobile:a=!1}){const s=[{id:"messages",label:"Mensagens"},{id:"calls",label:"Ligacoes"}],u=a?"1fr":l?"max-content minmax(180px, 220px) minmax(280px, 1fr) max-content":i||o?"repeat(2, minmax(0, 1fr))":"1fr";return d.jsxs("header",{style:{display:"grid",gridTemplateColumns:u,gap:"1rem",alignItems:"center"},children:[d.jsx("div",{style:{display:"inline-flex",padding:"0.35rem",borderRadius:"18px",background:"rgba(0, 49, 80, 0.06)",gap:"0.35rem",width:a?"100%":"fit-content",justifyContent:a?"space-between":"flex-start",minWidth:0},children:s.map(h=>{const c=h.id===e;return d.jsx("button",{type:"button",onClick:()=>t(h.id),style:{border:"none",borderRadius:"14px",padding:"0.8rem 1rem",background:c?"var(--color-primary)":"transparent",color:c?"#fff":"var(--color-primary)",fontWeight:700},children:h.label},h.id)})}),d.jsx("div",{style:{padding:"0.9rem 1.1rem",borderRadius:"18px",background:"#fff",border:"1px solid var(--color-border)",color:"var(--color-text-soft)",fontWeight:600,width:a?"100%":"auto",minWidth:0},children:"Sexta, 19 de marco"}),d.jsx("input",{type:"search",placeholder:"Buscar conversas, contatos ou protocolos",value:r,onChange:h=>n(h.target.value),style:{width:"100%",border:"1px solid var(--color-border)",borderRadius:"18px",padding:"0.95rem 1rem",background:"#fff",outline:"none",minWidth:0}}),d.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.9rem",justifySelf:a?"stretch":"end",justifyContent:a?"space-between":"flex-end",width:a?"100%":"auto",minWidth:0},children:[d.jsxs("div",{style:{textAlign:"right",minWidth:0},children:[d.jsx("strong",{style:{display:"block"},children:"Ana Camolesi"}),d.jsx("span",{style:{color:"var(--color-text-soft)",fontSize:"0.92rem"},children:"Atendimento omnichannel"})]}),d.jsx("div",{"aria-hidden":"true",style:{width:48,height:48,borderRadius:"16px",display:"grid",placeItems:"center",background:"linear-gradient(135deg, var(--color-accent), var(--color-primary))",color:"#fff",fontWeight:800},children:"AM"})]})]})}function Bv({channel:e}){const t={WhatsApp:"#2bb741",Email:"#e5a22a",SMS:"#00a4b7"};return d.jsx("span",{style:{display:"inline-flex",alignItems:"center",borderRadius:999,padding:"0.22rem 0.6rem",background:`${t[e]||"#003150"}16`,color:t[e]||"#003150",fontSize:"0.8rem",fontWeight:700},children:e})}function Hv({conversations:e,activeConversationId:t,onSelectConversation:r,actionItems:n,isWideDesktop:l=!1,isDesktop:i=!1,isTablet:o=!1,isMobile:a=!1}){const s=Dr(),u=e.find(c=>c.id===t)||e[0],h=a?"1fr":l?"minmax(240px, 0.95fr) minmax(360px, 1.8fr) minmax(220px, 0.8fr)":i||o?"minmax(260px, 320px) minmax(0, 1fr)":"1fr";return d.jsxs("div",{style:{display:"grid",gridTemplateColumns:h,gap:"1rem",alignItems:"start"},children:[d.jsxs("section",{style:{background:"#fff",borderRadius:"26px",border:"1px solid var(--color-border)",padding:"1rem",display:"grid",gap:"0.75rem",minWidth:0},children:[d.jsxs("div",{children:[d.jsx("strong",{style:{fontSize:"1.05rem"},children:"Conversas"}),d.jsx("p",{style:{margin:"0.35rem 0 0",color:"var(--color-text-soft)"},children:"Atendimento em tempo real por canal."})]}),e.map(c=>{const p=c.id===u.id;return d.jsxs("button",{type:"button",onClick:()=>r(c.id),style:{border:"1px solid",borderColor:p?"rgba(0, 164, 183, 0.26)":"var(--color-border)",borderRadius:"20px",padding:"1rem",background:p?"rgba(0, 164, 183, 0.08)":"#fff",textAlign:"left",display:"grid",gap:"0.6rem"},children:[d.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:"1rem"},children:[d.jsx("strong",{children:c.name}),d.jsx("span",{style:{color:"var(--color-text-soft)",fontSize:"0.86rem"},children:c.time})]}),d.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:"0.75rem"},children:[d.jsx(Bv,{channel:c.channel}),c.unread?d.jsx("span",{style:{minWidth:24,borderRadius:999,padding:"0.15rem 0.45rem",background:"var(--color-secondary)",color:"#fff",fontSize:"0.78rem",fontWeight:700,textAlign:"center"},children:c.unread}):null]}),d.jsx("span",{style:{color:"var(--color-text-soft)"},children:c.lastMessage})]},c.id)})]}),d.jsxs("section",{style:{background:"#fff",borderRadius:"26px",border:"1px solid var(--color-border)",display:"grid",gridTemplateRows:"auto 1fr auto",minHeight:580,overflow:"hidden",minWidth:0},children:[d.jsxs("header",{style:{padding:"1.15rem 1.25rem",borderBottom:"1px solid var(--color-border)",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"1rem"},children:[d.jsxs("div",{children:[d.jsx("strong",{style:{display:"block",fontSize:"1.08rem"},children:u.name}),d.jsx("span",{style:{color:"var(--color-text-soft)"},children:u.status==="online"?"Online agora":"Offline"})]}),d.jsxs("div",{style:{display:"flex",gap:"0.6rem",flexWrap:"wrap"},children:[d.jsx("button",{type:"button",onClick:()=>s("/chat"),style:{border:"1px solid var(--color-border)",borderRadius:"14px",padding:"0.7rem 0.9rem",background:"#fff",color:"var(--color-primary)",fontWeight:700},children:"Abrir chat"}),d.jsx("button",{type:"button",style:{border:"none",borderRadius:"14px",padding:"0.7rem 0.9rem",background:"rgba(0, 49, 80, 0.08)",color:"var(--color-primary)",fontWeight:700},children:"Transferir"})]})]}),d.jsx("div",{style:{padding:"1.25rem",display:"grid",gap:"0.9rem",alignContent:"start",background:"linear-gradient(180deg, rgba(245, 248, 251, 0.45), rgba(255, 255, 255, 0.9))"},children:u.messages.map(c=>{const p=c.from==="agent";return d.jsx("div",{style:{justifySelf:p?"end":"start",maxWidth:"72%",padding:"0.95rem 1rem",borderRadius:p?"18px 18px 6px 18px":"18px 18px 18px 6px",background:p?"var(--color-primary)":"#edf1f5",color:p?"#fff":"var(--color-text)",boxShadow:"var(--shadow-md)"},children:c.text},c.id)})}),d.jsxs("footer",{style:{padding:"1rem 1.25rem 1.25rem",borderTop:"1px solid var(--color-border)",display:"grid",gridTemplateColumns:"1fr auto",gap:"0.75rem"},children:[d.jsx("input",{type:"text",value:"Posso acionar o time responsavel e te retorno em seguida.",readOnly:!0,style:{border:"1px solid var(--color-border)",borderRadius:"18px",padding:"0.95rem 1rem",background:"#fff"}}),d.jsx("button",{type:"button",style:{border:"none",borderRadius:"18px",padding:"0.95rem 1.2rem",background:"linear-gradient(135deg, var(--color-primary), #0b5a86)",color:"#fff",fontWeight:700},children:"Enviar"})]})]}),d.jsxs("aside",{style:{background:"#fff",borderRadius:"26px",border:"1px solid var(--color-border)",padding:"1.2rem",display:"grid",gap:"1rem",alignContent:"start",gridColumn:l?"auto":"1 / -1",minWidth:0},children:[d.jsxs("div",{children:[d.jsx("strong",{style:{fontSize:"1.05rem"},children:"Painel de acoes"}),d.jsx("p",{style:{margin:"0.35rem 0 0",color:"var(--color-text-soft)"},children:"Contexto rapido do atendimento selecionado."})]}),n.map(c=>d.jsxs("article",{style:{borderRadius:"20px",padding:"1rem",background:"rgba(0, 49, 80, 0.04)"},children:[d.jsx("span",{style:{color:"var(--color-text-soft)",display:"block",marginBottom:"0.35rem"},children:c.title}),d.jsx("strong",{children:c.value})]},c.title)),d.jsx("button",{type:"button",onClick:()=>s("/new-attendance"),style:{border:"1px solid var(--color-border)",borderRadius:"18px",padding:"0.95rem 1rem",background:"#fff",color:"var(--color-primary)",fontWeight:700},children:"Criar novo fluxo"})]})]})}function Vv({calls:e,isWideDesktop:t=!1,isDesktop:r=!1,isMobile:n=!1}){const l=Dr();return d.jsxs("section",{style:{background:"#fff",borderRadius:"26px",border:"1px solid var(--color-border)",padding:"1.5rem",display:"grid",gap:"1rem"},children:[d.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:"1rem",flexWrap:"wrap"},children:[d.jsxs("div",{children:[d.jsx("strong",{style:{display:"block",fontSize:"1.1rem"},children:"Ligacoes recentes"}),d.jsx("span",{style:{color:"var(--color-text-soft)"},children:"Visualizacao rapida do fluxo de voz do time."})]}),d.jsx("button",{type:"button",onClick:()=>l("/call"),style:{border:"none",borderRadius:"18px",padding:"0.95rem 1.1rem",background:"linear-gradient(135deg, var(--color-primary), #0b5a86)",color:"#fff",fontWeight:700},children:"Nova ligacao"})]}),d.jsx("div",{style:{display:"grid",gap:"0.85rem"},children:e.map(i=>d.jsxs("article",{style:{borderRadius:"22px",border:"1px solid var(--color-border)",padding:"1rem 1.1rem",display:"grid",gridTemplateColumns:n?"1fr":t?"minmax(0, 1.4fr) repeat(3, minmax(100px, 1fr)) auto":r?"minmax(0, 1.2fr) repeat(2, minmax(100px, 1fr)) auto":"repeat(2, minmax(0, 1fr))",gap:"1rem",alignItems:"center"},children:[d.jsxs("div",{children:[d.jsx("strong",{style:{display:"block"},children:i.name}),d.jsx("span",{style:{color:"var(--color-text-soft)"},children:i.area})]}),d.jsx("span",{children:i.duration}),d.jsx("span",{children:i.status}),n?null:d.jsx("span",{style:{color:"var(--color-text-soft)"},children:"Hoje"}),d.jsx("button",{type:"button",onClick:()=>l("/call"),style:{border:"1px solid var(--color-border)",borderRadius:"14px",padding:"0.7rem 0.95rem",background:"#fff",color:"var(--color-primary)",fontWeight:700},children:"Ver"})]},i.id))})]})}const $v=[{id:"dashboard",label:"Dashboard"},{id:"new-attendance",label:"Novos Atendimentos",route:"/new-attendance"},{id:"in-progress",label:"Em andamento",count:8},{id:"completed",label:"Finalizados",count:24},{id:"contacts",label:"Contatos",count:128}],Ql=[{id:"maria-souza",name:"Maria Souza",channel:"WhatsApp",status:"online",lastMessage:"Preciso atualizar o cadastro do meu pedido.",unread:2,time:"09:42",messages:[{id:1,from:"customer",text:"Oi, bom dia! Preciso de ajuda com meu pedido."},{id:2,from:"agent",text:"Bom dia, Maria! Claro, me conta o que aconteceu."},{id:3,from:"customer",text:"Quero confirmar se o endereco foi alterado."}]},{id:"empresa-alpha",name:"Empresa Alpha",channel:"Email",status:"offline",lastMessage:"Aguardando retorno sobre a proposta comercial.",unread:0,time:"Ontem",messages:[{id:1,from:"customer",text:"Precisamos rever os valores da ultima proposta."},{id:2,from:"agent",text:"Perfeito, vou encaminhar para o time comercial."}]},{id:"joao-pedro",name:"Joao Pedro",channel:"SMS",status:"online",lastMessage:"Pode me ligar em 10 minutos?",unread:1,time:"08:15",messages:[{id:1,from:"customer",text:"Recebi a cobranca em duplicidade."},{id:2,from:"agent",text:"Vou analisar isso agora para voce."},{id:3,from:"customer",text:"Pode me ligar em 10 minutos?"}]}],Qv=[{title:"Area atual",value:"Suporte"},{title:"SLA restante",value:"18 min"},{title:"Prioridade",value:"Alta"}],Kv=[{id:"call-1",name:"Beatriz Lima",area:"Comercial",duration:"12:48",status:"Encerrada"},{id:"call-2",name:"Carlos Nunes",area:"Suporte",duration:"03:12",status:"Perdida"},{id:"call-3",name:"Grupo Solaris",area:"Financeiro",duration:"08:55",status:"Em andamento"}];function Yv(){return typeof window>"u"?1440:window.innerWidth}function eo(){const[e,t]=R.useState(Yv);return R.useEffect(()=>{function r(){t(window.innerWidth)}return window.addEventListener("resize",r),()=>window.removeEventListener("resize",r)},[]),{width:e,isWideDesktop:e>=1500,isDesktop:e>=1180,isTablet:e<1180&&e>=760,isMobile:e<760}}function Xv(){var w,k;const{isWideDesktop:e,isDesktop:t,isTablet:r,isMobile:n}=eo(),[l,i]=R.useState("messages"),[o,a]=R.useState(""),[s,u]=R.useState(Ql[0].id),h=o.trim().toLowerCase(),c=h?Ql.filter(S=>`${S.name} ${S.channel} ${S.lastMessage}`.toLowerCase().includes(h)):Ql,p=((w=c.find(S=>S.id===s))==null?void 0:w.id)||((k=c[0])==null?void 0:k.id)||Ql[0].id;return d.jsx("main",{style:{minHeight:"100vh",padding:"1.5rem"},children:d.jsx("section",{style:{width:"min(1680px, calc(100vw - 3rem))",margin:"0 auto",background:"var(--color-surface-strong)",borderRadius:"32px",boxShadow:"var(--shadow-lg)",padding:"1.5rem",display:"grid",gap:"1.5rem"},children:d.jsxs("div",{style:{display:"grid",gridTemplateColumns:t?"minmax(340px, 380px) minmax(0, 1fr)":"1fr",gap:"1.5rem",alignItems:"start"},children:[d.jsxs("div",{style:{display:"grid",gap:"1.25rem"},children:[d.jsx("div",{style:{background:"#fff",border:"1px solid var(--color-border)",borderRadius:"28px",padding:"1.5rem"},children:d.jsx(qi,{size:"lg"})}),d.jsx(Uv,{items:$v,activeItem:"dashboard",isMobile:!t})]}),d.jsxs("div",{style:{display:"grid",gap:"1.25rem",minWidth:0},children:[d.jsx(Wv,{activeTab:l,onTabChange:i,searchValue:o,onSearchChange:a,isWideDesktop:e,isDesktop:t,isTablet:r,isMobile:n}),d.jsxs("section",{style:{display:"grid",gap:"1rem"},children:[d.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(180px, 1fr))",gap:"1rem"},children:[{label:"Atendimentos ativos",value:"18",detail:"7 aguardando retorno"},{label:"Primeira resposta",value:"2m 14s",detail:"Dentro do SLA"},{label:"Fila de voz",value:"4 chamadas",detail:"1 prioridade alta"}].map(S=>d.jsxs("article",{style:{padding:"1.15rem",borderRadius:"22px",border:"1px solid var(--color-border)",background:"#fff"},children:[d.jsx("span",{style:{color:"var(--color-text-soft)",display:"block"},children:S.label}),d.jsx("strong",{style:{display:"block",fontSize:"1.4rem",marginTop:"0.45rem"},children:S.value}),d.jsx("span",{style:{color:"var(--color-text-soft)",display:"block",marginTop:"0.45rem"},children:S.detail})]},S.label))}),l==="messages"?d.jsx(Hv,{conversations:c,activeConversationId:p,onSelectConversation:u,actionItems:Qv,isWideDesktop:e,isDesktop:t,isTablet:r,isMobile:n}):d.jsx(Vv,{calls:Kv,isWideDesktop:e,isDesktop:t,isMobile:n})]})]})]})})})}function Gv({channel:e}){const t={WhatsApp:"#2bb741",Email:"#e5a22a",SMS:"#00a4b7"};return d.jsx("span",{style:{display:"inline-flex",alignItems:"center",borderRadius:999,padding:"0.22rem 0.6rem",background:`${t[e]||"#003150"}16`,color:t[e]||"#003150",fontSize:"0.8rem",fontWeight:700},children:e})}function Jv({contacts:e,activeContactId:t,onSelectContact:r,isMobile:n=!1}){return d.jsxs("aside",{style:{background:"#fff",border:"1px solid var(--color-border)",borderRadius:"28px",padding:"1rem",display:"grid",gap:"0.85rem"},children:[d.jsxs("div",{children:[d.jsx("strong",{style:{display:"block",fontSize:"1.08rem"},children:"Conversas ativas"}),d.jsx("span",{style:{color:"var(--color-text-soft)"},children:"WhatsApp, SMS e email em uma fila visual."})]}),d.jsx("div",{style:{display:"grid",gap:"0.75rem",gridTemplateColumns:"1fr"},children:e.map(l=>{const i=l.id===t;return d.jsxs("button",{type:"button",onClick:()=>r(l.id),style:{border:"1px solid",borderColor:i?"rgba(0, 164, 183, 0.26)":"var(--color-border)",background:i?"rgba(0, 164, 183, 0.08)":"#fff",borderRadius:"20px",padding:"1rem",textAlign:"left",display:"grid",gap:"0.6rem"},children:[d.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:"1rem"},children:[d.jsx("strong",{children:l.name}),d.jsx("span",{style:{fontSize:"0.82rem",color:"var(--color-text-soft)"},children:l.time})]}),d.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:"0.75rem"},children:[d.jsx(Gv,{channel:l.channel}),l.unread?d.jsx("span",{style:{minWidth:24,borderRadius:999,padding:"0.15rem 0.45rem",background:"var(--color-secondary)",color:"#fff",fontSize:"0.78rem",fontWeight:700,textAlign:"center"},children:l.unread}):null]}),d.jsx("span",{style:{color:"var(--color-text-soft)"},children:l.preview})]},l.id)})})]})}function Ed({isOpen:e,transferArea:t,setTransferArea:r,transferAreas:n,attendants:l,transferAttendant:i,setTransferAttendant:o,transferNote:a,setTransferNote:s,onSubmit:u,onClose:h}){if(!e)return null;const c={width:"100%",border:"1px solid var(--color-border)",borderRadius:"16px",padding:"0.9rem 1rem",background:"#fff",outline:"none"};return d.jsxs("aside",{style:{background:"#fff",border:"1px solid var(--color-border)",borderRadius:"28px",padding:"1.25rem",display:"grid",gap:"1rem"},children:[d.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:"1rem"},children:[d.jsxs("div",{children:[d.jsx("strong",{style:{display:"block",fontSize:"1.06rem"},children:"Transferir atendimento"}),d.jsx("span",{style:{color:"var(--color-text-soft)"},children:"Reencaminhe a conversa para a area ideal."})]}),d.jsx("button",{type:"button",onClick:h,style:{border:"none",background:"transparent",color:"var(--color-text-soft)",fontWeight:700},children:"Fechar"})]}),d.jsxs("label",{style:{display:"grid",gap:"0.45rem"},children:[d.jsx("span",{style:{fontWeight:600},children:"Area"}),d.jsx("select",{value:t,onChange:p=>r(p.target.value),style:c,children:n.map(p=>d.jsx("option",{value:p,children:p},p))})]}),d.jsxs("label",{style:{display:"grid",gap:"0.45rem"},children:[d.jsx("span",{style:{fontWeight:600},children:"Atendente"}),d.jsx("select",{value:i,onChange:p=>o(p.target.value),style:c,children:l.map(p=>d.jsx("option",{value:p,children:p},p))})]}),d.jsxs("label",{style:{display:"grid",gap:"0.45rem"},children:[d.jsx("span",{style:{fontWeight:600},children:"Observacao"}),d.jsx("textarea",{rows:5,value:a,onChange:p=>s(p.target.value),placeholder:"Contexto opcional para ajudar o proximo atendente.",style:{...c,resize:"vertical"}})]}),d.jsx("button",{type:"button",onClick:u,style:{border:"none",borderRadius:"16px",padding:"0.95rem 1rem",background:"linear-gradient(135deg, var(--color-primary), #0b5a86)",color:"#fff",fontWeight:700},children:"Confirmar transferencia"})]})}function Zv({contact:e,messages:t,selectedArea:r,setSelectedArea:n,draft:l,setDraft:i,onSend:o,onToggleTransfer:a,isReplying:s,isMobile:u=!1}){const h=R.useRef(null);return R.useEffect(()=>{const c=h.current;c&&c.scrollTo({top:c.scrollHeight,behavior:"smooth"})},[t,s]),d.jsxs("section",{style:{background:"#fff",border:"1px solid var(--color-border)",borderRadius:"28px",overflow:"hidden",display:"grid",gridTemplateRows:"auto 1fr auto",minHeight:680},children:[d.jsxs("header",{style:{padding:"1.25rem 1.5rem",borderBottom:"1px solid var(--color-border)",display:"grid",gridTemplateColumns:u?"1fr":"minmax(0, 1fr) auto",gap:"1rem",alignItems:"center"},children:[d.jsxs("div",{children:[d.jsx("strong",{style:{display:"block",fontSize:"1.15rem"},children:e.name}),d.jsxs("span",{style:{color:"var(--color-text-soft)"},children:[e.status==="online"?"Online":"Offline"," • ",e.lastSeen]})]}),d.jsxs("div",{style:{display:"flex",gap:"0.7rem",flexWrap:"wrap",justifyContent:u?"stretch":"flex-end"},children:[d.jsxs("select",{value:r,onChange:c=>n(c.target.value),style:{border:"1px solid var(--color-border)",borderRadius:"14px",padding:"0.8rem 0.95rem",background:"#fff",fontWeight:600},children:[d.jsx("option",{children:"Suporte"}),d.jsx("option",{children:"Financeiro"}),d.jsx("option",{children:"Comercial"})]}),d.jsx("button",{type:"button",onClick:a,style:{border:"none",borderRadius:"14px",padding:"0.8rem 1rem",background:"rgba(0, 49, 80, 0.08)",color:"var(--color-primary)",fontWeight:700},children:"Transferir"})]})]}),d.jsxs("div",{ref:h,style:{padding:"1.5rem",display:"grid",gap:"0.9rem",alignContent:"start",overflowY:"auto",background:"radial-gradient(circle at top left, rgba(0, 164, 183, 0.06), transparent 22%), linear-gradient(180deg, rgba(245, 248, 251, 0.8), rgba(255, 255, 255, 0.95))"},children:[t.map(c=>{const p=c.sender==="agent";return c.sender==="system"?d.jsx("div",{style:{justifySelf:"center",padding:"0.7rem 1rem",borderRadius:"999px",background:"rgba(0, 49, 80, 0.08)",color:"var(--color-primary)",fontSize:"0.88rem",fontWeight:600},children:c.text},c.id):d.jsx("div",{style:{justifySelf:p?"end":"start",maxWidth:u?"88%":"72%",padding:"0.95rem 1rem",borderRadius:p?"18px 18px 6px 18px":"18px 18px 18px 6px",background:p?"var(--color-primary)":"#edf1f5",color:p?"#fff":"var(--color-text)",boxShadow:"var(--shadow-md)"},children:c.text},c.id)}),s?d.jsx("div",{style:{justifySelf:"start",padding:"0.8rem 0.95rem",borderRadius:"18px 18px 18px 6px",background:"#edf1f5",color:"var(--color-text-soft)",fontWeight:600},children:"Digitando..."}):null]}),d.jsxs("footer",{style:{padding:"1rem 1.25rem 1.25rem",borderTop:"1px solid var(--color-border)",display:"grid",gridTemplateColumns:u?"1fr":"1fr auto",gap:"0.75rem"},children:[d.jsx("input",{type:"text",value:l,onChange:c=>i(c.target.value),onKeyDown:c=>{c.key==="Enter"&&o()},placeholder:"Escreva sua mensagem...",style:{border:"1px solid var(--color-border)",borderRadius:"18px",padding:"0.95rem 1rem",background:"#fff",outline:"none"}}),d.jsx("button",{type:"button",onClick:o,style:{border:"none",borderRadius:"18px",padding:"0.95rem 1.2rem",background:"linear-gradient(135deg, var(--color-primary), #0b5a86)",color:"#fff",fontWeight:700},children:"Enviar"})]})]})}const oi=[{id:"maria-souza",name:"Maria Souza",channel:"WhatsApp",status:"online",area:"Suporte",lastSeen:"Online agora",preview:"Preciso atualizar o cadastro do meu pedido.",time:"09:42",unread:2,messages:[{id:1,sender:"customer",text:"Oi, bom dia! Preciso de ajuda com meu pedido."},{id:2,sender:"agent",text:"Bom dia, Maria! Claro, me conta o que aconteceu."},{id:3,sender:"customer",text:"Quero confirmar se o endereco foi alterado."},{id:4,sender:"agent",text:"Estou verificando aqui e te atualizo em instantes."}]},{id:"joao-pedro",name:"Joao Pedro",channel:"SMS",status:"offline",area:"Financeiro",lastSeen:"Visto ha 12 min",preview:"Pode me ligar em 10 minutos?",time:"08:15",unread:1,messages:[{id:1,sender:"customer",text:"Recebi a cobranca em duplicidade."},{id:2,sender:"agent",text:"Vou analisar isso agora para voce."},{id:3,sender:"customer",text:"Pode me ligar em 10 minutos?"}]},{id:"empresa-alpha",name:"Empresa Alpha",channel:"Email",status:"offline",area:"Comercial",lastSeen:"Visto ontem",preview:"Aguardando retorno sobre a proposta comercial.",time:"Ontem",unread:0,messages:[{id:1,sender:"customer",text:"Precisamos rever os valores da ultima proposta."},{id:2,sender:"agent",text:"Perfeito, vou encaminhar para o time comercial."}]}],qv=["Suporte","Financeiro","Comercial"],jd={Suporte:["Ana Camolesi","Rafael Lopes","Romero Britto"],Financeiro:["Roberto Pêra","Monica Limoeira","Edson Arantes"],Comercial:["Natasha Homanoff","Helena Pêra","Pedro Parque"]},ey=["Recebi sua mensagem e ja vou verificar.","Consegue me confirmar o numero do protocolo?","Posso seguir com essa atualizacao por aqui."];function ty(e){const t=[`Perfeito, obrigado pelo retorno, ${e.split(" ")[0]}.`,"Tudo bem, fico no aguardo dessa confirmacao.","Entendi. Se precisar, posso encaminhar para a area responsavel."];return t[Math.floor(Math.random()*t.length)]}function ry(){return oi.reduce((e,t)=>(e[t.id]=t.messages,e),{})}function ny(){const[e,t]=R.useState(oi),[r,n]=R.useState(oi[0].id),[l,i]=R.useState(ry),[o,a]=R.useState(""),[s,u]=R.useState(oi[0].area),[h,c]=R.useState(!1),[p,w]=R.useState("Suporte"),[k,S]=R.useState(jd.Suporte[0]),[L,m]=R.useState(""),[f,v]=R.useState(!1),E=R.useRef(null),j=R.useMemo(()=>e.find(V=>V.id===r)||e[0],[e,r]),M=l[r]||[],y=jd[p]||[];R.useEffect(()=>{u(j.area)},[j]),R.useEffect(()=>{S(y[0]||"")},[p]),R.useEffect(()=>()=>{E.current&&window.clearTimeout(E.current)},[]);function P(V,J){t(Z=>Z.map(te=>te.id===V?{...te,preview:J,time:"Agora",unread:0}:te))}function W(){const V=o.trim();if(!V)return;const J={id:Date.now(),sender:"agent",text:V};i(Z=>({...Z,[r]:[...Z[r]||[],J]})),P(r,V),a(""),v(!0),E.current=window.setTimeout(()=>{const Z={id:Date.now()+1,sender:"customer",text:ty(j.name)};i(te=>({...te,[r]:[...te[r]||[],Z]})),t(te=>te.map(Le=>Le.id===r?{...Le,preview:Z.text,time:"Agora",unread:Le.unread+1}:Le)),v(!1)},1400)}function N(){const V=L.trim(),J=V?`Transferencia solicitada para ${p} com ${k}. Obs: ${V}`:`Transferencia solicitada para ${p} com ${k}.`;i(Z=>({...Z,[r]:[...Z[r]||[],{id:Date.now()+2,sender:"system",text:J}]})),t(Z=>Z.map(te=>te.id===r?{...te,area:p}:te)),u(p),c(!1),m("")}return{contacts:e,activeContact:j,activeContactId:r,setActiveContactId:n,messages:M,draft:o,setDraft:a,sendMessage:W,isReplying:f,selectedArea:s,setSelectedArea:u,isTransferOpen:h,setIsTransferOpen:c,transferArea:p,setTransferArea:w,transferAreas:qv,attendants:y,transferAttendant:k,setTransferAttendant:S,transferNote:L,setTransferNote:m,submitTransfer:N}}function ly(){const{isWideDesktop:e,isDesktop:t,isTablet:r,isMobile:n}=eo(),{contacts:l,activeContact:i,activeContactId:o,setActiveContactId:a,messages:s,draft:u,setDraft:h,sendMessage:c,isReplying:p,selectedArea:w,setSelectedArea:k,isTransferOpen:S,setIsTransferOpen:L,transferArea:m,setTransferArea:f,transferAreas:v,attendants:E,transferAttendant:j,setTransferAttendant:M,transferNote:y,setTransferNote:P,submitTransfer:W}=ny(),N=n?"1fr":e?"minmax(260px, 320px) minmax(0, 1.6fr) minmax(280px, 320px)":t||r?"minmax(260px, 320px) minmax(0, 1fr)":"1fr";return d.jsx("main",{style:{minHeight:"100vh",padding:"1.5rem"},children:d.jsxs("section",{style:{width:"min(1680px, calc(100vw - 3rem))",margin:"0 auto",background:"var(--color-surface-strong)",borderRadius:"32px",boxShadow:"var(--shadow-lg)",padding:"1.5rem",display:"grid",gap:"1.25rem"},children:[d.jsxs("header",{style:{display:"grid",gridTemplateColumns:n?"1fr":"auto 1fr auto",gap:"1rem",alignItems:"center"},children:[d.jsx(qi,{}),d.jsx("div",{style:{justifySelf:n?"stretch":"center",padding:"0.85rem 1rem",borderRadius:"18px",background:"rgba(0, 49, 80, 0.06)",color:"var(--color-primary)",fontWeight:700,textAlign:"center"},children:"Atendimento em tempo real"}),d.jsx(zs,{to:"/home",style:{justifySelf:n?"stretch":"end",borderRadius:"16px",padding:"0.85rem 1rem",background:"var(--color-primary)",color:"#fff",fontWeight:700,textAlign:"center"},children:"Voltar para home"})]}),d.jsxs("section",{style:{display:"grid",gridTemplateColumns:N,gap:"1rem",alignItems:"start"},children:[d.jsx(Jv,{contacts:l,activeContactId:o,onSelectContact:a,isMobile:n}),d.jsxs("div",{style:{display:"grid",gap:"1rem",minWidth:0},children:[d.jsx(Zv,{contact:i,messages:s,selectedArea:w,setSelectedArea:k,draft:u,setDraft:h,onSend:c,onToggleTransfer:()=>L(V=>!V),isReplying:p,isMobile:n}),d.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(220px, 1fr))",gap:"0.75rem"},children:ey.map(V=>d.jsx("button",{type:"button",onClick:()=>h(V),style:{border:"1px solid var(--color-border)",borderRadius:"18px",padding:"0.85rem 1rem",background:"#fff",color:"var(--color-primary)",fontWeight:600,textAlign:"left"},children:V},V))})]}),e?d.jsx(Ed,{isOpen:S,transferArea:m,setTransferArea:f,transferAreas:v,attendants:E,transferAttendant:j,setTransferAttendant:M,transferNote:y,setTransferNote:P,onSubmit:W,onClose:()=>L(!1)}):null]}),e?null:d.jsx(Ed,{isOpen:S,transferArea:m,setTransferArea:f,transferAreas:v,attendants:E,transferAttendant:j,setTransferAttendant:M,transferNote:y,setTransferNote:P,onSubmit:W,onClose:()=>L(!1)})]})})}function iy({id:e}){const t={width:22,height:22,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.8,strokeLinecap:"round",strokeLinejoin:"round"};return e==="mute"?d.jsxs("svg",{...t,children:[d.jsx("path",{d:"M11 5a2 2 0 0 1 4 0v5a2 2 0 0 1-4 0z"}),d.jsx("path",{d:"M19 10a7 7 0 0 1-.6 2.8"}),d.jsx("path",{d:"M5.6 5.6 18.4 18.4"}),d.jsx("path",{d:"M9 10a3 3 0 0 0 4.7 2.5"}),d.jsx("path",{d:"M12 19v3"}),d.jsx("path",{d:"M8 22h8"})]}):e==="keypad"?d.jsxs("svg",{...t,children:[d.jsx("rect",{x:"4",y:"4",width:"4",height:"4",rx:"1"}),d.jsx("rect",{x:"10",y:"4",width:"4",height:"4",rx:"1"}),d.jsx("rect",{x:"16",y:"4",width:"4",height:"4",rx:"1"}),d.jsx("rect",{x:"4",y:"10",width:"4",height:"4",rx:"1"}),d.jsx("rect",{x:"10",y:"10",width:"4",height:"4",rx:"1"}),d.jsx("rect",{x:"16",y:"10",width:"4",height:"4",rx:"1"}),d.jsx("rect",{x:"4",y:"16",width:"4",height:"4",rx:"1"}),d.jsx("rect",{x:"10",y:"16",width:"4",height:"4",rx:"1"}),d.jsx("rect",{x:"16",y:"16",width:"4",height:"4",rx:"1"})]}):e==="speaker"?d.jsxs("svg",{...t,children:[d.jsx("path",{d:"M5 9v6h4l5 4V5l-5 4z"}),d.jsx("path",{d:"M18 9a4 4 0 0 1 0 6"}),d.jsx("path",{d:"M20.5 6.5a7.5 7.5 0 0 1 0 11"})]}):d.jsxs("svg",{...t,children:[d.jsx("path",{d:"M16 3h5v5"}),d.jsx("path",{d:"M21 3l-7 7"}),d.jsx("path",{d:"M8 7H3v5"}),d.jsx("path",{d:"M3 12l7-7"}),d.jsx("path",{d:"M16 21h5v-5"}),d.jsx("path",{d:"M21 21l-7-7"})]})}function oy({controls:e,isMobile:t=!1}){return d.jsx("div",{style:{display:"grid",gridTemplateColumns:t?"repeat(2, minmax(0, 1fr))":"repeat(4, minmax(120px, 1fr))",gap:"1rem"},children:e.map(r=>d.jsxs("button",{type:"button",style:{border:"1px solid rgba(255, 255, 255, 0.12)",borderRadius:"24px",padding:"1rem",background:"rgba(255, 255, 255, 0.06)",color:"#fff",display:"grid",gap:"0.35rem",justifyItems:"start",textAlign:"left"},children:[d.jsx("span",{"aria-hidden":"true",style:{width:48,height:48,borderRadius:"16px",background:"rgba(255, 255, 255, 0.1)",display:"grid",placeItems:"center",fontWeight:800,color:"#fff"},children:d.jsx(iy,{id:r.id})}),d.jsx("strong",{children:r.label}),d.jsx("span",{style:{color:"rgba(255, 255, 255, 0.66)",fontSize:"0.9rem"},children:r.hint})]},r.id))})}function ay({isMobile:e=!1}){return d.jsxs("header",{style:{display:"grid",gridTemplateColumns:e?"1fr":"auto 1fr auto",alignItems:"center",gap:"1rem"},children:[d.jsx("div",{style:{justifySelf:e?"stretch":"start",padding:"0.65rem 0.95rem",borderRadius:"999px",background:"rgba(255, 255, 255, 0.08)",color:"rgba(255, 255, 255, 0.84)",fontWeight:700,textAlign:"center"},children:"Ligacao ativa"}),d.jsx("div",{style:{textAlign:"center",color:"rgba(255, 255, 255, 0.68)",letterSpacing:"0.12em",textTransform:"uppercase",fontSize:"0.8rem",fontWeight:700},children:"Softphone MVP Omnichannel"}),d.jsx(zs,{to:"/home",style:{justifySelf:e?"stretch":"end",borderRadius:"16px",padding:"0.85rem 1rem",background:"rgba(255, 255, 255, 0.08)",color:"#fff",fontWeight:700,textAlign:"center"},children:"Voltar para home"})]})}function sy(e){const t=String(Math.floor(e/3600)).padStart(2,"0"),r=String(Math.floor(e%3600/60)).padStart(2,"0"),n=String(e%60).padStart(2,"0");return`${t}:${r}:${n}`}function uy(e=0){const[t,r]=R.useState(e);return R.useEffect(()=>{const n=window.setInterval(()=>{r(l=>l+1)},1e3);return()=>window.clearInterval(n)},[]),{seconds:t,formattedTime:sy(t)}}const Nn={customerName:"Maria Souza",role:"Cliente VIP • Ligação via PABX",number:"+55 11 99888-7766",queue:"Fila Suporte Premium",initials:"MS"},dy=[{id:"mute",label:"Mudo",hint:"Microfone"},{id:"keypad",label:"Teclado",hint:"DTMF"},{id:"speaker",label:"Alto-falante",hint:"Saida de audio"},{id:"transfer",label:"Transferir",hint:"Encaminhar"}];function cy(){const{isMobile:e}=eo(),{formattedTime:t}=uy(312);return d.jsx("main",{style:{minHeight:"100vh",padding:"1.5rem",background:"radial-gradient(circle at top, rgba(0, 164, 183, 0.22), transparent 22%), radial-gradient(circle at bottom, rgba(181, 31, 31, 0.2), transparent 26%), linear-gradient(180deg, #061521 0%, #0a2233 100%)"},children:d.jsxs("section",{style:{width:"min(1480px, calc(100vw - 3rem))",minHeight:"calc(100vh - 3rem)",margin:"0 auto",borderRadius:"36px",padding:"1.5rem",display:"grid",gap:"1.5rem",background:"linear-gradient(180deg, rgba(8, 22, 34, 0.94), rgba(10, 34, 51, 0.92))",border:"1px solid rgba(255, 255, 255, 0.08)",boxShadow:"0 30px 70px rgba(0, 0, 0, 0.35)",color:"#fff"},children:[d.jsx(ay,{isMobile:e}),d.jsxs("section",{style:{display:"grid",gridTemplateColumns:e?"1fr":"minmax(280px, 360px) minmax(0, 1fr)",gap:"1.5rem",alignItems:"stretch",flex:1},children:[d.jsxs("aside",{style:{borderRadius:"30px",padding:"1.5rem",background:"rgba(255, 255, 255, 0.05)",border:"1px solid rgba(255, 255, 255, 0.08)",display:"grid",gap:"1rem",alignContent:"start"},children:[d.jsx("span",{style:{width:"fit-content",padding:"0.45rem 0.8rem",borderRadius:"999px",background:"rgba(229, 162, 42, 0.16)",color:"#ffd37f",fontWeight:700,fontSize:"0.84rem"},children:Nn.queue}),d.jsx("div",{"aria-hidden":"true",style:{width:e?110:132,height:e?110:132,borderRadius:"32px",background:"linear-gradient(135deg, #0d3d5d, #00a4b7)",display:"grid",placeItems:"center",fontSize:e?"2rem":"2.4rem",fontWeight:800,boxShadow:"0 20px 40px rgba(0, 0, 0, 0.28)"},children:Nn.initials}),d.jsxs("div",{children:[d.jsx("strong",{style:{display:"block",fontSize:"1.5rem"},children:Nn.customerName}),d.jsx("span",{style:{color:"rgba(255, 255, 255, 0.7)"},children:Nn.role})]}),d.jsx("div",{style:{display:"grid",gap:"0.85rem"},children:[{label:"Numero",value:Nn.number},{label:"Canal original",value:"Atendimento omnichannel"},{label:"Responsavel atual",value:"Ana Camolesi"}].map(r=>d.jsxs("article",{style:{borderRadius:"22px",padding:"1rem",background:"rgba(255, 255, 255, 0.05)"},children:[d.jsx("span",{style:{color:"rgba(255, 255, 255, 0.62)",display:"block"},children:r.label}),d.jsx("strong",{style:{display:"block",marginTop:"0.35rem"},children:r.value})]},r.label))})]}),d.jsxs("section",{style:{display:"grid",gap:"1.5rem",alignContent:"space-between"},children:[d.jsxs("div",{style:{borderRadius:"32px",padding:e?"1.5rem":"2.25rem",background:"radial-gradient(circle at top right, rgba(229, 162, 42, 0.2), transparent 28%), rgba(255, 255, 255, 0.04)",border:"1px solid rgba(255, 255, 255, 0.08)",display:"grid",gap:"1rem",justifyItems:"center",textAlign:"center",minHeight:e?"auto":360,alignContent:"center"},children:[d.jsx("span",{style:{width:"fit-content",padding:"0.5rem 0.9rem",borderRadius:"999px",background:"rgba(0, 164, 183, 0.16)",color:"#8ce8f2",fontWeight:700},children:"Chamada em andamento"}),d.jsx("strong",{style:{fontSize:e?"2.7rem":"4rem",letterSpacing:"0.08em"},children:t}),d.jsx("p",{style:{margin:0,maxWidth:"34rem",color:"rgba(255, 255, 255, 0.74)",lineHeight:1.6},children:"Voce esta em uma ligacao ativa com a cliente. Os controles abaixo sao visuais neste MVP e ajudam a demonstrar a experiencia de voz do produto."})]}),d.jsx(oy,{controls:dy,isMobile:e}),d.jsxs("div",{style:{display:"grid",gridTemplateColumns:e?"1fr":"repeat(2, minmax(0, 1fr)) auto",gap:"1rem",alignItems:"center"},children:[d.jsx("div",{style:{borderRadius:"24px",padding:"1rem 1.15rem",background:"rgba(255, 255, 255, 0.05)",color:"rgba(255, 255, 255, 0.72)"},children:"Qualidade da chamada: Estavel"}),d.jsx("div",{style:{borderRadius:"24px",padding:"1rem 1.15rem",background:"rgba(255, 255, 255, 0.05)",color:"rgba(255, 255, 255, 0.72)"},children:"Gravacao mock: Habilitada"}),d.jsx("button",{type:"button",style:{border:"none",borderRadius:"24px",padding:"1rem 1.4rem",background:"linear-gradient(135deg, var(--color-secondary), #d43a3a)",color:"#fff",fontWeight:800,minHeight:58},children:"Encerrar chamada"})]})]})]})]})})}function fy({contacts:e,activeContactId:t,onSelectContact:r,selectedChannel:n}){return d.jsxs("aside",{style:{background:"#fff",border:"1px solid var(--color-border)",borderRadius:"28px",padding:"1.25rem",display:"grid",gap:"0.9rem"},children:[d.jsxs("div",{children:[d.jsx("strong",{style:{display:"block",fontSize:"1.08rem"},children:"Contatos recentes"}),d.jsx("span",{style:{color:"var(--color-text-soft)"},children:"Reaproveite ultimos atendimentos para ganhar velocidade."})]}),d.jsx("div",{style:{display:"grid",gap:"0.75rem"},children:e.map(l=>{const i=l.id===t,o=n==="call"?l.channel==="Ligacao":n==="sms"?l.channel==="SMS":l.channel==="WhatsApp";return d.jsxs("button",{type:"button",onClick:()=>r(l.id),style:{border:"1px solid",borderColor:i?"rgba(0, 164, 183, 0.26)":"var(--color-border)",background:i?"rgba(0, 164, 183, 0.08)":"#fff",borderRadius:"20px",padding:"1rem",textAlign:"left",display:"grid",gap:"0.5rem"},children:[d.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:"1rem"},children:[d.jsx("strong",{children:l.name}),o?d.jsx("span",{style:{padding:"0.2rem 0.5rem",borderRadius:999,background:"rgba(0, 164, 183, 0.12)",color:"var(--color-primary)",fontSize:"0.76rem",fontWeight:700},children:"Sugerido"}):null]}),d.jsx("span",{style:{color:"var(--color-text-soft)"},children:l.phone}),d.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:"1rem"},children:[d.jsx("span",{style:{color:"var(--color-primary)",fontWeight:700},children:l.channel}),d.jsx("span",{style:{color:"var(--color-text-soft)",fontSize:"0.85rem"},children:l.lastContact})]})]},l.id)})})]})}const Io=[{id:"whatsapp",label:"WhatsApp",route:"/chat",accent:"#2bb741"},{id:"sms",label:"SMS",route:"/chat",accent:"#00a4b7"},{id:"call",label:"Ligacao",route:"/call",accent:"#e5a22a"}],py=["Suporte","Financeiro","Comercial"],Dn=[{id:"maria-souza",name:"Maria Souza",phone:"+55 11 99888-7766",channel:"WhatsApp",lastContact:"Hoje, 09:42"},{id:"empresa-alpha",name:"Empresa Alpha",phone:"+55 11 4002-2020",channel:"Email",lastContact:"Ontem, 16:18"},{id:"joao-pedro",name:"Joao Pedro",phone:"+55 31 98877-1102",channel:"SMS",lastContact:"Hoje, 08:15"},{id:"beatriz-lima",name:"Beatriz Lima",phone:"+55 21 99701-4455",channel:"Ligacao",lastContact:"Hoje, 07:51"}];function hy(){const e=Dr(),{isWideDesktop:t,isDesktop:r,isTablet:n,isMobile:l}=eo(),[i,o]=R.useState(""),[a,s]=R.useState("whatsapp"),[u,h]=R.useState(""),[c,p]=R.useState(Dn[0].id),[w,k]=R.useState(""),S=i.trim().toLowerCase(),L=R.useMemo(()=>S?Dn.filter(j=>`${j.name} ${j.phone} ${j.channel}`.toLowerCase().includes(S)):Dn,[S]),m=L.find(j=>j.id===c)||Dn.find(j=>j.id===c)||Dn[0],f=Io.find(j=>j.id===a)||Io[0],v=l?"1fr":t?"minmax(300px, 360px) minmax(0, 1fr)":r||n?"minmax(280px, 340px) minmax(0, 1fr)":"1fr";function E(){e(f.route)}return d.jsx("main",{style:{minHeight:"100vh",padding:"1.5rem"},children:d.jsxs("section",{style:{width:"min(1680px, calc(100vw - 3rem))",margin:"0 auto",background:"var(--color-surface-strong)",borderRadius:"32px",boxShadow:"var(--shadow-lg)",padding:"1.5rem",display:"grid",gap:"1.25rem"},children:[d.jsxs("header",{style:{display:"grid",gridTemplateColumns:l?"1fr":"auto 1fr auto",gap:"1rem",alignItems:"center"},children:[d.jsx(qi,{}),d.jsx("div",{style:{justifySelf:l?"stretch":"center",padding:"0.85rem 1rem",borderRadius:"18px",background:"rgba(0, 49, 80, 0.06)",color:"var(--color-primary)",fontWeight:700,textAlign:"center"},children:"Criacao rapida de atendimento"}),d.jsx(zs,{to:"/home",style:{justifySelf:l?"stretch":"end",borderRadius:"16px",padding:"0.85rem 1rem",background:"var(--color-primary)",color:"#fff",fontWeight:700,textAlign:"center"},children:"Voltar para home"})]}),d.jsxs("section",{style:{display:"grid",gridTemplateColumns:v,gap:"1rem",alignItems:"start"},children:[d.jsx(fy,{contacts:L,activeContactId:m.id,onSelectContact:p,selectedChannel:a}),d.jsxs("section",{style:{background:"#fff",border:"1px solid var(--color-border)",borderRadius:"28px",padding:"1.5rem",display:"grid",gap:"1.25rem"},children:[d.jsxs("div",{children:[d.jsx("strong",{style:{display:"block",fontSize:"1.18rem"},children:"Novo atendimento"}),d.jsx("p",{style:{margin:"0.45rem 0 0",color:"var(--color-text-soft)",lineHeight:1.6},children:"Escolha o contato, o canal e a area opcional antes de iniciar. O fluxo e mockado e leva voce direto para chat ou ligacao."})]}),d.jsxs("div",{style:{display:"grid",gridTemplateColumns:l?"1fr":"minmax(0, 1fr) auto",gap:"0.85rem"},children:[d.jsx("input",{type:"search",value:i,onChange:j=>o(j.target.value),placeholder:"Buscar contato por nome ou numero",style:{border:"1px solid var(--color-border)",borderRadius:"18px",padding:"0.95rem 1rem",background:"#fff",outline:"none"}}),d.jsx("button",{type:"button",onClick:()=>k(m.phone),style:{border:"1px solid var(--color-border)",borderRadius:"18px",padding:"0.95rem 1rem",background:"#fff",color:"var(--color-primary)",fontWeight:700},children:"Novo numero"})]}),d.jsx("div",{style:{display:"grid",gridTemplateColumns:l?"1fr":"repeat(3, minmax(0, 1fr))",gap:"0.85rem"},children:Io.map(j=>{const M=j.id===a;return d.jsxs("button",{type:"button",onClick:()=>s(j.id),style:{border:"1px solid",borderColor:M?`${j.accent}44`:"var(--color-border)",borderRadius:"22px",padding:"1rem",background:M?`${j.accent}12`:"#fff",textAlign:"left",display:"grid",gap:"0.45rem"},children:[d.jsx("strong",{style:{color:M?j.accent:"var(--color-text)"},children:j.label}),d.jsx("span",{style:{color:"var(--color-text-soft)"},children:j.id==="call"?"Inicia uma ligacao mock em tela cheia.":"Abre o fluxo de conversa em tempo real."})]},j.id)})}),d.jsxs("div",{style:{display:"grid",gridTemplateColumns:l?"1fr":"repeat(2, minmax(0, 1fr))",gap:"1rem"},children:[d.jsxs("label",{style:{display:"grid",gap:"0.45rem"},children:[d.jsx("span",{style:{fontWeight:600},children:"Area (opcional)"}),d.jsxs("select",{value:u,onChange:j=>h(j.target.value),style:{border:"1px solid var(--color-border)",borderRadius:"18px",padding:"0.95rem 1rem",background:"#fff",outline:"none"},children:[d.jsx("option",{value:"",children:"Selecionar depois"}),py.map(j=>d.jsx("option",{value:j,children:j},j))]})]}),d.jsxs("label",{style:{display:"grid",gap:"0.45rem"},children:[d.jsx("span",{style:{fontWeight:600},children:"Numero selecionado"}),d.jsx("input",{type:"text",value:w||m.phone,onChange:j=>k(j.target.value),placeholder:"+55 11 99999-9999",style:{border:"1px solid var(--color-border)",borderRadius:"18px",padding:"0.95rem 1rem",background:"#fff",outline:"none"}})]})]}),d.jsxs("section",{style:{display:"grid",gridTemplateColumns:l?"1fr":"minmax(0, 1.1fr) minmax(280px, 0.9fr)",gap:"1rem"},children:[d.jsxs("article",{style:{borderRadius:"24px",padding:"1.25rem",background:"linear-gradient(135deg, rgba(0, 49, 80, 0.98), rgba(11, 90, 134, 0.94))",color:"#fff",display:"grid",gap:"0.7rem"},children:[d.jsx("span",{style:{width:"fit-content",padding:"0.35rem 0.75rem",borderRadius:"999px",background:"rgba(255, 255, 255, 0.12)",fontWeight:700,fontSize:"0.84rem"},children:"Resumo do fluxo"}),d.jsx("strong",{style:{fontSize:"1.25rem"},children:m.name}),d.jsxs("span",{style:{color:"rgba(255, 255, 255, 0.74)"},children:["Canal escolhido: ",f.label]}),d.jsxs("span",{style:{color:"rgba(255, 255, 255, 0.74)"},children:["Numero: ",w||m.phone]}),d.jsxs("span",{style:{color:"rgba(255, 255, 255, 0.74)"},children:["Area: ",u||"Definir depois"]})]}),d.jsxs("article",{style:{borderRadius:"24px",padding:"1.25rem",border:"1px solid var(--color-border)",background:"#fff",display:"grid",gap:"0.7rem"},children:[d.jsx("strong",{children:"Proxima rota"}),d.jsx("span",{style:{color:"var(--color-text-soft)"},children:f.route==="/call"?"Ao iniciar, voce vai para a tela de ligacao.":"Ao iniciar, voce vai para a tela de chat."}),d.jsx("button",{type:"button",onClick:E,style:{border:"none",borderRadius:"18px",padding:"1rem 1.1rem",background:"linear-gradient(135deg, var(--color-primary), #0b5a86)",color:"#fff",fontWeight:800,marginTop:"0.4rem"},children:"Iniciar atendimento"})]})]})]})]})]})})}const my=mv([{path:"/",element:d.jsx(av,{to:"/login",replace:!0})},{path:"/login",element:d.jsx(bv,{})},{path:"/home",element:d.jsx(Xv,{})},{path:"/chat",element:d.jsx(ly,{})},{path:"/call",element:d.jsx(cy,{})},{path:"/new-attendance",element:d.jsx(hy,{})}]);Oo.createRoot(document.getElementById("root")).render(d.jsx(Ad.StrictMode,{children:d.jsx(Ev,{router:my})}));
diff --git a/dist/assets/index-BsY34Fgu.css b/dist/assets/index-BsY34Fgu.css
deleted file mode 100644
index 80add01..0000000
--- a/dist/assets/index-BsY34Fgu.css
+++ /dev/null
@@ -1 +0,0 @@
-:root{font-family:Segoe UI,Helvetica Neue,sans-serif;color:#122230;background:radial-gradient(circle at top left,rgba(0,164,183,.12),transparent 28%),radial-gradient(circle at bottom right,rgba(229,162,42,.14),transparent 24%),#f5f8fb;color-scheme:light;--color-primary: #003150;--color-secondary: #b51f1f;--color-accent: #00a4b7;--color-highlight: #e5a22a;--color-surface: rgba(255, 255, 255, .9);--color-surface-strong: #ffffff;--color-text: #122230;--color-text-soft: #5e6d7b;--color-border: rgba(0, 49, 80, .12);--shadow-lg: 0 24px 60px rgba(0, 49, 80, .12);--shadow-md: 0 12px 28px rgba(0, 49, 80, .08)}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{min-height:100vh}body,button,input{font:inherit}button{cursor:pointer}a{color:inherit;text-decoration:none}
diff --git a/dist/assets/logo_white_dark_mode-BKcVSu03.png b/dist/assets/logo_white_dark_mode-BKcVSu03.png
deleted file mode 100644
index 9f6233d..0000000
Binary files a/dist/assets/logo_white_dark_mode-BKcVSu03.png and /dev/null differ
diff --git a/dist/assets/logo_white_mode-BIHgqUPv.png b/dist/assets/logo_white_mode-BIHgqUPv.png
deleted file mode 100644
index 76b20a3..0000000
Binary files a/dist/assets/logo_white_mode-BIHgqUPv.png and /dev/null differ
diff --git a/dist/index.html b/dist/index.html
deleted file mode 100644
index 2ba7a16..0000000
--- a/dist/index.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
- Omnichannel Sothis
-
-
-
-
-
-
-
diff --git a/src/modules/auth/components/LoginForm.jsx b/src/modules/auth/components/LoginForm.jsx
index 66f1d6c..0ad3e61 100644
--- a/src/modules/auth/components/LoginForm.jsx
+++ b/src/modules/auth/components/LoginForm.jsx
@@ -39,7 +39,7 @@ const initialFormData = {
export function LoginForm() {
const [formData, setFormData] = useState(initialFormData);
- const { login, isSubmitting } = useLogin();
+ const { login, startMicrosoftLogin, providers, error, isSubmitting } = useLogin();
async function handleSubmit(event) {
event.preventDefault();
@@ -48,50 +48,89 @@ export function LoginForm() {
return (
);
}
diff --git a/src/modules/auth/hooks/useLogin.js b/src/modules/auth/hooks/useLogin.js
index cddc6da..91a68eb 100644
--- a/src/modules/auth/hooks/useLogin.js
+++ b/src/modules/auth/hooks/useLogin.js
@@ -1,17 +1,51 @@
-import { useState } from 'react';
+import { useEffect, useState } from 'react';
import { useNavigate } from 'react-router-dom';
-import { mockLogin } from '../services/authService';
+import {
+ getAuthConfig,
+ loginWithAd,
+ startMicrosoftLogin,
+ storeAuthSession,
+} from '../services/authService';
export function useLogin() {
const navigate = useNavigate();
const [isSubmitting, setIsSubmitting] = useState(false);
+ const [error, setError] = useState('');
+ const [providers, setProviders] = useState({ ldap: true, microsoft: false });
- async function login() {
- setIsSubmitting(true);
+ useEffect(() => {
+ getAuthConfig()
+ .then((config) => setProviders(config.providers || { ldap: true, microsoft: false }))
+ .catch(() => setProviders({ ldap: true, microsoft: false }));
+ }, []);
+
+ useEffect(() => {
+ const params = new URLSearchParams(window.location.search);
+ const token = params.get('token');
+ const rawUser = params.get('user');
+
+ if (!token || !rawUser) return;
try {
- await mockLogin();
+ const user = JSON.parse(rawUser);
+ storeAuthSession({ token, user });
+ window.history.replaceState({}, document.title, window.location.pathname);
+ navigate('/home', { replace: true });
+ } catch {
+ setError('Nao foi possivel concluir o login Microsoft.');
+ }
+ }, [navigate]);
+
+ async function login(credentials) {
+ setIsSubmitting(true);
+ setError('');
+
+ try {
+ const authResult = await loginWithAd(credentials);
+ storeAuthSession(authResult);
navigate('/home');
+ } catch (loginError) {
+ setError(loginError.message || 'Falha ao autenticar.');
} finally {
setIsSubmitting(false);
}
@@ -19,6 +53,9 @@ export function useLogin() {
return {
isSubmitting,
+ error,
+ providers,
login,
+ startMicrosoftLogin,
};
}
diff --git a/src/modules/auth/pages/LoginPage.jsx b/src/modules/auth/pages/LoginPage.jsx
index 2de87cf..6f50c2c 100644
--- a/src/modules/auth/pages/LoginPage.jsx
+++ b/src/modules/auth/pages/LoginPage.jsx
@@ -58,7 +58,7 @@ export function LoginPage() {
margin: 0,
}}
>
- MVP de atendimento
+ Atendimento Múltiplos canais
- Conecte-se com seu cliente em uma única tela.
+ Conexão multiatendimento em um único lugar.
{[
- { label: 'Canais', value: 'WhatsApp, SMS e Voz' },
+ { label: 'Canais', value: 'WhatsApp, SMS e E-mail' },
{ label: 'Fila', value: 'Distribuição rápida' },
{ label: 'UX', value: 'Padrão SaaS responsivo' },
].map((item) => (
@@ -147,8 +147,7 @@ export function LoginPage() {
lineHeight: 1.6,
}}
>
- Use seu usuário corporativo para acessar o MVP. A autenticação e mockada
- nesta etapa e leva você diretamente para a dashboard principal.
+ Use seu usuario corporativo para acessar o MVP com Active Directory ou Microsoft.
diff --git a/src/modules/auth/services/authService.js b/src/modules/auth/services/authService.js
index 452383a..1dde66f 100644
--- a/src/modules/auth/services/authService.js
+++ b/src/modules/auth/services/authService.js
@@ -1,11 +1,35 @@
-const networkDelay = 450;
+const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:3001';
-export async function mockLogin() {
- await new Promise((resolve) => window.setTimeout(resolve, networkDelay));
+async function parseJsonResponse(response) {
+ const data = await response.json().catch(() => null);
- return {
- id: 'agent-001',
- name: 'Ana Camolesi',
- email: 'ana.camolesi@sothis.local',
- };
+ if (!response.ok) {
+ throw new Error(data?.message || 'Nao foi possivel autenticar.');
+ }
+
+ return data;
+}
+
+export async function getAuthConfig() {
+ const response = await fetch(`${API_BASE_URL}/auth/config`);
+ return parseJsonResponse(response);
+}
+
+export async function loginWithAd(credentials) {
+ const response = await fetch(`${API_BASE_URL}/auth/login`, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(credentials),
+ });
+
+ return parseJsonResponse(response);
+}
+
+export function startMicrosoftLogin() {
+ window.location.href = `${API_BASE_URL}/auth/oauth/microsoft/start`;
+}
+
+export function storeAuthSession(authResult) {
+ window.localStorage.setItem('authToken', authResult.token);
+ window.localStorage.setItem('authUser', JSON.stringify(authResult.user));
}
diff --git a/src/modules/home/components/HomeSidebar.jsx b/src/modules/home/components/HomeSidebar.jsx
index d36ab36..a68ec42 100644
--- a/src/modules/home/components/HomeSidebar.jsx
+++ b/src/modules/home/components/HomeSidebar.jsx
@@ -1,5 +1,5 @@
import { useNavigate } from 'react-router-dom';
-import { clearSession, getCurrentUserProfile } from '../../auth/services/sessionService';
+import { clearSession } from '../../auth/services/sessionService';
export function HomeSidebar({ items, activeItem, isMobile = false }) {
const navigate = useNavigate();
@@ -29,7 +29,7 @@ export function HomeSidebar({ items, activeItem, isMobile = false }) {
textAlign: 'left',
}}
>
- + Novo Atendimento
+ Abrir atendimento
formatCurrentDateTime(new Date()));
const tabs = [
{ id: 'messages', label: 'Mensagens' },
- { id: 'calls', label: 'Ligações' },
+ { id: 'calls', label: 'Ligacoes' },
];
const gridTemplateColumns = isMobile
? '1fr'
: isWideDesktop
- ? 'max-content minmax(180px, 220px) minmax(280px, 1fr) max-content'
+ ? 'max-content minmax(150px, 190px) minmax(280px, 1fr) max-content'
: isDesktop || isTablet
? 'repeat(2, minmax(0, 1fr))'
: '1fr';
+ useEffect(() => {
+ const intervalId = window.setInterval(() => {
+ setCurrentDateTime(formatCurrentDateTime(new Date()));
+ }, 1000);
+
+ return () => window.clearInterval(intervalId);
+ }, []);
+
return (
diff --git a/src/modules/home/components/MessagesWorkspace.jsx b/src/modules/home/components/MessagesWorkspace.jsx
index fa54909..b2b017a 100644
--- a/src/modules/home/components/MessagesWorkspace.jsx
+++ b/src/modules/home/components/MessagesWorkspace.jsx
@@ -1,5 +1,8 @@
+import { useEffect, useMemo, useState } from 'react';
import { useNavigate } from 'react-router-dom';
+const WORKSPACE_HEIGHT = 660;
+
function ChannelBadge({ channel }) {
const colors = {
WhatsApp: '#2bb741',
@@ -25,28 +28,145 @@ function ChannelBadge({ channel }) {
);
}
+function buildSuggestedReplies(conversation) {
+ const lastMessage = conversation?.lastMessage || conversation?.messages?.at(-1)?.text || '';
+ const firstName = conversation?.name?.split(' ')?.[0] || 'voce';
+ const lowerContext = lastMessage.toLowerCase();
+
+ if (
+ lowerContext.includes('fatura') ||
+ lowerContext.includes('cobranca') ||
+ lowerContext.includes('pagamento')
+ ) {
+ return [
+ `${firstName}, vou conferir os dados financeiros e ja te retorno com a posicao correta.`,
+ 'Recebi sua mensagem sobre cobranca. Vou validar o historico antes de seguir com a orientacao.',
+ 'Consigo te ajudar com isso. Pode me confirmar o CPF/CNPJ ou protocolo vinculado ao atendimento?',
+ ];
+ }
+
+ if (
+ lowerContext.includes('endereco') ||
+ lowerContext.includes('cadastro') ||
+ lowerContext.includes('atualizar')
+ ) {
+ return [
+ `${firstName}, vou validar seu cadastro e confirmar se a alteracao ja foi registrada.`,
+ 'Para seguir com a atualizacao, me confirme por favor os dados que precisam ser ajustados.',
+ 'Entendi. Vou verificar o cadastro atual e te retorno com o proximo passo.',
+ ];
+ }
+
+ if (
+ lowerContext.includes('ligar') ||
+ lowerContext.includes('telefone') ||
+ lowerContext.includes('retorno')
+ ) {
+ return [
+ `${firstName}, consigo organizar esse retorno. Qual o melhor horario para contato?`,
+ 'Vou registrar sua solicitacao e direcionar o retorno para o time responsavel.',
+ 'Obrigado pelo aviso. Vou confirmar disponibilidade e te retorno por aqui.',
+ ];
+ }
+
+ return [
+ `${firstName}, recebi sua mensagem e vou verificar o contexto para te orientar corretamente.`,
+ 'Entendi. Vou analisar as informacoes do atendimento e retorno com o melhor encaminhamento.',
+ 'Posso acionar o time responsavel e te atualizar por aqui assim que tiver uma posicao.',
+ ];
+}
+
export function MessagesWorkspace({
conversations,
activeConversationId,
onSelectConversation,
- actionItems,
isWideDesktop = false,
isDesktop = false,
isTablet = false,
isMobile = false,
}) {
const navigate = useNavigate();
+ const recentConversations = conversations.slice(0, 3);
const activeConversation =
- conversations.find((conversation) => conversation.id === activeConversationId) ||
+ recentConversations.find((conversation) => conversation.id === activeConversationId) ||
+ recentConversations[0] ||
conversations[0];
+ const safeActiveConversation = activeConversation || {
+ id: 'empty',
+ name: 'Nenhuma conversa',
+ status: 'offline',
+ messages: [],
+ };
+ const suggestedReplies = useMemo(
+ () => buildSuggestedReplies(safeActiveConversation),
+ [safeActiveConversation],
+ );
+ const [selectedReplyIndex, setSelectedReplyIndex] = useState(0);
+ const [noteDraft, setNoteDraft] = useState('');
+ const [notes, setNotes] = useState(() => {
+ try {
+ return JSON.parse(window.localStorage.getItem('agentNotes') || '[]');
+ } catch {
+ return [];
+ }
+ });
+
+ const selectedReply = suggestedReplies[selectedReplyIndex] || suggestedReplies[0];
+ const managerMessages = [
+ {
+ id: 'sla',
+ title: 'Comunicado do supervisor',
+ text: 'Priorizar atendimentos com SLA abaixo de 15 minutos antes de abrir novos casos.',
+ },
+ {
+ id: 'script',
+ title: 'Atualizacao de script',
+ text: 'Use o novo roteiro de confirmacao de dados em atendimentos financeiros.',
+ },
+ ];
+
+ useEffect(() => {
+ setSelectedReplyIndex(0);
+ }, [safeActiveConversation.id]);
+
+ useEffect(() => {
+ window.localStorage.setItem('agentNotes', JSON.stringify(notes));
+ }, [notes]);
+
+ function selectPreviousReply() {
+ setSelectedReplyIndex((current) =>
+ current === 0 ? suggestedReplies.length - 1 : current - 1,
+ );
+ }
+
+ function selectNextReply() {
+ setSelectedReplyIndex((current) => (current + 1) % suggestedReplies.length);
+ }
+
+ function saveNote() {
+ const text = noteDraft.trim();
+ if (!text) return;
+
+ setNotes((current) => [
+ {
+ id: Date.now(),
+ text,
+ time: new Date().toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' }),
+ },
+ ...current,
+ ]);
+ setNoteDraft('');
+ }
const gridTemplateColumns = isMobile
? '1fr'
: isWideDesktop
? 'minmax(240px, 0.95fr) minmax(360px, 1.8fr) minmax(220px, 0.8fr)'
: isDesktop || isTablet
- ? 'minmax(260px, 320px) minmax(0, 1fr)'
- : '1fr';
+ ? 'minmax(260px, 320px) minmax(0, 1fr)'
+ : '1fr';
+
+ const panelHeight = isMobile ? 'auto' : WORKSPACE_HEIGHT;
return (
Conversas
- Atendimento em tempo real por canal.
+ Ultimos 3 atendimentos em tempo real.
- {conversations.map((conversation) => {
- const isActive = conversation.id === activeConversation.id;
+ {recentConversations.map((conversation) => {
+ const isActive = conversation.id === safeActiveConversation.id;
return (
);
})}
+
+ {conversations.length > 3 ? (
+ navigate('/chat')}
+ style={{
+ border: '1px solid var(--color-border)',
+ borderRadius: '16px',
+ padding: '0.85rem 1rem',
+ background: '#fff',
+ color: 'var(--color-primary)',
+ fontWeight: 700,
+ }}
+ >
+ Ver todos no chat
+
+ ) : null}
- {activeConversation.name}
+
+ {safeActiveConversation.name}
+
- {activeConversation.status === 'online' ? 'Online agora' : 'Offline'}
+ {safeActiveConversation.status === 'online' ? 'Online agora' : 'Offline'}
@@ -190,11 +332,12 @@ export function MessagesWorkspace({
display: 'grid',
gap: '0.9rem',
alignContent: 'start',
+ overflowY: 'auto',
background:
'linear-gradient(180deg, rgba(245, 248, 251, 0.45), rgba(255, 255, 255, 0.9))',
}}
>
- {activeConversation.messages.map((message) => {
+ {safeActiveConversation.messages.map((message) => {
const isAgent = message.from === 'agent';
return (
@@ -218,37 +361,72 @@ export function MessagesWorkspace({
- Resposta sugerida
+
+
-
- Enviar
-
+
+ ‹
+
+ navigate('/chat')}
+ style={{
+ border: '1px solid rgba(0, 164, 183, 0.32)',
+ borderRadius: '16px',
+ padding: '0.75rem 0.9rem',
+ background: 'rgba(0, 164, 183, 0.07)',
+ color: 'var(--color-text)',
+ fontWeight: 600,
+ textAlign: 'left',
+ lineHeight: 1.35,
+ minWidth: 0,
+ overflow: 'hidden',
+ display: '-webkit-box',
+ WebkitLineClamp: 2,
+ WebkitBoxOrient: 'vertical',
+ }}
+ >
+ {selectedReply}
+
+
+ ›
+
+
@@ -259,49 +437,102 @@ export function MessagesWorkspace({
border: '1px solid var(--color-border)',
padding: '1.2rem',
display: 'grid',
+ gridTemplateRows: 'auto minmax(0, 1fr)',
gap: '1rem',
- alignContent: 'start',
gridColumn: isWideDesktop ? 'auto' : '1 / -1',
+ height: panelHeight,
minWidth: 0,
}}
>
-
Painel de ações
-
- Contexto rápido do atendimento selecionado.
-
+
Comunicados e notas
- {actionItems.map((item) => (
-
-
- {item.title}
-
- {item.value}
-
- ))}
-
-
navigate('/new-attendance')}
+
- Criar novo fluxo
-
+ {managerMessages.map((message) => (
+
+ {message.title}
+
+ {message.text}
+
+
+ ))}
+
+
+ Anotacao rapida
+
+
+
+ Salvar anotacao
+
+
+
+ {notes.length ? (
+ notes.map((note) => (
+
+
+ {note.time}
+
+ {note.text}
+
+ ))
+ ) : (
+
Nenhuma anotacao salva.
+ )}
+
+
);
diff --git a/src/modules/home/pages/HomePage.jsx b/src/modules/home/pages/HomePage.jsx
index e534b6d..b7340ef 100644
--- a/src/modules/home/pages/HomePage.jsx
+++ b/src/modules/home/pages/HomePage.jsx
@@ -5,7 +5,7 @@ import { HomeTopbar } from '../components/HomeTopbar';
import { MessagesWorkspace } from '../components/MessagesWorkspace';
import { CallsWorkspace } from '../components/CallsWorkspace';
import { AttendantOpsPanel } from '../components/AttendantOpsPanel';
-import { actionItems, recentCalls, sidebarItems } from '../services/homeMocks';
+import { recentCalls, sidebarItems } from '../services/homeMocks';
import { useViewport } from '../../../shared/hooks/useViewport';
import { useChat } from '../../chat/hooks/useChat';
@@ -141,7 +141,6 @@ export function HomePage() {
conversations={filteredConversations}
activeConversationId={safeConversationId}
onSelectConversation={setActiveContactId}
- actionItems={actionItems}
isWideDesktop={isWideDesktop}
isDesktop={isDesktop}
isTablet={isTablet}
diff --git a/src/modules/home/services/homeMocks.js b/src/modules/home/services/homeMocks.js
index 671d604..ea7614a 100644
--- a/src/modules/home/services/homeMocks.js
+++ b/src/modules/home/services/homeMocks.js
@@ -1,9 +1,8 @@
export const sidebarItems = [
- { id: 'dashboard', label: 'Dashboard' },
- { id: 'new-attendance', label: 'Novos Atendimentos', route: '/new-attendance' },
- { id: 'in-progress', label: 'Em andamento', count: 8 },
- { id: 'completed', label: 'Finalizados', count: 24 },
- { id: 'contacts', label: 'Contatos', count: 128 },
+ { id: 'scripts', label: 'Scripts e respostas prontas' },
+ { id: 'personal-reports', label: 'Relatorios pessoais' },
+ { id: 'mass-message', label: 'Disparo em massa' },
+ { id: 'knowledge-base', label: 'Base de conhecimento' },
];
export const conversations = [
diff --git a/src/modules/management/components/ManagementLayout.jsx b/src/modules/management/components/ManagementLayout.jsx
index 48712e4..260706f 100644
--- a/src/modules/management/components/ManagementLayout.jsx
+++ b/src/modules/management/components/ManagementLayout.jsx
@@ -91,7 +91,7 @@ export function ManagementLayout({
>
navigate(activeSection === 'admin' ? '/admin' : '/supervisor')}
+ onClick={() => navigate('/home')}
style={{
border: 'none',
borderRadius: '20px',
diff --git a/src/modules/management/pages/AdminPage.jsx b/src/modules/management/pages/AdminPage.jsx
index bdae1c5..3904f3e 100644
--- a/src/modules/management/pages/AdminPage.jsx
+++ b/src/modules/management/pages/AdminPage.jsx
@@ -6,6 +6,7 @@ import { MetricGrid } from '../components/MetricGrid';
import { adminMetrics, aiContentRows, areaRows, userRows } from '../services/managementMocks';
import { getAccessOptions, getAccessUsers, updateUserAccess } from '../services/adminAccessService';
import { useViewport } from '../../../shared/hooks/useViewport';
+import { getCurrentUserDisplay } from '../../auth/services/sessionService';
const areaColumns = [
{ key: 'name', label: 'Area' },
@@ -44,6 +45,7 @@ function mapMockUsers() {
export function AdminPage() {
const { isDesktop, isMobile } = useViewport();
+ const userDisplay = getCurrentUserDisplay();
const [users, setUsers] = useState(mapMockUsers);
const [profiles, setProfiles] = useState([]);
const [areas, setAreas] = useState([]);
@@ -207,8 +209,8 @@ export function AdminPage() {
title="Painel administrativo"
subtitle="Controle de usuarios, perfis, areas e base de conteudo para IA."
activeSection="admin"
- profileLabel="Lucas Admin"
- initials="LA"
+ profileLabel={userDisplay.name}
+ initials={userDisplay.initials}
isDesktop={isDesktop}
isMobile={isMobile}
>
diff --git a/src/modules/management/pages/SupervisorPage.jsx b/src/modules/management/pages/SupervisorPage.jsx
index baa91a4..acf6365 100644
--- a/src/modules/management/pages/SupervisorPage.jsx
+++ b/src/modules/management/pages/SupervisorPage.jsx
@@ -5,6 +5,7 @@ import { ManagementTable } from '../components/ManagementTable';
import { MetricGrid } from '../components/MetricGrid';
import { areaRows, queueRows, supervisorMetrics } from '../services/managementMocks';
import { useViewport } from '../../../shared/hooks/useViewport';
+import { getCurrentUserDisplay } from '../../auth/services/sessionService';
const queueColumns = [
{ key: 'customer', label: 'Cliente' },
@@ -41,6 +42,7 @@ const areaColumns = [
export function SupervisorPage() {
const { isDesktop, isMobile } = useViewport();
+ const userDisplay = getCurrentUserDisplay();
const [templates, setTemplates] = useState([]);
const [editingTemplate, setEditingTemplate] = useState(null);
const [editName, setEditName] = useState('');
@@ -103,8 +105,8 @@ export function SupervisorPage() {
title="Painel do supervisor"
subtitle="Acompanhamento operacional das filas, areas e distribuicao de atendimento."
activeSection="supervisor"
- profileLabel="Marina Alves"
- initials="MA"
+ profileLabel={userDisplay.name}
+ initials={userDisplay.initials}
isDesktop={isDesktop}
isMobile={isMobile}
>
diff --git a/src/modules/management/pages/WhatsappAdminPage.jsx b/src/modules/management/pages/WhatsappAdminPage.jsx
index fbe73f6..7d75059 100644
--- a/src/modules/management/pages/WhatsappAdminPage.jsx
+++ b/src/modules/management/pages/WhatsappAdminPage.jsx
@@ -11,6 +11,10 @@ export const WhatsappAdminPage = () => {
socket.on('connect', () => {
console.log('Connected to WhatsApp WebSocket');
+ fetch('http://localhost:3001/whatsapp/status')
+ .then((response) => response.json())
+ .then((data) => setStatus(data.status))
+ .catch(console.error);
});
socket.on('qr', (qrDataUrl) => {
diff --git a/src/routes/router.jsx b/src/routes/router.jsx
index 40cf5c3..fdb0d34 100644
--- a/src/routes/router.jsx
+++ b/src/routes/router.jsx
@@ -1,23 +1,10 @@
import { createBrowserRouter, Navigate } from 'react-router-dom';
import { LoginPage } from '../modules/auth/pages/LoginPage';
-import { HomePage } from '../modules/home/pages/HomePage';
+import { ProfileHomePage } from '../modules/home/pages/ProfileHomePage';
import { ChatPage } from '../modules/chat/pages/ChatPage';
import { CallPage } from '../modules/call/pages/CallPage';
import { NewAttendancePage } from '../modules/attendance/pages/NewAttendancePage';
-import { AdminPage } from '../modules/management/pages/AdminPage';
-import { SupervisorPage } from '../modules/management/pages/SupervisorPage';
-import { getCurrentUserProfile } from '../modules/auth/services/sessionService';
-
-function HomeRouter() {
- const profile = getCurrentUserProfile();
- if (profile === 'admin') {
- return ;
- }
- if (profile === 'supervisor') {
- return ;
- }
- return ;
-}
+import { WhatsappAdminPage } from '../modules/management/pages/WhatsappAdminPage';
export const router = createBrowserRouter([
{
@@ -30,7 +17,7 @@ export const router = createBrowserRouter([
},
{
path: '/home',
- element: ,
+ element: ,
},
{
path: '/chat',
@@ -44,4 +31,8 @@ export const router = createBrowserRouter([
path: '/new-attendance',
element: ,
},
+ {
+ path: '/admin/whatsapp',
+ element: ,
+ },
]);