commit 8e29dde2a14a0dd634333f5b844166598a996d2c Author: Rafael Lopes Date: Thu Mar 19 18:22:18 2026 -0300 Initial commit - Telas iniciais do projeto criadas - Estrutura de pastas e arquivos definida - Componentes instalados e linguagem definida - Vite configurado para React e build de dev rapida - Mockups de dados criados para desenvolvimento dos módulos - Documentação inicial criada para guiar o desenvolvimento e uso do projeto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1245a00 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM node:lts + +WORKDIR /app + +COPY package*.json ./ +RUN npm install + +COPY . . + +EXPOSE 3000 + +CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0", "--port", "3000"] diff --git a/dist/assets/favicon_blue-CzkOczz3.png b/dist/assets/favicon_blue-CzkOczz3.png new file mode 100644 index 0000000..d953c4f Binary files /dev/null and b/dist/assets/favicon_blue-CzkOczz3.png differ diff --git a/dist/assets/index-1xjqdjIG.js b/dist/assets/index-1xjqdjIG.js new file mode 100644 index 0000000..385e977 --- /dev/null +++ b/dist/assets/index-1xjqdjIG.js @@ -0,0 +1,68 @@ +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 new file mode 100644 index 0000000..80add01 --- /dev/null +++ b/dist/assets/index-BsY34Fgu.css @@ -0,0 +1 @@ +: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 new file mode 100644 index 0000000..9f6233d Binary files /dev/null and b/dist/assets/logo_white_dark_mode-BKcVSu03.png differ diff --git a/dist/assets/logo_white_mode-BIHgqUPv.png b/dist/assets/logo_white_mode-BIHgqUPv.png new file mode 100644 index 0000000..76b20a3 Binary files /dev/null and b/dist/assets/logo_white_mode-BIHgqUPv.png differ diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 0000000..2ba7a16 --- /dev/null +++ b/dist/index.html @@ -0,0 +1,14 @@ + + + + + + + Omnichannel Sothis + + + + +
+ + diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..b363d7c --- /dev/null +++ b/docs/README.md @@ -0,0 +1,13 @@ +# Documentação do Frontend + +Esta pasta reúne a documentação funcional e conceitual do frontend MVP Omnichannel. + +## Índice + +- [Visão Geral](./visao-geral.md) +- [Módulo Auth / Login](./modulo-auth.md) +- [Módulo Home / Dashboard](./modulo-home.md) +- [Módulo Chat](./modulo-chat.md) +- [Módulo Call](./modulo-call.md) +- [Módulo Attendance / Novo Atendimento](./modulo-attendance.md) +- [Casos de Uso em Formato RPG](./casos-de-uso-rpg.md) diff --git a/docs/casos-de-uso-rpg.md b/docs/casos-de-uso-rpg.md new file mode 100644 index 0000000..90a1faa --- /dev/null +++ b/docs/casos-de-uso-rpg.md @@ -0,0 +1,105 @@ +# Casos de Uso em Formato RPG + +## Introdução + +Imagine o reino de **Sharvus**, onde toda vila, fortaleza e guilda depende de mensagens rápidas para manter ordem, comércio e confiança com seus cidadãos. + +No centro desse reino existe a fortaleza da **Ordem de Sothis**, onde trabalham os guerreiros do suporte, os mensageiros do comercial e os guardiões do financeiro. + +Cada atendimento é uma missão. + +Cada cliente é um personagem importante. + +Cada tela do sistema é uma parte da jornada. + +## O Herói + +Nosso herói é **Aren**, um guerreiro de suporte da Ordem de Sothis. + +Sua missão não é derrotar monstros, mas resolver problemas antes que eles virem caos no reino. + +Para isso, ele usa o grande portal chamado **Omnichannel**. + +## Capítulo 1: O Portal de Entrada + +Aren chega ao salão principal e encontra o **Portal de Login**. + +Ali ele: + +- informa suas credenciais +- entra no sistema +- acessa o centro de comando + +Na prática, este é o caso de uso de autenticação visual do módulo `auth`. + +## Capítulo 2: O Mapa da Operação + +Ao entrar, Aren vê o grande mapa do reino: a **Home / Dashboard**. + +Nesse mapa ele consegue: + +- ver conversas ativas +- trocar entre mensagens e ligações +- buscar contatos +- iniciar novas missões + +Na prática, este é o caso de uso central do módulo `home`. + +## Capítulo 3: A Mensagem do Cidadão + +Uma cidadã chamada **Maria Souza** envia um pedido urgente por WhatsApp. + +Aren abre a conversa no módulo `chat` e pode: + +- ler o histórico +- responder rapidamente +- acompanhar novas mensagens +- transferir o caso para outra guilda, como Financeiro ou Comercial + +Na prática, este módulo representa o caso de uso de atendimento textual em tempo real. + +## Capítulo 4: O Chamado por Voz + +Nem toda missão pode ser resolvida por pergaminhos e mensagens. + +Às vezes, o cidadão precisa ouvir a voz de alguém da Ordem. + +Então Aren inicia uma ligação no módulo `call`, onde ele: + +- visualiza quem está na chamada +- acompanha o tempo da conversa +- usa controles de chamada +- encerra o contato quando a missão termina + +Na prática, este módulo representa o caso de uso de atendimento por voz. + +## Capítulo 5: A Missão Começa Aqui + +Antes de qualquer conversa, Aren pode abrir o módulo `attendance` para iniciar uma nova missão. + +Ele escolhe: + +- quem será atendido +- qual canal usar +- para qual área o caso deve ir + +Depois disso: + +- se for mensagem, ele segue para o chat +- se for voz, ele segue para a chamada + +Na prática, este módulo representa o caso de uso de abertura rápida de atendimento. + +## Moral da História + +O Omnichannel é a mesa de guerra de Sharvus. + +Ele permite que um único guerreiro: + +- veja o cenário +- escolha o canal +- converse com o cidadão +- transfira a missão +- resolva o problema com agilidade + +Em linguagem de produto, o sistema mostra como centralizar operação, comunicação e contexto em uma experiência única. diff --git a/docs/modulo-attendance.md b/docs/modulo-attendance.md new file mode 100644 index 0000000..8a75ce8 --- /dev/null +++ b/docs/modulo-attendance.md @@ -0,0 +1,35 @@ +# Módulo Attendance / Novo Atendimento + +## Objetivo + +Permitir que um operador inicie rapidamente um novo atendimento. + +## Tela principal + +- `NewAttendancePage.jsx` + +## Componentes e lógica + +- `RecentContactsList.jsx`: contatos recentes e seleção rápida +- `attendanceMocks.js`: canais, áreas e contatos mockados + +## Funcionalidades simuladas + +- buscar contato +- escolher um contato recente +- informar novo número +- escolher canal: + - WhatsApp + - SMS + - Ligação +- selecionar área opcional +- iniciar atendimento + +## Regras de navegação + +- se o canal escolhido for `WhatsApp` ou `SMS`, a navegação vai para `/chat` +- se o canal escolhido for `Ligação`, a navegação vai para `/call` + +## Papel na apresentação + +Esse módulo deixa muito claro o ganho operacional do produto: o atendente consegue iniciar fluxos rapidamente sem sair da mesma plataforma. diff --git a/docs/modulo-auth.md b/docs/modulo-auth.md new file mode 100644 index 0000000..2bfb41d --- /dev/null +++ b/docs/modulo-auth.md @@ -0,0 +1,33 @@ +# Módulo Auth / Login + +## Objetivo + +Apresentar uma entrada elegante e moderna para o produto, simulando autenticação corporativa sem backend real. + +## Tela principal + +- `LoginPage.jsx` + +## Componentes e lógica + +- `LoginForm.jsx`: formulário visual de acesso +- `useLogin.js`: controla o envio e redirecionamento +- `authService.js`: mock de autenticação + +## Fluxo + +1. O usuário informa usuário e senha +2. Clica em `Entrar` +3. O login mock é executado +4. O usuário é redirecionado para `/home` + +## Elementos importantes + +- branding Sothis +- botão `Entrar com Microsoft` +- link `Esqueci minha senha` +- visual de produto SaaS + +## Papel na apresentação + +A tela de login serve como entrada institucional do MVP e ajuda a criar percepção de maturidade do produto logo no primeiro contato. diff --git a/docs/modulo-call.md b/docs/modulo-call.md new file mode 100644 index 0000000..e236698 --- /dev/null +++ b/docs/modulo-call.md @@ -0,0 +1,32 @@ +# Módulo Call + +## Objetivo + +Simular uma ligação ativa em modo softphone, com visual de operação em tempo real. + +## Tela principal + +- `CallPage.jsx` + +## Componentes e lógica + +- `CallHeader.jsx`: contexto superior e retorno para home +- `CallControls.jsx`: controles visuais da chamada +- `useCallTimer.js`: timer automático +- `callMocks.js`: dados do cliente e controles + +## Funcionalidades simuladas + +- contagem automática do tempo de chamada +- exibição do cliente ativo +- avatar e fila de atendimento +- controles: + - mudo + - teclado + - alto-falante + - transferir + - encerrar chamada + +## Papel na apresentação + +Este módulo mostra que o produto não é apenas mensageria, mas também cobre voz dentro da mesma proposta omnichannel. diff --git a/docs/modulo-chat.md b/docs/modulo-chat.md new file mode 100644 index 0000000..067cbc0 --- /dev/null +++ b/docs/modulo-chat.md @@ -0,0 +1,37 @@ +# Módulo Chat + +## Objetivo + +Simular um atendimento em tempo real com aparência próxima de um produto de operação real. + +## Tela principal + +- `ChatPage.jsx` + +## Componentes e lógica + +- `ChatConversationList.jsx`: lista de contatos e canais +- `ChatWindow.jsx`: header, mensagens e input +- `ChatTransferPanel.jsx`: fluxo visual de transferência +- `useChat.js`: estado do chat, envio e resposta simulada +- `chatMocks.js`: contatos, áreas, atendentes e mensagens iniciais + +## Funcionalidades simuladas + +- alternar entre conversas +- enviar mensagem +- receber resposta mock automática +- rolagem automática +- transferência para outra área +- escolha de atendente de destino +- observação opcional na transferência + +## Canais representados + +- WhatsApp +- SMS +- Email + +## Papel na apresentação + +O módulo de chat demonstra como a plataforma concentra diferentes canais em uma única experiência operacional. diff --git a/docs/modulo-home.md b/docs/modulo-home.md new file mode 100644 index 0000000..e63ffde --- /dev/null +++ b/docs/modulo-home.md @@ -0,0 +1,40 @@ +# Módulo Home / Dashboard + +## Objetivo + +Ser o hub central do atendente após o login. + +## Tela principal + +- `HomePage.jsx` + +## Componentes e lógica + +- `HomeTopbar.jsx`: busca, toggle de abas, avatar e contexto superior +- `HomeSidebar.jsx`: navegação lateral e botão de novo atendimento +- `MessagesWorkspace.jsx`: lista de conversas, chat resumido e painel de ações +- `CallsWorkspace.jsx`: visão resumida das ligações +- `homeMocks.js`: dados mockados do dashboard + +## Funcionalidades simuladas + +- trocar entre `Mensagens` e `Ligações` +- buscar conversas mockadas +- abrir rota de chat +- abrir rota de call +- abrir rota de novo atendimento + +## Papel na apresentação + +É a tela que melhor comunica o conceito do produto: + +- múltiplos canais +- visão operacional única +- agilidade no atendimento +- sensação de plataforma pronta para uso + +## Pontos de UX + +- responsividade adaptada para mobile, tablet, desktop e desktop largo +- sidebar separada do conteúdo para leitura mais clara +- cards de contexto e indicadores operacionais diff --git a/docs/visao-geral.md b/docs/visao-geral.md new file mode 100644 index 0000000..7b5b82b --- /dev/null +++ b/docs/visao-geral.md @@ -0,0 +1,83 @@ +# Visão Geral do Projeto + +## Objetivo + +O projeto representa o frontend MVP do Omnichannel Sothis. + +O objetivo principal é demonstrar, de forma visual e convincente, como um atendente pode: + +- entrar na plataforma +- visualizar atendimentos e conversas +- iniciar um novo atendimento +- conversar com clientes em canais diferentes +- simular uma ligação ativa + +## Diretriz do MVP + +Este MVP prioriza percepção de produto acabado. + +Ou seja: + +- os fluxos parecem reais +- os dados são mockados +- a navegação existe +- a experiência é pensada para demonstração, validação e apresentação + +## Stack + +- React +- Vite +- JavaScript +- React Router +- CSS via estilos modernos em componentes + +## Estrutura + +O frontend foi organizado por módulos, seguindo uma abordagem feature-based: + +- `auth` +- `home` +- `chat` +- `call` +- `attendance` + +Cada módulo concentra suas páginas, componentes, hooks e services mockados. + +## Rotas atuais + +- `/login` +- `/home` +- `/chat` +- `/call` +- `/new-attendance` + +## Módulos + +### Auth + +Simula autenticação e entrada no sistema. + +### Home + +É a central do operador, com dashboard, conversas, atalhos e navegação fake para os fluxos principais. + +### Chat + +Simula atendimento em tempo real com mensagens, transferência e respostas automáticas mockadas. + +### Call + +Simula uma ligação ativa com timer automático e controles visuais de softphone. + +### Attendance + +Permite iniciar rapidamente um novo atendimento, escolhendo contato, canal e área. + +## Público da documentação + +Esta documentação serve para: + +- apresentação de produto +- onboarding técnico +- alinhamento entre frontend, backend e deploy +- futura evolução para integração real diff --git a/index.html b/index.html new file mode 100644 index 0000000..f2741f3 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Omnichannel Sothis + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..627c5eb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1719 @@ +{ + "name": "omnichannel-frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "omnichannel-frontend", + "version": "0.1.0", + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-router-dom": "^6.30.1" + }, + "devDependencies": { + "@vitejs/plugin-react": "^4.3.3", + "vite": "^5.4.10" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@remix-run/router": { + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.2.tgz", + "integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.9", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.9.tgz", + "integrity": "sha512-OZd0e2mU11ClX8+IdXe3r0dbqMEznRiT4TfbhYIbcRPZkqJ7Qwer8ij3GZAmLsRKa+II9V1v5czCkvmHH3XZBg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001780", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001780.tgz", + "integrity": "sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.321", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.321.tgz", + "integrity": "sha512-L2C7Q279W2D/J4PLZLk7sebOILDSWos7bMsMNN06rK482umHUrh/3lM8G7IlHFOYip2oAg5nha1rCMxr/rs6ZQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.30.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.3.tgz", + "integrity": "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.30.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.3.tgz", + "integrity": "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.2", + "react-router": "6.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..8edf594 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "omnichannel-frontend", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview --host 0.0.0.0 --port 3000" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-router-dom": "^6.30.1" + }, + "devDependencies": { + "@vitejs/plugin-react": "^4.3.3", + "vite": "^5.4.10" + } +} diff --git a/src/main.jsx b/src/main.jsx new file mode 100644 index 0000000..1135be6 --- /dev/null +++ b/src/main.jsx @@ -0,0 +1,11 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import { RouterProvider } from 'react-router-dom'; +import { router } from './routes/router'; +import './shared/styles/global.css'; + +ReactDOM.createRoot(document.getElementById('root')).render( + + + , +); diff --git a/src/modules/attendance/components/RecentContactsList.jsx b/src/modules/attendance/components/RecentContactsList.jsx new file mode 100644 index 0000000..9d8bdf9 --- /dev/null +++ b/src/modules/attendance/components/RecentContactsList.jsx @@ -0,0 +1,80 @@ +export function RecentContactsList({ + contacts, + activeContactId, + onSelectContact, + selectedChannel, +}) { + return ( + + ); +} diff --git a/src/modules/attendance/pages/NewAttendancePage.jsx b/src/modules/attendance/pages/NewAttendancePage.jsx new file mode 100644 index 0000000..d92b554 --- /dev/null +++ b/src/modules/attendance/pages/NewAttendancePage.jsx @@ -0,0 +1,340 @@ +import { useMemo, useState } from 'react'; +import { Link, useNavigate } from 'react-router-dom'; +import { BrandMark } from '../../../shared/components/BrandMark'; +import { useViewport } from '../../../shared/hooks/useViewport'; +import { RecentContactsList } from '../components/RecentContactsList'; +import { + attendanceAreas, + attendanceChannels, + recentContacts, +} from '../services/attendanceMocks'; + +export function NewAttendancePage() { + const navigate = useNavigate(); + const { isWideDesktop, isDesktop, isTablet, isMobile } = useViewport(); + const [searchValue, setSearchValue] = useState(''); + const [selectedChannelId, setSelectedChannelId] = useState('whatsapp'); + const [selectedArea, setSelectedArea] = useState(''); + const [selectedContactId, setSelectedContactId] = useState(recentContacts[0].id); + const [customNumber, setCustomNumber] = useState(''); + + const search = searchValue.trim().toLowerCase(); + const filteredContacts = useMemo(() => { + if (!search) { + return recentContacts; + } + + return recentContacts.filter((contact) => { + const haystack = `${contact.name} ${contact.phone} ${contact.channel}`.toLowerCase(); + return haystack.includes(search); + }); + }, [search]); + + const selectedContact = + filteredContacts.find((contact) => contact.id === selectedContactId) || + recentContacts.find((contact) => contact.id === selectedContactId) || + recentContacts[0]; + + const selectedChannel = + attendanceChannels.find((channel) => channel.id === selectedChannelId) || attendanceChannels[0]; + + const gridTemplateColumns = isMobile + ? '1fr' + : isWideDesktop + ? 'minmax(300px, 360px) minmax(0, 1fr)' + : isDesktop || isTablet + ? 'minmax(280px, 340px) minmax(0, 1fr)' + : '1fr'; + + function handleStartAttendance() { + navigate(selectedChannel.route); + } + + return ( +
+
+
+ +
+ Criacao rapida de atendimento +
+ + Voltar para home + +
+ +
+ + +
+
+ Novo atendimento +

