varCle=Object.defineProperty;varkF=t=>{throwTypeError(t)};varAle=(t,e,n)=>eint?Cle(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;varHe=(t,e,n)=>Ale(t,typeofe!="symbol"?e+"":e,n),CP=(t,e,n)=>e.has(t)||kF("Cannot "+n);varC=(t,e,n)=>(CP(t,e,"read from private field"),n?n.call(t):e.get(t)),z=(t,e,n)=>e.has(t)?kF("Cannot add the same private member more than once"):einstanceofWeakSet?e.add(t):e.set(t,n),$=(t,e,n,r)=>(CP(t,e,"write to private field"),r?r.call(t,n):e.set(t,n),n),B=(t,e,n)=>(CP(t,e,"access private method"),n);varbs=(t,e,n,r)=>({set_(s){$(t,e,s,n)},get_(){returnC(t,e,r)}});functionvH(t,e){for(varn=0;n<e.length;n++){constr=e[n];if(typeofr!="string"&&!Array.isArray(r)){for(constsinr)if(s!=="default"&&!(sint)){consti=Object.getOwnPropertyDescriptor(r,s);i&&Object.defineProperty(t,s,i.get?i:{enumerable:!0,get:()=>r[s]})}}}returnObject.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){conste=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(constsofdocument.querySelectorAll('link[rel="modulepreload"]'))r(s);newMutationObserver(s=>{for(constiofs)if(i.type==="childList")for(constaofi.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});functionn(s){consti={};returns.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}functionr(s){if(s.ep)return;s.ep=!0;consti=n(s);fetch(s.href,i)}})();varyr=typeofglobalThis<"u"?globalThis:typeofwindow<"u"?window:typeofglobal<"u"?global:typeofself<"u"?self:{};functionOd(t){returnt&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}functionRle(t){if(t.__esModule)returnt;vare=t.default;if(typeofe=="function"){varn=functionr(){returnthisinstanceofr?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};n.prototype=e.prototype}elsen={};returnObject.defineProperty(n,"__esModule",{value:!0}),Object.keys(t).forEach(function(r){vars=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(n,r,s.get?s:{enumerable:!0,get:function(){returnt[r]}})}),n}varyH={exports:{}},bC={},bH={exports:{}},Lt={};/**
*/var Y0=Symbol.for("react.element"),Ple=Symbol.for("react.portal"),Tle=Symbol.for("react.fragment"),kle=Symbol.for("react.strict_mode"),Dle=Symbol.for("react.profiler"),Nle=Symbol.for("react.provider"),Mle=Symbol.for("react.context"),Ole=Symbol.for("react.forward_ref"),Lle=Symbol.for("react.suspense"),Ile=Symbol.for("react.memo"),$le=Symbol.for("react.lazy"),DF=Symbol.iterator;function jle(t){return t===null||typeof t!="object"?null:(t=DF&&t[DF]||t["@@iterator"],typeof t=="function"?t:null)}var wH={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_H=Object.assign,xH={};function yv(t,e,n){this.props=t,this.context=e,this.refs=xH,this.updater=n||wH}yv.prototype.isReactComponent={};yv.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=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,t,e,"setState")};yv.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function SH(){}SH.prototype=yv.prototype;function uO(t,e,n){this.props=t,this.context=e,this.refs=xH,this.updater=n||wH}var dO=uO.prototype=new SH;dO.constructor=uO;_H(dO,yv.prototype);dO.isPureReactComponent=!0;var NF=Array.isArray,EH=Object.prototype.hasOwnProperty,fO={current:null},CH={key:!0,ref:!0,__self:!0,__source:!0};function AH(t,e,n){var r,s={},i=null,a=null;if(e!=null)for(r in e.ref!==void 0&&(a=e.ref),e.key!==void 0&&(i=""+e.key),e)EH.call(e,r)&&!CH.hasOwnProperty(r)&&(s[r]=e[r]);var o=arguments.length-2;if(o===1)s.children=n;else if(1<o){for(var c=Array(o),u=0;u<o;u++)c[u]=arguments[u+2];s.children=c}if(t&&t.defaultProps)for(r in o=t.defaultProps,o)s[r]===void 0&&(s[r]=o[r]);return{$$typeof:Y0,type:t,key:i,ref:a,props:s,_owner:fO.current}}function Fle(t,e){return{$$typeof:Y0,type:t.type,key:e,ref:t.ref,props:t.props,_owner:t._owner}}function hO(t){return typeof t=="object"&&t!==null&&t.$$typeof===Y0}function zle(t){var e={"=":"=0",":":"=2"};return"$"+t.replace(/[=:]/g,function(n){returne[n]})}varMF=/\/+/g;functionAP(t,e){returntypeoft=="object"&&t!==null&&t.key!=null?zle(""+t.key):e.toString(36)}functionkS(t,e,n,r,s){vari=typeoft;(i==="undefined"||i==="boolean")&&(t=null);vara=!1;if(t===null)a=!0;elseswitch(i){case"string":case"number":a=!0;break;case"object":switch(t.$$typeof){caseY0:casePle:a=!0}}if(a)returna=t,s=s(a),t=r===""?"."+AP(a,0):r,NF(s)?(n="",t!=null&&(n=t.replace(MF,"$&/")+"/"),kS(s,e,n,"",function(u){returnu})):s!=null&&(hO(s)&&(s=Fle(s,n+(!s.key||a&&a.key===s.key?"":(""+s.key).replace(MF,"$&/")+"/")+t)),e.push(s)),1;if(a=0,r=r===""?".":r+":",NF(t))for(varo=0;o<t.length;o++){i=t[o];varc=r+AP(i,o);a+=kS(i,e,n,c,s)}elseif(c=jle(t),typeofc=="function")for(t=c.call(t),o=0;!(i=t.next()).done;)i=i.value,c=r+AP(i,o++),a+=kS(i,e,n,c,s);elseif(i==="object")throwe=String(t),Error("Objects are not valid as a React child (found: "+(e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e)+"). If you meant to render a collection of children, use an array instead.");returna}functionOx(t,e,n){if(t==null)returnt;varr=[],s=0;returnkS(t,r,"","",function(i){returne.call(n,i,s++)}),r}functionBle(t){if(t._status===-1){vare=t._result;e=e(),e.then(function(n){(t._status===0||t._status===-1)&&(t._status=1,t._result=n)},function(n){(t._status===0||t._status===-1)&&(t._status=2,t._result=n)}),t._status===-1&&(t._status=0,t._result=e)}if(t._status===1)returnt._result.default;throwt._result}varei={current:null},DS={transition:null},Ule={ReactCurrentDispatcher:ei,ReactCurrentBatchConfig:DS,ReactCurrentOwner:fO};functionRH(){throwError("act(...) is not supported in production builds of React.")}Lt.Children={map:Ox,forEach:function(t,e,n){Ox(t,function(){e.apply(this,arguments)},n)},count:function(t){vare=0;returnOx(t,function(){e++}),e},toArray:function(t){returnOx(t,function(e){returne})||[]},only:function(t){if(!hO(t))throwError("React.Children.onlyexpect
Youcanaddadescriptiontothe\`${jm}\` by passing a \`${t6}\` component as a child, which also benefits sighted users by adding visible context to the dialog.
Alternatively,youcanuseyourowncomponentasadescriptionbyassigningitan\`id\` and passing the same value to the \`aria-describedby\` prop in \`${jm}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component.
Inordertobeiterable,non-arrayobjectsmusthavea[Symbol.iterator]()method.`)}function Nxe(t,e){if(t){if(typeof t=="string")return Hz(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Hz(t,e)}}function Hz(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function Mxe(t,e){var n=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(n!=null){var r,s,i,a,o=[],c=!0,u=!1;try{if(i=(n=n.call(t)).next,e!==0)for(;!(c=(r=i.call(n)).done)&&(o.push(r.value),o.length!==e);c=!0);}catch(f){u=!0,s=f}finally{try{if(!c&&n.return!=null&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw s}}return o}}function Oxe(t){if(Array.isArray(t))return t}var Lxe=_.forwardRef(function(t,e){var n=t.aspect,r=t.initialDimension,s=r===void 0?{width:-1,height:-1}:r,i=t.width,a=i===void 0?"100%":i,o=t.height,c=o===void 0?"100%":o,u=t.minWidth,f=u===void 0?0:u,l=t.minHeight,d=t.maxHeight,m=t.children,p=t.debounce,h=p===void 0?0:p,y=t.id,g=t.className,v=t.onResize,w=t.style,x=w===void 0?{}:w,A=_.useRef(null),k=_.useRef();k.current=v,_.useImperativeHandle(e,function(){return Object.defineProperty(A.current,"current",{get:function(){return console.warn("The usage of ref.current.current is deprecated and will no longer be supported."),A.current},configurable:!0})});var R=_.useState({containerWidth:s.width,containerHeight:s.height}),E=kxe(R,2),T=E[0],D=E[1],M=_.useCallback(function(I,j){D(function(U){var Y=Math.round(I),W=Math.round(j);return U.containerWidth===Y&&U.containerHeight===W?U:{containerWidth:Y,containerHeight:W}})},[]);_.useEffect(function(){var I=function(ee){var re,X=ee[0].contentRect,G=X.width,K=X.height;M(G,K),(re=k.current)===null||re===void 0||re.call(k,G,K)};h>0&&(I=Axe(I,h,{trailing:!0,leading:!1}));var j=new ResizeObserver(I),U=A.current.getBoundingClientRect(),Y=U.width,W=U.height;return M(Y,W),j.observe(A.current),function(){j.disconnect()}},[M,h]);var L=_.useMemo(function(){var I=T.containerWidth,j=T.containerHeight;if(I<0||j<0)return null;gT(sS(a)||sS(c),`Thewidth(%s)andheight(%s)arebothfixednumbers,
maybeyoudon'tneedtouseaResponsiveContainer.`,a,c),gT(!n||n>0,"The aspect(%s) must be greater than zero.",n);var U=sS(a)?I:a,Y=sS(c)?j:c;n&&n>0&&(U?Y=U/n:Y&&(U=Y*n),d&&Y>d&&(Y=d)),gT(U>0||Y>0,`Thewidth(%s)andheight(%s)ofchartshouldbegreaterthan0,
Formoreinformation,seehttps://radix-ui.com/primitives/docs/components/${e.docsSlug}`;return _.useEffect(()=>{t&&(document.getElementById(t)||console.error(n))},[n,t]),null},VAe="DialogDescriptionWarning",qAe=({contentRef:t,descriptionId:e})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${MG(VAe).contentName}}.`;return _.useEffect(()=>{var i;const s=(i=t.current)==null?void 0:i.getAttribute("aria-describedby");e&&s&&(document.getElementById(e)||console.warn(r))},[r,t,e]),null},GAe=wG,KAe=SG,YAe=EG,XAe=CG,QAe=RG,JAe=TG,ZAe=DG;function eRe(t){if(typeof document>"u")return;let e=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",e.appendChild(n),n.styleSheet?n.styleSheet.cssText=t:n.appendChild(document.createTextNode(t))}const OG=se.createContext({drawerRef:{current:null},overlayRef:{current:null},onPress:()=>{},onRelease:()=>{},onDrag:()=>{},onNestedDrag:()=>{},onNestedOpenChange:()=>{},onNestedRelease:()=>{},openProp:void 0,dismissible:!1,isOpen:!1,isDragging:!1,keyboardIsOpen:{current:!1},snapPointsOffset:null,snapPoints:null,handleOnly:!1,modal:!1,shouldFade:!1,activeSnapPoint:null,onOpenChange:()=>{},setActiveSnapPoint:()=>{},closeDrawer:()=>{},direction:"bottom",shouldScaleBackground:!1,setBackgroundColorOnScale:!0,noBodyStyles:!1,container:null,autoFocus:!1}),R_=()=>{const t=se.useContext(OG);if(!t)throw new Error("useDrawerContext must be used within a Drawer.Root");return t};eRe(`[data-vaul-drawer]{touch-action:none;will-change:transform;transition:transform .5s cubic-bezier(.32, .72, 0, 1);animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=open]{animation-name:slideFromBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=closed]{animation-name:slideToBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=open]{animation-name:slideFromTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=closed]{animation-name:slideToTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=open]{animation-name:slideFromLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=closed]{animation-name:slideToLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=open]{animation-name:slideFromRight}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=closed]{animation-name:slideToRight}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,100%,0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,-100%,0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(-100%,0,0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(100%,0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-overlay][data-vaul-snap-points=false]{animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-overlay][data-vaul-snap-points=false][data-state=open]{animation-name:fadeIn}[data-vaul-overlay][data-state=closed]{animation-name:fadeOut}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:0;transition:opaci
`},""):String(r.body);return{path:n,submission:{formMethod:a,formAction:o,formEncType:r.formEncType,formData:void 0,json:void 0,text:d}}}else if(r.formEncType==="application/json"){if(!ya(a))return s();try{let d=typeof r.body=="string"?JSON.parse(r.body):r.body;return{path:n,submission:{formMethod:a,formAction:o,formEncType:r.formEncType,formData:void 0,json:d,text:void 0}}}catch{return s()}}}Nt(typeof FormData=="function","FormData is not available in this environment");let c,u;if(r.formData)c=DN(r.formData),u=r.formData;else if(r.body instanceof FormData)c=DN(r.body),u=r.body;else if(r.body instanceof URLSearchParams)c=r.body,u=m4(c);else if(r.body==null)c=new URLSearchParams,u=new FormData;else try{c=new URLSearchParams(r.body),u=m4(c)}catch{return s()}let f={formMethod:a,formAction:o,formEncType:r&&r.formEncType||"application/x-www-form-urlencoded",formData:u,json:void 0,text:void 0};if(ya(f.formMethod))return{path:n,submission:f};let l=Hd(n);return e&&l.search&&N$(l.search)&&c.append("index",""),l.search="?"+c,{path:np(l),submission:f}}function u4(t,e,n){n===void 0&&(n=!1);let r=t.findIndex(s=>s.route.id===e);return r>=0?t.slice(0,n?r+1:r):t}function d4(t,e,n,r,s,i,a,o,c,u,f,l,d,m,p,h){let y=h?eo(h[1])?h[1].error:h[1].data:void 0,g=t.createURL(e.location),v=t.createURL(s),w=n;i&&e.errors?w=u4(n,Object.keys(e.errors)[0],!0):h&&eo(h[1])&&(w=u4(n,h[0]));let x=h?h[1].statusCode:void 0,A=a&&x&&x>=400,k=w.filter((E,T)=>{let{route:D}=E;if(D.lazy)return!0;if(D.loader==null)return!1;if(i)return kN(D,e.loaderData,e.errors);if(TOe(e.loaderData,e.matches[T],E)||c.some(I=>I===E.route.id))return!0;let M=e.matches[T],L=E;return f4(E,Gn({currentUrl:g,currentParams:M.params,nextUrl:v,nextParams:L.params},r,{actionResult:y,actionStatus:x,defaultShouldRevalidate:A?!1:o||g.pathname+g.search===v.pathname+v.search||g.search!==v.search||vQ(M,L)}))}),R=[];return l.forEach((E,T)=>{if(i||!n.some(j=>j.route.id===E.routeId)||f.has(T))return;let D=vf(m,E.path,p);if(!D){R.push({key:T,routeId:E.routeId,path:E.path,matches:null,match:null,controller:null});return}let M=e.fetchers.get(T),L=Uy(D,E.path),I=!1;d.has(T)?I=!1:u.has(T)?(u.delete(T),I=!0):M&&M.state!=="idle"&&M.data===void 0?I=o:I=f4(L,Gn({currentUrl:g,currentParams:e.matches[e.matches.length-1].params,nextUrl:v,nextParams:n[n.length-1].params},r,{actionResult:y,actionStatus:x,defaultShouldRevalidate:A?!1:o})),I&&R.push({key:T,routeId:E.routeId,path:E.path,matches:D,match:L,controller:new AbortController})}),[k,R]}function kN(t,e,n){if(t.lazy)return!0;if(!t.loader)return!1;let r=e!=null&&e[t.id]!==void 0,s=n!=null&&n[t.id]!==void 0;return!r&&s?!1:typeof t.loader=="function"&&t.loader.hydrate===!0?!0:!r&&!s}function TOe(t,e,n){let r=!e||n.route.id!==e.route.id,s=t[n.route.id]===void 0;return r||s}function vQ(t,e){let n=t.route.path;return t.pathname!==e.pathname||n!=null&&n.endsWith("*")&&t.params["*"]!==e.params["*"]}function f4(t,e){if(t.route.shouldRevalidate){let n=t.route.shouldRevalidate(e);if(typeof n=="boolean")return n}return e.defaultShouldRevalidate}function h4(t,e,n,r,s){var i;let a;if(t){let u=r[t];Nt(u,"No route found to patch children into: routeId = "+t),u.children||(u.children=[]),a=u.children}else a=n;let o=e.filter(u=>!a.some(f=>yQ(u,f))),c=D1(o,s,[t||"_","patch",String(((i=a)==null?void 0:i.length)||"0")],r);a.push(...c)}function yQ(t,e){return"id"in t&&"id"in e&&t.id===e.id?!0:t.index===e.index&&t.path===e.path&&t.caseSensitive===e.caseSensitive?(!t.children||t.children.length===0)&&(!e.children||e.children.length===0)?!0:t.children.every((n,r)=>{var s;return(s=e.children)==null?void 0:s.some(i=>yQ(n,i))}):!1}async function kOe(t,e,n){if(!t.lazy)return;let r=await t.lazy();if(!t.lazy)return;let s=n[t.id];Nt(s,"No route found in manifest");let i={};for(let a in r){let c=s[a]!==void 0&&a!=="hasErrorBoundary";mv(!c,'Route "'+s.id+'" has a static property "'+a+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+a+'" will be ignored.')),!c&&!eOe.has(a)&&(i[a]=r[a])}Object.assign(s,i),Object.assign(s,Gn({},e(s),{lazy:
`)){o.insertNode(document.createTextNode(i)),this.editorDiv.normalize(),a.collapseToStart();return}const{startContainer:c,startOffset:u}=o,f=[],l=[];if(c.nodeType===Node.TEXT_NODE){const g=c.parentElement;if(l.push(c.nodeValue.slice(u).replaceAll(PS,"")),g!==this.editorDiv){let v=f;for(const w of this.editorDiv.childNodes){if(w===g){v=l;continue}v.push(B(h=Mn,zc,hE).call(h,w))}}f.push(c.nodeValue.slice(0,u).replaceAll(PS,""))}else if(c===this.editorDiv){let g=f,v=0;for(const w of this.editorDiv.childNodes)v++===u&&(g=l),g.push(B(y=Mn,zc,hE).call(y,w))}$(this,qi,`${f.join(`
`)},fE=function(){const[n,r]=this.parentDimensions;let s;if(this.isAttachedToDOM)s=this.div.getBoundingClientRect();else{const{currentLayer:i,div:a}=this,o=a.style.display,c=a.classList.contains("hidden");a.classList.remove("hidden"),a.style.display="hidden",i.div.append(this.div),s=a.getBoundingClientRect(),a.remove(),a.style.display=o,a.classList.toggle("hidden",c)}this.rotation%180===this.parentRotation%180?(this.width=s.width/n,this.height=s.height/r):(this.width=s.height/n,this.height=s.width/r),this.fixAndSetPosition()},zc=new WeakSet,hE=function(n){return(n.nodeType===Node.TEXT_NODE?n.nodeValue:n.innerText).replaceAll(PS,"")},pE=function(){if(this.editorDiv.replaceChildren(),!!C(this,qi))for(const n of C(this,qi).split(`
`)){const r=document.createElement("div");r.append(n?document.createTextNode(n):document.createElement("br")),this.editorDiv.append(r)}},WZ=function(){return C(this,qi).replaceAll(""," ")},PM=function(n){return n.replaceAll(" ","")},VZ=function(n){const{value:r,fontSize:s,color:i,pageIndex:a}=C(this,$g);return this._hasBeenMoved||n.value!==r||n.fontSize!==s||n.color.some((o,c)=>o!==i[c])||n.pageIndex!==a},z(Mn,zc),He(Mn,"_freeTextDefaultContent",""),He(Mn,"_internalPadding",0),He(Mn,"_defaultColor",null),He(Mn,"_defaultFontSize",10),He(Mn,"_type","freetext"),He(Mn,"_editorType",Vt.FREETEXT);let RM=Mn;var A0,nd,fa,Zs,qZ,mE,GZ,KZ,kM;class TM{constructor(e,n=0,r=0,s=!0){z(this,Zs);z(this,A0);z(this,nd,[]);z(this,fa,[]);let i=1/0,a=-1/0,o=1/0,c=-1/0;const u=10**-4;for(const{x:y,y:g,width:v,height:w}of e){const x=Math.floor((y-n)/u)*u,A=Math.ceil((y+v+n)/u)*u,k=Math.floor((g-n)/u)*u,R=Math.ceil((g+w+n)/u)*u,E=[x,k,R,!0],T=[A,k,R,!1];C(this,nd).push(E,T),i=Math.min(i,x),a=Math.max(a,A),o=Math.min(o,k),c=Math.max(c,R)}const f=a-i+2*r,l=c-o+2*r,d=i-r,m=o-r,p=C(this,nd).at(s?-1:-2),h=[p[0],p[2]];for(const y of C(this,nd)){const[g,v,w]=y;y[0]=(g-d)/f,y[1]=(v-m)/l,y[2]=(w-m)/l}$(this,A0,{x:d,y:m,width:f,height:l,lastPoint:h})}getOutlines(){C(this,nd).sort((n,r)=>n[0]-r[0]||n[1]-r[1]||n[2]-r[2]);const e=[];for(const n of C(this,nd))n[3]?(e.push(...B(this,Zs,kM).call(this,n)),B(this,Zs,GZ).call(this,n)):(B(this,Zs,KZ).call(this,n),e.push(...B(this,Zs,kM).call(this,n)));return B(this,Zs,qZ).call(this,e)}}A0=new WeakMap,nd=new WeakMap,fa=new WeakMap,Zs=new WeakSet,qZ=function(e){const n=[],r=new Set;for(const a of e){const[o,c,u]=a;n.push([o,c,a],[o,u,a])}n.sort((a,o)=>a[1]-o[1]||a[0]-o[0]);for(let a=0,o=n.length;a<o;a+=2){const c=n[a][2],u=n[a+1][2];c.push(u),u.push(c),r.add(c),r.add(u)}const s=[];let i;for(;r.size>0;){const a=r.values().next().value;let[o,c,u,f,l]=a;r.delete(a);let d=o,m=c;for(i=[o,u],s.push(i);;){let p;if(r.has(f))p=f;else if(r.has(l))p=l;else break;r.delete(p),[o,c,u,f,l]=p,d!==o&&(i.push(d,m,o,m===c?c:u),d=o),m=m===c?u:c}i.push(d,m)}return new c3e(s,C(this,A0))},mE=function(e){const n=C(this,fa);let r=0,s=n.length-1;for(;r<=s;){const i=r+s>>1,a=n[i][0];if(a===e)return i;a<e?r=i+1:s=i-1}return s+1},GZ=function([,e,n]){const r=B(this,Zs,mE).call(this,e);C(this,fa).splice(r,0,[e,n])},KZ=function([,e,n]){const r=B(this,Zs,mE).call(this,e);for(let s=r;s<C(this,fa).length;s++){const[i,a]=C(this,fa)[s];if(i!==e)break;if(i===e&&a===n){C(this,fa).splice(s,1);return}}for(let s=r-1;s>=0;s--){const[i,a]=C(this,fa)[s];if(i!==e)break;if(i===e&&a===n){C(this,fa).splice(s,1);return}}},kM=function(e){const[n,r,s]=e,i=[[n,r,s]],a=B(this,Zs,mE).call(this,s);for(let o=0;o<a;o++){const[c,u]=C(this,fa)[o];for(let f=0,l=i.length;f<l;f++){const[,d,m]=i[f];if(!(u<=d||m<=c)){if(d>=c){if(m>u)i[f][1]=u;else{if(l===1)return[];i.splice(f,1),f--,l--}continue}i[f][2]=c,m>u&&i.push([n,u,m])}}}return i};class YZ{toSVGPath(){throw new Error("Abstract method `toSVGPath` must be implemented.")}get box(){throw new Error("Abstract getter `box` must be implemented.")}serialize(e,n){throw new Error("Abstract method `serialize` must be implemented.")}get free(){return this instanceof NM}}var R0,jg;class c3e extends YZ{constructor(n,r){super();z(this,R0);z(this,jg);$(this,jg,n),$(this,R0,r)}toSVGPath(){const n=[];for(const r of C(this,jg)){let[s,i]=r;n.push(`M${s}${i}`);for(let a=2;a<r.length;a+=2){const o=r[a],c=r[a+1];o===s?(n.push(`V${c}`),i=c):c===i&&(n.push(`H${o}`),s=o)}n.push("Z")}return n.join(" ")}serialize([n,r,s,i],a){const o=[],c=s-n,u=i-r;for(const f of C(this,jg)){const l=new Array(f.length);for(let d=0;d<f.length;d+=2)l[d]=n+f[d]*c,l[d+1]=i-f[d+1]*u;o.push(l)}return o}get box(){return C(this,R0)}}R0=new WeakMap,jg=new WeakMap;var sl,_c,Fg,zg,il,Bt,vh,yh,P0,T0,Bg,Ug,rd,k0,gC,vC,D0,DM;const Zl=class Zl{constructor({x:e,y:n},r,s,i,a,o=0){z(this,D0);z(this,sl);z(this,_c,[]);z(this,Fg);z(this,zg);z(this,il,[]);z(this,Bt,new Float64Array(18));z(this,vh);z(this,yh);z(this,P0);z(this,T0);z(this,Bg);z(this,Ug);z(this,rd,[]);$(this,sl,r),$(this,
`).forEach(function(a){s=a.indexOf(":"),n=a.substring(0,s).trim().toLowerCase(),r=a.substring(s+1).trim(),!(!n||e[n]&&vUe[n])&&(n==="set-cookie"?e[n]?e[n].push(r):e[n]=[r]:e[n]=e[n]?e[n]+", "+r:r)}),e},qU=Symbol("internals");function Ny(t){return t&&String(t).trim().toLowerCase()}function AE(t){return t===!1||t==null?t:ve.isArray(t)?t.map(AE):String(t)}function bUe(t){const e=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(t);)e[r[1]]=r[2];return e}const wUe=t=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim());functionxk(t,e,n,r,s){if(ve.isFunction(r))returnr.call(this,e,n);if(s&&(e=n),!!ve.isString(e)){if(ve.isString(r))returne.indexOf(r)!==-1;if(ve.isRegExp(r))returnr.test(e)}}function_Ue(t){returnt.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,n,r)=>n.toUpperCase()+r)}functionxUe(t,e){constn=ve.toCamelCase(" "+e);["get","set","has"].forEach(r=>{Object.defineProperty(t,r+n,{value:function(s,i,a){returnthis[r].call(this,e,s,i,a)},configurable:!0})})}letPi=class{constructor(e){e&&this.set(e)}set(e,n,r){consts=this;functioni(o,c,u){constf=Ny(c);if(!f)thrownewError("header name must be a non-empty string");constl=ve.findKey(s,f);(!l||s[l]===void0||u===!0||u===void0&&s[l]!==!1)&&(s[l||c]=AE(o))}consta=(o,c)=>ve.forEach(o,(u,f)=>i(u,f,c));if(ve.isPlainObject(e)||einstanceofthis.constructor)a(e,n);elseif(ve.isString(e)&&(e=e.trim())&&!wUe(e))a(yUe(e),n);elseif(ve.isHeaders(e))for(const[o,c]ofe.entries())i(c,o,r);elsee!=null&&i(n,e,r);returnthis}get(e,n){if(e=Ny(e),e){constr=ve.findKey(this,e);if(r){consts=this[r];if(!n)returns;if(n===!0)returnbUe(s);if(ve.isFunction(n))returnn.call(this,s,r);if(ve.isRegExp(n))returnn.exec(s);thrownewTypeError("parser must be boolean|regexp|function")}}}has(e,n){if(e=Ny(e),e){constr=ve.findKey(this,e);return!!(r&&this[r]!==void0&&(!n||xk(this,this[r],r,n)))}return!1}delete(e,n){constr=this;lets=!1;functioni(a){if(a=Ny(a),a){consto=ve.findKey(r,a);o&&(!n||xk(r,r[o],o,n))&&(deleter[o],s=!0)}}returnve.isArray(e)?e.forEach(i):i(e),s}clear(e){constn=Object.keys(this);letr=n.length,s=!1;for(;r--;){consti=n[r];(!e||xk(this,this[i],i,e,!0))&&(deletethis[i],s=!0)}returns}normalize(e){constn=this,r={};returnve.forEach(this,(s,i)=>{consta=ve.findKey(r,i);if(a){n[a]=AE(s),deleten[i];return}consto=e?_Ue(i):String(i).trim();o!==i&&deleten[i],n[o]=AE(s),r[o]=!0}),this}concat(...e){returnthis.constructor.concat(this,...e)}toJSON(e){constn=Object.create(null);returnve.forEach(this,(r,s)=>{r!=null&&r!==!1&&(n[s]=e&&ve.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){returnObject.entries(this.toJSON())[Symbol.iterator]()}toString(){returnObject.entries(this.toJSON()).map(([e,n])=>e+": "+n).join(`
`):" "+JU(i[0]):"as no adapter specified";throw new _t("There is no suitable adapter to dispatch the request "+a,"ERR_NOT_SUPPORT")}return r},adapters:aO};function Ek(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new Hv(null,t)}function ZU(t){return Ek(t),t.headers=Pi.from(t.headers),t.data=Sk.call(t,t.transformRequest),["post","put","patch"].indexOf(t.method)!==-1&&t.headers.setContentType("application/x-www-form-urlencoded",!1),mte.getAdapter(t.adapter||q_.adapter)(t).then(function(r){return Ek(t),r.data=Sk.call(t,t.transformResponse,r),r.headers=Pi.from(r.headers),r},function(r){return cte(r)||(Ek(t),r&&r.response&&(r.response.data=Sk.call(t,t.transformResponse,r.response),r.response.headers=Pi.from(r.response.headers))),Promise.reject(r)})}const gte="1.8.4",pR={};["object","boolean","number","function","string","symbol"].forEach((t,e)=>{pR[t]=function(r){return typeof r===t||"a"+(e<1?"n ":" ")+t}});const eH={};pR.transitional=function(e,n,r){function s(i,a){return"[Axios v"+gte+"] Transitional option '"+i+"'"+a+(r?". "+r:"")}return(i,a,o)=>{if(e===!1)throw new _t(s(a," has been removed"+(n?" in "+n:"")),_t.ERR_DEPRECATED);return n&&!eH[a]&&(eH[a]=!0,console.warn(s(a," has been deprecated since v"+n+" and will be removed in the near future"))),e?e(i,a,o):!0}};pR.spelling=function(e){return(n,r)=>(console.warn(`${r}islikelyamisspellingof${e}`),!0)};function UUe(t,e,n){if(typeof t!="object")throw new _t("options must be an object",_t.ERR_BAD_OPTION_VALUE);const r=Object.keys(t);let s=r.length;for(;s-- >0;){const i=r[s],a=e[i];if(a){const o=t[i],c=o===void 0||a(o,i,t);if(c!==!0)throw new _t("option "+i+" must be "+c,_t.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new _t("Unknown option "+i,_t.ERR_BAD_OPTION)}}const RE={assertOptions:UUe,validators:pR},Wa=RE.validators;let jh=class{constructor(e){this.defaults=e,this.interceptors={request:new VU,response:new VU}}async request(e,n){try{return await this._request(e,n)}catch(r){if(r instanceof Error){let s={};Error.captureStackTrace?Error.captureStackTrace(s):s=new Error;const i=s.stack?s.stack.replace(/^.+\n/,""):"";try{r.stack?i&&!String(r.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(r.stack+=`
Ifyoucontinue,youwilllosethechanges.`,confirm_text:"Continue",cancel_text:"Cancel"}},main_menu:{toggle_navigation:"Toggle navigation menu",settings:"Settings",catalog:"Catalog",quotes:"Quotes",search_placeholder:"Search products, quotes, etc.",user:{user_menu:"User menu",my_account:"My account",profile:"Profile",settings:"Settings",support:"Support",logout:"Logout"},logout_dialog:{title:"Log out",description:"Are you sure you want to log out?",confirm_label:"Log out",cancel_label:"Cancel"}},login_page:{title:"Quoting tool for distributors",description:"Enter your email address and password to login",email_label:"Email",email_placeholder:"myemail@sample.com",password_label:"Password",forgotten_password:"Forgot your password?",become_dealer:"Do you want to become a Uecko partner?",contact_us:"Contact us",login:"Log in",invalid_credentials:"The email address or password is incorrect.",validation:{email_required:"Email is required.",email_invalid:"Enter a valid email address.",password_required:"Password is required.",password_min:"Password must contain at least {{count}} characters.",password_alphanum:"Password may only contain letters and numbers."}},dashboard:{welcome:"Welcome"},catalog:{list:{title:"Catalog of articles",empty_state:{subtitle:"Start by loading catalog items"},columns:{description:"Description",points:"Points",retail_price:"Retail price",quantity:"Quantity"}}},quotes:{list:{title:"Quotes",subtitle:"",tabs_title:"Statuses",select_status:"Select status",preview_aria:"Show quote preview",empty_state:{subtitle:"Start by creating a quote"},status_help:{title:"Quote status help",intro:"A quote status indicates its current position in the business process.",possible:"The possible statuses are:",outro:"Use these statuses to track quotes efficiently and improve your sales process. The Archived status helps keep history without interfering with active quotes."},tabs:{all:"All",draft:"Draft",ready:"Ready",delivered:"Delivered",accepted:"Accepted",rejected:"Rejected",archived:"Archived"},columns:{date:"Date",date_sent:"Sent to Uecko",reference:"Reference",status:"Status",customer_reference:"Customer Ref.",customer_information:"Customer",total_price:"Total amount"},resume:{title:"Quote",tabs:{resume:"Summary",preview:"Preview"},quote_information:"Quote Information",customer_information:"Customer Information",price_information:"Quote totals",select_quote:"Select a quote"}},notifications:{created:"Quote created",saved:"Quote saved",saving:"Saving quote"},pdf_generation:{title:"Generating PDF",error:"Error generating PDF",progress:"Progress: {{percentage}}%",elapsed:"Elapsed time: {{elapsed}} seconds",remaining:"Estimated time remaining: {{estimatedTime}} seconds",cancel:"Cancel generation"},create:{title:"New quote",form_groups:{general:{title:"General Data",desc:"General information and the quote's customer"},status:{title:"Status",desc:"Quote status"},documents:{title:"Attached Documents",desc:"Attach documents such as photos, drawings, sketches, etc. to your quotation.",images:"Images"}}},edit:{title:"Quote",buttons:{save_quote:"Save quote"}},duplicate_action:{toast_success:"Quote duplicated"},downloading_dialog:{title:"Downloading quote",description:"Please wait while your quotation is generated and downloaded in PDF format...",progress:{label:"Download is in {{status}}",status_in_progress:"in progress",status_stopped:"stopped"},cancel_button:"Cancel the download",toast_success:"Quote downloaded",error:"The quote could not be downloaded. Please try again."},catalog_picker_dialog:{title:"Select catalog items",description:"To complete your quote, you can add items from the catalog.",toast_article_added:"Catalog item added:"},blocks_picker_dialog:{title:"Select a text block",description:"To help complete your quote, you can add predefined text blocks from this list.",toast_article_added:"Text block added:"},quote_sent_to_editor:{trigger_button:"Send to Uecko",title:"Send quote to Uecko",description:"Do you want to send this quote to Uecko? This action cannot be undone.",toast_status_changed:"Quote sent to Uecko"
zipcodeandcityorstate...`},payment_method:{label:"Payment method",placeholder:"",desc:"Method of payment for this quote"},notes:{label:"Notes",placeholder:"",desc:"Quote's notes"},validity:{label:"Validity time",placeholder:"",desc:"Quote's validity time"},subtotal_price:{label:"Subtotal",placeholder:"",desc:"Quote subtotal"},discount:{label:"Discount (%)",placeholder:"",desc:"Percentage discount"},discount_value:{label:"Discount ({{value}}%)",placeholder:"",desc:"Percentage discount"},discount_price:{label:"Discount amount",placeholder:"",desc:"Discount amount"},before_tax_price:{label:"Taxable amount",placeholder:"",desc:"Taxable amount"},tax:{label:"Tax (%)",placeholder:"",desc:"Percentage Tax"},tax_value:{label:"{{label}} ({{value}}%)",placeholder:"",desc:"Percentage Tax"},tax_price:{label:"Tax amount",placeholder:"",desc:"Tax amount"},total_price:{label:"Total price",placeholder:"",desc:"Quote total price"},items:{quantity:{label:"Quantity",placeholder:"",desc:""},description:{label:"Description",placeholder:"",desc:""},unit_price:{label:"Unit price",placeholder:"",desc:"Item unit price"},subtotal_price:{label:"Subtotal",placeholder:"",desc:""},discount:{label:"Discount (%)",placeholder:"",desc:"Percentage discount"},total_price:{label:"Total price",placeholder:"",desc:"Total price with percentage discount"}}}},settings:{edit:{title:"Settings",tabs:{profile:"Profile settings",quotes:"Quote settings",legal:"Legal settings"}},form_fields:{language:{label:"Language",placeholder:"Select a language",desc:"Preferred language for the interface",options:{es:"Spanish",en:"English",fr:"French"}},logo:{label:"Logo",desc:"This logo will appear in PDF-exported proposals",requirements:"JPG or PNG files are allowed. The logo dimensions must be 200x100 pixels or proportional.",upload:"Upload logo",invalid_format:"Only JPG or PNG files are allowed",invalid_dimensions:"The logo dimensions must be 200x100 pixels or proportional."},contact_information:{label:"Your contact information",placeholder:"",desc:"Your contact information as a dealer that will appear on the quotes given to your customers."},default_tax:{label:"Default tax (%)",placeholder:"",desc:"Default tax rate for your quotes"},default_tax_label:{placeholder:"% VAT",desc:"Name or label shown alongside the tax"},default_show_line_discount_column:{label:"Show discount column by default",desc:"New quotes will initially show the discount column in their lines. You can change this option later for each quote."},default_legal_terms:{label:"Legal terms",placeholder:"",desc:"Legal text to include in all new quotes"},default_payment_method:{label:"Payment method",placeholder:"",desc:"Default payment method to be used for new quotes"},default_notes:{label:"Notes",placeholder:"",desc:"Default notes to be used for new quotes"},default_quote_validity:{label:"Quote validity",placeholder:"",desc:"Default validity time to be used for new quotes"}},notifications:{saved:"Settings saved",saving:"Saving settings"}},support:{modal:{title:"Send an issue",subtitle:"Use this form to report any problem you encountered while using the application. Our development team will review your issue and try to resolve it.",open:"Open support window",placeholder:"Describe the issue here...",submit:"Send issue",validation:{empty:"Write something before sending",min:"The text is too short. It must contain at least 10 characters",max:"The text is too long.",required:"A description is required"},notifications:{sent_title:"Issue sent",sent_description:"The issue was sent successfully",error_title:"Sending error",error_description:"The issue could not be sent. Please try again."},cancel_confirmation:{title:"Are you sure you want to cancel?",description:"You have entered text in the description field. Closing the window will discard your unsaved changes.",back:"Return to form",confirm:"Yes, close"}},form_fields:{}},app:{title:"Uecko quoting tool",javascript_required:"You need to enable JavaScript to use this application."},error_page:{title:"Page not found",description:"The page you are looking for does not ex
Sicontinúa,perderáloscambios.`,confirm_text:"Continuar",cancel_text:"No continuar"}},main_menu:{toggle_navigation:"Alternar el menú de navegación",settings:"Ajustes",catalog:"Catálogo",quotes:"Cotizaciones",search_placeholder:"Buscar productos, cotizaciones, etc...",user:{user_menu:"Menú del usuario",my_account:"Mi cuenta",profile:"Perfil",settings:"Ajustes",support:"Soporte",logout:"Salir"},logout_dialog:{title:"Salir de la cuenta",description:"¿Desea salir de su cuenta?",confirm_label:"Salir",cancel_label:"Cancelar"}},login_page:{title:"Presupuestador para distribuidores",description:"Introduzca su dirección de correo electrónico y contraseña para acceder",email_label:"Email",email_placeholder:"micorreo@ejemplo.com",password_label:"Contraseña",forgotten_password:"¿Has olvidado tu contraseña?",become_dealer:"¿Quieres ser distribuidor de Uecko?",contact_us:"Contacta con nosotros",login:"Entrar",invalid_credentials:"El correo electrónico o la contraseña no son correctos.",validation:{email_required:"El correo electrónico es obligatorio.",email_invalid:"Introduce un correo electrónico válido.",password_required:"La contraseña es obligatoria.",password_min:"La contraseña debe tener al menos {{count}} caracteres.",password_alphanum:"La contraseña solo puede contener letras y números."}},dashboard:{welcome:"Bienvenido"},catalog:{list:{title:"Catálogo de artículos",empty_state:{subtitle:"Empieza cargando los artículos del catálogo"},columns:{description:"Descripción",points:"Puntos",retail_price:"PVP",quantity:"Cantidad"}}},quotes:{list:{title:"Cotizaciones",subtitle:"",tabs_title:"Estados",select_status:"Seleccionar estado",preview_aria:"Mostrar vista previa de la cotización",empty_state:{subtitle:"Empieza creando alguna cotización"},status_help:{title:"Ayuda sobre el estado de las cotizaciones",intro:"El estado de una cotización indica su posición actual en el proceso de negocio.",possible:"Los estados posibles son:",outro:"Utiliza estos estados para hacer un seguimiento eficiente de tus cotizaciones y optimizar tu proceso de ventas. El estado Archivado ayuda a conservar el historial sin interferir con las cotizaciones activas."},tabs:{all:"Todas",draft:"Borradores",ready:"Preparados",delivered:"Entregado",accepted:"Aceptados",rejected:"Rechazados",archived:"Archivados"},columns:{date:"Fecha",date_sent:"Enviado a Uecko",reference:"Referencia",status:"Estado",customer_reference:"Ref. cliente",customer_information:"Cliente",total_price:"Imp. total"},resume:{title:"Cotización",tabs:{resume:"Resumen",preview:"Previsualización"},quote_information:"Información",customer_information:"Cliente",price_information:"Importes",select_quote:"Selecciona una cotización"}},notifications:{created:"Cotización creada",saved:"Cotización guardada",saving:"Guardando cotización"},pdf_generation:{title:"Generando PDF",error:"Error al generar el PDF",progress:"Progreso: {{percentage}}%",elapsed:"Tiempo transcurrido: {{elapsed}} segundos",remaining:"Tiempo estimado restante: {{estimatedTime}} segundos",cancel:"Cancelar generación"},create:{title:"Nueva cotización",form_groups:{general:{title:"Datos generales",desc:"Datos generales y cliente al que va la cotización"},status:{title:"Estado",desc:"Estado de la cotización"},documents:{title:"Documentos",desc:"Añada adjuntar con su cotización documentos como fotos, planos, croquis, etc.",images:"Imágenes"}}},edit:{title:"Cotización",buttons:{save_quote:"Guardar cotización"}},duplicate_action:{toast_success:"Cotización duplicada"},downloading_dialog:{title:"Descargando cotización",description:"Espere mientras se genera la cotización y se descarga en formato PDF...",progress:{label:"La descarga está {{status}}",status_in_progress:"en marcha",status_stopped:"parada"},cancel_button:"Cancelar la descarga",toast_success:"Cotización descargada",error:"No se ha podido descargar el presupuesto. Vuelve a intentarlo."},catalog_picker_dialog:{title:"Seleccionar artículos del catálogo",description:"Para rellenar su cotización, puede añadir artículos del cat
Códigopostalyciudad...`},payment_method:{label:"Forma de pago",placeholder:"",desc:"Forma de pago que se utilizará en esta cotización"},notes:{label:"Notas",placeholder:"",desc:"Notas a incluir en la cotización"},validity:{label:"Validez de la cotización",placeholder:"",desc:"Validez de la cotización"},subtotal_price:{label:"Importe neto",placeholder:"",desc:"Subtotal del presupuesto"},discount:{label:"Descuento (%)",placeholder:"",desc:"Porcentaje de descuento"},discount_value:{label:"Descuento ({{value}}%)",placeholder:"",desc:"Porcentaje de descuento"},discount_price:{label:"Imp. descuento",placeholder:"",desc:"Importe del descuento"},before_tax_price:{label:"Base imponible",placeholder:"",desc:"Base imponible"},tax:{label:"Impuesto (%)",placeholder:"",desc:"Porcentaje de impuesto"},tax_value:{label:"{{label}} ({{value}}%)",placeholder:"",desc:"Porcentaje de impuesto"},tax_price:{label:"Imp. impuesto",placeholder:"",desc:"Importe del impuesto"},total_price:{label:"Imp. total",placeholder:"",desc:"Importe total"},items:{quantity:{label:"Cantidad",placeholder:"",desc:""},description:{label:"Descripción",placeholder:"",desc:""},unit_price:{label:"Imp. unitario",placeholder:"",desc:"Importe unitario del artículo"},subtotal_price:{label:"Subtotal",placeholder:"",desc:""},discount:{label:"Dto (%)",placeholder:"",desc:"Porcentaje de descuento"},total_price:{label:"Imp. total",placeholder:"",desc:"Importe total con el descuento ya aplicado"}}}},settings:{edit:{title:"Ajustes",tabs:{profile:"Ajustes de perfil",quotes:"Ajustes para cotizaciones",legal:"Ajustes legales"}},form_fields:{language:{label:"Idioma",placeholder:"Selecciona un idioma",desc:"Idioma preferido para la interfaz",options:{es:"Español",en:"Inglés",fr:"Francés"}},logo:{label:"Logotipo",desc:"Este logotipo aparecerá en las propuestas exportadas en PDF",requirements:"Se permiten ficheros JPG o PNG. Las dimensiones del logotipo deben ser 200x100 píxeles o proporcionales.",upload:"Subir logotipo",invalid_format:"Sólo se permiten ficheros JPG o PNG",invalid_dimensions:"Las dimensiones del logotipo deben ser 200x100 píxeles o proporcionales."},contact_information:{label:"Información de contacto",placeholder:"",desc:"Esta información de contacto aparecerá en las cotizaciones que entregue a sus clientes."},default_tax:{label:"Impuesto por defecto (%)",placeholder:"",desc:"Porcentaje de impuesto por defecto en las cotizaciones"},default_tax_label:{placeholder:"% IVA",desc:"Nombre o etiqueta que se mostrará junto al impuesto"},default_show_line_discount_column:{label:"Mostrar columna descuento por defecto",desc:"Los nuevos presupuestos mostrarán inicialmente la columna de descuento en las líneas. Podrás cambiar esta opción posteriormente en cada presupuesto."},default_legal_terms:{label:"Cláusulas legales",placeholder:"",desc:"Texto de texto legal que desee incluir en todas las cotizaciones nuevas"},default_payment_method:{label:"Forma de pago",placeholder:"",desc:"Texto para la forma de pago que se utilizará en las cotizaciones nuevas"},default_notes:{label:"Notas",placeholder:"",desc:"Notas a incluir en todas las cotizaciones nuevas"},default_quote_validity:{label:"Validez por defecto",placeholder:"",desc:"Texto para indicar el tiempo de validez de la cotización"}},notifications:{saved:"Ajustes guardados",saving:"Guardando ajustes"}},support:{modal:{title:"Enviar una incidencia",subtitle:"Utiliza este formulario para informar sobre cualquier problema que hayas encontrado mientras usabas la aplicación. Nuestro equipo de desarrollo revisará tu incidencia y tratará de resolverla.",open:"Abrir ventana de soporte",placeholder:"Describe la incidencia aquí...",submit:"Enviar incidencia",validation:{empty:"Debe escribir algo antes de enviar",min:"El texto es demasiado corto. Debe tener al menos 10 caracteres",max:"El texto es demasiado largo.",required:"La descripción es requerida"},notifications:{sent_title:"Incidencia enviada",sent_description:"La incidencia se ha enviado correctamente",error_title:"Error en el envío",error_descr
Sivouscontinuez,vouslesperdrez.`,confirm_text:"Continuer",cancel_text:"Ne pas continuer"}},main_menu:{toggle_navigation:"Basculer le menu de navigation",settings:"Paramètres",catalog:"Catalogue",quotes:"Devis",search_placeholder:"Rechercher des produits, devis, etc.",user:{user_menu:"Menu utilisateur",my_account:"Mon compte",profile:"Profil",settings:"Paramètres",support:"Assistance",logout:"Se déconnecter"},logout_dialog:{title:"Se déconnecter",description:"Voulez-vous vous déconnecter ?",confirm_label:"Se déconnecter",cancel_label:"Annuler"}},login_page:{title:"Outil de devis pour distributeurs",description:"Saisissez votre adresse e-mail et votre mot de passe pour accéder",email_label:"E-mail",email_placeholder:"monemail@exemple.com",password_label:"Mot de passe",forgotten_password:"Mot de passe oublié ?",become_dealer:"Vous souhaitez devenir distributeur Uecko ?",contact_us:"Contactez-nous",login:"Se connecter",invalid_credentials:"L’adresse e-mail ou le mot de passe est incorrect.",validation:{email_required:"L’adresse e-mail est obligatoire.",email_invalid:"Saisissez une adresse e-mail valide.",password_required:"Le mot de passe est obligatoire.",password_min:"Le mot de passe doit contenir au moins {{count}} caractères.",password_alphanum:"Le mot de passe ne peut contenir que des lettres et des chiffres."}},dashboard:{welcome:"Bienvenue"},catalog:{list:{title:"Catalogue d’articles",empty_state:{subtitle:"Commencez par charger les articles du catalogue"},columns:{description:"Description",points:"Points",retail_price:"Prix public",quantity:"Quantité"}}},quotes:{list:{title:"Devis",subtitle:"",tabs_title:"États",select_status:"Sélectionner un état",preview_aria:"Afficher l’aperçu du devis",empty_state:{subtitle:"Commencez par créer un devis"},status_help:{title:"Aide sur le statut des devis",intro:"Le statut d’un devis indique sa position actuelle dans le processus commercial.",possible:"Les statuts possibles sont :",outro:"Utilisez ces statuts pour suivre efficacement vos devis et optimiser votre processus de vente. Le statut Archivé permet de conserver l’historique sans interférer avec les devis actifs."},tabs:{all:"Tous",draft:"Brouillons",ready:"Prêts",delivered:"Livrés",accepted:"Acceptés",rejected:"Refusés",archived:"Archivés"},columns:{date:"Date",date_sent:"Envoyé à Uecko",reference:"Référence",status:"État",customer_reference:"Réf. client",customer_information:"Client",total_price:"Montant total"},resume:{title:"Devis",tabs:{resume:"Résumé",preview:"Aperçu"},quote_information:"Informations",customer_information:"Client",price_information:"Montants",select_quote:"Sélectionnez un devis"}},notifications:{created:"Devis créé",saved:"Devis enregistré",saving:"Enregistrement du devis"},pdf_generation:{title:"Génération du PDF",error:"Erreur lors de la génération du PDF",progress:"Progression : {{percentage}}%",elapsed:"Temps écoulé : {{elapsed}} secondes",remaining:"Temps restant estimé : {{estimatedTime}} secondes",cancel:"Annuler la génération"},create:{title:"Nouveau devis",form_groups:{general:{title:"Données générales",desc:"Données générales et client auquel le devis est destiné"},status:{title:"État",desc:"État du devis"},documents:{title:"Documents",desc:"Ajoutez à votre devis des documents tels que photos, plans, croquis, etc.",images:"Images"}}},edit:{title:"Devis",buttons:{save_quote:"Enregistrer le devis"}},duplicate_action:{toast_success:"Devis dupliqué"},downloading_dialog:{title:"Téléchargement du devis",description:"Veuillez patienter pendant la génération et le téléchargement du devis au format PDF…",progress:{label:"Le téléchargement est {{status}}",status_in_progress:"en cours",status_stopped:"arrêté"},cancel_button:"Annuler le téléchargement",toast_success:"Devis téléchargé",error:"Le devis n’a pas pu être téléchargé. Veuillez réessayer."},catalog_picker_dialog:{title:"Sélectionner des articles du catalogue",description:"Pour compléter votre devis, vous pouvez ajouter des articles du catalogue.",t
Codepostaletville…`},payment_method:{label:"Mode de paiement",placeholder:"",desc:"Mode de paiement utilisé pour ce devis"},notes:{label:"Notes",placeholder:"",desc:"Notes à inclure dans le devis"},validity:{label:"Validité du devis",placeholder:"",desc:"Validité de ce devis"},subtotal_price:{label:"Montant net",placeholder:"",desc:"Sous-total du devis"},discount:{label:"Remise (%)",placeholder:"",desc:"Pourcentage de remise"},discount_value:{label:"Remise ({{value}}%)",placeholder:"",desc:"Pourcentage de remise"},discount_price:{label:"Montant de la remise",placeholder:"",desc:"Montant de la remise"},before_tax_price:{label:"Base imposable",placeholder:"",desc:"Base imposable"},tax:{label:"Taxe (%)",placeholder:"",desc:"Pourcentage de taxe"},tax_value:{label:"{{label}} ({{value}}%)",placeholder:"",desc:"Pourcentage de taxe"},tax_price:{label:"Montant de la taxe",placeholder:"",desc:"Montant de la taxe"},total_price:{label:"Montant total",placeholder:"",desc:"Montant total"},items:{quantity:{label:"Quantité",placeholder:"",desc:""},description:{label:"Description",placeholder:"",desc:""},unit_price:{label:"Prix unitaire",placeholder:"",desc:"Prix unitaire de l’article"},subtotal_price:{label:"Sous-total",placeholder:"",desc:""},discount:{label:"Remise (%)",placeholder:"",desc:"Pourcentage de remise"},total_price:{label:"Montant total",placeholder:"",desc:"Montant total après application de la remise"}}}},settings:{edit:{title:"Paramètres",tabs:{profile:"Paramètres du profil",quotes:"Paramètres des devis",legal:"Paramètres juridiques"}},form_fields:{language:{label:"Langue",placeholder:"Sélectionnez une langue",desc:"Langue préférée de l’interface",options:{es:"Espagnol",en:"Anglais",fr:"Français"}},logo:{label:"Logo",desc:"Ce logo apparaîtra dans les propositions exportées au format PDF",requirements:"Les fichiers JPG ou PNG sont acceptés.",upload:"Téléverser le logo",invalid_format:"Seuls les fichiers JPG ou PNG sont acceptés",invalid_dimensions:"Les dimensions du logo sont invalides."},contact_information:{label:"Informations de contact",placeholder:"",desc:"Ces coordonnées apparaîtront dans les devis remis à vos clients."},default_tax:{label:"Taxe par défaut (%)",placeholder:"",desc:"Pourcentage de taxe par défaut dans les devis"},default_tax_label:{placeholder:"% TVA",desc:"Libellé affiché à côté de la taxe"},default_show_line_discount_column:{label:"Afficher la colonne de remise par défaut",desc:"Les nouveaux devis afficheront initialement la colonne de remise."},default_legal_terms:{label:"Clauses juridiques",placeholder:"",desc:"Texte juridique à inclure dans les nouveaux devis"},default_payment_method:{label:"Mode de paiement",placeholder:"",desc:"Texte utilisé dans les nouveaux devis"},default_notes:{label:"Notes",placeholder:"",desc:"Notes à inclure dans les nouveaux devis"},default_quote_validity:{label:"Validité par défaut",placeholder:"",desc:"Durée de validité du devis"}},notifications:{saved:"Paramètres enregistrés",saving:"Enregistrement des paramètres"}},support:{modal:{title:"Envoyer une incidence",subtitle:"Utilisez ce formulaire pour signaler un problème rencontré pendant l’utilisation de l’application.",open:"Ouvrir la fenêtre d’assistance",placeholder:"Décrivez l’incidence ici…",submit:"Envoyer l’incidence",validation:{empty:"Vous devez écrire quelque chose avant d’envoyer",min:"Le texte est trop court.",max:"Le texte est trop long.",required:"La description est obligatoire"},notifications:{sent_title:"Incident envoyé",sent_description:"L’incident a été envoyé correctement",error_title:"Erreur d’envoi",error_description:"L’incident n’a pas pu être envoyé. Veuillez réessayer."},cancel_confirmation:{title:"Voulez-vous annuler ?",description:"Vous perdrez les modifications non enregistrées.",back:"Retour au formulaire",confirm:"Oui, fermer"}},form_fields:{}},app:{title:"Outil de devis Uecko",javascript_required:"Vous devez activer JavaScript pour utiliser cette application."},error_page:{title:"Page introuvable",desc