diff --git a/assets/index-4sK4E3Wk.css b/assets/index-4sK4E3Wk.css new file mode 100644 index 0000000..7704ff6 --- /dev/null +++ b/assets/index-4sK4E3Wk.css @@ -0,0 +1 @@ +#root{max-width:1280px;margin:0 auto;padding:2rem;text-align:center}.logo{height:6em;padding:1.5em;will-change:filter;transition:filter .3s}.logo:hover{filter:drop-shadow(0 0 2em #646cffaa)}.logo.react:hover{filter:drop-shadow(0 0 2em #61dafbaa)}@keyframes logo-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (prefers-reduced-motion: no-preference){a:nth-of-type(2) .logo{animation:logo-spin infinite 20s linear}}.card{padding:2em}.read-the-docs{color:#888}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}} diff --git a/assets/index-_x5MIA7j.js b/assets/index-_x5MIA7j.js new file mode 100644 index 0000000..98f2620 --- /dev/null +++ b/assets/index-_x5MIA7j.js @@ -0,0 +1,44 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const o of l)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(l){const o={};return l.integrity&&(o.integrity=l.integrity),l.referrerPolicy&&(o.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?o.credentials="include":l.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(l){if(l.ep)return;l.ep=!0;const o=n(l);fetch(l.href,o)}})();function ml(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ks={exports:{}},hl={},xs={exports:{}},j={};/** + * @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 ir=Symbol.for("react.element"),hf=Symbol.for("react.portal"),vf=Symbol.for("react.fragment"),yf=Symbol.for("react.strict_mode"),gf=Symbol.for("react.profiler"),wf=Symbol.for("react.provider"),Sf=Symbol.for("react.context"),kf=Symbol.for("react.forward_ref"),xf=Symbol.for("react.suspense"),Ef=Symbol.for("react.memo"),Cf=Symbol.for("react.lazy"),iu=Symbol.iterator;function _f(e){return e===null||typeof e!="object"?null:(e=iu&&e[iu]||e["@@iterator"],typeof e=="function"?e:null)}var Es={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Cs=Object.assign,_s={};function mn(e,t,n){this.props=e,this.context=t,this.refs=_s,this.updater=n||Es}mn.prototype.isReactComponent={};mn.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")};mn.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Ns(){}Ns.prototype=mn.prototype;function ii(e,t,n){this.props=e,this.context=t,this.refs=_s,this.updater=n||Es}var ui=ii.prototype=new Ns;ui.constructor=ii;Cs(ui,mn.prototype);ui.isPureReactComponent=!0;var uu=Array.isArray,Ts=Object.prototype.hasOwnProperty,si={current:null},Ps={key:!0,ref:!0,__self:!0,__source:!0};function Rs(e,t,n){var r,l={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)Ts.call(t,r)&&!Ps.hasOwnProperty(r)&&(l[r]=t[r]);var u=arguments.length-2;if(u===1)l.children=n;else if(1>>1,J=N[K];if(0>>1;Kl(Ol,z))xtl(dr,Ol)?(N[K]=dr,N[xt]=z,K=xt):(N[K]=Ol,N[kt]=z,K=kt);else if(xtl(dr,z))N[K]=dr,N[xt]=z,K=xt;else break e}}return R}function l(N,R){var z=N.sortIndex-R.sortIndex;return z!==0?z:N.id-R.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var i=Date,u=i.now();e.unstable_now=function(){return i.now()-u}}var s=[],a=[],h=1,m=null,p=3,w=!1,S=!1,g=!1,L=typeof setTimeout=="function"?setTimeout:null,f=typeof clearTimeout=="function"?clearTimeout:null,c=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function d(N){for(var R=n(a);R!==null;){if(R.callback===null)r(a);else if(R.startTime<=N)r(a),R.sortIndex=R.expirationTime,t(s,R);else break;R=n(a)}}function v(N){if(g=!1,d(N),!S)if(n(s)!==null)S=!0,zl(x);else{var R=n(a);R!==null&&jl(v,R.startTime-N)}}function x(N,R){S=!1,g&&(g=!1,f(P),P=-1),w=!0;var z=p;try{for(d(R),m=n(s);m!==null&&(!(m.expirationTime>R)||N&&!Re());){var K=m.callback;if(typeof K=="function"){m.callback=null,p=m.priorityLevel;var J=K(m.expirationTime<=R);R=e.unstable_now(),typeof J=="function"?m.callback=J:m===n(s)&&r(s),d(R)}else r(s);m=n(s)}if(m!==null)var fr=!0;else{var kt=n(a);kt!==null&&jl(v,kt.startTime-R),fr=!1}return fr}finally{m=null,p=z,w=!1}}var _=!1,E=null,P=-1,Q=5,O=-1;function Re(){return!(e.unstable_now()-ON||125K?(N.sortIndex=z,t(a,N),n(s)===null&&N===n(a)&&(g?(f(P),P=-1):g=!0,jl(v,z-K))):(N.sortIndex=J,t(s,N),S||w||(S=!0,zl(x))),N},e.unstable_shouldYield=Re,e.unstable_wrapCallback=function(N){var R=p;return function(){var z=p;p=R;try{return N.apply(this,arguments)}finally{p=z}}}})(Os);js.exports=Os;var Mf=js.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 Ds=T,Se=Mf;function y(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),so=Object.prototype.hasOwnProperty,Ff=/^[: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]*$/,au={},cu={};function $f(e){return so.call(cu,e)?!0:so.call(au,e)?!1:Ff.test(e)?cu[e]=!0:(au[e]=!0,!1)}function Uf(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Bf(e,t,n,r){if(t===null||typeof t>"u"||Uf(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function fe(e,t,n,r,l,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var re={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){re[e]=new fe(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];re[t]=new fe(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){re[e]=new fe(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){re[e]=new fe(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){re[e]=new fe(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){re[e]=new fe(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){re[e]=new fe(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){re[e]=new fe(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){re[e]=new fe(e,5,!1,e.toLowerCase(),null,!1,!1)});var ci=/[\-:]([a-z])/g;function fi(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(ci,fi);re[t]=new fe(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(ci,fi);re[t]=new fe(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(ci,fi);re[t]=new fe(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){re[e]=new fe(e,1,!1,e.toLowerCase(),null,!1,!1)});re.xlinkHref=new fe("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){re[e]=new fe(e,1,!1,e.toLowerCase(),null,!0,!0)});function di(e,t,n,r){var l=re.hasOwnProperty(t)?re[t]:null;(l!==null?l.type!==0:r||!(2u||l[i]!==o[u]){var s=` +`+l[i].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=i&&0<=u);break}}}finally{Ml=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Pn(e):""}function Af(e){switch(e.tag){case 5:return Pn(e.type);case 16:return Pn("Lazy");case 13:return Pn("Suspense");case 19:return Pn("SuspenseList");case 0:case 2:case 15:return e=Fl(e.type,!1),e;case 11:return e=Fl(e.type.render,!1),e;case 1:return e=Fl(e.type,!0),e;default:return""}}function po(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 Wt:return"Fragment";case At:return"Portal";case ao:return"Profiler";case pi:return"StrictMode";case co:return"Suspense";case fo:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Fs:return(e.displayName||"Context")+".Consumer";case Ms:return(e._context.displayName||"Context")+".Provider";case mi:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case hi:return t=e.displayName||null,t!==null?t:po(e.type)||"Memo";case et:t=e._payload,e=e._init;try{return po(e(t))}catch{}}return null}function Wf(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 po(t);case 8:return t===pi?"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 vt(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Us(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Hf(e){var t=Us(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function hr(e){e._valueTracker||(e._valueTracker=Hf(e))}function Bs(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Us(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Vr(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 mo(e,t){var n=t.checked;return W({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function du(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=vt(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function As(e,t){t=t.checked,t!=null&&di(e,"checked",t,!1)}function ho(e,t){As(e,t);var n=vt(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?vo(e,t.type,n):t.hasOwnProperty("defaultValue")&&vo(e,t.type,vt(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function pu(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function vo(e,t,n){(t!=="number"||Vr(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Rn=Array.isArray;function bt(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=vr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Vn(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Dn={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},Vf=["Webkit","ms","Moz","O"];Object.keys(Dn).forEach(function(e){Vf.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Dn[t]=Dn[e]})});function Qs(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Dn.hasOwnProperty(e)&&Dn[e]?(""+t).trim():t+"px"}function Ks(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=Qs(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var Qf=W({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 wo(e,t){if(t){if(Qf[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(y(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(y(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(y(61))}if(t.style!=null&&typeof t.style!="object")throw Error(y(62))}}function So(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ko=null;function vi(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var xo=null,en=null,tn=null;function vu(e){if(e=ar(e)){if(typeof xo!="function")throw Error(y(280));var t=e.stateNode;t&&(t=Sl(t),xo(e.stateNode,e.type,t))}}function Ys(e){en?tn?tn.push(e):tn=[e]:en=e}function Xs(){if(en){var e=en,t=tn;if(tn=en=null,vu(e),t)for(e=0;e>>=0,e===0?32:31-(nd(e)/rd|0)|0}var yr=64,gr=4194304;function Ln(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 Xr(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var u=i&~l;u!==0?r=Ln(u):(o&=i,o!==0&&(r=Ln(o)))}else i=n&~l,i!==0?r=Ln(i):o!==0&&(r=Ln(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&l)&&(l=r&-r,o=t&-t,l>=o||l===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function ur(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-De(t),e[t]=n}function ud(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Mn),_u=" ",Nu=!1;function ma(e,t){switch(e){case"keyup":return Id.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ha(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ht=!1;function Fd(e,t){switch(e){case"compositionend":return ha(t);case"keypress":return t.which!==32?null:(Nu=!0,_u);case"textInput":return e=t.data,e===_u&&Nu?null:e;default:return null}}function $d(e,t){if(Ht)return e==="compositionend"||!Ci&&ma(e,t)?(e=da(),Ir=ki=it=null,Ht=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Lu(n)}}function wa(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?wa(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Sa(){for(var e=window,t=Vr();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Vr(e.document)}return t}function _i(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 Yd(e){var t=Sa(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&wa(n.ownerDocument.documentElement,n)){if(r!==null&&_i(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=zu(n,o);var i=zu(n,r);l&&i&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Vt=null,Po=null,$n=null,Ro=!1;function ju(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ro||Vt==null||Vt!==Vr(r)||(r=Vt,"selectionStart"in r&&_i(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),$n&&Zn($n,r)||($n=r,r=Jr(Po,"onSelect"),0Yt||(e.current=Io[Yt],Io[Yt]=null,Yt--)}function M(e,t){Yt++,Io[Yt]=e.current,e.current=t}var yt={},ue=wt(yt),me=wt(!1),jt=yt;function sn(e,t){var n=e.type.contextTypes;if(!n)return yt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function he(e){return e=e.childContextTypes,e!=null}function br(){$(me),$(ue)}function Uu(e,t,n){if(ue.current!==yt)throw Error(y(168));M(ue,t),M(me,n)}function Ra(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(y(108,Wf(e)||"Unknown",l));return W({},n,r)}function el(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||yt,jt=ue.current,M(ue,e),M(me,me.current),!0}function Bu(e,t,n){var r=e.stateNode;if(!r)throw Error(y(169));n?(e=Ra(e,t,jt),r.__reactInternalMemoizedMergedChildContext=e,$(me),$(ue),M(ue,e)):$(me),M(me,n)}var He=null,kl=!1,Jl=!1;function La(e){He===null?He=[e]:He.push(e)}function op(e){kl=!0,La(e)}function St(){if(!Jl&&He!==null){Jl=!0;var e=0,t=I;try{var n=He;for(I=1;e>=i,l-=i,Ve=1<<32-De(t)+l|n<P?(Q=E,E=null):Q=E.sibling;var O=p(f,E,d[P],v);if(O===null){E===null&&(E=Q);break}e&&E&&O.alternate===null&&t(f,E),c=o(O,c,P),_===null?x=O:_.sibling=O,_=O,E=Q}if(P===d.length)return n(f,E),U&&Et(f,P),x;if(E===null){for(;PP?(Q=E,E=null):Q=E.sibling;var Re=p(f,E,O.value,v);if(Re===null){E===null&&(E=Q);break}e&&E&&Re.alternate===null&&t(f,E),c=o(Re,c,P),_===null?x=Re:_.sibling=Re,_=Re,E=Q}if(O.done)return n(f,E),U&&Et(f,P),x;if(E===null){for(;!O.done;P++,O=d.next())O=m(f,O.value,v),O!==null&&(c=o(O,c,P),_===null?x=O:_.sibling=O,_=O);return U&&Et(f,P),x}for(E=r(f,E);!O.done;P++,O=d.next())O=w(E,f,P,O.value,v),O!==null&&(e&&O.alternate!==null&&E.delete(O.key===null?P:O.key),c=o(O,c,P),_===null?x=O:_.sibling=O,_=O);return e&&E.forEach(function(yn){return t(f,yn)}),U&&Et(f,P),x}function L(f,c,d,v){if(typeof d=="object"&&d!==null&&d.type===Wt&&d.key===null&&(d=d.props.children),typeof d=="object"&&d!==null){switch(d.$$typeof){case mr:e:{for(var x=d.key,_=c;_!==null;){if(_.key===x){if(x=d.type,x===Wt){if(_.tag===7){n(f,_.sibling),c=l(_,d.props.children),c.return=f,f=c;break e}}else if(_.elementType===x||typeof x=="object"&&x!==null&&x.$$typeof===et&&Yu(x)===_.type){n(f,_.sibling),c=l(_,d.props),c.ref=Cn(f,_,d),c.return=f,f=c;break e}n(f,_);break}else t(f,_);_=_.sibling}d.type===Wt?(c=zt(d.props.children,f.mode,v,d.key),c.return=f,f=c):(v=Hr(d.type,d.key,d.props,null,f.mode,v),v.ref=Cn(f,c,d),v.return=f,f=v)}return i(f);case At:e:{for(_=d.key;c!==null;){if(c.key===_)if(c.tag===4&&c.stateNode.containerInfo===d.containerInfo&&c.stateNode.implementation===d.implementation){n(f,c.sibling),c=l(c,d.children||[]),c.return=f,f=c;break e}else{n(f,c);break}else t(f,c);c=c.sibling}c=oo(d,f.mode,v),c.return=f,f=c}return i(f);case et:return _=d._init,L(f,c,_(d._payload),v)}if(Rn(d))return S(f,c,d,v);if(wn(d))return g(f,c,d,v);_r(f,d)}return typeof d=="string"&&d!==""||typeof d=="number"?(d=""+d,c!==null&&c.tag===6?(n(f,c.sibling),c=l(c,d),c.return=f,f=c):(n(f,c),c=lo(d,f.mode,v),c.return=f,f=c),i(f)):n(f,c)}return L}var cn=$a(!0),Ua=$a(!1),cr={},Ae=wt(cr),er=wt(cr),tr=wt(cr);function Rt(e){if(e===cr)throw Error(y(174));return e}function Di(e,t){switch(M(tr,t),M(er,e),M(Ae,cr),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:go(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=go(t,e)}$(Ae),M(Ae,t)}function fn(){$(Ae),$(er),$(tr)}function Ba(e){Rt(tr.current);var t=Rt(Ae.current),n=go(t,e.type);t!==n&&(M(er,e),M(Ae,n))}function Ii(e){er.current===e&&($(Ae),$(er))}var B=wt(0);function il(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ql=[];function Mi(){for(var e=0;en?n:4,e(!0);var r=bl.transition;bl.transition={};try{e(!1),t()}finally{I=n,bl.transition=r}}function nc(){return Pe().memoizedState}function ap(e,t,n){var r=mt(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},rc(e))lc(t,n);else if(n=Da(e,t,n,r),n!==null){var l=ae();Ie(n,e,r,l),oc(n,t,r)}}function cp(e,t,n){var r=mt(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(rc(e))lc(t,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,u=o(i,n);if(l.hasEagerState=!0,l.eagerState=u,Me(u,i)){var s=t.interleaved;s===null?(l.next=l,ji(t)):(l.next=s.next,s.next=l),t.interleaved=l;return}}catch{}finally{}n=Da(e,t,l,r),n!==null&&(l=ae(),Ie(n,e,r,l),oc(n,t,r))}}function rc(e){var t=e.alternate;return e===A||t!==null&&t===A}function lc(e,t){Un=ul=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function oc(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,gi(e,n)}}var sl={readContext:Te,useCallback:le,useContext:le,useEffect:le,useImperativeHandle:le,useInsertionEffect:le,useLayoutEffect:le,useMemo:le,useReducer:le,useRef:le,useState:le,useDebugValue:le,useDeferredValue:le,useTransition:le,useMutableSource:le,useSyncExternalStore:le,useId:le,unstable_isNewReconciler:!1},fp={readContext:Te,useCallback:function(e,t){return $e().memoizedState=[e,t===void 0?null:t],e},useContext:Te,useEffect:Gu,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Ur(4194308,4,Ja.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Ur(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ur(4,2,e,t)},useMemo:function(e,t){var n=$e();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=$e();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=ap.bind(null,A,e),[r.memoizedState,e]},useRef:function(e){var t=$e();return e={current:e},t.memoizedState=e},useState:Xu,useDebugValue:Ai,useDeferredValue:function(e){return $e().memoizedState=e},useTransition:function(){var e=Xu(!1),t=e[0];return e=sp.bind(null,e[1]),$e().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=A,l=$e();if(U){if(n===void 0)throw Error(y(407));n=n()}else{if(n=t(),b===null)throw Error(y(349));Dt&30||Ha(r,t,n)}l.memoizedState=n;var o={value:n,getSnapshot:t};return l.queue=o,Gu(Qa.bind(null,r,o,e),[e]),r.flags|=2048,lr(9,Va.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=$e(),t=b.identifierPrefix;if(U){var n=Qe,r=Ve;n=(r&~(1<<32-De(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=nr++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[Ue]=t,e[bn]=r,mc(e,t,!1,!1),t.stateNode=e;e:{switch(i=So(n,r),n){case"dialog":F("cancel",e),F("close",e),l=r;break;case"iframe":case"object":case"embed":F("load",e),l=r;break;case"video":case"audio":for(l=0;lpn&&(t.flags|=128,r=!0,_n(o,!1),t.lanes=4194304)}else{if(!r)if(e=il(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),_n(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!U)return oe(t),null}else 2*Y()-o.renderingStartTime>pn&&n!==1073741824&&(t.flags|=128,r=!0,_n(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=Y(),t.sibling=null,n=B.current,M(B,r?n&1|2:n&1),t):(oe(t),null);case 22:case 23:return Yi(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?ye&1073741824&&(oe(t),t.subtreeFlags&6&&(t.flags|=8192)):oe(t),null;case 24:return null;case 25:return null}throw Error(y(156,t.tag))}function wp(e,t){switch(Ti(t),t.tag){case 1:return he(t.type)&&br(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return fn(),$(me),$(ue),Mi(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Ii(t),null;case 13:if($(B),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(y(340));an()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return $(B),null;case 4:return fn(),null;case 10:return zi(t.type._context),null;case 22:case 23:return Yi(),null;case 24:return null;default:return null}}var Tr=!1,ie=!1,Sp=typeof WeakSet=="function"?WeakSet:Set,C=null;function Jt(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){H(e,t,r)}else n.current=null}function Yo(e,t,n){try{n()}catch(r){H(e,t,r)}}var ls=!1;function kp(e,t){if(Lo=Gr,e=Sa(),_i(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,u=-1,s=-1,a=0,h=0,m=e,p=null;t:for(;;){for(var w;m!==n||l!==0&&m.nodeType!==3||(u=i+l),m!==o||r!==0&&m.nodeType!==3||(s=i+r),m.nodeType===3&&(i+=m.nodeValue.length),(w=m.firstChild)!==null;)p=m,m=w;for(;;){if(m===e)break t;if(p===n&&++a===l&&(u=i),p===o&&++h===r&&(s=i),(w=m.nextSibling)!==null)break;m=p,p=m.parentNode}m=w}n=u===-1||s===-1?null:{start:u,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(zo={focusedElem:e,selectionRange:n},Gr=!1,C=t;C!==null;)if(t=C,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,C=e;else for(;C!==null;){t=C;try{var S=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(S!==null){var g=S.memoizedProps,L=S.memoizedState,f=t.stateNode,c=f.getSnapshotBeforeUpdate(t.elementType===t.type?g:ze(t.type,g),L);f.__reactInternalSnapshotBeforeUpdate=c}break;case 3:var d=t.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(y(163))}}catch(v){H(t,t.return,v)}if(e=t.sibling,e!==null){e.return=t.return,C=e;break}C=t.return}return S=ls,ls=!1,S}function Bn(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&Yo(t,n,o)}l=l.next}while(l!==r)}}function Cl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Xo(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function yc(e){var t=e.alternate;t!==null&&(e.alternate=null,yc(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ue],delete t[bn],delete t[Do],delete t[rp],delete t[lp])),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 gc(e){return e.tag===5||e.tag===3||e.tag===4}function os(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||gc(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 Go(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=qr));else if(r!==4&&(e=e.child,e!==null))for(Go(e,t,n),e=e.sibling;e!==null;)Go(e,t,n),e=e.sibling}function Zo(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Zo(e,t,n),e=e.sibling;e!==null;)Zo(e,t,n),e=e.sibling}var te=null,je=!1;function be(e,t,n){for(n=n.child;n!==null;)wc(e,t,n),n=n.sibling}function wc(e,t,n){if(Be&&typeof Be.onCommitFiberUnmount=="function")try{Be.onCommitFiberUnmount(vl,n)}catch{}switch(n.tag){case 5:ie||Jt(n,t);case 6:var r=te,l=je;te=null,be(e,t,n),te=r,je=l,te!==null&&(je?(e=te,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):te.removeChild(n.stateNode));break;case 18:te!==null&&(je?(e=te,n=n.stateNode,e.nodeType===8?Zl(e.parentNode,n):e.nodeType===1&&Zl(e,n),Xn(e)):Zl(te,n.stateNode));break;case 4:r=te,l=je,te=n.stateNode.containerInfo,je=!0,be(e,t,n),te=r,je=l;break;case 0:case 11:case 14:case 15:if(!ie&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&Yo(n,t,i),l=l.next}while(l!==r)}be(e,t,n);break;case 1:if(!ie&&(Jt(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(u){H(n,t,u)}be(e,t,n);break;case 21:be(e,t,n);break;case 22:n.mode&1?(ie=(r=ie)||n.memoizedState!==null,be(e,t,n),ie=r):be(e,t,n);break;default:be(e,t,n)}}function is(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Sp),t.forEach(function(r){var l=Lp.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function Le(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=i),r&=~o}if(r=l,r=Y()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Ep(r/1960))-r,10e?16:e,ut===null)var r=!1;else{if(e=ut,ut=null,fl=0,D&6)throw Error(y(331));var l=D;for(D|=4,C=e.current;C!==null;){var o=C,i=o.child;if(C.flags&16){var u=o.deletions;if(u!==null){for(var s=0;sY()-Qi?Lt(e,0):Vi|=n),ve(e,t)}function Tc(e,t){t===0&&(e.mode&1?(t=gr,gr<<=1,!(gr&130023424)&&(gr=4194304)):t=1);var n=ae();e=Ge(e,t),e!==null&&(ur(e,t,n),ve(e,n))}function Rp(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Tc(e,n)}function Lp(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(y(314))}r!==null&&r.delete(t),Tc(e,n)}var Pc;Pc=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||me.current)pe=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return pe=!1,yp(e,t,n);pe=!!(e.flags&131072)}else pe=!1,U&&t.flags&1048576&&za(t,nl,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Br(e,t),e=t.pendingProps;var l=sn(t,ue.current);rn(t,n),l=$i(null,t,r,e,l,n);var o=Ui();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,he(r)?(o=!0,el(t)):o=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,Oi(t),l.updater=xl,t.stateNode=l,l._reactInternals=t,Bo(t,r,e,n),t=Ho(null,t,r,!0,o,n)):(t.tag=0,U&&o&&Ni(t),se(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Br(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=jp(r),e=ze(r,e),l){case 0:t=Wo(null,t,r,e,n);break e;case 1:t=ts(null,t,r,e,n);break e;case 11:t=bu(null,t,r,e,n);break e;case 14:t=es(null,t,r,ze(r.type,e),n);break e}throw Error(y(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:ze(r,l),Wo(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:ze(r,l),ts(e,t,r,l,n);case 3:e:{if(fc(t),e===null)throw Error(y(387));r=t.pendingProps,o=t.memoizedState,l=o.element,Ia(e,t),ol(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){l=dn(Error(y(423)),t),t=ns(e,t,r,n,l);break e}else if(r!==l){l=dn(Error(y(424)),t),t=ns(e,t,r,n,l);break e}else for(ge=ft(t.stateNode.containerInfo.firstChild),we=t,U=!0,Oe=null,n=Ua(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(an(),r===l){t=Ze(e,t,n);break e}se(e,t,r,n)}t=t.child}return t;case 5:return Ba(t),e===null&&Fo(t),r=t.type,l=t.pendingProps,o=e!==null?e.memoizedProps:null,i=l.children,jo(r,l)?i=null:o!==null&&jo(r,o)&&(t.flags|=32),cc(e,t),se(e,t,i,n),t.child;case 6:return e===null&&Fo(t),null;case 13:return dc(e,t,n);case 4:return Di(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=cn(t,null,r,n):se(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:ze(r,l),bu(e,t,r,l,n);case 7:return se(e,t,t.pendingProps,n),t.child;case 8:return se(e,t,t.pendingProps.children,n),t.child;case 12:return se(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,o=t.memoizedProps,i=l.value,M(rl,r._currentValue),r._currentValue=i,o!==null)if(Me(o.value,i)){if(o.children===l.children&&!me.current){t=Ze(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var u=o.dependencies;if(u!==null){i=o.child;for(var s=u.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=Ke(-1,n&-n),s.tag=2;var a=o.updateQueue;if(a!==null){a=a.shared;var h=a.pending;h===null?s.next=s:(s.next=h.next,h.next=s),a.pending=s}}o.lanes|=n,s=o.alternate,s!==null&&(s.lanes|=n),$o(o.return,n,t),u.lanes|=n;break}s=s.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(y(341));i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),$o(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}se(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,rn(t,n),l=Te(l),r=r(l),t.flags|=1,se(e,t,r,n),t.child;case 14:return r=t.type,l=ze(r,t.pendingProps),l=ze(r.type,l),es(e,t,r,l,n);case 15:return sc(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:ze(r,l),Br(e,t),t.tag=1,he(r)?(e=!0,el(t)):e=!1,rn(t,n),Fa(t,r,l),Bo(t,r,l,n),Ho(null,t,r,!0,e,n);case 19:return pc(e,t,n);case 22:return ac(e,t,n)}throw Error(y(156,t.tag))};function Rc(e,t){return ta(e,t)}function zp(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function _e(e,t,n,r){return new zp(e,t,n,r)}function Gi(e){return e=e.prototype,!(!e||!e.isReactComponent)}function jp(e){if(typeof e=="function")return Gi(e)?1:0;if(e!=null){if(e=e.$$typeof,e===mi)return 11;if(e===hi)return 14}return 2}function ht(e,t){var n=e.alternate;return n===null?(n=_e(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Hr(e,t,n,r,l,o){var i=2;if(r=e,typeof e=="function")Gi(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Wt:return zt(n.children,l,o,t);case pi:i=8,l|=8;break;case ao:return e=_e(12,n,t,l|2),e.elementType=ao,e.lanes=o,e;case co:return e=_e(13,n,t,l),e.elementType=co,e.lanes=o,e;case fo:return e=_e(19,n,t,l),e.elementType=fo,e.lanes=o,e;case $s:return Nl(n,l,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Ms:i=10;break e;case Fs:i=9;break e;case mi:i=11;break e;case hi:i=14;break e;case et:i=16,r=null;break e}throw Error(y(130,e==null?e:typeof e,""))}return t=_e(i,n,t,l),t.elementType=e,t.type=r,t.lanes=o,t}function zt(e,t,n,r){return e=_e(7,e,r,t),e.lanes=n,e}function Nl(e,t,n,r){return e=_e(22,e,r,t),e.elementType=$s,e.lanes=n,e.stateNode={isHidden:!1},e}function lo(e,t,n){return e=_e(6,e,null,t),e.lanes=n,e}function oo(e,t,n){return t=_e(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Op(e,t,n,r,l){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Ul(0),this.expirationTimes=Ul(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ul(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function Zi(e,t,n,r,l,o,i,u,s){return e=new Op(e,t,n,u,s),t===1?(t=1,o===!0&&(t|=8)):t=0,o=_e(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Oi(o),e}function Dp(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Oc)}catch(e){console.error(e)}}Oc(),zs.exports=ke;var Dc=zs.exports;const jn=ml(Dc);var ms=Dc;uo.createRoot=ms.createRoot,uo.hydrateRoot=ms.hydrateRoot;var Ic={exports:{}};/*! + Copyright (c) 2018 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/(function(e){(function(){var t={}.hasOwnProperty;function n(){for(var o="",i=0;i1?h-1:0),p=1;p=19?e.props.ref:e.ref}const dm=!!(typeof window<"u"&&window.document&&window.document.createElement);var li=!1,oi=!1;try{var io={get passive(){return li=!0},get once(){return oi=li=!0}};dm&&(window.addEventListener("test",io,io),window.removeEventListener("test",io,!0))}catch{}function pm(e,t,n,r){if(r&&typeof r!="boolean"&&!oi){var l=r.once,o=r.capture,i=n;!oi&&l&&(i=n.__once||function u(s){this.removeEventListener(t,u,o),n.call(this,s)},n.__once=i),e.addEventListener(t,i,li?r:o)}e.addEventListener(t,n,r)}function mm(e,t,n,r){var l=r&&typeof r!="boolean"?r.capture:r;e.removeEventListener(t,n,l),n.__once&&e.removeEventListener(t,n.__once,l)}function Wc(e,t,n,r){return pm(e,t,n,r),function(){mm(e,t,n,r)}}function hm(e,t,n,r){if(n===void 0&&(n=!1),r===void 0&&(r=!0),e){var l=document.createEvent("HTMLEvents");l.initEvent(t,n,r),e.dispatchEvent(l)}}function vm(e){var t=Fc(e,"transitionDuration")||"",n=t.indexOf("ms")===-1?1e3:1;return parseFloat(t)*n}function ym(e,t,n){n===void 0&&(n=5);var r=!1,l=setTimeout(function(){r||hm(e,"transitionend",!0)},t+n),o=Wc(e,"transitionend",function(){r=!0},{once:!0});return function(){clearTimeout(l),o()}}function gm(e,t,n,r){n==null&&(n=vm(e)||0);var l=ym(e,n,r),o=Wc(e,"transitionend",t);return function(){l(),o()}}function ys(e,t){const n=Fc(e,t)||"",r=n.indexOf("ms")===-1?1e3:1;return parseFloat(n)*r}function wm(e,t){const n=ys(e,"transitionDuration"),r=ys(e,"transitionDelay"),l=gm(e,o=>{o.target===e&&(l(),t(o))},n+r)}function Sm(e){e.offsetHeight}const gs=e=>!e||typeof e=="function"?e:t=>{e.current=t};function km(e,t){const n=gs(e),r=gs(t);return l=>{n&&n(l),r&&r(l)}}function xm(e,t){return T.useMemo(()=>km(e,t),[e,t])}function Em(e){return e&&"setState"in e?jn.findDOMNode(e):e??null}const Hc=ot.forwardRef(({onEnter:e,onEntering:t,onEntered:n,onExit:r,onExiting:l,onExited:o,addEndListener:i,children:u,childRef:s,...a},h)=>{const m=T.useRef(null),p=xm(m,s),w=_=>{p(Em(_))},S=_=>E=>{_&&m.current&&_(m.current,E)},g=T.useCallback(S(e),[e]),L=T.useCallback(S(t),[t]),f=T.useCallback(S(n),[n]),c=T.useCallback(S(r),[r]),d=T.useCallback(S(l),[l]),v=T.useCallback(S(o),[o]),x=T.useCallback(S(i),[i]);return k.jsx(am,{ref:h,...a,onEnter:g,onEntered:f,onEntering:L,onExit:c,onExited:v,onExiting:d,addEndListener:x,nodeRef:m,children:typeof u=="function"?(_,E)=>u(_,{...E,ref:w}):ot.cloneElement(u,{ref:w})})});Hc.displayName="TransitionWrapper";const Cm=Hc;function _m(e){const t=T.useRef(e);return T.useEffect(()=>{t.current=e},[e]),t}function Nm(e){const t=_m(e);return T.useCallback(function(...n){return t.current&&t.current(...n)},[t])}const tu=e=>T.forwardRef((t,n)=>k.jsx("div",{...t,ref:n,className:V(t.className,e)})),Vc=tu("h4");Vc.displayName="DivStyledAsH4";const Qc=T.forwardRef(({className:e,bsPrefix:t,as:n=Vc,...r},l)=>(t=ee(t,"alert-heading"),k.jsx(n,{ref:l,className:V(e,t),...r})));Qc.displayName="AlertHeading";const Tm=Qc;function Pm(e){const t=T.useRef(e);return T.useEffect(()=>{t.current=e},[e]),t}function Rm(e){const t=Pm(e);return T.useCallback(function(...n){return t.current&&t.current(...n)},[t])}const Lm=["as","disabled"];function zm(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function jm(e){return!e||e.trim()==="#"}function nu({tagName:e,disabled:t,href:n,target:r,rel:l,role:o,onClick:i,tabIndex:u=0,type:s}){e||(n!=null||r!=null||l!=null?e="a":e="button");const a={tagName:e};if(e==="button")return[{type:s||"button",disabled:t},a];const h=p=>{if((t||e==="a"&&jm(n))&&p.preventDefault(),t){p.stopPropagation();return}i==null||i(p)},m=p=>{p.key===" "&&(p.preventDefault(),h(p))};return e==="a"&&(n||(n="#"),t&&(n=void 0)),[{role:o??"button",disabled:void 0,tabIndex:t?void 0:u,href:n,target:e==="a"?r:void 0,"aria-disabled":t||void 0,rel:e==="a"?l:void 0,onClick:h,onKeyDown:m},a]}const Om=T.forwardRef((e,t)=>{let{as:n,disabled:r}=e,l=zm(e,Lm);const[o,{tagName:i}]=nu(Object.assign({tagName:n,disabled:r},l));return k.jsx(i,Object.assign({},l,o,{ref:t}))});Om.displayName="Button";const Dm=["onKeyDown"];function Im(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Mm(e){return!e||e.trim()==="#"}const Kc=T.forwardRef((e,t)=>{let{onKeyDown:n}=e,r=Im(e,Dm);const[l]=nu(Object.assign({tagName:"a"},r)),o=Rm(i=>{l.onKeyDown(i),n==null||n(i)});return Mm(r.href)||r.role==="button"?k.jsx("a",Object.assign({ref:t},r,l,{onKeyDown:o})):k.jsx("a",Object.assign({ref:t},r,{onKeyDown:n}))});Kc.displayName="Anchor";const Fm=Kc,Yc=T.forwardRef(({className:e,bsPrefix:t,as:n=Fm,...r},l)=>(t=ee(t,"alert-link"),k.jsx(n,{ref:l,className:V(e,t),...r})));Yc.displayName="AlertLink";const $m=Yc,Um={[nt]:"show",[Nt]:"show"},Xc=T.forwardRef(({className:e,children:t,transitionClasses:n={},onEnter:r,...l},o)=>{const i={in:!1,timeout:300,mountOnEnter:!1,unmountOnExit:!1,appear:!1,...l},u=T.useCallback((s,a)=>{Sm(s),r==null||r(s,a)},[r]);return k.jsx(Cm,{ref:o,addEndListener:wm,...i,onEnter:u,childRef:fm(t),children:(s,a)=>T.cloneElement(t,{...a,className:V("fade",e,t.props.className,Um[s],n[s])})})});Xc.displayName="Fade";const ws=Xc,Bm={"aria-label":on.string,onClick:on.func,variant:on.oneOf(["white"])},ru=T.forwardRef(({className:e,variant:t,"aria-label":n="Close",...r},l)=>k.jsx("button",{ref:l,type:"button",className:V("btn-close",t&&`btn-close-${t}`,e),"aria-label":n,...r}));ru.displayName="CloseButton";ru.propTypes=Bm;const Am=ru,Gc=T.forwardRef((e,t)=>{const{bsPrefix:n,show:r=!0,closeLabel:l="Close alert",closeVariant:o,className:i,children:u,variant:s="primary",onClose:a,dismissible:h,transition:m=ws,...p}=Hp(e,{show:"onClose"}),w=ee(n,"alert"),S=Nm(f=>{a&&a(!1,f)}),g=m===!0?ws:m,L=k.jsxs("div",{role:"alert",...g?void 0:p,ref:t,className:V(i,w,s&&`${w}-${s}`,h&&`${w}-dismissible`),children:[h&&k.jsx(Am,{onClick:S,"aria-label":l,variant:o}),u]});return g?k.jsx(g,{unmountOnExit:!0,...p,ref:void 0,in:r,children:L}):r?L:null});Gc.displayName="Alert";const Wm=Object.assign(Gc,{Link:$m,Heading:Tm}),Zc=T.forwardRef(({as:e,bsPrefix:t,variant:n="primary",size:r,active:l=!1,disabled:o=!1,className:i,...u},s)=>{const a=ee(t,"btn"),[h,{tagName:m}]=nu({tagName:e,disabled:o,...u}),p=m;return k.jsx(p,{...h,...u,ref:s,disabled:o,className:V(i,a,l&&"active",n&&`${a}-${n}`,r&&`${a}-${r}`,u.href&&o&&"disabled")})});Zc.displayName="Button";const Hm=Zc,Jc=T.forwardRef(({className:e,bsPrefix:t,as:n="div",...r},l)=>(t=ee(t,"card-body"),k.jsx(n,{ref:l,className:V(e,t),...r})));Jc.displayName="CardBody";const qc=Jc,bc=T.forwardRef(({className:e,bsPrefix:t,as:n="div",...r},l)=>(t=ee(t,"card-footer"),k.jsx(n,{ref:l,className:V(e,t),...r})));bc.displayName="CardFooter";const Vm=bc,ef=T.createContext(null);ef.displayName="CardHeaderContext";const Qm=ef,tf=T.forwardRef(({bsPrefix:e,className:t,as:n="div",...r},l)=>{const o=ee(e,"card-header"),i=T.useMemo(()=>({cardHeaderBsPrefix:o}),[o]);return k.jsx(Qm.Provider,{value:i,children:k.jsx(n,{ref:l,...r,className:V(t,o)})})});tf.displayName="CardHeader";const Km=tf,nf=T.forwardRef(({bsPrefix:e,className:t,variant:n,as:r="img",...l},o)=>{const i=ee(e,"card-img");return k.jsx(r,{ref:o,className:V(n?`${i}-${n}`:i,t),...l})});nf.displayName="CardImg";const Ym=nf,rf=T.forwardRef(({className:e,bsPrefix:t,as:n="div",...r},l)=>(t=ee(t,"card-img-overlay"),k.jsx(n,{ref:l,className:V(e,t),...r})));rf.displayName="CardImgOverlay";const Xm=rf,lf=T.forwardRef(({className:e,bsPrefix:t,as:n="a",...r},l)=>(t=ee(t,"card-link"),k.jsx(n,{ref:l,className:V(e,t),...r})));lf.displayName="CardLink";const Gm=lf,Zm=tu("h6"),of=T.forwardRef(({className:e,bsPrefix:t,as:n=Zm,...r},l)=>(t=ee(t,"card-subtitle"),k.jsx(n,{ref:l,className:V(e,t),...r})));of.displayName="CardSubtitle";const Jm=of,uf=T.forwardRef(({className:e,bsPrefix:t,as:n="p",...r},l)=>(t=ee(t,"card-text"),k.jsx(n,{ref:l,className:V(e,t),...r})));uf.displayName="CardText";const qm=uf,bm=tu("h5"),sf=T.forwardRef(({className:e,bsPrefix:t,as:n=bm,...r},l)=>(t=ee(t,"card-title"),k.jsx(n,{ref:l,className:V(e,t),...r})));sf.displayName="CardTitle";const eh=sf,af=T.forwardRef(({bsPrefix:e,className:t,bg:n,text:r,border:l,body:o=!1,children:i,as:u="div",...s},a)=>{const h=ee(e,"card");return k.jsx(u,{ref:a,...s,className:V(t,h,n&&`bg-${n}`,r&&`text-${r}`,l&&`border-${l}`),children:o?k.jsx(qc,{children:i}):i})});af.displayName="Card";const zr=Object.assign(af,{Img:Ym,Title:eh,Subtitle:Jm,Body:qc,Link:Gm,Text:qm,Header:Km,Footer:Vm,ImgOverlay:Xm}),cf=T.forwardRef(({bsPrefix:e,fluid:t=!1,as:n="div",className:r,...l},o)=>{const i=ee(e,"container"),u=typeof t=="string"?`-${t}`:"-fluid";return k.jsx(n,{ref:o,...l,className:V(r,t?`${i}${u}`:i)})});cf.displayName="Container";const Tn=cf,th={type:on.string,tooltip:on.bool,as:on.elementType},lu=T.forwardRef(({as:e="div",className:t,type:n="valid",tooltip:r=!1,...l},o)=>k.jsx(e,{...l,ref:o,className:V(t,`${n}-${r?"tooltip":"feedback"}`)}));lu.displayName="Feedback";lu.propTypes=th;const nh=lu,rh=T.createContext({}),lh=rh,ff=T.forwardRef(({bsPrefix:e,type:t,size:n,htmlSize:r,id:l,className:o,isValid:i=!1,isInvalid:u=!1,plaintext:s,readOnly:a,as:h="input",...m},p)=>{const{controlId:w}=T.useContext(lh);return e=ee(e,"form-control"),k.jsx(h,{...m,type:t,size:r,ref:p,readOnly:a,id:l||w,className:V(o,s?`${e}-plaintext`:e,n&&`${e}-${n}`,t==="color"&&`${e}-color`,i&&"is-valid",u&&"is-invalid")})});ff.displayName="FormControl";const oh=Object.assign(ff,{Feedback:nh}),df=T.forwardRef(({bsPrefix:e,className:t,as:n="div",...r},l)=>{const o=ee(e,"row"),i=Yp(),u=Xp(),s=`${o}-cols`,a=[];return i.forEach(h=>{const m=r[h];delete r[h];let p;m!=null&&typeof m=="object"?{cols:p}=m:p=m;const w=h!==u?`-${h}`:"";p!=null&&a.push(`${s}${w}-${p}`)}),k.jsx(n,{ref:l,...r,className:V(t,o,...a)})});df.displayName="Row";const ih=df,pf=T.forwardRef(({bsPrefix:e,variant:t,animation:n="border",size:r,as:l="div",className:o,...i},u)=>{e=ee(e,"spinner");const s=`${e}-${n}`;return k.jsx(l,{ref:u,...i,className:V(o,s,r&&`${s}-${r}`,t&&`text-${t}`)})});pf.displayName="Spinner";const Ss=pf,uh="9237b7b7b0f94d2c976774d4c6cf587a",sh="3bfd23e62e9649548fa40de35bdf9da7";function ah(){const[e,t]=T.useState(""),[n,r]=T.useState(""),[l,o]=T.useState([]),[i,u]=T.useState(null),[s,a]=T.useState(!1),[h,m]=T.useState(""),[p,w]=T.useState(!1);T.useEffect(()=>{(async()=>{try{const L={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:"grant_type=client_credentials&client_id="+uh+"&client_secret="+sh},c=await(await fetch("https://accounts.spotify.com/api/token",L)).json();c.access_token?r(c.access_token):m("No se pudo autenticar con Spotify")}catch(L){console.error("Error al obtener token:",L),m("Error al conectar con Spotify")}})()},[]);async function S(){var g,L;if(!n){m("Esperando autenticación con Spotify...");return}if(!e.trim()){m("Por favor ingresa un nombre de artista");return}a(!0),m(""),w(!0);try{const f={method:"GET",headers:{"Content-Type":"application/json",Authorization:"Bearer "+n}},d=await(await fetch("https://api.spotify.com/v1/search?q="+encodeURIComponent(e)+"&type=artist&limit=1",f)).json();if(!d.artists||!d.artists.items||d.artists.items.length===0){m(`No se encontró el artista "${e}"`),o([]),u(null),a(!1);return}const v=d.artists.items[0],x=v.id;u({name:v.name,image:((g=v.images[0])==null?void 0:g.url)||"https://via.placeholder.com/300",genres:v.genres,followers:v.followers.total,spotifyUrl:v.external_urls.spotify});const E=await(await fetch("https://api.spotify.com/v1/artists/"+x+"/albums?include_groups=album&market=US&limit=50",f)).json();E.items&&E.items.length>0?o(E.items):(m("Este artista no tiene álbumes disponibles"),o([])),console.log("Artista:",v.name),console.log("ID del artista:",x),console.log("Álbumes encontrados:",((L=E.items)==null?void 0:L.length)||0)}catch(f){console.error("Error en la búsqueda:",f),m("Error al buscar. Intenta de nuevo más tarde."),o([]),u(null)}finally{a(!1)}}return k.jsxs(k.Fragment,{children:[k.jsxs(Tn,{className:"mt-5 mb-5",children:[k.jsxs("div",{style:{textAlign:"center",marginBottom:"40px"},children:[k.jsx("h1",{style:{fontSize:"3em",fontWeight:"bold",color:"#1DB954"},children:"🎵 Spotify Album Finder"}),k.jsx("p",{style:{fontSize:"1.2em",color:"#666"},children:"Busca tus artistas favoritos y descubre todos sus álbumes"})]}),k.jsx("div",{style:{display:"flex",justifyContent:"center",marginBottom:"1.5rem",width:"100%"},children:k.jsxs("div",{style:{display:"flex",maxWidth:"600px",width:"100%"},children:[k.jsx(oh,{placeholder:"Escribe el nombre",type:"text",value:e,onChange:g=>t(g.target.value),onKeyDown:g=>{g.key==="Enter"&&S()},disabled:s,style:{height:"2rem",borderRadius:"25px 0 0 25px",paddingLeft:"20px",fontSize:"16px",border:"2px solid #1DB954",flex:1}}),k.jsx(Hm,{onClick:()=>S(),disabled:s||!n,style:{height:"2.35rem",backgroundColor:"#1DB954",borderColor:"#1DB954",borderRadius:"0 25px 25px 0",fontWeight:"bold",fontSize:"16px",border:"2px solid #1DB954"},children:s?k.jsxs(k.Fragment,{children:[k.jsx(Ss,{as:"span",animation:"border",size:"sm",role:"status","aria-hidden":"true",className:"me-2"}),"Buscando..."]}):"Buscar"})]})})," ",h&&k.jsx(Wm,{variant:"danger",onClose:()=>m(""),dismissible:!0,className:"mt-4",children:h})]}),i&&!s&&k.jsx(Tn,{className:"mb-5",children:k.jsxs("div",{style:{marginTop:"30px",background:"linear-gradient(135deg, #1DB954 0%, #191414 100%)",color:"white",padding:"40px",borderRadius:"15px",textAlign:"center"},children:[k.jsx("img",{src:i.image,alt:i.name,style:{width:"150px",height:"150px",borderRadius:"50%",marginBottom:"20px",border:"4px solid white"}}),k.jsx("h2",{style:{fontSize:"2.5em",marginBottom:"10px",fontWeight:"bold"},children:i.name}),k.jsxs("p",{style:{fontSize:"1.1em",marginBottom:"15px"},children:["📊 ",i.followers.toLocaleString()," seguidores"]}),i.genres.length>0&&k.jsxs("p",{style:{fontSize:"1em",marginBottom:"15px"},children:["🎸 Géneros: ",k.jsx("strong",{children:i.genres.join(", ")})]}),k.jsx("a",{href:i.spotifyUrl,target:"_blank",rel:"noopener noreferrer",style:{display:"inline-block",backgroundColor:"white",color:"#1DB954",padding:"10px 25px",borderRadius:"25px",textDecoration:"none",fontWeight:"bold",marginTop:"10px"},children:"Ver en Spotify"})]})}),l.length>0&&!s&&k.jsxs(Tn,{className:"mb-5",style:{paddingLeft:"20px",paddingRight:"20px"},children:[k.jsxs("h3",{style:{marginBottom:"30px",fontSize:"2em",fontWeight:"bold",color:"#1DB954"},children:["Álbumes (",l.length,")"]}),k.jsx(ih,{style:{gap:"20px",display:"flex",flexWrap:"wrap",justifyContent:"flex-start"},children:l.map(g=>{var L;return k.jsx("div",{style:{flex:"0 1 calc(20% - 15px)",minWidth:"200px",padding:"30px",marginBottom:"20px"},children:k.jsxs(zr,{style:{backgroundColor:"white",borderRadius:"10px",overflow:"hidden",boxShadow:"0 4px 15px rgba(0,0,0,0.1)",transition:"transform 0.3s ease, box-shadow 0.3s ease",cursor:"pointer",height:"80%",display:"flex",flexDirection:"column"},onMouseEnter:f=>{f.currentTarget.style.transform="translateY(-10px)",f.currentTarget.style.boxShadow="0 8px 25px rgba(29, 185, 84, 0.3)"},onMouseLeave:f=>{f.currentTarget.style.transform="translateY(0)",f.currentTarget.style.boxShadow="0 4px 15px rgba(0,0,0,0.1)"},children:[k.jsx("div",{style:{position:"relative",overflow:"hidden"},children:k.jsx(zr.Img,{variant:"top",src:((L=g.images[0])==null?void 0:L.url)||"https://via.placeholder.com/300",alt:g.name,style:{height:"140px",objectFit:"cover"}})}),k.jsxs(zr.Body,{style:{flex:1,display:"flex",flexDirection:"column"},children:[k.jsx(zr.Title,{style:{fontSize:"0.95em",fontWeight:"bold",color:"#191414",marginBottom:"0px",minHeight:"40px",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",overflow:"hidden"},children:g.name}),k.jsxs("p",{style:{color:"#666",marginBottom:"1px",fontSize:"0.85em"},children:["📅 ",new Date(g.release_date).toLocaleDateString("es-ES")]}),k.jsxs("p",{style:{color:"#666",marginBottom:"8px",fontSize:"0.85em"},children:["🎶 ",g.total_tracks," canciones"]}),k.jsx("div",{style:{marginTop:"auto",display:"flex",justifyContent:"center"},children:k.jsx("a",{href:g.external_urls.spotify,target:"_blank",rel:"noopener noreferrer",style:{display:"block",width:"90%",backgroundColor:"#1DB954",color:"white",padding:"10px",borderRadius:"5px",textAlign:"center",textDecoration:"none",fontWeight:"bold",transition:"background-color 0.3s"},onMouseEnter:f=>{f.currentTarget.style.backgroundColor="#1ed760"},onMouseLeave:f=>{f.currentTarget.style.backgroundColor="#1DB954"},children:"Ver en Spotify"})})]})]})},g.id)})})]}),p&&l.length===0&&!s&&!h&&k.jsx(Tn,{style:{textAlign:"center",marginTop:"50px",marginBottom:"50px"},children:k.jsx("p",{style:{fontSize:"1.5em",color:"#999"},children:"No hay álbumes disponibles para este artista."})}),s&&k.jsxs(Tn,{style:{textAlign:"center",marginTop:"80px",marginBottom:"80px"},children:[k.jsx(Ss,{animation:"border",role:"status",style:{color:"#1DB954",width:"60px",height:"60px"},children:k.jsx("span",{className:"visually-hidden",children:"Buscando..."})}),k.jsx("p",{style:{marginTop:"20px",fontSize:"1.2em",color:"#666"},children:"Buscando artista y álbumes..."})]})]})}uo.createRoot(document.getElementById("root")).render(k.jsx(ot.StrictMode,{children:k.jsx(ah,{})})); diff --git a/codedex-bot-logo.gif b/codedex-bot-logo.gif new file mode 100644 index 0000000..c7a0635 Binary files /dev/null and b/codedex-bot-logo.gif differ diff --git a/index.html b/index.html index 3c12f29..b2d2d75 100644 --- a/index.html +++ b/index.html @@ -1,13 +1,14 @@ - - - - - - - Codedex Spotify API Project Tutorial: Album Finder - - -
- - - + + + + + + + Codedex Spotify API Project Tutorial: Album Finder + + + + +
+ + diff --git a/package-lock.json b/package-lock.json index 3965636..a46122d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,9 @@ "name": "codedex-api-template", "version": "0.0.0", "dependencies": { + "bootstrap": "^5.3.8", "react": "^18.2.0", + "react-bootstrap": "^2.10.10", "react-dom": "^18.2.0" }, "devDependencies": { @@ -322,6 +324,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", @@ -926,6 +937,85 @@ "node": ">= 8" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.10.tgz", + "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@restart/hooks": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", + "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@restart/ui": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.9.4.tgz", + "integrity": "sha512-N4C7haUc3vn4LTwVUPlkJN8Ach/+yIMvRuTVIhjilNHqegY60SGLrzud6errOMNJwSnmYFnt1J0H/k8FE3A4KA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@popperjs/core": "^2.11.8", + "@react-aria/ssr": "^3.5.0", + "@restart/hooks": "^0.5.0", + "@types/warning": "^3.0.3", + "dequal": "^2.0.3", + "dom-helpers": "^5.2.0", + "uncontrollable": "^8.0.4", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + } + }, + "node_modules/@restart/ui/node_modules/@restart/hooks": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.5.1.tgz", + "integrity": "sha512-EMoH04NHS1pbn07iLTjIjgttuqb7qu4+/EyhAx27MHpoENcB2ZdSsLTNxmKD+WEPnZigo62Qc8zjGnNxoSE/5Q==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@restart/ui/node_modules/uncontrollable": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", + "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.14.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.9.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.4.tgz", @@ -1095,6 +1185,15 @@ "win32" ] }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -1143,16 +1242,15 @@ "dev": true }, "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", - "dev": true + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" }, "node_modules/@types/react": { "version": "18.2.47", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.47.tgz", "integrity": "sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==", - "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -1168,11 +1266,25 @@ "@types/react": "*" } }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, "node_modules/@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", - "dev": true + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" + }, + "node_modules/@types/warning": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", + "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==", + "license": "MIT" }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", @@ -1392,6 +1504,25 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/bootstrap": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz", + "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1491,6 +1622,12 @@ "node": ">=4" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1535,8 +1672,7 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/debug": { "version": "4.3.4", @@ -1592,6 +1728,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1604,6 +1749,16 @@ "node": ">=6.0.0" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.623", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.623.tgz", @@ -2482,6 +2637,15 @@ "node": ">= 0.4" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", @@ -3001,7 +3165,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -3251,13 +3414,25 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, + "node_modules/prop-types-extra": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", + "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", + "license": "MIT", + "dependencies": { + "react-is": "^16.3.2", + "warning": "^4.0.0" + }, + "peerDependencies": { + "react": ">=0.14.0" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -3298,6 +3473,37 @@ "node": ">=0.10.0" } }, + "node_modules/react-bootstrap": { + "version": "2.10.10", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.10.tgz", + "integrity": "sha512-gMckKUqn8aK/vCnfwoBpBVFUGT9SVQxwsYrp9yDHt0arXMamxALerliKBxr1TPbntirK/HGrUAHYbAeQTa9GHQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.7", + "@restart/hooks": "^0.4.9", + "@restart/ui": "^1.9.4", + "@types/prop-types": "^15.7.12", + "@types/react-transition-group": "^4.4.6", + "classnames": "^2.3.2", + "dom-helpers": "^5.2.1", + "invariant": "^2.2.4", + "prop-types": "^15.8.1", + "prop-types-extra": "^1.1.0", + "react-transition-group": "^4.4.5", + "uncontrollable": "^7.2.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "@types/react": ">=16.14.8", + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -3313,8 +3519,13 @@ "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "license": "MIT" }, "node_modules/react-refresh": { "version": "0.14.0", @@ -3325,6 +3536,22 @@ "node": ">=0.10.0" } }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", @@ -3718,6 +3945,12 @@ "node": ">=4" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3822,6 +4055,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/uncontrollable": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", + "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.6.3", + "@types/react": ">=16.9.11", + "invariant": "^2.2.4", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": ">=15.0.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -3916,6 +4164,15 @@ } } }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4248,6 +4505,11 @@ "@babel/helper-plugin-utils": "^7.22.5" } }, + "@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==" + }, "@babel/template": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", @@ -4586,6 +4848,59 @@ "fastq": "^1.6.0" } }, + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" + }, + "@react-aria/ssr": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.10.tgz", + "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", + "requires": { + "@swc/helpers": "^0.5.0" + } + }, + "@restart/hooks": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", + "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==", + "requires": { + "dequal": "^2.0.3" + } + }, + "@restart/ui": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.9.4.tgz", + "integrity": "sha512-N4C7haUc3vn4LTwVUPlkJN8Ach/+yIMvRuTVIhjilNHqegY60SGLrzud6errOMNJwSnmYFnt1J0H/k8FE3A4KA==", + "requires": { + "@babel/runtime": "^7.26.0", + "@popperjs/core": "^2.11.8", + "@react-aria/ssr": "^3.5.0", + "@restart/hooks": "^0.5.0", + "@types/warning": "^3.0.3", + "dequal": "^2.0.3", + "dom-helpers": "^5.2.0", + "uncontrollable": "^8.0.4", + "warning": "^4.0.3" + }, + "dependencies": { + "@restart/hooks": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.5.1.tgz", + "integrity": "sha512-EMoH04NHS1pbn07iLTjIjgttuqb7qu4+/EyhAx27MHpoENcB2ZdSsLTNxmKD+WEPnZigo62Qc8zjGnNxoSE/5Q==", + "requires": { + "dequal": "^2.0.3" + } + }, + "uncontrollable": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", + "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", + "requires": {} + } + } + }, "@rollup/rollup-android-arm-eabi": { "version": "4.9.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.4.tgz", @@ -4677,6 +4992,14 @@ "dev": true, "optional": true }, + "@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "requires": { + "tslib": "^2.8.0" + } + }, "@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -4725,16 +5048,14 @@ "dev": true }, "@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", - "dev": true + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==" }, "@types/react": { "version": "18.2.47", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.47.tgz", "integrity": "sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==", - "dev": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4750,11 +5071,21 @@ "@types/react": "*" } }, + "@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "requires": {} + }, "@types/scheduler": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", - "dev": true + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" + }, + "@types/warning": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", + "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==" }, "@ungap/structured-clone": { "version": "1.2.0", @@ -4917,6 +5248,12 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "bootstrap": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz", + "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==", + "requires": {} + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4973,6 +5310,11 @@ "supports-color": "^5.3.0" } }, + "classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -5014,8 +5356,7 @@ "csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "debug": { "version": "4.3.4", @@ -5054,6 +5395,11 @@ "object-keys": "^1.1.1" } }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -5063,6 +5409,15 @@ "esutils": "^2.0.2" } }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "electron-to-chromium": { "version": "1.4.623", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.623.tgz", @@ -5720,6 +6075,14 @@ "side-channel": "^1.0.4" } }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, "is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", @@ -6088,8 +6451,7 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { "version": "1.13.1", @@ -6259,13 +6621,21 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, + "prop-types-extra": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", + "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", + "requires": { + "react-is": "^16.3.2", + "warning": "^4.0.0" + } + }, "punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -6286,6 +6656,26 @@ "loose-envify": "^1.1.0" } }, + "react-bootstrap": { + "version": "2.10.10", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.10.tgz", + "integrity": "sha512-gMckKUqn8aK/vCnfwoBpBVFUGT9SVQxwsYrp9yDHt0arXMamxALerliKBxr1TPbntirK/HGrUAHYbAeQTa9GHQ==", + "requires": { + "@babel/runtime": "^7.24.7", + "@restart/hooks": "^0.4.9", + "@restart/ui": "^1.9.4", + "@types/prop-types": "^15.7.12", + "@types/react-transition-group": "^4.4.6", + "classnames": "^2.3.2", + "dom-helpers": "^5.2.1", + "invariant": "^2.2.4", + "prop-types": "^15.8.1", + "prop-types-extra": "^1.1.0", + "react-transition-group": "^4.4.5", + "uncontrollable": "^7.2.1", + "warning": "^4.0.3" + } + }, "react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -6298,8 +6688,12 @@ "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, "react-refresh": { "version": "0.14.0", @@ -6307,6 +6701,17 @@ "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", "dev": true }, + "react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, "reflect.getprototypeof": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", @@ -6580,6 +6985,11 @@ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -6654,6 +7064,17 @@ "which-boxed-primitive": "^1.0.2" } }, + "uncontrollable": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", + "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", + "requires": { + "@babel/runtime": "^7.6.3", + "@types/react": ">=16.9.11", + "invariant": "^2.2.4", + "react-lifecycles-compat": "^3.0.4" + } + }, "update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -6685,6 +7106,14 @@ "rollup": "^4.2.0" } }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 9945f43..354b9a4 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,9 @@ "preview": "vite preview" }, "dependencies": { + "bootstrap": "^5.3.8", "react": "^18.2.0", + "react-bootstrap": "^2.10.10", "react-dom": "^18.2.0" }, "devDependencies": { diff --git a/src/App.jsx b/src/App.jsx index 9c624ea..3f00984 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,14 +1,397 @@ +import './App.css'; +import { FormControl, Container, Button, Row, Card, Spinner, Alert } from "react-bootstrap"; +import { useState, useEffect } from "react"; -import './App.css' +const clientId = import.meta.env.VITE_CLIENT_ID; +const clientSecret = import.meta.env.VITE_CLIENT_SECRET; function App() { - + const [searchInput, setSearchInput] = useState(""); + const [accessToken, setAccessToken] = useState(""); + const [albums, setAlbums] = useState([]); + const [artist, setArtist] = useState(null); // Información del artista + const [loading, setLoading] = useState(false); // Estado de carga + const [error, setError] = useState(""); // Manejo de errores + const [searched, setSearched] = useState(false); // Para saber si ya buscó + + // Obtener token de Spotify al montar el componente + useEffect(() => { + const getAccessToken = async () => { + try { + const authParams = { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + body: + "grant_type=client_credentials&client_id=" + + clientId + + "&client_secret=" + + clientSecret, + }; + + const response = await fetch("https://accounts.spotify.com/api/token", authParams); + const data = await response.json(); + + if (data.access_token) { + setAccessToken(data.access_token); + } else { + setError("No se pudo autenticar con Spotify"); + } + } catch (err) { + console.error("Error al obtener token:", err); + setError("Error al conectar con Spotify"); + } + }; + + getAccessToken(); + }, []); + + // Función principal de búsqueda + async function search() { + // Validaciones + if (!accessToken) { + setError("Esperando autenticación con Spotify..."); + return; + } + + if (!searchInput.trim()) { + setError("Por favor ingresa un nombre de artista"); + return; + } + + setLoading(true); + setError(""); + setSearched(true); + + try { + const artistParams = { + method: "GET", + headers: { + "Content-Type": "application/json", + Authorization: "Bearer " + accessToken, + }, + }; + + // 1. BUSCAR ARTISTA + const artistResponse = await fetch( + "https://api.spotify.com/v1/search?q=" + encodeURIComponent(searchInput) + "&type=artist&limit=1", + artistParams + ); + const artistData = await artistResponse.json(); + + // Validar que existan resultados + if (!artistData.artists || !artistData.artists.items || artistData.artists.items.length === 0) { + setError(`No se encontró el artista "${searchInput}"`); + setAlbums([]); + setArtist(null); + setLoading(false); + return; + } + + const artistInfo = artistData.artists.items[0]; + const artistID = artistInfo.id; + + // Guardar información del artista + setArtist({ + name: artistInfo.name, + image: artistInfo.images[0]?.url || "https://via.placeholder.com/300", + genres: artistInfo.genres, + followers: artistInfo.followers.total, + spotifyUrl: artistInfo.external_urls.spotify, + }); + + // 2. OBTENER ÁLBUMES DEL ARTISTA + const albumsResponse = await fetch( + "https://api.spotify.com/v1/artists/" + + artistID + + "/albums?include_groups=album&market=US&limit=50", + artistParams + ); + const albumsData = await albumsResponse.json(); + + if (albumsData.items && albumsData.items.length > 0) { + setAlbums(albumsData.items); + } else { + setError("Este artista no tiene álbumes disponibles"); + setAlbums([]); + } + + console.log("Artista:", artistInfo.name); + console.log("ID del artista:", artistID); + console.log("Álbumes encontrados:", albumsData.items?.length || 0); + } catch (err) { + console.error("Error en la búsqueda:", err); + setError("Error al buscar. Intenta de nuevo más tarde."); + setAlbums([]); + setArtist(null); + } finally { + setLoading(false); + } + } return ( - <> -

Codédex Project Template

+ <> + {/* HEADER */} + +
+

+ 🎵 Spotify Album Finder +

+

+ Busca tus artistas favoritos y descubre todos sus álbumes +

+
+ + {/* BARRA DE BÚSQUEDA */} +
+
+ setSearchInput(e.target.value)} + onKeyDown={(e) => { if (e.key === "Enter") { search(); } }} + disabled={loading} + style={{ + height: "2rem", + borderRadius: "25px 0 0 25px", + paddingLeft: "20px", + fontSize: "16px", + border: "2px solid #1DB954", + flex: 1, + }} + /> + +
+
{/* MOSTRAR ERRORES */} + {error && ( + setError("")} dismissible className="mt-4"> + {error} + + )} +
+ + {/* INFORMACIÓN DEL ARTISTA */} + {artist && !loading && ( + +
+ {artist.name} +

+ {artist.name} +

+

+ 📊 {artist.followers.toLocaleString()} seguidores +

+ {artist.genres.length > 0 && ( +

+ 🎸 Géneros: {artist.genres.join(", ")} +

+ )} + + Ver en Spotify + +
+
+ )} + + {/* LISTA DE ÁLBUMES */} + {albums.length > 0 && !loading && ( + +

+ Álbumes ({albums.length}) +

+ + {albums.map((album) => ( +
+ { + e.currentTarget.style.transform = "translateY(-10px)"; + e.currentTarget.style.boxShadow = "0 8px 25px rgba(29, 185, 84, 0.3)"; + }} + onMouseLeave={(e) => { + e.currentTarget.style.transform = "translateY(0)"; + e.currentTarget.style.boxShadow = "0 4px 15px rgba(0,0,0,0.1)"; + }} + > +
+ +
+ + + {album.name} + + +

+ 📅 {new Date(album.release_date).toLocaleDateString("es-ES")} +

+ +

+ 🎶 {album.total_tracks} canciones +

+ + +
+
+
+ ))} +
+
+ )} + + {/* MENSAJE SIN RESULTADOS */} + {searched && albums.length === 0 && !loading && !error && ( + +

+ No hay álbumes disponibles para este artista. +

+
+ )} + + {/* LOADING STATE */} + {loading && ( + + + Buscando... + +

+ Buscando artista y álbumes... +

+
+ )} - ) + ); } -export default App +export default App; + diff --git a/vite.svg b/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file