diff --git a/dependabot/npm_and_yarn/eslint-plugins-5b4dfef153/assets/index-DJgoqBis.js b/dependabot/npm_and_yarn/eslint-plugins-5b4dfef153/assets/index-BYgHoM6D.js similarity index 98% rename from dependabot/npm_and_yarn/eslint-plugins-5b4dfef153/assets/index-DJgoqBis.js rename to dependabot/npm_and_yarn/eslint-plugins-5b4dfef153/assets/index-BYgHoM6D.js index a365224b..e76949b2 100644 --- a/dependabot/npm_and_yarn/eslint-plugins-5b4dfef153/assets/index-DJgoqBis.js +++ b/dependabot/npm_and_yarn/eslint-plugins-5b4dfef153/assets/index-BYgHoM6D.js @@ -732,7 +732,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho top: -9999px; z-index: 999999; display: none; - `,document.body.append(t.touchedNode),NB(e.targetData.node.el,t.touchedNode),t.touchedNode.style.display="none",document.addEventListener("contextmenu",BB)}function vLe(e,t){const n=e.targetData.parent.data.config;n.longTouch&&(t.longTouchTimeout=setTimeout(()=>{t&&(t.longTouch=!0,n.longTouchClass&&e.e.cancelable&&yl(t.draggedNodes.map(r=>r.el),n.longTouchClass),e.e.preventDefault())},n.longTouchTimeout||200))}function gLe(e){!Ge||!("touchedNode"in Ge)||CLe(e,Ge)}function yLe(e,t){t.longTouchClass&&Sy(e.draggedNodes.map(n=>n.el),t==null?void 0:t.longTouchClass),t.touchDraggingClass&&yl([e.touchedNode],t.touchDraggingClass),t.touchDropZoneClass&&yl(e.draggedNodes.map(n=>n.el),t.touchDropZoneClass)}function bLe(e){if(!e||!e.scrollParent)return;const{x:t,y:n,width:r,height:i}=e.scrollParent.getBoundingClientRect(),{x:o,y:a,scrollOutside:s}=e.lastParent.data.config.scrollBehavior;return{state:e,xThresh:o,yThresh:a,scrollOutside:s,scrollParent:e.scrollParent,x:t,y:n,width:r,height:i}}function _Le(e){const t=bLe(Ge);if(t)switch(e){case"down":return SLe(t.state,t);case"up":return OLe(t.state,t);case"right":return xLe(t.state,t);case"left":return wLe(t.state,t)}}function xLe(e,t){const n=t.scrollParent.clientWidth+t.x-e.coordinates.x;if(!(!t.scrollOutside&&n<0)&&n<(1-t.xThresh)*t.scrollParent.clientWidth&&!(t.scrollParent.scrollLeft+t.scrollParent.clientWidth>=t.scrollParent.scrollWidth))return e}function wLe(e,t){const n=t.scrollParent.clientWidth+t.x-e.coordinates.x;if(!(!t.scrollOutside&&n>t.scrollParent.clientWidth)&&n>t.xThresh*t.scrollParent.clientWidth&&t.scrollParent.scrollLeft!==0)return e}function OLe(e,t){const n=t.scrollParent.clientHeight+t.y-e.coordinates.y;if(!(!t.scrollOutside&&n>t.scrollParent.clientHeight)&&n>t.yThresh*t.scrollParent.clientHeight&&t.scrollParent.scrollTop!==0)return e}function SLe(e,t){const n=t.scrollParent.clientHeight+t.y-e.coordinates.y;if(!(!t.scrollOutside&&n<0)&&n<(1-t.yThresh)*t.scrollParent.clientHeight&&!(t.scrollParent.scrollTop+t.scrollParent.clientHeight>=t.scrollParent.scrollHeight))return e}function ELe(e,t){t.touchMoving=!0,t.touchedNode.style.display=t.touchedNodeDisplay||"";const{x:n,y:r}=Cl(e.e);t.coordinates.y=r,t.coordinates.x=n;const i=t.touchStartLeft??0,o=t.touchStartTop??0;t.touchedNode.style.left=`${n-i}px`,t.touchedNode.style.top=`${r-o}px`,yLe(t,e.targetData.parent.data.config)}function CLe(e,t){if(e.targetData.parent.data.config.longTouch&&!t.longTouch){clearTimeout(t.longTouchTimeout);return}e.e.cancelable&&e.e.preventDefault(),ELe(e,t),cb();const n=qMe(e);if(!n)return;const r={e:e.e,targetData:n};"node"in n?n.node.el.dispatchEvent(new CustomEvent("touchOverNode",{detail:r})):n.parent.el.dispatchEvent(new CustomEvent("touchOverParent",{detail:r}))}function cb(){for(const e of Object.keys(SR)){const[t,n]=SR[e];UB(e,t,n)}}function UB(e,t,n){const r=_Le(e);r&&(r.scrollParent.scrollBy(t,n),setTimeout(()=>{UB(e,t,n)},"touchedNode"in r?10:100))}function PLe(e){if(!Ge)return;const{x:t,y:n}=Cl(e.e);Ge.coordinates.y=n,Ge.coordinates.x=t,cb(),kLe(e,Ge)}function TLe(e){if(!Ge)return;const{x:t,y:n}=Cl(e.e);Ge.coordinates.y=n,Ge.coordinates.x=t,cb(),ub(e,Ge)}function jLe(e){Ge&&ub(e.detail,Ge)}function ALe(e,t){if(e.targetData.parent.el===t.lastParent.el)return!1;const n=e.targetData.parent.data.config;if(n.dropZone===!1)return!1;const r=t.initialParent.data.config;return n.accepts?n.accepts(e.targetData.parent,t.initialParent,t.lastParent,t):!(!n.group||n.group!==r.group)}function kLe(e,t){var n;e.e.preventDefault(),e.e.stopPropagation(),e.targetData.parent.el===((n=t.lastParent)==null?void 0:n.el)?zB(e,t):ub(e,t)}function NLe(e,t,n,r){var i;if(t.remapJustFinished)return t.remapJustFinished=!1,t.lastTargetValue=e.targetData.node.data.value,!1;if(t.lastTargetValue===e.targetData.node.data.value||t.draggedNodes.map(p=>p.el).includes(e.targetData.node.el)||t.preventEnter||t.swappedNodeValue===e.targetData.node.data.value||e.targetData.parent.el!==((i=t.lastParent)==null?void 0:i.el)||e.targetData.parent.data.config.sortable===!1)return!1;const o=e.targetData.node.el.getBoundingClientRect(),a=t.draggedNode.el.getBoundingClientRect(),s=o.y-a.y,l=o.x-a.x;let c;const f=t.draggedNode.data.index>e.targetData.node.data.index?[e.targetData.node.data.index,t.draggedNode.data.index]:[t.draggedNode.data.index,e.targetData.node.data.index];t.targetIndex=e.targetData.node.data.index,t.affectedNodes=e.targetData.parent.data.enabledNodes.filter(p=>f[0]<=p.data.index&&p.data.index<=f[1]&&p.el!==t.draggedNode.el),Math.abs(s)>Math.abs(l)?c=s>0?"above":"below":c=l>0?"left":"right";const d=t.lastParent.data.config.threshold;switch(c){case"left":if(n>o.x+o.width*d.horizontal)return t.incomingDirection="left",!0;break;case"right":if(no.y+o.height*d.vertical)return t.incomingDirection="above",!0;break;case"below":if(r{const r=t(n.currentTarget);if(r)return e({e:n,targetData:r})}}function MLe(e,t){const n=RB(e),r=VO(e.lastParent.el,e.lastParent.data).filter(s=>!n.includes(s)),i=VO(t.targetData.parent.el,t.targetData.parent.data),o=e.initialParent.el===t.targetData.parent.el&&t.targetData.parent.data.config.sortable===!1;let a;"node"in t.targetData?(o?a=e.initialIndex:t.targetData.parent.data.config.sortable===!1?a=t.targetData.parent.data.enabledNodes.length:a=t.targetData.node.data.index,i.splice(a,0,...n)):(a=o?e.initialIndex:t.targetData.parent.data.enabledNodes.length,i.splice(a,0,...n)),WO(e.lastParent.el,e.lastParent.data,r),WO(t.targetData.parent.el,t.targetData.parent.data,i)}function ub(e,t){ALe(e,t)&&(e.targetData.parent.data.config.performTransfer(t,e),t.lastParent=e.targetData.parent)}function LLe(e){function t(n){const r=Ti.get(n);if(r)return{parent:{el:n,data:r}}}return n=>{const r=t(n.currentTarget);if(r)return e({e:n,targetData:r})}}function RLe(e){if(e instanceof HTMLElement)return e;if("current"in e&&e.current instanceof HTMLElement)return e.current;console.warn("Invalid parent element",e)}function $Le(e,t){const n=RLe(e);n&&t(n)}var Ey=new WeakMap;function ILe(e){const t=Ey.get(e);return t?t[0]:(console.warn("No values found for parent element"),[])}function DLe(e,t){const n=Ey.get(t);n&&n[1](e),Ey.set(t,[e,n[1]])}function FLe(e,t){return n=>{Ey.set(n,t),XMe({parent:n,getValues:ILe,setValues:DLe,config:e})}}function ER(e){jB&&(Array.isArray(e)||(e=[e]),e.forEach(t=>{const{parent:n,state:r,...i}=t;$Le(n,FLe(i,r))}))}function BLe(e,t={}){const n=R.useRef(null),[r,i]=R.useState(e);function o(a={}){ER({parent:n,state:[r,i],...a})}return R.useEffect(()=>{ER({parent:n,state:[r,i],...t})},[r]),R.useEffect(()=>()=>{n.current&&$B(n.current)},[]),[n,r,i,o]}const fb=()=>{const e=vo(),t=ds(),n=Au(),r=R.useMemo(()=>{const{orderBy:o,tags:a,excludeBots:s,excludeMaxVisitsReached:l,excludePastValidUntil:c,...f}=n,d=o?Hre(o):void 0,p=(a==null?void 0:a.split(","))??[];return{...f,orderBy:d,tags:p,excludeBots:s!==void 0?s==="true":void 0,excludeMaxVisitsReached:l!==void 0?l==="true":void 0,excludePastValidUntil:c!==void 0?c==="true":void 0}},[n]),i=R.useCallback(o=>{const a={...r,...o},{orderBy:s,tags:l,excludeBots:c,excludeMaxVisitsReached:f,excludePastValidUntil:d,...p}=a,v={...p,orderBy:s&&Wre(s),tags:l.length>0?l.join(","):void 0,excludeBots:f_(c),excludeMaxVisitsReached:f_(f),excludePastValidUntil:f_(d)},g=l0(v),y=g?`?${g}`:"";e(`${t}/list-short-urls/1${y}`)},[r,e,t]);return[r,i]},bP=()=>{const{domain:e}=Au(),{shortCode:t=""}=Cu();return R.useMemo(()=>({shortCode:uP(t),domain:e}),[e,t])},db=()=>{const e=yMe();return m.jsx(Ke,{color:"link",size:"lg",className:"p-0 me-3",onClick:e,"aria-label":"Go back",children:m.jsx(je,{icon:pK})})},ULe={android:"Android",ios:"iOS",desktop:"Desktop"},zLe=({deviceType:e,onDeviceTypeChange:t})=>{const n=R.useId();return m.jsxs("div",{children:[m.jsx("label",{htmlFor:n,children:"Device type:"}),m.jsxs("select",{id:n,className:"form-select",value:e,onChange:r=>t(r.target.value),required:!0,children:[!e&&m.jsx("option",{value:"",children:"- Select type -"}),Object.entries(ULe).map(([r,i])=>m.jsx("option",{value:r,children:i},r))]})]})},VLe=({language:e,onLanguageChange:t})=>{const n=R.useId();return m.jsxs("div",{children:[m.jsx("label",{htmlFor:n,children:"Language:"}),m.jsx(Fn,{id:n,value:e??"",onChange:r=>t(r.target.value),placeholder:"en-US / en",required:!0})]})},WLe=({name:e,value:t,onNameChange:n,onValueChange:r})=>{const i=R.useId(),o=R.useId();return m.jsxs(m.Fragment,{children:[m.jsxs("div",{children:[m.jsx("label",{htmlFor:i,children:"Param name:"}),m.jsx(Fn,{id:i,value:e??"",onChange:a=>n(a.target.value),placeholder:"hello",required:!0})]}),m.jsxs("div",{children:[m.jsx("label",{htmlFor:o,children:"Param value:"}),m.jsx(Fn,{id:o,value:t??"",onChange:a=>r(a.target.value),placeholder:"world",required:!0})]})]})},HLe={device:"Device type",language:"Language","query-param":"Query param"},GLe=({condition:e,onConditionChange:t,onDelete:n})=>{const r=R.useId(),i=R.useCallback(s=>t({type:s,matchValue:"",matchKey:null}),[t]),o=R.useCallback(s=>t({...e,matchValue:s}),[e,t]),a=R.useCallback(s=>t({...e,matchKey:s}),[e,t]);return m.jsxs("div",{className:"redirect-rule-modal__condition rounded p-3 h-100 d-flex flex-column gap-2",children:[m.jsxs("div",{children:[m.jsx("label",{htmlFor:r,children:"Type:"}),m.jsxs("div",{className:"d-flex gap-2",children:[m.jsx("select",{id:r,className:"form-select flex-grow-1",value:e.type,onChange:s=>i(s.target.value),children:Object.entries(HLe).map(([s,l])=>m.jsx("option",{value:s,children:l},s))}),m.jsx(Ke,{outline:!0,color:"danger",type:"button","aria-label":"Delete condition",onClick:n,children:m.jsx(je,{icon:W6})})]})]}),e.type==="device"&&m.jsx(zLe,{deviceType:e.matchValue,onDeviceTypeChange:o}),e.type==="language"&&m.jsx(VLe,{language:e.matchValue,onLanguageChange:o}),e.type==="query-param"&&m.jsx(WLe,{value:e.matchValue,name:e.matchKey??"",onNameChange:a,onValueChange:o})]})},VB=({isOpen:e,toggle:t,onSave:n,initialData:r})=>{const[i,o]=R.useState(r??{longUrl:"",conditions:[]}),a=R.useCallback(v=>{v.preventDefault(),v.stopPropagation(),i&&n(i),t()},[n,i,t]),s=R.useCallback(()=>o(({longUrl:v,conditions:g})=>({longUrl:v,conditions:[...g,{type:"device",matchValue:"",matchKey:null}]})),[]),l=R.useCallback((v,g)=>o(({longUrl:y,conditions:x})=>{const _=[...x];return _[v]=g,{longUrl:y,conditions:_}}),[]),c=R.useCallback(v=>o(({longUrl:g,conditions:y})=>{const x=[...y];return x.splice(v,1),{longUrl:g,conditions:x}}),[]),f=ea(),d=R.useCallback(()=>{var v;return(v=f==null?void 0:f.current)==null?void 0:v.focus()},[f]),p=R.useCallback(()=>o(r??{longUrl:"",conditions:[]}),[r]);return m.jsx(go,{size:"xl",isOpen:e,toggle:t,centered:!0,onOpened:d,onClosed:p,children:m.jsxs("form",{onSubmit:a,children:[m.jsx(yo,{toggle:t,className:"sticky-top redirect-rule-modal__header",children:"Redirect rule"}),m.jsxs($i,{children:[m.jsx("label",{htmlFor:"longUrl",className:"fw-bold",children:"Long URL:"}),m.jsx(Fn,{id:"longUrl",type:"url",placeholder:"https://www.example.com",value:i.longUrl,onChange:v=>o(g=>({...g,longUrl:v.target.value})),required:!0,innerRef:f}),m.jsx("hr",{}),m.jsxs("div",{className:"d-flex justify-content-between",children:[m.jsx("b",{children:"Conditions:"}),m.jsx(Ke,{outline:!0,size:"sm",type:"button","aria-label":"Add condition",onClick:s,children:m.jsx(je,{icon:ep})})]}),i.conditions.length===0&&m.jsx("div",{className:"text-center",children:m.jsx("i",{children:"Add conditions..."})}),i.conditions.length>0&&m.jsx(Kn,{children:i.conditions.map((v,g)=>m.jsx("div",{className:"col-lg-6 col-xl-4 mt-3",children:m.jsx(GLe,{condition:v,onConditionChange:y=>l(g,y),onDelete:()=>c(g)})},`${g}_${v.type}`))})]}),m.jsxs(as,{className:"sticky-bottom redirect-rule-modal__footer",children:[m.jsx(Ke,{type:"button",color:"link",onClick:t,children:"Cancel"}),m.jsx(Ke,{color:"primary",disabled:i.conditions.length===0,children:"Confirm"})]})]})})},qLe=({priority:e,isLast:t,redirectRule:n,onDelete:r,onMoveUp:i,onMoveDown:o,onUpdate:a})=>{const[s,l]=qt();return m.jsxs(xt,{children:[m.jsxs("div",{className:"d-flex align-content-center gap-3",children:[m.jsx("div",{className:"d-flex flex-column my-auto drag-n-drop-handler d-none d-md-block",style:{cursor:"grab"},children:m.jsx(je,{icon:xK})}),m.jsxs("div",{className:"d-flex flex-column my-auto",children:[m.jsx(Ke,{outline:!0,color:"secondary",size:"sm","aria-label":`Move rule with priority ${e} up`,disabled:e===1,onClick:i,className:"rounded-0 rounded-top",style:{marginBottom:"-1px"},children:m.jsx(je,{icon:$K})}),m.jsx(Ke,{outline:!0,color:"secondary",size:"sm","aria-label":`Move rule with priority ${e} down`,disabled:t,onClick:o,className:"rounded-0 rounded-bottom",children:m.jsx(je,{icon:kK})})]}),m.jsxs("div",{className:"flex-grow-1",children:[m.jsxs("div",{className:"mb-2",children:[m.jsx("b",{children:"Long URL:"})," ",m.jsx(mr,{href:n.longUrl,"data-testid":"rule-long-url"})]}),m.jsxs("div",{className:"d-flex flex-column flex-lg-row gap-2",children:[m.jsx("b",{children:"Conditions:"}),n.conditions.map((c,f)=>m.jsxs("div",{className:"badge bg-secondary",children:[c.type==="device"&&m.jsxs(m.Fragment,{children:["Device is ",c.matchValue]}),c.type==="language"&&m.jsxs(m.Fragment,{children:[c.matchValue," language is accepted"]}),c.type==="query-param"&&m.jsxs(m.Fragment,{children:["Query string contains ",c.matchKey,"=",c.matchValue]})]},`${c.type}_${f}`))]})]}),m.jsxs("div",{className:"d-flex flex-column flex-sm-row gap-1 my-auto",children:[m.jsx(Ke,{outline:!0,color:"secondary",size:"sm","aria-label":`Edit rule with priority ${e}`,onClick:l,children:m.jsx(je,{icon:H6})}),m.jsx(Ke,{outline:!0,color:"danger",size:"sm","aria-label":`Delete rule with priority ${e}`,onClick:r,children:m.jsx(je,{icon:W6})})]})]}),m.jsx(VB,{onSave:a,isOpen:s,toggle:l,initialData:n})]})},KLe=({shortUrlRedirectRules:e,getShortUrlRedirectRules:t,getShortUrlsDetails:n,shortUrlsDetails:r,setShortUrlRedirectRules:i,shortUrlRedirectRulesSaving:o,resetSetRules:a})=>{const s=bP(),{shortUrls:l}=r,c=s&&(l==null?void 0:l.get(s)),[f,d,p]=BLe([],{dragHandle:".drag-n-drop-handler",dropZoneClass:"opacity-25"}),{saving:v,saved:g,errorData:y}=o,[x,_]=qt(),b=R.useCallback(D=>p((N=[])=>[...N,D]),[p]),w=R.useCallback(D=>p((N=[])=>{const I=[...N];return I.splice(D,1),I}),[p]),S=R.useCallback((D,N)=>p((I=[])=>{const F=[...I];return F[D]=N,F}),[p]),E=R.useCallback((D,N)=>p((I=[])=>{if(!I[N])return I;const F=[...I],K=F[N];return F[N]=F[D],F[D]=K,F}),[p]),C=R.useCallback(D=>E(D,D-1),[E]),T=R.useCallback(D=>E(D,D+1),[E]),A=R.useCallback(D=>{D.preventDefault(),d&&i({shortUrl:s,data:{redirectRules:d}})},[s,d,i]);return R.useEffect(()=>(t(s),n([s]),a),[t,n,s,a]),R.useEffect(()=>{e.redirectRules&&p(e.redirectRules)},[p,e.redirectRules]),m.jsxs("div",{className:"d-flex flex-column gap-3",children:[m.jsx("header",{children:m.jsxs(vr,{body:!0,children:[m.jsxs("h2",{className:"d-sm-flex justify-content-between align-items-center mb-0",children:[m.jsx(db,{}),m.jsxs("div",{className:"text-center flex-grow-1",children:[r.loading&&m.jsx(m.Fragment,{children:"Loading..."}),!r.loading&&m.jsxs("small",{children:["Redirect rules for ",m.jsx(mr,{href:(c==null?void 0:c.shortUrl)??""})]})]})]}),m.jsx("hr",{}),m.jsxs("div",{children:[m.jsx("p",{className:"mb-2",children:"Configure dynamic conditions that will be checked at runtime."}),"If no conditions match, visitors will be redirected to: ",m.jsx(mr,{href:e.defaultLongUrl??""})]})]})}),m.jsx("div",{children:m.jsxs(Ke,{outline:!0,color:"primary",onClick:_,children:[m.jsx(je,{icon:ep,className:"me-1"})," Add rule"]})}),m.jsxs("form",{onSubmit:A,children:[e.loading&&m.jsx(Ho,{loading:!0}),d.length===0&&!e.loading&&m.jsx(xt,{className:"text-center",children:m.jsx("i",{children:"This short URL has no dynamic redirect rules"})}),m.jsx("div",{className:"d-flex flex-column gap-2",ref:f,children:d.map((D,N)=>m.jsx(qLe,{redirectRule:D,priority:N+1,isLast:N===d.length-1,onDelete:()=>w(N),onMoveUp:()=>C(N),onMoveDown:()=>T(N),onUpdate:I=>S(N,I)},`${D.longUrl}_${N}`))}),m.jsx("div",{className:"text-center mt-3",children:m.jsx(Ke,{outline:!0,color:"primary",className:"btn-sm-block",disabled:v,"data-testid":"save-button",children:v?"Saving...":"Save rules"})})]}),y&&m.jsx(er,{type:"error",children:m.jsx(mo,{errorData:y,fallbackMessage:"An error occurred while saving short URL redirect rules :("})}),g&&m.jsx(er,{type:"success",children:"Redirect rules properly saved."}),m.jsx(VB,{isOpen:x,toggle:_,onSave:b})]})},YLe=(e,t)=>{e.serviceFactory("ShortUrlRedirectRules",()=>KLe),e.decorator("ShortUrlRedirectRules",t(["shortUrlRedirectRules","shortUrlsDetails","shortUrlRedirectRulesSaving"],["getShortUrlRedirectRules","getShortUrlsDetails","setShortUrlRedirectRules","resetSetRules"])),e.serviceFactory("getShortUrlRedirectRules",WMe,"apiClientFactory"),e.serviceFactory("setShortUrlRedirectRules",UMe,"apiClientFactory"),e.serviceFactory("resetSetRules",n=>n.resetSetRules,"setShortUrlRedirectRulesReducerCreator"),e.serviceFactory("shortUrlRedirectRulesReducerCreator",HMe,"getShortUrlRedirectRules"),e.serviceFactory("shortUrlRedirectRulesReducer",n=>n.reducer,"shortUrlRedirectRulesReducerCreator"),e.serviceFactory("setShortUrlRedirectRulesReducerCreator",zMe,"setShortUrlRedirectRules"),e.serviceFactory("setShortUrlRedirectRulesReducer",n=>n.reducer,"setShortUrlRedirectRulesReducerCreator")},ZLe=e=>({longUrl:"",tags:[],customSlug:"",title:void 0,shortCodeLength:void 0,domain:"",validSince:void 0,validUntil:void 0,maxVisits:void 0,findIfExists:!1,validateUrl:(e==null?void 0:e.validateUrls)??!1,forwardQuery:(e==null?void 0:e.forwardQuery)??!0}),WB=({createShortUrl:e,shortUrlCreation:t,resetCreateShortUrl:n,basicMode:r=!1})=>{const{ShortUrlForm:i,CreateShortUrlResult:o}=Rt(WB),a=_r("shortUrlCreation"),s=R.useMemo(()=>ZLe(a),[a]);return m.jsxs(m.Fragment,{children:[m.jsx(i,{initialState:s,saving:t.saving,basicMode:r,onSave:async l=>(n(),e(l))}),m.jsx(o,{creation:t,resetCreateShortUrl:n,canBeClosed:r})]})},XLe=$t(WB,["ShortUrlForm","CreateShortUrlResult"]),HB=({shortUrlsDetails:e,getShortUrlsDetails:t,shortUrlEdition:n,editShortUrl:r})=>{const{ShortUrlForm:i}=Rt(HB),o=bP(),{loading:a,error:s,errorData:l,shortUrls:c}=e,f=o&&(c==null?void 0:c.get(o)),{saving:d,saved:p,error:v,errorData:g}=n,y=_r("shortUrlCreation"),x=R.useMemo(()=>qNe(f,y),[f,y]);return R.useEffect(()=>{o&&t([o])},[t,o]),a?m.jsx(Ho,{loading:!0}):s?m.jsx(er,{type:"error",children:m.jsx(mo,{errorData:l,fallbackMessage:"An error occurred while loading short URL detail :("})}):m.jsxs(m.Fragment,{children:[m.jsx("header",{className:"mb-3",children:m.jsx(vr,{body:!0,children:m.jsxs("h2",{className:"d-sm-flex justify-content-between align-items-center mb-0",children:[m.jsx(db,{}),m.jsx("div",{className:"text-center flex-grow-1",children:m.jsxs("small",{children:["Edit ",m.jsx(mr,{href:(f==null?void 0:f.shortUrl)??""})]})})]})})}),m.jsx(i,{initialState:x,saving:d,onSave:async _=>{f&&r({...f,data:_})}}),p&&v&&m.jsx(er,{type:"error",className:"mt-3",children:m.jsx(mo,{errorData:g,fallbackMessage:"An error occurred while updating short URL :("})}),p&&!v&&m.jsx(er,{type:"success",className:"mt-3",children:"Short URL properly edited."})]})},QLe=$t(HB,["ShortUrlForm"]),GB=({text:e,onCopy:t},n=navigator)=>{var r;return(r=n.clipboard)==null?void 0:r.writeText(e).then(()=>t==null?void 0:t(e,!0)).catch(()=>t==null?void 0:t(e,!1))},qB=({creation:e,resetCreateShortUrl:t,canBeClosed:n=!1})=>{const{useTimeoutToggle:r}=Rt(qB),[i,o]=r(),{error:a,saved:s}=e;if(R.useEffect(()=>{t()},[t]),a)return m.jsxs(er,{type:"error",className:"mt-3",children:[n&&m.jsx(je,{"data-testid":"error-close-button",icon:yx,className:"float-end pointer",onClick:t}),m.jsx(mo,{errorData:e.errorData,fallbackMessage:"An error occurred while creating the URL :("})]});if(!s)return null;const{shortUrl:l}=e.result;return m.jsxs(er,{type:"success",className:"mt-3",children:[n&&m.jsx(je,{"data-testid":"success-close-button",icon:yx,className:"float-end pointer",onClick:t}),m.jsxs("span",{children:[m.jsx("b",{children:"Great!"})," The short URL is ",m.jsx("b",{children:l})]}),m.jsxs("button",{className:"btn btn-light btn-sm create-short-url-result__copy-btn",id:"copyBtn",type:"button",onClick:()=>GB({text:l,onCopy:o}),children:[m.jsx(je,{icon:h5})," Copy ",m.jsxs("span",{className:"sr-only",children:[l," to clipboard"]})]}),m.jsx(sp,{placement:"left",isOpen:i,target:"copyBtn",children:"Copied!"})]})},JLe=$t(qB,["useTimeoutToggle"]),p_="delete",eRe=({shortUrl:e,toggle:t,isOpen:n,shortUrlDeletion:r,resetDeleteShortUrl:i,deleteShortUrl:o,shortUrlDeleted:a})=>{const[s,l]=R.useState("");R.useEffect(()=>i,[i]);const{loading:c,error:f,deleted:d,errorData:p}=r,v=R.useCallback(()=>{i(),t()},[i,t]),g=R.useCallback(y=>(y.preventDefault(),o(e).then(t)),[o,e,t]);return m.jsx(go,{isOpen:n,toggle:v,centered:!0,onClosed:()=>d&&a(e),children:m.jsxs("form",{onSubmit:g,children:[m.jsx(yo,{toggle:v,children:m.jsx("span",{className:"text-danger",children:"Delete short URL"})}),m.jsxs($i,{children:[m.jsxs("p",{children:[m.jsx("b",{className:"text-danger",children:"Caution!"})," You are about to delete a short URL."]}),m.jsx("p",{children:"This action cannot be undone. Once you have deleted it, all the visits stats will be lost."}),m.jsxs("p",{children:["Write ",m.jsx("b",{children:p_})," to confirm deletion."]}),m.jsx("input",{type:"text",className:"form-control",placeholder:`Insert ${p_}`,value:s,onChange:y=>l(y.target.value)}),f&&m.jsx(er,{type:zNe(p)?"warning":"error",small:!0,className:"mt-2",children:m.jsx(mo,{errorData:p,fallbackMessage:"Something went wrong while deleting the URL :("})})]}),m.jsxs(as,{children:[m.jsx("button",{type:"button",className:"btn btn-link",onClick:v,children:"Cancel"}),m.jsx("button",{type:"submit",className:"btn btn-danger",disabled:s!==p_||c,children:c?"Deleting...":"Delete"})]})]})})},KB=({amount:e=0,loading:t=!1,...n})=>m.jsxs(Ke,{...n,outline:!0,color:"primary",disabled:t,children:[m.jsx(je,{icon:Xq})," ",t?"Exporting...":m.jsxs(m.Fragment,{children:["Export (",Gt(e),")"]})]}),CR=20,YB=({amount:e=0})=>{const{apiClientFactory:t,ReportExporter:n}=Rt(YB),[{tags:r,search:i,startDate:o,endDate:a,orderBy:s,tagsMode:l}]=fb(),[c,,f,d]=qt(),p=R.useCallback(async()=>{const v=e/CR,g=async(x=1)=>{const{data:_}=await t().listShortUrls({page:`${x}`,tags:r,searchTerm:i,startDate:o,endDate:a,orderBy:s,tagsMode:l,itemsPerPage:CR});return x>=v?_:_.concat(await g(x+1))};f();const y=await g();n.exportShortUrls(y.map(x=>{var _;const{hostname:b,pathname:w}=new URL(x.shortUrl),S=w.substring(1);return{createdAt:x.dateCreated,domain:b,shortCode:S,shortUrl:x.shortUrl,longUrl:x.longUrl,title:x.title??"",tags:x.tags.join("|"),visits:((_=x==null?void 0:x.visitsSummary)==null?void 0:_.total)??x.visitsCount??0}})),d()},[e,t,a,s,n,i,o,f,d,r,l]);return m.jsx(KB,{loading:c,className:"btn-md-block",amount:e,onClick:p})},tRe=$t(YB,["apiClientFactory","ReportExporter"]),ZB=({text:e,onCopy:t,copyToClipboard:n=GB})=>m.jsx(gl,{className:"ms-2 p-0","aria-label":`Copy ${e} to clipboard`,onClick:()=>n({text:e,onCopy:t}),children:m.jsx(je,{icon:h5,className:"fs-5"})}),nRe=(e,{margin:t,...n})=>{const r=`${e}/qr-code`,i=l0({...n,margin:t>0?t:void 0});return`${r}${i?`?${i}`:""}`},rRe=({errorCorrection:e,setErrorCorrection:t})=>m.jsxs(ta,{text:`Error correction (${e})`,children:[m.jsxs(Ne,{active:e==="L",onClick:()=>t("L"),children:[m.jsx("b",{children:"L"}),"ow"]}),m.jsxs(Ne,{active:e==="M",onClick:()=>t("M"),children:[m.jsx("b",{children:"M"}),"edium"]}),m.jsxs(Ne,{active:e==="Q",onClick:()=>t("Q"),children:[m.jsx("b",{children:"Q"}),"uartile"]}),m.jsxs(Ne,{active:e==="H",onClick:()=>t("H"),children:[m.jsx("b",{children:"H"}),"igh"]})]}),iRe=({format:e,setFormat:t})=>m.jsxs(ta,{text:`Format (${e})`,children:[m.jsx(Ne,{active:e==="png",onClick:()=>t("png"),children:"PNG"}),m.jsx(Ne,{active:e==="svg",onClick:()=>t("svg"),children:"SVG"})]}),XB=({shortUrl:{shortUrl:e,shortCode:t},toggle:n,isOpen:r})=>{const{ImageDownloader:i}=Rt(XB),[o,a]=R.useState(300),[s,l]=R.useState(0),[c,f]=R.useState("png"),[d,p]=R.useState("L"),v=R.useMemo(()=>nRe(e,{size:o,format:c,margin:s,errorCorrection:d}),[e,o,c,s,d]),g=R.useMemo(()=>o+s,[o,s]),y=R.useMemo(()=>{if(!(g<500))return g<800?"lg":"xl"},[g]);return m.jsxs(go,{isOpen:r,toggle:n,centered:!0,size:y,children:[m.jsxs(yo,{toggle:n,children:["QR code for ",m.jsx(mr,{href:e,children:e})]}),m.jsxs($i,{children:[m.jsxs(Kn,{children:[m.jsxs(eo,{className:"d-grid col-md-6",children:[m.jsxs("label",{htmlFor:"sizeControl",children:["Size: ",o,"px"]}),m.jsx("input",{id:"sizeControl",type:"range",className:"form-control-range",value:o,step:10,min:50,max:1e3,onChange:x=>a(Number(x.target.value))})]}),m.jsxs(eo,{className:"d-grid col-md-6",children:[m.jsxs("label",{htmlFor:"marginControl",children:["Margin: ",s,"px"]}),m.jsx("input",{id:"marginControl",type:"range",className:"form-control-range",value:s,step:1,min:0,max:100,onChange:x=>l(Number(x.target.value))})]}),m.jsx(eo,{className:"d-grid col-md-6",children:m.jsx(iRe,{format:c,setFormat:f})}),m.jsx(eo,{className:"col-md-6",children:m.jsx(rRe,{errorCorrection:d,setErrorCorrection:p})})]}),m.jsxs("div",{className:"text-center",children:[m.jsxs("div",{className:"mb-3",children:[m.jsx(mr,{href:v}),m.jsx(ZB,{text:v})]}),m.jsx("img",{src:v,className:"qr-code-modal__img",alt:"QR code"}),m.jsx("div",{className:"mt-3",children:m.jsxs(Ke,{block:!0,color:"primary",onClick:()=>{i.saveImage(v,`${t}-qr-code.${c}`).catch(()=>{})},children:["Download ",m.jsx(je,{icon:Y6,className:"ms-1"})]})})]})]})]})},oRe=$t(XB,["ImageDownloader"]),Cy=({date:e,format:t=lB,relative:n=!1})=>{const r=dP(e)?e:Ya(e);return m.jsx("time",{dateTime:`${Aae(r)}000`,children:n?`${Tae(Qa(),r)} ago`:wg(r,t)})},aRe=e=>{const{meta:t,visitsCount:n,visitsSummary:r}=e,{maxVisits:i,validSince:o,validUntil:a}=t,s=(r==null?void 0:r.total)??n??0;return i&&s>=i?{icon:WK,className:"text-danger",description:m.jsxs(m.Fragment,{children:["This short URL cannot be currently visited because it has reached the maximum amount of ",m.jsx("b",{children:i})," visit",i>1?"s":"","."]})}:a&&Og(jr(a),Qa())?{icon:tA,className:"text-danger",description:m.jsxs(m.Fragment,{children:["This short URL cannot be visited since ",m.jsx("b",{className:"indivisible",children:Gh(jr(a))}),"."]})}:o&&Og(Qa(),jr(o))?{icon:tA,className:"text-warning",description:m.jsxs(m.Fragment,{children:["This short URL will start working on ",m.jsx("b",{className:"indivisible",children:Gh(jr(o))}),"."]})}:{icon:Gd,className:"text-primary",description:"This short URL can be visited normally."}},sRe=({shortUrl:e})=>{const t=ea(),{icon:n,className:r,description:i}=aRe(e);return m.jsxs(m.Fragment,{children:[m.jsx("span",{style:{cursor:i?"help":void 0},ref:t,children:m.jsx(je,{icon:n,className:r})}),m.jsx(br,{target:t,placement:"bottom",children:i})]})},lRe=(e,{shortCode:t,domain:n},r)=>{const i=n?`?domain=${n}`:"";return`${e}/short-code/${aB(t)}/${r}${i}`},dv=({shortUrl:e,suffix:t,asLink:n,children:r,...i})=>{const o=ds();return!n||!e?m.jsx("span",{...i,children:r}):m.jsx(St,{to:lRe(o,e,t),...i,children:r})},QB=({visitsCount:e,shortUrl:t,active:n=!1,asLink:r=!1})=>{const i=ea(),{maxVisits:o,validSince:a,validUntil:s}=(t==null?void 0:t.meta)??{},l=!!o||!!a||!!s,c=m.jsx(dv,{shortUrl:t,suffix:"visits",asLink:r,children:m.jsx("strong",{className:Ce("short-url-visits-count__amount",{"short-url-visits-count__amount--big":n}),children:Gt(e)})});return l?m.jsxs(m.Fragment,{children:[m.jsxs("span",{className:"indivisible",children:[c,m.jsxs("small",{className:"short-urls-visits-count__max-visits-control",ref:i,children:[o&&m.jsxs(m.Fragment,{children:[" / ",Gt(o)]}),m.jsx("sup",{className:"ms-1",children:m.jsx(je,{icon:nE})})]})]}),m.jsx(br,{target:i,placement:"bottom",children:m.jsxs("ul",{className:"list-unstyled mb-0",children:[o&&m.jsxs("li",{className:"short-url-visits-count__tooltip-list-item",children:["This short URL will not accept more than ",m.jsx("b",{children:Gt(o)})," visit",o===1?"":"s","."]}),a&&m.jsxs("li",{className:"short-url-visits-count__tooltip-list-item",children:["This short URL will not accept visits before ",m.jsx("b",{className:"indivisible",children:Gh(jr(a))}),"."]}),s&&m.jsxs("li",{className:"short-url-visits-count__tooltip-list-item",children:["This short URL will not accept visits after ",m.jsx("b",{className:"indivisible",children:Gh(jr(s))}),"."]})]})})]}):c},cRe=e=>!!e.onClose,uRe=e=>!!e.onClick,hb=e=>{const{text:t,children:n,className:r,colorGenerator:i}=e,o=uRe(e),a=o?gl:"span",s=R.useMemo(()=>i.stylesForKey(t),[t,i]);return m.jsxs(a,{className:Ce("badge tag fw-bold",r,{pointer:o}),style:s,onClick:o?e.onClick:void 0,children:[n??t,cRe(e)&&m.jsx(gl,{"aria-label":`Remove ${t}`,className:"bg-transparent ms-1 opacity-100 p-0 fw-bold tag__close",onClick:e.onClose,children:"×"})]})},fRe=({tags:e,onTagClick:t,colorGenerator:n})=>e.length===0?m.jsx("i",{className:"indivisible",children:m.jsx("small",{children:"No tags"})}):m.jsx(m.Fragment,{children:e.map(r=>m.jsx(hb,{text:r,colorGenerator:n,onClick:()=>t==null?void 0:t(r)},r))}),JB=({shortUrl:e,onTagClick:t})=>{var n,r,i,o;const{ShortUrlsRowMenu:a,ColorGenerator:s,useTimeoutToggle:l}=Rt(JB),[c,f]=l(),[d,p]=l(!1,500),v=R.useRef(!0),[{excludeBots:g}]=fb(),y=_r("visits"),x=g??(y==null?void 0:y.excludeBots);return R.useEffect(()=>{!v.current&&p(),v.current=!1},[(n=e.visitsSummary)==null?void 0:n.total,(r=e.visitsSummary)==null?void 0:r.nonBots,e.visitsCount,p]),m.jsxs("tr",{className:"responsive-table__row",children:[m.jsx("td",{className:"indivisible short-urls-row__cell responsive-table__cell","data-th":"Created at",children:m.jsx(Cy,{date:e.dateCreated})}),m.jsx("td",{className:"responsive-table__cell short-urls-row__cell","data-th":"Short URL",children:m.jsxs("span",{className:"position-relative short-urls-row__cell--indivisible",children:[m.jsx("span",{className:"short-urls-row__short-url-wrapper",children:m.jsx(mr,{href:e.shortUrl})}),m.jsx(ZB,{text:e.shortUrl,onCopy:f}),m.jsx("span",{role:"status",className:"badge bg-warning text-black short-urls-row__copy-hint",hidden:!c,children:"Copied short URL!"})]})}),m.jsx("td",{className:"responsive-table__cell short-urls-row__cell short-urls-row__cell--break","data-th":`${e.title?"Title":"Long URL"}`,children:m.jsx(mr,{href:e.longUrl,children:e.title??e.longUrl})}),e.title&&m.jsx("td",{className:"short-urls-row__cell responsive-table__cell short-urls-row__cell--break d-lg-none","data-th":"Long URL",children:m.jsx(mr,{href:e.longUrl})}),m.jsx("td",{className:"responsive-table__cell short-urls-row__cell","data-th":"Tags",children:m.jsx(fRe,{tags:e.tags,colorGenerator:s,onTagClick:t})}),m.jsx("td",{className:"responsive-table__cell short-urls-row__cell text-lg-end","data-th":"Visits",children:m.jsx(QB,{visitsCount:(x?(i=e.visitsSummary)==null?void 0:i.nonBots:(o=e.visitsSummary)==null?void 0:o.total)??e.visitsCount??0,shortUrl:e,active:d,asLink:!0})}),m.jsx("td",{className:"responsive-table__cell short-urls-row__cell","data-th":"Status",children:m.jsx(sRe,{shortUrl:e})}),m.jsx("td",{className:"responsive-table__cell short-urls-row__cell text-end",children:m.jsx(a,{shortUrl:e})})]})},dRe=$t(JB,["ShortUrlsRowMenu","ColorGenerator","useTimeoutToggle"]),hRe=(e,{maxVersion:t,minVersion:n})=>{const r=!n||l2(e,n,">=");return(!t||l2(e,t,"<="))&&r},eU={excludeBotsOnShortUrls:{minVersion:"3.4.0"},filterDisabledUrls:{minVersion:"3.4.0"},deviceLongUrls:{minVersion:"3.5.0",maxVersion:"3.*.*"},shortUrlVisitsDeletion:{minVersion:"3.6.0"},orphanVisitsDeletion:{minVersion:"3.7.0"},shortUrlRedirectRules:{minVersion:"4.0.0"},urlValidation:{maxVersion:"3.*.*"}};Object.freeze(eU);const Os=(e,t)=>t==="latest"||hRe(t,eU[e]),tU=e=>({excludeBotsOnShortUrls:Os("excludeBotsOnShortUrls",e),filterDisabledUrls:Os("filterDisabledUrls",e),deviceLongUrls:Os("deviceLongUrls",e),shortUrlVisitsDeletion:Os("shortUrlVisitsDeletion",e),orphanVisitsDeletion:Os("orphanVisitsDeletion",e),shortUrlRedirectRules:Os("shortUrlRedirectRules",e),urlValidation:Os("urlValidation",e)}),nU=R.createContext(tU("0.0.0")),pRe=nU.Provider,mRe=e=>R.useMemo(()=>tU(e),[e]),es=e=>R.useContext(nU)[e],rU=({shortUrl:e})=>{const{DeleteShortUrlModal:t,QrCodeModal:n}=Rt(rU),[r,,i,o]=qt(),[a,,s,l]=qt(),c=ab(),f=es("shortUrlRedirectRules");return m.jsxs(c0,{minWidth:f?220:190,children:[m.jsxs(Ne,{tag:dv,shortUrl:e,suffix:"visits",asLink:!0,children:[m.jsx(je,{icon:tE,fixedWidth:!0})," Visit stats"]}),c&&m.jsxs(m.Fragment,{children:[m.jsxs(Ne,{disabled:!c.canAddItemWithName(e.shortUrl),onClick:()=>c.addItemToCompare({name:e.shortUrl,query:fP(e)}),children:[m.jsx(je,{icon:Jy,fixedWidth:!0})," Compare visits"]}),m.jsx(Ne,{divider:!0,tag:"hr"})]}),m.jsxs(Ne,{tag:dv,shortUrl:e,suffix:"edit",asLink:!0,children:[m.jsx(je,{icon:eE,fixedWidth:!0})," Edit short URL"]}),f&&m.jsxs(Ne,{tag:dv,shortUrl:e,suffix:"redirect-rules",asLink:!0,children:[m.jsx(je,{icon:GK,fixedWidth:!0})," Manage redirect rules"]}),m.jsxs(Ne,{onClick:i,children:[m.jsx(je,{icon:zK,fixedWidth:!0})," QR code"]}),m.jsx(n,{shortUrl:e,isOpen:r,toggle:o}),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsxs(Ne,{className:"dropdown-item--danger",onClick:s,children:[m.jsx(je,{icon:JS,fixedWidth:!0})," Delete short URL"]}),m.jsx(t,{shortUrl:e,isOpen:a,toggle:l})]})},vRe=$t(rU,["DeleteShortUrlModal","QrCodeModal"]),iU="shlink/shortUrlCreation",PR={saving:!1,saved:!1,error:!1},gRe=e=>fn(`${iU}/createShortUrl`,t=>e().createShortUrl(t)),yRe=e=>{const{reducer:t,actions:n}=Qt({name:iU,initialState:PR,reducers:{resetCreateShortUrl:()=>PR},extraReducers:i=>{i.addCase(e.pending,()=>({saving:!0,saved:!1,error:!1})),i.addCase(e.rejected,(o,{error:a})=>({saving:!1,saved:!1,error:!0,errorData:zr(a)})),i.addCase(e.fulfilled,(o,{payload:a})=>({result:a,saving:!1,saved:!0,error:!1}))}}),{resetCreateShortUrl:r}=n;return{reducer:t,resetCreateShortUrl:r}},oU="shlink/shortUrlEdition",bRe={saving:!1,saved:!1,error:!1},_Re=e=>fn(`${oU}/editShortUrl`,({shortCode:t,domain:n,data:r})=>e().updateShortUrl(t,n,r)),xRe=e=>Qt({name:oU,initialState:bRe,reducers:{},extraReducers:t=>{t.addCase(e.pending,n=>({...n,saving:!0,error:!1,saved:!1})),t.addCase(e.rejected,(n,{error:r})=>({...n,saving:!1,error:!0,saved:!1,errorData:zr(r)})),t.addCase(e.fulfilled,(n,{payload:r})=>({shortUrl:r,saving:!1,error:!1,saved:!0}))}}),TR="shlink/shortUrlsDetails",jR={loading:!1,error:!1},wRe=e=>{const t=fn(`${TR}/getShortUrlsDetails`,async(r,{getState:i})=>{const{shortUrlsList:o}=i(),a=await Promise.all(r.map(async s=>{var l;const{shortCode:c,domain:f}=s,d=(l=o==null?void 0:o.shortUrls)==null?void 0:l.data.find(p=>Ed(p,c,f));return[s,d??await e().getShortUrl(c,f)]}));return new Map(a)}),{reducer:n}=Qt({name:TR,initialState:jR,reducers:{},extraReducers:r=>{r.addCase(t.pending,()=>({loading:!0,error:!1})),r.addCase(t.rejected,(i,{error:o})=>({loading:!1,error:!0,errorData:zr(o)})),r.addCase(t.fulfilled,(i,{payload:o})=>({...jR,shortUrls:o}))}});return{reducer:n,getShortUrlsDetails:t}},m_=({icon:e,className:t,...n})=>{const r=ea();return m.jsxs("div",{className:"icon-input-container",children:[m.jsx(Fn,{className:Ce("icon-input-container__input",t),innerRef:r,...n}),m.jsx(je,{icon:e,fixedWidth:!0,className:"icon-input-container__icon",onClick:()=>{var i;return(i=r.current)==null?void 0:i.focus()}})]})},ORe=({minDate:e,maxDate:t,value:n,onChange:r,withTime:i=!1,...o})=>{const a=R.useCallback(({target:l})=>{if(!l.value){r==null||r(null);return}r==null||r(jr(l.value))},[r]),s=R.useMemo(()=>i?Gh:ja,[i]);return m.jsx(Fn,{...o,type:i?"datetime-local":"date",value:s(n)??"",max:s(t)??void 0,min:s(e)??void 0,onChange:a})},Py=({label:e,id:t,...n})=>{const r=R.useId();return m.jsxs(m.Fragment,{children:[m.jsxs("label",{htmlFor:t??r,className:"mb-1",children:[e,":"]}),m.jsx(ORe,{id:t??r,...n})]})},v_=({children:e,infoTooltip:t,checked:n,onChange:r})=>m.jsxs("p",{children:[m.jsx(jD,{inline:!0,checked:n,className:t?"me-2":"",onChange:r,children:e}),t&&m.jsx(fv,{placement:"right",children:t})]}),SRe=({isOpen:e,toggle:t})=>m.jsxs(go,{isOpen:e,toggle:t,centered:!0,size:"lg",children:[m.jsx(yo,{toggle:t,children:"Info"}),m.jsxs($i,{children:[m.jsxs("p",{children:["When the ",m.jsx("b",{children:m.jsx("i",{children:'"Use existing URL if found"'})})," checkbox is checked, the server will return an existing short URL if it matches provided params."]}),m.jsx("p",{children:"These are the checks performed by Shlink in order to determine if an existing short URL should be returned:"}),m.jsxs("ul",{children:[m.jsx("li",{children:"When only the long URL is provided: The most recent match will be returned, or a new short URL will be created if none is found."}),m.jsxs("li",{children:["When long URL and custom slug and/or domain are provided: Same as in previous case, but it will try to match the short URL using both the long URL and the slug, the long URL and the domain, or the three of them.",m.jsx("br",{}),"If the slug is being used by another long URL, an error will be returned."]}),m.jsx("li",{children:"When other params are provided: Same as in previous cases, but it will try to match existing short URLs with all provided data. If any of them does not match, a new short URL will be created"})]})]})]}),ERe=()=>{const[e,t]=qt();return m.jsxs(m.Fragment,{children:[m.jsx(gl,{className:"p-0",title:"What does this mean?",onClick:t,children:m.jsx(je,{icon:nE})}),m.jsx(SRe,{isOpen:e,toggle:t})]})},Fm=e=>typeof e=="string"?Ya(e):e,CRe=e=>"shortCodeLength"in e&&"customSlug"in e&&"domain"in e,PRe=e=>"error"in e,aU=({basicMode:e=!1,saving:t,onSave:n,initialState:r,tagsList:i})=>{var o,a,s;const{TagsSelector:l,DomainSelector:c}=Rt(aU),[f,d]=R.useState(r),p=CRe(f),v=es("deviceLongUrls"),g=es("urlValidation"),y=g||p,x=R.useCallback(()=>d(r),[r]),_=R.useCallback((C,T)=>$s(C)?C:$s(T)?null:void 0,[]),b=R.useCallback((C,T)=>d(({deviceLongUrls:A={},...D})=>{var N;return{...D,deviceLongUrls:{...A,[C]:_(T,(N=r.deviceLongUrls)==null?void 0:N[C])}}}),[r.deviceLongUrls,_]),w=R.useCallback(C=>d(T=>({...T,tags:C})),[]),S=R.useCallback(async C=>(C.preventDefault(),n(f).then(T=>p&&!PRe(T)&&x()).catch(()=>{})),[p,n,x,f]),E=R.useMemo(()=>m.jsxs("div",{className:"d-flex flex-column gap-3",children:[m.jsx(Fn,{bsSize:"lg",type:"url",placeholder:"URL to be shortened",required:!0,value:f.longUrl,onChange:C=>d(T=>({...T,longUrl:C.target.value}))}),m.jsxs("div",{className:Ce("d-flex flex-column flex-lg-row gap-3",{"mb-3":e}),children:[e&&p&&m.jsx("div",{className:"w-100 w-lg-50",children:m.jsx(Fn,{bsSize:"lg",placeholder:"Custom slug",value:f.customSlug??"",onChange:C=>d(T=>({...T,customSlug:C.target.value}))})}),m.jsx("div",{className:Ce("w-100",{"w-lg-50":e}),children:m.jsx(l,{tags:i.tags,selectedTags:f.tags??[],onChange:w})})]})]}),[l,e,w,p,f,i.tags]);return m.jsxs("form",{name:"shortUrlForm",className:"short-url-form",onSubmit:S,children:[e&&E,!e&&m.jsxs(m.Fragment,{children:[m.jsxs(Kn,{children:[m.jsx("div",{className:Ce("mb-3",{"col-sm-6":v,"col-12":!v}),children:m.jsx(xt,{title:"Main options",children:E})}),v&&m.jsx("div",{className:"col-sm-6 mb-3",children:m.jsxs(xt,{title:"Device-specific long URLs",bodyClassName:"d-flex flex-column gap-3",children:[m.jsx(m_,{type:"url",icon:Pse,placeholder:"Android-specific redirection",value:((o=f.deviceLongUrls)==null?void 0:o.android)??"",onChange:({target:C})=>b("android",C.value)}),m.jsx(m_,{type:"url",icon:Cse,placeholder:"iOS-specific redirection",value:((a=f.deviceLongUrls)==null?void 0:a.ios)??"",onChange:({target:C})=>b("ios",C.value)}),m.jsx(m_,{type:"url",icon:HK,placeholder:"Desktop-specific redirection",value:((s=f.deviceLongUrls)==null?void 0:s.desktop)??"",onChange:({target:C})=>b("desktop",C.value)})]})})]}),m.jsxs(Kn,{children:[m.jsx("div",{className:"col-sm-6 mb-3",children:m.jsxs(xt,{title:"Customize the short URL",bodyClassName:"d-flex flex-column gap-3",children:[m.jsx(Fn,{placeholder:"Title",value:f.title??"",onChange:({target:C})=>d(T=>({...T,title:_(C.value,r.title)}))}),p&&m.jsxs(m.Fragment,{children:[m.jsxs(Kn,{children:[m.jsx("div",{className:"col-lg-6 mb-3 mb-lg-0",children:m.jsx(Fn,{placeholder:"Custom slug",value:f.customSlug??"",onChange:C=>d(T=>({...T,customSlug:C.target.value})),disabled:$s(f.shortCodeLength)})}),m.jsx("div",{className:"col-lg-6",children:m.jsx(Fn,{type:"number",placeholder:"Short code length",value:f.shortCodeLength??"",onChange:C=>d(T=>({...T,shortCodeLength:C.target.value})),min:4,disabled:$s(f.customSlug)})})]}),m.jsx(c,{value:f.domain,onChange:C=>d(T=>({...T,domain:C}))})]})]})}),m.jsx("div",{className:"col-sm-6 mb-3",children:m.jsxs(xt,{title:"Limit access to the short URL",children:[m.jsxs("div",{className:"row mb-3",children:[m.jsx("div",{className:"col-lg-6",children:m.jsx(Py,{label:"Enabled since",withTime:!0,maxDate:f.validUntil?Fm(f.validUntil):void 0,value:f.validSince?Fm(f.validSince):null,onChange:C=>d(T=>({...T,validSince:Ja(C)}))})}),m.jsx("div",{className:"col-lg-6 mt-3 mt-lg-0",children:m.jsx(Py,{label:"Enabled until",withTime:!0,minDate:f.validSince?Fm(f.validSince):void 0,value:f.validUntil?Fm(f.validUntil):null,onChange:C=>d(T=>({...T,validUntil:Ja(C)}))})})]}),m.jsxs("div",{children:[m.jsx("label",{htmlFor:"maxVisits",className:"mb-1",children:"Maximum visits allowed:"}),m.jsx(Fn,{id:"maxVisits",type:"number",min:1,placeholder:"25...",value:f.maxVisits??"",onChange:C=>d(T=>({...T,maxVisits:$s(C.target.value)?Number(C.target.value):null}))})]})]})})]}),m.jsxs(Kn,{children:[y&&m.jsx("div",{className:"col-sm-6 mb-3",children:m.jsxs(xt,{title:"Extra checks",children:[g&&m.jsx(v_,{infoTooltip:"If checked, Shlink will try to reach the long URL, failing in case it's not publicly accessible.",checked:f.validateUrl,onChange:C=>d(T=>({...T,validateUrl:C})),children:"Validate URL"}),p&&m.jsxs("p",{children:[m.jsx(jD,{inline:!0,className:"me-2",checked:f.findIfExists,onChange:C=>d(T=>({...T,findIfExists:C})),children:"Use existing URL if found"}),m.jsx(ERe,{})]})]})}),m.jsx("div",{className:Ce("mb-3",{"col-sm-6":y}),children:m.jsxs(xt,{title:"Configure behavior",children:[m.jsx(v_,{infoTooltip:"This short URL will be included in the robots.txt for your Shlink instance, allowing web crawlers (like Google) to index it.",checked:f.crawlable,onChange:C=>d(T=>({...T,crawlable:C})),children:"Make it crawlable"}),m.jsx(v_,{infoTooltip:"When this short URL is visited, any query params appended to it will be forwarded to the long URL.",checked:f.forwardQuery,onChange:C=>d(T=>({...T,forwardQuery:C})),children:"Forward query params on redirect"})]})})]})]}),m.jsx("div",{className:"text-center",children:m.jsx(Ke,{outline:!0,color:"primary",disabled:t||!f.longUrl,className:"btn-xs-block",children:t?"Saving...":"Save"})})]})},TRe=$t(aU,["TagsSelector","DomainSelector"]),jRe=({active:e,allText:t,onChange:n})=>m.jsxs(m.Fragment,{children:[m.jsx(Ne,{active:e==="all",onClick:()=>n("all"),children:t}),m.jsx(Ne,{divider:!0,tag:"hr"}),ZNe.map(r=>m.jsx(Ne,{active:e===r,onClick:()=>n(r),children:dB(r)},r))]}),ARe=({startDate:e,endDate:t,disabled:n=!1,onStartDateChange:r,onEndDateChange:i})=>m.jsxs("div",{className:"row",children:[m.jsx("div",{className:"col-md-6",children:m.jsx(Py,{label:"Since",value:e,maxDate:t??void 0,disabled:n,onChange:r})}),m.jsx("div",{className:"col-md-6 mt-3 mt-md-0",children:m.jsx(Py,{label:"Until",value:t,minDate:e??void 0,disabled:n,onChange:o=>i(o&&Jc(o))})})]}),_P=({onDatesChange:e,dateRangeOrInterval:t,defaultText:n,disabled:r})=>{const i=R.useMemo(()=>dB(t)??n,[t,n]),[o,a]=R.useMemo(()=>Oy(t)?[void 0,t]:[t,void 0],[t]),s=R.useCallback(l=>{Oy(l)?e(hB(l),l):e(l)},[e]);return m.jsxs(ta,{disabled:r,text:i,children:[m.jsx(jRe,{allText:n,active:a,onChange:s}),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsx("div",{className:"px-3 py-1",children:m.jsx(ARe,{...o,onStartDateChange:l=>s({...o,startDate:l}),onEndDateChange:l=>s({...o,endDate:l})})})]})},kRe={dateCreated:"Created at",shortCode:"Short URL",longUrl:"Long URL",title:"Title",visits:"Visits"},NRe=({onChange:e,selected:t={},className:n,supportsDisabledFiltering:r})=>{const{excludeBots:i=!1,excludeMaxVisitsReached:o=!1,excludePastValidUntil:a=!1}=t,s=l=>()=>e({...t,[l]:!(t!=null&&t[l])});return m.jsxs(ta,{text:"Filters",dropdownClassName:n,end:!0,minWidth:250,children:[m.jsx(Ne,{header:!0,"aria-hidden":!0,children:"Visits:"}),m.jsx(Ne,{active:i,onClick:s("excludeBots"),children:"Ignore visits from bots"}),r&&m.jsxs(m.Fragment,{children:[m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsx(Ne,{header:!0,"aria-hidden":!0,children:"Short URLs:"}),m.jsx(Ne,{active:o,onClick:s("excludeMaxVisitsReached"),children:"Exclude with visits reached"}),m.jsx(Ne,{active:a,onClick:s("excludePastValidUntil"),children:"Exclude enabled in the past"})]}),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsx(Ne,{disabled:t.excludeBots===void 0&&t.excludeMaxVisitsReached===void 0&&t.excludePastValidUntil===void 0,onClick:()=>e({excludeBots:void 0,excludeMaxVisitsReached:void 0,excludePastValidUntil:void 0}),children:m.jsx("i",{children:"Reset to defaults"})})]})},sU=({className:e,shortUrlsAmount:t,order:n,handleOrderBy:r,tagsList:i})=>{const{ExportShortUrlsBtn:o,TagsSelector:a}=Rt(sU),[{search:s,tags:l,startDate:c,endDate:f,excludeBots:d,excludeMaxVisitsReached:p,excludePastValidUntil:v,tagsMode:g="any"},y]=fb(),x=es("filterDisabledUrls"),_=_r("visits"),[b,w]=R.useState(),S=R.useCallback(({startDate:A,endDate:D},N)=>{y({startDate:Ja(A)??void 0,endDate:Ja(D)??void 0}),w(N)},[y]),E=R.useCallback(A=>y({search:A||void 0}),[y]),C=R.useCallback(A=>y({tags:A}),[y]),T=R.useCallback(()=>y({tagsMode:g==="any"?"all":"any"}),[g,y]);return m.jsxs("div",{className:Ce("short-urls-filtering-bar-container",e),children:[m.jsx(cp,{initialValue:s,onChange:E}),m.jsxs(s0,{className:"mt-3",children:[m.jsx(a,{immutable:!0,placeholder:"With tags...",tags:i.tags,selectedTags:l,onChange:C}),l.length>1&&m.jsxs(m.Fragment,{children:[m.jsx(Ke,{outline:!0,color:"secondary",onClick:T,id:"tagsModeBtn","aria-label":"Change tags mode",children:m.jsx(je,{className:"short-urls-filtering-bar__tags-icon",icon:g==="all"?K6:gK})}),m.jsx(br,{target:"tagsModeBtn",placement:"left",children:g==="all"?"With all the tags.":"With any of the tags."})]})]}),m.jsxs(Kn,{className:"flex-lg-row-reverse",children:[m.jsx("div",{className:"col-lg-8 col-xl-6 mt-3",children:m.jsxs("div",{className:"d-md-flex",children:[m.jsx("div",{className:"flex-grow-1",children:m.jsx(_P,{defaultText:"All short URLs",dateRangeOrInterval:b??fB(c,f),onDatesChange:S})}),m.jsx(NRe,{className:"ms-0 ms-md-2 mt-3 mt-md-0",selected:{excludeBots:d??(_==null?void 0:_.excludeBots),excludeMaxVisitsReached:p,excludePastValidUntil:v},onChange:y,supportsDisabledFiltering:x})]})}),m.jsx("div",{className:"col-6 col-lg-4 col-xl-6 mt-3",children:m.jsx(o,{amount:t})}),m.jsx("div",{className:"col-6 d-lg-none mt-3",children:m.jsx(up,{prefixed:!1,items:kRe,order:n,onChange:r})})]})]})},MRe=$t(sU,["ExportShortUrlsBtn","TagsSelector"]);function Cd({currentOrder:e,field:t,className:n="ms-1"}){return!e.dir||e.field!==t?null:m.jsx(je,{icon:e.dir==="ASC"?cK:wK,className:n})}const Zl=2,HO="...",lU=(e,t)=>{const n=VE(Math.max(Zl,e-Zl),Math.min(t-1,e+Zl)+1);return e-Zl>Zl&&n.unshift(HO),e+Zle===HO,cU=e=>qh(e)?e:Gt(e),uU=(e,t)=>qh(e)?`${e}_${t}`:`${e}`,LRe=({paginator:e,currentQueryString:t=""})=>{const{currentPage:n=0,pagesCount:r=0}=e??{},i=ds(),o=s=>`${i}/list-short-urls/${s}${t}`;if(r<=1)return m.jsx("div",{className:"pb-3"});const a=()=>lU(n,r).map((s,l)=>m.jsx(Xs,{disabled:qh(s),active:n===s,children:m.jsx(Qs,{tag:St,to:o(s),children:cU(s)})},uU(s,l)));return m.jsxs(kE,{className:"sticky-card-paginator py-3",listClassName:"flex-wrap justify-content-center mb-0",children:[m.jsx(Xs,{disabled:n===1,children:m.jsx(Qs,{previous:!0,tag:St,to:o(n-1)})}),a(),m.jsx(Xs,{disabled:n>=r,children:m.jsx(Qs,{next:!0,tag:St,to:o(n+1)})})]})},RRe={field:"dateCreated",dir:"DESC"},fU=Bi(({listShortUrls:e,shortUrlsList:t})=>{var n,r,i;const{ShortUrlsTable:o,ShortUrlsFilteringBar:a}=Rt(fU),{page:s}=Cu(),l=gr(),[{tags:c,search:f,startDate:d,endDate:p,orderBy:v,tagsMode:g,excludeBots:y,excludePastValidUntil:x,excludeMaxVisitsReached:_},b]=fb(),w=qE(),[S,E]=R.useState(v??((n=w.shortUrlsList)==null?void 0:n.defaultOrdering)??RRe),{pagination:C}=(t==null?void 0:t.shortUrls)??{},T=R.useMemo(()=>{var X;return y??((X=w.visits)==null?void 0:X.excludeBots)},[y,(r=w.visits)==null?void 0:r.excludeBots]),A=es("excludeBotsOnShortUrls"),D=R.useCallback((X,Q)=>{b({orderBy:{field:X,dir:Q}}),E({field:X,dir:Q})},[b]),N=X=>()=>D(X,u0(X,S.field,S.dir)),I=X=>m.jsx(Cd,{currentOrder:S,field:X}),F=R.useCallback(X=>b({tags:[...new Set([...c,X])]}),[c,b]),K=R.useCallback(({field:X,dir:Q})=>A&&T&&X==="visits"?{field:"nonBotVisits",dir:Q}:{field:X,dir:Q},[T,A]),W=lP();return R.useEffect(()=>{e({page:s,searchTerm:f,tags:c,startDate:d,endDate:p,orderBy:K(S),tagsMode:g,excludePastValidUntil:x,excludeMaxVisitsReached:_})},[e,K,s,f,c,d,p,S,g,x,_]),m.jsxs(sP,{value:W,children:[m.jsx(a,{shortUrlsAmount:(i=t.shortUrls)==null?void 0:i.pagination.totalItems,order:S,handleOrderBy:D,className:"mb-3"}),m.jsx(cP,{type:"short-urls",className:"mb-3"}),m.jsxs(vr,{body:!0,className:Ce({"pb-0":!t.loading}),children:[m.jsx(o,{shortUrlsList:t,orderByColumn:N,renderOrderIcon:I,onTagClick:F}),!t.loading&&m.jsx(LRe,{paginator:C,currentQueryString:l.search})]})]})},()=>[nr.visits]),$Re=$t(fU,["ShortUrlsTable","ShortUrlsFilteringBar"]),dU=({orderByColumn:e,renderOrderIcon:t,shortUrlsList:n,onTagClick:r,className:i})=>{const{ShortUrlsRow:o}=Rt(dU),{error:a,loading:s,shortUrls:l}=n,c=Ce({"short-urls-table__header-cell--with-action":!!e}),f=Ce("short-urls-table__header-cell",c),d=Ce("table table-hover responsive-table short-urls-table",i),p=()=>a?m.jsx("tr",{children:m.jsx("td",{colSpan:6,className:"text-center table-danger text-dark",children:"Something went wrong while loading short URLs :("})}):s?m.jsx("tr",{children:m.jsx("td",{colSpan:6,className:"text-center",children:"Loading..."})}):!s&&(!l||l.data.length===0)?m.jsx("tr",{children:m.jsx("td",{colSpan:6,className:"text-center",children:"No results found"})}):l==null?void 0:l.data.map(v=>m.jsx(o,{shortUrl:v,onTagClick:r},v.shortUrl));return m.jsxs("table",{className:d,children:[m.jsx("thead",{className:"responsive-table__header short-urls-table__header",children:m.jsxs("tr",{children:[m.jsxs("th",{className:f,onClick:e==null?void 0:e("dateCreated"),children:["Created at ",t==null?void 0:t("dateCreated")]}),m.jsxs("th",{className:f,onClick:e==null?void 0:e("shortCode"),children:["Short URL ",t==null?void 0:t("shortCode")]}),m.jsxs("th",{className:"short-urls-table__header-cell",children:[m.jsxs(gl,{className:Ce("p-0",c),onClick:e==null?void 0:e("title"),children:["Title ",t==null?void 0:t("title")]}),"  /  ",m.jsxs(gl,{className:Ce("p-0",c),onClick:e==null?void 0:e("longUrl"),children:[m.jsx("span",{className:"indivisible",children:"Long URL"})," ",t==null?void 0:t("longUrl")]})]}),m.jsx("th",{className:"short-urls-table__header-cell",children:"Tags"}),m.jsx("th",{className:f,onClick:e==null?void 0:e("visits"),children:m.jsxs("span",{className:"indivisible",children:["Visits ",t==null?void 0:t("visits")]})}),m.jsx("th",{className:"short-urls-table__header-cell",colSpan:2,"aria-hidden":!0})]})}),m.jsx("tbody",{children:p()})]})},IRe=$t(dU,["ShortUrlsRow"]),DRe=(e,t)=>{e.factory("ShortUrlsList",$Re),e.decorator("ShortUrlsList",t(["mercureInfo","shortUrlsList"],["listShortUrls","createNewVisits","loadMercureInfo"])),e.factory("ShortUrlsTable",IRe),e.factory("ShortUrlsRow",dRe),e.factory("ShortUrlsRowMenu",vRe),e.factory("CreateShortUrlResult",JLe),e.factory("ShortUrlForm",TRe),e.decorator("ShortUrlForm",t(["tagsList"])),e.factory("CreateShortUrl",XLe),e.decorator("CreateShortUrl",t(["shortUrlCreation"],["createShortUrl","resetCreateShortUrl"])),e.factory("EditShortUrl",QLe),e.decorator("EditShortUrl",t(["shortUrlsDetails","shortUrlEdition"],["getShortUrlsDetails","editShortUrl"])),e.serviceFactory("DeleteShortUrlModal",()=>eRe),e.decorator("DeleteShortUrlModal",t(["shortUrlDeletion"],["deleteShortUrl","shortUrlDeleted","resetDeleteShortUrl"])),e.factory("QrCodeModal",oRe),e.factory("ExportShortUrlsBtn",tRe),e.factory("ShortUrlsFilteringBar",MRe),e.decorator("ShortUrlsFilteringBar",t(["tagsList"])),e.serviceFactory("shortUrlsListReducerCreator",RMe,"listShortUrls","editShortUrl","createShortUrl"),e.serviceFactory("shortUrlsListReducer",n=>n.reducer,"shortUrlsListReducerCreator"),e.serviceFactory("shortUrlCreationReducerCreator",yRe,"createShortUrl"),e.serviceFactory("shortUrlCreationReducer",n=>n.reducer,"shortUrlCreationReducerCreator"),e.serviceFactory("shortUrlEditionReducerCreator",xRe,"editShortUrl"),e.serviceFactory("shortUrlEditionReducer",n=>n.reducer,"shortUrlEditionReducerCreator"),e.serviceFactory("shortUrlDeletionReducerCreator",NMe,"deleteShortUrl"),e.serviceFactory("shortUrlDeletionReducer",n=>n.reducer,"shortUrlDeletionReducerCreator"),e.serviceFactory("shortUrlsDetailsReducerCreator",wRe,"apiClientFactory"),e.serviceFactory("shortUrlsDetailsReducer",n=>n.reducer,"shortUrlsDetailsReducerCreator"),e.serviceFactory("listShortUrls",LMe,"apiClientFactory"),e.serviceFactory("createShortUrl",gRe,"apiClientFactory"),e.serviceFactory("resetCreateShortUrl",n=>n.resetCreateShortUrl,"shortUrlCreationReducerCreator"),e.serviceFactory("deleteShortUrl",kMe,"apiClientFactory"),e.serviceFactory("resetDeleteShortUrl",n=>n.resetDeleteShortUrl,"shortUrlDeletionReducerCreator"),e.serviceFactory("shortUrlDeleted",()=>wB),e.serviceFactory("getShortUrlsDetails",n=>n.getShortUrlsDetails,"shortUrlsDetailsReducerCreator"),e.serviceFactory("editShortUrl",_Re,"apiClientFactory")},FRe=({tag:e,toggle:t,isOpen:n,deleteTag:r,tagDelete:i,tagDeleted:o})=>{const{deleting:a,error:s,deleted:l,errorData:c}=i;return m.jsxs(go,{toggle:t,isOpen:n,centered:!0,onClosed:()=>l&&o(e),children:[m.jsx(yo,{toggle:t,className:"text-danger",children:"Delete tag"}),m.jsxs($i,{children:["Are you sure you want to delete tag ",m.jsx("b",{children:e}),"?",s&&m.jsx(er,{type:"error",small:!0,className:"mt-2",children:m.jsx(mo,{errorData:c,fallbackMessage:"Something went wrong while deleting the tag :("})})]}),m.jsxs(as,{children:[m.jsx(Ke,{color:"link",onClick:t,children:"Cancel"}),m.jsx(Ke,{color:"danger",disabled:a,onClick:async()=>{await r(e),t()},children:a?"Deleting tag...":"Delete tag"})]})]})},hU=({tag:e,editTag:t,toggle:n,tagEdited:r,isOpen:i,tagEdit:o})=>{const{ColorGenerator:a}=Rt(hU),[s,l]=R.useState(e),[c,f]=R.useState(a.getColorForKey(e)),{editing:d,error:p,edited:v,errorData:g}=o,y=xB(async()=>{await t({oldName:e,newName:s,color:c}),n()}),x=R.useCallback(()=>v&&r({oldName:e,newName:s,color:c}),[c,v,s,e,r]);return m.jsx(go,{isOpen:i,toggle:n,centered:!0,onClosed:x,children:m.jsxs("form",{name:"editTag",onSubmit:y,children:[m.jsx(yo,{toggle:n,children:"Edit tag"}),m.jsxs($i,{children:[m.jsxs(s0,{children:[m.jsxs("div",{className:"input-group-text p-0 position-relative",style:{backgroundColor:c,borderColor:c},children:[m.jsx(je,{icon:uK,className:"position-absolute top-50 start-50 translate-middle text-white"}),m.jsx(Fn,{className:"form-control-color opacity-0",type:"color",value:c,onChange:_=>f(_.target.value)})]}),m.jsx(Fn,{value:s,placeholder:"Tag",required:!0,onChange:({target:_})=>l(_.value)})]}),p&&m.jsx(er,{type:"error",small:!0,className:"mt-2",children:m.jsx(mo,{errorData:g,fallbackMessage:"Something went wrong while editing the tag :("})})]}),m.jsxs(as,{children:[m.jsx(Ke,{type:"button",color:"link",onClick:n,children:"Cancel"}),m.jsx(Ke,{color:"primary",disabled:d,children:d?"Saving...":"Save"})]})]})})},BRe=$t(hU,["ColorGenerator"]),URe=/\s+/g,pU=e=>e.trim().toLowerCase().replace(URe,"-"),mU=({color:e})=>m.jsx("div",{style:{backgroundColor:e},className:"color-bullet"}),vU=({tag:e,colorGenerator:t})=>m.jsx(mU,{color:t.getColorForKey(e)});let AR=1;const gU="Tag not found",yU="Add tag",zRe=e=>e!==gU,VRe=e=>e===yU,kR=e=>(AR+=1,{label:e,value:`${e}${AR}`}),WRe=e=>({tag:t,onClick:n})=>m.jsx(hb,{colorGenerator:e,text:t.label,className:"react-tags__tag",onClose:n}),HRe=(e,t)=>({option:n,classNames:r,...i})=>{var o;const a=zRe(n.label),s=VRe(n.label);return m.jsx("div",{className:Ce(r.option,{[r.optionIsActive]:a&&n.active,"react-tags__listbox-option--not-selectable":!a}),...i,children:a?m.jsxs(m.Fragment,{children:[!s&&m.jsx(vU,{tag:`${n.label}`,colorGenerator:e}),s?m.jsxs("i",{children:['Add "',pU(((o=t.current)==null?void 0:o.input.value)??""),'"']}):n.label]}):m.jsx("i",{children:n.label})})},bU=({selectedTags:e,onChange:t,placeholder:n,tags:r,immutable:i=!1})=>{const{ColorGenerator:o}=Rt(bU),a=_r("shortUrlCreation"),s=(a==null?void 0:a.tagFilteringMode)??"startsWith",l=ea();return m.jsx(Sle,{ref:l,selected:e.map(kR),suggestions:r.filter(c=>!e.includes(c)).map(kR),renderTag:WRe(o),renderOption:HRe(o,l),activateFirstOption:!0,allowNew:!i,newOptionText:yU,noOptionsText:gU,placeholderText:n??"Add tags to the URL",delimiterKeys:["Enter",","],suggestionsTransform:(c,f)=>{const d=c.toLowerCase().trim();return d.length<1?[]:[...f.filter(({label:p})=>s==="includes"?p.includes(d):p.startsWith(d))].slice(0,5)},onDelete:c=>{const f=[...e];f.splice(c,1),t(f)},onAdd:({label:c})=>t([...new Set([...e,...c.split(",").map(pU)])])})},GRe=$t(bU,["ColorGenerator"]),GO="shlink/tagDelete",qRe={deleting:!1,deleted:!1,error:!1},_U=un(`${GO}/tagDeleted`),KRe=e=>{const t=fn(`${GO}/deleteTag`,async r=>{await e().deleteTags([r])}),{reducer:n}=Qt({name:GO,initialState:qRe,reducers:{},extraReducers:r=>{r.addCase(t.pending,()=>({deleting:!0,deleted:!1,error:!1})),r.addCase(t.rejected,(i,{error:o})=>({deleting:!1,deleted:!1,error:!0,errorData:zr(o)})),r.addCase(t.fulfilled,()=>({deleting:!1,deleted:!0,error:!1}))}});return{reducer:n,deleteTag:t}},xP="shlink/tagEdit",YRe={editing:!1,edited:!1,error:!1},xU=un(`${xP}/tagEdited`),ZRe=(e,t)=>fn(`${xP}/editTag`,async({oldName:n,newName:r,color:i})=>(await e().editTag(n,r),t.setColorForKey(r,i),{oldName:n,newName:r,color:i})),XRe=e=>Qt({name:xP,initialState:YRe,reducers:{},extraReducers:t=>{t.addCase(e.pending,()=>({editing:!0,edited:!1,error:!1})),t.addCase(e.rejected,(n,{error:r})=>({editing:!1,edited:!1,error:!0,errorData:zr(r)})),t.addCase(e.fulfilled,(n,{payload:r})=>{const{oldName:i,newName:o}=r;return{oldName:i,newName:o,editing:!1,edited:!0,error:!1}})}}),wP="shlink/tagsList",g_={tags:[],filteredTags:[],stats:{},loading:!1,error:!1},NR=(e,t)=>n=>n===e?t:n,MR=(e,t)=>e.filter(n=>n!==t),QRe=(e,t)=>e.reduce((n,[r,i])=>{if(!n[r])return n;const{bots:o,nonBots:a}=i,s=n[r];return{...n,[r]:{...s,visitsSummary:s.visitsSummary&&{total:s.visitsSummary.total+o+a,bots:s.visitsSummary.bots+o,nonBots:s.visitsSummary.nonBots+a},visitsCount:(s.visitsCount??0)+o+a}}},{...t}),JRe=e=>Object.entries(e.reduce((t,{shortUrl:n,visit:r})=>(n==null||n.tags.forEach(i=>{t[i]||(t[i]={bots:0,nonBots:0}),r.potentialBot?t[i].bots+=1:t[i].nonBots+=1}),t),{})),e4e=e=>fn(`${wP}/listTags`,async()=>{const{data:t}=await e().tagsStats(),n=t.reduce((r,{tag:i,...o})=>(r[i]=o,r),{});return{tags:Object.keys(n),stats:n}}),wU=un(`${wP}/filterTags`),t4e=(e,t)=>Qt({name:wP,initialState:g_,reducers:{},extraReducers:n=>{n.addCase(wU,(r,{payload:i})=>({...r,filteredTags:r.tags.filter(o=>o.toLowerCase().match(i.toLowerCase()))})),n.addCase(e.pending,r=>({...r,loading:!0,error:!1})),n.addCase(e.rejected,(r,{error:i})=>({...g_,error:!0,errorData:zr(i)})),n.addCase(e.fulfilled,(r,{payload:i})=>({...g_,stats:i.stats,tags:i.tags,filteredTags:i.tags})),n.addCase(_U,({tags:r,filteredTags:i,...o},{payload:a})=>({...o,tags:MR(r,a),filteredTags:MR(i,a)})),n.addCase(xU,({tags:r,filteredTags:i,stats:o,...a},{payload:s})=>({...a,stats:{...o,[s.newName]:o[s.oldName]},tags:r.map(NR(s.oldName,s.newName)).sort(),filteredTags:i.map(NR(s.oldName,s.newName)).sort()})),n.addCase(Xu,(r,{payload:i})=>({...r,stats:QRe(JRe(i.createdVisits),r.stats)})),n.addCase(t.fulfilled,({tags:r,...i},{payload:o})=>({...i,tags:r.concat(o.tags.filter(a=>!r.includes(a)))}))}}),n4e={tag:"Tag",shortUrls:"Short URLs",visits:"Visits"},OU=Bi(({filterTags:e,tagsList:t})=>{var n,r;const{TagsTable:i}=Rt(OU),o=qE(),[a,s]=R.useState(((n=o.tags)==null?void 0:n.defaultOrdering)??{}),l=R.useMemo(()=>{const f=t.filteredTags.map(d=>{var p,v,g;const y=t.stats[d],x=((p=o.visits)!=null&&p.excludeBots?(v=y==null?void 0:y.visitsSummary)==null?void 0:v.nonBots:(g=y==null?void 0:y.visitsSummary)==null?void 0:g.total)??(y==null?void 0:y.visitsCount)??0;return{tag:d,visits:x,shortUrls:(y==null?void 0:y.shortUrlsCount)??0}});return kD(f,a)},[a,(r=o.visits)==null?void 0:r.excludeBots,t.filteredTags,t.stats]),c=lP();return t.loading?m.jsx(Ho,{loading:!0}):t.error?m.jsx(er,{type:"error",children:m.jsx(mo,{errorData:t.errorData,fallbackMessage:"Error loading tags :("})}):m.jsxs(sP,{value:c,children:[m.jsx(cp,{className:"mb-3",onChange:e}),m.jsx(Kn,{className:"mb-3",children:m.jsx("div",{className:"col-lg-6 offset-lg-6",children:m.jsx(up,{items:n4e,order:a,onChange:(f,d)=>s({field:f,dir:d})})})}),m.jsx(cP,{type:"tags",className:"mb-3"}),m.jsx(i,{sortedTags:l,currentOrder:a,orderByColumn:f=>()=>{const d=u0(f,a.field,a.dir);s({field:d?f:void 0,dir:d})}})]})},()=>[nr.visits]),r4e=$t(OU,["TagsTable"]),OP=({pagesCount:e,currentPage:t,setCurrentPage:n,centered:r=!0})=>{if(e<2)return null;const i=o=>()=>!qh(o)&&n(o);return m.jsxs(kE,{listClassName:Ce("flex-wrap mb-0 simple-paginator",{"justify-content-center":r}),children:[m.jsx(Xs,{disabled:t<=1,children:m.jsx(Qs,{previous:!0,tag:"span",onClick:i(t-1)})}),lU(t,e).map((o,a)=>m.jsx(Xs,{disabled:qh(o),active:t===o,children:m.jsx(Qs,{role:"link",tag:"span",onClick:i(o),children:cU(o)})},uU(o,a))),m.jsx(Xs,{disabled:t>=e,children:m.jsx(Qs,{next:!0,tag:"span",onClick:i(t+1)})})]})},i4e=20,SU=({sortedTags:e,orderByColumn:t,currentOrder:n})=>{const{TagsTableRow:r}=Rt(SU),i=R.useRef(!0),{page:o=1}=Au(),[a,s]=gMe("page",Number(o)),l=jc(e,i4e),c=l.length>1,f=l[a-1]??[];return R.useEffect(()=>{!i.current&&s(1),i.current=!1},[s,e]),R.useEffect(()=>{scrollTo(0,0)},[a]),m.jsxs(xt,{bodyClassName:c?"pb-1":"",children:[m.jsxs("table",{className:"table table-hover responsive-table mb-0",children:[m.jsxs("thead",{className:"responsive-table__header",children:[m.jsxs("tr",{children:[m.jsxs("th",{className:"tags-table__header-cell",onClick:t("tag"),children:["Tag ",m.jsx(Cd,{currentOrder:n,field:"tag"})]}),m.jsxs("th",{className:"tags-table__header-cell text-lg-end",onClick:t("shortUrls"),children:["Short URLs ",m.jsx(Cd,{currentOrder:n,field:"shortUrls"})]}),m.jsxs("th",{className:"tags-table__header-cell text-lg-end",onClick:t("visits"),children:["Visits ",m.jsx(Cd,{currentOrder:n,field:"visits"})]}),m.jsx("th",{className:"tags-table__header-cell",children:m.jsx("span",{className:"sr-only",children:"Options"})})]}),m.jsx("tr",{children:m.jsx("th",{"aria-hidden":!0,colSpan:4,className:"p-0 border-top-0"})})]}),m.jsxs("tbody",{children:[f.length===0&&m.jsx("tr",{children:m.jsx("td",{colSpan:4,className:"text-center",children:"No tags found"})}),f.map(d=>m.jsx(r,{tag:d},d.tag))]})]}),c&&m.jsx("div",{className:"sticky-card-paginator",children:m.jsx(OP,{pagesCount:l.length,currentPage:a,setCurrentPage:s})})]},a)},o4e=$t(SU,["TagsTableRow"]),EU=({tag:e})=>{const{DeleteTagConfirmModal:t,EditTagModal:n,ColorGenerator:r}=Rt(EU),[i,o]=qt(),[a,s]=qt(),l=ds(),c=ab();return m.jsxs("tr",{className:"responsive-table__row",children:[m.jsxs("th",{className:"responsive-table__cell","data-th":"Tag",children:[m.jsx(vU,{tag:e.tag,colorGenerator:r})," ",e.tag]}),m.jsx("td",{className:"responsive-table__cell text-lg-end","data-th":"Short URLs",children:m.jsx(St,{to:`${l}/list-short-urls/1?tags=${encodeURIComponent(e.tag)}`,children:Gt(e.shortUrls)})}),m.jsx("td",{className:"responsive-table__cell text-lg-end","data-th":"Visits",children:m.jsx(St,{to:`${l}/tag/${e.tag}/visits`,children:Gt(e.visits)})}),m.jsx("td",{className:"responsive-table__cell text-lg-end",children:m.jsxs(c0,{children:[m.jsxs(Ne,{onClick:s,children:[m.jsx(je,{icon:H6,fixedWidth:!0,className:"me-1"})," Edit"]}),m.jsxs(Ne,{disabled:!c||!c.canAddItemWithName(e.tag),onClick:()=>c==null?void 0:c.addItemToCompare({name:e.tag,query:e.tag,style:r.stylesForKey(e.tag)}),children:[m.jsx(je,{icon:Jy,fixedWidth:!0})," Compare visits"]}),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsxs(Ne,{className:"dropdown-item--danger",onClick:o,children:[m.jsx(je,{icon:hK,fixedWidth:!0,className:"me-1"})," Delete tag"]})]})}),m.jsx(n,{tag:e.tag,toggle:s,isOpen:a}),m.jsx(t,{tag:e.tag,toggle:o,isOpen:i})]})},a4e=$t(EU,["DeleteTagConfirmModal","EditTagModal","ColorGenerator"]),s4e=(e,t)=>{e.factory("TagsSelector",GRe),e.serviceFactory("DeleteTagConfirmModal",()=>FRe),e.decorator("DeleteTagConfirmModal",t(["tagDelete"],["deleteTag","tagDeleted"])),e.factory("EditTagModal",BRe),e.decorator("EditTagModal",t(["tagEdit"],["editTag","tagEdited"])),e.factory("TagsTableRow",a4e),e.factory("TagsTable",o4e),e.factory("TagsList",r4e),e.decorator("TagsList",t(["tagsList","mercureInfo"],["filterTags","createNewVisits","loadMercureInfo"])),e.serviceFactory("tagEditReducerCreator",XRe,"editTag"),e.serviceFactory("tagEditReducer",n=>n.reducer,"tagEditReducerCreator"),e.serviceFactory("tagDeleteReducerCreator",KRe,"apiClientFactory"),e.serviceFactory("tagDeleteReducer",n=>n.reducer,"tagDeleteReducerCreator"),e.serviceFactory("tagsListReducerCreator",t4e,"listTags","createShortUrl"),e.serviceFactory("tagsListReducer",n=>n.reducer,"tagsListReducerCreator"),e.serviceFactory("listTags",e4e,"apiClientFactory"),e.serviceFactory("filterTags",()=>wU),e.serviceFactory("deleteTag",n=>n.deleteTag,"tagDeleteReducerCreator"),e.serviceFactory("tagDeleted",()=>_U),e.serviceFactory("editTag",ZRe,"apiClientFactory","ColorGenerator"),e.serviceFactory("tagEdited",()=>xU)},l4e=new x5,c4e=e=>l4e.parse(e),u4e=6,LR="0123456789ABCDEF",f4e=128,{floor:d4e,random:h4e,sqrt:p4e,round:m4e}=Math,v4e=()=>`#${mP(u4e,()=>LR[d4e(h4e()*LR.length)]).join("")}`,RR=e=>e.toLowerCase().trim(),g4e=e=>(e.match(/../g)??[]).map(t=>parseInt(t,16)||0),y4e=(e=0,t=0,n=0)=>m4e(p4e(.299*e**2+.587*t**2+.114*n**2));class b4e{constructor(t){za(this,"colors"),za(this,"lights");var n;this.storage=t,this.colors=((n=this.storage)==null?void 0:n.getTagColors())??{},this.lights={}}getColorForKey(t){const n=RR(t);return this.colors[n]||this.setColorForKey(n,v4e())}setColorForKey(t,n){var r;const i=RR(t);return this.colors[i]=n,(r=this.storage)==null||r.storeTagColors(this.colors),n}stylesForKey(t){const n=this.getColorForKey(t);return{backgroundColor:n,color:this.isLightColor(n)?"#222":"#fff"}}isLightColor(t){const n=t.substring(1);if(this.lights[n]===void 0){const r=g4e(n);this.lights[n]=y4e(...r)>=f4e}return this.lights[n]}}const CU=({document:e},t,n)=>{const r=e.createElement("a");r.setAttribute("href",t),r.setAttribute("download",n),r.style.visibility="hidden",e.body.appendChild(r),r.click(),e.body.removeChild(r)},_4e=(e,t,n)=>{const r=new Blob([t],{type:"text/csv;charset=utf-8;"}),i=URL.createObjectURL(r);CU(e,i,n)};class x4e{constructor(t,n){this.fetch=t,this.window=n}async saveImage(t,n){const r=await this.fetch(t).then(o=>o.blob()),i=URL.createObjectURL(r);CU(this.window,i,n)}}class w4e{constructor(t,n){za(this,"exportVisits",(r,i)=>{i.length&&this.exportCsv(r,i)}),za(this,"exportShortUrls",r=>{r.length&&this.exportCsv("short_urls.csv",r)}),za(this,"exportCsv",(r,i)=>{const o=this.jsonToCsv(i);_4e(this.window,o,r)}),this.window=t,this.jsonToCsv=n}}function O4e(e){e.constant("window",window),e.constant("fetch",window.fetch.bind(window)),e.service("ImageDownloader",x4e,"fetch","window"),e.service("ColorGenerator",b4e,"TagColorsStorage"),e.constant("jsonToCsv",c4e),e.service("ReportExporter",w4e,"window","jsonToCsv"),e.serviceFactory("useTimeoutToggle",()=>PD)}const Tp=({visits:e,shortUrl:t,children:n,title:r})=>m.jsx("header",{children:m.jsxs(vr,{body:!0,children:[m.jsxs("h2",{className:"d-flex justify-content-between align-items-center mb-0",children:[m.jsx(db,{}),m.jsx("span",{className:"text-center d-none d-sm-block",children:m.jsx("small",{children:r})}),m.jsxs("span",{className:"badge badge-main ms-3",children:["Visits:"," ",m.jsx(QB,{visitsCount:e.length,shortUrl:t})]})]}),m.jsx("h3",{className:"text-center d-block d-sm-none mb-0 mt-3",children:m.jsx("small",{children:r})}),n&&m.jsx("div",{className:"mt-md-2",children:n})]})}),PU=({title:e,footer:t,children:n})=>m.jsxs(vr,{role:"document",children:[m.jsx(Xc,{className:"chart-card__header",children:e}),m.jsx(Zc,{children:n}),t&&m.jsx(dD,{className:"chart-card__footer--sticky",children:t})]}),TU={color:"white",background:"rgb(0 0 0 / .9)",border:"none",borderRadius:"5px"},S4e={marginBottom:"5px",fontWeight:"bold"},jU={contentStyle:TU,labelStyle:S4e,itemStyle:{padding:0}},$R=["#97BBCD","#F7464A","#46BFBD","#FDB45C","#949FB1","#57A773","#414066","#08B2E3","#B6C454","#DCDCDC","#463730"],AU=e=>$R[e%$R.length],Ty="#46e587",E4e="rgba(70, 229, 135, 0.4)",C4e=({chartData:e,showNumbers:t})=>m.jsx("ul",{className:"doughnut-chart-legend",children:e.map(({name:n,color:r,value:i})=>m.jsxs("li",{className:"doughnut-chart-legend__item d-flex",children:[m.jsx("div",{className:"doughnut-chart-legend__item-color",style:{backgroundColor:r}}),m.jsxs("small",{className:"doughnut-chart-legend__item-text flex-fill",children:[n,t&&m.jsxs("b",{children:[" (",Gt(i),")"]})]})]},n))}),IR=e=>R.useMemo(()=>Object.entries(e).map(([t,n],r)=>({name:t,value:n,color:AU(r)})),[e]),P4e=({stats:e,prevStats:t,showNumbersInLegend:n,dimensions:r})=>{const i=IR(e),o=IR(t),a=o.length>0,s=LE()?Yre:Kre;return m.jsxs("div",{className:"row align-items-center",children:[m.jsx("div",{className:"col-sm-12 col-md-7",children:m.jsx("div",{style:r??{width:"100%",height:300},children:m.jsx(r?R.Fragment:xC,{children:m.jsxs(hNe,{...r,children:[m.jsx(Xr,{formatter:Gt,contentStyle:TU,itemStyle:{color:"white"}}),m.jsx(po,{data:i,dataKey:"value",nameKey:"name",startAngle:360,endAngle:0,outerRadius:"100%",innerRadius:a?"65%":"50%",animationBegin:0,children:i.map((l,c)=>m.jsx(Fa,{fill:l.color,stroke:s},`${l.name}-${c}`))}),a&&m.jsx(po,{data:o,dataKey:"value",nameKey:"name",startAngle:360,endAngle:0,outerRadius:"55%",innerRadius:"20%",animationBegin:0,stroke:s,fill:Ty})]})})})}),m.jsx("div",{className:"col-sm-12 col-md-5",children:m.jsx(C4e,{chartData:i,showNumbers:n})})]})},DR=({title:e,...t})=>{const[n,r]=qt(!1);return m.jsx(PU,{title:m.jsxs(m.Fragment,{children:[e,m.jsx("div",{className:"float-end",children:m.jsx(ul,{checked:n,onChange:r,children:"Show numbers"})})]}),children:m.jsx(P4e,{...t,showNumbersInLegend:n})})},T4e=({visitsGroups:e})=>{const t=R.useMemo(()=>Object.entries(e),[e]);return t.length===0?null:m.jsx("ul",{className:"list-unstyled mb-0 mt-2 d-flex flex-wrap justify-content-center gap-3",children:t.map(([n,r],i)=>m.jsxs("li",{className:"d-inline",children:[m.jsx(mU,{color:kU(r)}),m.jsxs("strong",{children:[n," (",Gt(r.length),")"]})]},`${n}${i}`))})},j4e={monthly:"Month",weekly:"Week",daily:"Day",hourly:"Hour"},A4e={hourly:e=>({hours:e}),daily:e=>({days:e}),weekly:e=>({weeks:e}),monthly:e=>({months:e})},k4e={hourly:Ooe,daily:fp,weekly:Poe,monthly:xg},SP={hourly:e=>wg(e,"yyyy-MM-dd HH:00"),daily:e=>ja(e),weekly(e){const t=ja(ah(e)),n=ja(Aoe(e));return`${t} - ${n}`},monthly:e=>wg(e,"yyyy-MM")},N4e=e=>{var t;const n=Object.values(e).filter(a=>a.length>0);if(n.length===0)return"monthly";const r=new Date,i=n.map(a=>Ya(a[a.length-1].date)),o=r5(i);return((t=[[()=>fp(r,o)<=2,"hourly"],[()=>xg(r,o)<=1,"daily"],[()=>xg(r,o)<=6,"weekly"]].find(([a])=>a()))==null?void 0:t[1])??"monthly"},M4e=(e,t)=>Object.keys(t).reduce((n,r)=>(n[r]=XD(t[r],i=>SP[e](Ya(i.date))),n),{}),L4e=(e,t)=>t.reduce((n,r)=>{const i=SP[e](Ya(r.date));return n[i]=n[i]??[],n[i].push(r),n},{}),R4e=(e,t)=>{const n=Object.values(t).filter(d=>d.length>0).map(d=>[...d].reverse());if(n.length===0)return[];const r=k4e[e],i=SP[e],o=A4e[e],a=n.map(d=>Ya(d[0].date)),s=n.map(d=>Ya(d[d.length-1].date)),l=r5(s),c=boe(a),f=r(l,c)+1;return[i(c),...mP(f,d=>i(moe(c,o(d))))]},kU=e=>{if(e.color)return e.color;const t={main:th,highlighted:Qw,previous:Ty};return e.type?t[e.type]:th},FR=(e,t)=>R.useMemo(()=>Object.values(e).find(n=>n.type===t)??[],[e,t]),$4e=(e,t,n)=>{const r=FR(e,"main"),i=FR(e,"highlighted"),o=R.useMemo(()=>n?L4e(t,r):{},[n,t,r]),a=R.useCallback((s,{payload:l})=>{const c=o[l.date]??[];n==null||n(c===i?[]:c)},[o,i,n]);return n&&{cursor:"pointer",onClick:a}},NU=({visitsGroups:e,setSelectedVisits:t,dimensions:n,matchMedia:r})=>{const[i,o]=R.useState(N4e(e)),a=gP(767,r??window.matchMedia),s=R.useMemo(()=>{const d=M4e(i,e),p=Object.keys(d);return R4e(i,e).map(v=>({date:v,...p.reduce((g,y)=>(g[y]=d[y][v]??0,g),{})}))},[i,e]),l=$4e(e,i,t),c=n?R.Fragment:xC,f=R.useMemo(()=>n?{}:{width:"100%",height:a?300:400},[n,a]);return m.jsxs(vr,{children:[m.jsxs(Xc,{role:"heading","aria-level":4,children:["Visits over time",m.jsx("div",{className:"float-end",children:m.jsxs(lp,{children:[m.jsx(ju,{caret:!0,color:"link",className:"btn-sm p-0",children:"Group by"}),m.jsx(Tu,{end:!0,children:Object.entries(j4e).map(([d,p])=>m.jsx(Ne,{active:i===d,onClick:()=>o(d),children:p},d))})]})})]}),m.jsxs(Zc,{children:[m.jsx(c,{...f,children:m.jsxs(dNe,{data:s,...n,children:[m.jsx(Yu,{dataKey:"date"}),m.jsx(Zu,{tickFormatter:Gt}),m.jsx(Xr,{formatter:Gt,...jU}),m.jsx(nP,{strokeOpacity:LE()?.1:.9}),Object.entries(e).map(([d,p])=>p.length>0&&m.jsx(Ku,{dataKey:d,type:"monotone",stroke:kU(p),strokeWidth:2,activeDot:p.type==="previous"?void 0:l,strokeDasharray:p.type==="previous"?"8 3":void 0},d))]})}),m.jsx(T4e,{visitsGroups:e})]})]})},I4e=({toggleClassName:e,ranges:t,value:n,setValue:r})=>m.jsxs(lp,{children:[m.jsx(ju,{caret:!0,color:"link",className:e,children:"Paginate"}),m.jsxs(Tu,{end:!0,children:[t.map(i=>m.jsxs(Ne,{active:i===n,onClick:()=>r(i),children:[m.jsx("b",{children:i})," items per page"]},i)),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsx(Ne,{disabled:n===1/0,onClick:()=>r(1/0),children:m.jsx("i",{children:"Clear pagination"})})]})]}),BR=e=>e.startsWith("hidden_"),D4e=({stats:e,prevStats:t,highlightedStats:n,highlightedLabel:r,max:i,onClick:o,dimensions:a})=>{const s=R.useMemo(()=>Object.entries(e).map(([d,p])=>{const v=(n==null?void 0:n[d])??0,g=(t==null?void 0:t[d])??0,y=BR(d);return{name:d,amount:Math.max(p,g),nonHighlightedAmount:y?null:p-v,highlightedAmount:y?null:v,prevAmount:y?null:g}}),[e,t,n]),l=R.useMemo(()=>{const d=s.reduce((p,{name:v})=>p>v.length?p:v.length,0);return Math.min(150,d*7)},[s]),c=a?R.Fragment:xC,f=R.useMemo(()=>a?{}:{width:"100%",height:Math.max(300,s.length*(t?44:22))},[a,s.length,t]);return m.jsx(c,{...f,children:m.jsxs(pNe,{layout:"vertical",data:s,barCategoryGap:3,...a,children:[m.jsx(Yu,{type:"number",dataKey:"amount",tickFormatter:Gt,domain:i?[0,i]:void 0}),m.jsx(Zu,{type:"category",dataKey:"name",width:l,interval:0,style:{fontSize:".8rem"},tickFormatter:d=>BR(d)?"":d}),m.jsx(nP,{strokeOpacity:LE()?.05:.9}),m.jsx(Xr,{filterNull:!0,...jU,formatter:(d,p)=>[Gt(d),p==="highlightedAmount"?r:p==="prevAmount"?"Previous period":n?"Non-selected":"Visits"]}),m.jsx(Io,{dataKey:"nonHighlightedAmount",stackId:"main",cursor:"pointer",fill:th,onClick:({name:d})=>o==null?void 0:o(d),children:s.map(d=>m.jsx(Fa,{fill:Gre,stroke:th,strokeWidth:2},d.name))}),n&&m.jsx(Io,{dataKey:"highlightedAmount",stackId:"main",cursor:"pointer",fill:Qw,onClick:({name:d})=>o==null?void 0:o(d),children:s.map(d=>m.jsx(Fa,{fill:qre,stroke:Qw,strokeWidth:2},d.name))}),t&&m.jsx(Io,{dataKey:"prevAmount",fill:Ty,children:s.map(d=>m.jsx(Fa,{fill:E4e,stroke:Ty,strokeWidth:2},d.name))})]})})},F4e=e=>typeof e=="string"?e.toLowerCase():e,B4e=([e])=>e,U4e=([,e])=>e,Bm=({stats:e,prevStats:t,highlightedStats:n,title:r,sortingItems:i,extraHeaderContent:o,withPagination:a=!0,...s})=>{const[l,c]=R.useState({}),[f,d]=R.useState(1),[p,v]=R.useState(50),g=R.useCallback((A,D)=>{const N=Object.entries(A),I=l.field?hoe(N,([F,K])=>F4e(l.field===Object.keys(D)[0]?F:K)):N;return!l.dir||l.dir==="ASC"?I:[...I].reverse()},[l.dir,l.field]),y=R.useCallback(A=>{const D=A[f-1];if(f[`hidden_${I}`,0])]},[f]),x=R.useCallback(A=>m.jsx(OP,{currentPage:f,pagesCount:A,setCurrentPage:d}),[f]),_=R.useCallback((A,D,N,I)=>{const F=g(A,D),K=F.map(B4e),W=N&&Object.entries({...Lk(K,K.map(()=>0)),...N}),X=I&&Object.entries({...Lk(K,K.map(()=>0)),...I});if(F.length<=p)return{currentPageStats:Object.fromEntries(F),currentPageHighlightedStats:W&&Object.fromEntries(W),currentPagePrevStats:X&&Object.fromEntries(X)};const Q=jc(F,p),ne=W&&jc(W,p),Z=X&&jc(X,p);return{currentPageStats:Object.fromEntries(y(Q)),currentPageHighlightedStats:ne&&Object.fromEntries(y(ne)),currentPagePrevStats:Z&&Object.fromEntries(y(Z)),pagination:x(Q.length),max:DMe(Math.max(...F.map(U4e)))}},[y,g,p,x]),{currentPageStats:b,currentPagePrevStats:w,currentPageHighlightedStats:S,pagination:E,max:C}=R.useMemo(()=>_(e,i,n&&Object.keys(n).length>0?n:void 0,t&&Object.keys(t).length>0?t:void 0),[_,n,t,i,e]),T=R.useMemo(()=>Object.keys(b),[b]);return m.jsx(PU,{title:m.jsxs(m.Fragment,{children:[r,m.jsx("div",{className:"float-end",children:m.jsx(up,{isButton:!1,right:!0,items:i,order:l,onChange:(A,D)=>{c({field:A,dir:D}),d(1)}})}),a&&Object.keys(e).length>50&&m.jsx("div",{className:"float-end",children:m.jsx(I4e,{toggleClassName:"btn-sm p-0 me-3",ranges:[50,100,200,500],value:p,setValue:A=>{v(A),d(1)}})}),o&&m.jsx("div",{className:"float-end",children:o(E?T:void 0)})]}),footer:E,children:m.jsx(D4e,{stats:b,prevStats:w,highlightedStats:S,max:C,...s})})},UR=(e,t)=>{if(!(!t||!(e in t)))return t[e]&&Ja(t[e])||""},MU=()=>{const e=vo(),t=Au(),{startDate:n,endDate:r,orphanVisitsType:i,excludeBots:o,loadPrevInterval:a,...s}=t,l=R.useMemo(()=>({dateRange:n!=null||r!=null?fB(n,r):void 0,visitsFilter:{orphanVisitsType:i,excludeBots:o!==void 0?o==="true":void 0},loadPrevInterval:a!==void 0?a==="true":void 0}),[r,o,a,i,n]),c=R.useCallback(f=>{const{dateRange:d,visitsFilter:p={},loadPrevInterval:v}=m0(l,f),{excludeBots:g,orphanVisitsType:y}=p,x={...s,startDate:UR("startDate",d),endDate:UR("endDate",d),excludeBots:g===void 0?void 0:UO(g),orphanVisitsType:y,loadPrevInterval:v===void 0?void 0:UO(v)},_=l0(x),b=_?`?${_}`:"";e(b,{replace:!0,relative:"route"})},[l,e,s]);return[l,c]},z4e=()=>m.jsx(kNe,{attribution:'© OpenStreetMap contributors',url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"}),V4e=e=>{if(e.length===0)return{};if(e.length>1)return{bounds:e.map(({latLong:n})=>n)};const[{latLong:t}]=e;return{zoom:10,center:t}},LU=({toggle:e,isOpen:t,title:n,locations:r=[]})=>m.jsx(go,{toggle:e,isOpen:t,className:"map-modal__modal",contentClassName:"map-modal__modal-content",children:m.jsxs($i,{className:"map-modal__modal-body",children:[m.jsxs("h3",{className:"map-modal__modal-title",children:[n,m.jsx("button",{type:"button",className:"btn-close float-end","aria-label":"Close",onClick:e})]}),m.jsxs(TNe,{...V4e(r),children:[m.jsx(z4e,{}),r.map(({cityName:i,latLong:o,count:a},s)=>m.jsx(jNe,{position:o,children:m.jsxs(ANe,{children:[m.jsx("b",{children:a})," visit",a>1?"s":""," from ",m.jsx("b",{children:i})]})},s))]})]})}),W4e=({modalTitle:e,activeCities:t,locations:n=[]})=>{const[r,,i,o]=qt(),[a,s]=qt(),[l,c]=R.useState([]),f=ME(),d=R.useCallback(p=>{c(p?n.filter(p):n),i()},[n,i]);return m.jsxs(m.Fragment,{children:[!t&&m.jsx(Ke,{color:"link",className:"open-map-modal-btn__btn",id:f,onClick:()=>d(),"aria-label":"Show in map",children:m.jsx(je,{icon:gx})}),t&&m.jsxs(op,{isOpen:a,toggle:s,children:[m.jsx(ju,{color:"link",className:"open-map-modal-btn__btn",id:f,children:m.jsx(je,{icon:gx})}),m.jsxs(Tu,{end:!0,children:[m.jsx(Ne,{onClick:()=>d(),children:"Show all locations"}),m.jsx(Ne,{onClick:()=>d(({cityName:p})=>t.includes(p)),children:"Show locations in current page"})]})]}),m.jsx(br,{placement:"left",target:f,children:"Show in map"}),m.jsx(LU,{toggle:o,isOpen:r,title:e,locations:l})]})},RU=({onChange:e,selected:t={},className:n,isOrphanVisits:r=!1,withPrevInterval:i=!1,disabled:o})=>{const{orphanVisitsType:a,excludeBots:s=!1,loadPrevInterval:l=!1}=t,c=p=>({active:a===p,onClick:()=>e({...t,orphanVisitsType:p===a?void 0:p})}),f=R.useCallback(()=>e({...t,excludeBots:!s}),[s,e,t]),d=R.useCallback(()=>e({...t,loadPrevInterval:!l}),[l,e,t]);return m.jsxs(ta,{disabled:o,text:"More",dropdownClassName:n,end:!0,minWidth:250,children:[i&&m.jsxs(m.Fragment,{children:[m.jsx(Ne,{active:l,onClick:d,children:"Compare with previous period"}),m.jsx(Ne,{divider:!0,tag:"hr"})]}),m.jsx(Ne,{header:!0,"aria-hidden":!0,children:"Bots:"}),m.jsx(Ne,{active:s,onClick:f,children:"Exclude potential bots"}),r&&m.jsxs(m.Fragment,{children:[m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsx(Ne,{header:!0,"aria-hidden":!0,children:"Orphan visits type:"}),m.jsx(Ne,{...c("base_url"),children:"Base URL"}),m.jsx(Ne,{...c("invalid_short_url"),children:"Invalid short URL"}),m.jsx(Ne,{...c("regular_404"),children:"Regular 404"})]}),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsx(Ne,{disabled:t.excludeBots===void 0&&t.loadPrevInterval===void 0&&t.orphanVisitsType===void 0,onClick:()=>e({excludeBots:void 0,loadPrevInterval:void 0,orphanVisitsType:void 0}),children:m.jsx("i",{children:"Reset to defaults"})})]})},$U=({info:e})=>{const{loading:t,errorData:n,progress:r}=e;return m.jsxs(m.Fragment,{children:[t&&r===null&&m.jsx(Ho,{loading:!0}),t&&r!==null&&m.jsxs(Ho,{loading:!0,children:["This is going to take a while... :S",m.jsx(gD,{value:r,striped:r>=100,className:"mt-3"})]}),n&&m.jsx(er,{type:"error",children:m.jsx(mo,{errorData:n,fallbackMessage:"An error occurred while loading visits :("})})]})},hv=({children:e,showFallback:t})=>m.jsxs(m.Fragment,{children:[t&&m.jsx(Ho,{className:"mt-3",children:"There are no visits matching current filter"}),!t&&m.jsx(m.Fragment,{children:e})]}),H4e=({visitsDeletion:e,deleteVisits:t})=>{const{deleting:n}=e,[r,,i]=qt();return m.jsx(xt,{title:m.jsx("span",{className:"text-danger fw-bold",children:"Danger zone"}),children:m.jsxs("div",{className:"d-flex justify-content-between align-items-center",children:[m.jsxs("dl",{className:"m-0 me-3",children:[m.jsx("dt",{children:"Delete visits."}),m.jsxs("dd",{className:"m-0",children:["This will delete ",m.jsx("b",{children:"all"})," visits, not only the ones matching current filter."]})]}),!r&&m.jsx(Ke,{color:"danger",className:"indivisible",onClick:i,children:"Delete visits"}),r&&m.jsxs(Ke,{color:"danger",disabled:n,className:"indivisible",onClick:t,innerRef:o=>{o==null||o.focus()},children:[!n&&m.jsx(m.Fragment,{children:"Click again to confirm"}),n&&m.jsx(m.Fragment,{children:"Deleting..."})]})]})})},Um="Others",G4e=["Android Browser","Chrome","Chromium","Firefox","Internet Explorer","Microsoft Edge","Opera","Safari","Samsung Internet for Android","Vivaldi","WeChat"],q4e=e=>{if(!$s(e))return{browser:Um,os:Um};const{browser:{name:t},os:{name:n}}=INe.parse(e);return{os:n??Um,browser:t&&G4e.includes(t)?t:Um}},K4e=e=>{var t;return $s(e)?((t=e.split("/")[e.includes("://")?2:0])==null?void 0:t.split(":")[0])??"":"Direct"},IU=(e,t)=>e[t]!==void 0,zR=e=>typeof e=="number"?e:e?parseFloat(e):0,Y4e=(e,{os:t})=>{e[t]=(e[t]||0)+1},Z4e=(e,{browser:t})=>{e[t]=(e[t]||0)+1},X4e=(e,{referer:t})=>{e[t]=(e[t]||0)+1},DU=e=>(t,n)=>{const r=IU(n,e)?n[e]:"Unknown";t[r]=(t[r]||0)+1},Q4e=DU("country"),J4e=DU("city"),e$e=(e,t)=>{if(!IU(t,"city")||t.city==="Unknown")return;const{city:n,latitude:r,longitude:i}=t,o=e[n]||{cityName:n,count:0,latLong:[zR(r),zR(i)]};o.count+=1,e[n]=o},t$e=(e,t)=>{if(!tMe(t))return;const{visitedUrl:n}=t;e[n]=(e[n]||0)+1},qO=e=>e.reduce((t,n)=>(Y4e(t.os,n),Z4e(t.browsers,n),X4e(t.referrers,n),Q4e(t.countries,n),J4e(t.cities,n),e$e(t.citiesForMap,n),t$e(t.visitedUrls,n),t),{os:{},browsers:{},referrers:{},countries:{},cities:{},citiesForMap:{},visitedUrls:{}}),jy=e=>e.map(t=>{const{userAgent:n,date:r,referer:i,visitLocation:o,potentialBot:a}=t;return{date:r,potentialBot:a,...q4e(n),referer:K4e(i),country:(o==null?void 0:o.countryName)||"Unknown",city:(o==null?void 0:o.cityName)||"Unknown",latitude:o==null?void 0:o.latitude,longitude:o==null?void 0:o.longitude,visitedUrl:t.visitedUrl,type:pP(t)?t.type:void 0}}),n$e=Object.freeze(Object.defineProperty({__proto__:null,normalizeVisits:jy,processStatsFromVisits:qO},Symbol.toStringTag,{value:"Module"})),Qf=20,r$e=({browser:e,os:t,referer:n,country:r,city:i,...o},a)=>`${e} ${t} ${n} ${r} ${i} ${o.visitedUrl}`.toLowerCase().includes(a.toLowerCase()),i$e=(e,t)=>t.filter(n=>r$e(n,e)),o$e=(e,t)=>kD(t,e),a$e=(e,t,n)=>{const r=t?i$e(t,e):[...e],i=o$e(n,r),o=i.length;return{visitsGroups:jc(i,Qf),total:o}},Eo="visits-table__header-cell visits-table__sticky",s$e=({visits:e,selectedVisits:t=[],setSelectedVisits:n,matchMedia:r=window.matchMedia})=>{var i;const o=gP(767,r),[a,s]=R.useState(void 0),l=R.useRef(a),[c,f]=R.useState({}),d=R.useMemo(()=>a$e(e,a,c),[e,a,c]),[p,v]=R.useState(1),g=p*Qf,y=g-Qf,x=R.useMemo(()=>{var S,E;return!!((E=(S=d.visitsGroups[p-1])==null?void 0:S[0])!=null&&E.visitedUrl)},[p,d.visitsGroups]),_=8+Number(x),b=S=>()=>f({field:S,dir:u0(S,c.field,c.dir)}),w=S=>m.jsx(Cd,{currentOrder:c,field:S,className:"visits-table__header-icon"});return R.useEffect(()=>{l.current!==a&&(v(1),n([])),l.current=a},[a,n]),m.jsx("div",{className:"table-responsive-md",children:m.jsxs("table",{className:"table table-bordered table-hover table-sm visits-table",children:[m.jsxs("thead",{className:"visits-table__header",children:[m.jsxs("tr",{children:[m.jsxs("th",{className:`${Eo} text-center`,onClick:()=>n(t.length0})})]}),m.jsxs("th",{className:`${Eo} text-center`,onClick:b("potentialBot"),children:[m.jsx("span",{className:"sr-only",children:"Is bot"}),m.jsx(je,{icon:nA}),w("potentialBot")]}),m.jsxs("th",{className:Eo,onClick:b("date"),children:["Date",w("date")]}),m.jsxs("th",{className:Eo,onClick:b("country"),children:["Country",w("country")]}),m.jsxs("th",{className:Eo,onClick:b("city"),children:["City",w("city")]}),m.jsxs("th",{className:Eo,onClick:b("browser"),children:["Browser",w("browser")]}),m.jsxs("th",{className:Eo,onClick:b("os"),children:["OS",w("os")]}),m.jsxs("th",{className:Eo,onClick:b("referer"),children:["Referrer",w("referer")]}),x&&m.jsxs("th",{className:Eo,onClick:b("visitedUrl"),children:["Visited URL",w("visitedUrl")]})]}),m.jsx("tr",{children:m.jsx("td",{colSpan:_,className:"p-0",children:m.jsx(cp,{noBorder:!0,large:!1,onChange:s})})})]}),m.jsxs("tbody",{children:[d.total===0&&m.jsx("tr",{children:m.jsx("td",{colSpan:_,className:"text-center",children:"There are no visits matching current filter"})}),(i=d.visitsGroups[p-1])==null?void 0:i.map((S,E)=>{const C=t.includes(S);return m.jsxs("tr",{style:{cursor:"pointer"},className:Ce({"table-active":C}),onClick:()=>n(C?t.filter(T=>T!==S):[...t,S]),children:[m.jsx("td",{className:"text-center",children:C&&m.jsx(je,{icon:Gd,className:"text-primary"})}),m.jsx("td",{className:"text-center",children:S.potentialBot&&m.jsxs(m.Fragment,{children:[m.jsx(je,{icon:nA,id:`botIcon${E}`}),m.jsx(br,{placement:"right",target:`botIcon${E}`,children:"Potentially a visit from a bot or crawler"})]})}),m.jsx("td",{children:m.jsx(Cy,{date:S.date})}),m.jsx("td",{children:S.country}),m.jsx("td",{children:S.city}),m.jsx("td",{children:S.browser}),m.jsx("td",{children:S.os}),m.jsx("td",{children:S.referer}),S.visitedUrl&&m.jsx("td",{children:S.visitedUrl})]},E)})]}),d.total>Qf&&m.jsx("tfoot",{children:m.jsx("tr",{children:m.jsx("td",{colSpan:_,className:"visits-table__footer-cell visits-table__sticky",children:m.jsxs("div",{className:"row",children:[m.jsx("div",{className:"col-md-6",children:m.jsx(OP,{pagesCount:Math.ceil(d.total/Qf),currentPage:p,setCurrentPage:v,centered:o})}),m.jsx("div",{className:Ce("col-md-6",{"d-flex align-items-center flex-row-reverse":!o,"text-center mt-3":o}),children:m.jsxs("div",{children:["Visits ",m.jsx("b",{children:Gt(y+1)})," to"," ",m.jsx("b",{children:Gt(Math.min(g,d.total))})," of"," ",m.jsx("b",{children:Gt(d.total)})]})})]})})})})]})})},ma={byTime:{title:"By time",subPath:"by-time",icon:Yq},byContext:{title:"By context",subPath:"by-context",icon:tE},byLocation:{title:"By location",subPath:"by-location",icon:gx},list:{title:"List",subPath:"list",icon:q6},options:{title:"Options",subPath:"options",icon:Z6,shouldRender:({deletion:e})=>!!e}};Object.freeze(ma);const y_=({display:e})=>e&&m.jsx("div",{className:"mt-3 mx-auto w-75",children:m.jsx(xt,{children:m.jsxs("div",{className:"d-flex gap-2",children:[m.jsx(je,{icon:KK,className:"mt-1"}),m.jsx("i",{children:"Could not calculate previous period because selected one does not have a strictly defined start date."})]})})});let zm;const jp=e=>{const{children:t,visitsInfo:n,getVisits:r,cancelGetVisits:i,deletion:o,exportCsv:a,isOrphanVisits:s=!1}=e,{visits:l,prevVisits:c,loading:f,errorData:d,fallbackInterval:p}=n,[{dateRange:v,visitsFilter:g,loadPrevInterval:y},x]=MU(),_=_r("visits"),[b,w]=R.useState(),S=R.useCallback(({startDate:j,endDate:k},U)=>{x({dateRange:{startDate:j??void 0,endDate:k??void 0}}),w(U)},[x]),E=R.useRef(v??p??(_==null?void 0:_.defaultInterval)??"last30Days"),[C,T]=R.useState([]),[A,D]=R.useState(),N=R.useRef(!0),{search:I}=gr(),F=R.useCallback(j=>j?`${j}${I}`:I,[I]),K=R.useMemo(()=>jy(l),[l]),W=R.useMemo(()=>c&&jy(c),[c]),{os:X,browsers:Q,referrers:ne,countries:Z,cities:z,citiesForMap:B,visitedUrls:H}=R.useMemo(()=>qO(K),[K]),ee=R.useMemo(()=>qO(W??[]),[W]),q=R.useMemo(()=>Object.fromEntries([["Visits",Object.assign(K,{type:"main"})],W&&["Previous period",Object.assign(W,{type:"previous"})],C.length>0&&[A??"Selected",Object.assign(C,{type:"highlighted"})]].filter(Boolean)),[A,C,W,K]),te=R.useMemo(()=>({...g,excludeBots:g.excludeBots??(_==null?void 0:_.excludeBots),loadPrevInterval:y??(_==null?void 0:_.loadPrevInterval)}),[y,g,_==null?void 0:_.excludeBots,_==null?void 0:_.loadPrevInterval]),ie=R.useMemo(()=>Object.values(B),[B]),ae=R.useCallback(j=>{zm=void 0,T(j)},[]),fe=R.useCallback((j,k)=>{const U=`${j}_${k}`;zm===U?(T([]),D(void 0),zm=void 0):(T(K.filter(J=>J[j]===k)),D(k),zm=U)},[K]);return R.useEffect(()=>i,[i]),R.useEffect(()=>{const j=v??pB(E.current),{loadPrevInterval:k,...U}=te,J={doIntervalFallback:N.current,loadPrevInterval:k};r({dateRange:j,filter:U},J),ae([]),N.current=!1},[v,g,r,te,ae]),R.useEffect(()=>{p&&E.current===((_==null?void 0:_.defaultInterval)??"last30Days")&&(E.current=p)},[p,_==null?void 0:_.defaultInterval]),m.jsxs(m.Fragment,{children:[t,m.jsx("section",{className:"mt-3",children:m.jsxs("div",{className:"row flex-md-row-reverse",children:[m.jsx("div",{className:"col-lg-7 col-xl-6",children:m.jsxs("div",{className:"d-md-flex",children:[m.jsx("div",{className:"flex-grow-1",children:m.jsx(_P,{disabled:f,dateRangeOrInterval:b??v??E.current,defaultText:"All visits",onDatesChange:S})}),m.jsx(RU,{disabled:f,className:"ms-0 ms-md-2 mt-3 mt-md-0",isOrphanVisits:s,withPrevInterval:!0,selected:te,onChange:({loadPrevInterval:j,...k})=>x({visitsFilter:k,loadPrevInterval:j})})]})}),l.length>0&&m.jsx("div",{className:"col-lg-5 col-xl-6 mt-3 mt-lg-0",children:m.jsxs("div",{className:"d-flex",children:[m.jsx(KB,{className:"btn-md-block",amount:K.length,onClick:()=>a(K)}),m.jsxs(Ke,{outline:!0,disabled:C.length===0,className:"btn-md-block ms-2",onClick:()=>ae([]),children:["Clear selection ",C.length>0&&m.jsxs(m.Fragment,{children:["(",Gt(C.length),")"]})]})]})})]})}),m.jsxs("section",{className:"mt-3",children:[m.jsx($U,{info:n}),!f&&!d&&m.jsxs(m.Fragment,{children:[m.jsx(AD,{fill:!0,children:Object.values(ma).map(({title:j,icon:k,subPath:U,shouldRender:J},Y)=>!J||J(e)?m.jsxs(pd,{to:F(U),replace:!0,children:[m.jsx(je,{icon:k}),m.jsx("span",{className:"ms-2 d-none d-lg-inline",children:j})]},Y):void 0).filter(Boolean)}),m.jsx(Kn,{children:m.jsxs(Xy,{children:[m.jsx(ot,{path:ma.byTime.subPath,element:m.jsxs(hv,{showFallback:l.length===0,children:[m.jsx("div",{className:"col-12 mt-3","data-testid":"line-chart-container",children:m.jsx(NU,{visitsGroups:q,setSelectedVisits:ae})}),m.jsx(y_,{display:!!te.loadPrevInterval&&!c})]})}),m.jsx(ot,{path:ma.byContext.subPath,element:m.jsxs(hv,{showFallback:l.length===0,children:[m.jsx("div",{className:Ce("mt-3 col-lg-6",{"col-xl-4":!s}),children:m.jsx(DR,{title:"Operating systems",stats:X,prevStats:ee.os})}),m.jsx("div",{className:Ce("mt-3 col-lg-6",{"col-xl-4":!s}),children:m.jsx(DR,{title:"Browsers",stats:Q,prevStats:ee.browsers})}),m.jsx("div",{className:Ce("mt-3",{"col-xl-4":!s,"col-lg-6":s}),children:m.jsx(Bm,{title:"Referrers",withPagination:!1,stats:ne,prevStats:ee.referrers,highlightedStats:$m(C,"referer"),highlightedLabel:A,sortingItems:{name:"Referrer name",amount:"Visits amount"},onClick:j=>fe("referer",j)})}),s&&m.jsx("div",{className:"mt-3 col-lg-6",children:m.jsx(Bm,{title:"Visited URLs",stats:H,prevStats:ee.visitedUrls,highlightedStats:$m(C,"visitedUrl"),highlightedLabel:A,sortingItems:{visitedUrl:"Visited URL",amount:"Visits amount"},onClick:j=>fe("visitedUrl",j)})}),m.jsx("div",{className:"col-12",children:m.jsx(y_,{display:!!te.loadPrevInterval&&!c})})]})}),m.jsx(ot,{path:ma.byLocation.subPath,element:m.jsxs(hv,{showFallback:l.length===0,children:[m.jsx("div",{className:"col-lg-6 mt-3",children:m.jsx(Bm,{title:"Countries",stats:Z,prevStats:ee.countries,highlightedStats:$m(C,"country"),highlightedLabel:A,sortingItems:{name:"Country name",amount:"Visits amount"},onClick:j=>fe("country",j)})}),m.jsx("div",{className:"col-lg-6 mt-3",children:m.jsx(Bm,{title:"Cities",stats:z,prevStats:ee.cities,highlightedStats:$m(C,"city"),highlightedLabel:A,extraHeaderContent:j=>ie.length>0&&m.jsx(W4e,{modalTitle:"Cities",locations:ie,activeCities:j}),sortingItems:{name:"City name",amount:"Visits amount"},onClick:j=>fe("city",j)})}),m.jsx("div",{className:"col-12",children:m.jsx(y_,{display:!!te.loadPrevInterval&&!c})})]})}),m.jsx(ot,{path:ma.list.subPath,element:m.jsx("div",{className:"col-12",children:m.jsx(s$e,{visits:K,selectedVisits:C,setSelectedVisits:ae})})}),o&&m.jsx(ot,{path:ma.options.subPath,element:m.jsx("div",{className:"col-12 mt-3",children:m.jsx(H4e,{...o})})}),m.jsx(ot,{path:"*",element:m.jsx(qS,{replace:!0,to:F(ma.byTime.subPath)})})]})})]})]})]})},FU=Bi(({getDomainVisits:e,domainVisits:t,cancelGetDomainVisits:n})=>{const{ReportExporter:r}=Rt(FU),{domain:i=""}=Cu(),[o,a=o]=i.split("_"),s=R.useCallback((c,f)=>e({domain:a,options:f,params:c}),[a,e]),l=R.useCallback(c=>r.exportVisits(`domain_${o}_visits.csv`,c),[o,r]);return m.jsx(jp,{getVisits:s,cancelGetVisits:n,visitsInfo:t,exportCsv:l,children:m.jsx(Tp,{visits:t.visits,title:`"${o}" visits`})})},()=>[nr.visits]),l$e=$t(FU,["ReportExporter"]),BU=Bi(({getNonOrphanVisits:e,nonOrphanVisits:t,cancelGetNonOrphanVisits:n})=>{const{ReportExporter:r}=Rt(BU),i=R.useCallback(a=>r.exportVisits("non_orphan_visits.csv",a),[r]),o=R.useCallback((a,s)=>e({options:s,params:a}),[e]);return m.jsx(jp,{getVisits:o,cancelGetVisits:n,visitsInfo:t,exportCsv:i,children:m.jsx(Tp,{title:"Non-orphan visits",visits:t.visits})})},()=>[nr.visits]),c$e=$t(BU,["ReportExporter"]),UU=Bi(({getOrphanVisits:e,orphanVisits:t,cancelGetOrphanVisits:n,deleteOrphanVisits:r,orphanVisitsDeletion:i})=>{const o=es("orphanVisitsDeletion"),{ReportExporter:a}=Rt(UU),s=R.useCallback(f=>a.exportVisits("orphan_visits.csv",f),[a]),l=R.useCallback((f,d)=>{var p;return e({options:d,params:f,orphanVisitsType:(p=f.filter)==null?void 0:p.orphanVisitsType})},[e]),c=R.useMemo(()=>o?{deleteVisits:r,visitsDeletion:i}:void 0,[r,i,o]);return m.jsx(jp,{getVisits:l,cancelGetVisits:n,visitsInfo:t,exportCsv:s,deletion:c,isOrphanVisits:!0,children:m.jsx(Tp,{title:"Orphan visits",visits:t.visits})})},()=>[nr.orphanVisits]),u$e=$t(UU,["ReportExporter"]),zU="shlink/orphanVisits",f$e={visits:[],loading:!1,cancelLoad:!1,errorData:null,progress:null},d$e=e=>Ep({typePrefix:`${zU}/getNonOrphanVisits`,createLoaders:({options:t})=>{const n=e(),{doIntervalFallback:r=!1}=t,i=async a=>n.getNonOrphanVisits(a),o=Sp(r,a=>n.getNonOrphanVisits(a));return{visitsLoader:i,lastVisitLoader:o}},shouldCancel:t=>t().orphanVisits.cancelLoad}),h$e=e=>Cp({name:zU,initialState:f$e,asyncThunkCreator:e,filterCreatedVisits:({params:t},n)=>{const{startDate:r,endDate:i}=(t==null?void 0:t.dateRange)??{};return n.filter(({visit:o})=>Op(o.date,r,i))}}),VU="shlink/orphanVisits",p$e={visits:[],loading:!1,cancelLoad:!1,errorData:null,progress:null},m$e=(e,t)=>!t||t===e.type,v$e=({data:e,...t},n)=>{const r=e.filter(i=>pP(i)&&m$e(i,n));return{...t,data:r}},g$e=e=>Ep({typePrefix:`${VU}/getOrphanVisits`,createLoaders:({orphanVisitsType:t,options:n})=>{const r=e(),{doIntervalFallback:i=!1}=n,o=async s=>r.getOrphanVisits({...s,type:t}).then(l=>v$e(l,t)),a=Sp(i,s=>r.getOrphanVisits(s));return{visitsLoader:o,lastVisitLoader:a}},shouldCancel:t=>t().orphanVisits.cancelLoad}),y$e=(e,t)=>Cp({name:VU,initialState:p$e,asyncThunkCreator:e,extraReducers:n=>{n.addCase(t.fulfilled,r=>({...r,visits:[]}))},filterCreatedVisits:({params:n},r)=>{const{startDate:i,endDate:o}=(n==null?void 0:n.dateRange)??{};return r.filter(({visit:a,shortUrl:s})=>!s&&Op(a.date,i,o))}}),WU="shlink/orphanVisitsDeletion",VR={deletedVisits:0,deleting:!1,error:!1},b$e=e=>fn(`${WU}/deleteOrphanVisits`,()=>e().deleteOrphanVisits()),_$e=e=>Qt({name:WU,initialState:VR,reducers:{},extraReducers:t=>{t.addCase(e.pending,n=>({...n,deleting:!0,error:!1})),t.addCase(e.rejected,(n,{error:r})=>({...n,deleting:!1,error:!0,errorData:zr(r)})),t.addCase(e.fulfilled,(n,{payload:r})=>{const{deletedVisits:i}=r;return{...VR,deletedVisits:i}})}}),HU="shlink/shortUrlVisits",x$e={visits:[],shortCode:"",loading:!1,errorData:null,cancelLoad:!1,progress:null},w$e=e=>Ep({typePrefix:`${HU}/getShortUrlVisits`,createLoaders:({shortCode:t,domain:n,options:r})=>{const i=e(),{doIntervalFallback:o=!1}=r,a=l=>i.getShortUrlVisits(t,{...l,domain:n}),s=Sp(o,l=>i.getShortUrlVisits(t,{...l,domain:n}));return{visitsLoader:a,lastVisitLoader:s}},shouldCancel:t=>t().shortUrlVisits.cancelLoad}),O$e=(e,t)=>Cp({name:HU,initialState:x$e,asyncThunkCreator:e,extraReducers:n=>{n.addCase(t.fulfilled,(r,{payload:i})=>r.shortCode===i.shortCode&&r.domain===i.domain?{...r,visits:[]}:r)},filterCreatedVisits:({shortCode:n,domain:r,params:i},o)=>vB(o,{shortCode:n,domain:r},i==null?void 0:i.dateRange)}),GU="shlink/shortUrlVisitsDeletion",WR={shortCode:"",deletedVisits:0,deleting:!1,error:!1},S$e=e=>fn(`${GU}/deleteShortUrlVisits`,async({shortCode:t,domain:n})=>({...await e().deleteShortUrlVisits(t,n),shortCode:t,domain:n})),E$e=e=>Qt({name:GU,initialState:WR,reducers:{},extraReducers:t=>{t.addCase(e.pending,n=>({...n,deleting:!0,error:!1})),t.addCase(e.rejected,(n,{error:r})=>({...n,deleting:!1,error:!0,errorData:zr(r)})),t.addCase(e.fulfilled,(n,{payload:r})=>{const{shortCode:i,domain:o,deletedVisits:a}=r;return{...WR,shortCode:i,domain:o,deletedVisits:a}})}}),qU="shlink/tagVisits",C$e={visits:[],tag:"",loading:!1,cancelLoad:!1,errorData:null,progress:null},P$e=e=>Ep({typePrefix:`${qU}/getTagVisits`,createLoaders:({tag:t,options:n})=>{const r=e(),{doIntervalFallback:i=!1}=n,o=s=>r.getTagVisits(t,s),a=Sp(i,async s=>r.getTagVisits(t,s));return{visitsLoader:o,lastVisitLoader:a}},shouldCancel:t=>t().tagVisits.cancelLoad}),T$e=e=>Cp({name:qU,initialState:C$e,asyncThunkCreator:e,filterCreatedVisits:({tag:t,params:n},r)=>yB(r,t,n==null?void 0:n.dateRange)}),KU="shlink/visitsOverview",Vm={nonOrphanVisits:{total:0},orphanVisits:{total:0},loading:!1,error:!1},HR=e=>e.filter(({visit:t})=>t.potentialBot).length,j$e=e=>fn(`${KU}/loadVisitsOverview`,()=>e().getVisitsOverview().then(({nonOrphanVisits:t,visitsCount:n=0,orphanVisits:r,orphanVisitsCount:i=0})=>({nonOrphanVisits:{total:(t==null?void 0:t.total)??n,nonBots:t==null?void 0:t.nonBots,bots:t==null?void 0:t.bots},orphanVisits:{total:(r==null?void 0:r.total)??i,nonBots:r==null?void 0:r.nonBots,bots:r==null?void 0:r.bots}}))),A$e=e=>Qt({name:KU,initialState:Vm,reducers:{},extraReducers:t=>{t.addCase(e.pending,()=>({...Vm,loading:!0})),t.addCase(e.rejected,()=>({...Vm,error:!0})),t.addCase(e.fulfilled,(n,{payload:r})=>({...Vm,...r})),t.addCase(Xu,({nonOrphanVisits:n,orphanVisits:r,...i},{payload:o})=>{const{nonOrphanVisits:a,orphanVisits:s}=nMe(o.createdVisits),l=a.length,c=HR(a),f=l-c,d=s.length,p=HR(s),v=d-p;return{...i,nonOrphanVisits:{total:n.total+l,bots:n.bots&&n.bots+c,nonBots:n.nonBots&&n.nonBots+f},orphanVisits:{total:r.total+d,bots:r.bots&&r.bots+p,nonBots:r.nonBots&&r.nonBots+v}}})}}),k$e=({shortUrl:e,loading:t,shortUrlVisits:n})=>{const{visits:r}=n,i=(e==null?void 0:e.shortUrl)??"",o=(e==null?void 0:e.longUrl)??"",a=e==null?void 0:e.title;return m.jsxs(Tp,{title:m.jsxs(m.Fragment,{children:["Visits for ",m.jsx(mr,{href:i})]}),visits:r,shortUrl:e,children:[m.jsx("hr",{}),m.jsxs("div",{children:["Created: ",e?m.jsxs("span",{children:[m.jsx("b",{id:"created",className:"short-url-visits-header__created-at",children:m.jsx(Cy,{date:e.dateCreated,relative:!0})}),m.jsx(br,{placement:"bottom",target:"created",children:m.jsx(Cy,{date:e.dateCreated})})]}):m.jsx("small",{children:"Loading..."})]}),m.jsxs("div",{className:"long-url-container",children:[`${a?"Title":"Long URL"}: `,t&&m.jsx("small",{children:"Loading..."}),!t&&m.jsx(mr,{href:o,children:a??o})]})]})},YU=Bi(({shortUrlVisits:e,shortUrlVisitsDeletion:t,shortUrlsDetails:n,getShortUrlVisits:r,getShortUrlsDetails:i,deleteShortUrlVisits:o,cancelGetShortUrlVisits:a})=>{const s=es("shortUrlVisitsDeletion"),{ReportExporter:l}=Rt(YU),c=bP(),f=R.useMemo(()=>{var g;return(g=n.shortUrls)==null?void 0:g.get(c)},[c,n.shortUrls]),d=R.useCallback((g,y)=>r({...c,options:y,params:g}),[r,c]),p=R.useCallback(g=>l.exportVisits(`short-url_${f==null?void 0:f.shortUrl.replace(/https?:\/\//g,"")}_visits.csv`,g),[l,f==null?void 0:f.shortUrl]),v=R.useMemo(()=>s?{deleteVisits:()=>o(c),visitsDeletion:t}:void 0,[o,c,t,s]);return R.useEffect(()=>{i([c])},[c,i]),m.jsx(jp,{getVisits:d,cancelGetVisits:a,visitsInfo:e,exportCsv:p,deletion:v,children:m.jsx(k$e,{shortUrl:f,loading:n.loading,shortUrlVisits:e})})},e=>e.shortCode?[nr.shortUrlVisits(uP(e.shortCode))]:[]),N$e=$t(YU,["ReportExporter"]),M$e=({tagVisits:e,colorGenerator:t})=>{const{visits:n,tag:r}=e;return m.jsx(Tp,{title:m.jsxs("span",{className:"d-flex align-items-center justify-content-center",children:[m.jsx("span",{className:"me-2",children:"Visits for"}),m.jsx(hb,{text:r,colorGenerator:t})]}),visits:n})},ZU=Bi(({getTagVisits:e,tagVisits:t,cancelGetTagVisits:n})=>{const{ColorGenerator:r,ReportExporter:i}=Rt(ZU),{tag:o=""}=Cu(),a=R.useCallback((l,c)=>e({tag:o,params:l,options:c}),[e,o]),s=R.useCallback(l=>i.exportVisits(`tag_${o}_visits.csv`,l),[i,o]);return m.jsx(jp,{getVisits:a,cancelGetVisits:n,visitsInfo:t,exportCsv:s,children:m.jsx(M$e,{tagVisits:t,colorGenerator:r})})},()=>[nr.visits]),L$e=$t(ZU,["ColorGenerator","ReportExporter"]),EP=({title:e,colors:t,getVisitsForComparison:n,visitsComparisonInfo:r,cancelGetVisitsComparison:i})=>{const{loading:o,visitsGroups:a}=r,s=_r("visits"),l=R.useMemo(()=>Object.keys(a).reduce((b,w,S)=>(b[w]=Object.assign(jy(a[w]),{color:(t==null?void 0:t[w])??AU(S)}),b),{}),[t,a]),c=R.useMemo(()=>Object.values(a).every(b=>b.length===0),[a]),[{dateRange:f,visitsFilter:d},p]=MU(),[v,g]=R.useState(),y=R.useCallback(({startDate:b,endDate:w},S)=>{p({dateRange:{startDate:b??void 0,endDate:w??void 0}}),g(S)},[p]),x=R.useRef(f??(s==null?void 0:s.defaultInterval)??"last30Days"),_=R.useMemo(()=>({...d,excludeBots:d.excludeBots??(s==null?void 0:s.excludeBots)}),[d,s==null?void 0:s.excludeBots]);return R.useEffect(()=>{const b=f??pB(x.current);return n({params:{dateRange:b,filter:_}}),i},[i,f,n,_]),m.jsxs(m.Fragment,{children:[m.jsx("div",{className:"mb-3",children:m.jsxs(xt,{bodyClassName:"d-flex",children:[m.jsx(db,{}),m.jsx("h3",{className:"mb-0 flex-grow-1 text-center",children:e})]})}),m.jsx("div",{className:"col-lg-7 col-xl-6 offset-lg-5 offset-xl-6 mb-3",children:m.jsxs("div",{className:"d-md-flex",children:[m.jsx("div",{className:"flex-grow-1",children:m.jsx(_P,{disabled:o,defaultText:"All visits",dateRangeOrInterval:v??x.current,onDatesChange:y})}),m.jsx(RU,{disabled:o,className:"ms-0 ms-md-2 mt-3 mt-md-0",selected:_,onChange:({orphanVisitsType:b,excludeBots:w})=>p({visitsFilter:{orphanVisitsType:b,excludeBots:w}})})]})}),m.jsx($U,{info:r}),!o&&m.jsx(hv,{showFallback:c,children:m.jsx(NU,{visitsGroups:l})})]})},R$e=Bi(({getDomainVisitsForComparison:e,domainVisitsComparison:t,cancelGetDomainVisitsComparison:n})=>{const r=vP("domains"),i=R.useCallback(o=>e({...o,domains:r}),[r,e]);return m.jsx(EP,{title:`Comparing "${r.join('", "')}"`,getVisitsForComparison:i,visitsComparisonInfo:t,cancelGetVisitsComparison:n})},()=>[nr.visits]),$$e=({visitsLoaders:e,shouldCancel:t,progressChanged:n})=>{const r=Object.keys(e),i=Math.max(1,Math.round(4/r.length)),o=Object.fromEntries(r.map(l=>[l,0])),a=(l,c)=>{o[l]=c;const f=Object.values(o),d=f.reduce((p,v)=>p+v,0);n(d/f.length)},s=Object.entries(e).map(([l,c])=>[l,bB({visitsLoader:c,batchSize:i,shouldCancel:t,progressChanged:f=>a(l,f)})]);return async l=>{const c=await Promise.all(s.map(async([f,d])=>{const p=await d(l);return[f,p]}));return Object.fromEntries(c)}},CP=({typePrefix:e,createLoaders:t,shouldCancel:n})=>{const r=un(`${e}/progressChanged`),i=fn(e,async(o,{getState:a,dispatch:s})=>{const l=t(o),c=await $$e({visitsLoaders:l,shouldCancel:()=>n(a),progressChanged:f=>s(r(f))})(BO(o.params));return{...o,visitsGroups:c}});return Object.assign(i,{progressChanged:r})},PP=({name:e,asyncThunkCreator:t,initialState:n,filterCreatedVisitsForGroup:r})=>{const{pending:i,rejected:o,fulfilled:a,progressChanged:s}=t,{reducer:l,actions:c}=Qt({name:e,initialState:n,reducers:{cancelGetVisits:d=>({...d,cancelLoad:!0})},extraReducers:d=>{d.addCase(i,()=>({...n,loading:!0})),d.addCase(o,(p,{error:v})=>({...n,errorData:zr(v)??null})),d.addCase(a,(p,{payload:v})=>({...p,...v,loading:!1,progress:null,errorData:null})),d.addCase(s,(p,{payload:v})=>({...p,progress:v})),d.addCase(Xu,(p,{payload:v})=>{const{visitsGroups:g,...y}=p,x=Object.keys(g).map(b=>{const w=r({...y,groupKey:b},v.createdVisits).map(({visit:S})=>S);return[b,[...w,...g[b]]]}),_=Object.fromEntries(x);return{...y,visitsGroups:_}})}}),{cancelGetVisits:f}=c;return{reducer:l,cancelGetVisits:f}},XU="shlink/domainVisitsComparison",I$e={visitsGroups:{},loading:!1,cancelLoad:!1,errorData:null,progress:null},D$e=e=>CP({typePrefix:`${XU}/getDomainVisitsForComparison`,createLoaders:({domains:t})=>{const n=e(),r=t.map(i=>[i,o=>n.getDomainVisits(i,o)]);return Object.fromEntries(r)},shouldCancel:t=>t().domainVisitsComparison.cancelLoad}),F$e=e=>PP({name:XU,initialState:I$e,asyncThunkCreator:e,filterCreatedVisitsForGroup:({groupKey:t,params:n},r)=>gB(r,t,n==null?void 0:n.dateRange)}),QU="shlink/shortUrlVisitsComparison",B$e={visitsGroups:{},loading:!1,cancelLoad:!1,errorData:null,progress:null},U$e=e=>CP({typePrefix:`${QU}/getShortUrlVisitsForComparison`,createLoaders:({shortUrls:t})=>{const n=e(),r=t.map(i=>[fP(i),o=>n.getShortUrlVisits(i.shortCode,{...o,domain:i.domain})]);return Object.fromEntries(r)},shouldCancel:t=>t().shortUrlVisitsComparison.cancelLoad}),z$e=e=>PP({name:QU,initialState:B$e,asyncThunkCreator:e,filterCreatedVisitsForGroup:({groupKey:t,params:n},r)=>vB(r,sB(t),n==null?void 0:n.dateRange)}),JU="shlink/tagVisitsComparison",V$e={visitsGroups:{},loading:!1,cancelLoad:!1,errorData:null,progress:null},W$e=e=>CP({typePrefix:`${JU}/getTagVisitsForComparison`,createLoaders:({tags:t})=>{const n=e(),r=t.map(i=>[i,o=>n.getTagVisits(i,o)]);return Object.fromEntries(r)},shouldCancel:t=>t().tagVisitsComparison.cancelLoad}),H$e=e=>PP({name:JU,initialState:V$e,asyncThunkCreator:e,filterCreatedVisitsForGroup:({groupKey:t,params:n},r)=>yB(r,t,n==null?void 0:n.dateRange)}),G$e=Bi(({getShortUrlVisitsForComparison:e,shortUrlVisitsComparison:t,cancelGetShortUrlVisitsComparison:n,shortUrlsDetails:r,getShortUrlsDetails:i})=>{const o=vP("short-urls"),a=R.useMemo(()=>o.map(sB),[o]),s=R.useCallback(f=>e({...f,shortUrls:a}),[e,a]),l=R.useMemo(()=>{var f;return[...((f=r.shortUrls)==null?void 0:f.values())??[]]},[r.shortUrls]),c=R.useMemo(()=>{const{visitsGroups:f,loading:d,...p}=t,v=l.reduce((g,y)=>(g[y.shortUrl]=f[fP(y)]??[],g),{});return{...p,visitsGroups:v,loading:d||r.loading}},[t,r.loading,l]);return R.useEffect(()=>{a.length>0&&i(a)},[i,a]),m.jsx(EP,{title:m.jsx("span",{"data-testid":"title",children:r.loading?"Loading...":`Comparing ${l.length} short URLs`}),getVisitsForComparison:s,visitsComparisonInfo:c,cancelGetVisitsComparison:n})},()=>[nr.visits]),e9=Bi(({getTagVisitsForComparison:e,tagVisitsComparison:t,cancelGetTagVisitsComparison:n})=>{const{ColorGenerator:r}=Rt(e9),i=vP("tags"),o=R.useCallback(l=>e({...l,tags:i}),[e,i]),{visitsGroups:a}=t,s=R.useMemo(()=>Object.keys(a).reduce((l,c)=>(l[c]=r.getColorForKey(c),l),{}),[r,a]);return m.jsx(EP,{title:m.jsxs(m.Fragment,{children:["Comparing ",i.map(l=>m.jsx(hb,{colorGenerator:r,text:l},l))]}),getVisitsForComparison:o,visitsComparisonInfo:t,cancelGetVisitsComparison:n,colors:s})},()=>[nr.visits]),q$e=$t(e9,["ColorGenerator"]),K$e=(e,t)=>{const n=(r,i)=>t([...r,"mercureInfo"],[...i,"createNewVisits","loadMercureInfo"]);e.serviceFactory("MapModal",()=>LU),e.factory("ShortUrlVisits",N$e),e.decorator("ShortUrlVisits",t(["shortUrlVisits","shortUrlVisitsDeletion","shortUrlsDetails","mercureInfo"],["getShortUrlVisits","deleteShortUrlVisits","getShortUrlsDetails","cancelGetShortUrlVisits","createNewVisits","loadMercureInfo"])),e.factory("TagVisits",L$e),e.decorator("TagVisits",n(["tagVisits"],["getTagVisits","cancelGetTagVisits"])),e.factory("TagVisitsComparison",q$e),e.decorator("TagVisitsComparison",n(["tagVisitsComparison"],["getTagVisitsForComparison","cancelGetTagVisitsForComparison"])),e.serviceFactory("DomainVisitsComparison",()=>R$e),e.decorator("DomainVisitsComparison",n(["domainVisitsComparison"],["getDomainVisitsForComparison","cancelGetDomainVisitsForComparison"])),e.serviceFactory("ShortUrlVisitsComparison",()=>G$e),e.decorator("ShortUrlVisitsComparison",n(["shortUrlVisitsComparison","shortUrlsDetails"],["getShortUrlVisitsForComparison","cancelGetShortUrlVisitsForComparison","getShortUrlsDetails"])),e.factory("DomainVisits",l$e),e.decorator("DomainVisits",n(["domainVisits"],["getDomainVisits","cancelGetDomainVisits"])),e.factory("OrphanVisits",u$e),e.decorator("OrphanVisits",n(["orphanVisits","orphanVisitsDeletion"],["getOrphanVisits","cancelGetOrphanVisits","deleteOrphanVisits"])),e.factory("NonOrphanVisits",c$e),e.decorator("NonOrphanVisits",n(["nonOrphanVisits"],["getNonOrphanVisits","cancelGetNonOrphanVisits"])),e.serviceFactory("VisitsParser",()=>n$e),e.serviceFactory("getShortUrlVisits",w$e,"apiClientFactory"),e.serviceFactory("cancelGetShortUrlVisits",r=>r.cancelGetVisits,"shortUrlVisitsReducerCreator"),e.serviceFactory("getShortUrlVisitsForComparison",U$e,"apiClientFactory"),e.serviceFactory("cancelGetShortUrlVisitsForComparison",r=>r.cancelGetVisits,"shortUrlVisitsComparisonReducerCreator"),e.serviceFactory("deleteShortUrlVisits",S$e,"apiClientFactory"),e.serviceFactory("getTagVisits",P$e,"apiClientFactory"),e.serviceFactory("cancelGetTagVisits",r=>r.cancelGetVisits,"tagVisitsReducerCreator"),e.serviceFactory("getTagVisitsForComparison",W$e,"apiClientFactory"),e.serviceFactory("cancelGetTagVisitsForComparison",r=>r.cancelGetVisits,"tagVisitsComparisonReducerCreator"),e.serviceFactory("getDomainVisits",fMe,"apiClientFactory"),e.serviceFactory("cancelGetDomainVisits",r=>r.cancelGetVisits,"domainVisitsReducerCreator"),e.serviceFactory("getDomainVisitsForComparison",D$e,"apiClientFactory"),e.serviceFactory("cancelGetDomainVisitsForComparison",r=>r.cancelGetVisits,"domainVisitsComparisonReducerCreator"),e.serviceFactory("getOrphanVisits",g$e,"apiClientFactory"),e.serviceFactory("cancelGetOrphanVisits",r=>r.cancelGetVisits,"orphanVisitsReducerCreator"),e.serviceFactory("deleteOrphanVisits",b$e,"apiClientFactory"),e.serviceFactory("getNonOrphanVisits",d$e,"apiClientFactory"),e.serviceFactory("cancelGetNonOrphanVisits",r=>r.cancelGetVisits,"nonOrphanVisitsReducerCreator"),e.serviceFactory("createNewVisits",()=>Xu),e.serviceFactory("loadVisitsOverview",j$e,"apiClientFactory"),e.serviceFactory("visitsOverviewReducerCreator",A$e,"loadVisitsOverview"),e.serviceFactory("visitsOverviewReducer",r=>r.reducer,"visitsOverviewReducerCreator"),e.serviceFactory("domainVisitsReducerCreator",dMe,"getDomainVisits"),e.serviceFactory("domainVisitsReducer",r=>r.reducer,"domainVisitsReducerCreator"),e.serviceFactory("nonOrphanVisitsReducerCreator",h$e,"getNonOrphanVisits"),e.serviceFactory("nonOrphanVisitsReducer",r=>r.reducer,"nonOrphanVisitsReducerCreator"),e.serviceFactory("orphanVisitsReducerCreator",y$e,"getOrphanVisits","deleteOrphanVisits"),e.serviceFactory("orphanVisitsReducer",r=>r.reducer,"orphanVisitsReducerCreator"),e.serviceFactory("orphanVisitsDeletionReducerCreator",_$e,"deleteOrphanVisits"),e.serviceFactory("orphanVisitsDeletionReducer",r=>r.reducer,"orphanVisitsDeletionReducerCreator"),e.serviceFactory("shortUrlVisitsReducerCreator",O$e,"getShortUrlVisits","deleteShortUrlVisits"),e.serviceFactory("shortUrlVisitsReducer",r=>r.reducer,"shortUrlVisitsReducerCreator"),e.serviceFactory("shortUrlVisitsDeletionReducerCreator",E$e,"deleteShortUrlVisits"),e.serviceFactory("shortUrlVisitsDeletionReducer",r=>r.reducer,"shortUrlVisitsDeletionReducerCreator"),e.serviceFactory("tagVisitsReducerCreator",T$e,"getTagVisits"),e.serviceFactory("tagVisitsReducer",r=>r.reducer,"tagVisitsReducerCreator"),e.serviceFactory("tagVisitsComparisonReducerCreator",H$e,"getTagVisitsForComparison"),e.serviceFactory("tagVisitsComparisonReducer",r=>r.reducer,"tagVisitsComparisonReducerCreator"),e.serviceFactory("domainVisitsComparisonReducerCreator",F$e,"getDomainVisitsForComparison"),e.serviceFactory("domainVisitsComparisonReducer",r=>r.reducer,"domainVisitsComparisonReducerCreator"),e.serviceFactory("shortUrlVisitsComparisonReducerCreator",z$e,"getShortUrlVisitsForComparison"),e.serviceFactory("shortUrlVisitsComparisonReducer",r=>r.reducer,"shortUrlVisitsComparisonReducerCreator")},Df=({children:e,to:t,className:n,...r})=>m.jsx(k6,{className:({isActive:i})=>Ce("aside-menu__item",n,{"aside-menu__item--selected":i}),to:t,...r,children:e}),Y$e=({routePrefix:e,showOnMobile:t=!1})=>{const{pathname:n}=gr(),r=Ce("aside-menu",{"aside-menu--hidden":!t}),i=o=>`${e}${o}`;return m.jsx("aside",{className:r,children:m.jsxs("nav",{className:"nav flex-column aside-menu__nav",children:[m.jsxs(Df,{to:i("/overview"),children:[m.jsx(je,{fixedWidth:!0,icon:CK}),m.jsx("span",{className:"aside-menu__item-text",children:"Overview"})]}),m.jsxs(Df,{to:i("/list-short-urls/1"),className:Ce({"aside-menu__item--selected":n.match("/list-short-urls")!==null}),children:[m.jsx(je,{fixedWidth:!0,icon:q6}),m.jsx("span",{className:"aside-menu__item-text",children:"List short URLs"})]}),m.jsxs(Df,{to:i("/create-short-url"),children:[m.jsx(je,{fixedWidth:!0,icon:NK,flip:"horizontal"}),m.jsx("span",{className:"aside-menu__item-text",children:"Create short URL"})]}),m.jsxs(Df,{to:i("/manage-tags"),children:[m.jsx(je,{fixedWidth:!0,icon:K6}),m.jsx("span",{className:"aside-menu__item-text",children:"Manage tags"})]}),m.jsxs(Df,{to:i("/manage-domains"),children:[m.jsx(je,{fixedWidth:!0,icon:iK}),m.jsx("span",{className:"aside-menu__item-text",children:"Manage domains"})]})]})})},t9=({createNotFound:e})=>{const{TagsList:t,ShortUrlsList:n,CreateShortUrl:r,ShortUrlVisits:i,TagVisits:o,DomainVisits:a,OrphanVisits:s,NonOrphanVisits:l,Overview:c,EditShortUrl:f,ManageDomains:d,TagVisitsComparison:p,DomainVisitsComparison:v,ShortUrlVisitsComparison:g,ShortUrlRedirectRules:y}=Rt(t9),x=gr(),_=ds(),[b,w,S,E]=qt();R.useEffect(()=>E(),[x,E]);const C=Ce("shlink-layout__burger-icon",{"shlink-layout__burger-icon--active":b}),T=vMe(S,E),A=es("shortUrlRedirectRules");return m.jsxs(m.Fragment,{children:[m.jsx(je,{icon:Jq,className:C,onClick:w}),m.jsx("div",{...T,className:"shlink-layout__swipeable",children:m.jsxs("div",{className:"shlink-layout__swipeable-inner",children:[m.jsx(Y$e,{routePrefix:_,showOnMobile:b}),m.jsx("div",{className:"shlink-layout__container",onPointerDown:()=>E(),children:m.jsx("div",{className:"container-xl",children:m.jsxs(Xy,{children:[m.jsx(ot,{index:!0,element:m.jsx(qS,{replace:!0,to:"overview"})}),m.jsx(ot,{path:"/overview",element:m.jsx(c,{})}),m.jsx(ot,{path:"/list-short-urls/:page",element:m.jsx(n,{})}),m.jsx(ot,{path:"/create-short-url",element:m.jsx(r,{})}),m.jsx(ot,{path:"/short-code/:shortCode/visits/*",element:m.jsx(i,{})}),m.jsx(ot,{path:"/short-code/:shortCode/edit",element:m.jsx(f,{})}),A&&m.jsx(ot,{path:"/short-code/:shortCode/redirect-rules",element:m.jsx(y,{})}),m.jsx(ot,{path:"/short-urls/compare-visits",element:m.jsx(g,{})}),m.jsx(ot,{path:"/tag/:tag/visits/*",element:m.jsx(o,{})}),m.jsx(ot,{path:"/tags/compare-visits",element:m.jsx(p,{})}),m.jsx(ot,{path:"/domain/:domain/visits/*",element:m.jsx(a,{})}),m.jsx(ot,{path:"/orphan-visits/*",element:m.jsx(s,{})}),m.jsx(ot,{path:"/non-orphan-visits/*",element:m.jsx(l,{})}),m.jsx(ot,{path:"/manage-tags",element:m.jsx(t,{})}),m.jsx(ot,{path:"/manage-domains",element:m.jsx(d,{})}),m.jsx(ot,{path:"/domains/compare-visits",element:m.jsx(v,{})}),e&&m.jsx(ot,{path:"*",element:e("/list-short-urls/1")})]})})})]})})]})},Z$e=$t(t9,["TagsList","ShortUrlsList","CreateShortUrl","ShortUrlVisits","TagVisits","DomainVisits","OrphanVisits","NonOrphanVisits","Overview","EditShortUrl","ManageDomains","TagVisitsComparison","DomainVisitsComparison","ShortUrlVisitsComparison","ShortUrlRedirectRules"]),X$e=!0,Q$e=e=>qD({devTools:!X$e,reducer:IE({mercureInfo:e.mercureInfoReducer,shortUrlsList:e.shortUrlsListReducer,shortUrlCreation:e.shortUrlCreationReducer,shortUrlDeletion:e.shortUrlDeletionReducer,shortUrlEdition:e.shortUrlEditionReducer,shortUrlsDetails:e.shortUrlsDetailsReducer,shortUrlVisits:e.shortUrlVisitsReducer,shortUrlVisitsDeletion:e.shortUrlVisitsDeletionReducer,shortUrlVisitsComparison:e.shortUrlVisitsComparisonReducer,tagVisits:e.tagVisitsReducer,tagVisitsComparison:e.tagVisitsComparisonReducer,domainVisits:e.domainVisitsReducer,domainVisitsComparison:e.domainVisitsComparisonReducer,orphanVisits:e.orphanVisitsReducer,orphanVisitsDeletion:e.orphanVisitsDeletionReducer,nonOrphanVisits:e.nonOrphanVisitsReducer,tagsList:e.tagsListReducer,tagDelete:e.tagDeleteReducer,tagEdit:e.tagEditReducer,domainsList:e.domainsListReducer,visitsOverview:e.visitsOverviewReducer,shortUrlRedirectRules:e.shortUrlRedirectRulesReducer,shortUrlRedirectRulesSaving:e.setShortUrlRedirectRulesReducer}),middleware:t=>t({immutableCheck:!1,serializableCheck:!1})}),J$e=e=>{e.factory("Main",Z$e),e.factory("store",Q$e)},Ui=new z6,{container:e6e}=Ui,t6e=e=>t=>Object.fromEntries(e.map(n=>[n,t[n]])),n6e=(e,t)=>(...n)=>e[t](...n),r6e=(e,t)=>({...e,[t]:n6e(e6e,t)}),Qu=(e,t=[])=>y6(e?t6e(e):null,t.reduce(r6e,{}));J$e(Ui);DRe(Ui,Qu);s4e(Ui,Qu);K$e(Ui,Qu);jMe(Ui);CMe(Ui,Qu);BMe(Ui,Qu);O4e(Ui);YLe(Ui,Qu);let GR;const i6e=e=>({serverVersion:t,apiClient:n,settings:r,routesPrefix:i="",createNotFound:o,tagColorsStorage:a})=>{const s=mRe(t),l=R.useRef(),[c,f]=R.useState(),d=xl(),p=R.useMemo(()=>d?R.Fragment:A6,[d]);return R.useEffect(()=>{GR=n,e.value("apiClientFactory",()=>GR),a&&e.value("TagColorsStorage",a);const{container:v}=e,{Main:g,store:y,loadMercureInfo:x,listTags:_}=v;l.current=m.jsx(g,{createNotFound:o}),f(y),y.dispatch(x(r)),y.dispatch(_())},[n,o,r,a]),c?m.jsx(b6,{store:c,children:m.jsx(d5,{value:r??{},children:m.jsx(pRe,{value:s,children:m.jsx(WNe,{value:i,children:m.jsx(p,{children:l.current})})})})}):m.jsx(m.Fragment,{})},o6e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=",a6e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAABSCAMAAAAhFXfZAAAC91BMVEVMaXEzeak2f7I4g7g3g7cua5gzeKg8hJo3grY4g7c3grU0gLI2frE0daAubJc2gbQwd6QzeKk2gLMtd5sxdKIua5g1frA2f7IydaM0e6w2fq41fK01eqo3grgubJgta5cxdKI1f7AydaQydaMxc6EubJgvbJkwcZ4ubZkwcJwubZgubJcydqUydKIxapgubJctbJcubZcubJcvbJYubJcvbZkubJctbJctbZcubJg2f7AubJcrbZcubJcubJcua5g3grY0fq8ubJcubJdEkdEwhsw6i88vhswuhcsuhMtBjMgthMsrg8srgss6is8qgcs8i9A9iMYtg8spgcoogMo7hcMngMonf8olfso4gr8kfck5iM8jfMk4iM8he8k1fro7itAgesk2hs8eecgzfLcofssdeMg0hc4cd8g2hcsxeLQbdsgZdcgxeLImfcszhM0vda4xgckzhM4xg84wf8Yxgs4udKsvfcQucqhUndROmdM1fK0wcZ8vb5w0eqpQm9MzeKhXoNVcpdYydKNWn9VZotVKltJFjsIwcJ1Rms9OlslLmtH///8+kc9epdYzd6dbo9VHkMM2f7FHmNBClM8ydqVcpNY9hro3gLM9hLczealQmcw3fa46f7A8gLMxc6I3eagyc6FIldJMl9JSnNRSntNNl9JPnNJFi75UnM9ZodVKksg8kM45jc09e6ZHltFBk883gbRBh7pDk9EwcaBzn784g7dKkcY2i81Om9M7j85Llc81is09g7Q4grY/j9A0eqxKmdFFltBEjcXf6fFImdBCiLxJl9FGlNFBi78yiMxVndEvbpo6js74+vx+psPP3+o/ks5HkcpGmNCjwdZCkNDM3ehYoNJEls+lxNkxh8xHks0+jdC1zd5Lg6r+/v/H2ufz9/o3jM3t8/edvdM/k89Th61OiLBSjbZklbaTt9BfptdjmL1AicBHj8hGk9FAgK1dkLNTjLRekrdClc/k7fM0icy0y9tgp9c4jc2NtM9Dlc8zicxeXZn3AAAAQ3RSTlMAHDdTb4yPA+LtnEQmC4L2EmHqB7XA0d0sr478x4/Yd5i1zOfyPkf1sLVq4Nh3FvjxopQ2/STNuFzUwFIwxKaejILpIBEV9wAABhVJREFUeF6s1NdyFEcYBeBeoQIhRAkLlRDGrhIgY3BJL8CVeKzuyXFzzjkn5ZxzzuScg3PO8cKzu70JkO0LfxdTU//pM9vTu7Xgf6KqOVTb9X7toRrVEfBf1HTVjZccrT/2by1VV928Yty9ZbVuucdz90frG8DBjl9pVApbOstvmMuvVgaNXSfAAd6pGxpy6yxf5ph43pS/4f3uoaGm2rdu72S9xzOvMymkZFq/ptDrk90mhW7e4zl7HLzhxGWPR20xmSxJ/VqldG5m9XhaVOA1DadsNh3Pu5L2N6QtPO/32JpqQBVVk20oy/Pi2s23WEvyfHbe1thadVQttvm7Llf65gGmXK67XtupyoM7HQhmXdLS8oGWJNeOJ3C5fG5XCEJnkez3/oFdsvgJ4l2ANZwhrJKk/7OSXa+3Vw2WJMlKnGkobouYk6T0TyX30klOUnTD9HJ5qpckL3EW/w4XF3Xd0FGywXUrstrclVsqz5Pd/sXFYyDnPdrLcQODmGOK47IZb4CmibmMn+MYRzFZ5jg33ZL/EJrWcszHmANy3ARBK/IXtciJy8VsitPSdE3uuHxzougojcUdr8/32atnz/ev3f/K5wtpxUTpcaI45zusVDpYtZi+jg0oU9b3x74h7+n9ABvYEZeKaVq0sh0AtLKsFtqNBdeT0MrSzwwlq9+x6xAO4tgOtSzbCjrNQQiNvQUbUEubvzBUeGw26yDCsRHCoLkTHDa7IdOLIThs/gHvChszh2CimE8peRs47cxANI0lYNB5y1DljpOF0IhzBDPOZnDOqYYbeGKECbPzWnXludPphw5c2YBq5zlwXphIbO4VDCZ0gnPfUO1TwZoYwAs2ExPCedAu9DAjfQUjzITQb3jNj0KG2Sgt6BHaQUdYzWz+XmBktOHwanXjaSTcwwziBcuMOtwBmqPrTOxFQR/DRKKPqyur0aiW6cULYsx6tBm0jXpR/AUWR6HRq9WVW6MRhIq5jLyjbaCTDCijyYJNpCajdyobP/eTw0iexBAKkJ3gA5KcQb2zBXsIBckn+xVv8jkZSaEFHE+jFEleAEfayRU0MouNoBmB/L50Ai/HSLIHxcrpCvnhSQAuakKp2C/YbCylJjXRVy/z3+Kv/RrNcCo+WUzlVEhzKffnTQnxeN9fWF88fiNCUdSTsaufaChKWInHeysygfpIqagoakW+vV20J8uyl6TyNKEZWV4oRSPyCkWpgOLSbkCObT8o2r6tlG58HQquf6O0v50tB7JM7F4EORd2dx/K0w/KHsVkLPaoYrwgP/y7krr3SSMA4zj+OBgmjYkxcdIJQyQRKgg2viX9Hddi9UBb29LrKR7CVVEEEXWojUkXNyfTNDE14W9gbHJNuhjDettN3ZvbOvdOqCD3Jp/9l+/wJE+9PkYGjx/fqkys3S2rMozM/o2106rfMUINo6hVqz+eu/hd1c4xTg0TAfy5kV+4UG6+IthHTU9woWmxuKNbTfuCSfovBCxq7EtHqvYL4Sm6F8GVxsSXHMQ07TOi1DKtZxjWaaIyi4CXWjxPccUw8WVbMYY5wxC1mzEyXMJWkllpRloi+Kkoq69sxBTlElF6aAxYUbjXNlhlDZilDnM4U5SlN5biRsRHnbx3mbeWjEh4mEyiuJDl5XcWVmX5GvNkFgLWZM5qwsop4/AWfLhU1cR7k1VVvcYCWRkOI6Xy5gmnphCYIkvzuNYzHzosq2oNk2RtSs8khfUOfHIDgR6ysYBaMpl4uEgk2U/oJTs9AaTSwma7dT69geAE2ZpEjUsn2ieJNHeKfrI3EcAGJ2ZaNgVuC8EBctCLc57P5u5led6IOBkIYkuQMrmmjChs4VkfOerHqSBkPzZlhe06RslZ3zMjk2sscqKwY0RcjKK+LWbzd7KiHhkncs/siFJ+V5eXxD34B8nVuJEpGJNmxN2gH3vSvp7J70tF+D1Ej8qUJD1TkErAND2GZwTFg/LubvmgiBG3SOvdlsqFQrkEzJCL1rstlnVFROixZoDDSuXQFHESwVGlcuQcMb/b42NgjLowh5MTDFE3vNB5qStRIErdCQEh6pLPR92anSUb/wAIhldAaDMpGgAAAABJRU5ErkJggg==",s6e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAQAAAACach9AAACMUlEQVR4Ae3ShY7jQBAE0Aoz/f9/HTMzhg1zrdKUrJbdx+Kd2nD8VNudfsL/Th///dyQN2TH6f3y/BGpC379rV+S+qqetBOxImNQXL8JCAr2V4iMQXHGNJxeCfZXhSRBcQMfvkOWUdtfzlLgAENmZDcmo2TVmt8OSM2eXxBp3DjHSMFutqS7SbmemzBiR+xpKCNUIRkdkkYxhAkyGoBvyQFEJEefwSmmvBfJuJ6aKqKWnAkvGZOaZXTUgFqYULWNSHUckZuR1HIIimUExutRxwzOLROIG4vKmCKQt364mIlhSyzAf1m9lHZHJZrlAOMMztRRiKimp/rpdJDc9Awry5xTZCte7FHtuS8wJgeYGrex28xNTd086Dik7vUMscQOa8y4DoGtCCSkAKlNwpgNtphjrC6MIHUkR6YWxxs6Sc5xqn222mmCRFzIt8lEdKx+ikCtg91qS2WpwVfBelJCiQJwvzixfI9cxZQWgiSJelKnwBElKYtDOb2MFbhmUigbReQBV0Cg4+qMXSxXSyGUn4UbF8l+7qdSGnTC0XLCmahIgUHLhLOhpVCtw4CzYXvLQWQbJNmxoCsOKAxSgBJno75avolkRw8iIAFcsdc02e9iyCd8tHwmeSSoKTowIgvscSGZUOA7PuCN5b2BX9mQM7S0wYhMNU74zgsPBj3HU7wguAfnxxjFQGBE6pwN+GjME9zHY7zGp8wVxMShYX9NXvEWD3HbwJf4giO4CFIQxXScH1/TM+04kkBiAAAAAElFTkSuQmCC",l6e=()=>{delete dR.Icon.Default.prototype._getIconUrl,dR.Icon.Default.mergeOptions({iconRetinaUrl:a6e,iconUrl:o6e,shadowUrl:s6e})};l6e();const c6e=i6e(Ui);function Ay(e){return t=>{const{resetSelectedServer:n}=t;return R.useEffect(()=>{n()},[n]),m.jsx(e,{...t})}}let u6e=class extends R.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(t){const{console:n=globalThis.console}=this.props;n.error(t)}render(){const{hasError:t}=this.state,{location:n=globalThis.location}=this.props;if(t)return m.jsx("div",{className:"home",children:m.jsxs(xt,{className:"p-4",children:[m.jsx("h1",{children:"Oops! This is awkward :S"}),m.jsx("p",{children:"It seems that something went wrong. Try refreshing the page or just click this button."}),m.jsx("br",{}),m.jsx(Ke,{outline:!0,color:"primary",onClick:()=>n.reload(),children:"Take me back"})]})});const{children:r}=this.props;return r}};const f6e=({id:e,name:t})=>m.jsxs(OD,{tag:St,to:`/server/${e}`,className:"servers-list__server-item",children:[t,m.jsx(je,{icon:DK,className:"servers-list__server-item-icon"})]}),n9=({servers:e,children:t,embedded:n=!1})=>m.jsxs(m.Fragment,{children:[t&&m.jsx("div",{"data-testid":"title",className:"mb-0 fs-5 fw-normal lh-sm",children:t}),e.length>0&&m.jsx(_D,{"data-testid":"list",tag:"div",className:Ce("servers-list__list-group",{"servers-list__list-group--embedded":n}),children:e.map(({id:r,name:i})=>m.jsx(f6e,{id:r,name:i},r))})]}),r9=({color:e=th,className:t})=>m.jsx("svg",{className:t,viewBox:"0 0 512 512",version:"1.1",xmlns:"http://www.w3.org/2000/svg",children:m.jsxs("g",{fill:e,children:[m.jsx("path",{d:" M 23.71 85.08 C 17.22 49.81 49.44 14.86 85.08 18.12 C 118.83 19.21 145.72 53.33 139.45 86.37 C 155.64 102.30 171.32 118.83 187.87 134.36 C 198.32 111.73 208.84 89.12 219.57 66.62 C 226.05 53.84 243.47 48.74 255.73 56.27 C 263.76 62.10 270.34 69.69 277.25 76.75 C 286.28 86.61 285.72 102.89 276.31 112.31 C 223.38 165.37 170.38 218.37 117.35 271.34 C 107.72 280.99 91.01 281.25 81.11 271.86 C 74.39 264.94 66.82 258.69 61.24 250.77 C 53.72 238.52 58.85 221.07 71.64 214.62 C 94.11 203.87 116.72 193.38 139.33 182.91 C 123.81 166.36 107.30 150.68 91.37 134.49 C 60.20 140.28 27.37 116.78 23.71 85.08 Z"}),m.jsx("path",{d:" M 205.21 201.23 C 225.32 181.36 260.88 181.11 281.14 200.86 C 299.25 218.75 317.37 236.65 335.10 254.93 C 356.73 278.01 352.01 318.70 326.03 336.56 C 320.07 330.47 313.73 324.65 308.12 318.28 C 323.86 309.39 328.76 286.18 316.63 272.39 C 301.73 256.95 286.30 242.03 271.24 226.75 C 264.49 219.65 256.80 212.00 246.37 211.52 C 224.65 208.64 205.52 233.36 214.49 253.58 C 221.09 266.81 234.22 275.12 243.62 286.24 C 240.43 295.96 238.09 306.13 238.29 316.46 C 225.55 304.29 213.16 291.73 200.89 279.09 C 180.97 257.57 183.10 220.45 205.21 201.23 Z"}),m.jsx("path",{d:" M 273.90 352.07 C 252.28 328.99 256.98 288.31 282.96 270.46 C 288.93 276.54 295.26 282.36 300.88 288.72 C 285.14 297.62 280.23 320.82 292.38 334.61 C 307.27 350.05 322.70 364.96 337.75 380.25 C 344.51 387.35 352.20 395.00 362.64 395.48 C 384.35 398.37 403.49 373.64 394.51 353.42 C 387.92 340.18 374.78 331.88 365.38 320.76 C 368.56 311.04 370.91 300.86 370.71 290.54 C 383.45 302.70 395.84 315.27 408.11 327.91 C 428.03 349.43 425.90 386.55 403.78 405.77 C 383.68 425.64 348.13 425.89 327.86 406.14 C 309.75 388.25 291.60 370.37 273.90 352.07 Z"}),m.jsx("path",{d:" M 422.11 403.83 C 431.96 394.07 441.60 384.06 451.66 374.51 C 460.90 383.74 471.89 392.70 474.89 406.11 C 480.16 429.97 484.08 454.13 488.76 478.12 C 490.00 483.41 484.47 488.29 479.35 486.63 C 454.66 481.52 429.55 478.12 405.14 471.84 C 393.17 467.97 385.20 457.75 376.55 449.27 C 386.39 439.49 396.13 429.60 406.06 419.91 C 416.37 433.45 435.74 414.00 422.11 403.83 Z"})]})}),d6e=({servers:e})=>{const t=vo(),n=Object.values(e),r=n.length>0;return R.useEffect(()=>{const i=n.find(({autoConnect:o})=>o);i&&t(`/server/${i.id}`)},[n,t]),m.jsx("div",{className:"home",children:m.jsx(vr,{className:"home__main-card",children:m.jsxs(Kn,{className:"g-0",children:[m.jsx("div",{className:"col-md-5 d-none d-md-block",children:m.jsx("div",{className:"home__logo-wrapper",children:m.jsx("div",{className:"home__logo",children:m.jsx(r9,{})})})}),m.jsxs("div",{className:"col-md-7 home__servers-container",children:[m.jsx("div",{className:"home__title-wrapper",children:m.jsx("h1",{className:"home__title",children:"Welcome!"})}),m.jsx(n9,{embedded:!0,servers:n,children:!r&&m.jsxs("div",{className:"p-4 text-center",children:[m.jsx("p",{className:"mb-5",children:"This application will help you manage your Shlink servers."}),m.jsx("p",{children:m.jsxs(St,{to:"/server/create",className:"btn btn-outline-primary btn-lg me-2",children:[m.jsx(je,{icon:ep})," ",m.jsx("span",{className:"ms-1",children:"Add a server"})]})}),m.jsx("p",{className:"mb-0 mt-5",children:m.jsx(mr,{href:"https://shlink.io/documentation",children:m.jsxs("small",{children:[m.jsx("span",{className:"me-1",children:"Learn more about Shlink"})," ",m.jsx(je,{icon:vK})]})})})]})})]})]})})})},i9=()=>{const{ServersDropdown:e}=Ii(i9),[t,n,,r]=qt(),i=gr(),{pathname:o}=i;R.useEffect(r,[i,r]);const a="/settings",s=Ce("main-header__toggle-icon",{"main-header__toggle-icon--opened":t});return m.jsxs(BI,{color:"primary",dark:!0,fixed:"top",className:"main-header",expand:"md",children:[m.jsxs(UI,{tag:St,to:"/",children:[m.jsx(r9,{className:"main-header__brand-logo",color:"white"})," Shlink"]}),m.jsx(zI,{onClick:n,children:m.jsx(je,{icon:RK,className:s})}),m.jsx(qee,{navbar:!0,isOpen:t,children:m.jsxs(vE,{navbar:!0,className:"ms-auto",children:[m.jsx(gE,{children:m.jsxs(HI,{tag:St,to:a,active:o.startsWith(a),children:[m.jsx(je,{icon:UK}),"  Settings"]})}),m.jsx(e,{})]})})]})},h6e=Di(i9,["ServersDropdown"]),p6e=({children:e})=>{const t=gr();return R.useEffect(()=>{scrollTo(0,0)},[t]),m.jsx(m.Fragment,{children:e})},o9=QD(e=>e,e=>{try{return l2(e,e,"=")}catch{return!1}}),a9=e=>o9(e)?`v${e}`:e,s9=(e,t="latest")=>o9(e)?e:t,m6e="%_VERSION_%",v6e=e=>a9(s9(e)),qR=({project:e,version:t})=>m.jsx(mr,{href:`https://github.com/shlinkio/${e}/releases/${t}`,className:"text-muted",children:m.jsx("b",{children:t})}),g6e=({selectedServer:e,clientVersion:t=m6e})=>{const n=v6e(t);return m.jsxs("small",{className:"text-muted",children:[QS(e)&&m.jsxs(m.Fragment,{children:["Server: ",m.jsx(qR,{project:"shlink",version:e.printableVersion})," - "]}),"Client: ",m.jsx(qR,{project:"shlink-web-client",version:n})]})},y6e=({selectedServer:e})=>m.jsx("div",{className:Ce("text-center",{"shlink-versions-container--with-sidebar":QS(e)}),children:m.jsx(g6e,{selectedServer:e})}),Ju=({children:e})=>m.jsx("div",{className:"no-menu-wrapper container-xl",children:e});function l9(e){const t=n=>{const{ServerError:r}=Ii(t),i=Cu(),{selectServer:o,selectedServer:a}=n;return R.useEffect(()=>{i.serverId&&o(i.serverId)},[i.serverId,o]),a?Uq(a)?m.jsx(r,{}):m.jsx(e,{...n}):m.jsx(Ju,{children:m.jsx(Ho,{loading:!0})})};return t}const c9=l9(R.memo(({selectedServer:e,settings:t})=>{const{buildShlinkApiClient:n,TagColorsStorage:r,ShlinkWebComponent:i,ServerError:o}=Ii(c9);if(!QS(e))return m.jsx(o,{});const a=`/server/${e.id}`;return m.jsx(i,{serverVersion:e.version,apiClient:n(e),settings:t,routesPrefix:a,tagColorsStorage:r,createNotFound:s=>m.jsx(ND,{to:`${a}${s}`,children:"List short URLs"})})})),b6e=Di(c9,["buildShlinkApiClient","TagColorsStorage","ShlinkWebComponent","ServerError"]),_6e=(e,t)=>{e.constant("window",window),e.constant("console",console),e.constant("fetch",window.fetch.bind(window)),e.service("HttpClient",foe,"fetch"),e.serviceFactory("ScrollToTop",()=>p6e),e.factory("MainHeader",h6e),e.serviceFactory("Home",()=>d6e),e.decorator("Home",Ay),e.decorator("Home",t(["servers"],["resetSelectedServer"])),e.serviceFactory("ShlinkWebComponent",()=>c6e),e.factory("ShlinkWebComponentContainer",b6e),e.decorator("ShlinkWebComponentContainer",t(["selectedServer","settings"],["selectServer"])),e.serviceFactory("ShlinkVersionsContainer",()=>y6e),e.decorator("ShlinkVersionsContainer",t(["selectedServer"])),e.serviceFactory("ErrorHandler",()=>u6e)},u9=()=>{const e=vo();return R.useCallback(()=>e(-1),[e])},f9=({isOpen:e,duplicatedServers:t,onDiscard:n,onSave:r})=>{const i=t.length>1;return m.jsxs(go,{centered:!0,isOpen:e,children:[m.jsxs(yo,{children:["Duplicated server",i&&"s"]}),m.jsxs($i,{children:[m.jsx("p",{children:i?"The next servers already exist:":"There is already a server with:"}),m.jsx("ul",{children:t.map(({url:o,apiKey:a},s)=>i?m.jsxs("li",{children:[m.jsx("b",{children:o})," - ",m.jsx("b",{children:a})]},s):m.jsxs(R.Fragment,{children:[m.jsxs("li",{children:["URL: ",m.jsx("b",{children:o})]}),m.jsxs("li",{children:["API key: ",m.jsx("b",{children:a})]})]},s))}),m.jsxs("span",{children:[i?"Do you want to ignore duplicated servers":"Do you want to save this server anyway","?"]})]}),m.jsxs(as,{children:[m.jsx(Ke,{color:"link",onClick:n,children:i?"Ignore duplicates":"Discard"}),m.jsx(Ke,{color:"primary",onClick:r,children:"Save anyway"})]})]})},x6e=e=>t=>{t.preventDefault(),e()},d9=({onSubmit:e,initialValues:t,children:n,title:r})=>{const[i,o]=R.useState(""),[a,s]=R.useState(""),[l,c]=R.useState(""),f=x6e(()=>e({name:i,url:a,apiKey:l}));return R.useEffect(()=>{t&&o(t.name),t&&s(t.url),t&&c(t.apiKey)},[t]),m.jsxs("form",{className:"server-form",name:"serverForm",onSubmit:f,children:[m.jsxs(xt,{className:"mb-3",title:r,children:[m.jsx(sv,{value:i,onChange:o,children:"Name"}),m.jsx(sv,{type:"url",value:a,onChange:s,children:"URL"}),m.jsx(sv,{value:l,onChange:c,children:"API key"})]}),m.jsx("div",{className:"text-end",children:n})]})},KR=4e3,YR=({type:e})=>m.jsx("div",{className:"mt-3",children:m.jsxs(er,{type:e,children:[e==="success"&&"Servers properly imported. You can now select one from the list :)",e==="error"&&"The servers could not be imported. Make sure the format is correct."]})}),h9=({servers:e,createServers:t})=>{const{ImportServersBtn:n,useTimeoutToggle:r}=Ii(h9),i=vo(),o=u9(),a=!!Object.keys(e).length,[s,l]=r(!1,KR),[c,f]=r(!1,KR),[d,p]=qt(),[v,g]=R.useState(),y=R.useCallback(x=>{const _=NE();t([{...x,id:_}]),i(`/server/${_}`)},[t,i]);return R.useEffect(()=>{if(!v)return;Object.values(e).some(({url:_,apiKey:b})=>(v==null?void 0:v.url)===_&&(v==null?void 0:v.apiKey)===b)?p():y(v)},[y,v,e,p]),m.jsxs(Ju,{children:[m.jsxs(d9,{title:m.jsx("h5",{className:"mb-0",children:"Add new server"}),onSubmit:g,children:[!a&&m.jsx(n,{tooltipPlacement:"top",onImport:l,onImportError:f}),a&&m.jsx(Ke,{outline:!0,onClick:o,children:"Cancel"}),m.jsx(Ke,{outline:!0,color:"primary",className:"ms-2",children:"Create server"})]}),s&&m.jsx(YR,{type:"success"}),c&&m.jsx(YR,{type:"error"}),m.jsx(f9,{isOpen:d,duplicatedServers:v?[v]:[],onDiscard:o,onSave:()=>v&&y(v)})]})},w6e=Di(h9,["ImportServersBtn","useTimeoutToggle"]),p9=({server:e,className:t,children:n,textClassName:r})=>{const{DeleteServerModal:i}=Ii(p9),[o,,a,s]=qt();return m.jsxs(m.Fragment,{children:[m.jsxs("button",{type:"button",className:Ce(t,"p-0 bg-transparent border-0"),onClick:a,children:[!n&&m.jsx(je,{fixedWidth:!0,icon:JS}),m.jsx("span",{className:r,children:n??"Remove this server"})]}),m.jsx(i,{server:e,isOpen:o,toggle:s})]})},O6e=Di(p9,["DeleteServerModal"]),S6e=({server:e,toggle:t,isOpen:n,deleteServer:r,redirectHome:i=!0})=>{const o=vo(),a=R.useRef(!1),s=()=>{a.current=!0,t()},l=()=>{a.current&&(r(e),i&&o("/"))};return m.jsxs(go,{isOpen:n,toggle:t,centered:!0,onClosed:l,children:[m.jsx(yo,{toggle:t,className:"text-danger",children:"Remove server"}),m.jsxs($i,{children:[m.jsxs("p",{children:["Are you sure you want to remove ",m.jsx("b",{children:e?e.name:""}),"?"]}),m.jsx("p",{children:m.jsx("i",{children:"No data will be deleted, only the access to this server will be removed from this device. You can create it again at any moment."})})]}),m.jsxs(as,{children:[m.jsx(Ke,{color:"link",onClick:t,children:"Cancel"}),m.jsx(Ke,{color:"danger",onClick:s,children:"Delete"})]})]})},E6e=l9(({editServer:e,selectedServer:t,selectServer:n})=>{const r=u9(),{reconnect:i}=Au();if(!ld(t))return null;const o=a=>{e(t.id,a),i==="true"&&n(t.id),r()};return m.jsx(Ju,{children:m.jsxs(d9,{title:m.jsxs("h5",{className:"mb-0",children:['Edit "',t.name,'"']}),initialValues:t,onSubmit:o,children:[m.jsx(Ke,{outline:!0,className:"me-2",onClick:r,children:"Cancel"}),m.jsx(Ke,{outline:!0,color:"primary",children:"Save"})]})})}),C6e=Di(E6e,["ServerError"]),ZR=(e,{url:t,apiKey:n})=>e.some(r=>r.url===t&&r.apiKey===n),m9=({createServers:e,servers:t,children:n,onImport:r=()=>{},onImportError:i=()=>{},tooltipPlacement:o="bottom",className:a=""})=>{const{ServersImporter:s}=Ii(m9),l=ea(),[c,f]=R.useState([]),[d,,p,v]=qt(),g=R.useRef([]),y=R.useCallback(w=>{e(w),r()},[e,r]),x=R.useCallback(async({target:w})=>{var S;return s.importServersFromFile((S=w.files)==null?void 0:S[0]).then(E=>{g.current=E;const C=Object.values(t),T=E.filter(D=>ZR(C,D)),A=!!T.length;A?f(T):y(E),A&&p()}).then(()=>{w.value=null}).catch(i)},[y,i,t,s,p]),_=R.useCallback(()=>{y(g.current),v()},[y,v,g]),b=R.useCallback(()=>{y(g.current.filter(w=>!ZR(c,w))),v()},[y,c,v]);return m.jsxs(m.Fragment,{children:[m.jsxs(Ke,{outline:!0,id:"importBtn",className:a,onClick:()=>{var w;return(w=l.current)==null?void 0:w.click()},children:[m.jsx(je,{icon:sK,fixedWidth:!0})," ",n??"Import from file"]}),m.jsxs(br,{placement:o,target:"importBtn",children:["You can create servers by importing a CSV file with ",m.jsx("b",{children:"name"}),", ",m.jsx("b",{children:"apiKey"})," and ",m.jsx("b",{children:"url"})," columns."]}),m.jsx("input",{type:"file",accept:".csv",className:"d-none",ref:l,onChange:x,"aria-hidden":!0}),m.jsx(f9,{isOpen:d,duplicatedServers:c,onDiscard:b,onSave:_})]})},P6e=Di(m9,["ServersImporter"]),v9=({servers:e,selectedServer:t})=>{const{DeleteServerButton:n}=Ii(v9);return m.jsx(Ju,{children:m.jsxs("div",{className:"server-error__container flex-column",children:[m.jsxs(Ho,{className:"w-100 mb-3 mb-md-5",type:"error",fullWidth:!0,children:[!ld(t)&&"Could not find this Shlink server.",ld(t)&&m.jsxs(m.Fragment,{children:[m.jsx("p",{children:"Oops! Could not connect to this Shlink server."}),"Make sure you have internet connection, and the server is properly configured and on-line."]})]}),m.jsx(n9,{servers:Object.values(e),children:m.jsxs("p",{className:"mb-md-3",children:["These are the Shlink servers currently configured. Choose one of them or ",m.jsx(St,{to:"/server/create",children:"add a new one"}),"."]})}),ld(t)&&m.jsx("div",{className:"container mt-3 mt-md-5",children:m.jsxs("p",{className:"fs-5 fw-normal lh-sm",children:["Alternatively, if you think you may have miss-configured this server, you can ",m.jsx(n,{server:t,className:"server-error__delete-btn",children:"remove it"})," or ",m.jsx(St,{to:`/server/${t.id}/edit?reconnect=true`,children:"edit it"}),"."]})})]})})},T6e=Di(v9,["DeleteServerButton"]),j6e=4e3,g9=({servers:e})=>{const{ServersExporter:t,ImportServersBtn:n,useTimeoutToggle:r,ManageServersRow:i}=Ii(g9),o=Object.values(e),[a,s]=R.useState(o),l=p=>s(o.filter(({name:v,url:g})=>`${v} ${g}`.toLowerCase().match(p.toLowerCase()))),c=a.some(({autoConnect:p})=>!!p),[f,d]=r(!1,j6e);return R.useEffect(()=>{s(Object.values(e))},[e]),m.jsxs(Ju,{children:[m.jsx(cp,{className:"mb-3",onChange:l}),m.jsxs(Kn,{className:"mb-3",children:[m.jsxs("div",{className:"col-md-6 d-flex d-md-block mb-2 mb-md-0",children:[m.jsx(n,{className:"flex-fill",onImportError:d,children:"Import servers"}),o.length>0&&m.jsxs(Ke,{outline:!0,className:"ms-2 flex-fill",onClick:async()=>t.exportServers(),children:[m.jsx(je,{icon:Y6,fixedWidth:!0})," Export servers"]})]}),m.jsx("div",{className:"col-md-6 text-md-end d-flex d-md-block",children:m.jsxs(Ke,{outline:!0,color:"primary",className:"flex-fill",tag:St,to:"/server/create",children:[m.jsx(je,{icon:ep,fixedWidth:!0})," Add a server"]})})]}),m.jsx(xt,{children:m.jsxs("table",{className:"table table-hover responsive-table mb-0",children:[m.jsx("thead",{className:"responsive-table__header",children:m.jsxs("tr",{children:[c&&m.jsx("th",{style:{width:"50px"},children:m.jsx("span",{className:"sr-only",children:"Auto-connect"})}),m.jsx("th",{children:"Name"}),m.jsx("th",{children:"Base URL"}),m.jsx("th",{children:m.jsx("span",{className:"sr-only",children:"Options"})})]})}),m.jsxs("tbody",{children:[!a.length&&m.jsx("tr",{className:"text-center",children:m.jsx("td",{colSpan:4,children:"No servers found."})}),a.map(p=>m.jsx(i,{server:p,hasAutoConnect:c},p.id))]})]})}),f&&m.jsx("div",{className:"mt-3",children:m.jsx(er,{type:"error",children:"The servers could not be imported. Make sure the format is correct."})})]})},A6e=Di(g9,["ServersExporter","ImportServersBtn","useTimeoutToggle","ManageServersRow"]),y9=({server:e,hasAutoConnect:t})=>{const{ManageServersRowDropdown:n}=Ii(y9);return m.jsxs("tr",{className:"responsive-table__row",children:[t&&m.jsx("td",{className:"responsive-table__cell","data-th":"Auto-connect",children:e.autoConnect&&m.jsxs(m.Fragment,{children:[m.jsx(je,{icon:Gd,className:"text-primary",id:"autoConnectIcon"}),m.jsx(br,{target:"autoConnectIcon",placement:"right",children:"Auto-connect to this server"})]})}),m.jsx("th",{className:"responsive-table__cell","data-th":"Name",children:m.jsx(St,{to:`/server/${e.id}`,children:e.name})}),m.jsx("td",{className:"responsive-table__cell","data-th":"Base URL",children:e.url}),m.jsx("td",{className:"responsive-table__cell text-end",children:m.jsx(n,{server:e})})]})},k6e=Di(y9,["ManageServersRowDropdown"]),b9=({server:e,setAutoConnect:t})=>{const{DeleteServerModal:n}=Ii(b9),[r,,i,o]=qt(),a=`/server/${e.id}`,{autoConnect:s}=e,l=s?oK:_se;return m.jsxs(c0,{minWidth:s?210:170,children:[m.jsxs(Ne,{tag:St,to:a,children:[m.jsx(je,{icon:rK,fixedWidth:!0})," Connect"]}),m.jsxs(Ne,{tag:St,to:`${a}/edit`,children:[m.jsx(je,{icon:eE,fixedWidth:!0})," Edit server"]}),m.jsxs(Ne,{onClick:()=>t(e,!s),children:[m.jsx(je,{icon:l,fixedWidth:!0})," ",s?"Do not a":"A","uto-connect"]}),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsxs(Ne,{className:"dropdown-item--danger",onClick:i,children:[m.jsx(je,{icon:JS,fixedWidth:!0})," Remove server"]}),m.jsx(n,{redirectHome:!1,server:e,isOpen:r,toggle:o})]})},N6e=Di(b9,["DeleteServerModal"]),_9=(e,t)=>ZD(e,t,{serializeError:n=>n}),M6e={},L6e=e=>"id"in e?e:{...e,id:NE()},R6e=e=>e.reduce((t,n)=>({...t,[n.id]:n}),{}),{actions:$6e,reducer:I6e}=Qt({name:"shlink/servers",initialState:M6e,reducers:{editServer:{prepare:(e,t)=>({payload:{serverId:e,serverData:t}}),reducer:(e,{payload:t})=>{const{serverId:n,serverData:r}=t;return e[n]?{...e,[n]:{...e[n],...r}}:e}},deleteServer:(e,{payload:t})=>(delete e[t.id],e),setAutoConnect:{prepare:({id:e},t)=>({payload:{serverId:e,autoConnect:t}}),reducer:(e,{payload:t})=>{const{serverId:n,autoConnect:r}=t;return e[n]?r?Object.fromEntries(Object.entries(e).map(([i,o])=>[i,{...o,autoConnect:i===n}])):{...e,[n]:{...e[n],autoConnect:r}}:e}},createServers:{prepare:e=>({payload:R6e(e.map(L6e))}),reducer:(e,{payload:t})=>({...e,...t})}}}),{editServer:D6e,deleteServer:F6e,setAutoConnect:B6e,createServers:x9}=$6e,U6e=I6e,z6e=e=>Array.isArray(e)?e.filter(V6):[],V6e=e=>_9("shlink/remoteServers/fetchServers",async(t,{dispatch:n})=>{const r=await e.jsonRequest(`${Vv.homepage}/servers.json`),i=z6e(r);n(x9(i))}),TP="shlink/selectedServer",W6e="1.0.0",H6e="999.999.999",G6e="latest",q6e=e=>s9(e===G6e?H6e:e,W6e),K6e=QD(e=>`${e.id}_${e.url}_${e.apiKey}`,async(e,t)=>t().then(({version:n})=>({version:q6e(n),printableVersion:a9(n)}))),XR=null,jP=un(`${TP}/resetSelectedServer`),Y6e=e=>_9(`${TP}/selectServer`,async(t,{dispatch:n,getState:r})=>{n(jP());const{servers:i}=r(),o=i[t];if(!o)return{serverNotFound:!0};try{const a=e(o),{version:s,printableVersion:l}=await K6e(o,()=>a.health());return{...o,version:s,printableVersion:l}}catch{return{...o,serverNotReachable:!0}}}),Z6e=e=>Qt({name:TP,initialState:XR,reducers:{},extraReducers:t=>{t.addCase(jP,()=>XR),t.addCase(e.fulfilled,(n,{payload:r})=>r)}}),X6e=({servers:e,selectedServer:t})=>{const n=Object.values(e),r=()=>n.length===0?m.jsxs(Ne,{tag:St,to:"/server/create",children:[m.jsx(je,{icon:ep})," ",m.jsx("span",{className:"ms-1",children:"Add a server"})]}):m.jsxs(m.Fragment,{children:[n.map(({name:i,id:o})=>m.jsx(Ne,{tag:St,to:`/server/${o}`,active:zq(t)===o,children:i},o)),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsxs(Ne,{tag:St,to:"/manage-servers",children:[m.jsx(je,{icon:eA})," ",m.jsx("span",{className:"ms-1",children:"Manage servers"})]})]});return m.jsxs(lp,{nav:!0,inNavbar:!0,children:[m.jsxs(ju,{nav:!0,caret:!0,children:[m.jsx(je,{icon:eA})," ",m.jsx("span",{className:"ms-1",children:"Servers"})]}),m.jsx(Tu,{end:!0,style:{right:0},children:r()})]})},Q6e=({document:e},t,n)=>{const r=e.createElement("a");r.setAttribute("href",t),r.setAttribute("download",n),r.style.visibility="hidden",e.body.appendChild(r),r.click(),e.body.removeChild(r)},J6e=(e,t,n)=>{const r=new Blob([t],{type:"text/csv;charset=utf-8;"}),i=URL.createObjectURL(r);Q6e(e,i,n)},eIe="shlink-servers.csv";class tIe{constructor(t,n,r){Il(this,"exportServers",async()=>{const t=Object.values(this.storage.get("servers")??{}).map(Vq);try{const n=this.jsonToCsv(t);J6e(this.window,n,eIe)}catch(n){console.error(n)}});this.storage=t,this.window=n,this.jsonToCsv=r}}const nIe=e=>typeof e.url=="string"&&typeof e.apiKey=="string"&&typeof e.name=="string",rIe=e=>Array.isArray(e)&&e.every(nIe);class iIe{constructor(t){this.csvToJson=t}async importServersFromFile(t){if(!t)throw new Error("No file provided");const n=await t.text(),r=await this.csvToJson(n);if(!rIe(r))throw new Error("Provided file does not have the right format.");return r}}const oIe=(e,t)=>{e.factory("ManageServers",A6e),e.decorator("ManageServers",Ay),e.decorator("ManageServers",t(["selectedServer","servers"],["resetSelectedServer"])),e.factory("ManageServersRow",k6e),e.factory("ManageServersRowDropdown",N6e),e.decorator("ManageServersRowDropdown",t(null,["setAutoConnect"])),e.factory("CreateServer",w6e),e.decorator("CreateServer",Ay),e.decorator("CreateServer",t(["selectedServer","servers"],["createServers","resetSelectedServer"])),e.factory("EditServer",C6e),e.decorator("EditServer",t(["selectedServer"],["editServer","selectServer","resetSelectedServer"])),e.serviceFactory("ServersDropdown",()=>X6e),e.decorator("ServersDropdown",t(["servers","selectedServer"])),e.serviceFactory("DeleteServerModal",()=>S6e),e.decorator("DeleteServerModal",t(null,["deleteServer"])),e.factory("DeleteServerButton",O6e),e.factory("ImportServersBtn",P6e),e.decorator("ImportServersBtn",t(["servers"],["createServers"])),e.factory("ServerError",T6e),e.decorator("ServerError",t(["servers","selectedServer"])),e.service("ServersImporter",iIe,"csvToJson"),e.service("ServersExporter",tIe,"Storage","window","jsonToCsv"),e.serviceFactory("selectServer",Y6e,"buildShlinkApiClient","loadMercureInfo"),e.serviceFactory("createServers",()=>x9),e.serviceFactory("deleteServer",()=>F6e),e.serviceFactory("editServer",()=>D6e),e.serviceFactory("setAutoConnect",()=>B6e),e.serviceFactory("fetchServers",V6e,"HttpClient"),e.serviceFactory("resetSelectedServer",()=>jP),e.serviceFactory("selectedServerReducerCreator",Z6e,"selectServer"),e.serviceFactory("selectedServerReducer",n=>n.reducer,"selectedServerReducerCreator")},w9={field:"dateCreated",dir:"DESC"},aIe={realTimeUpdates:{enabled:!0},shortUrlCreation:{validateUrls:!1},ui:{theme:RE()},visits:{defaultInterval:"last30Days"},shortUrlsList:{defaultOrdering:w9}},{reducer:sIe,actions:lIe}=Qt({name:"shlink/settings",initialState:aIe,reducers:{setSettings:(e,{payload:t})=>m0(e,t)}}),{setSettings:cIe}=lIe,uIe=sIe,fIe=({settings:e,setSettings:t})=>m.jsx(Ju,{children:m.jsx(gse,{settings:e,updateSettings:t,defaultShortUrlsListOrdering:w9})}),dIe=(e,t)=>{e.serviceFactory("Settings",()=>fIe),e.decorator("Settings",Ay),e.decorator("Settings",t(["settings"],["setSettings","resetSelectedServer"])),e.serviceFactory("setSettings",()=>cIe)};var hIe=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(r,i,o){n.o(r,i)||Object.defineProperty(r,i,{enumerable:!0,get:o})},n.r=function(r){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},n.t=function(r,i){if(1&i&&(r=n(r)),8&i||4&i&&typeof r=="object"&&r&&r.__esModule)return r;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:r}),2&i&&typeof r!="string")for(var a in r)n.d(o,a,(function(s){return r[s]}).bind(null,a));return o},n.n=function(r){var i=r&&r.__esModule?function(){return r.default}:function(){return r};return n.d(i,"a",i),i},n.o=function(r,i){return Object.prototype.hasOwnProperty.call(r,i)},n.p="",n(n.s=32)}([function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch{typeof window=="object"&&(n=window)}e.exports=n},function(e,t,n){var r=n(6),i=Object.keys||function(g){var y=[];for(var x in g)y.push(x);return y};e.exports=d;var o=n(5);o.inherits=n(2);var a=n(23),s=n(14);o.inherits(d,a);for(var l=i(s.prototype),c=0;c{t&&(t.longTouch=!0,n.longTouchClass&&e.e.cancelable&&yl(t.draggedNodes.map(r=>r.el),n.longTouchClass),e.e.preventDefault())},n.longTouchTimeout||200))}function gLe(e){!Ge||!("touchedNode"in Ge)||CLe(e,Ge)}function yLe(e,t){t.longTouchClass&&Sy(e.draggedNodes.map(n=>n.el),t==null?void 0:t.longTouchClass),t.touchDraggingClass&&yl([e.touchedNode],t.touchDraggingClass),t.touchDropZoneClass&&yl(e.draggedNodes.map(n=>n.el),t.touchDropZoneClass)}function bLe(e){if(!e||!e.scrollParent)return;const{x:t,y:n,width:r,height:i}=e.scrollParent.getBoundingClientRect(),{x:o,y:a,scrollOutside:s}=e.lastParent.data.config.scrollBehavior;return{state:e,xThresh:o,yThresh:a,scrollOutside:s,scrollParent:e.scrollParent,x:t,y:n,width:r,height:i}}function _Le(e){const t=bLe(Ge);if(t)switch(e){case"down":return SLe(t.state,t);case"up":return OLe(t.state,t);case"right":return xLe(t.state,t);case"left":return wLe(t.state,t)}}function xLe(e,t){const n=t.scrollParent.clientWidth+t.x-e.coordinates.x;if(!(!t.scrollOutside&&n<0)&&n<(1-t.xThresh)*t.scrollParent.clientWidth&&!(t.scrollParent.scrollLeft+t.scrollParent.clientWidth>=t.scrollParent.scrollWidth))return e}function wLe(e,t){const n=t.scrollParent.clientWidth+t.x-e.coordinates.x;if(!(!t.scrollOutside&&n>t.scrollParent.clientWidth)&&n>t.xThresh*t.scrollParent.clientWidth&&t.scrollParent.scrollLeft!==0)return e}function OLe(e,t){const n=t.scrollParent.clientHeight+t.y-e.coordinates.y;if(!(!t.scrollOutside&&n>t.scrollParent.clientHeight)&&n>t.yThresh*t.scrollParent.clientHeight&&t.scrollParent.scrollTop!==0)return e}function SLe(e,t){const n=t.scrollParent.clientHeight+t.y-e.coordinates.y;if(!(!t.scrollOutside&&n<0)&&n<(1-t.yThresh)*t.scrollParent.clientHeight&&!(t.scrollParent.scrollTop+t.scrollParent.clientHeight>=t.scrollParent.scrollHeight))return e}function ELe(e,t){t.touchMoving=!0,t.touchedNode.style.display=t.touchedNodeDisplay||"";const{x:n,y:r}=Cl(e.e);t.coordinates.y=r,t.coordinates.x=n;const i=t.touchStartLeft??0,o=t.touchStartTop??0;t.touchedNode.style.left=`${n-i}px`,t.touchedNode.style.top=`${r-o}px`,yLe(t,e.targetData.parent.data.config)}function CLe(e,t){if(e.targetData.parent.data.config.longTouch&&!t.longTouch){clearTimeout(t.longTouchTimeout);return}e.e.cancelable&&e.e.preventDefault(),ELe(e,t),cb();const n=qMe(e);if(!n)return;const r={e:e.e,targetData:n};"node"in n?n.node.el.dispatchEvent(new CustomEvent("touchOverNode",{detail:r})):n.parent.el.dispatchEvent(new CustomEvent("touchOverParent",{detail:r}))}function cb(){for(const e of Object.keys(SR)){const[t,n]=SR[e];UB(e,t,n)}}function UB(e,t,n){const r=_Le(e);r&&(r.scrollParent.scrollBy(t,n),setTimeout(()=>{UB(e,t,n)},"touchedNode"in r?10:100))}function PLe(e){if(!Ge)return;const{x:t,y:n}=Cl(e.e);Ge.coordinates.y=n,Ge.coordinates.x=t,cb(),kLe(e,Ge)}function TLe(e){if(!Ge)return;const{x:t,y:n}=Cl(e.e);Ge.coordinates.y=n,Ge.coordinates.x=t,cb(),ub(e,Ge)}function jLe(e){Ge&&ub(e.detail,Ge)}function ALe(e,t){if(e.targetData.parent.el===t.lastParent.el)return!1;const n=e.targetData.parent.data.config;if(n.dropZone===!1)return!1;const r=t.initialParent.data.config;return n.accepts?n.accepts(e.targetData.parent,t.initialParent,t.lastParent,t):!(!n.group||n.group!==r.group)}function kLe(e,t){var n;e.e.preventDefault(),e.e.stopPropagation(),e.targetData.parent.el===((n=t.lastParent)==null?void 0:n.el)?zB(e,t):ub(e,t)}function NLe(e,t,n,r){var i;if(t.remapJustFinished)return t.remapJustFinished=!1,t.lastTargetValue=e.targetData.node.data.value,!1;if(t.lastTargetValue===e.targetData.node.data.value||t.draggedNodes.map(p=>p.el).includes(e.targetData.node.el)||t.preventEnter||t.swappedNodeValue===e.targetData.node.data.value||e.targetData.parent.el!==((i=t.lastParent)==null?void 0:i.el)||e.targetData.parent.data.config.sortable===!1)return!1;const o=e.targetData.node.el.getBoundingClientRect(),a=t.draggedNode.el.getBoundingClientRect(),s=o.y-a.y,l=o.x-a.x;let c;const f=t.draggedNode.data.index>e.targetData.node.data.index?[e.targetData.node.data.index,t.draggedNode.data.index]:[t.draggedNode.data.index,e.targetData.node.data.index];t.targetIndex=e.targetData.node.data.index,t.affectedNodes=e.targetData.parent.data.enabledNodes.filter(p=>f[0]<=p.data.index&&p.data.index<=f[1]&&p.el!==t.draggedNode.el),Math.abs(s)>Math.abs(l)?c=s>0?"above":"below":c=l>0?"left":"right";const d=t.lastParent.data.config.threshold;switch(c){case"left":if(n>o.x+o.width*d.horizontal)return t.incomingDirection="left",!0;break;case"right":if(no.y+o.height*d.vertical)return t.incomingDirection="above",!0;break;case"below":if(r{const r=t(n.currentTarget);if(r)return e({e:n,targetData:r})}}function MLe(e,t){const n=RB(e),r=VO(e.lastParent.el,e.lastParent.data).filter(s=>!n.includes(s)),i=VO(t.targetData.parent.el,t.targetData.parent.data),o=e.initialParent.el===t.targetData.parent.el&&t.targetData.parent.data.config.sortable===!1;let a;"node"in t.targetData?(o?a=e.initialIndex:t.targetData.parent.data.config.sortable===!1?a=t.targetData.parent.data.enabledNodes.length:a=t.targetData.node.data.index,i.splice(a,0,...n)):(a=o?e.initialIndex:t.targetData.parent.data.enabledNodes.length,i.splice(a,0,...n)),WO(e.lastParent.el,e.lastParent.data,r),WO(t.targetData.parent.el,t.targetData.parent.data,i)}function ub(e,t){ALe(e,t)&&(e.targetData.parent.data.config.performTransfer(t,e),t.lastParent=e.targetData.parent)}function LLe(e){function t(n){const r=Ti.get(n);if(r)return{parent:{el:n,data:r}}}return n=>{const r=t(n.currentTarget);if(r)return e({e:n,targetData:r})}}function RLe(e){if(e instanceof HTMLElement)return e;if("current"in e&&e.current instanceof HTMLElement)return e.current;console.warn("Invalid parent element",e)}function $Le(e,t){const n=RLe(e);n&&t(n)}var Ey=new WeakMap;function ILe(e){const t=Ey.get(e);return t?t[0]:(console.warn("No values found for parent element"),[])}function DLe(e,t){const n=Ey.get(t);n&&n[1](e),Ey.set(t,[e,n[1]])}function FLe(e,t){return n=>{Ey.set(n,t),XMe({parent:n,getValues:ILe,setValues:DLe,config:e})}}function ER(e){jB&&(Array.isArray(e)||(e=[e]),e.forEach(t=>{const{parent:n,state:r,...i}=t;$Le(n,FLe(i,r))}))}function BLe(e,t={}){const n=R.useRef(null),[r,i]=R.useState(e);function o(a={}){ER({parent:n,state:[r,i],...a})}return R.useEffect(()=>{ER({parent:n,state:[r,i],...t})},[r]),R.useEffect(()=>()=>{n.current&&$B(n.current)},[]),[n,r,i,o]}const fb=()=>{const e=vo(),t=ds(),n=Au(),r=R.useMemo(()=>{const{orderBy:o,tags:a,excludeBots:s,excludeMaxVisitsReached:l,excludePastValidUntil:c,...f}=n,d=o?Hre(o):void 0,p=(a==null?void 0:a.split(","))??[];return{...f,orderBy:d,tags:p,excludeBots:s!==void 0?s==="true":void 0,excludeMaxVisitsReached:l!==void 0?l==="true":void 0,excludePastValidUntil:c!==void 0?c==="true":void 0}},[n]),i=R.useCallback(o=>{const a={...r,...o},{orderBy:s,tags:l,excludeBots:c,excludeMaxVisitsReached:f,excludePastValidUntil:d,...p}=a,v={...p,orderBy:s&&Wre(s),tags:l.length>0?l.join(","):void 0,excludeBots:f_(c),excludeMaxVisitsReached:f_(f),excludePastValidUntil:f_(d)},g=l0(v),y=g?`?${g}`:"";e(`${t}/list-short-urls/1${y}`)},[r,e,t]);return[r,i]},bP=()=>{const{domain:e}=Au(),{shortCode:t=""}=Cu();return R.useMemo(()=>({shortCode:uP(t),domain:e}),[e,t])},db=()=>{const e=yMe();return m.jsx(Ke,{color:"link",size:"lg",className:"p-0 me-3",onClick:e,"aria-label":"Go back",children:m.jsx(je,{icon:pK})})},ULe={android:"Android",ios:"iOS",desktop:"Desktop"},zLe=({deviceType:e,onDeviceTypeChange:t})=>{const n=R.useId();return m.jsxs("div",{children:[m.jsx("label",{htmlFor:n,children:"Device type:"}),m.jsxs("select",{id:n,className:"form-select",value:e,onChange:r=>t(r.target.value),required:!0,children:[!e&&m.jsx("option",{value:"",children:"- Select type -"}),Object.entries(ULe).map(([r,i])=>m.jsx("option",{value:r,children:i},r))]})]})},VLe=({language:e,onLanguageChange:t})=>{const n=R.useId();return m.jsxs("div",{children:[m.jsx("label",{htmlFor:n,children:"Language:"}),m.jsx(Fn,{id:n,value:e??"",onChange:r=>t(r.target.value),placeholder:"en-US / en",required:!0})]})},WLe=({name:e,value:t,onNameChange:n,onValueChange:r})=>{const i=R.useId(),o=R.useId();return m.jsxs(m.Fragment,{children:[m.jsxs("div",{children:[m.jsx("label",{htmlFor:i,children:"Param name:"}),m.jsx(Fn,{id:i,value:e??"",onChange:a=>n(a.target.value),placeholder:"hello",required:!0})]}),m.jsxs("div",{children:[m.jsx("label",{htmlFor:o,children:"Param value:"}),m.jsx(Fn,{id:o,value:t??"",onChange:a=>r(a.target.value),placeholder:"world",required:!0})]})]})},HLe={device:"Device type",language:"Language","query-param":"Query param"},GLe=({condition:e,onConditionChange:t,onDelete:n})=>{const r=R.useId(),i=R.useCallback(s=>t({type:s,matchValue:"",matchKey:null}),[t]),o=R.useCallback(s=>t({...e,matchValue:s}),[e,t]),a=R.useCallback(s=>t({...e,matchKey:s}),[e,t]);return m.jsxs("div",{className:"redirect-rule-modal__condition rounded p-3 h-100 d-flex flex-column gap-2",children:[m.jsxs("div",{children:[m.jsx("label",{htmlFor:r,children:"Type:"}),m.jsxs("div",{className:"d-flex gap-2",children:[m.jsx("select",{id:r,className:"form-select flex-grow-1",value:e.type,onChange:s=>i(s.target.value),children:Object.entries(HLe).map(([s,l])=>m.jsx("option",{value:s,children:l},s))}),m.jsx(Ke,{outline:!0,color:"danger",type:"button","aria-label":"Delete condition",onClick:n,children:m.jsx(je,{icon:W6})})]})]}),e.type==="device"&&m.jsx(zLe,{deviceType:e.matchValue,onDeviceTypeChange:o}),e.type==="language"&&m.jsx(VLe,{language:e.matchValue,onLanguageChange:o}),e.type==="query-param"&&m.jsx(WLe,{value:e.matchValue,name:e.matchKey??"",onNameChange:a,onValueChange:o})]})},VB=({isOpen:e,toggle:t,onSave:n,initialData:r})=>{const[i,o]=R.useState(r??{longUrl:"",conditions:[]}),a=R.useCallback(v=>{v.preventDefault(),v.stopPropagation(),i&&n(i),t()},[n,i,t]),s=R.useCallback(()=>o(({longUrl:v,conditions:g})=>({longUrl:v,conditions:[...g,{type:"device",matchValue:"",matchKey:null}]})),[]),l=R.useCallback((v,g)=>o(({longUrl:y,conditions:x})=>{const _=[...x];return _[v]=g,{longUrl:y,conditions:_}}),[]),c=R.useCallback(v=>o(({longUrl:g,conditions:y})=>{const x=[...y];return x.splice(v,1),{longUrl:g,conditions:x}}),[]),f=ea(),d=R.useCallback(()=>{var v;return(v=f==null?void 0:f.current)==null?void 0:v.focus()},[f]),p=R.useCallback(()=>o(r??{longUrl:"",conditions:[]}),[r]);return m.jsx(go,{size:"xl",isOpen:e,toggle:t,centered:!0,onOpened:d,onClosed:p,children:m.jsxs("form",{onSubmit:a,children:[m.jsx(yo,{toggle:t,className:"sticky-top redirect-rule-modal__header",children:"Redirect rule"}),m.jsxs($i,{children:[m.jsx("label",{htmlFor:"longUrl",className:"fw-bold",children:"Long URL:"}),m.jsx(Fn,{id:"longUrl",type:"url",placeholder:"https://www.example.com",value:i.longUrl,onChange:v=>o(g=>({...g,longUrl:v.target.value})),required:!0,innerRef:f}),m.jsx("hr",{}),m.jsxs("div",{className:"d-flex justify-content-between",children:[m.jsx("b",{children:"Conditions:"}),m.jsx(Ke,{outline:!0,size:"sm",type:"button","aria-label":"Add condition",onClick:s,children:m.jsx(je,{icon:ep})})]}),i.conditions.length===0&&m.jsx("div",{className:"text-center",children:m.jsx("i",{children:"Add conditions..."})}),i.conditions.length>0&&m.jsx(Kn,{children:i.conditions.map((v,g)=>m.jsx("div",{className:"col-lg-6 col-xl-4 mt-3",children:m.jsx(GLe,{condition:v,onConditionChange:y=>l(g,y),onDelete:()=>c(g)})},`${g}_${v.type}`))})]}),m.jsxs(as,{className:"sticky-bottom redirect-rule-modal__footer",children:[m.jsx(Ke,{type:"button",color:"link",onClick:t,children:"Cancel"}),m.jsx(Ke,{color:"primary",disabled:i.conditions.length===0,children:"Confirm"})]})]})})},qLe=({priority:e,isLast:t,redirectRule:n,onDelete:r,onMoveUp:i,onMoveDown:o,onUpdate:a})=>{const[s,l]=qt();return m.jsxs(xt,{children:[m.jsxs("div",{className:"d-flex align-content-center gap-3",children:[m.jsx("div",{className:"d-flex flex-column my-auto drag-n-drop-handler d-none d-md-block",style:{cursor:"grab"},children:m.jsx(je,{icon:xK})}),m.jsxs("div",{className:"d-flex flex-column my-auto",children:[m.jsx(Ke,{outline:!0,color:"secondary",size:"sm","aria-label":`Move rule with priority ${e} up`,disabled:e===1,onClick:i,className:"rounded-0 rounded-top",style:{marginBottom:"-1px"},children:m.jsx(je,{icon:$K})}),m.jsx(Ke,{outline:!0,color:"secondary",size:"sm","aria-label":`Move rule with priority ${e} down`,disabled:t,onClick:o,className:"rounded-0 rounded-bottom",children:m.jsx(je,{icon:kK})})]}),m.jsxs("div",{className:"flex-grow-1",children:[m.jsxs("div",{className:"mb-2",children:[m.jsx("b",{children:"Long URL:"})," ",m.jsx(mr,{href:n.longUrl,"data-testid":"rule-long-url"})]}),m.jsxs("div",{className:"d-flex flex-column flex-lg-row gap-2",children:[m.jsx("b",{children:"Conditions:"}),n.conditions.map((c,f)=>m.jsxs("div",{className:"badge bg-secondary",children:[c.type==="device"&&m.jsxs(m.Fragment,{children:["Device is ",c.matchValue]}),c.type==="language"&&m.jsxs(m.Fragment,{children:[c.matchValue," language is accepted"]}),c.type==="query-param"&&m.jsxs(m.Fragment,{children:["Query string contains ",c.matchKey,"=",c.matchValue]})]},`${c.type}_${f}`))]})]}),m.jsxs("div",{className:"d-flex flex-column flex-sm-row gap-1 my-auto",children:[m.jsx(Ke,{outline:!0,color:"secondary",size:"sm","aria-label":`Edit rule with priority ${e}`,onClick:l,children:m.jsx(je,{icon:H6})}),m.jsx(Ke,{outline:!0,color:"danger",size:"sm","aria-label":`Delete rule with priority ${e}`,onClick:r,children:m.jsx(je,{icon:W6})})]})]}),m.jsx(VB,{onSave:a,isOpen:s,toggle:l,initialData:n})]})},KLe=({shortUrlRedirectRules:e,getShortUrlRedirectRules:t,getShortUrlsDetails:n,shortUrlsDetails:r,setShortUrlRedirectRules:i,shortUrlRedirectRulesSaving:o,resetSetRules:a})=>{const s=bP(),{shortUrls:l}=r,c=s&&(l==null?void 0:l.get(s)),[f,d,p]=BLe([],{dragHandle:".drag-n-drop-handler",dropZoneClass:"opacity-25"}),{saving:v,saved:g,errorData:y}=o,[x,_]=qt(),b=R.useCallback(D=>p((N=[])=>[...N,D]),[p]),w=R.useCallback(D=>p((N=[])=>{const I=[...N];return I.splice(D,1),I}),[p]),S=R.useCallback((D,N)=>p((I=[])=>{const F=[...I];return F[D]=N,F}),[p]),E=R.useCallback((D,N)=>p((I=[])=>{if(!I[N])return I;const F=[...I],K=F[N];return F[N]=F[D],F[D]=K,F}),[p]),C=R.useCallback(D=>E(D,D-1),[E]),T=R.useCallback(D=>E(D,D+1),[E]),A=R.useCallback(D=>{D.preventDefault(),d&&i({shortUrl:s,data:{redirectRules:d}})},[s,d,i]);return R.useEffect(()=>(t(s),n([s]),a),[t,n,s,a]),R.useEffect(()=>{e.redirectRules&&p(e.redirectRules)},[p,e.redirectRules]),m.jsxs("div",{className:"d-flex flex-column gap-3",children:[m.jsx("header",{children:m.jsxs(vr,{body:!0,children:[m.jsxs("h2",{className:"d-sm-flex justify-content-between align-items-center mb-0",children:[m.jsx(db,{}),m.jsxs("div",{className:"text-center flex-grow-1",children:[r.loading&&m.jsx(m.Fragment,{children:"Loading..."}),!r.loading&&m.jsxs("small",{children:["Redirect rules for ",m.jsx(mr,{href:(c==null?void 0:c.shortUrl)??""})]})]})]}),m.jsx("hr",{}),m.jsxs("div",{children:[m.jsx("p",{className:"mb-2",children:"Configure dynamic conditions that will be checked at runtime."}),"If no conditions match, visitors will be redirected to: ",m.jsx(mr,{href:e.defaultLongUrl??""})]})]})}),m.jsx("div",{children:m.jsxs(Ke,{outline:!0,color:"primary",onClick:_,children:[m.jsx(je,{icon:ep,className:"me-1"})," Add rule"]})}),m.jsxs("form",{onSubmit:A,children:[e.loading&&m.jsx(Ho,{loading:!0}),d.length===0&&!e.loading&&m.jsx(xt,{className:"text-center",children:m.jsx("i",{children:"This short URL has no dynamic redirect rules"})}),m.jsx("div",{className:"d-flex flex-column gap-2",ref:f,children:d.map((D,N)=>m.jsx(qLe,{redirectRule:D,priority:N+1,isLast:N===d.length-1,onDelete:()=>w(N),onMoveUp:()=>C(N),onMoveDown:()=>T(N),onUpdate:I=>S(N,I)},`${D.longUrl}_${N}`))}),m.jsx("div",{className:"text-center mt-3",children:m.jsx(Ke,{outline:!0,color:"primary",className:"btn-sm-block",disabled:v,"data-testid":"save-button",children:v?"Saving...":"Save rules"})})]}),y&&m.jsx(er,{type:"error",children:m.jsx(mo,{errorData:y,fallbackMessage:"An error occurred while saving short URL redirect rules :("})}),g&&m.jsx(er,{type:"success",children:"Redirect rules properly saved."}),m.jsx(VB,{isOpen:x,toggle:_,onSave:b})]})},YLe=(e,t)=>{e.serviceFactory("ShortUrlRedirectRules",()=>KLe),e.decorator("ShortUrlRedirectRules",t(["shortUrlRedirectRules","shortUrlsDetails","shortUrlRedirectRulesSaving"],["getShortUrlRedirectRules","getShortUrlsDetails","setShortUrlRedirectRules","resetSetRules"])),e.serviceFactory("getShortUrlRedirectRules",WMe,"apiClientFactory"),e.serviceFactory("setShortUrlRedirectRules",UMe,"apiClientFactory"),e.serviceFactory("resetSetRules",n=>n.resetSetRules,"setShortUrlRedirectRulesReducerCreator"),e.serviceFactory("shortUrlRedirectRulesReducerCreator",HMe,"getShortUrlRedirectRules"),e.serviceFactory("shortUrlRedirectRulesReducer",n=>n.reducer,"shortUrlRedirectRulesReducerCreator"),e.serviceFactory("setShortUrlRedirectRulesReducerCreator",zMe,"setShortUrlRedirectRules"),e.serviceFactory("setShortUrlRedirectRulesReducer",n=>n.reducer,"setShortUrlRedirectRulesReducerCreator")},ZLe=e=>({longUrl:"",tags:[],customSlug:"",title:void 0,shortCodeLength:void 0,domain:"",validSince:void 0,validUntil:void 0,maxVisits:void 0,findIfExists:!1,validateUrl:(e==null?void 0:e.validateUrls)??!1,forwardQuery:(e==null?void 0:e.forwardQuery)??!0}),WB=({createShortUrl:e,shortUrlCreation:t,resetCreateShortUrl:n,basicMode:r=!1})=>{const{ShortUrlForm:i,CreateShortUrlResult:o}=Rt(WB),a=_r("shortUrlCreation"),s=R.useMemo(()=>ZLe(a),[a]);return m.jsxs(m.Fragment,{children:[m.jsx(i,{initialState:s,saving:t.saving,basicMode:r,onSave:async l=>(n(),e(l))}),m.jsx(o,{creation:t,resetCreateShortUrl:n,canBeClosed:r})]})},XLe=$t(WB,["ShortUrlForm","CreateShortUrlResult"]),HB=({shortUrlsDetails:e,getShortUrlsDetails:t,shortUrlEdition:n,editShortUrl:r})=>{const{ShortUrlForm:i}=Rt(HB),o=bP(),{loading:a,error:s,errorData:l,shortUrls:c}=e,f=o&&(c==null?void 0:c.get(o)),{saving:d,saved:p,error:v,errorData:g}=n,y=_r("shortUrlCreation"),x=R.useMemo(()=>qNe(f,y),[f,y]);return R.useEffect(()=>{o&&t([o])},[t,o]),a?m.jsx(Ho,{loading:!0}):s?m.jsx(er,{type:"error",children:m.jsx(mo,{errorData:l,fallbackMessage:"An error occurred while loading short URL detail :("})}):m.jsxs(m.Fragment,{children:[m.jsx("header",{className:"mb-3",children:m.jsx(vr,{body:!0,children:m.jsxs("h2",{className:"d-sm-flex justify-content-between align-items-center mb-0",children:[m.jsx(db,{}),m.jsx("div",{className:"text-center flex-grow-1",children:m.jsxs("small",{children:["Edit ",m.jsx(mr,{href:(f==null?void 0:f.shortUrl)??""})]})})]})})}),m.jsx(i,{initialState:x,saving:d,onSave:async _=>{f&&r({...f,data:_})}}),p&&v&&m.jsx(er,{type:"error",className:"mt-3",children:m.jsx(mo,{errorData:g,fallbackMessage:"An error occurred while updating short URL :("})}),p&&!v&&m.jsx(er,{type:"success",className:"mt-3",children:"Short URL properly edited."})]})},QLe=$t(HB,["ShortUrlForm"]),GB=({text:e,onCopy:t},n=navigator)=>{var r;return(r=n.clipboard)==null?void 0:r.writeText(e).then(()=>t==null?void 0:t(e,!0)).catch(()=>t==null?void 0:t(e,!1))},qB=({creation:e,resetCreateShortUrl:t,canBeClosed:n=!1})=>{const{useTimeoutToggle:r}=Rt(qB),[i,o]=r(),{error:a,saved:s}=e;if(R.useEffect(()=>{t()},[t]),a)return m.jsxs(er,{type:"error",className:"mt-3",children:[n&&m.jsx(je,{"data-testid":"error-close-button",icon:yx,className:"float-end pointer",onClick:t}),m.jsx(mo,{errorData:e.errorData,fallbackMessage:"An error occurred while creating the URL :("})]});if(!s)return null;const{shortUrl:l}=e.result;return m.jsxs(er,{type:"success",className:"mt-3",children:[n&&m.jsx(je,{"data-testid":"success-close-button",icon:yx,className:"float-end pointer",onClick:t}),m.jsxs("span",{children:[m.jsx("b",{children:"Great!"})," The short URL is ",m.jsx("b",{children:l})]}),m.jsxs("button",{className:"btn btn-light btn-sm create-short-url-result__copy-btn",id:"copyBtn",type:"button",onClick:()=>GB({text:l,onCopy:o}),children:[m.jsx(je,{icon:h5})," Copy ",m.jsxs("span",{className:"sr-only",children:[l," to clipboard"]})]}),m.jsx(sp,{placement:"left",isOpen:i,target:"copyBtn",children:"Copied!"})]})},JLe=$t(qB,["useTimeoutToggle"]),p_="delete",eRe=({shortUrl:e,toggle:t,isOpen:n,shortUrlDeletion:r,resetDeleteShortUrl:i,deleteShortUrl:o,shortUrlDeleted:a})=>{const[s,l]=R.useState("");R.useEffect(()=>i,[i]);const{loading:c,error:f,deleted:d,errorData:p}=r,v=R.useCallback(()=>{i(),t()},[i,t]),g=R.useCallback(y=>(y.preventDefault(),o(e).then(t)),[o,e,t]);return m.jsx(go,{isOpen:n,toggle:v,centered:!0,onClosed:()=>d&&a(e),children:m.jsxs("form",{onSubmit:g,children:[m.jsx(yo,{toggle:v,children:m.jsx("span",{className:"text-danger",children:"Delete short URL"})}),m.jsxs($i,{children:[m.jsxs("p",{children:[m.jsx("b",{className:"text-danger",children:"Caution!"})," You are about to delete a short URL."]}),m.jsx("p",{children:"This action cannot be undone. Once you have deleted it, all the visits stats will be lost."}),m.jsxs("p",{children:["Write ",m.jsx("b",{children:p_})," to confirm deletion."]}),m.jsx("input",{type:"text",className:"form-control",placeholder:`Insert ${p_}`,value:s,onChange:y=>l(y.target.value)}),f&&m.jsx(er,{type:zNe(p)?"warning":"error",small:!0,className:"mt-2",children:m.jsx(mo,{errorData:p,fallbackMessage:"Something went wrong while deleting the URL :("})})]}),m.jsxs(as,{children:[m.jsx("button",{type:"button",className:"btn btn-link",onClick:v,children:"Cancel"}),m.jsx("button",{type:"submit",className:"btn btn-danger",disabled:s!==p_||c,children:c?"Deleting...":"Delete"})]})]})})},KB=({amount:e=0,loading:t=!1,...n})=>m.jsxs(Ke,{...n,outline:!0,color:"primary",disabled:t,children:[m.jsx(je,{icon:Xq})," ",t?"Exporting...":m.jsxs(m.Fragment,{children:["Export (",Gt(e),")"]})]}),CR=20,YB=({amount:e=0})=>{const{apiClientFactory:t,ReportExporter:n}=Rt(YB),[{tags:r,search:i,startDate:o,endDate:a,orderBy:s,tagsMode:l}]=fb(),[c,,f,d]=qt(),p=R.useCallback(async()=>{const v=e/CR,g=async(x=1)=>{const{data:_}=await t().listShortUrls({page:`${x}`,tags:r,searchTerm:i,startDate:o,endDate:a,orderBy:s,tagsMode:l,itemsPerPage:CR});return x>=v?_:_.concat(await g(x+1))};f();const y=await g();n.exportShortUrls(y.map(x=>{var _;const{hostname:b,pathname:w}=new URL(x.shortUrl),S=w.substring(1);return{createdAt:x.dateCreated,domain:b,shortCode:S,shortUrl:x.shortUrl,longUrl:x.longUrl,title:x.title??"",tags:x.tags.join("|"),visits:((_=x==null?void 0:x.visitsSummary)==null?void 0:_.total)??x.visitsCount??0}})),d()},[e,t,a,s,n,i,o,f,d,r,l]);return m.jsx(KB,{loading:c,className:"btn-md-block",amount:e,onClick:p})},tRe=$t(YB,["apiClientFactory","ReportExporter"]),ZB=({text:e,onCopy:t,copyToClipboard:n=GB})=>m.jsx(gl,{className:"ms-2 p-0","aria-label":`Copy ${e} to clipboard`,onClick:()=>n({text:e,onCopy:t}),children:m.jsx(je,{icon:h5,className:"fs-5"})}),nRe=(e,{margin:t,...n})=>{const r=`${e}/qr-code`,i=l0({...n,margin:t>0?t:void 0});return`${r}${i?`?${i}`:""}`},rRe=({errorCorrection:e,setErrorCorrection:t})=>m.jsxs(ta,{text:`Error correction (${e})`,children:[m.jsxs(Ne,{active:e==="L",onClick:()=>t("L"),children:[m.jsx("b",{children:"L"}),"ow"]}),m.jsxs(Ne,{active:e==="M",onClick:()=>t("M"),children:[m.jsx("b",{children:"M"}),"edium"]}),m.jsxs(Ne,{active:e==="Q",onClick:()=>t("Q"),children:[m.jsx("b",{children:"Q"}),"uartile"]}),m.jsxs(Ne,{active:e==="H",onClick:()=>t("H"),children:[m.jsx("b",{children:"H"}),"igh"]})]}),iRe=({format:e,setFormat:t})=>m.jsxs(ta,{text:`Format (${e})`,children:[m.jsx(Ne,{active:e==="png",onClick:()=>t("png"),children:"PNG"}),m.jsx(Ne,{active:e==="svg",onClick:()=>t("svg"),children:"SVG"})]}),XB=({shortUrl:{shortUrl:e,shortCode:t},toggle:n,isOpen:r})=>{const{ImageDownloader:i}=Rt(XB),[o,a]=R.useState(300),[s,l]=R.useState(0),[c,f]=R.useState("png"),[d,p]=R.useState("L"),v=R.useMemo(()=>nRe(e,{size:o,format:c,margin:s,errorCorrection:d}),[e,o,c,s,d]),g=R.useMemo(()=>o+s,[o,s]),y=R.useMemo(()=>{if(!(g<500))return g<800?"lg":"xl"},[g]);return m.jsxs(go,{isOpen:r,toggle:n,centered:!0,size:y,children:[m.jsxs(yo,{toggle:n,children:["QR code for ",m.jsx(mr,{href:e,children:e})]}),m.jsxs($i,{children:[m.jsxs(Kn,{children:[m.jsxs(eo,{className:"d-grid col-md-6",children:[m.jsxs("label",{htmlFor:"sizeControl",children:["Size: ",o,"px"]}),m.jsx("input",{id:"sizeControl",type:"range",className:"form-control-range",value:o,step:10,min:50,max:1e3,onChange:x=>a(Number(x.target.value))})]}),m.jsxs(eo,{className:"d-grid col-md-6",children:[m.jsxs("label",{htmlFor:"marginControl",children:["Margin: ",s,"px"]}),m.jsx("input",{id:"marginControl",type:"range",className:"form-control-range",value:s,step:1,min:0,max:100,onChange:x=>l(Number(x.target.value))})]}),m.jsx(eo,{className:"d-grid col-md-6",children:m.jsx(iRe,{format:c,setFormat:f})}),m.jsx(eo,{className:"col-md-6",children:m.jsx(rRe,{errorCorrection:d,setErrorCorrection:p})})]}),m.jsxs("div",{className:"text-center",children:[m.jsxs("div",{className:"mb-3",children:[m.jsx(mr,{href:v}),m.jsx(ZB,{text:v})]}),m.jsx("img",{src:v,className:"qr-code-modal__img",alt:"QR code"}),m.jsx("div",{className:"mt-3",children:m.jsxs(Ke,{block:!0,color:"primary",onClick:()=>{i.saveImage(v,`${t}-qr-code.${c}`).catch(()=>{})},children:["Download ",m.jsx(je,{icon:Y6,className:"ms-1"})]})})]})]})]})},oRe=$t(XB,["ImageDownloader"]),Cy=({date:e,format:t=lB,relative:n=!1})=>{const r=dP(e)?e:Ya(e);return m.jsx("time",{dateTime:`${Aae(r)}000`,children:n?`${Tae(Qa(),r)} ago`:wg(r,t)})},aRe=e=>{const{meta:t,visitsCount:n,visitsSummary:r}=e,{maxVisits:i,validSince:o,validUntil:a}=t,s=(r==null?void 0:r.total)??n??0;return i&&s>=i?{icon:WK,className:"text-danger",description:m.jsxs(m.Fragment,{children:["This short URL cannot be currently visited because it has reached the maximum amount of ",m.jsx("b",{children:i})," visit",i>1?"s":"","."]})}:a&&Og(jr(a),Qa())?{icon:tA,className:"text-danger",description:m.jsxs(m.Fragment,{children:["This short URL cannot be visited since ",m.jsx("b",{className:"indivisible",children:Gh(jr(a))}),"."]})}:o&&Og(Qa(),jr(o))?{icon:tA,className:"text-warning",description:m.jsxs(m.Fragment,{children:["This short URL will start working on ",m.jsx("b",{className:"indivisible",children:Gh(jr(o))}),"."]})}:{icon:Gd,className:"text-primary",description:"This short URL can be visited normally."}},sRe=({shortUrl:e})=>{const t=ea(),{icon:n,className:r,description:i}=aRe(e);return m.jsxs(m.Fragment,{children:[m.jsx("span",{style:{cursor:i?"help":void 0},ref:t,children:m.jsx(je,{icon:n,className:r})}),m.jsx(br,{target:t,placement:"bottom",children:i})]})},lRe=(e,{shortCode:t,domain:n},r)=>{const i=n?`?domain=${n}`:"";return`${e}/short-code/${aB(t)}/${r}${i}`},dv=({shortUrl:e,suffix:t,asLink:n,children:r,...i})=>{const o=ds();return!n||!e?m.jsx("span",{...i,children:r}):m.jsx(St,{to:lRe(o,e,t),...i,children:r})},QB=({visitsCount:e,shortUrl:t,active:n=!1,asLink:r=!1})=>{const i=ea(),{maxVisits:o,validSince:a,validUntil:s}=(t==null?void 0:t.meta)??{},l=!!o||!!a||!!s,c=m.jsx(dv,{shortUrl:t,suffix:"visits",asLink:r,children:m.jsx("strong",{className:Ce("short-url-visits-count__amount",{"short-url-visits-count__amount--big":n}),children:Gt(e)})});return l?m.jsxs(m.Fragment,{children:[m.jsxs("span",{className:"indivisible",children:[c,m.jsxs("small",{className:"short-urls-visits-count__max-visits-control",ref:i,children:[o&&m.jsxs(m.Fragment,{children:[" / ",Gt(o)]}),m.jsx("sup",{className:"ms-1",children:m.jsx(je,{icon:nE})})]})]}),m.jsx(br,{target:i,placement:"bottom",children:m.jsxs("ul",{className:"list-unstyled mb-0",children:[o&&m.jsxs("li",{className:"short-url-visits-count__tooltip-list-item",children:["This short URL will not accept more than ",m.jsx("b",{children:Gt(o)})," visit",o===1?"":"s","."]}),a&&m.jsxs("li",{className:"short-url-visits-count__tooltip-list-item",children:["This short URL will not accept visits before ",m.jsx("b",{className:"indivisible",children:Gh(jr(a))}),"."]}),s&&m.jsxs("li",{className:"short-url-visits-count__tooltip-list-item",children:["This short URL will not accept visits after ",m.jsx("b",{className:"indivisible",children:Gh(jr(s))}),"."]})]})})]}):c},cRe=e=>!!e.onClose,uRe=e=>!!e.onClick,hb=e=>{const{text:t,children:n,className:r,colorGenerator:i}=e,o=uRe(e),a=o?gl:"span",s=R.useMemo(()=>i.stylesForKey(t),[t,i]);return m.jsxs(a,{className:Ce("badge tag fw-bold",r,{pointer:o}),style:s,onClick:o?e.onClick:void 0,children:[n??t,cRe(e)&&m.jsx(gl,{"aria-label":`Remove ${t}`,className:"bg-transparent ms-1 opacity-100 p-0 fw-bold tag__close",onClick:e.onClose,children:"×"})]})},fRe=({tags:e,onTagClick:t,colorGenerator:n})=>e.length===0?m.jsx("i",{className:"indivisible",children:m.jsx("small",{children:"No tags"})}):m.jsx(m.Fragment,{children:e.map(r=>m.jsx(hb,{text:r,colorGenerator:n,onClick:()=>t==null?void 0:t(r)},r))}),JB=({shortUrl:e,onTagClick:t})=>{var n,r,i,o;const{ShortUrlsRowMenu:a,ColorGenerator:s,useTimeoutToggle:l}=Rt(JB),[c,f]=l(),[d,p]=l(!1,500),v=R.useRef(!0),[{excludeBots:g}]=fb(),y=_r("visits"),x=g??(y==null?void 0:y.excludeBots);return R.useEffect(()=>{!v.current&&p(),v.current=!1},[(n=e.visitsSummary)==null?void 0:n.total,(r=e.visitsSummary)==null?void 0:r.nonBots,e.visitsCount,p]),m.jsxs("tr",{className:"responsive-table__row",children:[m.jsx("td",{className:"indivisible short-urls-row__cell responsive-table__cell","data-th":"Created at",children:m.jsx(Cy,{date:e.dateCreated})}),m.jsx("td",{className:"responsive-table__cell short-urls-row__cell","data-th":"Short URL",children:m.jsxs("span",{className:"position-relative short-urls-row__cell--indivisible",children:[m.jsx("span",{className:"short-urls-row__short-url-wrapper",children:m.jsx(mr,{href:e.shortUrl})}),m.jsx(ZB,{text:e.shortUrl,onCopy:f}),m.jsx("span",{role:"status",className:"badge bg-warning text-black short-urls-row__copy-hint",hidden:!c,children:"Copied short URL!"})]})}),m.jsx("td",{className:"responsive-table__cell short-urls-row__cell short-urls-row__cell--break","data-th":`${e.title?"Title":"Long URL"}`,children:m.jsx(mr,{href:e.longUrl,children:e.title??e.longUrl})}),e.title&&m.jsx("td",{className:"short-urls-row__cell responsive-table__cell short-urls-row__cell--break d-lg-none","data-th":"Long URL",children:m.jsx(mr,{href:e.longUrl})}),m.jsx("td",{className:"responsive-table__cell short-urls-row__cell","data-th":"Tags",children:m.jsx(fRe,{tags:e.tags,colorGenerator:s,onTagClick:t})}),m.jsx("td",{className:"responsive-table__cell short-urls-row__cell text-lg-end","data-th":"Visits",children:m.jsx(QB,{visitsCount:(x?(i=e.visitsSummary)==null?void 0:i.nonBots:(o=e.visitsSummary)==null?void 0:o.total)??e.visitsCount??0,shortUrl:e,active:d,asLink:!0})}),m.jsx("td",{className:"responsive-table__cell short-urls-row__cell","data-th":"Status",children:m.jsx(sRe,{shortUrl:e})}),m.jsx("td",{className:"responsive-table__cell short-urls-row__cell text-end",children:m.jsx(a,{shortUrl:e})})]})},dRe=$t(JB,["ShortUrlsRowMenu","ColorGenerator","useTimeoutToggle"]),hRe=(e,{maxVersion:t,minVersion:n})=>{const r=!n||l2(e,n,">=");return(!t||l2(e,t,"<="))&&r},eU={excludeBotsOnShortUrls:{minVersion:"3.4.0"},filterDisabledUrls:{minVersion:"3.4.0"},deviceLongUrls:{minVersion:"3.5.0",maxVersion:"3.*.*"},shortUrlVisitsDeletion:{minVersion:"3.6.0"},orphanVisitsDeletion:{minVersion:"3.7.0"},shortUrlRedirectRules:{minVersion:"4.0.0"},urlValidation:{maxVersion:"3.*.*"}};Object.freeze(eU);const Os=(e,t)=>t==="latest"||hRe(t,eU[e]),tU=e=>({excludeBotsOnShortUrls:Os("excludeBotsOnShortUrls",e),filterDisabledUrls:Os("filterDisabledUrls",e),deviceLongUrls:Os("deviceLongUrls",e),shortUrlVisitsDeletion:Os("shortUrlVisitsDeletion",e),orphanVisitsDeletion:Os("orphanVisitsDeletion",e),shortUrlRedirectRules:Os("shortUrlRedirectRules",e),urlValidation:Os("urlValidation",e)}),nU=R.createContext(tU("0.0.0")),pRe=nU.Provider,mRe=e=>R.useMemo(()=>tU(e),[e]),es=e=>R.useContext(nU)[e],rU=({shortUrl:e})=>{const{DeleteShortUrlModal:t,QrCodeModal:n}=Rt(rU),[r,,i,o]=qt(),[a,,s,l]=qt(),c=ab(),f=es("shortUrlRedirectRules");return m.jsxs(c0,{minWidth:f?220:190,children:[m.jsxs(Ne,{tag:dv,shortUrl:e,suffix:"visits",asLink:!0,children:[m.jsx(je,{icon:tE,fixedWidth:!0})," Visit stats"]}),c&&m.jsxs(m.Fragment,{children:[m.jsxs(Ne,{disabled:!c.canAddItemWithName(e.shortUrl),onClick:()=>c.addItemToCompare({name:e.shortUrl,query:fP(e)}),children:[m.jsx(je,{icon:Jy,fixedWidth:!0})," Compare visits"]}),m.jsx(Ne,{divider:!0,tag:"hr"})]}),m.jsxs(Ne,{tag:dv,shortUrl:e,suffix:"edit",asLink:!0,children:[m.jsx(je,{icon:eE,fixedWidth:!0})," Edit short URL"]}),f&&m.jsxs(Ne,{tag:dv,shortUrl:e,suffix:"redirect-rules",asLink:!0,children:[m.jsx(je,{icon:GK,fixedWidth:!0})," Manage redirect rules"]}),m.jsxs(Ne,{onClick:i,children:[m.jsx(je,{icon:zK,fixedWidth:!0})," QR code"]}),m.jsx(n,{shortUrl:e,isOpen:r,toggle:o}),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsxs(Ne,{className:"dropdown-item--danger",onClick:s,children:[m.jsx(je,{icon:JS,fixedWidth:!0})," Delete short URL"]}),m.jsx(t,{shortUrl:e,isOpen:a,toggle:l})]})},vRe=$t(rU,["DeleteShortUrlModal","QrCodeModal"]),iU="shlink/shortUrlCreation",PR={saving:!1,saved:!1,error:!1},gRe=e=>fn(`${iU}/createShortUrl`,t=>e().createShortUrl(t)),yRe=e=>{const{reducer:t,actions:n}=Qt({name:iU,initialState:PR,reducers:{resetCreateShortUrl:()=>PR},extraReducers:i=>{i.addCase(e.pending,()=>({saving:!0,saved:!1,error:!1})),i.addCase(e.rejected,(o,{error:a})=>({saving:!1,saved:!1,error:!0,errorData:zr(a)})),i.addCase(e.fulfilled,(o,{payload:a})=>({result:a,saving:!1,saved:!0,error:!1}))}}),{resetCreateShortUrl:r}=n;return{reducer:t,resetCreateShortUrl:r}},oU="shlink/shortUrlEdition",bRe={saving:!1,saved:!1,error:!1},_Re=e=>fn(`${oU}/editShortUrl`,({shortCode:t,domain:n,data:r})=>e().updateShortUrl(t,n,r)),xRe=e=>Qt({name:oU,initialState:bRe,reducers:{},extraReducers:t=>{t.addCase(e.pending,n=>({...n,saving:!0,error:!1,saved:!1})),t.addCase(e.rejected,(n,{error:r})=>({...n,saving:!1,error:!0,saved:!1,errorData:zr(r)})),t.addCase(e.fulfilled,(n,{payload:r})=>({shortUrl:r,saving:!1,error:!1,saved:!0}))}}),TR="shlink/shortUrlsDetails",jR={loading:!1,error:!1},wRe=e=>{const t=fn(`${TR}/getShortUrlsDetails`,async(r,{getState:i})=>{const{shortUrlsList:o}=i(),a=await Promise.all(r.map(async s=>{var l;const{shortCode:c,domain:f}=s,d=(l=o==null?void 0:o.shortUrls)==null?void 0:l.data.find(p=>Ed(p,c,f));return[s,d??await e().getShortUrl(c,f)]}));return new Map(a)}),{reducer:n}=Qt({name:TR,initialState:jR,reducers:{},extraReducers:r=>{r.addCase(t.pending,()=>({loading:!0,error:!1})),r.addCase(t.rejected,(i,{error:o})=>({loading:!1,error:!0,errorData:zr(o)})),r.addCase(t.fulfilled,(i,{payload:o})=>({...jR,shortUrls:o}))}});return{reducer:n,getShortUrlsDetails:t}},m_=({icon:e,className:t,...n})=>{const r=ea();return m.jsxs("div",{className:"icon-input-container",children:[m.jsx(Fn,{className:Ce("icon-input-container__input",t),innerRef:r,...n}),m.jsx(je,{icon:e,fixedWidth:!0,className:"icon-input-container__icon",onClick:()=>{var i;return(i=r.current)==null?void 0:i.focus()}})]})},ORe=({minDate:e,maxDate:t,value:n,onChange:r,withTime:i=!1,...o})=>{const a=R.useCallback(({target:l})=>{if(!l.value){r==null||r(null);return}r==null||r(jr(l.value))},[r]),s=R.useMemo(()=>i?Gh:ja,[i]);return m.jsx(Fn,{...o,type:i?"datetime-local":"date",value:s(n)??"",max:s(t)??void 0,min:s(e)??void 0,onChange:a})},Py=({label:e,id:t,...n})=>{const r=R.useId();return m.jsxs(m.Fragment,{children:[m.jsxs("label",{htmlFor:t??r,className:"mb-1",children:[e,":"]}),m.jsx(ORe,{id:t??r,...n})]})},v_=({children:e,infoTooltip:t,checked:n,onChange:r})=>m.jsxs("p",{children:[m.jsx(jD,{inline:!0,checked:n,className:t?"me-2":"",onChange:r,children:e}),t&&m.jsx(fv,{placement:"right",children:t})]}),SRe=({isOpen:e,toggle:t})=>m.jsxs(go,{isOpen:e,toggle:t,centered:!0,size:"lg",children:[m.jsx(yo,{toggle:t,children:"Info"}),m.jsxs($i,{children:[m.jsxs("p",{children:["When the ",m.jsx("b",{children:m.jsx("i",{children:'"Use existing URL if found"'})})," checkbox is checked, the server will return an existing short URL if it matches provided params."]}),m.jsx("p",{children:"These are the checks performed by Shlink in order to determine if an existing short URL should be returned:"}),m.jsxs("ul",{children:[m.jsx("li",{children:"When only the long URL is provided: The most recent match will be returned, or a new short URL will be created if none is found."}),m.jsxs("li",{children:["When long URL and custom slug and/or domain are provided: Same as in previous case, but it will try to match the short URL using both the long URL and the slug, the long URL and the domain, or the three of them.",m.jsx("br",{}),"If the slug is being used by another long URL, an error will be returned."]}),m.jsx("li",{children:"When other params are provided: Same as in previous cases, but it will try to match existing short URLs with all provided data. If any of them does not match, a new short URL will be created"})]})]})]}),ERe=()=>{const[e,t]=qt();return m.jsxs(m.Fragment,{children:[m.jsx(gl,{className:"p-0",title:"What does this mean?",onClick:t,children:m.jsx(je,{icon:nE})}),m.jsx(SRe,{isOpen:e,toggle:t})]})},Fm=e=>typeof e=="string"?Ya(e):e,CRe=e=>"shortCodeLength"in e&&"customSlug"in e&&"domain"in e,PRe=e=>"error"in e,aU=({basicMode:e=!1,saving:t,onSave:n,initialState:r,tagsList:i})=>{var o,a,s;const{TagsSelector:l,DomainSelector:c}=Rt(aU),[f,d]=R.useState(r),p=CRe(f),v=es("deviceLongUrls"),g=es("urlValidation"),y=g||p,x=R.useCallback(()=>d(r),[r]),_=R.useCallback((C,T)=>$s(C)?C:$s(T)?null:void 0,[]),b=R.useCallback((C,T)=>d(({deviceLongUrls:A={},...D})=>{var N;return{...D,deviceLongUrls:{...A,[C]:_(T,(N=r.deviceLongUrls)==null?void 0:N[C])}}}),[r.deviceLongUrls,_]),w=R.useCallback(C=>d(T=>({...T,tags:C})),[]),S=R.useCallback(async C=>(C.preventDefault(),n(f).then(T=>p&&!PRe(T)&&x()).catch(()=>{})),[p,n,x,f]),E=R.useMemo(()=>m.jsxs("div",{className:"d-flex flex-column gap-3",children:[m.jsx(Fn,{bsSize:"lg",type:"url",placeholder:"URL to be shortened",required:!0,value:f.longUrl,onChange:C=>d(T=>({...T,longUrl:C.target.value}))}),m.jsxs("div",{className:Ce("d-flex flex-column flex-lg-row gap-3",{"mb-3":e}),children:[e&&p&&m.jsx("div",{className:"w-100 w-lg-50",children:m.jsx(Fn,{bsSize:"lg",placeholder:"Custom slug",value:f.customSlug??"",onChange:C=>d(T=>({...T,customSlug:C.target.value}))})}),m.jsx("div",{className:Ce("w-100",{"w-lg-50":e}),children:m.jsx(l,{tags:i.tags,selectedTags:f.tags??[],onChange:w})})]})]}),[l,e,w,p,f,i.tags]);return m.jsxs("form",{name:"shortUrlForm",className:"short-url-form",onSubmit:S,children:[e&&E,!e&&m.jsxs(m.Fragment,{children:[m.jsxs(Kn,{children:[m.jsx("div",{className:Ce("mb-3",{"col-sm-6":v,"col-12":!v}),children:m.jsx(xt,{title:"Main options",children:E})}),v&&m.jsx("div",{className:"col-sm-6 mb-3",children:m.jsxs(xt,{title:"Device-specific long URLs",bodyClassName:"d-flex flex-column gap-3",children:[m.jsx(m_,{type:"url",icon:Pse,placeholder:"Android-specific redirection",value:((o=f.deviceLongUrls)==null?void 0:o.android)??"",onChange:({target:C})=>b("android",C.value)}),m.jsx(m_,{type:"url",icon:Cse,placeholder:"iOS-specific redirection",value:((a=f.deviceLongUrls)==null?void 0:a.ios)??"",onChange:({target:C})=>b("ios",C.value)}),m.jsx(m_,{type:"url",icon:HK,placeholder:"Desktop-specific redirection",value:((s=f.deviceLongUrls)==null?void 0:s.desktop)??"",onChange:({target:C})=>b("desktop",C.value)})]})})]}),m.jsxs(Kn,{children:[m.jsx("div",{className:"col-sm-6 mb-3",children:m.jsxs(xt,{title:"Customize the short URL",bodyClassName:"d-flex flex-column gap-3",children:[m.jsx(Fn,{placeholder:"Title",value:f.title??"",onChange:({target:C})=>d(T=>({...T,title:_(C.value,r.title)}))}),p&&m.jsxs(m.Fragment,{children:[m.jsxs(Kn,{children:[m.jsx("div",{className:"col-lg-6 mb-3 mb-lg-0",children:m.jsx(Fn,{placeholder:"Custom slug",value:f.customSlug??"",onChange:C=>d(T=>({...T,customSlug:C.target.value})),disabled:$s(f.shortCodeLength)})}),m.jsx("div",{className:"col-lg-6",children:m.jsx(Fn,{type:"number",placeholder:"Short code length",value:f.shortCodeLength??"",onChange:C=>d(T=>({...T,shortCodeLength:C.target.value})),min:4,disabled:$s(f.customSlug)})})]}),m.jsx(c,{value:f.domain,onChange:C=>d(T=>({...T,domain:C}))})]})]})}),m.jsx("div",{className:"col-sm-6 mb-3",children:m.jsxs(xt,{title:"Limit access to the short URL",children:[m.jsxs("div",{className:"row mb-3",children:[m.jsx("div",{className:"col-lg-6",children:m.jsx(Py,{label:"Enabled since",withTime:!0,maxDate:f.validUntil?Fm(f.validUntil):void 0,value:f.validSince?Fm(f.validSince):null,onChange:C=>d(T=>({...T,validSince:Ja(C)}))})}),m.jsx("div",{className:"col-lg-6 mt-3 mt-lg-0",children:m.jsx(Py,{label:"Enabled until",withTime:!0,minDate:f.validSince?Fm(f.validSince):void 0,value:f.validUntil?Fm(f.validUntil):null,onChange:C=>d(T=>({...T,validUntil:Ja(C)}))})})]}),m.jsxs("div",{children:[m.jsx("label",{htmlFor:"maxVisits",className:"mb-1",children:"Maximum visits allowed:"}),m.jsx(Fn,{id:"maxVisits",type:"number",min:1,placeholder:"25...",value:f.maxVisits??"",onChange:C=>d(T=>({...T,maxVisits:$s(C.target.value)?Number(C.target.value):null}))})]})]})})]}),m.jsxs(Kn,{children:[y&&m.jsx("div",{className:"col-sm-6 mb-3",children:m.jsxs(xt,{title:"Extra checks",children:[g&&m.jsx(v_,{infoTooltip:"If checked, Shlink will try to reach the long URL, failing in case it's not publicly accessible.",checked:f.validateUrl,onChange:C=>d(T=>({...T,validateUrl:C})),children:"Validate URL"}),p&&m.jsxs("p",{children:[m.jsx(jD,{inline:!0,className:"me-2",checked:f.findIfExists,onChange:C=>d(T=>({...T,findIfExists:C})),children:"Use existing URL if found"}),m.jsx(ERe,{})]})]})}),m.jsx("div",{className:Ce("mb-3",{"col-sm-6":y}),children:m.jsxs(xt,{title:"Configure behavior",children:[m.jsx(v_,{infoTooltip:"This short URL will be included in the robots.txt for your Shlink instance, allowing web crawlers (like Google) to index it.",checked:f.crawlable,onChange:C=>d(T=>({...T,crawlable:C})),children:"Make it crawlable"}),m.jsx(v_,{infoTooltip:"When this short URL is visited, any query params appended to it will be forwarded to the long URL.",checked:f.forwardQuery,onChange:C=>d(T=>({...T,forwardQuery:C})),children:"Forward query params on redirect"})]})})]})]}),m.jsx("div",{className:"text-center",children:m.jsx(Ke,{outline:!0,color:"primary",disabled:t||!f.longUrl,className:"btn-xs-block",children:t?"Saving...":"Save"})})]})},TRe=$t(aU,["TagsSelector","DomainSelector"]),jRe=({active:e,allText:t,onChange:n})=>m.jsxs(m.Fragment,{children:[m.jsx(Ne,{active:e==="all",onClick:()=>n("all"),children:t}),m.jsx(Ne,{divider:!0,tag:"hr"}),ZNe.map(r=>m.jsx(Ne,{active:e===r,onClick:()=>n(r),children:dB(r)},r))]}),ARe=({startDate:e,endDate:t,disabled:n=!1,onStartDateChange:r,onEndDateChange:i})=>m.jsxs("div",{className:"row",children:[m.jsx("div",{className:"col-md-6",children:m.jsx(Py,{label:"Since",value:e,maxDate:t??void 0,disabled:n,onChange:r})}),m.jsx("div",{className:"col-md-6 mt-3 mt-md-0",children:m.jsx(Py,{label:"Until",value:t,minDate:e??void 0,disabled:n,onChange:o=>i(o&&Jc(o))})})]}),_P=({onDatesChange:e,dateRangeOrInterval:t,defaultText:n,disabled:r})=>{const i=R.useMemo(()=>dB(t)??n,[t,n]),[o,a]=R.useMemo(()=>Oy(t)?[void 0,t]:[t,void 0],[t]),s=R.useCallback(l=>{Oy(l)?e(hB(l),l):e(l)},[e]);return m.jsxs(ta,{disabled:r,text:i,children:[m.jsx(jRe,{allText:n,active:a,onChange:s}),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsx("div",{className:"px-3 py-1",children:m.jsx(ARe,{...o,onStartDateChange:l=>s({...o,startDate:l}),onEndDateChange:l=>s({...o,endDate:l})})})]})},kRe={dateCreated:"Created at",shortCode:"Short URL",longUrl:"Long URL",title:"Title",visits:"Visits"},NRe=({onChange:e,selected:t={},className:n,supportsDisabledFiltering:r})=>{const{excludeBots:i=!1,excludeMaxVisitsReached:o=!1,excludePastValidUntil:a=!1}=t,s=l=>()=>e({...t,[l]:!(t!=null&&t[l])});return m.jsxs(ta,{text:"Filters",dropdownClassName:n,end:!0,minWidth:250,children:[m.jsx(Ne,{header:!0,"aria-hidden":!0,children:"Visits:"}),m.jsx(Ne,{active:i,onClick:s("excludeBots"),children:"Ignore visits from bots"}),r&&m.jsxs(m.Fragment,{children:[m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsx(Ne,{header:!0,"aria-hidden":!0,children:"Short URLs:"}),m.jsx(Ne,{active:o,onClick:s("excludeMaxVisitsReached"),children:"Exclude with visits reached"}),m.jsx(Ne,{active:a,onClick:s("excludePastValidUntil"),children:"Exclude enabled in the past"})]}),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsx(Ne,{disabled:t.excludeBots===void 0&&t.excludeMaxVisitsReached===void 0&&t.excludePastValidUntil===void 0,onClick:()=>e({excludeBots:void 0,excludeMaxVisitsReached:void 0,excludePastValidUntil:void 0}),children:m.jsx("i",{children:"Reset to defaults"})})]})},sU=({className:e,shortUrlsAmount:t,order:n,handleOrderBy:r,tagsList:i})=>{const{ExportShortUrlsBtn:o,TagsSelector:a}=Rt(sU),[{search:s,tags:l,startDate:c,endDate:f,excludeBots:d,excludeMaxVisitsReached:p,excludePastValidUntil:v,tagsMode:g="any"},y]=fb(),x=es("filterDisabledUrls"),_=_r("visits"),[b,w]=R.useState(),S=R.useCallback(({startDate:A,endDate:D},N)=>{y({startDate:Ja(A)??void 0,endDate:Ja(D)??void 0}),w(N)},[y]),E=R.useCallback(A=>y({search:A||void 0}),[y]),C=R.useCallback(A=>y({tags:A}),[y]),T=R.useCallback(()=>y({tagsMode:g==="any"?"all":"any"}),[g,y]);return m.jsxs("div",{className:Ce("short-urls-filtering-bar-container",e),children:[m.jsx(cp,{initialValue:s,onChange:E}),m.jsxs(s0,{className:"mt-3",children:[m.jsx(a,{immutable:!0,placeholder:"With tags...",tags:i.tags,selectedTags:l,onChange:C}),l.length>1&&m.jsxs(m.Fragment,{children:[m.jsx(Ke,{outline:!0,color:"secondary",onClick:T,id:"tagsModeBtn","aria-label":"Change tags mode",children:m.jsx(je,{className:"short-urls-filtering-bar__tags-icon",icon:g==="all"?K6:gK})}),m.jsx(br,{target:"tagsModeBtn",placement:"left",children:g==="all"?"With all the tags.":"With any of the tags."})]})]}),m.jsxs(Kn,{className:"flex-lg-row-reverse",children:[m.jsx("div",{className:"col-lg-8 col-xl-6 mt-3",children:m.jsxs("div",{className:"d-md-flex",children:[m.jsx("div",{className:"flex-grow-1",children:m.jsx(_P,{defaultText:"All short URLs",dateRangeOrInterval:b??fB(c,f),onDatesChange:S})}),m.jsx(NRe,{className:"ms-0 ms-md-2 mt-3 mt-md-0",selected:{excludeBots:d??(_==null?void 0:_.excludeBots),excludeMaxVisitsReached:p,excludePastValidUntil:v},onChange:y,supportsDisabledFiltering:x})]})}),m.jsx("div",{className:"col-6 col-lg-4 col-xl-6 mt-3",children:m.jsx(o,{amount:t})}),m.jsx("div",{className:"col-6 d-lg-none mt-3",children:m.jsx(up,{prefixed:!1,items:kRe,order:n,onChange:r})})]})]})},MRe=$t(sU,["ExportShortUrlsBtn","TagsSelector"]);function Cd({currentOrder:e,field:t,className:n="ms-1"}){return!e.dir||e.field!==t?null:m.jsx(je,{icon:e.dir==="ASC"?cK:wK,className:n})}const Zl=2,HO="...",lU=(e,t)=>{const n=VE(Math.max(Zl,e-Zl),Math.min(t-1,e+Zl)+1);return e-Zl>Zl&&n.unshift(HO),e+Zle===HO,cU=e=>qh(e)?e:Gt(e),uU=(e,t)=>qh(e)?`${e}_${t}`:`${e}`,LRe=({paginator:e,currentQueryString:t=""})=>{const{currentPage:n=0,pagesCount:r=0}=e??{},i=ds(),o=s=>`${i}/list-short-urls/${s}${t}`;if(r<=1)return m.jsx("div",{className:"pb-3"});const a=()=>lU(n,r).map((s,l)=>m.jsx(Xs,{disabled:qh(s),active:n===s,children:m.jsx(Qs,{tag:St,to:o(s),children:cU(s)})},uU(s,l)));return m.jsxs(kE,{className:"sticky-card-paginator py-3",listClassName:"flex-wrap justify-content-center mb-0",children:[m.jsx(Xs,{disabled:n===1,children:m.jsx(Qs,{previous:!0,tag:St,to:o(n-1)})}),a(),m.jsx(Xs,{disabled:n>=r,children:m.jsx(Qs,{next:!0,tag:St,to:o(n+1)})})]})},RRe={field:"dateCreated",dir:"DESC"},fU=Bi(({listShortUrls:e,shortUrlsList:t})=>{var n,r,i;const{ShortUrlsTable:o,ShortUrlsFilteringBar:a}=Rt(fU),{page:s}=Cu(),l=gr(),[{tags:c,search:f,startDate:d,endDate:p,orderBy:v,tagsMode:g,excludeBots:y,excludePastValidUntil:x,excludeMaxVisitsReached:_},b]=fb(),w=qE(),[S,E]=R.useState(v??((n=w.shortUrlsList)==null?void 0:n.defaultOrdering)??RRe),{pagination:C}=(t==null?void 0:t.shortUrls)??{},T=R.useMemo(()=>{var X;return y??((X=w.visits)==null?void 0:X.excludeBots)},[y,(r=w.visits)==null?void 0:r.excludeBots]),A=es("excludeBotsOnShortUrls"),D=R.useCallback((X,Q)=>{b({orderBy:{field:X,dir:Q}}),E({field:X,dir:Q})},[b]),N=X=>()=>D(X,u0(X,S.field,S.dir)),I=X=>m.jsx(Cd,{currentOrder:S,field:X}),F=R.useCallback(X=>b({tags:[...new Set([...c,X])]}),[c,b]),K=R.useCallback(({field:X,dir:Q})=>A&&T&&X==="visits"?{field:"nonBotVisits",dir:Q}:{field:X,dir:Q},[T,A]),W=lP();return R.useEffect(()=>{e({page:s,searchTerm:f,tags:c,startDate:d,endDate:p,orderBy:K(S),tagsMode:g,excludePastValidUntil:x,excludeMaxVisitsReached:_})},[e,K,s,f,c,d,p,S,g,x,_]),m.jsxs(sP,{value:W,children:[m.jsx(a,{shortUrlsAmount:(i=t.shortUrls)==null?void 0:i.pagination.totalItems,order:S,handleOrderBy:D,className:"mb-3"}),m.jsx(cP,{type:"short-urls",className:"mb-3"}),m.jsxs(vr,{body:!0,className:Ce({"pb-0":!t.loading}),children:[m.jsx(o,{shortUrlsList:t,orderByColumn:N,renderOrderIcon:I,onTagClick:F}),!t.loading&&m.jsx(LRe,{paginator:C,currentQueryString:l.search})]})]})},()=>[nr.visits]),$Re=$t(fU,["ShortUrlsTable","ShortUrlsFilteringBar"]),dU=({orderByColumn:e,renderOrderIcon:t,shortUrlsList:n,onTagClick:r,className:i})=>{const{ShortUrlsRow:o}=Rt(dU),{error:a,loading:s,shortUrls:l}=n,c=Ce({"short-urls-table__header-cell--with-action":!!e}),f=Ce("short-urls-table__header-cell",c),d=Ce("table table-hover responsive-table short-urls-table",i),p=()=>a?m.jsx("tr",{children:m.jsx("td",{colSpan:6,className:"text-center table-danger text-dark",children:"Something went wrong while loading short URLs :("})}):s?m.jsx("tr",{children:m.jsx("td",{colSpan:6,className:"text-center",children:"Loading..."})}):!s&&(!l||l.data.length===0)?m.jsx("tr",{children:m.jsx("td",{colSpan:6,className:"text-center",children:"No results found"})}):l==null?void 0:l.data.map(v=>m.jsx(o,{shortUrl:v,onTagClick:r},v.shortUrl));return m.jsxs("table",{className:d,children:[m.jsx("thead",{className:"responsive-table__header short-urls-table__header",children:m.jsxs("tr",{children:[m.jsxs("th",{className:f,onClick:e==null?void 0:e("dateCreated"),children:["Created at ",t==null?void 0:t("dateCreated")]}),m.jsxs("th",{className:f,onClick:e==null?void 0:e("shortCode"),children:["Short URL ",t==null?void 0:t("shortCode")]}),m.jsxs("th",{className:"short-urls-table__header-cell",children:[m.jsxs(gl,{className:Ce("p-0",c),onClick:e==null?void 0:e("title"),children:["Title ",t==null?void 0:t("title")]}),"  /  ",m.jsxs(gl,{className:Ce("p-0",c),onClick:e==null?void 0:e("longUrl"),children:[m.jsx("span",{className:"indivisible",children:"Long URL"})," ",t==null?void 0:t("longUrl")]})]}),m.jsx("th",{className:"short-urls-table__header-cell",children:"Tags"}),m.jsx("th",{className:f,onClick:e==null?void 0:e("visits"),children:m.jsxs("span",{className:"indivisible",children:["Visits ",t==null?void 0:t("visits")]})}),m.jsx("th",{className:"short-urls-table__header-cell",colSpan:2,"aria-hidden":!0})]})}),m.jsx("tbody",{children:p()})]})},IRe=$t(dU,["ShortUrlsRow"]),DRe=(e,t)=>{e.factory("ShortUrlsList",$Re),e.decorator("ShortUrlsList",t(["mercureInfo","shortUrlsList"],["listShortUrls","createNewVisits","loadMercureInfo"])),e.factory("ShortUrlsTable",IRe),e.factory("ShortUrlsRow",dRe),e.factory("ShortUrlsRowMenu",vRe),e.factory("CreateShortUrlResult",JLe),e.factory("ShortUrlForm",TRe),e.decorator("ShortUrlForm",t(["tagsList"])),e.factory("CreateShortUrl",XLe),e.decorator("CreateShortUrl",t(["shortUrlCreation"],["createShortUrl","resetCreateShortUrl"])),e.factory("EditShortUrl",QLe),e.decorator("EditShortUrl",t(["shortUrlsDetails","shortUrlEdition"],["getShortUrlsDetails","editShortUrl"])),e.serviceFactory("DeleteShortUrlModal",()=>eRe),e.decorator("DeleteShortUrlModal",t(["shortUrlDeletion"],["deleteShortUrl","shortUrlDeleted","resetDeleteShortUrl"])),e.factory("QrCodeModal",oRe),e.factory("ExportShortUrlsBtn",tRe),e.factory("ShortUrlsFilteringBar",MRe),e.decorator("ShortUrlsFilteringBar",t(["tagsList"])),e.serviceFactory("shortUrlsListReducerCreator",RMe,"listShortUrls","editShortUrl","createShortUrl"),e.serviceFactory("shortUrlsListReducer",n=>n.reducer,"shortUrlsListReducerCreator"),e.serviceFactory("shortUrlCreationReducerCreator",yRe,"createShortUrl"),e.serviceFactory("shortUrlCreationReducer",n=>n.reducer,"shortUrlCreationReducerCreator"),e.serviceFactory("shortUrlEditionReducerCreator",xRe,"editShortUrl"),e.serviceFactory("shortUrlEditionReducer",n=>n.reducer,"shortUrlEditionReducerCreator"),e.serviceFactory("shortUrlDeletionReducerCreator",NMe,"deleteShortUrl"),e.serviceFactory("shortUrlDeletionReducer",n=>n.reducer,"shortUrlDeletionReducerCreator"),e.serviceFactory("shortUrlsDetailsReducerCreator",wRe,"apiClientFactory"),e.serviceFactory("shortUrlsDetailsReducer",n=>n.reducer,"shortUrlsDetailsReducerCreator"),e.serviceFactory("listShortUrls",LMe,"apiClientFactory"),e.serviceFactory("createShortUrl",gRe,"apiClientFactory"),e.serviceFactory("resetCreateShortUrl",n=>n.resetCreateShortUrl,"shortUrlCreationReducerCreator"),e.serviceFactory("deleteShortUrl",kMe,"apiClientFactory"),e.serviceFactory("resetDeleteShortUrl",n=>n.resetDeleteShortUrl,"shortUrlDeletionReducerCreator"),e.serviceFactory("shortUrlDeleted",()=>wB),e.serviceFactory("getShortUrlsDetails",n=>n.getShortUrlsDetails,"shortUrlsDetailsReducerCreator"),e.serviceFactory("editShortUrl",_Re,"apiClientFactory")},FRe=({tag:e,toggle:t,isOpen:n,deleteTag:r,tagDelete:i,tagDeleted:o})=>{const{deleting:a,error:s,deleted:l,errorData:c}=i;return m.jsxs(go,{toggle:t,isOpen:n,centered:!0,onClosed:()=>l&&o(e),children:[m.jsx(yo,{toggle:t,className:"text-danger",children:"Delete tag"}),m.jsxs($i,{children:["Are you sure you want to delete tag ",m.jsx("b",{children:e}),"?",s&&m.jsx(er,{type:"error",small:!0,className:"mt-2",children:m.jsx(mo,{errorData:c,fallbackMessage:"Something went wrong while deleting the tag :("})})]}),m.jsxs(as,{children:[m.jsx(Ke,{color:"link",onClick:t,children:"Cancel"}),m.jsx(Ke,{color:"danger",disabled:a,onClick:async()=>{await r(e),t()},children:a?"Deleting tag...":"Delete tag"})]})]})},hU=({tag:e,editTag:t,toggle:n,tagEdited:r,isOpen:i,tagEdit:o})=>{const{ColorGenerator:a}=Rt(hU),[s,l]=R.useState(e),[c,f]=R.useState(a.getColorForKey(e)),{editing:d,error:p,edited:v,errorData:g}=o,y=xB(async()=>{await t({oldName:e,newName:s,color:c}),n()}),x=R.useCallback(()=>v&&r({oldName:e,newName:s,color:c}),[c,v,s,e,r]);return m.jsx(go,{isOpen:i,toggle:n,centered:!0,onClosed:x,children:m.jsxs("form",{name:"editTag",onSubmit:y,children:[m.jsx(yo,{toggle:n,children:"Edit tag"}),m.jsxs($i,{children:[m.jsxs(s0,{children:[m.jsxs("div",{className:"input-group-text p-0 position-relative",style:{backgroundColor:c,borderColor:c},children:[m.jsx(je,{icon:uK,className:"position-absolute top-50 start-50 translate-middle text-white"}),m.jsx(Fn,{className:"form-control-color opacity-0",type:"color",value:c,onChange:_=>f(_.target.value)})]}),m.jsx(Fn,{value:s,placeholder:"Tag",required:!0,onChange:({target:_})=>l(_.value)})]}),p&&m.jsx(er,{type:"error",small:!0,className:"mt-2",children:m.jsx(mo,{errorData:g,fallbackMessage:"Something went wrong while editing the tag :("})})]}),m.jsxs(as,{children:[m.jsx(Ke,{type:"button",color:"link",onClick:n,children:"Cancel"}),m.jsx(Ke,{color:"primary",disabled:d,children:d?"Saving...":"Save"})]})]})})},BRe=$t(hU,["ColorGenerator"]),URe=/\s+/g,pU=e=>e.trim().toLowerCase().replace(URe,"-"),mU=({color:e})=>m.jsx("div",{style:{backgroundColor:e},className:"color-bullet"}),vU=({tag:e,colorGenerator:t})=>m.jsx(mU,{color:t.getColorForKey(e)});let AR=1;const gU="Tag not found",yU="Add tag",zRe=e=>e!==gU,VRe=e=>e===yU,kR=e=>(AR+=1,{label:e,value:`${e}${AR}`}),WRe=e=>({tag:t,onClick:n})=>m.jsx(hb,{colorGenerator:e,text:t.label,className:"react-tags__tag",onClose:n}),HRe=(e,t)=>({option:n,classNames:r,...i})=>{var o;const a=zRe(n.label),s=VRe(n.label);return m.jsx("div",{className:Ce(r.option,{[r.optionIsActive]:a&&n.active,"react-tags__listbox-option--not-selectable":!a}),...i,children:a?m.jsxs(m.Fragment,{children:[!s&&m.jsx(vU,{tag:`${n.label}`,colorGenerator:e}),s?m.jsxs("i",{children:['Add "',pU(((o=t.current)==null?void 0:o.input.value)??""),'"']}):n.label]}):m.jsx("i",{children:n.label})})},bU=({selectedTags:e,onChange:t,placeholder:n,tags:r,immutable:i=!1})=>{const{ColorGenerator:o}=Rt(bU),a=_r("shortUrlCreation"),s=(a==null?void 0:a.tagFilteringMode)??"startsWith",l=ea();return m.jsx(Sle,{ref:l,selected:e.map(kR),suggestions:r.filter(c=>!e.includes(c)).map(kR),renderTag:WRe(o),renderOption:HRe(o,l),activateFirstOption:!0,allowNew:!i,newOptionText:yU,noOptionsText:gU,placeholderText:n??"Add tags to the URL",delimiterKeys:["Enter",","],suggestionsTransform:(c,f)=>{const d=c.toLowerCase().trim();return d.length<1?[]:[...f.filter(({label:p})=>s==="includes"?p.includes(d):p.startsWith(d))].slice(0,5)},onDelete:c=>{const f=[...e];f.splice(c,1),t(f)},onAdd:({label:c})=>t([...new Set([...e,...c.split(",").map(pU)])])})},GRe=$t(bU,["ColorGenerator"]),GO="shlink/tagDelete",qRe={deleting:!1,deleted:!1,error:!1},_U=un(`${GO}/tagDeleted`),KRe=e=>{const t=fn(`${GO}/deleteTag`,async r=>{await e().deleteTags([r])}),{reducer:n}=Qt({name:GO,initialState:qRe,reducers:{},extraReducers:r=>{r.addCase(t.pending,()=>({deleting:!0,deleted:!1,error:!1})),r.addCase(t.rejected,(i,{error:o})=>({deleting:!1,deleted:!1,error:!0,errorData:zr(o)})),r.addCase(t.fulfilled,()=>({deleting:!1,deleted:!0,error:!1}))}});return{reducer:n,deleteTag:t}},xP="shlink/tagEdit",YRe={editing:!1,edited:!1,error:!1},xU=un(`${xP}/tagEdited`),ZRe=(e,t)=>fn(`${xP}/editTag`,async({oldName:n,newName:r,color:i})=>(await e().editTag(n,r),t.setColorForKey(r,i),{oldName:n,newName:r,color:i})),XRe=e=>Qt({name:xP,initialState:YRe,reducers:{},extraReducers:t=>{t.addCase(e.pending,()=>({editing:!0,edited:!1,error:!1})),t.addCase(e.rejected,(n,{error:r})=>({editing:!1,edited:!1,error:!0,errorData:zr(r)})),t.addCase(e.fulfilled,(n,{payload:r})=>{const{oldName:i,newName:o}=r;return{oldName:i,newName:o,editing:!1,edited:!0,error:!1}})}}),wP="shlink/tagsList",g_={tags:[],filteredTags:[],stats:{},loading:!1,error:!1},NR=(e,t)=>n=>n===e?t:n,MR=(e,t)=>e.filter(n=>n!==t),QRe=(e,t)=>e.reduce((n,[r,i])=>{if(!n[r])return n;const{bots:o,nonBots:a}=i,s=n[r];return{...n,[r]:{...s,visitsSummary:s.visitsSummary&&{total:s.visitsSummary.total+o+a,bots:s.visitsSummary.bots+o,nonBots:s.visitsSummary.nonBots+a},visitsCount:(s.visitsCount??0)+o+a}}},{...t}),JRe=e=>Object.entries(e.reduce((t,{shortUrl:n,visit:r})=>(n==null||n.tags.forEach(i=>{t[i]||(t[i]={bots:0,nonBots:0}),r.potentialBot?t[i].bots+=1:t[i].nonBots+=1}),t),{})),e4e=e=>fn(`${wP}/listTags`,async()=>{const{data:t}=await e().tagsStats(),n=t.reduce((r,{tag:i,...o})=>(r[i]=o,r),{});return{tags:Object.keys(n),stats:n}}),wU=un(`${wP}/filterTags`),t4e=(e,t)=>Qt({name:wP,initialState:g_,reducers:{},extraReducers:n=>{n.addCase(wU,(r,{payload:i})=>({...r,filteredTags:r.tags.filter(o=>o.toLowerCase().match(i.toLowerCase()))})),n.addCase(e.pending,r=>({...r,loading:!0,error:!1})),n.addCase(e.rejected,(r,{error:i})=>({...g_,error:!0,errorData:zr(i)})),n.addCase(e.fulfilled,(r,{payload:i})=>({...g_,stats:i.stats,tags:i.tags,filteredTags:i.tags})),n.addCase(_U,({tags:r,filteredTags:i,...o},{payload:a})=>({...o,tags:MR(r,a),filteredTags:MR(i,a)})),n.addCase(xU,({tags:r,filteredTags:i,stats:o,...a},{payload:s})=>({...a,stats:{...o,[s.newName]:o[s.oldName]},tags:r.map(NR(s.oldName,s.newName)).sort(),filteredTags:i.map(NR(s.oldName,s.newName)).sort()})),n.addCase(Xu,(r,{payload:i})=>({...r,stats:QRe(JRe(i.createdVisits),r.stats)})),n.addCase(t.fulfilled,({tags:r,...i},{payload:o})=>({...i,tags:r.concat(o.tags.filter(a=>!r.includes(a)))}))}}),n4e={tag:"Tag",shortUrls:"Short URLs",visits:"Visits"},OU=Bi(({filterTags:e,tagsList:t})=>{var n,r;const{TagsTable:i}=Rt(OU),o=qE(),[a,s]=R.useState(((n=o.tags)==null?void 0:n.defaultOrdering)??{}),l=R.useMemo(()=>{const f=t.filteredTags.map(d=>{var p,v,g;const y=t.stats[d],x=((p=o.visits)!=null&&p.excludeBots?(v=y==null?void 0:y.visitsSummary)==null?void 0:v.nonBots:(g=y==null?void 0:y.visitsSummary)==null?void 0:g.total)??(y==null?void 0:y.visitsCount)??0;return{tag:d,visits:x,shortUrls:(y==null?void 0:y.shortUrlsCount)??0}});return kD(f,a)},[a,(r=o.visits)==null?void 0:r.excludeBots,t.filteredTags,t.stats]),c=lP();return t.loading?m.jsx(Ho,{loading:!0}):t.error?m.jsx(er,{type:"error",children:m.jsx(mo,{errorData:t.errorData,fallbackMessage:"Error loading tags :("})}):m.jsxs(sP,{value:c,children:[m.jsx(cp,{className:"mb-3",onChange:e}),m.jsx(Kn,{className:"mb-3",children:m.jsx("div",{className:"col-lg-6 offset-lg-6",children:m.jsx(up,{items:n4e,order:a,onChange:(f,d)=>s({field:f,dir:d})})})}),m.jsx(cP,{type:"tags",className:"mb-3"}),m.jsx(i,{sortedTags:l,currentOrder:a,orderByColumn:f=>()=>{const d=u0(f,a.field,a.dir);s({field:d?f:void 0,dir:d})}})]})},()=>[nr.visits]),r4e=$t(OU,["TagsTable"]),OP=({pagesCount:e,currentPage:t,setCurrentPage:n,centered:r=!0})=>{if(e<2)return null;const i=o=>()=>!qh(o)&&n(o);return m.jsxs(kE,{listClassName:Ce("flex-wrap mb-0 simple-paginator",{"justify-content-center":r}),children:[m.jsx(Xs,{disabled:t<=1,children:m.jsx(Qs,{previous:!0,tag:"span",onClick:i(t-1)})}),lU(t,e).map((o,a)=>m.jsx(Xs,{disabled:qh(o),active:t===o,children:m.jsx(Qs,{role:"link",tag:"span",onClick:i(o),children:cU(o)})},uU(o,a))),m.jsx(Xs,{disabled:t>=e,children:m.jsx(Qs,{next:!0,tag:"span",onClick:i(t+1)})})]})},i4e=20,SU=({sortedTags:e,orderByColumn:t,currentOrder:n})=>{const{TagsTableRow:r}=Rt(SU),i=R.useRef(!0),{page:o=1}=Au(),[a,s]=gMe("page",Number(o)),l=jc(e,i4e),c=l.length>1,f=l[a-1]??[];return R.useEffect(()=>{!i.current&&s(1),i.current=!1},[s,e]),R.useEffect(()=>{scrollTo(0,0)},[a]),m.jsxs(xt,{bodyClassName:c?"pb-1":"",children:[m.jsxs("table",{className:"table table-hover responsive-table mb-0",children:[m.jsxs("thead",{className:"responsive-table__header",children:[m.jsxs("tr",{children:[m.jsxs("th",{className:"tags-table__header-cell",onClick:t("tag"),children:["Tag ",m.jsx(Cd,{currentOrder:n,field:"tag"})]}),m.jsxs("th",{className:"tags-table__header-cell text-lg-end",onClick:t("shortUrls"),children:["Short URLs ",m.jsx(Cd,{currentOrder:n,field:"shortUrls"})]}),m.jsxs("th",{className:"tags-table__header-cell text-lg-end",onClick:t("visits"),children:["Visits ",m.jsx(Cd,{currentOrder:n,field:"visits"})]}),m.jsx("th",{className:"tags-table__header-cell",children:m.jsx("span",{className:"sr-only",children:"Options"})})]}),m.jsx("tr",{children:m.jsx("th",{"aria-hidden":!0,colSpan:4,className:"p-0 border-top-0"})})]}),m.jsxs("tbody",{children:[f.length===0&&m.jsx("tr",{children:m.jsx("td",{colSpan:4,className:"text-center",children:"No tags found"})}),f.map(d=>m.jsx(r,{tag:d},d.tag))]})]}),c&&m.jsx("div",{className:"sticky-card-paginator",children:m.jsx(OP,{pagesCount:l.length,currentPage:a,setCurrentPage:s})})]},a)},o4e=$t(SU,["TagsTableRow"]),EU=({tag:e})=>{const{DeleteTagConfirmModal:t,EditTagModal:n,ColorGenerator:r}=Rt(EU),[i,o]=qt(),[a,s]=qt(),l=ds(),c=ab();return m.jsxs("tr",{className:"responsive-table__row",children:[m.jsxs("th",{className:"responsive-table__cell","data-th":"Tag",children:[m.jsx(vU,{tag:e.tag,colorGenerator:r})," ",e.tag]}),m.jsx("td",{className:"responsive-table__cell text-lg-end","data-th":"Short URLs",children:m.jsx(St,{to:`${l}/list-short-urls/1?tags=${encodeURIComponent(e.tag)}`,children:Gt(e.shortUrls)})}),m.jsx("td",{className:"responsive-table__cell text-lg-end","data-th":"Visits",children:m.jsx(St,{to:`${l}/tag/${e.tag}/visits`,children:Gt(e.visits)})}),m.jsx("td",{className:"responsive-table__cell text-lg-end",children:m.jsxs(c0,{children:[m.jsxs(Ne,{onClick:s,children:[m.jsx(je,{icon:H6,fixedWidth:!0,className:"me-1"})," Edit"]}),m.jsxs(Ne,{disabled:!c||!c.canAddItemWithName(e.tag),onClick:()=>c==null?void 0:c.addItemToCompare({name:e.tag,query:e.tag,style:r.stylesForKey(e.tag)}),children:[m.jsx(je,{icon:Jy,fixedWidth:!0})," Compare visits"]}),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsxs(Ne,{className:"dropdown-item--danger",onClick:o,children:[m.jsx(je,{icon:hK,fixedWidth:!0,className:"me-1"})," Delete tag"]})]})}),m.jsx(n,{tag:e.tag,toggle:s,isOpen:a}),m.jsx(t,{tag:e.tag,toggle:o,isOpen:i})]})},a4e=$t(EU,["DeleteTagConfirmModal","EditTagModal","ColorGenerator"]),s4e=(e,t)=>{e.factory("TagsSelector",GRe),e.serviceFactory("DeleteTagConfirmModal",()=>FRe),e.decorator("DeleteTagConfirmModal",t(["tagDelete"],["deleteTag","tagDeleted"])),e.factory("EditTagModal",BRe),e.decorator("EditTagModal",t(["tagEdit"],["editTag","tagEdited"])),e.factory("TagsTableRow",a4e),e.factory("TagsTable",o4e),e.factory("TagsList",r4e),e.decorator("TagsList",t(["tagsList","mercureInfo"],["filterTags","createNewVisits","loadMercureInfo"])),e.serviceFactory("tagEditReducerCreator",XRe,"editTag"),e.serviceFactory("tagEditReducer",n=>n.reducer,"tagEditReducerCreator"),e.serviceFactory("tagDeleteReducerCreator",KRe,"apiClientFactory"),e.serviceFactory("tagDeleteReducer",n=>n.reducer,"tagDeleteReducerCreator"),e.serviceFactory("tagsListReducerCreator",t4e,"listTags","createShortUrl"),e.serviceFactory("tagsListReducer",n=>n.reducer,"tagsListReducerCreator"),e.serviceFactory("listTags",e4e,"apiClientFactory"),e.serviceFactory("filterTags",()=>wU),e.serviceFactory("deleteTag",n=>n.deleteTag,"tagDeleteReducerCreator"),e.serviceFactory("tagDeleted",()=>_U),e.serviceFactory("editTag",ZRe,"apiClientFactory","ColorGenerator"),e.serviceFactory("tagEdited",()=>xU)},l4e=new x5,c4e=e=>l4e.parse(e),u4e=6,LR="0123456789ABCDEF",f4e=128,{floor:d4e,random:h4e,sqrt:p4e,round:m4e}=Math,v4e=()=>`#${mP(u4e,()=>LR[d4e(h4e()*LR.length)]).join("")}`,RR=e=>e.toLowerCase().trim(),g4e=e=>(e.match(/../g)??[]).map(t=>parseInt(t,16)||0),y4e=(e=0,t=0,n=0)=>m4e(p4e(.299*e**2+.587*t**2+.114*n**2));class b4e{constructor(t){za(this,"colors"),za(this,"lights");var n;this.storage=t,this.colors=((n=this.storage)==null?void 0:n.getTagColors())??{},this.lights={}}getColorForKey(t){const n=RR(t);return this.colors[n]||this.setColorForKey(n,v4e())}setColorForKey(t,n){var r;const i=RR(t);return this.colors[i]=n,(r=this.storage)==null||r.storeTagColors(this.colors),n}stylesForKey(t){const n=this.getColorForKey(t);return{backgroundColor:n,color:this.isLightColor(n)?"#222":"#fff"}}isLightColor(t){const n=t.substring(1);if(this.lights[n]===void 0){const r=g4e(n);this.lights[n]=y4e(...r)>=f4e}return this.lights[n]}}const CU=({document:e},t,n)=>{const r=e.createElement("a");r.setAttribute("href",t),r.setAttribute("download",n),r.style.visibility="hidden",e.body.appendChild(r),r.click(),e.body.removeChild(r)},_4e=(e,t,n)=>{const r=new Blob([t],{type:"text/csv;charset=utf-8;"}),i=URL.createObjectURL(r);CU(e,i,n)};class x4e{constructor(t,n){this.fetch=t,this.window=n}async saveImage(t,n){const r=await this.fetch(t).then(o=>o.blob()),i=URL.createObjectURL(r);CU(this.window,i,n)}}class w4e{constructor(t,n){za(this,"exportVisits",(r,i)=>{i.length&&this.exportCsv(r,i)}),za(this,"exportShortUrls",r=>{r.length&&this.exportCsv("short_urls.csv",r)}),za(this,"exportCsv",(r,i)=>{const o=this.jsonToCsv(i);_4e(this.window,o,r)}),this.window=t,this.jsonToCsv=n}}function O4e(e){e.constant("window",window),e.constant("fetch",window.fetch.bind(window)),e.service("ImageDownloader",x4e,"fetch","window"),e.service("ColorGenerator",b4e,"TagColorsStorage"),e.constant("jsonToCsv",c4e),e.service("ReportExporter",w4e,"window","jsonToCsv"),e.serviceFactory("useTimeoutToggle",()=>PD)}const Tp=({visits:e,shortUrl:t,children:n,title:r})=>m.jsx("header",{children:m.jsxs(vr,{body:!0,children:[m.jsxs("h2",{className:"d-flex justify-content-between align-items-center mb-0",children:[m.jsx(db,{}),m.jsx("span",{className:"text-center d-none d-sm-block",children:m.jsx("small",{children:r})}),m.jsxs("span",{className:"badge badge-main ms-3",children:["Visits:"," ",m.jsx(QB,{visitsCount:e.length,shortUrl:t})]})]}),m.jsx("h3",{className:"text-center d-block d-sm-none mb-0 mt-3",children:m.jsx("small",{children:r})}),n&&m.jsx("div",{className:"mt-md-2",children:n})]})}),PU=({title:e,footer:t,children:n})=>m.jsxs(vr,{role:"document",children:[m.jsx(Xc,{className:"chart-card__header",children:e}),m.jsx(Zc,{children:n}),t&&m.jsx(dD,{className:"chart-card__footer--sticky",children:t})]}),TU={color:"white",background:"rgb(0 0 0 / .9)",border:"none",borderRadius:"5px"},S4e={marginBottom:"5px",fontWeight:"bold"},jU={contentStyle:TU,labelStyle:S4e,itemStyle:{padding:0}},$R=["#97BBCD","#F7464A","#46BFBD","#FDB45C","#949FB1","#57A773","#414066","#08B2E3","#B6C454","#DCDCDC","#463730"],AU=e=>$R[e%$R.length],Ty="#46e587",E4e="rgba(70, 229, 135, 0.4)",C4e=({chartData:e,showNumbers:t})=>m.jsx("ul",{className:"doughnut-chart-legend",children:e.map(({name:n,color:r,value:i})=>m.jsxs("li",{className:"doughnut-chart-legend__item d-flex",children:[m.jsx("div",{className:"doughnut-chart-legend__item-color",style:{backgroundColor:r}}),m.jsxs("small",{className:"doughnut-chart-legend__item-text flex-fill",children:[n,t&&m.jsxs("b",{children:[" (",Gt(i),")"]})]})]},n))}),IR=e=>R.useMemo(()=>Object.entries(e).map(([t,n],r)=>({name:t,value:n,color:AU(r)})),[e]),P4e=({stats:e,prevStats:t,showNumbersInLegend:n,dimensions:r})=>{const i=IR(e),o=IR(t),a=o.length>0,s=LE()?Yre:Kre;return m.jsxs("div",{className:"row align-items-center",children:[m.jsx("div",{className:"col-sm-12 col-md-7",children:m.jsx("div",{style:r??{width:"100%",height:300},children:m.jsx(r?R.Fragment:xC,{children:m.jsxs(hNe,{...r,children:[m.jsx(Xr,{formatter:Gt,contentStyle:TU,itemStyle:{color:"white"}}),m.jsx(po,{data:i,dataKey:"value",nameKey:"name",startAngle:360,endAngle:0,outerRadius:"100%",innerRadius:a?"65%":"50%",animationBegin:0,children:i.map((l,c)=>m.jsx(Fa,{fill:l.color,stroke:s},`${l.name}-${c}`))}),a&&m.jsx(po,{data:o,dataKey:"value",nameKey:"name",startAngle:360,endAngle:0,outerRadius:"55%",innerRadius:"20%",animationBegin:0,stroke:s,fill:Ty})]})})})}),m.jsx("div",{className:"col-sm-12 col-md-5",children:m.jsx(C4e,{chartData:i,showNumbers:n})})]})},DR=({title:e,...t})=>{const[n,r]=qt(!1);return m.jsx(PU,{title:m.jsxs(m.Fragment,{children:[e,m.jsx("div",{className:"float-end",children:m.jsx(ul,{checked:n,onChange:r,children:"Show numbers"})})]}),children:m.jsx(P4e,{...t,showNumbersInLegend:n})})},T4e=({visitsGroups:e})=>{const t=R.useMemo(()=>Object.entries(e),[e]);return t.length===0?null:m.jsx("ul",{className:"list-unstyled mb-0 mt-2 d-flex flex-wrap justify-content-center gap-3",children:t.map(([n,r],i)=>m.jsxs("li",{className:"d-inline",children:[m.jsx(mU,{color:kU(r)}),m.jsxs("strong",{children:[n," (",Gt(r.length),")"]})]},`${n}${i}`))})},j4e={monthly:"Month",weekly:"Week",daily:"Day",hourly:"Hour"},A4e={hourly:e=>({hours:e}),daily:e=>({days:e}),weekly:e=>({weeks:e}),monthly:e=>({months:e})},k4e={hourly:Ooe,daily:fp,weekly:Poe,monthly:xg},SP={hourly:e=>wg(e,"yyyy-MM-dd HH:00"),daily:e=>ja(e),weekly(e){const t=ja(ah(e)),n=ja(Aoe(e));return`${t} - ${n}`},monthly:e=>wg(e,"yyyy-MM")},N4e=e=>{var t;const n=Object.values(e).filter(a=>a.length>0);if(n.length===0)return"monthly";const r=new Date,i=n.map(a=>Ya(a[a.length-1].date)),o=r5(i);return((t=[[()=>fp(r,o)<=2,"hourly"],[()=>xg(r,o)<=1,"daily"],[()=>xg(r,o)<=6,"weekly"]].find(([a])=>a()))==null?void 0:t[1])??"monthly"},M4e=(e,t)=>Object.keys(t).reduce((n,r)=>(n[r]=XD(t[r],i=>SP[e](Ya(i.date))),n),{}),L4e=(e,t)=>t.reduce((n,r)=>{const i=SP[e](Ya(r.date));return n[i]=n[i]??[],n[i].push(r),n},{}),R4e=(e,t)=>{const n=Object.values(t).filter(d=>d.length>0).map(d=>[...d].reverse());if(n.length===0)return[];const r=k4e[e],i=SP[e],o=A4e[e],a=n.map(d=>Ya(d[0].date)),s=n.map(d=>Ya(d[d.length-1].date)),l=r5(s),c=boe(a),f=r(l,c)+1;return[i(c),...mP(f,d=>i(moe(c,o(d))))]},kU=e=>{if(e.color)return e.color;const t={main:th,highlighted:Qw,previous:Ty};return e.type?t[e.type]:th},FR=(e,t)=>R.useMemo(()=>Object.values(e).find(n=>n.type===t)??[],[e,t]),$4e=(e,t,n)=>{const r=FR(e,"main"),i=FR(e,"highlighted"),o=R.useMemo(()=>n?L4e(t,r):{},[n,t,r]),a=R.useCallback((s,{payload:l})=>{const c=o[l.date]??[];n==null||n(c===i?[]:c)},[o,i,n]);return n&&{cursor:"pointer",onClick:a}},NU=({visitsGroups:e,setSelectedVisits:t,dimensions:n,matchMedia:r})=>{const[i,o]=R.useState(N4e(e)),a=gP(767,r??window.matchMedia),s=R.useMemo(()=>{const d=M4e(i,e),p=Object.keys(d);return R4e(i,e).map(v=>({date:v,...p.reduce((g,y)=>(g[y]=d[y][v]??0,g),{})}))},[i,e]),l=$4e(e,i,t),c=n?R.Fragment:xC,f=R.useMemo(()=>n?{}:{width:"100%",height:a?300:400},[n,a]);return m.jsxs(vr,{children:[m.jsxs(Xc,{role:"heading","aria-level":4,children:["Visits over time",m.jsx("div",{className:"float-end",children:m.jsxs(lp,{children:[m.jsx(ju,{caret:!0,color:"link",className:"btn-sm p-0",children:"Group by"}),m.jsx(Tu,{end:!0,children:Object.entries(j4e).map(([d,p])=>m.jsx(Ne,{active:i===d,onClick:()=>o(d),children:p},d))})]})})]}),m.jsxs(Zc,{children:[m.jsx(c,{...f,children:m.jsxs(dNe,{data:s,...n,children:[m.jsx(Yu,{dataKey:"date"}),m.jsx(Zu,{tickFormatter:Gt}),m.jsx(Xr,{formatter:Gt,...jU}),m.jsx(nP,{strokeOpacity:LE()?.1:.9}),Object.entries(e).map(([d,p])=>p.length>0&&m.jsx(Ku,{dataKey:d,type:"monotone",stroke:kU(p),strokeWidth:2,activeDot:p.type==="previous"?void 0:l,strokeDasharray:p.type==="previous"?"8 3":void 0},d))]})}),m.jsx(T4e,{visitsGroups:e})]})]})},I4e=({toggleClassName:e,ranges:t,value:n,setValue:r})=>m.jsxs(lp,{children:[m.jsx(ju,{caret:!0,color:"link",className:e,children:"Paginate"}),m.jsxs(Tu,{end:!0,children:[t.map(i=>m.jsxs(Ne,{active:i===n,onClick:()=>r(i),children:[m.jsx("b",{children:i})," items per page"]},i)),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsx(Ne,{disabled:n===1/0,onClick:()=>r(1/0),children:m.jsx("i",{children:"Clear pagination"})})]})]}),BR=e=>e.startsWith("hidden_"),D4e=({stats:e,prevStats:t,highlightedStats:n,highlightedLabel:r,max:i,onClick:o,dimensions:a})=>{const s=R.useMemo(()=>Object.entries(e).map(([d,p])=>{const v=(n==null?void 0:n[d])??0,g=(t==null?void 0:t[d])??0,y=BR(d);return{name:d,amount:Math.max(p,g),nonHighlightedAmount:y?null:p-v,highlightedAmount:y?null:v,prevAmount:y?null:g}}),[e,t,n]),l=R.useMemo(()=>{const d=s.reduce((p,{name:v})=>p>v.length?p:v.length,0);return Math.min(150,d*7)},[s]),c=a?R.Fragment:xC,f=R.useMemo(()=>a?{}:{width:"100%",height:Math.max(300,s.length*(t?44:22))},[a,s.length,t]);return m.jsx(c,{...f,children:m.jsxs(pNe,{layout:"vertical",data:s,barCategoryGap:3,...a,children:[m.jsx(Yu,{type:"number",dataKey:"amount",tickFormatter:Gt,domain:i?[0,i]:void 0}),m.jsx(Zu,{type:"category",dataKey:"name",width:l,interval:0,style:{fontSize:".8rem"},tickFormatter:d=>BR(d)?"":d}),m.jsx(nP,{strokeOpacity:LE()?.05:.9}),m.jsx(Xr,{filterNull:!0,...jU,formatter:(d,p)=>[Gt(d),p==="highlightedAmount"?r:p==="prevAmount"?"Previous period":n?"Non-selected":"Visits"]}),m.jsx(Io,{dataKey:"nonHighlightedAmount",stackId:"main",cursor:"pointer",fill:th,onClick:({name:d})=>o==null?void 0:o(d),children:s.map(d=>m.jsx(Fa,{fill:Gre,stroke:th,strokeWidth:2},d.name))}),n&&m.jsx(Io,{dataKey:"highlightedAmount",stackId:"main",cursor:"pointer",fill:Qw,onClick:({name:d})=>o==null?void 0:o(d),children:s.map(d=>m.jsx(Fa,{fill:qre,stroke:Qw,strokeWidth:2},d.name))}),t&&m.jsx(Io,{dataKey:"prevAmount",fill:Ty,children:s.map(d=>m.jsx(Fa,{fill:E4e,stroke:Ty,strokeWidth:2},d.name))})]})})},F4e=e=>typeof e=="string"?e.toLowerCase():e,B4e=([e])=>e,U4e=([,e])=>e,Bm=({stats:e,prevStats:t,highlightedStats:n,title:r,sortingItems:i,extraHeaderContent:o,withPagination:a=!0,...s})=>{const[l,c]=R.useState({}),[f,d]=R.useState(1),[p,v]=R.useState(50),g=R.useCallback((A,D)=>{const N=Object.entries(A),I=l.field?hoe(N,([F,K])=>F4e(l.field===Object.keys(D)[0]?F:K)):N;return!l.dir||l.dir==="ASC"?I:[...I].reverse()},[l.dir,l.field]),y=R.useCallback(A=>{const D=A[f-1];if(f[`hidden_${I}`,0])]},[f]),x=R.useCallback(A=>m.jsx(OP,{currentPage:f,pagesCount:A,setCurrentPage:d}),[f]),_=R.useCallback((A,D,N,I)=>{const F=g(A,D),K=F.map(B4e),W=N&&Object.entries({...Lk(K,K.map(()=>0)),...N}),X=I&&Object.entries({...Lk(K,K.map(()=>0)),...I});if(F.length<=p)return{currentPageStats:Object.fromEntries(F),currentPageHighlightedStats:W&&Object.fromEntries(W),currentPagePrevStats:X&&Object.fromEntries(X)};const Q=jc(F,p),ne=W&&jc(W,p),Z=X&&jc(X,p);return{currentPageStats:Object.fromEntries(y(Q)),currentPageHighlightedStats:ne&&Object.fromEntries(y(ne)),currentPagePrevStats:Z&&Object.fromEntries(y(Z)),pagination:x(Q.length),max:DMe(Math.max(...F.map(U4e)))}},[y,g,p,x]),{currentPageStats:b,currentPagePrevStats:w,currentPageHighlightedStats:S,pagination:E,max:C}=R.useMemo(()=>_(e,i,n&&Object.keys(n).length>0?n:void 0,t&&Object.keys(t).length>0?t:void 0),[_,n,t,i,e]),T=R.useMemo(()=>Object.keys(b),[b]);return m.jsx(PU,{title:m.jsxs(m.Fragment,{children:[r,m.jsx("div",{className:"float-end",children:m.jsx(up,{isButton:!1,right:!0,items:i,order:l,onChange:(A,D)=>{c({field:A,dir:D}),d(1)}})}),a&&Object.keys(e).length>50&&m.jsx("div",{className:"float-end",children:m.jsx(I4e,{toggleClassName:"btn-sm p-0 me-3",ranges:[50,100,200,500],value:p,setValue:A=>{v(A),d(1)}})}),o&&m.jsx("div",{className:"float-end",children:o(E?T:void 0)})]}),footer:E,children:m.jsx(D4e,{stats:b,prevStats:w,highlightedStats:S,max:C,...s})})},UR=(e,t)=>{if(!(!t||!(e in t)))return t[e]&&Ja(t[e])||""},MU=()=>{const e=vo(),t=Au(),{startDate:n,endDate:r,orphanVisitsType:i,excludeBots:o,loadPrevInterval:a,...s}=t,l=R.useMemo(()=>({dateRange:n!=null||r!=null?fB(n,r):void 0,visitsFilter:{orphanVisitsType:i,excludeBots:o!==void 0?o==="true":void 0},loadPrevInterval:a!==void 0?a==="true":void 0}),[r,o,a,i,n]),c=R.useCallback(f=>{const{dateRange:d,visitsFilter:p={},loadPrevInterval:v}=m0(l,f),{excludeBots:g,orphanVisitsType:y}=p,x={...s,startDate:UR("startDate",d),endDate:UR("endDate",d),excludeBots:g===void 0?void 0:UO(g),orphanVisitsType:y,loadPrevInterval:v===void 0?void 0:UO(v)},_=l0(x),b=_?`?${_}`:"";e(b,{replace:!0,relative:"route"})},[l,e,s]);return[l,c]},z4e=()=>m.jsx(kNe,{attribution:'© OpenStreetMap contributors',url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"}),V4e=e=>{if(e.length===0)return{};if(e.length>1)return{bounds:e.map(({latLong:n})=>n)};const[{latLong:t}]=e;return{zoom:10,center:t}},LU=({toggle:e,isOpen:t,title:n,locations:r=[]})=>m.jsx(go,{toggle:e,isOpen:t,className:"map-modal__modal",contentClassName:"map-modal__modal-content",children:m.jsxs($i,{className:"map-modal__modal-body",children:[m.jsxs("h3",{className:"map-modal__modal-title",children:[n,m.jsx("button",{type:"button",className:"btn-close float-end","aria-label":"Close",onClick:e})]}),m.jsxs(TNe,{...V4e(r),children:[m.jsx(z4e,{}),r.map(({cityName:i,latLong:o,count:a},s)=>m.jsx(jNe,{position:o,children:m.jsxs(ANe,{children:[m.jsx("b",{children:a})," visit",a>1?"s":""," from ",m.jsx("b",{children:i})]})},s))]})]})}),W4e=({modalTitle:e,activeCities:t,locations:n=[]})=>{const[r,,i,o]=qt(),[a,s]=qt(),[l,c]=R.useState([]),f=ME(),d=R.useCallback(p=>{c(p?n.filter(p):n),i()},[n,i]);return m.jsxs(m.Fragment,{children:[!t&&m.jsx(Ke,{color:"link",className:"open-map-modal-btn__btn",id:f,onClick:()=>d(),"aria-label":"Show in map",children:m.jsx(je,{icon:gx})}),t&&m.jsxs(op,{isOpen:a,toggle:s,children:[m.jsx(ju,{color:"link",className:"open-map-modal-btn__btn",id:f,children:m.jsx(je,{icon:gx})}),m.jsxs(Tu,{end:!0,children:[m.jsx(Ne,{onClick:()=>d(),children:"Show all locations"}),m.jsx(Ne,{onClick:()=>d(({cityName:p})=>t.includes(p)),children:"Show locations in current page"})]})]}),m.jsx(br,{placement:"left",target:f,children:"Show in map"}),m.jsx(LU,{toggle:o,isOpen:r,title:e,locations:l})]})},RU=({onChange:e,selected:t={},className:n,isOrphanVisits:r=!1,withPrevInterval:i=!1,disabled:o})=>{const{orphanVisitsType:a,excludeBots:s=!1,loadPrevInterval:l=!1}=t,c=p=>({active:a===p,onClick:()=>e({...t,orphanVisitsType:p===a?void 0:p})}),f=R.useCallback(()=>e({...t,excludeBots:!s}),[s,e,t]),d=R.useCallback(()=>e({...t,loadPrevInterval:!l}),[l,e,t]);return m.jsxs(ta,{disabled:o,text:"More",dropdownClassName:n,end:!0,minWidth:250,children:[i&&m.jsxs(m.Fragment,{children:[m.jsx(Ne,{active:l,onClick:d,children:"Compare with previous period"}),m.jsx(Ne,{divider:!0,tag:"hr"})]}),m.jsx(Ne,{header:!0,"aria-hidden":!0,children:"Bots:"}),m.jsx(Ne,{active:s,onClick:f,children:"Exclude potential bots"}),r&&m.jsxs(m.Fragment,{children:[m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsx(Ne,{header:!0,"aria-hidden":!0,children:"Orphan visits type:"}),m.jsx(Ne,{...c("base_url"),children:"Base URL"}),m.jsx(Ne,{...c("invalid_short_url"),children:"Invalid short URL"}),m.jsx(Ne,{...c("regular_404"),children:"Regular 404"})]}),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsx(Ne,{disabled:t.excludeBots===void 0&&t.loadPrevInterval===void 0&&t.orphanVisitsType===void 0,onClick:()=>e({excludeBots:void 0,loadPrevInterval:void 0,orphanVisitsType:void 0}),children:m.jsx("i",{children:"Reset to defaults"})})]})},$U=({info:e})=>{const{loading:t,errorData:n,progress:r}=e;return m.jsxs(m.Fragment,{children:[t&&r===null&&m.jsx(Ho,{loading:!0}),t&&r!==null&&m.jsxs(Ho,{loading:!0,children:["This is going to take a while... :S",m.jsx(gD,{value:r,striped:r>=100,className:"mt-3"})]}),n&&m.jsx(er,{type:"error",children:m.jsx(mo,{errorData:n,fallbackMessage:"An error occurred while loading visits :("})})]})},hv=({children:e,showFallback:t})=>m.jsxs(m.Fragment,{children:[t&&m.jsx(Ho,{className:"mt-3",children:"There are no visits matching current filter"}),!t&&m.jsx(m.Fragment,{children:e})]}),H4e=({visitsDeletion:e,deleteVisits:t})=>{const{deleting:n}=e,[r,,i]=qt();return m.jsx(xt,{title:m.jsx("span",{className:"text-danger fw-bold",children:"Danger zone"}),children:m.jsxs("div",{className:"d-flex justify-content-between align-items-center",children:[m.jsxs("dl",{className:"m-0 me-3",children:[m.jsx("dt",{children:"Delete visits."}),m.jsxs("dd",{className:"m-0",children:["This will delete ",m.jsx("b",{children:"all"})," visits, not only the ones matching current filter."]})]}),!r&&m.jsx(Ke,{color:"danger",className:"indivisible",onClick:i,children:"Delete visits"}),r&&m.jsxs(Ke,{color:"danger",disabled:n,className:"indivisible",onClick:t,innerRef:o=>{o==null||o.focus()},children:[!n&&m.jsx(m.Fragment,{children:"Click again to confirm"}),n&&m.jsx(m.Fragment,{children:"Deleting..."})]})]})})},Um="Others",G4e=["Android Browser","Chrome","Chromium","Firefox","Internet Explorer","Microsoft Edge","Opera","Safari","Samsung Internet for Android","Vivaldi","WeChat"],q4e=e=>{if(!$s(e))return{browser:Um,os:Um};const{browser:{name:t},os:{name:n}}=INe.parse(e);return{os:n??Um,browser:t&&G4e.includes(t)?t:Um}},K4e=e=>{var t;return $s(e)?((t=e.split("/")[e.includes("://")?2:0])==null?void 0:t.split(":")[0])??"":"Direct"},IU=(e,t)=>e[t]!==void 0,zR=e=>typeof e=="number"?e:e?parseFloat(e):0,Y4e=(e,{os:t})=>{e[t]=(e[t]||0)+1},Z4e=(e,{browser:t})=>{e[t]=(e[t]||0)+1},X4e=(e,{referer:t})=>{e[t]=(e[t]||0)+1},DU=e=>(t,n)=>{const r=IU(n,e)?n[e]:"Unknown";t[r]=(t[r]||0)+1},Q4e=DU("country"),J4e=DU("city"),e$e=(e,t)=>{if(!IU(t,"city")||t.city==="Unknown")return;const{city:n,latitude:r,longitude:i}=t,o=e[n]||{cityName:n,count:0,latLong:[zR(r),zR(i)]};o.count+=1,e[n]=o},t$e=(e,t)=>{if(!tMe(t))return;const{visitedUrl:n}=t;e[n]=(e[n]||0)+1},qO=e=>e.reduce((t,n)=>(Y4e(t.os,n),Z4e(t.browsers,n),X4e(t.referrers,n),Q4e(t.countries,n),J4e(t.cities,n),e$e(t.citiesForMap,n),t$e(t.visitedUrls,n),t),{os:{},browsers:{},referrers:{},countries:{},cities:{},citiesForMap:{},visitedUrls:{}}),jy=e=>e.map(t=>{const{userAgent:n,date:r,referer:i,visitLocation:o,potentialBot:a}=t;return{date:r,potentialBot:a,...q4e(n),referer:K4e(i),country:(o==null?void 0:o.countryName)||"Unknown",city:(o==null?void 0:o.cityName)||"Unknown",latitude:o==null?void 0:o.latitude,longitude:o==null?void 0:o.longitude,visitedUrl:t.visitedUrl,type:pP(t)?t.type:void 0}}),n$e=Object.freeze(Object.defineProperty({__proto__:null,normalizeVisits:jy,processStatsFromVisits:qO},Symbol.toStringTag,{value:"Module"})),Qf=20,r$e=({browser:e,os:t,referer:n,country:r,city:i,...o},a)=>`${e} ${t} ${n} ${r} ${i} ${o.visitedUrl}`.toLowerCase().includes(a.toLowerCase()),i$e=(e,t)=>t.filter(n=>r$e(n,e)),o$e=(e,t)=>kD(t,e),a$e=(e,t,n)=>{const r=t?i$e(t,e):[...e],i=o$e(n,r),o=i.length;return{visitsGroups:jc(i,Qf),total:o}},Eo="visits-table__header-cell visits-table__sticky",s$e=({visits:e,selectedVisits:t=[],setSelectedVisits:n,matchMedia:r=window.matchMedia})=>{var i;const o=gP(767,r),[a,s]=R.useState(void 0),l=R.useRef(a),[c,f]=R.useState({}),d=R.useMemo(()=>a$e(e,a,c),[e,a,c]),[p,v]=R.useState(1),g=p*Qf,y=g-Qf,x=R.useMemo(()=>{var S,E;return!!((E=(S=d.visitsGroups[p-1])==null?void 0:S[0])!=null&&E.visitedUrl)},[p,d.visitsGroups]),_=8+Number(x),b=S=>()=>f({field:S,dir:u0(S,c.field,c.dir)}),w=S=>m.jsx(Cd,{currentOrder:c,field:S,className:"visits-table__header-icon"});return R.useEffect(()=>{l.current!==a&&(v(1),n([])),l.current=a},[a,n]),m.jsx("div",{className:"table-responsive-md",children:m.jsxs("table",{className:"table table-bordered table-hover table-sm visits-table",children:[m.jsxs("thead",{className:"visits-table__header",children:[m.jsxs("tr",{children:[m.jsxs("th",{className:`${Eo} text-center`,onClick:()=>n(t.length0})})]}),m.jsxs("th",{className:`${Eo} text-center`,onClick:b("potentialBot"),children:[m.jsx("span",{className:"sr-only",children:"Is bot"}),m.jsx(je,{icon:nA}),w("potentialBot")]}),m.jsxs("th",{className:Eo,onClick:b("date"),children:["Date",w("date")]}),m.jsxs("th",{className:Eo,onClick:b("country"),children:["Country",w("country")]}),m.jsxs("th",{className:Eo,onClick:b("city"),children:["City",w("city")]}),m.jsxs("th",{className:Eo,onClick:b("browser"),children:["Browser",w("browser")]}),m.jsxs("th",{className:Eo,onClick:b("os"),children:["OS",w("os")]}),m.jsxs("th",{className:Eo,onClick:b("referer"),children:["Referrer",w("referer")]}),x&&m.jsxs("th",{className:Eo,onClick:b("visitedUrl"),children:["Visited URL",w("visitedUrl")]})]}),m.jsx("tr",{children:m.jsx("td",{colSpan:_,className:"p-0",children:m.jsx(cp,{noBorder:!0,large:!1,onChange:s})})})]}),m.jsxs("tbody",{children:[d.total===0&&m.jsx("tr",{children:m.jsx("td",{colSpan:_,className:"text-center",children:"There are no visits matching current filter"})}),(i=d.visitsGroups[p-1])==null?void 0:i.map((S,E)=>{const C=t.includes(S);return m.jsxs("tr",{style:{cursor:"pointer"},className:Ce({"table-active":C}),onClick:()=>n(C?t.filter(T=>T!==S):[...t,S]),children:[m.jsx("td",{className:"text-center",children:C&&m.jsx(je,{icon:Gd,className:"text-primary"})}),m.jsx("td",{className:"text-center",children:S.potentialBot&&m.jsxs(m.Fragment,{children:[m.jsx(je,{icon:nA,id:`botIcon${E}`}),m.jsx(br,{placement:"right",target:`botIcon${E}`,children:"Potentially a visit from a bot or crawler"})]})}),m.jsx("td",{children:m.jsx(Cy,{date:S.date})}),m.jsx("td",{children:S.country}),m.jsx("td",{children:S.city}),m.jsx("td",{children:S.browser}),m.jsx("td",{children:S.os}),m.jsx("td",{children:S.referer}),S.visitedUrl&&m.jsx("td",{children:S.visitedUrl})]},E)})]}),d.total>Qf&&m.jsx("tfoot",{children:m.jsx("tr",{children:m.jsx("td",{colSpan:_,className:"visits-table__footer-cell visits-table__sticky",children:m.jsxs("div",{className:"row",children:[m.jsx("div",{className:"col-md-6",children:m.jsx(OP,{pagesCount:Math.ceil(d.total/Qf),currentPage:p,setCurrentPage:v,centered:o})}),m.jsx("div",{className:Ce("col-md-6",{"d-flex align-items-center flex-row-reverse":!o,"text-center mt-3":o}),children:m.jsxs("div",{children:["Visits ",m.jsx("b",{children:Gt(y+1)})," to"," ",m.jsx("b",{children:Gt(Math.min(g,d.total))})," of"," ",m.jsx("b",{children:Gt(d.total)})]})})]})})})})]})})},ma={byTime:{title:"By time",subPath:"by-time",icon:Yq},byContext:{title:"By context",subPath:"by-context",icon:tE},byLocation:{title:"By location",subPath:"by-location",icon:gx},list:{title:"List",subPath:"list",icon:q6},options:{title:"Options",subPath:"options",icon:Z6,shouldRender:({deletion:e})=>!!e}};Object.freeze(ma);const y_=({display:e})=>e&&m.jsx("div",{className:"mt-3 mx-auto w-75",children:m.jsx(xt,{children:m.jsxs("div",{className:"d-flex gap-2",children:[m.jsx(je,{icon:KK,className:"mt-1"}),m.jsx("i",{children:"Could not calculate previous period because selected one does not have a strictly defined start date."})]})})});let zm;const jp=e=>{const{children:t,visitsInfo:n,getVisits:r,cancelGetVisits:i,deletion:o,exportCsv:a,isOrphanVisits:s=!1}=e,{visits:l,prevVisits:c,loading:f,errorData:d,fallbackInterval:p}=n,[{dateRange:v,visitsFilter:g,loadPrevInterval:y},x]=MU(),_=_r("visits"),[b,w]=R.useState(),S=R.useCallback(({startDate:j,endDate:k},U)=>{x({dateRange:{startDate:j??void 0,endDate:k??void 0}}),w(U)},[x]),E=R.useRef(v??p??(_==null?void 0:_.defaultInterval)??"last30Days"),[C,T]=R.useState([]),[A,D]=R.useState(),N=R.useRef(!0),{search:I}=gr(),F=R.useCallback(j=>j?`${j}${I}`:I,[I]),K=R.useMemo(()=>jy(l),[l]),W=R.useMemo(()=>c&&jy(c),[c]),{os:X,browsers:Q,referrers:ne,countries:Z,cities:z,citiesForMap:B,visitedUrls:H}=R.useMemo(()=>qO(K),[K]),ee=R.useMemo(()=>qO(W??[]),[W]),q=R.useMemo(()=>Object.fromEntries([["Visits",Object.assign(K,{type:"main"})],W&&["Previous period",Object.assign(W,{type:"previous"})],C.length>0&&[A??"Selected",Object.assign(C,{type:"highlighted"})]].filter(Boolean)),[A,C,W,K]),te=R.useMemo(()=>({...g,excludeBots:g.excludeBots??(_==null?void 0:_.excludeBots),loadPrevInterval:y??(_==null?void 0:_.loadPrevInterval)}),[y,g,_==null?void 0:_.excludeBots,_==null?void 0:_.loadPrevInterval]),ie=R.useMemo(()=>Object.values(B),[B]),ae=R.useCallback(j=>{zm=void 0,T(j)},[]),fe=R.useCallback((j,k)=>{const U=`${j}_${k}`;zm===U?(T([]),D(void 0),zm=void 0):(T(K.filter(J=>J[j]===k)),D(k),zm=U)},[K]);return R.useEffect(()=>i,[i]),R.useEffect(()=>{const j=v??pB(E.current),{loadPrevInterval:k,...U}=te,J={doIntervalFallback:N.current,loadPrevInterval:k};r({dateRange:j,filter:U},J),ae([]),N.current=!1},[v,g,r,te,ae]),R.useEffect(()=>{p&&E.current===((_==null?void 0:_.defaultInterval)??"last30Days")&&(E.current=p)},[p,_==null?void 0:_.defaultInterval]),m.jsxs(m.Fragment,{children:[t,m.jsx("section",{className:"mt-3",children:m.jsxs("div",{className:"row flex-md-row-reverse",children:[m.jsx("div",{className:"col-lg-7 col-xl-6",children:m.jsxs("div",{className:"d-md-flex",children:[m.jsx("div",{className:"flex-grow-1",children:m.jsx(_P,{disabled:f,dateRangeOrInterval:b??v??E.current,defaultText:"All visits",onDatesChange:S})}),m.jsx(RU,{disabled:f,className:"ms-0 ms-md-2 mt-3 mt-md-0",isOrphanVisits:s,withPrevInterval:!0,selected:te,onChange:({loadPrevInterval:j,...k})=>x({visitsFilter:k,loadPrevInterval:j})})]})}),l.length>0&&m.jsx("div",{className:"col-lg-5 col-xl-6 mt-3 mt-lg-0",children:m.jsxs("div",{className:"d-flex",children:[m.jsx(KB,{className:"btn-md-block",amount:K.length,onClick:()=>a(K)}),m.jsxs(Ke,{outline:!0,disabled:C.length===0,className:"btn-md-block ms-2",onClick:()=>ae([]),children:["Clear selection ",C.length>0&&m.jsxs(m.Fragment,{children:["(",Gt(C.length),")"]})]})]})})]})}),m.jsxs("section",{className:"mt-3",children:[m.jsx($U,{info:n}),!f&&!d&&m.jsxs(m.Fragment,{children:[m.jsx(AD,{fill:!0,children:Object.values(ma).map(({title:j,icon:k,subPath:U,shouldRender:J},Y)=>!J||J(e)?m.jsxs(pd,{to:F(U),replace:!0,children:[m.jsx(je,{icon:k}),m.jsx("span",{className:"ms-2 d-none d-lg-inline",children:j})]},Y):void 0).filter(Boolean)}),m.jsx(Kn,{children:m.jsxs(Xy,{children:[m.jsx(ot,{path:ma.byTime.subPath,element:m.jsxs(hv,{showFallback:l.length===0,children:[m.jsx("div",{className:"col-12 mt-3","data-testid":"line-chart-container",children:m.jsx(NU,{visitsGroups:q,setSelectedVisits:ae})}),m.jsx(y_,{display:!!te.loadPrevInterval&&!c})]})}),m.jsx(ot,{path:ma.byContext.subPath,element:m.jsxs(hv,{showFallback:l.length===0,children:[m.jsx("div",{className:Ce("mt-3 col-lg-6",{"col-xl-4":!s}),children:m.jsx(DR,{title:"Operating systems",stats:X,prevStats:ee.os})}),m.jsx("div",{className:Ce("mt-3 col-lg-6",{"col-xl-4":!s}),children:m.jsx(DR,{title:"Browsers",stats:Q,prevStats:ee.browsers})}),m.jsx("div",{className:Ce("mt-3",{"col-xl-4":!s,"col-lg-6":s}),children:m.jsx(Bm,{title:"Referrers",withPagination:!1,stats:ne,prevStats:ee.referrers,highlightedStats:$m(C,"referer"),highlightedLabel:A,sortingItems:{name:"Referrer name",amount:"Visits amount"},onClick:j=>fe("referer",j)})}),s&&m.jsx("div",{className:"mt-3 col-lg-6",children:m.jsx(Bm,{title:"Visited URLs",stats:H,prevStats:ee.visitedUrls,highlightedStats:$m(C,"visitedUrl"),highlightedLabel:A,sortingItems:{visitedUrl:"Visited URL",amount:"Visits amount"},onClick:j=>fe("visitedUrl",j)})}),m.jsx("div",{className:"col-12",children:m.jsx(y_,{display:!!te.loadPrevInterval&&!c})})]})}),m.jsx(ot,{path:ma.byLocation.subPath,element:m.jsxs(hv,{showFallback:l.length===0,children:[m.jsx("div",{className:"col-lg-6 mt-3",children:m.jsx(Bm,{title:"Countries",stats:Z,prevStats:ee.countries,highlightedStats:$m(C,"country"),highlightedLabel:A,sortingItems:{name:"Country name",amount:"Visits amount"},onClick:j=>fe("country",j)})}),m.jsx("div",{className:"col-lg-6 mt-3",children:m.jsx(Bm,{title:"Cities",stats:z,prevStats:ee.cities,highlightedStats:$m(C,"city"),highlightedLabel:A,extraHeaderContent:j=>ie.length>0&&m.jsx(W4e,{modalTitle:"Cities",locations:ie,activeCities:j}),sortingItems:{name:"City name",amount:"Visits amount"},onClick:j=>fe("city",j)})}),m.jsx("div",{className:"col-12",children:m.jsx(y_,{display:!!te.loadPrevInterval&&!c})})]})}),m.jsx(ot,{path:ma.list.subPath,element:m.jsx("div",{className:"col-12",children:m.jsx(s$e,{visits:K,selectedVisits:C,setSelectedVisits:ae})})}),o&&m.jsx(ot,{path:ma.options.subPath,element:m.jsx("div",{className:"col-12 mt-3",children:m.jsx(H4e,{...o})})}),m.jsx(ot,{path:"*",element:m.jsx(qS,{replace:!0,to:F(ma.byTime.subPath)})})]})})]})]})]})},FU=Bi(({getDomainVisits:e,domainVisits:t,cancelGetDomainVisits:n})=>{const{ReportExporter:r}=Rt(FU),{domain:i=""}=Cu(),[o,a=o]=i.split("_"),s=R.useCallback((c,f)=>e({domain:a,options:f,params:c}),[a,e]),l=R.useCallback(c=>r.exportVisits(`domain_${o}_visits.csv`,c),[o,r]);return m.jsx(jp,{getVisits:s,cancelGetVisits:n,visitsInfo:t,exportCsv:l,children:m.jsx(Tp,{visits:t.visits,title:`"${o}" visits`})})},()=>[nr.visits]),l$e=$t(FU,["ReportExporter"]),BU=Bi(({getNonOrphanVisits:e,nonOrphanVisits:t,cancelGetNonOrphanVisits:n})=>{const{ReportExporter:r}=Rt(BU),i=R.useCallback(a=>r.exportVisits("non_orphan_visits.csv",a),[r]),o=R.useCallback((a,s)=>e({options:s,params:a}),[e]);return m.jsx(jp,{getVisits:o,cancelGetVisits:n,visitsInfo:t,exportCsv:i,children:m.jsx(Tp,{title:"Non-orphan visits",visits:t.visits})})},()=>[nr.visits]),c$e=$t(BU,["ReportExporter"]),UU=Bi(({getOrphanVisits:e,orphanVisits:t,cancelGetOrphanVisits:n,deleteOrphanVisits:r,orphanVisitsDeletion:i})=>{const o=es("orphanVisitsDeletion"),{ReportExporter:a}=Rt(UU),s=R.useCallback(f=>a.exportVisits("orphan_visits.csv",f),[a]),l=R.useCallback((f,d)=>{var p;return e({options:d,params:f,orphanVisitsType:(p=f.filter)==null?void 0:p.orphanVisitsType})},[e]),c=R.useMemo(()=>o?{deleteVisits:r,visitsDeletion:i}:void 0,[r,i,o]);return m.jsx(jp,{getVisits:l,cancelGetVisits:n,visitsInfo:t,exportCsv:s,deletion:c,isOrphanVisits:!0,children:m.jsx(Tp,{title:"Orphan visits",visits:t.visits})})},()=>[nr.orphanVisits]),u$e=$t(UU,["ReportExporter"]),zU="shlink/orphanVisits",f$e={visits:[],loading:!1,cancelLoad:!1,errorData:null,progress:null},d$e=e=>Ep({typePrefix:`${zU}/getNonOrphanVisits`,createLoaders:({options:t})=>{const n=e(),{doIntervalFallback:r=!1}=t,i=async a=>n.getNonOrphanVisits(a),o=Sp(r,a=>n.getNonOrphanVisits(a));return{visitsLoader:i,lastVisitLoader:o}},shouldCancel:t=>t().orphanVisits.cancelLoad}),h$e=e=>Cp({name:zU,initialState:f$e,asyncThunkCreator:e,filterCreatedVisits:({params:t},n)=>{const{startDate:r,endDate:i}=(t==null?void 0:t.dateRange)??{};return n.filter(({visit:o})=>Op(o.date,r,i))}}),VU="shlink/orphanVisits",p$e={visits:[],loading:!1,cancelLoad:!1,errorData:null,progress:null},m$e=(e,t)=>!t||t===e.type,v$e=({data:e,...t},n)=>{const r=e.filter(i=>pP(i)&&m$e(i,n));return{...t,data:r}},g$e=e=>Ep({typePrefix:`${VU}/getOrphanVisits`,createLoaders:({orphanVisitsType:t,options:n})=>{const r=e(),{doIntervalFallback:i=!1}=n,o=async s=>r.getOrphanVisits({...s,type:t}).then(l=>v$e(l,t)),a=Sp(i,s=>r.getOrphanVisits(s));return{visitsLoader:o,lastVisitLoader:a}},shouldCancel:t=>t().orphanVisits.cancelLoad}),y$e=(e,t)=>Cp({name:VU,initialState:p$e,asyncThunkCreator:e,extraReducers:n=>{n.addCase(t.fulfilled,r=>({...r,visits:[]}))},filterCreatedVisits:({params:n},r)=>{const{startDate:i,endDate:o}=(n==null?void 0:n.dateRange)??{};return r.filter(({visit:a,shortUrl:s})=>!s&&Op(a.date,i,o))}}),WU="shlink/orphanVisitsDeletion",VR={deletedVisits:0,deleting:!1,error:!1},b$e=e=>fn(`${WU}/deleteOrphanVisits`,()=>e().deleteOrphanVisits()),_$e=e=>Qt({name:WU,initialState:VR,reducers:{},extraReducers:t=>{t.addCase(e.pending,n=>({...n,deleting:!0,error:!1})),t.addCase(e.rejected,(n,{error:r})=>({...n,deleting:!1,error:!0,errorData:zr(r)})),t.addCase(e.fulfilled,(n,{payload:r})=>{const{deletedVisits:i}=r;return{...VR,deletedVisits:i}})}}),HU="shlink/shortUrlVisits",x$e={visits:[],shortCode:"",loading:!1,errorData:null,cancelLoad:!1,progress:null},w$e=e=>Ep({typePrefix:`${HU}/getShortUrlVisits`,createLoaders:({shortCode:t,domain:n,options:r})=>{const i=e(),{doIntervalFallback:o=!1}=r,a=l=>i.getShortUrlVisits(t,{...l,domain:n}),s=Sp(o,l=>i.getShortUrlVisits(t,{...l,domain:n}));return{visitsLoader:a,lastVisitLoader:s}},shouldCancel:t=>t().shortUrlVisits.cancelLoad}),O$e=(e,t)=>Cp({name:HU,initialState:x$e,asyncThunkCreator:e,extraReducers:n=>{n.addCase(t.fulfilled,(r,{payload:i})=>r.shortCode===i.shortCode&&r.domain===i.domain?{...r,visits:[]}:r)},filterCreatedVisits:({shortCode:n,domain:r,params:i},o)=>vB(o,{shortCode:n,domain:r},i==null?void 0:i.dateRange)}),GU="shlink/shortUrlVisitsDeletion",WR={shortCode:"",deletedVisits:0,deleting:!1,error:!1},S$e=e=>fn(`${GU}/deleteShortUrlVisits`,async({shortCode:t,domain:n})=>({...await e().deleteShortUrlVisits(t,n),shortCode:t,domain:n})),E$e=e=>Qt({name:GU,initialState:WR,reducers:{},extraReducers:t=>{t.addCase(e.pending,n=>({...n,deleting:!0,error:!1})),t.addCase(e.rejected,(n,{error:r})=>({...n,deleting:!1,error:!0,errorData:zr(r)})),t.addCase(e.fulfilled,(n,{payload:r})=>{const{shortCode:i,domain:o,deletedVisits:a}=r;return{...WR,shortCode:i,domain:o,deletedVisits:a}})}}),qU="shlink/tagVisits",C$e={visits:[],tag:"",loading:!1,cancelLoad:!1,errorData:null,progress:null},P$e=e=>Ep({typePrefix:`${qU}/getTagVisits`,createLoaders:({tag:t,options:n})=>{const r=e(),{doIntervalFallback:i=!1}=n,o=s=>r.getTagVisits(t,s),a=Sp(i,async s=>r.getTagVisits(t,s));return{visitsLoader:o,lastVisitLoader:a}},shouldCancel:t=>t().tagVisits.cancelLoad}),T$e=e=>Cp({name:qU,initialState:C$e,asyncThunkCreator:e,filterCreatedVisits:({tag:t,params:n},r)=>yB(r,t,n==null?void 0:n.dateRange)}),KU="shlink/visitsOverview",Vm={nonOrphanVisits:{total:0},orphanVisits:{total:0},loading:!1,error:!1},HR=e=>e.filter(({visit:t})=>t.potentialBot).length,j$e=e=>fn(`${KU}/loadVisitsOverview`,()=>e().getVisitsOverview().then(({nonOrphanVisits:t,visitsCount:n=0,orphanVisits:r,orphanVisitsCount:i=0})=>({nonOrphanVisits:{total:(t==null?void 0:t.total)??n,nonBots:t==null?void 0:t.nonBots,bots:t==null?void 0:t.bots},orphanVisits:{total:(r==null?void 0:r.total)??i,nonBots:r==null?void 0:r.nonBots,bots:r==null?void 0:r.bots}}))),A$e=e=>Qt({name:KU,initialState:Vm,reducers:{},extraReducers:t=>{t.addCase(e.pending,()=>({...Vm,loading:!0})),t.addCase(e.rejected,()=>({...Vm,error:!0})),t.addCase(e.fulfilled,(n,{payload:r})=>({...Vm,...r})),t.addCase(Xu,({nonOrphanVisits:n,orphanVisits:r,...i},{payload:o})=>{const{nonOrphanVisits:a,orphanVisits:s}=nMe(o.createdVisits),l=a.length,c=HR(a),f=l-c,d=s.length,p=HR(s),v=d-p;return{...i,nonOrphanVisits:{total:n.total+l,bots:n.bots&&n.bots+c,nonBots:n.nonBots&&n.nonBots+f},orphanVisits:{total:r.total+d,bots:r.bots&&r.bots+p,nonBots:r.nonBots&&r.nonBots+v}}})}}),k$e=({shortUrl:e,loading:t,shortUrlVisits:n})=>{const{visits:r}=n,i=(e==null?void 0:e.shortUrl)??"",o=(e==null?void 0:e.longUrl)??"",a=e==null?void 0:e.title;return m.jsxs(Tp,{title:m.jsxs(m.Fragment,{children:["Visits for ",m.jsx(mr,{href:i})]}),visits:r,shortUrl:e,children:[m.jsx("hr",{}),m.jsxs("div",{children:["Created: ",e?m.jsxs("span",{children:[m.jsx("b",{id:"created",className:"short-url-visits-header__created-at",children:m.jsx(Cy,{date:e.dateCreated,relative:!0})}),m.jsx(br,{placement:"bottom",target:"created",children:m.jsx(Cy,{date:e.dateCreated})})]}):m.jsx("small",{children:"Loading..."})]}),m.jsxs("div",{className:"long-url-container",children:[`${a?"Title":"Long URL"}: `,t&&m.jsx("small",{children:"Loading..."}),!t&&m.jsx(mr,{href:o,children:a??o})]})]})},YU=Bi(({shortUrlVisits:e,shortUrlVisitsDeletion:t,shortUrlsDetails:n,getShortUrlVisits:r,getShortUrlsDetails:i,deleteShortUrlVisits:o,cancelGetShortUrlVisits:a})=>{const s=es("shortUrlVisitsDeletion"),{ReportExporter:l}=Rt(YU),c=bP(),f=R.useMemo(()=>{var g;return(g=n.shortUrls)==null?void 0:g.get(c)},[c,n.shortUrls]),d=R.useCallback((g,y)=>r({...c,options:y,params:g}),[r,c]),p=R.useCallback(g=>l.exportVisits(`short-url_${f==null?void 0:f.shortUrl.replace(/https?:\/\//g,"")}_visits.csv`,g),[l,f==null?void 0:f.shortUrl]),v=R.useMemo(()=>s?{deleteVisits:()=>o(c),visitsDeletion:t}:void 0,[o,c,t,s]);return R.useEffect(()=>{i([c])},[c,i]),m.jsx(jp,{getVisits:d,cancelGetVisits:a,visitsInfo:e,exportCsv:p,deletion:v,children:m.jsx(k$e,{shortUrl:f,loading:n.loading,shortUrlVisits:e})})},e=>e.shortCode?[nr.shortUrlVisits(uP(e.shortCode))]:[]),N$e=$t(YU,["ReportExporter"]),M$e=({tagVisits:e,colorGenerator:t})=>{const{visits:n,tag:r}=e;return m.jsx(Tp,{title:m.jsxs("span",{className:"d-flex align-items-center justify-content-center",children:[m.jsx("span",{className:"me-2",children:"Visits for"}),m.jsx(hb,{text:r,colorGenerator:t})]}),visits:n})},ZU=Bi(({getTagVisits:e,tagVisits:t,cancelGetTagVisits:n})=>{const{ColorGenerator:r,ReportExporter:i}=Rt(ZU),{tag:o=""}=Cu(),a=R.useCallback((l,c)=>e({tag:o,params:l,options:c}),[e,o]),s=R.useCallback(l=>i.exportVisits(`tag_${o}_visits.csv`,l),[i,o]);return m.jsx(jp,{getVisits:a,cancelGetVisits:n,visitsInfo:t,exportCsv:s,children:m.jsx(M$e,{tagVisits:t,colorGenerator:r})})},()=>[nr.visits]),L$e=$t(ZU,["ColorGenerator","ReportExporter"]),EP=({title:e,colors:t,getVisitsForComparison:n,visitsComparisonInfo:r,cancelGetVisitsComparison:i})=>{const{loading:o,visitsGroups:a}=r,s=_r("visits"),l=R.useMemo(()=>Object.keys(a).reduce((b,w,S)=>(b[w]=Object.assign(jy(a[w]),{color:(t==null?void 0:t[w])??AU(S)}),b),{}),[t,a]),c=R.useMemo(()=>Object.values(a).every(b=>b.length===0),[a]),[{dateRange:f,visitsFilter:d},p]=MU(),[v,g]=R.useState(),y=R.useCallback(({startDate:b,endDate:w},S)=>{p({dateRange:{startDate:b??void 0,endDate:w??void 0}}),g(S)},[p]),x=R.useRef(f??(s==null?void 0:s.defaultInterval)??"last30Days"),_=R.useMemo(()=>({...d,excludeBots:d.excludeBots??(s==null?void 0:s.excludeBots)}),[d,s==null?void 0:s.excludeBots]);return R.useEffect(()=>{const b=f??pB(x.current);return n({params:{dateRange:b,filter:_}}),i},[i,f,n,_]),m.jsxs(m.Fragment,{children:[m.jsx("div",{className:"mb-3",children:m.jsxs(xt,{bodyClassName:"d-flex",children:[m.jsx(db,{}),m.jsx("h3",{className:"mb-0 flex-grow-1 text-center",children:e})]})}),m.jsx("div",{className:"col-lg-7 col-xl-6 offset-lg-5 offset-xl-6 mb-3",children:m.jsxs("div",{className:"d-md-flex",children:[m.jsx("div",{className:"flex-grow-1",children:m.jsx(_P,{disabled:o,defaultText:"All visits",dateRangeOrInterval:v??x.current,onDatesChange:y})}),m.jsx(RU,{disabled:o,className:"ms-0 ms-md-2 mt-3 mt-md-0",selected:_,onChange:({orphanVisitsType:b,excludeBots:w})=>p({visitsFilter:{orphanVisitsType:b,excludeBots:w}})})]})}),m.jsx($U,{info:r}),!o&&m.jsx(hv,{showFallback:c,children:m.jsx(NU,{visitsGroups:l})})]})},R$e=Bi(({getDomainVisitsForComparison:e,domainVisitsComparison:t,cancelGetDomainVisitsComparison:n})=>{const r=vP("domains"),i=R.useCallback(o=>e({...o,domains:r}),[r,e]);return m.jsx(EP,{title:`Comparing "${r.join('", "')}"`,getVisitsForComparison:i,visitsComparisonInfo:t,cancelGetVisitsComparison:n})},()=>[nr.visits]),$$e=({visitsLoaders:e,shouldCancel:t,progressChanged:n})=>{const r=Object.keys(e),i=Math.max(1,Math.round(4/r.length)),o=Object.fromEntries(r.map(l=>[l,0])),a=(l,c)=>{o[l]=c;const f=Object.values(o),d=f.reduce((p,v)=>p+v,0);n(d/f.length)},s=Object.entries(e).map(([l,c])=>[l,bB({visitsLoader:c,batchSize:i,shouldCancel:t,progressChanged:f=>a(l,f)})]);return async l=>{const c=await Promise.all(s.map(async([f,d])=>{const p=await d(l);return[f,p]}));return Object.fromEntries(c)}},CP=({typePrefix:e,createLoaders:t,shouldCancel:n})=>{const r=un(`${e}/progressChanged`),i=fn(e,async(o,{getState:a,dispatch:s})=>{const l=t(o),c=await $$e({visitsLoaders:l,shouldCancel:()=>n(a),progressChanged:f=>s(r(f))})(BO(o.params));return{...o,visitsGroups:c}});return Object.assign(i,{progressChanged:r})},PP=({name:e,asyncThunkCreator:t,initialState:n,filterCreatedVisitsForGroup:r})=>{const{pending:i,rejected:o,fulfilled:a,progressChanged:s}=t,{reducer:l,actions:c}=Qt({name:e,initialState:n,reducers:{cancelGetVisits:d=>({...d,cancelLoad:!0})},extraReducers:d=>{d.addCase(i,()=>({...n,loading:!0})),d.addCase(o,(p,{error:v})=>({...n,errorData:zr(v)??null})),d.addCase(a,(p,{payload:v})=>({...p,...v,loading:!1,progress:null,errorData:null})),d.addCase(s,(p,{payload:v})=>({...p,progress:v})),d.addCase(Xu,(p,{payload:v})=>{const{visitsGroups:g,...y}=p,x=Object.keys(g).map(b=>{const w=r({...y,groupKey:b},v.createdVisits).map(({visit:S})=>S);return[b,[...w,...g[b]]]}),_=Object.fromEntries(x);return{...y,visitsGroups:_}})}}),{cancelGetVisits:f}=c;return{reducer:l,cancelGetVisits:f}},XU="shlink/domainVisitsComparison",I$e={visitsGroups:{},loading:!1,cancelLoad:!1,errorData:null,progress:null},D$e=e=>CP({typePrefix:`${XU}/getDomainVisitsForComparison`,createLoaders:({domains:t})=>{const n=e(),r=t.map(i=>[i,o=>n.getDomainVisits(i,o)]);return Object.fromEntries(r)},shouldCancel:t=>t().domainVisitsComparison.cancelLoad}),F$e=e=>PP({name:XU,initialState:I$e,asyncThunkCreator:e,filterCreatedVisitsForGroup:({groupKey:t,params:n},r)=>gB(r,t,n==null?void 0:n.dateRange)}),QU="shlink/shortUrlVisitsComparison",B$e={visitsGroups:{},loading:!1,cancelLoad:!1,errorData:null,progress:null},U$e=e=>CP({typePrefix:`${QU}/getShortUrlVisitsForComparison`,createLoaders:({shortUrls:t})=>{const n=e(),r=t.map(i=>[fP(i),o=>n.getShortUrlVisits(i.shortCode,{...o,domain:i.domain})]);return Object.fromEntries(r)},shouldCancel:t=>t().shortUrlVisitsComparison.cancelLoad}),z$e=e=>PP({name:QU,initialState:B$e,asyncThunkCreator:e,filterCreatedVisitsForGroup:({groupKey:t,params:n},r)=>vB(r,sB(t),n==null?void 0:n.dateRange)}),JU="shlink/tagVisitsComparison",V$e={visitsGroups:{},loading:!1,cancelLoad:!1,errorData:null,progress:null},W$e=e=>CP({typePrefix:`${JU}/getTagVisitsForComparison`,createLoaders:({tags:t})=>{const n=e(),r=t.map(i=>[i,o=>n.getTagVisits(i,o)]);return Object.fromEntries(r)},shouldCancel:t=>t().tagVisitsComparison.cancelLoad}),H$e=e=>PP({name:JU,initialState:V$e,asyncThunkCreator:e,filterCreatedVisitsForGroup:({groupKey:t,params:n},r)=>yB(r,t,n==null?void 0:n.dateRange)}),G$e=Bi(({getShortUrlVisitsForComparison:e,shortUrlVisitsComparison:t,cancelGetShortUrlVisitsComparison:n,shortUrlsDetails:r,getShortUrlsDetails:i})=>{const o=vP("short-urls"),a=R.useMemo(()=>o.map(sB),[o]),s=R.useCallback(f=>e({...f,shortUrls:a}),[e,a]),l=R.useMemo(()=>{var f;return[...((f=r.shortUrls)==null?void 0:f.values())??[]]},[r.shortUrls]),c=R.useMemo(()=>{const{visitsGroups:f,loading:d,...p}=t,v=l.reduce((g,y)=>(g[y.shortUrl]=f[fP(y)]??[],g),{});return{...p,visitsGroups:v,loading:d||r.loading}},[t,r.loading,l]);return R.useEffect(()=>{a.length>0&&i(a)},[i,a]),m.jsx(EP,{title:m.jsx("span",{"data-testid":"title",children:r.loading?"Loading...":`Comparing ${l.length} short URLs`}),getVisitsForComparison:s,visitsComparisonInfo:c,cancelGetVisitsComparison:n})},()=>[nr.visits]),e9=Bi(({getTagVisitsForComparison:e,tagVisitsComparison:t,cancelGetTagVisitsComparison:n})=>{const{ColorGenerator:r}=Rt(e9),i=vP("tags"),o=R.useCallback(l=>e({...l,tags:i}),[e,i]),{visitsGroups:a}=t,s=R.useMemo(()=>Object.keys(a).reduce((l,c)=>(l[c]=r.getColorForKey(c),l),{}),[r,a]);return m.jsx(EP,{title:m.jsxs(m.Fragment,{children:["Comparing ",i.map(l=>m.jsx(hb,{colorGenerator:r,text:l},l))]}),getVisitsForComparison:o,visitsComparisonInfo:t,cancelGetVisitsComparison:n,colors:s})},()=>[nr.visits]),q$e=$t(e9,["ColorGenerator"]),K$e=(e,t)=>{const n=(r,i)=>t([...r,"mercureInfo"],[...i,"createNewVisits","loadMercureInfo"]);e.serviceFactory("MapModal",()=>LU),e.factory("ShortUrlVisits",N$e),e.decorator("ShortUrlVisits",t(["shortUrlVisits","shortUrlVisitsDeletion","shortUrlsDetails","mercureInfo"],["getShortUrlVisits","deleteShortUrlVisits","getShortUrlsDetails","cancelGetShortUrlVisits","createNewVisits","loadMercureInfo"])),e.factory("TagVisits",L$e),e.decorator("TagVisits",n(["tagVisits"],["getTagVisits","cancelGetTagVisits"])),e.factory("TagVisitsComparison",q$e),e.decorator("TagVisitsComparison",n(["tagVisitsComparison"],["getTagVisitsForComparison","cancelGetTagVisitsForComparison"])),e.serviceFactory("DomainVisitsComparison",()=>R$e),e.decorator("DomainVisitsComparison",n(["domainVisitsComparison"],["getDomainVisitsForComparison","cancelGetDomainVisitsForComparison"])),e.serviceFactory("ShortUrlVisitsComparison",()=>G$e),e.decorator("ShortUrlVisitsComparison",n(["shortUrlVisitsComparison","shortUrlsDetails"],["getShortUrlVisitsForComparison","cancelGetShortUrlVisitsForComparison","getShortUrlsDetails"])),e.factory("DomainVisits",l$e),e.decorator("DomainVisits",n(["domainVisits"],["getDomainVisits","cancelGetDomainVisits"])),e.factory("OrphanVisits",u$e),e.decorator("OrphanVisits",n(["orphanVisits","orphanVisitsDeletion"],["getOrphanVisits","cancelGetOrphanVisits","deleteOrphanVisits"])),e.factory("NonOrphanVisits",c$e),e.decorator("NonOrphanVisits",n(["nonOrphanVisits"],["getNonOrphanVisits","cancelGetNonOrphanVisits"])),e.serviceFactory("VisitsParser",()=>n$e),e.serviceFactory("getShortUrlVisits",w$e,"apiClientFactory"),e.serviceFactory("cancelGetShortUrlVisits",r=>r.cancelGetVisits,"shortUrlVisitsReducerCreator"),e.serviceFactory("getShortUrlVisitsForComparison",U$e,"apiClientFactory"),e.serviceFactory("cancelGetShortUrlVisitsForComparison",r=>r.cancelGetVisits,"shortUrlVisitsComparisonReducerCreator"),e.serviceFactory("deleteShortUrlVisits",S$e,"apiClientFactory"),e.serviceFactory("getTagVisits",P$e,"apiClientFactory"),e.serviceFactory("cancelGetTagVisits",r=>r.cancelGetVisits,"tagVisitsReducerCreator"),e.serviceFactory("getTagVisitsForComparison",W$e,"apiClientFactory"),e.serviceFactory("cancelGetTagVisitsForComparison",r=>r.cancelGetVisits,"tagVisitsComparisonReducerCreator"),e.serviceFactory("getDomainVisits",fMe,"apiClientFactory"),e.serviceFactory("cancelGetDomainVisits",r=>r.cancelGetVisits,"domainVisitsReducerCreator"),e.serviceFactory("getDomainVisitsForComparison",D$e,"apiClientFactory"),e.serviceFactory("cancelGetDomainVisitsForComparison",r=>r.cancelGetVisits,"domainVisitsComparisonReducerCreator"),e.serviceFactory("getOrphanVisits",g$e,"apiClientFactory"),e.serviceFactory("cancelGetOrphanVisits",r=>r.cancelGetVisits,"orphanVisitsReducerCreator"),e.serviceFactory("deleteOrphanVisits",b$e,"apiClientFactory"),e.serviceFactory("getNonOrphanVisits",d$e,"apiClientFactory"),e.serviceFactory("cancelGetNonOrphanVisits",r=>r.cancelGetVisits,"nonOrphanVisitsReducerCreator"),e.serviceFactory("createNewVisits",()=>Xu),e.serviceFactory("loadVisitsOverview",j$e,"apiClientFactory"),e.serviceFactory("visitsOverviewReducerCreator",A$e,"loadVisitsOverview"),e.serviceFactory("visitsOverviewReducer",r=>r.reducer,"visitsOverviewReducerCreator"),e.serviceFactory("domainVisitsReducerCreator",dMe,"getDomainVisits"),e.serviceFactory("domainVisitsReducer",r=>r.reducer,"domainVisitsReducerCreator"),e.serviceFactory("nonOrphanVisitsReducerCreator",h$e,"getNonOrphanVisits"),e.serviceFactory("nonOrphanVisitsReducer",r=>r.reducer,"nonOrphanVisitsReducerCreator"),e.serviceFactory("orphanVisitsReducerCreator",y$e,"getOrphanVisits","deleteOrphanVisits"),e.serviceFactory("orphanVisitsReducer",r=>r.reducer,"orphanVisitsReducerCreator"),e.serviceFactory("orphanVisitsDeletionReducerCreator",_$e,"deleteOrphanVisits"),e.serviceFactory("orphanVisitsDeletionReducer",r=>r.reducer,"orphanVisitsDeletionReducerCreator"),e.serviceFactory("shortUrlVisitsReducerCreator",O$e,"getShortUrlVisits","deleteShortUrlVisits"),e.serviceFactory("shortUrlVisitsReducer",r=>r.reducer,"shortUrlVisitsReducerCreator"),e.serviceFactory("shortUrlVisitsDeletionReducerCreator",E$e,"deleteShortUrlVisits"),e.serviceFactory("shortUrlVisitsDeletionReducer",r=>r.reducer,"shortUrlVisitsDeletionReducerCreator"),e.serviceFactory("tagVisitsReducerCreator",T$e,"getTagVisits"),e.serviceFactory("tagVisitsReducer",r=>r.reducer,"tagVisitsReducerCreator"),e.serviceFactory("tagVisitsComparisonReducerCreator",H$e,"getTagVisitsForComparison"),e.serviceFactory("tagVisitsComparisonReducer",r=>r.reducer,"tagVisitsComparisonReducerCreator"),e.serviceFactory("domainVisitsComparisonReducerCreator",F$e,"getDomainVisitsForComparison"),e.serviceFactory("domainVisitsComparisonReducer",r=>r.reducer,"domainVisitsComparisonReducerCreator"),e.serviceFactory("shortUrlVisitsComparisonReducerCreator",z$e,"getShortUrlVisitsForComparison"),e.serviceFactory("shortUrlVisitsComparisonReducer",r=>r.reducer,"shortUrlVisitsComparisonReducerCreator")},Df=({children:e,to:t,className:n,...r})=>m.jsx(k6,{className:({isActive:i})=>Ce("aside-menu__item",n,{"aside-menu__item--selected":i}),to:t,...r,children:e}),Y$e=({routePrefix:e,showOnMobile:t=!1})=>{const{pathname:n}=gr(),r=Ce("aside-menu",{"aside-menu--hidden":!t}),i=o=>`${e}${o}`;return m.jsx("aside",{className:r,children:m.jsxs("nav",{className:"nav flex-column aside-menu__nav",children:[m.jsxs(Df,{to:i("/overview"),children:[m.jsx(je,{fixedWidth:!0,icon:CK}),m.jsx("span",{className:"aside-menu__item-text",children:"Overview"})]}),m.jsxs(Df,{to:i("/list-short-urls/1"),className:Ce({"aside-menu__item--selected":n.match("/list-short-urls")!==null}),children:[m.jsx(je,{fixedWidth:!0,icon:q6}),m.jsx("span",{className:"aside-menu__item-text",children:"List short URLs"})]}),m.jsxs(Df,{to:i("/create-short-url"),children:[m.jsx(je,{fixedWidth:!0,icon:NK,flip:"horizontal"}),m.jsx("span",{className:"aside-menu__item-text",children:"Create short URL"})]}),m.jsxs(Df,{to:i("/manage-tags"),children:[m.jsx(je,{fixedWidth:!0,icon:K6}),m.jsx("span",{className:"aside-menu__item-text",children:"Manage tags"})]}),m.jsxs(Df,{to:i("/manage-domains"),children:[m.jsx(je,{fixedWidth:!0,icon:iK}),m.jsx("span",{className:"aside-menu__item-text",children:"Manage domains"})]})]})})},t9=({createNotFound:e})=>{const{TagsList:t,ShortUrlsList:n,CreateShortUrl:r,ShortUrlVisits:i,TagVisits:o,DomainVisits:a,OrphanVisits:s,NonOrphanVisits:l,Overview:c,EditShortUrl:f,ManageDomains:d,TagVisitsComparison:p,DomainVisitsComparison:v,ShortUrlVisitsComparison:g,ShortUrlRedirectRules:y}=Rt(t9),x=gr(),_=ds(),[b,w,S,E]=qt();R.useEffect(()=>E(),[x,E]);const C=Ce("shlink-layout__burger-icon",{"shlink-layout__burger-icon--active":b}),T=vMe(S,E),A=es("shortUrlRedirectRules");return m.jsxs(m.Fragment,{children:[m.jsx(je,{icon:Jq,className:C,onClick:w}),m.jsx("div",{...T,className:"shlink-layout__swipeable",children:m.jsxs("div",{className:"shlink-layout__swipeable-inner",children:[m.jsx(Y$e,{routePrefix:_,showOnMobile:b}),m.jsx("div",{className:"shlink-layout__container",onPointerDown:()=>E(),children:m.jsx("div",{className:"container-xl",children:m.jsxs(Xy,{children:[m.jsx(ot,{index:!0,element:m.jsx(qS,{replace:!0,to:"overview"})}),m.jsx(ot,{path:"/overview",element:m.jsx(c,{})}),m.jsx(ot,{path:"/list-short-urls/:page",element:m.jsx(n,{})}),m.jsx(ot,{path:"/create-short-url",element:m.jsx(r,{})}),m.jsx(ot,{path:"/short-code/:shortCode/visits/*",element:m.jsx(i,{})}),m.jsx(ot,{path:"/short-code/:shortCode/edit",element:m.jsx(f,{})}),A&&m.jsx(ot,{path:"/short-code/:shortCode/redirect-rules",element:m.jsx(y,{})}),m.jsx(ot,{path:"/short-urls/compare-visits",element:m.jsx(g,{})}),m.jsx(ot,{path:"/tag/:tag/visits/*",element:m.jsx(o,{})}),m.jsx(ot,{path:"/tags/compare-visits",element:m.jsx(p,{})}),m.jsx(ot,{path:"/domain/:domain/visits/*",element:m.jsx(a,{})}),m.jsx(ot,{path:"/orphan-visits/*",element:m.jsx(s,{})}),m.jsx(ot,{path:"/non-orphan-visits/*",element:m.jsx(l,{})}),m.jsx(ot,{path:"/manage-tags",element:m.jsx(t,{})}),m.jsx(ot,{path:"/manage-domains",element:m.jsx(d,{})}),m.jsx(ot,{path:"/domains/compare-visits",element:m.jsx(v,{})}),e&&m.jsx(ot,{path:"*",element:e("/list-short-urls/1")})]})})})]})})]})},Z$e=$t(t9,["TagsList","ShortUrlsList","CreateShortUrl","ShortUrlVisits","TagVisits","DomainVisits","OrphanVisits","NonOrphanVisits","Overview","EditShortUrl","ManageDomains","TagVisitsComparison","DomainVisitsComparison","ShortUrlVisitsComparison","ShortUrlRedirectRules"]),X$e=!0,Q$e=e=>qD({devTools:!X$e,reducer:IE({mercureInfo:e.mercureInfoReducer,shortUrlsList:e.shortUrlsListReducer,shortUrlCreation:e.shortUrlCreationReducer,shortUrlDeletion:e.shortUrlDeletionReducer,shortUrlEdition:e.shortUrlEditionReducer,shortUrlsDetails:e.shortUrlsDetailsReducer,shortUrlVisits:e.shortUrlVisitsReducer,shortUrlVisitsDeletion:e.shortUrlVisitsDeletionReducer,shortUrlVisitsComparison:e.shortUrlVisitsComparisonReducer,tagVisits:e.tagVisitsReducer,tagVisitsComparison:e.tagVisitsComparisonReducer,domainVisits:e.domainVisitsReducer,domainVisitsComparison:e.domainVisitsComparisonReducer,orphanVisits:e.orphanVisitsReducer,orphanVisitsDeletion:e.orphanVisitsDeletionReducer,nonOrphanVisits:e.nonOrphanVisitsReducer,tagsList:e.tagsListReducer,tagDelete:e.tagDeleteReducer,tagEdit:e.tagEditReducer,domainsList:e.domainsListReducer,visitsOverview:e.visitsOverviewReducer,shortUrlRedirectRules:e.shortUrlRedirectRulesReducer,shortUrlRedirectRulesSaving:e.setShortUrlRedirectRulesReducer}),middleware:t=>t({immutableCheck:!1,serializableCheck:!1})}),J$e=e=>{e.factory("Main",Z$e),e.factory("store",Q$e)},Ui=new z6,{container:e6e}=Ui,t6e=e=>t=>Object.fromEntries(e.map(n=>[n,t[n]])),n6e=(e,t)=>(...n)=>e[t](...n),r6e=(e,t)=>({...e,[t]:n6e(e6e,t)}),Qu=(e,t=[])=>y6(e?t6e(e):null,t.reduce(r6e,{}));J$e(Ui);DRe(Ui,Qu);s4e(Ui,Qu);K$e(Ui,Qu);jMe(Ui);CMe(Ui,Qu);BMe(Ui,Qu);O4e(Ui);YLe(Ui,Qu);let GR;const i6e=e=>({serverVersion:t,apiClient:n,settings:r,routesPrefix:i="",createNotFound:o,tagColorsStorage:a})=>{const s=mRe(t),l=R.useRef(),[c,f]=R.useState(),d=xl(),p=R.useMemo(()=>d?R.Fragment:A6,[d]);return R.useEffect(()=>{GR=n,e.value("apiClientFactory",()=>GR),a&&e.value("TagColorsStorage",a);const{container:v}=e,{Main:g,store:y,loadMercureInfo:x,listTags:_}=v;l.current=m.jsx(g,{createNotFound:o}),f(y),y.dispatch(x(r)),y.dispatch(_())},[n,o,r,a]),c?m.jsx(b6,{store:c,children:m.jsx(d5,{value:r??{},children:m.jsx(pRe,{value:s,children:m.jsx(WNe,{value:i,children:m.jsx(p,{children:l.current})})})})}):m.jsx(m.Fragment,{})},o6e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=",a6e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAABSCAMAAAAhFXfZAAAC91BMVEVMaXEzeak2f7I4g7g3g7cua5gzeKg8hJo3grY4g7c3grU0gLI2frE0daAubJc2gbQwd6QzeKk2gLMtd5sxdKIua5g1frA2f7IydaM0e6w2fq41fK01eqo3grgubJgta5cxdKI1f7AydaQydaMxc6EubJgvbJkwcZ4ubZkwcJwubZgubJcydqUydKIxapgubJctbJcubZcubJcvbJYubJcvbZkubJctbJctbZcubJg2f7AubJcrbZcubJcubJcua5g3grY0fq8ubJcubJdEkdEwhsw6i88vhswuhcsuhMtBjMgthMsrg8srgss6is8qgcs8i9A9iMYtg8spgcoogMo7hcMngMonf8olfso4gr8kfck5iM8jfMk4iM8he8k1fro7itAgesk2hs8eecgzfLcofssdeMg0hc4cd8g2hcsxeLQbdsgZdcgxeLImfcszhM0vda4xgckzhM4xg84wf8Yxgs4udKsvfcQucqhUndROmdM1fK0wcZ8vb5w0eqpQm9MzeKhXoNVcpdYydKNWn9VZotVKltJFjsIwcJ1Rms9OlslLmtH///8+kc9epdYzd6dbo9VHkMM2f7FHmNBClM8ydqVcpNY9hro3gLM9hLczealQmcw3fa46f7A8gLMxc6I3eagyc6FIldJMl9JSnNRSntNNl9JPnNJFi75UnM9ZodVKksg8kM45jc09e6ZHltFBk883gbRBh7pDk9EwcaBzn784g7dKkcY2i81Om9M7j85Llc81is09g7Q4grY/j9A0eqxKmdFFltBEjcXf6fFImdBCiLxJl9FGlNFBi78yiMxVndEvbpo6js74+vx+psPP3+o/ks5HkcpGmNCjwdZCkNDM3ehYoNJEls+lxNkxh8xHks0+jdC1zd5Lg6r+/v/H2ufz9/o3jM3t8/edvdM/k89Th61OiLBSjbZklbaTt9BfptdjmL1AicBHj8hGk9FAgK1dkLNTjLRekrdClc/k7fM0icy0y9tgp9c4jc2NtM9Dlc8zicxeXZn3AAAAQ3RSTlMAHDdTb4yPA+LtnEQmC4L2EmHqB7XA0d0sr478x4/Yd5i1zOfyPkf1sLVq4Nh3FvjxopQ2/STNuFzUwFIwxKaejILpIBEV9wAABhVJREFUeF6s1NdyFEcYBeBeoQIhRAkLlRDGrhIgY3BJL8CVeKzuyXFzzjkn5ZxzzuScg3PO8cKzu70JkO0LfxdTU//pM9vTu7Xgf6KqOVTb9X7toRrVEfBf1HTVjZccrT/2by1VV928Yty9ZbVuucdz90frG8DBjl9pVApbOstvmMuvVgaNXSfAAd6pGxpy6yxf5ph43pS/4f3uoaGm2rdu72S9xzOvMymkZFq/ptDrk90mhW7e4zl7HLzhxGWPR20xmSxJ/VqldG5m9XhaVOA1DadsNh3Pu5L2N6QtPO/32JpqQBVVk20oy/Pi2s23WEvyfHbe1thadVQttvm7Llf65gGmXK67XtupyoM7HQhmXdLS8oGWJNeOJ3C5fG5XCEJnkez3/oFdsvgJ4l2ANZwhrJKk/7OSXa+3Vw2WJMlKnGkobouYk6T0TyX30klOUnTD9HJ5qpckL3EW/w4XF3Xd0FGywXUrstrclVsqz5Pd/sXFYyDnPdrLcQODmGOK47IZb4CmibmMn+MYRzFZ5jg33ZL/EJrWcszHmANy3ARBK/IXtciJy8VsitPSdE3uuHxzougojcUdr8/32atnz/ev3f/K5wtpxUTpcaI45zusVDpYtZi+jg0oU9b3x74h7+n9ABvYEZeKaVq0sh0AtLKsFtqNBdeT0MrSzwwlq9+x6xAO4tgOtSzbCjrNQQiNvQUbUEubvzBUeGw26yDCsRHCoLkTHDa7IdOLIThs/gHvChszh2CimE8peRs47cxANI0lYNB5y1DljpOF0IhzBDPOZnDOqYYbeGKECbPzWnXludPphw5c2YBq5zlwXphIbO4VDCZ0gnPfUO1TwZoYwAs2ExPCedAu9DAjfQUjzITQb3jNj0KG2Sgt6BHaQUdYzWz+XmBktOHwanXjaSTcwwziBcuMOtwBmqPrTOxFQR/DRKKPqyur0aiW6cULYsx6tBm0jXpR/AUWR6HRq9WVW6MRhIq5jLyjbaCTDCijyYJNpCajdyobP/eTw0iexBAKkJ3gA5KcQb2zBXsIBckn+xVv8jkZSaEFHE+jFEleAEfayRU0MouNoBmB/L50Ai/HSLIHxcrpCvnhSQAuakKp2C/YbCylJjXRVy/z3+Kv/RrNcCo+WUzlVEhzKffnTQnxeN9fWF88fiNCUdSTsaufaChKWInHeysygfpIqagoakW+vV20J8uyl6TyNKEZWV4oRSPyCkWpgOLSbkCObT8o2r6tlG58HQquf6O0v50tB7JM7F4EORd2dx/K0w/KHsVkLPaoYrwgP/y7krr3SSMA4zj+OBgmjYkxcdIJQyQRKgg2viX9Hddi9UBb29LrKR7CVVEEEXWojUkXNyfTNDE14W9gbHJNuhjDettN3ZvbOvdOqCD3Jp/9l+/wJE+9PkYGjx/fqkys3S2rMozM/o2106rfMUINo6hVqz+eu/hd1c4xTg0TAfy5kV+4UG6+IthHTU9woWmxuKNbTfuCSfovBCxq7EtHqvYL4Sm6F8GVxsSXHMQ07TOi1DKtZxjWaaIyi4CXWjxPccUw8WVbMYY5wxC1mzEyXMJWkllpRloi+Kkoq69sxBTlElF6aAxYUbjXNlhlDZilDnM4U5SlN5biRsRHnbx3mbeWjEh4mEyiuJDl5XcWVmX5GvNkFgLWZM5qwsop4/AWfLhU1cR7k1VVvcYCWRkOI6Xy5gmnphCYIkvzuNYzHzosq2oNk2RtSs8khfUOfHIDgR6ysYBaMpl4uEgk2U/oJTs9AaTSwma7dT69geAE2ZpEjUsn2ieJNHeKfrI3EcAGJ2ZaNgVuC8EBctCLc57P5u5led6IOBkIYkuQMrmmjChs4VkfOerHqSBkPzZlhe06RslZ3zMjk2sscqKwY0RcjKK+LWbzd7KiHhkncs/siFJ+V5eXxD34B8nVuJEpGJNmxN2gH3vSvp7J70tF+D1Ej8qUJD1TkErAND2GZwTFg/LubvmgiBG3SOvdlsqFQrkEzJCL1rstlnVFROixZoDDSuXQFHESwVGlcuQcMb/b42NgjLowh5MTDFE3vNB5qStRIErdCQEh6pLPR92anSUb/wAIhldAaDMpGgAAAABJRU5ErkJggg==",s6e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAQAAAACach9AAACMUlEQVR4Ae3ShY7jQBAE0Aoz/f9/HTMzhg1zrdKUrJbdx+Kd2nD8VNudfsL/Th///dyQN2TH6f3y/BGpC379rV+S+qqetBOxImNQXL8JCAr2V4iMQXHGNJxeCfZXhSRBcQMfvkOWUdtfzlLgAENmZDcmo2TVmt8OSM2eXxBp3DjHSMFutqS7SbmemzBiR+xpKCNUIRkdkkYxhAkyGoBvyQFEJEefwSmmvBfJuJ6aKqKWnAkvGZOaZXTUgFqYULWNSHUckZuR1HIIimUExutRxwzOLROIG4vKmCKQt364mIlhSyzAf1m9lHZHJZrlAOMMztRRiKimp/rpdJDc9Awry5xTZCte7FHtuS8wJgeYGrex28xNTd086Dik7vUMscQOa8y4DoGtCCSkAKlNwpgNtphjrC6MIHUkR6YWxxs6Sc5xqn222mmCRFzIt8lEdKx+ikCtg91qS2WpwVfBelJCiQJwvzixfI9cxZQWgiSJelKnwBElKYtDOb2MFbhmUigbReQBV0Cg4+qMXSxXSyGUn4UbF8l+7qdSGnTC0XLCmahIgUHLhLOhpVCtw4CzYXvLQWQbJNmxoCsOKAxSgBJno75avolkRw8iIAFcsdc02e9iyCd8tHwmeSSoKTowIgvscSGZUOA7PuCN5b2BX9mQM7S0wYhMNU74zgsPBj3HU7wguAfnxxjFQGBE6pwN+GjME9zHY7zGp8wVxMShYX9NXvEWD3HbwJf4giO4CFIQxXScH1/TM+04kkBiAAAAAElFTkSuQmCC",l6e=()=>{delete dR.Icon.Default.prototype._getIconUrl,dR.Icon.Default.mergeOptions({iconRetinaUrl:a6e,iconUrl:o6e,shadowUrl:s6e})};l6e();const c6e=i6e(Ui);function Ay(e){return t=>{const{resetSelectedServer:n}=t;return R.useEffect(()=>{n()},[n]),m.jsx(e,{...t})}}let u6e=class extends R.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(t){const{console:n=globalThis.console}=this.props;n.error(t)}render(){const{hasError:t}=this.state,{location:n=globalThis.location}=this.props;if(t)return m.jsx("div",{className:"home",children:m.jsxs(xt,{className:"p-4",children:[m.jsx("h1",{children:"Oops! This is awkward :S"}),m.jsx("p",{children:"It seems that something went wrong. Try refreshing the page or just click this button."}),m.jsx("br",{}),m.jsx(Ke,{outline:!0,color:"primary",onClick:()=>n.reload(),children:"Take me back"})]})});const{children:r}=this.props;return r}};const f6e=({id:e,name:t})=>m.jsxs(OD,{tag:St,to:`/server/${e}`,className:"servers-list__server-item",children:[t,m.jsx(je,{icon:DK,className:"servers-list__server-item-icon"})]}),n9=({servers:e,children:t,embedded:n=!1})=>m.jsxs(m.Fragment,{children:[t&&m.jsx("div",{"data-testid":"title",className:"mb-0 fs-5 fw-normal lh-sm",children:t}),e.length>0&&m.jsx(_D,{"data-testid":"list",tag:"div",className:Ce("servers-list__list-group",{"servers-list__list-group--embedded":n}),children:e.map(({id:r,name:i})=>m.jsx(f6e,{id:r,name:i},r))})]}),r9=({color:e=th,className:t})=>m.jsx("svg",{className:t,viewBox:"0 0 512 512",version:"1.1",xmlns:"http://www.w3.org/2000/svg",children:m.jsxs("g",{fill:e,children:[m.jsx("path",{d:" M 23.71 85.08 C 17.22 49.81 49.44 14.86 85.08 18.12 C 118.83 19.21 145.72 53.33 139.45 86.37 C 155.64 102.30 171.32 118.83 187.87 134.36 C 198.32 111.73 208.84 89.12 219.57 66.62 C 226.05 53.84 243.47 48.74 255.73 56.27 C 263.76 62.10 270.34 69.69 277.25 76.75 C 286.28 86.61 285.72 102.89 276.31 112.31 C 223.38 165.37 170.38 218.37 117.35 271.34 C 107.72 280.99 91.01 281.25 81.11 271.86 C 74.39 264.94 66.82 258.69 61.24 250.77 C 53.72 238.52 58.85 221.07 71.64 214.62 C 94.11 203.87 116.72 193.38 139.33 182.91 C 123.81 166.36 107.30 150.68 91.37 134.49 C 60.20 140.28 27.37 116.78 23.71 85.08 Z"}),m.jsx("path",{d:" M 205.21 201.23 C 225.32 181.36 260.88 181.11 281.14 200.86 C 299.25 218.75 317.37 236.65 335.10 254.93 C 356.73 278.01 352.01 318.70 326.03 336.56 C 320.07 330.47 313.73 324.65 308.12 318.28 C 323.86 309.39 328.76 286.18 316.63 272.39 C 301.73 256.95 286.30 242.03 271.24 226.75 C 264.49 219.65 256.80 212.00 246.37 211.52 C 224.65 208.64 205.52 233.36 214.49 253.58 C 221.09 266.81 234.22 275.12 243.62 286.24 C 240.43 295.96 238.09 306.13 238.29 316.46 C 225.55 304.29 213.16 291.73 200.89 279.09 C 180.97 257.57 183.10 220.45 205.21 201.23 Z"}),m.jsx("path",{d:" M 273.90 352.07 C 252.28 328.99 256.98 288.31 282.96 270.46 C 288.93 276.54 295.26 282.36 300.88 288.72 C 285.14 297.62 280.23 320.82 292.38 334.61 C 307.27 350.05 322.70 364.96 337.75 380.25 C 344.51 387.35 352.20 395.00 362.64 395.48 C 384.35 398.37 403.49 373.64 394.51 353.42 C 387.92 340.18 374.78 331.88 365.38 320.76 C 368.56 311.04 370.91 300.86 370.71 290.54 C 383.45 302.70 395.84 315.27 408.11 327.91 C 428.03 349.43 425.90 386.55 403.78 405.77 C 383.68 425.64 348.13 425.89 327.86 406.14 C 309.75 388.25 291.60 370.37 273.90 352.07 Z"}),m.jsx("path",{d:" M 422.11 403.83 C 431.96 394.07 441.60 384.06 451.66 374.51 C 460.90 383.74 471.89 392.70 474.89 406.11 C 480.16 429.97 484.08 454.13 488.76 478.12 C 490.00 483.41 484.47 488.29 479.35 486.63 C 454.66 481.52 429.55 478.12 405.14 471.84 C 393.17 467.97 385.20 457.75 376.55 449.27 C 386.39 439.49 396.13 429.60 406.06 419.91 C 416.37 433.45 435.74 414.00 422.11 403.83 Z"})]})}),d6e=({servers:e})=>{const t=vo(),n=Object.values(e),r=n.length>0;return R.useEffect(()=>{const i=n.find(({autoConnect:o})=>o);i&&t(`/server/${i.id}`)},[n,t]),m.jsx("div",{className:"home",children:m.jsx(vr,{className:"home__main-card",children:m.jsxs(Kn,{className:"g-0",children:[m.jsx("div",{className:"col-md-5 d-none d-md-block",children:m.jsx("div",{className:"home__logo-wrapper",children:m.jsx("div",{className:"home__logo",children:m.jsx(r9,{})})})}),m.jsxs("div",{className:"col-md-7 home__servers-container",children:[m.jsx("div",{className:"home__title-wrapper",children:m.jsx("h1",{className:"home__title",children:"Welcome!"})}),m.jsx(n9,{embedded:!0,servers:n,children:!r&&m.jsxs("div",{className:"p-4 text-center",children:[m.jsx("p",{className:"mb-5",children:"This application will help you manage your Shlink servers."}),m.jsx("p",{children:m.jsxs(St,{to:"/server/create",className:"btn btn-outline-primary btn-lg me-2",children:[m.jsx(je,{icon:ep})," ",m.jsx("span",{className:"ms-1",children:"Add a server"})]})}),m.jsx("p",{className:"mb-0 mt-5",children:m.jsx(mr,{href:"https://shlink.io/documentation",children:m.jsxs("small",{children:[m.jsx("span",{className:"me-1",children:"Learn more about Shlink"})," ",m.jsx(je,{icon:vK})]})})})]})})]})]})})})},i9=()=>{const{ServersDropdown:e}=Ii(i9),[t,n,,r]=qt(),i=gr(),{pathname:o}=i;R.useEffect(r,[i,r]);const a="/settings",s=Ce("main-header__toggle-icon",{"main-header__toggle-icon--opened":t});return m.jsxs(BI,{color:"primary",dark:!0,fixed:"top",className:"main-header",expand:"md",children:[m.jsxs(UI,{tag:St,to:"/",children:[m.jsx(r9,{className:"main-header__brand-logo",color:"white"})," Shlink"]}),m.jsx(zI,{onClick:n,children:m.jsx(je,{icon:RK,className:s})}),m.jsx(qee,{navbar:!0,isOpen:t,children:m.jsxs(vE,{navbar:!0,className:"ms-auto",children:[m.jsx(gE,{children:m.jsxs(HI,{tag:St,to:a,active:o.startsWith(a),children:[m.jsx(je,{icon:UK}),"  Settings"]})}),m.jsx(e,{})]})})]})},h6e=Di(i9,["ServersDropdown"]),p6e=({children:e})=>{const t=gr();return R.useEffect(()=>{scrollTo(0,0)},[t]),m.jsx(m.Fragment,{children:e})},o9=QD(e=>e,e=>{try{return l2(e,e,"=")}catch{return!1}}),a9=e=>o9(e)?`v${e}`:e,s9=(e,t="latest")=>o9(e)?e:t,m6e="%_VERSION_%",v6e=e=>a9(s9(e)),qR=({project:e,version:t})=>m.jsx(mr,{href:`https://github.com/shlinkio/${e}/releases/${t}`,className:"text-muted",children:m.jsx("b",{children:t})}),g6e=({selectedServer:e,clientVersion:t=m6e})=>{const n=v6e(t);return m.jsxs("small",{className:"text-muted",children:[QS(e)&&m.jsxs(m.Fragment,{children:["Server: ",m.jsx(qR,{project:"shlink",version:e.printableVersion})," - "]}),"Client: ",m.jsx(qR,{project:"shlink-web-client",version:n})]})},y6e=({selectedServer:e})=>m.jsx("div",{className:Ce("text-center",{"shlink-versions-container--with-sidebar":QS(e)}),children:m.jsx(g6e,{selectedServer:e})}),Ju=({children:e})=>m.jsx("div",{className:"no-menu-wrapper container-xl",children:e});function l9(e){const t=n=>{const{ServerError:r}=Ii(t),i=Cu(),{selectServer:o,selectedServer:a}=n;return R.useEffect(()=>{i.serverId&&o(i.serverId)},[i.serverId,o]),a?Uq(a)?m.jsx(r,{}):m.jsx(e,{...n}):m.jsx(Ju,{children:m.jsx(Ho,{loading:!0})})};return t}const c9=l9(R.memo(({selectedServer:e,settings:t})=>{const{buildShlinkApiClient:n,TagColorsStorage:r,ShlinkWebComponent:i,ServerError:o}=Ii(c9);if(!QS(e))return m.jsx(o,{});const a=`/server/${e.id}`;return m.jsx(i,{serverVersion:e.version,apiClient:n(e),settings:t,routesPrefix:a,tagColorsStorage:r,createNotFound:s=>m.jsx(ND,{to:`${a}${s}`,children:"List short URLs"})})})),b6e=Di(c9,["buildShlinkApiClient","TagColorsStorage","ShlinkWebComponent","ServerError"]),_6e=(e,t)=>{e.constant("window",window),e.constant("console",console),e.constant("fetch",window.fetch.bind(window)),e.service("HttpClient",foe,"fetch"),e.serviceFactory("ScrollToTop",()=>p6e),e.factory("MainHeader",h6e),e.serviceFactory("Home",()=>d6e),e.decorator("Home",Ay),e.decorator("Home",t(["servers"],["resetSelectedServer"])),e.serviceFactory("ShlinkWebComponent",()=>c6e),e.factory("ShlinkWebComponentContainer",b6e),e.decorator("ShlinkWebComponentContainer",t(["selectedServer","settings"],["selectServer"])),e.serviceFactory("ShlinkVersionsContainer",()=>y6e),e.decorator("ShlinkVersionsContainer",t(["selectedServer"])),e.serviceFactory("ErrorHandler",()=>u6e)},u9=()=>{const e=vo();return R.useCallback(()=>e(-1),[e])},f9=({isOpen:e,duplicatedServers:t,onDiscard:n,onSave:r})=>{const i=t.length>1;return m.jsxs(go,{centered:!0,isOpen:e,children:[m.jsxs(yo,{children:["Duplicated server",i&&"s"]}),m.jsxs($i,{children:[m.jsx("p",{children:i?"The next servers already exist:":"There is already a server with:"}),m.jsx("ul",{children:t.map(({url:o,apiKey:a},s)=>i?m.jsxs("li",{children:[m.jsx("b",{children:o})," - ",m.jsx("b",{children:a})]},s):m.jsxs(R.Fragment,{children:[m.jsxs("li",{children:["URL: ",m.jsx("b",{children:o})]}),m.jsxs("li",{children:["API key: ",m.jsx("b",{children:a})]})]},s))}),m.jsxs("span",{children:[i?"Do you want to ignore duplicated servers":"Do you want to save this server anyway","?"]})]}),m.jsxs(as,{children:[m.jsx(Ke,{color:"link",onClick:n,children:i?"Ignore duplicates":"Discard"}),m.jsx(Ke,{color:"primary",onClick:r,children:"Save anyway"})]})]})},x6e=e=>t=>{t.preventDefault(),e()},d9=({onSubmit:e,initialValues:t,children:n,title:r})=>{const[i,o]=R.useState(""),[a,s]=R.useState(""),[l,c]=R.useState(""),f=x6e(()=>e({name:i,url:a,apiKey:l}));return R.useEffect(()=>{t&&(o(t.name),s(t.url),c(t.apiKey))},[t]),m.jsxs("form",{className:"server-form",name:"serverForm",onSubmit:f,children:[m.jsxs(xt,{className:"mb-3",title:r,children:[m.jsx(sv,{value:i,onChange:o,children:"Name"}),m.jsx(sv,{type:"url",value:a,onChange:s,children:"URL"}),m.jsx(sv,{value:l,onChange:c,children:"API key"})]}),m.jsx("div",{className:"text-end",children:n})]})},KR=4e3,YR=({type:e})=>m.jsx("div",{className:"mt-3",children:m.jsxs(er,{type:e,children:[e==="success"&&"Servers properly imported. You can now select one from the list :)",e==="error"&&"The servers could not be imported. Make sure the format is correct."]})}),h9=({servers:e,createServers:t})=>{const{ImportServersBtn:n,useTimeoutToggle:r}=Ii(h9),i=vo(),o=u9(),a=!!Object.keys(e).length,[s,l]=r(!1,KR),[c,f]=r(!1,KR),[d,p]=qt(),[v,g]=R.useState(),y=R.useCallback(x=>{const _=NE();t([{...x,id:_}]),i(`/server/${_}`)},[t,i]);return R.useEffect(()=>{if(!v)return;Object.values(e).some(({url:_,apiKey:b})=>(v==null?void 0:v.url)===_&&(v==null?void 0:v.apiKey)===b)?p():y(v)},[y,v,e,p]),m.jsxs(Ju,{children:[m.jsxs(d9,{title:m.jsx("h5",{className:"mb-0",children:"Add new server"}),onSubmit:g,children:[!a&&m.jsx(n,{tooltipPlacement:"top",onImport:l,onImportError:f}),a&&m.jsx(Ke,{outline:!0,onClick:o,children:"Cancel"}),m.jsx(Ke,{outline:!0,color:"primary",className:"ms-2",children:"Create server"})]}),s&&m.jsx(YR,{type:"success"}),c&&m.jsx(YR,{type:"error"}),m.jsx(f9,{isOpen:d,duplicatedServers:v?[v]:[],onDiscard:o,onSave:()=>v&&y(v)})]})},w6e=Di(h9,["ImportServersBtn","useTimeoutToggle"]),p9=({server:e,className:t,children:n,textClassName:r})=>{const{DeleteServerModal:i}=Ii(p9),[o,,a,s]=qt();return m.jsxs(m.Fragment,{children:[m.jsxs("button",{type:"button",className:Ce(t,"p-0 bg-transparent border-0"),onClick:a,children:[!n&&m.jsx(je,{fixedWidth:!0,icon:JS}),m.jsx("span",{className:r,children:n??"Remove this server"})]}),m.jsx(i,{server:e,isOpen:o,toggle:s})]})},O6e=Di(p9,["DeleteServerModal"]),S6e=({server:e,toggle:t,isOpen:n,deleteServer:r,redirectHome:i=!0})=>{const o=vo(),a=R.useRef(!1),s=()=>{a.current=!0,t()},l=()=>{a.current&&(r(e),i&&o("/"))};return m.jsxs(go,{isOpen:n,toggle:t,centered:!0,onClosed:l,children:[m.jsx(yo,{toggle:t,className:"text-danger",children:"Remove server"}),m.jsxs($i,{children:[m.jsxs("p",{children:["Are you sure you want to remove ",m.jsx("b",{children:e?e.name:""}),"?"]}),m.jsx("p",{children:m.jsx("i",{children:"No data will be deleted, only the access to this server will be removed from this device. You can create it again at any moment."})})]}),m.jsxs(as,{children:[m.jsx(Ke,{color:"link",onClick:t,children:"Cancel"}),m.jsx(Ke,{color:"danger",onClick:s,children:"Delete"})]})]})},E6e=l9(({editServer:e,selectedServer:t,selectServer:n})=>{const r=u9(),{reconnect:i}=Au();if(!ld(t))return null;const o=a=>{e(t.id,a),i==="true"&&n(t.id),r()};return m.jsx(Ju,{children:m.jsxs(d9,{title:m.jsxs("h5",{className:"mb-0",children:['Edit "',t.name,'"']}),initialValues:t,onSubmit:o,children:[m.jsx(Ke,{outline:!0,className:"me-2",onClick:r,children:"Cancel"}),m.jsx(Ke,{outline:!0,color:"primary",children:"Save"})]})})}),C6e=Di(E6e,["ServerError"]),ZR=(e,{url:t,apiKey:n})=>e.some(r=>r.url===t&&r.apiKey===n),m9=({createServers:e,servers:t,children:n,onImport:r=()=>{},onImportError:i=()=>{},tooltipPlacement:o="bottom",className:a=""})=>{const{ServersImporter:s}=Ii(m9),l=ea(),[c,f]=R.useState([]),[d,,p,v]=qt(),g=R.useRef([]),y=R.useCallback(w=>{e(w),r()},[e,r]),x=R.useCallback(async({target:w})=>{var S;return s.importServersFromFile((S=w.files)==null?void 0:S[0]).then(E=>{g.current=E;const C=Object.values(t),T=E.filter(D=>ZR(C,D));!!T.length?(f(T),p()):y(E)}).then(()=>{w.value=null}).catch(i)},[y,i,t,s,p]),_=R.useCallback(()=>{y(g.current),v()},[y,v,g]),b=R.useCallback(()=>{y(g.current.filter(w=>!ZR(c,w))),v()},[y,c,v]);return m.jsxs(m.Fragment,{children:[m.jsxs(Ke,{outline:!0,id:"importBtn",className:a,onClick:()=>{var w;return(w=l.current)==null?void 0:w.click()},children:[m.jsx(je,{icon:sK,fixedWidth:!0})," ",n??"Import from file"]}),m.jsxs(br,{placement:o,target:"importBtn",children:["You can create servers by importing a CSV file with ",m.jsx("b",{children:"name"}),", ",m.jsx("b",{children:"apiKey"})," and ",m.jsx("b",{children:"url"})," columns."]}),m.jsx("input",{type:"file",accept:".csv",className:"d-none",ref:l,onChange:x,"aria-hidden":!0}),m.jsx(f9,{isOpen:d,duplicatedServers:c,onDiscard:b,onSave:_})]})},P6e=Di(m9,["ServersImporter"]),v9=({servers:e,selectedServer:t})=>{const{DeleteServerButton:n}=Ii(v9);return m.jsx(Ju,{children:m.jsxs("div",{className:"server-error__container flex-column",children:[m.jsxs(Ho,{className:"w-100 mb-3 mb-md-5",type:"error",fullWidth:!0,children:[!ld(t)&&"Could not find this Shlink server.",ld(t)&&m.jsxs(m.Fragment,{children:[m.jsx("p",{children:"Oops! Could not connect to this Shlink server."}),"Make sure you have internet connection, and the server is properly configured and on-line."]})]}),m.jsx(n9,{servers:Object.values(e),children:m.jsxs("p",{className:"mb-md-3",children:["These are the Shlink servers currently configured. Choose one of them or ",m.jsx(St,{to:"/server/create",children:"add a new one"}),"."]})}),ld(t)&&m.jsx("div",{className:"container mt-3 mt-md-5",children:m.jsxs("p",{className:"fs-5 fw-normal lh-sm",children:["Alternatively, if you think you may have miss-configured this server, you can ",m.jsx(n,{server:t,className:"server-error__delete-btn",children:"remove it"})," or ",m.jsx(St,{to:`/server/${t.id}/edit?reconnect=true`,children:"edit it"}),"."]})})]})})},T6e=Di(v9,["DeleteServerButton"]),j6e=4e3,g9=({servers:e})=>{const{ServersExporter:t,ImportServersBtn:n,useTimeoutToggle:r,ManageServersRow:i}=Ii(g9),o=Object.values(e),[a,s]=R.useState(o),l=p=>s(o.filter(({name:v,url:g})=>`${v} ${g}`.toLowerCase().match(p.toLowerCase()))),c=a.some(({autoConnect:p})=>!!p),[f,d]=r(!1,j6e);return R.useEffect(()=>{s(Object.values(e))},[e]),m.jsxs(Ju,{children:[m.jsx(cp,{className:"mb-3",onChange:l}),m.jsxs(Kn,{className:"mb-3",children:[m.jsxs("div",{className:"col-md-6 d-flex d-md-block mb-2 mb-md-0",children:[m.jsx(n,{className:"flex-fill",onImportError:d,children:"Import servers"}),o.length>0&&m.jsxs(Ke,{outline:!0,className:"ms-2 flex-fill",onClick:async()=>t.exportServers(),children:[m.jsx(je,{icon:Y6,fixedWidth:!0})," Export servers"]})]}),m.jsx("div",{className:"col-md-6 text-md-end d-flex d-md-block",children:m.jsxs(Ke,{outline:!0,color:"primary",className:"flex-fill",tag:St,to:"/server/create",children:[m.jsx(je,{icon:ep,fixedWidth:!0})," Add a server"]})})]}),m.jsx(xt,{children:m.jsxs("table",{className:"table table-hover responsive-table mb-0",children:[m.jsx("thead",{className:"responsive-table__header",children:m.jsxs("tr",{children:[c&&m.jsx("th",{style:{width:"50px"},children:m.jsx("span",{className:"sr-only",children:"Auto-connect"})}),m.jsx("th",{children:"Name"}),m.jsx("th",{children:"Base URL"}),m.jsx("th",{children:m.jsx("span",{className:"sr-only",children:"Options"})})]})}),m.jsxs("tbody",{children:[!a.length&&m.jsx("tr",{className:"text-center",children:m.jsx("td",{colSpan:4,children:"No servers found."})}),a.map(p=>m.jsx(i,{server:p,hasAutoConnect:c},p.id))]})]})}),f&&m.jsx("div",{className:"mt-3",children:m.jsx(er,{type:"error",children:"The servers could not be imported. Make sure the format is correct."})})]})},A6e=Di(g9,["ServersExporter","ImportServersBtn","useTimeoutToggle","ManageServersRow"]),y9=({server:e,hasAutoConnect:t})=>{const{ManageServersRowDropdown:n}=Ii(y9);return m.jsxs("tr",{className:"responsive-table__row",children:[t&&m.jsx("td",{className:"responsive-table__cell","data-th":"Auto-connect",children:e.autoConnect&&m.jsxs(m.Fragment,{children:[m.jsx(je,{icon:Gd,className:"text-primary",id:"autoConnectIcon"}),m.jsx(br,{target:"autoConnectIcon",placement:"right",children:"Auto-connect to this server"})]})}),m.jsx("th",{className:"responsive-table__cell","data-th":"Name",children:m.jsx(St,{to:`/server/${e.id}`,children:e.name})}),m.jsx("td",{className:"responsive-table__cell","data-th":"Base URL",children:e.url}),m.jsx("td",{className:"responsive-table__cell text-end",children:m.jsx(n,{server:e})})]})},k6e=Di(y9,["ManageServersRowDropdown"]),b9=({server:e,setAutoConnect:t})=>{const{DeleteServerModal:n}=Ii(b9),[r,,i,o]=qt(),a=`/server/${e.id}`,{autoConnect:s}=e,l=s?oK:_se;return m.jsxs(c0,{minWidth:s?210:170,children:[m.jsxs(Ne,{tag:St,to:a,children:[m.jsx(je,{icon:rK,fixedWidth:!0})," Connect"]}),m.jsxs(Ne,{tag:St,to:`${a}/edit`,children:[m.jsx(je,{icon:eE,fixedWidth:!0})," Edit server"]}),m.jsxs(Ne,{onClick:()=>t(e,!s),children:[m.jsx(je,{icon:l,fixedWidth:!0})," ",s?"Do not a":"A","uto-connect"]}),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsxs(Ne,{className:"dropdown-item--danger",onClick:i,children:[m.jsx(je,{icon:JS,fixedWidth:!0})," Remove server"]}),m.jsx(n,{redirectHome:!1,server:e,isOpen:r,toggle:o})]})},N6e=Di(b9,["DeleteServerModal"]),_9=(e,t)=>ZD(e,t,{serializeError:n=>n}),M6e={},L6e=e=>"id"in e?e:{...e,id:NE()},R6e=e=>e.reduce((t,n)=>({...t,[n.id]:n}),{}),{actions:$6e,reducer:I6e}=Qt({name:"shlink/servers",initialState:M6e,reducers:{editServer:{prepare:(e,t)=>({payload:{serverId:e,serverData:t}}),reducer:(e,{payload:t})=>{const{serverId:n,serverData:r}=t;return e[n]?{...e,[n]:{...e[n],...r}}:e}},deleteServer:(e,{payload:t})=>(delete e[t.id],e),setAutoConnect:{prepare:({id:e},t)=>({payload:{serverId:e,autoConnect:t}}),reducer:(e,{payload:t})=>{const{serverId:n,autoConnect:r}=t;return e[n]?r?Object.fromEntries(Object.entries(e).map(([i,o])=>[i,{...o,autoConnect:i===n}])):{...e,[n]:{...e[n],autoConnect:r}}:e}},createServers:{prepare:e=>({payload:R6e(e.map(L6e))}),reducer:(e,{payload:t})=>({...e,...t})}}}),{editServer:D6e,deleteServer:F6e,setAutoConnect:B6e,createServers:x9}=$6e,U6e=I6e,z6e=e=>Array.isArray(e)?e.filter(V6):[],V6e=e=>_9("shlink/remoteServers/fetchServers",async(t,{dispatch:n})=>{const r=await e.jsonRequest(`${Vv.homepage}/servers.json`),i=z6e(r);n(x9(i))}),TP="shlink/selectedServer",W6e="1.0.0",H6e="999.999.999",G6e="latest",q6e=e=>s9(e===G6e?H6e:e,W6e),K6e=QD(e=>`${e.id}_${e.url}_${e.apiKey}`,async(e,t)=>t().then(({version:n})=>({version:q6e(n),printableVersion:a9(n)}))),XR=null,jP=un(`${TP}/resetSelectedServer`),Y6e=e=>_9(`${TP}/selectServer`,async(t,{dispatch:n,getState:r})=>{n(jP());const{servers:i}=r(),o=i[t];if(!o)return{serverNotFound:!0};try{const a=e(o),{version:s,printableVersion:l}=await K6e(o,()=>a.health());return{...o,version:s,printableVersion:l}}catch{return{...o,serverNotReachable:!0}}}),Z6e=e=>Qt({name:TP,initialState:XR,reducers:{},extraReducers:t=>{t.addCase(jP,()=>XR),t.addCase(e.fulfilled,(n,{payload:r})=>r)}}),X6e=({servers:e,selectedServer:t})=>{const n=Object.values(e),r=()=>n.length===0?m.jsxs(Ne,{tag:St,to:"/server/create",children:[m.jsx(je,{icon:ep})," ",m.jsx("span",{className:"ms-1",children:"Add a server"})]}):m.jsxs(m.Fragment,{children:[n.map(({name:i,id:o})=>m.jsx(Ne,{tag:St,to:`/server/${o}`,active:zq(t)===o,children:i},o)),m.jsx(Ne,{divider:!0,tag:"hr"}),m.jsxs(Ne,{tag:St,to:"/manage-servers",children:[m.jsx(je,{icon:eA})," ",m.jsx("span",{className:"ms-1",children:"Manage servers"})]})]});return m.jsxs(lp,{nav:!0,inNavbar:!0,children:[m.jsxs(ju,{nav:!0,caret:!0,children:[m.jsx(je,{icon:eA})," ",m.jsx("span",{className:"ms-1",children:"Servers"})]}),m.jsx(Tu,{end:!0,style:{right:0},children:r()})]})},Q6e=({document:e},t,n)=>{const r=e.createElement("a");r.setAttribute("href",t),r.setAttribute("download",n),r.style.visibility="hidden",e.body.appendChild(r),r.click(),e.body.removeChild(r)},J6e=(e,t,n)=>{const r=new Blob([t],{type:"text/csv;charset=utf-8;"}),i=URL.createObjectURL(r);Q6e(e,i,n)},eIe="shlink-servers.csv";class tIe{constructor(t,n,r){Il(this,"exportServers",async()=>{const t=Object.values(this.storage.get("servers")??{}).map(Vq);try{const n=this.jsonToCsv(t);J6e(this.window,n,eIe)}catch(n){console.error(n)}});this.storage=t,this.window=n,this.jsonToCsv=r}}const nIe=e=>typeof e.url=="string"&&typeof e.apiKey=="string"&&typeof e.name=="string",rIe=e=>Array.isArray(e)&&e.every(nIe);class iIe{constructor(t){this.csvToJson=t}async importServersFromFile(t){if(!t)throw new Error("No file provided");const n=await t.text(),r=await this.csvToJson(n);if(!rIe(r))throw new Error("Provided file does not have the right format.");return r}}const oIe=(e,t)=>{e.factory("ManageServers",A6e),e.decorator("ManageServers",Ay),e.decorator("ManageServers",t(["selectedServer","servers"],["resetSelectedServer"])),e.factory("ManageServersRow",k6e),e.factory("ManageServersRowDropdown",N6e),e.decorator("ManageServersRowDropdown",t(null,["setAutoConnect"])),e.factory("CreateServer",w6e),e.decorator("CreateServer",Ay),e.decorator("CreateServer",t(["selectedServer","servers"],["createServers","resetSelectedServer"])),e.factory("EditServer",C6e),e.decorator("EditServer",t(["selectedServer"],["editServer","selectServer","resetSelectedServer"])),e.serviceFactory("ServersDropdown",()=>X6e),e.decorator("ServersDropdown",t(["servers","selectedServer"])),e.serviceFactory("DeleteServerModal",()=>S6e),e.decorator("DeleteServerModal",t(null,["deleteServer"])),e.factory("DeleteServerButton",O6e),e.factory("ImportServersBtn",P6e),e.decorator("ImportServersBtn",t(["servers"],["createServers"])),e.factory("ServerError",T6e),e.decorator("ServerError",t(["servers","selectedServer"])),e.service("ServersImporter",iIe,"csvToJson"),e.service("ServersExporter",tIe,"Storage","window","jsonToCsv"),e.serviceFactory("selectServer",Y6e,"buildShlinkApiClient","loadMercureInfo"),e.serviceFactory("createServers",()=>x9),e.serviceFactory("deleteServer",()=>F6e),e.serviceFactory("editServer",()=>D6e),e.serviceFactory("setAutoConnect",()=>B6e),e.serviceFactory("fetchServers",V6e,"HttpClient"),e.serviceFactory("resetSelectedServer",()=>jP),e.serviceFactory("selectedServerReducerCreator",Z6e,"selectServer"),e.serviceFactory("selectedServerReducer",n=>n.reducer,"selectedServerReducerCreator")},w9={field:"dateCreated",dir:"DESC"},aIe={realTimeUpdates:{enabled:!0},shortUrlCreation:{validateUrls:!1},ui:{theme:RE()},visits:{defaultInterval:"last30Days"},shortUrlsList:{defaultOrdering:w9}},{reducer:sIe,actions:lIe}=Qt({name:"shlink/settings",initialState:aIe,reducers:{setSettings:(e,{payload:t})=>m0(e,t)}}),{setSettings:cIe}=lIe,uIe=sIe,fIe=({settings:e,setSettings:t})=>m.jsx(Ju,{children:m.jsx(gse,{settings:e,updateSettings:t,defaultShortUrlsListOrdering:w9})}),dIe=(e,t)=>{e.serviceFactory("Settings",()=>fIe),e.decorator("Settings",Ay),e.decorator("Settings",t(["settings"],["setSettings","resetSelectedServer"])),e.serviceFactory("setSettings",()=>cIe)};var hIe=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(r,i,o){n.o(r,i)||Object.defineProperty(r,i,{enumerable:!0,get:o})},n.r=function(r){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},n.t=function(r,i){if(1&i&&(r=n(r)),8&i||4&i&&typeof r=="object"&&r&&r.__esModule)return r;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:r}),2&i&&typeof r!="string")for(var a in r)n.d(o,a,(function(s){return r[s]}).bind(null,a));return o},n.n=function(r){var i=r&&r.__esModule?function(){return r.default}:function(){return r};return n.d(i,"a",i),i},n.o=function(r,i){return Object.prototype.hasOwnProperty.call(r,i)},n.p="",n(n.s=32)}([function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch{typeof window=="object"&&(n=window)}e.exports=n},function(e,t,n){var r=n(6),i=Object.keys||function(g){var y=[];for(var x in g)y.push(x);return y};e.exports=d;var o=n(5);o.inherits=n(2);var a=n(23),s=n(14);o.inherits(d,a);for(var l=i(s.prototype),c=0;c @@ -819,4 +819,4 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `}},function(e,t,n){var r=n(65),i=n(73);e.exports=function(o,a){var s=i(o,a);return r(s)?s:void 0}},function(e,t,n){var r=n(19).Symbol;e.exports=r},function(e,t,n){var r=n(67),i=typeof self=="object"&&self&&self.Object===Object&&self,o=r||i||Function("return this")();e.exports=o},function(e,t){e.exports=function(n){var r=typeof n;return n!=null&&(r=="object"||r=="function")}},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){var r=n(30),i=n(76);e.exports=function(o){return typeof o=="symbol"||i(o)&&r(o)=="[object Symbol]"}},function(e,t,n){(function(r,i){var o=n(6);e.exports=S;var a,s=n(37);S.ReadableState=w,n(12).EventEmitter;var l=function(B,H){return B.listeners(H).length},c=n(24),f=n(7).Buffer,d=r.Uint8Array||function(){},p=n(5);p.inherits=n(2);var v=n(41),g=void 0;g=v&&v.debuglog?v.debuglog("stream"):function(){};var y,x=n(42),_=n(25);p.inherits(S,c);var b=["error","close","destroy","pause","resume"];function w(B,H){a=a||n(1),B=B||{};var ee=H instanceof a;this.objectMode=!!B.objectMode,ee&&(this.objectMode=this.objectMode||!!B.readableObjectMode);var q=B.highWaterMark,te=B.readableHighWaterMark,ie=this.objectMode?16:16384;this.highWaterMark=q||q===0?q:ee&&(te||te===0)?te:ie,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new x,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=B.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,B.encoding&&(y||(y=n(26).StringDecoder),this.decoder=new y(B.encoding),this.encoding=B.encoding)}function S(B){if(a=a||n(1),!(this instanceof S))return new S(B);this._readableState=new w(B,this),this.readable=!0,B&&(typeof B.read=="function"&&(this._read=B.read),typeof B.destroy=="function"&&(this._destroy=B.destroy)),c.call(this)}function E(B,H,ee,q,te){var ie,ae=B._readableState;return H===null?(ae.reading=!1,function(fe,j){if(!j.ended){if(j.decoder){var k=j.decoder.end();k&&k.length&&(j.buffer.push(k),j.length+=j.objectMode?1:k.length)}j.ended=!0,D(fe)}}(B,ae)):(te||(ie=function(fe,j){var k;return function(U){return f.isBuffer(U)||U instanceof d}(j)||typeof j=="string"||j===void 0||fe.objectMode||(k=new TypeError("Invalid non-string/buffer chunk")),k}(ae,H)),ie?B.emit("error",ie):ae.objectMode||H&&H.length>0?(typeof H=="string"||ae.objectMode||Object.getPrototypeOf(H)===f.prototype||(H=function(fe){return f.from(fe)}(H)),q?ae.endEmitted?B.emit("error",new Error("stream.unshift() after end event")):C(B,ae,H,!0):ae.ended?B.emit("error",new Error("stream.push() after EOF")):(ae.reading=!1,ae.decoder&&!ee?(H=ae.decoder.write(H),ae.objectMode||H.length!==0?C(B,ae,H,!1):I(B,ae)):C(B,ae,H,!1))):q||(ae.reading=!1)),function(fe){return!fe.ended&&(fe.needReadable||fe.lengthH.highWaterMark&&(H.highWaterMark=function(ee){return ee>=T?ee=T:(ee--,ee|=ee>>>1,ee|=ee>>>2,ee|=ee>>>4,ee|=ee>>>8,ee|=ee>>>16,ee++),ee}(B)),B<=H.length?B:H.ended?H.length:(H.needReadable=!0,0))}function D(B){var H=B._readableState;H.needReadable=!1,H.emittedReadable||(g("emitReadable",H.flowing),H.emittedReadable=!0,H.sync?o.nextTick(N,B):N(B))}function N(B){g("emit readable"),B.emit("readable"),X(B)}function I(B,H){H.readingMore||(H.readingMore=!0,o.nextTick(F,B,H))}function F(B,H){for(var ee=H.length;!H.reading&&!H.flowing&&!H.ended&&H.length=H.length?(ee=H.decoder?H.buffer.join(""):H.buffer.length===1?H.buffer.head.data:H.buffer.concat(H.length),H.buffer.clear()):ee=function(q,te,ie){var ae;return qY.length?Y.length:fe;if(oe===Y.length?J+=Y:J+=Y.slice(0,fe),(fe-=oe)==0){oe===Y.length?(++U,k.next?j.head=k.next:j.head=j.tail=null):(j.head=k,k.data=Y.slice(oe));break}++U}return j.length-=U,J}(q,te):function(fe,j){var k=f.allocUnsafe(fe),U=j.head,J=1;for(U.data.copy(k),fe-=U.data.length;U=U.next;){var Y=U.data,oe=fe>Y.length?Y.length:fe;if(Y.copy(k,k.length-fe,0,oe),(fe-=oe)==0){oe===Y.length?(++J,U.next?j.head=U.next:j.head=j.tail=null):(j.head=U,U.data=Y.slice(oe));break}++J}return j.length-=J,k}(q,te),ae}(B,H.buffer,H.decoder),ee);var ee}function ne(B){var H=B._readableState;if(H.length>0)throw new Error('"endReadable()" called on non-empty stream');H.endEmitted||(H.ended=!0,o.nextTick(Z,H,B))}function Z(B,H){B.endEmitted||B.length!==0||(B.endEmitted=!0,H.readable=!1,H.emit("end"))}function z(B,H){for(var ee=0,q=B.length;ee=H.highWaterMark||H.ended))return g("read: emitReadable",H.length,H.ended),H.length===0&&H.ended?ne(this):D(this),null;if((B=A(B,H))===0&&H.ended)return H.length===0&&ne(this),null;var q,te=H.needReadable;return g("need readable",te),(H.length===0||H.length-B0?Q(B,H):null)===null?(H.needReadable=!0,B=0):H.length-=B,H.length===0&&(H.ended||(H.needReadable=!0),ee!==B&&H.ended&&ne(this)),q!==null&&this.emit("data",q),q},S.prototype._read=function(B){this.emit("error",new Error("_read() is not implemented"))},S.prototype.pipe=function(B,H){var ee=this,q=this._readableState;switch(q.pipesCount){case 0:q.pipes=B;break;case 1:q.pipes=[q.pipes,B];break;default:q.pipes.push(B)}q.pipesCount+=1,g("pipe count=%d opts=%j",q.pipesCount,H);var te=H&&H.end===!1||B===i.stdout||B===i.stderr?oe:ie;function ie(){g("onend"),B.end()}q.endEmitted?o.nextTick(te):ee.once("end",te),B.on("unpipe",function he(Se,se){g("onunpipe"),Se===ee&&se&&se.hasUnpiped===!1&&(se.hasUnpiped=!0,g("cleanup"),B.removeListener("close",J),B.removeListener("finish",Y),B.removeListener("drain",ae),B.removeListener("error",U),B.removeListener("unpipe",he),ee.removeListener("end",ie),ee.removeListener("end",oe),ee.removeListener("data",k),fe=!0,!q.awaitDrain||B._writableState&&!B._writableState.needDrain||ae())});var ae=function(he){return function(){var Se=he._readableState;g("pipeOnDrain",Se.awaitDrain),Se.awaitDrain&&Se.awaitDrain--,Se.awaitDrain===0&&l(he,"data")&&(Se.flowing=!0,X(he))}}(ee);B.on("drain",ae);var fe=!1,j=!1;function k(he){g("ondata"),j=!1,B.write(he)!==!1||j||((q.pipesCount===1&&q.pipes===B||q.pipesCount>1&&z(q.pipes,B)!==-1)&&!fe&&(g("false write response, pause",ee._readableState.awaitDrain),ee._readableState.awaitDrain++,j=!0),ee.pause())}function U(he){g("onerror",he),oe(),B.removeListener("error",U),l(B,"error")===0&&B.emit("error",he)}function J(){B.removeListener("finish",Y),oe()}function Y(){g("onfinish"),B.removeListener("close",J),oe()}function oe(){g("unpipe"),ee.unpipe(B)}return ee.on("data",k),function(he,Se,se){if(typeof he.prependListener=="function")return he.prependListener(Se,se);he._events&&he._events[Se]?s(he._events[Se])?he._events[Se].unshift(se):he._events[Se]=[se,he._events[Se]]:he.on(Se,se)}(B,"error",U),B.once("close",J),B.once("finish",Y),B.emit("pipe",ee),q.flowing||(g("pipe resume"),ee.resume()),B},S.prototype.unpipe=function(B){var H=this._readableState,ee={hasUnpiped:!1};if(H.pipesCount===0)return this;if(H.pipesCount===1)return B&&B!==H.pipes?this:(B||(B=H.pipes),H.pipes=null,H.pipesCount=0,H.flowing=!1,B&&B.emit("unpipe",this,ee),this);if(!B){var q=H.pipes,te=H.pipesCount;H.pipes=null,H.pipesCount=0,H.flowing=!1;for(var ie=0;ie>5==6?2:g>>4==14?3:g>>3==30?4:g>>6==2?-1:-2}function s(g){var y=this.lastTotal-this.lastNeed,x=function(_,b,w){if((192&b[0])!=128)return _.lastNeed=0,"�";if(_.lastNeed>1&&b.length>1){if((192&b[1])!=128)return _.lastNeed=1,"�";if(_.lastNeed>2&&b.length>2&&(192&b[2])!=128)return _.lastNeed=2,"�"}}(this,g);return x!==void 0?x:this.lastNeed<=g.length?(g.copy(this.lastChar,y,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(g.copy(this.lastChar,y,0,g.length),void(this.lastNeed-=g.length))}function l(g,y){if((g.length-y)%2==0){var x=g.toString("utf16le",y);if(x){var _=x.charCodeAt(x.length-1);if(_>=55296&&_<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=g[g.length-2],this.lastChar[1]=g[g.length-1],x.slice(0,-1)}return x}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=g[g.length-1],g.toString("utf16le",y,g.length-1)}function c(g){var y=g&&g.length?this.write(g):"";if(this.lastNeed){var x=this.lastTotal-this.lastNeed;return y+this.lastChar.toString("utf16le",0,x)}return y}function f(g,y){var x=(g.length-y)%3;return x===0?g.toString("base64",y):(this.lastNeed=3-x,this.lastTotal=3,x===1?this.lastChar[0]=g[g.length-1]:(this.lastChar[0]=g[g.length-2],this.lastChar[1]=g[g.length-1]),g.toString("base64",y,g.length-x))}function d(g){var y=g&&g.length?this.write(g):"";return this.lastNeed?y+this.lastChar.toString("base64",0,3-this.lastNeed):y}function p(g){return g.toString(this.encoding)}function v(g){return g&&g.length?this.write(g):""}t.StringDecoder=o,o.prototype.write=function(g){if(g.length===0)return"";var y,x;if(this.lastNeed){if((y=this.fillLast(g))===void 0)return"";x=this.lastNeed,this.lastNeed=0}else x=0;return x=0?(C>0&&(b.lastNeed=C-1),C):--E=0?(C>0&&(b.lastNeed=C-2),C):--E=0?(C>0&&(C===2?C=0:b.lastNeed=C-3),C):0}(this,g,y);if(!this.lastNeed)return g.toString("utf8",y);this.lastTotal=x;var _=g.length-(x-this.lastNeed);return g.copy(this.lastChar,0,_),g.toString("utf8",y,_)},o.prototype.fillLast=function(g){if(this.lastNeed<=g.length)return g.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);g.copy(this.lastChar,this.lastTotal-this.lastNeed,0,g.length),this.lastNeed-=g.length}},function(e,t,n){e.exports=o;var r=n(1),i=n(5);function o(l){if(!(this instanceof o))return new o(l);r.call(this,l),this._transformState={afterTransform:(function(c,f){var d=this._transformState;d.transforming=!1;var p=d.writecb;if(!p)return this.emit("error",new Error("write callback called multiple times"));d.writechunk=null,d.writecb=null,f!=null&&this.push(f),p(c);var v=this._readableState;v.reading=!1,(v.needReadable||v.length-1&&a.push(i[s]);return a},t.trimLeft=String.prototype.trimLeft?function(i){return i.trimLeft()}:function(i){return i.replace(/^\s+/,"")},t.trimRight=String.prototype.trimRight?function(i){return i.trimRight()}:function(i){return i.replace(/\s+$/,"")}}).call(this,n(3).Buffer)},function(e,t,n){var r=this&&this.__extends||function(){var o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,s){a.__proto__=s}||function(a,s){for(var l in s)s.hasOwnProperty(l)&&(a[l]=s[l])};return function(a,s){function l(){this.constructor=a}o(a,s),a.prototype=s===null?Object.create(s):(l.prototype=s.prototype,new l)}}();Object.defineProperty(t,"__esModule",{value:!0});var i=function(o){function a(s,l,c){var f=o.call(this,"Error: "+s+". JSON Line number: "+l+(c?" near: "+c:""))||this;return f.err=s,f.line=l,f.extra=c,f.name="CSV Parse Error",f}return r(a,o),a.column_mismatched=function(s,l){return new a("column_mismatched",s,l)},a.unclosed_quote=function(s,l){return new a("unclosed_quote",s,l)},a.fromJSON=function(s){return new a(s.err,s.line,s.extra)},a.prototype.toJSON=function(){return{err:this.err,line:this.line,extra:this.extra}},a}(Error);t.default=i},function(e,t,n){var r=n(18),i=n(68),o=n(69),a=r?r.toStringTag:void 0;e.exports=function(s){return s==null?s===void 0?"[object Undefined]":"[object Null]":a&&a in Object(s)?i(s):o(s)}},function(e,t){e.exports=function(n,r){return n===r||n!=n&&r!=r}},function(e,t,n){e.exports=n(33)},function(e,t,n){var r=n(34),i=function(o,a){return new r.Converter(o,a)};i.csv=i,i.Converter=r.Converter,e.exports=i},function(e,t,n){(function(r){var i=this&&this.__extends||function(){var v=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,y){g.__proto__=y}||function(g,y){for(var x in y)y.hasOwnProperty(x)&&(g[x]=y[x])};return function(g,y){function x(){this.constructor=g}v(g,y),g.prototype=y===null?Object.create(y):(x.prototype=y.prototype,new x)}}(),o=this&&this.__importDefault||function(v){return v&&v.__esModule?v:{default:v}};Object.defineProperty(t,"__esModule",{value:!0});var a=n(36),s=n(50),l=n(51),c=o(n(15)),f=n(52),d=n(105),p=function(v){function g(y,x){x===void 0&&(x={});var _=v.call(this,x)||this;return _.options=x,_.params=s.mergeParams(y),_.runtime=l.initParseRuntime(_),_.result=new d.Result(_),_.processor=new f.ProcessorLocal(_),_.once("error",function(b){r(function(){_.result.processError(b),_.emit("done",b)})}),_.once("done",function(){_.processor.destroy()}),_}return i(g,v),g.prototype.preRawData=function(y){return this.runtime.preRawDataHook=y,this},g.prototype.preFileLine=function(y){return this.runtime.preFileLineHook=y,this},g.prototype.subscribe=function(y,x,_){return this.parseRuntime.subscribe={onNext:y,onError:x,onCompleted:_},this},g.prototype.fromFile=function(y,x){var _=this,b=n(!function(){var w=new Error("Cannot find module 'fs'");throw w.code="MODULE_NOT_FOUND",w}());return b.exists(y,function(w){w?b.createReadStream(y,x).pipe(_):_.emit("error",new Error("File does not exist. Check to make sure the file path to your csv is correct."))}),this},g.prototype.fromStream=function(y){return y.pipe(this),this},g.prototype.fromString=function(y){y.toString();var x=new a.Readable,_=0;return x._read=function(b){if(_>=y.length)this.push(null);else{var w=y.substr(_,b);this.push(w),_+=b}},this.fromStream(x)},g.prototype.then=function(y,x){var _=this;return new c.default(function(b,w){_.parseRuntime.then={onfulfilled:function(S){b(y?y(S):S)},onrejected:function(S){x?b(x(S)):w(S)}}})},Object.defineProperty(g.prototype,"parseParam",{get:function(){return this.params},enumerable:!0,configurable:!0}),Object.defineProperty(g.prototype,"parseRuntime",{get:function(){return this.runtime},enumerable:!0,configurable:!0}),g.prototype._transform=function(y,x,_){var b=this;this.processor.process(y).then(function(w){if(w.length>0)return b.runtime.started=!0,b.result.processResult(w)}).then(function(){b.emit("drained"),_()},function(w){b.runtime.hasError=!0,b.runtime.error=w,b.emit("error",w),_()})},g.prototype._flush=function(y){var x=this;this.processor.flush().then(function(_){if(_.length>0)return x.result.processResult(_)}).then(function(){x.processEnd(y)},function(_){x.emit("error",_),y()})},g.prototype.processEnd=function(y){this.result.endProcess(),this.emit("done"),y()},Object.defineProperty(g.prototype,"parsedLineNumber",{get:function(){return this.runtime.parsedLineNumber},enumerable:!0,configurable:!0}),g}(a.Transform);t.Converter=p}).call(this,n(11).setImmediate)},function(e,t,n){(function(r,i){(function(o,a){if(!o.setImmediate){var s,l=1,c={},f=!1,d=o.document,p=Object.getPrototypeOf&&Object.getPrototypeOf(o);p=p&&p.setTimeout?p:o,{}.toString.call(o.process)==="[object process]"?s=function(y){i.nextTick(function(){g(y)})}:function(){if(o.postMessage&&!o.importScripts){var y=!0,x=o.onmessage;return o.onmessage=function(){y=!1},o.postMessage("","*"),o.onmessage=x,y}}()?function(){var y="setImmediate$"+Math.random()+"$",x=function(_){_.source===o&&typeof _.data=="string"&&_.data.indexOf(y)===0&&g(+_.data.slice(y.length))};o.addEventListener?o.addEventListener("message",x,!1):o.attachEvent("onmessage",x),s=function(_){o.postMessage(y+_,"*")}}():o.MessageChannel?function(){var y=new MessageChannel;y.port1.onmessage=function(x){g(x.data)},s=function(x){y.port2.postMessage(x)}}():d&&"onreadystatechange"in d.createElement("script")?function(){var y=d.documentElement;s=function(x){var _=d.createElement("script");_.onreadystatechange=function(){g(x),_.onreadystatechange=null,y.removeChild(_),_=null},y.appendChild(_)}}():s=function(y){setTimeout(g,0,y)},p.setImmediate=function(y){typeof y!="function"&&(y=new Function(""+y));for(var x=new Array(arguments.length-1),_=0;_"u"?r===void 0?this:r:self)}).call(this,n(0),n(4))},function(e,t,n){e.exports=i;var r=n(12).EventEmitter;function i(){r.call(this)}n(2)(i,r),i.Readable=n(13),i.Writable=n(46),i.Duplex=n(47),i.Transform=n(48),i.PassThrough=n(49),i.Stream=i,i.prototype.pipe=function(o,a){var s=this;function l(y){o.writable&&o.write(y)===!1&&s.pause&&s.pause()}function c(){s.readable&&s.resume&&s.resume()}s.on("data",l),o.on("drain",c),o._isStdio||a&&a.end===!1||(s.on("end",d),s.on("close",p));var f=!1;function d(){f||(f=!0,o.end())}function p(){f||(f=!0,typeof o.destroy=="function"&&o.destroy())}function v(y){if(g(),r.listenerCount(this,"error")===0)throw y}function g(){s.removeListener("data",l),o.removeListener("drain",c),s.removeListener("end",d),s.removeListener("close",p),s.removeListener("error",v),o.removeListener("error",v),s.removeListener("end",g),s.removeListener("close",g),o.removeListener("close",g)}return s.on("error",v),o.on("error",v),s.on("end",g),s.on("close",g),o.on("close",g),o.emit("pipe",s),o}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(r){return n.call(r)=="[object Array]"}},function(e,t,n){t.byteLength=function(p){var v=c(p),g=v[0],y=v[1];return 3*(g+y)/4-y},t.toByteArray=function(p){for(var v,g=c(p),y=g[0],x=g[1],_=new o(3*(y+x)/4-x),b=0,w=x>0?y-4:y,S=0;S>16&255,_[b++]=v>>8&255,_[b++]=255&v;return x===2&&(v=i[p.charCodeAt(S)]<<2|i[p.charCodeAt(S+1)]>>4,_[b++]=255&v),x===1&&(v=i[p.charCodeAt(S)]<<10|i[p.charCodeAt(S+1)]<<4|i[p.charCodeAt(S+2)]>>2,_[b++]=v>>8&255,_[b++]=255&v),_},t.fromByteArray=function(p){for(var v,g=p.length,y=g%3,x=[],_=0,b=g-y;_b?b:_+16383));return y===1?(v=p[g-1],x.push(r[v>>2]+r[v<<4&63]+"==")):y===2&&(v=(p[g-2]<<8)+p[g-1],x.push(r[v>>10]+r[v>>4&63]+r[v<<2&63]+"=")),x.join("")};for(var r=[],i=[],o=typeof Uint8Array<"u"?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,l=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var g=p.indexOf("=");return g===-1&&(g=v),[g,g===v?0:4-g%4]}function f(p){return r[p>>18&63]+r[p>>12&63]+r[p>>6&63]+r[63&p]}function d(p,v,g){for(var y,x=[],_=v;_>1,p=-7,v=i?a-1:0,g=i?-1:1,y=n[r+v];for(v+=g,s=y&(1<<-p)-1,y>>=-p,p+=c;p>0;s=256*s+n[r+v],v+=g,p-=8);for(l=s&(1<<-p)-1,s>>=-p,p+=o;p>0;l=256*l+n[r+v],v+=g,p-=8);if(s===0)s=1-d;else{if(s===f)return l?NaN:1/0*(y?-1:1);l+=Math.pow(2,o),s-=d}return(y?-1:1)*l*Math.pow(2,s-o)},t.write=function(n,r,i,o,a,s){var l,c,f,d=8*s-a-1,p=(1<>1,g=a===23?Math.pow(2,-24)-Math.pow(2,-77):0,y=o?0:s-1,x=o?1:-1,_=r<0||r===0&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(c=isNaN(r)?1:0,l=p):(l=Math.floor(Math.log(r)/Math.LN2),r*(f=Math.pow(2,-l))<1&&(l--,f*=2),(r+=l+v>=1?g/f:g*Math.pow(2,1-v))*f>=2&&(l++,f/=2),l+v>=p?(c=0,l=p):l+v>=1?(c=(r*f-1)*Math.pow(2,a),l+=v):(c=r*Math.pow(2,v-1)*Math.pow(2,a),l=0));a>=8;n[i+y]=255&c,y+=x,c/=256,a-=8);for(l=l<0;n[i+y]=255&l,y+=x,l/=256,d-=8);n[i+y-x]|=128*_}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(r){return n.call(r)=="[object Array]"}},function(e,t){},function(e,t,n){var r=n(7).Buffer,i=n(43);function o(a,s,l){a.copy(s,l)}e.exports=function(){function a(){(function(s,l){if(!(s instanceof l))throw new TypeError("Cannot call a class as a function")})(this,a),this.head=null,this.tail=null,this.length=0}return a.prototype.push=function(s){var l={data:s,next:null};this.length>0?this.tail.next=l:this.head=l,this.tail=l,++this.length},a.prototype.unshift=function(s){var l={data:s,next:this.head};this.length===0&&(this.tail=l),this.head=l,++this.length},a.prototype.shift=function(){if(this.length!==0){var s=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,s}},a.prototype.clear=function(){this.head=this.tail=null,this.length=0},a.prototype.join=function(s){if(this.length===0)return"";for(var l=this.head,c=""+l.data;l=l.next;)c+=s+l.data;return c},a.prototype.concat=function(s){if(this.length===0)return r.alloc(0);if(this.length===1)return this.head.data;for(var l=r.allocUnsafe(s>>>0),c=this.head,f=0;c;)o(c.data,l,f),f+=c.data.length,c=c.next;return l},a}(),i&&i.inspect&&i.inspect.custom&&(e.exports.prototype[i.inspect.custom]=function(){var a=i.inspect({length:this.length});return this.constructor.name+" "+a})},function(e,t){},function(e,t,n){(function(r){function i(o){try{if(!r.localStorage)return!1}catch{return!1}var a=r.localStorage[o];return a!=null&&String(a).toLowerCase()==="true"}e.exports=function(o,a){if(i("noDeprecation"))return o;var s=!1;return function(){if(!s){if(i("throwDeprecation"))throw new Error(a);i("traceDeprecation")?console.trace(a):console.warn(a),s=!0}return o.apply(this,arguments)}}}).call(this,n(0))},function(e,t,n){e.exports=o;var r=n(27),i=n(5);function o(a){if(!(this instanceof o))return new o(a);r.call(this,a)}i.inherits=n(2),i.inherits(o,r),o.prototype._transform=function(a,s,l){l(null,a)}},function(e,t,n){e.exports=n(14)},function(e,t,n){e.exports=n(1)},function(e,t,n){e.exports=n(13).Transform},function(e,t,n){e.exports=n(13).PassThrough},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.mergeParams=function(r){var i={delimiter:",",ignoreColumns:void 0,includeColumns:void 0,quote:'"',trim:!0,checkType:!1,ignoreEmpty:!1,noheader:!1,headers:void 0,flatKeys:!1,maxRowLength:0,checkColumn:!1,escape:'"',colParser:{},eol:void 0,alwaysSplitAtEOL:!1,output:"json",nullObject:!1,downstreamFormat:"line",needEmitAll:!0};for(var o in r||(r={}),r)r.hasOwnProperty(o)&&(Array.isArray(r[o])?i[o]=[].concat(r[o]):i[o]=r[o]);return i}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.initParseRuntime=function(r){var i=r.parseParam,o={needProcessIgnoreColumn:!1,needProcessIncludeColumn:!1,selectedColumns:void 0,ended:!1,hasError:!1,error:void 0,delimiter:r.parseParam.delimiter,eol:r.parseParam.eol,columnConv:[],headerType:[],headerTitle:[],headerFlag:[],headers:void 0,started:!1,parsedLineNumber:0,columnValueSetter:[]};return i.ignoreColumns&&(o.needProcessIgnoreColumn=!0),i.includeColumns&&(o.needProcessIncludeColumn=!0),o}},function(e,t,n){(function(r){var i=this&&this.__extends||function(){var x=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(_,b){_.__proto__=b}||function(_,b){for(var w in b)b.hasOwnProperty(w)&&(_[w]=b[w])};return function(_,b){function w(){this.constructor=_}x(_,b),_.prototype=b===null?Object.create(b):(w.prototype=b.prototype,new w)}}(),o=this&&this.__importDefault||function(x){return x&&x.__esModule?x:{default:x}};Object.defineProperty(t,"__esModule",{value:!0});var a=n(53),s=o(n(15)),l=n(54),c=o(n(16)),f=n(57),d=n(28),p=n(58),v=o(n(59)),g=o(n(29)),y=function(x){function _(){var b=x!==null&&x.apply(this,arguments)||this;return b.rowSplit=new p.RowSplit(b.converter),b.eolEmitted=!1,b._needEmitEol=void 0,b.headEmitted=!1,b._needEmitHead=void 0,b}return i(_,x),_.prototype.flush=function(){var b=this;if(this.runtime.csvLineBuffer&&this.runtime.csvLineBuffer.length>0){var w=this.runtime.csvLineBuffer;return this.runtime.csvLineBuffer=void 0,this.process(w,!0).then(function(S){return b.runtime.csvLineBuffer&&b.runtime.csvLineBuffer.length>0?s.default.reject(g.default.unclosed_quote(b.runtime.parsedLineNumber,b.runtime.csvLineBuffer.toString())):s.default.resolve(S)})}return s.default.resolve([])},_.prototype.destroy=function(){return s.default.resolve()},Object.defineProperty(_.prototype,"needEmitEol",{get:function(){return this._needEmitEol===void 0&&(this._needEmitEol=this.converter.listeners("eol").length>0),this._needEmitEol},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,"needEmitHead",{get:function(){return this._needEmitHead===void 0&&(this._needEmitHead=this.converter.listeners("header").length>0),this._needEmitHead},enumerable:!0,configurable:!0}),_.prototype.process=function(b,w){var S,E=this;return w===void 0&&(w=!1),S=w?b.toString():l.prepareData(b,this.converter.parseRuntime),s.default.resolve().then(function(){return E.runtime.preRawDataHook?E.runtime.preRawDataHook(S):S}).then(function(C){return C&&C.length>0?E.processCSV(C,w):s.default.resolve([])})},_.prototype.processCSV=function(b,w){var S=this,E=this.params,C=this.runtime;C.eol||c.default(b,C),this.needEmitEol&&!this.eolEmitted&&C.eol&&(this.converter.emit("eol",C.eol),this.eolEmitted=!0),E.ignoreEmpty&&!C.started&&(b=d.trimLeft(b));var T=f.stringToLines(b,C);return w?(T.lines.push(T.partial),T.partial=""):this.prependLeftBuf(d.bufFromString(T.partial)),T.lines.length>0?(C.preFileLineHook?this.runPreLineHook(T.lines):s.default.resolve(T.lines)).then(function(A){return C.started||S.runtime.headers?S.processCSVBody(A):S.processDataWithHead(A)}):s.default.resolve([])},_.prototype.processDataWithHead=function(b){if(this.params.noheader)this.params.headers?this.runtime.headers=this.params.headers:this.runtime.headers=[];else{for(var w="",S=[];b.length;){var E=w+b.shift(),C=this.rowSplit.parse(E);if(C.closed){S=C.cells,w="";break}w=E+c.default(E,this.runtime)}if(this.prependLeftBuf(d.bufFromString(w)),S.length===0)return[];this.params.headers?this.runtime.headers=this.params.headers:this.runtime.headers=S}return(this.runtime.needProcessIgnoreColumn||this.runtime.needProcessIncludeColumn)&&this.filterHeader(),this.needEmitHead&&!this.headEmitted&&(this.converter.emit("header",this.runtime.headers),this.headEmitted=!0),this.processCSVBody(b)},_.prototype.filterHeader=function(){if(this.runtime.selectedColumns=[],this.runtime.headers){for(var b=this.runtime.headers,w=0;w=T.length)N();else if(A.preFileLineHook){var I=T[D],F=A.preFileLineHook(I,A.parsedLineNumber+D);if(D++,F&&F.then)F.then(function(K){T[D-1]=K,C(T,A,D,N)});else{for(T[D-1]=F;D0?r.concat([d.csvLineBuffer,f]):f}(a,s);s.csvLineBuffer=void 0;var c=function(f,d){var p=f.length-1;if(128&f[p]){for(;(192&f[p])==128;)p--;p--}return p!=f.length-1?(d.csvLineBuffer=f.slice(p+1),f.slice(0,p+1)):f}(l,s).toString("utf8");return s.started===!1?o.default(c):c}}).call(this,n(3).Buffer)},function(e,t,n){(function(r){var i=n(56);e.exports=function(o){return typeof o=="string"&&o.charCodeAt(0)===65279?o.slice(1):r.isBuffer(o)&&i(o)&&o[0]===239&&o[1]===187&&o[2]===191?o.slice(3):o}}).call(this,n(3).Buffer)},function(e,t){e.exports=function(n){for(var r=0;r0),this._needEmitDelimiter},enumerable:!0,configurable:!0}),l.prototype.parse=function(c){if(c.length===0||this.conv.parseParam.ignoreEmpty&&c.trim().length===0)return{cells:[],closed:!0};var f=this.quote,d=this.trim;this.escape,(this.conv.parseRuntime.delimiter instanceof Array||this.conv.parseRuntime.delimiter.toLowerCase()==="auto")&&(this.conv.parseRuntime.delimiter=this.getDelimiter(c)),this.needEmitDelimiter&&!this.delimiterEmitted&&(this.conv.emit("delimiter",this.conv.parseRuntime.delimiter),this.delimiterEmitted=!0);var p=this.conv.parseRuntime.delimiter,v=c.split(p);if(f==="off"){if(d)for(var g=0;gd&&(p=v,d=g)}),p},l.prototype.isQuoteOpen=function(c){var f=this.quote,d=this.escape;return c[0]===f&&(c[1]!==f||c[1]===d&&(c[2]===f||c.length===2))},l.prototype.isQuoteClose=function(c){var f=this.quote,d=this.escape;this.conv.parseParam.trim&&(c=o.trimRight(c));for(var p=0,v=c.length-1;c[v]===f||c[v]===d;)v--,p++;return p%2!=0},l.prototype.escapeQuote=function(c){var f="es|"+this.quote+"|"+this.escape;this.cachedRegExp[f]===void 0&&(this.cachedRegExp[f]=new RegExp("\\"+this.escape+"\\"+this.quote,"g"));var d=this.cachedRegExp[f];return c.replace(d,this.quote)},l.prototype.parseMultiLines=function(c){for(var f=[],d="";c.length;){var p=d+c.shift(),v=this.parse(p);v.cells.length===0&&this.conv.parseParam.ignoreEmpty||(v.closed||this.conv.parseParam.alwaysSplitAtEOL?(this.conv.parseRuntime.selectedColumns?f.push(o.filterArray(v.cells,this.conv.parseRuntime.selectedColumns)):f.push(v.cells),d=""):d=p+(i.default(p,this.conv.parseRuntime)||` `))}return{rowsCells:f,partial:d}},l}();t.RowSplit=s},function(e,t,n){var r=this&&this.__importDefault||function(_){return _&&_.__esModule?_:{default:_}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(29)),o=r(n(60)),a=/^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$/;function s(_,b,w){if(b.parseParam.checkColumn&&b.parseRuntime.headers&&_.length!==b.parseRuntime.headers.length)throw i.default.column_mismatched(b.parseRuntime.parsedLineNumber+w);return function(S,E,C){for(var T=!1,A={},D=0,N=S.length;D-1){for(var C=b.split("."),T=!0;C.length>0;)if(C.shift().length===0){T=!1;break}!T||S.parseParam.colParser[b]&&S.parseParam.colParser[b].flat?S.parseRuntime.columnValueSetter[E]=d:S.parseRuntime.columnValueSetter[E]=p}else S.parseRuntime.columnValueSetter[E]=d;S.parseParam.nullObject===!0&&w==="null"&&(w=null),S.parseRuntime.columnValueSetter[E](_,b,w)}function d(_,b,w){_[b]=w}function p(_,b,w){o.default(_,b,w)}function v(_,b,w,S){return S.parseRuntime.headerType[w]?S.parseRuntime.headerType[w]:b.indexOf("number#!")>-1?S.parseRuntime.headerType[w]=g:b.indexOf("string#!")>-1?S.parseRuntime.headerType[w]=y:S.parseParam.checkType?S.parseRuntime.headerType[w]=x:S.parseRuntime.headerType[w]=y}function g(_){var b=parseFloat(_);return isNaN(b)?_:b}function y(_){return _.toString()}function x(_){var b=_.trim();return b===""?y(_):a.test(b)?g(_):b.length===5&&b.toLowerCase()==="false"||b.length===4&&b.toLowerCase()==="true"?function(w){var S=w.trim();return S.length!==5||S.toLowerCase()!=="false"}(_):b[0]==="{"&&b[b.length-1]==="}"||b[0]==="["&&b[b.length-1]==="]"?function(w){try{return JSON.parse(w)}catch{return w}}(_):y(_)}},function(e,t,n){var r=n(61);e.exports=function(i,o,a){return i==null?i:r(i,o,a)}},function(e,t,n){var r=n(62),i=n(74),o=n(103),a=n(20),s=n(104);e.exports=function(l,c,f,d){if(!a(l))return l;for(var p=-1,v=(c=i(c,l)).length,g=v-1,y=l;y!=null&&++p-1}},function(e,t,n){var r=n(9);e.exports=function(i,o){var a=this.__data__,s=r(a,i);return s<0?(++this.size,a.push([i,o])):a[s][1]=o,this}},function(e,t,n){var r=n(17)(n(19),"Map");e.exports=r},function(e,t,n){var r=n(10);e.exports=function(i){var o=r(this,i).delete(i);return this.size-=o?1:0,o}},function(e,t){e.exports=function(n){var r=typeof n;return r=="string"||r=="number"||r=="symbol"||r=="boolean"?n!=="__proto__":n===null}},function(e,t,n){var r=n(10);e.exports=function(i){return r(this,i).get(i)}},function(e,t,n){var r=n(10);e.exports=function(i){return r(this,i).has(i)}},function(e,t,n){var r=n(10);e.exports=function(i,o){var a=r(this,i),s=a.size;return a.set(i,o),this.size+=a.size==s?0:1,this}},function(e,t,n){var r=n(101);e.exports=function(i){return i==null?"":r(i)}},function(e,t,n){var r=n(18),i=n(102),o=n(21),a=n(22),s=r?r.prototype:void 0,l=s?s.toString:void 0;e.exports=function c(f){if(typeof f=="string")return f;if(o(f))return i(f,c)+"";if(a(f))return l?l.call(f):"";var d=f+"";return d=="0"&&1/f==-1/0?"-0":d}},function(e,t){e.exports=function(n,r){for(var i=-1,o=n==null?0:n.length,a=Array(o);++i-1&&r%1==0&&r0||this.converter.listeners("readable").length>0),this._needPushDownstream},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,"needEmitAll",{get:function(){return!!this.converter.parseRuntime.then&&this.converter.parseParam.needEmitAll},enumerable:!0,configurable:!0}),l.prototype.processResult=function(c){var f=this,d=this.converter.parseRuntime.parsedLineNumber;return this.needPushDownstream&&this.converter.parseParam.downstreamFormat==="array"&&d===0&&s(this.converter,"["+o.EOL),new i.default(function(p,v){f.needEmitLine?function g(y,x,_,b,w){if(_>=y.length)w();else if(x.parseRuntime.subscribe&&x.parseRuntime.subscribe.onNext){var S=x.parseRuntime.subscribe.onNext,E=y[_],C=S(E,x.parseRuntime.parsedLineNumber+_);if(_++,C&&C.then)C.then(function(){(function(A,D,N,I,F,K,W){F&&s(N,W),g(A,N,I,F,K)})(y,0,x,_,b,w,E)},w);else{for(b&&s(x,E);_new Promise(t=>{pIe().fromString(e).then(t)}),vIe=new x5,gIe=e=>vIe.parse(e),yIe="shlink",QR=e=>`${yIe}.${e}`;class bIe{constructor(t){Il(this,"get",t=>{const n=this.localStorage.getItem(QR(t));return n?JSON.parse(n):void 0});Il(this,"set",(t,n)=>this.localStorage.setItem(QR(t),JSON.stringify(n)));this.localStorage=t}}class _Ie{constructor(t){this.storage=t}getTagColors(){return this.storage.get("colors")??{}}storeTagColors(t){this.storage.set("colors",t)}}const xIe=e=>{e.constant("localStorage",window.localStorage),e.service("Storage",bIe,"localStorage"),e.service("TagColorsStorage",_Ie,"Storage"),e.constant("csvToJson",mIe),e.constant("jsonToCsv",gIe),e.serviceFactory("useTimeoutToggle",()=>PD)},Pl=new z6,{container:AP}=Pl,wIe=(e,t)=>(...n)=>e[t](...n),OIe=(e,t)=>({...e,[t]:wIe(AP,t)}),SIe=e=>t=>Object.fromEntries(e.map(n=>[n,t[n]])),pb=(e,t=[])=>y6(e?SIe(e):null,t.reduce(OIe,{}));uoe(Pl,pb);_6e(Pl,pb);qq(Pl);oIe(Pl,pb);xIe(Pl);dIe(Pl,pb);var kP={},KO={exports:{}};(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.isPlainObject=t.clone=t.recursive=t.merge=t.main=void 0,e.exports=t=n,t.default=n;function n(){for(var c=[],f=0;fz.length)&&(B=z.length);for(var H=0,ee=Array(B);HIE({appUpdated:coe,servers:U6e,selectedServer:e.selectedServerReducer,settings:uIe}),PIe=e=>{var t;return e.settings&&((t=e.settings.visits)==null?void 0:t.defaultInterval)==="last180days"&&e.settings.visits&&(e.settings.visits.defaultInterval="last180Days"),e},TIe=!0,O9={states:["settings","servers"],namespace:"shlink",namespaceSeparator:".",debounce:300},jIe=PIe(kP.load(O9)),AIe=e=>qD({devTools:!TIe,reducer:CIe(e),preloadedState:jIe,middleware:t=>t({immutableCheck:!1,serializableCheck:!1}).concat(kP.save(O9))}),kIe=!!(window.location.hostname==="localhost"||window.location.hostname==="[::1]"||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));function NIe(e){if("serviceWorker"in navigator){if(new URL(Vv.homepage,window.location.href).origin!==window.location.origin)return;window.addEventListener("load",()=>{const n=`${Vv.homepage}/service-worker.js`;kIe?(MIe(n,e),navigator.serviceWorker.ready.then(()=>{console.log("This web app is being served cache-first by a service worker. To learn more, visit https://cra.link/PWA")})):S9(n,e)})}}function S9(e,t){navigator.serviceWorker.register(e).then(n=>{n.onupdatefound=()=>{const r=n.installing;r!=null&&(r.onstatechange=()=>{r.state==="installed"&&(navigator.serviceWorker.controller?(console.log("New content is available and will be used when all tabs for this page are closed. See https://cra.link/PWA."),t&&t.onUpdate&&t.onUpdate(n)):(console.log("Content is cached for offline use."),t&&t.onSuccess&&t.onSuccess(n)))})}}).catch(n=>{console.error("Error during service worker registration:",n)})}function MIe(e,t){fetch(e,{headers:{"Service-Worker":"script"}}).then(n=>{const r=n.headers.get("content-type");n.status===404||r!=null&&r.indexOf("javascript")===-1?navigator.serviceWorker.ready.then(i=>{i.unregister().then(()=>{window.location.reload()})}):S9(e,t)}).catch(()=>{console.log("No internet connection found. App is running in offline mode.")})}const E9=AIe(AP),{App:LIe,ScrollToTop:RIe,ErrorHandler:$Ie,appUpdateAvailable:IIe}=AP;f6(document.getElementById("root")).render(m.jsx(b6,{store:E9,children:m.jsx(A6,{basename:Vv.homepage,children:m.jsx($Ie,{children:m.jsx(RIe,{children:m.jsx(LIe,{})})})})}));NIe({onUpdate(){E9.dispatch(IIe())}}); +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function o(z,B){if(z){if(typeof z=="string")return a(z,B);var H=Object.prototype.toString.call(z).slice(8,-1);return H==="Object"&&z.constructor&&(H=z.constructor.name),H==="Map"||H==="Set"?Array.from(z):H==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(H)?a(z,B):void 0}}function a(z,B){(B==null||B>z.length)&&(B=z.length);for(var H=0,ee=Array(B);HIE({appUpdated:coe,servers:U6e,selectedServer:e.selectedServerReducer,settings:uIe}),PIe=e=>(e.settings&&e.settings.visits&&e.settings.visits.defaultInterval==="last180days"&&(e.settings.visits.defaultInterval="last180Days"),e),TIe=!0,O9={states:["settings","servers"],namespace:"shlink",namespaceSeparator:".",debounce:300},jIe=PIe(kP.load(O9)),AIe=e=>qD({devTools:!TIe,reducer:CIe(e),preloadedState:jIe,middleware:t=>t({immutableCheck:!1,serializableCheck:!1}).concat(kP.save(O9))}),kIe=!!(window.location.hostname==="localhost"||window.location.hostname==="[::1]"||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));function NIe(e){if("serviceWorker"in navigator){if(new URL(Vv.homepage,window.location.href).origin!==window.location.origin)return;window.addEventListener("load",()=>{const n=`${Vv.homepage}/service-worker.js`;kIe?(MIe(n,e),navigator.serviceWorker.ready.then(()=>{console.log("This web app is being served cache-first by a service worker. To learn more, visit https://cra.link/PWA")})):S9(n,e)})}}function S9(e,t){navigator.serviceWorker.register(e).then(n=>{n.onupdatefound=()=>{const r=n.installing;r!=null&&(r.onstatechange=()=>{r.state==="installed"&&(navigator.serviceWorker.controller?(console.log("New content is available and will be used when all tabs for this page are closed. See https://cra.link/PWA."),t&&t.onUpdate&&t.onUpdate(n)):(console.log("Content is cached for offline use."),t&&t.onSuccess&&t.onSuccess(n)))})}}).catch(n=>{console.error("Error during service worker registration:",n)})}function MIe(e,t){fetch(e,{headers:{"Service-Worker":"script"}}).then(n=>{const r=n.headers.get("content-type");n.status===404||r!=null&&r.indexOf("javascript")===-1?navigator.serviceWorker.ready.then(i=>{i.unregister().then(()=>{window.location.reload()})}):S9(e,t)}).catch(()=>{console.log("No internet connection found. App is running in offline mode.")})}const E9=AIe(AP),{App:LIe,ScrollToTop:RIe,ErrorHandler:$Ie,appUpdateAvailable:IIe}=AP;f6(document.getElementById("root")).render(m.jsx(b6,{store:E9,children:m.jsx(A6,{basename:Vv.homepage,children:m.jsx($Ie,{children:m.jsx(RIe,{children:m.jsx(LIe,{})})})})}));NIe({onUpdate(){E9.dispatch(IIe())}}); diff --git a/dependabot/npm_and_yarn/eslint-plugins-5b4dfef153/index.html b/dependabot/npm_and_yarn/eslint-plugins-5b4dfef153/index.html index 51b5994b..db584d51 100644 --- a/dependabot/npm_and_yarn/eslint-plugins-5b4dfef153/index.html +++ b/dependabot/npm_and_yarn/eslint-plugins-5b4dfef153/index.html @@ -79,7 +79,7 @@ Shlink — The URL shortener - + diff --git a/dependabot/npm_and_yarn/eslint-plugins-5b4dfef153/service-worker.js b/dependabot/npm_and_yarn/eslint-plugins-5b4dfef153/service-worker.js index 92594c26..98fb214c 100644 --- a/dependabot/npm_and_yarn/eslint-plugins-5b4dfef153/service-worker.js +++ b/dependabot/npm_and_yarn/eslint-plugins-5b4dfef153/service-worker.js @@ -1,2 +1,2 @@ try{self["workbox:core:7.0.0"]&&_()}catch{}const G=(s,...e)=>{let t=s;return e.length>0&&(t+=` :: ${JSON.stringify(e)}`),t},Q=G;class h extends Error{constructor(e,t){const n=Q(e,t);super(n),this.name=e,this.details=t}}const B=new Set;function z(s){B.add(s)}const d={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:typeof registration<"u"?registration.scope:""},k=s=>[d.prefix,s,d.suffix].filter(e=>e&&e.length>0).join("-"),J=s=>{for(const e of Object.keys(d))s(e)},x={updateDetails:s=>{J(e=>{typeof s[e]=="string"&&(d[e]=s[e])})},getGoogleAnalyticsName:s=>s||k(d.googleAnalytics),getPrecacheName:s=>s||k(d.precache),getPrefix:()=>d.prefix,getRuntimeName:s=>s||k(d.runtime),getSuffix:()=>d.suffix};function K(s,e){const t=new URL(s);for(const n of e)t.searchParams.delete(n);return t.href}async function X(s,e,t,n){const i=K(e.url,t);if(e.url===i)return s.match(e,n);const a=Object.assign(Object.assign({},n),{ignoreSearch:!0}),r=await s.keys(e,a);for(const c of r){const o=K(c.url,t);if(i===o)return s.match(c,n)}}let m;function Y(){if(m===void 0){const s=new Response("");if("body"in s)try{new Response(s.body),m=!0}catch{m=!1}m=!1}return m}function q(s){s.then(()=>{})}class Z{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}}async function ee(){for(const s of B)await s()}const te=s=>new URL(String(s),location.href).href.replace(new RegExp(`^${location.origin}`),"");function se(s){return new Promise(e=>setTimeout(e,s))}function A(s,e){const t=e();return s.waitUntil(t),t}async function ne(s,e){let t=null;if(s.url&&(t=new URL(s.url).origin),t!==self.location.origin)throw new h("cross-origin-copy-response",{origin:t});const n=s.clone(),i={headers:new Headers(n.headers),status:n.status,statusText:n.statusText},a=e?e(i):i,r=Y()?n.body:await n.blob();return new Response(r,a)}function ie(){self.addEventListener("activate",()=>self.clients.claim())}const ae=(s,e)=>e.some(t=>s instanceof t);let j,O;function re(){return j||(j=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function ce(){return O||(O=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}const F=new WeakMap,U=new WeakMap,H=new WeakMap,E=new WeakMap,P=new WeakMap;function oe(s){const e=new Promise((t,n)=>{const i=()=>{s.removeEventListener("success",a),s.removeEventListener("error",r)},a=()=>{t(f(s.result)),i()},r=()=>{n(s.error),i()};s.addEventListener("success",a),s.addEventListener("error",r)});return e.then(t=>{t instanceof IDBCursor&&F.set(t,s)}).catch(()=>{}),P.set(e,s),e}function le(s){if(U.has(s))return;const e=new Promise((t,n)=>{const i=()=>{s.removeEventListener("complete",a),s.removeEventListener("error",r),s.removeEventListener("abort",r)},a=()=>{t(),i()},r=()=>{n(s.error||new DOMException("AbortError","AbortError")),i()};s.addEventListener("complete",a),s.addEventListener("error",r),s.addEventListener("abort",r)});U.set(s,e)}let T={get(s,e,t){if(s instanceof IDBTransaction){if(e==="done")return U.get(s);if(e==="objectStoreNames")return s.objectStoreNames||H.get(s);if(e==="store")return t.objectStoreNames[1]?void 0:t.objectStore(t.objectStoreNames[0])}return f(s[e])},set(s,e,t){return s[e]=t,!0},has(s,e){return s instanceof IDBTransaction&&(e==="done"||e==="store")?!0:e in s}};function he(s){T=s(T)}function ue(s){return s===IDBDatabase.prototype.transaction&&!("objectStoreNames"in IDBTransaction.prototype)?function(e,...t){const n=s.call(v(this),e,...t);return H.set(n,e.sort?e.sort():[e]),f(n)}:ce().includes(s)?function(...e){return s.apply(v(this),e),f(F.get(this))}:function(...e){return f(s.apply(v(this),e))}}function de(s){return typeof s=="function"?ue(s):(s instanceof IDBTransaction&&le(s),ae(s,re())?new Proxy(s,T):s)}function f(s){if(s instanceof IDBRequest)return oe(s);if(E.has(s))return E.get(s);const e=de(s);return e!==s&&(E.set(s,e),P.set(e,s)),e}const v=s=>P.get(s);function fe(s,e,{blocked:t,upgrade:n,blocking:i,terminated:a}={}){const r=indexedDB.open(s,e),c=f(r);return n&&r.addEventListener("upgradeneeded",o=>{n(f(r.result),o.oldVersion,o.newVersion,f(r.transaction),o)}),t&&r.addEventListener("blocked",o=>t(o.oldVersion,o.newVersion,o)),c.then(o=>{a&&o.addEventListener("close",()=>a()),i&&o.addEventListener("versionchange",l=>i(l.oldVersion,l.newVersion,l))}).catch(()=>{}),c}function pe(s,{blocked:e}={}){const t=indexedDB.deleteDatabase(s);return e&&t.addEventListener("blocked",n=>e(n.oldVersion,n)),f(t).then(()=>{})}const ge=["get","getKey","getAll","getAllKeys","count"],me=["put","add","delete","clear"],D=new Map;function S(s,e){if(!(s instanceof IDBDatabase&&!(e in s)&&typeof e=="string"))return;if(D.get(e))return D.get(e);const t=e.replace(/FromIndex$/,""),n=e!==t,i=me.includes(t);if(!(t in(n?IDBIndex:IDBObjectStore).prototype)||!(i||ge.includes(t)))return;const a=async function(r,...c){const o=this.transaction(r,i?"readwrite":"readonly");let l=o.store;return n&&(l=l.index(c.shift())),(await Promise.all([l[t](...c),i&&o.done]))[0]};return D.set(e,a),a}he(s=>({...s,get:(e,t,n)=>S(e,t)||s.get(e,t,n),has:(e,t)=>!!S(e,t)||s.has(e,t)}));try{self["workbox:expiration:7.0.0"]&&_()}catch{}const we="workbox-expiration",w="cache-entries",W=s=>{const e=new URL(s,location.href);return e.hash="",e.href};class ye{constructor(e){this._db=null,this._cacheName=e}_upgradeDb(e){const t=e.createObjectStore(w,{keyPath:"id"});t.createIndex("cacheName","cacheName",{unique:!1}),t.createIndex("timestamp","timestamp",{unique:!1})}_upgradeDbAndDeleteOldDbs(e){this._upgradeDb(e),this._cacheName&&pe(this._cacheName)}async setTimestamp(e,t){e=W(e);const n={url:e,timestamp:t,cacheName:this._cacheName,id:this._getId(e)},a=(await this.getDb()).transaction(w,"readwrite",{durability:"relaxed"});await a.store.put(n),await a.done}async getTimestamp(e){const n=await(await this.getDb()).get(w,this._getId(e));return n==null?void 0:n.timestamp}async expireEntries(e,t){const n=await this.getDb();let i=await n.transaction(w).store.index("timestamp").openCursor(null,"prev");const a=[];let r=0;for(;i;){const o=i.value;o.cacheName===this._cacheName&&(e&&o.timestamp=t?a.push(i.value):r++),i=await i.continue()}const c=[];for(const o of a)await n.delete(w,o.id),c.push(o.url);return c}_getId(e){return this._cacheName+"|"+W(e)}async getDb(){return this._db||(this._db=await fe(we,1,{upgrade:this._upgradeDbAndDeleteOldDbs.bind(this)})),this._db}}class _e{constructor(e,t={}){this._isRunning=!1,this._rerunRequested=!1,this._maxEntries=t.maxEntries,this._maxAgeSeconds=t.maxAgeSeconds,this._matchOptions=t.matchOptions,this._cacheName=e,this._timestampModel=new ye(e)}async expireEntries(){if(this._isRunning){this._rerunRequested=!0;return}this._isRunning=!0;const e=this._maxAgeSeconds?Date.now()-this._maxAgeSeconds*1e3:0,t=await this._timestampModel.expireEntries(e,this._maxEntries),n=await self.caches.open(this._cacheName);for(const i of t)await n.delete(i,this._matchOptions);this._isRunning=!1,this._rerunRequested&&(this._rerunRequested=!1,q(this.expireEntries()))}async updateTimestamp(e){await this._timestampModel.setTimestamp(e,Date.now())}async isURLExpired(e){if(this._maxAgeSeconds){const t=await this._timestampModel.getTimestamp(e),n=Date.now()-this._maxAgeSeconds*1e3;return t!==void 0?t{if(!a)return null;const r=this._isResponseDateFresh(a),c=this._getCacheExpiration(i);q(c.expireEntries());const o=c.updateTimestamp(n.url);if(t)try{t.waitUntil(o)}catch{}return r?a:null},this.cacheDidUpdate=async({cacheName:t,request:n})=>{const i=this._getCacheExpiration(t);await i.updateTimestamp(n.url),await i.expireEntries()},this._config=e,this._maxAgeSeconds=e.maxAgeSeconds,this._cacheExpirations=new Map,e.purgeOnQuotaError&&z(()=>this.deleteCacheAndMetadata())}_getCacheExpiration(e){if(e===x.getRuntimeName())throw new h("expire-custom-caches-only");let t=this._cacheExpirations.get(e);return t||(t=new _e(e,this._config),this._cacheExpirations.set(e,t)),t}_isResponseDateFresh(e){if(!this._maxAgeSeconds)return!0;const t=this._getDateHeaderTimestamp(e);if(t===null)return!0;const n=Date.now();return t>=n-this._maxAgeSeconds*1e3}_getDateHeaderTimestamp(e){if(!e.headers.has("date"))return null;const t=e.headers.get("date"),i=new Date(t).getTime();return isNaN(i)?null:i}async deleteCacheAndMetadata(){for(const[e,t]of this._cacheExpirations)await self.caches.delete(e),await t.delete();this._cacheExpirations=new Map}}try{self["workbox:precaching:7.0.0"]&&_()}catch{}const Re="__WB_REVISION__";function Ce(s){if(!s)throw new h("add-to-cache-list-unexpected-type",{entry:s});if(typeof s=="string"){const a=new URL(s,location.href);return{cacheKey:a.href,url:a.href}}const{revision:e,url:t}=s;if(!t)throw new h("add-to-cache-list-unexpected-type",{entry:s});if(!e){const a=new URL(t,location.href);return{cacheKey:a.href,url:a.href}}const n=new URL(t,location.href),i=new URL(t,location.href);return n.searchParams.set(Re,e),{cacheKey:n.href,url:i.href}}class xe{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type==="install"&&t&&t.originalRequest&&t.originalRequest instanceof Request){const i=t.originalRequest.url;n?this.notUpdatedURLs.push(i):this.updatedURLs.push(i)}return n}}}class ke{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:t,params:n})=>{const i=(n==null?void 0:n.cacheKey)||this._precacheController.getCacheKeyForURL(t.url);return i?new Request(i,{headers:t.headers}):t},this._precacheController=e}}try{self["workbox:strategies:7.0.0"]&&_()}catch{}function R(s){return typeof s=="string"?new Request(s):s}class Ee{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new Z,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(const n of this._plugins)this._pluginStateMap.set(n,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){const{event:t}=this;let n=R(e);if(n.mode==="navigate"&&t instanceof FetchEvent&&t.preloadResponse){const r=await t.preloadResponse;if(r)return r}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const r of this.iterateCallbacks("requestWillFetch"))n=await r({request:n.clone(),event:t})}catch(r){if(r instanceof Error)throw new h("plugin-error-request-will-fetch",{thrownErrorMessage:r.message})}const a=n.clone();try{let r;r=await fetch(n,n.mode==="navigate"?void 0:this._strategy.fetchOptions);for(const c of this.iterateCallbacks("fetchDidSucceed"))r=await c({event:t,request:a,response:r});return r}catch(r){throw i&&await this.runCallbacks("fetchDidFail",{error:r,event:t,originalRequest:i.clone(),request:a.clone()}),r}}async fetchAndCachePut(e){const t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){const t=R(e);let n;const{cacheName:i,matchOptions:a}=this._strategy,r=await this.getCacheKey(t,"read"),c=Object.assign(Object.assign({},a),{cacheName:i});n=await caches.match(r,c);for(const o of this.iterateCallbacks("cachedResponseWillBeUsed"))n=await o({cacheName:i,matchOptions:a,cachedResponse:n,request:r,event:this.event})||void 0;return n}async cachePut(e,t){const n=R(e);await se(0);const i=await this.getCacheKey(n,"write");if(!t)throw new h("cache-put-with-no-response",{url:te(i.url)});const a=await this._ensureResponseSafeToCache(t);if(!a)return!1;const{cacheName:r,matchOptions:c}=this._strategy,o=await self.caches.open(r),l=this.hasCallback("cacheDidUpdate"),g=l?await X(o,i.clone(),["__WB_REVISION__"],c):null;try{await o.put(i,l?a.clone():a)}catch(u){if(u instanceof Error)throw u.name==="QuotaExceededError"&&await ee(),u}for(const u of this.iterateCallbacks("cacheDidUpdate"))await u({cacheName:r,oldResponse:g,newResponse:a.clone(),request:i,event:this.event});return!0}async getCacheKey(e,t){const n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let i=e;for(const a of this.iterateCallbacks("cacheKeyWillBeUsed"))i=R(await a({mode:t,request:i,event:this.event,params:this.params}));this._cacheKeys[n]=i}return this._cacheKeys[n]}hasCallback(e){for(const t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(const n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(const t of this._strategy.plugins)if(typeof t[e]=="function"){const n=this._pluginStateMap.get(t);yield a=>{const r=Object.assign(Object.assign({},a),{state:n});return t[e](r)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){let e;for(;e=this._extendLifetimePromises.shift();)await e}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(const i of this.iterateCallbacks("cacheWillUpdate"))if(t=await i({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}}class V{constructor(e={}){this.cacheName=x.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){const[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});const t=e.event,n=typeof e.request=="string"?new Request(e.request):e.request,i="params"in e?e.params:void 0,a=new Ee(this,{event:t,request:n,params:i}),r=this._getResponse(a,n,t),c=this._awaitComplete(r,a,n,t);return[r,c]}async _getResponse(e,t,n){await e.runCallbacks("handlerWillStart",{event:n,request:t});let i;try{if(i=await this._handle(t,e),!i||i.type==="error")throw new h("no-response",{url:t.url})}catch(a){if(a instanceof Error){for(const r of e.iterateCallbacks("handlerDidError"))if(i=await r({error:a,event:n,request:t}),i)break}if(!i)throw a}for(const a of e.iterateCallbacks("handlerWillRespond"))i=await a({event:n,request:t,response:i});return i}async _awaitComplete(e,t,n,i){let a,r;try{a=await e}catch{}try{await t.runCallbacks("handlerDidRespond",{event:i,request:n,response:a}),await t.doneWaiting()}catch(c){c instanceof Error&&(r=c)}if(await t.runCallbacks("handlerDidComplete",{event:i,request:n,response:a,error:r}),t.destroy(),r)throw r}}class p extends V{constructor(e={}){e.cacheName=x.getPrecacheName(e.cacheName),super(e),this._fallbackToNetwork=e.fallbackToNetwork!==!1,this.plugins.push(p.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){const n=await t.cacheMatch(e);return n||(t.event&&t.event.type==="install"?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,t){let n;const i=t.params||{};if(this._fallbackToNetwork){const a=i.integrity,r=e.integrity,c=!r||r===a;n=await t.fetch(new Request(e,{integrity:e.mode!=="no-cors"?r||a:void 0})),a&&c&&e.mode!=="no-cors"&&(this._useDefaultCacheabilityPluginIfNeeded(),await t.cachePut(e,n.clone()))}else throw new h("missing-precache-entry",{cacheName:this.cacheName,url:e.url});return n}async _handleInstall(e,t){this._useDefaultCacheabilityPluginIfNeeded();const n=await t.fetch(e);if(!await t.cachePut(e,n.clone()))throw new h("bad-precaching-response",{url:e.url,status:n.status});return n}_useDefaultCacheabilityPluginIfNeeded(){let e=null,t=0;for(const[n,i]of this.plugins.entries())i!==p.copyRedirectedCacheableResponsesPlugin&&(i===p.defaultPrecacheCacheabilityPlugin&&(e=n),i.cacheWillUpdate&&t++);t===0?this.plugins.push(p.defaultPrecacheCacheabilityPlugin):t>1&&e!==null&&this.plugins.splice(e,1)}}p.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:s}){return!s||s.status>=400?null:s}};p.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:s}){return s.redirected?await ne(s):s}};class ve{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new p({cacheName:x.getPrecacheName(e),plugins:[...t,new ke({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this._installAndActiveListenersAdded=!0)}addToCacheList(e){const t=[];for(const n of e){typeof n=="string"?t.push(n):n&&n.revision===void 0&&t.push(n.url);const{cacheKey:i,url:a}=Ce(n),r=typeof n!="string"&&n.revision?"reload":"default";if(this._urlsToCacheKeys.has(a)&&this._urlsToCacheKeys.get(a)!==i)throw new h("add-to-cache-list-conflicting-entries",{firstEntry:this._urlsToCacheKeys.get(a),secondEntry:i});if(typeof n!="string"&&n.integrity){if(this._cacheKeysToIntegrities.has(i)&&this._cacheKeysToIntegrities.get(i)!==n.integrity)throw new h("add-to-cache-list-conflicting-integrities",{url:a});this._cacheKeysToIntegrities.set(i,n.integrity)}if(this._urlsToCacheKeys.set(a,i),this._urlsToCacheModes.set(a,r),t.length>0){const c=`Workbox is precaching URLs without revision info: ${t.join(", ")} -This is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(c)}}}install(e){return A(e,async()=>{const t=new xe;this.strategy.plugins.push(t);for(const[a,r]of this._urlsToCacheKeys){const c=this._cacheKeysToIntegrities.get(r),o=this._urlsToCacheModes.get(a),l=new Request(a,{integrity:c,cache:o,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:r},request:l,event:e}))}const{updatedURLs:n,notUpdatedURLs:i}=t;return{updatedURLs:n,notUpdatedURLs:i}})}activate(e){return A(e,async()=>{const t=await self.caches.open(this.strategy.cacheName),n=await t.keys(),i=new Set(this._urlsToCacheKeys.values()),a=[];for(const r of n)i.has(r.url)||(await t.delete(r),a.push(r.url));return{deletedURLs:a}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){const t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){const t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){const t=this.getCacheKeyForURL(e);if(!t)throw new h("non-precached-url",{url:e});return n=>(n.request=new Request(e),n.params=Object.assign({cacheKey:t},n.params),this.strategy.handle(n))}}let L;const I=()=>(L||(L=new ve),L);try{self["workbox:routing:7.0.0"]&&_()}catch{}const $="GET",C=s=>s&&typeof s=="object"?s:{handle:s};class b{constructor(e,t,n=$){this.handler=C(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=C(e)}}class De extends b{constructor(e,t,n){const i=({url:a})=>{const r=e.exec(a.href);if(r&&!(a.origin!==location.origin&&r.index!==0))return r.slice(1)};super(i,t,n)}}class Le{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener("fetch",e=>{const{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)})}addCacheListener(){self.addEventListener("message",e=>{if(e.data&&e.data.type==="CACHE_URLS"){const{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(i=>{typeof i=="string"&&(i=[i]);const a=new Request(...i);return this.handleRequest({request:a,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}})}handleRequest({request:e,event:t}){const n=new URL(e.url,location.href);if(!n.protocol.startsWith("http"))return;const i=n.origin===location.origin,{params:a,route:r}=this.findMatchingRoute({event:t,request:e,sameOrigin:i,url:n});let c=r&&r.handler;const o=e.method;if(!c&&this._defaultHandlerMap.has(o)&&(c=this._defaultHandlerMap.get(o)),!c)return;let l;try{l=c.handle({url:n,request:e,event:t,params:a})}catch(u){l=Promise.reject(u)}const g=r&&r.catchHandler;return l instanceof Promise&&(this._catchHandler||g)&&(l=l.catch(async u=>{if(g)try{return await g.handle({url:n,request:e,event:t,params:a})}catch(N){N instanceof Error&&(u=N)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw u})),l}findMatchingRoute({url:e,sameOrigin:t,request:n,event:i}){const a=this._routes.get(n.method)||[];for(const r of a){let c;const o=r.match({url:e,sameOrigin:t,request:n,event:i});if(o)return c=o,(Array.isArray(c)&&c.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o=="boolean")&&(c=void 0),{route:r,params:c}}return{}}setDefaultHandler(e,t=$){this._defaultHandlerMap.set(t,C(e))}setCatchHandler(e){this._catchHandler=C(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new h("unregister-route-but-not-found-with-method",{method:e.method});const t=this._routes.get(e.method).indexOf(e);if(t>-1)this._routes.get(e.method).splice(t,1);else throw new h("unregister-route-route-not-registered")}}let y;const Ue=()=>(y||(y=new Le,y.addFetchListener(),y.addCacheListener()),y);function M(s,e,t){let n;if(typeof s=="string"){const a=new URL(s,location.href),r=({url:c})=>c.href===a.href;n=new b(r,e,t)}else if(s instanceof RegExp)n=new De(s,e,t);else if(typeof s=="function")n=new b(s,e,t);else if(s instanceof b)n=s;else throw new h("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});return Ue().registerRoute(n),n}function Te(s,e=[]){for(const t of[...s.searchParams.keys()])e.some(n=>n.test(t))&&s.searchParams.delete(t);return s}function*Pe(s,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:t="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const a=new URL(s,location.href);a.hash="",yield a.href;const r=Te(a,e);if(yield r.href,t&&r.pathname.endsWith("/")){const c=new URL(r.href);c.pathname+=t,yield c.href}if(n){const c=new URL(r.href);c.pathname+=".html",yield c.href}if(i){const c=i({url:a});for(const o of c)yield o.href}}class Ie extends b{constructor(e,t){const n=({request:i})=>{const a=e.getURLsToCacheKeys();for(const r of Pe(i.url,t)){const c=a.get(r);if(c){const o=e.getIntegrityForCacheKey(c);return{cacheKey:c,integrity:o}}}};super(n,e.strategy)}}function Me(s){const e=I(),t=new Ie(e,s);M(t)}function Ne(s){return I().createHandlerBoundToURL(s)}function Ke(s){I().precache(s)}function Ae(s,e){Ke(s),Me(e)}const je={cacheWillUpdate:async({response:s})=>s.status===200||s.status===0?s:null};class Oe extends V{constructor(e={}){super(e),this.plugins.some(t=>"cacheWillUpdate"in t)||this.plugins.unshift(je)}async _handle(e,t){const n=t.fetchAndCachePut(e).catch(()=>{});t.waitUntil(n);let i=await t.cacheMatch(e),a;if(!i)try{i=await n}catch(r){r instanceof Error&&(a=r)}if(!i)throw new h("no-response",{url:e.url,error:a});return i}}const Se="shlink-web-client",We="A React-based progressive web application for shlink",Be="/shlink-web-client/dependabot/npm_and_yarn/eslint-plugins-5b4dfef153",qe="https://github.com/shlinkio/shlink-web-client",Fe="MIT",He="module",Ve={lint:"npm run lint:css && npm run lint:js","lint:css":"stylelint src/*.scss src/**/*.scss","lint:js":"eslint src test config/test","lint:fix":"npm run lint:css:fix && npm run lint:js:fix","lint:css:fix":"npm run lint:css -- --fix","lint:js:fix":"npm run lint:js -- --fix",types:"tsc",start:"vite serve --host=0.0.0.0",preview:"vite preview --host=0.0.0.0",build:"npm run types && vite build && node scripts/replace-version.mjs","build:dist":"npm run build && node scripts/create-dist-file.mjs",test:"vitest run --run","test:watch":"vitest --watch","test:ci":"npm run test -- --coverage","test:verbose":"npm run test -- --verbose"},$e={"@fortawesome/fontawesome-free":"^6.6.0","@fortawesome/fontawesome-svg-core":"^6.6.0","@fortawesome/free-brands-svg-icons":"^6.6.0","@fortawesome/free-regular-svg-icons":"^6.6.0","@fortawesome/free-solid-svg-icons":"^6.6.0","@fortawesome/react-fontawesome":"^0.2.2","@json2csv/plainjs":"^7.0.6","@reduxjs/toolkit":"^2.2.6","@shlinkio/data-manipulation":"^1.0.3","@shlinkio/shlink-frontend-kit":"^0.5.2","@shlinkio/shlink-js-sdk":"^1.1.0","@shlinkio/shlink-web-component":"^0.7.0",bootstrap:"5.2.3",bottlejs:"^2.0.1",clsx:"^2.1.1","compare-versions":"^6.1.1",csvtojson:"^2.0.10","date-fns":"^3.6.0",react:"^18.3.1","react-dom":"^18.3.1","react-external-link":"^2.3.1","react-redux":"^9.1.2","react-router-dom":"^6.25.1",reactstrap:"^9.2.2","redux-localstorage-simple":"^2.5.1",uuid:"^10.0.0","workbox-core":"^7.1.0","workbox-expiration":"^7.1.0","workbox-precaching":"^7.1.0","workbox-routing":"^7.1.0","workbox-strategies":"^7.1.0"},Ge={"@shlinkio/eslint-config-js-coding-standard":"~3.0.1","@shlinkio/stylelint-config-css-coding-standard":"~1.1.1","@stylistic/eslint-plugin":"^2.6.1","@testing-library/jest-dom":"^6.4.8","@testing-library/react":"^16.0.0","@testing-library/user-event":"^14.5.2","@total-typescript/shoehorn":"^0.1.2","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@types/uuid":"^10.0.0","@vitejs/plugin-react":"^4.3.1","@vitest/coverage-v8":"^2.0.4","adm-zip":"^0.5.14","axe-core":"^4.9.1",chalk:"^5.3.0",eslint:"^8.57.0","eslint-plugin-jsx-a11y":"^6.9.0","eslint-plugin-react":"^7.35.0","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-simple-import-sort":"^12.1.1",history:"^5.3.0",jsdom:"^24.1.1",sass:"^1.77.8",stylelint:"^15.11.0",typescript:"^5.5.4","typescript-eslint":"^8.0.0",vite:"^5.3.5","vite-plugin-pwa":"^0.20.1",vitest:"^2.0.2"},Qe=[">0.2%","not dead","not ie <= 11","not op_mini all"],ze={name:Se,description:We,private:!1,homepage:Be,repository:qe,license:Fe,type:He,scripts:Ve,dependencies:$e,devDependencies:Ge,browserslist:Qe};ie();Ae([{"revision":null,"url":"assets/index-CRpH7Bmq.css"},{"revision":null,"url":"assets/index-DJgoqBis.js"},{"revision":"44add7dca78a4d6b89059143789b9d99","url":"index.html"},{"revision":"583b223ad8e20f05aaa64923d7db2e46","url":"icons/icon-1024x1024.png"},{"revision":"2dff586aaefa4c8d17f4c0bcbdef8b53","url":"icons/icon-114x114.png"},{"revision":"8e28257a68ef1c55bc68bfff80e1a310","url":"icons/icon-120x120.png"},{"revision":"0059b6f0c97fa871a5c29643b2857585","url":"icons/icon-128x128.png"},{"revision":"41478c2456281f61e54d714718743ecc","url":"icons/icon-144x144.png"},{"revision":"625251910295f33a578ae6d8117711c9","url":"icons/icon-150x150.png"},{"revision":"19b71508b1d05defe32cf16a7d453001","url":"icons/icon-152x152.png"},{"revision":"9d029a32a54ba3084c67acd5d74f8ac4","url":"icons/icon-160x160.png"},{"revision":"6ec104aeaf745f003ecdaef2edddce97","url":"icons/icon-167x167.png"},{"revision":"3e8169a112865ef0d76bba4e2dfd3a89","url":"icons/icon-16x16.png"},{"revision":"871d67907434ed0ddf5d2a6c220e09af","url":"icons/icon-180x180.png"},{"revision":"cee2529402074d73b2135e2ddee25f6b","url":"icons/icon-192x192.png"},{"revision":"85055b452284c0193142936dee7d2cd1","url":"icons/icon-196x196.png"},{"revision":"f471155dd70b99924422dd9dd87ea94d","url":"icons/icon-228x228.png"},{"revision":"20f0b51945ae3c973420e31d6b4d43c1","url":"icons/icon-24x24.png"},{"revision":"4d896c5c7025582605de31fb74f0316b","url":"icons/icon-256x256.png"},{"revision":"d99b49e5bcad41968313c3e132e7c661","url":"icons/icon-310x310.png"},{"revision":"4c9695cfb4cea403c1b66bbb7b4f7420","url":"icons/icon-32x32.png"},{"revision":"f9597636bef677327c3abc0fd1a743c4","url":"icons/icon-384x384.png"},{"revision":"f74edb9cc54ac938c1589876f8da9f21","url":"icons/icon-40x40.png"},{"revision":"52933970fac8498311687de13549b014","url":"icons/icon-48x48.png"},{"revision":"de22c0eb9e08d3576df5cedb568ca56b","url":"icons/icon-512x512.png"},{"revision":"40209a194f29b21882571c77bd2bd906","url":"icons/icon-60x60.png"},{"revision":"c8ba5a8c1da76d74c7bb21827fcf975c","url":"icons/icon-64x64.png"},{"revision":"ae3435baceb494f9c966e2c2c736ea35","url":"icons/icon-72x72.png"},{"revision":"850aa5b026fd1452af6c1ddd9d71850f","url":"icons/icon-76x76.png"},{"revision":"8c62535e6b7a498ece1f6c6ae62ede59","url":"icons/icon-96x96.png"},{"revision":"26930e46c2b7d524afed144494f6a674","url":"manifest.json"}]);const Je=new RegExp("/[^/?]+\\.[^/]+$");M(({request:s,url:e})=>!(s.mode!=="navigate"||e.pathname.startsWith("/_")||e.pathname.match(Je)),Ne(`${ze.homepage}/index.html`));M(({url:s})=>s.origin===self.location.origin&&s.pathname.endsWith(".png"),new Oe({cacheName:"images",plugins:[new be({maxEntries:50})]}));self.addEventListener("message",s=>{s.data&&s.data.type==="SKIP_WAITING"&&self.skipWaiting()}); +This is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(c)}}}install(e){return A(e,async()=>{const t=new xe;this.strategy.plugins.push(t);for(const[a,r]of this._urlsToCacheKeys){const c=this._cacheKeysToIntegrities.get(r),o=this._urlsToCacheModes.get(a),l=new Request(a,{integrity:c,cache:o,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:r},request:l,event:e}))}const{updatedURLs:n,notUpdatedURLs:i}=t;return{updatedURLs:n,notUpdatedURLs:i}})}activate(e){return A(e,async()=>{const t=await self.caches.open(this.strategy.cacheName),n=await t.keys(),i=new Set(this._urlsToCacheKeys.values()),a=[];for(const r of n)i.has(r.url)||(await t.delete(r),a.push(r.url));return{deletedURLs:a}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){const t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){const t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){const t=this.getCacheKeyForURL(e);if(!t)throw new h("non-precached-url",{url:e});return n=>(n.request=new Request(e),n.params=Object.assign({cacheKey:t},n.params),this.strategy.handle(n))}}let L;const I=()=>(L||(L=new ve),L);try{self["workbox:routing:7.0.0"]&&_()}catch{}const $="GET",C=s=>s&&typeof s=="object"?s:{handle:s};class b{constructor(e,t,n=$){this.handler=C(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=C(e)}}class De extends b{constructor(e,t,n){const i=({url:a})=>{const r=e.exec(a.href);if(r&&!(a.origin!==location.origin&&r.index!==0))return r.slice(1)};super(i,t,n)}}class Le{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener("fetch",e=>{const{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)})}addCacheListener(){self.addEventListener("message",e=>{if(e.data&&e.data.type==="CACHE_URLS"){const{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(i=>{typeof i=="string"&&(i=[i]);const a=new Request(...i);return this.handleRequest({request:a,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}})}handleRequest({request:e,event:t}){const n=new URL(e.url,location.href);if(!n.protocol.startsWith("http"))return;const i=n.origin===location.origin,{params:a,route:r}=this.findMatchingRoute({event:t,request:e,sameOrigin:i,url:n});let c=r&&r.handler;const o=e.method;if(!c&&this._defaultHandlerMap.has(o)&&(c=this._defaultHandlerMap.get(o)),!c)return;let l;try{l=c.handle({url:n,request:e,event:t,params:a})}catch(u){l=Promise.reject(u)}const g=r&&r.catchHandler;return l instanceof Promise&&(this._catchHandler||g)&&(l=l.catch(async u=>{if(g)try{return await g.handle({url:n,request:e,event:t,params:a})}catch(N){N instanceof Error&&(u=N)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw u})),l}findMatchingRoute({url:e,sameOrigin:t,request:n,event:i}){const a=this._routes.get(n.method)||[];for(const r of a){let c;const o=r.match({url:e,sameOrigin:t,request:n,event:i});if(o)return c=o,(Array.isArray(c)&&c.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o=="boolean")&&(c=void 0),{route:r,params:c}}return{}}setDefaultHandler(e,t=$){this._defaultHandlerMap.set(t,C(e))}setCatchHandler(e){this._catchHandler=C(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new h("unregister-route-but-not-found-with-method",{method:e.method});const t=this._routes.get(e.method).indexOf(e);if(t>-1)this._routes.get(e.method).splice(t,1);else throw new h("unregister-route-route-not-registered")}}let y;const Ue=()=>(y||(y=new Le,y.addFetchListener(),y.addCacheListener()),y);function M(s,e,t){let n;if(typeof s=="string"){const a=new URL(s,location.href),r=({url:c})=>c.href===a.href;n=new b(r,e,t)}else if(s instanceof RegExp)n=new De(s,e,t);else if(typeof s=="function")n=new b(s,e,t);else if(s instanceof b)n=s;else throw new h("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});return Ue().registerRoute(n),n}function Te(s,e=[]){for(const t of[...s.searchParams.keys()])e.some(n=>n.test(t))&&s.searchParams.delete(t);return s}function*Pe(s,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:t="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const a=new URL(s,location.href);a.hash="",yield a.href;const r=Te(a,e);if(yield r.href,t&&r.pathname.endsWith("/")){const c=new URL(r.href);c.pathname+=t,yield c.href}if(n){const c=new URL(r.href);c.pathname+=".html",yield c.href}if(i){const c=i({url:a});for(const o of c)yield o.href}}class Ie extends b{constructor(e,t){const n=({request:i})=>{const a=e.getURLsToCacheKeys();for(const r of Pe(i.url,t)){const c=a.get(r);if(c){const o=e.getIntegrityForCacheKey(c);return{cacheKey:c,integrity:o}}}};super(n,e.strategy)}}function Me(s){const e=I(),t=new Ie(e,s);M(t)}function Ne(s){return I().createHandlerBoundToURL(s)}function Ke(s){I().precache(s)}function Ae(s,e){Ke(s),Me(e)}const je={cacheWillUpdate:async({response:s})=>s.status===200||s.status===0?s:null};class Oe extends V{constructor(e={}){super(e),this.plugins.some(t=>"cacheWillUpdate"in t)||this.plugins.unshift(je)}async _handle(e,t){const n=t.fetchAndCachePut(e).catch(()=>{});t.waitUntil(n);let i=await t.cacheMatch(e),a;if(!i)try{i=await n}catch(r){r instanceof Error&&(a=r)}if(!i)throw new h("no-response",{url:e.url,error:a});return i}}const Se="shlink-web-client",We="A React-based progressive web application for shlink",Be="/shlink-web-client/dependabot/npm_and_yarn/eslint-plugins-5b4dfef153",qe="https://github.com/shlinkio/shlink-web-client",Fe="MIT",He="module",Ve={lint:"npm run lint:css && npm run lint:js","lint:css":"stylelint src/*.scss src/**/*.scss","lint:js":"eslint src test config/test","lint:fix":"npm run lint:css:fix && npm run lint:js:fix","lint:css:fix":"npm run lint:css -- --fix","lint:js:fix":"npm run lint:js -- --fix",types:"tsc",start:"vite serve --host=0.0.0.0",preview:"vite preview --host=0.0.0.0",build:"npm run types && vite build && node scripts/replace-version.mjs","build:dist":"npm run build && node scripts/create-dist-file.mjs",test:"vitest run --run","test:watch":"vitest --watch","test:ci":"npm run test -- --coverage","test:verbose":"npm run test -- --verbose"},$e={"@fortawesome/fontawesome-free":"^6.6.0","@fortawesome/fontawesome-svg-core":"^6.6.0","@fortawesome/free-brands-svg-icons":"^6.6.0","@fortawesome/free-regular-svg-icons":"^6.6.0","@fortawesome/free-solid-svg-icons":"^6.6.0","@fortawesome/react-fontawesome":"^0.2.2","@json2csv/plainjs":"^7.0.6","@reduxjs/toolkit":"^2.2.6","@shlinkio/data-manipulation":"^1.0.3","@shlinkio/shlink-frontend-kit":"^0.5.2","@shlinkio/shlink-js-sdk":"^1.1.0","@shlinkio/shlink-web-component":"^0.7.0",bootstrap:"5.2.3",bottlejs:"^2.0.1",clsx:"^2.1.1","compare-versions":"^6.1.1",csvtojson:"^2.0.10","date-fns":"^3.6.0",react:"^18.3.1","react-dom":"^18.3.1","react-external-link":"^2.3.1","react-redux":"^9.1.2","react-router-dom":"^6.25.1",reactstrap:"^9.2.2","redux-localstorage-simple":"^2.5.1",uuid:"^10.0.0","workbox-core":"^7.1.0","workbox-expiration":"^7.1.0","workbox-precaching":"^7.1.0","workbox-routing":"^7.1.0","workbox-strategies":"^7.1.0"},Ge={"@shlinkio/eslint-config-js-coding-standard":"~3.0.1","@shlinkio/stylelint-config-css-coding-standard":"~1.1.1","@stylistic/eslint-plugin":"^2.6.1","@testing-library/jest-dom":"^6.4.8","@testing-library/react":"^16.0.0","@testing-library/user-event":"^14.5.2","@total-typescript/shoehorn":"^0.1.2","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@types/uuid":"^10.0.0","@vitejs/plugin-react":"^4.3.1","@vitest/coverage-v8":"^2.0.4","adm-zip":"^0.5.14","axe-core":"^4.9.1",chalk:"^5.3.0",eslint:"^8.57.0","eslint-plugin-jsx-a11y":"^6.9.0","eslint-plugin-react":"^7.35.0","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-simple-import-sort":"^12.1.1",history:"^5.3.0",jsdom:"^24.1.1",sass:"^1.77.8",stylelint:"^15.11.0",typescript:"^5.5.4","typescript-eslint":"^8.0.0",vite:"^5.3.5","vite-plugin-pwa":"^0.20.1",vitest:"^2.0.2"},Qe=[">0.2%","not dead","not ie <= 11","not op_mini all"],ze={name:Se,description:We,private:!1,homepage:Be,repository:qe,license:Fe,type:He,scripts:Ve,dependencies:$e,devDependencies:Ge,browserslist:Qe};ie();Ae([{"revision":null,"url":"assets/index-BYgHoM6D.js"},{"revision":null,"url":"assets/index-CRpH7Bmq.css"},{"revision":"8cf5e4821f697887e4d0b45d05fd65c8","url":"index.html"},{"revision":"583b223ad8e20f05aaa64923d7db2e46","url":"icons/icon-1024x1024.png"},{"revision":"2dff586aaefa4c8d17f4c0bcbdef8b53","url":"icons/icon-114x114.png"},{"revision":"8e28257a68ef1c55bc68bfff80e1a310","url":"icons/icon-120x120.png"},{"revision":"0059b6f0c97fa871a5c29643b2857585","url":"icons/icon-128x128.png"},{"revision":"41478c2456281f61e54d714718743ecc","url":"icons/icon-144x144.png"},{"revision":"625251910295f33a578ae6d8117711c9","url":"icons/icon-150x150.png"},{"revision":"19b71508b1d05defe32cf16a7d453001","url":"icons/icon-152x152.png"},{"revision":"9d029a32a54ba3084c67acd5d74f8ac4","url":"icons/icon-160x160.png"},{"revision":"6ec104aeaf745f003ecdaef2edddce97","url":"icons/icon-167x167.png"},{"revision":"3e8169a112865ef0d76bba4e2dfd3a89","url":"icons/icon-16x16.png"},{"revision":"871d67907434ed0ddf5d2a6c220e09af","url":"icons/icon-180x180.png"},{"revision":"cee2529402074d73b2135e2ddee25f6b","url":"icons/icon-192x192.png"},{"revision":"85055b452284c0193142936dee7d2cd1","url":"icons/icon-196x196.png"},{"revision":"f471155dd70b99924422dd9dd87ea94d","url":"icons/icon-228x228.png"},{"revision":"20f0b51945ae3c973420e31d6b4d43c1","url":"icons/icon-24x24.png"},{"revision":"4d896c5c7025582605de31fb74f0316b","url":"icons/icon-256x256.png"},{"revision":"d99b49e5bcad41968313c3e132e7c661","url":"icons/icon-310x310.png"},{"revision":"4c9695cfb4cea403c1b66bbb7b4f7420","url":"icons/icon-32x32.png"},{"revision":"f9597636bef677327c3abc0fd1a743c4","url":"icons/icon-384x384.png"},{"revision":"f74edb9cc54ac938c1589876f8da9f21","url":"icons/icon-40x40.png"},{"revision":"52933970fac8498311687de13549b014","url":"icons/icon-48x48.png"},{"revision":"de22c0eb9e08d3576df5cedb568ca56b","url":"icons/icon-512x512.png"},{"revision":"40209a194f29b21882571c77bd2bd906","url":"icons/icon-60x60.png"},{"revision":"c8ba5a8c1da76d74c7bb21827fcf975c","url":"icons/icon-64x64.png"},{"revision":"ae3435baceb494f9c966e2c2c736ea35","url":"icons/icon-72x72.png"},{"revision":"850aa5b026fd1452af6c1ddd9d71850f","url":"icons/icon-76x76.png"},{"revision":"8c62535e6b7a498ece1f6c6ae62ede59","url":"icons/icon-96x96.png"},{"revision":"26930e46c2b7d524afed144494f6a674","url":"manifest.json"}]);const Je=new RegExp("/[^/?]+\\.[^/]+$");M(({request:s,url:e})=>!(s.mode!=="navigate"||e.pathname.startsWith("/_")||e.pathname.match(Je)),Ne(`${ze.homepage}/index.html`));M(({url:s})=>s.origin===self.location.origin&&s.pathname.endsWith(".png"),new Oe({cacheName:"images",plugins:[new be({maxEntries:50})]}));self.addEventListener("message",s=>{s.data&&s.data.type==="SKIP_WAITING"&&self.skipWaiting()});