+ Escolha o contato, o canal e a area opcional antes de iniciar. O fluxo e mockado + e leva voce direto para chat ou ligacao. +

+
+ +
+ setSearchValue(event.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', + }} + /> + +
+ +
+ {attendanceChannels.map((channel) => { + const isActive = channel.id === selectedChannelId; + + return ( + + ); + })} +
+ +
+ + + +
+ +
+
+ + Resumo do fluxo + + {selectedContact.name} + + Canal escolhido: {selectedChannel.label} + + + Numero: {customNumber || selectedContact.phone} + + + Area: {selectedArea || 'Definir depois'} + +
+ +
+ Proxima rota + + {selectedChannel.route === '/call' + ? 'Ao iniciar, voce vai para a tela de ligacao.' + : 'Ao iniciar, voce vai para a tela de chat.'} + + +
+
+
+
+
+
+ ); +} diff --git a/src/modules/attendance/services/attendanceMocks.js b/src/modules/attendance/services/attendanceMocks.js new file mode 100644 index 0000000..b589d7f --- /dev/null +++ b/src/modules/attendance/services/attendanceMocks.js @@ -0,0 +1,38 @@ +export const attendanceChannels = [ + { id: 'whatsapp', label: 'WhatsApp', route: '/chat', accent: '#2bb741' }, + { id: 'sms', label: 'SMS', route: '/chat', accent: '#00a4b7' }, + { id: 'call', label: 'Ligacao', route: '/call', accent: '#e5a22a' }, +]; + +export const attendanceAreas = ['Suporte', 'Financeiro', 'Comercial']; + +export const recentContacts = [ + { + 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', + }, +]; diff --git a/src/modules/auth/components/LoginForm.jsx b/src/modules/auth/components/LoginForm.jsx new file mode 100644 index 0000000..0d2ca7f --- /dev/null +++ b/src/modules/auth/components/LoginForm.jsx @@ -0,0 +1,97 @@ +import { useState } from 'react'; +import { useLogin } from '../hooks/useLogin'; + +const fieldStyle = { + width: '100%', + border: '1px solid var(--color-border)', + borderRadius: '16px', + padding: '0.95rem 1rem', + background: '#fff', + color: 'var(--color-text)', + outline: 'none', +}; + +const primaryButtonStyle = { + 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)', +}; + +const secondaryButtonStyle = { + 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, +}; + +const initialFormData = { + username: '', + password: '', +}; + +export function LoginForm() { + const [formData, setFormData] = useState(initialFormData); + const { login, isSubmitting } = useLogin(); + + async function handleSubmit(event) { + event.preventDefault(); + await login(formData); + } + + return ( +
+ + + + + + + + + + Esqueci minha senha + +
+ ); +} diff --git a/src/modules/auth/hooks/useLogin.js b/src/modules/auth/hooks/useLogin.js new file mode 100644 index 0000000..cddc6da --- /dev/null +++ b/src/modules/auth/hooks/useLogin.js @@ -0,0 +1,24 @@ +import { useState } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { mockLogin } from '../services/authService'; + +export function useLogin() { + const navigate = useNavigate(); + const [isSubmitting, setIsSubmitting] = useState(false); + + async function login() { + setIsSubmitting(true); + + try { + await mockLogin(); + navigate('/home'); + } finally { + setIsSubmitting(false); + } + } + + return { + isSubmitting, + login, + }; +} diff --git a/src/modules/auth/pages/LoginPage.jsx b/src/modules/auth/pages/LoginPage.jsx new file mode 100644 index 0000000..1cea1c5 --- /dev/null +++ b/src/modules/auth/pages/LoginPage.jsx @@ -0,0 +1,161 @@ +import { LoginForm } from '../components/LoginForm'; +import { BrandMark } from '../../../shared/components/BrandMark'; + +export function LoginPage() { + return ( +
+
+
+
+ +
+
+ + Login seguro + +
+

Entrar na plataforma

+

+ Use seu usuario corporativo para acessar o MVP. A autenticacao e mockada + nesta etapa e leva voce diretamente para a dashboard principal. +

+
+
+ + +
+
+
+ ); +} diff --git a/src/modules/auth/services/authService.js b/src/modules/auth/services/authService.js new file mode 100644 index 0000000..452383a --- /dev/null +++ b/src/modules/auth/services/authService.js @@ -0,0 +1,11 @@ +const networkDelay = 450; + +export async function mockLogin() { + await new Promise((resolve) => window.setTimeout(resolve, networkDelay)); + + return { + id: 'agent-001', + name: 'Ana Camolesi', + email: 'ana.camolesi@sothis.local', + }; +} diff --git a/src/modules/call/components/CallControls.jsx b/src/modules/call/components/CallControls.jsx new file mode 100644 index 0000000..8f7aeb8 --- /dev/null +++ b/src/modules/call/components/CallControls.jsx @@ -0,0 +1,114 @@ +function ControlIcon({ id }) { + const commonProps = { + width: 22, + height: 22, + viewBox: '0 0 24 24', + fill: 'none', + stroke: 'currentColor', + strokeWidth: 1.8, + strokeLinecap: 'round', + strokeLinejoin: 'round', + }; + + if (id === 'mute') { + return ( + + + + + + + + + ); + } + + if (id === 'keypad') { + return ( + + + + + + + + + + + + ); + } + + if (id === 'speaker') { + return ( + + + + + + ); + } + + return ( + + + + + + + + + ); +} + +export function CallControls({ controls, isMobile = false }) { + return ( +
+ {controls.map((control) => ( + + ))} +
+ ); +} diff --git a/src/modules/call/components/CallHeader.jsx b/src/modules/call/components/CallHeader.jsx new file mode 100644 index 0000000..4c5b9c3 --- /dev/null +++ b/src/modules/call/components/CallHeader.jsx @@ -0,0 +1,56 @@ +import { Link } from 'react-router-dom'; + +export function CallHeader({ isMobile = false }) { + return ( +
+
+ Ligacao ativa +
+ +
+ Softphone MVP Omnichannel +
+ + + Voltar para home + +
+ ); +} diff --git a/src/modules/call/hooks/useCallTimer.js b/src/modules/call/hooks/useCallTimer.js new file mode 100644 index 0000000..8838b61 --- /dev/null +++ b/src/modules/call/hooks/useCallTimer.js @@ -0,0 +1,26 @@ +import { useEffect, useState } from 'react'; + +function formatTime(totalSeconds) { + const hours = String(Math.floor(totalSeconds / 3600)).padStart(2, '0'); + const minutes = String(Math.floor((totalSeconds % 3600) / 60)).padStart(2, '0'); + const seconds = String(totalSeconds % 60).padStart(2, '0'); + + return `${hours}:${minutes}:${seconds}`; +} + +export function useCallTimer(initialSeconds = 0) { + const [seconds, setSeconds] = useState(initialSeconds); + + useEffect(() => { + const intervalId = window.setInterval(() => { + setSeconds((current) => current + 1); + }, 1000); + + return () => window.clearInterval(intervalId); + }, []); + + return { + seconds, + formattedTime: formatTime(seconds), + }; +} diff --git a/src/modules/call/pages/CallPage.jsx b/src/modules/call/pages/CallPage.jsx new file mode 100644 index 0000000..139074f --- /dev/null +++ b/src/modules/call/pages/CallPage.jsx @@ -0,0 +1,222 @@ +import { CallControls } from '../components/CallControls'; +import { CallHeader } from '../components/CallHeader'; +import { useCallTimer } from '../hooks/useCallTimer'; +import { activeCall, callControls } from '../services/callMocks'; +import { useViewport } from '../../../shared/hooks/useViewport'; + +export function CallPage() { + const { isMobile } = useViewport(); + const { formattedTime } = useCallTimer(312); + + return ( +
+
+ + +
+ + +
+
+ + Chamada em andamento + + + {formattedTime} + +

+ 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. +

+
+ + + +
+
+ Qualidade da chamada: Estavel +
+
+ Gravacao mock: Habilitada +
+ +
+
+
+
+
+ ); +} diff --git a/src/modules/call/services/callMocks.js b/src/modules/call/services/callMocks.js new file mode 100644 index 0000000..bdf1efc --- /dev/null +++ b/src/modules/call/services/callMocks.js @@ -0,0 +1,15 @@ +export const activeCall = { + id: 'call-1', + customerName: 'Maria Souza', + role: 'Cliente VIP • Ligação via PABX', + number: '+55 11 99888-7766', + queue: 'Fila Suporte Premium', + initials: 'MS', +}; + +export const callControls = [ + { 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' }, +]; diff --git a/src/modules/chat/components/ChatConversationList.jsx b/src/modules/chat/components/ChatConversationList.jsx new file mode 100644 index 0000000..feda181 --- /dev/null +++ b/src/modules/chat/components/ChatConversationList.jsx @@ -0,0 +1,108 @@ +function ChannelBadge({ channel }) { + const colors = { + WhatsApp: '#2bb741', + Email: '#e5a22a', + SMS: '#00a4b7', + }; + + return ( + + {channel} + + ); +} + +export function ChatConversationList({ + contacts, + activeContactId, + onSelectContact, + isMobile = false, +}) { + return ( + + ); +} diff --git a/src/modules/chat/components/ChatTransferPanel.jsx b/src/modules/chat/components/ChatTransferPanel.jsx new file mode 100644 index 0000000..2470ada --- /dev/null +++ b/src/modules/chat/components/ChatTransferPanel.jsx @@ -0,0 +1,112 @@ +export function ChatTransferPanel({ + isOpen, + transferArea, + setTransferArea, + transferAreas, + attendants, + transferAttendant, + setTransferAttendant, + transferNote, + setTransferNote, + onSubmit, + onClose, +}) { + if (!isOpen) { + return null; + } + + const fieldStyle = { + width: '100%', + border: '1px solid var(--color-border)', + borderRadius: '16px', + padding: '0.9rem 1rem', + background: '#fff', + outline: 'none', + }; + + return ( +