iobroker.time-tracker 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -7
- package/io-package.json +14 -14
- package/package.json +1 -1
- package/src-pwa/src/i18n/de.json +5 -1
- package/src-pwa/src/i18n/en.json +5 -1
- package/src-pwa/src/i18n/es.json +5 -1
- package/src-pwa/src/i18n/fr.json +5 -1
- package/src-pwa/src/i18n/it.json +5 -1
- package/src-pwa/src/i18n/nl.json +5 -1
- package/src-pwa/src/i18n/pl.json +5 -1
- package/src-pwa/src/i18n/pt.json +5 -1
- package/src-pwa/src/i18n/ru.json +5 -1
- package/src-pwa/src/i18n/uk.json +5 -1
- package/src-pwa/src/i18n/zh-cn.json +5 -1
- package/www/assets/{index-BOdNralo.js → index-D7f1X_an.js} +3 -3
- package/www/assets/index-D7f1X_an.js.map +1 -0
- package/www/index.html +1 -1
- package/www/sw.js +1 -1
- package/www/sw.js.map +1 -1
- package/www/assets/index-BOdNralo.js.map +0 -1
|
@@ -108,12 +108,12 @@ Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}
|
|
|
108
108
|
animation: ${0} 1.4s linear infinite;
|
|
109
109
|
`,__)),x_=W(`svg`,{name:`MuiCircularProgress`,slot:`Svg`,overridesResolver:(e,t)=>t.svg})({display:`block`}),S_=W(`circle`,{name:`MuiCircularProgress`,slot:`Circle`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.circle,t[`circle${G(n.variant)}`],n.disableShrink&&t.circleDisableShrink]}})(({ownerState:e,theme:t})=>A({stroke:`currentColor`},e.variant===`determinate`&&{transition:t.transitions.create(`stroke-dashoffset`)},e.variant===`indeterminate`&&{strokeDasharray:`80px, 200px`,strokeDashoffset:0}),({ownerState:e})=>e.variant===`indeterminate`&&!e.disableShrink&&Cn(h_||=d_`
|
|
110
110
|
animation: ${0} 1.4s ease-in-out infinite;
|
|
111
|
-
`,v_)),C_=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiCircularProgress`}),{className:r,color:i=`primary`,disableShrink:a=!1,size:o=40,style:s,thickness:c=3.6,value:l=0,variant:u=`indeterminate`}=n,d=L(n,u_),f=A({},n,{color:i,disableShrink:a,size:o,thickness:c,value:l,variant:u}),p=y_(f),m={},h={},g={};if(u===`determinate`){let e=2*Math.PI*((g_-c)/2);m.strokeDasharray=e.toFixed(3),g[`aria-valuenow`]=Math.round(l),m.strokeDashoffset=`${((100-l)/100*e).toFixed(3)}px`,h.transform=`rotate(-90deg)`}return(0,N.jsx)(b_,A({className:z(p.root,r),style:A({width:o,height:o},h,s),ownerState:f,ref:t,role:`progressbar`},g,d,{children:(0,N.jsx)(x_,{className:p.svg,ownerState:f,viewBox:`${g_/2} ${g_/2} ${g_} ${g_}`,children:(0,N.jsx)(S_,{className:p.circle,style:m,ownerState:f,cx:g_,cy:g_,r:(g_-c)/2,fill:`none`,strokeWidth:c})})}))}),w_=hs({createStyledComponent:W(`div`,{name:`MuiContainer`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,t[`maxWidth${G(String(n.maxWidth))}`],n.fixed&&t.fixed,n.disableGutters&&t.disableGutters]}}),useThemeProps:e=>F({props:e,name:`MuiContainer`})});function T_(e){let t=lo(e);return t.body===e?uo(e).innerWidth>t.documentElement.clientWidth:e.scrollHeight>e.clientHeight}function E_(e,t){t?e.setAttribute(`aria-hidden`,`true`):e.removeAttribute(`aria-hidden`)}function D_(e){return parseInt(uo(e).getComputedStyle(e).paddingRight,10)||0}function O_(e){let t=[`TEMPLATE`,`SCRIPT`,`STYLE`,`LINK`,`MAP`,`META`,`NOSCRIPT`,`PICTURE`,`COL`,`COLGROUP`,`PARAM`,`SLOT`,`SOURCE`,`TRACK`].indexOf(e.tagName)!==-1,n=e.tagName===`INPUT`&&e.getAttribute(`type`)===`hidden`;return t||n}function k_(e,t,n,r,i){let a=[t,n,...r];[].forEach.call(e.children,e=>{let t=a.indexOf(e)===-1,n=!O_(e);t&&n&&E_(e,i)})}function A_(e,t){let n=-1;return e.some((e,r)=>t(e)?(n=r,!0):!1),n}function j_(e,t){let n=[],r=e.container;if(!t.disableScrollLock){if(T_(r)){let e=Lo(lo(r));n.push({value:r.style.paddingRight,property:`padding-right`,el:r}),r.style.paddingRight=`${D_(r)+e}px`;let t=lo(r).querySelectorAll(`.mui-fixed`);[].forEach.call(t,t=>{n.push({value:t.style.paddingRight,property:`padding-right`,el:t}),t.style.paddingRight=`${D_(t)+e}px`})}let e;if(r.parentNode instanceof DocumentFragment)e=lo(r).body;else{let t=r.parentElement,n=uo(r);e=t?.nodeName===`HTML`&&n.getComputedStyle(t).overflowY===`scroll`?t:r}n.push({value:e.style.overflow,property:`overflow`,el:e},{value:e.style.overflowX,property:`overflow-x`,el:e},{value:e.style.overflowY,property:`overflow-y`,el:e}),e.style.overflow=`hidden`}return()=>{n.forEach(({value:e,el:t,property:n})=>{e?t.style.setProperty(n,e):t.style.removeProperty(n)})}}function M_(e){let t=[];return[].forEach.call(e.children,e=>{e.getAttribute(`aria-hidden`)===`true`&&t.push(e)}),t}var N_=class{constructor(){this.containers=void 0,this.modals=void 0,this.modals=[],this.containers=[]}add(e,t){let n=this.modals.indexOf(e);if(n!==-1)return n;n=this.modals.length,this.modals.push(e),e.modalRef&&E_(e.modalRef,!1);let r=M_(t);k_(t,e.mount,e.modalRef,r,!0);let i=A_(this.containers,e=>e.container===t);return i===-1?(this.containers.push({modals:[e],container:t,restore:null,hiddenSiblings:r}),n):(this.containers[i].modals.push(e),n)}mount(e,t){let n=A_(this.containers,t=>t.modals.indexOf(e)!==-1),r=this.containers[n];r.restore||=j_(r,t)}remove(e,t=!0){let n=this.modals.indexOf(e);if(n===-1)return n;let r=A_(this.containers,t=>t.modals.indexOf(e)!==-1),i=this.containers[r];if(i.modals.splice(i.modals.indexOf(e),1),this.modals.splice(n,1),i.modals.length===0)i.restore&&i.restore(),e.modalRef&&E_(e.modalRef,t),k_(i.container,e.mount,e.modalRef,i.hiddenSiblings,!1),this.containers.splice(r,1);else{let e=i.modals[i.modals.length-1];e.modalRef&&E_(e.modalRef,!1)}return n}isTopModal(e){return this.modals.length>0&&this.modals[this.modals.length-1]===e}},P_=[`input`,`select`,`textarea`,`a[href]`,`button`,`[tabindex]`,`audio[controls]`,`video[controls]`,`[contenteditable]:not([contenteditable="false"])`].join(`,`);function F_(e){let t=parseInt(e.getAttribute(`tabindex`)||``,10);return Number.isNaN(t)?e.contentEditable===`true`||(e.nodeName===`AUDIO`||e.nodeName===`VIDEO`||e.nodeName===`DETAILS`)&&e.getAttribute(`tabindex`)===null?0:e.tabIndex:t}function I_(e){if(e.tagName!==`INPUT`||e.type!==`radio`||!e.name)return!1;let t=t=>e.ownerDocument.querySelector(`input[type="radio"]${t}`),n=t(`[name="${e.name}"]:checked`);return n||=t(`[name="${e.name}"]`),n!==e}function L_(e){return!(e.disabled||e.tagName===`INPUT`&&e.type===`hidden`||I_(e))}function R_(e){let t=[],n=[];return Array.from(e.querySelectorAll(P_)).forEach((e,r)=>{let i=F_(e);i!==-1&&L_(e)&&(i===0?t.push(e):n.push({documentOrder:r,tabIndex:i,node:e}))}),n.sort((e,t)=>e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex).map(e=>e.node).concat(t)}function z_(){return!0}function B_(e){let{children:t,disableAutoFocus:n=!1,disableEnforceFocus:r=!1,disableRestoreFocus:i=!1,getTabbable:a=R_,isEnabled:o=z_,open:s}=e,c=y.useRef(!1),l=y.useRef(null),u=y.useRef(null),d=y.useRef(null),f=y.useRef(null),p=y.useRef(!1),m=y.useRef(null),h=yo(Xo(t),m),g=y.useRef(null);y.useEffect(()=>{s&&m.current&&(p.current=!n)},[n,s]),y.useEffect(()=>{if(!s||!m.current)return;let e=lo(m.current);return m.current.contains(e.activeElement)||(m.current.hasAttribute(`tabIndex`)||m.current.setAttribute(`tabIndex`,`-1`),p.current&&m.current.focus()),()=>{i||(d.current&&d.current.focus&&(c.current=!0,d.current.focus()),d.current=null)}},[s]),y.useEffect(()=>{if(!s||!m.current)return;let e=lo(m.current),t=t=>{g.current=t,!r&&o()&&t.key===`Tab`&&e.activeElement===m.current&&t.shiftKey&&(c.current=!0,u.current&&u.current.focus())},n=()=>{let t=m.current;if(t===null)return;if(!e.hasFocus()||!o()||c.current){c.current=!1;return}if(t.contains(e.activeElement)||r&&e.activeElement!==l.current&&e.activeElement!==u.current)return;if(e.activeElement!==f.current)f.current=null;else if(f.current!==null)return;if(!p.current)return;let n=[];if((e.activeElement===l.current||e.activeElement===u.current)&&(n=a(m.current)),n.length>0){let e=!!(g.current?.shiftKey&&g.current?.key===`Tab`),t=n[0],r=n[n.length-1];typeof t!=`string`&&typeof r!=`string`&&(e?r.focus():t.focus())}else t.focus()};e.addEventListener(`focusin`,n),e.addEventListener(`keydown`,t,!0);let i=setInterval(()=>{e.activeElement&&e.activeElement.tagName===`BODY`&&n()},50);return()=>{clearInterval(i),e.removeEventListener(`focusin`,n),e.removeEventListener(`keydown`,t,!0)}},[n,r,i,o,s,a]);let _=e=>{d.current===null&&(d.current=e.relatedTarget),p.current=!0,f.current=e.target;let n=t.props.onFocus;n&&n(e)},v=e=>{d.current===null&&(d.current=e.relatedTarget),p.current=!0};return(0,N.jsxs)(y.Fragment,{children:[(0,N.jsx)(`div`,{tabIndex:s?0:-1,onFocus:v,ref:l,"data-testid":`sentinelStart`}),y.cloneElement(t,{ref:h,onFocus:_}),(0,N.jsx)(`div`,{tabIndex:s?0:-1,onFocus:v,ref:u,"data-testid":`sentinelEnd`})]})}j();function V_(e){return typeof e==`function`?e():e}function H_(e){return e?e.props.hasOwnProperty(`in`):!1}var U_=new N_;function W_(e){let{container:t,disableEscapeKeyDown:n=!1,disableScrollLock:r=!1,manager:i=U_,closeAfterTransition:a=!1,onTransitionEnter:o,onTransitionExited:s,children:c,onClose:l,open:u,rootRef:d}=e,f=y.useRef({}),p=y.useRef(null),m=y.useRef(null),h=yo(m,d),[g,_]=y.useState(!u),v=H_(c),b=!0;(e[`aria-hidden`]===`false`||e[`aria-hidden`]===!1)&&(b=!1);let x=()=>lo(p.current),S=()=>(f.current.modalRef=m.current,f.current.mount=p.current,f.current),C=()=>{i.mount(S(),{disableScrollLock:r}),m.current&&(m.current.scrollTop=0)},w=vo(()=>{let e=V_(t)||x().body;i.add(S(),e),m.current&&C()}),T=y.useCallback(()=>i.isTopModal(S()),[i]),E=vo(e=>{p.current=e,e&&(u&&T()?C():m.current&&E_(m.current,b))}),D=y.useCallback(()=>{i.remove(S(),b)},[b,i]);y.useEffect(()=>()=>{D()},[D]),y.useEffect(()=>{u?w():(!v||!a)&&D()},[u,D,v,a,w]);let O=e=>t=>{var r;(r=e.onKeyDown)==null||r.call(e,t),t.key===`Escape`&&t.which!==229&&T()&&(n||(t.stopPropagation(),l&&l(t,`escapeKeyDown`)))},k=e=>t=>{var n;(n=e.onClick)==null||n.call(e,t),t.target===t.currentTarget&&l&&l(t,`backdropClick`)};return{getRootProps:(t={})=>{let n=Wo(e);delete n.onTransitionEnter,delete n.onTransitionExited;let r=A({},n,t);return A({role:`presentation`},r,{onKeyDown:O(r),ref:h})},getBackdropProps:(e={})=>{let t=e;return A({"aria-hidden":!0},t,{onClick:k(t),open:u})},getTransitionProps:()=>({onEnter:oo(()=>{_(!1),o&&o()},c?.props.onEnter),onExited:oo(()=>{_(!0),s&&s(),a&&D()},c?.props.onExited)}),rootRef:h,portalRef:E,isTopModal:T,exited:g,hasTransition:v}}function G_(e){return B(`MuiModal`,e)}V(`MuiModal`,[`root`,`hidden`,`backdrop`]),R(),j();var K_=`BackdropComponent.BackdropProps.classes.className.closeAfterTransition.children.container.component.components.componentsProps.disableAutoFocus.disableEnforceFocus.disableEscapeKeyDown.disablePortal.disableRestoreFocus.disableScrollLock.hideBackdrop.keepMounted.onBackdropClick.onClose.onTransitionEnter.onTransitionExited.open.slotProps.slots.theme`.split(`.`),q_=e=>{let{open:t,exited:n,classes:r}=e;return H({root:[`root`,!t&&n&&`hidden`],backdrop:[`backdrop`]},G_,r)},J_=W(`div`,{name:`MuiModal`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,!n.open&&n.exited&&t.hidden]}})(({theme:e,ownerState:t})=>A({position:`fixed`,zIndex:(e.vars||e).zIndex.modal,right:0,bottom:0,top:0,left:0},!t.open&&t.exited&&{visibility:`hidden`})),Y_=W(Yh,{name:`MuiModal`,slot:`Backdrop`,overridesResolver:(e,t)=>t.backdrop})({zIndex:-1}),X_=y.forwardRef(function(e,t){let n=F({name:`MuiModal`,props:e}),{BackdropComponent:r=Y_,BackdropProps:i,className:a,closeAfterTransition:o=!1,children:s,container:c,component:l,components:u={},componentsProps:d={},disableAutoFocus:f=!1,disableEnforceFocus:p=!1,disableEscapeKeyDown:m=!1,disablePortal:h=!1,disableRestoreFocus:g=!1,disableScrollLock:_=!1,hideBackdrop:v=!1,keepMounted:b=!1,onBackdropClick:x,open:S,slotProps:C,slots:w}=n,T=L(n,K_),E=A({},n,{closeAfterTransition:o,disableAutoFocus:f,disableEnforceFocus:p,disableEscapeKeyDown:m,disablePortal:h,disableRestoreFocus:g,disableScrollLock:_,hideBackdrop:v,keepMounted:b}),{getRootProps:D,getBackdropProps:O,getTransitionProps:k,portalRef:j,isTopModal:ee,exited:te,hasTransition:M}=W_(A({},E,{rootRef:t})),ne=A({},E,{exited:te}),re=q_(ne),ie={};if(s.props.tabIndex===void 0&&(ie.tabIndex=`-1`),M){let{onEnter:e,onExited:t}=k();ie.onEnter=e,ie.onExited=t}let P=w?.root??u.Root??J_,ae=w?.backdrop??u.Backdrop??r,oe=C?.root??d.root,se=C?.backdrop??d.backdrop,ce=Yo({elementType:P,externalSlotProps:oe,externalForwardedProps:T,getSlotProps:D,additionalProps:{ref:t,as:l},ownerState:ne,className:z(a,oe?.className,re?.root,!ne.open&&ne.exited&&re?.hidden)}),le=Yo({elementType:ae,externalSlotProps:se,additionalProps:i,getSlotProps:e=>O(A({},e,{onClick:t=>{x&&x(t),e!=null&&e.onClick&&e.onClick(t)}})),className:z(se?.className,i?.className,re?.backdrop),ownerState:ne});return!b&&!S&&(!M||te)?null:(0,N.jsx)(Jm,{ref:j,container:c,disablePortal:h,children:(0,N.jsxs)(P,A({},ce,{children:[!v&&r?(0,N.jsx)(ae,A({},le)):null,(0,N.jsx)(B_,{disableEnforceFocus:p,disableAutoFocus:f,disableRestoreFocus:g,isEnabled:ee,open:S,children:y.cloneElement(s,ie)})]}))})});function Z_(e){return B(`MuiDialog`,e)}var Q_=V(`MuiDialog`,[`root`,`scrollPaper`,`scrollBody`,`container`,`paper`,`paperScrollPaper`,`paperScrollBody`,`paperWidthFalse`,`paperWidthXs`,`paperWidthSm`,`paperWidthMd`,`paperWidthLg`,`paperWidthXl`,`paperFullWidth`,`paperFullScreen`]),$_=y.createContext({});R(),j();var ev=[`aria-describedby`,`aria-labelledby`,`BackdropComponent`,`BackdropProps`,`children`,`className`,`disableEscapeKeyDown`,`fullScreen`,`fullWidth`,`maxWidth`,`onBackdropClick`,`onClick`,`onClose`,`open`,`PaperComponent`,`PaperProps`,`scroll`,`TransitionComponent`,`transitionDuration`,`TransitionProps`],tv=W(Yh,{name:`MuiDialog`,slot:`Backdrop`,overrides:(e,t)=>t.backdrop})({zIndex:-1}),nv=e=>{let{classes:t,scroll:n,maxWidth:r,fullWidth:i,fullScreen:a}=e;return H({root:[`root`],container:[`container`,`scroll${G(n)}`],paper:[`paper`,`paperScroll${G(n)}`,`paperWidth${G(String(r))}`,i&&`paperFullWidth`,a&&`paperFullScreen`]},Z_,t)},rv=W(X_,{name:`MuiDialog`,slot:`Root`,overridesResolver:(e,t)=>t.root})({"@media print":{position:`absolute !important`}}),iv=W(`div`,{name:`MuiDialog`,slot:`Container`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.container,t[`scroll${G(n.scroll)}`]]}})(({ownerState:e})=>A({height:`100%`,"@media print":{height:`auto`},outline:0},e.scroll===`paper`&&{display:`flex`,justifyContent:`center`,alignItems:`center`},e.scroll===`body`&&{overflowY:`auto`,overflowX:`hidden`,textAlign:`center`,"&::after":{content:`""`,display:`inline-block`,verticalAlign:`middle`,height:`100%`,width:`0`}})),av=W(Vp,{name:`MuiDialog`,slot:`Paper`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.paper,t[`scrollPaper${G(n.scroll)}`],t[`paperWidth${G(String(n.maxWidth))}`],n.fullWidth&&t.paperFullWidth,n.fullScreen&&t.paperFullScreen]}})(({theme:e,ownerState:t})=>A({margin:32,position:`relative`,overflowY:`auto`,"@media print":{overflowY:`visible`,boxShadow:`none`}},t.scroll===`paper`&&{display:`flex`,flexDirection:`column`,maxHeight:`calc(100% - 64px)`},t.scroll===`body`&&{display:`inline-block`,verticalAlign:`middle`,textAlign:`left`},!t.maxWidth&&{maxWidth:`calc(100% - 64px)`},t.maxWidth===`xs`&&{maxWidth:e.breakpoints.unit===`px`?Math.max(e.breakpoints.values.xs,444):`max(${e.breakpoints.values.xs}${e.breakpoints.unit}, 444px)`,[`&.${Q_.paperScrollBody}`]:{[e.breakpoints.down(Math.max(e.breakpoints.values.xs,444)+64)]:{maxWidth:`calc(100% - 64px)`}}},t.maxWidth&&t.maxWidth!==`xs`&&{maxWidth:`${e.breakpoints.values[t.maxWidth]}${e.breakpoints.unit}`,[`&.${Q_.paperScrollBody}`]:{[e.breakpoints.down(e.breakpoints.values[t.maxWidth]+64)]:{maxWidth:`calc(100% - 64px)`}}},t.fullWidth&&{width:`calc(100% - 64px)`},t.fullScreen&&{margin:0,width:`100%`,maxWidth:`100%`,height:`100%`,maxHeight:`none`,borderRadius:0,[`&.${Q_.paperScrollBody}`]:{margin:0,maxWidth:`100%`}})),ov=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiDialog`}),r=yc(),i={enter:r.transitions.duration.enteringScreen,exit:r.transitions.duration.leavingScreen},{"aria-describedby":a,"aria-labelledby":o,BackdropComponent:s,BackdropProps:c,children:l,className:u,disableEscapeKeyDown:d=!1,fullScreen:f=!1,fullWidth:p=!1,maxWidth:m=`sm`,onBackdropClick:h,onClick:g,onClose:_,open:v,PaperComponent:b=Vp,PaperProps:x={},scroll:S=`paper`,TransitionComponent:C=Wh,transitionDuration:w=i,TransitionProps:T}=n,E=L(n,ev),D=A({},n,{disableEscapeKeyDown:d,fullScreen:f,fullWidth:p,maxWidth:m,scroll:S}),O=nv(D),k=y.useRef(),j=e=>{k.current=e.target===e.currentTarget},ee=e=>{g&&g(e),k.current&&(k.current=null,h&&h(e),_&&_(e,`backdropClick`))},te=go(o),M=y.useMemo(()=>({titleId:te}),[te]);return(0,N.jsx)(rv,A({className:z(O.root,u),closeAfterTransition:!0,components:{Backdrop:tv},componentsProps:{backdrop:A({transitionDuration:w,as:s},c)},disableEscapeKeyDown:d,onClose:_,open:v,ref:t,onClick:ee,ownerState:D},E,{children:(0,N.jsx)(C,A({appear:!0,in:v,timeout:w,role:`presentation`},T,{children:(0,N.jsx)(iv,{className:z(O.container),onMouseDown:j,ownerState:D,children:(0,N.jsx)(av,A({as:b,elevation:24,role:`dialog`,"aria-describedby":a,"aria-labelledby":te},x,{className:z(O.paper,x.className),ownerState:D,children:(0,N.jsx)($_.Provider,{value:M,children:l})}))})}))}))});function sv(e){return B(`MuiDialogActions`,e)}V(`MuiDialogActions`,[`root`,`spacing`]),R(),j();var cv=[`className`,`disableSpacing`],lv=e=>{let{classes:t,disableSpacing:n}=e;return H({root:[`root`,!n&&`spacing`]},sv,t)},uv=W(`div`,{name:`MuiDialogActions`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,!n.disableSpacing&&t.spacing]}})(({ownerState:e})=>A({display:`flex`,alignItems:`center`,padding:8,justifyContent:`flex-end`,flex:`0 0 auto`},!e.disableSpacing&&{"& > :not(style) ~ :not(style)":{marginLeft:8}})),dv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiDialogActions`}),{className:r,disableSpacing:i=!1}=n,a=L(n,cv),o=A({},n,{disableSpacing:i}),s=lv(o);return(0,N.jsx)(uv,A({className:z(s.root,r),ownerState:o,ref:t},a))});function fv(e){return B(`MuiDialogContent`,e)}V(`MuiDialogContent`,[`root`,`dividers`]);function pv(e){return B(`MuiDialogTitle`,e)}var mv=V(`MuiDialogTitle`,[`root`]);R(),j();var hv=[`className`,`dividers`],gv=e=>{let{classes:t,dividers:n}=e;return H({root:[`root`,n&&`dividers`]},fv,t)},_v=W(`div`,{name:`MuiDialogContent`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,n.dividers&&t.dividers]}})(({theme:e,ownerState:t})=>A({flex:`1 1 auto`,WebkitOverflowScrolling:`touch`,overflowY:`auto`,padding:`20px 24px`},t.dividers?{padding:`16px 24px`,borderTop:`1px solid ${(e.vars||e).palette.divider}`,borderBottom:`1px solid ${(e.vars||e).palette.divider}`}:{[`.${mv.root} + &`]:{paddingTop:0}})),vv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiDialogContent`}),{className:r,dividers:i=!1}=n,a=L(n,hv),o=A({},n,{dividers:i}),s=gv(o);return(0,N.jsx)(_v,A({className:z(s.root,r),ownerState:o,ref:t},a))});function yv(e){return B(`MuiDialogContentText`,e)}V(`MuiDialogContentText`,[`root`]),R(),j();var bv=[`children`,`className`],xv=e=>{let{classes:t}=e,n=H({root:[`root`]},yv,t);return A({},t,n)},Sv=W(K,{shouldForwardProp:e=>Cc(e)||e===`classes`,name:`MuiDialogContentText`,slot:`Root`,overridesResolver:(e,t)=>t.root})({}),Cv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiDialogContentText`}),{className:r}=n,i=L(n,bv),a=xv(i);return(0,N.jsx)(Sv,A({component:`p`,variant:`body1`,color:`text.secondary`,ref:t,ownerState:i,className:z(a.root,r)},n,{classes:a}))});j(),R();var wv=[`className`,`id`],Tv=e=>{let{classes:t}=e;return H({root:[`root`]},pv,t)},Ev=W(K,{name:`MuiDialogTitle`,slot:`Root`,overridesResolver:(e,t)=>t.root})({padding:`16px 24px`,flex:`0 0 auto`}),Dv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiDialogTitle`}),{className:r,id:i}=n,a=L(n,wv),o=n,s=Tv(o),{titleId:c=i}=y.useContext($_);return(0,N.jsx)(Ev,A({component:`h2`,className:z(s.root,r),ownerState:o,ref:t,variant:`h6`,id:i??c},a))}),Ov=V(`MuiDivider`,[`root`,`absolute`,`fullWidth`,`inset`,`middle`,`flexItem`,`light`,`vertical`,`withChildren`,`withChildrenVertical`,`textAlignRight`,`textAlignLeft`,`wrapper`,`wrapperVertical`]);R(),j(),mr();var kv=[`disableUnderline`,`components`,`componentsProps`,`fullWidth`,`hiddenLabel`,`inputComponent`,`multiline`,`slotProps`,`slots`,`type`],Av=e=>{let{classes:t,disableUnderline:n}=e,r=H({root:[`root`,!n&&`underline`],input:[`input`]},Ah,t);return A({},t,r)},jv=W(Sh,{shouldForwardProp:e=>Cc(e)||e===`classes`,name:`MuiFilledInput`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[...yh(e,t),!n.disableUnderline&&t.underline]}})(({theme:e,ownerState:t})=>{let n=e.palette.mode===`light`,r=n?`rgba(0, 0, 0, 0.42)`:`rgba(255, 255, 255, 0.7)`,i=n?`rgba(0, 0, 0, 0.06)`:`rgba(255, 255, 255, 0.09)`,a=n?`rgba(0, 0, 0, 0.09)`:`rgba(255, 255, 255, 0.13)`,o=n?`rgba(0, 0, 0, 0.12)`:`rgba(255, 255, 255, 0.12)`;return A({position:`relative`,backgroundColor:e.vars?e.vars.palette.FilledInput.bg:i,borderTopLeftRadius:(e.vars||e).shape.borderRadius,borderTopRightRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create(`background-color`,{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),"&:hover":{backgroundColor:e.vars?e.vars.palette.FilledInput.hoverBg:a,"@media (hover: none)":{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:i}},[`&.${jh.focused}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:i},[`&.${jh.disabled}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.disabledBg:o}},!t.disableUnderline&&{"&::after":{borderBottom:`2px solid ${(e.vars||e).palette[t.color||`primary`]?.main}`,left:0,bottom:0,content:`""`,position:`absolute`,right:0,transform:`scaleX(0)`,transition:e.transitions.create(`transform`,{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:`none`},[`&.${jh.focused}:after`]:{transform:`scaleX(1) translateX(0)`},[`&.${jh.error}`]:{"&::before, &::after":{borderBottomColor:(e.vars||e).palette.error.main}},"&::before":{borderBottom:`1px solid ${e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`:r}`,left:0,bottom:0,content:`"\\00a0"`,position:`absolute`,right:0,transition:e.transitions.create(`border-bottom-color`,{duration:e.transitions.duration.shorter}),pointerEvents:`none`},[`&:hover:not(.${jh.disabled}, .${jh.error}):before`]:{borderBottom:`1px solid ${(e.vars||e).palette.text.primary}`},[`&.${jh.disabled}:before`]:{borderBottomStyle:`dotted`}},t.startAdornment&&{paddingLeft:12},t.endAdornment&&{paddingRight:12},t.multiline&&A({padding:`25px 12px 8px`},t.size===`small`&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.hiddenLabel&&t.size===`small`&&{paddingTop:8,paddingBottom:9}))}),Mv=W(Ch,{name:`MuiFilledInput`,slot:`Input`,overridesResolver:bh})(({theme:e,ownerState:t})=>A({paddingTop:25,paddingRight:12,paddingBottom:8,paddingLeft:12},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:e.palette.mode===`light`?null:`0 0 0 100px #266798 inset`,WebkitTextFillColor:e.palette.mode===`light`?null:`#fff`,caretColor:e.palette.mode===`light`?null:`#fff`,borderTopLeftRadius:`inherit`,borderTopRightRadius:`inherit`}},e.vars&&{"&:-webkit-autofill":{borderTopLeftRadius:`inherit`,borderTopRightRadius:`inherit`},[e.getColorSchemeSelector(`dark`)]:{"&:-webkit-autofill":{WebkitBoxShadow:`0 0 0 100px #266798 inset`,WebkitTextFillColor:`#fff`,caretColor:`#fff`}}},t.size===`small`&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0},t.hiddenLabel&&t.size===`small`&&{paddingTop:8,paddingBottom:9},t.multiline&&{paddingTop:0,paddingBottom:0,paddingLeft:0,paddingRight:0})),Nv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiFilledInput`}),{components:r={},componentsProps:i,fullWidth:a=!1,inputComponent:o=`input`,multiline:s=!1,slotProps:c,slots:l={},type:u=`text`}=n,d=L(n,kv),f=A({},n,{fullWidth:a,inputComponent:o,multiline:s,type:u}),p=Av(n),m={root:{ownerState:f},input:{ownerState:f}},h=c??i?ur(m,c??i):m,g=l.root??r.Root??jv,_=l.input??r.Input??Mv;return(0,N.jsx)(Th,A({slots:{root:g,input:_},componentsProps:h,fullWidth:a,inputComponent:o,multiline:s,ref:t,type:u},d,{classes:p}))});Nv.muiName=`Input`;function Pv(e){return B(`MuiFormControl`,e)}V(`MuiFormControl`,[`root`,`marginNone`,`marginNormal`,`marginDense`,`fullWidth`,`disabled`]),R(),j();var Fv=[`children`,`className`,`color`,`component`,`disabled`,`error`,`focused`,`fullWidth`,`hiddenLabel`,`margin`,`required`,`size`,`variant`],Iv=e=>{let{classes:t,margin:n,fullWidth:r}=e;return H({root:[`root`,n!==`none`&&`margin${G(n)}`,r&&`fullWidth`]},Pv,t)},Lv=W(`div`,{name:`MuiFormControl`,slot:`Root`,overridesResolver:({ownerState:e},t)=>A({},t.root,t[`margin${G(e.margin)}`],e.fullWidth&&t.fullWidth)})(({ownerState:e})=>A({display:`inline-flex`,flexDirection:`column`,position:`relative`,minWidth:0,padding:0,margin:0,border:0,verticalAlign:`top`},e.margin===`normal`&&{marginTop:16,marginBottom:8},e.margin===`dense`&&{marginTop:8,marginBottom:4},e.fullWidth&&{width:`100%`})),Rv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiFormControl`}),{children:r,className:i,color:a=`primary`,component:o=`div`,disabled:s=!1,error:c=!1,focused:l,fullWidth:u=!1,hiddenLabel:d=!1,margin:f=`none`,required:p=!1,size:m=`medium`,variant:h=`outlined`}=n,g=L(n,Fv),_=A({},n,{color:a,component:o,disabled:s,error:c,fullWidth:u,hiddenLabel:d,margin:f,required:p,size:m,variant:h}),v=Iv(_),[b,x]=y.useState(()=>{let e=!1;return r&&y.Children.forEach(r,t=>{if(!ap(t,[`Input`,`Select`]))return;let n=ap(t,[`Select`])?t.props.input:t;n&&hh(n.props)&&(e=!0)}),e}),[S,C]=y.useState(()=>{let e=!1;return r&&y.Children.forEach(r,t=>{ap(t,[`Input`,`Select`])&&(mh(t.props,!0)||mh(t.props.inputProps,!0))&&(e=!0)}),e}),[w,T]=y.useState(!1);s&&w&&T(!1);let E=l!==void 0&&!s?l:w,D,O=y.useMemo(()=>({adornedStart:b,setAdornedStart:x,color:a,disabled:s,error:c,filled:S,focused:E,fullWidth:u,hiddenLabel:d,size:m,onBlur:()=>{T(!1)},onEmpty:()=>{C(!1)},onFilled:()=>{C(!0)},onFocus:()=>{T(!0)},registerEffect:D,required:p,variant:h}),[b,a,s,c,S,E,u,d,D,p,m,h]);return(0,N.jsx)(dh.Provider,{value:O,children:(0,N.jsx)(Lv,A({as:o,ownerState:_,className:z(v.root,i),ref:t},g,{children:r}))})}),X=Cs({createStyledComponent:W(`div`,{name:`MuiStack`,slot:`Root`,overridesResolver:(e,t)=>t.root}),useThemeProps:e=>F({props:e,name:`MuiStack`})});function zv(e){return B(`MuiFormControlLabel`,e)}var Bv=V(`MuiFormControlLabel`,[`root`,`labelPlacementStart`,`labelPlacementTop`,`labelPlacementBottom`,`disabled`,`label`,`error`,`required`,`asterisk`]);R(),j();var Vv=[`checked`,`className`,`componentsProps`,`control`,`disabled`,`disableTypography`,`inputRef`,`label`,`labelPlacement`,`name`,`onChange`,`required`,`slotProps`,`value`],Hv=e=>{let{classes:t,disabled:n,labelPlacement:r,error:i,required:a}=e;return H({root:[`root`,n&&`disabled`,`labelPlacement${G(r)}`,i&&`error`,a&&`required`],label:[`label`,n&&`disabled`],asterisk:[`asterisk`,i&&`error`]},zv,t)},Uv=W(`label`,{name:`MuiFormControlLabel`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[{[`& .${Bv.label}`]:t.label},t.root,t[`labelPlacement${G(n.labelPlacement)}`]]}})(({theme:e,ownerState:t})=>A({display:`inline-flex`,alignItems:`center`,cursor:`pointer`,verticalAlign:`middle`,WebkitTapHighlightColor:`transparent`,marginLeft:-11,marginRight:16,[`&.${Bv.disabled}`]:{cursor:`default`}},t.labelPlacement===`start`&&{flexDirection:`row-reverse`,marginLeft:16,marginRight:-11},t.labelPlacement===`top`&&{flexDirection:`column-reverse`,marginLeft:16},t.labelPlacement===`bottom`&&{flexDirection:`column`,marginLeft:16},{[`& .${Bv.label}`]:{[`&.${Bv.disabled}`]:{color:(e.vars||e).palette.text.disabled}}})),Wv=W(`span`,{name:`MuiFormControlLabel`,slot:`Asterisk`,overridesResolver:(e,t)=>t.asterisk})(({theme:e})=>({[`&.${Bv.error}`]:{color:(e.vars||e).palette.error.main}})),Gv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiFormControlLabel`}),{className:r,componentsProps:i={},control:a,disabled:o,disableTypography:s,label:c,labelPlacement:l=`end`,required:u,slotProps:d={}}=n,f=L(n,Vv),p=fh(),m=o??a.props.disabled??p?.disabled,h=u??a.props.required,g={disabled:m,required:h};[`checked`,`name`,`onChange`,`value`,`inputRef`].forEach(e=>{a.props[e]===void 0&&n[e]!==void 0&&(g[e]=n[e])});let _=uh({props:n,muiFormControl:p,states:[`error`]}),v=A({},n,{disabled:m,labelPlacement:l,required:h,error:_.error}),b=Hv(v),x=d.typography??i.typography,S=c;return S!=null&&S.type!==K&&!s&&(S=(0,N.jsx)(K,A({component:`span`},x,{className:z(b.label,x?.className),children:S}))),(0,N.jsxs)(Uv,A({className:z(b.root,r),ownerState:v,ref:t},f,{children:[y.cloneElement(a,g),h?(0,N.jsxs)(X,{display:`block`,children:[S,(0,N.jsxs)(Wv,{ownerState:v,"aria-hidden":!0,className:b.asterisk,children:[` `,`*`]})]}):S]}))});function Kv(e){return B(`MuiFormHelperText`,e)}var qv=V(`MuiFormHelperText`,[`root`,`error`,`disabled`,`sizeSmall`,`sizeMedium`,`contained`,`focused`,`filled`,`required`]);R(),j();var Jv,Yv=[`children`,`className`,`component`,`disabled`,`error`,`filled`,`focused`,`margin`,`required`,`variant`],Xv=e=>{let{classes:t,contained:n,size:r,disabled:i,error:a,filled:o,focused:s,required:c}=e;return H({root:[`root`,i&&`disabled`,a&&`error`,r&&`size${G(r)}`,n&&`contained`,s&&`focused`,o&&`filled`,c&&`required`]},Kv,t)},Zv=W(`p`,{name:`MuiFormHelperText`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,n.size&&t[`size${G(n.size)}`],n.contained&&t.contained,n.filled&&t.filled]}})(({theme:e,ownerState:t})=>A({color:(e.vars||e).palette.text.secondary},e.typography.caption,{textAlign:`left`,marginTop:3,marginRight:0,marginBottom:0,marginLeft:0,[`&.${qv.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${qv.error}`]:{color:(e.vars||e).palette.error.main}},t.size===`small`&&{marginTop:4},t.contained&&{marginLeft:14,marginRight:14})),Qv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiFormHelperText`}),{children:r,className:i,component:a=`p`}=n,o=L(n,Yv),s=uh({props:n,muiFormControl:fh(),states:[`variant`,`size`,`disabled`,`error`,`filled`,`focused`,`required`]}),c=A({},n,{component:a,contained:s.variant===`filled`||s.variant===`outlined`,variant:s.variant,size:s.size,disabled:s.disabled,error:s.error,filled:s.filled,focused:s.focused,required:s.required}),l=Xv(c);return(0,N.jsx)(Zv,A({as:a,ownerState:c,className:z(l.root,i),ref:t},o,{children:r===` `?Jv||=(0,N.jsx)(`span`,{className:`notranslate`,children:``}):r}))});function $v(e){return B(`MuiFormLabel`,e)}var ey=V(`MuiFormLabel`,[`root`,`colorSecondary`,`focused`,`disabled`,`error`,`filled`,`required`,`asterisk`]);R(),j();var ty=[`children`,`className`,`color`,`component`,`disabled`,`error`,`filled`,`focused`,`required`],ny=e=>{let{classes:t,color:n,focused:r,disabled:i,error:a,filled:o,required:s}=e;return H({root:[`root`,`color${G(n)}`,i&&`disabled`,a&&`error`,o&&`filled`,r&&`focused`,s&&`required`],asterisk:[`asterisk`,a&&`error`]},$v,t)},ry=W(`label`,{name:`MuiFormLabel`,slot:`Root`,overridesResolver:({ownerState:e},t)=>A({},t.root,e.color===`secondary`&&t.colorSecondary,e.filled&&t.filled)})(({theme:e,ownerState:t})=>A({color:(e.vars||e).palette.text.secondary},e.typography.body1,{lineHeight:`1.4375em`,padding:0,position:`relative`,[`&.${ey.focused}`]:{color:(e.vars||e).palette[t.color].main},[`&.${ey.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${ey.error}`]:{color:(e.vars||e).palette.error.main}})),iy=W(`span`,{name:`MuiFormLabel`,slot:`Asterisk`,overridesResolver:(e,t)=>t.asterisk})(({theme:e})=>({[`&.${ey.error}`]:{color:(e.vars||e).palette.error.main}})),ay=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiFormLabel`}),{children:r,className:i,component:a=`label`}=n,o=L(n,ty),s=uh({props:n,muiFormControl:fh(),states:[`color`,`required`,`focused`,`disabled`,`error`,`filled`]}),c=A({},n,{color:s.color||`primary`,component:a,disabled:s.disabled,error:s.error,filled:s.filled,focused:s.focused,required:s.required}),l=ny(c);return(0,N.jsxs)(ry,A({as:a,ownerState:c,className:z(l.root,i),ref:t},o,{children:[r,s.required&&(0,N.jsxs)(iy,{ownerState:c,"aria-hidden":!0,className:l.asterisk,children:[` `,`*`]})]}))}),oy=y.createContext();function sy(e){return B(`MuiGrid`,e)}var cy=[0,1,2,3,4,5,6,7,8,9,10],ly=[`column-reverse`,`column`,`row-reverse`,`row`],uy=[`nowrap`,`wrap-reverse`,`wrap`],dy=[`auto`,!0,1,2,3,4,5,6,7,8,9,10,11,12],fy=V(`MuiGrid`,[`root`,`container`,`item`,`zeroMinWidth`,...cy.map(e=>`spacing-xs-${e}`),...ly.map(e=>`direction-xs-${e}`),...uy.map(e=>`wrap-xs-${e}`),...dy.map(e=>`grid-xs-${e}`),...dy.map(e=>`grid-sm-${e}`),...dy.map(e=>`grid-md-${e}`),...dy.map(e=>`grid-lg-${e}`),...dy.map(e=>`grid-xl-${e}`)]);R(),j(),jr(),xa();var py=[`className`,`columns`,`columnSpacing`,`component`,`container`,`direction`,`item`,`rowSpacing`,`spacing`,`wrap`,`zeroMinWidth`];function my(e){let t=parseFloat(e);return`${t}${String(e).replace(String(t),``)||`px`}`}function hy({theme:e,ownerState:t}){let n;return e.breakpoints.keys.reduce((r,i)=>{let a={};if(t[i]&&(n=t[i]),!n)return r;if(n===!0)a={flexBasis:0,flexGrow:1,maxWidth:`100%`};else if(n===`auto`)a={flexBasis:`auto`,flexGrow:0,flexShrink:0,maxWidth:`none`,width:`auto`};else{let o=Or({values:t.columns,breakpoints:e.breakpoints.values}),s=typeof o==`object`?o[i]:o;if(s==null)return r;let c=`${Math.round(n/s*1e8)/1e6}%`,l={};if(t.container&&t.item&&t.columnSpacing!==0){let n=e.spacing(t.columnSpacing);if(n!==`0px`){let e=`calc(${c} + ${my(n)})`;l={flexBasis:e,maxWidth:e}}}a=A({flexBasis:c,flexGrow:0,maxWidth:c},l)}return e.breakpoints.values[i]===0?Object.assign(r,a):r[e.breakpoints.up(i)]=a,r},{})}function gy({theme:e,ownerState:t}){let n=Or({values:t.direction,breakpoints:e.breakpoints.values});return Cr({theme:e},n,e=>{let t={flexDirection:e};return e.indexOf(`column`)===0&&(t[`& > .${fy.item}`]={maxWidth:`none`}),t})}function _y({breakpoints:e,values:t}){let n=``;Object.keys(t).forEach(e=>{n===``&&t[e]!==0&&(n=e)});let r=Object.keys(e).sort((t,n)=>e[t]-e[n]);return r.slice(0,r.indexOf(n))}function vy({theme:e,ownerState:t}){let{container:n,rowSpacing:r}=t,i={};if(n&&r!==0){let t=Or({values:r,breakpoints:e.breakpoints.values}),n;typeof t==`object`&&(n=_y({breakpoints:e.breakpoints.values,values:t})),i=Cr({theme:e},t,(t,r)=>{var i;let a=e.spacing(t);return a===`0px`?(i=n)!=null&&i.includes(r)?{}:{marginTop:0,[`& > .${fy.item}`]:{paddingTop:0}}:{marginTop:`-${my(a)}`,[`& > .${fy.item}`]:{paddingTop:my(a)}}})}return i}function yy({theme:e,ownerState:t}){let{container:n,columnSpacing:r}=t,i={};if(n&&r!==0){let t=Or({values:r,breakpoints:e.breakpoints.values}),n;typeof t==`object`&&(n=_y({breakpoints:e.breakpoints.values,values:t})),i=Cr({theme:e},t,(t,r)=>{var i;let a=e.spacing(t);return a===`0px`?(i=n)!=null&&i.includes(r)?{}:{width:`100%`,marginLeft:0,[`& > .${fy.item}`]:{paddingLeft:0}}:{width:`calc(100% + ${my(a)})`,marginLeft:`-${my(a)}`,[`& > .${fy.item}`]:{paddingLeft:my(a)}}})}return i}function by(e,t,n={}){if(!e||e<=0)return[];if(typeof e==`string`&&!Number.isNaN(Number(e))||typeof e==`number`)return[n[`spacing-xs-${String(e)}`]];let r=[];return t.forEach(t=>{let i=e[t];Number(i)>0&&r.push(n[`spacing-${t}-${String(i)}`])}),r}var xy=W(`div`,{name:`MuiGrid`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e,{container:r,direction:i,item:a,spacing:o,wrap:s,zeroMinWidth:c,breakpoints:l}=n,u=[];r&&(u=by(o,l,t));let d=[];return l.forEach(e=>{let r=n[e];r&&d.push(t[`grid-${e}-${String(r)}`])}),[t.root,r&&t.container,a&&t.item,c&&t.zeroMinWidth,...u,i!==`row`&&t[`direction-xs-${String(i)}`],s!==`wrap`&&t[`wrap-xs-${String(s)}`],...d]}})(({ownerState:e})=>A({boxSizing:`border-box`},e.container&&{display:`flex`,flexWrap:`wrap`,width:`100%`},e.item&&{margin:0},e.zeroMinWidth&&{minWidth:0},e.wrap!==`wrap`&&{flexWrap:e.wrap}),gy,vy,yy,hy);function Sy(e,t){if(!e||e<=0)return[];if(typeof e==`string`&&!Number.isNaN(Number(e))||typeof e==`number`)return[`spacing-xs-${String(e)}`];let n=[];return t.forEach(t=>{let r=e[t];if(Number(r)>0){let e=`spacing-${t}-${String(r)}`;n.push(e)}}),n}var Cy=e=>{let{classes:t,container:n,direction:r,item:i,spacing:a,wrap:o,zeroMinWidth:s,breakpoints:c}=e,l=[];n&&(l=Sy(a,c));let u=[];return c.forEach(t=>{let n=e[t];n&&u.push(`grid-${t}-${String(n)}`)}),H({root:[`root`,n&&`container`,i&&`item`,s&&`zeroMinWidth`,...l,r!==`row`&&`direction-xs-${String(r)}`,o!==`wrap`&&`wrap-xs-${String(o)}`,...u]},sy,t)},wy=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiGrid`}),{breakpoints:r}=yc(),i=ga(n),{className:a,columns:o,columnSpacing:s,component:c=`div`,container:l=!1,direction:u=`row`,item:d=!1,rowSpacing:f,spacing:p=0,wrap:m=`wrap`,zeroMinWidth:h=!1}=i,g=L(i,py),_=f||p,v=s||p,b=y.useContext(oy),x=l?o||12:b,S={},C=A({},g);r.keys.forEach(e=>{g[e]!=null&&(S[e]=g[e],delete C[e])});let w=A({},i,{columns:x,container:l,direction:u,item:d,rowSpacing:_,columnSpacing:v,wrap:m,zeroMinWidth:h,spacing:p},S,{breakpoints:r.keys}),T=Cy(w);return(0,N.jsx)(oy.Provider,{value:x,children:(0,N.jsx)(xy,A({ownerState:w,className:z(T.root,a),as:c,ref:t},C))})});j(),R();var Ty=[`addEndListener`,`appear`,`children`,`easing`,`in`,`onEnter`,`onEntered`,`onEntering`,`onExit`,`onExited`,`onExiting`,`style`,`timeout`,`TransitionComponent`];function Ey(e){return`scale(${e}, ${e**2})`}var Dy={entering:{opacity:1,transform:Ey(1)},entered:{opacity:1,transform:`none`}},Oy=typeof navigator<`u`&&/^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent)&&/(os |version\/)15(.|_)4/i.test(navigator.userAgent),ky=y.forwardRef(function(e,t){let{addEndListener:n,appear:r=!0,children:i,easing:a,in:o,onEnter:s,onEntered:c,onEntering:l,onExit:u,onExited:d,onExiting:f,style:p,timeout:m=`auto`,TransitionComponent:h=wp}=e,g=L(e,Ty),_=To(),v=y.useRef(),b=yc(),x=y.useRef(null),S=dp(x,Xo(i),t),C=e=>t=>{if(e){let n=x.current;t===void 0?e(n):e(n,t)}},w=C(l),T=C((e,t)=>{Fp(e);let{duration:n,delay:r,easing:i}=Ip({style:p,timeout:m,easing:a},{mode:`enter`}),o;m===`auto`?(o=b.transitions.getAutoHeightDuration(e.clientHeight),v.current=o):o=n,e.style.transition=[b.transitions.create(`opacity`,{duration:o,delay:r}),b.transitions.create(`transform`,{duration:Oy?o:o*.666,delay:r,easing:i})].join(`,`),s&&s(e,t)}),E=C(c),D=C(f),O=C(e=>{let{duration:t,delay:n,easing:r}=Ip({style:p,timeout:m,easing:a},{mode:`exit`}),i;m===`auto`?(i=b.transitions.getAutoHeightDuration(e.clientHeight),v.current=i):i=t,e.style.transition=[b.transitions.create(`opacity`,{duration:i,delay:n}),b.transitions.create(`transform`,{duration:Oy?i:i*.666,delay:Oy?n:n||i*.333,easing:r})].join(`,`),e.style.opacity=0,e.style.transform=Ey(.75),u&&u(e)}),k=C(d);return(0,N.jsx)(h,A({appear:r,in:o,nodeRef:x,onEnter:T,onEntered:E,onEntering:w,onExit:O,onExited:k,onExiting:D,addEndListener:e=>{m===`auto`&&_.start(v.current||0,e),n&&n(x.current,e)},timeout:m===`auto`?null:m},g,{children:(e,t)=>y.cloneElement(i,A({style:A({opacity:0,transform:Ey(.75),visibility:e===`exited`&&!o?`hidden`:void 0},Dy[e],p,i.props.style),ref:S},t))}))});ky.muiSupportAuto=!0,R(),j(),mr();var Ay=[`disableUnderline`,`components`,`componentsProps`,`fullWidth`,`inputComponent`,`multiline`,`slotProps`,`slots`,`type`],jy=e=>{let{classes:t,disableUnderline:n}=e,r=H({root:[`root`,!n&&`underline`],input:[`input`]},Eh,t);return A({},t,r)},My=W(Sh,{shouldForwardProp:e=>Cc(e)||e===`classes`,name:`MuiInput`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[...yh(e,t),!n.disableUnderline&&t.underline]}})(({theme:e,ownerState:t})=>{let n=e.palette.mode===`light`?`rgba(0, 0, 0, 0.42)`:`rgba(255, 255, 255, 0.7)`;return e.vars&&(n=`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`),A({position:`relative`},t.formControl&&{"label + &":{marginTop:16}},!t.disableUnderline&&{"&::after":{borderBottom:`2px solid ${(e.vars||e).palette[t.color].main}`,left:0,bottom:0,content:`""`,position:`absolute`,right:0,transform:`scaleX(0)`,transition:e.transitions.create(`transform`,{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:`none`},[`&.${Dh.focused}:after`]:{transform:`scaleX(1) translateX(0)`},[`&.${Dh.error}`]:{"&::before, &::after":{borderBottomColor:(e.vars||e).palette.error.main}},"&::before":{borderBottom:`1px solid ${n}`,left:0,bottom:0,content:`"\\00a0"`,position:`absolute`,right:0,transition:e.transitions.create(`border-bottom-color`,{duration:e.transitions.duration.shorter}),pointerEvents:`none`},[`&:hover:not(.${Dh.disabled}, .${Dh.error}):before`]:{borderBottom:`2px solid ${(e.vars||e).palette.text.primary}`,"@media (hover: none)":{borderBottom:`1px solid ${n}`}},[`&.${Dh.disabled}:before`]:{borderBottomStyle:`dotted`}})}),Ny=W(Ch,{name:`MuiInput`,slot:`Input`,overridesResolver:bh})({}),Py=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiInput`}),{disableUnderline:r,components:i={},componentsProps:a,fullWidth:o=!1,inputComponent:s=`input`,multiline:c=!1,slotProps:l,slots:u={},type:d=`text`}=n,f=L(n,Ay),p=jy(n),m={root:{ownerState:{disableUnderline:r}}},h=l??a?ur(l??a,m):m,g=u.root??i.Root??My,_=u.input??i.Input??Ny;return(0,N.jsx)(Th,A({slots:{root:g,input:_},slotProps:h,fullWidth:o,inputComponent:s,multiline:c,ref:t,type:d},f,{classes:p}))});Py.muiName=`Input`;function Fy(e){return B(`MuiInputLabel`,e)}V(`MuiInputLabel`,[`root`,`focused`,`disabled`,`error`,`required`,`asterisk`,`formControl`,`sizeSmall`,`shrink`,`animated`,`standard`,`filled`,`outlined`]),R(),j();var Iy=[`disableAnimation`,`margin`,`shrink`,`variant`,`className`],Ly=e=>{let{classes:t,formControl:n,size:r,shrink:i,disableAnimation:a,variant:o,required:s}=e,c=H({root:[`root`,n&&`formControl`,!a&&`animated`,i&&`shrink`,r&&r!==`normal`&&`size${G(r)}`,o],asterisk:[s&&`asterisk`]},Fy,t);return A({},t,c)},Ry=W(ay,{shouldForwardProp:e=>Cc(e)||e===`classes`,name:`MuiInputLabel`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[{[`& .${ey.asterisk}`]:t.asterisk},t.root,n.formControl&&t.formControl,n.size===`small`&&t.sizeSmall,n.shrink&&t.shrink,!n.disableAnimation&&t.animated,n.focused&&t.focused,t[n.variant]]}})(({theme:e,ownerState:t})=>A({display:`block`,transformOrigin:`top left`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`,maxWidth:`100%`},t.formControl&&{position:`absolute`,left:0,top:0,transform:`translate(0, 20px) scale(1)`},t.size===`small`&&{transform:`translate(0, 17px) scale(1)`},t.shrink&&{transform:`translate(0, -1.5px) scale(0.75)`,transformOrigin:`top left`,maxWidth:`133%`},!t.disableAnimation&&{transition:e.transitions.create([`color`,`transform`,`max-width`],{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut})},t.variant===`filled`&&A({zIndex:1,pointerEvents:`none`,transform:`translate(12px, 16px) scale(1)`,maxWidth:`calc(100% - 24px)`},t.size===`small`&&{transform:`translate(12px, 13px) scale(1)`},t.shrink&&A({userSelect:`none`,pointerEvents:`auto`,transform:`translate(12px, 7px) scale(0.75)`,maxWidth:`calc(133% - 24px)`},t.size===`small`&&{transform:`translate(12px, 4px) scale(0.75)`})),t.variant===`outlined`&&A({zIndex:1,pointerEvents:`none`,transform:`translate(14px, 16px) scale(1)`,maxWidth:`calc(100% - 24px)`},t.size===`small`&&{transform:`translate(14px, 9px) scale(1)`},t.shrink&&{userSelect:`none`,pointerEvents:`auto`,maxWidth:`calc(133% - 32px)`,transform:`translate(14px, -9px) scale(0.75)`}))),zy=y.forwardRef(function(e,t){let n=F({name:`MuiInputLabel`,props:e}),{disableAnimation:r=!1,shrink:i,className:a}=n,o=L(n,Iy),s=fh(),c=i;c===void 0&&s&&(c=s.filled||s.focused||s.adornedStart);let l=uh({props:n,muiFormControl:s,states:[`size`,`variant`,`required`,`focused`]}),u=A({},n,{disableAnimation:r,formControl:s,shrink:c,size:l.size,variant:l.variant,required:l.required,focused:l.focused}),d=Ly(u);return(0,N.jsx)(Ry,A({"data-shrink":c,ownerState:u,ref:t,className:z(d.root,a)},o,{classes:d}))}),By=y.createContext({});function Vy(e){return B(`MuiList`,e)}V(`MuiList`,[`root`,`padding`,`dense`,`subheader`]),R(),j();var Hy=[`children`,`className`,`component`,`dense`,`disablePadding`,`subheader`],Uy=e=>{let{classes:t,disablePadding:n,dense:r,subheader:i}=e;return H({root:[`root`,!n&&`padding`,r&&`dense`,i&&`subheader`]},Vy,t)},Wy=W(`ul`,{name:`MuiList`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,!n.disablePadding&&t.padding,n.dense&&t.dense,n.subheader&&t.subheader]}})(({ownerState:e})=>A({listStyle:`none`,margin:0,padding:0,position:`relative`},!e.disablePadding&&{paddingTop:8,paddingBottom:8},e.subheader&&{paddingTop:0})),Gy=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiList`}),{children:r,className:i,component:a=`ul`,dense:o=!1,disablePadding:s=!1,subheader:c}=n,l=L(n,Hy),u=y.useMemo(()=>({dense:o}),[o]),d=A({},n,{component:a,dense:o,disablePadding:s}),f=Uy(d);return(0,N.jsx)(By.Provider,{value:u,children:(0,N.jsxs)(Wy,A({as:a,className:z(f.root,i),ref:t,ownerState:d},l,{children:[c,r]}))})});function Ky(e){return B(`MuiListItem`,e)}var qy=V(`MuiListItem`,[`root`,`container`,`focusVisible`,`dense`,`alignItemsFlexStart`,`disabled`,`divider`,`gutters`,`padding`,`button`,`secondaryAction`,`selected`]),Jy=V(`MuiListItemButton`,[`root`,`focusVisible`,`dense`,`alignItemsFlexStart`,`disabled`,`divider`,`gutters`,`selected`]);function Yy(e){return B(`MuiListItemSecondaryAction`,e)}V(`MuiListItemSecondaryAction`,[`root`,`disableGutters`]),R(),j();var Xy=[`className`],Zy=e=>{let{disableGutters:t,classes:n}=e;return H({root:[`root`,t&&`disableGutters`]},Yy,n)},Qy=W(`div`,{name:`MuiListItemSecondaryAction`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,n.disableGutters&&t.disableGutters]}})(({ownerState:e})=>A({position:`absolute`,right:16,top:`50%`,transform:`translateY(-50%)`},e.disableGutters&&{right:0})),$y=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiListItemSecondaryAction`}),{className:r}=n,i=L(n,Xy),a=y.useContext(By),o=A({},n,{disableGutters:a.disableGutters}),s=Zy(o);return(0,N.jsx)(Qy,A({className:z(s.root,r),ownerState:o,ref:t},i))});$y.muiName=`ListItemSecondaryAction`,R(),j();var eb=[`className`],tb=[`alignItems`,`autoFocus`,`button`,`children`,`className`,`component`,`components`,`componentsProps`,`ContainerComponent`,`ContainerProps`,`dense`,`disabled`,`disableGutters`,`disablePadding`,`divider`,`focusVisibleClassName`,`secondaryAction`,`selected`,`slotProps`,`slots`],nb=(e,t)=>{let{ownerState:n}=e;return[t.root,n.dense&&t.dense,n.alignItems===`flex-start`&&t.alignItemsFlexStart,n.divider&&t.divider,!n.disableGutters&&t.gutters,!n.disablePadding&&t.padding,n.button&&t.button,n.hasSecondaryAction&&t.secondaryAction]},rb=e=>{let{alignItems:t,button:n,classes:r,dense:i,disabled:a,disableGutters:o,disablePadding:s,divider:c,hasSecondaryAction:l,selected:u}=e;return H({root:[`root`,i&&`dense`,!o&&`gutters`,!s&&`padding`,c&&`divider`,a&&`disabled`,n&&`button`,t===`flex-start`&&`alignItemsFlexStart`,l&&`secondaryAction`,u&&`selected`],container:[`container`]},Ky,r)},ib=W(`div`,{name:`MuiListItem`,slot:`Root`,overridesResolver:nb})(({theme:e,ownerState:t})=>A({display:`flex`,justifyContent:`flex-start`,alignItems:`center`,position:`relative`,textDecoration:`none`,width:`100%`,boxSizing:`border-box`,textAlign:`left`},!t.disablePadding&&A({paddingTop:8,paddingBottom:8},t.dense&&{paddingTop:4,paddingBottom:4},!t.disableGutters&&{paddingLeft:16,paddingRight:16},!!t.secondaryAction&&{paddingRight:48}),!!t.secondaryAction&&{[`& > .${Jy.root}`]:{paddingRight:48}},{[`&.${qy.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${qy.selected}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity),[`&.${qy.focusVisible}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.focusOpacity}))`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.focusOpacity)}},[`&.${qy.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity}},t.alignItems===`flex-start`&&{alignItems:`flex-start`},t.divider&&{borderBottom:`1px solid ${(e.vars||e).palette.divider}`,backgroundClip:`padding-box`},t.button&&{transition:e.transitions.create(`background-color`,{duration:e.transitions.duration.shortest}),"&:hover":{textDecoration:`none`,backgroundColor:(e.vars||e).palette.action.hover,"@media (hover: none)":{backgroundColor:`transparent`}},[`&.${qy.selected}:hover`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.hoverOpacity}))`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity)}}},t.hasSecondaryAction&&{paddingRight:48})),ab=W(`li`,{name:`MuiListItem`,slot:`Container`,overridesResolver:(e,t)=>t.container})({position:`relative`}),ob=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiListItem`}),{alignItems:r=`center`,autoFocus:i=!1,button:a=!1,children:o,className:s,component:c,components:l={},componentsProps:u={},ContainerComponent:d=`li`,ContainerProps:{className:f}={},dense:p=!1,disabled:m=!1,disableGutters:h=!1,disablePadding:g=!1,divider:_=!1,focusVisibleClassName:v,secondaryAction:b,selected:x=!1,slotProps:S={},slots:C={}}=n,w=L(n.ContainerProps,eb),T=L(n,tb),E=y.useContext(By),D=y.useMemo(()=>({dense:p||E.dense||!1,alignItems:r,disableGutters:h}),[r,E.dense,p,h]),O=y.useRef(null);cp(()=>{i&&O.current&&O.current.focus()},[i]);let k=y.Children.toArray(o),j=k.length&&ap(k[k.length-1],[`ListItemSecondaryAction`]),ee=A({},n,{alignItems:r,autoFocus:i,button:a,dense:D.dense,disabled:m,disableGutters:h,disablePadding:g,divider:_,hasSecondaryAction:j,selected:x}),te=rb(ee),M=dp(O,t),ne=C.root||l.Root||ib,re=S.root||u.root||{},ie=A({className:z(te.root,re.className,s),disabled:m},T),P=c||`li`;return a&&(ie.component=c||`div`,ie.focusVisibleClassName=z(qy.focusVisible,v),P=fm),j?(P=!ie.component&&!c?`div`:P,d===`li`&&(P===`li`?P=`div`:ie.component===`li`&&(ie.component=`div`)),(0,N.jsx)(By.Provider,{value:D,children:(0,N.jsxs)(ab,A({as:d,className:z(te.container,f),ref:M,ownerState:ee},w,{children:[(0,N.jsx)(ne,A({},re,!Ho(ne)&&{as:P,ownerState:A({},ee,re.ownerState)},ie,{children:k})),k.pop()]}))})):(0,N.jsx)(By.Provider,{value:D,children:(0,N.jsxs)(ne,A({},re,{as:P,ref:M},!Ho(ne)&&{ownerState:A({},ee,re.ownerState)},ie,{children:[k,b&&(0,N.jsx)($y,{children:b})]}))})}),sb=V(`MuiListItemIcon`,[`root`,`alignItemsFlexStart`]);function cb(e){return B(`MuiListItemText`,e)}var lb=V(`MuiListItemText`,[`root`,`multiline`,`dense`,`inset`,`primary`,`secondary`]);R(),j();var ub=[`children`,`className`,`disableTypography`,`inset`,`primary`,`primaryTypographyProps`,`secondary`,`secondaryTypographyProps`],db=e=>{let{classes:t,inset:n,primary:r,secondary:i,dense:a}=e;return H({root:[`root`,n&&`inset`,a&&`dense`,r&&i&&`multiline`],primary:[`primary`],secondary:[`secondary`]},cb,t)},fb=W(`div`,{name:`MuiListItemText`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[{[`& .${lb.primary}`]:t.primary},{[`& .${lb.secondary}`]:t.secondary},t.root,n.inset&&t.inset,n.primary&&n.secondary&&t.multiline,n.dense&&t.dense]}})(({ownerState:e})=>A({flex:`1 1 auto`,minWidth:0,marginTop:4,marginBottom:4},e.primary&&e.secondary&&{marginTop:6,marginBottom:6},e.inset&&{paddingLeft:56})),pb=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiListItemText`}),{children:r,className:i,disableTypography:a=!1,inset:o=!1,primary:s,primaryTypographyProps:c,secondary:l,secondaryTypographyProps:u}=n,d=L(n,ub),{dense:f}=y.useContext(By),p=s??r,m=l,h=A({},n,{disableTypography:a,inset:o,primary:!!p,secondary:!!m,dense:f}),g=db(h);return p!=null&&p.type!==K&&!a&&(p=(0,N.jsx)(K,A({variant:f?`body2`:`body1`,className:g.primary,component:c!=null&&c.variant?void 0:`span`,display:`block`},c,{children:p}))),m!=null&&m.type!==K&&!a&&(m=(0,N.jsx)(K,A({variant:`body2`,className:g.secondary,color:`text.secondary`,display:`block`},u,{children:m}))),(0,N.jsxs)(fb,A({className:z(g.root,i),ownerState:h,ref:t},d,{children:[p,m]}))}),mb=Lo;j(),R();var hb=[`actions`,`autoFocus`,`autoFocusItem`,`children`,`className`,`disabledItemsFocusable`,`disableListWrap`,`onKeyDown`,`variant`];function gb(e,t,n){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:n?null:e.firstChild}function _b(e,t,n){return e===t?n?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:n?null:e.lastChild}function vb(e,t){if(t===void 0)return!0;let n=e.innerText;return n===void 0&&(n=e.textContent),n=n.trim().toLowerCase(),n.length===0?!1:t.repeating?n[0]===t.keys[0]:n.indexOf(t.keys.join(``))===0}function yb(e,t,n,r,i,a){let o=!1,s=i(e,t,t?n:!1);for(;s;){if(s===e.firstChild){if(o)return!1;o=!0}let t=r?!1:s.disabled||s.getAttribute(`aria-disabled`)===`true`;if(!s.hasAttribute(`tabindex`)||!vb(s,a)||t)s=i(e,s,n);else return s.focus(),!0}return!1}var bb=y.forwardRef(function(e,t){let{actions:n,autoFocus:r=!1,autoFocusItem:i=!1,children:a,className:o,disabledItemsFocusable:s=!1,disableListWrap:c=!1,onKeyDown:l,variant:u=`selectedMenu`}=e,d=L(e,hb),f=y.useRef(null),p=y.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});cp(()=>{r&&f.current.focus()},[r]),y.useImperativeHandle(n,()=>({adjustStyleForScrollbar:(e,{direction:t})=>{let n=!f.current.style.width;if(e.clientHeight<f.current.clientHeight&&n){let n=`${mb(op(e))}px`;f.current.style[t===`rtl`?`paddingLeft`:`paddingRight`]=n,f.current.style.width=`calc(100% + ${n})`}return f.current}}),[]);let m=e=>{let t=f.current,n=e.key,r=op(t).activeElement;if(n===`ArrowDown`)e.preventDefault(),yb(t,r,c,s,gb);else if(n===`ArrowUp`)e.preventDefault(),yb(t,r,c,s,_b);else if(n===`Home`)e.preventDefault(),yb(t,null,c,s,gb);else if(n===`End`)e.preventDefault(),yb(t,null,c,s,_b);else if(n.length===1){let i=p.current,a=n.toLowerCase(),o=performance.now();i.keys.length>0&&(o-i.lastTime>500?(i.keys=[],i.repeating=!0,i.previousKeyMatched=!0):i.repeating&&a!==i.keys[0]&&(i.repeating=!1)),i.lastTime=o,i.keys.push(a);let c=r&&!i.repeating&&vb(r,i);i.previousKeyMatched&&(c||yb(t,r,!1,s,gb,i))?e.preventDefault():i.previousKeyMatched=!1}l&&l(e)},h=dp(f,t),g=-1;y.Children.forEach(a,(e,t)=>{if(!y.isValidElement(e)){g===t&&(g+=1,g>=a.length&&(g=-1));return}e.props.disabled||(u===`selectedMenu`&&e.props.selected||g===-1)&&(g=t),g===t&&(e.props.disabled||e.props.muiSkipListHighlight||e.type.muiSkipListHighlight)&&(g+=1,g>=a.length&&(g=-1))});let _=y.Children.map(a,(e,t)=>{if(t===g){let t={};return i&&(t.autoFocus=!0),e.props.tabIndex===void 0&&u===`selectedMenu`&&(t.tabIndex=0),y.cloneElement(e,t)}return e});return(0,N.jsx)(Gy,A({role:`menu`,ref:h,className:o,onKeyDown:m,tabIndex:r?0:-1},d,{children:_}))});function xb(e){return B(`MuiPopover`,e)}V(`MuiPopover`,[`root`,`paper`]),j(),R();var Sb=[`onEntering`],Cb=[`action`,`anchorEl`,`anchorOrigin`,`anchorPosition`,`anchorReference`,`children`,`className`,`container`,`elevation`,`marginThreshold`,`open`,`PaperProps`,`slots`,`slotProps`,`transformOrigin`,`TransitionComponent`,`transitionDuration`,`TransitionProps`,`disableScrollLock`],wb=[`slotProps`];function Tb(e,t){let n=0;return typeof t==`number`?n=t:t===`center`?n=e.height/2:t===`bottom`&&(n=e.height),n}function Eb(e,t){let n=0;return typeof t==`number`?n=t:t===`center`?n=e.width/2:t===`right`&&(n=e.width),n}function Db(e){return[e.horizontal,e.vertical].map(e=>typeof e==`number`?`${e}px`:e).join(` `)}function Ob(e){return typeof e==`function`?e():e}var kb=e=>{let{classes:t}=e;return H({root:[`root`],paper:[`paper`]},xb,t)},Ab=W(X_,{name:`MuiPopover`,slot:`Root`,overridesResolver:(e,t)=>t.root})({}),jb=W(Vp,{name:`MuiPopover`,slot:`Paper`,overridesResolver:(e,t)=>t.paper})({position:`absolute`,overflowY:`auto`,overflowX:`hidden`,minWidth:16,minHeight:16,maxWidth:`calc(100% - 32px)`,maxHeight:`calc(100% - 32px)`,outline:0}),Mb=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiPopover`}),{action:r,anchorEl:i,anchorOrigin:a={vertical:`top`,horizontal:`left`},anchorPosition:o,anchorReference:s=`anchorEl`,children:c,className:l,container:u,elevation:d=8,marginThreshold:f=16,open:p,PaperProps:m={},slots:h,slotProps:g,transformOrigin:_={vertical:`top`,horizontal:`left`},TransitionComponent:v=ky,transitionDuration:b=`auto`,TransitionProps:{onEntering:x}={},disableScrollLock:S=!1}=n,C=L(n.TransitionProps,Sb),w=L(n,Cb),T=g?.paper??m,E=y.useRef(),D=dp(E,T.ref),O=A({},n,{anchorOrigin:a,anchorReference:s,elevation:d,marginThreshold:f,externalPaperSlotProps:T,transformOrigin:_,TransitionComponent:v,transitionDuration:b,TransitionProps:C}),k=kb(O),j=y.useCallback(()=>{if(s===`anchorPosition`)return o;let e=Ob(i),t=(e&&e.nodeType===1?e:op(E.current).body).getBoundingClientRect();return{top:t.top+Tb(t,a.vertical),left:t.left+Eb(t,a.horizontal)}},[i,a.horizontal,a.vertical,o,s]),ee=y.useCallback(e=>({vertical:Tb(e,_.vertical),horizontal:Eb(e,_.horizontal)}),[_.horizontal,_.vertical]),te=y.useCallback(e=>{let t={width:e.offsetWidth,height:e.offsetHeight},n=ee(t);if(s===`none`)return{top:null,left:null,transformOrigin:Db(n)};let r=j(),a=r.top-n.vertical,o=r.left-n.horizontal,c=a+t.height,l=o+t.width,u=sp(Ob(i)),d=u.innerHeight-f,p=u.innerWidth-f;if(f!==null&&a<f){let e=a-f;a-=e,n.vertical+=e}else if(f!==null&&c>d){let e=c-d;a-=e,n.vertical+=e}if(f!==null&&o<f){let e=o-f;o-=e,n.horizontal+=e}else if(l>p){let e=l-p;o-=e,n.horizontal+=e}return{top:`${Math.round(a)}px`,left:`${Math.round(o)}px`,transformOrigin:Db(n)}},[i,s,j,ee,f]),[M,ne]=y.useState(p),re=y.useCallback(()=>{let e=E.current;if(!e)return;let t=te(e);t.top!==null&&(e.style.top=t.top),t.left!==null&&(e.style.left=t.left),e.style.transformOrigin=t.transformOrigin,ne(!0)},[te]);y.useEffect(()=>(S&&window.addEventListener(`scroll`,re),()=>window.removeEventListener(`scroll`,re)),[i,S,re]);let ie=(e,t)=>{x&&x(e,t),re()},P=()=>{ne(!1)};y.useEffect(()=>{p&&re()}),y.useImperativeHandle(r,()=>p?{updatePosition:()=>{re()}}:null,[p,re]),y.useEffect(()=>{if(!p)return;let e=ip(()=>{re()}),t=sp(i);return t.addEventListener(`resize`,e),()=>{e.clear(),t.removeEventListener(`resize`,e)}},[i,p,re]);let ae=b;b===`auto`&&!v.muiSupportAuto&&(ae=void 0);let oe=u||(i?op(Ob(i)).body:void 0),se=h?.root??Ab,ce=h?.paper??jb,le=Yo({elementType:ce,externalSlotProps:A({},T,{style:M?T.style:A({},T.style,{opacity:0})}),additionalProps:{elevation:d,ref:D},ownerState:O,className:z(k.paper,T?.className)}),ue=Yo({elementType:se,externalSlotProps:g?.root||{},externalForwardedProps:w,additionalProps:{ref:t,slotProps:{backdrop:{invisible:!0}},container:oe,open:p},ownerState:O,className:z(k.root,l)}),{slotProps:de}=ue,fe=L(ue,wb);return(0,N.jsx)(se,A({},fe,!Ho(se)&&{slotProps:de,disableScrollLock:S},{children:(0,N.jsx)(v,A({appear:!0,in:p,onEntering:ie,onExited:P,timeout:ae},C,{children:(0,N.jsx)(ce,A({},le,{children:c}))}))}))});function Nb(e){return B(`MuiMenu`,e)}V(`MuiMenu`,[`root`,`paper`,`list`]),j(),R();var Pb=[`onEntering`],Fb=[`autoFocus`,`children`,`className`,`disableAutoFocusItem`,`MenuListProps`,`onClose`,`open`,`PaperProps`,`PopoverClasses`,`transitionDuration`,`TransitionProps`,`variant`,`slots`,`slotProps`],Ib={vertical:`top`,horizontal:`right`},Lb={vertical:`top`,horizontal:`left`},Rb=e=>{let{classes:t}=e;return H({root:[`root`],paper:[`paper`],list:[`list`]},Nb,t)},zb=W(Mb,{shouldForwardProp:e=>Cc(e)||e===`classes`,name:`MuiMenu`,slot:`Root`,overridesResolver:(e,t)=>t.root})({}),Bb=W(jb,{name:`MuiMenu`,slot:`Paper`,overridesResolver:(e,t)=>t.paper})({maxHeight:`calc(100% - 96px)`,WebkitOverflowScrolling:`touch`}),Vb=W(bb,{name:`MuiMenu`,slot:`List`,overridesResolver:(e,t)=>t.list})({outline:0}),Hb=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiMenu`}),{autoFocus:r=!0,children:i,className:a,disableAutoFocusItem:o=!1,MenuListProps:s={},onClose:c,open:l,PaperProps:u={},PopoverClasses:d,transitionDuration:f=`auto`,TransitionProps:{onEntering:p}={},variant:m=`selectedMenu`,slots:h={},slotProps:g={}}=n,_=L(n.TransitionProps,Pb),v=L(n,Fb),b=as(),x=A({},n,{autoFocus:r,disableAutoFocusItem:o,MenuListProps:s,onEntering:p,PaperProps:u,transitionDuration:f,TransitionProps:_,variant:m}),S=Rb(x),C=r&&!o&&l,w=y.useRef(null),T=(e,t)=>{w.current&&w.current.adjustStyleForScrollbar(e,{direction:b?`rtl`:`ltr`}),p&&p(e,t)},E=e=>{e.key===`Tab`&&(e.preventDefault(),c&&c(e,`tabKeyDown`))},D=-1;y.Children.map(i,(e,t)=>{y.isValidElement(e)&&(e.props.disabled||(m===`selectedMenu`&&e.props.selected||D===-1)&&(D=t))});let O=h.paper??Bb,k=g.paper??u,j=Yo({elementType:h.root,externalSlotProps:g.root,ownerState:x,className:[S.root,a]}),ee=Yo({elementType:O,externalSlotProps:k,ownerState:x,className:S.paper});return(0,N.jsx)(zb,A({onClose:c,anchorOrigin:{vertical:`bottom`,horizontal:b?`right`:`left`},transformOrigin:b?Ib:Lb,slots:{paper:O,root:h.root},slotProps:{root:j,paper:ee},open:l,ref:t,transitionDuration:f,TransitionProps:A({onEntering:T},_),ownerState:x},v,{classes:d,children:(0,N.jsx)(Vb,A({onKeyDown:E,actions:w,autoFocus:r&&(D===-1||o),autoFocusItem:C,variant:m},s,{className:z(S.list,s.className),children:i}))}))});function Ub(e){return B(`MuiMenuItem`,e)}var Wb=V(`MuiMenuItem`,[`root`,`focusVisible`,`dense`,`disabled`,`divider`,`gutters`,`selected`]);R(),j();var Gb=[`autoFocus`,`component`,`dense`,`divider`,`disableGutters`,`focusVisibleClassName`,`role`,`tabIndex`,`className`],Kb=(e,t)=>{let{ownerState:n}=e;return[t.root,n.dense&&t.dense,n.divider&&t.divider,!n.disableGutters&&t.gutters]},qb=e=>{let{disabled:t,dense:n,divider:r,disableGutters:i,selected:a,classes:o}=e,s=H({root:[`root`,n&&`dense`,t&&`disabled`,!i&&`gutters`,r&&`divider`,a&&`selected`]},Ub,o);return A({},o,s)},Jb=W(fm,{shouldForwardProp:e=>Cc(e)||e===`classes`,name:`MuiMenuItem`,slot:`Root`,overridesResolver:Kb})(({theme:e,ownerState:t})=>A({},e.typography.body1,{display:`flex`,justifyContent:`flex-start`,alignItems:`center`,position:`relative`,textDecoration:`none`,minHeight:48,paddingTop:6,paddingBottom:6,boxSizing:`border-box`,whiteSpace:`nowrap`},!t.disableGutters&&{paddingLeft:16,paddingRight:16},t.divider&&{borderBottom:`1px solid ${(e.vars||e).palette.divider}`,backgroundClip:`padding-box`},{"&:hover":{textDecoration:`none`,backgroundColor:(e.vars||e).palette.action.hover,"@media (hover: none)":{backgroundColor:`transparent`}},[`&.${Wb.selected}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity),[`&.${Wb.focusVisible}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.focusOpacity}))`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.focusOpacity)}},[`&.${Wb.selected}:hover`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.hoverOpacity}))`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity)}},[`&.${Wb.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${Wb.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity},[`& + .${Ov.root}`]:{marginTop:e.spacing(1),marginBottom:e.spacing(1)},[`& + .${Ov.inset}`]:{marginLeft:52},[`& .${lb.root}`]:{marginTop:0,marginBottom:0},[`& .${lb.inset}`]:{paddingLeft:36},[`& .${sb.root}`]:{minWidth:36}},!t.dense&&{[e.breakpoints.up(`sm`)]:{minHeight:`auto`}},t.dense&&A({minHeight:32,paddingTop:4,paddingBottom:4},e.typography.body2,{[`& .${sb.root} svg`]:{fontSize:`1.25rem`}}))),Yb=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiMenuItem`}),{autoFocus:r=!1,component:i=`li`,dense:a=!1,divider:o=!1,disableGutters:s=!1,focusVisibleClassName:c,role:l=`menuitem`,tabIndex:u,className:d}=n,f=L(n,Gb),p=y.useContext(By),m=y.useMemo(()=>({dense:a||p.dense||!1,disableGutters:s}),[p.dense,a,s]),h=y.useRef(null);cp(()=>{r&&h.current&&h.current.focus()},[r]);let g=A({},n,{dense:m.dense,divider:o,disableGutters:s}),_=qb(n),v=dp(h,t),b;return n.disabled||(b=u===void 0?-1:u),(0,N.jsx)(By.Provider,{value:m,children:(0,N.jsx)(Jb,A({ref:v,role:l,tabIndex:b,component:i,focusVisibleClassName:z(_.focusVisible,c),className:z(_.root,d)},f,{ownerState:g,classes:_}))})});function Xb(e){return B(`MuiNativeSelect`,e)}var Zb=V(`MuiNativeSelect`,[`root`,`select`,`multiple`,`filled`,`outlined`,`standard`,`disabled`,`icon`,`iconOpen`,`iconFilled`,`iconOutlined`,`iconStandard`,`nativeInput`,`error`]);R(),j();var Qb=[`className`,`disabled`,`error`,`IconComponent`,`inputRef`,`variant`],$b=e=>{let{classes:t,variant:n,disabled:r,multiple:i,open:a,error:o}=e;return H({select:[`select`,n,r&&`disabled`,i&&`multiple`,o&&`error`],icon:[`icon`,`icon${G(n)}`,a&&`iconOpen`,r&&`disabled`]},Xb,t)},ex=({ownerState:e,theme:t})=>A({MozAppearance:`none`,WebkitAppearance:`none`,userSelect:`none`,borderRadius:0,cursor:`pointer`,"&:focus":A({},t.vars?{backgroundColor:`rgba(${t.vars.palette.common.onBackgroundChannel} / 0.05)`}:{backgroundColor:t.palette.mode===`light`?`rgba(0, 0, 0, 0.05)`:`rgba(255, 255, 255, 0.05)`},{borderRadius:0}),"&::-ms-expand":{display:`none`},[`&.${Zb.disabled}`]:{cursor:`default`},"&[multiple]":{height:`auto`},"&:not([multiple]) option, &:not([multiple]) optgroup":{backgroundColor:(t.vars||t).palette.background.paper},"&&&":{paddingRight:24,minWidth:16}},e.variant===`filled`&&{"&&&":{paddingRight:32}},e.variant===`outlined`&&{borderRadius:(t.vars||t).shape.borderRadius,"&:focus":{borderRadius:(t.vars||t).shape.borderRadius},"&&&":{paddingRight:32}}),tx=W(`select`,{name:`MuiNativeSelect`,slot:`Select`,shouldForwardProp:Cc,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.select,t[n.variant],n.error&&t.error,{[`&.${Zb.multiple}`]:t.multiple}]}})(ex),nx=({ownerState:e,theme:t})=>A({position:`absolute`,right:0,top:`calc(50% - .5em)`,pointerEvents:`none`,color:(t.vars||t).palette.action.active,[`&.${Zb.disabled}`]:{color:(t.vars||t).palette.action.disabled}},e.open&&{transform:`rotate(180deg)`},e.variant===`filled`&&{right:7},e.variant===`outlined`&&{right:7}),rx=W(`svg`,{name:`MuiNativeSelect`,slot:`Icon`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.icon,n.variant&&t[`icon${G(n.variant)}`],n.open&&t.iconOpen]}})(nx),ix=y.forwardRef(function(e,t){let{className:n,disabled:r,error:i,IconComponent:a,inputRef:o,variant:s=`standard`}=e,c=L(e,Qb),l=A({},e,{disabled:r,variant:s,error:i}),u=$b(l);return(0,N.jsxs)(y.Fragment,{children:[(0,N.jsx)(tx,A({ownerState:l,className:z(u.select,n),disabled:r,ref:o||t},c)),e.multiple?null:(0,N.jsx)(rx,{as:a,ownerState:l,className:u.icon})]})});R(),j();var ax,ox=[`children`,`classes`,`className`,`label`,`notched`],sx=W(`fieldset`,{name:`MuiNotchedOutlined`,shouldForwardProp:Cc})({textAlign:`left`,position:`absolute`,bottom:0,right:0,top:-5,left:0,margin:0,padding:`0 8px`,pointerEvents:`none`,borderRadius:`inherit`,borderStyle:`solid`,borderWidth:1,overflow:`hidden`,minWidth:`0%`}),cx=W(`legend`,{name:`MuiNotchedOutlined`,shouldForwardProp:Cc})(({ownerState:e,theme:t})=>A({float:`unset`,width:`auto`,overflow:`hidden`},!e.withLabel&&{padding:0,lineHeight:`11px`,transition:t.transitions.create(`width`,{duration:150,easing:t.transitions.easing.easeOut})},e.withLabel&&A({display:`block`,padding:0,height:11,fontSize:`0.75em`,visibility:`hidden`,maxWidth:.01,transition:t.transitions.create(`max-width`,{duration:50,easing:t.transitions.easing.easeOut}),whiteSpace:`nowrap`,"& > span":{paddingLeft:5,paddingRight:5,display:`inline-block`,opacity:0,visibility:`visible`}},e.notched&&{maxWidth:`100%`,transition:t.transitions.create(`max-width`,{duration:100,easing:t.transitions.easing.easeOut,delay:50})})));function lx(e){let{className:t,label:n,notched:r}=e,i=L(e,ox),a=n!=null&&n!==``,o=A({},e,{notched:r,withLabel:a});return(0,N.jsx)(sx,A({"aria-hidden":!0,className:t,ownerState:o},i,{children:(0,N.jsx)(cx,{ownerState:o,children:a?(0,N.jsx)(`span`,{children:n}):ax||=(0,N.jsx)(`span`,{className:`notranslate`,children:``})})}))}R(),j();var ux=[`components`,`fullWidth`,`inputComponent`,`label`,`multiline`,`notched`,`slots`,`type`],dx=e=>{let{classes:t}=e,n=H({root:[`root`],notchedOutline:[`notchedOutline`],input:[`input`]},Oh,t);return A({},t,n)},fx=W(Sh,{shouldForwardProp:e=>Cc(e)||e===`classes`,name:`MuiOutlinedInput`,slot:`Root`,overridesResolver:yh})(({theme:e,ownerState:t})=>{let n=e.palette.mode===`light`?`rgba(0, 0, 0, 0.23)`:`rgba(255, 255, 255, 0.23)`;return A({position:`relative`,borderRadius:(e.vars||e).shape.borderRadius,[`&:hover .${kh.notchedOutline}`]:{borderColor:(e.vars||e).palette.text.primary},"@media (hover: none)":{[`&:hover .${kh.notchedOutline}`]:{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:n}},[`&.${kh.focused} .${kh.notchedOutline}`]:{borderColor:(e.vars||e).palette[t.color].main,borderWidth:2},[`&.${kh.error} .${kh.notchedOutline}`]:{borderColor:(e.vars||e).palette.error.main},[`&.${kh.disabled} .${kh.notchedOutline}`]:{borderColor:(e.vars||e).palette.action.disabled}},t.startAdornment&&{paddingLeft:14},t.endAdornment&&{paddingRight:14},t.multiline&&A({padding:`16.5px 14px`},t.size===`small`&&{padding:`8.5px 14px`}))}),px=W(lx,{name:`MuiOutlinedInput`,slot:`NotchedOutline`,overridesResolver:(e,t)=>t.notchedOutline})(({theme:e})=>{let t=e.palette.mode===`light`?`rgba(0, 0, 0, 0.23)`:`rgba(255, 255, 255, 0.23)`;return{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:t}}),mx=W(Ch,{name:`MuiOutlinedInput`,slot:`Input`,overridesResolver:bh})(({theme:e,ownerState:t})=>A({padding:`16.5px 14px`},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:e.palette.mode===`light`?null:`0 0 0 100px #266798 inset`,WebkitTextFillColor:e.palette.mode===`light`?null:`#fff`,caretColor:e.palette.mode===`light`?null:`#fff`,borderRadius:`inherit`}},e.vars&&{"&:-webkit-autofill":{borderRadius:`inherit`},[e.getColorSchemeSelector(`dark`)]:{"&:-webkit-autofill":{WebkitBoxShadow:`0 0 0 100px #266798 inset`,WebkitTextFillColor:`#fff`,caretColor:`#fff`}}},t.size===`small`&&{padding:`8.5px 14px`},t.multiline&&{padding:0},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0})),hx=y.forwardRef(function(e,t){var n;let r=F({props:e,name:`MuiOutlinedInput`}),{components:i={},fullWidth:a=!1,inputComponent:o=`input`,label:s,multiline:c=!1,notched:l,slots:u={},type:d=`text`}=r,f=L(r,ux),p=dx(r),m=fh(),h=uh({props:r,muiFormControl:m,states:[`color`,`disabled`,`error`,`focused`,`hiddenLabel`,`size`,`required`]}),g=A({},r,{color:h.color||`primary`,disabled:h.disabled,error:h.error,focused:h.focused,formControl:m,fullWidth:a,hiddenLabel:h.hiddenLabel,multiline:c,size:h.size,type:d}),_=u.root??i.Root??fx,v=u.input??i.Input??mx;return(0,N.jsx)(Th,A({slots:{root:_,input:v},renderSuffix:e=>(0,N.jsx)(px,{ownerState:g,className:p.notchedOutline,label:s!=null&&s!==``&&h.required?n||=(0,N.jsxs)(y.Fragment,{children:[s,` `,`*`]}):s,notched:l===void 0?!!(e.startAdornment||e.filled||e.focused):l}),fullWidth:a,inputComponent:o,multiline:c,ref:t,type:d},f,{classes:A({},p,{notchedOutline:null})}))});hx.muiName=`Input`;function gx(e){return B(`MuiSelect`,e)}var _x=V(`MuiSelect`,[`root`,`select`,`multiple`,`filled`,`outlined`,`standard`,`disabled`,`focused`,`icon`,`iconOpen`,`iconFilled`,`iconOutlined`,`iconStandard`,`nativeInput`,`error`]);j(),R(),ce();var vx,yx=`aria-describedby.aria-label.autoFocus.autoWidth.children.className.defaultOpen.defaultValue.disabled.displayEmpty.error.IconComponent.inputRef.labelId.MenuProps.multiple.name.onBlur.onChange.onClose.onFocus.onOpen.open.readOnly.renderValue.SelectDisplayProps.tabIndex.type.value.variant`.split(`.`),bx=W(`div`,{name:`MuiSelect`,slot:`Select`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[{[`&.${_x.select}`]:t.select},{[`&.${_x.select}`]:t[n.variant]},{[`&.${_x.error}`]:t.error},{[`&.${_x.multiple}`]:t.multiple}]}})(ex,{[`&.${_x.select}`]:{height:`auto`,minHeight:`1.4375em`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,overflow:`hidden`}}),xx=W(`svg`,{name:`MuiSelect`,slot:`Icon`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.icon,n.variant&&t[`icon${G(n.variant)}`],n.open&&t.iconOpen]}})(nx),Sx=W(`input`,{shouldForwardProp:e=>Sc(e)&&e!==`classes`,name:`MuiSelect`,slot:`NativeInput`,overridesResolver:(e,t)=>t.nativeInput})({bottom:0,left:0,position:`absolute`,opacity:0,pointerEvents:`none`,width:`100%`,boxSizing:`border-box`});function Cx(e,t){return typeof t==`object`&&t?e===t:String(e)===String(t)}function wx(e){return e==null||typeof e==`string`&&!e.trim()}var Tx=e=>{let{classes:t,variant:n,disabled:r,multiple:i,open:a,error:o}=e;return H({select:[`select`,n,r&&`disabled`,i&&`multiple`,o&&`error`],icon:[`icon`,`icon${G(n)}`,a&&`iconOpen`,r&&`disabled`],nativeInput:[`nativeInput`]},gx,t)},Ex=y.forwardRef(function(e,t){let{"aria-describedby":n,"aria-label":r,autoFocus:i,autoWidth:a,children:o,className:s,defaultOpen:c,defaultValue:l,disabled:u,displayEmpty:d,error:f=!1,IconComponent:p,inputRef:m,labelId:h,MenuProps:g={},multiple:_,name:v,onBlur:b,onChange:x,onClose:S,onFocus:C,onOpen:w,open:T,readOnly:E,renderValue:D,SelectDisplayProps:O={},tabIndex:k,value:j,variant:ee=`standard`}=e,te=L(e,yx),[M,ne]=lp({controlled:j,default:l,name:`Select`}),[re,ie]=lp({controlled:T,default:c,name:`Select`}),P=y.useRef(null),F=y.useRef(null),[oe,se]=y.useState(null),{current:ce}=y.useRef(T!=null),[le,ue]=y.useState(),de=dp(t,m),fe=y.useCallback(e=>{F.current=e,e&&se(e)},[]),pe=oe?.parentNode;y.useImperativeHandle(de,()=>({focus:()=>{F.current.focus()},node:P.current,value:M}),[M]),y.useEffect(()=>{c&&re&&oe&&!ce&&(ue(a?null:pe.clientWidth),F.current.focus())},[oe,a]),y.useEffect(()=>{i&&F.current.focus()},[i]),y.useEffect(()=>{if(!h)return;let e=op(F.current).getElementById(h);if(e){let t=()=>{getSelection().isCollapsed&&F.current.focus()};return e.addEventListener(`click`,t),()=>{e.removeEventListener(`click`,t)}}},[h]);let me=(e,t)=>{e?w&&w(t):S&&S(t),ce||(ue(a?null:pe.clientWidth),ie(e))},I=e=>{e.button===0&&(e.preventDefault(),F.current.focus(),me(!0,e))},he=e=>{me(!1,e)},ge=y.Children.toArray(o),_e=e=>{let t=ge.find(t=>t.props.value===e.target.value);t!==void 0&&(ne(t.props.value),x&&x(e,t))},ve=e=>t=>{let n;if(t.currentTarget.hasAttribute(`tabindex`)){if(_){n=Array.isArray(M)?M.slice():[];let t=M.indexOf(e.props.value);t===-1?n.push(e.props.value):n.splice(t,1)}else n=e.props.value;if(e.props.onClick&&e.props.onClick(t),M!==n&&(ne(n),x)){let r=t.nativeEvent||t,i=new r.constructor(r.type,r);Object.defineProperty(i,"target",{writable:!0,value:{value:n,name:v}}),x(i,e)}_||me(!1,t)}},ye=e=>{E||[` `,`ArrowUp`,`ArrowDown`,`Enter`].indexOf(e.key)!==-1&&(e.preventDefault(),me(!0,e))},be=oe!==null&&re,xe=e=>{!be&&b&&(Object.defineProperty(e,"target",{writable:!0,value:{value:M,name:v}}),b(e))};delete te[`aria-invalid`];let Se,Ce,we=[],Te=!1;(mh({value:M})||d)&&(D?Se=D(M):Te=!0);let Ee=ge.map(e=>{if(!y.isValidElement(e))return null;let t;if(_){if(!Array.isArray(M))throw Error(ae(2));t=M.some(t=>Cx(t,e.props.value)),t&&Te&&we.push(e.props.children)}else t=Cx(M,e.props.value),t&&Te&&(Ce=e.props.children);return y.cloneElement(e,{"aria-selected":t?`true`:`false`,onClick:ve(e),onKeyUp:t=>{t.key===` `&&t.preventDefault(),e.props.onKeyUp&&e.props.onKeyUp(t)},role:`option`,selected:t,value:void 0,"data-value":e.props.value})});Te&&(Se=_?we.length===0?null:we.reduce((e,t,n)=>(e.push(t),n<we.length-1&&e.push(`, `),e),[]):Ce);let De=le;!a&&ce&&oe&&(De=pe.clientWidth);let Oe;Oe=k===void 0?u?null:0:k;let ke=O.id||(v?`mui-component-select-${v}`:void 0),Ae=A({},e,{variant:ee,value:M,open:be,error:f}),je=Tx(Ae),Me=A({},g.PaperProps,g.slotProps?.paper),Ne=go();return(0,N.jsxs)(y.Fragment,{children:[(0,N.jsx)(bx,A({ref:fe,tabIndex:Oe,role:`combobox`,"aria-controls":Ne,"aria-disabled":u?`true`:void 0,"aria-expanded":be?`true`:`false`,"aria-haspopup":`listbox`,"aria-label":r,"aria-labelledby":[h,ke].filter(Boolean).join(` `)||void 0,"aria-describedby":n,onKeyDown:ye,onMouseDown:u||E?null:I,onBlur:xe,onFocus:C},O,{ownerState:Ae,className:z(O.className,je.select,s),id:ke,children:wx(Se)?vx||=(0,N.jsx)(`span`,{className:`notranslate`,children:``}):Se})),(0,N.jsx)(Sx,A({"aria-invalid":f,value:Array.isArray(M)?M.join(`,`):M,name:v,ref:P,"aria-hidden":!0,onChange:_e,tabIndex:-1,disabled:u,className:je.nativeInput,autoFocus:i,ownerState:Ae},te)),(0,N.jsx)(xx,{as:p,className:je.icon,ownerState:Ae}),(0,N.jsx)(Hb,A({id:`menu-${v||``}`,anchorEl:pe,open:be,onClose:he,anchorOrigin:{vertical:`bottom`,horizontal:`center`},transformOrigin:{vertical:`top`,horizontal:`center`}},g,{MenuListProps:A({"aria-labelledby":h,role:`listbox`,"aria-multiselectable":_?`true`:void 0,disableListWrap:!0,id:Ne},g.MenuListProps),slotProps:A({},g.slotProps,{paper:A({},Me,{style:A({minWidth:De},Me==null?null:Me.style)})}),children:Ee}))]})});j(),R(),mr();var Dx=[`autoWidth`,`children`,`classes`,`className`,`defaultOpen`,`displayEmpty`,`IconComponent`,`id`,`input`,`inputProps`,`label`,`labelId`,`MenuProps`,`multiple`,`native`,`onClose`,`onOpen`,`open`,`renderValue`,`SelectDisplayProps`,`variant`],Ox=[`root`],kx=e=>{let{classes:t}=e;return t},Ax={name:`MuiSelect`,overridesResolver:(e,t)=>t.root,shouldForwardProp:e=>Cc(e)&&e!==`variant`,slot:`Root`},jx=W(Py,Ax)(``),Mx=W(hx,Ax)(``),Nx=W(Nv,Ax)(``),Px=y.forwardRef(function(e,t){let n=F({name:`MuiSelect`,props:e}),{autoWidth:r=!1,children:i,classes:a={},className:o,defaultOpen:s=!1,displayEmpty:c=!1,IconComponent:l=Mh,id:u,input:d,inputProps:f,label:p,labelId:m,MenuProps:h,multiple:g=!1,native:_=!1,onClose:v,onOpen:b,open:x,renderValue:S,SelectDisplayProps:C,variant:w=`outlined`}=n,T=L(n,Dx),E=_?ix:Ex,D=uh({props:n,muiFormControl:fh(),states:[`variant`,`error`]}),O=D.variant||w,k=A({},n,{variant:O,classes:a}),j=kx(k),ee=L(j,Ox),te=d||{standard:(0,N.jsx)(jx,{ownerState:k}),outlined:(0,N.jsx)(Mx,{label:p,ownerState:k}),filled:(0,N.jsx)(Nx,{ownerState:k})}[O],M=dp(t,Xo(te));return(0,N.jsx)(y.Fragment,{children:y.cloneElement(te,A({inputComponent:E,inputProps:A({children:i,error:D.error,IconComponent:l,variant:O,type:void 0,multiple:g},_?{id:u}:{autoWidth:r,defaultOpen:s,displayEmpty:c,labelId:m,MenuProps:h,onClose:v,onOpen:b,open:x,renderValue:S,SelectDisplayProps:A({id:u},C)},f,{classes:f?ur(ee,f.classes):ee},d?d.props.inputProps:{})},(g&&_||c)&&O===`outlined`?{notched:!0}:{},{ref:M,className:z(te.props.className,o,j.root)},!d&&{variant:O},T))})});Px.muiName=`Select`;function Fx(e){return B(`MuiSwitch`,e)}var Ix=V(`MuiSwitch`,[`root`,`edgeStart`,`edgeEnd`,`switchBase`,`colorPrimary`,`colorSecondary`,`sizeSmall`,`sizeMedium`,`checked`,`disabled`,`input`,`thumb`,`track`]);R(),j();var Lx=[`className`,`color`,`edge`,`size`,`sx`],Rx=e=>{let{classes:t,edge:n,size:r,color:i,checked:a,disabled:o}=e,s=H({root:[`root`,n&&`edge${G(n)}`,`size${G(r)}`],switchBase:[`switchBase`,`color${G(i)}`,a&&`checked`,o&&`disabled`],thumb:[`thumb`],track:[`track`],input:[`input`]},Fx,t);return A({},t,s)},zx=W(`span`,{name:`MuiSwitch`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,n.edge&&t[`edge${G(n.edge)}`],t[`size${G(n.size)}`]]}})({display:`inline-flex`,width:58,height:38,overflow:`hidden`,padding:12,boxSizing:`border-box`,position:`relative`,flexShrink:0,zIndex:0,verticalAlign:`middle`,"@media print":{colorAdjust:`exact`},variants:[{props:{edge:`start`},style:{marginLeft:-8}},{props:{edge:`end`},style:{marginRight:-8}},{props:{size:`small`},style:{width:40,height:24,padding:7,[`& .${Ix.thumb}`]:{width:16,height:16},[`& .${Ix.switchBase}`]:{padding:4,[`&.${Ix.checked}`]:{transform:`translateX(16px)`}}}}]}),Bx=W(Xg,{name:`MuiSwitch`,slot:`SwitchBase`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.switchBase,{[`& .${Ix.input}`]:t.input},n.color!=="default"&&t[`color${G(n.color)}`]]}})(({theme:e})=>({position:`absolute`,top:0,left:0,zIndex:1,color:e.vars?e.vars.palette.Switch.defaultColor:`${e.palette.mode===`light`?e.palette.common.white:e.palette.grey[300]}`,transition:e.transitions.create([`left`,`transform`],{duration:e.transitions.duration.shortest}),[`&.${Ix.checked}`]:{transform:`translateX(20px)`},[`&.${Ix.disabled}`]:{color:e.vars?e.vars.palette.Switch.defaultDisabledColor:`${e.palette.mode===`light`?e.palette.grey[100]:e.palette.grey[600]}`},[`&.${Ix.checked} + .${Ix.track}`]:{opacity:.5},[`&.${Ix.disabled} + .${Ix.track}`]:{opacity:e.vars?e.vars.opacity.switchTrackDisabled:`${e.palette.mode===`light`?.12:.2}`},[`& .${Ix.input}`]:{left:`-100%`,width:`300%`}}),({theme:e})=>({"&:hover":{backgroundColor:e.vars?`rgba(${e.vars.palette.action.activeChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,Fs.alpha)(e.palette.action.active,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:`transparent`}},variants:[...Object.entries(e.palette).filter(([,e])=>e.main&&e.light).map(([t])=>({props:{color:t},style:{[`&.${Ix.checked}`]:{color:(e.vars||e).palette[t].main,"&:hover":{backgroundColor:e.vars?`rgba(${e.vars.palette[t].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,Fs.alpha)(e.palette[t].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:`transparent`}},[`&.${Ix.disabled}`]:{color:e.vars?e.vars.palette.Switch[`${t}DisabledColor`]:`${e.palette.mode===`light`?(0,Fs.lighten)(e.palette[t].main,.62):(0,Fs.darken)(e.palette[t].main,.55)}`}},[`&.${Ix.checked} + .${Ix.track}`]:{backgroundColor:(e.vars||e).palette[t].main}}}))]})),Vx=W(`span`,{name:`MuiSwitch`,slot:`Track`,overridesResolver:(e,t)=>t.track})(({theme:e})=>({height:`100%`,width:`100%`,borderRadius:7,zIndex:-1,transition:e.transitions.create([`opacity`,`background-color`],{duration:e.transitions.duration.shortest}),backgroundColor:e.vars?e.vars.palette.common.onBackground:`${e.palette.mode===`light`?e.palette.common.black:e.palette.common.white}`,opacity:e.vars?e.vars.opacity.switchTrack:`${e.palette.mode===`light`?.38:.3}`})),Hx=W(`span`,{name:`MuiSwitch`,slot:`Thumb`,overridesResolver:(e,t)=>t.thumb})(({theme:e})=>({boxShadow:(e.vars||e).shadows[1],backgroundColor:`currentColor`,width:20,height:20,borderRadius:`50%`})),Ux=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiSwitch`}),{className:r,color:i=`primary`,edge:a=!1,size:o=`medium`,sx:s}=n,c=L(n,Lx),l=A({},n,{color:i,edge:a,size:o}),u=Rx(l),d=(0,N.jsx)(Hx,{className:u.thumb,ownerState:l});return(0,N.jsxs)(zx,{className:z(u.root,r),sx:s,ownerState:l,children:[(0,N.jsx)(Bx,A({type:`checkbox`,icon:d,checkedIcon:d,ref:t,ownerState:l},c,{classes:A({},u,{root:u.switchBase})})),(0,N.jsx)(Vx,{className:u.track,ownerState:l})]})});function Wx(e){return B(`MuiTab`,e)}var Gx=V(`MuiTab`,[`root`,`labelIcon`,`textColorInherit`,`textColorPrimary`,`textColorSecondary`,`selected`,`disabled`,`fullWidth`,`wrapped`,`iconWrapper`]);R(),j();var Kx=[`className`,`disabled`,`disableFocusRipple`,`fullWidth`,`icon`,`iconPosition`,`indicator`,`label`,`onChange`,`onClick`,`onFocus`,`selected`,`selectionFollowsFocus`,`textColor`,`value`,`wrapped`],qx=e=>{let{classes:t,textColor:n,fullWidth:r,wrapped:i,icon:a,label:o,selected:s,disabled:c}=e;return H({root:[`root`,a&&o&&`labelIcon`,`textColor${G(n)}`,r&&`fullWidth`,i&&`wrapped`,s&&`selected`,c&&`disabled`],iconWrapper:[`iconWrapper`]},Wx,t)},Jx=W(fm,{name:`MuiTab`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,n.label&&n.icon&&t.labelIcon,t[`textColor${G(n.textColor)}`],n.fullWidth&&t.fullWidth,n.wrapped&&t.wrapped,{[`& .${Gx.iconWrapper}`]:t.iconWrapper}]}})(({theme:e,ownerState:t})=>A({},e.typography.button,{maxWidth:360,minWidth:90,position:`relative`,minHeight:48,flexShrink:0,padding:`12px 16px`,overflow:`hidden`,whiteSpace:`normal`,textAlign:`center`},t.label&&{flexDirection:t.iconPosition===`top`||t.iconPosition===`bottom`?`column`:`row`},{lineHeight:1.25},t.icon&&t.label&&{minHeight:72,paddingTop:9,paddingBottom:9,[`& > .${Gx.iconWrapper}`]:A({},t.iconPosition===`top`&&{marginBottom:6},t.iconPosition===`bottom`&&{marginTop:6},t.iconPosition===`start`&&{marginRight:e.spacing(1)},t.iconPosition===`end`&&{marginLeft:e.spacing(1)})},t.textColor===`inherit`&&{color:`inherit`,opacity:.6,[`&.${Gx.selected}`]:{opacity:1},[`&.${Gx.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity}},t.textColor===`primary`&&{color:(e.vars||e).palette.text.secondary,[`&.${Gx.selected}`]:{color:(e.vars||e).palette.primary.main},[`&.${Gx.disabled}`]:{color:(e.vars||e).palette.text.disabled}},t.textColor===`secondary`&&{color:(e.vars||e).palette.text.secondary,[`&.${Gx.selected}`]:{color:(e.vars||e).palette.secondary.main},[`&.${Gx.disabled}`]:{color:(e.vars||e).palette.text.disabled}},t.fullWidth&&{flexShrink:1,flexGrow:1,flexBasis:0,maxWidth:`none`},t.wrapped&&{fontSize:e.typography.pxToRem(12)})),Yx=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiTab`}),{className:r,disabled:i=!1,disableFocusRipple:a=!1,fullWidth:o,icon:s,iconPosition:c=`top`,indicator:l,label:u,onChange:d,onClick:f,onFocus:p,selected:m,selectionFollowsFocus:h,textColor:g=`inherit`,value:_,wrapped:v=!1}=n,b=L(n,Kx),x=A({},n,{disabled:i,disableFocusRipple:a,selected:m,icon:!!s,iconPosition:c,label:!!u,fullWidth:o,textColor:g,wrapped:v}),S=qx(x),C=s&&u&&y.isValidElement(s)?y.cloneElement(s,{className:z(S.iconWrapper,s.props.className)}):s;return(0,N.jsxs)(Jx,A({focusRipple:!a,className:z(S.root,r),ref:t,role:`tab`,"aria-selected":m,disabled:i,onClick:e=>{!m&&d&&d(e,_),f&&f(e)},onFocus:e=>{h&&!m&&d&&d(e,_),p&&p(e)},ownerState:x,tabIndex:m?0:-1},b,{children:[c===`top`||c===`start`?(0,N.jsxs)(y.Fragment,{children:[C,u]}):(0,N.jsxs)(y.Fragment,{children:[u,C]}),l]}))});function Xx(e){return B(`MuiToolbar`,e)}V(`MuiToolbar`,[`root`,`gutters`,`regular`,`dense`]),R(),j();var Zx=[`className`,`component`,`disableGutters`,`variant`],Qx=e=>{let{classes:t,disableGutters:n,variant:r}=e;return H({root:[`root`,!n&&`gutters`,r]},Xx,t)},$x=W(`div`,{name:`MuiToolbar`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,!n.disableGutters&&t.gutters,t[n.variant]]}})(({theme:e,ownerState:t})=>A({position:`relative`,display:`flex`,alignItems:`center`},!t.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up(`sm`)]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}},t.variant===`dense`&&{minHeight:48}),({theme:e,ownerState:t})=>t.variant===`regular`&&e.mixins.toolbar),eS=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiToolbar`}),{className:r,component:i=`div`,disableGutters:a=!1,variant:o=`regular`}=n,s=L(n,Zx),c=A({},n,{component:i,disableGutters:a,variant:o}),l=Qx(c);return(0,N.jsx)($x,A({as:i,className:z(l.root,r),ref:t,ownerState:c},s))}),tS=rp((0,N.jsx)(`path`,{d:`M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z`}),`KeyboardArrowLeft`),nS=rp((0,N.jsx)(`path`,{d:`M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z`}),`KeyboardArrowRight`);function rS(e){return(1+Math.sin(Math.PI*e-Math.PI/2))/2}function iS(e,t,n,r={},i=()=>{}){let{ease:a=rS,duration:o=300}=r,s=null,c=t[e],l=!1,u=()=>{l=!0},d=r=>{if(l){i(Error(`Animation cancelled`));return}s===null&&(s=r);let u=Math.min(1,(r-s)/o);if(t[e]=a(u)*(n-c)+c,u>=1){requestAnimationFrame(()=>{i(null)});return}requestAnimationFrame(d)};return c===n?(i(Error(`Element already at target position`)),u):(requestAnimationFrame(d),u)}j(),R();var aS=[`onChange`],oS={width:99,height:99,position:`absolute`,top:-9999,overflow:`scroll`};function sS(e){let{onChange:t}=e,n=L(e,aS),r=y.useRef(),i=y.useRef(null),a=()=>{r.current=i.current.offsetHeight-i.current.clientHeight};return cp(()=>{let e=ip(()=>{let e=r.current;a(),e!==r.current&&t(r.current)}),n=sp(i.current);return n.addEventListener(`resize`,e),()=>{e.clear(),n.removeEventListener(`resize`,e)}},[t]),y.useEffect(()=>{a(),t(r.current)},[t]),(0,N.jsx)(`div`,A({style:oS},n,{ref:i}))}function cS(e){return B(`MuiTabScrollButton`,e)}var lS=V(`MuiTabScrollButton`,[`root`,`vertical`,`horizontal`,`disabled`]);R(),j();var uS=[`className`,`slots`,`slotProps`,`direction`,`orientation`,`disabled`],dS=e=>{let{classes:t,orientation:n,disabled:r}=e;return H({root:[`root`,n,r&&`disabled`]},cS,t)},fS=W(fm,{name:`MuiTabScrollButton`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,n.orientation&&t[n.orientation]]}})(({ownerState:e})=>A({width:40,flexShrink:0,opacity:.8,[`&.${lS.disabled}`]:{opacity:0}},e.orientation===`vertical`&&{width:`100%`,height:40,"& svg":{transform:`rotate(${e.isRtl?-90:90}deg)`}})),pS=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiTabScrollButton`}),{className:r,slots:i={},slotProps:a={},direction:o}=n,s=L(n,uS),c=as(),l=A({isRtl:c},n),u=dS(l),d=i.StartScrollButtonIcon??tS,f=i.EndScrollButtonIcon??nS,p=Yo({elementType:d,externalSlotProps:a.startScrollButtonIcon,additionalProps:{fontSize:`small`},ownerState:l}),m=Yo({elementType:f,externalSlotProps:a.endScrollButtonIcon,additionalProps:{fontSize:`small`},ownerState:l});return(0,N.jsx)(fS,A({component:`div`,className:z(u.root,r),ref:t,role:null,ownerState:l,tabIndex:null},s,{children:o===`left`?(0,N.jsx)(d,A({},p)):(0,N.jsx)(f,A({},m))}))});function mS(e){return B(`MuiTabs`,e)}var hS=V(`MuiTabs`,[`root`,`vertical`,`flexContainer`,`flexContainerVertical`,`centered`,`scroller`,`fixed`,`scrollableX`,`scrollableY`,`hideScrollbar`,`scrollButtons`,`scrollButtonsHideMobile`,`indicator`]);R(),j();var gS=[`aria-label`,`aria-labelledby`,`action`,`centered`,`children`,`className`,`component`,`allowScrollButtonsMobile`,`indicatorColor`,`onChange`,`orientation`,`ScrollButtonComponent`,`scrollButtons`,`selectionFollowsFocus`,`slots`,`slotProps`,`TabIndicatorProps`,`TabScrollButtonProps`,`textColor`,`value`,`variant`,`visibleScrollbar`],_S=(e,t)=>e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:e.firstChild,vS=(e,t)=>e===t?e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:e.lastChild,yS=(e,t,n)=>{let r=!1,i=n(e,t);for(;i;){if(i===e.firstChild){if(r)return;r=!0}let t=i.disabled||i.getAttribute(`aria-disabled`)===`true`;if(!i.hasAttribute(`tabindex`)||t)i=n(e,i);else{i.focus();return}}},bS=e=>{let{vertical:t,fixed:n,hideScrollbar:r,scrollableX:i,scrollableY:a,centered:o,scrollButtonsHideMobile:s,classes:c}=e;return H({root:[`root`,t&&`vertical`],scroller:[`scroller`,n&&`fixed`,r&&`hideScrollbar`,i&&`scrollableX`,a&&`scrollableY`],flexContainer:[`flexContainer`,t&&`flexContainerVertical`,o&&`centered`],indicator:[`indicator`],scrollButtons:[`scrollButtons`,s&&`scrollButtonsHideMobile`],scrollableX:[i&&`scrollableX`],hideScrollbar:[r&&`hideScrollbar`]},mS,c)},xS=W(`div`,{name:`MuiTabs`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[{[`& .${hS.scrollButtons}`]:t.scrollButtons},{[`& .${hS.scrollButtons}`]:n.scrollButtonsHideMobile&&t.scrollButtonsHideMobile},t.root,n.vertical&&t.vertical]}})(({ownerState:e,theme:t})=>A({overflow:`hidden`,minHeight:48,WebkitOverflowScrolling:`touch`,display:`flex`},e.vertical&&{flexDirection:`column`},e.scrollButtonsHideMobile&&{[`& .${hS.scrollButtons}`]:{[t.breakpoints.down(`sm`)]:{display:`none`}}})),SS=W(`div`,{name:`MuiTabs`,slot:`Scroller`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.scroller,n.fixed&&t.fixed,n.hideScrollbar&&t.hideScrollbar,n.scrollableX&&t.scrollableX,n.scrollableY&&t.scrollableY]}})(({ownerState:e})=>A({position:`relative`,display:`inline-block`,flex:`1 1 auto`,whiteSpace:`nowrap`},e.fixed&&{overflowX:`hidden`,width:`100%`},e.hideScrollbar&&{scrollbarWidth:`none`,"&::-webkit-scrollbar":{display:`none`}},e.scrollableX&&{overflowX:`auto`,overflowY:`hidden`},e.scrollableY&&{overflowY:`auto`,overflowX:`hidden`})),CS=W(`div`,{name:`MuiTabs`,slot:`FlexContainer`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.flexContainer,n.vertical&&t.flexContainerVertical,n.centered&&t.centered]}})(({ownerState:e})=>A({display:`flex`},e.vertical&&{flexDirection:`column`},e.centered&&{justifyContent:`center`})),wS=W(`span`,{name:`MuiTabs`,slot:`Indicator`,overridesResolver:(e,t)=>t.indicator})(({ownerState:e,theme:t})=>A({position:`absolute`,height:2,bottom:0,width:`100%`,transition:t.transitions.create()},e.indicatorColor===`primary`&&{backgroundColor:(t.vars||t).palette.primary.main},e.indicatorColor===`secondary`&&{backgroundColor:(t.vars||t).palette.secondary.main},e.vertical&&{height:`100%`,width:2,right:0})),TS=W(sS)({overflowX:`auto`,overflowY:`hidden`,scrollbarWidth:`none`,"&::-webkit-scrollbar":{display:`none`}}),ES={},DS=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiTabs`}),r=yc(),i=as(),{"aria-label":a,"aria-labelledby":o,action:s,centered:c=!1,children:l,className:u,component:d=`div`,allowScrollButtonsMobile:f=!1,indicatorColor:p=`primary`,onChange:m,orientation:h=`horizontal`,ScrollButtonComponent:g=pS,scrollButtons:_=`auto`,selectionFollowsFocus:v,slots:b={},slotProps:x={},TabIndicatorProps:S={},TabScrollButtonProps:C={},textColor:w=`primary`,value:T,variant:E=`standard`,visibleScrollbar:D=!1}=n,O=L(n,gS),k=E===`scrollable`,j=h===`vertical`,ee=j?`scrollTop`:`scrollLeft`,te=j?`top`:`left`,M=j?`bottom`:`right`,ne=j?`clientHeight`:`clientWidth`,re=j?`height`:`width`,ie=A({},n,{component:d,allowScrollButtonsMobile:f,indicatorColor:p,orientation:h,vertical:j,scrollButtons:_,textColor:w,variant:E,visibleScrollbar:D,fixed:!k,hideScrollbar:k&&!D,scrollableX:k&&!j,scrollableY:k&&j,centered:c&&!k,scrollButtonsHideMobile:!f}),P=bS(ie),ae=Yo({elementType:b.StartScrollButtonIcon,externalSlotProps:x.startScrollButtonIcon,ownerState:ie}),oe=Yo({elementType:b.EndScrollButtonIcon,externalSlotProps:x.endScrollButtonIcon,ownerState:ie}),[se,ce]=y.useState(!1),[le,ue]=y.useState(ES),[de,fe]=y.useState(!1),[pe,me]=y.useState(!1),[I,he]=y.useState(!1),[ge,_e]=y.useState({overflow:`hidden`,scrollbarWidth:0}),ve=new Map,ye=y.useRef(null),be=y.useRef(null),xe=()=>{let e=ye.current,t;if(e){let n=e.getBoundingClientRect();t={clientWidth:e.clientWidth,scrollLeft:e.scrollLeft,scrollTop:e.scrollTop,scrollLeftNormalized:Bo(e,i?`rtl`:`ltr`),scrollWidth:e.scrollWidth,top:n.top,bottom:n.bottom,left:n.left,right:n.right}}let n;if(e&&T!==!1){let e=be.current.children;if(e.length>0){let t=e[ve.get(T)];n=t?t.getBoundingClientRect():null}}return{tabsMeta:t,tabMeta:n}},Se=up(()=>{let{tabsMeta:e,tabMeta:t}=xe(),n=0,r;if(j)r=`top`,t&&e&&(n=t.top-e.top+e.scrollTop);else if(r=i?`right`:`left`,t&&e){let a=i?e.scrollLeftNormalized+e.clientWidth-e.scrollWidth:e.scrollLeft;n=(i?-1:1)*(t[r]-e[r]+a)}let a={[r]:n,[re]:t?t[re]:0};if(isNaN(le[r])||isNaN(le[re]))ue(a);else{let e=Math.abs(le[r]-a[r]),t=Math.abs(le[re]-a[re]);(e>=1||t>=1)&&ue(a)}}),Ce=(e,{animation:t=!0}={})=>{t?iS(ee,ye.current,e,{duration:r.transitions.duration.standard}):ye.current[ee]=e},we=e=>{let t=ye.current[ee];j?t+=e:(t+=e*(i?-1:1),t*=i&&zo()===`reverse`?-1:1),Ce(t)},Te=()=>{let e=ye.current[ne],t=0,n=Array.from(be.current.children);for(let r=0;r<n.length;r+=1){let i=n[r];if(t+i[ne]>e){r===0&&(t=e);break}t+=i[ne]}return t},Ee=()=>{we(-1*Te())},De=()=>{we(Te())},Oe=y.useCallback(e=>{_e({overflow:null,scrollbarWidth:e})},[]),ke=()=>{let e={};e.scrollbarSizeListener=k?(0,N.jsx)(TS,{onChange:Oe,className:z(P.scrollableX,P.hideScrollbar)}):null;let t=k&&(_===`auto`&&(de||pe)||_===!0);return e.scrollButtonStart=t?(0,N.jsx)(g,A({slots:{StartScrollButtonIcon:b.StartScrollButtonIcon},slotProps:{startScrollButtonIcon:ae},orientation:h,direction:i?`right`:`left`,onClick:Ee,disabled:!de},C,{className:z(P.scrollButtons,C.className)})):null,e.scrollButtonEnd=t?(0,N.jsx)(g,A({slots:{EndScrollButtonIcon:b.EndScrollButtonIcon},slotProps:{endScrollButtonIcon:oe},orientation:h,direction:i?`left`:`right`,onClick:De,disabled:!pe},C,{className:z(P.scrollButtons,C.className)})):null,e},Ae=up(e=>{let{tabsMeta:t,tabMeta:n}=xe();if(n&&t){if(n[te]<t[te]){let r=t[ee]+(n[te]-t[te]);Ce(r,{animation:e})}else if(n[M]>t[M]){let r=t[ee]+(n[M]-t[M]);Ce(r,{animation:e})}}}),je=up(()=>{k&&_!==!1&&he(!I)});y.useEffect(()=>{let e=ip(()=>{ye.current&&Se()}),t,n=n=>{n.forEach(e=>{e.removedNodes.forEach(e=>{var n;(n=t)==null||n.unobserve(e)}),e.addedNodes.forEach(e=>{var n;(n=t)==null||n.observe(e)})}),e(),je()},r=sp(ye.current);r.addEventListener(`resize`,e);let i;return typeof ResizeObserver<`u`&&(t=new ResizeObserver(e),Array.from(be.current.children).forEach(e=>{t.observe(e)})),typeof MutationObserver<`u`&&(i=new MutationObserver(n),i.observe(be.current,{childList:!0})),()=>{var n,a;e.clear(),r.removeEventListener(`resize`,e),(n=i)==null||n.disconnect(),(a=t)==null||a.disconnect()}},[Se,je]),y.useEffect(()=>{let e=Array.from(be.current.children),t=e.length;if(typeof IntersectionObserver<`u`&&t>0&&k&&_!==!1){let n=e[0],r=e[t-1],i={root:ye.current,threshold:.99},a=new IntersectionObserver(e=>{fe(!e[0].isIntersecting)},i);a.observe(n);let o=new IntersectionObserver(e=>{me(!e[0].isIntersecting)},i);return o.observe(r),()=>{a.disconnect(),o.disconnect()}}},[k,_,I,l?.length]),y.useEffect(()=>{ce(!0)},[]),y.useEffect(()=>{Se()}),y.useEffect(()=>{Ae(ES!==le)},[Ae,le]),y.useImperativeHandle(s,()=>({updateIndicator:Se,updateScrollButtons:je}),[Se,je]);let Me=(0,N.jsx)(wS,A({},S,{className:z(P.indicator,S.className),ownerState:ie,style:A({},le,S.style)})),Ne=0,Pe=y.Children.map(l,e=>{if(!y.isValidElement(e))return null;let t=e.props.value===void 0?Ne:e.props.value;ve.set(t,Ne);let n=t===T;return Ne+=1,y.cloneElement(e,A({fullWidth:E===`fullWidth`,indicator:n&&!se&&Me,selected:n,selectionFollowsFocus:v,onChange:m,textColor:w,value:t},Ne===1&&T===!1&&!e.props.tabIndex?{tabIndex:0}:{}))}),Fe=e=>{let t=be.current,n=op(t).activeElement;if(n.getAttribute(`role`)!==`tab`)return;let r=h===`horizontal`?`ArrowLeft`:`ArrowUp`,a=h===`horizontal`?`ArrowRight`:`ArrowDown`;switch(h===`horizontal`&&i&&(r=`ArrowRight`,a=`ArrowLeft`),e.key){case r:e.preventDefault(),yS(t,n,vS);break;case a:e.preventDefault(),yS(t,n,_S);break;case`Home`:e.preventDefault(),yS(t,null,_S);break;case`End`:e.preventDefault(),yS(t,null,vS)}},Ie=ke();return(0,N.jsxs)(xS,A({className:z(P.root,u),ownerState:ie,ref:t,as:d},O,{children:[Ie.scrollButtonStart,Ie.scrollbarSizeListener,(0,N.jsxs)(SS,{className:P.scroller,ownerState:ie,style:{overflow:ge.overflow,[j?`margin${i?`Left`:`Right`}`:`marginBottom`]:D?void 0:-ge.scrollbarWidth},ref:ye,children:[(0,N.jsx)(CS,{"aria-label":a,"aria-labelledby":o,"aria-orientation":h===`vertical`?`vertical`:null,className:P.flexContainer,ownerState:ie,onKeyDown:Fe,ref:be,role:`tablist`,children:Pe}),se&&Me]}),Ie.scrollButtonEnd]}))});function OS(e){return B(`MuiTextField`,e)}V(`MuiTextField`,[`root`]),j(),R();var kS=`autoComplete.autoFocus.children.className.color.defaultValue.disabled.error.FormHelperTextProps.fullWidth.helperText.id.InputLabelProps.inputProps.InputProps.inputRef.label.maxRows.minRows.multiline.name.onBlur.onChange.onFocus.placeholder.required.rows.select.SelectProps.type.value.variant`.split(`.`),AS={standard:Py,filled:Nv,outlined:hx},jS=e=>{let{classes:t}=e;return H({root:[`root`]},OS,t)},MS=W(Rv,{name:`MuiTextField`,slot:`Root`,overridesResolver:(e,t)=>t.root})({}),Z=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiTextField`}),{autoComplete:r,autoFocus:i=!1,children:a,className:o,color:s=`primary`,defaultValue:c,disabled:l=!1,error:u=!1,FormHelperTextProps:d,fullWidth:f=!1,helperText:p,id:m,InputLabelProps:h,inputProps:g,InputProps:_,inputRef:v,label:y,maxRows:b,minRows:x,multiline:S=!1,name:C,onBlur:w,onChange:T,onFocus:E,placeholder:D,required:O=!1,rows:k,select:j=!1,SelectProps:ee,type:te,value:M,variant:ne=`outlined`}=n,re=L(n,kS),ie=A({},n,{autoFocus:i,color:s,disabled:l,error:u,fullWidth:f,multiline:S,required:O,select:j,variant:ne}),P=jS(ie),ae={};ne===`outlined`&&(h&&h.shrink!==void 0&&(ae.notched=h.shrink),ae.label=y),j&&((!ee||!ee.native)&&(ae.id=void 0),ae[`aria-describedby`]=void 0);let oe=go(m),se=p&&oe?`${oe}-helper-text`:void 0,ce=y&&oe?`${oe}-label`:void 0,le=AS[ne],ue=(0,N.jsx)(le,A({"aria-describedby":se,autoComplete:r,autoFocus:i,defaultValue:c,fullWidth:f,multiline:S,name:C,rows:k,maxRows:b,minRows:x,type:te,value:M,id:oe,inputRef:v,onBlur:w,onChange:T,onFocus:E,placeholder:D,inputProps:g},ae,_));return(0,N.jsxs)(MS,A({className:z(P.root,o),disabled:l,error:u,fullWidth:f,ref:t,required:O,color:s,variant:ne,ownerState:ie},re,{children:[y!=null&&y!==``&&(0,N.jsx)(zy,A({htmlFor:oe,id:ce},h,{children:y})),j?(0,N.jsx)(Px,A({"aria-describedby":se,id:oe,labelId:ce,value:M,input:ue},ee,{children:a})):ue,p&&(0,N.jsx)(Qv,A({id:se},d,{children:p}))]}))}),NS=rp((0,N.jsx)(`path`,{d:`M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z`}),`ChevronLeft`),PS=rp((0,N.jsx)(`path`,{d:`M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z`}),`ChevronRight`),Q=e=>typeof e==`string`,FS=()=>{let e,t,n=new Promise((n,r)=>{e=n,t=r});return n.resolve=e,n.reject=t,n},IS=e=>e==null?``:String(e),LS=(e,t,n)=>{e.forEach(e=>{t[e]&&(n[e]=t[e])})},RS=/###/g,zS=e=>e&&e.includes(`###`)?e.replace(RS,`.`):e,BS=e=>!e||Q(e),VS=(e,t,n)=>{let r=Q(t)?t.split(`.`):t,i=0;for(;i<r.length-1;){if(BS(e))return{};let t=zS(r[i]);!e[t]&&n&&(e[t]=new n),e=Object.prototype.hasOwnProperty.call(e,t)?e[t]:{},++i}return BS(e)?{}:{obj:e,k:zS(r[i])}},HS=(e,t,n)=>{let{obj:r,k:i}=VS(e,t,Object);if(r!==void 0||t.length===1){r[i]=n;return}let a=t[t.length-1],o=t.slice(0,t.length-1),s=VS(e,o,Object);for(;s.obj===void 0&&o.length;)a=`${o[o.length-1]}.${a}`,o=o.slice(0,o.length-1),s=VS(e,o,Object),s?.obj&&s.obj[`${s.k}.${a}`]!==void 0&&(s.obj=void 0);s.obj[`${s.k}.${a}`]=n},US=(e,t,n,r)=>{let{obj:i,k:a}=VS(e,t,Object);i[a]=i[a]||[],i[a].push(n)},WS=(e,t)=>{let{obj:n,k:r}=VS(e,t);if(n&&Object.prototype.hasOwnProperty.call(n,r))return n[r]},GS=(e,t,n)=>{let r=WS(e,n);return r===void 0?WS(t,n):r},KS=(e,t,n)=>{for(let r in t)r!==`__proto__`&&r!==`constructor`&&(Object.prototype.hasOwnProperty.call(e,r)?Q(e[r])||e[r]instanceof String||Q(t[r])||t[r]instanceof String?n&&(e[r]=t[r]):KS(e[r],t[r],n):e[r]=t[r]);return e},qS=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,`\\$&`),JS={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`,"/":`/`},YS=e=>Q(e)?e.replace(/[&<>"'\/]/g,e=>JS[e]):e,XS=class{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){let t=this.regExpMap.get(e);if(t!==void 0)return t;let n=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,n),this.regExpQueue.push(e),n}},ZS=[` `,`,`,`?`,`!`,`;`],QS=new XS(20),$S=(e,t,n)=>{t||=``,n||=``;let r=ZS.filter(e=>!t.includes(e)&&!n.includes(e));if(r.length===0)return!0;let i=QS.getRegExp(`(${r.map(e=>e===`?`?`\\?`:e).join(`|`)})`),a=!i.test(e);if(!a){let t=e.indexOf(n);t>0&&!i.test(e.substring(0,t))&&(a=!0)}return a},eC=(e,t,n=`.`)=>{if(!e)return;if(e[t])return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0;let r=t.split(n),i=e;for(let e=0;e<r.length;){if(!i||typeof i!=`object`)return;let t,a=``;for(let o=e;o<r.length;++o)if(o!==e&&(a+=n),a+=r[o],t=i[a],t!==void 0){if([`string`,`number`,`boolean`].includes(typeof t)&&o<r.length-1)continue;e+=o-e+1;break}i=t}return i},tC=e=>e?.replace(/_/g,`-`),nC={type:`logger`,log(e){this.output(`log`,e)},warn(e){this.output(`warn`,e)},error(e){this.output(`error`,e)},output(e,t){console?.[e]?.apply?.(console,t)}},rC=new class e{constructor(e,t={}){this.init(e,t)}init(e,t={}){this.prefix=t.prefix||`i18next:`,this.logger=e||nC,this.options=t,this.debug=t.debug}log(...e){return this.forward(e,`log`,``,!0)}warn(...e){return this.forward(e,`warn`,``,!0)}error(...e){return this.forward(e,`error`,``)}deprecate(...e){return this.forward(e,`warn`,`WARNING DEPRECATED: `,!0)}forward(e,t,n,r){return r&&!this.debug?null:(e=e.map(e=>Q(e)?e.replace(/[\r\n\x00-\x1F\x7F]/g,` `):e),Q(e[0])&&(e[0]=`${n}${this.prefix} ${e[0]}`),this.logger[t](e))}create(t){return new e(this.logger,{prefix:`${this.prefix}:${t}:`,...this.options})}clone(t){return t||=this.options,t.prefix=t.prefix||this.prefix,new e(this.logger,t)}},iC=class{constructor(){this.observers={}}on(e,t){return e.split(` `).forEach(e=>{this.observers[e]||(this.observers[e]=new Map);let n=this.observers[e].get(t)||0;this.observers[e].set(t,n+1)}),this}off(e,t){if(this.observers[e]){if(!t){delete this.observers[e];return}this.observers[e].delete(t)}}once(e,t){let n=(...r)=>{t(...r),this.off(e,n)};return this.on(e,n),this}emit(e,...t){this.observers[e]&&Array.from(this.observers[e].entries()).forEach(([e,n])=>{for(let r=0;r<n;r++)e(...t)}),this.observers[`*`]&&Array.from(this.observers[`*`].entries()).forEach(([n,r])=>{for(let i=0;i<r;i++)n(e,...t)})}},aC=class extends iC{constructor(e,t={ns:[`translation`],defaultNS:`translation`}){super(),this.data=e||{},this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator=`.`),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.includes(e)||this.options.ns.push(e)}removeNamespaces(e){let t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}getResource(e,t,n,r={}){let i=r.keySeparator===void 0?this.options.keySeparator:r.keySeparator,a=r.ignoreJSONStructure===void 0?this.options.ignoreJSONStructure:r.ignoreJSONStructure,o;e.includes(`.`)?o=e.split(`.`):(o=[e,t],n&&(Array.isArray(n)?o.push(...n):Q(n)&&i?o.push(...n.split(i)):o.push(n)));let s=WS(this.data,o);return!s&&!t&&!n&&e.includes(`.`)&&(e=o[0],t=o[1],n=o.slice(2).join(`.`)),s||!a||!Q(n)?s:eC(this.data?.[e]?.[t],n,i)}addResource(e,t,n,r,i={silent:!1}){let a=i.keySeparator===void 0?this.options.keySeparator:i.keySeparator,o=[e,t];n&&(o=o.concat(a?n.split(a):n)),e.includes(`.`)&&(o=e.split(`.`),r=t,t=o[1]),this.addNamespaces(t),HS(this.data,o,r),i.silent||this.emit(`added`,e,t,n,r)}addResources(e,t,n,r={silent:!1}){for(let r in n)(Q(n[r])||Array.isArray(n[r]))&&this.addResource(e,t,r,n[r],{silent:!0});r.silent||this.emit(`added`,e,t,n)}addResourceBundle(e,t,n,r,i,a={silent:!1,skipCopy:!1}){let o=[e,t];e.includes(`.`)&&(o=e.split(`.`),r=n,n=t,t=o[1]),this.addNamespaces(t);let s=WS(this.data,o)||{};a.skipCopy||(n=JSON.parse(JSON.stringify(n))),r?KS(s,n,i):s={...s,...n},HS(this.data,o,s),a.silent||this.emit(`added`,e,t,n)}removeResourceBundle(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit(`removed`,e,t)}hasResourceBundle(e,t){return this.getResource(e,t)!==void 0}getResourceBundle(e,t){return t||=this.options.defaultNS,this.getResource(e,t)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){let t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find(e=>t[e]&&Object.keys(t[e]).length>0)}toJSON(){return this.data}},oC={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,r,i){return e.forEach(e=>{t=this.processors[e]?.process(t,n,r,i)??t}),t}},sC=Symbol(`i18next/PATH_KEY`);function cC(){let e=[],t=Object.create(null),n;return t.get=(r,i)=>(n?.revoke?.(),i===sC?e:(e.push(i),n=Proxy.revocable(r,t),n.proxy)),Proxy.revocable(Object.create(null),t).proxy}function lC(e,t){let{[sC]:n}=e(cC()),r=t?.keySeparator??`.`,i=t?.nsSeparator??`:`,a=t?.enableSelector===`strict`;if(n.length>1&&i){let e=t?.ns,o=a?Array.isArray(e)?e:e?[e]:null:Array.isArray(e)?e:null;if(o&&(a?o:o.length>1?o.slice(1):[]).includes(n[0]))return`${n[0]}${i}${n.slice(1).join(r)}`}return n.join(r)}var uC=e=>!Q(e)&&typeof e!=`boolean`&&typeof e!=`number`,dC=class e extends iC{constructor(e,t={}){super(),LS([`resourceStore`,`languageUtils`,`pluralResolver`,`interpolator`,`backendConnector`,`i18nFormat`,`utils`],e,this),this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator=`.`),this.logger=rC.create(`translator`),this.checkedLoadedFor={}}changeLanguage(e){e&&(this.language=e)}exists(e,t={interpolation:{}}){let n={...t};if(e==null)return!1;let r=this.resolve(e,n);if(r?.res===void 0)return!1;let i=uC(r.res);return!(n.returnObjects===!1&&i)}extractFromKey(e,t){let n=t.nsSeparator===void 0?this.options.nsSeparator:t.nsSeparator;n===void 0&&(n=`:`);let r=t.keySeparator===void 0?this.options.keySeparator:t.keySeparator,i=t.ns||this.options.defaultNS||[],a=n&&e.includes(n),o=!this.options.userDefinedKeySeparator&&!t.keySeparator&&!this.options.userDefinedNsSeparator&&!t.nsSeparator&&!$S(e,n,r);if(a&&!o){let t=e.match(this.interpolator.nestingRegexp);if(t&&t.length>0)return{key:e,namespaces:Q(i)?[i]:i};let a=e.split(n);(n!==r||n===r&&this.options.ns.includes(a[0]))&&(i=a.shift()),e=a.join(r)}return{key:e,namespaces:Q(i)?[i]:i}}translate(t,n,r){let i=typeof n==`object`?{...n}:n;if(typeof i!=`object`&&this.options.overloadTranslationOptionHandler&&(i=this.options.overloadTranslationOptionHandler(arguments)),typeof i==`object`&&(i={...i}),i||={},t==null)return``;typeof t==`function`&&(t=lC(t,{...this.options,...i})),Array.isArray(t)||(t=[String(t)]),t=t.map(e=>typeof e==`function`?lC(e,{...this.options,...i}):String(e));let a=i.returnDetails===void 0?this.options.returnDetails:i.returnDetails,o=i.keySeparator===void 0?this.options.keySeparator:i.keySeparator,{key:s,namespaces:c}=this.extractFromKey(t[t.length-1],i),l=c[c.length-1],u=i.nsSeparator===void 0?this.options.nsSeparator:i.nsSeparator;u===void 0&&(u=`:`);let d=i.lng||this.language,f=i.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(d?.toLowerCase()===`cimode`)return f?a?{res:`${l}${u}${s}`,usedKey:s,exactUsedKey:s,usedLng:d,usedNS:l,usedParams:this.getUsedParamsDetails(i)}:`${l}${u}${s}`:a?{res:s,usedKey:s,exactUsedKey:s,usedLng:d,usedNS:l,usedParams:this.getUsedParamsDetails(i)}:s;let p=this.resolve(t,i),m=p?.res,h=p?.usedKey||s,g=p?.exactUsedKey||s,_=[`[object Number]`,`[object Function]`,`[object RegExp]`],v=i.joinArrays===void 0?this.options.joinArrays:i.joinArrays,y=!this.i18nFormat||this.i18nFormat.handleAsObject,b=i.count!==void 0&&!Q(i.count),x=e.hasDefaultValue(i),S=b?this.pluralResolver.getSuffix(d,i.count,i):``,C=i.ordinal&&b?this.pluralResolver.getSuffix(d,i.count,{ordinal:!1}):``,w=b&&!i.ordinal&&i.count===0,T=w&&i[`defaultValue${this.options.pluralSeparator}zero`]||i[`defaultValue${S}`]||i[`defaultValue${C}`]||i.defaultValue,E=m;y&&!m&&x&&(E=T);let D=uC(E),O=Object.prototype.toString.apply(E);if(y&&E&&D&&!_.includes(O)&&!(Q(v)&&Array.isArray(E))){if(!i.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn(`accessing an object - but returnObjects options is not enabled!`);let e=this.options.returnedObjectHandler?this.options.returnedObjectHandler(h,E,{...i,ns:c}):`key '${s} (${this.language})' returned an object instead of string.`;return a?(p.res=e,p.usedParams=this.getUsedParamsDetails(i),p):e}if(o){let e=Array.isArray(E),t=e?[]:{},n=e?g:h;for(let e in E)if(Object.prototype.hasOwnProperty.call(E,e)){let r=`${n}${o}${e}`;t[e]=x&&!m?this.translate(r,{...i,defaultValue:uC(T)?T[e]:void 0,joinArrays:!1,ns:c}):this.translate(r,{...i,joinArrays:!1,ns:c}),t[e]===r&&(t[e]=E[e])}m=t}}else if(y&&Q(v)&&Array.isArray(m))m=m.join(v),m&&=this.extendTranslation(m,t,i,r);else{let e=!1,n=!1;!this.isValidLookup(m)&&x&&(e=!0,m=T),this.isValidLookup(m)||(n=!0,m=s);let a=(i.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&n?void 0:m,c=x&&T!==m&&this.options.updateMissing;if(n||e||c){if(this.logger.log(c?`updateKey`:`missingKey`,d,l,b&&!c?`${s}${this.pluralResolver.getSuffix(d,i.count,i)}`:s,c?T:m),o){let e=this.resolve(s,{...i,keySeparator:!1});e&&e.res&&this.logger.warn(`Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.`)}let e=[],t=this.languageUtils.getFallbackCodes(this.options.fallbackLng,i.lng||this.language);if(this.options.saveMissingTo===`fallback`&&t&&t[0])for(let n=0;n<t.length;n++)e.push(t[n]);else this.options.saveMissingTo===`all`?e=this.languageUtils.toResolveHierarchy(i.lng||this.language):e.push(i.lng||this.language);let n=(e,t,n)=>{let r=x&&n!==m?n:a;this.options.missingKeyHandler?this.options.missingKeyHandler(e,l,t,r,c,i):this.backendConnector?.saveMissing&&this.backendConnector.saveMissing(e,l,t,r,c,i),this.emit(`missingKey`,e,l,t,m)};this.options.saveMissing&&(this.options.saveMissingPlurals&&b?e.forEach(e=>{let t=this.pluralResolver.getSuffixes(e,i);w&&i[`defaultValue${this.options.pluralSeparator}zero`]&&!t.includes(`${this.options.pluralSeparator}zero`)&&t.push(`${this.options.pluralSeparator}zero`),t.forEach(t=>{n([e],s+t,i[`defaultValue${t}`]||T)})}):n(e,s,T))}m=this.extendTranslation(m,t,i,p,r),n&&m===s&&this.options.appendNamespaceToMissingKey&&(m=`${l}${u}${s}`),(n||e)&&this.options.parseMissingKeyHandler&&(m=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${l}${u}${s}`:s,e?m:void 0,i))}return a?(p.res=m,p.usedParams=this.getUsedParamsDetails(i),p):m}extendTranslation(e,t,n,r,i){if(this.i18nFormat?.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...n},n.lng||this.language||r.usedLng,r.usedNS,r.usedKey,{resolved:r});else if(!n.skipInterpolation){n.interpolation&&this.interpolator.init({...n,interpolation:{...this.options.interpolation,...n.interpolation}});let a=Q(e)&&(n?.interpolation?.skipOnVariables===void 0?this.options.interpolation.skipOnVariables:n.interpolation.skipOnVariables),o;if(a){let t=e.match(this.interpolator.nestingRegexp);o=t&&t.length}let s=n.replace&&!Q(n.replace)?n.replace:n;if(this.options.interpolation.defaultVariables&&(s={...this.options.interpolation.defaultVariables,...s}),e=this.interpolator.interpolate(e,s,n.lng||this.language||r.usedLng,n),a){let t=e.match(this.interpolator.nestingRegexp),r=t&&t.length;o<r&&(n.nest=!1)}!n.lng&&r&&r.res&&(n.lng=this.language||r.usedLng),n.nest!==!1&&(e=this.interpolator.nest(e,(...e)=>i?.[0]===e[0]&&!n.context?(this.logger.warn(`It seems you are nesting recursively key: ${e[0]} in key: ${t[0]}`),null):this.translate(...e,t),n)),n.interpolation&&this.interpolator.reset()}let a=n.postProcess||this.options.postProcess,o=Q(a)?[a]:a;return e!=null&&o?.length&&n.applyPostProcessor!==!1&&(e=oC.handle(o,e,t,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...r,usedParams:this.getUsedParamsDetails(n)},...n}:n,this)),e}resolve(e,t={}){let n,r,i,a,o;return Q(e)&&(e=[e]),Array.isArray(e)&&(e=e.map(e=>typeof e==`function`?lC(e,{...this.options,...t}):e)),e.forEach(e=>{if(this.isValidLookup(n))return;let s=this.extractFromKey(e,t),c=s.key;r=c;let l=s.namespaces;this.options.fallbackNS&&(l=l.concat(this.options.fallbackNS));let u=t.count!==void 0&&!Q(t.count),d=u&&!t.ordinal&&t.count===0,f=t.context!==void 0&&(Q(t.context)||typeof t.context==`number`)&&t.context!==``,p=t.lngs?t.lngs:this.languageUtils.toResolveHierarchy(t.lng||this.language,t.fallbackLng);l.forEach(e=>{this.isValidLookup(n)||(o=e,!this.checkedLoadedFor[`${p[0]}-${e}`]&&this.utils?.hasLoadedNamespace&&!this.utils?.hasLoadedNamespace(o)&&(this.checkedLoadedFor[`${p[0]}-${e}`]=!0,this.logger.warn(`key "${r}" for languages "${p.join(`, `)}" won't get resolved as namespace "${o}" was not yet loaded`,`This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!`)),p.forEach(r=>{if(this.isValidLookup(n))return;a=r;let o=[c];if(this.i18nFormat?.addLookupKeys)this.i18nFormat.addLookupKeys(o,c,r,e,t);else{let e;u&&(e=this.pluralResolver.getSuffix(r,t.count,t));let n=`${this.options.pluralSeparator}zero`,i=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(u&&(t.ordinal&&e.startsWith(i)&&o.push(c+e.replace(i,this.options.pluralSeparator)),o.push(c+e),d&&o.push(c+n)),f){let r=`${c}${this.options.contextSeparator||`_`}${t.context}`;o.push(r),u&&(t.ordinal&&e.startsWith(i)&&o.push(r+e.replace(i,this.options.pluralSeparator)),o.push(r+e),d&&o.push(r+n))}}let s;for(;s=o.pop();)this.isValidLookup(n)||(i=s,n=this.getResource(r,e,s,t))}))})}),{res:n,usedKey:r,exactUsedKey:i,usedLng:a,usedNS:o}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e===``)}getResource(e,t,n,r={}){return this.i18nFormat?.getResource?this.i18nFormat.getResource(e,t,n,r):this.resourceStore.getResource(e,t,n,r)}getUsedParamsDetails(e={}){let t=[`defaultValue`,`ordinal`,`context`,`replace`,`lng`,`lngs`,`fallbackLng`,`ns`,`keySeparator`,`nsSeparator`,`returnObjects`,`returnDetails`,`joinArrays`,`postProcess`,`interpolation`],n=e.replace&&!Q(e.replace),r=n?e.replace:e;if(n&&e.count!==void 0&&(r={...r,count:e.count}),this.options.interpolation.defaultVariables&&(r={...this.options.interpolation.defaultVariables,...r}),!n){r={...r};for(let e of t)delete r[e]}return r}static hasDefaultValue(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&t.startsWith(`defaultValue`)&&e[t]!==void 0)return!0;return!1}},fC=class{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=rC.create(`languageUtils`),this.resolveHierarchyCache={}}clearCache(){this.resolveHierarchyCache={}}getScriptPartFromCode(e){if(e=tC(e),!e||!e.includes(`-`))return null;let t=e.split(`-`);return t.length===2||(t.pop(),t[t.length-1].toLowerCase()===`x`)?null:this.formatLanguageCode(t.join(`-`))}getLanguagePartFromCode(e){if(e=tC(e),!e||!e.includes(`-`))return e;let t=e.split(`-`);return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(Q(e)&&e.includes(`-`)){let t;try{t=Intl.getCanonicalLocales(e)[0]}catch{}return t&&this.options.lowerCaseLng&&(t=t.toLowerCase()),t||(this.options.lowerCaseLng?e.toLowerCase():e)}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}isSupportedCode(e){return(this.options.load===`languageOnly`||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.includes(e)}getBestMatchFromCodes(e){if(!e)return null;let t;return e.forEach(e=>{if(t)return;let n=this.formatLanguageCode(e);(!this.options.supportedLngs||this.isSupportedCode(n))&&(t=n)}),!t&&this.options.supportedLngs&&e.forEach(e=>{if(t)return;let n=this.getScriptPartFromCode(e);if(this.isSupportedCode(n))return t=n;let r=this.getLanguagePartFromCode(e);if(this.isSupportedCode(r))return t=r;t=this.options.supportedLngs.find(e=>e===r?!0:!e.includes(`-`)&&!r.includes(`-`)?!1:!!(e.includes(`-`)&&!r.includes(`-`)&&e.slice(0,e.indexOf(`-`))===r||e.startsWith(r)&&r.length>1))}),t||=this.getFallbackCodes(this.options.fallbackLng)[0],t}getFallbackCodes(e,t){if(!e)return[];if(typeof e==`function`&&(e=e(t)),Q(e)&&(e=[e]),Array.isArray(e))return e;if(!t)return e.default||[];let n=e[t];return n||=e[this.getScriptPartFromCode(t)],n||=e[this.formatLanguageCode(t)],n||=e[this.getLanguagePartFromCode(t)],n||=e.default,n||[]}toResolveHierarchy(e,t){let n=this.options.fallbackLng,r=Array.isArray(n)?n.join(`|`):n;r!==this._cachedFallbackLng&&(this.resolveHierarchyCache={},this._cachedFallbackLng=r);let i=t===void 0||t===!1||Q(t),a=t===void 0&&typeof this.options.fallbackLng==`function`,o=Q(e)&&i&&!a,s=null;if(o){let n;n=t===void 0?`undefined`:t===!1?`boolean:false`:`string:${t}`,s=`${e.length}:${e}|${n}`}if(s!==null){let e=this.resolveHierarchyCache[s];if(e!==void 0)return e.slice()}let c=this.getFallbackCodes((t===!1?[]:t)||this.options.fallbackLng||[],e),l=[],u=e=>{e&&(this.isSupportedCode(e)?l.push(e):this.logger.warn(`rejecting language code not found in supportedLngs: ${e}`))};return Q(e)&&(e.includes(`-`)||e.includes(`_`))?(this.options.load!==`languageOnly`&&u(this.formatLanguageCode(e)),this.options.load!==`languageOnly`&&this.options.load!==`currentOnly`&&u(this.getScriptPartFromCode(e)),this.options.load!==`currentOnly`&&u(this.getLanguagePartFromCode(e))):Q(e)&&u(this.formatLanguageCode(e)),c.forEach(e=>{l.includes(e)||u(this.formatLanguageCode(e))}),s===null?l:(this.resolveHierarchyCache[s]=l,l.slice())}},pC={zero:0,one:1,two:2,few:3,many:4,other:5},mC={select:e=>e===1?`one`:`other`,resolvedOptions:()=>({pluralCategories:[`one`,`other`]})},hC=class{constructor(e,t={}){this.languageUtils=e,this.options=t,this.logger=rC.create(`pluralResolver`),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(e,t={}){let n=tC(e===`dev`?`en`:e),r=t.ordinal?`ordinal`:`cardinal`,i=JSON.stringify({cleanedCode:n,type:r});if(i in this.pluralRulesCache)return this.pluralRulesCache[i];let a;try{a=new Intl.PluralRules(n,{type:r})}catch{if(typeof Intl>`u`)return this.logger.error(`No Intl support, please use an Intl polyfill!`),mC;if(!e.match(/-|_/))return mC;let n=this.languageUtils.getLanguagePartFromCode(e);a=this.getRule(n,t)}return this.pluralRulesCache[i]=a,a}needsPlural(e,t={}){let n=this.getRule(e,t);return n||=this.getRule(`dev`,t),n?.resolvedOptions().pluralCategories.length>1}getPluralFormsOfKey(e,t,n={}){return this.getSuffixes(e,n).map(e=>`${t}${e}`)}getSuffixes(e,t={}){let n=this.getRule(e,t);return n||=this.getRule(`dev`,t),n?n.resolvedOptions().pluralCategories.sort((e,t)=>pC[e]-pC[t]).map(e=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:``}${e}`):[]}getSuffix(e,t,n={}){let r=this.getRule(e,n);return r?`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:``}${r.select(t)}`:(this.logger.warn(`no plural rule found for: ${e}`),this.getSuffix(`dev`,t,n))}},gC=(e,t,n,r=`.`,i=!0)=>{let a=GS(e,t,n);return!a&&i&&Q(n)&&(a=eC(e,n,r),a===void 0&&(a=eC(t,n,r))),a},_C=e=>e.replace(/\$/g,`$$$$`),vC=class{constructor(e={}){this.logger=rC.create(`interpolator`),this.options=e,this.format=e?.interpolation?.format||(e=>e),this.init(e)}init(e={}){e.interpolation||={escapeValue:!0};let{escape:t,escapeValue:n,useRawValueToEscape:r,prefix:i,prefixEscaped:a,suffix:o,suffixEscaped:s,formatSeparator:c,unescapeSuffix:l,unescapePrefix:u,nestingPrefix:d,nestingPrefixEscaped:f,nestingSuffix:p,nestingSuffixEscaped:m,nestingOptionsSeparator:h,maxReplaces:g,alwaysFormat:_}=e.interpolation;this.escape=t===void 0?YS:t,this.escapeValue=n===void 0||n,this.useRawValueToEscape=r!==void 0&&r,this.prefix=i?qS(i):a||`{{`,this.suffix=o?qS(o):s||`}}`,this.formatSeparator=c||`,`,this.unescapePrefix=l?``:u?qS(u):`-`,this.unescapeSuffix=this.unescapePrefix?``:l?qS(l):``,this.nestingPrefix=d?qS(d):f||qS(`$t(`),this.nestingSuffix=p?qS(p):m||qS(`)`),this.nestingOptionsSeparator=h||`,`,this.maxReplaces=g||1e3,this.alwaysFormat=_!==void 0&&_,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){let e=(e,t)=>e?.source===t?(e.lastIndex=0,e):new RegExp(t,`g`);this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}((?:[^()"']+|"[^"]*"|'[^']*'|\\((?:[^()]|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`)}interpolate(e,t,n,r){let i,a,o,s=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},c=e=>{if(!e.includes(this.formatSeparator)){let i=gC(t,s,e,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(i,void 0,n,{...r,...t,interpolationkey:e}):i}let i=e.split(this.formatSeparator),a=i.shift().trim(),o=i.join(this.formatSeparator).trim();return this.format(gC(t,s,a,this.options.keySeparator,this.options.ignoreJSONStructure),o,n,{...r,...t,interpolationkey:a})};this.resetRegExp(),!this.escapeValue&&typeof e==`string`&&/\$t\([^)]*\{[^}]*\{\{/.test(e)&&this.logger.warn(`nesting options string contains interpolated variables with escapeValue: false — if any of those values are attacker-controlled they can inject additional nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing it to t(), or keep escapeValue: true.`);let l=r?.missingInterpolationHandler||this.options.missingInterpolationHandler,u=r?.interpolation?.skipOnVariables===void 0?this.options.interpolation.skipOnVariables:r.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:e=>e},{regex:this.regexp,safeValue:e=>this.escapeValue?this.escape(e):e}].forEach(t=>{for(o=0;i=t.regex.exec(e);){let n=i[1].trim();if(a=c(n),a===void 0){if(typeof l==`function`){let t=l(e,i,r);a=Q(t)?t:``}else if(r&&Object.prototype.hasOwnProperty.call(r,n))a=``;else if(u){a=i[0];continue}else this.logger.warn(`missed to pass in variable ${n} for interpolating ${e}`),a=``}else!Q(a)&&!this.useRawValueToEscape&&(a=IS(a));let s=t.safeValue(a);if(e=e.replace(i[0],_C(s)),u?(t.regex.lastIndex+=s.length,t.regex.lastIndex-=i[0].length):t.regex.lastIndex=0,o++,o>=this.maxReplaces)break}}),e}nest(e,t,n={}){let r,i,a,o=(e,t)=>{let n=this.nestingOptionsSeparator;if(!e.includes(n))return e;let r=e.split(RegExp(`${qS(n)}[ ]*{`)),i=`{${r[1]}`;e=r[0],i=this.interpolate(i,a);let o=i.match(/'/g),s=i.match(/"/g);((o?.length??0)%2==0&&!s||(s?.length??0)%2!=0)&&(i=i.replace(/'/g,`"`));try{a=JSON.parse(i),t&&(a={...t,...a})}catch(t){return this.logger.warn(`failed parsing options string in nesting for key ${e}`,t),`${e}${n}${i}`}return a.defaultValue&&a.defaultValue.includes(this.prefix)&&delete a.defaultValue,e};for(;r=this.nestingRegexp.exec(e);){let s=[];a={...n},a=a.replace&&!Q(a.replace)?a.replace:a,a.applyPostProcessor=!1,delete a.defaultValue;let c=/{.*}/s.test(r[1])?r[1].lastIndexOf(`}`)+1:r[1].indexOf(this.formatSeparator);if(c!==-1&&(s=r[1].slice(c).split(this.formatSeparator).map(e=>e.trim()).filter(Boolean),r[1]=r[1].slice(0,c)),i=t(o.call(this,r[1].trim(),a),a),i&&r[0]===e&&!Q(i))return i;Q(i)||(i=IS(i)),i||=(this.logger.warn(`missed to resolve ${r[1]} for nesting ${e}`),``),s.length&&(i=s.reduce((e,t)=>this.format(e,t,n.lng,{...n,interpolationkey:r[1].trim()}),i.trim())),e=e.replace(r[0],_C(IS(i))),this.regexp.lastIndex=0}return e}},yC=e=>{let t=e.toLowerCase().trim(),n={};if(e.includes(`(`)){let r=e.split(`(`);t=r[0].toLowerCase().trim();let i=r[1].slice(0,-1);t===`currency`&&!i.includes(`:`)?n.currency||=i.trim():t===`relativetime`&&!i.includes(`:`)?n.range||=i.trim():i.split(`;`).forEach(e=>{if(e){let[t,...r]=e.split(`:`),i=r.join(`:`).trim().replace(/^'+|'+$/g,``),a=t.trim();n[a]||(n[a]=i),i===`false`&&(n[a]=!1),i===`true`&&(n[a]=!0),isNaN(i)||(n[a]=parseInt(i,10))}})}return{formatName:t,formatOptions:n}},bC=e=>{let t={};return(n,r,i)=>{let a=i;i&&i.interpolationkey&&i.formatParams&&i.formatParams[i.interpolationkey]&&i[i.interpolationkey]&&(a={...a,[i.interpolationkey]:void 0});let o=r+JSON.stringify(a),s=t[o];return s||(s=e(tC(r),i),t[o]=s),s(n)}},xC=e=>(t,n,r)=>e(tC(n),r)(t),SC=class{constructor(e={}){this.logger=rC.create(`formatter`),this.options=e,this.init(e)}init(e,t={interpolation:{}}){this.formatSeparator=t.interpolation.formatSeparator||`,`;let n=t.cacheInBuiltFormats?bC:xC;this.formats={number:n((e,t)=>{let n=new Intl.NumberFormat(e,{...t});return e=>n.format(e)}),currency:n((e,t)=>{let n=new Intl.NumberFormat(e,{...t,style:`currency`});return e=>n.format(e)}),datetime:n((e,t)=>{let n=new Intl.DateTimeFormat(e,{...t});return e=>n.format(e)}),relativetime:n((e,t)=>{let n=new Intl.RelativeTimeFormat(e,{...t});return e=>n.format(e,t.range||`day`)}),list:n((e,t)=>{let n=new Intl.ListFormat(e,{...t});return e=>n.format(e)})}}add(e,t){this.formats[e.toLowerCase().trim()]=t}addCached(e,t){this.formats[e.toLowerCase().trim()]=bC(t)}format(e,t,n,r={}){if(!t||e==null)return e;let i=t.split(this.formatSeparator),a=[];for(let e=0;e<i.length;e++){let t=i[e];for(;t.indexOf(`(`)>-1&&!t.includes(`)`)&&e+1<i.length;)t=`${t}${this.formatSeparator}${i[++e]}`;a.push(t)}return a.reduce((e,t)=>{let{formatName:i,formatOptions:a}=yC(t);if(this.formats[i]){let t=e;try{let o=r?.formatParams?.[r.interpolationkey]||{},s=o.locale||o.lng||r.locale||r.lng||n;t=this.formats[i](e,s,{...a,...r,...o})}catch(e){this.logger.warn(e)}return t}return this.logger.warn(`there was no format function for ${i}`),e},e)}},CC=(e,t)=>{e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)},wC=class extends iC{constructor(e,t,n,r={}){super(),this.backend=e,this.store=t,this.services=n,this.languageUtils=n.languageUtils,this.options=r,this.logger=rC.create(`backendConnector`),this.waitingReads=[],this.maxParallelReads=r.maxParallelReads||10,this.readingCalls=0,this.maxRetries=r.maxRetries>=0?r.maxRetries:5,this.retryTimeout=r.retryTimeout>=1?r.retryTimeout:350,this.state={},this.queue=[],this.backend?.init?.(n,r.backend,r)}queueLoad(e,t,n,r){let i={},a={},o={},s={};return e.forEach(e=>{let r=!0;t.forEach(t=>{let o=`${e}|${t}`;!n.reload&&this.store.hasResourceBundle(e,t)?this.state[o]=2:this.state[o]<0||(this.state[o]===1?a[o]===void 0&&(a[o]=!0):(this.state[o]=1,r=!1,a[o]===void 0&&(a[o]=!0),i[o]===void 0&&(i[o]=!0),s[t]===void 0&&(s[t]=!0)))}),r||(o[e]=!0)}),(Object.keys(i).length||Object.keys(a).length)&&this.queue.push({pending:a,pendingCount:Object.keys(a).length,loaded:{},errors:[],callback:r}),{toLoad:Object.keys(i),pending:Object.keys(a),toLoadLanguages:Object.keys(o),toLoadNamespaces:Object.keys(s)}}loaded(e,t,n){let r=e.split(`|`),i=r[0],a=r[1];t&&this.emit(`failedLoading`,i,a,t),!t&&n&&this.store.addResourceBundle(i,a,n,void 0,void 0,{skipCopy:!0}),this.state[e]=t?-1:2,t&&n&&(this.state[e]=0);let o={};this.queue.forEach(n=>{US(n.loaded,[i],a),CC(n,e),t&&n.errors.push(t),n.pendingCount===0&&!n.done&&(Object.keys(n.loaded).forEach(e=>{o[e]||(o[e]={});let t=n.loaded[e];t.length&&t.forEach(t=>{o[e][t]===void 0&&(o[e][t]=!0)})}),n.done=!0,n.errors.length?n.callback(n.errors):n.callback())}),this.emit(`loaded`,o),this.queue=this.queue.filter(e=>!e.done)}read(e,t,n,r=0,i=this.retryTimeout,a){if(!e.length)return a(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:t,fcName:n,tried:r,wait:i,callback:a});return}this.readingCalls++;let o=(o,s)=>{if(this.readingCalls--,this.waitingReads.length>0){let e=this.waitingReads.shift();this.read(e.lng,e.ns,e.fcName,e.tried,e.wait,e.callback)}if(o&&s&&r<this.maxRetries){setTimeout(()=>{this.read(e,t,n,r+1,i*2,a)},i);return}a(o,s)},s=this.backend[n].bind(this.backend);if(s.length===2){try{let n=s(e,t);n&&typeof n.then==`function`?n.then(e=>o(null,e)).catch(o):o(null,n)}catch(e){o(e)}return}return s(e,t,o)}prepareLoading(e,t,n={},r){if(!this.backend)return this.logger.warn(`No backend was added via i18next.use. Will not load resources.`),r&&r();Q(e)&&(e=this.languageUtils.toResolveHierarchy(e)),Q(t)&&(t=[t]);let i=this.queueLoad(e,t,n,r);if(!i.toLoad.length)return i.pending.length||r(),null;i.toLoad.forEach(e=>{this.loadOne(e)})}load(e,t,n){this.prepareLoading(e,t,{},n)}reload(e,t,n){this.prepareLoading(e,t,{reload:!0},n)}loadOne(e,t=``){let n=e.split(`|`),r=n[0],i=n[1];this.read(r,i,`read`,void 0,void 0,(n,a)=>{n&&this.logger.warn(`${t}loading namespace ${i} for language ${r} failed`,n),!n&&a&&this.logger.log(`${t}loaded namespace ${i} for language ${r}`,a),this.loaded(e,n,a)})}saveMissing(e,t,n,r,i,a={},o=()=>{}){if(this.services?.utils?.hasLoadedNamespace&&!this.services?.utils?.hasLoadedNamespace(t)){this.logger.warn(`did not save key "${n}" as the namespace "${t}" was not yet loaded`,`This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!`);return}if(n!=null&&n!==``){if(this.backend?.create){let s={...a,isUpdate:i},c=this.backend.create.bind(this.backend);if(c.length<6)try{let i;i=c.length===5?c(e,t,n,r,s):c(e,t,n,r),i&&typeof i.then==`function`?i.then(e=>o(null,e)).catch(o):o(null,i)}catch(e){o(e)}else c(e,t,n,r,o,s)}e&&e[0]&&this.store.addResource(e[0],t,n,r)}}},TC=()=>({debug:!1,initAsync:!0,ns:[`translation`],defaultNS:[`translation`],fallbackLng:[`dev`],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:`all`,preload:!1,keySeparator:`.`,nsSeparator:`:`,pluralSeparator:`_`,contextSeparator:`_`,enableSelector:!1,partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:`fallback`,saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:e=>{let t={};if(typeof e[1]==`object`&&(t=e[1]),Q(e[1])&&(t.defaultValue=e[1]),Q(e[2])&&(t.tDescription=e[2]),typeof e[2]==`object`||typeof e[3]==`object`){let n=e[3]||e[2];Object.keys(n).forEach(e=>{t[e]=n[e]})}return t},interpolation:{escapeValue:!0,prefix:`{{`,suffix:`}}`,formatSeparator:`,`,unescapePrefix:`-`,nestingPrefix:`$t(`,nestingSuffix:`)`,nestingOptionsSeparator:`,`,maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),EC=e=>(Q(e.ns)&&(e.ns=[e.ns]),Q(e.fallbackLng)&&(e.fallbackLng=[e.fallbackLng]),Q(e.fallbackNS)&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&!e.supportedLngs.includes(`cimode`)&&(e.supportedLngs=e.supportedLngs.concat([`cimode`])),e),DC=()=>{},OC=e=>{Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(t=>{typeof e[t]==`function`&&(e[t]=e[t].bind(e))})},kC=class e extends iC{constructor(e={},t){if(super(),this.options=EC(e),this.services={},this.logger=rC,this.modules={external:[]},OC(this),t&&!this.isInitialized&&!e.isClone){if(!this.options.initAsync)return this.init(e,t),this;setTimeout(()=>{this.init(e,t)},0)}}init(e={},t){this.isInitializing=!0,typeof e==`function`&&(t=e,e={}),e.defaultNS==null&&e.ns&&(Q(e.ns)?e.defaultNS=e.ns:e.ns.includes(`translation`)||(e.defaultNS=e.ns[0]));let n=TC();this.options={...n,...this.options,...EC(e)},this.options.interpolation={...n.interpolation,...this.options.interpolation},e.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=e.keySeparator),e.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=e.nsSeparator),typeof this.options.overloadTranslationOptionHandler!=`function`&&(this.options.overloadTranslationOptionHandler=n.overloadTranslationOptionHandler);let r=e=>e?typeof e==`function`?new e:e:null;if(!this.options.isClone){this.modules.logger?rC.init(r(this.modules.logger),this.options):rC.init(null,this.options);let e;e=this.modules.formatter?this.modules.formatter:SC;let t=new fC(this.options);this.store=new aC(this.options.resources,this.options);let n=this.services;n.logger=rC,n.resourceStore=this.store,n.languageUtils=t,n.pluralResolver=new hC(t,{prepend:this.options.pluralSeparator}),e&&(n.formatter=r(e),n.formatter.init&&n.formatter.init(n,this.options),this.options.interpolation.format=n.formatter.format.bind(n.formatter)),n.interpolator=new vC(this.options),n.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},n.backendConnector=new wC(r(this.modules.backend),n.resourceStore,n,this.options),n.backendConnector.on(`*`,(e,...t)=>{this.emit(e,...t)}),this.modules.languageDetector&&(n.languageDetector=r(this.modules.languageDetector),n.languageDetector.init&&n.languageDetector.init(n,this.options.detection,this.options)),this.modules.i18nFormat&&(n.i18nFormat=r(this.modules.i18nFormat),n.i18nFormat.init&&n.i18nFormat.init(this)),this.translator=new dC(this.services,this.options),this.translator.on(`*`,(e,...t)=>{this.emit(e,...t)}),this.modules.external.forEach(e=>{e.init&&e.init(this)})}if(this.format=this.options.interpolation.format,t||=DC,this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){let e=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);e.length>0&&e[0]!==`dev`&&(this.options.lng=e[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn(`init: no languageDetector is used and no lng is defined`),[`getResource`,`hasResourceBundle`,`getResourceBundle`,`getDataByLanguage`].forEach(e=>{this[e]=(...t)=>this.store[e](...t)}),[`addResource`,`addResources`,`addResourceBundle`,`removeResourceBundle`].forEach(e=>{this[e]=(...t)=>(this.store[e](...t),this)});let i=FS(),a=()=>{let e=(e,n)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn(`init: i18next is already initialized. You should call init just once!`),this.isInitialized=!0,this.options.isClone||this.logger.log(`initialized`,this.options),this.emit(`initialized`,this.options),i.resolve(n),t(e,n)};if((this.languages||this.isLanguageChangingTo)&&!this.isInitialized)return e(null,this.t.bind(this));this.changeLanguage(this.options.lng,e)};return this.options.resources||!this.options.initAsync?a():setTimeout(a,0),i}loadResources(e,t=DC){let n=t,r=Q(e)?e:this.language;if(typeof e==`function`&&(n=e),!this.options.resources||this.options.partialBundledLanguages){if(r?.toLowerCase()===`cimode`&&(!this.options.preload||this.options.preload.length===0))return n();let e=[],t=t=>{t&&t!==`cimode`&&this.services.languageUtils.toResolveHierarchy(t).forEach(t=>{t!==`cimode`&&(e.includes(t)||e.push(t))})};r?t(r):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(e=>t(e)),this.options.preload?.forEach?.(e=>t(e)),this.services.backendConnector.load(e,this.options.ns,e=>{!e&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),n(e)})}else n(null)}reloadResources(e,t,n){let r=FS();return typeof e==`function`&&(n=e,e=void 0),typeof t==`function`&&(n=t,t=void 0),e||=this.languages,t||=this.options.ns,n||=DC,this.services.backendConnector.reload(e,t,e=>{r.resolve(),n(e)}),r}use(e){if(!e)throw Error(`You are passing an undefined module! Please check the object you are passing to i18next.use()`);if(!e.type)throw Error(`You are passing a wrong module! Please check the object you are passing to i18next.use()`);return e.type===`backend`&&(this.modules.backend=e),(e.type===`logger`||e.log&&e.warn&&e.error)&&(this.modules.logger=e),e.type===`languageDetector`&&(this.modules.languageDetector=e),e.type===`i18nFormat`&&(this.modules.i18nFormat=e),e.type===`postProcessor`&&oC.addPostProcessor(e),e.type===`formatter`&&(this.modules.formatter=e),e.type===`3rdParty`&&this.modules.external.push(e),this}setResolvedLanguage(e){if(e&&this.languages&&![`cimode`,`dev`].includes(e)){for(let e=0;e<this.languages.length;e++){let t=this.languages[e];if(![`cimode`,`dev`].includes(t)&&this.store.hasLanguageSomeTranslations(t)){this.resolvedLanguage=t;break}}!this.resolvedLanguage&&!this.languages.includes(e)&&this.store.hasLanguageSomeTranslations(e)&&(this.resolvedLanguage=e,this.languages.unshift(e))}}changeLanguage(e,t){this.isLanguageChangingTo=e;let n=FS();this.emit(`languageChanging`,e);let r=e=>{this.language=e,this.languages=this.services.languageUtils.toResolveHierarchy(e),this.resolvedLanguage=void 0,this.setResolvedLanguage(e)},i=(i,a)=>{a?this.isLanguageChangingTo===e&&(r(a),this.translator.changeLanguage(a),this.isLanguageChangingTo=void 0,this.emit(`languageChanged`,a),this.logger.log(`languageChanged`,a)):this.isLanguageChangingTo=void 0,n.resolve((...e)=>this.t(...e)),t&&t(i,(...e)=>this.t(...e))},a=t=>{!e&&!t&&this.services.languageDetector&&(t=[]);let n=Q(t)?t:t&&t[0],a=this.store.hasLanguageSomeTranslations(n)?n:this.services.languageUtils.getBestMatchFromCodes(Q(t)?[t]:t);a&&(this.language||r(a),this.translator.language||this.translator.changeLanguage(a),this.services.languageDetector?.cacheUserLanguage?.(a)),this.loadResources(a,e=>{i(e,a)})};return!e&&this.services.languageDetector&&!this.services.languageDetector.async?a(this.services.languageDetector.detect()):!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(a):this.services.languageDetector.detect(a):a(e),n}getFixedT(e,t,n,r){let i=r?.scopeNs,a=(e,t,...r)=>{let o;o=typeof t==`object`?{...t}:this.options.overloadTranslationOptionHandler([e,t].concat(r)),o.lng=o.lng||a.lng,o.lngs=o.lngs||a.lngs;let s=o.ns!==void 0&&o.ns!==null;o.ns=o.ns||a.ns,o.keyPrefix!==``&&(o.keyPrefix=o.keyPrefix||n||a.keyPrefix);let c={...this.options,...o};Array.isArray(i)&&!s&&(c.ns=i),typeof o.keyPrefix==`function`&&(o.keyPrefix=lC(o.keyPrefix,c));let l=this.options.keySeparator||`.`,u;return o.keyPrefix&&Array.isArray(e)?u=e.map(e=>(typeof e==`function`&&(e=lC(e,c)),`${o.keyPrefix}${l}${e}`)):(typeof e==`function`&&(e=lC(e,c)),u=o.keyPrefix?`${o.keyPrefix}${l}${e}`:e),this.t(u,o)};return Q(e)?a.lng=e:a.lngs=e,a.ns=t,a.keyPrefix=n,a}t(...e){return this.translator?.translate(...e)}exists(...e){return this.translator?.exists(...e)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e,t={}){if(!this.isInitialized)return this.logger.warn(`hasLoadedNamespace: i18next was not initialized`,this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn(`hasLoadedNamespace: i18n.languages were undefined or empty`,this.languages),!1;let n=t.lng||this.resolvedLanguage||this.languages[0],r=this.options?this.options.fallbackLng:!1,i=this.languages[this.languages.length-1];if(n.toLowerCase()===`cimode`)return!0;let a=(e,t)=>{let n=this.services.backendConnector.state[`${e}|${t}`];return n===-1||n===0||n===2};if(t.precheck){let e=t.precheck(this,a);if(e!==void 0)return e}return!!(this.hasResourceBundle(n,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||a(n,e)&&(!r||a(i,e)))}loadNamespaces(e,t){let n=FS();return this.options.ns?(Q(e)&&(e=[e]),e.forEach(e=>{this.options.ns.includes(e)||this.options.ns.push(e)}),this.loadResources(e=>{n.resolve(),t&&t(e)}),n):(t&&t(),Promise.resolve())}loadLanguages(e,t){let n=FS();Q(e)&&(e=[e]);let r=this.options.preload||[],i=e.filter(e=>!r.includes(e)&&this.services.languageUtils.isSupportedCode(e));return i.length?(this.options.preload=r.concat(i),this.loadResources(e=>{n.resolve(),t&&t(e)}),n):(t&&t(),Promise.resolve())}dir(e){if(e||=this.resolvedLanguage||(this.languages?.length>0?this.languages[0]:this.language),!e)return`rtl`;try{let t=new Intl.Locale(e);if(t&&t.getTextInfo){let e=t.getTextInfo();if(e&&e.direction)return e.direction}}catch{}let t=`ar.shu.sqr.ssh.xaa.yhd.yud.aao.abh.abv.acm.acq.acw.acx.acy.adf.ads.aeb.aec.afb.ajp.apc.apd.arb.arq.ars.ary.arz.auz.avl.ayh.ayl.ayn.ayp.bbz.pga.he.iw.ps.pbt.pbu.pst.prp.prd.ug.ur.ydd.yds.yih.ji.yi.hbo.men.xmn.fa.jpr.peo.pes.prs.dv.sam.ckb`.split(`.`),n=this.services?.languageUtils||new fC(TC());return e.toLowerCase().indexOf(`-latn`)>1?`ltr`:t.includes(n.getLanguagePartFromCode(e))||e.toLowerCase().indexOf(`-arab`)>1?`rtl`:`ltr`}static createInstance(t={},n){let r=new e(t,n);return r.createInstance=e.createInstance,r}cloneInstance(t={},n=DC){let r=t.forkResourceStore;r&&delete t.forkResourceStore;let i={...this.options,...t,isClone:!0},a=new e(i);if((t.debug!==void 0||t.prefix!==void 0)&&(a.logger=a.logger.clone(t)),[`store`,`services`,`language`].forEach(e=>{a[e]=this[e]}),a.services={...this.services},a.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},r&&(a.store=new aC(Object.keys(this.store.data).reduce((e,t)=>(e[t]={...this.store.data[t]},e[t]=Object.keys(e[t]).reduce((n,r)=>(n[r]={...e[t][r]},n),e[t]),e),{}),i),a.services.resourceStore=a.store),t.interpolation){let e={...TC().interpolation,...this.options.interpolation,...t.interpolation},n={...i,interpolation:e};a.services.interpolator=new vC(n)}return a.translator=new dC(a.services,i),a.translator.on(`*`,(e,...t)=>{a.emit(e,...t)}),a.init(i,n),a.translator.options=i,a.translator.backendConnector.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},a}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}.createInstance();kC.createInstance,kC.dir,kC.init,kC.loadResources,kC.reloadResources,kC.use,kC.changeLanguage,kC.getFixedT,kC.t,kC.exists,kC.setDefaultNamespace,kC.hasLoadedNamespace,kC.loadNamespaces,kC.loadLanguages;var AC=(e,t,n,r)=>{let i=[n,{code:t,...r||{}}];if(e?.services?.logger?.forward)return e.services.logger.forward(i,`warn`,`react-i18next::`,!0);LC(i[0])&&(i[0]=`react-i18next:: ${i[0]}`),e?.services?.logger?.warn?e.services.logger.warn(...i):console?.warn&&console.warn(...i)},jC={},MC=(e,t,n,r)=>{LC(n)&&jC[n]||(LC(n)&&(jC[n]=new Date),AC(e,t,n,r))},NC=(e,t)=>()=>{if(e.isInitialized)t();else{let n=()=>{setTimeout(()=>{e.off(`initialized`,n)},0),t()};e.on(`initialized`,n)}},PC=(e,t,n)=>{e.loadNamespaces(t,NC(e,n))},FC=(e,t,n,r)=>{if(LC(n)&&(n=[n]),e.options.preload&&e.options.preload.indexOf(t)>-1)return PC(e,n,r);n.forEach(t=>{e.options.ns.indexOf(t)<0&&e.options.ns.push(t)}),e.loadLanguages(t,NC(e,r))},IC=(e,t,n={})=>!t.languages||!t.languages.length?(MC(t,`NO_LANGUAGES`,`i18n.languages were undefined or empty`,{languages:t.languages}),!0):t.hasLoadedNamespace(e,{lng:n.lng,precheck:(t,r)=>{if(n.bindI18n&&n.bindI18n.indexOf(`languageChanging`)>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!r(t.isLanguageChangingTo,e))return!1}}),LC=e=>typeof e==`string`,RC=e=>typeof e==`object`&&!!e,zC=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,BC={"&":`&`,"&":`&`,"<":`<`,"<":`<`,">":`>`,">":`>`,"'":`'`,"'":`'`,""":`"`,""":`"`," ":` `," ":` `,"©":`©`,"©":`©`,"®":`®`,"®":`®`,"…":`…`,"…":`…`,"/":`/`,"/":`/`},VC=e=>BC[e],HC={bindI18n:`languageChanged`,bindI18nStore:``,transEmptyNodeValue:``,transSupportBasicHtmlNodes:!0,transWrapTextNodes:``,transKeepBasicHtmlNodesFor:[`br`,`strong`,`i`,`p`],useSuspense:!0,unescape:e=>e.replace(zC,VC),transDefaultProps:void 0},UC=(e={})=>{HC={...HC,...e}},WC=()=>HC,GC,KC=e=>{GC=e},qC=()=>GC,JC={type:`3rdParty`,init(e){UC(e.options.react),KC(e)}},YC=(0,y.createContext)(),XC=class{constructor(){this.usedNamespaces={}}addUsedNamespaces(e){e.forEach(e=>{this.usedNamespaces[e]||(this.usedNamespaces[e]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}},ZC=s((e=>{var t=p();function n(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var r=typeof Object.is==`function`?Object.is:n,i=t.useState,a=t.useEffect,o=t.useLayoutEffect,s=t.useDebugValue;function c(e,t){var n=t(),r=i({inst:{value:n,getSnapshot:t}}),c=r[0].inst,u=r[1];return o(function(){c.value=n,c.getSnapshot=t,l(c)&&u({inst:c})},[e,n,t]),a(function(){return l(c)&&u({inst:c}),e(function(){l(c)&&u({inst:c})})},[e]),s(n),n}function l(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch{return!0}}function u(e,t){return t()}var d=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?u:c;e.useSyncExternalStore=t.useSyncExternalStore===void 0?d:t.useSyncExternalStore})),QC=s(((e,t)=>{t.exports=ZC()}))(),$C={t:(e,t)=>{if(LC(t))return t;if(RC(t)&&LC(t.defaultValue))return t.defaultValue;if(typeof e==`function`)return``;if(Array.isArray(e)){let t=e[e.length-1];return typeof t==`function`?``:t}return e},ready:!1},ew=()=>()=>{},tw=(e,t={})=>{let{i18n:n}=t,{i18n:r,defaultNS:i}=(0,y.useContext)(YC)||{},a=n||r||qC();a&&!a.reportNamespaces&&(a.reportNamespaces=new XC),a||MC(a,`NO_I18NEXT_INSTANCE`,`useTranslation: You will need to pass in an i18next instance by using initReactI18next or by passing it via props or context. In monorepo setups, make sure there is only one instance of react-i18next.`);let o=(0,y.useMemo)(()=>({...WC(),...a?.options?.react,...t}),[a,t]),{useSuspense:s,keyPrefix:c}=o,l=e||i||a?.options?.defaultNS,u=LC(l)?[l]:l||[`translation`],d=(0,y.useMemo)(()=>u,u);a?.reportNamespaces?.addUsedNamespaces?.(d);let f=(0,y.useRef)(0),p=(0,y.useCallback)(e=>{if(!a)return ew;let{bindI18n:t,bindI18nStore:n}=o,r=()=>{f.current+=1,e()};return t&&a.on(t,r),n&&a.store.on(n,r),()=>{t&&t.split(` `).forEach(e=>a.off(e,r)),n&&n.split(` `).forEach(e=>a.store.off(e,r))}},[a,o]),m=(0,y.useRef)(),h=(0,y.useCallback)(()=>{if(!a)return $C;let e=!!(a.isInitialized||a.initializedStoreOnce)&&d.every(e=>IC(e,a,o)),n=t.lng||a.language,r=f.current,i=m.current;if(i&&i.ready===e&&i.lng===n&&i.keyPrefix===c&&i.revision===r)return i;let s={t:a.getFixedT(n,o.nsMode===`fallback`?d:d[0],c,{scopeNs:d}),ready:e,lng:n,keyPrefix:c,revision:r};return m.current=s,s},[a,d,c,o,t.lng]),[g,_]=(0,y.useState)(0),{t:v,ready:b}=(0,QC.useSyncExternalStore)(p,h,h);(0,y.useEffect)(()=>{if(a&&!b&&!s){let e=()=>_(e=>e+1);t.lng?FC(a,t.lng,d,e):PC(a,d,e)}},[a,t.lng,d,b,s,g]);let x=a||{},S=(0,y.useRef)(null),C=(0,y.useRef)(),w=e=>`${e.language}|${e.resolvedLanguage}|${e.languages?.join(`,`)}`,T=e=>{let t=Object.getOwnPropertyDescriptors(e);t.__original&&delete t.__original;let n=Object.create(Object.getPrototypeOf(e),t);if(!Object.prototype.hasOwnProperty.call(n,`__original`))try{Object.defineProperty(n,"__original",{value:e,writable:!1,enumerable:!1,configurable:!1})}catch{}return n},E=(0,y.useMemo)(()=>{let e=x,t=e&&w(e),n=e;e&&(S.current&&S.current.__original===e&&C.current===t?n=S.current:(n=T(e),S.current=n,C.current=t));let r=!b&&!s?(...e)=>(MC(a,`USE_T_BEFORE_READY`,`useTranslation: t was called before ready. When using useSuspense: false, make sure to check the ready flag before using t.`),v(...e)):v,i=[r,n,b];return i.t=r,i.i18n=n,i.ready=b,i},[v,x,b,x.resolvedLanguage,x.language,x.languages]);if(a&&s&&!b){let e=!1;try{e=!1}catch{}throw e&&MC(a,`SUSPENDED_WHILE_LOADING`,`useTranslation: suspended while translations are loading (useSuspense is true by default). Add a <Suspense> boundary above this component, or set react.useSuspense: false in the i18next init options. https://react.i18next.com/latest/usetranslation-hook`),new Promise(e=>{let n=()=>e();t.lng?FC(a,t.lng,d,n):PC(a,d,n)})}return E},nw=`/api`,rw=`time-tracker.session`,iw=class extends Error{status;code;detail;constructor(e,t,n){super(`${e} ${t}${n?`: ${n}`:``}`),this.name=`ApiError`,this.status=e,this.code=t,this.detail=n}};function aw(e={}){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))r!=null&&t.set(n,String(r));let n=t.toString();return n?`?${n}`:``}function ow(e=window.localStorage){function t(e){try{let t=e.getItem(rw);if(!t)return null;let n=JSON.parse(t);return n?.user?n:null}catch{return null}}let n=t(e);function r(t){if(n=t,!t){e.removeItem(rw);return}e.setItem(rw,JSON.stringify(t))}async function i(e,t,i={}){let a={...i.headers??{}};i.body!==void 0&&(a[`content-type`]=`application/json`),!i.anonymous&&n&&(n.token&&(a[`x-session-token`]=n.token),a[`x-csrf-token`]=n.csrfToken);let o;try{o=await fetch(`${nw}${t}${aw(i.query)}`,{method:e,headers:a,body:i.body===void 0?void 0:JSON.stringify(i.body),credentials:`same-origin`})}catch(e){throw new iw(0,`network_error`,e instanceof Error?e.message:`network error`)}if(o.status===204)return;let s=await o.text(),c=s?JSON.parse(s):{};if(!o.ok){let e=typeof c.code==`string`?c.code:`unknown_error`,t=typeof c.detail==`string`?c.detail:void 0;throw o.status===401&&r(null),new iw(o.status,e,t)}return c}function a(e){let t=/filename\*?=(?:UTF-8'')?"?([^";]+)"?/i.exec(e??``);return t?decodeURIComponent(t[1]):null}async function o(e,t){let r={};n&&(n.token&&(r[`x-session-token`]=n.token),r[`x-csrf-token`]=n.csrfToken);let i;try{i=await fetch(`${nw}${e}${aw(t)}`,{headers:r,credentials:`same-origin`})}catch(e){throw new iw(0,`network_error`,e instanceof Error?e.message:`network error`)}if(!i.ok){let e=await i.json().catch(()=>({}));throw new iw(i.status,e.code??`unknown_error`,e.detail)}return{blob:await i.blob(),fileName:a(i.headers.get(`content-disposition`))??e.split(`/`).pop()??`download`}}async function s(e,t,i){let a={"content-type":`application/octet-stream`};n&&(n.token&&(a[`x-session-token`]=n.token),a[`x-csrf-token`]=n.csrfToken);let o;try{o=await fetch(`${nw}${e}${aw(i)}`,{method:`POST`,headers:a,body:t,credentials:`same-origin`})}catch(e){throw new iw(0,`network_error`,e instanceof Error?e.message:`network error`)}let s=await o.text(),c=s?JSON.parse(s):{};if(!o.ok){let e=typeof c.code==`string`?c.code:`unknown_error`,t=typeof c.detail==`string`?c.detail:void 0;throw o.status===401&&r(null),new iw(o.status,e,t)}return c}return{session:()=>n,streamUrl(){if(!n)return null;let e=`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}${nw}/stream`;return n.token?`${e}?token=${encodeURIComponent(n.token)}`:e},forget:()=>r(null),terminalStatus:()=>i(`GET`,`/terminal/status`,{anonymous:!0}),terminalSession:e=>i(`POST`,`/terminal/session`,{body:{deviceToken:e},anonymous:!0}),terminalUsers:e=>i(`GET`,`/terminal/users`,{query:{terminalSession:e},anonymous:!0}),terminalPunch:e=>i(`POST`,`/terminal/punch`,{body:e,anonymous:!0}),terminalHeartbeat:e=>i(`POST`,`/terminal/heartbeat`,{body:{terminalSession:e},anonymous:!0}),async login(e,t){let n=await i(`POST`,`/auth/login`,{body:{login:e,password:t},anonymous:!0}),a={csrfToken:n.csrfToken,expiresAt:n.expiresAt,user:n.user};return r(a),a},async logout(){if(n)try{await i(`POST`,`/auth/logout`)}catch{}r(null)},async me(){let e=await i(`GET`,`/auth/me`);return e.user&&r({csrfToken:e.csrfToken??n?.csrfToken??``,expiresAt:e.expiresAt??n?.expiresAt??0,user:e.user,...n?.token?{token:n.token}:{}}),e},async changePassword(e){try{await i(`POST`,`/auth/password`,{body:{password:e}})}finally{r(null)}},punch:e=>i(`POST`,e?.quick?`/punch/quick`:`/punch`,{body:{...e?.tsUtc?{tsUtc:e.tsUtc}:{},...e?.note?{note:e.note}:{},...e?.idempotencyKey?{idempotencyKey:e.idempotencyKey}:{}}}),status:()=>i(`GET`,`/punch/status`),days:(e,t,n)=>i(`GET`,`/aggregates/day`,{query:{from:e,to:t,userId:n}}),month:(e,t,n)=>i(`GET`,`/aggregates/month`,{query:{year:e,month:t,userId:n}}),months:(e,t)=>i(`GET`,`/aggregates/month`,{query:{year:e,userId:t}}),year:(e,t)=>i(`GET`,`/aggregates/year`,{query:{year:e,userId:t}}),payouts:e=>i(`GET`,`/payouts`,{query:{year:e,month:``}}),async entries(e,t,n){return(await i(`GET`,`/entries`,{query:{from:e,to:t,userId:n}})).entries??[]},async createEntry(e){return i(`POST`,`/entries`,{query:{userId:e.userId},body:{tsUtc:e.tsUtc,direction:e.direction,note:e.note,reason:e.reason}})},async updateEntry(e,t){return i(`PATCH`,`/entries/${e}`,{body:t})},async deleteEntry(e,t){await i(`DELETE`,`/entries/${e}`,{body:{reason:t}})},async entryAudit(e){return(await i(`GET`,`/entries/${e}/audit`)).audit??[]},async absences(e){return(await i(`GET`,`/absences`,{query:{year:e}})).absences??[]},async absenceTypes(){return(await i(`GET`,`/absence-types`)).types??[]},async createAbsence(e){return(await i(`POST`,`/absences`,{body:e})).absence},sync:e=>i(`POST`,`/entries/sync`,{body:{punches:e}}),async conflicts(){return(await i(`GET`,`/entries/conflicts`)).conflicts??[]},resolve:(e,t,n)=>i(`POST`,`/entries/${e}/resolve`,{body:{action:t,...n?{reason:n}:{}}}),downloadReport:(e,t,n,r)=>o(`/reports/${e}`,{year:t,month:n,userId:r}),async users(e=!1){return(await i(`GET`,`/users`,{query:{includeInactive:e?`true`:`false`}})).users??[]},async roles(){return(await i(`GET`,`/roles`)).roles??[]},async createUser(e){return(await i(`POST`,`/users`,{body:e})).user},async updateUser(e,t){return(await i(`PATCH`,`/users/${e}`,{body:t})).user},async pauseRules(){return(await i(`GET`,`/pause-rules`)).pauseRules??[]},async savePauseRules(e){return(await i(`PUT`,`/pause-rules`,{body:{pauseRules:e}})).pauseRules??[]},async userPauseRules(e){return(await i(`GET`,`/users/${e}/pause-rules`)).pauseRules??[]},async saveUserPauseRules(e,t){return(await i(`PUT`,`/users/${e}/pause-rules`,{body:{pauseRules:t}})).pauseRules??[]},async workProfile(e){return(await i(`GET`,`/users/${e}/profile`)).profile},async saveWorkProfile(e,t){return(await i(`PUT`,`/users/${e}/profile`,{body:t})).profile},async setPin(e,t){await i(`POST`,`/users/${e}/pin`,{body:{pin:t}})},async terminals(){return(await i(`GET`,`/terminals`)).terminals??[]},async createTerminal(e){return i(`POST`,`/terminals`,{body:e})},async setTerminalUsers(e,t){return(await i(`PUT`,`/terminals/${e}/users`,{body:{userIds:t}})).terminal},async revokeTerminal(e){await i(`DELETE`,`/terminals/${e}`)},async settings(){return(await i(`GET`,`/settings`)).settings??{}},async branding(){return i(`GET`,`/branding`,{anonymous:!0})},async updateSettings(e){return(await i(`PUT`,`/settings`,{body:e})).settings??{}},async holidays(e,t){return(await i(`GET`,`/holidays`,{query:{year:e,...t?{region:t}:{}}})).holidays??[]},async createHoliday(e){return(await i(`POST`,`/holidays`,{body:e})).holiday},async deleteHoliday(e){await i(`DELETE`,`/holidays/${e}`)},async rfidTags(){return(await i(`GET`,`/rfid/tags`)).tags??[]},async triggerRules(){return(await i(`GET`,`/trigger-rules`)).triggerRules??[]},async saveTriggerRules(e){return(await i(`PUT`,`/trigger-rules`,{body:{triggerRules:e}})).triggerRules??[]},async automationRules(){return(await i(`GET`,`/automation-rules`)).automationRules??[]},async saveAutomationRules(e){return(await i(`PUT`,`/automation-rules`,{body:{automationRules:e}})).automationRules??[]},async automationRuns(){return(await i(`GET`,`/automation-rules/runs`)).runs??[]},async createTag(e){return i(`POST`,`/rfid/tags`,{body:e})},async updateTag(e,t){return i(`PATCH`,`/rfid/tags/${e}`,{body:t})},async reissueTagLink(e,t={}){return i(`POST`,`/rfid/tags/${e}/link`,{body:t})},async deleteTagPermanently(e){await i(`DELETE`,`/rfid/tags/${e}/permanent`)},async deleteTag(e){await i(`DELETE`,`/rfid/tags/${e}`)},async statistics(e,t,n){return i(`GET`,`/reports/statistics`,{query:{from:e,to:t,...n?{userId:n}:{}}})},async scanTag(e){return i(`POST`,`/rfid/scan`,{body:{token:e},anonymous:!0})},backups:()=>i(`GET`,`/backup`),downloadBackup:e=>o(`/backup/${encodeURIComponent(e)}`,{}),restoreBackup:(e,t)=>i(`POST`,`/backup/restore`,{body:{name:e,...t?{reason:t}:{}}}),createBackup:()=>i(`POST`,`/backup`),deleteBackup:e=>i(`DELETE`,`/backup/${encodeURIComponent(e)}`),uploadBackup:(e,t)=>s(`/backup/restore`,e,{name:e.name,reason:t})}}var $=ow();function sw(e){let t=e<0?`-`:``,n=Math.abs(Math.round(e));return`${t}${Math.floor(n/60)}:${String(n%60).padStart(2,`0`)}`}function cw(e,t,n){return e===null?``:new Intl.DateTimeFormat(n,{timeZone:t,hour:`2-digit`,minute:`2-digit`}).format(new Date(e*1e3))}function lw(e,t){return new Intl.DateTimeFormat(t,{dateStyle:`medium`,timeZone:`UTC`}).format(new Date(`${e}T12:00:00Z`))}function uw(e,t){return new Intl.DateTimeFormat(t,{weekday:`short`,day:`2-digit`,month:`2-digit`,timeZone:`UTC`}).format(new Date(`${e}T12:00:00Z`))}var dw={color:null,logoUrl:null,backgroundUrl:null},fw=[`#ffffff`,`#f5f7fa`,`#eef2f7`,`#e3f1f5`,`#e8f1e9`,`#eef1e4`,`#eae6f7`,`#f3ecf7`,`#f7f0f5`,`#fdf3e3`,`#f6ece3`,`#fdecea`,`#d9e0ea`,`#c8d6e6`,`#b7cbe2`,`#c6d8c9`,`#b9d3bd`,`#d6c8e6`,`#e2d3be`,`#dcc4c2`];function pw(e,t){let n=e.trim().replace(/^#/,``),r=n.length===3?[...n].map(e=>e+e).join(``):n;if(!/^[0-9a-f]{6}$/i.test(r))return e;let i=Number.parseInt(r,16);return`rgba(${i>>16&255}, ${i>>8&255}, ${i&255}, ${t})`}var mw=(0,y.createContext)(dw);function hw({children:e}){let t=Yl({queryKey:[`branding`],queryFn:()=>$.branding(),staleTime:6e5});return(0,N.jsx)(mw.Provider,{value:t.data??dw,children:e})}function gw(){return(0,y.useContext)(mw)}function _w(e){if(e.backgroundUrl){let t=pw(e.color??`#ffffff`,.75);return{backgroundImage:`linear-gradient(${t}, ${t}), url("${e.backgroundUrl}")`,backgroundSize:`cover`,backgroundPosition:`center`,backgroundColor:e.color??void 0}}return e.color?{backgroundColor:e.color}:{}}var vw=rp([(0,N.jsx)(`path`,{d:`M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2M12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8`},`0`),(0,N.jsx)(`path`,{d:`M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z`},`1`)],`AccessTime`),yw=rp((0,N.jsx)(`path`,{d:`M4 9h4v11H4zm12 4h4v7h-4zm-6-9h4v16h-4z`}),`BarChart`),bw=rp([(0,N.jsx)(`path`,{d:`M21 8c-1.45 0-2.26 1.44-1.93 2.51l-3.55 3.56c-.3-.09-.74-.09-1.04 0l-2.55-2.55C12.27 10.45 11.46 9 10 9c-1.45 0-2.27 1.44-1.93 2.52l-4.56 4.55C2.44 15.74 1 16.55 1 18c0 1.1.9 2 2 2 1.45 0 2.26-1.44 1.93-2.51l4.55-4.56c.3.09.74.09 1.04 0l2.55 2.55C12.73 16.55 13.54 18 15 18c1.45 0 2.27-1.44 1.93-2.52l3.56-3.55c1.07.33 2.51-.48 2.51-1.93 0-1.1-.9-2-2-2`},`0`),(0,N.jsx)(`path`,{d:`m15 9 .94-2.07L18 6l-2.06-.93L15 3l-.92 2.07L12 6l2.08.93zM3.5 11 4 9l2-.5L4 8l-.5-2L3 8l-2 .5L3 9z`},`1`)],`Insights`),xw=rp((0,N.jsx)(`path`,{d:`m13.127 14.56 1.43-1.43 6.44 6.443L19.57 21zm4.293-5.73 2.86-2.86c-3.95-3.95-10.35-3.96-14.3-.02 3.93-1.3 8.31-.25 11.44 2.88M5.95 5.98c-3.94 3.95-3.93 10.35.02 14.3l2.86-2.86C5.7 14.29 4.65 9.91 5.95 5.98m.02-.02-.01.01c-.38 3.01 1.17 6.88 4.3 10.02l5.73-5.73c-3.13-3.13-7.01-4.68-10.02-4.3`}),`BeachAccess`),Sw=rp((0,N.jsx)(`path`,{d:`M19 4h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 16H5V10h14zM9 14H7v-2h2zm4 0h-2v-2h2zm4 0h-2v-2h2zm-8 4H7v-2h2zm4 0h-2v-2h2zm4 0h-2v-2h2z`}),`CalendarMonth`),Cw=rp((0,N.jsx)(`path`,{d:`M19.35 10.04C18.67 6.59 15.64 4 12 4c-1.48 0-2.85.43-4.01 1.17l1.46 1.46C10.21 6.23 11.08 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3 0 1.13-.64 2.11-1.56 2.62l1.45 1.45C23.16 18.16 24 16.68 24 15c0-2.64-2.05-4.78-4.65-4.96M3 5.27l2.75 2.74C2.56 8.15 0 10.77 0 14c0 3.31 2.69 6 6 6h11.73l2 2L21 20.73 4.27 4zM7.73 10l8 8H6c-2.21 0-4-1.79-4-4s1.79-4 4-4z`}),`CloudOff`),ww=rp((0,N.jsx)(`path`,{d:`M3 18h18v-2H3zm0-5h18v-2H3zm0-7v2h18V6z`}),`Menu`),Tw=rp((0,N.jsx)(`path`,{d:`M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8m0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4z`}),`Sync`),Ew={"app.title":`Time tracking`,"app.offline":`Offline – punches are queued`,"app.online":`Connected`,"nav.dashboard":`Punch`,"nav.month":`Month`,"nav.reports":`Reports`,"nav.absences":`Absences`,"nav.sync":`Sync`,"nav.profile":`Profile`,"nav.logout":`Sign out`,"nav.menu":`Menu`,"login.title":`Sign in`,"login.login":`User name`,"login.password":`Password`,"login.submit":`Sign in`,"login.failed":`Sign in failed`,"error.invalid_credentials":`User name or password is not correct.`,"error.locked_out":`Too many failed attempts. Please try again later.`,"error.network_error":`The server is not reachable.`,"error.permission_denied":`You are not allowed to do this.`,"error.no_session":`Your session has expired, please sign in again.`,"error.session_expired":`Your session has expired, please sign in again.`,"error.csrf_rejected":`The request was rejected for security reasons, please try again.`,"error.user_inactive":`This account is deactivated.`,"error.not_found":`Not found.`,"error.bad_request":`The input was not accepted.`,"error.revision_conflict":`The punch was changed in the meantime, please reload.`,"error.conflict":`The change conflicts with existing data.`,"error.report_font_missing":`This report needs a Unicode font (report_font_path).`,"error.unknown_error":`Unexpected error.`,"punch.now":`Punch`,"punch.in":`Clock in`,"punch.out":`Clock out`,"punch.quick":`Quick punch`,"punch.open":`Clocked in since {{time}}`,"punch.closed":`Not clocked in`,"punch.last":`Last punch {{time}}`,"punch.worked":`Worked today`,"punch.target":`Target today`,"punch.balance":`Balance today`,"punch.queued":`Saved offline – it will be sent automatically`,"punch.sent":`Punch stored ({{time}})`,"punch.note":`Note`,"month.title":`Month`,"month.previous":`Previous month`,"month.next":`Next month`,"month.worked":`Worked`,"month.target":`Target`,"month.balance":`Balance`,"error.edit_window_closed":`Outside the edit window`,"admin.profile.pauseRules":`Own break rules`,"admin.profile.pauseRulesHint":`Rules for this employee only: they replace the company rule with the same “from minutes”. Without own rules the company table applies.`,"report.csv":`Raw data (CSV)`,"month.edit":`Correct`,"month.editTitle":`Correct punches · {{date}}`,"month.editHint":`Only inside the edit window - older days are changed by the administration.`,"month.time":`Time`,"month.direction":`Direction`,"month.directionIn":`In`,"month.directionOut":`Out`,"month.addPunch":`Add punch`,"month.pause":`Break`,"month.paidBreak":`of which paid`,"month.open":`open`,"month.holiday":`Holiday`,"month.absence":`Absence`,"month.empty":`No days in this month.`,"month.months":`Months of the year`,"report.xls":`Excel`,"report.pdf":`PDF`,"report.failed":`The statement could not be created.`,"reports.title":`Reports`,"reports.year":`Year`,"reports.yearTotals":`Year totals`,"reports.monthTotals":`Month totals`,"reports.overtime":`Overtime`,"reports.vacation":`Vacation (taken / entitlement)`,"reports.paidOut":`Paid out: {{minutes}}`,"reports.empty":`No data for this period.`,"absences.title":`Absences`,"absences.type":`Type`,"absences.from":`From`,"absences.to":`To`,"absences.status":`Status`,"absences.portion":`Day share`,"absences.typeHint":`Code of the absence type, e.g. F for vacation`,"absences.create":`Request absence`,"absences.created":`Absence requested.`,"absences.empty":`No absences in this year.`,"sync.title":`Synchronisation`,"sync.pending":`{{count}} punch(es) waiting`,"sync.none":`Nothing to send.`,"sync.flush":`Send now`,"sync.done":`Sent: {{accepted}}, duplicates: {{duplicates}}, conflicts: {{conflicts}}`,"sync.conflicts":`Open conflicts`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.accept":`Keep server value`,"sync.dismiss":`Discard`,"sync.resolved":`Conflict resolved.`,"sync.empty":`No open conflicts.`,"sync.permission":`You are not allowed to resolve conflicts.`,"profile.title":`Profile`,"profile.user":`User`,"profile.roles":`Permissions`,"profile.language":`Language`,"profile.newPassword":`New password`,"profile.changePassword":`Change password`,"profile.changed":`Password changed, please sign in again.`,"admin.title":`Administration`,"admin.forbidden":`You are not allowed to open the administration.`,"admin.users":`Employees`,"admin.backup":`Backups`,"admin.user.login":`Login`,"admin.user.name":`Name`,"admin.user.password":`Password`,"admin.user.passwordHint":`At least 8 characters with upper and lower case and digits.`,"admin.user.roles":`Roles`,"admin.user.active":`Active`,"admin.user.inactive":`Deactivated`,"admin.user.create":`Add employee`,"admin.user.pin":`PIN`,"admin.user.pinTitle":`Badge PIN for {{name}}`,"admin.user.newPin":`New PIN`,"admin.user.pinHint":`4 to 8 digits for the terminal`,"admin.user.empty":`No employees yet.`,"admin.backup.create":`Create backup now`,"admin.backup.upload":`Upload backup`,"admin.backup.uploadHint":`Pick a downloaded backup (.sqlite) - it is checked and applied on the next start.`,"admin.backup.delete":`Delete`,"admin.backup.deleteTitle":`Delete backup`,"admin.backup.deleteConfirm":`The backup {{name}} is deleted. This cannot be undone.`,"admin.backup.empty":`No backups yet.`,"admin.backup.retention":`Backups older than {{days}} days are removed, the newest one is always kept.`,"admin.backup.done":`Backup {{name}} written, {{removed}} old file(s) removed.`,"common.save":`Save`,"common.cancel":`Cancel`,"common.loading":`Loading…`,"common.retry":`Retry`,"common.close":`Close`,"common.refresh":`Refresh`,"common.none":`–`,"terminal.title":`Terminal`,"terminal.deviceToken":`Device token`,"terminal.connect":`Connect`,"terminal.badge":`Badge`,"terminal.noPin":`No PIN is needed on this terminal.`,"terminal.pin":`PIN`,"terminal.select":`Choose your name`,"terminal.disabled":`The terminal is switched off in the adapter settings.`,"admin.terminals":`Terminals`,"admin.terminal.name":`Name`,"admin.terminal.location":`Location`,"admin.terminal.pinRequired":`Employees need their PIN`,"admin.terminal.create":`Create terminal`,"admin.terminal.tokenOnce":`Copy the device token now — it is stored as a hash and shown only once:`,"admin.terminal.url":`Open this address on the kiosk device:`,"admin.terminal.revoke":`Revoke`,"admin.terminal.revoked":`revoked`,"admin.terminal.users":`Employees`,"admin.terminal.usersHint":`Leave everything off to show all employees on this terminal.`,"admin.terminal.usersAll":`all employees`,"admin.terminal.empty":`No terminal created yet.`,"admin.terminal.confirmRevoke":`Revoke “{{name}}”? Its device token stops working immediately.`,"admin.settings":`Settings`,"admin.settings.fontPath":`Unicode font file for PDF statements (.ttf/.otf)`,"admin.user.profile":`Work profile`,"admin.user.profileTitle":`Work profile · {{name}}`,"admin.profile.percent":`Employment level (%)`,"admin.profile.weeklyHours":`Weekly hours at 100 %`,"admin.profile.workdays":`Working days`,"admin.profile.overtimeModel":`Overtime model`,"admin.profile.model.monthly":`Monthly`,"admin.profile.model.yearly":`Yearly`,"admin.profile.model.cumulative":`Cumulative`,"admin.profile.vacationPerYear":`Vacation days per year`,"admin.profile.vacationCarryover":`Vacation carried over (days)`,"admin.profile.overtimeCarryover":`Overtime carried over (hours)`,"admin.profile.vorholzeitPerYear":`“Vorholzeit” per year (hours)`,"admin.profile.pausePaid":`Paid break minutes per day`,"admin.profile.pausePaidHint":`That many minutes of the break count as working time (0 = the break is not paid).`,"admin.settings.pauseMode":`Breaks`,"admin.settings.pauseModeTitle":`Break rule`,"admin.settings.pauseModeHint":`How the break of a day is determined.`,"admin.settings.pauseRules":`Break rules`,"admin.settings.pauseRulesHint":`Applies to days without a punched break: from the given block length (first to last punch of a block) the minutes are deducted.`,"admin.settings.pauseFrom":`from minutes`,"admin.settings.pauseTo":`to minutes (empty = no end)`,"admin.settings.pauseMinutes":`break minutes`,"admin.settings.pauseActive":`Rule active`,"admin.settings.pauseAdd":`Add rule`,"admin.settings.pauseSave":`Save break rules`,"admin.settings.pauseMode.auto":`Punched break, otherwise the rules`,"admin.settings.pauseMode.punched":`Only punched breaks`,"admin.settings.pauseMode.staffel":`Only the graduated rules`,"admin.settings.fontPathHint":`Needed for Russian, Ukrainian and Chinese; empty = built-in fonts, which only cover Latin-1.`,"admin.settings.advanced":`All instance settings (technical names, 1/0 for switches)`,"admin.settings.setting.edit_window_days":`Edit window (days)`,"admin.settings.setting.quick_round_minutes":`Quick rounding (min)`,"admin.settings.setting.absence_calc_until_today":`Absences to today`,"admin.settings.setting.absence_deduct_worktime":`Deduct absences`,"admin.settings.setting.print_limit_days":`Print limit (days)`,"admin.settings.setting.holiday_country":`Holiday country`,"admin.settings.setting.default_language":`Default language`,"admin.settings.setting.session_ttl_minutes":`Session (minutes)`,"admin.settings.setting.backup_retention_days":`Keep backups (days)`,"admin.settings.setting.attendance_list_visible":`Attendance list`,"admin.settings.setting.timezone":`Time zone`,"admin.settings.saved":`Settings saved.`,"admin.holidays":`Public holidays`,"admin.holiday.date":`Date (YYYY-MM-DD)`,"admin.holiday.name":`Name`,"holiday.newYear":`New Year`,"holiday.epiphany":`Epiphany`,"holiday.goodFriday":`Good Friday`,"holiday.easterMonday":`Easter Monday`,"holiday.labourDay":`Labour Day`,"holiday.ascension":`Ascension Day`,"holiday.whitMonday":`Whit Monday`,"holiday.corpusChristi":`Corpus Christi`,"holiday.nationalDay":`National Day`,"holiday.germanUnity":`German Unity Day`,"holiday.assumption":`Assumption Day`,"holiday.allSaints":`All Saints' Day`,"holiday.immaculateConception":`Immaculate Conception`,"holiday.christmas":`Christmas Day`,"holiday.boxingDay":`Boxing Day`,"admin.holiday.add":`Add holiday`,"admin.holiday.year":`Year`,"admin.holiday.region":`Region (optional)`,"admin.holiday.empty":`No holiday recorded for this year.`,"admin.tags":`Badges (RFID/NFC)`,"admin.tag.label":`Label`,"admin.tag.user":`Employee`,"admin.tag.create":`Create badge`,"admin.tag.linkOnce":`Write this link onto the tag or open it on the phone:`,"admin.tag.delete":`Delete`,"admin.tag.active":`active`,"admin.tag.expired":`expired`,"admin.tag.revoked":`revoked`,"admin.tag.lastUsed":`last used`,"admin.tag.remove":`Remove permanently`,"admin.tag.edit":`Edit`,"admin.tag.reissue":`New link`,"admin.tag.editTitle":`Edit badge`,"admin.tag.editHint":`A different employee or a new validity issues a new link — the link handed out before stops working immediately.`,"admin.tag.validityDays":`Validity (days)`,"admin.tag.oldLinkDead":`The link handed out before no longer works.`,"admin.tag.qrAlt":`QR code of the badge link`,"admin.tag.empty":`No badge created yet.`,"nav.statistics":`Statistics`,"statistics.from":`From`,"statistics.to":`To`,"statistics.employee":`Employee`,"statistics.worked":`Worked`,"statistics.target":`Target`,"statistics.balance":`Balance`,"statistics.openDays":`Open days`,"statistics.totals":`All employees`,"scan.title":`Badge`,"scan.done":`Punched for {{name}} at {{time}}`,"scan.failed":`The badge could not be used: {{reason}}`,"presence.title":`Presence`,"presence.present":`Present`,"presence.absent":`Away`,"presence.tapPin":`Enter the PIN to clock in or out`,"presence.cancel":`Cancel`,"presence.updated":`{{name}} is now {{state}}`,"presence.disabled":`The kiosk terminal is switched off in the instance settings.`,"admin.user.photo":`Photo`,"admin.user.photoTitle":`Photo of {{name}}`,"admin.user.photoChoose":`Choose picture`,"admin.user.photoRemove":`Remove picture`,"admin.user.photoHint":`PNG, JPEG, WEBP or GIF up to 256 KB. Without a picture the placeholder is shown.`,"admin.corrections":`Time corrections`,"corrections.employee":`Employee`,"corrections.previous":`Previous month`,"corrections.next":`Next month`,"corrections.reason":`Reason`,"corrections.reasonHint":`Kept in the audit trail of the adapter`,"corrections.add":`Add punch or day`,"corrections.addTitle":`Add a punch`,"corrections.addHint":`Leave “clock out” empty when only one punch is missing`,"corrections.editTitle":`Change punch`,"corrections.remove":`Delete punch`,"corrections.date":`Date`,"corrections.from":`Clock in`,"corrections.to":`Clock out`,"corrections.direction":`Direction`,"corrections.note":`Note`,"corrections.empty":`No punches in this month`,"corrections.byAdmin":`added by the administration`,"corrections.history":`History`,"corrections.actor":`By`,"corrections.actionCreate":`Added`,"corrections.actionUpdate":`Changed`,"corrections.actionDelete":`Deleted`,"keypad.backspace":`Backspace`,"admin.settings.branding":`Company branding`,"admin.settings.brandingHint":`Logo, background picture and background colour of this installation. The sign in screen and the kiosk screens show them as well.`,"admin.settings.brandLogo":`Choose logo`,"admin.settings.brandBackground":`Choose background`,"admin.brand.imageResized":`Scaled down for display ({{size}}).`,"admin.brand.imageTooLarge":`Even scaled down the picture is still too big.`,"admin.brand.imageType":`Only PNG, JPEG, WEBP or GIF are possible.`,"admin.brand.imageUnreadable":`The picture could not be read.`,"admin.settings.brandColor":`Background colour`,"admin.settings.brandColorHint":`Hex value like #1a2b3c, empty for the default`,"admin.settings.brandColorPresets":`Suggested colours`,"admin.settings.brandColorDefault":`Default`,"admin.backup.download":`Download`,"admin.backup.restore":`Restore`,"admin.backup.restoreTitle":`Restore a backup`,"admin.backup.restoreConfirm":`The backup {{name}} is applied when the adapter starts next time; the current database is kept next to it as a file. Restart the instance afterwards.`,"admin.backup.pendingHint":`{{name}} is applied when the adapter starts next time ({{users}} employees, {{entries}} punches) - restart the instance.`,"error.backup_invalid":`That file is not a backup of this adapter.`,"admin.settings.brandImageRemove":`Remove picture`,"admin.settings.brandColorDefaultHint":`Resets the background colour and the background picture`,"admin.triggers":`Triggers (ioBroker)`,"admin.triggersHint":"A state of another adapter punches or sets the presence — a fingerprint reader, a button or a door contact. It fires only when the value changes. As the value you can write `toggle`: then every change fires (for example on and off again).","admin.trigger.label":`Label`,"admin.trigger.sourceState":`State`,"admin.trigger.mode":`Trigger`,"admin.trigger.modeCondition":`State carries the value`,"admin.trigger.modeUser":`Value is the employee`,"admin.trigger.condition":`Value`,"admin.trigger.user":`Employee`,"admin.trigger.action":`Action`,"admin.trigger.actionPunch":`Punch (in or out)`,"admin.trigger.actionQuickPunch":`Punch with quick rounding`,"admin.trigger.actionPresent":`Set to present`,"admin.trigger.actionAbsent":`Set to absent`,"admin.trigger.cooldown":`Cooldown (seconds)`,"admin.trigger.active":`Active`,"admin.trigger.add":`Add trigger`,"admin.trigger.lastFired":`Last fired`,"admin.trigger.empty":`No trigger yet.`,"admin.trigger.conditionHint":"Value, or `toggle` to fire on every change","admin.settings.automations":`Rules (automatic)`,"admin.settings.automationsHint":`What the adapter does on its own: clock out at the configured local time, report a missing punch or remind after working too long without a break. A rule runs at most once per employee and day.`,"admin.automation.kind":`Kind`,"admin.automation.kindClockIn":`Clock in automatically`,"admin.automation.kindClockOut":`Clock out automatically`,"admin.automation.kindMissingPunch":`Report a missing punch`,"admin.automation.kindBreakReminder":`Break reminder`,"admin.automation.at":`Time`,"admin.automation.atHint":`Local time of the employee`,"admin.automation.after":`After (minutes)`,"admin.automation.user":`Employee`,"admin.automation.allUsers":`all employees`,"admin.automation.add":`Add rule`,"admin.automation.empty":`No rule yet.`,"admin.automation.runs":`Last runs`,"admin.automation.weekdays":`Days of the week`,"admin.automation.repeat":`Repeat`,"admin.automation.repeatDay":`once a day`,"admin.automation.repeatWeek":`once a week`,"admin.settings.setting.report_font_path":`PDF font file`,"presence.workedToday":`Worked today`,"admin.user.workedTime":`Working time on the presence card`,"admin.user.workedTimeHint":`Shows the time worked today on the presence card (for example 1:23). Without a punch it reads 0:00; without this permission the card keeps present/absent and the name only.`},Dw={"app.title":`Zeiterfassung`,"app.offline":`Offline – Stempel werden zwischengespeichert`,"app.online":`Verbunden`,"nav.dashboard":`Stempeln`,"nav.month":`Monat`,"nav.reports":`Berichte`,"nav.absences":`Abwesenheiten`,"nav.sync":`Abgleich`,"nav.profile":`Profil`,"nav.logout":`Abmelden`,"nav.menu":`Menü`,"login.title":`Anmelden`,"login.login":`Benutzername`,"login.password":`Passwort`,"login.submit":`Anmelden`,"login.failed":`Anmeldung fehlgeschlagen`,"error.invalid_credentials":`Benutzername oder Passwort ist nicht korrekt.`,"error.locked_out":`Zu viele Fehlversuche. Bitte später erneut versuchen.`,"error.network_error":`Der Server ist nicht erreichbar.`,"error.permission_denied":`Dafür fehlt die Berechtigung.`,"error.no_session":`Die Sitzung ist abgelaufen, bitte neu anmelden.`,"error.session_expired":`Die Sitzung ist abgelaufen, bitte neu anmelden.`,"error.csrf_rejected":`Die Anfrage wurde aus Sicherheitsgründen abgelehnt, bitte erneut versuchen.`,"error.user_inactive":`Dieses Konto ist deaktiviert.`,"error.not_found":`Nicht gefunden.`,"error.bad_request":`Die Eingabe wurde nicht akzeptiert.`,"error.revision_conflict":`Der Stempel wurde zwischenzeitlich geändert, bitte neu laden.`,"error.conflict":`Die Änderung steht im Konflikt mit vorhandenen Daten.`,"error.report_font_missing":`Für diesen Bericht wird eine Unicode-Schrift benötigt (report_font_path).`,"error.unknown_error":`Unerwarteter Fehler.`,"punch.now":`Stempeln`,"punch.in":`Einstempeln`,"punch.out":`Ausstempeln`,"punch.quick":`Schnellstempeln`,"punch.open":`Eingestempelt seit {{time}}`,"punch.closed":`Nicht eingestempelt`,"punch.last":`Letzter Stempel {{time}}`,"punch.worked":`Heute gearbeitet`,"punch.target":`Soll heute`,"punch.balance":`Saldo heute`,"punch.queued":`Offline gespeichert – wird automatisch gesendet`,"punch.sent":`Stempel gespeichert ({{time}})`,"punch.note":`Notiz`,"month.title":`Monat`,"month.previous":`Voriger Monat`,"month.next":`Nächster Monat`,"month.worked":`Gearbeitet`,"month.target":`Soll`,"month.balance":`Saldo`,"error.edit_window_closed":`Außerhalb des Bearbeitungsfensters`,"admin.profile.pauseRules":`Eigene Pausenregeln`,"admin.profile.pauseRulesHint":`Regeln nur für diesen Mitarbeiter: sie ersetzen die Firmenregel mit demselben „ab Minuten“. Ohne eigene Regeln gilt die Firmenstaffel.`,"report.csv":`Rohdaten (CSV)`,"month.edit":`Korrigieren`,"month.editTitle":`Stempel korrigieren · {{date}}`,"month.editHint":`Nur innerhalb des Bearbeitungsfensters möglich - ältere Tage ändert die Verwaltung.`,"month.time":`Zeit`,"month.direction":`Richtung`,"month.directionIn":`Kommen`,"month.directionOut":`Gehen`,"month.addPunch":`Stempel hinzufügen`,"month.pause":`Pause`,"month.paidBreak":`davon bezahlt`,"month.open":`offen`,"month.holiday":`Feiertag`,"month.absence":`Abwesenheit`,"month.empty":`Keine Tage in diesem Monat.`,"month.months":`Monate des Jahres`,"report.xls":`Excel`,"report.pdf":`PDF`,"report.failed":`Der Nachweis konnte nicht erstellt werden.`,"reports.title":`Berichte`,"reports.year":`Jahr`,"reports.yearTotals":`Jahressumme`,"reports.monthTotals":`Monatssumme`,"reports.overtime":`Überstunden`,"reports.vacation":`Ferien (bezogen / Anspruch)`,"reports.paidOut":`Ausbezahlt: {{minutes}}`,"reports.empty":`Keine Daten für diesen Zeitraum.`,"absences.title":`Abwesenheiten`,"absences.type":`Art`,"absences.from":`Von`,"absences.to":`Bis`,"absences.status":`Status`,"absences.portion":`Tagesanteil`,"absences.typeHint":`Kürzel der Abwesenheitsart, z. B. F für Ferien`,"absences.create":`Abwesenheit beantragen`,"absences.created":`Abwesenheit beantragt.`,"absences.empty":`Keine Abwesenheiten in diesem Jahr.`,"sync.title":`Abgleich`,"sync.pending":`{{count}} Stempel wartend`,"sync.none":`Nichts zu senden.`,"sync.flush":`Jetzt senden`,"sync.done":`Gesendet: {{accepted}}, Doppelte: {{duplicates}}, Konflikte: {{conflicts}}`,"sync.conflicts":`Offene Konflikte`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.accept":`Serverwert behalten`,"sync.dismiss":`Verwerfen`,"sync.resolved":`Konflikt gelöst.`,"sync.empty":`Keine offenen Konflikte.`,"sync.permission":`Für das Lösen von Konflikten fehlt die Berechtigung.`,"profile.title":`Profil`,"profile.user":`Benutzer`,"profile.roles":`Berechtigungen`,"profile.language":`Sprache`,"profile.newPassword":`Neues Passwort`,"profile.changePassword":`Passwort ändern`,"profile.changed":`Passwort geändert, bitte neu anmelden.`,"admin.title":`Verwaltung`,"admin.forbidden":`Sie dürfen die Verwaltung nicht öffnen.`,"admin.users":`Mitarbeiter`,"admin.backup":`Sicherungen`,"admin.user.login":`Benutzername`,"admin.user.name":`Name`,"admin.user.password":`Passwort`,"admin.user.passwordHint":`Mindestens 8 Zeichen mit Gross- und Kleinschreibung und Ziffern.`,"admin.user.roles":`Rollen`,"admin.user.active":`Aktiv`,"admin.user.inactive":`Deaktiviert`,"admin.user.create":`Mitarbeiter anlegen`,"admin.user.pin":`PIN`,"admin.user.pinTitle":`Badge-PIN für {{name}}`,"admin.user.newPin":`Neue PIN`,"admin.user.pinHint":`4 bis 8 Ziffern für das Terminal`,"admin.user.empty":`Noch keine Mitarbeiter.`,"admin.backup.create":`Sicherung jetzt erstellen`,"admin.backup.upload":`Sicherung hochladen`,"admin.backup.uploadHint":`Eine heruntergeladene Sicherung (.sqlite) auswählen - sie wird geprüft und beim nächsten Start eingespielt.`,"admin.backup.delete":`Löschen`,"admin.backup.deleteTitle":`Sicherung löschen`,"admin.backup.deleteConfirm":`Die Sicherung {{name}} wird gelöscht. Das lässt sich nicht rückgängig machen.`,"admin.backup.empty":`Noch keine Sicherungen.`,"admin.backup.retention":`Sicherungen älter als {{days}} Tage werden entfernt, die neueste bleibt immer erhalten.`,"admin.backup.done":`Sicherung {{name}} geschrieben, {{removed}} alte Datei(en) entfernt.`,"common.save":`Speichern`,"common.cancel":`Abbrechen`,"common.loading":`Lädt…`,"common.retry":`Erneut versuchen`,"common.close":`Schließen`,"common.refresh":`Aktualisieren`,"common.none":`–`,"terminal.title":`Terminal`,"terminal.deviceToken":`Geräte-Token`,"terminal.connect":`Verbinden`,"terminal.badge":`Ausweis`,"terminal.noPin":`Auf diesem Terminal ist keine PIN nötig.`,"terminal.pin":`PIN`,"terminal.select":`Namen auswählen`,"terminal.disabled":`Das Terminal ist in den Adapter-Einstellungen ausgeschaltet.`,"admin.terminals":`Terminals`,"admin.terminal.name":`Name`,"admin.terminal.location":`Standort`,"admin.terminal.pinRequired":`Mitarbeiter brauchen ihre PIN`,"admin.terminal.create":`Terminal anlegen`,"admin.terminal.tokenOnce":`Geräte-Token jetzt kopieren — er wird nur als Hash gespeichert und nur einmal angezeigt:`,"admin.terminal.url":`Diese Adresse am Kiosk-Gerät öffnen:`,"admin.terminal.revoke":`Widerrufen`,"admin.terminal.revoked":`widerrufen`,"admin.terminal.users":`Mitarbeiter`,"admin.terminal.usersHint":`Nichts auswählen zeigt alle Mitarbeiter auf diesem Terminal.`,"admin.terminal.usersAll":`alle Mitarbeiter`,"admin.terminal.empty":`Noch kein Terminal angelegt.`,"admin.terminal.confirmRevoke":`„{{name}}“ widerrufen? Der Geräte-Token funktioniert sofort nicht mehr.`,"admin.settings":`Einstellungen`,"admin.settings.fontPath":`Unicode-Schriftdatei für PDF-Ausweise (.ttf/.otf)`,"admin.user.profile":`Arbeitsprofil`,"admin.user.profileTitle":`Arbeitsprofil · {{name}}`,"admin.profile.percent":`Beschäftigungsgrad (%)`,"admin.profile.weeklyHours":`Wochenstunden bei 100 %`,"admin.profile.workdays":`Arbeitstage`,"admin.profile.overtimeModel":`Überstundenmodell`,"admin.profile.model.monthly":`Monatlich`,"admin.profile.model.yearly":`Jährlich`,"admin.profile.model.cumulative":`Fortlaufend`,"admin.profile.vacationPerYear":`Ferientage pro Jahr`,"admin.profile.vacationCarryover":`Ferien-Übertrag (Tage)`,"admin.profile.overtimeCarryover":`Überstunden-Übertrag (Stunden)`,"admin.profile.vorholzeitPerYear":`Vorholzeit pro Jahr (Stunden)`,"admin.profile.pausePaid":`Bezahlte Pausenminuten pro Tag`,"admin.profile.pausePaidHint":`So viele Minuten der Pause zählen als Arbeitszeit (0 = die Pause wird nicht bezahlt).`,"admin.settings.pauseMode":`Pausen`,"admin.settings.pauseModeTitle":`Pausenregel`,"admin.settings.pauseModeHint":`Wie die Pause eines Tages bestimmt wird.`,"admin.settings.pauseRules":`Pausenstaffel`,"admin.settings.pauseRulesHint":`Gilt für Tage ohne gestempelte Pause: ab der angegebenen Blocklänge (erster bis letzter Stempel eines Blocks) werden die Minuten abgezogen.`,"admin.settings.pauseFrom":`ab Minuten`,"admin.settings.pauseTo":`bis Minuten (leer = ohne Ende)`,"admin.settings.pauseMinutes":`Pause Minuten`,"admin.settings.pauseActive":`Regel aktiv`,"admin.settings.pauseAdd":`Regel hinzufügen`,"admin.settings.pauseSave":`Pausenstaffel speichern`,"admin.settings.pauseMode.auto":`Gestempelte Pause, sonst Staffel`,"admin.settings.pauseMode.punched":`Nur gestempelte Pausen`,"admin.settings.pauseMode.staffel":`Nur Pausenstaffel`,"admin.settings.fontPathHint":`Nötig für Russisch, Ukrainisch und Chinesisch; leer = eingebaute Schriften, die nur Latin-1 abdecken.`,"admin.settings.advanced":`Alle Instanzeinstellungen (technische Namen, 1/0 für Schalter)`,"admin.settings.setting.edit_window_days":`Änderungsfenster (Tage)`,"admin.settings.setting.quick_round_minutes":`Schnellrundung (Min.)`,"admin.settings.setting.absence_calc_until_today":`Abwesenheit bis heute`,"admin.settings.setting.absence_deduct_worktime":`Abwesenheit abziehen`,"admin.settings.setting.print_limit_days":`Druckgrenze (Tage)`,"admin.settings.setting.holiday_country":`Feiertagsland`,"admin.settings.setting.default_language":`Standardsprache`,"admin.settings.setting.session_ttl_minutes":`Sitzungsdauer (Min.)`,"admin.settings.setting.backup_retention_days":`Sicherungen (Tage)`,"admin.settings.setting.attendance_list_visible":`Anwesenheitsliste`,"admin.settings.setting.timezone":`Zeitzone`,"admin.settings.saved":`Einstellungen gespeichert.`,"admin.holidays":`Feiertage`,"admin.holiday.date":`Datum (JJJJ-MM-TT)`,"admin.holiday.name":`Bezeichnung`,"holiday.newYear":`Neujahr`,"holiday.epiphany":`Heilige Drei Könige`,"holiday.goodFriday":`Karfreitag`,"holiday.easterMonday":`Ostermontag`,"holiday.labourDay":`Tag der Arbeit`,"holiday.ascension":`Christi Himmelfahrt`,"holiday.whitMonday":`Pfingstmontag`,"holiday.corpusChristi":`Fronleichnam`,"holiday.nationalDay":`Nationalfeiertag`,"holiday.germanUnity":`Tag der Deutschen Einheit`,"holiday.assumption":`Mariä Himmelfahrt`,"holiday.allSaints":`Allerheiligen`,"holiday.immaculateConception":`Mariä Empfängnis`,"holiday.christmas":`Weihnachten`,"holiday.boxingDay":`Stefanitag`,"admin.holiday.add":`Feiertag hinzufügen`,"admin.holiday.year":`Jahr`,"admin.holiday.region":`Region (optional)`,"admin.holiday.empty":`Für dieses Jahr ist kein Feiertag erfasst.`,"admin.tags":`Ausweise (RFID/NFC)`,"admin.tag.label":`Bezeichnung`,"admin.tag.user":`Mitarbeiter`,"admin.tag.create":`Ausweis anlegen`,"admin.tag.linkOnce":`Diesen Link auf den Tag schreiben oder am Handy öffnen:`,"admin.tag.delete":`Löschen`,"admin.tag.active":`aktiv`,"admin.tag.expired":`abgelaufen`,"admin.tag.revoked":`widerrufen`,"admin.tag.lastUsed":`zuletzt benutzt`,"admin.tag.remove":`Endgültig entfernen`,"admin.tag.edit":`Bearbeiten`,"admin.tag.reissue":`Neuer Link`,"admin.tag.editTitle":`Ausweis bearbeiten`,"admin.tag.editHint":`Ein anderer Mitarbeiter oder eine neue Gültigkeit gibt einen neuen Link aus — der vorher ausgegebene Link funktioniert sofort nicht mehr.`,"admin.tag.validityDays":`Gültigkeit (Tage)`,"admin.tag.oldLinkDead":`Der vorher ausgegebene Link funktioniert nicht mehr.`,"admin.tag.qrAlt":`QR-Code des Ausweis-Links`,"admin.tag.empty":`Noch kein Ausweis angelegt.`,"nav.statistics":`Statistik`,"statistics.from":`Von`,"statistics.to":`Bis`,"statistics.employee":`Mitarbeiter`,"statistics.worked":`Gearbeitet`,"statistics.target":`Soll`,"statistics.balance":`Saldo`,"statistics.openDays":`Offene Tage`,"statistics.totals":`Alle Mitarbeiter`,"scan.title":`Ausweis`,"scan.done":`Für {{name}} gestempelt um {{time}}`,"scan.failed":`Der Ausweis konnte nicht verwendet werden: {{reason}}`,"presence.title":`Anwesenheit`,"presence.present":`Anwesend`,"presence.absent":`Abwesend`,"presence.tapPin":`PIN eingeben, um ein- oder auszustempeln`,"presence.cancel":`Abbrechen`,"presence.updated":`{{name}} ist jetzt {{state}}`,"presence.disabled":`Das Kiosk-Terminal ist in den Instanz-Einstellungen ausgeschaltet.`,"admin.user.photo":`Foto`,"admin.user.photoTitle":`Foto von {{name}}`,"admin.user.photoChoose":`Bild wählen`,"admin.user.photoRemove":`Bild entfernen`,"admin.user.photoHint":`PNG, JPEG, WEBP oder GIF bis 256 KB. Ohne Bild wird der Platzhalter angezeigt.`,"admin.corrections":`Zeitkorrektur`,"corrections.employee":`Mitarbeiter`,"corrections.previous":`Voriger Monat`,"corrections.next":`Nächster Monat`,"corrections.reason":`Begründung`,"corrections.reasonHint":`Wird im Protokoll (Audit-Log) festgehalten`,"corrections.add":`Stempel oder Tag nachtragen`,"corrections.addTitle":`Stempel nachtragen`,"corrections.addHint":`„Gehen“ leer lassen, wenn nur ein Stempel fehlt`,"corrections.editTitle":`Stempel ändern`,"corrections.remove":`Stempel löschen`,"corrections.date":`Datum`,"corrections.from":`Kommen`,"corrections.to":`Gehen`,"corrections.direction":`Richtung`,"corrections.note":`Notiz`,"corrections.empty":`Keine Stempel in diesem Monat`,"corrections.byAdmin":`durch die Verwaltung nachgetragen`,"corrections.history":`Verlauf`,"corrections.actor":`Von`,"corrections.actionCreate":`Nachgetragen`,"corrections.actionUpdate":`Geändert`,"corrections.actionDelete":`Gelöscht`,"keypad.backspace":`Löschen`,"admin.settings.branding":`Firmen-Branding`,"admin.settings.brandingHint":`Logo, Hintergrundbild und Hintergrundfarbe dieser Installation. Anmeldebildschirm und Kiosk zeigen sie ebenfalls.`,"admin.settings.brandLogo":`Logo wählen`,"admin.settings.brandBackground":`Hintergrund wählen`,"admin.brand.imageResized":`Für die Anzeige verkleinert ({{size}}).`,"admin.brand.imageTooLarge":`Das Bild ist auch verkleinert noch zu groß.`,"admin.brand.imageType":`Nur PNG, JPEG, WEBP oder GIF sind möglich.`,"admin.brand.imageUnreadable":`Das Bild konnte nicht gelesen werden.`,"admin.settings.brandColor":`Hintergrundfarbe`,"admin.settings.brandColorHint":`Hex-Wert wie #1a2b3c, leer für die Vorgabe`,"admin.settings.brandColorPresets":`Vorschläge`,"admin.settings.brandColorDefault":`Standard`,"admin.backup.download":`Herunterladen`,"admin.backup.restore":`Wiederherstellen`,"admin.backup.restoreTitle":`Sicherung wiederherstellen`,"admin.backup.restoreConfirm":`Die Sicherung {{name}} wird beim nächsten Start des Adapters eingespielt; die aktuelle Datenbank bleibt als Datei daneben erhalten. Die Instanz danach neu starten.`,"admin.backup.pendingHint":`{{name}} wird beim nächsten Start eingespielt ({{users}} Mitarbeiter, {{entries}} Stempel) - bitte die Instanz neu starten.`,"error.backup_invalid":`Diese Datei ist keine Sicherung dieses Adapters.`,"admin.settings.brandImageRemove":`Bild entfernen`,"admin.settings.brandColorDefaultHint":`Setzt Hintergrundfarbe und Hintergrundbild zurück`,"admin.triggers":`Aktionen (ioBroker)`,"admin.triggersHint":"Ein State aus einem anderen Adapter löst Stempeln oder die Anwesenheit aus — z. B. ein Fingerabdruck-Leser, ein Taster oder ein Türkontakt. Ausgelöst wird nur, wenn sich der Wert ändert. Als Wert kannst du `toggle` eintragen: dann löst jeder Wechsel aus (zum Beispiel an und wieder aus).","admin.trigger.label":`Bezeichnung`,"admin.trigger.sourceState":`Datenpunkt`,"admin.trigger.mode":`Auslöser`,"admin.trigger.modeCondition":`State hat den Wert`,"admin.trigger.modeUser":`Wert ist der Mitarbeiter`,"admin.trigger.condition":`Wert`,"admin.trigger.user":`Mitarbeiter`,"admin.trigger.action":`Aktion`,"admin.trigger.actionPunch":`Stempeln (ein oder aus)`,"admin.trigger.actionQuickPunch":`Stempeln mit Schnellrundung`,"admin.trigger.actionPresent":`Auf anwesend setzen`,"admin.trigger.actionAbsent":`Auf abwesend setzen`,"admin.trigger.cooldown":`Sperre (Sekunden)`,"admin.trigger.active":`Aktiv`,"admin.trigger.add":`Aktion hinzufügen`,"admin.trigger.lastFired":`Zuletzt ausgelöst`,"admin.trigger.empty":`Noch keine Aktion angelegt.`,"admin.trigger.conditionHint":"Wert oder `toggle` — dann löst jeder Wechsel aus","admin.settings.automations":`Regeln (Automatik)`,"admin.settings.automationsHint":`Was der Adapter von selbst tut: zur eingestellten Ortszeit ausstempeln, eine fehlende Ausstempelung melden oder nach zu langer Arbeit ohne Pause erinnern. Jede Regel läuft höchstens einmal pro Mitarbeiter und Tag.`,"admin.automation.kind":`Art`,"admin.automation.kindClockIn":`Automatisch einstempeln`,"admin.automation.kindClockOut":`Automatisch ausstempeln`,"admin.automation.kindMissingPunch":`Fehlende Ausstempelung melden`,"admin.automation.kindBreakReminder":`Pausenerinnerung`,"admin.automation.at":`Uhrzeit`,"admin.automation.atHint":`Ortszeit des Mitarbeiters`,"admin.automation.after":`Nach (Minuten)`,"admin.automation.user":`Mitarbeiter`,"admin.automation.allUsers":`alle Mitarbeiter`,"admin.automation.add":`Regel hinzufügen`,"admin.automation.empty":`Noch keine Regel angelegt.`,"admin.automation.runs":`Letzte Ausführungen`,"admin.automation.weekdays":`Wochentage`,"admin.automation.repeat":`Wiederholung`,"admin.automation.repeatDay":`einmal pro Tag`,"admin.automation.repeatWeek":`einmal pro Woche`,"admin.settings.setting.report_font_path":`PDF-Schriftdatei`,"presence.workedToday":`Heute gearbeitet`,"admin.user.workedTime":`Arbeitszeit auf der Anwesenheitskarte`,"admin.user.workedTimeHint":`Zeigt auf der Anwesenheitskarte die heute geleistete Arbeitszeit (z. B. 1:23). Ohne Stempel steht dort 0:00; ohne diese Freigabe bleibt die Karte bei Anwesend/Abwesend und dem Namen.`},Ow={"absences.create":`Запросить отсутствие`,"absences.created":`Запрос на отсутствие.`,"absences.empty":`В этом году пропусков нет.`,"absences.from":`От`,"absences.portion":`Доля дня`,"absences.status":`Статус`,"absences.title":`Отсутствие`,"absences.to":`К`,"absences.type":`Тип`,"absences.typeHint":`Код типа отсутствия, напр. F для отпуска`,"admin.backup":`Резервные копии`,"admin.backup.create":`Создать резервную копию сейчас`,"admin.backup.upload":`Загрузить резервную копию`,"admin.backup.uploadHint":`Выберите скачанную копию (.sqlite) - она будет проверена и применена при следующем запуске.`,"admin.backup.delete":`Удалить`,"admin.backup.deleteTitle":`Удалить резервную копию`,"admin.backup.deleteConfirm":`Копия {{name}} будет удалена. Это нельзя отменить.`,"admin.backup.done":`Резервная копия {{name}} записана, старые файлы {{removed}} удалены.`,"admin.backup.empty":`Резервных копий пока нет.`,"admin.backup.retention":`Резервные копии старше {{days}}\xA0дней удаляются, всегда сохраняется самая новая.`,"admin.forbidden":`Вам не разрешено открывать администрацию.`,"admin.title":`Администрация`,"admin.user.active":`Активный`,"admin.user.create":`Добавить сотрудника`,"admin.user.empty":`Сотрудников пока нет.`,"admin.user.inactive":`Деактивирован`,"admin.user.login":`Логин`,"admin.user.name":`Имя`,"admin.user.newPin":`Новый PIN-код`,"admin.user.password":`Пароль`,"admin.user.passwordHint":`Не менее 8 символов верхнего и нижнего регистра и цифр.`,"admin.user.pin":`PIN-код`,"admin.user.pinHint":`От 4 до 8 цифр для терминала`,"admin.user.pinTitle":`PIN-код бейджа для {{name}}`,"admin.user.roles":`Роли`,"admin.users":`Сотрудники`,"app.offline":`Оффлайн – отметки в очереди`,"app.online":`Подключено`,"app.title":`Учет времени`,"common.cancel":`Отмена`,"common.close":`Закрывать`,"common.loading":`Загрузка…`,"common.none":`–`,"common.refresh":`Обновить`,"common.retry":`Повторить попытку`,"common.save":`Сохранять`,"error.bad_request":`Ввод не был принят.`,"error.conflict":`Изменение противоречит существующим данным.`,"error.csrf_rejected":`Запрос отклонен по соображениям безопасности. Повторите попытку.`,"error.invalid_credentials":`Имя пользователя или пароль неверны.`,"error.locked_out":`Слишком много неудачных попыток. Пожалуйста, повторите попытку позже.`,"error.network_error":`Сервер недоступен.`,"error.no_session":`Срок действия вашей сессии истек, пожалуйста, войдите снова.`,"error.not_found":`Не найдено.`,"error.permission_denied":`Вам не разрешено это делать.`,"error.report_font_missing":`Для этого отчета требуется шрифт Unicode (report_font_path).`,"error.revision_conflict":`Тем временем отметка была изменена, пожалуйста, перезагрузите.`,"error.session_expired":`Срок действия вашей сессии истек, пожалуйста, войдите снова.`,"error.unknown_error":`Неожиданная ошибка.`,"error.user_inactive":`Эта учетная запись деактивирована.`,"login.failed":`Войти не удалось`,"login.login":`Имя пользователя`,"login.password":`Пароль`,"login.submit":`Войти`,"login.title":`Войти`,"month.absence":`Отсутствие`,"month.balance":`Баланс`,"error.edit_window_closed":`Вне окна редактирования`,"admin.profile.pauseRules":`Свои правила перерывов`,"admin.profile.pauseRulesHint":`Правила только для этого сотрудника: они заменяют правило компании с тем же «с минут». Без своих правил действует шкала компании.`,"report.csv":`Исходные данные (CSV)`,"month.edit":`Исправить`,"month.editTitle":`Исправить отбивки · {{date}}`,"month.editHint":`Только внутри окна редактирования - более старые дни меняет администрация.`,"month.time":`Время`,"month.direction":`Направление`,"month.directionIn":`Приход`,"month.directionOut":`Уход`,"month.addPunch":`Добавить отбивку`,"month.pause":`Перерыв`,"month.paidBreak":`из них оплачено`,"month.empty":`Нет дней в этом месяце.`,"month.holiday":`Праздничный день`,"month.months":`Месяцы года`,"month.next":`В следующем месяце`,"month.open":`открыт`,"month.previous":`Предыдущий месяц`,"month.target":`Цель`,"month.title":`Месяц`,"month.worked":`Работал`,"nav.absences":`Отсутствие`,"nav.dashboard":`Отметка`,"nav.logout":`выход`,"nav.menu":`Меню`,"nav.month":`Месяц`,"nav.profile":`Профиль`,"nav.reports":`Отчеты`,"nav.sync":`Синхронизация`,"profile.changePassword":`Изменить пароль`,"profile.changed":`Пароль изменен, пожалуйста, войдите снова.`,"profile.language":`Язык`,"profile.newPassword":`Новый пароль`,"profile.roles":`Разрешения`,"profile.title":`Профиль`,"profile.user":`Пользователь`,"punch.balance":`Сальдо сегодня`,"punch.closed":`Не отмечено`,"punch.in":`Приход`,"punch.last":`Последняя отметка {{time}}`,"punch.note":`Примечание`,"punch.now":`Отметиться`,"punch.open":`Отметка с {{time}}`,"punch.out":`Уход`,"punch.queued":`Сохранено оффлайн – будет отправлено автоматически.`,"punch.quick":`Быстрая отметка`,"punch.sent":`Отметка сохранена ({{time}})`,"punch.target":`План сегодня`,"punch.worked":`Отработано сегодня`,"report.failed":`Не удалось создать заявление.`,"report.pdf":`PDF`,"report.xls":`Эксель`,"reports.empty":`Данных за этот период нет.`,"reports.monthTotals":`Итоги месяца`,"reports.overtime":`Переработка`,"reports.paidOut":`Выплачено: {{minutes}}`,"reports.title":`Отчеты`,"reports.vacation":`Отпуск (взятый/право)`,"reports.year":`Год`,"reports.yearTotals":`Итоги года`,"sync.accept":`Сохраняйте ценность сервера`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Открытые конфликты`,"sync.dismiss":`Отказаться`,"sync.done":`Отправлено: {{accepted}}, дубликаты: {{duplicates}}, конфликты: {{conflicts}}`,"sync.empty":`Никаких открытых конфликтов.`,"sync.flush":`Отправить сейчас`,"sync.none":`Нечего отправлять.`,"sync.pending":`{{count}} отметок в очереди`,"sync.permission":`Вам не разрешено разрешать конфликты.`,"sync.resolved":`Конфликт разрешен.`,"sync.title":`Синхронизация`,"terminal.title":`Терминал`,"terminal.deviceToken":`Токен устройства`,"terminal.connect":`Подключить`,"terminal.badge":`Пропуск`,"terminal.noPin":`На этом терминале PIN не нужен.`,"terminal.pin":`PIN-код`,"terminal.select":`Выберите имя`,"terminal.disabled":`Терминал отключён в настройках адаптера.`,"admin.terminals":`Терминалы`,"admin.terminal.name":`Название`,"admin.terminal.location":`Местоположение`,"admin.terminal.pinRequired":`Сотрудникам нужен их PIN-код`,"admin.terminal.create":`Создать терминал`,"admin.terminal.tokenOnce":`Скопируйте токен устройства сейчас — он хранится только как хеш и показывается один раз:`,"admin.terminal.url":`Откройте этот адрес на устройстве киоска:`,"admin.terminal.revoke":`Отозвать`,"admin.terminal.revoked":`отозван`,"admin.terminal.users":`Сотрудники`,"admin.terminal.usersHint":`Если ничего не выбрать, на терминале будут показаны все сотрудники.`,"admin.terminal.usersAll":`все сотрудники`,"admin.terminal.empty":`Терминал ещё не создан.`,"admin.terminal.confirmRevoke":`Отозвать «{{name}}»? Токен устройства перестанет работать сразу.`,"admin.settings":`Настройки`,"admin.settings.fontPath":`Файл шрифта Unicode для PDF-отчётов (.ttf/.otf)`,"admin.user.profile":`Рабочий профиль`,"admin.user.profileTitle":`Рабочий профиль · {{name}}`,"admin.profile.percent":`Занятость (%)`,"admin.profile.weeklyHours":`Часов в неделю при 100 %`,"admin.profile.workdays":`Рабочие дни`,"admin.profile.overtimeModel":`Модель переработок`,"admin.profile.model.monthly":`Помесячно`,"admin.profile.model.yearly":`За год`,"admin.profile.model.cumulative":`Накопительно`,"admin.profile.vacationPerYear":`Дней отпуска в год`,"admin.profile.vacationCarryover":`Перенос отпуска (дни)`,"admin.profile.overtimeCarryover":`Перенос переработок (часы)`,"admin.profile.vorholzeitPerYear":`«Vorholzeit» в год (часы)`,"admin.profile.pausePaid":`Оплачиваемых минут перерыва в день`,"admin.profile.pausePaidHint":`Столько минут перерыва входят в рабочее время (0 = перерыв не оплачивается).`,"admin.settings.pauseMode":`Перерывы`,"admin.settings.pauseModeTitle":`Правило перерывов`,"admin.settings.pauseModeHint":`Как определяется перерыв за день.`,"admin.settings.pauseRules":`Шкала перерывов`,"admin.settings.pauseRulesHint":`Действует для дней без отбитого перерыва: начиная с указанной длины блока (от первого до последнего отбития в блоке) минуты вычитаются.`,"admin.settings.pauseFrom":`с минут`,"admin.settings.pauseTo":`до минут (пусто = без ограничения)`,"admin.settings.pauseMinutes":`минут перерыва`,"admin.settings.pauseActive":`Правило активно`,"admin.settings.pauseAdd":`Добавить правило`,"admin.settings.pauseSave":`Сохранить шкалу перерывов`,"admin.settings.pauseMode.auto":`Отбитый перерыв, иначе шкала`,"admin.settings.pauseMode.punched":`Только отбитые перерывы`,"admin.settings.pauseMode.staffel":`Только шкала перерывов`,"admin.settings.fontPathHint":`Нужен для русского, украинского и китайского; пусто = встроенные шрифты, покрывающие только Latin-1.`,"admin.settings.advanced":`Все настройки экземпляра (технические имена, 1/0 для переключателей)`,"admin.settings.setting.edit_window_days":`Окно правки (дней)`,"admin.settings.setting.quick_round_minutes":`Округление (мин)`,"admin.settings.setting.absence_calc_until_today":`Отсутствия до сегодня`,"admin.settings.setting.absence_deduct_worktime":`Вычитать отсутствия`,"admin.settings.setting.print_limit_days":`Ограничение печати (дней)`,"admin.settings.setting.holiday_country":`Страна праздников`,"admin.settings.setting.default_language":`Язык по умолчанию`,"admin.settings.setting.session_ttl_minutes":`Сессия (минуты)`,"admin.settings.setting.backup_retention_days":`Копии (дней)`,"admin.settings.setting.attendance_list_visible":`Список присутствия`,"admin.settings.setting.timezone":`Часовой пояс`,"admin.settings.saved":`Настройки сохранены.`,"admin.holidays":`Праздничные дни`,"admin.holiday.date":`Дата (ГГГГ-ММ-ДД)`,"admin.holiday.name":`Название`,"holiday.newYear":`Новый год`,"holiday.epiphany":`Богоявление`,"holiday.goodFriday":`Страстная пятница`,"holiday.easterMonday":`Пасхальный понедельник`,"holiday.labourDay":`День труда`,"holiday.ascension":`Вознесение`,"holiday.whitMonday":`Духов понедельник`,"holiday.corpusChristi":`Праздник Тела Христова`,"holiday.nationalDay":`Национальный праздник`,"holiday.germanUnity":`День германского единства`,"holiday.assumption":`Успение Богородицы`,"holiday.allSaints":`День всех святых`,"holiday.immaculateConception":`Непорочное зачатие`,"holiday.christmas":`Рождество`,"holiday.boxingDay":`Второй день Рождества`,"admin.holiday.add":`Добавить праздничный день`,"admin.holiday.year":`Год`,"admin.holiday.region":`Регион (необязательно)`,"admin.holiday.empty":`За этот год праздничные дни не занесены.`,"admin.tags":`Пропуска (RFID/NFC)`,"admin.tag.label":`Метка`,"admin.tag.user":`Сотрудник`,"admin.tag.create":`Создать пропуск`,"admin.tag.linkOnce":`Запишите эту ссылку на метку или откройте её на телефоне:`,"admin.tag.delete":`Удалить`,"admin.tag.active":`активен`,"admin.tag.expired":`истёк`,"admin.tag.revoked":`отозван`,"admin.tag.lastUsed":`последнее использование`,"admin.tag.remove":`Удалить окончательно`,"admin.tag.edit":`Изменить`,"admin.tag.reissue":`Новая ссылка`,"admin.tag.editTitle":`Изменение пропуска`,"admin.tag.editHint":`Другой сотрудник или новый срок действия выпускает новую ссылку — выданная ранее ссылка сразу перестаёт работать.`,"admin.tag.validityDays":`Срок действия (дней)`,"admin.tag.oldLinkDead":`Выданная ранее ссылка больше не работает.`,"admin.tag.qrAlt":`QR-код ссылки пропуска`,"admin.tag.empty":`Пропуск ещё не создан.`,"nav.statistics":`Статистика`,"statistics.from":`С`,"statistics.to":`По`,"statistics.employee":`Сотрудник`,"statistics.worked":`Отработано`,"statistics.target":`План`,"statistics.balance":`Баланс`,"statistics.openDays":`Открытые дни`,"statistics.totals":`Все сотрудники`,"scan.title":`Пропуск`,"scan.done":`Отметка для {{name}} в {{time}}`,"scan.failed":`Пропуск не удалось использовать: {{reason}}`,"presence.title":`Присутствие`,"presence.present":`На рабочем месте`,"presence.absent":`Отсутствует`,"presence.tapPin":`Введите ПИН-код, чтобы отметиться`,"presence.cancel":`Отмена`,"presence.updated":`{{name}}: {{state}}`,"presence.disabled":`Киоск-терминал отключён в настройках экземпляра.`,"admin.user.photo":`Фото`,"admin.user.photoTitle":`Фото {{name}}`,"admin.user.photoChoose":`Выбрать изображение`,"admin.user.photoRemove":`Удалить изображение`,"admin.user.photoHint":`PNG, JPEG, WEBP или GIF до 256 КБ. Без изображения показывается заполнитель.`,"admin.corrections":`Корректировка времени`,"corrections.employee":`Сотрудник`,"corrections.previous":`Предыдущий месяц`,"corrections.next":`Следующий месяц`,"corrections.reason":`Причина`,"corrections.reasonHint":`Сохраняется в журнале (аудите)`,"corrections.add":`Добавить отметку или день`,"corrections.addTitle":`Добавить отметку`,"corrections.addHint":`Оставьте «уход» пустым, если не хватает одной отметки`,"corrections.editTitle":`Изменить отметку`,"corrections.remove":`Удалить отметку`,"corrections.date":`Дата`,"corrections.from":`Приход`,"corrections.to":`Уход`,"corrections.direction":`Направление`,"corrections.note":`Заметка`,"corrections.empty":`В этом месяце отметок нет`,"corrections.byAdmin":`добавлено администрацией`,"corrections.history":`История`,"corrections.actor":`Кто`,"corrections.actionCreate":`Добавлено`,"corrections.actionUpdate":`Изменено`,"corrections.actionDelete":`Удалено`,"keypad.backspace":`Удалить`,"admin.settings.branding":`Брендинг компании`,"admin.settings.brandingHint":`Логотип, фоновое изображение и цвет фона этой установки. Экран входа и экраны киоска тоже их показывают.`,"admin.settings.brandLogo":`Выбрать логотип`,"admin.settings.brandBackground":`Выбрать фон`,"admin.brand.imageResized":`Уменьшено для отображения ({{size}}).`,"admin.brand.imageTooLarge":`Даже в уменьшенном виде изображение слишком большое.`,"admin.brand.imageType":`Возможны только PNG, JPEG, WEBP или GIF.`,"admin.brand.imageUnreadable":`Не удалось прочитать изображение.`,"admin.settings.brandColor":`Цвет фона`,"admin.settings.brandColorHint":`Значение в формате Hex, например #1a2b3c; пусто — значение по умолчанию`,"admin.settings.brandColorPresets":`Готовые цвета`,"admin.settings.brandColorDefault":`По умолчанию`,"admin.backup.download":`Скачать`,"admin.backup.restore":`Восстановить`,"admin.backup.restoreTitle":`Восстановить резервную копию`,"admin.backup.restoreConfirm":`Резервная копия {{name}} будет применена при следующем запуске адаптера; текущая база данных сохранится рядом в виде файла. После этого перезапустите инстанс.`,"admin.backup.pendingHint":`{{name}} будет применена при следующем запуске ({{users}} сотрудников, {{entries}} отметок) - перезапустите инстанс.`,"error.backup_invalid":`Этот файл не является резервной копией этого адаптера.`,"admin.settings.brandImageRemove":`Удалить изображение`,"admin.settings.brandColorDefaultHint":`Сбрасывает цвет и изображение фона`,"admin.triggers":`Действия (ioBroker)`,"admin.triggersHint":"Состояние другого адаптера выполняет отметку или меняет присутствие — например, сканер отпечатка, кнопка или дверной контакт. Срабатывает только при изменении значения. В поле значения можно указать `toggle` — тогда срабатывает любое изменение (например, включение и выключение).","admin.trigger.label":`Название`,"admin.trigger.sourceState":`Состояние`,"admin.trigger.mode":`Условие`,"admin.trigger.modeCondition":`Состояние содержит значение`,"admin.trigger.modeUser":`Значение — это сотрудник`,"admin.trigger.condition":`Значение`,"admin.trigger.user":`Сотрудник`,"admin.trigger.action":`Действие`,"admin.trigger.actionPunch":`Отметиться (вход или выход)`,"admin.trigger.actionQuickPunch":`Отметиться с быстрым округлением`,"admin.trigger.actionPresent":`Сделать присутствующим`,"admin.trigger.actionAbsent":`Сделать отсутствующим`,"admin.trigger.cooldown":`Задержка (секунды)`,"admin.trigger.active":`Активно`,"admin.trigger.add":`Добавить действие`,"admin.trigger.lastFired":`Последнее срабатывание`,"admin.trigger.empty":`Действий пока нет.`,"admin.trigger.conditionHint":"Значение или `toggle` — тогда срабатывает любое изменение","admin.settings.automations":`Правила (автоматика)`,"admin.settings.automationsHint":`Что адаптер делает сам: отмечает выход в заданное местное время, сообщает об отсутствующей отметке выхода или напоминает о паузе после слишком долгой работы. Правило срабатывает не чаще одного раза в день на сотрудника.`,"admin.automation.kind":`Тип`,"admin.automation.kindClockIn":`Автоматически отметить приход`,"admin.automation.kindClockOut":`Автоматически отметить выход`,"admin.automation.kindMissingPunch":`Сообщить об отсутствии выхода`,"admin.automation.kindBreakReminder":`Напоминание о паузе`,"admin.automation.at":`Время`,"admin.automation.atHint":`Местное время сотрудника`,"admin.automation.after":`Через (минуты)`,"admin.automation.user":`Сотрудник`,"admin.automation.allUsers":`все сотрудники`,"admin.automation.add":`Добавить правило`,"admin.automation.empty":`Правил пока нет.`,"admin.automation.runs":`Последние срабатывания`,"admin.automation.weekdays":`Дни недели`,"admin.automation.repeat":`Повтор`,"admin.automation.repeatDay":`раз в день`,"admin.automation.repeatWeek":`раз в неделю`,"admin.settings.setting.report_font_path":`Шрифт для PDF`,"presence.workedToday":`Отработано сегодня`,"admin.user.workedTime":`Рабочее время на карточке присутствия`,"admin.user.workedTimeHint":`Показывает на карточке присутствия отработанное сегодня время (например, 1:23). Без отметки там 0:00; без разрешения карточка остаётся с присутствует/отсутствует и именем.`},kw={"absences.create":`Solicitar ausência`,"absences.created":`Ausência solicitada.`,"absences.empty":`Não houve ausências neste ano.`,"absences.from":`De`,"absences.portion":`Fração do dia`,"absences.status":`Status`,"absences.title":`Ausências`,"absences.to":`Para`,"absences.type":`Tipo`,"absences.typeHint":`Código do tipo de ausência, por ex. F para férias`,"admin.backup":`Cópias de segurança`,"admin.backup.create":`Crie backup agora`,"admin.backup.upload":`Enviar cópia`,"admin.backup.uploadHint":`Escolhe uma cópia descarregada (.sqlite) - é verificada e aplicada no próximo arranque.`,"admin.backup.delete":`Eliminar`,"admin.backup.deleteTitle":`Eliminar cópia`,"admin.backup.deleteConfirm":`A cópia {{name}} é eliminada. Isto não pode ser anulado.`,"admin.backup.done":`Backup {{name}} escrito, {{removed}} arquivo(s) antigo(s) removido(s).`,"admin.backup.empty":`Ainda não há backups.`,"admin.backup.retention":`Os backups com mais de {{days}} dias são removidos, o mais recente é sempre mantido.`,"admin.forbidden":`Você não tem permissão para abrir a administração.`,"admin.title":`Administração`,"admin.user.active":`Ativo`,"admin.user.create":`Adicionar funcionário`,"admin.user.empty":`Ainda não há funcionários.`,"admin.user.inactive":`Desativado`,"admin.user.login":`Conecte-se`,"admin.user.name":`Nome`,"admin.user.newPin":`Novo PIN`,"admin.user.password":`Senha`,"admin.user.passwordHint":`Pelo menos 8 caracteres com letras maiúsculas e minúsculas e dígitos.`,"admin.user.pin":`PIN`,"admin.user.pinHint":`4 a 8 dígitos para o terminal`,"admin.user.pinTitle":`PIN do crachá de {{name}}`,"admin.user.roles":`Funções`,"admin.users":`Funcionários`,"app.offline":`Off-line – marcações na fila`,"app.online":`Conectado`,"app.title":`Controle de tempo`,"common.cancel":`Cancelar`,"common.close":`Fechar`,"common.loading":`Carregando…`,"common.none":`–`,"common.refresh":`Atualizar`,"common.retry":`Tentar novamente`,"common.save":`Salvar`,"error.bad_request":`A entrada não foi aceita.`,"error.conflict":`A alteração entra em conflito com os dados existentes.`,"error.csrf_rejected":`A solicitação foi rejeitada por motivos de segurança. Tente novamente.`,"error.invalid_credentials":`O nome de usuário ou a senha não estão corretos.`,"error.locked_out":`Muitas tentativas fracassadas. Por favor, tente novamente mais tarde.`,"error.network_error":`O servidor não está acessível.`,"error.no_session":`Sua sessão expirou, faça login novamente.`,"error.not_found":`Não encontrado.`,"error.permission_denied":`Você não tem permissão para fazer isso.`,"error.report_font_missing":`Este relatório precisa de uma fonte Unicode (report_font_path).`,"error.revision_conflict":`A marcação foi alterada nesse meio tempo, por favor recarregue.`,"error.session_expired":`Sua sessão expirou, faça login novamente.`,"error.unknown_error":`Erro inesperado.`,"error.user_inactive":`Esta conta está desativada.`,"login.failed":`Falha no login`,"login.login":`Nome de usuário`,"login.password":`Senha`,"login.submit":`Entrar`,"login.title":`Entrar`,"month.absence":`Ausência`,"month.balance":`Equilíbrio`,"error.edit_window_closed":`Fora da janela de correção`,"admin.profile.pauseRules":`Regras de pausa próprias`,"admin.profile.pauseRulesHint":`Regras só para este trabalhador: substituem a regra da empresa com o mesmo «a partir de minutos». Sem regras próprias aplica-se a escala da empresa.`,"report.csv":`Dados brutos (CSV)`,"month.edit":`Corrigir`,"month.editTitle":`Corrigir picagens · {{date}}`,"month.editHint":`Só dentro da janela de correção - os dias mais antigos são alterados pela administração.`,"month.time":`Hora`,"month.direction":`Direção`,"month.directionIn":`Entrada`,"month.directionOut":`Saída`,"month.addPunch":`Adicionar picagem`,"month.pause":`Pausa`,"month.paidBreak":`dos quais pago`,"month.empty":`Não há dias neste mês.`,"month.holiday":`Feriado`,"month.months":`Meses do ano`,"month.next":`Próximo mês`,"month.open":`em aberto`,"month.previous":`Mês anterior`,"month.target":`Alvo`,"month.title":`Mês`,"month.worked":`Trabalhado`,"nav.absences":`Ausências`,"nav.dashboard":`Marcação`,"nav.logout":`sair`,"nav.menu":`Menu`,"nav.month":`Mês`,"nav.profile":`Perfil`,"nav.reports":`Relatórios`,"nav.sync":`Sincronização`,"profile.changePassword":`Alterar a senha`,"profile.changed":`Senha alterada, faça login novamente.`,"profile.language":`Linguagem`,"profile.newPassword":`Nova Senha`,"profile.roles":`Permissões`,"profile.title":`Perfil`,"profile.user":`Usuário`,"punch.balance":`Saldo hoje`,"punch.closed":`Não marcado`,"punch.in":`Marcar entrada`,"punch.last":`Última marcação {{time}}`,"punch.note":`Observação`,"punch.now":`Marcar`,"punch.open":`Marcado desde {{time}}`,"punch.out":`Marcar saída`,"punch.queued":`Salvo off-line – será enviado automaticamente`,"punch.quick":`Marcação rápida`,"punch.sent":`Marcação guardada ({{time}})`,"punch.target":`Objetivo hoje`,"punch.worked":`Trabalhado hoje`,"report.failed":`Não foi possível criar a instrução.`,"report.pdf":`PDF`,"report.xls":`Excel`,"reports.empty":`Não há dados para este período.`,"reports.monthTotals":`Totais do mês`,"reports.overtime":`Horas extra`,"reports.paidOut":`Pago: {{minutes}}`,"reports.title":`Relatórios`,"reports.vacation":`Férias (tiradas/direito)`,"reports.year":`Ano`,"reports.yearTotals":`Totais do ano`,"sync.accept":`Mantenha o valor do servidor`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Conflitos abertos`,"sync.dismiss":`Descartar`,"sync.done":`Enviado: {{accepted}}, duplicatas: {{duplicates}}, conflitos: {{conflicts}}`,"sync.empty":`Sem conflitos abertos.`,"sync.flush":`Enviar agora`,"sync.none":`Nada para enviar.`,"sync.pending":`{{count}} marcação(ões) na fila`,"sync.permission":`Você não tem permissão para resolver conflitos.`,"sync.resolved":`Conflito resolvido.`,"sync.title":`Sincronização`,"terminal.title":`Terminal`,"terminal.deviceToken":`Token do dispositivo`,"terminal.connect":`Ligar`,"terminal.badge":`Cartão`,"terminal.noPin":`Não é necessário PIN neste terminal.`,"terminal.pin":`PIN`,"terminal.select":`Escolha o nome`,"terminal.disabled":`O terminal está desligado nas configurações do adaptador.`,"admin.terminals":`Terminais`,"admin.terminal.name":`Nome`,"admin.terminal.location":`Localização`,"admin.terminal.pinRequired":`Os funcionários precisam do seu PIN`,"admin.terminal.create":`Criar terminal`,"admin.terminal.tokenOnce":`Copie agora o token do dispositivo — é guardado apenas como hash e mostrado uma única vez:`,"admin.terminal.url":`Abra este endereço no dispositivo do quiosque:`,"admin.terminal.revoke":`Revogar`,"admin.terminal.revoked":`revogado`,"admin.terminal.users":`Funcionários`,"admin.terminal.usersHint":`Sem seleção, todos os funcionários aparecem no terminal.`,"admin.terminal.usersAll":`todos os funcionários`,"admin.terminal.empty":`Ainda não foi criado nenhum terminal.`,"admin.terminal.confirmRevoke":`Revogar «{{name}}»? O token do dispositivo deixa de funcionar imediatamente.`,"admin.settings":`Configurações`,"admin.settings.fontPath":`Ficheiro de tipo de letra Unicode para os extratos PDF (.ttf/.otf)`,"admin.user.profile":`Perfil de trabalho`,"admin.user.profileTitle":`Perfil de trabalho · {{name}}`,"admin.profile.percent":`Grau de ocupação (%)`,"admin.profile.weeklyHours":`Horas semanais a 100 %`,"admin.profile.workdays":`Dias de trabalho`,"admin.profile.overtimeModel":`Modelo de horas extra`,"admin.profile.model.monthly":`Mensal`,"admin.profile.model.yearly":`Anual`,"admin.profile.model.cumulative":`Cumulativo`,"admin.profile.vacationPerYear":`Dias de férias por ano`,"admin.profile.vacationCarryover":`Férias transitadas (dias)`,"admin.profile.overtimeCarryover":`Horas extra transitadas (horas)`,"admin.profile.vorholzeitPerYear":`«Vorholzeit» por ano (horas)`,"admin.profile.pausePaid":`Minutos de pausa pagos por dia`,"admin.profile.pausePaidHint":`Esses minutos da pausa contam como tempo de trabalho (0 = a pausa não é paga).`,"admin.settings.pauseMode":`Pausas`,"admin.settings.pauseModeTitle":`Regra de pausas`,"admin.settings.pauseModeHint":`Como a pausa de um dia é determinada.`,"admin.settings.pauseRules":`Escala de pausas`,"admin.settings.pauseRulesHint":`Aplica-se aos dias sem pausa registada: a partir da duração indicada (do primeiro ao último registo de um bloco) os minutos são descontados.`,"admin.settings.pauseFrom":`de minutos`,"admin.settings.pauseTo":`até minutos (vazio = sem fim)`,"admin.settings.pauseMinutes":`minutos de pausa`,"admin.settings.pauseActive":`Regra ativa`,"admin.settings.pauseAdd":`Adicionar regra`,"admin.settings.pauseSave":`Guardar escala de pausas`,"admin.settings.pauseMode.auto":`Pausa registada, senão a tabela`,"admin.settings.pauseMode.punched":`Apenas pausas registadas`,"admin.settings.pauseMode.staffel":`Apenas a tabela de pausas`,"admin.settings.fontPathHint":`Necessário para russo, ucraniano e chinês; vazio = tipos de letra incorporados, que só cobrem Latin-1.`,"admin.settings.advanced":`Todas as configurações da instância (nomes técnicos, 1/0 para interruptores)`,"admin.settings.setting.edit_window_days":`Janela de edição (dias)`,"admin.settings.setting.quick_round_minutes":`Arredondamento (min)`,"admin.settings.setting.absence_calc_until_today":`Ausências até hoje`,"admin.settings.setting.absence_deduct_worktime":`Deduzir ausências`,"admin.settings.setting.print_limit_days":`Limite de impressão (dias)`,"admin.settings.setting.holiday_country":`País dos feriados`,"admin.settings.setting.default_language":`Idioma predefinido`,"admin.settings.setting.session_ttl_minutes":`Sessão (minutos)`,"admin.settings.setting.backup_retention_days":`Cópias (dias)`,"admin.settings.setting.attendance_list_visible":`Lista de presenças`,"admin.settings.setting.timezone":`Fuso horário`,"admin.settings.saved":`Configurações guardadas.`,"admin.holidays":`Feriados`,"admin.holiday.date":`Data (AAAA-MM-DD)`,"admin.holiday.name":`Nome`,"holiday.newYear":`Ano Novo`,"holiday.epiphany":`Dia de Reis`,"holiday.goodFriday":`Sexta-feira Santa`,"holiday.easterMonday":`Segunda-feira de Páscoa`,"holiday.labourDay":`Dia do Trabalhador`,"holiday.ascension":`Dia da Ascensão`,"holiday.whitMonday":`Segunda-feira de Pentecostes`,"holiday.corpusChristi":`Corpo de Deus`,"holiday.nationalDay":`Dia nacional`,"holiday.germanUnity":`Dia da Unidade Alemã`,"holiday.assumption":`Assunção de Nossa Senhora`,"holiday.allSaints":`Dia de Todos os Santos`,"holiday.immaculateConception":`Imaculada Conceição`,"holiday.christmas":`Natal`,"holiday.boxingDay":`Segundo dia de Natal`,"admin.holiday.add":`Adicionar feriado`,"admin.holiday.year":`Ano`,"admin.holiday.region":`Região (opcional)`,"admin.holiday.empty":`Não há feriados registados para este ano.`,"admin.tags":`Cartões (RFID/NFC)`,"admin.tag.label":`Rótulo`,"admin.tag.user":`Funcionário`,"admin.tag.create":`Criar cartão`,"admin.tag.linkOnce":`Escreva este link no cartão ou abra-o no telemóvel:`,"admin.tag.delete":`Eliminar`,"admin.tag.active":`ativo`,"admin.tag.expired":`expirado`,"admin.tag.revoked":`revogado`,"admin.tag.lastUsed":`último uso`,"admin.tag.remove":`Remover definitivamente`,"admin.tag.edit":`Editar`,"admin.tag.reissue":`Nova ligação`,"admin.tag.editTitle":`Editar crachá`,"admin.tag.editHint":`Outro funcionário ou uma nova validade emite uma nova ligação — a ligação anterior deixa de funcionar imediatamente.`,"admin.tag.validityDays":`Validade (dias)`,"admin.tag.oldLinkDead":`A ligação anterior já não funciona.`,"admin.tag.qrAlt":`Código QR da ligação do crachá`,"admin.tag.empty":`Ainda não foi criado nenhum cartão.`,"nav.statistics":`Estatísticas`,"statistics.from":`De`,"statistics.to":`Até`,"statistics.employee":`Funcionário`,"statistics.worked":`Trabalhado`,"statistics.target":`Objetivo`,"statistics.balance":`Saldo`,"statistics.openDays":`Dias abertos`,"statistics.totals":`Todos os funcionários`,"scan.title":`Cartão`,"scan.done":`Registado para {{name}} às {{time}}`,"scan.failed":`Não foi possível usar o cartão: {{reason}}`,"presence.title":`Presença`,"presence.present":`Presente`,"presence.absent":`Ausente`,"presence.tapPin":`Introduza o PIN para registar a entrada ou a saída`,"presence.cancel":`Cancelar`,"presence.updated":`{{name}} está agora {{state}}`,"presence.disabled":`O terminal de quiosque está desligado nas definições da instância.`,"admin.user.photo":`Fotografia`,"admin.user.photoTitle":`Fotografia de {{name}}`,"admin.user.photoChoose":`Escolher imagem`,"admin.user.photoRemove":`Remover imagem`,"admin.user.photoHint":`PNG, JPEG, WEBP ou GIF até 256 KB. Sem imagem é mostrado o marcador.`,"admin.corrections":`Correções de tempo`,"corrections.employee":`Colaborador`,"corrections.previous":`Mês anterior`,"corrections.next":`Mês seguinte`,"corrections.reason":`Motivo`,"corrections.reasonHint":`Fica registado no histórico (auditoria)`,"corrections.add":`Adicionar marcação ou dia`,"corrections.addTitle":`Adicionar marcação`,"corrections.addHint":`Deixe «saída» vazio quando falta apenas uma marcação`,"corrections.editTitle":`Alterar marcação`,"corrections.remove":`Eliminar marcação`,"corrections.date":`Data`,"corrections.from":`Entrada`,"corrections.to":`Saída`,"corrections.direction":`Direção`,"corrections.note":`Nota`,"corrections.empty":`Sem marcações neste mês`,"corrections.byAdmin":`adicionado pela administração`,"corrections.history":`Histórico`,"corrections.actor":`Por`,"corrections.actionCreate":`Adicionado`,"corrections.actionUpdate":`Alterado`,"corrections.actionDelete":`Excluído`,"keypad.backspace":`Apagar`,"admin.settings.branding":`Marca da empresa`,"admin.settings.brandingHint":`Logotipo, imagem de fundo e cor de fundo desta instalação. O ecrã de início de sessão e os ecrãs de quiosque também os mostram.`,"admin.settings.brandLogo":`Escolher logotipo`,"admin.settings.brandBackground":`Escolher fundo`,"admin.brand.imageResized":`Reduzida para visualização ({{size}}).`,"admin.brand.imageTooLarge":`Mesmo reduzida, a imagem continua demasiado grande.`,"admin.brand.imageType":`Só são possíveis PNG, JPEG, WEBP ou GIF.`,"admin.brand.imageUnreadable":`Não foi possível ler a imagem.`,"admin.settings.brandColor":`Cor do fundo`,"admin.settings.brandColorHint":`Valor hexadecimal como #1a2b3c, vazio para o valor predefinido`,"admin.settings.brandColorPresets":`Cores sugeridas`,"admin.settings.brandColorDefault":`Padrão`,"admin.backup.download":`Descarregar`,"admin.backup.restore":`Restaurar`,"admin.backup.restoreTitle":`Restaurar uma cópia de segurança`,"admin.backup.restoreConfirm":`A cópia de segurança {{name}} é aplicada no próximo arranque do adaptador; a base de dados atual fica guardada ao lado como ficheiro. Reinicie a instância depois disso.`,"admin.backup.pendingHint":`{{name}} é aplicada no próximo arranque ({{users}} colaboradores, {{entries}} marcações) - reinicie a instância.`,"error.backup_invalid":`Esse ficheiro não é uma cópia de segurança deste adaptador.`,"admin.settings.brandImageRemove":`Remover imagem`,"admin.settings.brandColorDefaultHint":`Repõe a cor e a imagem de fundo`,"admin.triggers":`Ações (ioBroker)`,"admin.triggersHint":"Um estado de outro adaptador marca o ponto ou define a presença — um leitor de impressão digital, um botão ou um contacto de porta. Só dispara quando o valor muda. Como valor pode escrever `toggle`: assim dispara em qualquer mudança (por exemplo ligar e desligar).","admin.trigger.label":`Descrição`,"admin.trigger.sourceState":`Estado`,"admin.trigger.mode":`Disparo`,"admin.trigger.modeCondition":`O estado tem o valor`,"admin.trigger.modeUser":`O valor é o funcionário`,"admin.trigger.condition":`Valor`,"admin.trigger.user":`Funcionário`,"admin.trigger.action":`Ação`,"admin.trigger.actionPunch":`Marcar (entrada ou saída)`,"admin.trigger.actionQuickPunch":`Marcar com arredondamento rápido`,"admin.trigger.actionPresent":`Definir como presente`,"admin.trigger.actionAbsent":`Definir como ausente`,"admin.trigger.cooldown":`Bloqueio (segundos)`,"admin.trigger.active":`Ativo`,"admin.trigger.add":`Adicionar ação`,"admin.trigger.lastFired":`Último disparo`,"admin.trigger.empty":`Ainda não há ações.`,"admin.trigger.conditionHint":"Valor ou `toggle` para disparar em qualquer mudança","admin.settings.automations":`Regras (automáticas)`,"admin.settings.automationsHint":`O que o adaptador faz sozinho: marcar a saída à hora local definida, avisar de uma saída em falta ou lembrar depois de trabalhar demasiado tempo sem pausa. Cada regra corre no máximo uma vez por funcionário e dia.`,"admin.automation.kind":`Tipo`,"admin.automation.kindClockIn":`Marcar entrada automaticamente`,"admin.automation.kindClockOut":`Marcar saída automaticamente`,"admin.automation.kindMissingPunch":`Avisar de saída em falta`,"admin.automation.kindBreakReminder":`Lembrete de pausa`,"admin.automation.at":`Hora`,"admin.automation.atHint":`Hora local do funcionário`,"admin.automation.after":`Após (minutos)`,"admin.automation.user":`Funcionário`,"admin.automation.allUsers":`todos os funcionários`,"admin.automation.add":`Adicionar regra`,"admin.automation.empty":`Ainda não há regras.`,"admin.automation.runs":`Últimas execuções`,"admin.automation.weekdays":`Dias da semana`,"admin.automation.repeat":`Repetição`,"admin.automation.repeatDay":`uma vez por dia`,"admin.automation.repeatWeek":`uma vez por semana`,"admin.settings.setting.report_font_path":`Fonte para PDF`,"presence.workedToday":`Trabalhado hoje`,"admin.user.workedTime":`Tempo de trabalho no cartão de presença`,"admin.user.workedTimeHint":`Mostra no cartão de presença o tempo trabalhado hoje (por exemplo, 1:23). Sem marcação lê-se 0:00; sem esta permissão o cartão mantém presente/ausente e o nome.`},Aw={"absences.create":`Afwezigheid aanvragen`,"absences.created":`Afwezigheid aangevraagd.`,"absences.empty":`Geen afwezigheden dit jaar.`,"absences.from":`Van`,"absences.portion":`Deel van de dag`,"absences.status":`Status`,"absences.title":`Afwezigheden`,"absences.to":`Naar`,"absences.type":`Type`,"absences.typeHint":`Code van de verzuimsoort, b.v. F voor vakantie`,"admin.backup":`Back-ups`,"admin.backup.create":`Maak nu een back-up`,"admin.backup.upload":`Back-up uploaden`,"admin.backup.uploadHint":`Kies een gedownloade back-up (.sqlite) - die wordt gecontroleerd en bij de volgende start toegepast.`,"admin.backup.delete":`Verwijderen`,"admin.backup.deleteTitle":`Back-up verwijderen`,"admin.backup.deleteConfirm":`De back-up {{name}} wordt verwijderd. Dit kan niet ongedaan worden gemaakt.`,"admin.backup.done":`Back-up van {{name}} geschreven, {{removed}} oude bestand(en) verwijderd.`,"admin.backup.empty":`Nog geen back-ups.`,"admin.backup.retention":`Back-ups ouder dan {{days}} dagen worden verwijderd, de nieuwste wordt altijd bewaard.`,"admin.forbidden":`U mag de administratie niet openen.`,"admin.title":`Administratie`,"admin.user.active":`Actief`,"admin.user.create":`Medewerker toevoegen`,"admin.user.empty":`Nog geen medewerkers.`,"admin.user.inactive":`Gedeactiveerd`,"admin.user.login":`Login`,"admin.user.name":`Naam`,"admin.user.newPin":`Nieuwe pincode`,"admin.user.password":`Wachtwoord`,"admin.user.passwordHint":`Minimaal 8 tekens met hoofdletters, kleine letters en cijfers.`,"admin.user.pin":`PIN`,"admin.user.pinHint":`4 tot 8 cijfers voor de terminal`,"admin.user.pinTitle":`Badge-pincode voor {{name}}`,"admin.user.roles":`Rollen`,"admin.users":`Medewerkers`,"app.offline":`Offline – stoten worden in de wachtrij geplaatst`,"app.online":`Aangesloten`,"app.title":`Tijdregistratie`,"common.cancel":`Annuleren`,"common.close":`Dichtbij`,"common.loading":`Laden…`,"common.none":`–`,"common.refresh":`Vernieuwen`,"common.retry":`Opnieuw proberen`,"common.save":`Redden`,"error.bad_request":`De invoer werd niet geaccepteerd.`,"error.conflict":`De wijziging is in strijd met bestaande gegevens.`,"error.csrf_rejected":`Het verzoek is om veiligheidsredenen afgewezen. Probeer het opnieuw.`,"error.invalid_credentials":`Gebruikersnaam of wachtwoord zijn niet correct.`,"error.locked_out":`Te veel mislukte pogingen. Probeer het later opnieuw.`,"error.network_error":`De server is niet bereikbaar.`,"error.no_session":`Uw sessie is verlopen. Meld u opnieuw aan.`,"error.not_found":`Niet gevonden.`,"error.permission_denied":`Dit is niet toegestaan.`,"error.report_font_missing":`Dit rapport heeft een Unicode-lettertype nodig (report_font_path).`,"error.revision_conflict":`De punch is in de tussentijd gewijzigd. Herlaad alstublieft.`,"error.session_expired":`Uw sessie is verlopen. Meld u opnieuw aan.`,"error.unknown_error":`Onverwachte fout.`,"error.user_inactive":`Dit account is gedeactiveerd.`,"login.failed":`Aanmelden mislukt`,"login.login":`Gebruikersnaam`,"login.password":`Wachtwoord`,"login.submit":`Log in`,"login.title":`Log in`,"month.absence":`Afwezigheid`,"month.balance":`Evenwicht`,"error.edit_window_closed":`Buiten het correctievenster`,"admin.profile.pauseRules":`Eigen pauzeregels`,"admin.profile.pauseRulesHint":`Regels alleen voor deze medewerker: ze vervangen de bedrijfsregel met dezelfde “vanaf minuten”. Zonder eigen regels geldt de bedrijfsstaffel.`,"report.csv":`Ruwe gegevens (CSV)`,"month.edit":`Corrigeren`,"month.editTitle":`Stempels corrigeren · {{date}}`,"month.editHint":`Alleen binnen het correctievenster - oudere dagen worden door de administratie gewijzigd.`,"month.time":`Tijd`,"month.direction":`Richting`,"month.directionIn":`Klok in`,"month.directionOut":`Klok uit`,"month.addPunch":`Stempel toevoegen`,"month.pause":`Pauze`,"month.paidBreak":`waarvan betaald`,"month.empty":`Geen dagen in deze maand.`,"month.holiday":`Vakantie`,"month.months":`Maanden van het jaar`,"month.next":`Volgende maand`,"month.open":`open`,"month.previous":`Vorige maand`,"month.target":`Doel`,"month.title":`Maand`,"month.worked":`Werkte`,"nav.absences":`Afwezigheden`,"nav.dashboard":`Klokken`,"nav.logout":`Meld u af`,"nav.menu":`Menu`,"nav.month":`Maand`,"nav.profile":`Profiel`,"nav.reports":`Rapporten`,"nav.sync":`Synchronisatie`,"profile.changePassword":`Wachtwoord wijzigen`,"profile.changed":`Wachtwoord gewijzigd, log opnieuw in.`,"profile.language":`Taal`,"profile.newPassword":`Nieuw wachtwoord`,"profile.roles":`Machtigingen`,"profile.title":`Profiel`,"profile.user":`Gebruiker`,"punch.balance":`Saldo vandaag`,"punch.closed":`Niet ingeklokt`,"punch.in":`Inklokken`,"punch.last":`Laatste kloktijd {{time}}`,"punch.note":`Opmerking`,"punch.now":`Klokken`,"punch.open":`Ingeklokt sinds {{time}}`,"punch.out":`Uitklokken`,"punch.queued":`Offline opgeslagen – het wordt automatisch verzonden`,"punch.quick":`Snel klokken`,"punch.sent":`Kloktijd opgeslagen ({{time}})`,"punch.target":`Doel vandaag`,"punch.worked":`Vandaag gewerkt`,"report.failed":`De verklaring kan niet worden gemaakt.`,"report.pdf":`Pdf`,"report.xls":`Excel`,"reports.empty":`Geen gegevens voor deze periode.`,"reports.monthTotals":`Maandtotalen`,"reports.overtime":`Overwerk`,"reports.paidOut":`Uitbetaald: {{minutes}}`,"reports.title":`Rapporten`,"reports.vacation":`Vakantie (opgenomen / recht)`,"reports.year":`Jaar`,"reports.yearTotals":`Jaartotalen`,"sync.accept":`Behoud de serverwaarde`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Openlijke conflicten`,"sync.dismiss":`Weggooien`,"sync.done":`Verzonden: {{accepted}}, duplicaten: {{duplicates}}, conflicten: {{conflicts}}`,"sync.empty":`Geen openlijke conflicten.`,"sync.flush":`Verstuur nu`,"sync.none":`Niets om te verzenden.`,"sync.pending":`{{count}} punch(es) wachtend`,"sync.permission":`Je mag geen conflicten oplossen.`,"sync.resolved":`Conflict opgelost.`,"sync.title":`Synchronisatie`,"terminal.title":`Terminal`,"terminal.deviceToken":`Apparaattoken`,"terminal.connect":`Verbinden`,"terminal.badge":`Pas`,"terminal.noPin":`Op dit terminal is geen pincode nodig.`,"terminal.pin":`Pincode`,"terminal.select":`Kies uw naam`,"terminal.disabled":`De terminal is uitgeschakeld in de adapterinstellingen.`,"admin.terminals":`Terminals`,"admin.terminal.name":`Naam`,"admin.terminal.location":`Locatie`,"admin.terminal.pinRequired":`Medewerkers hebben hun pincode nodig`,"admin.terminal.create":`Terminal aanmaken`,"admin.terminal.tokenOnce":`Kopieer het apparaattoken nu — het wordt alleen als hash opgeslagen en maar één keer getoond:`,"admin.terminal.url":`Open dit adres op het kioskapparaat:`,"admin.terminal.revoke":`Intrekken`,"admin.terminal.revoked":`ingetrokken`,"admin.terminal.users":`Medewerkers`,"admin.terminal.usersHint":`Zonder selectie toont het terminal alle medewerkers.`,"admin.terminal.usersAll":`alle medewerkers`,"admin.terminal.empty":`Nog geen terminal aangemaakt.`,"admin.terminal.confirmRevoke":`«{{name}}» intrekken? Het apparaattoken werkt daarna direct niet meer.`,"admin.settings":`Instellingen`,"admin.settings.fontPath":`Unicode-lettertypebestand voor PDF-overzichten (.ttf/.otf)`,"admin.user.profile":`Werkprofiel`,"admin.user.profileTitle":`Werkprofiel · {{name}}`,"admin.profile.percent":`Deeltijdfactor (%)`,"admin.profile.weeklyHours":`Weekuren bij 100 %`,"admin.profile.workdays":`Werkdagen`,"admin.profile.overtimeModel":`Overurenmodel`,"admin.profile.model.monthly":`Maandelijks`,"admin.profile.model.yearly":`Jaarlijks`,"admin.profile.model.cumulative":`Cumulatief`,"admin.profile.vacationPerYear":`Vakantiedagen per jaar`,"admin.profile.vacationCarryover":`Overgedragen vakantie (dagen)`,"admin.profile.overtimeCarryover":`Overgedragen overuren (uren)`,"admin.profile.vorholzeitPerYear":`“Vorholzeit” per jaar (uren)`,"admin.profile.pausePaid":`Betaalde pauzeminuten per dag`,"admin.profile.pausePaidHint":`Zoveel minuten van de pauze tellen als werktijd (0 = de pauze wordt niet betaald).`,"admin.settings.pauseMode":`Pauzes`,"admin.settings.pauseModeTitle":`Pauzeregel`,"admin.settings.pauseModeHint":`Hoe de pauze van een dag wordt bepaald.`,"admin.settings.pauseRules":`Pauzestaffel`,"admin.settings.pauseRulesHint":`Geldt voor dagen zonder geklokte pauze: vanaf de aangegeven blokduur (eerste tot laatste stempel van een blok) worden de minuten afgetrokken.`,"admin.settings.pauseFrom":`vanaf minuten`,"admin.settings.pauseTo":`tot minuten (leeg = zonder einde)`,"admin.settings.pauseMinutes":`pauzeminuten`,"admin.settings.pauseActive":`Regel actief`,"admin.settings.pauseAdd":`Regel toevoegen`,"admin.settings.pauseSave":`Pauzestaffel opslaan`,"admin.settings.pauseMode.auto":`Geklokte pauze, anders de staffel`,"admin.settings.pauseMode.punched":`Alleen geklokte pauzes`,"admin.settings.pauseMode.staffel":`Alleen de pauzestaffel`,"admin.settings.fontPathHint":`Nodig voor Russisch, Oekraïens en Chinees; leeg = ingebouwde lettertypen die alleen Latin-1 dekken.`,"admin.settings.advanced":`Alle instellingen van de instantie (technische namen, 1/0 voor schakelaars)`,"admin.settings.setting.edit_window_days":`Bewerkingsvenster (dagen)`,"admin.settings.setting.quick_round_minutes":`Afronding (min)`,"admin.settings.setting.absence_calc_until_today":`Afwezigheid tot vandaag`,"admin.settings.setting.absence_deduct_worktime":`Afwezigheid aftrekken`,"admin.settings.setting.print_limit_days":`Afdrukgrens (dagen)`,"admin.settings.setting.holiday_country":`Land van feestdagen`,"admin.settings.setting.default_language":`Standaardtaal`,"admin.settings.setting.session_ttl_minutes":`Sessie (minuten)`,"admin.settings.setting.backup_retention_days":`Back-ups (dagen)`,"admin.settings.setting.attendance_list_visible":`Aanwezigheidslijst`,"admin.settings.setting.timezone":`Tijdzone`,"admin.settings.saved":`Instellingen opgeslagen.`,"admin.holidays":`Feestdagen`,"admin.holiday.date":`Datum (JJJJ-MM-DD)`,"admin.holiday.name":`Naam`,"holiday.newYear":`Nieuwjaar`,"holiday.epiphany":`Driekoningen`,"holiday.goodFriday":`Goede Vrijdag`,"holiday.easterMonday":`Tweede Paasdag`,"holiday.labourDay":`Dag van de Arbeid`,"holiday.ascension":`Hemelvaartsdag`,"holiday.whitMonday":`Tweede Pinksterdag`,"holiday.corpusChristi":`Sacramentsdag`,"holiday.nationalDay":`Nationale feestdag`,"holiday.germanUnity":`Dag van de Duitse eenheid`,"holiday.assumption":`Maria-Tenhemelopneming`,"holiday.allSaints":`Allerheiligen`,"holiday.immaculateConception":`Onbevlekte Ontvangenis`,"holiday.christmas":`Eerste Kerstdag`,"holiday.boxingDay":`Tweede Kerstdag`,"admin.holiday.add":`Feestdag toevoegen`,"admin.holiday.year":`Jaar`,"admin.holiday.region":`Regio (optioneel)`,"admin.holiday.empty":`Voor dit jaar is geen feestdag vastgelegd.`,"admin.tags":`Passen (RFID/NFC)`,"admin.tag.label":`Label`,"admin.tag.user":`Medewerker`,"admin.tag.create":`Pas aanmaken`,"admin.tag.linkOnce":`Schrijf deze link op de tag of open hem op de telefoon:`,"admin.tag.delete":`Verwijderen`,"admin.tag.active":`actief`,"admin.tag.expired":`verlopen`,"admin.tag.revoked":`ingetrokken`,"admin.tag.lastUsed":`laatst gebruikt`,"admin.tag.remove":`Definitief verwijderen`,"admin.tag.edit":`Bewerken`,"admin.tag.reissue":`Nieuwe link`,"admin.tag.editTitle":`Badge bewerken`,"admin.tag.editHint":`Een andere medewerker of een nieuwe geldigheid geeft een nieuwe link — de eerder uitgegeven link werkt onmiddellijk niet meer.`,"admin.tag.validityDays":`Geldigheid (dagen)`,"admin.tag.oldLinkDead":`De eerder uitgegeven link werkt niet meer.`,"admin.tag.qrAlt":`QR-code van de badge-link`,"admin.tag.empty":`Nog geen pas aangemaakt.`,"nav.statistics":`Statistieken`,"statistics.from":`Van`,"statistics.to":`Tot`,"statistics.employee":`Medewerker`,"statistics.worked":`Gewerkt`,"statistics.target":`Doel`,"statistics.balance":`Saldo`,"statistics.openDays":`Open dagen`,"statistics.totals":`Alle medewerkers`,"scan.title":`Pasje`,"scan.done":`Gestempeld voor {{name}} om {{time}}`,"scan.failed":`De pas kon niet worden gebruikt: {{reason}}`,"presence.title":`Aanwezigheid`,"presence.present":`Aanwezig`,"presence.absent":`Afwezig`,"presence.tapPin":`Voer de pincode in om in of uit te klokken`,"presence.cancel":`Annuleren`,"presence.updated":`{{name}} is nu {{state}}`,"presence.disabled":`De kioskterminal is uitgeschakeld in de instellingen van de instantie.`,"admin.user.photo":`Foto`,"admin.user.photoTitle":`Foto van {{name}}`,"admin.user.photoChoose":`Afbeelding kiezen`,"admin.user.photoRemove":`Afbeelding verwijderen`,"admin.user.photoHint":`PNG, JPEG, WEBP of GIF tot 256 KB. Zonder afbeelding wordt de plaatshouder getoond.`,"admin.corrections":`Tijdcorrecties`,"corrections.employee":`Medewerker`,"corrections.previous":`Vorige maand`,"corrections.next":`Volgende maand`,"corrections.reason":`Reden`,"corrections.reasonHint":`Wordt in het auditlogboek vastgelegd`,"corrections.add":`Stempel of dag toevoegen`,"corrections.addTitle":`Stempel toevoegen`,"corrections.addHint":`Laat “uit” leeg als er maar één stempel ontbreekt`,"corrections.editTitle":`Stempel wijzigen`,"corrections.remove":`Stempel verwijderen`,"corrections.date":`Datum`,"corrections.from":`In`,"corrections.to":`Uit`,"corrections.direction":`Richting`,"corrections.note":`Notitie`,"corrections.empty":`Geen stempels in deze maand`,"corrections.byAdmin":`toegevoegd door de administratie`,"corrections.history":`Geschiedenis`,"corrections.actor":`Door`,"corrections.actionCreate":`Toegevoegd`,"corrections.actionUpdate":`Gewijzigd`,"corrections.actionDelete":`Verwijderd`,"keypad.backspace":`Wissen`,"admin.settings.branding":`Bedrijfshuisstijl`,"admin.settings.brandingHint":`Logo, achtergrondafbeelding en achtergrondkleur van deze installatie. Het inlogscherm en de kioskschermen tonen ze ook.`,"admin.settings.brandLogo":`Logo kiezen`,"admin.settings.brandBackground":`Achtergrond kiezen`,"admin.brand.imageResized":`Verkleind voor weergave ({{size}}).`,"admin.brand.imageTooLarge":`Ook verkleind is de afbeelding nog te groot.`,"admin.brand.imageType":`Alleen PNG, JPEG, WEBP of GIF zijn mogelijk.`,"admin.brand.imageUnreadable":`De afbeelding kon niet worden gelezen.`,"admin.settings.brandColor":`Achtergrondkleur`,"admin.settings.brandColorHint":`Hex-waarde zoals #1a2b3c, leeg voor de standaard`,"admin.settings.brandColorPresets":`Voorgestelde kleuren`,"admin.settings.brandColorDefault":`Standaard`,"admin.backup.download":`Downloaden`,"admin.backup.restore":`Terugzetten`,"admin.backup.restoreTitle":`Back-up terugzetten`,"admin.backup.restoreConfirm":`De back-up {{name}} wordt bij de volgende start van de adapter toegepast; de huidige database blijft als bestand ernaast bewaard. Start de instantie daarna opnieuw.`,"admin.backup.pendingHint":`{{name}} wordt bij de volgende start toegepast ({{users}} medewerkers, {{entries}} stempels) - start de instantie opnieuw.`,"error.backup_invalid":`Dat bestand is geen back-up van deze adapter.`,"admin.settings.brandImageRemove":`Afbeelding verwijderen`,"admin.settings.brandColorDefaultHint":`Zet de achtergrondkleur en de achtergrondafbeelding terug`,"admin.triggers":`Acties (ioBroker)`,"admin.triggersHint":"Een state van een andere adapter stempelt of zet de aanwezigheid — een vingerafdruklezer, een knop of een deurcontact. Er wordt alleen uitgevoerd als de waarde verandert. Als waarde kun je `toggle` invullen: dan reageert hij op elke wijziging (bijvoorbeeld aan en weer uit).","admin.trigger.label":`Omschrijving`,"admin.trigger.sourceState":`Status`,"admin.trigger.mode":`Voorwaarde`,"admin.trigger.modeCondition":`State heeft de waarde`,"admin.trigger.modeUser":`Waarde is de medewerker`,"admin.trigger.condition":`Waarde`,"admin.trigger.user":`Medewerker`,"admin.trigger.action":`Actie`,"admin.trigger.actionPunch":`Stempelen (in of uit)`,"admin.trigger.actionQuickPunch":`Stempelen met snelle afronding`,"admin.trigger.actionPresent":`Op aanwezig zetten`,"admin.trigger.actionAbsent":`Op afwezig zetten`,"admin.trigger.cooldown":`Blokkade (seconden)`,"admin.trigger.active":`Actief`,"admin.trigger.add":`Actie toevoegen`,"admin.trigger.lastFired":`Laatst uitgevoerd`,"admin.trigger.empty":`Nog geen acties.`,"admin.trigger.conditionHint":"Waarde of `toggle` om bij elke wijziging te reageren","admin.settings.automations":`Regels (automatisch)`,"admin.settings.automationsHint":`Wat de adapter zelf doet: op de ingestelde lokale tijd uitstempelen, een ontbrekende uitstempeling melden of herinneren na te lang werken zonder pauze. Een regel loopt hooguit één keer per medewerker en dag.`,"admin.automation.kind":`Soort`,"admin.automation.kindClockIn":`Automatisch inklokken`,"admin.automation.kindClockOut":`Automatisch uitstempelen`,"admin.automation.kindMissingPunch":`Ontbrekende uitstempeling melden`,"admin.automation.kindBreakReminder":`Pauzeherinnering`,"admin.automation.at":`Tijd`,"admin.automation.atHint":`Lokale tijd van de medewerker`,"admin.automation.after":`Na (minuten)`,"admin.automation.user":`Medewerker`,"admin.automation.allUsers":`alle medewerkers`,"admin.automation.add":`Regel toevoegen`,"admin.automation.empty":`Nog geen regels.`,"admin.automation.runs":`Laatste uitvoeringen`,"admin.automation.weekdays":`Dagen van de week`,"admin.automation.repeat":`Herhaling`,"admin.automation.repeatDay":`één keer per dag`,"admin.automation.repeatWeek":`één keer per week`,"admin.settings.setting.report_font_path":`Lettertype voor PDF`,"presence.workedToday":`Vandaag gewerkt`,"admin.user.workedTime":`Werktijd op de aanwezigheidskaart`,"admin.user.workedTimeHint":`Toont op de aanwezigheidskaart de vandaag gewerkte tijd (bijvoorbeeld 1:23). Zonder stempeling staat er 0:00; zonder deze vrijgave blijft de kaart bij aanwezig/afwezig en de naam.`},jw={"absences.create":`Demander une absence`,"absences.created":`Absence demandée.`,"absences.empty":`Aucune absence cette année.`,"absences.from":`Depuis`,"absences.portion":`Part du jour`,"absences.status":`Statut`,"absences.title":`Absences`,"absences.to":`À`,"absences.type":`Type`,"absences.typeHint":`Code du type d'absence, par ex. F pour les vacances`,"admin.backup":`Sauvegardes`,"admin.backup.create":`Créer une sauvegarde maintenant`,"admin.backup.upload":`Importer une sauvegarde`,"admin.backup.uploadHint":`Choisir une sauvegarde téléchargée (.sqlite) - elle est vérifiée et appliquée au prochain démarrage.`,"admin.backup.delete":`Supprimer`,"admin.backup.deleteTitle":`Supprimer la sauvegarde`,"admin.backup.deleteConfirm":`La sauvegarde {{name}} est supprimée. Cette action est irréversible.`,"admin.backup.done":`Sauvegarde {{name}} écrite, {{removed}} anciens fichiers supprimés.`,"admin.backup.empty":`Aucune sauvegarde pour l'instant.`,"admin.backup.retention":`Les sauvegardes datant de plus de {{days}}\xA0jours sont supprimées, la plus récente est toujours conservée.`,"admin.forbidden":`Vous n'êtes pas autorisé à ouvrir l'administration.`,"admin.title":`Administration`,"admin.user.active":`Actif`,"admin.user.create":`Ajouter un employé`,"admin.user.empty":`Pas encore d'employés.`,"admin.user.inactive":`Désactivé`,"admin.user.login":`Se connecter`,"admin.user.name":`Nom`,"admin.user.newPin":`Nouveau code PIN`,"admin.user.password":`Mot de passe`,"admin.user.passwordHint":`Au moins 8 caractères avec majuscules, minuscules et chiffres.`,"admin.user.pin":`Code PIN`,"admin.user.pinHint":`4 à 8 chiffres pour le terminal`,"admin.user.pinTitle":`Code PIN du badge de {{name}}`,"admin.user.roles":`Rôles`,"admin.users":`Employés`,"app.offline":`Hors ligne\xA0: les pointages sont mis en file d'attente`,"app.online":`Connecté`,"app.title":`Suivi du temps`,"common.cancel":`Annuler`,"common.close":`Fermer`,"common.loading":`Chargement…`,"common.none":`–`,"common.refresh":`Rafraîchir`,"common.retry":`Réessayer`,"common.save":`Sauvegarder`,"error.bad_request":`La contribution n'a pas été acceptée.`,"error.conflict":`La modification entre en conflit avec les données existantes.`,"error.csrf_rejected":`La demande a été rejetée pour des raisons de sécurité, veuillez réessayer.`,"error.invalid_credentials":`Le nom d'utilisateur ou le mot de passe n'est pas correct.`,"error.locked_out":`Trop de tentatives infructueuses. Veuillez réessayer plus tard.`,"error.network_error":`Le serveur n'est pas accessible.`,"error.no_session":`Votre session a expiré, veuillez vous reconnecter.`,"error.not_found":`Pas trouvé.`,"error.permission_denied":`Vous n'êtes pas autorisé à faire cela.`,"error.report_font_missing":`Ce rapport nécessite une police Unicode (report_font_path).`,"error.revision_conflict":`Le pointage a été modifié entre temps, merci de recharger.`,"error.session_expired":`Votre session a expiré, veuillez vous reconnecter.`,"error.unknown_error":`Erreur inattendue.`,"error.user_inactive":`Ce compte est désactivé.`,"login.failed":`Échec de la connexion`,"login.login":`Nom d'utilisateur`,"login.password":`Mot de passe`,"login.submit":`Se connecter`,"login.title":`Se connecter`,"month.absence":`Absence`,"month.balance":`Équilibre`,"error.edit_window_closed":`Hors de la fenêtre de correction`,"admin.profile.pauseRules":`Règles de pause propres`,"admin.profile.pauseRulesHint":`Règles pour ce collaborateur uniquement : elles remplacent la règle d'entreprise avec le même « à partir de minutes ». Sans règle propre, le barème de l'entreprise s'applique.`,"report.csv":`Données brutes (CSV)`,"month.edit":`Corriger`,"month.editTitle":`Corriger les pointages · {{date}}`,"month.editHint":`Uniquement dans la fenêtre de correction - les jours plus anciens sont modifiés par l'administration.`,"month.time":`Heure`,"month.direction":`Sens`,"month.directionIn":`Entrée`,"month.directionOut":`Sortie`,"month.addPunch":`Ajouter un pointage`,"month.pause":`Pause`,"month.paidBreak":`dont payé`,"month.empty":`Aucun jour ce mois-ci.`,"month.holiday":`Vacances`,"month.months":`Mois de l'année`,"month.next":`Mois prochain`,"month.open":`en cours`,"month.previous":`Mois précédent`,"month.target":`Cible`,"month.title":`Mois`,"month.worked":`A travaillé`,"nav.absences":`Absences`,"nav.dashboard":`Pointage`,"nav.logout":`se déconnecter`,"nav.menu":`Menu`,"nav.month":`Mois`,"nav.profile":`Profil`,"nav.reports":`Rapports`,"nav.sync":`Synchronisation`,"profile.changePassword":`Changer le mot de passe`,"profile.changed":`Mot de passe modifié, veuillez vous reconnecter.`,"profile.language":`Langue`,"profile.newPassword":`Nouveau mot de passe`,"profile.roles":`Autorisations`,"profile.title":`Profil`,"profile.user":`Utilisateur`,"punch.balance":`Solde aujourd'hui`,"punch.closed":`Non pointé`,"punch.in":`Pointer l'arrivée`,"punch.last":`Dernier pointage {{time}}`,"punch.note":`Note`,"punch.now":`Pointer`,"punch.open":`Pointé depuis {{time}}`,"punch.out":`Pointer le départ`,"punch.queued":`Enregistré hors ligne – il sera envoyé automatiquement`,"punch.quick":`Pointage rapide`,"punch.sent":`Pointage enregistré ({{time}})`,"punch.target":`Objectif aujourd'hui`,"punch.worked":`Travaillé aujourd'hui`,"report.failed":`L'instruction n'a pas pu être créée.`,"report.pdf":`PDF`,"report.xls":`Exceller`,"reports.empty":`Aucune donnée pour cette période.`,"reports.monthTotals":`Totaux mensuels`,"reports.overtime":`Heures supplémentaires`,"reports.paidOut":`Payé\xA0:\xA0{{minutes}}`,"reports.title":`Rapports`,"reports.vacation":`Vacances (prises/droites)`,"reports.year":`Année`,"reports.yearTotals":`Totaux annuels`,"sync.accept":`Conserver la valeur du serveur`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Conflits ouverts`,"sync.dismiss":`Jeter`,"sync.done":`Envoyés\xA0: {{accepted}}, doublons\xA0: {{duplicates}}, conflits\xA0: {{conflicts}}`,"sync.empty":`Pas de conflits ouverts.`,"sync.flush":`Envoyer maintenant`,"sync.none":`Rien à envoyer.`,"sync.pending":`{{count}} point(s) en attente`,"sync.permission":`Vous n'êtes pas autorisé à résoudre les conflits.`,"sync.resolved":`Conflit résolu.`,"sync.title":`Synchronisation`,"terminal.title":`Terminal`,"terminal.deviceToken":`Jeton de l'appareil`,"terminal.connect":`Connecter`,"terminal.badge":`Badge`,"terminal.noPin":`Aucun code PIN n'est nécessaire sur ce terminal.`,"terminal.pin":`Code PIN`,"terminal.select":`Choisissez votre nom`,"terminal.disabled":`Le terminal est désactivé dans les paramètres de l'adaptateur.`,"admin.terminals":`Terminaux`,"admin.terminal.name":`Nom`,"admin.terminal.location":`Emplacement`,"admin.terminal.pinRequired":`Les employés ont besoin de leur code PIN`,"admin.terminal.create":`Créer un terminal`,"admin.terminal.tokenOnce":`Copiez le jeton de l'appareil maintenant — il n'est conservé que comme hachage et affiché une seule fois :`,"admin.terminal.url":`Ouvrez cette adresse sur l'appareil du kiosque :`,"admin.terminal.revoke":`Révoquer`,"admin.terminal.revoked":`révoqué`,"admin.terminal.users":`Employés`,"admin.terminal.usersHint":`Sans sélection, la borne affiche tous les employés.`,"admin.terminal.usersAll":`tous les employés`,"admin.terminal.empty":`Aucun terminal créé pour l'instant.`,"admin.terminal.confirmRevoke":`Révoquer « {{name}} » ? Son jeton d'appareil cesse immédiatement de fonctionner.`,"admin.settings":`Paramètres`,"admin.settings.fontPath":`Fichier de police Unicode pour les relevés PDF (.ttf/.otf)`,"admin.user.profile":`Profil de travail`,"admin.user.profileTitle":`Profil de travail · {{name}}`,"admin.profile.percent":`Taux d'occupation (%)`,"admin.profile.weeklyHours":`Heures hebdomadaires à 100 %`,"admin.profile.workdays":`Jours de travail`,"admin.profile.overtimeModel":`Modèle d'heures supplémentaires`,"admin.profile.model.monthly":`Mensuel`,"admin.profile.model.yearly":`Annuel`,"admin.profile.model.cumulative":`Cumulatif`,"admin.profile.vacationPerYear":`Jours de vacances par an`,"admin.profile.vacationCarryover":`Vacances reportées (jours)`,"admin.profile.overtimeCarryover":`Heures supplémentaires reportées (heures)`,"admin.profile.vorholzeitPerYear":`« Vorholzeit » par an (heures)`,"admin.profile.pausePaid":`Minutes de pause payées par jour`,"admin.profile.pausePaidHint":`Ces minutes de la pause comptent comme temps de travail (0 = la pause n'est pas payée).`,"admin.settings.pauseMode":`Pauses`,"admin.settings.pauseModeTitle":`Règle de pause`,"admin.settings.pauseModeHint":`Comment la pause d'une journée est déterminée.`,"admin.settings.pauseRules":`Barème des pauses`,"admin.settings.pauseRulesHint":`S'applique aux jours sans pause pointée : à partir de la durée indiquée (du premier au dernier pointage d'un bloc), les minutes sont déduites.`,"admin.settings.pauseFrom":`à partir de minutes`,"admin.settings.pauseTo":`jusqu'à minutes (vide = sans fin)`,"admin.settings.pauseMinutes":`minutes de pause`,"admin.settings.pauseActive":`Règle active`,"admin.settings.pauseAdd":`Ajouter une règle`,"admin.settings.pauseSave":`Enregistrer le barème`,"admin.settings.pauseMode.auto":`Pause pointée, sinon le barème`,"admin.settings.pauseMode.punched":`Uniquement les pauses pointées`,"admin.settings.pauseMode.staffel":`Uniquement le barème des pauses`,"admin.settings.fontPathHint":`Nécessaire pour le russe, l'ukrainien et le chinois ; vide = polices intégrées, qui ne couvrent que Latin-1.`,"admin.settings.advanced":`Tous les paramètres de l'instance (noms techniques, 1/0 pour les commutateurs)`,"admin.settings.setting.edit_window_days":`Fenêtre de modification (jours)`,"admin.settings.setting.quick_round_minutes":`Arrondi (min)`,"admin.settings.setting.absence_calc_until_today":`Absences à ce jour`,"admin.settings.setting.absence_deduct_worktime":`Déduire les absences`,"admin.settings.setting.print_limit_days":`Limite d'impression (jours)`,"admin.settings.setting.holiday_country":`Pays des jours fériés`,"admin.settings.setting.default_language":`Langue par défaut`,"admin.settings.setting.session_ttl_minutes":`Durée de session (min)`,"admin.settings.setting.backup_retention_days":`Sauvegardes (jours)`,"admin.settings.setting.attendance_list_visible":`Liste de présence`,"admin.settings.setting.timezone":`Fuseau horaire`,"admin.settings.saved":`Paramètres enregistrés.`,"admin.holidays":`Jours fériés`,"admin.holiday.date":`Date (AAAA-MM-JJ)`,"admin.holiday.name":`Nom`,"holiday.newYear":`Nouvel An`,"holiday.epiphany":`Épiphanie`,"holiday.goodFriday":`Vendredi saint`,"holiday.easterMonday":`Lundi de Pâques`,"holiday.labourDay":`Fête du Travail`,"holiday.ascension":`Ascension`,"holiday.whitMonday":`Lundi de Pentecôte`,"holiday.corpusChristi":`Fête-Dieu`,"holiday.nationalDay":`Fête nationale`,"holiday.germanUnity":`Jour de l'unité allemande`,"holiday.assumption":`Assomption`,"holiday.allSaints":`Toussaint`,"holiday.immaculateConception":`Immaculée Conception`,"holiday.christmas":`Noël`,"holiday.boxingDay":`Lendemain de Noël`,"admin.holiday.add":`Ajouter un jour férié`,"admin.holiday.year":`Année`,"admin.holiday.region":`Région (facultatif)`,"admin.holiday.empty":`Aucun jour férié enregistré pour cette année.`,"admin.tags":`Badges (RFID/NFC)`,"admin.tag.label":`Libellé`,"admin.tag.user":`Employé`,"admin.tag.create":`Créer un badge`,"admin.tag.linkOnce":`Écrivez ce lien sur le badge ou ouvrez-le sur le téléphone :`,"admin.tag.delete":`Supprimer`,"admin.tag.active":`actif`,"admin.tag.expired":`expiré`,"admin.tag.revoked":`révoqué`,"admin.tag.lastUsed":`dernier usage`,"admin.tag.remove":`Supprimer définitivement`,"admin.tag.edit":`Modifier`,"admin.tag.reissue":`Nouveau lien`,"admin.tag.editTitle":`Modifier le badge`,"admin.tag.editHint":`Un autre employé ou une nouvelle validité émet un nouveau lien — le lien précédent cesse immédiatement de fonctionner.`,"admin.tag.validityDays":`Validité (jours)`,"admin.tag.oldLinkDead":`Le lien précédent ne fonctionne plus.`,"admin.tag.qrAlt":`Code QR du lien du badge`,"admin.tag.empty":`Aucun badge créé pour l'instant.`,"nav.statistics":`Statistiques`,"statistics.from":`Du`,"statistics.to":`Au`,"statistics.employee":`Employé`,"statistics.worked":`Travaillé`,"statistics.target":`Objectif`,"statistics.balance":`Solde`,"statistics.openDays":`Jours ouverts`,"statistics.totals":`Tous les employés`,"scan.title":`Badge`,"scan.done":`Pointé pour {{name}} à {{time}}`,"scan.failed":`Le badge n'a pas pu être utilisé : {{reason}}`,"presence.title":`Présence`,"presence.present":`Présent`,"presence.absent":`Absent`,"presence.tapPin":`Saisissez le code PIN pour pointer`,"presence.cancel":`Annuler`,"presence.updated":`{{name}} est maintenant {{state}}`,"presence.disabled":`Le terminal borne est désactivé dans les paramètres de l'instance.`,"admin.user.photo":`Photo`,"admin.user.photoTitle":`Photo de {{name}}`,"admin.user.photoChoose":`Choisir une image`,"admin.user.photoRemove":`Supprimer l'image`,"admin.user.photoHint":`PNG, JPEG, WEBP ou GIF jusqu'à 256 Ko. Sans image, la vignette par défaut s'affiche.`,"admin.corrections":`Corrections de temps`,"corrections.employee":`Collaborateur`,"corrections.previous":`Mois précédent`,"corrections.next":`Mois suivant`,"corrections.reason":`Motif`,"corrections.reasonHint":`Conservé dans le journal (audit)`,"corrections.add":`Ajouter un pointage ou une journée`,"corrections.addTitle":`Ajouter un pointage`,"corrections.addHint":`Laissez « sortie » vide s’il ne manque qu’un pointage`,"corrections.editTitle":`Modifier le pointage`,"corrections.remove":`Supprimer le pointage`,"corrections.date":`Date`,"corrections.from":`Arrivée`,"corrections.to":`Départ`,"corrections.direction":`Sens`,"corrections.note":`Remarque`,"corrections.empty":`Aucun pointage ce mois-ci`,"corrections.byAdmin":`ajouté par l’administration`,"corrections.history":`Historique`,"corrections.actor":`Par`,"corrections.actionCreate":`Ajouté`,"corrections.actionUpdate":`Modifié`,"corrections.actionDelete":`Supprimé`,"keypad.backspace":`Effacer`,"admin.settings.branding":`Identité visuelle`,"admin.settings.brandingHint":`Logo, image d'arrière-plan et couleur d'arrière-plan de cette installation. L'écran de connexion et les écrans kiosque les affichent également.`,"admin.settings.brandLogo":`Choisir le logo`,"admin.settings.brandBackground":`Choisir l'arrière-plan`,"admin.brand.imageResized":`Réduite pour l'affichage ({{size}}).`,"admin.brand.imageTooLarge":`Même réduite, l'image reste trop grande.`,"admin.brand.imageType":`Seuls PNG, JPEG, WEBP ou GIF sont possibles.`,"admin.brand.imageUnreadable":`L'image n'a pas pu être lue.`,"admin.settings.brandColor":`Couleur d'arrière-plan`,"admin.settings.brandColorHint":`Valeur hexadécimale comme #1a2b3c`,"admin.settings.brandColorPresets":`Couleurs proposées`,"admin.settings.brandColorDefault":`Par défaut`,"admin.backup.download":`Télécharger`,"admin.backup.restore":`Restaurer`,"admin.backup.restoreTitle":`Restaurer une sauvegarde`,"admin.backup.restoreConfirm":`La sauvegarde {{name}} est appliquée au prochain démarrage de l'adaptateur ; la base de données actuelle est conservée à côté sous forme de fichier. Redémarrez ensuite l'instance.`,"admin.backup.pendingHint":`{{name}} est appliquée au prochain démarrage ({{users}} collaborateurs, {{entries}} pointages) - redémarrez l'instance.`,"error.backup_invalid":`Ce fichier n'est pas une sauvegarde de cet adaptateur.`,"admin.settings.brandImageRemove":`Supprimer l'image`,"admin.settings.brandColorDefaultHint":`Réinitialise la couleur et l'image d'arrière-plan`,"admin.triggers":`Actions (ioBroker)`,"admin.triggersHint":"Un état d'un autre adaptateur pointe ou définit la présence — un lecteur d'empreinte, un bouton ou un contact de porte. Il se déclenche uniquement lorsque la valeur change. Comme valeur, vous pouvez saisir `toggle` : il réagit alors à chaque changement (par exemple activé puis désactivé).","admin.trigger.label":`Désignation`,"admin.trigger.sourceState":`État`,"admin.trigger.mode":`Déclencheur`,"admin.trigger.modeCondition":`L'état porte la valeur`,"admin.trigger.modeUser":`La valeur est l'employé`,"admin.trigger.condition":`Valeur`,"admin.trigger.user":`Employé`,"admin.trigger.action":`Effet`,"admin.trigger.actionPunch":`Pointer (entrée ou sortie)`,"admin.trigger.actionQuickPunch":`Pointer avec arrondi rapide`,"admin.trigger.actionPresent":`Définir comme présent`,"admin.trigger.actionAbsent":`Définir comme absent`,"admin.trigger.cooldown":`Blocage (secondes)`,"admin.trigger.active":`Actif`,"admin.trigger.add":`Ajouter une action`,"admin.trigger.lastFired":`Dernier déclenchement`,"admin.trigger.empty":`Aucune action pour l'instant.`,"admin.trigger.conditionHint":"Valeur ou `toggle` pour réagir à chaque changement","admin.settings.automations":`Règles (automatiques)`,"admin.settings.automationsHint":`Ce que l'adaptateur fait seul : pointer la sortie à l'heure locale définie, signaler une sortie manquante ou rappeler après un travail trop long sans pause. Une règle s'exécute au plus une fois par employé et par jour.`,"admin.automation.kind":`Type`,"admin.automation.kindClockIn":`Pointer l'arrivée automatiquement`,"admin.automation.kindClockOut":`Pointer la sortie automatiquement`,"admin.automation.kindMissingPunch":`Signaler une sortie manquante`,"admin.automation.kindBreakReminder":`Rappel de pause`,"admin.automation.at":`Heure`,"admin.automation.atHint":`Heure locale de l'employé`,"admin.automation.after":`Après (minutes)`,"admin.automation.user":`Employé`,"admin.automation.allUsers":`tous les employés`,"admin.automation.add":`Ajouter une règle`,"admin.automation.empty":`Aucune règle pour l'instant.`,"admin.automation.runs":`Dernières exécutions`,"admin.automation.weekdays":`Jours de la semaine`,"admin.automation.repeat":`Répétition`,"admin.automation.repeatDay":`une fois par jour`,"admin.automation.repeatWeek":`une fois par semaine`,"admin.settings.setting.report_font_path":`Police pour PDF`,"presence.workedToday":`Travaillé aujourd'hui`,"admin.user.workedTime":`Temps de travail sur la carte de présence`,"admin.user.workedTimeHint":`Affiche sur la carte de présence le temps travaillé aujourd'hui (par exemple 1:23). Sans pointage, il y a 0:00 ; sans cette autorisation, la carte reste sur présent/absent et le nom.`},Mw={"absences.create":`Richiesta assenza`,"absences.created":`Assenza richiesta.`,"absences.empty":`Nessuna assenza quest'anno.`,"absences.from":`Da`,"absences.portion":`Quota del giorno`,"absences.status":`Stato`,"absences.title":`Assenze`,"absences.to":`A`,"absences.type":`Tipo`,"absences.typeHint":`Codice del tipo di assenza, ad es. F per vacanza`,"admin.backup":`Backup`,"admin.backup.create":`Crea il backup ora`,"admin.backup.upload":`Carica backup`,"admin.backup.uploadHint":`Scegli un backup scaricato (.sqlite) - viene verificato e applicato al prossimo avvio.`,"admin.backup.delete":`Elimina`,"admin.backup.deleteTitle":`Elimina backup`,"admin.backup.deleteConfirm":`Il backup {{name}} viene eliminato. L'operazione non è reversibile.`,"admin.backup.done":`Backup di {{name}} scritto, {{removed}} vecchi file rimossi.`,"admin.backup.empty":`Nessun backup ancora.`,"admin.backup.retention":`I backup più vecchi di {{days}} giorni vengono rimossi, quello più recente viene sempre mantenuto.`,"admin.forbidden":`Non è consentito aprire l'amministrazione.`,"admin.title":`Amministrazione`,"admin.user.active":`Attivo`,"admin.user.create":`Aggiungi dipendente`,"admin.user.empty":`Nessun dipendente ancora.`,"admin.user.inactive":`Disattivato`,"admin.user.login":`Login`,"admin.user.name":`Nome`,"admin.user.newPin":`Nuovo PIN`,"admin.user.password":`Password`,"admin.user.passwordHint":`Almeno 8 caratteri tra maiuscoli, minuscoli e cifre.`,"admin.user.pin":`PIN`,"admin.user.pinHint":`Da 4 a 8 cifre per il terminale`,"admin.user.pinTitle":`PIN del badge di {{name}}`,"admin.user.roles":`Ruoli`,"admin.users":`Dipendenti`,"app.offline":`Offline: le timbrature sono in coda`,"app.online":`Collegato`,"app.title":`Monitoraggio del tempo`,"common.cancel":`Cancellare`,"common.close":`Vicino`,"common.loading":`Caricamento…`,"common.none":`–`,"common.refresh":`Aggiorna`,"common.retry":`Riprova`,"common.save":`Salva`,"error.bad_request":`L'input non è stato accettato.`,"error.conflict":`La modifica è in conflitto con i dati esistenti.`,"error.csrf_rejected":`La richiesta è stata respinta per motivi di sicurezza, riprova.`,"error.invalid_credentials":`Il nome utente o la password non sono corretti.`,"error.locked_out":`Troppi tentativi falliti. Per favore riprova più tardi.`,"error.network_error":`Il server non è raggiungibile.`,"error.no_session":`La tua sessione è scaduta, accedi nuovamente.`,"error.not_found":`Non trovato.`,"error.permission_denied":`Non ti è permesso farlo.`,"error.report_font_missing":`Questo report necessita di un carattere Unicode (report_font_path).`,"error.revision_conflict":`Nel frattempo il punzone è stato cambiato, ricaricare.`,"error.session_expired":`La tua sessione è scaduta, accedi nuovamente.`,"error.unknown_error":`Errore imprevisto.`,"error.user_inactive":`Questo account è disattivato.`,"login.failed":`Accesso non riuscito`,"login.login":`Nome utente`,"login.password":`Password`,"login.submit":`Registrazione`,"login.title":`Registrazione`,"month.absence":`Assenza`,"month.balance":`Bilancia`,"error.edit_window_closed":`Fuori dalla finestra di correzione`,"admin.profile.pauseRules":`Regole di pausa proprie`,"admin.profile.pauseRulesHint":`Regole solo per questo dipendente: sostituiscono la regola aziendale con lo stesso «da minuti». Senza regole proprie vale la scala aziendale.`,"report.csv":`Dati grezzi (CSV)`,"month.edit":`Correggi`,"month.editTitle":`Correggi timbrature · {{date}}`,"month.editHint":`Solo dentro la finestra di correzione - i giorni più vecchi li modifica l'amministrazione.`,"month.time":`Ora`,"month.direction":`Direzione`,"month.directionIn":`Entrata`,"month.directionOut":`Uscita`,"month.addPunch":`Aggiungi timbratura`,"month.pause":`Pausa`,"month.paidBreak":`di cui pagato`,"month.empty":`Nessun giorno in questo mese.`,"month.holiday":`Vacanza`,"month.months":`Mesi dell'anno`,"month.next":`Il mese prossimo`,"month.open":`aperto`,"month.previous":`Mese precedente`,"month.target":`Bersaglio`,"month.title":`Mese`,"month.worked":`Lavorato`,"nav.absences":`Assenze`,"nav.dashboard":`Timbratura`,"nav.logout":`disconnessione`,"nav.menu":`Menu`,"nav.month":`Mese`,"nav.profile":`Profilo`,"nav.reports":`Rapporti`,"nav.sync":`Sincronizzazione`,"profile.changePassword":`Cambiare la password`,"profile.changed":`Password modificata, accedi nuovamente.`,"profile.language":`Lingua`,"profile.newPassword":`Nuova password`,"profile.roles":`Autorizzazioni`,"profile.title":`Profilo`,"profile.user":`Utente`,"punch.balance":`Saldo oggi`,"punch.closed":`Non timbrato`,"punch.in":`Timbrare entrata`,"punch.last":`Ultima timbratura {{time}}`,"punch.note":`Nota`,"punch.now":`Timbrare`,"punch.open":`Timbrato dalle {{time}}`,"punch.out":`Timbrare uscita`,"punch.queued":`Salvato offline: verrà inviato automaticamente`,"punch.quick":`Timbratura rapida`,"punch.sent":`Timbratura registrata ({{time}})`,"punch.target":`Obiettivo oggi`,"punch.worked":`Lavorato oggi`,"report.failed":`Impossibile creare l'istruzione.`,"report.pdf":`PDF`,"report.xls":`Eccellere`,"reports.empty":`Nessun dato per questo periodo.`,"reports.monthTotals":`Totali mensili`,"reports.overtime":`Straordinari`,"reports.paidOut":`Pagato: {{minutes}}`,"reports.title":`Rapporti`,"reports.vacation":`Ferie (prese/diritto)`,"reports.year":`Anno`,"reports.yearTotals":`Totali dell'anno`,"sync.accept":`Mantieni il valore del server`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Conflitti aperti`,"sync.dismiss":`Scartare`,"sync.done":`Inviato: {{accepted}}, duplicati: {{duplicates}}, conflitti: {{conflicts}}`,"sync.empty":`Nessun conflitto aperto.`,"sync.flush":`Invia ora`,"sync.none":`Niente da inviare.`,"sync.pending":`{{count}} punch in attesa`,"sync.permission":`Non ti è consentito risolvere i conflitti.`,"sync.resolved":`Conflitto risolto.`,"sync.title":`Sincronizzazione`,"terminal.title":`Terminal`,"terminal.deviceToken":`Token del dispositivo`,"terminal.connect":`Connetti`,"terminal.badge":`Badge`,"terminal.noPin":`Su questo terminale non serve il PIN.`,"terminal.pin":`PIN`,"terminal.select":`Scegli il nome`,"terminal.disabled":`Il terminal è disattivato nelle impostazioni dell'adattatore.`,"admin.terminals":`Terminali`,"admin.terminal.name":`Nome`,"admin.terminal.location":`Posizione`,"admin.terminal.pinRequired":`I dipendenti hanno bisogno del loro PIN`,"admin.terminal.create":`Crea terminale`,"admin.terminal.tokenOnce":`Copia ora il token del dispositivo — viene salvato solo come hash e mostrato una sola volta:`,"admin.terminal.url":`Apri questo indirizzo sul dispositivo del chiosco:`,"admin.terminal.revoke":`Revoca`,"admin.terminal.revoked":`revocato`,"admin.terminal.users":`Dipendenti`,"admin.terminal.usersHint":`Senza selezione il terminale mostra tutti i dipendenti.`,"admin.terminal.usersAll":`tutti i dipendenti`,"admin.terminal.empty":`Nessun terminale creato finora.`,"admin.terminal.confirmRevoke":`Revocare «{{name}}»? Il token del dispositivo smette subito di funzionare.`,"admin.settings":`Impostazioni`,"admin.settings.fontPath":`File di font Unicode per gli estratti PDF (.ttf/.otf)`,"admin.user.profile":`Profilo di lavoro`,"admin.user.profileTitle":`Profilo di lavoro · {{name}}`,"admin.profile.percent":`Grado di occupazione (%)`,"admin.profile.weeklyHours":`Ore settimanali al 100 %`,"admin.profile.workdays":`Giorni lavorativi`,"admin.profile.overtimeModel":`Modello di straordinario`,"admin.profile.model.monthly":`Mensile`,"admin.profile.model.yearly":`Annuale`,"admin.profile.model.cumulative":`Cumulativo`,"admin.profile.vacationPerYear":`Giorni di ferie all'anno`,"admin.profile.vacationCarryover":`Ferie riportate (giorni)`,"admin.profile.overtimeCarryover":`Straordinari riportati (ore)`,"admin.profile.vorholzeitPerYear":`«Vorholzeit» all'anno (ore)`,"admin.profile.pausePaid":`Minuti di pausa pagati al giorno`,"admin.profile.pausePaidHint":`Questi minuti della pausa contano come tempo di lavoro (0 = la pausa non è pagata).`,"admin.settings.pauseMode":`Pause`,"admin.settings.pauseModeTitle":`Regola delle pause`,"admin.settings.pauseModeHint":`Come viene determinata la pausa di una giornata.`,"admin.settings.pauseRules":`Scala delle pause`,"admin.settings.pauseRulesHint":`Vale per i giorni senza pausa timbrata: dalla durata indicata (dal primo all'ultimo timbro di un blocco) i minuti vengono detratti.`,"admin.settings.pauseFrom":`da minuti`,"admin.settings.pauseTo":`a minuti (vuoto = senza fine)`,"admin.settings.pauseMinutes":`minuti di pausa`,"admin.settings.pauseActive":`Regola attiva`,"admin.settings.pauseAdd":`Aggiungi regola`,"admin.settings.pauseSave":`Salva scala delle pause`,"admin.settings.pauseMode.auto":`Pausa timbrata, altrimenti la scala`,"admin.settings.pauseMode.punched":`Solo pause timbrate`,"admin.settings.pauseMode.staffel":`Solo la scala delle pause`,"admin.settings.fontPathHint":`Necessario per russo, ucraino e cinese; vuoto = font integrate, che coprono solo Latin-1.`,"admin.settings.advanced":`Tutte le impostazioni dell'istanza (nomi tecnici, 1/0 per gli interruttori)`,"admin.settings.setting.edit_window_days":`Finestra di modifica (giorni)`,"admin.settings.setting.quick_round_minutes":`Arrotondamento (min)`,"admin.settings.setting.absence_calc_until_today":`Assenze fino a oggi`,"admin.settings.setting.absence_deduct_worktime":`Detrarre le assenze`,"admin.settings.setting.print_limit_days":`Limite di stampa (giorni)`,"admin.settings.setting.holiday_country":`Paese delle festività`,"admin.settings.setting.default_language":`Lingua predefinita`,"admin.settings.setting.session_ttl_minutes":`Sessione (minuti)`,"admin.settings.setting.backup_retention_days":`Backup (giorni)`,"admin.settings.setting.attendance_list_visible":`Elenco presenze`,"admin.settings.setting.timezone":`Fuso orario`,"admin.settings.saved":`Impostazioni salvate.`,"admin.holidays":`Giorni festivi`,"admin.holiday.date":`Data (AAAA-MM-GG)`,"admin.holiday.name":`Nome`,"holiday.newYear":`Capodanno`,"holiday.epiphany":`Epifania`,"holiday.goodFriday":`Venerdì santo`,"holiday.easterMonday":`Lunedì dell'Angelo`,"holiday.labourDay":`Festa dei lavoratori`,"holiday.ascension":`Ascensione`,"holiday.whitMonday":`Lunedì di Pentecoste`,"holiday.corpusChristi":`Corpus Domini`,"holiday.nationalDay":`Festa nazionale`,"holiday.germanUnity":`Giorno dell'unità tedesca`,"holiday.assumption":`Assunzione`,"holiday.allSaints":`Ognissanti`,"holiday.immaculateConception":`Immacolata Concezione`,"holiday.christmas":`Natale`,"holiday.boxingDay":`Santo Stefano`,"admin.holiday.add":`Aggiungi giorno festivo`,"admin.holiday.year":`Anno`,"admin.holiday.region":`Regione (facoltativo)`,"admin.holiday.empty":`Nessun giorno festivo registrato per quest'anno.`,"admin.tags":`Badge (RFID/NFC)`,"admin.tag.label":`Etichetta`,"admin.tag.user":`Dipendente`,"admin.tag.create":`Crea badge`,"admin.tag.linkOnce":`Scrivi questo link sul tag o aprilo sul telefono:`,"admin.tag.delete":`Elimina`,"admin.tag.active":`attivo`,"admin.tag.expired":`scaduto`,"admin.tag.revoked":`revocato`,"admin.tag.lastUsed":`ultimo utilizzo`,"admin.tag.remove":`Rimuovi definitivamente`,"admin.tag.edit":`Modifica`,"admin.tag.reissue":`Nuovo link`,"admin.tag.editTitle":`Modifica badge`,"admin.tag.editHint":`Un altro dipendente o una nuova validità emette un nuovo link — il link precedente smette subito di funzionare.`,"admin.tag.validityDays":`Validità (giorni)`,"admin.tag.oldLinkDead":`Il link precedente non funziona più.`,"admin.tag.qrAlt":`Codice QR del link del badge`,"admin.tag.empty":`Nessun badge creato finora.`,"nav.statistics":`Statistiche`,"statistics.from":`Da`,"statistics.to":`A`,"statistics.employee":`Dipendente`,"statistics.worked":`Lavorato`,"statistics.target":`Obiettivo`,"statistics.balance":`Saldo`,"statistics.openDays":`Giorni aperti`,"statistics.totals":`Tutti i dipendenti`,"scan.title":`Badge`,"scan.done":`Timbrato per {{name}} alle {{time}}`,"scan.failed":`Il badge non è stato utilizzato: {{reason}}`,"presence.title":`Presenza`,"presence.present":`Presente`,"presence.absent":`Assente`,"presence.tapPin":`Inserisci il PIN per timbrare`,"presence.cancel":`Annulla`,"presence.updated":`{{name}} ora è {{state}}`,"presence.disabled":`Il terminale chiosco è disattivato nelle impostazioni dell'istanza.`,"admin.user.photo":`Foto`,"admin.user.photoTitle":`Foto di {{name}}`,"admin.user.photoChoose":`Scegli immagine`,"admin.user.photoRemove":`Rimuovi immagine`,"admin.user.photoHint":`PNG, JPEG, WEBP o GIF fino a 256 KB. Senza immagine viene mostrato il segnaposto.`,"admin.corrections":`Correzioni orari`,"corrections.employee":`Dipendente`,"corrections.previous":`Mese precedente`,"corrections.next":`Mese successivo`,"corrections.reason":`Motivo`,"corrections.reasonHint":`Viene registrato nel log di controllo`,"corrections.add":`Aggiungi timbratura o giorno`,"corrections.addTitle":`Aggiungi timbratura`,"corrections.addHint":`Lascia vuoto «uscita» se manca una sola timbratura`,"corrections.editTitle":`Modifica timbratura`,"corrections.remove":`Elimina timbratura`,"corrections.date":`Data`,"corrections.from":`Entrata`,"corrections.to":`Uscita`,"corrections.direction":`Direzione`,"corrections.note":`Nota`,"corrections.empty":`Nessuna timbratura in questo mese`,"corrections.byAdmin":`aggiunto dall’amministrazione`,"corrections.history":`Cronologia`,"corrections.actor":`Da`,"corrections.actionCreate":`Aggiunto`,"corrections.actionUpdate":`Modificato`,"corrections.actionDelete":`Eliminato`,"keypad.backspace":`Cancella`,"admin.settings.branding":`Immagine aziendale`,"admin.settings.brandingHint":`Logo, immagine di sfondo e colore di sfondo di questa installazione. Anche la schermata di accesso e i chioschi li mostrano.`,"admin.settings.brandLogo":`Scegli il logo`,"admin.settings.brandBackground":`Scegli lo sfondo`,"admin.brand.imageResized":`Ridotta per la visualizzazione ({{size}}).`,"admin.brand.imageTooLarge":`Anche ridotta, l'immagine è troppo grande.`,"admin.brand.imageType":`Sono possibili solo PNG, JPEG, WEBP o GIF.`,"admin.brand.imageUnreadable":`Non è stato possibile leggere l'immagine.`,"admin.settings.brandColor":`Colore di sfondo`,"admin.settings.brandColorHint":`Valore esadecimale come #1a2b3c, vuoto per il valore predefinito`,"admin.settings.brandColorPresets":`Colori suggeriti`,"admin.settings.brandColorDefault":`Predefinito`,"admin.backup.download":`Scarica`,"admin.backup.restore":`Ripristina`,"admin.backup.restoreTitle":`Ripristinare un backup`,"admin.backup.restoreConfirm":`Il backup {{name}} viene applicato al prossimo avvio dell'adattatore; il database attuale resta accanto come file. Riavvia poi l'istanza.`,"admin.backup.pendingHint":`{{name}} viene applicato al prossimo avvio ({{users}} dipendenti, {{entries}} timbrature) - riavvia l'istanza.`,"error.backup_invalid":`Quel file non è un backup di questo adattatore.`,"admin.settings.brandImageRemove":`Rimuovi immagine`,"admin.settings.brandColorDefaultHint":`Reimposta il colore e l'immagine di sfondo`,"admin.triggers":`Azioni (ioBroker)`,"admin.triggersHint":"Uno stato di un altro adattatore timbra o imposta la presenza — un lettore di impronte, un pulsante o un contatto della porta. Scatta solo quando il valore cambia. Come valore puoi scrivere `toggle`: così scatta a ogni cambiamento (per esempio acceso e poi spento).","admin.trigger.label":`Descrizione`,"admin.trigger.sourceState":`Stato`,"admin.trigger.mode":`Attivatore`,"admin.trigger.modeCondition":`Lo stato porta il valore`,"admin.trigger.modeUser":`Il valore è il dipendente`,"admin.trigger.condition":`Valore`,"admin.trigger.user":`Dipendente`,"admin.trigger.action":`Azione`,"admin.trigger.actionPunch":`Timbra (entrata o uscita)`,"admin.trigger.actionQuickPunch":`Timbra con arrotondamento rapido`,"admin.trigger.actionPresent":`Imposta presente`,"admin.trigger.actionAbsent":`Imposta assente`,"admin.trigger.cooldown":`Blocco (secondi)`,"admin.trigger.active":`Attivo`,"admin.trigger.add":`Aggiungi azione`,"admin.trigger.lastFired":`Ultima esecuzione`,"admin.trigger.empty":`Nessuna azione per ora.`,"admin.trigger.conditionHint":"Valore o `toggle` per reagire a ogni cambiamento","admin.settings.automations":`Regole (automatiche)`,"admin.settings.automationsHint":`Cosa fa l'adattatore da solo: timbra l'uscita all'ora locale impostata, segnala una timbratura di uscita mancante o ricorda dopo troppo lavoro senza pausa. Una regola viene eseguita al massimo una volta per dipendente e giorno.`,"admin.automation.kind":`Tipo`,"admin.automation.kindClockIn":`Timbra l'entrata automaticamente`,"admin.automation.kindClockOut":`Timbra l'uscita automaticamente`,"admin.automation.kindMissingPunch":`Segnala uscita mancante`,"admin.automation.kindBreakReminder":`Promemoria pausa`,"admin.automation.at":`Ora`,"admin.automation.atHint":`Ora locale del dipendente`,"admin.automation.after":`Dopo (minuti)`,"admin.automation.user":`Dipendente`,"admin.automation.allUsers":`tutti i dipendenti`,"admin.automation.add":`Aggiungi regola`,"admin.automation.empty":`Nessuna regola per ora.`,"admin.automation.runs":`Ultime esecuzioni`,"admin.automation.weekdays":`Giorni della settimana`,"admin.automation.repeat":`Ripetizione`,"admin.automation.repeatDay":`una volta al giorno`,"admin.automation.repeatWeek":`una volta a settimana`,"admin.settings.setting.report_font_path":`Carattere per PDF`,"presence.workedToday":`Lavorato oggi`,"admin.user.workedTime":`Tempo di lavoro sulla scheda di presenza`,"admin.user.workedTimeHint":`Mostra sulla scheda di presenza il tempo lavorato oggi (per esempio 1:23). Senza timbratura c'è 0:00; senza questa autorizzazione la scheda resta con presente/assente e il nome.`},Nw={"absences.create":`Solicitar ausencia`,"absences.created":`Ausencia solicitada.`,"absences.empty":`No hay ausencias en este año.`,"absences.from":`De`,"absences.portion":`Parte del día`,"absences.status":`Estado`,"absences.title":`Ausencias`,"absences.to":`A`,"absences.type":`Tipo`,"absences.typeHint":`Código del tipo de ausencia, p.e. F de vacaciones`,"admin.backup":`Copias de seguridad`,"admin.backup.create":`Crear copia de seguridad ahora`,"admin.backup.upload":`Subir copia`,"admin.backup.uploadHint":`Elige una copia descargada (.sqlite) - se verifica y se aplica en el próximo inicio.`,"admin.backup.delete":`Eliminar`,"admin.backup.deleteTitle":`Eliminar copia`,"admin.backup.deleteConfirm":`La copia {{name}} se elimina. Esto no se puede deshacer.`,"admin.backup.done":`Copia de seguridad de {{name}} escrita, {{removed}} archivo(s) antiguo(s) eliminado(s).`,"admin.backup.empty":`Aún no hay copias de seguridad.`,"admin.backup.retention":`Las copias de seguridad anteriores a {{days}} días se eliminan y siempre se conserva la más reciente.`,"admin.forbidden":`No se le permite abrir la administración.`,"admin.title":`Administración`,"admin.user.active":`Activo`,"admin.user.create":`Agregar empleado`,"admin.user.empty":`Aún no hay empleados.`,"admin.user.inactive":`Desactivado`,"admin.user.login":`Acceso`,"admin.user.name":`Nombre`,"admin.user.newPin":`Nuevo PIN`,"admin.user.password":`Contraseña`,"admin.user.passwordHint":`Al menos 8 caracteres con mayúsculas, minúsculas y dígitos.`,"admin.user.pin":`PIN`,"admin.user.pinHint":`4 a 8 dígitos para el terminal`,"admin.user.pinTitle":`PIN de la tarjeta de {{name}}`,"admin.user.roles":`Roles`,"admin.users":`Empleados`,"app.offline":`Sin conexión: los marcajes están en cola`,"app.online":`Conectado`,"app.title":`Seguimiento del tiempo`,"common.cancel":`Cancelar`,"common.close":`Cerca`,"common.loading":`Cargando…`,"common.none":`–`,"common.refresh":`Refrescar`,"common.retry":`Rever`,"common.save":`Ahorrar`,"error.bad_request":`El aporte no fue aceptado.`,"error.conflict":`El cambio entra en conflicto con los datos existentes.`,"error.csrf_rejected":`La solicitud fue rechazada por razones de seguridad, inténtelo nuevamente.`,"error.invalid_credentials":`El nombre de usuario o la contraseña no son correctos.`,"error.locked_out":`Demasiados intentos fallidos. Inténtelo de nuevo más tarde.`,"error.network_error":`El servidor no es accesible.`,"error.no_session":`Su sesión ha caducado, inicie sesión nuevamente.`,"error.not_found":`Extraviado.`,"error.permission_denied":`No tienes permitido hacer esto.`,"error.report_font_missing":`Este informe necesita una fuente Unicode (report_font_path).`,"error.revision_conflict":`Mientras tanto, el punzón fue cambiado, por favor recarga.`,"error.session_expired":`Su sesión ha caducado, inicie sesión nuevamente.`,"error.unknown_error":`Error inesperado.`,"error.user_inactive":`Esta cuenta está desactivada.`,"login.failed":`Error al iniciar sesión`,"login.login":`Nombre de usuario`,"login.password":`Contraseña`,"login.submit":`Iniciar sesión`,"login.title":`Iniciar sesión`,"month.absence":`Ausencia`,"month.balance":`Saldo`,"error.edit_window_closed":`Fuera de la ventana de corrección`,"admin.profile.pauseRules":`Reglas de pausa propias`,"admin.profile.pauseRulesHint":`Reglas solo para este empleado: sustituyen la regla de la empresa con el mismo «desde minutos». Sin reglas propias se aplica la escala de la empresa.`,"report.csv":`Datos brutos (CSV)`,"month.edit":`Corregir`,"month.editTitle":`Corregir fichajes · {{date}}`,"month.editHint":`Solo dentro de la ventana de corrección - los días anteriores los cambia la administración.`,"month.time":`Hora`,"month.direction":`Dirección`,"month.directionIn":`Entrada`,"month.directionOut":`Salida`,"month.addPunch":`Añadir fichaje`,"month.pause":`Pausa`,"month.paidBreak":`de los cuales pagado`,"month.empty":`No hay días en este mes.`,"month.holiday":`Día festivo`,"month.months":`Meses del año`,"month.next":`Mes próximo`,"month.open":`abierto`,"month.previous":`Mes anterior`,"month.target":`Objetivo`,"month.title":`Mes`,"month.worked":`Trabajó`,"nav.absences":`Ausencias`,"nav.dashboard":`Fichaje`,"nav.logout":`desconectar`,"nav.menu":`Menú`,"nav.month":`Mes`,"nav.profile":`Perfil`,"nav.reports":`Informes`,"nav.sync":`Sincronización`,"profile.changePassword":`Cambiar la contraseña`,"profile.changed":`Contraseña cambiada, inicie sesión nuevamente.`,"profile.language":`Idioma`,"profile.newPassword":`Nueva contraseña`,"profile.roles":`Permisos`,"profile.title":`Perfil`,"profile.user":`Usuario`,"punch.balance":`Saldo hoy`,"punch.closed":`Sin fichar`,"punch.in":`Fichar entrada`,"punch.last":`Último fichaje {{time}}`,"punch.note":`Nota`,"punch.now":`Fichar`,"punch.open":`Fichado desde {{time}}`,"punch.out":`Fichar salida`,"punch.queued":`Guardado sin conexión: se enviará automáticamente`,"punch.quick":`Fichaje rápido`,"punch.sent":`Fichaje guardado ({{time}})`,"punch.target":`Objetivo hoy`,"punch.worked":`Trabajado hoy`,"report.failed":`No se pudo crear la declaración.`,"report.pdf":`PDF`,"report.xls":`Sobresalir`,"reports.empty":`No hay datos para este período.`,"reports.monthTotals":`Totales mensuales`,"reports.overtime":`Horas extras`,"reports.paidOut":`Pagado: {{minutes}}`,"reports.title":`Informes`,"reports.vacation":`Vacaciones (tomada/derecho)`,"reports.year":`Año`,"reports.yearTotals":`Totales del año`,"sync.accept":`Mantener el valor del servidor`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Conflictos abiertos`,"sync.dismiss":`Desechar`,"sync.done":`Enviado: {{accepted}}, duplicados: {{duplicates}}, conflictos: {{conflicts}}`,"sync.empty":`Sin conflictos abiertos.`,"sync.flush":`Enviar ahora`,"sync.none":`Nada que enviar.`,"sync.pending":`{{count}} golpe(es) esperando`,"sync.permission":`No se le permite resolver conflictos.`,"sync.resolved":`Conflicto resuelto.`,"sync.title":`Sincronización`,"terminal.title":`Terminal`,"terminal.deviceToken":`Token del dispositivo`,"terminal.connect":`Conectar`,"terminal.badge":`Tarjeta`,"terminal.noPin":`En este terminal no se necesita PIN.`,"terminal.pin":`PIN`,"terminal.select":`Elija su nombre`,"terminal.disabled":`El terminal está desactivado en la configuración del adaptador.`,"admin.terminals":`Terminales`,"admin.terminal.name":`Nombre`,"admin.terminal.location":`Ubicación`,"admin.terminal.pinRequired":`Los empleados necesitan su PIN`,"admin.terminal.create":`Crear terminal`,"admin.terminal.tokenOnce":`Copia ahora el token del dispositivo — solo se guarda como hash y se muestra una única vez:`,"admin.terminal.url":`Abre esta dirección en el dispositivo del kiosco:`,"admin.terminal.revoke":`Revocar`,"admin.terminal.revoked":`revocado`,"admin.terminal.users":`Empleados`,"admin.terminal.usersHint":`Sin selección, el terminal muestra a todos los empleados.`,"admin.terminal.usersAll":`todos los empleados`,"admin.terminal.empty":`Todavía no se ha creado ningún terminal.`,"admin.terminal.confirmRevoke":`¿Revocar «{{name}}»? Su token de dispositivo deja de funcionar de inmediato.`,"admin.settings":`Ajustes`,"admin.settings.fontPath":`Archivo de fuente Unicode para los extractos PDF (.ttf/.otf)`,"admin.user.profile":`Perfil laboral`,"admin.user.profileTitle":`Perfil laboral · {{name}}`,"admin.profile.percent":`Grado de ocupación (%)`,"admin.profile.weeklyHours":`Horas semanales al 100 %`,"admin.profile.workdays":`Días laborables`,"admin.profile.overtimeModel":`Modelo de horas extras`,"admin.profile.model.monthly":`Mensual`,"admin.profile.model.yearly":`Anual`,"admin.profile.model.cumulative":`Acumulativo`,"admin.profile.vacationPerYear":`Días de vacaciones al año`,"admin.profile.vacationCarryover":`Vacaciones arrastradas (días)`,"admin.profile.overtimeCarryover":`Horas extras arrastradas (horas)`,"admin.profile.vorholzeitPerYear":`«Vorholzeit» al año (horas)`,"admin.profile.pausePaid":`Minutos de pausa pagados por día`,"admin.profile.pausePaidHint":`Esos minutos de la pausa cuentan como tiempo de trabajo (0 = la pausa no se paga).`,"admin.settings.pauseMode":`Pausas`,"admin.settings.pauseModeTitle":`Regla de pausas`,"admin.settings.pauseModeHint":`Cómo se determina la pausa de un día.`,"admin.settings.pauseRules":`Escala de pausas`,"admin.settings.pauseRulesHint":`Se aplica a los días sin pausa registrada: a partir de la duración indicada (del primer al último registro de un bloque) se descuentan los minutos.`,"admin.settings.pauseFrom":`desde minutos`,"admin.settings.pauseTo":`hasta minutos (vacío = sin fin)`,"admin.settings.pauseMinutes":`minutos de pausa`,"admin.settings.pauseActive":`Regla activa`,"admin.settings.pauseAdd":`Añadir regla`,"admin.settings.pauseSave":`Guardar escala de pausas`,"admin.settings.pauseMode.auto":`Pausa registrada, si no la escala`,"admin.settings.pauseMode.punched":`Solo pausas registradas`,"admin.settings.pauseMode.staffel":`Solo la escala de pausas`,"admin.settings.fontPathHint":`Necesario para ruso, ucraniano y chino; vacío = fuentes integradas, que solo cubren Latin-1.`,"admin.settings.advanced":`Todos los ajustes de la instancia (nombres técnicos, 1/0 para interruptores)`,"admin.settings.setting.edit_window_days":`Ventana de edición (días)`,"admin.settings.setting.quick_round_minutes":`Redondeo (min)`,"admin.settings.setting.absence_calc_until_today":`Ausencias hasta hoy`,"admin.settings.setting.absence_deduct_worktime":`Descontar ausencias`,"admin.settings.setting.print_limit_days":`Límite de impresión (días)`,"admin.settings.setting.holiday_country":`País de los festivos`,"admin.settings.setting.default_language":`Idioma predeterminado`,"admin.settings.setting.session_ttl_minutes":`Sesión (minutos)`,"admin.settings.setting.backup_retention_days":`Copias (días)`,"admin.settings.setting.attendance_list_visible":`Lista de asistencia`,"admin.settings.setting.timezone":`Zona horaria`,"admin.settings.saved":`Ajustes guardados.`,"admin.holidays":`Días festivos`,"admin.holiday.date":`Fecha (AAAA-MM-DD)`,"admin.holiday.name":`Nombre`,"holiday.newYear":`Año Nuevo`,"holiday.epiphany":`Epifanía`,"holiday.goodFriday":`Viernes Santo`,"holiday.easterMonday":`Lunes de Pascua`,"holiday.labourDay":`Día del Trabajo`,"holiday.ascension":`Ascensión`,"holiday.whitMonday":`Lunes de Pentecostés`,"holiday.corpusChristi":`Solemnidad del Corpus Christi`,"holiday.nationalDay":`Fiesta nacional`,"holiday.germanUnity":`Día de la Unidad Alemana`,"holiday.assumption":`Asunción`,"holiday.allSaints":`Todos los Santos`,"holiday.immaculateConception":`Inmaculada Concepción`,"holiday.christmas":`Navidad`,"holiday.boxingDay":`San Esteban`,"admin.holiday.add":`Añadir día festivo`,"admin.holiday.year":`Año`,"admin.holiday.region":`Región (opcional)`,"admin.holiday.empty":`No hay días festivos registrados para este año.`,"admin.tags":`Tarjetas (RFID/NFC)`,"admin.tag.label":`Etiqueta`,"admin.tag.user":`Empleado`,"admin.tag.create":`Crear tarjeta`,"admin.tag.linkOnce":`Escribe este enlace en la etiqueta o ábrelo en el teléfono:`,"admin.tag.delete":`Eliminar`,"admin.tag.active":`activo`,"admin.tag.expired":`caducado`,"admin.tag.revoked":`revocado`,"admin.tag.lastUsed":`último uso`,"admin.tag.remove":`Eliminar definitivamente`,"admin.tag.edit":`Editar`,"admin.tag.reissue":`Nuevo enlace`,"admin.tag.editTitle":`Editar credencial`,"admin.tag.editHint":`Otro empleado o una nueva validez emite un nuevo enlace — el enlace anterior deja de funcionar de inmediato.`,"admin.tag.validityDays":`Validez (días)`,"admin.tag.oldLinkDead":`El enlace anterior ya no funciona.`,"admin.tag.qrAlt":`Código QR del enlace de la credencial`,"admin.tag.empty":`Todavía no se ha creado ninguna tarjeta.`,"nav.statistics":`Estadísticas`,"statistics.from":`Desde`,"statistics.to":`Hasta`,"statistics.employee":`Empleado`,"statistics.worked":`Trabajado`,"statistics.target":`Objetivo`,"statistics.balance":`Saldo`,"statistics.openDays":`Días abiertos`,"statistics.totals":`Todos los empleados`,"scan.title":`Tarjeta`,"scan.done":`Fichado para {{name}} a las {{time}}`,"scan.failed":`No se pudo usar la tarjeta: {{reason}}`,"presence.title":`Presencia`,"presence.present":`Presente`,"presence.absent":`Ausente`,"presence.tapPin":`Introduce el PIN para fichar`,"presence.cancel":`Cancelar`,"presence.updated":`{{name}} ahora está {{state}}`,"presence.disabled":`El terminal de quiosco está desactivado en la configuración de la instancia.`,"admin.user.photo":`Foto`,"admin.user.photoTitle":`Foto de {{name}}`,"admin.user.photoChoose":`Elegir imagen`,"admin.user.photoRemove":`Quitar imagen`,"admin.user.photoHint":`PNG, JPEG, WEBP o GIF hasta 256 KB. Sin imagen se muestra el marcador.`,"admin.corrections":`Correcciones de tiempo`,"corrections.employee":`Empleado`,"corrections.previous":`Mes anterior`,"corrections.next":`Mes siguiente`,"corrections.reason":`Motivo`,"corrections.reasonHint":`Se guarda en el registro de auditoría`,"corrections.add":`Añadir fichaje o día`,"corrections.addTitle":`Añadir fichaje`,"corrections.addHint":`Deja «salida» vacío si solo falta un fichaje`,"corrections.editTitle":`Modificar fichaje`,"corrections.remove":`Eliminar fichaje`,"corrections.date":`Fecha`,"corrections.from":`Entrada`,"corrections.to":`Salida`,"corrections.direction":`Dirección`,"corrections.note":`Nota`,"corrections.empty":`Sin fichajes en este mes`,"corrections.byAdmin":`añadido por la administración`,"corrections.history":`Historial`,"corrections.actor":`Por`,"corrections.actionCreate":`Añadido`,"corrections.actionUpdate":`Modificado`,"corrections.actionDelete":`Eliminado`,"keypad.backspace":`Borrar`,"admin.settings.branding":`Imagen corporativa`,"admin.settings.brandingHint":`Logotipo, imagen de fondo y color de fondo de esta instalación. La pantalla de inicio de sesión y las pantallas de kiosco también las muestran.`,"admin.settings.brandLogo":`Elegir logotipo`,"admin.settings.brandBackground":`Elegir fondo`,"admin.brand.imageResized":`Reducida para la visualización ({{size}}).`,"admin.brand.imageTooLarge":`Incluso reducida, la imagen sigue siendo demasiado grande.`,"admin.brand.imageType":`Solo son posibles PNG, JPEG, WEBP o GIF.`,"admin.brand.imageUnreadable":`No se pudo leer la imagen.`,"admin.settings.brandColor":`Color de fondo`,"admin.settings.brandColorHint":`Valor hexadecimal como #1a2b3c, vacío para el valor predeterminado`,"admin.settings.brandColorPresets":`Colores sugeridos`,"admin.settings.brandColorDefault":`Predeterminado`,"admin.backup.download":`Descargar`,"admin.backup.restore":`Restaurar`,"admin.backup.restoreTitle":`Restaurar una copia de seguridad`,"admin.backup.restoreConfirm":`La copia de seguridad {{name}} se aplica en el próximo arranque del adaptador; la base de datos actual se conserva al lado como archivo. Reinicia la instancia después.`,"admin.backup.pendingHint":`{{name}} se aplica en el próximo arranque ({{users}} empleados, {{entries}} fichajes) - reinicia la instancia.`,"error.backup_invalid":`Ese archivo no es una copia de seguridad de este adaptador.`,"admin.settings.brandImageRemove":`Quitar imagen`,"admin.settings.brandColorDefaultHint":`Restablece el color y la imagen de fondo`,"admin.triggers":`Acciones (ioBroker)`,"admin.triggersHint":"Un estado de otro adaptador ficha o define la presencia — un lector de huellas, un botón o un contacto de puerta. Solo se activa cuando cambia el valor. Como valor puedes escribir `toggle`: así se activa en cada cambio (por ejemplo encendido y otra vez apagado).","admin.trigger.label":`Descripción`,"admin.trigger.sourceState":`Estado`,"admin.trigger.mode":`Disparador`,"admin.trigger.modeCondition":`El estado lleva el valor`,"admin.trigger.modeUser":`El valor es el empleado`,"admin.trigger.condition":`Valor`,"admin.trigger.user":`Empleado`,"admin.trigger.action":`Acción`,"admin.trigger.actionPunch":`Fichar (entrada o salida)`,"admin.trigger.actionQuickPunch":`Fichar con redondeo rápido`,"admin.trigger.actionPresent":`Marcar como presente`,"admin.trigger.actionAbsent":`Marcar como ausente`,"admin.trigger.cooldown":`Bloqueo (segundos)`,"admin.trigger.active":`Activo`,"admin.trigger.add":`Añadir acción`,"admin.trigger.lastFired":`Última ejecución`,"admin.trigger.empty":`Todavía no hay acciones.`,"admin.trigger.conditionHint":"Valor o `toggle` para activarse en cada cambio","admin.settings.automations":`Reglas (automáticas)`,"admin.settings.automationsHint":`Lo que hace el adaptador por su cuenta: fichar la salida a la hora local configurada, avisar de una salida que falta o recordar tras trabajar demasiado tiempo sin pausa. Cada regla se ejecuta como máximo una vez por empleado y día.`,"admin.automation.kind":`Tipo`,"admin.automation.kindClockIn":`Fichar la entrada automáticamente`,"admin.automation.kindClockOut":`Fichar la salida automáticamente`,"admin.automation.kindMissingPunch":`Avisar de salida que falta`,"admin.automation.kindBreakReminder":`Recordatorio de pausa`,"admin.automation.at":`Hora`,"admin.automation.atHint":`Hora local del empleado`,"admin.automation.after":`Tras (minutos)`,"admin.automation.user":`Empleado`,"admin.automation.allUsers":`todos los empleados`,"admin.automation.add":`Añadir regla`,"admin.automation.empty":`Todavía no hay reglas.`,"admin.automation.runs":`Últimas ejecuciones`,"admin.automation.weekdays":`Días de la semana`,"admin.automation.repeat":`Repetición`,"admin.automation.repeatDay":`una vez al día`,"admin.automation.repeatWeek":`una vez por semana`,"admin.settings.setting.report_font_path":`Fuente para PDF`,"presence.workedToday":`Trabajado hoy`,"admin.user.workedTime":`Tiempo de trabajo en la tarjeta de presencia`,"admin.user.workedTimeHint":`Muestra en la tarjeta de presencia el tiempo trabajado hoy (por ejemplo, 1:23). Sin fichaje pone 0:00; sin esta autorización la tarjeta se queda en presente/ausente y el nombre.`},Pw={"absences.create":`Poproś o nieobecność`,"absences.created":`Zgłoszono nieobecność.`,"absences.empty":`Brak nieobecności w tym roku.`,"absences.from":`Z`,"absences.portion":`Udział dnia`,"absences.status":`Status`,"absences.title":`Nieobecności`,"absences.to":`Do`,"absences.type":`Typ`,"absences.typeHint":`Kod rodzaju nieobecności, np.: F na wakacje`,"admin.backup":`Kopie zapasowe`,"admin.backup.create":`Utwórz kopię zapasową teraz`,"admin.backup.upload":`Wgraj kopię`,"admin.backup.uploadHint":`Wybierz pobraną kopię (.sqlite) - zostanie sprawdzona i zastosowana przy następnym starcie.`,"admin.backup.delete":`Usuń`,"admin.backup.deleteTitle":`Usuń kopię`,"admin.backup.deleteConfirm":`Kopia {{name}} zostanie usunięta. Tego nie można cofnąć.`,"admin.backup.done":`Kopia zapasowa {{name}} została utworzona, usunięto {{removed}} stare pliki.`,"admin.backup.empty":`Nie ma jeszcze kopii zapasowych.`,"admin.backup.retention":`Kopie zapasowe starsze niż {{days}} dni są usuwane, zawsze zachowywana jest najnowsza.`,"admin.forbidden":`Nie możesz otwierać administracji.`,"admin.title":`Administracja`,"admin.user.active":`Aktywny`,"admin.user.create":`Dodaj pracownika`,"admin.user.empty":`Nie ma jeszcze pracowników.`,"admin.user.inactive":`Dezaktywowane`,"admin.user.login":`Login`,"admin.user.name":`Nazwa`,"admin.user.newPin":`Nowy PIN`,"admin.user.password":`Hasło`,"admin.user.passwordHint":`Co najmniej 8 znaków, duże i małe litery oraz cyfry.`,"admin.user.pin":`PIN`,"admin.user.pinHint":`4 do 8 cyfr dla terminala`,"admin.user.pinTitle":`PIN identyfikatora dla {{name}}`,"admin.user.roles":`Role`,"admin.users":`Pracownicy`,"app.offline":`Offline – ciosy są w kolejce`,"app.online":`Połączony`,"app.title":`Śledzenie czasu`,"common.cancel":`Anulować`,"common.close":`Zamknąć`,"common.loading":`Załadunek…`,"common.none":`–`,"common.refresh":`Odświeżać`,"common.retry":`Spróbować ponownie`,"common.save":`Ratować`,"error.bad_request":`Dane wejściowe nie zostały zaakceptowane.`,"error.conflict":`Zmiana jest sprzeczna z istniejącymi danymi.`,"error.csrf_rejected":`Żądanie zostało odrzucone ze względów bezpieczeństwa. Spróbuj ponownie.`,"error.invalid_credentials":`Nazwa użytkownika lub hasło są nieprawidłowe.`,"error.locked_out":`Zbyt wiele nieudanych prób. Spróbuj ponownie później.`,"error.network_error":`Serwer jest nieosiągalny.`,"error.no_session":`Twoja sesja wygasła. Zaloguj się ponownie.`,"error.not_found":`Nie znaleziono.`,"error.permission_denied":`Nie wolno Ci tego robić.`,"error.report_font_missing":`Ten raport wymaga czcionki Unicode (ścieżka_fontu_reportu).`,"error.revision_conflict":`W międzyczasie cios został zmieniony. Proszę załadować ponownie.`,"error.session_expired":`Twoja sesja wygasła. Zaloguj się ponownie.`,"error.unknown_error":`Nieoczekiwany błąd.`,"error.user_inactive":`To konto jest dezaktywowane.`,"login.failed":`Logowanie nie powiodło się`,"login.login":`Nazwa użytkownika`,"login.password":`Hasło`,"login.submit":`Zalogować się`,"login.title":`Zalogować się`,"month.absence":`Brak`,"month.balance":`Balansować`,"error.edit_window_closed":`Poza oknem edycji`,"admin.profile.pauseRules":`Własne zasady przerw`,"admin.profile.pauseRulesHint":`Zasady tylko dla tego pracownika: zastępują zasadę firmy z tym samym „od minut”. Bez własnych zasad obowiązuje tabela firmy.`,"report.csv":`Dane surowe (CSV)`,"month.edit":`Popraw`,"month.editTitle":`Popraw odbicia · {{date}}`,"month.editHint":`Tylko w oknie edycji - starsze dni zmienia administracja.`,"month.time":`Godzina`,"month.direction":`Kierunek`,"month.directionIn":`Wejście`,"month.directionOut":`Wyjście`,"month.addPunch":`Dodaj odbicie`,"month.pause":`Przerwa`,"month.paidBreak":`w tym płatne`,"month.empty":`Brak dni w tym miesiącu.`,"month.holiday":`Wakacje`,"month.months":`Miesiące roku`,"month.next":`Przyszły miesiąc`,"month.open":`otwarty`,"month.previous":`Poprzedni miesiąc`,"month.target":`Cel`,"month.title":`Miesiąc`,"month.worked":`Pracował`,"nav.absences":`Nieobecności`,"nav.dashboard":`Stemplowanie`,"nav.logout":`Wyloguj się`,"nav.menu":`Menu`,"nav.month":`Miesiąc`,"nav.profile":`Profil`,"nav.reports":`Raporty`,"nav.sync":`Synchronizacja`,"profile.changePassword":`Zmień hasło`,"profile.changed":`Hasło zostało zmienione. Zaloguj się ponownie.`,"profile.language":`Język`,"profile.newPassword":`Nowe hasło`,"profile.roles":`Uprawnienia`,"profile.title":`Profil`,"profile.user":`Użytkownik`,"punch.balance":`Saldo dziś`,"punch.closed":`Brak stempla`,"punch.in":`Zastempluj wejście`,"punch.last":`Ostatni stempel {{time}}`,"punch.note":`Notatka`,"punch.now":`Stempluj`,"punch.open":`Zarejestrowano od {{time}}`,"punch.out":`Zastempluj wyjście`,"punch.queued":`Zapisany offline – zostanie wysłany automatycznie`,"punch.quick":`Szybkie stemplowanie`,"punch.sent":`Stempel zapisany ({{time}})`,"punch.target":`Cel na dziś`,"punch.worked":`Przepracowano dziś`,"report.failed":`Nie można utworzyć wyciągu.`,"report.pdf":`PDF`,"report.xls":`Przewyższać`,"reports.empty":`Brak danych za ten okres.`,"reports.monthTotals":`Sumy miesięczne`,"reports.overtime":`Nadgodziny`,"reports.paidOut":`Wypłata: {{minutes}}`,"reports.title":`Raporty`,"reports.vacation":`Urlop (wykorzystany / uprawniony)`,"reports.year":`Rok`,"reports.yearTotals":`Sumy roku`,"sync.accept":`Zachowaj wartość serwera`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Otwarte konflikty`,"sync.dismiss":`Wyrzucać`,"sync.done":`Wysłano: {{accepted}}, duplikaty: {{duplicates}}, konflikty: {{conflicts}}`,"sync.empty":`Żadnych otwartych konfliktów.`,"sync.flush":`Wyślij teraz`,"sync.none":`Nic do wysłania.`,"sync.pending":`{{count}} ciosów czeka`,"sync.permission":`Nie wolno Ci rozwiązywać konfliktów.`,"sync.resolved":`Konflikt rozwiązany.`,"sync.title":`Synchronizacja`,"terminal.title":`Terminal`,"terminal.deviceToken":`Token urządzenia`,"terminal.connect":`Połącz`,"terminal.badge":`Karta`,"terminal.noPin":`Na tym terminalu PIN nie jest potrzebny.`,"terminal.pin":`PIN`,"terminal.select":`Wybierz nazwisko`,"terminal.disabled":`Terminal jest wyłączony w ustawieniach adaptera.`,"admin.terminals":`Terminale`,"admin.terminal.name":`Nazwa`,"admin.terminal.location":`Lokalizacja`,"admin.terminal.pinRequired":`Pracownicy potrzebują swojego PIN-u`,"admin.terminal.create":`Utwórz terminal`,"admin.terminal.tokenOnce":`Skopiuj teraz token urządzenia — jest przechowywany tylko jako hash i pokazywany jednorazowo:`,"admin.terminal.url":`Otwórz ten adres na urządzeniu kiosku:`,"admin.terminal.revoke":`Odwołaj`,"admin.terminal.revoked":`odwołany`,"admin.terminal.users":`Pracownicy`,"admin.terminal.usersHint":`Bez wyboru terminal pokazuje wszystkich pracowników.`,"admin.terminal.usersAll":`wszyscy pracownicy`,"admin.terminal.empty":`Nie utworzono jeszcze żadnego terminala.`,"admin.terminal.confirmRevoke":`Odwołać „{{name}}”? Token urządzenia przestanie działać natychmiast.`,"admin.settings":`Ustawienia`,"admin.settings.fontPath":`Plik czcionki Unicode dla wyciągów PDF (.ttf/.otf)`,"admin.user.profile":`Profil pracy`,"admin.user.profileTitle":`Profil pracy · {{name}}`,"admin.profile.percent":`Wymiar zatrudnienia (%)`,"admin.profile.weeklyHours":`Godziny tygodniowe przy 100 %`,"admin.profile.workdays":`Dni robocze`,"admin.profile.overtimeModel":`Model nadgodzin`,"admin.profile.model.monthly":`Miesięczny`,"admin.profile.model.yearly":`Roczny`,"admin.profile.model.cumulative":`Narastający`,"admin.profile.vacationPerYear":`Dni urlopu na rok`,"admin.profile.vacationCarryover":`Urlop przeniesiony (dni)`,"admin.profile.overtimeCarryover":`Nadgodziny przeniesione (godziny)`,"admin.profile.vorholzeitPerYear":`„Vorholzeit” na rok (godziny)`,"admin.profile.pausePaid":`Płatne minuty przerwy na dzień`,"admin.profile.pausePaidHint":`Tyle minut przerwy liczy się do czasu pracy (0 = przerwa nie jest płatna).`,"admin.settings.pauseMode":`Przerwy`,"admin.settings.pauseModeTitle":`Zasada przerw`,"admin.settings.pauseModeHint":`Jak ustalana jest przerwa dnia.`,"admin.settings.pauseRules":`Tabela przerw`,"admin.settings.pauseRulesHint":`Dotyczy dni bez zarejestrowanej przerwy: od podanego czasu bloku (od pierwszego do ostatniego odbicia) minuty są odejmowane.`,"admin.settings.pauseFrom":`od minut`,"admin.settings.pauseTo":`do minut (puste = bez końca)`,"admin.settings.pauseMinutes":`minuty przerwy`,"admin.settings.pauseActive":`Reguła aktywna`,"admin.settings.pauseAdd":`Dodaj regułę`,"admin.settings.pauseSave":`Zapisz tabelę przerw`,"admin.settings.pauseMode.auto":`Przerwa zarejestrowana, inaczej tabela`,"admin.settings.pauseMode.punched":`Tylko zarejestrowane przerwy`,"admin.settings.pauseMode.staffel":`Tylko tabela przerw`,"admin.settings.fontPathHint":`Potrzebne dla rosyjskiego, ukraińskiego i chińskiego; puste = wbudowane czcionki obejmujące tylko Latin-1.`,"admin.settings.advanced":`Wszystkie ustawienia instancji (nazwy techniczne, 1/0 dla przełączników)`,"admin.settings.setting.edit_window_days":`Okno edycji (dni)`,"admin.settings.setting.quick_round_minutes":`Zaokrąglanie (min)`,"admin.settings.setting.absence_calc_until_today":`Nieobecności do dziś`,"admin.settings.setting.absence_deduct_worktime":`Odliczaj nieobecności`,"admin.settings.setting.print_limit_days":`Limit wydruku (dni)`,"admin.settings.setting.holiday_country":`Kraj świąt`,"admin.settings.setting.default_language":`Język domyślny`,"admin.settings.setting.session_ttl_minutes":`Sesja (minuty)`,"admin.settings.setting.backup_retention_days":`Kopie (dni)`,"admin.settings.setting.attendance_list_visible":`Lista obecności`,"admin.settings.setting.timezone":`Strefa czasowa`,"admin.settings.saved":`Ustawienia zapisane.`,"admin.holidays":`Dni świąteczne`,"admin.holiday.date":`Data (RRRR-MM-DD)`,"admin.holiday.name":`Nazwa`,"holiday.newYear":`Nowy Rok`,"holiday.epiphany":`Trzech Króli`,"holiday.goodFriday":`Wielki Piątek`,"holiday.easterMonday":`Poniedziałek Wielkanocny`,"holiday.labourDay":`Święto Pracy`,"holiday.ascension":`Wniebowstąpienie`,"holiday.whitMonday":`Poniedziałek Zielonych Świąt`,"holiday.corpusChristi":`Boże Ciało`,"holiday.nationalDay":`Święto narodowe`,"holiday.germanUnity":`Dzień Jedności Niemiec`,"holiday.assumption":`Wniebowzięcie Najświętszej Maryi Panny`,"holiday.allSaints":`Wszystkich Świętych`,"holiday.immaculateConception":`Niepokalane Poczęcie`,"holiday.christmas":`Boże Narodzenie`,"holiday.boxingDay":`Drugi dzień świąt`,"admin.holiday.add":`Dodaj dzień świąteczny`,"admin.holiday.year":`Rok`,"admin.holiday.region":`Region (opcjonalnie)`,"admin.holiday.empty":`W tym roku nie zapisano dni świątecznych.`,"admin.tags":`Karty (RFID/NFC)`,"admin.tag.label":`Etykieta`,"admin.tag.user":`Pracownik`,"admin.tag.create":`Utwórz kartę`,"admin.tag.linkOnce":`Zapisz ten link na tagu albo otwórz go w telefonie:`,"admin.tag.delete":`Usuń`,"admin.tag.active":`aktywny`,"admin.tag.expired":`wygasły`,"admin.tag.revoked":`unieważniony`,"admin.tag.lastUsed":`ostatnie użycie`,"admin.tag.remove":`Usuń trwale`,"admin.tag.edit":`Edytuj`,"admin.tag.reissue":`Nowy link`,"admin.tag.editTitle":`Edycja identyfikatora`,"admin.tag.editHint":`Inny pracownik lub nowa ważność wydaje nowy link — wcześniej wydany link przestaje natychmiast działać.`,"admin.tag.validityDays":`Ważność (dni)`,"admin.tag.oldLinkDead":`Wcześniej wydany link nie działa już.`,"admin.tag.qrAlt":`Kod QR linku identyfikatora`,"admin.tag.empty":`Nie utworzono jeszcze karty.`,"nav.statistics":`Statystyki`,"statistics.from":`Od`,"statistics.to":`Do`,"statistics.employee":`Pracownik`,"statistics.worked":`Przepracowano`,"statistics.target":`Norma`,"statistics.balance":`Saldo`,"statistics.openDays":`Otwarte dni`,"statistics.totals":`Wszyscy pracownicy`,"scan.title":`Karta`,"scan.done":`Zastemplowano dla {{name}} o {{time}}`,"scan.failed":`Nie udało się użyć karty: {{reason}}`,"presence.title":`Obecność`,"presence.present":`Obecny`,"presence.absent":`Nieobecny`,"presence.tapPin":`Wprowadź PIN, aby wystemplować wejście lub wyjście`,"presence.cancel":`Anuluj`,"presence.updated":`{{name}} jest teraz {{state}}`,"presence.disabled":`Terminal kiosku jest wyłączony w ustawieniach instancji.`,"admin.user.photo":`Zdjęcie`,"admin.user.photoTitle":`Zdjęcie {{name}}`,"admin.user.photoChoose":`Wybierz obraz`,"admin.user.photoRemove":`Usuń obraz`,"admin.user.photoHint":`PNG, JPEG, WEBP lub GIF do 256 KB. Bez zdjęcia wyświetlany jest obraz zastępczy.`,"admin.corrections":`Korekty czasu`,"corrections.employee":`Pracownik`,"corrections.previous":`Poprzedni miesiąc`,"corrections.next":`Następny miesiąc`,"corrections.reason":`Powód`,"corrections.reasonHint":`Zapisywane w dzienniku audytu`,"corrections.add":`Dodaj odbicie lub dzień`,"corrections.addTitle":`Dodaj odbicie`,"corrections.addHint":`Pozostaw „wyjście” puste, jeśli brakuje jednego odbicia`,"corrections.editTitle":`Zmień odbicie`,"corrections.remove":`Usuń odbicie`,"corrections.date":`Data`,"corrections.from":`Przyjście`,"corrections.to":`Wyjście`,"corrections.direction":`Kierunek`,"corrections.note":`Notatka`,"corrections.empty":`Brak odbić w tym miesiącu`,"corrections.byAdmin":`dodane przez administrację`,"corrections.history":`Historia`,"corrections.actor":`Kto`,"corrections.actionCreate":`Dodano`,"corrections.actionUpdate":`Zmieniono`,"corrections.actionDelete":`Usunięto`,"keypad.backspace":`Usuń`,"admin.settings.branding":`Wizerunek firmy`,"admin.settings.brandingHint":`Logo, obraz tła i kolor tła tej instalacji. Ekran logowania i ekrany kiosku również je pokazują.`,"admin.settings.brandLogo":`Wybierz logo`,"admin.settings.brandBackground":`Wybierz tło`,"admin.brand.imageResized":`Pomniejszono do wyświetlania ({{size}}).`,"admin.brand.imageTooLarge":`Nawet pomniejszony obraz jest zbyt duży.`,"admin.brand.imageType":`Możliwe są tylko PNG, JPEG, WEBP lub GIF.`,"admin.brand.imageUnreadable":`Nie udało się odczytać obrazu.`,"admin.settings.brandColor":`Kolor tła`,"admin.settings.brandColorHint":`Wartość szesnastkowa, np. #1a2b3c; puste pole oznacza wartość domyślną`,"admin.settings.brandColorPresets":`Sugerowane kolory`,"admin.settings.brandColorDefault":`Domyślny`,"admin.backup.download":`Pobierz`,"admin.backup.restore":`Przywróć`,"admin.backup.restoreTitle":`Przywróć kopię zapasową`,"admin.backup.restoreConfirm":`Kopia zapasowa {{name}} zostanie zastosowana przy następnym uruchomieniu adaptera; obecna baza danych pozostanie obok jako plik. Następnie uruchom ponownie instancję.`,"admin.backup.pendingHint":`{{name}} zostanie zastosowana przy następnym uruchomieniu ({{users}} pracowników, {{entries}} stempli) - uruchom ponownie instancję.`,"error.backup_invalid":`Ten plik nie jest kopią zapasową tego adaptera.`,"admin.settings.brandImageRemove":`Usuń obraz`,"admin.settings.brandColorDefaultHint":`Przywraca kolor tła i obraz tła`,"admin.triggers":`Akcje (ioBroker)`,"admin.triggersHint":"Stan innego adaptera stempluje lub ustawia obecność — czytnik linii papilarnych, przycisk albo kontakt drzwiowy. Wyzwalane jest tylko przy zmianie wartości. Jako wartość możesz wpisać `toggle`: wtedy reaguje na każdą zmianę (np. włączenie i wyłączenie).","admin.trigger.label":`Nazwa`,"admin.trigger.sourceState":`Stan`,"admin.trigger.mode":`Wyzwalacz`,"admin.trigger.modeCondition":`Stan ma wartość`,"admin.trigger.modeUser":`Wartość to pracownik`,"admin.trigger.condition":`Wartość`,"admin.trigger.user":`Pracownik`,"admin.trigger.action":`Akcja`,"admin.trigger.actionPunch":`Zastempluj (wejście lub wyjście)`,"admin.trigger.actionQuickPunch":`Zastempluj z szybkim zaokrągleniem`,"admin.trigger.actionPresent":`Ustaw jako obecny`,"admin.trigger.actionAbsent":`Ustaw jako nieobecny`,"admin.trigger.cooldown":`Blokada (sekundy)`,"admin.trigger.active":`Aktywne`,"admin.trigger.add":`Dodaj akcję`,"admin.trigger.lastFired":`Ostatnie wyzwolenie`,"admin.trigger.empty":`Nie ma jeszcze akcji.`,"admin.trigger.conditionHint":"Wartość lub `toggle`, aby reagować na każdą zmianę","admin.settings.automations":`Reguły (automatyczne)`,"admin.settings.automationsHint":`Co adapter robi sam: stempluje wyjście o ustalonej godzinie lokalnej, zgłasza brak wyjścia albo przypomina po zbyt długiej pracy bez przerwy. Reguła działa co najwyżej raz na pracownika i dzień.`,"admin.automation.kind":`Rodzaj`,"admin.automation.kindClockIn":`Automatycznie zastempluj wejście`,"admin.automation.kindClockOut":`Automatycznie stempluj wyjście`,"admin.automation.kindMissingPunch":`Zgłoś brak wyjścia`,"admin.automation.kindBreakReminder":`Przypomnienie o przerwie`,"admin.automation.at":`Godzina`,"admin.automation.atHint":`Czas lokalny pracownika`,"admin.automation.after":`Po (minutach)`,"admin.automation.user":`Pracownik`,"admin.automation.allUsers":`wszyscy pracownicy`,"admin.automation.add":`Dodaj regułę`,"admin.automation.empty":`Nie ma jeszcze reguł.`,"admin.automation.runs":`Ostatnie wykonania`,"admin.automation.weekdays":`Dni tygodnia`,"admin.automation.repeat":`Powtarzanie`,"admin.automation.repeatDay":`raz dziennie`,"admin.automation.repeatWeek":`raz w tygodniu`,"admin.settings.setting.report_font_path":`Czcionka do PDF`,"presence.workedToday":`Przepracowane dzisiaj`,"admin.user.workedTime":`Czas pracy na karcie obecności`,"admin.user.workedTimeHint":`Pokazuje na karcie obecności czas przepracowany dzisiaj (np. 1:23). Bez rejestracji jest tam 0:00; bez tej zgody karta pozostaje przy obecny/nieobecny i nazwisku.`},Fw={"absences.create":`Прохання про відсутність`,"absences.created":`Прохання про відсутність.`,"absences.empty":`Жодних пропусків у цьому році.`,"absences.from":`Від`,"absences.portion":`Частка дня`,"absences.status":`Статус`,"absences.title":`Прогули`,"absences.to":`до`,"absences.type":`Тип`,"absences.typeHint":`Код типу відсутності, напр. F для відпустки`,"admin.backup":`Резервні копії`,"admin.backup.create":`Створіть резервну копію зараз`,"admin.backup.upload":`Завантажити резервну копію`,"admin.backup.uploadHint":`Виберіть завантажену копію (.sqlite) - вона буде перевірена та застосована при наступному запуску.`,"admin.backup.delete":`Видалити`,"admin.backup.deleteTitle":`Видалити резервну копію`,"admin.backup.deleteConfirm":`Копію {{name}} буде видалено. Це не можна скасувати.`,"admin.backup.done":`Резервну копію {{name}} створено, {{removed}} старих файлів видалено.`,"admin.backup.empty":`Резервних копій ще немає.`,"admin.backup.retention":`Резервні копії, старші за {{days}} днів, видаляються, найновіша завжди зберігається.`,"admin.forbidden":`Вам заборонено відкривати адміністрацію.`,"admin.title":`Адміністрація`,"admin.user.active":`Активний`,"admin.user.create":`Додати співробітника`,"admin.user.empty":`Ще немає працівників.`,"admin.user.inactive":`Деактивовано`,"admin.user.login":`Логін`,"admin.user.name":`Ім'я`,"admin.user.newPin":`Новий PIN-код`,"admin.user.password":`Пароль`,"admin.user.passwordHint":`Мінімум 8 символів у верхньому та нижньому регістрах, а також цифри.`,"admin.user.pin":`PIN-код`,"admin.user.pinHint":`Від 4 до 8 цифр для терміналу`,"admin.user.pinTitle":`PIN-код перепустки для {{name}}`,"admin.user.roles":`Ролі`,"admin.users":`Співробітники`,"app.offline":`Offline – відмітки в черзі`,"app.online":`Підключено`,"app.title":`Відстеження часу`,"common.cancel":`Скасувати`,"common.close":`Закрити`,"common.loading":`Завантаження…`,"common.none":`–`,"common.refresh":`Оновити`,"common.retry":`Повторіть спробу`,"common.save":`зберегти`,"error.bad_request":`Вхід не прийнято.`,"error.conflict":`Зміна суперечить наявним даним.`,"error.csrf_rejected":`Запит відхилено з міркувань безпеки, повторіть спробу.`,"error.invalid_credentials":`Ім'я користувача або пароль неправильні.`,"error.locked_out":`Забагато невдалих спроб. Спробуйте пізніше.`,"error.network_error":`Сервер недоступний.`,"error.no_session":`Ваш сеанс закінчився, увійдіть знову.`,"error.not_found":`Не знайдено.`,"error.permission_denied":`Вам заборонено це робити.`,"error.report_font_missing":`Для цього звіту потрібен шрифт Unicode (report_font_path).`,"error.revision_conflict":`Перфорацію тим часом було змінено, перезавантажте.`,"error.session_expired":`Ваш сеанс закінчився, увійдіть знову.`,"error.unknown_error":`Несподівана помилка.`,"error.user_inactive":`Цей обліковий запис дезактивовано.`,"login.failed":`Помилка входу`,"login.login":`Ім'я користувача`,"login.password":`Пароль`,"login.submit":`Увійдіть`,"login.title":`Увійдіть`,"month.absence":`Відсутність`,"month.balance":`Баланс`,"error.edit_window_closed":`Поза вікном редагування`,"admin.profile.pauseRules":`Власні правила перерв`,"admin.profile.pauseRulesHint":`Правила лише для цього працівника: вони замінюють правило компанії з тим самим «з хвилин». Без власних правил діє шкала компанії.`,"report.csv":`Початкові дані (CSV)`,"month.edit":`Виправити`,"month.editTitle":`Виправити відбиття · {{date}}`,"month.editHint":`Лише всередині вікна редагування - старші дні змінює адміністрація.`,"month.time":`Час`,"month.direction":`Напрямок`,"month.directionIn":`Прихід`,"month.directionOut":`Вихід`,"month.addPunch":`Додати відбиття`,"month.pause":`Перерва`,"month.paidBreak":`з них оплачено`,"month.empty":`Немає днів у цьому місяці.`,"month.holiday":`Свято`,"month.months":`Місяці року`,"month.next":`Наступного місяця`,"month.open":`відкрито`,"month.previous":`Попередній місяць`,"month.target":`Цільова`,"month.title":`місяць`,"month.worked":`Працювала`,"nav.absences":`Прогули`,"nav.dashboard":`Відмітка`,"nav.logout":`Вийти`,"nav.menu":`Меню`,"nav.month":`місяць`,"nav.profile":`Профіль`,"nav.reports":`Звіти`,"nav.sync":`Синхронізація`,"profile.changePassword":`Змінити пароль`,"profile.changed":`Пароль змінено, увійдіть знову.`,"profile.language":`Мова`,"profile.newPassword":`Новий пароль`,"profile.roles":`Дозволи`,"profile.title":`Профіль`,"profile.user":`Користувач`,"punch.balance":`Сальдо сьогодні`,"punch.closed":`Немає відмітки`,"punch.in":`Прихід`,"punch.last":`Остання відмітка {{time}}`,"punch.note":`Примітка`,"punch.now":`Відмітитися`,"punch.open":`Відмітка з {{time}}`,"punch.out":`Вихід`,"punch.queued":`Збережено офлайн – буде надіслано автоматично`,"punch.quick":`Швидка відмітка`,"punch.sent":`Відмітку збережено ({{time}})`,"punch.target":`План сьогодні`,"punch.worked":`Відпрацьовано сьогодні`,"report.failed":`Не вдалося створити заяву.`,"report.pdf":`PDF`,"report.xls":`Excel`,"reports.empty":`Немає даних за цей період.`,"reports.monthTotals":`Підсумки за місяць`,"reports.overtime":`Понаднормова робота`,"reports.paidOut":`Виплачено: {{minutes}}`,"reports.title":`Звіти`,"reports.vacation":`Відпустка (взята / право)`,"reports.year":`рік`,"reports.yearTotals":`Підсумки року`,"sync.accept":`Зберігайте значення сервера`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Відкриті конфлікти`,"sync.dismiss":`Відкинути`,"sync.done":`Надіслано: {{accepted}}, дублікатів: {{duplicates}}, конфліктів: {{conflicts}}`,"sync.empty":`Без відкритих конфліктів.`,"sync.flush":`Надішліть зараз`,"sync.none":`Немає надсилати.`,"sync.pending":`{{count}} відміток у черзі`,"sync.permission":`Вам заборонено вирішувати конфлікти.`,"sync.resolved":`Конфлікт вирішено.`,"sync.title":`Синхронізація`,"terminal.title":`Термінал`,"terminal.deviceToken":`Токен пристрою`,"terminal.connect":`Підключити`,"terminal.badge":`Перепустка`,"terminal.noPin":`На цьому терміналі PIN не потрібен.`,"terminal.pin":`PIN-код`,"terminal.select":`Виберіть ім'я`,"terminal.disabled":`Термінал вимкнено в налаштуваннях адаптера.`,"admin.terminals":`Термінали`,"admin.terminal.name":`Назва`,"admin.terminal.location":`Розташування`,"admin.terminal.pinRequired":`Працівникам потрібен їхній PIN-код`,"admin.terminal.create":`Створити термінал`,"admin.terminal.tokenOnce":`Скопіюйте токен пристрою зараз — він зберігається лише як хеш і показується один раз:`,"admin.terminal.url":`Відкрийте цю адресу на пристрої кіоску:`,"admin.terminal.revoke":`Відкликати`,"admin.terminal.revoked":`відкликано`,"admin.terminal.users":`Співробітники`,"admin.terminal.usersHint":`Якщо нічого не вибрати, термінал показує всіх співробітників.`,"admin.terminal.usersAll":`усі співробітники`,"admin.terminal.empty":`Термінал ще не створено.`,"admin.terminal.confirmRevoke":`Відкликати «{{name}}»? Токен пристрою перестане працювати негайно.`,"admin.settings":`Налаштування`,"admin.settings.fontPath":`Файл шрифту Unicode для PDF-звітів (.ttf/.otf)`,"admin.user.profile":`Робочий профіль`,"admin.user.profileTitle":`Робочий профіль · {{name}}`,"admin.profile.percent":`Зайнятість (%)`,"admin.profile.weeklyHours":`Годин на тиждень при 100 %`,"admin.profile.workdays":`Робочі дні`,"admin.profile.overtimeModel":`Модель надурочних`,"admin.profile.model.monthly":`Щомісяця`,"admin.profile.model.yearly":`За рік`,"admin.profile.model.cumulative":`Накопичувально`,"admin.profile.vacationPerYear":`Днів відпустки на рік`,"admin.profile.vacationCarryover":`Перенесення відпустки (дні)`,"admin.profile.overtimeCarryover":`Перенесення надурочних (години)`,"admin.profile.vorholzeitPerYear":`«Vorholzeit» на рік (години)`,"admin.profile.pausePaid":`Оплачуваних хвилин перерви на день`,"admin.profile.pausePaidHint":`Стільки хвилин перерви входять у робочий час (0 = перерва не оплачується).`,"admin.settings.pauseMode":`Перерви`,"admin.settings.pauseModeTitle":`Правило перерв`,"admin.settings.pauseModeHint":`Як визначається перерва за день.`,"admin.settings.pauseRules":`Шкала перерв`,"admin.settings.pauseRulesHint":`Діє для днів без відбитої перерви: починаючи з указаної довжини блоку (від першого до останнього відбиття в блоці) хвилини віднімаються.`,"admin.settings.pauseFrom":`з хвилин`,"admin.settings.pauseTo":`до хвилин (порожньо = без обмеження)`,"admin.settings.pauseMinutes":`хвилин перерви`,"admin.settings.pauseActive":`Правило активне`,"admin.settings.pauseAdd":`Додати правило`,"admin.settings.pauseSave":`Зберегти шкалу перерв`,"admin.settings.pauseMode.auto":`Відбита перерва, інакше шкала`,"admin.settings.pauseMode.punched":`Лише відбиті перерви`,"admin.settings.pauseMode.staffel":`Лише шкала перерв`,"admin.settings.fontPathHint":`Потрібен для російської, української та китайської; порожньо = вбудовані шрифти, що покривають лише Latin-1.`,"admin.settings.advanced":`Усі налаштування екземпляра (технічні назви, 1/0 для перемикачів)`,"admin.settings.setting.edit_window_days":`Вікно редагування (днів)`,"admin.settings.setting.quick_round_minutes":`Округлення (хв)`,"admin.settings.setting.absence_calc_until_today":`Відсутності до сьогодні`,"admin.settings.setting.absence_deduct_worktime":`Відрахувати відсутності`,"admin.settings.setting.print_limit_days":`Ліміт друку (днів)`,"admin.settings.setting.holiday_country":`Країна свят`,"admin.settings.setting.default_language":`Мова за замовчуванням`,"admin.settings.setting.session_ttl_minutes":`Сесія (хвилини)`,"admin.settings.setting.backup_retention_days":`Копії (днів)`,"admin.settings.setting.attendance_list_visible":`Список присутності`,"admin.settings.setting.timezone":`Часовий пояс`,"admin.settings.saved":`Налаштування збережено.`,"admin.holidays":`Святкові дні`,"admin.holiday.date":`Дата (РРРР-ММ-ДД)`,"admin.holiday.name":`Назва`,"holiday.newYear":`Новий рік`,"holiday.epiphany":`Богоявлення`,"holiday.goodFriday":`Страсна п'ятниця`,"holiday.easterMonday":`Великодній понеділок`,"holiday.labourDay":`День праці`,"holiday.ascension":`Вознесіння`,"holiday.whitMonday":`Другий день Трійці`,"holiday.corpusChristi":`Свято Тіла Христового`,"holiday.nationalDay":`Національне свято`,"holiday.germanUnity":`День німецької єдності`,"holiday.assumption":`Успіння Богородиці`,"holiday.allSaints":`День усіх святих`,"holiday.immaculateConception":`Непорочне зачаття`,"holiday.christmas":`Різдво`,"holiday.boxingDay":`Другий день Різдва`,"admin.holiday.add":`Додати святковий день`,"admin.holiday.year":`Рік`,"admin.holiday.region":`Регіон (необов'язково)`,"admin.holiday.empty":`За цей рік святкові дні не внесено.`,"admin.tags":`Перепустки (RFID/NFC)`,"admin.tag.label":`Мітка`,"admin.tag.user":`Працівник`,"admin.tag.create":`Створити перепустку`,"admin.tag.linkOnce":`Запишіть це посилання на мітку або відкрийте його на телефоні:`,"admin.tag.delete":`Видалити`,"admin.tag.active":`активний`,"admin.tag.expired":`прострочений`,"admin.tag.revoked":`відкликано`,"admin.tag.lastUsed":`останнє використання`,"admin.tag.remove":`Видалити остаточно`,"admin.tag.edit":`Змінити`,"admin.tag.reissue":`Нове посилання`,"admin.tag.editTitle":`Зміна перепустки`,"admin.tag.editHint":`Інший працівник або нова тривалість дії видає нове посилання — видане раніше посилання одразу перестає працювати.`,"admin.tag.validityDays":`Термін дії (днів)`,"admin.tag.oldLinkDead":`Видане раніше посилання більше не працює.`,"admin.tag.qrAlt":`QR-код посилання перепустки`,"admin.tag.empty":`Перепустку ще не створено.`,"nav.statistics":`Статистика`,"statistics.from":`З`,"statistics.to":`До`,"statistics.employee":`Працівник`,"statistics.worked":`Відпрацьовано`,"statistics.target":`План`,"statistics.balance":`Баланс`,"statistics.openDays":`Відкриті дні`,"statistics.totals":`Усі працівники`,"scan.title":`Перепустка`,"scan.done":`Відмітку для {{name}} о {{time}}`,"scan.failed":`Перепустку не вдалося використати: {{reason}}`,"presence.title":`Присутність`,"presence.present":`На робочому місці`,"presence.absent":`Відсутній`,"presence.tapPin":`Введіть PIN-код, щоб відмітитися`,"presence.cancel":`Скасувати`,"presence.updated":`{{name}} тепер {{state}}`,"presence.disabled":`Кіоск-термінал вимкнено в налаштуваннях екземпляра.`,"admin.user.photo":`Фото`,"admin.user.photoTitle":`Фото {{name}}`,"admin.user.photoChoose":`Вибрати зображення`,"admin.user.photoRemove":`Видалити зображення`,"admin.user.photoHint":`PNG, JPEG, WEBP або GIF до 256 КБ. Без зображення показується заповнювач.`,"admin.corrections":`Коригування часу`,"corrections.employee":`Співробітник`,"corrections.previous":`Попередній місяць`,"corrections.next":`Наступний місяць`,"corrections.reason":`Причина`,"corrections.reasonHint":`Зберігається в журналі (аудиті)`,"corrections.add":`Додати відмітку або день`,"corrections.addTitle":`Додати відмітку`,"corrections.addHint":`Залиште «вихід» порожнім, якщо бракує однієї відмітки`,"corrections.editTitle":`Змінити відмітку`,"corrections.remove":`Видалити відмітку`,"corrections.date":`Дата`,"corrections.from":`Прихід`,"corrections.to":`Вихід`,"corrections.direction":`Напрямок`,"corrections.note":`Нотатка`,"corrections.empty":`У цьому місяці відміток немає`,"corrections.byAdmin":`додано адміністрацією`,"corrections.history":`Історія`,"corrections.actor":`Хто`,"corrections.actionCreate":`Додано`,"corrections.actionUpdate":`Змінено`,"corrections.actionDelete":`Видалено`,"keypad.backspace":`Видалити`,"admin.settings.branding":`Брендинг компанії`,"admin.settings.brandingHint":`Логотип, фонове зображення та колір фону цієї інсталяції. Екран входу та екрани кіоску також їх показують.`,"admin.settings.brandLogo":`Вибрати логотип`,"admin.settings.brandBackground":`Вибрати фон`,"admin.brand.imageResized":`Зменшено для відображення ({{size}}).`,"admin.brand.imageTooLarge":`Навіть у зменшеному вигляді зображення завелике.`,"admin.brand.imageType":`Можливі лише PNG, JPEG, WEBP або GIF.`,"admin.brand.imageUnreadable":`Не вдалося прочитати зображення.`,"admin.settings.brandColor":`Колір фону`,"admin.settings.brandColorHint":`Значення у форматі Hex, наприклад #1a2b3c; порожньо — типове значення`,"admin.settings.brandColorPresets":`Готові кольори`,"admin.settings.brandColorDefault":`За замовчуванням`,"admin.backup.download":`Завантажити`,"admin.backup.restore":`Відновити`,"admin.backup.restoreTitle":`Відновити резервну копію`,"admin.backup.restoreConfirm":`Резервну копію {{name}} буде застосовано під час наступного запуску адаптера; поточна база даних залишиться поруч як файл. Після цього перезапустіть інстанс.`,"admin.backup.pendingHint":`{{name}} буде застосовано під час наступного запуску ({{users}} співробітників, {{entries}} відміток) - перезапустіть інстанс.`,"error.backup_invalid":`Цей файл не є резервною копією цього адаптера.`,"admin.settings.brandImageRemove":`Видалити зображення`,"admin.settings.brandColorDefaultHint":`Скидає колір і зображення фону`,"admin.triggers":`Дії (ioBroker)`,"admin.triggersHint":"Стан іншого адаптера відмічає час або встановлює присутність — сканер відбитка, кнопка чи дверний контакт. Спрацьовує лише при зміні значення. У полі значення можна вказати `toggle` — тоді реагує на будь-яку зміну (наприклад, увімкнення та вимкнення).","admin.trigger.label":`Назва`,"admin.trigger.sourceState":`Стан`,"admin.trigger.mode":`Умова`,"admin.trigger.modeCondition":`Стан має значення`,"admin.trigger.modeUser":`Значення — це працівник`,"admin.trigger.condition":`Значення`,"admin.trigger.user":`Працівник`,"admin.trigger.action":`Дія`,"admin.trigger.actionPunch":`Відмітитися (вхід або вихід)`,"admin.trigger.actionQuickPunch":`Відмітитися зі швидким округленням`,"admin.trigger.actionPresent":`Зробити присутнім`,"admin.trigger.actionAbsent":`Зробити відсутнім`,"admin.trigger.cooldown":`Затримка (секунди)`,"admin.trigger.active":`Активно`,"admin.trigger.add":`Додати дію`,"admin.trigger.lastFired":`Останнє спрацювання`,"admin.trigger.empty":`Дій поки немає.`,"admin.trigger.conditionHint":"Значення або `toggle`, щоб реагувати на будь-яку зміну","admin.settings.automations":`Правила (автоматика)`,"admin.settings.automationsHint":`Що адаптер робить сам: відмічає вихід у заданий місцевий час, повідомляє про відсутню відмітку виходу або нагадує про паузу після занадто довгої роботи. Правило спрацьовує щонайбільше раз на день на працівника.`,"admin.automation.kind":`Тип`,"admin.automation.kindClockIn":`Автоматично відмітити прихід`,"admin.automation.kindClockOut":`Автоматично відмітити вихід`,"admin.automation.kindMissingPunch":`Повідомити про відсутній вихід`,"admin.automation.kindBreakReminder":`Нагадування про паузу`,"admin.automation.at":`Час`,"admin.automation.atHint":`Місцевий час працівника`,"admin.automation.after":`Через (хвилини)`,"admin.automation.user":`Працівник`,"admin.automation.allUsers":`усі працівники`,"admin.automation.add":`Додати правило`,"admin.automation.empty":`Правил поки немає.`,"admin.automation.runs":`Останні спрацювання`,"admin.automation.weekdays":`Дні тижня`,"admin.automation.repeat":`Повторення`,"admin.automation.repeatDay":`раз на день`,"admin.automation.repeatWeek":`раз на тиждень`,"admin.settings.setting.report_font_path":`Шрифт для PDF`,"presence.workedToday":`Відпрацьовано сьогодні`,"admin.user.workedTime":`Робочий час на картці присутності`,"admin.user.workedTimeHint":`Показує на картці присутності відпрацьований сьогодні час (наприклад, 1:23). Без відмітки там 0:00; без цього дозволу картка залишається з присутній/відсутній і іменем.`},Iw={"absences.create":`请求缺席`,"absences.created":`要求缺席。`,"absences.empty":`今年没有缺席。`,"absences.from":`从`,"absences.portion":`当日比例`,"absences.status":`状态`,"absences.title":`缺勤`,"absences.to":`到`,"absences.type":`类型`,"absences.typeHint":`缺勤类型的代码,例如F 假期`,"admin.backup":`备份`,"admin.backup.create":`立即创建备份`,"admin.backup.upload":`上传备份`,"admin.backup.uploadHint":`选择已下载的备份(.sqlite),它会先被校验,并在下次启动时应用。`,"admin.backup.delete":`删除`,"admin.backup.deleteTitle":`删除备份`,"admin.backup.deleteConfirm":`备份 {{name}} 将被删除。此操作无法撤销。`,"admin.backup.done":`备份 {{name}} 已写入,{{removed}} 旧文件已删除。`,"admin.backup.empty":`还没有备份。`,"admin.backup.retention":`早于 {{days}} 天的备份将被删除,最新的备份将始终保留。`,"admin.forbidden":`您无权打开管理。`,"admin.title":`行政`,"admin.user.active":`积极的`,"admin.user.create":`添加员工`,"admin.user.empty":`还没有员工。`,"admin.user.inactive":`已停用`,"admin.user.login":`登录`,"admin.user.name":`姓名`,"admin.user.newPin":`新 PIN 码`,"admin.user.password":`密码`,"admin.user.passwordHint":`至少8个字符,包含大小写和数字。`,"admin.user.pin":`PIN 码`,"admin.user.pinHint":`终端 4 至 8 位数字`,"admin.user.pinTitle":`{{name}} 的徽章 PIN 码`,"admin.user.roles":`角色`,"admin.users":`雇员`,"app.offline":`离线 – 打孔已排队`,"app.online":`已连接`,"app.title":`时间追踪`,"common.cancel":`取消`,"common.close":`关闭`,"common.loading":`加载中…`,"common.none":`–`,"common.refresh":`刷新`,"common.retry":`重试`,"common.save":`节省`,"error.bad_request":`输入未被接受。`,"error.conflict":`该更改与现有数据冲突。`,"error.csrf_rejected":`出于安全原因,请求被拒绝,请重试。`,"error.invalid_credentials":`用户名或密码不正确。`,"error.locked_out":`失败的尝试太多了。请稍后重试。`,"error.network_error":`服务器无法访问。`,"error.no_session":`您的会话已过期,请重新登录。`,"error.not_found":`未找到。`,"error.permission_denied":`你不可以这样做。`,"error.report_font_missing":`该报告需要 Unicode 字体 (report_font_path)。`,"error.revision_conflict":`其间冲头已更换,请重新装弹。`,"error.session_expired":`您的会话已过期,请重新登录。`,"error.unknown_error":`意外错误。`,"error.user_inactive":`该帐户已停用。`,"login.failed":`登录失败`,"login.login":`用户名`,"login.password":`密码`,"login.submit":`登入`,"login.title":`登入`,"month.absence":`缺席`,"month.balance":`平衡`,"error.edit_window_closed":`超出编辑窗口`,"admin.profile.pauseRules":`个人休息规则`,"admin.profile.pauseRulesHint":`仅适用于该员工的规则:它们会替换相同“从分钟”的公司规则。没有个人规则时适用公司阶梯。`,"report.csv":`原始数据(CSV)`,"month.edit":`更正`,"month.editTitle":`更正打点 · {{date}}`,"month.editHint":`仅在编辑窗口内 - 更早的日期由管理员修改。`,"month.time":`时间`,"month.direction":`方向`,"month.directionIn":`上班`,"month.directionOut":`下班`,"month.addPunch":`添加打点`,"month.pause":`休息`,"month.paidBreak":`其中带薪`,"month.empty":`这个月没有天。`,"month.holiday":`假期`,"month.months":`一年中的月份`,"month.next":`下个月`,"month.open":`进行中`,"month.previous":`上个月`,"month.target":`目标`,"month.title":`月`,"month.worked":`工作过`,"nav.absences":`缺勤`,"nav.dashboard":`打卡`,"nav.logout":`登出`,"nav.menu":`菜单`,"nav.month":`月`,"nav.profile":`轮廓`,"nav.reports":`报告`,"nav.sync":`同步`,"profile.changePassword":`更改密码`,"profile.changed":`密码已更改,请重新登录。`,"profile.language":`语言`,"profile.newPassword":`新密码`,"profile.roles":`权限`,"profile.title":`轮廓`,"profile.user":`用户`,"punch.balance":`今日结余`,"punch.closed":`未打卡`,"punch.in":`上班打卡`,"punch.last":`上次打卡 {{time}}`,"punch.note":`笔记`,"punch.now":`立即打卡`,"punch.open":`自 {{time}} 起打卡`,"punch.out":`下班打卡`,"punch.queued":`离线保存 – 它将自动发送`,"punch.quick":`快速打卡`,"punch.sent":`打卡已保存({{time}})`,"punch.target":`今日目标`,"punch.worked":`今日已工作`,"report.failed":`无法创建该语句。`,"report.pdf":`PDF`,"report.xls":`Excel`,"reports.empty":`此期间没有数据。`,"reports.monthTotals":`月份总计`,"reports.overtime":`加班`,"reports.paidOut":`支付时间:{{minutes}}`,"reports.title":`报告`,"reports.vacation":`假期(已享受/有权)`,"reports.year":`年`,"reports.yearTotals":`年度总计`,"sync.accept":`保持服务器价值`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`公开冲突`,"sync.dismiss":`丢弃`,"sync.done":`已发送:{{accepted}},重复项:{{duplicates}},冲突:{{conflicts}}`,"sync.empty":`没有公开的冲突。`,"sync.flush":`立即发送`,"sync.none":`没什么可发送的。`,"sync.pending":`{{count}} 次打孔等待`,"sync.permission":`您无权解决冲突。`,"sync.resolved":`冲突解决了。`,"sync.title":`同步`,"terminal.title":`终端`,"terminal.deviceToken":`设备令牌`,"terminal.connect":`连接`,"terminal.badge":`工牌`,"terminal.noPin":`此终端无需 PIN。`,"terminal.pin":`PIN 码`,"terminal.select":`选择姓名`,"terminal.disabled":`终端已在适配器设置中关闭。`,"admin.terminals":`终端`,"admin.terminal.name":`名称`,"admin.terminal.location":`位置`,"admin.terminal.pinRequired":`员工需要使用其 PIN 码`,"admin.terminal.create":`创建终端`,"admin.terminal.tokenOnce":`请立即复制设备令牌——它仅以哈希形式保存,且只显示一次:`,"admin.terminal.url":`在自助终端设备上打开此地址:`,"admin.terminal.revoke":`撤销`,"admin.terminal.revoked":`已撤销`,"admin.terminal.users":`员工`,"admin.terminal.usersHint":`未选择时该终端显示所有员工。`,"admin.terminal.usersAll":`所有员工`,"admin.terminal.empty":`尚未创建终端。`,"admin.terminal.confirmRevoke":`撤销“{{name}}”?其设备令牌将立即失效。`,"admin.settings":`设置`,"admin.settings.fontPath":`PDF 报表使用的 Unicode 字体文件(.ttf/.otf)`,"admin.user.profile":`工作档案`,"admin.user.profileTitle":`工作档案 · {{name}}`,"admin.profile.percent":`就业比例(%)`,"admin.profile.weeklyHours":`100 % 时每周工时`,"admin.profile.workdays":`工作日`,"admin.profile.overtimeModel":`加班模式`,"admin.profile.model.monthly":`按月`,"admin.profile.model.yearly":`按年`,"admin.profile.model.cumulative":`累计`,"admin.profile.vacationPerYear":`每年年假天数`,"admin.profile.vacationCarryover":`结转年假(天)`,"admin.profile.overtimeCarryover":`结转加班(小时)`,"admin.profile.vorholzeitPerYear":`每年 “Vorholzeit”(小时)`,"admin.profile.pausePaid":`每天带薪休息分钟`,"admin.profile.pausePaidHint":`这些休息分钟计入工作时间(0 = 休息不带薪)。`,"admin.settings.pauseMode":`休息`,"admin.settings.pauseModeTitle":`休息规则`,"admin.settings.pauseModeHint":`每天休息时间的确定方式。`,"admin.settings.pauseRules":`休息阶梯`,"admin.settings.pauseRulesHint":`适用于未打点休息的工作日:从一个区块的首次到末次打点起,超过该时长即扣除相应分钟。`,"admin.settings.pauseFrom":`从分钟`,"admin.settings.pauseTo":`到分钟(留空 = 不设上限)`,"admin.settings.pauseMinutes":`休息分钟`,"admin.settings.pauseActive":`规则启用`,"admin.settings.pauseAdd":`添加规则`,"admin.settings.pauseSave":`保存休息阶梯`,"admin.settings.pauseMode.auto":`以打点休息为准,否则按阶梯`,"admin.settings.pauseMode.punched":`仅打点的休息`,"admin.settings.pauseMode.staffel":`仅按休息阶梯`,"admin.settings.fontPathHint":`俄语、乌克兰语和中文需要;留空则使用仅覆盖 Latin-1 的内置字体。`,"admin.settings.advanced":`所有实例设置(技术名称,开关使用 1/0)`,"admin.settings.setting.edit_window_days":`修改窗口(天)`,"admin.settings.setting.quick_round_minutes":`快速取整(分钟)`,"admin.settings.setting.absence_calc_until_today":`缺勤到今天`,"admin.settings.setting.absence_deduct_worktime":`缺勤扣减`,"admin.settings.setting.print_limit_days":`打印限制(天)`,"admin.settings.setting.holiday_country":`节假日国家`,"admin.settings.setting.default_language":`默认语言`,"admin.settings.setting.session_ttl_minutes":`会话(分钟)`,"admin.settings.setting.backup_retention_days":`备份(天)`,"admin.settings.setting.attendance_list_visible":`考勤列表`,"admin.settings.setting.timezone":`时区`,"admin.settings.saved":`设置已保存。`,"admin.holidays":`公共假日`,"admin.holiday.date":`日期(YYYY-MM-DD)`,"admin.holiday.name":`名称`,"holiday.newYear":`元旦`,"holiday.epiphany":`主显节`,"holiday.goodFriday":`耶稣受难日`,"holiday.easterMonday":`复活节星期一`,"holiday.labourDay":`劳动节`,"holiday.ascension":`耶稣升天节`,"holiday.whitMonday":`圣灵降临节星期一`,"holiday.corpusChristi":`基督圣体节`,"holiday.nationalDay":`国庆日`,"holiday.germanUnity":`德国统一日`,"holiday.assumption":`圣母升天节`,"holiday.allSaints":`诸圣节`,"holiday.immaculateConception":`圣母无染原罪瞻礼`,"holiday.christmas":`圣诞节`,"holiday.boxingDay":`节礼日`,"admin.holiday.add":`添加假日`,"admin.holiday.year":`年份`,"admin.holiday.region":`地区(可选)`,"admin.holiday.empty":`本年度未记录任何假日。`,"admin.tags":`工牌(RFID/NFC)`,"admin.tag.label":`标签`,"admin.tag.user":`员工`,"admin.tag.create":`创建工牌`,"admin.tag.linkOnce":`将此链接写入标签,或在手机上打开:`,"admin.tag.delete":`删除`,"admin.tag.active":`有效`,"admin.tag.expired":`已过期`,"admin.tag.revoked":`已撤销`,"admin.tag.lastUsed":`最近使用`,"admin.tag.remove":`永久删除`,"admin.tag.edit":`编辑`,"admin.tag.reissue":`新链接`,"admin.tag.editTitle":`编辑证件`,"admin.tag.editHint":`更换员工或设置新的有效期会生成新链接 —— 之前发出的链接会立即失效。`,"admin.tag.validityDays":`有效期(天)`,"admin.tag.oldLinkDead":`之前发出的链接已失效。`,"admin.tag.qrAlt":`证件链接的二维码`,"admin.tag.empty":`尚未创建工牌。`,"nav.statistics":`统计`,"statistics.from":`从`,"statistics.to":`至`,"statistics.employee":`员工`,"statistics.worked":`已工作`,"statistics.target":`目标`,"statistics.balance":`差额`,"statistics.openDays":`未完成天数`,"statistics.totals":`所有员工`,"scan.title":`工牌`,"scan.done":`已为 {{name}} 打卡,时间 {{time}}`,"scan.failed":`无法使用工牌:{{reason}}`,"presence.title":`在岗状态`,"presence.present":`在岗`,"presence.absent":`离岗`,"presence.tapPin":`输入 PIN 码进行打卡`,"presence.cancel":`取消`,"presence.updated":`{{name}} 现在 {{state}}`,"presence.disabled":`在实例设置中已关闭自助终端。`,"admin.user.photo":`照片`,"admin.user.photoTitle":`{{name}} 的照片`,"admin.user.photoChoose":`选择图片`,"admin.user.photoRemove":`删除图片`,"admin.user.photoHint":`PNG、JPEG、WEBP 或 GIF,最大 256 KB。没有图片时显示占位图。`,"admin.corrections":`时间改正`,"corrections.employee":`员工`,"corrections.previous":`上个月`,"corrections.next":`下个月`,"corrections.reason":`原因`,"corrections.reasonHint":`会记录在审计日志中`,"corrections.add":`添加打卡或整天`,"corrections.addTitle":`添加打卡`,"corrections.addHint":`如果只缺一次打卡,“下班”留空`,"corrections.editTitle":`修改打卡`,"corrections.remove":`删除打卡`,"corrections.date":`日期`,"corrections.from":`上班`,"corrections.to":`下班`,"corrections.direction":`方向`,"corrections.note":`备注`,"corrections.empty":`本月没有打卡`,"corrections.byAdmin":`由管理员添加`,"corrections.history":`历史记录`,"corrections.actor":`操作人`,"corrections.actionCreate":`已添加`,"corrections.actionUpdate":`已修改`,"corrections.actionDelete":`已删除`,"keypad.backspace":`删除`,"admin.settings.branding":`公司品牌`,"admin.settings.brandingHint":`本安装的标志、背景图片和背景颜色。登录界面和自助终端界面也会显示它们。`,"admin.settings.brandLogo":`选择标志`,"admin.settings.brandBackground":`选择背景`,"admin.brand.imageResized":`已缩小以便显示({{size}})。`,"admin.brand.imageTooLarge":`即使缩小,图片仍然过大。`,"admin.brand.imageType":`仅支持 PNG、JPEG、WEBP 或 GIF。`,"admin.brand.imageUnreadable":`无法读取该图片。`,"admin.settings.brandColor":`背景颜色`,"admin.settings.brandColorHint":`十六进制值,例如 #1a2b3c`,"admin.settings.brandColorPresets":`建议颜色`,"admin.settings.brandColorDefault":`默认`,"admin.backup.download":`下载`,"admin.backup.restore":`恢复`,"admin.backup.restoreTitle":`恢复备份`,"admin.backup.restoreConfirm":`备份 {{name}} 将在适配器下次启动时应用;当前数据库会以文件形式保留在旁边。之后请重启实例。`,"admin.backup.pendingHint":`{{name}} 将在下次启动时应用({{users}} 名员工,{{entries}} 条打卡)- 请重启实例。`,"error.backup_invalid":`该文件不是此适配器的备份。`,"admin.settings.brandImageRemove":`移除图片`,"admin.settings.brandColorDefaultHint":`重置背景颜色和背景图片`,"admin.triggers":`动作(ioBroker)`,"admin.triggersHint":"其他适配器的状态会打点或设置在场 —— 例如指纹读卡器、按钮或门磁。仅在数值变化时触发。数值可填写 `toggle`:这样每次变化都会触发(例如开与关)。","admin.trigger.label":`名称`,"admin.trigger.sourceState":`状态`,"admin.trigger.mode":`触发`,"admin.trigger.modeCondition":`状态带有该数值`,"admin.trigger.modeUser":`数值即员工`,"admin.trigger.condition":`数值`,"admin.trigger.user":`员工`,"admin.trigger.action":`动作`,"admin.trigger.actionPunch":`打点(上班或下班)`,"admin.trigger.actionQuickPunch":`带快速取整的打点`,"admin.trigger.actionPresent":`设为在场`,"admin.trigger.actionAbsent":`设为不在场`,"admin.trigger.cooldown":`间隔(秒)`,"admin.trigger.active":`启用`,"admin.trigger.add":`添加动作`,"admin.trigger.lastFired":`上次触发`,"admin.trigger.empty":`尚未添加动作。`,"admin.trigger.conditionHint":"数值,或 `toggle` 表示每次变化都触发","admin.settings.automations":`规则(自动)`,"admin.settings.automationsHint":`适配器自动完成的事:在设定的本地时间下班打点、提示缺少下班打点,或在长时间未休息后提醒。每条规则每位员工每天最多执行一次。`,"admin.automation.kind":`类型`,"admin.automation.kindClockIn":`自动上班打卡`,"admin.automation.kindClockOut":`自动下班打点`,"admin.automation.kindMissingPunch":`提示缺少下班打点`,"admin.automation.kindBreakReminder":`休息提醒`,"admin.automation.at":`时间`,"admin.automation.atHint":`员工的本地时间`,"admin.automation.after":`之后(分钟)`,"admin.automation.user":`员工`,"admin.automation.allUsers":`所有员工`,"admin.automation.add":`添加规则`,"admin.automation.empty":`尚未添加规则。`,"admin.automation.runs":`最近执行`,"admin.automation.weekdays":`星期`,"admin.automation.repeat":`重复`,"admin.automation.repeatDay":`每天一次`,"admin.automation.repeatWeek":`每周一次`,"admin.settings.setting.report_font_path":`PDF 字体`,"presence.workedToday":`今日已工作`,"admin.user.workedTime":`在岗卡片上的工作时间`,"admin.user.workedTimeHint":`在在岗卡片上显示今天的工作时间(例如 1:23)。未打卡时显示 0:00;未授权时卡片只显示在岗/缺勤和姓名。`},Lw=[`en`,`de`,`ru`,`pt`,`nl`,`fr`,`it`,`es`,`pl`,`uk`,`zh-cn`],Rw={en:{translation:Ew},de:{translation:Dw},ru:{translation:Ow},pt:{translation:kw},nl:{translation:Aw},fr:{translation:jw},it:{translation:Mw},es:{translation:Nw},pl:{translation:Pw},uk:{translation:Fw},"zh-cn":{translation:Iw}};function zw(){if(typeof navigator>`u`)return`en`;let e=[...navigator.languages??[],navigator.language];for(let t of e){let e=t.toLowerCase(),n=Lw.find(t=>t===e);if(n)return n;let r=e.split(`-`)[0],i=Lw.find(e=>e===r);if(i)return i;if(r===`zh`)return`zh-cn`}return`en`}function Bw(e){let t=(e??``).toLowerCase(),n=Lw.find(e=>e===t);if(n)return n;let r=t.split(`-`)[0];return Lw.find(e=>e===r)??zw()}kC.use(JC).init({resources:Rw,lng:zw(),fallbackLng:`en`,interpolation:{escapeValue:!1},returnNull:!1});var Vw=kC,Hw=(0,y.createContext)(null);function Uw({children:e}){let[t,n]=(0,y.useState)(()=>$.session()),[r,i]=(0,y.useState)([]),[a,o]=(0,y.useState)(t!==null),s=(0,y.useCallback)(e=>{if(!e)return;let t=Bw(e.language);Vw.language!==t&&Vw.changeLanguage(t)},[]),c=(0,y.useCallback)(async()=>{try{let e=await $.me();if(i(e.permissions??[]),e.user){s(e.user);let t=$.session();n(n=>n?{...n,user:e.user}:t)}}catch(e){e instanceof iw&&(e.status===401||e.status===0)&&e.status===401&&(n(null),i([]))}finally{o(!1)}},[s]);(0,y.useEffect)(()=>{c()},[c]);let l=(0,y.useCallback)(async(e,t)=>{let r=await $.login(e,t);s(r.user),n(r),await c()},[s,c]),u=(0,y.useCallback)(async()=>{await $.logout(),n(null),i([])},[]),d=(0,y.useMemo)(()=>({session:t,permissions:r,checking:a,signIn:l,signOut:u,refresh:c}),[t,r,a,l,u,c]);return(0,N.jsx)(Hw.Provider,{value:d,children:e})}function Ww(){let e=(0,y.useContext)(Hw);if(!e)throw Error(`useSession must be used inside a SessionProvider`);return e}function Gw(e,t){return e.includes(t)}var Kw=`time-tracker.queue`;function qw(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function Jw(e=window.localStorage,t=()=>Date.now()){function n(){try{let t=e.getItem(Kw);if(!t)return[];let n=JSON.parse(t);return Array.isArray(n)?n.filter(e=>typeof e?.idempotencyKey==`string`):[]}catch{return[]}}function r(t){e.setItem(Kw,JSON.stringify(t))}return{list:n,add(e){let i={idempotencyKey:e.idempotencyKey??qw(),tsUtc:e.tsUtc,...e.direction?{direction:e.direction}:{},...e.note?{note:e.note}:{},...e.quick?{quick:!0}:{},queuedAt:Math.floor(t()/1e3)};return r([...n(),i]),i},replace(e){r(e)},clear(){e.removeItem(Kw)},size:()=>n().length}}var Yw=Jw(),Xw=(0,y.createContext)(null);function Zw({children:e}){let[t,n]=(0,y.useState)(()=>Yw.list()),[r,i]=(0,y.useState)(()=>typeof navigator>`u`||navigator.onLine),[a,o]=(0,y.useState)(!1),[s,c]=(0,y.useState)(null),l=(0,y.useCallback)(()=>{n(Yw.list())},[]),u=(0,y.useCallback)(async()=>{let e=Yw.list();if(e.length===0)return c(null),null;o(!0);try{let t=await $.sync(e.map(e=>({idempotencyKey:e.idempotencyKey,tsUtc:e.tsUtc,...e.direction?{direction:e.direction}:{},...e.note?{note:e.note}:{}})));Yw.clear(),l();let n={accepted:t.accepted??0,duplicates:t.duplicates??0,conflicts:t.conflicts??0};return c(n),i(!0),n}catch(e){return e instanceof iw&&e.status===0&&i(!1),l(),null}finally{o(!1)}},[l]),d=(0,y.useCallback)(e=>{let t=Yw.add(e);return l(),u(),t},[u,l]);(0,y.useEffect)(()=>{let e=()=>i(!1),t=()=>{i(!0),u()};return window.addEventListener(`offline`,e),window.addEventListener(`online`,t),()=>{window.removeEventListener(`offline`,e),window.removeEventListener(`online`,t)}},[u]),(0,y.useEffect)(()=>{let e=()=>l();return window.addEventListener(`focus`,e),()=>window.removeEventListener(`focus`,e)},[l]);let f=(0,y.useMemo)(()=>({pending:t,online:r,busy:a,outcome:s,record:d,flush:u,reload:l}),[t,r,a,s,d,u,l]);return(0,N.jsx)(Xw.Provider,{value:f,children:e})}function Qw(){let e=(0,y.useContext)(Xw);if(!e)throw Error(`useSync must be used inside a SyncProvider`);return e}var $w=3e4;function eT(e){let t=Oc();(0,y.useEffect)(()=>{let n=e?$.streamUrl():null;if(!n||typeof WebSocket>`u`)return;let r=null,i=null,a=0,o=!1,s=()=>{r=new WebSocket(n),r.onopen=()=>{a=0},r.onmessage=()=>{t.invalidateQueries()},r.onerror=()=>r?.close(),r.onclose=()=>{o||(a+=1,i=window.setTimeout(s,Math.min(1e3*2**(a-1),$w)))}};return s(),()=>{o=!0,i!==null&&window.clearTimeout(i),r?.close()}},[e,t])}var tT=[{path:`/`,key:`nav.dashboard`,icon:(0,N.jsx)(vw,{})},{path:`/month`,key:`nav.month`,icon:(0,N.jsx)(Sw,{})},{path:`/reports`,key:`nav.reports`,icon:(0,N.jsx)(yw,{})},{path:`/statistics`,key:`nav.statistics`,icon:(0,N.jsx)(bw,{})},{path:`/absences`,key:`nav.absences`,icon:(0,N.jsx)(xw,{})},{path:`/sync`,key:`nav.sync`,icon:(0,N.jsx)(Tw,{})}];function nT({title:e,children:t}){let{t:n}=tw(),{session:r,signOut:i}=Ww(),{pending:a,online:o}=Qw();eT(r!==null);let{permissions:s}=Ww(),c=[`user.view`,`terminal.manage`,`settings.view`,`import.run`,`holiday.manage`,`rfid.manage`,`backup.run`].some(e=>Gw(s,e)),l=Ed(),u=Cd(),[d,f]=(0,y.useState)(null),p=gw(),m=tT.find(e=>e.path===u.pathname)?.path??`/`;return(0,N.jsxs)(q,{sx:{display:`flex`,flexDirection:`column`,minHeight:`100vh`},children:[(0,N.jsx)(Km,{position:`sticky`,color:`primary`,enableColorOnDark:!0,children:(0,N.jsxs)(eS,{variant:`dense`,sx:{gap:1},children:[p.logoUrl&&(0,N.jsx)(q,{component:`img`,src:p.logoUrl,alt:``,sx:{height:28,maxWidth:120,objectFit:`contain`}}),(0,N.jsx)(K,{variant:`h6`,sx:{flexGrow:1},children:n(`app.title`)}),!o&&(0,N.jsx)(rh,{size:`small`,color:`warning`,icon:(0,N.jsx)(Cw,{}),label:n(`app.offline`)}),a.length>0&&(0,N.jsx)(rh,{size:`small`,color:`secondary`,icon:(0,N.jsx)(Tw,{}),label:n(`sync.pending`,{count:a.length}),onClick:()=>void l(`/sync`)}),(0,N.jsx)(bm,{color:`inherit`,onClick:e=>f(e.currentTarget),title:n(`nav.menu`),children:(0,N.jsx)(ww,{})})]})}),(0,N.jsxs)(Hb,{anchorEl:d,open:d!==null,onClose:()=>f(null),children:[(0,N.jsx)(Yb,{disabled:!0,children:(0,N.jsx)(K,{variant:`body2`,children:r?.user.displayName??r?.user.login})}),c&&(0,N.jsx)(Yb,{onClick:()=>{f(null),l(`/admin`)},children:n(`admin.title`)}),(0,N.jsx)(Yb,{onClick:()=>{f(null),l(`/profile`)},children:n(`nav.profile`)}),(0,N.jsx)(Yb,{onClick:()=>{f(null),i()},children:n(`nav.logout`)})]}),(0,N.jsxs)(w_,{maxWidth:`sm`,sx:{py:2,flexGrow:1},children:[(0,N.jsx)(K,{variant:`h5`,component:`h1`,sx:{mb:2},children:e}),t]}),(0,N.jsx)(q,{sx:{position:`sticky`,bottom:0,borderTop:1,borderColor:`divider`,bgcolor:`background.paper`},children:(0,N.jsx)(ug,{value:m,showLabels:!0,onChange:(e,t)=>void l(t),sx:{maxWidth:600,mx:`auto`},children:tT.map(e=>(0,N.jsx)(_g,{value:e.path,label:n(e.key),icon:e.key===`nav.sync`?(0,N.jsx)(ag,{color:`secondary`,badgeContent:a.length,overlap:`circular`,children:e.icon}):e.icon},e.path))})})]})}function rT({primary:e,secondary:t,children:n}){return(0,N.jsxs)(ob,{divider:!0,sx:{flexWrap:`wrap`,alignItems:`center`,columnGap:1,rowGap:.5},children:[(0,N.jsx)(pb,{sx:{flex:`1 1 10rem`,minWidth:0},primary:e,secondary:t}),(0,N.jsx)(X,{direction:`row`,spacing:1,alignItems:`center`,sx:{ml:`auto`,flexShrink:0},children:n})]})}function iT(e){return e instanceof iw?`error.${e.code}`:`error.unknown_error`}function aT({error:e,severity:t=`error`}){let{t:n}=tw();if(!e)return null;let r=iT(e),i=n(r);return(0,N.jsx)(Nm,{severity:t,sx:{mb:2},children:i===r?n(`error.unknown_error`):i})}function oT(){let{t:e}=tw();return(0,N.jsxs)(q,{sx:{display:`flex`,justifyContent:`center`,alignItems:`center`,gap:2,py:6},children:[(0,N.jsx)(C_,{size:22}),e(`common.loading`)]})}function sT(){let{t:e,i18n:t}=tw(),{permissions:n}=Ww(),r=Oc(),[i,a]=(0,y.useState)(()=>new Date().getFullYear()),[o,s]=(0,y.useState)(``),[c,l]=(0,y.useState)(``),[u,d]=(0,y.useState)(``),[f,p]=(0,y.useState)(!1),m=Gw(n,`absence.request`),h=Yl({queryKey:[`absences`,i],queryFn:()=>$.absences(i)}),g=Yl({queryKey:[`absence-types`],queryFn:()=>$.absenceTypes(),enabled:m,staleTime:3e5}).data??[],_=Xl({mutationFn:()=>$.createAbsence({typeCode:o.trim(),dateFrom:c,...u?{dateTo:u}:{}}),onSuccess:()=>{s(``),l(``),d(``),p(!0),r.invalidateQueries({queryKey:[`absences`,i]})}});function v(e){e.preventDefault(),p(!1),_.mutate()}return(0,N.jsxs)(nT,{title:e(`absences.title`),children:[(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(X,{direction:`row`,alignItems:`center`,justifyContent:`space-between`,sx:{p:1},children:[(0,N.jsx)(bm,{onClick:()=>a(e=>e-1),title:e(`month.previous`),children:(0,N.jsx)(NS,{})}),(0,N.jsx)(K,{variant:`h6`,children:i}),(0,N.jsx)(bm,{onClick:()=>a(e=>e+1),title:e(`month.next`),children:(0,N.jsx)(PS,{})})]})}),(0,N.jsx)(aT,{error:h.error}),h.isLoading?(0,N.jsx)(oT,{}):(0,N.jsxs)(Y,{sx:{mb:3},children:[(0,N.jsx)(Gy,{dense:!0,children:(h.data??[]).map(n=>(0,N.jsx)(rT,{primary:`${n.typeCode}: ${lw(n.dateFrom,t.language)}${n.dateTo&&n.dateTo!==n.dateFrom?` – ${lw(n.dateTo,t.language)}`:``}`,secondary:`${e(`absences.portion`)}: ${n.dayPortion}`,children:(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:n.status})},n.id))}),(h.data??[]).length===0&&(0,N.jsx)(q,{sx:{p:2},children:(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`absences.empty`)})})]}),m&&(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:e(`absences.create`)}),f&&(0,N.jsx)(Nm,{severity:`success`,children:e(`absences.created`)}),(0,N.jsx)(aT,{error:_.error}),(0,N.jsx)(q,{component:`form`,onSubmit:v,children:(0,N.jsxs)(X,{spacing:2,children:[g.length>0?(0,N.jsx)(Z,{select:!0,label:e(`absences.type`),value:o,required:!0,size:`small`,onChange:e=>s(e.target.value),children:g.map(e=>(0,N.jsxs)(Yb,{value:e.code,children:[e.code,` – `,e.name]},e.id))}):(0,N.jsx)(Z,{label:e(`absences.type`),value:o,required:!0,size:`small`,helperText:e(`absences.typeHint`),onChange:e=>s(e.target.value)}),(0,N.jsx)(Z,{label:e(`absences.from`),type:`date`,value:c,required:!0,size:`small`,InputLabelProps:{shrink:!0},onChange:e=>l(e.target.value)}),(0,N.jsx)(Z,{label:e(`absences.to`),type:`date`,value:u,size:`small`,InputLabelProps:{shrink:!0},onChange:e=>d(e.target.value)}),(0,N.jsx)(J,{type:`submit`,variant:`contained`,disabled:_.isPending,children:e(`common.save`)})]})})]})})]})}var cT=524288,lT=262144,uT=2560,dT=[.85,.7,.55,.4],fT=[`image/png`,`image/jpeg`,`image/webp`,`image/gif`];function pT(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(typeof r.result==`string`?r.result:``),r.onerror=()=>n(Error(`unreadable`)),r.readAsDataURL(e)})}function mT(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>t(r),r.onerror=()=>n(Error(`unreadable`)),r.src=e})}async function hT(e,t){if(!fT.includes(e.type))return{ok:!1,problem:`type`};let n;try{n=await pT(e)}catch{return{ok:!1,problem:`unreadable`}}if(n.length<=t)return{ok:!0,image:{dataUrl:n,bytes:n.length,resized:!1}};let r;try{r=await mT(n)}catch{return{ok:!1,problem:`unreadable`}}let i=Math.max(r.width,r.height);if(i===0)return{ok:!1,problem:`unreadable`};for(let e=Math.min(i,uT);e>=320;e=Math.floor(e/2)){let n=e/i,a=document.createElement(`canvas`);a.width=Math.max(1,Math.round(r.width*n)),a.height=Math.max(1,Math.round(r.height*n));let o=a.getContext(`2d`);if(!o)return{ok:!1,problem:`unreadable`};o.fillStyle=`#ffffff`,o.fillRect(0,0,a.width,a.height),o.drawImage(r,0,0,a.width,a.height);for(let e of dT){let n=a.toDataURL(`image/jpeg`,e);if(n.length<=t)return{ok:!0,image:{dataUrl:n,bytes:n.length,resized:!0}}}}return{ok:!1,problem:`tooLarge`}}var gT=rp((0,N.jsx)(`path`,{d:`M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM19 4h-3.5l-1-1h-5l-1 1H5v2h14z`}),`Delete`),_T=rp((0,N.jsx)(`path`,{d:`M3 17.25V21h3.75L17.81 9.94l-3.75-3.75zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 0 0-1.41 0l-1.83 1.83 3.75 3.75z`}),`Edit`),vT=rp((0,N.jsx)(`path`,{d:`M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9m-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8z`}),`History`),yT=rp((0,N.jsx)(`path`,{d:`M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z`}),`Add`);function bT({day:e,timeZone:t,onClose:n}){let{t:r}=tw(),{session:i,permissions:a}=Ww(),o=Oc(),s=e?.localDate??``,c=Yl({queryKey:[`entries`,s],queryFn:()=>$.entries(s,s),enabled:e!==null}),[l,u]=(0,y.useState)(null),[d,f]=(0,y.useState)(null),[p,m]=(0,y.useState)(!1),h=Gw(a,`time.delete`),g=e=>new Intl.DateTimeFormat(`en-GB`,{hour:`2-digit`,minute:`2-digit`,hour12:!1,timeZone:t}).format(new Date(e*1e3)),_=l??(c.data??[]).map(e=>({id:e.id,revision:e.revision,time:g(e.tsUtc),direction:e.direction??`in`})),v=(e,t)=>u(_.map((n,r)=>r===e?{...n,...t}:n)),b=async()=>{m(!0),f(null);try{for(let e of _){let n=kT(s,e.time,t),r=e.id;if(r===void 0){await $.createEntry({userId:i?.user.id??0,tsUtc:n,direction:e.direction});continue}let a=(c.data??[]).find(e=>e.id===r);a&&a.tsUtc!==n&&await $.updateEntry(r,{tsUtc:n,revision:a.revision})}await o.invalidateQueries({queryKey:[`entries`,s]}),await o.invalidateQueries({queryKey:[`days`]}),n()}catch(e){f(e)}finally{m(!1)}},x=async e=>{if(e.id===void 0){u(_.filter(t=>t!==e));return}m(!0),f(null);try{await $.deleteEntry(e.id,null),u(null),await c.refetch(),await o.invalidateQueries({queryKey:[`days`]})}catch(e){f(e)}finally{m(!1)}};return(0,N.jsxs)(ov,{open:e!==null,onClose:n,fullWidth:!0,maxWidth:`xs`,children:[(0,N.jsx)(Dv,{children:r(`month.editTitle`,{date:s})}),(0,N.jsxs)(vv,{children:[(0,N.jsx)(aT,{error:d??c.error}),(0,N.jsx)(K,{variant:`caption`,color:`text.secondary`,display:`block`,sx:{mb:1},children:r(`month.editHint`)}),(0,N.jsxs)(X,{spacing:1,children:[_.map((e,t)=>(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsx)(Z,{size:`small`,type:`time`,label:r(`month.time`),value:e.time,onChange:e=>v(t,{time:e.target.value})}),(0,N.jsxs)(Z,{size:`small`,select:!0,label:r(`month.direction`),value:e.direction,onChange:e=>v(t,{direction:e.target.value}),children:[(0,N.jsx)(Yb,{value:`in`,children:r(`month.directionIn`)}),(0,N.jsx)(Yb,{value:`out`,children:r(`month.directionOut`)})]}),h&&(0,N.jsx)(bm,{size:`small`,title:r(`admin.backup.delete`),disabled:p,onClick:()=>void x(e),children:(0,N.jsx)(gT,{fontSize:`small`})})]},e.id??`new-${t}`)),(0,N.jsx)(J,{size:`small`,startIcon:(0,N.jsx)(yT,{}),disabled:p,onClick:()=>u([..._,{time:`12:00`,direction:_.length%2==0?`in`:`out`}]),children:r(`month.addPunch`)})]})]}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:n,children:r(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:p||_.length===0,onClick:()=>void b(),children:r(`common.save`)})]})]})}var xT=rp((0,N.jsx)(`path`,{d:`M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2M8 20H4v-4h4zm0-6H4v-4h4zm0-6H4V4h4zm6 12h-4v-4h4zm0-6h-4v-4h4zm0-6h-4V4h4zm6 12h-4v-4h4zm0-6h-4v-4h4zm0-6h-4V4h4z`}),`GridOn`),ST=rp((0,N.jsx)(`path`,{d:`M10 10.02h5V21h-5zM17 21h3c1.1 0 2-.9 2-2v-9h-5zm3-18H5c-1.1 0-2 .9-2 2v3h19V5c0-1.1-.9-2-2-2M3 19c0 1.1.9 2 2 2h3V10H3z`}),`TableChart`),CT=rp((0,N.jsx)(`path`,{d:`M20 2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m-8.5 7.5c0 .83-.67 1.5-1.5 1.5H9v2H7.5V7H10c.83 0 1.5.67 1.5 1.5zm5 2c0 .83-.67 1.5-1.5 1.5h-2.5V7H15c.83 0 1.5.67 1.5 1.5zm4-3H19v1h1.5V11H19v2h-1.5V7h3zM9 9.5h1v-1H9zM4 6H2v14c0 1.1.9 2 2 2h14v-2H4zm10 5.5h1v-3h-1z`}),`PictureAsPdf`);function wT(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.rel=`noopener`,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)}function TT({year:e,month:t,userId:n,compact:r=!1}){let{t:i}=tw(),[a,o]=(0,y.useState)(null),[s,c]=(0,y.useState)(null),l=async r=>{o(r),c(null);try{let i=await $.downloadReport(r,e,t,n);wT(i.blob,i.fileName)}catch(e){c(e)}finally{o(null)}},u=e=>i(e===`xls`?`report.xls`:e===`pdf`?`report.pdf`:`report.csv`);return r?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(X,{direction:`row`,spacing:.5,alignItems:`center`,children:[a!==null&&(0,N.jsx)(C_,{size:16}),(0,N.jsx)(bm,{size:`small`,title:u(`xls`),disabled:a!==null,onClick:()=>void l(`xls`),children:(0,N.jsx)(xT,{fontSize:`small`})}),(0,N.jsx)(bm,{size:`small`,title:u(`pdf`),disabled:a!==null,onClick:()=>void l(`pdf`),children:(0,N.jsx)(CT,{fontSize:`small`})}),(0,N.jsx)(bm,{size:`small`,title:u(`csv`),disabled:a!==null,onClick:()=>void l(`csv`),children:(0,N.jsx)(ST,{fontSize:`small`})})]}),(0,N.jsx)(aT,{error:s})]}):(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(X,{direction:`row`,spacing:1,alignItems:`center`,children:[(0,N.jsx)(J,{size:`small`,variant:`outlined`,startIcon:(0,N.jsx)(xT,{}),disabled:a!==null,onClick:()=>void l(`xls`),children:u(`xls`)}),(0,N.jsx)(J,{size:`small`,variant:`outlined`,startIcon:(0,N.jsx)(CT,{}),disabled:a!==null,onClick:()=>void l(`pdf`),children:u(`pdf`)}),(0,N.jsx)(J,{size:`small`,variant:`outlined`,startIcon:(0,N.jsx)(ST,{}),disabled:a!==null,onClick:()=>void l(`csv`),children:u(`csv`)}),a!==null&&(0,N.jsx)(C_,{size:18})]}),(0,N.jsx)(aT,{error:s})]})}function ET(e,t){let n=`${e}-${String(t).padStart(2,`0`)}-01`,r=new Date(Date.UTC(e,t,0)).getUTCDate();return{from:n,to:`${e}-${String(t).padStart(2,`0`)}-${String(r).padStart(2,`0`)}`}}function DT(){let{t:e,i18n:t}=tw(),{session:n,permissions:r}=Ww(),[i,a]=(0,y.useState)(null),[o]=Kf(),s=Number(o.get(`userId`))||void 0,c=(o.get(`name`)??``).trim(),[l,u]=(0,y.useState)(()=>{let e=Number(o.get(`year`)),t=Number(o.get(`month`));if(Number.isInteger(e)&&Number.isInteger(t)&&t>=1&&t<=12)return{year:e,month:t};let r=new Date,i=n?.user.timezone,[a,s]=new Intl.DateTimeFormat(`en-CA`,{timeZone:i,year:`numeric`,month:`2-digit`}).format(r).split(`-`);return{year:Number(a),month:Number(s)}}),d=ET(l.year,l.month),f=Yl({queryKey:[`days`,d.from,d.to,s],queryFn:()=>$.days(d.from,d.to,s)});function p(e){let t=new Date(Date.UTC(l.year,l.month-1+e,1));u({year:t.getUTCFullYear(),month:t.getUTCMonth()+1})}let m=new Intl.DateTimeFormat(t.language,{month:`long`,year:`numeric`,timeZone:`UTC`}).format(new Date(`${d.from}T12:00:00Z`));return(0,N.jsxs)(nT,{title:c?`${e(`month.title`)} · ${c}`:e(`month.title`),children:[(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(X,{direction:`row`,alignItems:`center`,justifyContent:`space-between`,sx:{p:1},children:[(0,N.jsx)(bm,{onClick:()=>p(-1),title:e(`month.previous`),children:(0,N.jsx)(NS,{})}),(0,N.jsx)(K,{variant:`h6`,children:m}),(0,N.jsx)(bm,{onClick:()=>p(1),title:e(`month.next`),children:(0,N.jsx)(PS,{})})]})}),(0,N.jsx)(aT,{error:f.error}),(0,N.jsx)(q,{sx:{mb:2},children:(0,N.jsx)(TT,{year:l.year,month:l.month,userId:s})}),f.isLoading?(0,N.jsx)(oT,{}):(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(X,{direction:`row`,spacing:3,useFlexGap:!0,sx:{px:1,mb:1,flexWrap:`wrap`},children:[(0,N.jsxs)(K,{variant:`body2`,color:`text.secondary`,children:[e(`month.worked`),`: `,sw(f.data?.workedMin??0)]}),(0,N.jsxs)(K,{variant:`body2`,color:`text.secondary`,children:[e(`month.pause`),`: `,sw(f.data?.breakMin??0),(f.data?.paidBreakMin??0)>0?` (${e(`month.paidBreak`)} ${sw(f.data?.paidBreakMin??0)})`:``]}),(0,N.jsxs)(K,{variant:`body2`,color:`text.secondary`,children:[e(`month.target`),`: `,sw(f.data?.targetMin??0)]}),(0,N.jsxs)(K,{variant:`body2`,color:(f.data?.balanceMin??0)<0?`error`:`text.secondary`,children:[e(`month.balance`),`: `,sw(f.data?.balanceMin??0)]})]}),(0,N.jsxs)(Y,{children:[(0,N.jsx)(Gy,{dense:!0,children:(f.data?.days??[]).map(n=>(0,N.jsx)(ob,{secondaryAction:(0,N.jsxs)(X,{direction:`row`,spacing:.5,sx:{alignItems:`center`},children:[Gw(r,`time.edit_own`)&&(0,N.jsx)(bm,{size:`small`,title:e(`month.edit`),onClick:()=>a(n),children:(0,N.jsx)(_T,{fontSize:`small`})}),(0,N.jsx)(K,{variant:`body2`,color:n.balanceMin<0?`error`:`text.secondary`,children:sw(n.balanceMin)})]}),children:(0,N.jsx)(pb,{primary:uw(n.localDate,t.language),secondary:[`${e(`month.worked`)} ${sw(n.workedMin)}`,`${e(`month.pause`)} ${sw(n.breakMin)}${n.paidBreakMin>0?` (${e(`month.paidBreak`)} ${sw(n.paidBreakMin)})`:``}`,`${e(`month.target`)} ${sw(n.targetMin)}`,n.isHoliday?e(`month.holiday`):null,n.absenceCode?`${e(`month.absence`)}: ${n.absenceCode}`:null,n.hasOpenEntry?e(`month.open`):null].filter(Boolean).join(` · `)})},n.localDate))}),(f.data?.days??[]).length===0&&(0,N.jsx)(q,{sx:{p:2},children:(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`month.empty`)})})]})]}),(0,N.jsx)(bT,{day:i,timeZone:n?.user.timezone??`UTC`,onClose:()=>a(null)})]})}function OT(e,t){let n=new Intl.DateTimeFormat(`en-US`,{timeZone:t,hour12:!1,year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`}).formatToParts(e),r=e=>Number(n.find(t=>t.type===e)?.value??`0`);return(Date.UTC(r(`year`),r(`month`)-1,r(`day`),r(`hour`)%24,r(`minute`),r(`second`))-e.getTime())/1e3}function kT(e,t,n){let r=Date.parse(`${e}T${t}:00Z`),i=r-OT(new Date(r),n)*1e3;return Math.round((r-OT(new Date(i),n)*1e3)/1e3)}function AT(e,t,n){return new Intl.DateTimeFormat(n,{timeZone:t,weekday:`short`,day:`2-digit`,month:`2-digit`,hour:`2-digit`,minute:`2-digit`}).format(new Date(e*1e3))}var jT={create:`corrections.actionCreate`,update:`corrections.actionUpdate`,delete:`corrections.actionDelete`};function MT({language:e}){let{t}=tw(),n=Oc(),[r,i]=(0,y.useState)(null),[a,o]=(0,y.useState)(()=>new Date().toISOString().slice(0,7)),[s,c]=(0,y.useState)(``),[l,u]=(0,y.useState)(null),[d,f]=(0,y.useState)(null),[p,m]=(0,y.useState)(null),h=Yl({queryKey:[`admin`,`users`],queryFn:()=>$.users(!0)}),g=r??h.data?.[0]?.id??null,[_,v]=a.split(`-`).map(Number),b=ET(_,v),x=h.data?.find(e=>e.id===g)?.timezone??`Europe/Berlin`,S=Yl({queryKey:[`admin`,`corrections`,g,b.from,b.to],queryFn:()=>$.entries(b.from,b.to,g??void 0),enabled:g!==null}),C=Yl({queryKey:[`admin`,`entry-audit`,p],queryFn:()=>$.entryAudit(p??0),enabled:p!==null}),w=async()=>{await n.invalidateQueries({queryKey:[`admin`,`corrections`]})},T=Xl({mutationFn:e=>$.updateEntry(e.id,{...e.patch,revision:e.revision,reason:s.trim()||null}),onSuccess:w}),E=Xl({mutationFn:e=>$.deleteEntry(e.id,s.trim()||null),onSuccess:w}),D=Xl({mutationFn:async e=>{if(g===null)return;let t=e.note.trim()||null,n=e.reason.trim()||s.trim()||null;await $.createEntry({userId:g,tsUtc:kT(e.date,e.from,x),direction:`in`,note:t,reason:n}),e.to.trim()&&await $.createEntry({userId:g,tsUtc:kT(e.date,e.to,x),direction:`out`,note:t,reason:n})},onSuccess:w});if(h.isLoading)return(0,N.jsx)(oT,{});let O=e=>{let t=new Date(Date.UTC(_,v-1+e,1));o(`${t.getUTCFullYear()}-${String(t.getUTCMonth()+1).padStart(2,`0`)}`)};return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:h.error??S.error??T.error??E.error??D.error}),(0,N.jsx)(Y,{sx:{p:2,mb:2},children:(0,N.jsxs)(X,{spacing:2,children:[(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,alignItems:{xs:`stretch`,sm:`center`},children:[(0,N.jsx)(Z,{select:!0,size:`small`,label:t(`corrections.employee`),value:g??``,onChange:e=>i(Number(e.target.value)),sx:{minWidth:200},children:(h.data??[]).map(e=>(0,N.jsx)(Yb,{value:e.id,children:e.displayName},e.id))}),(0,N.jsxs)(X,{direction:`row`,spacing:.5,alignItems:`center`,children:[(0,N.jsx)(bm,{onClick:()=>O(-1),title:t(`corrections.previous`),"aria-label":t(`corrections.previous`),children:(0,N.jsx)(NS,{})}),(0,N.jsx)(K,{sx:{minWidth:90,textAlign:`center`},children:a}),(0,N.jsx)(bm,{onClick:()=>O(1),title:t(`corrections.next`),"aria-label":t(`corrections.next`),children:(0,N.jsx)(PS,{})})]}),(0,N.jsx)(J,{variant:`contained`,disabled:g===null,sx:{ml:{sm:`auto`}},onClick:()=>f({date:b.from,from:`08:00`,to:`17:00`,note:``,reason:s}),children:t(`corrections.add`)})]}),(0,N.jsx)(Z,{size:`small`,label:t(`corrections.reason`),helperText:t(`corrections.reasonHint`),value:s,onChange:e=>c(e.target.value),fullWidth:!0})]})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Gy,{dense:!0,children:[(S.data??[]).map(n=>(0,N.jsx)(rT,{primary:`${AT(n.tsUtc,x,e)} · ${t(n.direction===`in`?`punch.in`:`punch.out`)}`,secondary:[n.source===`admin`?t(`corrections.byAdmin`):n.source,n.note].filter(Boolean).join(` · `),children:(0,N.jsxs)(X,{direction:`row`,spacing:.5,children:[(0,N.jsx)(bm,{size:`small`,title:t(`corrections.history`),"aria-label":t(`corrections.history`),onClick:()=>m(n.id),children:(0,N.jsx)(vT,{fontSize:`small`})}),(0,N.jsx)(bm,{size:`small`,title:t(`corrections.editTitle`),"aria-label":t(`corrections.editTitle`),onClick:()=>{let e=n.localDate,t=cw(n.tsUtc,x,`de-DE`);u({entry:n,date:e,time:t,direction:n.direction,note:n.note??``})},children:(0,N.jsx)(_T,{fontSize:`small`})}),(0,N.jsx)(bm,{size:`small`,title:t(`corrections.remove`),"aria-label":t(`corrections.remove`),onClick:()=>E.mutate(n),children:(0,N.jsx)(gT,{fontSize:`small`})})]})},n.id)),(S.data??[]).length===0&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{secondary:t(`corrections.empty`)})})]})}),l&&(0,N.jsxs)(ov,{open:!0,onClose:()=>u(null),children:[(0,N.jsx)(Dv,{children:t(`corrections.editTitle`)}),(0,N.jsx)(vv,{children:(0,N.jsxs)(X,{spacing:2,sx:{mt:1},children:[(0,N.jsx)(Z,{type:`date`,label:t(`corrections.date`),value:l.date,onChange:e=>u({...l,date:e.target.value}),InputLabelProps:{shrink:!0},fullWidth:!0}),(0,N.jsx)(Z,{type:`time`,label:t(`corrections.${l.direction===`in`?`from`:`to`}`),value:l.time,onChange:e=>u({...l,time:e.target.value}),InputLabelProps:{shrink:!0},fullWidth:!0}),(0,N.jsx)(Z,{label:t(`corrections.note`),value:l.note,onChange:e=>u({...l,note:e.target.value}),fullWidth:!0})]})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>u(null),children:t(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:T.isPending,onClick:()=>{T.mutate({id:l.entry.id,revision:l.entry.revision,patch:{tsUtc:kT(l.date,l.time,x),note:l.note.trim()||null}}),u(null)},children:t(`common.save`)})]})]}),d&&(0,N.jsxs)(ov,{open:!0,onClose:()=>f(null),children:[(0,N.jsx)(Dv,{children:t(`corrections.addTitle`)}),(0,N.jsx)(vv,{children:(0,N.jsxs)(X,{spacing:2,sx:{mt:1},children:[(0,N.jsx)(Z,{type:`date`,label:t(`corrections.date`),value:d.date,onChange:e=>f({...d,date:e.target.value}),InputLabelProps:{shrink:!0},fullWidth:!0}),(0,N.jsx)(Z,{type:`time`,label:t(`corrections.from`),value:d.from,onChange:e=>f({...d,from:e.target.value}),InputLabelProps:{shrink:!0},fullWidth:!0}),(0,N.jsx)(Z,{type:`time`,label:t(`corrections.to`),value:d.to,onChange:e=>f({...d,to:e.target.value}),helperText:t(`corrections.addHint`),InputLabelProps:{shrink:!0},fullWidth:!0}),(0,N.jsx)(Z,{label:t(`corrections.note`),value:d.note,onChange:e=>f({...d,note:e.target.value}),fullWidth:!0}),(0,N.jsx)(Z,{label:t(`corrections.reason`),helperText:t(`corrections.reasonHint`),value:d.reason,onChange:e=>f({...d,reason:e.target.value}),fullWidth:!0})]})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>f(null),children:t(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:D.isPending||d.from.trim()===``,onClick:()=>{D.mutate(d),f(null)},children:t(`common.save`)})]})]}),p!==null&&(0,N.jsxs)(ov,{open:!0,onClose:()=>m(null),children:[(0,N.jsx)(Dv,{children:t(`corrections.history`)}),(0,N.jsxs)(vv,{children:[(0,N.jsx)(aT,{error:C.error}),C.isLoading?(0,N.jsx)(oT,{}):(0,N.jsx)(Gy,{dense:!0,children:(C.data??[]).map(n=>(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{primary:`${t(jT[n.action]??n.action)} · ${AT(n.atUtc,x,e)}`,secondary:[n.actorName?`${t(`corrections.actor`)}: ${n.actorName}`:null,n.reason?`${t(`corrections.reason`)}: ${n.reason}`:null].filter(Boolean).join(` · `)})},n.id))})]}),(0,N.jsx)(dv,{children:(0,N.jsx)(J,{onClick:()=>m(null),children:t(`common.close`)})})]})]})}var NT=rp((0,N.jsx)(`path`,{d:`M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96M14 13v4h-4v-4H7l5-5 5 5z`}),`Backup`),PT=rp((0,N.jsx)(`path`,{d:`M5 20h14v-2H5zM19 9h-4V3H9v6H5l7 7z`}),`Download`),FT=rp((0,N.jsx)(`path`,{d:`M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9m-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8z`}),`Restore`),IT=rp((0,N.jsx)(`path`,{d:`M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8zm4 18H6V4h7v5h5zM8 15.01l1.41 1.41L11 14.84V19h2v-4.16l1.59 1.59L16 15.01 12.01 11z`}),`UploadFile`),LT=rp((0,N.jsx)(`path`,{d:`M21 10h-8.35C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H13l2 2 2-2 2 2 4-4.04zM7 15c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3`}),`Key`),RT=rp((0,N.jsx)(`path`,{d:`M15 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4m-9-2V7H4v3H1v2h3v3h2v-3h3v-2zm9 4c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4`}),`PersonAdd`),zT=rp((0,N.jsx)(`path`,{d:`M20 4H4c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2m0 14H4V8h16zm-2-1h-6v-2h6zM7.5 17l-1.41-1.41L8.67 13l-2.59-2.59L7.5 9l4 4z`}),`Terminal`),BT=s(((e,t)=>{t.exports=function(){return typeof Promise==`function`&&Promise.prototype&&Promise.prototype.then}})),VT=s((e=>{var t,n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(e){if(!e)throw Error(`"version" cannot be null or undefined`);if(e<1||e>40)throw Error(`"version" should be in range from 1 to 40`);return e*4+17},e.getSymbolTotalCodewords=function(e){return n[e]},e.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t},e.setToSJISFunction=function(e){if(typeof e!=`function`)throw Error(`"toSJISFunc" is not a valid function.`);t=e},e.isKanjiModeEnabled=function(){return t!==void 0},e.toSJIS=function(e){return t(e)}})),HT=s((e=>{e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`l`:case`low`:return e.L;case`m`:case`medium`:return e.M;case`q`:case`quartile`:return e.Q;case`h`:case`high`:return e.H;default:throw Error(`Unknown EC Level: `+t)}}e.isValid=function(e){return e&&e.bit!==void 0&&e.bit>=0&&e.bit<4},e.from=function(n,r){if(e.isValid(n))return n;try{return t(n)}catch{return r}}})),UT=s(((e,t)=>{function n(){this.buffer=[],this.length=0}n.prototype={get:function(e){let t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)==1},put:function(e,t){for(let n=0;n<t;n++)this.putBit((e>>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},t.exports=n})),WT=s(((e,t)=>{function n(e){if(!e||e<1)throw Error(`BitMatrix size must be defined and greater than 0`);this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}n.prototype.set=function(e,t,n,r){let i=e*this.size+t;this.data[i]=n,r&&(this.reservedBit[i]=!0)},n.prototype.get=function(e,t){return this.data[e*this.size+t]},n.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},n.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},t.exports=n})),GT=s((e=>{var t=VT().getSymbolSize;e.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=t(e),i=r===145?26:Math.ceil((r-13)/(2*n-2))*2,a=[r-7];for(let e=1;e<n-1;e++)a[e]=a[e-1]-i;return a.push(6),a.reverse()},e.getPositions=function(t){let n=[],r=e.getRowColCoords(t),i=r.length;for(let e=0;e<i;e++)for(let t=0;t<i;t++)e===0&&t===0||e===0&&t===i-1||e===i-1&&t===0||n.push([r[e],r[t]]);return n}})),KT=s((e=>{var t=VT().getSymbolSize,n=7;e.getPositions=function(e){let r=t(e);return[[0,0],[r-n,0],[0,r-n]]}})),qT=s((e=>{e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(e){return e!=null&&e!==``&&!isNaN(e)&&e>=0&&e<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(e){let n=e.size,r=0,i=0,a=0,o=null,s=null;for(let c=0;c<n;c++){i=a=0,o=s=null;for(let l=0;l<n;l++){let n=e.get(c,l);n===o?i++:(i>=5&&(r+=t.N1+(i-5)),o=n,i=1),n=e.get(l,c),n===s?a++:(a>=5&&(r+=t.N1+(a-5)),s=n,a=1)}i>=5&&(r+=t.N1+(i-5)),a>=5&&(r+=t.N1+(a-5))}return r},e.getPenaltyN2=function(e){let n=e.size,r=0;for(let t=0;t<n-1;t++)for(let i=0;i<n-1;i++){let n=e.get(t,i)+e.get(t,i+1)+e.get(t+1,i)+e.get(t+1,i+1);(n===4||n===0)&&r++}return r*t.N2},e.getPenaltyN3=function(e){let n=e.size,r=0,i=0,a=0;for(let t=0;t<n;t++){i=a=0;for(let o=0;o<n;o++)i=i<<1&2047|e.get(t,o),o>=10&&(i===1488||i===93)&&r++,a=a<<1&2047|e.get(o,t),o>=10&&(a===1488||a===93)&&r++}return r*t.N3},e.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let t=0;t<r;t++)n+=e.data[t];return Math.abs(Math.ceil(n*100/r/5)-10)*t.N4};function n(t,n,r){switch(t){case e.Patterns.PATTERN000:return(n+r)%2==0;case e.Patterns.PATTERN001:return n%2==0;case e.Patterns.PATTERN010:return r%3==0;case e.Patterns.PATTERN011:return(n+r)%3==0;case e.Patterns.PATTERN100:return(Math.floor(n/2)+Math.floor(r/3))%2==0;case e.Patterns.PATTERN101:return n*r%2+n*r%3==0;case e.Patterns.PATTERN110:return(n*r%2+n*r%3)%2==0;case e.Patterns.PATTERN111:return(n*r%3+(n+r)%2)%2==0;default:throw Error(`bad maskPattern:`+t)}}e.applyMask=function(e,t){let r=t.size;for(let i=0;i<r;i++)for(let a=0;a<r;a++)t.isReserved(a,i)||t.xor(a,i,n(e,a,i))},e.getBestMask=function(t,n){let r=Object.keys(e.Patterns).length,i=0,a=1/0;for(let o=0;o<r;o++){n(o),e.applyMask(o,t);let r=e.getPenaltyN1(t)+e.getPenaltyN2(t)+e.getPenaltyN3(t)+e.getPenaltyN4(t);e.applyMask(o,t),r<a&&(a=r,i=o)}return i}})),JT=s((e=>{var t=HT(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(e,r){switch(r){case t.L:return n[(e-1)*4+0];case t.M:return n[(e-1)*4+1];case t.Q:return n[(e-1)*4+2];case t.H:return n[(e-1)*4+3];default:return}},e.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return r[(e-1)*4+0];case t.M:return r[(e-1)*4+1];case t.Q:return r[(e-1)*4+2];case t.H:return r[(e-1)*4+3];default:return}}})),YT=s((e=>{var t=new Uint8Array(512),n=new Uint8Array(256);(function(){let e=1;for(let r=0;r<255;r++)t[r]=e,n[e]=r,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)t[e]=t[e-255]})(),e.log=function(e){if(e<1)throw Error(`log(`+e+`)`);return n[e]},e.exp=function(e){return t[e]},e.mul=function(e,r){return e===0||r===0?0:t[n[e]+n[r]]}})),XT=s((e=>{var t=YT();e.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let i=0;i<e.length;i++)for(let a=0;a<n.length;a++)r[i+a]^=t.mul(e[i],n[a]);return r},e.mod=function(e,n){let r=new Uint8Array(e);for(;r.length-n.length>=0;){let e=r[0];for(let i=0;i<n.length;i++)r[i]^=t.mul(n[i],e);let i=0;for(;i<r.length&&r[i]===0;)i++;r=r.slice(i)}return r},e.generateECPolynomial=function(n){let r=new Uint8Array([1]);for(let i=0;i<n;i++)r=e.mul(r,new Uint8Array([1,t.exp(i)]));return r}})),ZT=s(((e,t)=>{var n=XT();function r(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(e){this.degree=e,this.genPoly=n.generateECPolynomial(this.degree)},r.prototype.encode=function(e){if(!this.genPoly)throw Error(`Encoder not initialized`);let t=new Uint8Array(e.length+this.degree);t.set(e);let r=n.mod(t,this.genPoly),i=this.degree-r.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(r,i),e}return r},t.exports=r})),QT=s((e=>{e.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}})),$T=s((e=>{var t=`[0-9]+`,n=`[A-Z $%*+\\-./:]+`,r=`(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+`;r=r.replace(/u/g,`\\u`);var i=`(?:(?![A-Z0-9 $%*+\\-./:]|`+r+`)(?:.|[\r
|
|
111
|
+
`,v_)),C_=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiCircularProgress`}),{className:r,color:i=`primary`,disableShrink:a=!1,size:o=40,style:s,thickness:c=3.6,value:l=0,variant:u=`indeterminate`}=n,d=L(n,u_),f=A({},n,{color:i,disableShrink:a,size:o,thickness:c,value:l,variant:u}),p=y_(f),m={},h={},g={};if(u===`determinate`){let e=2*Math.PI*((g_-c)/2);m.strokeDasharray=e.toFixed(3),g[`aria-valuenow`]=Math.round(l),m.strokeDashoffset=`${((100-l)/100*e).toFixed(3)}px`,h.transform=`rotate(-90deg)`}return(0,N.jsx)(b_,A({className:z(p.root,r),style:A({width:o,height:o},h,s),ownerState:f,ref:t,role:`progressbar`},g,d,{children:(0,N.jsx)(x_,{className:p.svg,ownerState:f,viewBox:`${g_/2} ${g_/2} ${g_} ${g_}`,children:(0,N.jsx)(S_,{className:p.circle,style:m,ownerState:f,cx:g_,cy:g_,r:(g_-c)/2,fill:`none`,strokeWidth:c})})}))}),w_=hs({createStyledComponent:W(`div`,{name:`MuiContainer`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,t[`maxWidth${G(String(n.maxWidth))}`],n.fixed&&t.fixed,n.disableGutters&&t.disableGutters]}}),useThemeProps:e=>F({props:e,name:`MuiContainer`})});function T_(e){let t=lo(e);return t.body===e?uo(e).innerWidth>t.documentElement.clientWidth:e.scrollHeight>e.clientHeight}function E_(e,t){t?e.setAttribute(`aria-hidden`,`true`):e.removeAttribute(`aria-hidden`)}function D_(e){return parseInt(uo(e).getComputedStyle(e).paddingRight,10)||0}function O_(e){let t=[`TEMPLATE`,`SCRIPT`,`STYLE`,`LINK`,`MAP`,`META`,`NOSCRIPT`,`PICTURE`,`COL`,`COLGROUP`,`PARAM`,`SLOT`,`SOURCE`,`TRACK`].indexOf(e.tagName)!==-1,n=e.tagName===`INPUT`&&e.getAttribute(`type`)===`hidden`;return t||n}function k_(e,t,n,r,i){let a=[t,n,...r];[].forEach.call(e.children,e=>{let t=a.indexOf(e)===-1,n=!O_(e);t&&n&&E_(e,i)})}function A_(e,t){let n=-1;return e.some((e,r)=>t(e)?(n=r,!0):!1),n}function j_(e,t){let n=[],r=e.container;if(!t.disableScrollLock){if(T_(r)){let e=Lo(lo(r));n.push({value:r.style.paddingRight,property:`padding-right`,el:r}),r.style.paddingRight=`${D_(r)+e}px`;let t=lo(r).querySelectorAll(`.mui-fixed`);[].forEach.call(t,t=>{n.push({value:t.style.paddingRight,property:`padding-right`,el:t}),t.style.paddingRight=`${D_(t)+e}px`})}let e;if(r.parentNode instanceof DocumentFragment)e=lo(r).body;else{let t=r.parentElement,n=uo(r);e=t?.nodeName===`HTML`&&n.getComputedStyle(t).overflowY===`scroll`?t:r}n.push({value:e.style.overflow,property:`overflow`,el:e},{value:e.style.overflowX,property:`overflow-x`,el:e},{value:e.style.overflowY,property:`overflow-y`,el:e}),e.style.overflow=`hidden`}return()=>{n.forEach(({value:e,el:t,property:n})=>{e?t.style.setProperty(n,e):t.style.removeProperty(n)})}}function M_(e){let t=[];return[].forEach.call(e.children,e=>{e.getAttribute(`aria-hidden`)===`true`&&t.push(e)}),t}var N_=class{constructor(){this.containers=void 0,this.modals=void 0,this.modals=[],this.containers=[]}add(e,t){let n=this.modals.indexOf(e);if(n!==-1)return n;n=this.modals.length,this.modals.push(e),e.modalRef&&E_(e.modalRef,!1);let r=M_(t);k_(t,e.mount,e.modalRef,r,!0);let i=A_(this.containers,e=>e.container===t);return i===-1?(this.containers.push({modals:[e],container:t,restore:null,hiddenSiblings:r}),n):(this.containers[i].modals.push(e),n)}mount(e,t){let n=A_(this.containers,t=>t.modals.indexOf(e)!==-1),r=this.containers[n];r.restore||=j_(r,t)}remove(e,t=!0){let n=this.modals.indexOf(e);if(n===-1)return n;let r=A_(this.containers,t=>t.modals.indexOf(e)!==-1),i=this.containers[r];if(i.modals.splice(i.modals.indexOf(e),1),this.modals.splice(n,1),i.modals.length===0)i.restore&&i.restore(),e.modalRef&&E_(e.modalRef,t),k_(i.container,e.mount,e.modalRef,i.hiddenSiblings,!1),this.containers.splice(r,1);else{let e=i.modals[i.modals.length-1];e.modalRef&&E_(e.modalRef,!1)}return n}isTopModal(e){return this.modals.length>0&&this.modals[this.modals.length-1]===e}},P_=[`input`,`select`,`textarea`,`a[href]`,`button`,`[tabindex]`,`audio[controls]`,`video[controls]`,`[contenteditable]:not([contenteditable="false"])`].join(`,`);function F_(e){let t=parseInt(e.getAttribute(`tabindex`)||``,10);return Number.isNaN(t)?e.contentEditable===`true`||(e.nodeName===`AUDIO`||e.nodeName===`VIDEO`||e.nodeName===`DETAILS`)&&e.getAttribute(`tabindex`)===null?0:e.tabIndex:t}function I_(e){if(e.tagName!==`INPUT`||e.type!==`radio`||!e.name)return!1;let t=t=>e.ownerDocument.querySelector(`input[type="radio"]${t}`),n=t(`[name="${e.name}"]:checked`);return n||=t(`[name="${e.name}"]`),n!==e}function L_(e){return!(e.disabled||e.tagName===`INPUT`&&e.type===`hidden`||I_(e))}function R_(e){let t=[],n=[];return Array.from(e.querySelectorAll(P_)).forEach((e,r)=>{let i=F_(e);i!==-1&&L_(e)&&(i===0?t.push(e):n.push({documentOrder:r,tabIndex:i,node:e}))}),n.sort((e,t)=>e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex).map(e=>e.node).concat(t)}function z_(){return!0}function B_(e){let{children:t,disableAutoFocus:n=!1,disableEnforceFocus:r=!1,disableRestoreFocus:i=!1,getTabbable:a=R_,isEnabled:o=z_,open:s}=e,c=y.useRef(!1),l=y.useRef(null),u=y.useRef(null),d=y.useRef(null),f=y.useRef(null),p=y.useRef(!1),m=y.useRef(null),h=yo(Xo(t),m),g=y.useRef(null);y.useEffect(()=>{s&&m.current&&(p.current=!n)},[n,s]),y.useEffect(()=>{if(!s||!m.current)return;let e=lo(m.current);return m.current.contains(e.activeElement)||(m.current.hasAttribute(`tabIndex`)||m.current.setAttribute(`tabIndex`,`-1`),p.current&&m.current.focus()),()=>{i||(d.current&&d.current.focus&&(c.current=!0,d.current.focus()),d.current=null)}},[s]),y.useEffect(()=>{if(!s||!m.current)return;let e=lo(m.current),t=t=>{g.current=t,!r&&o()&&t.key===`Tab`&&e.activeElement===m.current&&t.shiftKey&&(c.current=!0,u.current&&u.current.focus())},n=()=>{let t=m.current;if(t===null)return;if(!e.hasFocus()||!o()||c.current){c.current=!1;return}if(t.contains(e.activeElement)||r&&e.activeElement!==l.current&&e.activeElement!==u.current)return;if(e.activeElement!==f.current)f.current=null;else if(f.current!==null)return;if(!p.current)return;let n=[];if((e.activeElement===l.current||e.activeElement===u.current)&&(n=a(m.current)),n.length>0){let e=!!(g.current?.shiftKey&&g.current?.key===`Tab`),t=n[0],r=n[n.length-1];typeof t!=`string`&&typeof r!=`string`&&(e?r.focus():t.focus())}else t.focus()};e.addEventListener(`focusin`,n),e.addEventListener(`keydown`,t,!0);let i=setInterval(()=>{e.activeElement&&e.activeElement.tagName===`BODY`&&n()},50);return()=>{clearInterval(i),e.removeEventListener(`focusin`,n),e.removeEventListener(`keydown`,t,!0)}},[n,r,i,o,s,a]);let _=e=>{d.current===null&&(d.current=e.relatedTarget),p.current=!0,f.current=e.target;let n=t.props.onFocus;n&&n(e)},v=e=>{d.current===null&&(d.current=e.relatedTarget),p.current=!0};return(0,N.jsxs)(y.Fragment,{children:[(0,N.jsx)(`div`,{tabIndex:s?0:-1,onFocus:v,ref:l,"data-testid":`sentinelStart`}),y.cloneElement(t,{ref:h,onFocus:_}),(0,N.jsx)(`div`,{tabIndex:s?0:-1,onFocus:v,ref:u,"data-testid":`sentinelEnd`})]})}j();function V_(e){return typeof e==`function`?e():e}function H_(e){return e?e.props.hasOwnProperty(`in`):!1}var U_=new N_;function W_(e){let{container:t,disableEscapeKeyDown:n=!1,disableScrollLock:r=!1,manager:i=U_,closeAfterTransition:a=!1,onTransitionEnter:o,onTransitionExited:s,children:c,onClose:l,open:u,rootRef:d}=e,f=y.useRef({}),p=y.useRef(null),m=y.useRef(null),h=yo(m,d),[g,_]=y.useState(!u),v=H_(c),b=!0;(e[`aria-hidden`]===`false`||e[`aria-hidden`]===!1)&&(b=!1);let x=()=>lo(p.current),S=()=>(f.current.modalRef=m.current,f.current.mount=p.current,f.current),C=()=>{i.mount(S(),{disableScrollLock:r}),m.current&&(m.current.scrollTop=0)},w=vo(()=>{let e=V_(t)||x().body;i.add(S(),e),m.current&&C()}),T=y.useCallback(()=>i.isTopModal(S()),[i]),E=vo(e=>{p.current=e,e&&(u&&T()?C():m.current&&E_(m.current,b))}),D=y.useCallback(()=>{i.remove(S(),b)},[b,i]);y.useEffect(()=>()=>{D()},[D]),y.useEffect(()=>{u?w():(!v||!a)&&D()},[u,D,v,a,w]);let O=e=>t=>{var r;(r=e.onKeyDown)==null||r.call(e,t),t.key===`Escape`&&t.which!==229&&T()&&(n||(t.stopPropagation(),l&&l(t,`escapeKeyDown`)))},k=e=>t=>{var n;(n=e.onClick)==null||n.call(e,t),t.target===t.currentTarget&&l&&l(t,`backdropClick`)};return{getRootProps:(t={})=>{let n=Wo(e);delete n.onTransitionEnter,delete n.onTransitionExited;let r=A({},n,t);return A({role:`presentation`},r,{onKeyDown:O(r),ref:h})},getBackdropProps:(e={})=>{let t=e;return A({"aria-hidden":!0},t,{onClick:k(t),open:u})},getTransitionProps:()=>({onEnter:oo(()=>{_(!1),o&&o()},c?.props.onEnter),onExited:oo(()=>{_(!0),s&&s(),a&&D()},c?.props.onExited)}),rootRef:h,portalRef:E,isTopModal:T,exited:g,hasTransition:v}}function G_(e){return B(`MuiModal`,e)}V(`MuiModal`,[`root`,`hidden`,`backdrop`]),R(),j();var K_=`BackdropComponent.BackdropProps.classes.className.closeAfterTransition.children.container.component.components.componentsProps.disableAutoFocus.disableEnforceFocus.disableEscapeKeyDown.disablePortal.disableRestoreFocus.disableScrollLock.hideBackdrop.keepMounted.onBackdropClick.onClose.onTransitionEnter.onTransitionExited.open.slotProps.slots.theme`.split(`.`),q_=e=>{let{open:t,exited:n,classes:r}=e;return H({root:[`root`,!t&&n&&`hidden`],backdrop:[`backdrop`]},G_,r)},J_=W(`div`,{name:`MuiModal`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,!n.open&&n.exited&&t.hidden]}})(({theme:e,ownerState:t})=>A({position:`fixed`,zIndex:(e.vars||e).zIndex.modal,right:0,bottom:0,top:0,left:0},!t.open&&t.exited&&{visibility:`hidden`})),Y_=W(Yh,{name:`MuiModal`,slot:`Backdrop`,overridesResolver:(e,t)=>t.backdrop})({zIndex:-1}),X_=y.forwardRef(function(e,t){let n=F({name:`MuiModal`,props:e}),{BackdropComponent:r=Y_,BackdropProps:i,className:a,closeAfterTransition:o=!1,children:s,container:c,component:l,components:u={},componentsProps:d={},disableAutoFocus:f=!1,disableEnforceFocus:p=!1,disableEscapeKeyDown:m=!1,disablePortal:h=!1,disableRestoreFocus:g=!1,disableScrollLock:_=!1,hideBackdrop:v=!1,keepMounted:b=!1,onBackdropClick:x,open:S,slotProps:C,slots:w}=n,T=L(n,K_),E=A({},n,{closeAfterTransition:o,disableAutoFocus:f,disableEnforceFocus:p,disableEscapeKeyDown:m,disablePortal:h,disableRestoreFocus:g,disableScrollLock:_,hideBackdrop:v,keepMounted:b}),{getRootProps:D,getBackdropProps:O,getTransitionProps:k,portalRef:j,isTopModal:ee,exited:te,hasTransition:M}=W_(A({},E,{rootRef:t})),ne=A({},E,{exited:te}),re=q_(ne),ie={};if(s.props.tabIndex===void 0&&(ie.tabIndex=`-1`),M){let{onEnter:e,onExited:t}=k();ie.onEnter=e,ie.onExited=t}let P=w?.root??u.Root??J_,ae=w?.backdrop??u.Backdrop??r,oe=C?.root??d.root,se=C?.backdrop??d.backdrop,ce=Yo({elementType:P,externalSlotProps:oe,externalForwardedProps:T,getSlotProps:D,additionalProps:{ref:t,as:l},ownerState:ne,className:z(a,oe?.className,re?.root,!ne.open&&ne.exited&&re?.hidden)}),le=Yo({elementType:ae,externalSlotProps:se,additionalProps:i,getSlotProps:e=>O(A({},e,{onClick:t=>{x&&x(t),e!=null&&e.onClick&&e.onClick(t)}})),className:z(se?.className,i?.className,re?.backdrop),ownerState:ne});return!b&&!S&&(!M||te)?null:(0,N.jsx)(Jm,{ref:j,container:c,disablePortal:h,children:(0,N.jsxs)(P,A({},ce,{children:[!v&&r?(0,N.jsx)(ae,A({},le)):null,(0,N.jsx)(B_,{disableEnforceFocus:p,disableAutoFocus:f,disableRestoreFocus:g,isEnabled:ee,open:S,children:y.cloneElement(s,ie)})]}))})});function Z_(e){return B(`MuiDialog`,e)}var Q_=V(`MuiDialog`,[`root`,`scrollPaper`,`scrollBody`,`container`,`paper`,`paperScrollPaper`,`paperScrollBody`,`paperWidthFalse`,`paperWidthXs`,`paperWidthSm`,`paperWidthMd`,`paperWidthLg`,`paperWidthXl`,`paperFullWidth`,`paperFullScreen`]),$_=y.createContext({});R(),j();var ev=[`aria-describedby`,`aria-labelledby`,`BackdropComponent`,`BackdropProps`,`children`,`className`,`disableEscapeKeyDown`,`fullScreen`,`fullWidth`,`maxWidth`,`onBackdropClick`,`onClick`,`onClose`,`open`,`PaperComponent`,`PaperProps`,`scroll`,`TransitionComponent`,`transitionDuration`,`TransitionProps`],tv=W(Yh,{name:`MuiDialog`,slot:`Backdrop`,overrides:(e,t)=>t.backdrop})({zIndex:-1}),nv=e=>{let{classes:t,scroll:n,maxWidth:r,fullWidth:i,fullScreen:a}=e;return H({root:[`root`],container:[`container`,`scroll${G(n)}`],paper:[`paper`,`paperScroll${G(n)}`,`paperWidth${G(String(r))}`,i&&`paperFullWidth`,a&&`paperFullScreen`]},Z_,t)},rv=W(X_,{name:`MuiDialog`,slot:`Root`,overridesResolver:(e,t)=>t.root})({"@media print":{position:`absolute !important`}}),iv=W(`div`,{name:`MuiDialog`,slot:`Container`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.container,t[`scroll${G(n.scroll)}`]]}})(({ownerState:e})=>A({height:`100%`,"@media print":{height:`auto`},outline:0},e.scroll===`paper`&&{display:`flex`,justifyContent:`center`,alignItems:`center`},e.scroll===`body`&&{overflowY:`auto`,overflowX:`hidden`,textAlign:`center`,"&::after":{content:`""`,display:`inline-block`,verticalAlign:`middle`,height:`100%`,width:`0`}})),av=W(Vp,{name:`MuiDialog`,slot:`Paper`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.paper,t[`scrollPaper${G(n.scroll)}`],t[`paperWidth${G(String(n.maxWidth))}`],n.fullWidth&&t.paperFullWidth,n.fullScreen&&t.paperFullScreen]}})(({theme:e,ownerState:t})=>A({margin:32,position:`relative`,overflowY:`auto`,"@media print":{overflowY:`visible`,boxShadow:`none`}},t.scroll===`paper`&&{display:`flex`,flexDirection:`column`,maxHeight:`calc(100% - 64px)`},t.scroll===`body`&&{display:`inline-block`,verticalAlign:`middle`,textAlign:`left`},!t.maxWidth&&{maxWidth:`calc(100% - 64px)`},t.maxWidth===`xs`&&{maxWidth:e.breakpoints.unit===`px`?Math.max(e.breakpoints.values.xs,444):`max(${e.breakpoints.values.xs}${e.breakpoints.unit}, 444px)`,[`&.${Q_.paperScrollBody}`]:{[e.breakpoints.down(Math.max(e.breakpoints.values.xs,444)+64)]:{maxWidth:`calc(100% - 64px)`}}},t.maxWidth&&t.maxWidth!==`xs`&&{maxWidth:`${e.breakpoints.values[t.maxWidth]}${e.breakpoints.unit}`,[`&.${Q_.paperScrollBody}`]:{[e.breakpoints.down(e.breakpoints.values[t.maxWidth]+64)]:{maxWidth:`calc(100% - 64px)`}}},t.fullWidth&&{width:`calc(100% - 64px)`},t.fullScreen&&{margin:0,width:`100%`,maxWidth:`100%`,height:`100%`,maxHeight:`none`,borderRadius:0,[`&.${Q_.paperScrollBody}`]:{margin:0,maxWidth:`100%`}})),ov=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiDialog`}),r=yc(),i={enter:r.transitions.duration.enteringScreen,exit:r.transitions.duration.leavingScreen},{"aria-describedby":a,"aria-labelledby":o,BackdropComponent:s,BackdropProps:c,children:l,className:u,disableEscapeKeyDown:d=!1,fullScreen:f=!1,fullWidth:p=!1,maxWidth:m=`sm`,onBackdropClick:h,onClick:g,onClose:_,open:v,PaperComponent:b=Vp,PaperProps:x={},scroll:S=`paper`,TransitionComponent:C=Wh,transitionDuration:w=i,TransitionProps:T}=n,E=L(n,ev),D=A({},n,{disableEscapeKeyDown:d,fullScreen:f,fullWidth:p,maxWidth:m,scroll:S}),O=nv(D),k=y.useRef(),j=e=>{k.current=e.target===e.currentTarget},ee=e=>{g&&g(e),k.current&&(k.current=null,h&&h(e),_&&_(e,`backdropClick`))},te=go(o),M=y.useMemo(()=>({titleId:te}),[te]);return(0,N.jsx)(rv,A({className:z(O.root,u),closeAfterTransition:!0,components:{Backdrop:tv},componentsProps:{backdrop:A({transitionDuration:w,as:s},c)},disableEscapeKeyDown:d,onClose:_,open:v,ref:t,onClick:ee,ownerState:D},E,{children:(0,N.jsx)(C,A({appear:!0,in:v,timeout:w,role:`presentation`},T,{children:(0,N.jsx)(iv,{className:z(O.container),onMouseDown:j,ownerState:D,children:(0,N.jsx)(av,A({as:b,elevation:24,role:`dialog`,"aria-describedby":a,"aria-labelledby":te},x,{className:z(O.paper,x.className),ownerState:D,children:(0,N.jsx)($_.Provider,{value:M,children:l})}))})}))}))});function sv(e){return B(`MuiDialogActions`,e)}V(`MuiDialogActions`,[`root`,`spacing`]),R(),j();var cv=[`className`,`disableSpacing`],lv=e=>{let{classes:t,disableSpacing:n}=e;return H({root:[`root`,!n&&`spacing`]},sv,t)},uv=W(`div`,{name:`MuiDialogActions`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,!n.disableSpacing&&t.spacing]}})(({ownerState:e})=>A({display:`flex`,alignItems:`center`,padding:8,justifyContent:`flex-end`,flex:`0 0 auto`},!e.disableSpacing&&{"& > :not(style) ~ :not(style)":{marginLeft:8}})),dv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiDialogActions`}),{className:r,disableSpacing:i=!1}=n,a=L(n,cv),o=A({},n,{disableSpacing:i}),s=lv(o);return(0,N.jsx)(uv,A({className:z(s.root,r),ownerState:o,ref:t},a))});function fv(e){return B(`MuiDialogContent`,e)}V(`MuiDialogContent`,[`root`,`dividers`]);function pv(e){return B(`MuiDialogTitle`,e)}var mv=V(`MuiDialogTitle`,[`root`]);R(),j();var hv=[`className`,`dividers`],gv=e=>{let{classes:t,dividers:n}=e;return H({root:[`root`,n&&`dividers`]},fv,t)},_v=W(`div`,{name:`MuiDialogContent`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,n.dividers&&t.dividers]}})(({theme:e,ownerState:t})=>A({flex:`1 1 auto`,WebkitOverflowScrolling:`touch`,overflowY:`auto`,padding:`20px 24px`},t.dividers?{padding:`16px 24px`,borderTop:`1px solid ${(e.vars||e).palette.divider}`,borderBottom:`1px solid ${(e.vars||e).palette.divider}`}:{[`.${mv.root} + &`]:{paddingTop:0}})),vv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiDialogContent`}),{className:r,dividers:i=!1}=n,a=L(n,hv),o=A({},n,{dividers:i}),s=gv(o);return(0,N.jsx)(_v,A({className:z(s.root,r),ownerState:o,ref:t},a))});function yv(e){return B(`MuiDialogContentText`,e)}V(`MuiDialogContentText`,[`root`]),R(),j();var bv=[`children`,`className`],xv=e=>{let{classes:t}=e,n=H({root:[`root`]},yv,t);return A({},t,n)},Sv=W(K,{shouldForwardProp:e=>Cc(e)||e===`classes`,name:`MuiDialogContentText`,slot:`Root`,overridesResolver:(e,t)=>t.root})({}),Cv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiDialogContentText`}),{className:r}=n,i=L(n,bv),a=xv(i);return(0,N.jsx)(Sv,A({component:`p`,variant:`body1`,color:`text.secondary`,ref:t,ownerState:i,className:z(a.root,r)},n,{classes:a}))});j(),R();var wv=[`className`,`id`],Tv=e=>{let{classes:t}=e;return H({root:[`root`]},pv,t)},Ev=W(K,{name:`MuiDialogTitle`,slot:`Root`,overridesResolver:(e,t)=>t.root})({padding:`16px 24px`,flex:`0 0 auto`}),Dv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiDialogTitle`}),{className:r,id:i}=n,a=L(n,wv),o=n,s=Tv(o),{titleId:c=i}=y.useContext($_);return(0,N.jsx)(Ev,A({component:`h2`,className:z(s.root,r),ownerState:o,ref:t,variant:`h6`,id:i??c},a))}),Ov=V(`MuiDivider`,[`root`,`absolute`,`fullWidth`,`inset`,`middle`,`flexItem`,`light`,`vertical`,`withChildren`,`withChildrenVertical`,`textAlignRight`,`textAlignLeft`,`wrapper`,`wrapperVertical`]);R(),j(),mr();var kv=[`disableUnderline`,`components`,`componentsProps`,`fullWidth`,`hiddenLabel`,`inputComponent`,`multiline`,`slotProps`,`slots`,`type`],Av=e=>{let{classes:t,disableUnderline:n}=e,r=H({root:[`root`,!n&&`underline`],input:[`input`]},Ah,t);return A({},t,r)},jv=W(Sh,{shouldForwardProp:e=>Cc(e)||e===`classes`,name:`MuiFilledInput`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[...yh(e,t),!n.disableUnderline&&t.underline]}})(({theme:e,ownerState:t})=>{let n=e.palette.mode===`light`,r=n?`rgba(0, 0, 0, 0.42)`:`rgba(255, 255, 255, 0.7)`,i=n?`rgba(0, 0, 0, 0.06)`:`rgba(255, 255, 255, 0.09)`,a=n?`rgba(0, 0, 0, 0.09)`:`rgba(255, 255, 255, 0.13)`,o=n?`rgba(0, 0, 0, 0.12)`:`rgba(255, 255, 255, 0.12)`;return A({position:`relative`,backgroundColor:e.vars?e.vars.palette.FilledInput.bg:i,borderTopLeftRadius:(e.vars||e).shape.borderRadius,borderTopRightRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create(`background-color`,{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),"&:hover":{backgroundColor:e.vars?e.vars.palette.FilledInput.hoverBg:a,"@media (hover: none)":{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:i}},[`&.${jh.focused}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:i},[`&.${jh.disabled}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.disabledBg:o}},!t.disableUnderline&&{"&::after":{borderBottom:`2px solid ${(e.vars||e).palette[t.color||`primary`]?.main}`,left:0,bottom:0,content:`""`,position:`absolute`,right:0,transform:`scaleX(0)`,transition:e.transitions.create(`transform`,{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:`none`},[`&.${jh.focused}:after`]:{transform:`scaleX(1) translateX(0)`},[`&.${jh.error}`]:{"&::before, &::after":{borderBottomColor:(e.vars||e).palette.error.main}},"&::before":{borderBottom:`1px solid ${e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`:r}`,left:0,bottom:0,content:`"\\00a0"`,position:`absolute`,right:0,transition:e.transitions.create(`border-bottom-color`,{duration:e.transitions.duration.shorter}),pointerEvents:`none`},[`&:hover:not(.${jh.disabled}, .${jh.error}):before`]:{borderBottom:`1px solid ${(e.vars||e).palette.text.primary}`},[`&.${jh.disabled}:before`]:{borderBottomStyle:`dotted`}},t.startAdornment&&{paddingLeft:12},t.endAdornment&&{paddingRight:12},t.multiline&&A({padding:`25px 12px 8px`},t.size===`small`&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.hiddenLabel&&t.size===`small`&&{paddingTop:8,paddingBottom:9}))}),Mv=W(Ch,{name:`MuiFilledInput`,slot:`Input`,overridesResolver:bh})(({theme:e,ownerState:t})=>A({paddingTop:25,paddingRight:12,paddingBottom:8,paddingLeft:12},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:e.palette.mode===`light`?null:`0 0 0 100px #266798 inset`,WebkitTextFillColor:e.palette.mode===`light`?null:`#fff`,caretColor:e.palette.mode===`light`?null:`#fff`,borderTopLeftRadius:`inherit`,borderTopRightRadius:`inherit`}},e.vars&&{"&:-webkit-autofill":{borderTopLeftRadius:`inherit`,borderTopRightRadius:`inherit`},[e.getColorSchemeSelector(`dark`)]:{"&:-webkit-autofill":{WebkitBoxShadow:`0 0 0 100px #266798 inset`,WebkitTextFillColor:`#fff`,caretColor:`#fff`}}},t.size===`small`&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0},t.hiddenLabel&&t.size===`small`&&{paddingTop:8,paddingBottom:9},t.multiline&&{paddingTop:0,paddingBottom:0,paddingLeft:0,paddingRight:0})),Nv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiFilledInput`}),{components:r={},componentsProps:i,fullWidth:a=!1,inputComponent:o=`input`,multiline:s=!1,slotProps:c,slots:l={},type:u=`text`}=n,d=L(n,kv),f=A({},n,{fullWidth:a,inputComponent:o,multiline:s,type:u}),p=Av(n),m={root:{ownerState:f},input:{ownerState:f}},h=c??i?ur(m,c??i):m,g=l.root??r.Root??jv,_=l.input??r.Input??Mv;return(0,N.jsx)(Th,A({slots:{root:g,input:_},componentsProps:h,fullWidth:a,inputComponent:o,multiline:s,ref:t,type:u},d,{classes:p}))});Nv.muiName=`Input`;function Pv(e){return B(`MuiFormControl`,e)}V(`MuiFormControl`,[`root`,`marginNone`,`marginNormal`,`marginDense`,`fullWidth`,`disabled`]),R(),j();var Fv=[`children`,`className`,`color`,`component`,`disabled`,`error`,`focused`,`fullWidth`,`hiddenLabel`,`margin`,`required`,`size`,`variant`],Iv=e=>{let{classes:t,margin:n,fullWidth:r}=e;return H({root:[`root`,n!==`none`&&`margin${G(n)}`,r&&`fullWidth`]},Pv,t)},Lv=W(`div`,{name:`MuiFormControl`,slot:`Root`,overridesResolver:({ownerState:e},t)=>A({},t.root,t[`margin${G(e.margin)}`],e.fullWidth&&t.fullWidth)})(({ownerState:e})=>A({display:`inline-flex`,flexDirection:`column`,position:`relative`,minWidth:0,padding:0,margin:0,border:0,verticalAlign:`top`},e.margin===`normal`&&{marginTop:16,marginBottom:8},e.margin===`dense`&&{marginTop:8,marginBottom:4},e.fullWidth&&{width:`100%`})),Rv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiFormControl`}),{children:r,className:i,color:a=`primary`,component:o=`div`,disabled:s=!1,error:c=!1,focused:l,fullWidth:u=!1,hiddenLabel:d=!1,margin:f=`none`,required:p=!1,size:m=`medium`,variant:h=`outlined`}=n,g=L(n,Fv),_=A({},n,{color:a,component:o,disabled:s,error:c,fullWidth:u,hiddenLabel:d,margin:f,required:p,size:m,variant:h}),v=Iv(_),[b,x]=y.useState(()=>{let e=!1;return r&&y.Children.forEach(r,t=>{if(!ap(t,[`Input`,`Select`]))return;let n=ap(t,[`Select`])?t.props.input:t;n&&hh(n.props)&&(e=!0)}),e}),[S,C]=y.useState(()=>{let e=!1;return r&&y.Children.forEach(r,t=>{ap(t,[`Input`,`Select`])&&(mh(t.props,!0)||mh(t.props.inputProps,!0))&&(e=!0)}),e}),[w,T]=y.useState(!1);s&&w&&T(!1);let E=l!==void 0&&!s?l:w,D,O=y.useMemo(()=>({adornedStart:b,setAdornedStart:x,color:a,disabled:s,error:c,filled:S,focused:E,fullWidth:u,hiddenLabel:d,size:m,onBlur:()=>{T(!1)},onEmpty:()=>{C(!1)},onFilled:()=>{C(!0)},onFocus:()=>{T(!0)},registerEffect:D,required:p,variant:h}),[b,a,s,c,S,E,u,d,D,p,m,h]);return(0,N.jsx)(dh.Provider,{value:O,children:(0,N.jsx)(Lv,A({as:o,ownerState:_,className:z(v.root,i),ref:t},g,{children:r}))})}),X=Cs({createStyledComponent:W(`div`,{name:`MuiStack`,slot:`Root`,overridesResolver:(e,t)=>t.root}),useThemeProps:e=>F({props:e,name:`MuiStack`})});function zv(e){return B(`MuiFormControlLabel`,e)}var Bv=V(`MuiFormControlLabel`,[`root`,`labelPlacementStart`,`labelPlacementTop`,`labelPlacementBottom`,`disabled`,`label`,`error`,`required`,`asterisk`]);R(),j();var Vv=[`checked`,`className`,`componentsProps`,`control`,`disabled`,`disableTypography`,`inputRef`,`label`,`labelPlacement`,`name`,`onChange`,`required`,`slotProps`,`value`],Hv=e=>{let{classes:t,disabled:n,labelPlacement:r,error:i,required:a}=e;return H({root:[`root`,n&&`disabled`,`labelPlacement${G(r)}`,i&&`error`,a&&`required`],label:[`label`,n&&`disabled`],asterisk:[`asterisk`,i&&`error`]},zv,t)},Uv=W(`label`,{name:`MuiFormControlLabel`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[{[`& .${Bv.label}`]:t.label},t.root,t[`labelPlacement${G(n.labelPlacement)}`]]}})(({theme:e,ownerState:t})=>A({display:`inline-flex`,alignItems:`center`,cursor:`pointer`,verticalAlign:`middle`,WebkitTapHighlightColor:`transparent`,marginLeft:-11,marginRight:16,[`&.${Bv.disabled}`]:{cursor:`default`}},t.labelPlacement===`start`&&{flexDirection:`row-reverse`,marginLeft:16,marginRight:-11},t.labelPlacement===`top`&&{flexDirection:`column-reverse`,marginLeft:16},t.labelPlacement===`bottom`&&{flexDirection:`column`,marginLeft:16},{[`& .${Bv.label}`]:{[`&.${Bv.disabled}`]:{color:(e.vars||e).palette.text.disabled}}})),Wv=W(`span`,{name:`MuiFormControlLabel`,slot:`Asterisk`,overridesResolver:(e,t)=>t.asterisk})(({theme:e})=>({[`&.${Bv.error}`]:{color:(e.vars||e).palette.error.main}})),Gv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiFormControlLabel`}),{className:r,componentsProps:i={},control:a,disabled:o,disableTypography:s,label:c,labelPlacement:l=`end`,required:u,slotProps:d={}}=n,f=L(n,Vv),p=fh(),m=o??a.props.disabled??p?.disabled,h=u??a.props.required,g={disabled:m,required:h};[`checked`,`name`,`onChange`,`value`,`inputRef`].forEach(e=>{a.props[e]===void 0&&n[e]!==void 0&&(g[e]=n[e])});let _=uh({props:n,muiFormControl:p,states:[`error`]}),v=A({},n,{disabled:m,labelPlacement:l,required:h,error:_.error}),b=Hv(v),x=d.typography??i.typography,S=c;return S!=null&&S.type!==K&&!s&&(S=(0,N.jsx)(K,A({component:`span`},x,{className:z(b.label,x?.className),children:S}))),(0,N.jsxs)(Uv,A({className:z(b.root,r),ownerState:v,ref:t},f,{children:[y.cloneElement(a,g),h?(0,N.jsxs)(X,{display:`block`,children:[S,(0,N.jsxs)(Wv,{ownerState:v,"aria-hidden":!0,className:b.asterisk,children:[` `,`*`]})]}):S]}))});function Kv(e){return B(`MuiFormHelperText`,e)}var qv=V(`MuiFormHelperText`,[`root`,`error`,`disabled`,`sizeSmall`,`sizeMedium`,`contained`,`focused`,`filled`,`required`]);R(),j();var Jv,Yv=[`children`,`className`,`component`,`disabled`,`error`,`filled`,`focused`,`margin`,`required`,`variant`],Xv=e=>{let{classes:t,contained:n,size:r,disabled:i,error:a,filled:o,focused:s,required:c}=e;return H({root:[`root`,i&&`disabled`,a&&`error`,r&&`size${G(r)}`,n&&`contained`,s&&`focused`,o&&`filled`,c&&`required`]},Kv,t)},Zv=W(`p`,{name:`MuiFormHelperText`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,n.size&&t[`size${G(n.size)}`],n.contained&&t.contained,n.filled&&t.filled]}})(({theme:e,ownerState:t})=>A({color:(e.vars||e).palette.text.secondary},e.typography.caption,{textAlign:`left`,marginTop:3,marginRight:0,marginBottom:0,marginLeft:0,[`&.${qv.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${qv.error}`]:{color:(e.vars||e).palette.error.main}},t.size===`small`&&{marginTop:4},t.contained&&{marginLeft:14,marginRight:14})),Qv=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiFormHelperText`}),{children:r,className:i,component:a=`p`}=n,o=L(n,Yv),s=uh({props:n,muiFormControl:fh(),states:[`variant`,`size`,`disabled`,`error`,`filled`,`focused`,`required`]}),c=A({},n,{component:a,contained:s.variant===`filled`||s.variant===`outlined`,variant:s.variant,size:s.size,disabled:s.disabled,error:s.error,filled:s.filled,focused:s.focused,required:s.required}),l=Xv(c);return(0,N.jsx)(Zv,A({as:a,ownerState:c,className:z(l.root,i),ref:t},o,{children:r===` `?Jv||=(0,N.jsx)(`span`,{className:`notranslate`,children:``}):r}))});function $v(e){return B(`MuiFormLabel`,e)}var ey=V(`MuiFormLabel`,[`root`,`colorSecondary`,`focused`,`disabled`,`error`,`filled`,`required`,`asterisk`]);R(),j();var ty=[`children`,`className`,`color`,`component`,`disabled`,`error`,`filled`,`focused`,`required`],ny=e=>{let{classes:t,color:n,focused:r,disabled:i,error:a,filled:o,required:s}=e;return H({root:[`root`,`color${G(n)}`,i&&`disabled`,a&&`error`,o&&`filled`,r&&`focused`,s&&`required`],asterisk:[`asterisk`,a&&`error`]},$v,t)},ry=W(`label`,{name:`MuiFormLabel`,slot:`Root`,overridesResolver:({ownerState:e},t)=>A({},t.root,e.color===`secondary`&&t.colorSecondary,e.filled&&t.filled)})(({theme:e,ownerState:t})=>A({color:(e.vars||e).palette.text.secondary},e.typography.body1,{lineHeight:`1.4375em`,padding:0,position:`relative`,[`&.${ey.focused}`]:{color:(e.vars||e).palette[t.color].main},[`&.${ey.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${ey.error}`]:{color:(e.vars||e).palette.error.main}})),iy=W(`span`,{name:`MuiFormLabel`,slot:`Asterisk`,overridesResolver:(e,t)=>t.asterisk})(({theme:e})=>({[`&.${ey.error}`]:{color:(e.vars||e).palette.error.main}})),ay=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiFormLabel`}),{children:r,className:i,component:a=`label`}=n,o=L(n,ty),s=uh({props:n,muiFormControl:fh(),states:[`color`,`required`,`focused`,`disabled`,`error`,`filled`]}),c=A({},n,{color:s.color||`primary`,component:a,disabled:s.disabled,error:s.error,filled:s.filled,focused:s.focused,required:s.required}),l=ny(c);return(0,N.jsxs)(ry,A({as:a,ownerState:c,className:z(l.root,i),ref:t},o,{children:[r,s.required&&(0,N.jsxs)(iy,{ownerState:c,"aria-hidden":!0,className:l.asterisk,children:[` `,`*`]})]}))}),oy=y.createContext();function sy(e){return B(`MuiGrid`,e)}var cy=[0,1,2,3,4,5,6,7,8,9,10],ly=[`column-reverse`,`column`,`row-reverse`,`row`],uy=[`nowrap`,`wrap-reverse`,`wrap`],dy=[`auto`,!0,1,2,3,4,5,6,7,8,9,10,11,12],fy=V(`MuiGrid`,[`root`,`container`,`item`,`zeroMinWidth`,...cy.map(e=>`spacing-xs-${e}`),...ly.map(e=>`direction-xs-${e}`),...uy.map(e=>`wrap-xs-${e}`),...dy.map(e=>`grid-xs-${e}`),...dy.map(e=>`grid-sm-${e}`),...dy.map(e=>`grid-md-${e}`),...dy.map(e=>`grid-lg-${e}`),...dy.map(e=>`grid-xl-${e}`)]);R(),j(),jr(),xa();var py=[`className`,`columns`,`columnSpacing`,`component`,`container`,`direction`,`item`,`rowSpacing`,`spacing`,`wrap`,`zeroMinWidth`];function my(e){let t=parseFloat(e);return`${t}${String(e).replace(String(t),``)||`px`}`}function hy({theme:e,ownerState:t}){let n;return e.breakpoints.keys.reduce((r,i)=>{let a={};if(t[i]&&(n=t[i]),!n)return r;if(n===!0)a={flexBasis:0,flexGrow:1,maxWidth:`100%`};else if(n===`auto`)a={flexBasis:`auto`,flexGrow:0,flexShrink:0,maxWidth:`none`,width:`auto`};else{let o=Or({values:t.columns,breakpoints:e.breakpoints.values}),s=typeof o==`object`?o[i]:o;if(s==null)return r;let c=`${Math.round(n/s*1e8)/1e6}%`,l={};if(t.container&&t.item&&t.columnSpacing!==0){let n=e.spacing(t.columnSpacing);if(n!==`0px`){let e=`calc(${c} + ${my(n)})`;l={flexBasis:e,maxWidth:e}}}a=A({flexBasis:c,flexGrow:0,maxWidth:c},l)}return e.breakpoints.values[i]===0?Object.assign(r,a):r[e.breakpoints.up(i)]=a,r},{})}function gy({theme:e,ownerState:t}){let n=Or({values:t.direction,breakpoints:e.breakpoints.values});return Cr({theme:e},n,e=>{let t={flexDirection:e};return e.indexOf(`column`)===0&&(t[`& > .${fy.item}`]={maxWidth:`none`}),t})}function _y({breakpoints:e,values:t}){let n=``;Object.keys(t).forEach(e=>{n===``&&t[e]!==0&&(n=e)});let r=Object.keys(e).sort((t,n)=>e[t]-e[n]);return r.slice(0,r.indexOf(n))}function vy({theme:e,ownerState:t}){let{container:n,rowSpacing:r}=t,i={};if(n&&r!==0){let t=Or({values:r,breakpoints:e.breakpoints.values}),n;typeof t==`object`&&(n=_y({breakpoints:e.breakpoints.values,values:t})),i=Cr({theme:e},t,(t,r)=>{var i;let a=e.spacing(t);return a===`0px`?(i=n)!=null&&i.includes(r)?{}:{marginTop:0,[`& > .${fy.item}`]:{paddingTop:0}}:{marginTop:`-${my(a)}`,[`& > .${fy.item}`]:{paddingTop:my(a)}}})}return i}function yy({theme:e,ownerState:t}){let{container:n,columnSpacing:r}=t,i={};if(n&&r!==0){let t=Or({values:r,breakpoints:e.breakpoints.values}),n;typeof t==`object`&&(n=_y({breakpoints:e.breakpoints.values,values:t})),i=Cr({theme:e},t,(t,r)=>{var i;let a=e.spacing(t);return a===`0px`?(i=n)!=null&&i.includes(r)?{}:{width:`100%`,marginLeft:0,[`& > .${fy.item}`]:{paddingLeft:0}}:{width:`calc(100% + ${my(a)})`,marginLeft:`-${my(a)}`,[`& > .${fy.item}`]:{paddingLeft:my(a)}}})}return i}function by(e,t,n={}){if(!e||e<=0)return[];if(typeof e==`string`&&!Number.isNaN(Number(e))||typeof e==`number`)return[n[`spacing-xs-${String(e)}`]];let r=[];return t.forEach(t=>{let i=e[t];Number(i)>0&&r.push(n[`spacing-${t}-${String(i)}`])}),r}var xy=W(`div`,{name:`MuiGrid`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e,{container:r,direction:i,item:a,spacing:o,wrap:s,zeroMinWidth:c,breakpoints:l}=n,u=[];r&&(u=by(o,l,t));let d=[];return l.forEach(e=>{let r=n[e];r&&d.push(t[`grid-${e}-${String(r)}`])}),[t.root,r&&t.container,a&&t.item,c&&t.zeroMinWidth,...u,i!==`row`&&t[`direction-xs-${String(i)}`],s!==`wrap`&&t[`wrap-xs-${String(s)}`],...d]}})(({ownerState:e})=>A({boxSizing:`border-box`},e.container&&{display:`flex`,flexWrap:`wrap`,width:`100%`},e.item&&{margin:0},e.zeroMinWidth&&{minWidth:0},e.wrap!==`wrap`&&{flexWrap:e.wrap}),gy,vy,yy,hy);function Sy(e,t){if(!e||e<=0)return[];if(typeof e==`string`&&!Number.isNaN(Number(e))||typeof e==`number`)return[`spacing-xs-${String(e)}`];let n=[];return t.forEach(t=>{let r=e[t];if(Number(r)>0){let e=`spacing-${t}-${String(r)}`;n.push(e)}}),n}var Cy=e=>{let{classes:t,container:n,direction:r,item:i,spacing:a,wrap:o,zeroMinWidth:s,breakpoints:c}=e,l=[];n&&(l=Sy(a,c));let u=[];return c.forEach(t=>{let n=e[t];n&&u.push(`grid-${t}-${String(n)}`)}),H({root:[`root`,n&&`container`,i&&`item`,s&&`zeroMinWidth`,...l,r!==`row`&&`direction-xs-${String(r)}`,o!==`wrap`&&`wrap-xs-${String(o)}`,...u]},sy,t)},wy=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiGrid`}),{breakpoints:r}=yc(),i=ga(n),{className:a,columns:o,columnSpacing:s,component:c=`div`,container:l=!1,direction:u=`row`,item:d=!1,rowSpacing:f,spacing:p=0,wrap:m=`wrap`,zeroMinWidth:h=!1}=i,g=L(i,py),_=f||p,v=s||p,b=y.useContext(oy),x=l?o||12:b,S={},C=A({},g);r.keys.forEach(e=>{g[e]!=null&&(S[e]=g[e],delete C[e])});let w=A({},i,{columns:x,container:l,direction:u,item:d,rowSpacing:_,columnSpacing:v,wrap:m,zeroMinWidth:h,spacing:p},S,{breakpoints:r.keys}),T=Cy(w);return(0,N.jsx)(oy.Provider,{value:x,children:(0,N.jsx)(xy,A({ownerState:w,className:z(T.root,a),as:c,ref:t},C))})});j(),R();var Ty=[`addEndListener`,`appear`,`children`,`easing`,`in`,`onEnter`,`onEntered`,`onEntering`,`onExit`,`onExited`,`onExiting`,`style`,`timeout`,`TransitionComponent`];function Ey(e){return`scale(${e}, ${e**2})`}var Dy={entering:{opacity:1,transform:Ey(1)},entered:{opacity:1,transform:`none`}},Oy=typeof navigator<`u`&&/^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent)&&/(os |version\/)15(.|_)4/i.test(navigator.userAgent),ky=y.forwardRef(function(e,t){let{addEndListener:n,appear:r=!0,children:i,easing:a,in:o,onEnter:s,onEntered:c,onEntering:l,onExit:u,onExited:d,onExiting:f,style:p,timeout:m=`auto`,TransitionComponent:h=wp}=e,g=L(e,Ty),_=To(),v=y.useRef(),b=yc(),x=y.useRef(null),S=dp(x,Xo(i),t),C=e=>t=>{if(e){let n=x.current;t===void 0?e(n):e(n,t)}},w=C(l),T=C((e,t)=>{Fp(e);let{duration:n,delay:r,easing:i}=Ip({style:p,timeout:m,easing:a},{mode:`enter`}),o;m===`auto`?(o=b.transitions.getAutoHeightDuration(e.clientHeight),v.current=o):o=n,e.style.transition=[b.transitions.create(`opacity`,{duration:o,delay:r}),b.transitions.create(`transform`,{duration:Oy?o:o*.666,delay:r,easing:i})].join(`,`),s&&s(e,t)}),E=C(c),D=C(f),O=C(e=>{let{duration:t,delay:n,easing:r}=Ip({style:p,timeout:m,easing:a},{mode:`exit`}),i;m===`auto`?(i=b.transitions.getAutoHeightDuration(e.clientHeight),v.current=i):i=t,e.style.transition=[b.transitions.create(`opacity`,{duration:i,delay:n}),b.transitions.create(`transform`,{duration:Oy?i:i*.666,delay:Oy?n:n||i*.333,easing:r})].join(`,`),e.style.opacity=0,e.style.transform=Ey(.75),u&&u(e)}),k=C(d);return(0,N.jsx)(h,A({appear:r,in:o,nodeRef:x,onEnter:T,onEntered:E,onEntering:w,onExit:O,onExited:k,onExiting:D,addEndListener:e=>{m===`auto`&&_.start(v.current||0,e),n&&n(x.current,e)},timeout:m===`auto`?null:m},g,{children:(e,t)=>y.cloneElement(i,A({style:A({opacity:0,transform:Ey(.75),visibility:e===`exited`&&!o?`hidden`:void 0},Dy[e],p,i.props.style),ref:S},t))}))});ky.muiSupportAuto=!0,R(),j(),mr();var Ay=[`disableUnderline`,`components`,`componentsProps`,`fullWidth`,`inputComponent`,`multiline`,`slotProps`,`slots`,`type`],jy=e=>{let{classes:t,disableUnderline:n}=e,r=H({root:[`root`,!n&&`underline`],input:[`input`]},Eh,t);return A({},t,r)},My=W(Sh,{shouldForwardProp:e=>Cc(e)||e===`classes`,name:`MuiInput`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[...yh(e,t),!n.disableUnderline&&t.underline]}})(({theme:e,ownerState:t})=>{let n=e.palette.mode===`light`?`rgba(0, 0, 0, 0.42)`:`rgba(255, 255, 255, 0.7)`;return e.vars&&(n=`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`),A({position:`relative`},t.formControl&&{"label + &":{marginTop:16}},!t.disableUnderline&&{"&::after":{borderBottom:`2px solid ${(e.vars||e).palette[t.color].main}`,left:0,bottom:0,content:`""`,position:`absolute`,right:0,transform:`scaleX(0)`,transition:e.transitions.create(`transform`,{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:`none`},[`&.${Dh.focused}:after`]:{transform:`scaleX(1) translateX(0)`},[`&.${Dh.error}`]:{"&::before, &::after":{borderBottomColor:(e.vars||e).palette.error.main}},"&::before":{borderBottom:`1px solid ${n}`,left:0,bottom:0,content:`"\\00a0"`,position:`absolute`,right:0,transition:e.transitions.create(`border-bottom-color`,{duration:e.transitions.duration.shorter}),pointerEvents:`none`},[`&:hover:not(.${Dh.disabled}, .${Dh.error}):before`]:{borderBottom:`2px solid ${(e.vars||e).palette.text.primary}`,"@media (hover: none)":{borderBottom:`1px solid ${n}`}},[`&.${Dh.disabled}:before`]:{borderBottomStyle:`dotted`}})}),Ny=W(Ch,{name:`MuiInput`,slot:`Input`,overridesResolver:bh})({}),Py=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiInput`}),{disableUnderline:r,components:i={},componentsProps:a,fullWidth:o=!1,inputComponent:s=`input`,multiline:c=!1,slotProps:l,slots:u={},type:d=`text`}=n,f=L(n,Ay),p=jy(n),m={root:{ownerState:{disableUnderline:r}}},h=l??a?ur(l??a,m):m,g=u.root??i.Root??My,_=u.input??i.Input??Ny;return(0,N.jsx)(Th,A({slots:{root:g,input:_},slotProps:h,fullWidth:o,inputComponent:s,multiline:c,ref:t,type:d},f,{classes:p}))});Py.muiName=`Input`;function Fy(e){return B(`MuiInputLabel`,e)}V(`MuiInputLabel`,[`root`,`focused`,`disabled`,`error`,`required`,`asterisk`,`formControl`,`sizeSmall`,`shrink`,`animated`,`standard`,`filled`,`outlined`]),R(),j();var Iy=[`disableAnimation`,`margin`,`shrink`,`variant`,`className`],Ly=e=>{let{classes:t,formControl:n,size:r,shrink:i,disableAnimation:a,variant:o,required:s}=e,c=H({root:[`root`,n&&`formControl`,!a&&`animated`,i&&`shrink`,r&&r!==`normal`&&`size${G(r)}`,o],asterisk:[s&&`asterisk`]},Fy,t);return A({},t,c)},Ry=W(ay,{shouldForwardProp:e=>Cc(e)||e===`classes`,name:`MuiInputLabel`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[{[`& .${ey.asterisk}`]:t.asterisk},t.root,n.formControl&&t.formControl,n.size===`small`&&t.sizeSmall,n.shrink&&t.shrink,!n.disableAnimation&&t.animated,n.focused&&t.focused,t[n.variant]]}})(({theme:e,ownerState:t})=>A({display:`block`,transformOrigin:`top left`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`,maxWidth:`100%`},t.formControl&&{position:`absolute`,left:0,top:0,transform:`translate(0, 20px) scale(1)`},t.size===`small`&&{transform:`translate(0, 17px) scale(1)`},t.shrink&&{transform:`translate(0, -1.5px) scale(0.75)`,transformOrigin:`top left`,maxWidth:`133%`},!t.disableAnimation&&{transition:e.transitions.create([`color`,`transform`,`max-width`],{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut})},t.variant===`filled`&&A({zIndex:1,pointerEvents:`none`,transform:`translate(12px, 16px) scale(1)`,maxWidth:`calc(100% - 24px)`},t.size===`small`&&{transform:`translate(12px, 13px) scale(1)`},t.shrink&&A({userSelect:`none`,pointerEvents:`auto`,transform:`translate(12px, 7px) scale(0.75)`,maxWidth:`calc(133% - 24px)`},t.size===`small`&&{transform:`translate(12px, 4px) scale(0.75)`})),t.variant===`outlined`&&A({zIndex:1,pointerEvents:`none`,transform:`translate(14px, 16px) scale(1)`,maxWidth:`calc(100% - 24px)`},t.size===`small`&&{transform:`translate(14px, 9px) scale(1)`},t.shrink&&{userSelect:`none`,pointerEvents:`auto`,maxWidth:`calc(133% - 32px)`,transform:`translate(14px, -9px) scale(0.75)`}))),zy=y.forwardRef(function(e,t){let n=F({name:`MuiInputLabel`,props:e}),{disableAnimation:r=!1,shrink:i,className:a}=n,o=L(n,Iy),s=fh(),c=i;c===void 0&&s&&(c=s.filled||s.focused||s.adornedStart);let l=uh({props:n,muiFormControl:s,states:[`size`,`variant`,`required`,`focused`]}),u=A({},n,{disableAnimation:r,formControl:s,shrink:c,size:l.size,variant:l.variant,required:l.required,focused:l.focused}),d=Ly(u);return(0,N.jsx)(Ry,A({"data-shrink":c,ownerState:u,ref:t,className:z(d.root,a)},o,{classes:d}))}),By=y.createContext({});function Vy(e){return B(`MuiList`,e)}V(`MuiList`,[`root`,`padding`,`dense`,`subheader`]),R(),j();var Hy=[`children`,`className`,`component`,`dense`,`disablePadding`,`subheader`],Uy=e=>{let{classes:t,disablePadding:n,dense:r,subheader:i}=e;return H({root:[`root`,!n&&`padding`,r&&`dense`,i&&`subheader`]},Vy,t)},Wy=W(`ul`,{name:`MuiList`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,!n.disablePadding&&t.padding,n.dense&&t.dense,n.subheader&&t.subheader]}})(({ownerState:e})=>A({listStyle:`none`,margin:0,padding:0,position:`relative`},!e.disablePadding&&{paddingTop:8,paddingBottom:8},e.subheader&&{paddingTop:0})),Gy=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiList`}),{children:r,className:i,component:a=`ul`,dense:o=!1,disablePadding:s=!1,subheader:c}=n,l=L(n,Hy),u=y.useMemo(()=>({dense:o}),[o]),d=A({},n,{component:a,dense:o,disablePadding:s}),f=Uy(d);return(0,N.jsx)(By.Provider,{value:u,children:(0,N.jsxs)(Wy,A({as:a,className:z(f.root,i),ref:t,ownerState:d},l,{children:[c,r]}))})});function Ky(e){return B(`MuiListItem`,e)}var qy=V(`MuiListItem`,[`root`,`container`,`focusVisible`,`dense`,`alignItemsFlexStart`,`disabled`,`divider`,`gutters`,`padding`,`button`,`secondaryAction`,`selected`]),Jy=V(`MuiListItemButton`,[`root`,`focusVisible`,`dense`,`alignItemsFlexStart`,`disabled`,`divider`,`gutters`,`selected`]);function Yy(e){return B(`MuiListItemSecondaryAction`,e)}V(`MuiListItemSecondaryAction`,[`root`,`disableGutters`]),R(),j();var Xy=[`className`],Zy=e=>{let{disableGutters:t,classes:n}=e;return H({root:[`root`,t&&`disableGutters`]},Yy,n)},Qy=W(`div`,{name:`MuiListItemSecondaryAction`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,n.disableGutters&&t.disableGutters]}})(({ownerState:e})=>A({position:`absolute`,right:16,top:`50%`,transform:`translateY(-50%)`},e.disableGutters&&{right:0})),$y=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiListItemSecondaryAction`}),{className:r}=n,i=L(n,Xy),a=y.useContext(By),o=A({},n,{disableGutters:a.disableGutters}),s=Zy(o);return(0,N.jsx)(Qy,A({className:z(s.root,r),ownerState:o,ref:t},i))});$y.muiName=`ListItemSecondaryAction`,R(),j();var eb=[`className`],tb=[`alignItems`,`autoFocus`,`button`,`children`,`className`,`component`,`components`,`componentsProps`,`ContainerComponent`,`ContainerProps`,`dense`,`disabled`,`disableGutters`,`disablePadding`,`divider`,`focusVisibleClassName`,`secondaryAction`,`selected`,`slotProps`,`slots`],nb=(e,t)=>{let{ownerState:n}=e;return[t.root,n.dense&&t.dense,n.alignItems===`flex-start`&&t.alignItemsFlexStart,n.divider&&t.divider,!n.disableGutters&&t.gutters,!n.disablePadding&&t.padding,n.button&&t.button,n.hasSecondaryAction&&t.secondaryAction]},rb=e=>{let{alignItems:t,button:n,classes:r,dense:i,disabled:a,disableGutters:o,disablePadding:s,divider:c,hasSecondaryAction:l,selected:u}=e;return H({root:[`root`,i&&`dense`,!o&&`gutters`,!s&&`padding`,c&&`divider`,a&&`disabled`,n&&`button`,t===`flex-start`&&`alignItemsFlexStart`,l&&`secondaryAction`,u&&`selected`],container:[`container`]},Ky,r)},ib=W(`div`,{name:`MuiListItem`,slot:`Root`,overridesResolver:nb})(({theme:e,ownerState:t})=>A({display:`flex`,justifyContent:`flex-start`,alignItems:`center`,position:`relative`,textDecoration:`none`,width:`100%`,boxSizing:`border-box`,textAlign:`left`},!t.disablePadding&&A({paddingTop:8,paddingBottom:8},t.dense&&{paddingTop:4,paddingBottom:4},!t.disableGutters&&{paddingLeft:16,paddingRight:16},!!t.secondaryAction&&{paddingRight:48}),!!t.secondaryAction&&{[`& > .${Jy.root}`]:{paddingRight:48}},{[`&.${qy.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${qy.selected}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity),[`&.${qy.focusVisible}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.focusOpacity}))`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.focusOpacity)}},[`&.${qy.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity}},t.alignItems===`flex-start`&&{alignItems:`flex-start`},t.divider&&{borderBottom:`1px solid ${(e.vars||e).palette.divider}`,backgroundClip:`padding-box`},t.button&&{transition:e.transitions.create(`background-color`,{duration:e.transitions.duration.shortest}),"&:hover":{textDecoration:`none`,backgroundColor:(e.vars||e).palette.action.hover,"@media (hover: none)":{backgroundColor:`transparent`}},[`&.${qy.selected}:hover`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.hoverOpacity}))`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity)}}},t.hasSecondaryAction&&{paddingRight:48})),ab=W(`li`,{name:`MuiListItem`,slot:`Container`,overridesResolver:(e,t)=>t.container})({position:`relative`}),ob=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiListItem`}),{alignItems:r=`center`,autoFocus:i=!1,button:a=!1,children:o,className:s,component:c,components:l={},componentsProps:u={},ContainerComponent:d=`li`,ContainerProps:{className:f}={},dense:p=!1,disabled:m=!1,disableGutters:h=!1,disablePadding:g=!1,divider:_=!1,focusVisibleClassName:v,secondaryAction:b,selected:x=!1,slotProps:S={},slots:C={}}=n,w=L(n.ContainerProps,eb),T=L(n,tb),E=y.useContext(By),D=y.useMemo(()=>({dense:p||E.dense||!1,alignItems:r,disableGutters:h}),[r,E.dense,p,h]),O=y.useRef(null);cp(()=>{i&&O.current&&O.current.focus()},[i]);let k=y.Children.toArray(o),j=k.length&&ap(k[k.length-1],[`ListItemSecondaryAction`]),ee=A({},n,{alignItems:r,autoFocus:i,button:a,dense:D.dense,disabled:m,disableGutters:h,disablePadding:g,divider:_,hasSecondaryAction:j,selected:x}),te=rb(ee),M=dp(O,t),ne=C.root||l.Root||ib,re=S.root||u.root||{},ie=A({className:z(te.root,re.className,s),disabled:m},T),P=c||`li`;return a&&(ie.component=c||`div`,ie.focusVisibleClassName=z(qy.focusVisible,v),P=fm),j?(P=!ie.component&&!c?`div`:P,d===`li`&&(P===`li`?P=`div`:ie.component===`li`&&(ie.component=`div`)),(0,N.jsx)(By.Provider,{value:D,children:(0,N.jsxs)(ab,A({as:d,className:z(te.container,f),ref:M,ownerState:ee},w,{children:[(0,N.jsx)(ne,A({},re,!Ho(ne)&&{as:P,ownerState:A({},ee,re.ownerState)},ie,{children:k})),k.pop()]}))})):(0,N.jsx)(By.Provider,{value:D,children:(0,N.jsxs)(ne,A({},re,{as:P,ref:M},!Ho(ne)&&{ownerState:A({},ee,re.ownerState)},ie,{children:[k,b&&(0,N.jsx)($y,{children:b})]}))})}),sb=V(`MuiListItemIcon`,[`root`,`alignItemsFlexStart`]);function cb(e){return B(`MuiListItemText`,e)}var lb=V(`MuiListItemText`,[`root`,`multiline`,`dense`,`inset`,`primary`,`secondary`]);R(),j();var ub=[`children`,`className`,`disableTypography`,`inset`,`primary`,`primaryTypographyProps`,`secondary`,`secondaryTypographyProps`],db=e=>{let{classes:t,inset:n,primary:r,secondary:i,dense:a}=e;return H({root:[`root`,n&&`inset`,a&&`dense`,r&&i&&`multiline`],primary:[`primary`],secondary:[`secondary`]},cb,t)},fb=W(`div`,{name:`MuiListItemText`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[{[`& .${lb.primary}`]:t.primary},{[`& .${lb.secondary}`]:t.secondary},t.root,n.inset&&t.inset,n.primary&&n.secondary&&t.multiline,n.dense&&t.dense]}})(({ownerState:e})=>A({flex:`1 1 auto`,minWidth:0,marginTop:4,marginBottom:4},e.primary&&e.secondary&&{marginTop:6,marginBottom:6},e.inset&&{paddingLeft:56})),pb=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiListItemText`}),{children:r,className:i,disableTypography:a=!1,inset:o=!1,primary:s,primaryTypographyProps:c,secondary:l,secondaryTypographyProps:u}=n,d=L(n,ub),{dense:f}=y.useContext(By),p=s??r,m=l,h=A({},n,{disableTypography:a,inset:o,primary:!!p,secondary:!!m,dense:f}),g=db(h);return p!=null&&p.type!==K&&!a&&(p=(0,N.jsx)(K,A({variant:f?`body2`:`body1`,className:g.primary,component:c!=null&&c.variant?void 0:`span`,display:`block`},c,{children:p}))),m!=null&&m.type!==K&&!a&&(m=(0,N.jsx)(K,A({variant:`body2`,className:g.secondary,color:`text.secondary`,display:`block`},u,{children:m}))),(0,N.jsxs)(fb,A({className:z(g.root,i),ownerState:h,ref:t},d,{children:[p,m]}))}),mb=Lo;j(),R();var hb=[`actions`,`autoFocus`,`autoFocusItem`,`children`,`className`,`disabledItemsFocusable`,`disableListWrap`,`onKeyDown`,`variant`];function gb(e,t,n){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:n?null:e.firstChild}function _b(e,t,n){return e===t?n?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:n?null:e.lastChild}function vb(e,t){if(t===void 0)return!0;let n=e.innerText;return n===void 0&&(n=e.textContent),n=n.trim().toLowerCase(),n.length===0?!1:t.repeating?n[0]===t.keys[0]:n.indexOf(t.keys.join(``))===0}function yb(e,t,n,r,i,a){let o=!1,s=i(e,t,t?n:!1);for(;s;){if(s===e.firstChild){if(o)return!1;o=!0}let t=r?!1:s.disabled||s.getAttribute(`aria-disabled`)===`true`;if(!s.hasAttribute(`tabindex`)||!vb(s,a)||t)s=i(e,s,n);else return s.focus(),!0}return!1}var bb=y.forwardRef(function(e,t){let{actions:n,autoFocus:r=!1,autoFocusItem:i=!1,children:a,className:o,disabledItemsFocusable:s=!1,disableListWrap:c=!1,onKeyDown:l,variant:u=`selectedMenu`}=e,d=L(e,hb),f=y.useRef(null),p=y.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});cp(()=>{r&&f.current.focus()},[r]),y.useImperativeHandle(n,()=>({adjustStyleForScrollbar:(e,{direction:t})=>{let n=!f.current.style.width;if(e.clientHeight<f.current.clientHeight&&n){let n=`${mb(op(e))}px`;f.current.style[t===`rtl`?`paddingLeft`:`paddingRight`]=n,f.current.style.width=`calc(100% + ${n})`}return f.current}}),[]);let m=e=>{let t=f.current,n=e.key,r=op(t).activeElement;if(n===`ArrowDown`)e.preventDefault(),yb(t,r,c,s,gb);else if(n===`ArrowUp`)e.preventDefault(),yb(t,r,c,s,_b);else if(n===`Home`)e.preventDefault(),yb(t,null,c,s,gb);else if(n===`End`)e.preventDefault(),yb(t,null,c,s,_b);else if(n.length===1){let i=p.current,a=n.toLowerCase(),o=performance.now();i.keys.length>0&&(o-i.lastTime>500?(i.keys=[],i.repeating=!0,i.previousKeyMatched=!0):i.repeating&&a!==i.keys[0]&&(i.repeating=!1)),i.lastTime=o,i.keys.push(a);let c=r&&!i.repeating&&vb(r,i);i.previousKeyMatched&&(c||yb(t,r,!1,s,gb,i))?e.preventDefault():i.previousKeyMatched=!1}l&&l(e)},h=dp(f,t),g=-1;y.Children.forEach(a,(e,t)=>{if(!y.isValidElement(e)){g===t&&(g+=1,g>=a.length&&(g=-1));return}e.props.disabled||(u===`selectedMenu`&&e.props.selected||g===-1)&&(g=t),g===t&&(e.props.disabled||e.props.muiSkipListHighlight||e.type.muiSkipListHighlight)&&(g+=1,g>=a.length&&(g=-1))});let _=y.Children.map(a,(e,t)=>{if(t===g){let t={};return i&&(t.autoFocus=!0),e.props.tabIndex===void 0&&u===`selectedMenu`&&(t.tabIndex=0),y.cloneElement(e,t)}return e});return(0,N.jsx)(Gy,A({role:`menu`,ref:h,className:o,onKeyDown:m,tabIndex:r?0:-1},d,{children:_}))});function xb(e){return B(`MuiPopover`,e)}V(`MuiPopover`,[`root`,`paper`]),j(),R();var Sb=[`onEntering`],Cb=[`action`,`anchorEl`,`anchorOrigin`,`anchorPosition`,`anchorReference`,`children`,`className`,`container`,`elevation`,`marginThreshold`,`open`,`PaperProps`,`slots`,`slotProps`,`transformOrigin`,`TransitionComponent`,`transitionDuration`,`TransitionProps`,`disableScrollLock`],wb=[`slotProps`];function Tb(e,t){let n=0;return typeof t==`number`?n=t:t===`center`?n=e.height/2:t===`bottom`&&(n=e.height),n}function Eb(e,t){let n=0;return typeof t==`number`?n=t:t===`center`?n=e.width/2:t===`right`&&(n=e.width),n}function Db(e){return[e.horizontal,e.vertical].map(e=>typeof e==`number`?`${e}px`:e).join(` `)}function Ob(e){return typeof e==`function`?e():e}var kb=e=>{let{classes:t}=e;return H({root:[`root`],paper:[`paper`]},xb,t)},Ab=W(X_,{name:`MuiPopover`,slot:`Root`,overridesResolver:(e,t)=>t.root})({}),jb=W(Vp,{name:`MuiPopover`,slot:`Paper`,overridesResolver:(e,t)=>t.paper})({position:`absolute`,overflowY:`auto`,overflowX:`hidden`,minWidth:16,minHeight:16,maxWidth:`calc(100% - 32px)`,maxHeight:`calc(100% - 32px)`,outline:0}),Mb=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiPopover`}),{action:r,anchorEl:i,anchorOrigin:a={vertical:`top`,horizontal:`left`},anchorPosition:o,anchorReference:s=`anchorEl`,children:c,className:l,container:u,elevation:d=8,marginThreshold:f=16,open:p,PaperProps:m={},slots:h,slotProps:g,transformOrigin:_={vertical:`top`,horizontal:`left`},TransitionComponent:v=ky,transitionDuration:b=`auto`,TransitionProps:{onEntering:x}={},disableScrollLock:S=!1}=n,C=L(n.TransitionProps,Sb),w=L(n,Cb),T=g?.paper??m,E=y.useRef(),D=dp(E,T.ref),O=A({},n,{anchorOrigin:a,anchorReference:s,elevation:d,marginThreshold:f,externalPaperSlotProps:T,transformOrigin:_,TransitionComponent:v,transitionDuration:b,TransitionProps:C}),k=kb(O),j=y.useCallback(()=>{if(s===`anchorPosition`)return o;let e=Ob(i),t=(e&&e.nodeType===1?e:op(E.current).body).getBoundingClientRect();return{top:t.top+Tb(t,a.vertical),left:t.left+Eb(t,a.horizontal)}},[i,a.horizontal,a.vertical,o,s]),ee=y.useCallback(e=>({vertical:Tb(e,_.vertical),horizontal:Eb(e,_.horizontal)}),[_.horizontal,_.vertical]),te=y.useCallback(e=>{let t={width:e.offsetWidth,height:e.offsetHeight},n=ee(t);if(s===`none`)return{top:null,left:null,transformOrigin:Db(n)};let r=j(),a=r.top-n.vertical,o=r.left-n.horizontal,c=a+t.height,l=o+t.width,u=sp(Ob(i)),d=u.innerHeight-f,p=u.innerWidth-f;if(f!==null&&a<f){let e=a-f;a-=e,n.vertical+=e}else if(f!==null&&c>d){let e=c-d;a-=e,n.vertical+=e}if(f!==null&&o<f){let e=o-f;o-=e,n.horizontal+=e}else if(l>p){let e=l-p;o-=e,n.horizontal+=e}return{top:`${Math.round(a)}px`,left:`${Math.round(o)}px`,transformOrigin:Db(n)}},[i,s,j,ee,f]),[M,ne]=y.useState(p),re=y.useCallback(()=>{let e=E.current;if(!e)return;let t=te(e);t.top!==null&&(e.style.top=t.top),t.left!==null&&(e.style.left=t.left),e.style.transformOrigin=t.transformOrigin,ne(!0)},[te]);y.useEffect(()=>(S&&window.addEventListener(`scroll`,re),()=>window.removeEventListener(`scroll`,re)),[i,S,re]);let ie=(e,t)=>{x&&x(e,t),re()},P=()=>{ne(!1)};y.useEffect(()=>{p&&re()}),y.useImperativeHandle(r,()=>p?{updatePosition:()=>{re()}}:null,[p,re]),y.useEffect(()=>{if(!p)return;let e=ip(()=>{re()}),t=sp(i);return t.addEventListener(`resize`,e),()=>{e.clear(),t.removeEventListener(`resize`,e)}},[i,p,re]);let ae=b;b===`auto`&&!v.muiSupportAuto&&(ae=void 0);let oe=u||(i?op(Ob(i)).body:void 0),se=h?.root??Ab,ce=h?.paper??jb,le=Yo({elementType:ce,externalSlotProps:A({},T,{style:M?T.style:A({},T.style,{opacity:0})}),additionalProps:{elevation:d,ref:D},ownerState:O,className:z(k.paper,T?.className)}),ue=Yo({elementType:se,externalSlotProps:g?.root||{},externalForwardedProps:w,additionalProps:{ref:t,slotProps:{backdrop:{invisible:!0}},container:oe,open:p},ownerState:O,className:z(k.root,l)}),{slotProps:de}=ue,fe=L(ue,wb);return(0,N.jsx)(se,A({},fe,!Ho(se)&&{slotProps:de,disableScrollLock:S},{children:(0,N.jsx)(v,A({appear:!0,in:p,onEntering:ie,onExited:P,timeout:ae},C,{children:(0,N.jsx)(ce,A({},le,{children:c}))}))}))});function Nb(e){return B(`MuiMenu`,e)}V(`MuiMenu`,[`root`,`paper`,`list`]),j(),R();var Pb=[`onEntering`],Fb=[`autoFocus`,`children`,`className`,`disableAutoFocusItem`,`MenuListProps`,`onClose`,`open`,`PaperProps`,`PopoverClasses`,`transitionDuration`,`TransitionProps`,`variant`,`slots`,`slotProps`],Ib={vertical:`top`,horizontal:`right`},Lb={vertical:`top`,horizontal:`left`},Rb=e=>{let{classes:t}=e;return H({root:[`root`],paper:[`paper`],list:[`list`]},Nb,t)},zb=W(Mb,{shouldForwardProp:e=>Cc(e)||e===`classes`,name:`MuiMenu`,slot:`Root`,overridesResolver:(e,t)=>t.root})({}),Bb=W(jb,{name:`MuiMenu`,slot:`Paper`,overridesResolver:(e,t)=>t.paper})({maxHeight:`calc(100% - 96px)`,WebkitOverflowScrolling:`touch`}),Vb=W(bb,{name:`MuiMenu`,slot:`List`,overridesResolver:(e,t)=>t.list})({outline:0}),Hb=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiMenu`}),{autoFocus:r=!0,children:i,className:a,disableAutoFocusItem:o=!1,MenuListProps:s={},onClose:c,open:l,PaperProps:u={},PopoverClasses:d,transitionDuration:f=`auto`,TransitionProps:{onEntering:p}={},variant:m=`selectedMenu`,slots:h={},slotProps:g={}}=n,_=L(n.TransitionProps,Pb),v=L(n,Fb),b=as(),x=A({},n,{autoFocus:r,disableAutoFocusItem:o,MenuListProps:s,onEntering:p,PaperProps:u,transitionDuration:f,TransitionProps:_,variant:m}),S=Rb(x),C=r&&!o&&l,w=y.useRef(null),T=(e,t)=>{w.current&&w.current.adjustStyleForScrollbar(e,{direction:b?`rtl`:`ltr`}),p&&p(e,t)},E=e=>{e.key===`Tab`&&(e.preventDefault(),c&&c(e,`tabKeyDown`))},D=-1;y.Children.map(i,(e,t)=>{y.isValidElement(e)&&(e.props.disabled||(m===`selectedMenu`&&e.props.selected||D===-1)&&(D=t))});let O=h.paper??Bb,k=g.paper??u,j=Yo({elementType:h.root,externalSlotProps:g.root,ownerState:x,className:[S.root,a]}),ee=Yo({elementType:O,externalSlotProps:k,ownerState:x,className:S.paper});return(0,N.jsx)(zb,A({onClose:c,anchorOrigin:{vertical:`bottom`,horizontal:b?`right`:`left`},transformOrigin:b?Ib:Lb,slots:{paper:O,root:h.root},slotProps:{root:j,paper:ee},open:l,ref:t,transitionDuration:f,TransitionProps:A({onEntering:T},_),ownerState:x},v,{classes:d,children:(0,N.jsx)(Vb,A({onKeyDown:E,actions:w,autoFocus:r&&(D===-1||o),autoFocusItem:C,variant:m},s,{className:z(S.list,s.className),children:i}))}))});function Ub(e){return B(`MuiMenuItem`,e)}var Wb=V(`MuiMenuItem`,[`root`,`focusVisible`,`dense`,`disabled`,`divider`,`gutters`,`selected`]);R(),j();var Gb=[`autoFocus`,`component`,`dense`,`divider`,`disableGutters`,`focusVisibleClassName`,`role`,`tabIndex`,`className`],Kb=(e,t)=>{let{ownerState:n}=e;return[t.root,n.dense&&t.dense,n.divider&&t.divider,!n.disableGutters&&t.gutters]},qb=e=>{let{disabled:t,dense:n,divider:r,disableGutters:i,selected:a,classes:o}=e,s=H({root:[`root`,n&&`dense`,t&&`disabled`,!i&&`gutters`,r&&`divider`,a&&`selected`]},Ub,o);return A({},o,s)},Jb=W(fm,{shouldForwardProp:e=>Cc(e)||e===`classes`,name:`MuiMenuItem`,slot:`Root`,overridesResolver:Kb})(({theme:e,ownerState:t})=>A({},e.typography.body1,{display:`flex`,justifyContent:`flex-start`,alignItems:`center`,position:`relative`,textDecoration:`none`,minHeight:48,paddingTop:6,paddingBottom:6,boxSizing:`border-box`,whiteSpace:`nowrap`},!t.disableGutters&&{paddingLeft:16,paddingRight:16},t.divider&&{borderBottom:`1px solid ${(e.vars||e).palette.divider}`,backgroundClip:`padding-box`},{"&:hover":{textDecoration:`none`,backgroundColor:(e.vars||e).palette.action.hover,"@media (hover: none)":{backgroundColor:`transparent`}},[`&.${Wb.selected}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity),[`&.${Wb.focusVisible}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.focusOpacity}))`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.focusOpacity)}},[`&.${Wb.selected}:hover`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.hoverOpacity}))`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,Fs.alpha)(e.palette.primary.main,e.palette.action.selectedOpacity)}},[`&.${Wb.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${Wb.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity},[`& + .${Ov.root}`]:{marginTop:e.spacing(1),marginBottom:e.spacing(1)},[`& + .${Ov.inset}`]:{marginLeft:52},[`& .${lb.root}`]:{marginTop:0,marginBottom:0},[`& .${lb.inset}`]:{paddingLeft:36},[`& .${sb.root}`]:{minWidth:36}},!t.dense&&{[e.breakpoints.up(`sm`)]:{minHeight:`auto`}},t.dense&&A({minHeight:32,paddingTop:4,paddingBottom:4},e.typography.body2,{[`& .${sb.root} svg`]:{fontSize:`1.25rem`}}))),Yb=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiMenuItem`}),{autoFocus:r=!1,component:i=`li`,dense:a=!1,divider:o=!1,disableGutters:s=!1,focusVisibleClassName:c,role:l=`menuitem`,tabIndex:u,className:d}=n,f=L(n,Gb),p=y.useContext(By),m=y.useMemo(()=>({dense:a||p.dense||!1,disableGutters:s}),[p.dense,a,s]),h=y.useRef(null);cp(()=>{r&&h.current&&h.current.focus()},[r]);let g=A({},n,{dense:m.dense,divider:o,disableGutters:s}),_=qb(n),v=dp(h,t),b;return n.disabled||(b=u===void 0?-1:u),(0,N.jsx)(By.Provider,{value:m,children:(0,N.jsx)(Jb,A({ref:v,role:l,tabIndex:b,component:i,focusVisibleClassName:z(_.focusVisible,c),className:z(_.root,d)},f,{ownerState:g,classes:_}))})});function Xb(e){return B(`MuiNativeSelect`,e)}var Zb=V(`MuiNativeSelect`,[`root`,`select`,`multiple`,`filled`,`outlined`,`standard`,`disabled`,`icon`,`iconOpen`,`iconFilled`,`iconOutlined`,`iconStandard`,`nativeInput`,`error`]);R(),j();var Qb=[`className`,`disabled`,`error`,`IconComponent`,`inputRef`,`variant`],$b=e=>{let{classes:t,variant:n,disabled:r,multiple:i,open:a,error:o}=e;return H({select:[`select`,n,r&&`disabled`,i&&`multiple`,o&&`error`],icon:[`icon`,`icon${G(n)}`,a&&`iconOpen`,r&&`disabled`]},Xb,t)},ex=({ownerState:e,theme:t})=>A({MozAppearance:`none`,WebkitAppearance:`none`,userSelect:`none`,borderRadius:0,cursor:`pointer`,"&:focus":A({},t.vars?{backgroundColor:`rgba(${t.vars.palette.common.onBackgroundChannel} / 0.05)`}:{backgroundColor:t.palette.mode===`light`?`rgba(0, 0, 0, 0.05)`:`rgba(255, 255, 255, 0.05)`},{borderRadius:0}),"&::-ms-expand":{display:`none`},[`&.${Zb.disabled}`]:{cursor:`default`},"&[multiple]":{height:`auto`},"&:not([multiple]) option, &:not([multiple]) optgroup":{backgroundColor:(t.vars||t).palette.background.paper},"&&&":{paddingRight:24,minWidth:16}},e.variant===`filled`&&{"&&&":{paddingRight:32}},e.variant===`outlined`&&{borderRadius:(t.vars||t).shape.borderRadius,"&:focus":{borderRadius:(t.vars||t).shape.borderRadius},"&&&":{paddingRight:32}}),tx=W(`select`,{name:`MuiNativeSelect`,slot:`Select`,shouldForwardProp:Cc,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.select,t[n.variant],n.error&&t.error,{[`&.${Zb.multiple}`]:t.multiple}]}})(ex),nx=({ownerState:e,theme:t})=>A({position:`absolute`,right:0,top:`calc(50% - .5em)`,pointerEvents:`none`,color:(t.vars||t).palette.action.active,[`&.${Zb.disabled}`]:{color:(t.vars||t).palette.action.disabled}},e.open&&{transform:`rotate(180deg)`},e.variant===`filled`&&{right:7},e.variant===`outlined`&&{right:7}),rx=W(`svg`,{name:`MuiNativeSelect`,slot:`Icon`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.icon,n.variant&&t[`icon${G(n.variant)}`],n.open&&t.iconOpen]}})(nx),ix=y.forwardRef(function(e,t){let{className:n,disabled:r,error:i,IconComponent:a,inputRef:o,variant:s=`standard`}=e,c=L(e,Qb),l=A({},e,{disabled:r,variant:s,error:i}),u=$b(l);return(0,N.jsxs)(y.Fragment,{children:[(0,N.jsx)(tx,A({ownerState:l,className:z(u.select,n),disabled:r,ref:o||t},c)),e.multiple?null:(0,N.jsx)(rx,{as:a,ownerState:l,className:u.icon})]})});R(),j();var ax,ox=[`children`,`classes`,`className`,`label`,`notched`],sx=W(`fieldset`,{name:`MuiNotchedOutlined`,shouldForwardProp:Cc})({textAlign:`left`,position:`absolute`,bottom:0,right:0,top:-5,left:0,margin:0,padding:`0 8px`,pointerEvents:`none`,borderRadius:`inherit`,borderStyle:`solid`,borderWidth:1,overflow:`hidden`,minWidth:`0%`}),cx=W(`legend`,{name:`MuiNotchedOutlined`,shouldForwardProp:Cc})(({ownerState:e,theme:t})=>A({float:`unset`,width:`auto`,overflow:`hidden`},!e.withLabel&&{padding:0,lineHeight:`11px`,transition:t.transitions.create(`width`,{duration:150,easing:t.transitions.easing.easeOut})},e.withLabel&&A({display:`block`,padding:0,height:11,fontSize:`0.75em`,visibility:`hidden`,maxWidth:.01,transition:t.transitions.create(`max-width`,{duration:50,easing:t.transitions.easing.easeOut}),whiteSpace:`nowrap`,"& > span":{paddingLeft:5,paddingRight:5,display:`inline-block`,opacity:0,visibility:`visible`}},e.notched&&{maxWidth:`100%`,transition:t.transitions.create(`max-width`,{duration:100,easing:t.transitions.easing.easeOut,delay:50})})));function lx(e){let{className:t,label:n,notched:r}=e,i=L(e,ox),a=n!=null&&n!==``,o=A({},e,{notched:r,withLabel:a});return(0,N.jsx)(sx,A({"aria-hidden":!0,className:t,ownerState:o},i,{children:(0,N.jsx)(cx,{ownerState:o,children:a?(0,N.jsx)(`span`,{children:n}):ax||=(0,N.jsx)(`span`,{className:`notranslate`,children:``})})}))}R(),j();var ux=[`components`,`fullWidth`,`inputComponent`,`label`,`multiline`,`notched`,`slots`,`type`],dx=e=>{let{classes:t}=e,n=H({root:[`root`],notchedOutline:[`notchedOutline`],input:[`input`]},Oh,t);return A({},t,n)},fx=W(Sh,{shouldForwardProp:e=>Cc(e)||e===`classes`,name:`MuiOutlinedInput`,slot:`Root`,overridesResolver:yh})(({theme:e,ownerState:t})=>{let n=e.palette.mode===`light`?`rgba(0, 0, 0, 0.23)`:`rgba(255, 255, 255, 0.23)`;return A({position:`relative`,borderRadius:(e.vars||e).shape.borderRadius,[`&:hover .${kh.notchedOutline}`]:{borderColor:(e.vars||e).palette.text.primary},"@media (hover: none)":{[`&:hover .${kh.notchedOutline}`]:{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:n}},[`&.${kh.focused} .${kh.notchedOutline}`]:{borderColor:(e.vars||e).palette[t.color].main,borderWidth:2},[`&.${kh.error} .${kh.notchedOutline}`]:{borderColor:(e.vars||e).palette.error.main},[`&.${kh.disabled} .${kh.notchedOutline}`]:{borderColor:(e.vars||e).palette.action.disabled}},t.startAdornment&&{paddingLeft:14},t.endAdornment&&{paddingRight:14},t.multiline&&A({padding:`16.5px 14px`},t.size===`small`&&{padding:`8.5px 14px`}))}),px=W(lx,{name:`MuiOutlinedInput`,slot:`NotchedOutline`,overridesResolver:(e,t)=>t.notchedOutline})(({theme:e})=>{let t=e.palette.mode===`light`?`rgba(0, 0, 0, 0.23)`:`rgba(255, 255, 255, 0.23)`;return{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:t}}),mx=W(Ch,{name:`MuiOutlinedInput`,slot:`Input`,overridesResolver:bh})(({theme:e,ownerState:t})=>A({padding:`16.5px 14px`},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:e.palette.mode===`light`?null:`0 0 0 100px #266798 inset`,WebkitTextFillColor:e.palette.mode===`light`?null:`#fff`,caretColor:e.palette.mode===`light`?null:`#fff`,borderRadius:`inherit`}},e.vars&&{"&:-webkit-autofill":{borderRadius:`inherit`},[e.getColorSchemeSelector(`dark`)]:{"&:-webkit-autofill":{WebkitBoxShadow:`0 0 0 100px #266798 inset`,WebkitTextFillColor:`#fff`,caretColor:`#fff`}}},t.size===`small`&&{padding:`8.5px 14px`},t.multiline&&{padding:0},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0})),hx=y.forwardRef(function(e,t){var n;let r=F({props:e,name:`MuiOutlinedInput`}),{components:i={},fullWidth:a=!1,inputComponent:o=`input`,label:s,multiline:c=!1,notched:l,slots:u={},type:d=`text`}=r,f=L(r,ux),p=dx(r),m=fh(),h=uh({props:r,muiFormControl:m,states:[`color`,`disabled`,`error`,`focused`,`hiddenLabel`,`size`,`required`]}),g=A({},r,{color:h.color||`primary`,disabled:h.disabled,error:h.error,focused:h.focused,formControl:m,fullWidth:a,hiddenLabel:h.hiddenLabel,multiline:c,size:h.size,type:d}),_=u.root??i.Root??fx,v=u.input??i.Input??mx;return(0,N.jsx)(Th,A({slots:{root:_,input:v},renderSuffix:e=>(0,N.jsx)(px,{ownerState:g,className:p.notchedOutline,label:s!=null&&s!==``&&h.required?n||=(0,N.jsxs)(y.Fragment,{children:[s,` `,`*`]}):s,notched:l===void 0?!!(e.startAdornment||e.filled||e.focused):l}),fullWidth:a,inputComponent:o,multiline:c,ref:t,type:d},f,{classes:A({},p,{notchedOutline:null})}))});hx.muiName=`Input`;function gx(e){return B(`MuiSelect`,e)}var _x=V(`MuiSelect`,[`root`,`select`,`multiple`,`filled`,`outlined`,`standard`,`disabled`,`focused`,`icon`,`iconOpen`,`iconFilled`,`iconOutlined`,`iconStandard`,`nativeInput`,`error`]);j(),R(),ce();var vx,yx=`aria-describedby.aria-label.autoFocus.autoWidth.children.className.defaultOpen.defaultValue.disabled.displayEmpty.error.IconComponent.inputRef.labelId.MenuProps.multiple.name.onBlur.onChange.onClose.onFocus.onOpen.open.readOnly.renderValue.SelectDisplayProps.tabIndex.type.value.variant`.split(`.`),bx=W(`div`,{name:`MuiSelect`,slot:`Select`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[{[`&.${_x.select}`]:t.select},{[`&.${_x.select}`]:t[n.variant]},{[`&.${_x.error}`]:t.error},{[`&.${_x.multiple}`]:t.multiple}]}})(ex,{[`&.${_x.select}`]:{height:`auto`,minHeight:`1.4375em`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,overflow:`hidden`}}),xx=W(`svg`,{name:`MuiSelect`,slot:`Icon`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.icon,n.variant&&t[`icon${G(n.variant)}`],n.open&&t.iconOpen]}})(nx),Sx=W(`input`,{shouldForwardProp:e=>Sc(e)&&e!==`classes`,name:`MuiSelect`,slot:`NativeInput`,overridesResolver:(e,t)=>t.nativeInput})({bottom:0,left:0,position:`absolute`,opacity:0,pointerEvents:`none`,width:`100%`,boxSizing:`border-box`});function Cx(e,t){return typeof t==`object`&&t?e===t:String(e)===String(t)}function wx(e){return e==null||typeof e==`string`&&!e.trim()}var Tx=e=>{let{classes:t,variant:n,disabled:r,multiple:i,open:a,error:o}=e;return H({select:[`select`,n,r&&`disabled`,i&&`multiple`,o&&`error`],icon:[`icon`,`icon${G(n)}`,a&&`iconOpen`,r&&`disabled`],nativeInput:[`nativeInput`]},gx,t)},Ex=y.forwardRef(function(e,t){let{"aria-describedby":n,"aria-label":r,autoFocus:i,autoWidth:a,children:o,className:s,defaultOpen:c,defaultValue:l,disabled:u,displayEmpty:d,error:f=!1,IconComponent:p,inputRef:m,labelId:h,MenuProps:g={},multiple:_,name:v,onBlur:b,onChange:x,onClose:S,onFocus:C,onOpen:w,open:T,readOnly:E,renderValue:D,SelectDisplayProps:O={},tabIndex:k,value:j,variant:ee=`standard`}=e,te=L(e,yx),[M,ne]=lp({controlled:j,default:l,name:`Select`}),[re,ie]=lp({controlled:T,default:c,name:`Select`}),P=y.useRef(null),F=y.useRef(null),[oe,se]=y.useState(null),{current:ce}=y.useRef(T!=null),[le,ue]=y.useState(),de=dp(t,m),fe=y.useCallback(e=>{F.current=e,e&&se(e)},[]),pe=oe?.parentNode;y.useImperativeHandle(de,()=>({focus:()=>{F.current.focus()},node:P.current,value:M}),[M]),y.useEffect(()=>{c&&re&&oe&&!ce&&(ue(a?null:pe.clientWidth),F.current.focus())},[oe,a]),y.useEffect(()=>{i&&F.current.focus()},[i]),y.useEffect(()=>{if(!h)return;let e=op(F.current).getElementById(h);if(e){let t=()=>{getSelection().isCollapsed&&F.current.focus()};return e.addEventListener(`click`,t),()=>{e.removeEventListener(`click`,t)}}},[h]);let me=(e,t)=>{e?w&&w(t):S&&S(t),ce||(ue(a?null:pe.clientWidth),ie(e))},I=e=>{e.button===0&&(e.preventDefault(),F.current.focus(),me(!0,e))},he=e=>{me(!1,e)},ge=y.Children.toArray(o),_e=e=>{let t=ge.find(t=>t.props.value===e.target.value);t!==void 0&&(ne(t.props.value),x&&x(e,t))},ve=e=>t=>{let n;if(t.currentTarget.hasAttribute(`tabindex`)){if(_){n=Array.isArray(M)?M.slice():[];let t=M.indexOf(e.props.value);t===-1?n.push(e.props.value):n.splice(t,1)}else n=e.props.value;if(e.props.onClick&&e.props.onClick(t),M!==n&&(ne(n),x)){let r=t.nativeEvent||t,i=new r.constructor(r.type,r);Object.defineProperty(i,"target",{writable:!0,value:{value:n,name:v}}),x(i,e)}_||me(!1,t)}},ye=e=>{E||[` `,`ArrowUp`,`ArrowDown`,`Enter`].indexOf(e.key)!==-1&&(e.preventDefault(),me(!0,e))},be=oe!==null&&re,xe=e=>{!be&&b&&(Object.defineProperty(e,"target",{writable:!0,value:{value:M,name:v}}),b(e))};delete te[`aria-invalid`];let Se,Ce,we=[],Te=!1;(mh({value:M})||d)&&(D?Se=D(M):Te=!0);let Ee=ge.map(e=>{if(!y.isValidElement(e))return null;let t;if(_){if(!Array.isArray(M))throw Error(ae(2));t=M.some(t=>Cx(t,e.props.value)),t&&Te&&we.push(e.props.children)}else t=Cx(M,e.props.value),t&&Te&&(Ce=e.props.children);return y.cloneElement(e,{"aria-selected":t?`true`:`false`,onClick:ve(e),onKeyUp:t=>{t.key===` `&&t.preventDefault(),e.props.onKeyUp&&e.props.onKeyUp(t)},role:`option`,selected:t,value:void 0,"data-value":e.props.value})});Te&&(Se=_?we.length===0?null:we.reduce((e,t,n)=>(e.push(t),n<we.length-1&&e.push(`, `),e),[]):Ce);let De=le;!a&&ce&&oe&&(De=pe.clientWidth);let Oe;Oe=k===void 0?u?null:0:k;let ke=O.id||(v?`mui-component-select-${v}`:void 0),Ae=A({},e,{variant:ee,value:M,open:be,error:f}),je=Tx(Ae),Me=A({},g.PaperProps,g.slotProps?.paper),Ne=go();return(0,N.jsxs)(y.Fragment,{children:[(0,N.jsx)(bx,A({ref:fe,tabIndex:Oe,role:`combobox`,"aria-controls":Ne,"aria-disabled":u?`true`:void 0,"aria-expanded":be?`true`:`false`,"aria-haspopup":`listbox`,"aria-label":r,"aria-labelledby":[h,ke].filter(Boolean).join(` `)||void 0,"aria-describedby":n,onKeyDown:ye,onMouseDown:u||E?null:I,onBlur:xe,onFocus:C},O,{ownerState:Ae,className:z(O.className,je.select,s),id:ke,children:wx(Se)?vx||=(0,N.jsx)(`span`,{className:`notranslate`,children:``}):Se})),(0,N.jsx)(Sx,A({"aria-invalid":f,value:Array.isArray(M)?M.join(`,`):M,name:v,ref:P,"aria-hidden":!0,onChange:_e,tabIndex:-1,disabled:u,className:je.nativeInput,autoFocus:i,ownerState:Ae},te)),(0,N.jsx)(xx,{as:p,className:je.icon,ownerState:Ae}),(0,N.jsx)(Hb,A({id:`menu-${v||``}`,anchorEl:pe,open:be,onClose:he,anchorOrigin:{vertical:`bottom`,horizontal:`center`},transformOrigin:{vertical:`top`,horizontal:`center`}},g,{MenuListProps:A({"aria-labelledby":h,role:`listbox`,"aria-multiselectable":_?`true`:void 0,disableListWrap:!0,id:Ne},g.MenuListProps),slotProps:A({},g.slotProps,{paper:A({},Me,{style:A({minWidth:De},Me==null?null:Me.style)})}),children:Ee}))]})});j(),R(),mr();var Dx=[`autoWidth`,`children`,`classes`,`className`,`defaultOpen`,`displayEmpty`,`IconComponent`,`id`,`input`,`inputProps`,`label`,`labelId`,`MenuProps`,`multiple`,`native`,`onClose`,`onOpen`,`open`,`renderValue`,`SelectDisplayProps`,`variant`],Ox=[`root`],kx=e=>{let{classes:t}=e;return t},Ax={name:`MuiSelect`,overridesResolver:(e,t)=>t.root,shouldForwardProp:e=>Cc(e)&&e!==`variant`,slot:`Root`},jx=W(Py,Ax)(``),Mx=W(hx,Ax)(``),Nx=W(Nv,Ax)(``),Px=y.forwardRef(function(e,t){let n=F({name:`MuiSelect`,props:e}),{autoWidth:r=!1,children:i,classes:a={},className:o,defaultOpen:s=!1,displayEmpty:c=!1,IconComponent:l=Mh,id:u,input:d,inputProps:f,label:p,labelId:m,MenuProps:h,multiple:g=!1,native:_=!1,onClose:v,onOpen:b,open:x,renderValue:S,SelectDisplayProps:C,variant:w=`outlined`}=n,T=L(n,Dx),E=_?ix:Ex,D=uh({props:n,muiFormControl:fh(),states:[`variant`,`error`]}),O=D.variant||w,k=A({},n,{variant:O,classes:a}),j=kx(k),ee=L(j,Ox),te=d||{standard:(0,N.jsx)(jx,{ownerState:k}),outlined:(0,N.jsx)(Mx,{label:p,ownerState:k}),filled:(0,N.jsx)(Nx,{ownerState:k})}[O],M=dp(t,Xo(te));return(0,N.jsx)(y.Fragment,{children:y.cloneElement(te,A({inputComponent:E,inputProps:A({children:i,error:D.error,IconComponent:l,variant:O,type:void 0,multiple:g},_?{id:u}:{autoWidth:r,defaultOpen:s,displayEmpty:c,labelId:m,MenuProps:h,onClose:v,onOpen:b,open:x,renderValue:S,SelectDisplayProps:A({id:u},C)},f,{classes:f?ur(ee,f.classes):ee},d?d.props.inputProps:{})},(g&&_||c)&&O===`outlined`?{notched:!0}:{},{ref:M,className:z(te.props.className,o,j.root)},!d&&{variant:O},T))})});Px.muiName=`Select`;function Fx(e){return B(`MuiSwitch`,e)}var Ix=V(`MuiSwitch`,[`root`,`edgeStart`,`edgeEnd`,`switchBase`,`colorPrimary`,`colorSecondary`,`sizeSmall`,`sizeMedium`,`checked`,`disabled`,`input`,`thumb`,`track`]);R(),j();var Lx=[`className`,`color`,`edge`,`size`,`sx`],Rx=e=>{let{classes:t,edge:n,size:r,color:i,checked:a,disabled:o}=e,s=H({root:[`root`,n&&`edge${G(n)}`,`size${G(r)}`],switchBase:[`switchBase`,`color${G(i)}`,a&&`checked`,o&&`disabled`],thumb:[`thumb`],track:[`track`],input:[`input`]},Fx,t);return A({},t,s)},zx=W(`span`,{name:`MuiSwitch`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,n.edge&&t[`edge${G(n.edge)}`],t[`size${G(n.size)}`]]}})({display:`inline-flex`,width:58,height:38,overflow:`hidden`,padding:12,boxSizing:`border-box`,position:`relative`,flexShrink:0,zIndex:0,verticalAlign:`middle`,"@media print":{colorAdjust:`exact`},variants:[{props:{edge:`start`},style:{marginLeft:-8}},{props:{edge:`end`},style:{marginRight:-8}},{props:{size:`small`},style:{width:40,height:24,padding:7,[`& .${Ix.thumb}`]:{width:16,height:16},[`& .${Ix.switchBase}`]:{padding:4,[`&.${Ix.checked}`]:{transform:`translateX(16px)`}}}}]}),Bx=W(Xg,{name:`MuiSwitch`,slot:`SwitchBase`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.switchBase,{[`& .${Ix.input}`]:t.input},n.color!=="default"&&t[`color${G(n.color)}`]]}})(({theme:e})=>({position:`absolute`,top:0,left:0,zIndex:1,color:e.vars?e.vars.palette.Switch.defaultColor:`${e.palette.mode===`light`?e.palette.common.white:e.palette.grey[300]}`,transition:e.transitions.create([`left`,`transform`],{duration:e.transitions.duration.shortest}),[`&.${Ix.checked}`]:{transform:`translateX(20px)`},[`&.${Ix.disabled}`]:{color:e.vars?e.vars.palette.Switch.defaultDisabledColor:`${e.palette.mode===`light`?e.palette.grey[100]:e.palette.grey[600]}`},[`&.${Ix.checked} + .${Ix.track}`]:{opacity:.5},[`&.${Ix.disabled} + .${Ix.track}`]:{opacity:e.vars?e.vars.opacity.switchTrackDisabled:`${e.palette.mode===`light`?.12:.2}`},[`& .${Ix.input}`]:{left:`-100%`,width:`300%`}}),({theme:e})=>({"&:hover":{backgroundColor:e.vars?`rgba(${e.vars.palette.action.activeChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,Fs.alpha)(e.palette.action.active,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:`transparent`}},variants:[...Object.entries(e.palette).filter(([,e])=>e.main&&e.light).map(([t])=>({props:{color:t},style:{[`&.${Ix.checked}`]:{color:(e.vars||e).palette[t].main,"&:hover":{backgroundColor:e.vars?`rgba(${e.vars.palette[t].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,Fs.alpha)(e.palette[t].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:`transparent`}},[`&.${Ix.disabled}`]:{color:e.vars?e.vars.palette.Switch[`${t}DisabledColor`]:`${e.palette.mode===`light`?(0,Fs.lighten)(e.palette[t].main,.62):(0,Fs.darken)(e.palette[t].main,.55)}`}},[`&.${Ix.checked} + .${Ix.track}`]:{backgroundColor:(e.vars||e).palette[t].main}}}))]})),Vx=W(`span`,{name:`MuiSwitch`,slot:`Track`,overridesResolver:(e,t)=>t.track})(({theme:e})=>({height:`100%`,width:`100%`,borderRadius:7,zIndex:-1,transition:e.transitions.create([`opacity`,`background-color`],{duration:e.transitions.duration.shortest}),backgroundColor:e.vars?e.vars.palette.common.onBackground:`${e.palette.mode===`light`?e.palette.common.black:e.palette.common.white}`,opacity:e.vars?e.vars.opacity.switchTrack:`${e.palette.mode===`light`?.38:.3}`})),Hx=W(`span`,{name:`MuiSwitch`,slot:`Thumb`,overridesResolver:(e,t)=>t.thumb})(({theme:e})=>({boxShadow:(e.vars||e).shadows[1],backgroundColor:`currentColor`,width:20,height:20,borderRadius:`50%`})),Ux=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiSwitch`}),{className:r,color:i=`primary`,edge:a=!1,size:o=`medium`,sx:s}=n,c=L(n,Lx),l=A({},n,{color:i,edge:a,size:o}),u=Rx(l),d=(0,N.jsx)(Hx,{className:u.thumb,ownerState:l});return(0,N.jsxs)(zx,{className:z(u.root,r),sx:s,ownerState:l,children:[(0,N.jsx)(Bx,A({type:`checkbox`,icon:d,checkedIcon:d,ref:t,ownerState:l},c,{classes:A({},u,{root:u.switchBase})})),(0,N.jsx)(Vx,{className:u.track,ownerState:l})]})});function Wx(e){return B(`MuiTab`,e)}var Gx=V(`MuiTab`,[`root`,`labelIcon`,`textColorInherit`,`textColorPrimary`,`textColorSecondary`,`selected`,`disabled`,`fullWidth`,`wrapped`,`iconWrapper`]);R(),j();var Kx=[`className`,`disabled`,`disableFocusRipple`,`fullWidth`,`icon`,`iconPosition`,`indicator`,`label`,`onChange`,`onClick`,`onFocus`,`selected`,`selectionFollowsFocus`,`textColor`,`value`,`wrapped`],qx=e=>{let{classes:t,textColor:n,fullWidth:r,wrapped:i,icon:a,label:o,selected:s,disabled:c}=e;return H({root:[`root`,a&&o&&`labelIcon`,`textColor${G(n)}`,r&&`fullWidth`,i&&`wrapped`,s&&`selected`,c&&`disabled`],iconWrapper:[`iconWrapper`]},Wx,t)},Jx=W(fm,{name:`MuiTab`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,n.label&&n.icon&&t.labelIcon,t[`textColor${G(n.textColor)}`],n.fullWidth&&t.fullWidth,n.wrapped&&t.wrapped,{[`& .${Gx.iconWrapper}`]:t.iconWrapper}]}})(({theme:e,ownerState:t})=>A({},e.typography.button,{maxWidth:360,minWidth:90,position:`relative`,minHeight:48,flexShrink:0,padding:`12px 16px`,overflow:`hidden`,whiteSpace:`normal`,textAlign:`center`},t.label&&{flexDirection:t.iconPosition===`top`||t.iconPosition===`bottom`?`column`:`row`},{lineHeight:1.25},t.icon&&t.label&&{minHeight:72,paddingTop:9,paddingBottom:9,[`& > .${Gx.iconWrapper}`]:A({},t.iconPosition===`top`&&{marginBottom:6},t.iconPosition===`bottom`&&{marginTop:6},t.iconPosition===`start`&&{marginRight:e.spacing(1)},t.iconPosition===`end`&&{marginLeft:e.spacing(1)})},t.textColor===`inherit`&&{color:`inherit`,opacity:.6,[`&.${Gx.selected}`]:{opacity:1},[`&.${Gx.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity}},t.textColor===`primary`&&{color:(e.vars||e).palette.text.secondary,[`&.${Gx.selected}`]:{color:(e.vars||e).palette.primary.main},[`&.${Gx.disabled}`]:{color:(e.vars||e).palette.text.disabled}},t.textColor===`secondary`&&{color:(e.vars||e).palette.text.secondary,[`&.${Gx.selected}`]:{color:(e.vars||e).palette.secondary.main},[`&.${Gx.disabled}`]:{color:(e.vars||e).palette.text.disabled}},t.fullWidth&&{flexShrink:1,flexGrow:1,flexBasis:0,maxWidth:`none`},t.wrapped&&{fontSize:e.typography.pxToRem(12)})),Yx=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiTab`}),{className:r,disabled:i=!1,disableFocusRipple:a=!1,fullWidth:o,icon:s,iconPosition:c=`top`,indicator:l,label:u,onChange:d,onClick:f,onFocus:p,selected:m,selectionFollowsFocus:h,textColor:g=`inherit`,value:_,wrapped:v=!1}=n,b=L(n,Kx),x=A({},n,{disabled:i,disableFocusRipple:a,selected:m,icon:!!s,iconPosition:c,label:!!u,fullWidth:o,textColor:g,wrapped:v}),S=qx(x),C=s&&u&&y.isValidElement(s)?y.cloneElement(s,{className:z(S.iconWrapper,s.props.className)}):s;return(0,N.jsxs)(Jx,A({focusRipple:!a,className:z(S.root,r),ref:t,role:`tab`,"aria-selected":m,disabled:i,onClick:e=>{!m&&d&&d(e,_),f&&f(e)},onFocus:e=>{h&&!m&&d&&d(e,_),p&&p(e)},ownerState:x,tabIndex:m?0:-1},b,{children:[c===`top`||c===`start`?(0,N.jsxs)(y.Fragment,{children:[C,u]}):(0,N.jsxs)(y.Fragment,{children:[u,C]}),l]}))});function Xx(e){return B(`MuiToolbar`,e)}V(`MuiToolbar`,[`root`,`gutters`,`regular`,`dense`]),R(),j();var Zx=[`className`,`component`,`disableGutters`,`variant`],Qx=e=>{let{classes:t,disableGutters:n,variant:r}=e;return H({root:[`root`,!n&&`gutters`,r]},Xx,t)},$x=W(`div`,{name:`MuiToolbar`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,!n.disableGutters&&t.gutters,t[n.variant]]}})(({theme:e,ownerState:t})=>A({position:`relative`,display:`flex`,alignItems:`center`},!t.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up(`sm`)]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}},t.variant===`dense`&&{minHeight:48}),({theme:e,ownerState:t})=>t.variant===`regular`&&e.mixins.toolbar),eS=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiToolbar`}),{className:r,component:i=`div`,disableGutters:a=!1,variant:o=`regular`}=n,s=L(n,Zx),c=A({},n,{component:i,disableGutters:a,variant:o}),l=Qx(c);return(0,N.jsx)($x,A({as:i,className:z(l.root,r),ref:t,ownerState:c},s))}),tS=rp((0,N.jsx)(`path`,{d:`M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z`}),`KeyboardArrowLeft`),nS=rp((0,N.jsx)(`path`,{d:`M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z`}),`KeyboardArrowRight`);function rS(e){return(1+Math.sin(Math.PI*e-Math.PI/2))/2}function iS(e,t,n,r={},i=()=>{}){let{ease:a=rS,duration:o=300}=r,s=null,c=t[e],l=!1,u=()=>{l=!0},d=r=>{if(l){i(Error(`Animation cancelled`));return}s===null&&(s=r);let u=Math.min(1,(r-s)/o);if(t[e]=a(u)*(n-c)+c,u>=1){requestAnimationFrame(()=>{i(null)});return}requestAnimationFrame(d)};return c===n?(i(Error(`Element already at target position`)),u):(requestAnimationFrame(d),u)}j(),R();var aS=[`onChange`],oS={width:99,height:99,position:`absolute`,top:-9999,overflow:`scroll`};function sS(e){let{onChange:t}=e,n=L(e,aS),r=y.useRef(),i=y.useRef(null),a=()=>{r.current=i.current.offsetHeight-i.current.clientHeight};return cp(()=>{let e=ip(()=>{let e=r.current;a(),e!==r.current&&t(r.current)}),n=sp(i.current);return n.addEventListener(`resize`,e),()=>{e.clear(),n.removeEventListener(`resize`,e)}},[t]),y.useEffect(()=>{a(),t(r.current)},[t]),(0,N.jsx)(`div`,A({style:oS},n,{ref:i}))}function cS(e){return B(`MuiTabScrollButton`,e)}var lS=V(`MuiTabScrollButton`,[`root`,`vertical`,`horizontal`,`disabled`]);R(),j();var uS=[`className`,`slots`,`slotProps`,`direction`,`orientation`,`disabled`],dS=e=>{let{classes:t,orientation:n,disabled:r}=e;return H({root:[`root`,n,r&&`disabled`]},cS,t)},fS=W(fm,{name:`MuiTabScrollButton`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,n.orientation&&t[n.orientation]]}})(({ownerState:e})=>A({width:40,flexShrink:0,opacity:.8,[`&.${lS.disabled}`]:{opacity:0}},e.orientation===`vertical`&&{width:`100%`,height:40,"& svg":{transform:`rotate(${e.isRtl?-90:90}deg)`}})),pS=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiTabScrollButton`}),{className:r,slots:i={},slotProps:a={},direction:o}=n,s=L(n,uS),c=as(),l=A({isRtl:c},n),u=dS(l),d=i.StartScrollButtonIcon??tS,f=i.EndScrollButtonIcon??nS,p=Yo({elementType:d,externalSlotProps:a.startScrollButtonIcon,additionalProps:{fontSize:`small`},ownerState:l}),m=Yo({elementType:f,externalSlotProps:a.endScrollButtonIcon,additionalProps:{fontSize:`small`},ownerState:l});return(0,N.jsx)(fS,A({component:`div`,className:z(u.root,r),ref:t,role:null,ownerState:l,tabIndex:null},s,{children:o===`left`?(0,N.jsx)(d,A({},p)):(0,N.jsx)(f,A({},m))}))});function mS(e){return B(`MuiTabs`,e)}var hS=V(`MuiTabs`,[`root`,`vertical`,`flexContainer`,`flexContainerVertical`,`centered`,`scroller`,`fixed`,`scrollableX`,`scrollableY`,`hideScrollbar`,`scrollButtons`,`scrollButtonsHideMobile`,`indicator`]);R(),j();var gS=[`aria-label`,`aria-labelledby`,`action`,`centered`,`children`,`className`,`component`,`allowScrollButtonsMobile`,`indicatorColor`,`onChange`,`orientation`,`ScrollButtonComponent`,`scrollButtons`,`selectionFollowsFocus`,`slots`,`slotProps`,`TabIndicatorProps`,`TabScrollButtonProps`,`textColor`,`value`,`variant`,`visibleScrollbar`],_S=(e,t)=>e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:e.firstChild,vS=(e,t)=>e===t?e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:e.lastChild,yS=(e,t,n)=>{let r=!1,i=n(e,t);for(;i;){if(i===e.firstChild){if(r)return;r=!0}let t=i.disabled||i.getAttribute(`aria-disabled`)===`true`;if(!i.hasAttribute(`tabindex`)||t)i=n(e,i);else{i.focus();return}}},bS=e=>{let{vertical:t,fixed:n,hideScrollbar:r,scrollableX:i,scrollableY:a,centered:o,scrollButtonsHideMobile:s,classes:c}=e;return H({root:[`root`,t&&`vertical`],scroller:[`scroller`,n&&`fixed`,r&&`hideScrollbar`,i&&`scrollableX`,a&&`scrollableY`],flexContainer:[`flexContainer`,t&&`flexContainerVertical`,o&&`centered`],indicator:[`indicator`],scrollButtons:[`scrollButtons`,s&&`scrollButtonsHideMobile`],scrollableX:[i&&`scrollableX`],hideScrollbar:[r&&`hideScrollbar`]},mS,c)},xS=W(`div`,{name:`MuiTabs`,slot:`Root`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[{[`& .${hS.scrollButtons}`]:t.scrollButtons},{[`& .${hS.scrollButtons}`]:n.scrollButtonsHideMobile&&t.scrollButtonsHideMobile},t.root,n.vertical&&t.vertical]}})(({ownerState:e,theme:t})=>A({overflow:`hidden`,minHeight:48,WebkitOverflowScrolling:`touch`,display:`flex`},e.vertical&&{flexDirection:`column`},e.scrollButtonsHideMobile&&{[`& .${hS.scrollButtons}`]:{[t.breakpoints.down(`sm`)]:{display:`none`}}})),SS=W(`div`,{name:`MuiTabs`,slot:`Scroller`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.scroller,n.fixed&&t.fixed,n.hideScrollbar&&t.hideScrollbar,n.scrollableX&&t.scrollableX,n.scrollableY&&t.scrollableY]}})(({ownerState:e})=>A({position:`relative`,display:`inline-block`,flex:`1 1 auto`,whiteSpace:`nowrap`},e.fixed&&{overflowX:`hidden`,width:`100%`},e.hideScrollbar&&{scrollbarWidth:`none`,"&::-webkit-scrollbar":{display:`none`}},e.scrollableX&&{overflowX:`auto`,overflowY:`hidden`},e.scrollableY&&{overflowY:`auto`,overflowX:`hidden`})),CS=W(`div`,{name:`MuiTabs`,slot:`FlexContainer`,overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.flexContainer,n.vertical&&t.flexContainerVertical,n.centered&&t.centered]}})(({ownerState:e})=>A({display:`flex`},e.vertical&&{flexDirection:`column`},e.centered&&{justifyContent:`center`})),wS=W(`span`,{name:`MuiTabs`,slot:`Indicator`,overridesResolver:(e,t)=>t.indicator})(({ownerState:e,theme:t})=>A({position:`absolute`,height:2,bottom:0,width:`100%`,transition:t.transitions.create()},e.indicatorColor===`primary`&&{backgroundColor:(t.vars||t).palette.primary.main},e.indicatorColor===`secondary`&&{backgroundColor:(t.vars||t).palette.secondary.main},e.vertical&&{height:`100%`,width:2,right:0})),TS=W(sS)({overflowX:`auto`,overflowY:`hidden`,scrollbarWidth:`none`,"&::-webkit-scrollbar":{display:`none`}}),ES={},DS=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiTabs`}),r=yc(),i=as(),{"aria-label":a,"aria-labelledby":o,action:s,centered:c=!1,children:l,className:u,component:d=`div`,allowScrollButtonsMobile:f=!1,indicatorColor:p=`primary`,onChange:m,orientation:h=`horizontal`,ScrollButtonComponent:g=pS,scrollButtons:_=`auto`,selectionFollowsFocus:v,slots:b={},slotProps:x={},TabIndicatorProps:S={},TabScrollButtonProps:C={},textColor:w=`primary`,value:T,variant:E=`standard`,visibleScrollbar:D=!1}=n,O=L(n,gS),k=E===`scrollable`,j=h===`vertical`,ee=j?`scrollTop`:`scrollLeft`,te=j?`top`:`left`,M=j?`bottom`:`right`,ne=j?`clientHeight`:`clientWidth`,re=j?`height`:`width`,ie=A({},n,{component:d,allowScrollButtonsMobile:f,indicatorColor:p,orientation:h,vertical:j,scrollButtons:_,textColor:w,variant:E,visibleScrollbar:D,fixed:!k,hideScrollbar:k&&!D,scrollableX:k&&!j,scrollableY:k&&j,centered:c&&!k,scrollButtonsHideMobile:!f}),P=bS(ie),ae=Yo({elementType:b.StartScrollButtonIcon,externalSlotProps:x.startScrollButtonIcon,ownerState:ie}),oe=Yo({elementType:b.EndScrollButtonIcon,externalSlotProps:x.endScrollButtonIcon,ownerState:ie}),[se,ce]=y.useState(!1),[le,ue]=y.useState(ES),[de,fe]=y.useState(!1),[pe,me]=y.useState(!1),[I,he]=y.useState(!1),[ge,_e]=y.useState({overflow:`hidden`,scrollbarWidth:0}),ve=new Map,ye=y.useRef(null),be=y.useRef(null),xe=()=>{let e=ye.current,t;if(e){let n=e.getBoundingClientRect();t={clientWidth:e.clientWidth,scrollLeft:e.scrollLeft,scrollTop:e.scrollTop,scrollLeftNormalized:Bo(e,i?`rtl`:`ltr`),scrollWidth:e.scrollWidth,top:n.top,bottom:n.bottom,left:n.left,right:n.right}}let n;if(e&&T!==!1){let e=be.current.children;if(e.length>0){let t=e[ve.get(T)];n=t?t.getBoundingClientRect():null}}return{tabsMeta:t,tabMeta:n}},Se=up(()=>{let{tabsMeta:e,tabMeta:t}=xe(),n=0,r;if(j)r=`top`,t&&e&&(n=t.top-e.top+e.scrollTop);else if(r=i?`right`:`left`,t&&e){let a=i?e.scrollLeftNormalized+e.clientWidth-e.scrollWidth:e.scrollLeft;n=(i?-1:1)*(t[r]-e[r]+a)}let a={[r]:n,[re]:t?t[re]:0};if(isNaN(le[r])||isNaN(le[re]))ue(a);else{let e=Math.abs(le[r]-a[r]),t=Math.abs(le[re]-a[re]);(e>=1||t>=1)&&ue(a)}}),Ce=(e,{animation:t=!0}={})=>{t?iS(ee,ye.current,e,{duration:r.transitions.duration.standard}):ye.current[ee]=e},we=e=>{let t=ye.current[ee];j?t+=e:(t+=e*(i?-1:1),t*=i&&zo()===`reverse`?-1:1),Ce(t)},Te=()=>{let e=ye.current[ne],t=0,n=Array.from(be.current.children);for(let r=0;r<n.length;r+=1){let i=n[r];if(t+i[ne]>e){r===0&&(t=e);break}t+=i[ne]}return t},Ee=()=>{we(-1*Te())},De=()=>{we(Te())},Oe=y.useCallback(e=>{_e({overflow:null,scrollbarWidth:e})},[]),ke=()=>{let e={};e.scrollbarSizeListener=k?(0,N.jsx)(TS,{onChange:Oe,className:z(P.scrollableX,P.hideScrollbar)}):null;let t=k&&(_===`auto`&&(de||pe)||_===!0);return e.scrollButtonStart=t?(0,N.jsx)(g,A({slots:{StartScrollButtonIcon:b.StartScrollButtonIcon},slotProps:{startScrollButtonIcon:ae},orientation:h,direction:i?`right`:`left`,onClick:Ee,disabled:!de},C,{className:z(P.scrollButtons,C.className)})):null,e.scrollButtonEnd=t?(0,N.jsx)(g,A({slots:{EndScrollButtonIcon:b.EndScrollButtonIcon},slotProps:{endScrollButtonIcon:oe},orientation:h,direction:i?`left`:`right`,onClick:De,disabled:!pe},C,{className:z(P.scrollButtons,C.className)})):null,e},Ae=up(e=>{let{tabsMeta:t,tabMeta:n}=xe();if(n&&t){if(n[te]<t[te]){let r=t[ee]+(n[te]-t[te]);Ce(r,{animation:e})}else if(n[M]>t[M]){let r=t[ee]+(n[M]-t[M]);Ce(r,{animation:e})}}}),je=up(()=>{k&&_!==!1&&he(!I)});y.useEffect(()=>{let e=ip(()=>{ye.current&&Se()}),t,n=n=>{n.forEach(e=>{e.removedNodes.forEach(e=>{var n;(n=t)==null||n.unobserve(e)}),e.addedNodes.forEach(e=>{var n;(n=t)==null||n.observe(e)})}),e(),je()},r=sp(ye.current);r.addEventListener(`resize`,e);let i;return typeof ResizeObserver<`u`&&(t=new ResizeObserver(e),Array.from(be.current.children).forEach(e=>{t.observe(e)})),typeof MutationObserver<`u`&&(i=new MutationObserver(n),i.observe(be.current,{childList:!0})),()=>{var n,a;e.clear(),r.removeEventListener(`resize`,e),(n=i)==null||n.disconnect(),(a=t)==null||a.disconnect()}},[Se,je]),y.useEffect(()=>{let e=Array.from(be.current.children),t=e.length;if(typeof IntersectionObserver<`u`&&t>0&&k&&_!==!1){let n=e[0],r=e[t-1],i={root:ye.current,threshold:.99},a=new IntersectionObserver(e=>{fe(!e[0].isIntersecting)},i);a.observe(n);let o=new IntersectionObserver(e=>{me(!e[0].isIntersecting)},i);return o.observe(r),()=>{a.disconnect(),o.disconnect()}}},[k,_,I,l?.length]),y.useEffect(()=>{ce(!0)},[]),y.useEffect(()=>{Se()}),y.useEffect(()=>{Ae(ES!==le)},[Ae,le]),y.useImperativeHandle(s,()=>({updateIndicator:Se,updateScrollButtons:je}),[Se,je]);let Me=(0,N.jsx)(wS,A({},S,{className:z(P.indicator,S.className),ownerState:ie,style:A({},le,S.style)})),Ne=0,Pe=y.Children.map(l,e=>{if(!y.isValidElement(e))return null;let t=e.props.value===void 0?Ne:e.props.value;ve.set(t,Ne);let n=t===T;return Ne+=1,y.cloneElement(e,A({fullWidth:E===`fullWidth`,indicator:n&&!se&&Me,selected:n,selectionFollowsFocus:v,onChange:m,textColor:w,value:t},Ne===1&&T===!1&&!e.props.tabIndex?{tabIndex:0}:{}))}),Fe=e=>{let t=be.current,n=op(t).activeElement;if(n.getAttribute(`role`)!==`tab`)return;let r=h===`horizontal`?`ArrowLeft`:`ArrowUp`,a=h===`horizontal`?`ArrowRight`:`ArrowDown`;switch(h===`horizontal`&&i&&(r=`ArrowRight`,a=`ArrowLeft`),e.key){case r:e.preventDefault(),yS(t,n,vS);break;case a:e.preventDefault(),yS(t,n,_S);break;case`Home`:e.preventDefault(),yS(t,null,_S);break;case`End`:e.preventDefault(),yS(t,null,vS)}},Ie=ke();return(0,N.jsxs)(xS,A({className:z(P.root,u),ownerState:ie,ref:t,as:d},O,{children:[Ie.scrollButtonStart,Ie.scrollbarSizeListener,(0,N.jsxs)(SS,{className:P.scroller,ownerState:ie,style:{overflow:ge.overflow,[j?`margin${i?`Left`:`Right`}`:`marginBottom`]:D?void 0:-ge.scrollbarWidth},ref:ye,children:[(0,N.jsx)(CS,{"aria-label":a,"aria-labelledby":o,"aria-orientation":h===`vertical`?`vertical`:null,className:P.flexContainer,ownerState:ie,onKeyDown:Fe,ref:be,role:`tablist`,children:Pe}),se&&Me]}),Ie.scrollButtonEnd]}))});function OS(e){return B(`MuiTextField`,e)}V(`MuiTextField`,[`root`]),j(),R();var kS=`autoComplete.autoFocus.children.className.color.defaultValue.disabled.error.FormHelperTextProps.fullWidth.helperText.id.InputLabelProps.inputProps.InputProps.inputRef.label.maxRows.minRows.multiline.name.onBlur.onChange.onFocus.placeholder.required.rows.select.SelectProps.type.value.variant`.split(`.`),AS={standard:Py,filled:Nv,outlined:hx},jS=e=>{let{classes:t}=e;return H({root:[`root`]},OS,t)},MS=W(Rv,{name:`MuiTextField`,slot:`Root`,overridesResolver:(e,t)=>t.root})({}),Z=y.forwardRef(function(e,t){let n=F({props:e,name:`MuiTextField`}),{autoComplete:r,autoFocus:i=!1,children:a,className:o,color:s=`primary`,defaultValue:c,disabled:l=!1,error:u=!1,FormHelperTextProps:d,fullWidth:f=!1,helperText:p,id:m,InputLabelProps:h,inputProps:g,InputProps:_,inputRef:v,label:y,maxRows:b,minRows:x,multiline:S=!1,name:C,onBlur:w,onChange:T,onFocus:E,placeholder:D,required:O=!1,rows:k,select:j=!1,SelectProps:ee,type:te,value:M,variant:ne=`outlined`}=n,re=L(n,kS),ie=A({},n,{autoFocus:i,color:s,disabled:l,error:u,fullWidth:f,multiline:S,required:O,select:j,variant:ne}),P=jS(ie),ae={};ne===`outlined`&&(h&&h.shrink!==void 0&&(ae.notched=h.shrink),ae.label=y),j&&((!ee||!ee.native)&&(ae.id=void 0),ae[`aria-describedby`]=void 0);let oe=go(m),se=p&&oe?`${oe}-helper-text`:void 0,ce=y&&oe?`${oe}-label`:void 0,le=AS[ne],ue=(0,N.jsx)(le,A({"aria-describedby":se,autoComplete:r,autoFocus:i,defaultValue:c,fullWidth:f,multiline:S,name:C,rows:k,maxRows:b,minRows:x,type:te,value:M,id:oe,inputRef:v,onBlur:w,onChange:T,onFocus:E,placeholder:D,inputProps:g},ae,_));return(0,N.jsxs)(MS,A({className:z(P.root,o),disabled:l,error:u,fullWidth:f,ref:t,required:O,color:s,variant:ne,ownerState:ie},re,{children:[y!=null&&y!==``&&(0,N.jsx)(zy,A({htmlFor:oe,id:ce},h,{children:y})),j?(0,N.jsx)(Px,A({"aria-describedby":se,id:oe,labelId:ce,value:M,input:ue},ee,{children:a})):ue,p&&(0,N.jsx)(Qv,A({id:se},d,{children:p}))]}))}),NS=rp((0,N.jsx)(`path`,{d:`M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z`}),`ChevronLeft`),PS=rp((0,N.jsx)(`path`,{d:`M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z`}),`ChevronRight`),Q=e=>typeof e==`string`,FS=()=>{let e,t,n=new Promise((n,r)=>{e=n,t=r});return n.resolve=e,n.reject=t,n},IS=e=>e==null?``:String(e),LS=(e,t,n)=>{e.forEach(e=>{t[e]&&(n[e]=t[e])})},RS=/###/g,zS=e=>e&&e.includes(`###`)?e.replace(RS,`.`):e,BS=e=>!e||Q(e),VS=(e,t,n)=>{let r=Q(t)?t.split(`.`):t,i=0;for(;i<r.length-1;){if(BS(e))return{};let t=zS(r[i]);!e[t]&&n&&(e[t]=new n),e=Object.prototype.hasOwnProperty.call(e,t)?e[t]:{},++i}return BS(e)?{}:{obj:e,k:zS(r[i])}},HS=(e,t,n)=>{let{obj:r,k:i}=VS(e,t,Object);if(r!==void 0||t.length===1){r[i]=n;return}let a=t[t.length-1],o=t.slice(0,t.length-1),s=VS(e,o,Object);for(;s.obj===void 0&&o.length;)a=`${o[o.length-1]}.${a}`,o=o.slice(0,o.length-1),s=VS(e,o,Object),s?.obj&&s.obj[`${s.k}.${a}`]!==void 0&&(s.obj=void 0);s.obj[`${s.k}.${a}`]=n},US=(e,t,n,r)=>{let{obj:i,k:a}=VS(e,t,Object);i[a]=i[a]||[],i[a].push(n)},WS=(e,t)=>{let{obj:n,k:r}=VS(e,t);if(n&&Object.prototype.hasOwnProperty.call(n,r))return n[r]},GS=(e,t,n)=>{let r=WS(e,n);return r===void 0?WS(t,n):r},KS=(e,t,n)=>{for(let r in t)r!==`__proto__`&&r!==`constructor`&&(Object.prototype.hasOwnProperty.call(e,r)?Q(e[r])||e[r]instanceof String||Q(t[r])||t[r]instanceof String?n&&(e[r]=t[r]):KS(e[r],t[r],n):e[r]=t[r]);return e},qS=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,`\\$&`),JS={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`,"/":`/`},YS=e=>Q(e)?e.replace(/[&<>"'\/]/g,e=>JS[e]):e,XS=class{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){let t=this.regExpMap.get(e);if(t!==void 0)return t;let n=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,n),this.regExpQueue.push(e),n}},ZS=[` `,`,`,`?`,`!`,`;`],QS=new XS(20),$S=(e,t,n)=>{t||=``,n||=``;let r=ZS.filter(e=>!t.includes(e)&&!n.includes(e));if(r.length===0)return!0;let i=QS.getRegExp(`(${r.map(e=>e===`?`?`\\?`:e).join(`|`)})`),a=!i.test(e);if(!a){let t=e.indexOf(n);t>0&&!i.test(e.substring(0,t))&&(a=!0)}return a},eC=(e,t,n=`.`)=>{if(!e)return;if(e[t])return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0;let r=t.split(n),i=e;for(let e=0;e<r.length;){if(!i||typeof i!=`object`)return;let t,a=``;for(let o=e;o<r.length;++o)if(o!==e&&(a+=n),a+=r[o],t=i[a],t!==void 0){if([`string`,`number`,`boolean`].includes(typeof t)&&o<r.length-1)continue;e+=o-e+1;break}i=t}return i},tC=e=>e?.replace(/_/g,`-`),nC={type:`logger`,log(e){this.output(`log`,e)},warn(e){this.output(`warn`,e)},error(e){this.output(`error`,e)},output(e,t){console?.[e]?.apply?.(console,t)}},rC=new class e{constructor(e,t={}){this.init(e,t)}init(e,t={}){this.prefix=t.prefix||`i18next:`,this.logger=e||nC,this.options=t,this.debug=t.debug}log(...e){return this.forward(e,`log`,``,!0)}warn(...e){return this.forward(e,`warn`,``,!0)}error(...e){return this.forward(e,`error`,``)}deprecate(...e){return this.forward(e,`warn`,`WARNING DEPRECATED: `,!0)}forward(e,t,n,r){return r&&!this.debug?null:(e=e.map(e=>Q(e)?e.replace(/[\r\n\x00-\x1F\x7F]/g,` `):e),Q(e[0])&&(e[0]=`${n}${this.prefix} ${e[0]}`),this.logger[t](e))}create(t){return new e(this.logger,{prefix:`${this.prefix}:${t}:`,...this.options})}clone(t){return t||=this.options,t.prefix=t.prefix||this.prefix,new e(this.logger,t)}},iC=class{constructor(){this.observers={}}on(e,t){return e.split(` `).forEach(e=>{this.observers[e]||(this.observers[e]=new Map);let n=this.observers[e].get(t)||0;this.observers[e].set(t,n+1)}),this}off(e,t){if(this.observers[e]){if(!t){delete this.observers[e];return}this.observers[e].delete(t)}}once(e,t){let n=(...r)=>{t(...r),this.off(e,n)};return this.on(e,n),this}emit(e,...t){this.observers[e]&&Array.from(this.observers[e].entries()).forEach(([e,n])=>{for(let r=0;r<n;r++)e(...t)}),this.observers[`*`]&&Array.from(this.observers[`*`].entries()).forEach(([n,r])=>{for(let i=0;i<r;i++)n(e,...t)})}},aC=class extends iC{constructor(e,t={ns:[`translation`],defaultNS:`translation`}){super(),this.data=e||{},this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator=`.`),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.includes(e)||this.options.ns.push(e)}removeNamespaces(e){let t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}getResource(e,t,n,r={}){let i=r.keySeparator===void 0?this.options.keySeparator:r.keySeparator,a=r.ignoreJSONStructure===void 0?this.options.ignoreJSONStructure:r.ignoreJSONStructure,o;e.includes(`.`)?o=e.split(`.`):(o=[e,t],n&&(Array.isArray(n)?o.push(...n):Q(n)&&i?o.push(...n.split(i)):o.push(n)));let s=WS(this.data,o);return!s&&!t&&!n&&e.includes(`.`)&&(e=o[0],t=o[1],n=o.slice(2).join(`.`)),s||!a||!Q(n)?s:eC(this.data?.[e]?.[t],n,i)}addResource(e,t,n,r,i={silent:!1}){let a=i.keySeparator===void 0?this.options.keySeparator:i.keySeparator,o=[e,t];n&&(o=o.concat(a?n.split(a):n)),e.includes(`.`)&&(o=e.split(`.`),r=t,t=o[1]),this.addNamespaces(t),HS(this.data,o,r),i.silent||this.emit(`added`,e,t,n,r)}addResources(e,t,n,r={silent:!1}){for(let r in n)(Q(n[r])||Array.isArray(n[r]))&&this.addResource(e,t,r,n[r],{silent:!0});r.silent||this.emit(`added`,e,t,n)}addResourceBundle(e,t,n,r,i,a={silent:!1,skipCopy:!1}){let o=[e,t];e.includes(`.`)&&(o=e.split(`.`),r=n,n=t,t=o[1]),this.addNamespaces(t);let s=WS(this.data,o)||{};a.skipCopy||(n=JSON.parse(JSON.stringify(n))),r?KS(s,n,i):s={...s,...n},HS(this.data,o,s),a.silent||this.emit(`added`,e,t,n)}removeResourceBundle(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit(`removed`,e,t)}hasResourceBundle(e,t){return this.getResource(e,t)!==void 0}getResourceBundle(e,t){return t||=this.options.defaultNS,this.getResource(e,t)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){let t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find(e=>t[e]&&Object.keys(t[e]).length>0)}toJSON(){return this.data}},oC={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,r,i){return e.forEach(e=>{t=this.processors[e]?.process(t,n,r,i)??t}),t}},sC=Symbol(`i18next/PATH_KEY`);function cC(){let e=[],t=Object.create(null),n;return t.get=(r,i)=>(n?.revoke?.(),i===sC?e:(e.push(i),n=Proxy.revocable(r,t),n.proxy)),Proxy.revocable(Object.create(null),t).proxy}function lC(e,t){let{[sC]:n}=e(cC()),r=t?.keySeparator??`.`,i=t?.nsSeparator??`:`,a=t?.enableSelector===`strict`;if(n.length>1&&i){let e=t?.ns,o=a?Array.isArray(e)?e:e?[e]:null:Array.isArray(e)?e:null;if(o&&(a?o:o.length>1?o.slice(1):[]).includes(n[0]))return`${n[0]}${i}${n.slice(1).join(r)}`}return n.join(r)}var uC=e=>!Q(e)&&typeof e!=`boolean`&&typeof e!=`number`,dC=class e extends iC{constructor(e,t={}){super(),LS([`resourceStore`,`languageUtils`,`pluralResolver`,`interpolator`,`backendConnector`,`i18nFormat`,`utils`],e,this),this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator=`.`),this.logger=rC.create(`translator`),this.checkedLoadedFor={}}changeLanguage(e){e&&(this.language=e)}exists(e,t={interpolation:{}}){let n={...t};if(e==null)return!1;let r=this.resolve(e,n);if(r?.res===void 0)return!1;let i=uC(r.res);return!(n.returnObjects===!1&&i)}extractFromKey(e,t){let n=t.nsSeparator===void 0?this.options.nsSeparator:t.nsSeparator;n===void 0&&(n=`:`);let r=t.keySeparator===void 0?this.options.keySeparator:t.keySeparator,i=t.ns||this.options.defaultNS||[],a=n&&e.includes(n),o=!this.options.userDefinedKeySeparator&&!t.keySeparator&&!this.options.userDefinedNsSeparator&&!t.nsSeparator&&!$S(e,n,r);if(a&&!o){let t=e.match(this.interpolator.nestingRegexp);if(t&&t.length>0)return{key:e,namespaces:Q(i)?[i]:i};let a=e.split(n);(n!==r||n===r&&this.options.ns.includes(a[0]))&&(i=a.shift()),e=a.join(r)}return{key:e,namespaces:Q(i)?[i]:i}}translate(t,n,r){let i=typeof n==`object`?{...n}:n;if(typeof i!=`object`&&this.options.overloadTranslationOptionHandler&&(i=this.options.overloadTranslationOptionHandler(arguments)),typeof i==`object`&&(i={...i}),i||={},t==null)return``;typeof t==`function`&&(t=lC(t,{...this.options,...i})),Array.isArray(t)||(t=[String(t)]),t=t.map(e=>typeof e==`function`?lC(e,{...this.options,...i}):String(e));let a=i.returnDetails===void 0?this.options.returnDetails:i.returnDetails,o=i.keySeparator===void 0?this.options.keySeparator:i.keySeparator,{key:s,namespaces:c}=this.extractFromKey(t[t.length-1],i),l=c[c.length-1],u=i.nsSeparator===void 0?this.options.nsSeparator:i.nsSeparator;u===void 0&&(u=`:`);let d=i.lng||this.language,f=i.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(d?.toLowerCase()===`cimode`)return f?a?{res:`${l}${u}${s}`,usedKey:s,exactUsedKey:s,usedLng:d,usedNS:l,usedParams:this.getUsedParamsDetails(i)}:`${l}${u}${s}`:a?{res:s,usedKey:s,exactUsedKey:s,usedLng:d,usedNS:l,usedParams:this.getUsedParamsDetails(i)}:s;let p=this.resolve(t,i),m=p?.res,h=p?.usedKey||s,g=p?.exactUsedKey||s,_=[`[object Number]`,`[object Function]`,`[object RegExp]`],v=i.joinArrays===void 0?this.options.joinArrays:i.joinArrays,y=!this.i18nFormat||this.i18nFormat.handleAsObject,b=i.count!==void 0&&!Q(i.count),x=e.hasDefaultValue(i),S=b?this.pluralResolver.getSuffix(d,i.count,i):``,C=i.ordinal&&b?this.pluralResolver.getSuffix(d,i.count,{ordinal:!1}):``,w=b&&!i.ordinal&&i.count===0,T=w&&i[`defaultValue${this.options.pluralSeparator}zero`]||i[`defaultValue${S}`]||i[`defaultValue${C}`]||i.defaultValue,E=m;y&&!m&&x&&(E=T);let D=uC(E),O=Object.prototype.toString.apply(E);if(y&&E&&D&&!_.includes(O)&&!(Q(v)&&Array.isArray(E))){if(!i.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn(`accessing an object - but returnObjects options is not enabled!`);let e=this.options.returnedObjectHandler?this.options.returnedObjectHandler(h,E,{...i,ns:c}):`key '${s} (${this.language})' returned an object instead of string.`;return a?(p.res=e,p.usedParams=this.getUsedParamsDetails(i),p):e}if(o){let e=Array.isArray(E),t=e?[]:{},n=e?g:h;for(let e in E)if(Object.prototype.hasOwnProperty.call(E,e)){let r=`${n}${o}${e}`;t[e]=x&&!m?this.translate(r,{...i,defaultValue:uC(T)?T[e]:void 0,joinArrays:!1,ns:c}):this.translate(r,{...i,joinArrays:!1,ns:c}),t[e]===r&&(t[e]=E[e])}m=t}}else if(y&&Q(v)&&Array.isArray(m))m=m.join(v),m&&=this.extendTranslation(m,t,i,r);else{let e=!1,n=!1;!this.isValidLookup(m)&&x&&(e=!0,m=T),this.isValidLookup(m)||(n=!0,m=s);let a=(i.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&n?void 0:m,c=x&&T!==m&&this.options.updateMissing;if(n||e||c){if(this.logger.log(c?`updateKey`:`missingKey`,d,l,b&&!c?`${s}${this.pluralResolver.getSuffix(d,i.count,i)}`:s,c?T:m),o){let e=this.resolve(s,{...i,keySeparator:!1});e&&e.res&&this.logger.warn(`Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.`)}let e=[],t=this.languageUtils.getFallbackCodes(this.options.fallbackLng,i.lng||this.language);if(this.options.saveMissingTo===`fallback`&&t&&t[0])for(let n=0;n<t.length;n++)e.push(t[n]);else this.options.saveMissingTo===`all`?e=this.languageUtils.toResolveHierarchy(i.lng||this.language):e.push(i.lng||this.language);let n=(e,t,n)=>{let r=x&&n!==m?n:a;this.options.missingKeyHandler?this.options.missingKeyHandler(e,l,t,r,c,i):this.backendConnector?.saveMissing&&this.backendConnector.saveMissing(e,l,t,r,c,i),this.emit(`missingKey`,e,l,t,m)};this.options.saveMissing&&(this.options.saveMissingPlurals&&b?e.forEach(e=>{let t=this.pluralResolver.getSuffixes(e,i);w&&i[`defaultValue${this.options.pluralSeparator}zero`]&&!t.includes(`${this.options.pluralSeparator}zero`)&&t.push(`${this.options.pluralSeparator}zero`),t.forEach(t=>{n([e],s+t,i[`defaultValue${t}`]||T)})}):n(e,s,T))}m=this.extendTranslation(m,t,i,p,r),n&&m===s&&this.options.appendNamespaceToMissingKey&&(m=`${l}${u}${s}`),(n||e)&&this.options.parseMissingKeyHandler&&(m=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${l}${u}${s}`:s,e?m:void 0,i))}return a?(p.res=m,p.usedParams=this.getUsedParamsDetails(i),p):m}extendTranslation(e,t,n,r,i){if(this.i18nFormat?.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...n},n.lng||this.language||r.usedLng,r.usedNS,r.usedKey,{resolved:r});else if(!n.skipInterpolation){n.interpolation&&this.interpolator.init({...n,interpolation:{...this.options.interpolation,...n.interpolation}});let a=Q(e)&&(n?.interpolation?.skipOnVariables===void 0?this.options.interpolation.skipOnVariables:n.interpolation.skipOnVariables),o;if(a){let t=e.match(this.interpolator.nestingRegexp);o=t&&t.length}let s=n.replace&&!Q(n.replace)?n.replace:n;if(this.options.interpolation.defaultVariables&&(s={...this.options.interpolation.defaultVariables,...s}),e=this.interpolator.interpolate(e,s,n.lng||this.language||r.usedLng,n),a){let t=e.match(this.interpolator.nestingRegexp),r=t&&t.length;o<r&&(n.nest=!1)}!n.lng&&r&&r.res&&(n.lng=this.language||r.usedLng),n.nest!==!1&&(e=this.interpolator.nest(e,(...e)=>i?.[0]===e[0]&&!n.context?(this.logger.warn(`It seems you are nesting recursively key: ${e[0]} in key: ${t[0]}`),null):this.translate(...e,t),n)),n.interpolation&&this.interpolator.reset()}let a=n.postProcess||this.options.postProcess,o=Q(a)?[a]:a;return e!=null&&o?.length&&n.applyPostProcessor!==!1&&(e=oC.handle(o,e,t,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...r,usedParams:this.getUsedParamsDetails(n)},...n}:n,this)),e}resolve(e,t={}){let n,r,i,a,o;return Q(e)&&(e=[e]),Array.isArray(e)&&(e=e.map(e=>typeof e==`function`?lC(e,{...this.options,...t}):e)),e.forEach(e=>{if(this.isValidLookup(n))return;let s=this.extractFromKey(e,t),c=s.key;r=c;let l=s.namespaces;this.options.fallbackNS&&(l=l.concat(this.options.fallbackNS));let u=t.count!==void 0&&!Q(t.count),d=u&&!t.ordinal&&t.count===0,f=t.context!==void 0&&(Q(t.context)||typeof t.context==`number`)&&t.context!==``,p=t.lngs?t.lngs:this.languageUtils.toResolveHierarchy(t.lng||this.language,t.fallbackLng);l.forEach(e=>{this.isValidLookup(n)||(o=e,!this.checkedLoadedFor[`${p[0]}-${e}`]&&this.utils?.hasLoadedNamespace&&!this.utils?.hasLoadedNamespace(o)&&(this.checkedLoadedFor[`${p[0]}-${e}`]=!0,this.logger.warn(`key "${r}" for languages "${p.join(`, `)}" won't get resolved as namespace "${o}" was not yet loaded`,`This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!`)),p.forEach(r=>{if(this.isValidLookup(n))return;a=r;let o=[c];if(this.i18nFormat?.addLookupKeys)this.i18nFormat.addLookupKeys(o,c,r,e,t);else{let e;u&&(e=this.pluralResolver.getSuffix(r,t.count,t));let n=`${this.options.pluralSeparator}zero`,i=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(u&&(t.ordinal&&e.startsWith(i)&&o.push(c+e.replace(i,this.options.pluralSeparator)),o.push(c+e),d&&o.push(c+n)),f){let r=`${c}${this.options.contextSeparator||`_`}${t.context}`;o.push(r),u&&(t.ordinal&&e.startsWith(i)&&o.push(r+e.replace(i,this.options.pluralSeparator)),o.push(r+e),d&&o.push(r+n))}}let s;for(;s=o.pop();)this.isValidLookup(n)||(i=s,n=this.getResource(r,e,s,t))}))})}),{res:n,usedKey:r,exactUsedKey:i,usedLng:a,usedNS:o}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e===``)}getResource(e,t,n,r={}){return this.i18nFormat?.getResource?this.i18nFormat.getResource(e,t,n,r):this.resourceStore.getResource(e,t,n,r)}getUsedParamsDetails(e={}){let t=[`defaultValue`,`ordinal`,`context`,`replace`,`lng`,`lngs`,`fallbackLng`,`ns`,`keySeparator`,`nsSeparator`,`returnObjects`,`returnDetails`,`joinArrays`,`postProcess`,`interpolation`],n=e.replace&&!Q(e.replace),r=n?e.replace:e;if(n&&e.count!==void 0&&(r={...r,count:e.count}),this.options.interpolation.defaultVariables&&(r={...this.options.interpolation.defaultVariables,...r}),!n){r={...r};for(let e of t)delete r[e]}return r}static hasDefaultValue(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&t.startsWith(`defaultValue`)&&e[t]!==void 0)return!0;return!1}},fC=class{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=rC.create(`languageUtils`),this.resolveHierarchyCache={}}clearCache(){this.resolveHierarchyCache={}}getScriptPartFromCode(e){if(e=tC(e),!e||!e.includes(`-`))return null;let t=e.split(`-`);return t.length===2||(t.pop(),t[t.length-1].toLowerCase()===`x`)?null:this.formatLanguageCode(t.join(`-`))}getLanguagePartFromCode(e){if(e=tC(e),!e||!e.includes(`-`))return e;let t=e.split(`-`);return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(Q(e)&&e.includes(`-`)){let t;try{t=Intl.getCanonicalLocales(e)[0]}catch{}return t&&this.options.lowerCaseLng&&(t=t.toLowerCase()),t||(this.options.lowerCaseLng?e.toLowerCase():e)}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}isSupportedCode(e){return(this.options.load===`languageOnly`||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.includes(e)}getBestMatchFromCodes(e){if(!e)return null;let t;return e.forEach(e=>{if(t)return;let n=this.formatLanguageCode(e);(!this.options.supportedLngs||this.isSupportedCode(n))&&(t=n)}),!t&&this.options.supportedLngs&&e.forEach(e=>{if(t)return;let n=this.getScriptPartFromCode(e);if(this.isSupportedCode(n))return t=n;let r=this.getLanguagePartFromCode(e);if(this.isSupportedCode(r))return t=r;t=this.options.supportedLngs.find(e=>e===r?!0:!e.includes(`-`)&&!r.includes(`-`)?!1:!!(e.includes(`-`)&&!r.includes(`-`)&&e.slice(0,e.indexOf(`-`))===r||e.startsWith(r)&&r.length>1))}),t||=this.getFallbackCodes(this.options.fallbackLng)[0],t}getFallbackCodes(e,t){if(!e)return[];if(typeof e==`function`&&(e=e(t)),Q(e)&&(e=[e]),Array.isArray(e))return e;if(!t)return e.default||[];let n=e[t];return n||=e[this.getScriptPartFromCode(t)],n||=e[this.formatLanguageCode(t)],n||=e[this.getLanguagePartFromCode(t)],n||=e.default,n||[]}toResolveHierarchy(e,t){let n=this.options.fallbackLng,r=Array.isArray(n)?n.join(`|`):n;r!==this._cachedFallbackLng&&(this.resolveHierarchyCache={},this._cachedFallbackLng=r);let i=t===void 0||t===!1||Q(t),a=t===void 0&&typeof this.options.fallbackLng==`function`,o=Q(e)&&i&&!a,s=null;if(o){let n;n=t===void 0?`undefined`:t===!1?`boolean:false`:`string:${t}`,s=`${e.length}:${e}|${n}`}if(s!==null){let e=this.resolveHierarchyCache[s];if(e!==void 0)return e.slice()}let c=this.getFallbackCodes((t===!1?[]:t)||this.options.fallbackLng||[],e),l=[],u=e=>{e&&(this.isSupportedCode(e)?l.push(e):this.logger.warn(`rejecting language code not found in supportedLngs: ${e}`))};return Q(e)&&(e.includes(`-`)||e.includes(`_`))?(this.options.load!==`languageOnly`&&u(this.formatLanguageCode(e)),this.options.load!==`languageOnly`&&this.options.load!==`currentOnly`&&u(this.getScriptPartFromCode(e)),this.options.load!==`currentOnly`&&u(this.getLanguagePartFromCode(e))):Q(e)&&u(this.formatLanguageCode(e)),c.forEach(e=>{l.includes(e)||u(this.formatLanguageCode(e))}),s===null?l:(this.resolveHierarchyCache[s]=l,l.slice())}},pC={zero:0,one:1,two:2,few:3,many:4,other:5},mC={select:e=>e===1?`one`:`other`,resolvedOptions:()=>({pluralCategories:[`one`,`other`]})},hC=class{constructor(e,t={}){this.languageUtils=e,this.options=t,this.logger=rC.create(`pluralResolver`),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(e,t={}){let n=tC(e===`dev`?`en`:e),r=t.ordinal?`ordinal`:`cardinal`,i=JSON.stringify({cleanedCode:n,type:r});if(i in this.pluralRulesCache)return this.pluralRulesCache[i];let a;try{a=new Intl.PluralRules(n,{type:r})}catch{if(typeof Intl>`u`)return this.logger.error(`No Intl support, please use an Intl polyfill!`),mC;if(!e.match(/-|_/))return mC;let n=this.languageUtils.getLanguagePartFromCode(e);a=this.getRule(n,t)}return this.pluralRulesCache[i]=a,a}needsPlural(e,t={}){let n=this.getRule(e,t);return n||=this.getRule(`dev`,t),n?.resolvedOptions().pluralCategories.length>1}getPluralFormsOfKey(e,t,n={}){return this.getSuffixes(e,n).map(e=>`${t}${e}`)}getSuffixes(e,t={}){let n=this.getRule(e,t);return n||=this.getRule(`dev`,t),n?n.resolvedOptions().pluralCategories.sort((e,t)=>pC[e]-pC[t]).map(e=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:``}${e}`):[]}getSuffix(e,t,n={}){let r=this.getRule(e,n);return r?`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:``}${r.select(t)}`:(this.logger.warn(`no plural rule found for: ${e}`),this.getSuffix(`dev`,t,n))}},gC=(e,t,n,r=`.`,i=!0)=>{let a=GS(e,t,n);return!a&&i&&Q(n)&&(a=eC(e,n,r),a===void 0&&(a=eC(t,n,r))),a},_C=e=>e.replace(/\$/g,`$$$$`),vC=class{constructor(e={}){this.logger=rC.create(`interpolator`),this.options=e,this.format=e?.interpolation?.format||(e=>e),this.init(e)}init(e={}){e.interpolation||={escapeValue:!0};let{escape:t,escapeValue:n,useRawValueToEscape:r,prefix:i,prefixEscaped:a,suffix:o,suffixEscaped:s,formatSeparator:c,unescapeSuffix:l,unescapePrefix:u,nestingPrefix:d,nestingPrefixEscaped:f,nestingSuffix:p,nestingSuffixEscaped:m,nestingOptionsSeparator:h,maxReplaces:g,alwaysFormat:_}=e.interpolation;this.escape=t===void 0?YS:t,this.escapeValue=n===void 0||n,this.useRawValueToEscape=r!==void 0&&r,this.prefix=i?qS(i):a||`{{`,this.suffix=o?qS(o):s||`}}`,this.formatSeparator=c||`,`,this.unescapePrefix=l?``:u?qS(u):`-`,this.unescapeSuffix=this.unescapePrefix?``:l?qS(l):``,this.nestingPrefix=d?qS(d):f||qS(`$t(`),this.nestingSuffix=p?qS(p):m||qS(`)`),this.nestingOptionsSeparator=h||`,`,this.maxReplaces=g||1e3,this.alwaysFormat=_!==void 0&&_,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){let e=(e,t)=>e?.source===t?(e.lastIndex=0,e):new RegExp(t,`g`);this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}((?:[^()"']+|"[^"]*"|'[^']*'|\\((?:[^()]|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`)}interpolate(e,t,n,r){let i,a,o,s=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},c=e=>{if(!e.includes(this.formatSeparator)){let i=gC(t,s,e,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(i,void 0,n,{...r,...t,interpolationkey:e}):i}let i=e.split(this.formatSeparator),a=i.shift().trim(),o=i.join(this.formatSeparator).trim();return this.format(gC(t,s,a,this.options.keySeparator,this.options.ignoreJSONStructure),o,n,{...r,...t,interpolationkey:a})};this.resetRegExp(),!this.escapeValue&&typeof e==`string`&&/\$t\([^)]*\{[^}]*\{\{/.test(e)&&this.logger.warn(`nesting options string contains interpolated variables with escapeValue: false — if any of those values are attacker-controlled they can inject additional nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing it to t(), or keep escapeValue: true.`);let l=r?.missingInterpolationHandler||this.options.missingInterpolationHandler,u=r?.interpolation?.skipOnVariables===void 0?this.options.interpolation.skipOnVariables:r.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:e=>e},{regex:this.regexp,safeValue:e=>this.escapeValue?this.escape(e):e}].forEach(t=>{for(o=0;i=t.regex.exec(e);){let n=i[1].trim();if(a=c(n),a===void 0){if(typeof l==`function`){let t=l(e,i,r);a=Q(t)?t:``}else if(r&&Object.prototype.hasOwnProperty.call(r,n))a=``;else if(u){a=i[0];continue}else this.logger.warn(`missed to pass in variable ${n} for interpolating ${e}`),a=``}else!Q(a)&&!this.useRawValueToEscape&&(a=IS(a));let s=t.safeValue(a);if(e=e.replace(i[0],_C(s)),u?(t.regex.lastIndex+=s.length,t.regex.lastIndex-=i[0].length):t.regex.lastIndex=0,o++,o>=this.maxReplaces)break}}),e}nest(e,t,n={}){let r,i,a,o=(e,t)=>{let n=this.nestingOptionsSeparator;if(!e.includes(n))return e;let r=e.split(RegExp(`${qS(n)}[ ]*{`)),i=`{${r[1]}`;e=r[0],i=this.interpolate(i,a);let o=i.match(/'/g),s=i.match(/"/g);((o?.length??0)%2==0&&!s||(s?.length??0)%2!=0)&&(i=i.replace(/'/g,`"`));try{a=JSON.parse(i),t&&(a={...t,...a})}catch(t){return this.logger.warn(`failed parsing options string in nesting for key ${e}`,t),`${e}${n}${i}`}return a.defaultValue&&a.defaultValue.includes(this.prefix)&&delete a.defaultValue,e};for(;r=this.nestingRegexp.exec(e);){let s=[];a={...n},a=a.replace&&!Q(a.replace)?a.replace:a,a.applyPostProcessor=!1,delete a.defaultValue;let c=/{.*}/s.test(r[1])?r[1].lastIndexOf(`}`)+1:r[1].indexOf(this.formatSeparator);if(c!==-1&&(s=r[1].slice(c).split(this.formatSeparator).map(e=>e.trim()).filter(Boolean),r[1]=r[1].slice(0,c)),i=t(o.call(this,r[1].trim(),a),a),i&&r[0]===e&&!Q(i))return i;Q(i)||(i=IS(i)),i||=(this.logger.warn(`missed to resolve ${r[1]} for nesting ${e}`),``),s.length&&(i=s.reduce((e,t)=>this.format(e,t,n.lng,{...n,interpolationkey:r[1].trim()}),i.trim())),e=e.replace(r[0],_C(IS(i))),this.regexp.lastIndex=0}return e}},yC=e=>{let t=e.toLowerCase().trim(),n={};if(e.includes(`(`)){let r=e.split(`(`);t=r[0].toLowerCase().trim();let i=r[1].slice(0,-1);t===`currency`&&!i.includes(`:`)?n.currency||=i.trim():t===`relativetime`&&!i.includes(`:`)?n.range||=i.trim():i.split(`;`).forEach(e=>{if(e){let[t,...r]=e.split(`:`),i=r.join(`:`).trim().replace(/^'+|'+$/g,``),a=t.trim();n[a]||(n[a]=i),i===`false`&&(n[a]=!1),i===`true`&&(n[a]=!0),isNaN(i)||(n[a]=parseInt(i,10))}})}return{formatName:t,formatOptions:n}},bC=e=>{let t={};return(n,r,i)=>{let a=i;i&&i.interpolationkey&&i.formatParams&&i.formatParams[i.interpolationkey]&&i[i.interpolationkey]&&(a={...a,[i.interpolationkey]:void 0});let o=r+JSON.stringify(a),s=t[o];return s||(s=e(tC(r),i),t[o]=s),s(n)}},xC=e=>(t,n,r)=>e(tC(n),r)(t),SC=class{constructor(e={}){this.logger=rC.create(`formatter`),this.options=e,this.init(e)}init(e,t={interpolation:{}}){this.formatSeparator=t.interpolation.formatSeparator||`,`;let n=t.cacheInBuiltFormats?bC:xC;this.formats={number:n((e,t)=>{let n=new Intl.NumberFormat(e,{...t});return e=>n.format(e)}),currency:n((e,t)=>{let n=new Intl.NumberFormat(e,{...t,style:`currency`});return e=>n.format(e)}),datetime:n((e,t)=>{let n=new Intl.DateTimeFormat(e,{...t});return e=>n.format(e)}),relativetime:n((e,t)=>{let n=new Intl.RelativeTimeFormat(e,{...t});return e=>n.format(e,t.range||`day`)}),list:n((e,t)=>{let n=new Intl.ListFormat(e,{...t});return e=>n.format(e)})}}add(e,t){this.formats[e.toLowerCase().trim()]=t}addCached(e,t){this.formats[e.toLowerCase().trim()]=bC(t)}format(e,t,n,r={}){if(!t||e==null)return e;let i=t.split(this.formatSeparator),a=[];for(let e=0;e<i.length;e++){let t=i[e];for(;t.indexOf(`(`)>-1&&!t.includes(`)`)&&e+1<i.length;)t=`${t}${this.formatSeparator}${i[++e]}`;a.push(t)}return a.reduce((e,t)=>{let{formatName:i,formatOptions:a}=yC(t);if(this.formats[i]){let t=e;try{let o=r?.formatParams?.[r.interpolationkey]||{},s=o.locale||o.lng||r.locale||r.lng||n;t=this.formats[i](e,s,{...a,...r,...o})}catch(e){this.logger.warn(e)}return t}return this.logger.warn(`there was no format function for ${i}`),e},e)}},CC=(e,t)=>{e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)},wC=class extends iC{constructor(e,t,n,r={}){super(),this.backend=e,this.store=t,this.services=n,this.languageUtils=n.languageUtils,this.options=r,this.logger=rC.create(`backendConnector`),this.waitingReads=[],this.maxParallelReads=r.maxParallelReads||10,this.readingCalls=0,this.maxRetries=r.maxRetries>=0?r.maxRetries:5,this.retryTimeout=r.retryTimeout>=1?r.retryTimeout:350,this.state={},this.queue=[],this.backend?.init?.(n,r.backend,r)}queueLoad(e,t,n,r){let i={},a={},o={},s={};return e.forEach(e=>{let r=!0;t.forEach(t=>{let o=`${e}|${t}`;!n.reload&&this.store.hasResourceBundle(e,t)?this.state[o]=2:this.state[o]<0||(this.state[o]===1?a[o]===void 0&&(a[o]=!0):(this.state[o]=1,r=!1,a[o]===void 0&&(a[o]=!0),i[o]===void 0&&(i[o]=!0),s[t]===void 0&&(s[t]=!0)))}),r||(o[e]=!0)}),(Object.keys(i).length||Object.keys(a).length)&&this.queue.push({pending:a,pendingCount:Object.keys(a).length,loaded:{},errors:[],callback:r}),{toLoad:Object.keys(i),pending:Object.keys(a),toLoadLanguages:Object.keys(o),toLoadNamespaces:Object.keys(s)}}loaded(e,t,n){let r=e.split(`|`),i=r[0],a=r[1];t&&this.emit(`failedLoading`,i,a,t),!t&&n&&this.store.addResourceBundle(i,a,n,void 0,void 0,{skipCopy:!0}),this.state[e]=t?-1:2,t&&n&&(this.state[e]=0);let o={};this.queue.forEach(n=>{US(n.loaded,[i],a),CC(n,e),t&&n.errors.push(t),n.pendingCount===0&&!n.done&&(Object.keys(n.loaded).forEach(e=>{o[e]||(o[e]={});let t=n.loaded[e];t.length&&t.forEach(t=>{o[e][t]===void 0&&(o[e][t]=!0)})}),n.done=!0,n.errors.length?n.callback(n.errors):n.callback())}),this.emit(`loaded`,o),this.queue=this.queue.filter(e=>!e.done)}read(e,t,n,r=0,i=this.retryTimeout,a){if(!e.length)return a(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:t,fcName:n,tried:r,wait:i,callback:a});return}this.readingCalls++;let o=(o,s)=>{if(this.readingCalls--,this.waitingReads.length>0){let e=this.waitingReads.shift();this.read(e.lng,e.ns,e.fcName,e.tried,e.wait,e.callback)}if(o&&s&&r<this.maxRetries){setTimeout(()=>{this.read(e,t,n,r+1,i*2,a)},i);return}a(o,s)},s=this.backend[n].bind(this.backend);if(s.length===2){try{let n=s(e,t);n&&typeof n.then==`function`?n.then(e=>o(null,e)).catch(o):o(null,n)}catch(e){o(e)}return}return s(e,t,o)}prepareLoading(e,t,n={},r){if(!this.backend)return this.logger.warn(`No backend was added via i18next.use. Will not load resources.`),r&&r();Q(e)&&(e=this.languageUtils.toResolveHierarchy(e)),Q(t)&&(t=[t]);let i=this.queueLoad(e,t,n,r);if(!i.toLoad.length)return i.pending.length||r(),null;i.toLoad.forEach(e=>{this.loadOne(e)})}load(e,t,n){this.prepareLoading(e,t,{},n)}reload(e,t,n){this.prepareLoading(e,t,{reload:!0},n)}loadOne(e,t=``){let n=e.split(`|`),r=n[0],i=n[1];this.read(r,i,`read`,void 0,void 0,(n,a)=>{n&&this.logger.warn(`${t}loading namespace ${i} for language ${r} failed`,n),!n&&a&&this.logger.log(`${t}loaded namespace ${i} for language ${r}`,a),this.loaded(e,n,a)})}saveMissing(e,t,n,r,i,a={},o=()=>{}){if(this.services?.utils?.hasLoadedNamespace&&!this.services?.utils?.hasLoadedNamespace(t)){this.logger.warn(`did not save key "${n}" as the namespace "${t}" was not yet loaded`,`This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!`);return}if(n!=null&&n!==``){if(this.backend?.create){let s={...a,isUpdate:i},c=this.backend.create.bind(this.backend);if(c.length<6)try{let i;i=c.length===5?c(e,t,n,r,s):c(e,t,n,r),i&&typeof i.then==`function`?i.then(e=>o(null,e)).catch(o):o(null,i)}catch(e){o(e)}else c(e,t,n,r,o,s)}e&&e[0]&&this.store.addResource(e[0],t,n,r)}}},TC=()=>({debug:!1,initAsync:!0,ns:[`translation`],defaultNS:[`translation`],fallbackLng:[`dev`],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:`all`,preload:!1,keySeparator:`.`,nsSeparator:`:`,pluralSeparator:`_`,contextSeparator:`_`,enableSelector:!1,partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:`fallback`,saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:e=>{let t={};if(typeof e[1]==`object`&&(t=e[1]),Q(e[1])&&(t.defaultValue=e[1]),Q(e[2])&&(t.tDescription=e[2]),typeof e[2]==`object`||typeof e[3]==`object`){let n=e[3]||e[2];Object.keys(n).forEach(e=>{t[e]=n[e]})}return t},interpolation:{escapeValue:!0,prefix:`{{`,suffix:`}}`,formatSeparator:`,`,unescapePrefix:`-`,nestingPrefix:`$t(`,nestingSuffix:`)`,nestingOptionsSeparator:`,`,maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),EC=e=>(Q(e.ns)&&(e.ns=[e.ns]),Q(e.fallbackLng)&&(e.fallbackLng=[e.fallbackLng]),Q(e.fallbackNS)&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&!e.supportedLngs.includes(`cimode`)&&(e.supportedLngs=e.supportedLngs.concat([`cimode`])),e),DC=()=>{},OC=e=>{Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(t=>{typeof e[t]==`function`&&(e[t]=e[t].bind(e))})},kC=class e extends iC{constructor(e={},t){if(super(),this.options=EC(e),this.services={},this.logger=rC,this.modules={external:[]},OC(this),t&&!this.isInitialized&&!e.isClone){if(!this.options.initAsync)return this.init(e,t),this;setTimeout(()=>{this.init(e,t)},0)}}init(e={},t){this.isInitializing=!0,typeof e==`function`&&(t=e,e={}),e.defaultNS==null&&e.ns&&(Q(e.ns)?e.defaultNS=e.ns:e.ns.includes(`translation`)||(e.defaultNS=e.ns[0]));let n=TC();this.options={...n,...this.options,...EC(e)},this.options.interpolation={...n.interpolation,...this.options.interpolation},e.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=e.keySeparator),e.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=e.nsSeparator),typeof this.options.overloadTranslationOptionHandler!=`function`&&(this.options.overloadTranslationOptionHandler=n.overloadTranslationOptionHandler);let r=e=>e?typeof e==`function`?new e:e:null;if(!this.options.isClone){this.modules.logger?rC.init(r(this.modules.logger),this.options):rC.init(null,this.options);let e;e=this.modules.formatter?this.modules.formatter:SC;let t=new fC(this.options);this.store=new aC(this.options.resources,this.options);let n=this.services;n.logger=rC,n.resourceStore=this.store,n.languageUtils=t,n.pluralResolver=new hC(t,{prepend:this.options.pluralSeparator}),e&&(n.formatter=r(e),n.formatter.init&&n.formatter.init(n,this.options),this.options.interpolation.format=n.formatter.format.bind(n.formatter)),n.interpolator=new vC(this.options),n.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},n.backendConnector=new wC(r(this.modules.backend),n.resourceStore,n,this.options),n.backendConnector.on(`*`,(e,...t)=>{this.emit(e,...t)}),this.modules.languageDetector&&(n.languageDetector=r(this.modules.languageDetector),n.languageDetector.init&&n.languageDetector.init(n,this.options.detection,this.options)),this.modules.i18nFormat&&(n.i18nFormat=r(this.modules.i18nFormat),n.i18nFormat.init&&n.i18nFormat.init(this)),this.translator=new dC(this.services,this.options),this.translator.on(`*`,(e,...t)=>{this.emit(e,...t)}),this.modules.external.forEach(e=>{e.init&&e.init(this)})}if(this.format=this.options.interpolation.format,t||=DC,this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){let e=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);e.length>0&&e[0]!==`dev`&&(this.options.lng=e[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn(`init: no languageDetector is used and no lng is defined`),[`getResource`,`hasResourceBundle`,`getResourceBundle`,`getDataByLanguage`].forEach(e=>{this[e]=(...t)=>this.store[e](...t)}),[`addResource`,`addResources`,`addResourceBundle`,`removeResourceBundle`].forEach(e=>{this[e]=(...t)=>(this.store[e](...t),this)});let i=FS(),a=()=>{let e=(e,n)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn(`init: i18next is already initialized. You should call init just once!`),this.isInitialized=!0,this.options.isClone||this.logger.log(`initialized`,this.options),this.emit(`initialized`,this.options),i.resolve(n),t(e,n)};if((this.languages||this.isLanguageChangingTo)&&!this.isInitialized)return e(null,this.t.bind(this));this.changeLanguage(this.options.lng,e)};return this.options.resources||!this.options.initAsync?a():setTimeout(a,0),i}loadResources(e,t=DC){let n=t,r=Q(e)?e:this.language;if(typeof e==`function`&&(n=e),!this.options.resources||this.options.partialBundledLanguages){if(r?.toLowerCase()===`cimode`&&(!this.options.preload||this.options.preload.length===0))return n();let e=[],t=t=>{t&&t!==`cimode`&&this.services.languageUtils.toResolveHierarchy(t).forEach(t=>{t!==`cimode`&&(e.includes(t)||e.push(t))})};r?t(r):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(e=>t(e)),this.options.preload?.forEach?.(e=>t(e)),this.services.backendConnector.load(e,this.options.ns,e=>{!e&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),n(e)})}else n(null)}reloadResources(e,t,n){let r=FS();return typeof e==`function`&&(n=e,e=void 0),typeof t==`function`&&(n=t,t=void 0),e||=this.languages,t||=this.options.ns,n||=DC,this.services.backendConnector.reload(e,t,e=>{r.resolve(),n(e)}),r}use(e){if(!e)throw Error(`You are passing an undefined module! Please check the object you are passing to i18next.use()`);if(!e.type)throw Error(`You are passing a wrong module! Please check the object you are passing to i18next.use()`);return e.type===`backend`&&(this.modules.backend=e),(e.type===`logger`||e.log&&e.warn&&e.error)&&(this.modules.logger=e),e.type===`languageDetector`&&(this.modules.languageDetector=e),e.type===`i18nFormat`&&(this.modules.i18nFormat=e),e.type===`postProcessor`&&oC.addPostProcessor(e),e.type===`formatter`&&(this.modules.formatter=e),e.type===`3rdParty`&&this.modules.external.push(e),this}setResolvedLanguage(e){if(e&&this.languages&&![`cimode`,`dev`].includes(e)){for(let e=0;e<this.languages.length;e++){let t=this.languages[e];if(![`cimode`,`dev`].includes(t)&&this.store.hasLanguageSomeTranslations(t)){this.resolvedLanguage=t;break}}!this.resolvedLanguage&&!this.languages.includes(e)&&this.store.hasLanguageSomeTranslations(e)&&(this.resolvedLanguage=e,this.languages.unshift(e))}}changeLanguage(e,t){this.isLanguageChangingTo=e;let n=FS();this.emit(`languageChanging`,e);let r=e=>{this.language=e,this.languages=this.services.languageUtils.toResolveHierarchy(e),this.resolvedLanguage=void 0,this.setResolvedLanguage(e)},i=(i,a)=>{a?this.isLanguageChangingTo===e&&(r(a),this.translator.changeLanguage(a),this.isLanguageChangingTo=void 0,this.emit(`languageChanged`,a),this.logger.log(`languageChanged`,a)):this.isLanguageChangingTo=void 0,n.resolve((...e)=>this.t(...e)),t&&t(i,(...e)=>this.t(...e))},a=t=>{!e&&!t&&this.services.languageDetector&&(t=[]);let n=Q(t)?t:t&&t[0],a=this.store.hasLanguageSomeTranslations(n)?n:this.services.languageUtils.getBestMatchFromCodes(Q(t)?[t]:t);a&&(this.language||r(a),this.translator.language||this.translator.changeLanguage(a),this.services.languageDetector?.cacheUserLanguage?.(a)),this.loadResources(a,e=>{i(e,a)})};return!e&&this.services.languageDetector&&!this.services.languageDetector.async?a(this.services.languageDetector.detect()):!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(a):this.services.languageDetector.detect(a):a(e),n}getFixedT(e,t,n,r){let i=r?.scopeNs,a=(e,t,...r)=>{let o;o=typeof t==`object`?{...t}:this.options.overloadTranslationOptionHandler([e,t].concat(r)),o.lng=o.lng||a.lng,o.lngs=o.lngs||a.lngs;let s=o.ns!==void 0&&o.ns!==null;o.ns=o.ns||a.ns,o.keyPrefix!==``&&(o.keyPrefix=o.keyPrefix||n||a.keyPrefix);let c={...this.options,...o};Array.isArray(i)&&!s&&(c.ns=i),typeof o.keyPrefix==`function`&&(o.keyPrefix=lC(o.keyPrefix,c));let l=this.options.keySeparator||`.`,u;return o.keyPrefix&&Array.isArray(e)?u=e.map(e=>(typeof e==`function`&&(e=lC(e,c)),`${o.keyPrefix}${l}${e}`)):(typeof e==`function`&&(e=lC(e,c)),u=o.keyPrefix?`${o.keyPrefix}${l}${e}`:e),this.t(u,o)};return Q(e)?a.lng=e:a.lngs=e,a.ns=t,a.keyPrefix=n,a}t(...e){return this.translator?.translate(...e)}exists(...e){return this.translator?.exists(...e)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e,t={}){if(!this.isInitialized)return this.logger.warn(`hasLoadedNamespace: i18next was not initialized`,this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn(`hasLoadedNamespace: i18n.languages were undefined or empty`,this.languages),!1;let n=t.lng||this.resolvedLanguage||this.languages[0],r=this.options?this.options.fallbackLng:!1,i=this.languages[this.languages.length-1];if(n.toLowerCase()===`cimode`)return!0;let a=(e,t)=>{let n=this.services.backendConnector.state[`${e}|${t}`];return n===-1||n===0||n===2};if(t.precheck){let e=t.precheck(this,a);if(e!==void 0)return e}return!!(this.hasResourceBundle(n,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||a(n,e)&&(!r||a(i,e)))}loadNamespaces(e,t){let n=FS();return this.options.ns?(Q(e)&&(e=[e]),e.forEach(e=>{this.options.ns.includes(e)||this.options.ns.push(e)}),this.loadResources(e=>{n.resolve(),t&&t(e)}),n):(t&&t(),Promise.resolve())}loadLanguages(e,t){let n=FS();Q(e)&&(e=[e]);let r=this.options.preload||[],i=e.filter(e=>!r.includes(e)&&this.services.languageUtils.isSupportedCode(e));return i.length?(this.options.preload=r.concat(i),this.loadResources(e=>{n.resolve(),t&&t(e)}),n):(t&&t(),Promise.resolve())}dir(e){if(e||=this.resolvedLanguage||(this.languages?.length>0?this.languages[0]:this.language),!e)return`rtl`;try{let t=new Intl.Locale(e);if(t&&t.getTextInfo){let e=t.getTextInfo();if(e&&e.direction)return e.direction}}catch{}let t=`ar.shu.sqr.ssh.xaa.yhd.yud.aao.abh.abv.acm.acq.acw.acx.acy.adf.ads.aeb.aec.afb.ajp.apc.apd.arb.arq.ars.ary.arz.auz.avl.ayh.ayl.ayn.ayp.bbz.pga.he.iw.ps.pbt.pbu.pst.prp.prd.ug.ur.ydd.yds.yih.ji.yi.hbo.men.xmn.fa.jpr.peo.pes.prs.dv.sam.ckb`.split(`.`),n=this.services?.languageUtils||new fC(TC());return e.toLowerCase().indexOf(`-latn`)>1?`ltr`:t.includes(n.getLanguagePartFromCode(e))||e.toLowerCase().indexOf(`-arab`)>1?`rtl`:`ltr`}static createInstance(t={},n){let r=new e(t,n);return r.createInstance=e.createInstance,r}cloneInstance(t={},n=DC){let r=t.forkResourceStore;r&&delete t.forkResourceStore;let i={...this.options,...t,isClone:!0},a=new e(i);if((t.debug!==void 0||t.prefix!==void 0)&&(a.logger=a.logger.clone(t)),[`store`,`services`,`language`].forEach(e=>{a[e]=this[e]}),a.services={...this.services},a.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},r&&(a.store=new aC(Object.keys(this.store.data).reduce((e,t)=>(e[t]={...this.store.data[t]},e[t]=Object.keys(e[t]).reduce((n,r)=>(n[r]={...e[t][r]},n),e[t]),e),{}),i),a.services.resourceStore=a.store),t.interpolation){let e={...TC().interpolation,...this.options.interpolation,...t.interpolation},n={...i,interpolation:e};a.services.interpolator=new vC(n)}return a.translator=new dC(a.services,i),a.translator.on(`*`,(e,...t)=>{a.emit(e,...t)}),a.init(i,n),a.translator.options=i,a.translator.backendConnector.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},a}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}.createInstance();kC.createInstance,kC.dir,kC.init,kC.loadResources,kC.reloadResources,kC.use,kC.changeLanguage,kC.getFixedT,kC.t,kC.exists,kC.setDefaultNamespace,kC.hasLoadedNamespace,kC.loadNamespaces,kC.loadLanguages;var AC=(e,t,n,r)=>{let i=[n,{code:t,...r||{}}];if(e?.services?.logger?.forward)return e.services.logger.forward(i,`warn`,`react-i18next::`,!0);LC(i[0])&&(i[0]=`react-i18next:: ${i[0]}`),e?.services?.logger?.warn?e.services.logger.warn(...i):console?.warn&&console.warn(...i)},jC={},MC=(e,t,n,r)=>{LC(n)&&jC[n]||(LC(n)&&(jC[n]=new Date),AC(e,t,n,r))},NC=(e,t)=>()=>{if(e.isInitialized)t();else{let n=()=>{setTimeout(()=>{e.off(`initialized`,n)},0),t()};e.on(`initialized`,n)}},PC=(e,t,n)=>{e.loadNamespaces(t,NC(e,n))},FC=(e,t,n,r)=>{if(LC(n)&&(n=[n]),e.options.preload&&e.options.preload.indexOf(t)>-1)return PC(e,n,r);n.forEach(t=>{e.options.ns.indexOf(t)<0&&e.options.ns.push(t)}),e.loadLanguages(t,NC(e,r))},IC=(e,t,n={})=>!t.languages||!t.languages.length?(MC(t,`NO_LANGUAGES`,`i18n.languages were undefined or empty`,{languages:t.languages}),!0):t.hasLoadedNamespace(e,{lng:n.lng,precheck:(t,r)=>{if(n.bindI18n&&n.bindI18n.indexOf(`languageChanging`)>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!r(t.isLanguageChangingTo,e))return!1}}),LC=e=>typeof e==`string`,RC=e=>typeof e==`object`&&!!e,zC=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,BC={"&":`&`,"&":`&`,"<":`<`,"<":`<`,">":`>`,">":`>`,"'":`'`,"'":`'`,""":`"`,""":`"`," ":` `," ":` `,"©":`©`,"©":`©`,"®":`®`,"®":`®`,"…":`…`,"…":`…`,"/":`/`,"/":`/`},VC=e=>BC[e],HC={bindI18n:`languageChanged`,bindI18nStore:``,transEmptyNodeValue:``,transSupportBasicHtmlNodes:!0,transWrapTextNodes:``,transKeepBasicHtmlNodesFor:[`br`,`strong`,`i`,`p`],useSuspense:!0,unescape:e=>e.replace(zC,VC),transDefaultProps:void 0},UC=(e={})=>{HC={...HC,...e}},WC=()=>HC,GC,KC=e=>{GC=e},qC=()=>GC,JC={type:`3rdParty`,init(e){UC(e.options.react),KC(e)}},YC=(0,y.createContext)(),XC=class{constructor(){this.usedNamespaces={}}addUsedNamespaces(e){e.forEach(e=>{this.usedNamespaces[e]||(this.usedNamespaces[e]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}},ZC=s((e=>{var t=p();function n(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var r=typeof Object.is==`function`?Object.is:n,i=t.useState,a=t.useEffect,o=t.useLayoutEffect,s=t.useDebugValue;function c(e,t){var n=t(),r=i({inst:{value:n,getSnapshot:t}}),c=r[0].inst,u=r[1];return o(function(){c.value=n,c.getSnapshot=t,l(c)&&u({inst:c})},[e,n,t]),a(function(){return l(c)&&u({inst:c}),e(function(){l(c)&&u({inst:c})})},[e]),s(n),n}function l(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch{return!0}}function u(e,t){return t()}var d=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?u:c;e.useSyncExternalStore=t.useSyncExternalStore===void 0?d:t.useSyncExternalStore})),QC=s(((e,t)=>{t.exports=ZC()}))(),$C={t:(e,t)=>{if(LC(t))return t;if(RC(t)&&LC(t.defaultValue))return t.defaultValue;if(typeof e==`function`)return``;if(Array.isArray(e)){let t=e[e.length-1];return typeof t==`function`?``:t}return e},ready:!1},ew=()=>()=>{},tw=(e,t={})=>{let{i18n:n}=t,{i18n:r,defaultNS:i}=(0,y.useContext)(YC)||{},a=n||r||qC();a&&!a.reportNamespaces&&(a.reportNamespaces=new XC),a||MC(a,`NO_I18NEXT_INSTANCE`,`useTranslation: You will need to pass in an i18next instance by using initReactI18next or by passing it via props or context. In monorepo setups, make sure there is only one instance of react-i18next.`);let o=(0,y.useMemo)(()=>({...WC(),...a?.options?.react,...t}),[a,t]),{useSuspense:s,keyPrefix:c}=o,l=e||i||a?.options?.defaultNS,u=LC(l)?[l]:l||[`translation`],d=(0,y.useMemo)(()=>u,u);a?.reportNamespaces?.addUsedNamespaces?.(d);let f=(0,y.useRef)(0),p=(0,y.useCallback)(e=>{if(!a)return ew;let{bindI18n:t,bindI18nStore:n}=o,r=()=>{f.current+=1,e()};return t&&a.on(t,r),n&&a.store.on(n,r),()=>{t&&t.split(` `).forEach(e=>a.off(e,r)),n&&n.split(` `).forEach(e=>a.store.off(e,r))}},[a,o]),m=(0,y.useRef)(),h=(0,y.useCallback)(()=>{if(!a)return $C;let e=!!(a.isInitialized||a.initializedStoreOnce)&&d.every(e=>IC(e,a,o)),n=t.lng||a.language,r=f.current,i=m.current;if(i&&i.ready===e&&i.lng===n&&i.keyPrefix===c&&i.revision===r)return i;let s={t:a.getFixedT(n,o.nsMode===`fallback`?d:d[0],c,{scopeNs:d}),ready:e,lng:n,keyPrefix:c,revision:r};return m.current=s,s},[a,d,c,o,t.lng]),[g,_]=(0,y.useState)(0),{t:v,ready:b}=(0,QC.useSyncExternalStore)(p,h,h);(0,y.useEffect)(()=>{if(a&&!b&&!s){let e=()=>_(e=>e+1);t.lng?FC(a,t.lng,d,e):PC(a,d,e)}},[a,t.lng,d,b,s,g]);let x=a||{},S=(0,y.useRef)(null),C=(0,y.useRef)(),w=e=>`${e.language}|${e.resolvedLanguage}|${e.languages?.join(`,`)}`,T=e=>{let t=Object.getOwnPropertyDescriptors(e);t.__original&&delete t.__original;let n=Object.create(Object.getPrototypeOf(e),t);if(!Object.prototype.hasOwnProperty.call(n,`__original`))try{Object.defineProperty(n,"__original",{value:e,writable:!1,enumerable:!1,configurable:!1})}catch{}return n},E=(0,y.useMemo)(()=>{let e=x,t=e&&w(e),n=e;e&&(S.current&&S.current.__original===e&&C.current===t?n=S.current:(n=T(e),S.current=n,C.current=t));let r=!b&&!s?(...e)=>(MC(a,`USE_T_BEFORE_READY`,`useTranslation: t was called before ready. When using useSuspense: false, make sure to check the ready flag before using t.`),v(...e)):v,i=[r,n,b];return i.t=r,i.i18n=n,i.ready=b,i},[v,x,b,x.resolvedLanguage,x.language,x.languages]);if(a&&s&&!b){let e=!1;try{e=!1}catch{}throw e&&MC(a,`SUSPENDED_WHILE_LOADING`,`useTranslation: suspended while translations are loading (useSuspense is true by default). Add a <Suspense> boundary above this component, or set react.useSuspense: false in the i18next init options. https://react.i18next.com/latest/usetranslation-hook`),new Promise(e=>{let n=()=>e();t.lng?FC(a,t.lng,d,n):PC(a,d,n)})}return E},nw=`/api`,rw=`time-tracker.session`,iw=class extends Error{status;code;detail;constructor(e,t,n){super(`${e} ${t}${n?`: ${n}`:``}`),this.name=`ApiError`,this.status=e,this.code=t,this.detail=n}};function aw(e={}){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))r!=null&&t.set(n,String(r));let n=t.toString();return n?`?${n}`:``}function ow(e=window.localStorage){function t(e){try{let t=e.getItem(rw);if(!t)return null;let n=JSON.parse(t);return n?.user?n:null}catch{return null}}let n=t(e);function r(t){if(n=t,!t){e.removeItem(rw);return}e.setItem(rw,JSON.stringify(t))}async function i(e,t,i={}){let a={...i.headers??{}};i.body!==void 0&&(a[`content-type`]=`application/json`),!i.anonymous&&n&&(n.token&&(a[`x-session-token`]=n.token),a[`x-csrf-token`]=n.csrfToken);let o;try{o=await fetch(`${nw}${t}${aw(i.query)}`,{method:e,headers:a,body:i.body===void 0?void 0:JSON.stringify(i.body),credentials:`same-origin`})}catch(e){throw new iw(0,`network_error`,e instanceof Error?e.message:`network error`)}if(o.status===204)return;let s=await o.text(),c=s?JSON.parse(s):{};if(!o.ok){let e=typeof c.code==`string`?c.code:`unknown_error`,t=typeof c.detail==`string`?c.detail:void 0;throw o.status===401&&r(null),new iw(o.status,e,t)}return c}function a(e){let t=/filename\*?=(?:UTF-8'')?"?([^";]+)"?/i.exec(e??``);return t?decodeURIComponent(t[1]):null}async function o(e,t){let r={};n&&(n.token&&(r[`x-session-token`]=n.token),r[`x-csrf-token`]=n.csrfToken);let i;try{i=await fetch(`${nw}${e}${aw(t)}`,{headers:r,credentials:`same-origin`})}catch(e){throw new iw(0,`network_error`,e instanceof Error?e.message:`network error`)}if(!i.ok){let e=await i.json().catch(()=>({}));throw new iw(i.status,e.code??`unknown_error`,e.detail)}return{blob:await i.blob(),fileName:a(i.headers.get(`content-disposition`))??e.split(`/`).pop()??`download`}}async function s(e,t,i){let a={"content-type":`application/octet-stream`};n&&(n.token&&(a[`x-session-token`]=n.token),a[`x-csrf-token`]=n.csrfToken);let o;try{o=await fetch(`${nw}${e}${aw(i)}`,{method:`POST`,headers:a,body:t,credentials:`same-origin`})}catch(e){throw new iw(0,`network_error`,e instanceof Error?e.message:`network error`)}let s=await o.text(),c=s?JSON.parse(s):{};if(!o.ok){let e=typeof c.code==`string`?c.code:`unknown_error`,t=typeof c.detail==`string`?c.detail:void 0;throw o.status===401&&r(null),new iw(o.status,e,t)}return c}return{session:()=>n,streamUrl(){if(!n)return null;let e=`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}${nw}/stream`;return n.token?`${e}?token=${encodeURIComponent(n.token)}`:e},forget:()=>r(null),terminalStatus:()=>i(`GET`,`/terminal/status`,{anonymous:!0}),terminalSession:e=>i(`POST`,`/terminal/session`,{body:{deviceToken:e},anonymous:!0}),terminalUsers:e=>i(`GET`,`/terminal/users`,{query:{terminalSession:e},anonymous:!0}),terminalPunch:e=>i(`POST`,`/terminal/punch`,{body:e,anonymous:!0}),terminalHeartbeat:e=>i(`POST`,`/terminal/heartbeat`,{body:{terminalSession:e},anonymous:!0}),async login(e,t){let n=await i(`POST`,`/auth/login`,{body:{login:e,password:t},anonymous:!0}),a={csrfToken:n.csrfToken,expiresAt:n.expiresAt,user:n.user};return r(a),a},async logout(){if(n)try{await i(`POST`,`/auth/logout`)}catch{}r(null)},async me(){let e=await i(`GET`,`/auth/me`);return e.user&&r({csrfToken:e.csrfToken??n?.csrfToken??``,expiresAt:e.expiresAt??n?.expiresAt??0,user:e.user,...n?.token?{token:n.token}:{}}),e},async changePassword(e){try{await i(`POST`,`/auth/password`,{body:{password:e}})}finally{r(null)}},punch:e=>i(`POST`,e?.quick?`/punch/quick`:`/punch`,{body:{...e?.tsUtc?{tsUtc:e.tsUtc}:{},...e?.note?{note:e.note}:{},...e?.idempotencyKey?{idempotencyKey:e.idempotencyKey}:{}}}),status:()=>i(`GET`,`/punch/status`),days:(e,t,n)=>i(`GET`,`/aggregates/day`,{query:{from:e,to:t,userId:n}}),month:(e,t,n)=>i(`GET`,`/aggregates/month`,{query:{year:e,month:t,userId:n}}),months:(e,t)=>i(`GET`,`/aggregates/month`,{query:{year:e,userId:t}}),year:(e,t)=>i(`GET`,`/aggregates/year`,{query:{year:e,userId:t}}),payouts:e=>i(`GET`,`/payouts`,{query:{year:e,month:``}}),async entries(e,t,n){return(await i(`GET`,`/entries`,{query:{from:e,to:t,userId:n}})).entries??[]},async createEntry(e){return i(`POST`,`/entries`,{query:{userId:e.userId},body:{tsUtc:e.tsUtc,direction:e.direction,note:e.note,reason:e.reason}})},async updateEntry(e,t){return i(`PATCH`,`/entries/${e}`,{body:t})},async deleteEntry(e,t){await i(`DELETE`,`/entries/${e}`,{body:{reason:t}})},async entryAudit(e){return(await i(`GET`,`/entries/${e}/audit`)).audit??[]},async absences(e){return(await i(`GET`,`/absences`,{query:{year:e}})).absences??[]},async absenceTypes(){return(await i(`GET`,`/absence-types`)).types??[]},async createAbsence(e){return(await i(`POST`,`/absences`,{body:e})).absence},sync:e=>i(`POST`,`/entries/sync`,{body:{punches:e}}),async conflicts(){return(await i(`GET`,`/entries/conflicts`)).conflicts??[]},resolve:(e,t,n)=>i(`POST`,`/entries/${e}/resolve`,{body:{action:t,...n?{reason:n}:{}}}),downloadReport:(e,t,n,r)=>o(`/reports/${e}`,{year:t,month:n,userId:r}),async users(e=!1){return(await i(`GET`,`/users`,{query:{includeInactive:e?`true`:`false`}})).users??[]},async roles(){return(await i(`GET`,`/roles`)).roles??[]},async createUser(e){return(await i(`POST`,`/users`,{body:e})).user},async updateUser(e,t){return(await i(`PATCH`,`/users/${e}`,{body:t})).user},async pauseRules(){return(await i(`GET`,`/pause-rules`)).pauseRules??[]},async savePauseRules(e){return(await i(`PUT`,`/pause-rules`,{body:{pauseRules:e}})).pauseRules??[]},async userPauseRules(e){return(await i(`GET`,`/users/${e}/pause-rules`)).pauseRules??[]},async saveUserPauseRules(e,t){return(await i(`PUT`,`/users/${e}/pause-rules`,{body:{pauseRules:t}})).pauseRules??[]},async workProfile(e){return(await i(`GET`,`/users/${e}/profile`)).profile},async saveWorkProfile(e,t){return(await i(`PUT`,`/users/${e}/profile`,{body:t})).profile},async setPin(e,t){await i(`POST`,`/users/${e}/pin`,{body:{pin:t}})},async terminals(){return(await i(`GET`,`/terminals`)).terminals??[]},async createTerminal(e){return i(`POST`,`/terminals`,{body:e})},async setTerminalUsers(e,t){return(await i(`PUT`,`/terminals/${e}/users`,{body:{userIds:t}})).terminal},async revokeTerminal(e){await i(`DELETE`,`/terminals/${e}`)},async settings(){return(await i(`GET`,`/settings`)).settings??{}},async branding(){return i(`GET`,`/branding`,{anonymous:!0})},async updateSettings(e){return(await i(`PUT`,`/settings`,{body:e})).settings??{}},async holidays(e,t){return(await i(`GET`,`/holidays`,{query:{year:e,...t?{region:t}:{}}})).holidays??[]},async createHoliday(e){return(await i(`POST`,`/holidays`,{body:e})).holiday},async deleteHoliday(e){await i(`DELETE`,`/holidays/${e}`)},async rfidTags(){return(await i(`GET`,`/rfid/tags`)).tags??[]},async triggerRules(){return(await i(`GET`,`/trigger-rules`)).triggerRules??[]},async saveTriggerRules(e){return(await i(`PUT`,`/trigger-rules`,{body:{triggerRules:e}})).triggerRules??[]},async automationRules(){return(await i(`GET`,`/automation-rules`)).automationRules??[]},async saveAutomationRules(e){return(await i(`PUT`,`/automation-rules`,{body:{automationRules:e}})).automationRules??[]},async automationRuns(){return(await i(`GET`,`/automation-rules/runs`)).runs??[]},async createTag(e){return i(`POST`,`/rfid/tags`,{body:e})},async updateTag(e,t){return i(`PATCH`,`/rfid/tags/${e}`,{body:t})},async reissueTagLink(e,t={}){return i(`POST`,`/rfid/tags/${e}/link`,{body:t})},async deleteTagPermanently(e){await i(`DELETE`,`/rfid/tags/${e}/permanent`)},async deleteTag(e){await i(`DELETE`,`/rfid/tags/${e}`)},async statistics(e,t,n){return i(`GET`,`/reports/statistics`,{query:{from:e,to:t,...n?{userId:n}:{}}})},async scanTag(e){return i(`POST`,`/rfid/scan`,{body:{token:e},anonymous:!0})},backups:()=>i(`GET`,`/backup`),downloadBackup:e=>o(`/backup/${encodeURIComponent(e)}`,{}),restoreBackup:(e,t)=>i(`POST`,`/backup/restore`,{body:{name:e,...t?{reason:t}:{}}}),createBackup:()=>i(`POST`,`/backup`),deleteBackup:e=>i(`DELETE`,`/backup/${encodeURIComponent(e)}`),uploadBackup:(e,t)=>s(`/backup/restore`,e,{name:e.name,reason:t})}}var $=ow();function sw(e){let t=e<0?`-`:``,n=Math.abs(Math.round(e));return`${t}${Math.floor(n/60)}:${String(n%60).padStart(2,`0`)}`}function cw(e,t,n){return e===null?``:new Intl.DateTimeFormat(n,{timeZone:t,hour:`2-digit`,minute:`2-digit`}).format(new Date(e*1e3))}function lw(e,t){return new Intl.DateTimeFormat(t,{dateStyle:`medium`,timeZone:`UTC`}).format(new Date(`${e}T12:00:00Z`))}function uw(e,t){return new Intl.DateTimeFormat(t,{weekday:`short`,day:`2-digit`,month:`2-digit`,timeZone:`UTC`}).format(new Date(`${e}T12:00:00Z`))}var dw={color:null,logoUrl:null,backgroundUrl:null},fw=[`#ffffff`,`#f5f7fa`,`#eef2f7`,`#e3f1f5`,`#e8f1e9`,`#eef1e4`,`#eae6f7`,`#f3ecf7`,`#f7f0f5`,`#fdf3e3`,`#f6ece3`,`#fdecea`,`#d9e0ea`,`#c8d6e6`,`#b7cbe2`,`#c6d8c9`,`#b9d3bd`,`#d6c8e6`,`#e2d3be`,`#dcc4c2`];function pw(e,t){let n=e.trim().replace(/^#/,``),r=n.length===3?[...n].map(e=>e+e).join(``):n;if(!/^[0-9a-f]{6}$/i.test(r))return e;let i=Number.parseInt(r,16);return`rgba(${i>>16&255}, ${i>>8&255}, ${i&255}, ${t})`}var mw=(0,y.createContext)(dw);function hw({children:e}){let t=Yl({queryKey:[`branding`],queryFn:()=>$.branding(),staleTime:6e5});return(0,N.jsx)(mw.Provider,{value:t.data??dw,children:e})}function gw(){return(0,y.useContext)(mw)}function _w(e){if(e.backgroundUrl){let t=pw(e.color??`#ffffff`,.75);return{backgroundImage:`linear-gradient(${t}, ${t}), url("${e.backgroundUrl}")`,backgroundSize:`cover`,backgroundPosition:`center`,backgroundColor:e.color??void 0}}return e.color?{backgroundColor:e.color}:{}}var vw=rp([(0,N.jsx)(`path`,{d:`M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2M12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8`},`0`),(0,N.jsx)(`path`,{d:`M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z`},`1`)],`AccessTime`),yw=rp((0,N.jsx)(`path`,{d:`M4 9h4v11H4zm12 4h4v7h-4zm-6-9h4v16h-4z`}),`BarChart`),bw=rp([(0,N.jsx)(`path`,{d:`M21 8c-1.45 0-2.26 1.44-1.93 2.51l-3.55 3.56c-.3-.09-.74-.09-1.04 0l-2.55-2.55C12.27 10.45 11.46 9 10 9c-1.45 0-2.27 1.44-1.93 2.52l-4.56 4.55C2.44 15.74 1 16.55 1 18c0 1.1.9 2 2 2 1.45 0 2.26-1.44 1.93-2.51l4.55-4.56c.3.09.74.09 1.04 0l2.55 2.55C12.73 16.55 13.54 18 15 18c1.45 0 2.27-1.44 1.93-2.52l3.56-3.55c1.07.33 2.51-.48 2.51-1.93 0-1.1-.9-2-2-2`},`0`),(0,N.jsx)(`path`,{d:`m15 9 .94-2.07L18 6l-2.06-.93L15 3l-.92 2.07L12 6l2.08.93zM3.5 11 4 9l2-.5L4 8l-.5-2L3 8l-2 .5L3 9z`},`1`)],`Insights`),xw=rp((0,N.jsx)(`path`,{d:`m13.127 14.56 1.43-1.43 6.44 6.443L19.57 21zm4.293-5.73 2.86-2.86c-3.95-3.95-10.35-3.96-14.3-.02 3.93-1.3 8.31-.25 11.44 2.88M5.95 5.98c-3.94 3.95-3.93 10.35.02 14.3l2.86-2.86C5.7 14.29 4.65 9.91 5.95 5.98m.02-.02-.01.01c-.38 3.01 1.17 6.88 4.3 10.02l5.73-5.73c-3.13-3.13-7.01-4.68-10.02-4.3`}),`BeachAccess`),Sw=rp((0,N.jsx)(`path`,{d:`M19 4h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 16H5V10h14zM9 14H7v-2h2zm4 0h-2v-2h2zm4 0h-2v-2h2zm-8 4H7v-2h2zm4 0h-2v-2h2zm4 0h-2v-2h2z`}),`CalendarMonth`),Cw=rp((0,N.jsx)(`path`,{d:`M19.35 10.04C18.67 6.59 15.64 4 12 4c-1.48 0-2.85.43-4.01 1.17l1.46 1.46C10.21 6.23 11.08 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3 0 1.13-.64 2.11-1.56 2.62l1.45 1.45C23.16 18.16 24 16.68 24 15c0-2.64-2.05-4.78-4.65-4.96M3 5.27l2.75 2.74C2.56 8.15 0 10.77 0 14c0 3.31 2.69 6 6 6h11.73l2 2L21 20.73 4.27 4zM7.73 10l8 8H6c-2.21 0-4-1.79-4-4s1.79-4 4-4z`}),`CloudOff`),ww=rp((0,N.jsx)(`path`,{d:`M3 18h18v-2H3zm0-5h18v-2H3zm0-7v2h18V6z`}),`Menu`),Tw=rp((0,N.jsx)(`path`,{d:`M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8m0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4z`}),`Sync`),Ew={"app.title":`Time tracking`,"app.offline":`Offline – punches are queued`,"app.online":`Connected`,"nav.dashboard":`Punch`,"nav.month":`Month`,"nav.reports":`Reports`,"nav.absences":`Absences`,"nav.sync":`Sync`,"nav.profile":`Profile`,"nav.logout":`Sign out`,"nav.menu":`Menu`,"login.title":`Sign in`,"login.login":`User name`,"login.password":`Password`,"login.submit":`Sign in`,"login.failed":`Sign in failed`,"error.invalid_credentials":`User name or password is not correct.`,"error.locked_out":`Too many failed attempts. Please try again later.`,"error.network_error":`The server is not reachable.`,"error.permission_denied":`You are not allowed to do this.`,"error.no_session":`Your session has expired, please sign in again.`,"error.session_expired":`Your session has expired, please sign in again.`,"error.csrf_rejected":`The request was rejected for security reasons, please try again.`,"error.user_inactive":`This account is deactivated.`,"error.not_found":`Not found.`,"error.bad_request":`The input was not accepted.`,"error.revision_conflict":`The punch was changed in the meantime, please reload.`,"error.conflict":`The change conflicts with existing data.`,"error.report_font_missing":`This report needs a Unicode font (report_font_path).`,"error.unknown_error":`Unexpected error.`,"punch.now":`Punch`,"punch.in":`Clock in`,"punch.out":`Clock out`,"punch.quick":`Quick punch`,"punch.open":`Clocked in since {{time}}`,"punch.closed":`Not clocked in`,"punch.last":`Last punch {{time}}`,"punch.worked":`Worked today`,"punch.target":`Target today`,"punch.balance":`Balance today`,"punch.queued":`Saved offline – it will be sent automatically`,"punch.sent":`Punch stored ({{time}})`,"punch.note":`Note`,"month.title":`Month`,"month.previous":`Previous month`,"month.next":`Next month`,"month.worked":`Worked`,"month.target":`Target`,"month.balance":`Balance`,"error.edit_window_closed":`Outside the edit window`,"admin.profile.pauseRules":`Own break rules`,"admin.profile.pauseRulesHint":`Rules for this employee only: they replace the company rule with the same “from minutes”. Without own rules the company table applies.`,"report.csv":`Raw data (CSV)`,"month.edit":`Correct`,"month.editTitle":`Correct punches · {{date}}`,"month.editHint":`Only inside the edit window - older days are changed by the administration.`,"month.time":`Time`,"month.direction":`Direction`,"month.directionIn":`In`,"month.directionOut":`Out`,"month.addPunch":`Add punch`,"month.pause":`Break`,"month.paidBreak":`of which paid`,"month.open":`open`,"month.holiday":`Holiday`,"month.absence":`Absence`,"month.empty":`No days in this month.`,"month.months":`Months of the year`,"report.xls":`Excel`,"report.pdf":`PDF`,"report.failed":`The statement could not be created.`,"reports.title":`Reports`,"reports.year":`Year`,"reports.yearTotals":`Year totals`,"reports.monthTotals":`Month totals`,"reports.overtime":`Overtime`,"reports.vacation":`Vacation (taken / entitlement)`,"reports.paidOut":`Paid out: {{minutes}}`,"reports.empty":`No data for this period.`,"absences.title":`Absences`,"absences.type":`Type`,"absences.from":`From`,"absences.to":`To`,"absences.status":`Status`,"absences.portion":`Day share`,"absences.typeHint":`Code of the absence type, e.g. F for vacation`,"absences.create":`Request absence`,"absences.created":`Absence requested.`,"absences.empty":`No absences in this year.`,"sync.title":`Synchronisation`,"sync.pending":`{{count}} punch(es) waiting`,"sync.none":`Nothing to send.`,"sync.flush":`Send now`,"sync.done":`Sent: {{accepted}}, duplicates: {{duplicates}}, conflicts: {{conflicts}}`,"sync.conflicts":`Open conflicts`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.accept":`Keep server value`,"sync.dismiss":`Discard`,"sync.resolved":`Conflict resolved.`,"sync.empty":`No open conflicts.`,"sync.permission":`You are not allowed to resolve conflicts.`,"profile.title":`Profile`,"profile.user":`User`,"profile.roles":`Permissions`,"profile.language":`Language`,"profile.newPassword":`New password`,"profile.changePassword":`Change password`,"profile.changed":`Password changed, please sign in again.`,"admin.title":`Administration`,"admin.forbidden":`You are not allowed to open the administration.`,"admin.users":`Employees`,"admin.backup":`Backups`,"admin.user.login":`Login`,"admin.user.name":`Name`,"admin.user.password":`Password`,"admin.user.passwordHint":`At least 8 characters with upper and lower case and digits.`,"admin.user.roles":`Roles`,"admin.user.active":`Active`,"admin.user.inactive":`Deactivated`,"admin.user.create":`Add employee`,"admin.user.pin":`PIN`,"admin.user.pinTitle":`Badge PIN for {{name}}`,"admin.user.newPin":`New PIN`,"admin.user.pinHint":`4 to 8 digits for the terminal`,"admin.user.empty":`No employees yet.`,"admin.backup.create":`Create backup now`,"admin.backup.upload":`Upload backup`,"admin.backup.uploadHint":`Pick a downloaded backup (.sqlite) - it is checked and applied on the next start.`,"admin.backup.delete":`Delete`,"admin.backup.deleteTitle":`Delete backup`,"admin.backup.deleteConfirm":`The backup {{name}} is deleted. This cannot be undone.`,"admin.backup.empty":`No backups yet.`,"admin.backup.retention":`Backups older than {{days}} days are removed, the newest one is always kept.`,"admin.backup.done":`Backup {{name}} written, {{removed}} old file(s) removed.`,"common.save":`Save`,"common.cancel":`Cancel`,"common.loading":`Loading…`,"common.retry":`Retry`,"common.close":`Close`,"common.refresh":`Refresh`,"common.none":`–`,"terminal.title":`Terminal`,"terminal.deviceToken":`Device token`,"terminal.connect":`Connect`,"terminal.badge":`Badge`,"terminal.noPin":`No PIN is needed on this terminal.`,"terminal.pin":`PIN`,"terminal.select":`Choose your name`,"terminal.disabled":`The terminal is switched off in the adapter settings.`,"admin.terminals":`Terminals`,"admin.terminal.name":`Name`,"admin.terminal.location":`Location`,"admin.terminal.pinRequired":`Employees need their PIN`,"admin.terminal.create":`Create terminal`,"admin.terminal.tokenOnce":`Copy the device token now — it is stored as a hash and shown only once:`,"admin.terminal.url":`Open this address on the kiosk device:`,"admin.terminal.revoke":`Revoke`,"admin.terminal.revoked":`revoked`,"admin.terminal.users":`Employees`,"admin.terminal.usersHint":`Leave everything off to show all employees on this terminal.`,"admin.terminal.usersAll":`all employees`,"admin.terminal.empty":`No terminal created yet.`,"admin.terminal.confirmRevoke":`Revoke “{{name}}”? Its device token stops working immediately.`,"admin.settings":`Settings`,"admin.settings.fontPath":`Unicode font file for PDF statements (.ttf/.otf)`,"admin.user.profile":`Work profile`,"admin.user.profileTitle":`Work profile · {{name}}`,"admin.profile.percent":`Employment level (%)`,"admin.profile.weeklyHours":`Weekly hours at 100 %`,"admin.profile.workdays":`Working days`,"admin.profile.overtimeModel":`Overtime model`,"admin.profile.model.monthly":`Monthly`,"admin.profile.model.yearly":`Yearly`,"admin.profile.model.cumulative":`Cumulative`,"admin.profile.vacationPerYear":`Vacation days per year`,"admin.profile.vacationCarryover":`Vacation carried over (days)`,"admin.profile.overtimeCarryover":`Overtime carried over (hours)`,"admin.profile.vorholzeitPerYear":`“Vorholzeit” per year (hours)`,"admin.profile.pausePaid":`Paid break minutes per day`,"admin.profile.pausePaidHint":`That many minutes of the break count as working time (0 = the break is not paid).`,"admin.settings.pauseMode":`Breaks`,"admin.settings.pauseModeTitle":`Break rule`,"admin.settings.pauseModeHint":`How the break of a day is determined.`,"admin.settings.pauseRules":`Break rules`,"admin.settings.pauseRulesHint":`Applies to days without a punched break: from the given block length (first to last punch of a block) the minutes are deducted.`,"admin.settings.pauseFrom":`from minutes`,"admin.settings.pauseTo":`to minutes (empty = no end)`,"admin.settings.pauseMinutes":`break minutes`,"admin.settings.pauseActive":`Rule active`,"admin.settings.pauseAdd":`Add rule`,"admin.settings.pauseSave":`Save break rules`,"admin.settings.pauseMode.auto":`Punched break, otherwise the rules`,"admin.settings.pauseMode.punched":`Only punched breaks`,"admin.settings.pauseMode.staffel":`Only the graduated rules`,"admin.settings.fontPathHint":`Needed for Russian, Ukrainian and Chinese; empty = built-in fonts, which only cover Latin-1.`,"admin.settings.advanced":`All instance settings (technical names, 1/0 for switches)`,"admin.settings.setting.edit_window_days":`Edit window (days)`,"admin.settings.setting.quick_round_minutes":`Quick rounding (min)`,"admin.settings.setting.absence_calc_until_today":`Absences to today`,"admin.settings.setting.absence_deduct_worktime":`Deduct absences`,"admin.settings.setting.print_limit_days":`Print limit (days)`,"admin.settings.setting.holiday_country":`Holiday country`,"admin.settings.setting.default_language":`Default language`,"admin.settings.setting.session_ttl_minutes":`Session (minutes)`,"admin.settings.setting.backup_retention_days":`Keep backups (days)`,"admin.settings.setting.attendance_list_visible":`Attendance list`,"admin.settings.setting.timezone":`Time zone`,"admin.settings.saved":`Settings saved.`,"admin.holidays":`Public holidays`,"admin.holiday.date":`Date (YYYY-MM-DD)`,"admin.holiday.name":`Name`,"holiday.newYear":`New Year`,"holiday.epiphany":`Epiphany`,"holiday.goodFriday":`Good Friday`,"holiday.easterMonday":`Easter Monday`,"holiday.labourDay":`Labour Day`,"holiday.ascension":`Ascension Day`,"holiday.whitMonday":`Whit Monday`,"holiday.corpusChristi":`Corpus Christi`,"holiday.nationalDay":`National Day`,"holiday.germanUnity":`German Unity Day`,"holiday.assumption":`Assumption Day`,"holiday.allSaints":`All Saints' Day`,"holiday.immaculateConception":`Immaculate Conception`,"holiday.christmas":`Christmas Day`,"holiday.boxingDay":`Boxing Day`,"admin.holiday.add":`Add holiday`,"admin.holiday.year":`Year`,"admin.holiday.region":`Region (optional)`,"admin.holiday.empty":`No holiday recorded for this year.`,"admin.tags":`Badges (RFID/NFC)`,"admin.tag.label":`Label`,"admin.tag.user":`Employee`,"admin.tag.create":`Create badge`,"admin.tag.linkOnce":`Write this link onto the tag or open it on the phone:`,"admin.tag.delete":`Delete`,"admin.tag.active":`active`,"admin.tag.expired":`expired`,"admin.tag.revoked":`revoked`,"admin.tag.lastUsed":`last used`,"admin.tag.remove":`Remove permanently`,"admin.tag.edit":`Edit`,"admin.tag.reissue":`New link`,"admin.tag.editTitle":`Edit badge`,"admin.tag.editHint":`A different employee or a new validity issues a new link — the link handed out before stops working immediately.`,"admin.tag.validityDays":`Validity (days)`,"admin.tag.oldLinkDead":`The link handed out before no longer works.`,"admin.tag.qrAlt":`QR code of the badge link`,"admin.tag.empty":`No badge created yet.`,"nav.statistics":`Statistics`,"statistics.from":`From`,"statistics.to":`To`,"statistics.employee":`Employee`,"statistics.worked":`Worked`,"statistics.target":`Target`,"statistics.balance":`Balance`,"statistics.openDays":`Open days`,"statistics.totals":`All employees`,"scan.title":`Badge`,"scan.done":`Punched for {{name}} at {{time}}`,"scan.failed":`The badge could not be used: {{reason}}`,"presence.title":`Presence`,"presence.present":`Present`,"presence.absent":`Away`,"presence.tapPin":`Enter the PIN to clock in or out`,"presence.cancel":`Cancel`,"presence.updated":`{{name}} is now {{state}}`,"presence.disabled":`The kiosk terminal is switched off in the instance settings.`,"admin.user.photo":`Photo`,"admin.user.photoTitle":`Photo of {{name}}`,"admin.user.photoChoose":`Choose picture`,"admin.user.photoRemove":`Remove picture`,"admin.user.photoHint":`PNG, JPEG, WEBP or GIF up to 256 KB. Without a picture the placeholder is shown.`,"admin.corrections":`Time corrections`,"corrections.employee":`Employee`,"corrections.previous":`Previous month`,"corrections.next":`Next month`,"corrections.reason":`Reason`,"corrections.reasonHint":`Kept in the audit trail of the adapter`,"corrections.add":`Add punch or day`,"corrections.addTitle":`Add a punch`,"corrections.addHint":`Leave “clock out” empty when only one punch is missing`,"corrections.editTitle":`Change punch`,"corrections.remove":`Delete punch`,"corrections.date":`Date`,"corrections.from":`Clock in`,"corrections.to":`Clock out`,"corrections.direction":`Direction`,"corrections.note":`Note`,"corrections.empty":`No punches in this month`,"corrections.byAdmin":`added by the administration`,"corrections.history":`History`,"corrections.actor":`By`,"corrections.actionCreate":`Added`,"corrections.actionUpdate":`Changed`,"corrections.actionDelete":`Deleted`,"keypad.backspace":`Backspace`,"admin.settings.branding":`Company branding`,"admin.settings.brandingHint":`Logo, background picture and background colour of this installation. The sign in screen and the kiosk screens show them as well.`,"admin.settings.brandLogo":`Choose logo`,"admin.settings.brandBackground":`Choose background`,"admin.brand.imageResized":`Scaled down for display ({{size}}).`,"admin.brand.imageTooLarge":`Even scaled down the picture is still too big.`,"admin.brand.imageType":`Only PNG, JPEG, WEBP or GIF are possible.`,"admin.brand.imageUnreadable":`The picture could not be read.`,"admin.settings.brandColor":`Background colour`,"admin.settings.brandColorHint":`Hex value like #1a2b3c, empty for the default`,"admin.settings.brandColorPresets":`Suggested colours`,"admin.settings.brandColorDefault":`Default`,"admin.backup.download":`Download`,"admin.backup.restore":`Restore`,"admin.backup.restoreTitle":`Restore a backup`,"admin.backup.restoreConfirm":`The backup {{name}} is applied when the adapter starts next time; the current database is kept next to it as a file. Restart the instance afterwards.`,"admin.backup.pendingHint":`{{name}} is applied when the adapter starts next time ({{users}} employees, {{entries}} punches) - restart the instance.`,"error.backup_invalid":`That file is not a backup of this adapter.`,"admin.settings.brandImageRemove":`Remove picture`,"admin.settings.brandColorDefaultHint":`Resets the background colour and the background picture`,"admin.triggers":`Triggers (ioBroker)`,"admin.triggersHint":"A state of another adapter punches or sets the presence — a fingerprint reader, a button or a door contact. It fires only when the value changes. As the value you can write `toggle`: then every change fires (for example on and off again).","admin.trigger.label":`Label`,"admin.trigger.sourceState":`State`,"admin.trigger.mode":`Trigger`,"admin.trigger.modeCondition":`State carries the value`,"admin.trigger.modeUser":`Value is the employee`,"admin.trigger.condition":`Value`,"admin.trigger.user":`Employee`,"admin.trigger.action":`Action`,"admin.trigger.actionPunch":`Punch (in or out)`,"admin.trigger.actionQuickPunch":`Punch with quick rounding`,"admin.trigger.actionPresent":`Set to present`,"admin.trigger.actionAbsent":`Set to absent`,"admin.trigger.cooldown":`Cooldown (seconds)`,"admin.trigger.active":`Active`,"admin.trigger.add":`Add trigger`,"admin.trigger.lastFired":`Last fired`,"admin.trigger.empty":`No trigger yet.`,"admin.trigger.conditionHint":"Value, or `toggle` to fire on every change","admin.settings.automations":`Rules (automatic)`,"admin.settings.automationsHint":`What the adapter does on its own: clock out at the configured local time, report a missing punch or remind after working too long without a break. A rule runs at most once per employee and day.`,"admin.automation.kind":`Kind`,"admin.automation.kindClockIn":`Clock in automatically`,"admin.automation.kindClockOut":`Clock out automatically`,"admin.automation.kindMissingPunch":`Report a missing punch`,"admin.automation.kindBreakReminder":`Break reminder`,"admin.automation.at":`Time`,"admin.automation.atHint":`Local time of the employee`,"admin.automation.after":`After (minutes)`,"admin.automation.user":`Employee`,"admin.automation.allUsers":`all employees`,"admin.automation.add":`Add rule`,"admin.automation.empty":`No rule yet.`,"admin.automation.runs":`Last runs`,"admin.automation.weekdays":`Days of the week`,"admin.automation.repeat":`Repeat`,"admin.automation.repeatDay":`once a day`,"admin.automation.repeatWeek":`once a week`,"admin.settings.setting.report_font_path":`PDF font file`,"presence.workedToday":`Worked today`,"admin.user.workedTime":`Working time on the presence card`,"admin.user.workedTimeHint":`Shows the time worked today on the presence card (for example 1:23). Without a punch it reads 0:00; without this permission the card keeps present/absent and the name only.`,"admin.automation.save":`Save rules`,"admin.automation.edit":`Edit`,"admin.automation.editTitle":`Edit rule`,"admin.automation.newTitle":`New rule`},Dw={"app.title":`Zeiterfassung`,"app.offline":`Offline – Stempel werden zwischengespeichert`,"app.online":`Verbunden`,"nav.dashboard":`Stempeln`,"nav.month":`Monat`,"nav.reports":`Berichte`,"nav.absences":`Abwesenheiten`,"nav.sync":`Abgleich`,"nav.profile":`Profil`,"nav.logout":`Abmelden`,"nav.menu":`Menü`,"login.title":`Anmelden`,"login.login":`Benutzername`,"login.password":`Passwort`,"login.submit":`Anmelden`,"login.failed":`Anmeldung fehlgeschlagen`,"error.invalid_credentials":`Benutzername oder Passwort ist nicht korrekt.`,"error.locked_out":`Zu viele Fehlversuche. Bitte später erneut versuchen.`,"error.network_error":`Der Server ist nicht erreichbar.`,"error.permission_denied":`Dafür fehlt die Berechtigung.`,"error.no_session":`Die Sitzung ist abgelaufen, bitte neu anmelden.`,"error.session_expired":`Die Sitzung ist abgelaufen, bitte neu anmelden.`,"error.csrf_rejected":`Die Anfrage wurde aus Sicherheitsgründen abgelehnt, bitte erneut versuchen.`,"error.user_inactive":`Dieses Konto ist deaktiviert.`,"error.not_found":`Nicht gefunden.`,"error.bad_request":`Die Eingabe wurde nicht akzeptiert.`,"error.revision_conflict":`Der Stempel wurde zwischenzeitlich geändert, bitte neu laden.`,"error.conflict":`Die Änderung steht im Konflikt mit vorhandenen Daten.`,"error.report_font_missing":`Für diesen Bericht wird eine Unicode-Schrift benötigt (report_font_path).`,"error.unknown_error":`Unerwarteter Fehler.`,"punch.now":`Stempeln`,"punch.in":`Einstempeln`,"punch.out":`Ausstempeln`,"punch.quick":`Schnellstempeln`,"punch.open":`Eingestempelt seit {{time}}`,"punch.closed":`Nicht eingestempelt`,"punch.last":`Letzter Stempel {{time}}`,"punch.worked":`Heute gearbeitet`,"punch.target":`Soll heute`,"punch.balance":`Saldo heute`,"punch.queued":`Offline gespeichert – wird automatisch gesendet`,"punch.sent":`Stempel gespeichert ({{time}})`,"punch.note":`Notiz`,"month.title":`Monat`,"month.previous":`Voriger Monat`,"month.next":`Nächster Monat`,"month.worked":`Gearbeitet`,"month.target":`Soll`,"month.balance":`Saldo`,"error.edit_window_closed":`Außerhalb des Bearbeitungsfensters`,"admin.profile.pauseRules":`Eigene Pausenregeln`,"admin.profile.pauseRulesHint":`Regeln nur für diesen Mitarbeiter: sie ersetzen die Firmenregel mit demselben „ab Minuten“. Ohne eigene Regeln gilt die Firmenstaffel.`,"report.csv":`Rohdaten (CSV)`,"month.edit":`Korrigieren`,"month.editTitle":`Stempel korrigieren · {{date}}`,"month.editHint":`Nur innerhalb des Bearbeitungsfensters möglich - ältere Tage ändert die Verwaltung.`,"month.time":`Zeit`,"month.direction":`Richtung`,"month.directionIn":`Kommen`,"month.directionOut":`Gehen`,"month.addPunch":`Stempel hinzufügen`,"month.pause":`Pause`,"month.paidBreak":`davon bezahlt`,"month.open":`offen`,"month.holiday":`Feiertag`,"month.absence":`Abwesenheit`,"month.empty":`Keine Tage in diesem Monat.`,"month.months":`Monate des Jahres`,"report.xls":`Excel`,"report.pdf":`PDF`,"report.failed":`Der Nachweis konnte nicht erstellt werden.`,"reports.title":`Berichte`,"reports.year":`Jahr`,"reports.yearTotals":`Jahressumme`,"reports.monthTotals":`Monatssumme`,"reports.overtime":`Überstunden`,"reports.vacation":`Ferien (bezogen / Anspruch)`,"reports.paidOut":`Ausbezahlt: {{minutes}}`,"reports.empty":`Keine Daten für diesen Zeitraum.`,"absences.title":`Abwesenheiten`,"absences.type":`Art`,"absences.from":`Von`,"absences.to":`Bis`,"absences.status":`Status`,"absences.portion":`Tagesanteil`,"absences.typeHint":`Kürzel der Abwesenheitsart, z. B. F für Ferien`,"absences.create":`Abwesenheit beantragen`,"absences.created":`Abwesenheit beantragt.`,"absences.empty":`Keine Abwesenheiten in diesem Jahr.`,"sync.title":`Abgleich`,"sync.pending":`{{count}} Stempel wartend`,"sync.none":`Nichts zu senden.`,"sync.flush":`Jetzt senden`,"sync.done":`Gesendet: {{accepted}}, Doppelte: {{duplicates}}, Konflikte: {{conflicts}}`,"sync.conflicts":`Offene Konflikte`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.accept":`Serverwert behalten`,"sync.dismiss":`Verwerfen`,"sync.resolved":`Konflikt gelöst.`,"sync.empty":`Keine offenen Konflikte.`,"sync.permission":`Für das Lösen von Konflikten fehlt die Berechtigung.`,"profile.title":`Profil`,"profile.user":`Benutzer`,"profile.roles":`Berechtigungen`,"profile.language":`Sprache`,"profile.newPassword":`Neues Passwort`,"profile.changePassword":`Passwort ändern`,"profile.changed":`Passwort geändert, bitte neu anmelden.`,"admin.title":`Verwaltung`,"admin.forbidden":`Sie dürfen die Verwaltung nicht öffnen.`,"admin.users":`Mitarbeiter`,"admin.backup":`Sicherungen`,"admin.user.login":`Benutzername`,"admin.user.name":`Name`,"admin.user.password":`Passwort`,"admin.user.passwordHint":`Mindestens 8 Zeichen mit Gross- und Kleinschreibung und Ziffern.`,"admin.user.roles":`Rollen`,"admin.user.active":`Aktiv`,"admin.user.inactive":`Deaktiviert`,"admin.user.create":`Mitarbeiter anlegen`,"admin.user.pin":`PIN`,"admin.user.pinTitle":`Badge-PIN für {{name}}`,"admin.user.newPin":`Neue PIN`,"admin.user.pinHint":`4 bis 8 Ziffern für das Terminal`,"admin.user.empty":`Noch keine Mitarbeiter.`,"admin.backup.create":`Sicherung jetzt erstellen`,"admin.backup.upload":`Sicherung hochladen`,"admin.backup.uploadHint":`Eine heruntergeladene Sicherung (.sqlite) auswählen - sie wird geprüft und beim nächsten Start eingespielt.`,"admin.backup.delete":`Löschen`,"admin.backup.deleteTitle":`Sicherung löschen`,"admin.backup.deleteConfirm":`Die Sicherung {{name}} wird gelöscht. Das lässt sich nicht rückgängig machen.`,"admin.backup.empty":`Noch keine Sicherungen.`,"admin.backup.retention":`Sicherungen älter als {{days}} Tage werden entfernt, die neueste bleibt immer erhalten.`,"admin.backup.done":`Sicherung {{name}} geschrieben, {{removed}} alte Datei(en) entfernt.`,"common.save":`Speichern`,"common.cancel":`Abbrechen`,"common.loading":`Lädt…`,"common.retry":`Erneut versuchen`,"common.close":`Schließen`,"common.refresh":`Aktualisieren`,"common.none":`–`,"terminal.title":`Terminal`,"terminal.deviceToken":`Geräte-Token`,"terminal.connect":`Verbinden`,"terminal.badge":`Ausweis`,"terminal.noPin":`Auf diesem Terminal ist keine PIN nötig.`,"terminal.pin":`PIN`,"terminal.select":`Namen auswählen`,"terminal.disabled":`Das Terminal ist in den Adapter-Einstellungen ausgeschaltet.`,"admin.terminals":`Terminals`,"admin.terminal.name":`Name`,"admin.terminal.location":`Standort`,"admin.terminal.pinRequired":`Mitarbeiter brauchen ihre PIN`,"admin.terminal.create":`Terminal anlegen`,"admin.terminal.tokenOnce":`Geräte-Token jetzt kopieren — er wird nur als Hash gespeichert und nur einmal angezeigt:`,"admin.terminal.url":`Diese Adresse am Kiosk-Gerät öffnen:`,"admin.terminal.revoke":`Widerrufen`,"admin.terminal.revoked":`widerrufen`,"admin.terminal.users":`Mitarbeiter`,"admin.terminal.usersHint":`Nichts auswählen zeigt alle Mitarbeiter auf diesem Terminal.`,"admin.terminal.usersAll":`alle Mitarbeiter`,"admin.terminal.empty":`Noch kein Terminal angelegt.`,"admin.terminal.confirmRevoke":`„{{name}}“ widerrufen? Der Geräte-Token funktioniert sofort nicht mehr.`,"admin.settings":`Einstellungen`,"admin.settings.fontPath":`Unicode-Schriftdatei für PDF-Ausweise (.ttf/.otf)`,"admin.user.profile":`Arbeitsprofil`,"admin.user.profileTitle":`Arbeitsprofil · {{name}}`,"admin.profile.percent":`Beschäftigungsgrad (%)`,"admin.profile.weeklyHours":`Wochenstunden bei 100 %`,"admin.profile.workdays":`Arbeitstage`,"admin.profile.overtimeModel":`Überstundenmodell`,"admin.profile.model.monthly":`Monatlich`,"admin.profile.model.yearly":`Jährlich`,"admin.profile.model.cumulative":`Fortlaufend`,"admin.profile.vacationPerYear":`Ferientage pro Jahr`,"admin.profile.vacationCarryover":`Ferien-Übertrag (Tage)`,"admin.profile.overtimeCarryover":`Überstunden-Übertrag (Stunden)`,"admin.profile.vorholzeitPerYear":`Vorholzeit pro Jahr (Stunden)`,"admin.profile.pausePaid":`Bezahlte Pausenminuten pro Tag`,"admin.profile.pausePaidHint":`So viele Minuten der Pause zählen als Arbeitszeit (0 = die Pause wird nicht bezahlt).`,"admin.settings.pauseMode":`Pausen`,"admin.settings.pauseModeTitle":`Pausenregel`,"admin.settings.pauseModeHint":`Wie die Pause eines Tages bestimmt wird.`,"admin.settings.pauseRules":`Pausenstaffel`,"admin.settings.pauseRulesHint":`Gilt für Tage ohne gestempelte Pause: ab der angegebenen Blocklänge (erster bis letzter Stempel eines Blocks) werden die Minuten abgezogen.`,"admin.settings.pauseFrom":`ab Minuten`,"admin.settings.pauseTo":`bis Minuten (leer = ohne Ende)`,"admin.settings.pauseMinutes":`Pause Minuten`,"admin.settings.pauseActive":`Regel aktiv`,"admin.settings.pauseAdd":`Regel hinzufügen`,"admin.settings.pauseSave":`Pausenstaffel speichern`,"admin.settings.pauseMode.auto":`Gestempelte Pause, sonst Staffel`,"admin.settings.pauseMode.punched":`Nur gestempelte Pausen`,"admin.settings.pauseMode.staffel":`Nur Pausenstaffel`,"admin.settings.fontPathHint":`Nötig für Russisch, Ukrainisch und Chinesisch; leer = eingebaute Schriften, die nur Latin-1 abdecken.`,"admin.settings.advanced":`Alle Instanzeinstellungen (technische Namen, 1/0 für Schalter)`,"admin.settings.setting.edit_window_days":`Änderungsfenster (Tage)`,"admin.settings.setting.quick_round_minutes":`Schnellrundung (Min.)`,"admin.settings.setting.absence_calc_until_today":`Abwesenheit bis heute`,"admin.settings.setting.absence_deduct_worktime":`Abwesenheit abziehen`,"admin.settings.setting.print_limit_days":`Druckgrenze (Tage)`,"admin.settings.setting.holiday_country":`Feiertagsland`,"admin.settings.setting.default_language":`Standardsprache`,"admin.settings.setting.session_ttl_minutes":`Sitzungsdauer (Min.)`,"admin.settings.setting.backup_retention_days":`Sicherungen (Tage)`,"admin.settings.setting.attendance_list_visible":`Anwesenheitsliste`,"admin.settings.setting.timezone":`Zeitzone`,"admin.settings.saved":`Einstellungen gespeichert.`,"admin.holidays":`Feiertage`,"admin.holiday.date":`Datum (JJJJ-MM-TT)`,"admin.holiday.name":`Bezeichnung`,"holiday.newYear":`Neujahr`,"holiday.epiphany":`Heilige Drei Könige`,"holiday.goodFriday":`Karfreitag`,"holiday.easterMonday":`Ostermontag`,"holiday.labourDay":`Tag der Arbeit`,"holiday.ascension":`Christi Himmelfahrt`,"holiday.whitMonday":`Pfingstmontag`,"holiday.corpusChristi":`Fronleichnam`,"holiday.nationalDay":`Nationalfeiertag`,"holiday.germanUnity":`Tag der Deutschen Einheit`,"holiday.assumption":`Mariä Himmelfahrt`,"holiday.allSaints":`Allerheiligen`,"holiday.immaculateConception":`Mariä Empfängnis`,"holiday.christmas":`Weihnachten`,"holiday.boxingDay":`Stefanitag`,"admin.holiday.add":`Feiertag hinzufügen`,"admin.holiday.year":`Jahr`,"admin.holiday.region":`Region (optional)`,"admin.holiday.empty":`Für dieses Jahr ist kein Feiertag erfasst.`,"admin.tags":`Ausweise (RFID/NFC)`,"admin.tag.label":`Bezeichnung`,"admin.tag.user":`Mitarbeiter`,"admin.tag.create":`Ausweis anlegen`,"admin.tag.linkOnce":`Diesen Link auf den Tag schreiben oder am Handy öffnen:`,"admin.tag.delete":`Löschen`,"admin.tag.active":`aktiv`,"admin.tag.expired":`abgelaufen`,"admin.tag.revoked":`widerrufen`,"admin.tag.lastUsed":`zuletzt benutzt`,"admin.tag.remove":`Endgültig entfernen`,"admin.tag.edit":`Bearbeiten`,"admin.tag.reissue":`Neuer Link`,"admin.tag.editTitle":`Ausweis bearbeiten`,"admin.tag.editHint":`Ein anderer Mitarbeiter oder eine neue Gültigkeit gibt einen neuen Link aus — der vorher ausgegebene Link funktioniert sofort nicht mehr.`,"admin.tag.validityDays":`Gültigkeit (Tage)`,"admin.tag.oldLinkDead":`Der vorher ausgegebene Link funktioniert nicht mehr.`,"admin.tag.qrAlt":`QR-Code des Ausweis-Links`,"admin.tag.empty":`Noch kein Ausweis angelegt.`,"nav.statistics":`Statistik`,"statistics.from":`Von`,"statistics.to":`Bis`,"statistics.employee":`Mitarbeiter`,"statistics.worked":`Gearbeitet`,"statistics.target":`Soll`,"statistics.balance":`Saldo`,"statistics.openDays":`Offene Tage`,"statistics.totals":`Alle Mitarbeiter`,"scan.title":`Ausweis`,"scan.done":`Für {{name}} gestempelt um {{time}}`,"scan.failed":`Der Ausweis konnte nicht verwendet werden: {{reason}}`,"presence.title":`Anwesenheit`,"presence.present":`Anwesend`,"presence.absent":`Abwesend`,"presence.tapPin":`PIN eingeben, um ein- oder auszustempeln`,"presence.cancel":`Abbrechen`,"presence.updated":`{{name}} ist jetzt {{state}}`,"presence.disabled":`Das Kiosk-Terminal ist in den Instanz-Einstellungen ausgeschaltet.`,"admin.user.photo":`Foto`,"admin.user.photoTitle":`Foto von {{name}}`,"admin.user.photoChoose":`Bild wählen`,"admin.user.photoRemove":`Bild entfernen`,"admin.user.photoHint":`PNG, JPEG, WEBP oder GIF bis 256 KB. Ohne Bild wird der Platzhalter angezeigt.`,"admin.corrections":`Zeitkorrektur`,"corrections.employee":`Mitarbeiter`,"corrections.previous":`Voriger Monat`,"corrections.next":`Nächster Monat`,"corrections.reason":`Begründung`,"corrections.reasonHint":`Wird im Protokoll (Audit-Log) festgehalten`,"corrections.add":`Stempel oder Tag nachtragen`,"corrections.addTitle":`Stempel nachtragen`,"corrections.addHint":`„Gehen“ leer lassen, wenn nur ein Stempel fehlt`,"corrections.editTitle":`Stempel ändern`,"corrections.remove":`Stempel löschen`,"corrections.date":`Datum`,"corrections.from":`Kommen`,"corrections.to":`Gehen`,"corrections.direction":`Richtung`,"corrections.note":`Notiz`,"corrections.empty":`Keine Stempel in diesem Monat`,"corrections.byAdmin":`durch die Verwaltung nachgetragen`,"corrections.history":`Verlauf`,"corrections.actor":`Von`,"corrections.actionCreate":`Nachgetragen`,"corrections.actionUpdate":`Geändert`,"corrections.actionDelete":`Gelöscht`,"keypad.backspace":`Löschen`,"admin.settings.branding":`Firmen-Branding`,"admin.settings.brandingHint":`Logo, Hintergrundbild und Hintergrundfarbe dieser Installation. Anmeldebildschirm und Kiosk zeigen sie ebenfalls.`,"admin.settings.brandLogo":`Logo wählen`,"admin.settings.brandBackground":`Hintergrund wählen`,"admin.brand.imageResized":`Für die Anzeige verkleinert ({{size}}).`,"admin.brand.imageTooLarge":`Das Bild ist auch verkleinert noch zu groß.`,"admin.brand.imageType":`Nur PNG, JPEG, WEBP oder GIF sind möglich.`,"admin.brand.imageUnreadable":`Das Bild konnte nicht gelesen werden.`,"admin.settings.brandColor":`Hintergrundfarbe`,"admin.settings.brandColorHint":`Hex-Wert wie #1a2b3c, leer für die Vorgabe`,"admin.settings.brandColorPresets":`Vorschläge`,"admin.settings.brandColorDefault":`Standard`,"admin.backup.download":`Herunterladen`,"admin.backup.restore":`Wiederherstellen`,"admin.backup.restoreTitle":`Sicherung wiederherstellen`,"admin.backup.restoreConfirm":`Die Sicherung {{name}} wird beim nächsten Start des Adapters eingespielt; die aktuelle Datenbank bleibt als Datei daneben erhalten. Die Instanz danach neu starten.`,"admin.backup.pendingHint":`{{name}} wird beim nächsten Start eingespielt ({{users}} Mitarbeiter, {{entries}} Stempel) - bitte die Instanz neu starten.`,"error.backup_invalid":`Diese Datei ist keine Sicherung dieses Adapters.`,"admin.settings.brandImageRemove":`Bild entfernen`,"admin.settings.brandColorDefaultHint":`Setzt Hintergrundfarbe und Hintergrundbild zurück`,"admin.triggers":`Aktionen (ioBroker)`,"admin.triggersHint":"Ein State aus einem anderen Adapter löst Stempeln oder die Anwesenheit aus — z. B. ein Fingerabdruck-Leser, ein Taster oder ein Türkontakt. Ausgelöst wird nur, wenn sich der Wert ändert. Als Wert kannst du `toggle` eintragen: dann löst jeder Wechsel aus (zum Beispiel an und wieder aus).","admin.trigger.label":`Bezeichnung`,"admin.trigger.sourceState":`Datenpunkt`,"admin.trigger.mode":`Auslöser`,"admin.trigger.modeCondition":`State hat den Wert`,"admin.trigger.modeUser":`Wert ist der Mitarbeiter`,"admin.trigger.condition":`Wert`,"admin.trigger.user":`Mitarbeiter`,"admin.trigger.action":`Aktion`,"admin.trigger.actionPunch":`Stempeln (ein oder aus)`,"admin.trigger.actionQuickPunch":`Stempeln mit Schnellrundung`,"admin.trigger.actionPresent":`Auf anwesend setzen`,"admin.trigger.actionAbsent":`Auf abwesend setzen`,"admin.trigger.cooldown":`Sperre (Sekunden)`,"admin.trigger.active":`Aktiv`,"admin.trigger.add":`Aktion hinzufügen`,"admin.trigger.lastFired":`Zuletzt ausgelöst`,"admin.trigger.empty":`Noch keine Aktion angelegt.`,"admin.trigger.conditionHint":"Wert oder `toggle` — dann löst jeder Wechsel aus","admin.settings.automations":`Regeln (Automatik)`,"admin.settings.automationsHint":`Was der Adapter von selbst tut: zur eingestellten Ortszeit ausstempeln, eine fehlende Ausstempelung melden oder nach zu langer Arbeit ohne Pause erinnern. Jede Regel läuft höchstens einmal pro Mitarbeiter und Tag.`,"admin.automation.kind":`Art`,"admin.automation.kindClockIn":`Automatisch einstempeln`,"admin.automation.kindClockOut":`Automatisch ausstempeln`,"admin.automation.kindMissingPunch":`Fehlende Ausstempelung melden`,"admin.automation.kindBreakReminder":`Pausenerinnerung`,"admin.automation.at":`Uhrzeit`,"admin.automation.atHint":`Ortszeit des Mitarbeiters`,"admin.automation.after":`Nach (Minuten)`,"admin.automation.user":`Mitarbeiter`,"admin.automation.allUsers":`alle Mitarbeiter`,"admin.automation.add":`Regel hinzufügen`,"admin.automation.empty":`Noch keine Regel angelegt.`,"admin.automation.runs":`Letzte Ausführungen`,"admin.automation.weekdays":`Wochentage`,"admin.automation.repeat":`Wiederholung`,"admin.automation.repeatDay":`einmal pro Tag`,"admin.automation.repeatWeek":`einmal pro Woche`,"admin.settings.setting.report_font_path":`PDF-Schriftdatei`,"presence.workedToday":`Heute gearbeitet`,"admin.user.workedTime":`Arbeitszeit auf der Anwesenheitskarte`,"admin.user.workedTimeHint":`Zeigt auf der Anwesenheitskarte die heute geleistete Arbeitszeit (z. B. 1:23). Ohne Stempel steht dort 0:00; ohne diese Freigabe bleibt die Karte bei Anwesend/Abwesend und dem Namen.`,"admin.automation.save":`Regeln speichern`,"admin.automation.edit":`Bearbeiten`,"admin.automation.editTitle":`Regel bearbeiten`,"admin.automation.newTitle":`Neue Regel`},Ow={"absences.create":`Запросить отсутствие`,"absences.created":`Запрос на отсутствие.`,"absences.empty":`В этом году пропусков нет.`,"absences.from":`От`,"absences.portion":`Доля дня`,"absences.status":`Статус`,"absences.title":`Отсутствие`,"absences.to":`К`,"absences.type":`Тип`,"absences.typeHint":`Код типа отсутствия, напр. F для отпуска`,"admin.backup":`Резервные копии`,"admin.backup.create":`Создать резервную копию сейчас`,"admin.backup.upload":`Загрузить резервную копию`,"admin.backup.uploadHint":`Выберите скачанную копию (.sqlite) - она будет проверена и применена при следующем запуске.`,"admin.backup.delete":`Удалить`,"admin.backup.deleteTitle":`Удалить резервную копию`,"admin.backup.deleteConfirm":`Копия {{name}} будет удалена. Это нельзя отменить.`,"admin.backup.done":`Резервная копия {{name}} записана, старые файлы {{removed}} удалены.`,"admin.backup.empty":`Резервных копий пока нет.`,"admin.backup.retention":`Резервные копии старше {{days}}\xA0дней удаляются, всегда сохраняется самая новая.`,"admin.forbidden":`Вам не разрешено открывать администрацию.`,"admin.title":`Администрация`,"admin.user.active":`Активный`,"admin.user.create":`Добавить сотрудника`,"admin.user.empty":`Сотрудников пока нет.`,"admin.user.inactive":`Деактивирован`,"admin.user.login":`Логин`,"admin.user.name":`Имя`,"admin.user.newPin":`Новый PIN-код`,"admin.user.password":`Пароль`,"admin.user.passwordHint":`Не менее 8 символов верхнего и нижнего регистра и цифр.`,"admin.user.pin":`PIN-код`,"admin.user.pinHint":`От 4 до 8 цифр для терминала`,"admin.user.pinTitle":`PIN-код бейджа для {{name}}`,"admin.user.roles":`Роли`,"admin.users":`Сотрудники`,"app.offline":`Оффлайн – отметки в очереди`,"app.online":`Подключено`,"app.title":`Учет времени`,"common.cancel":`Отмена`,"common.close":`Закрывать`,"common.loading":`Загрузка…`,"common.none":`–`,"common.refresh":`Обновить`,"common.retry":`Повторить попытку`,"common.save":`Сохранять`,"error.bad_request":`Ввод не был принят.`,"error.conflict":`Изменение противоречит существующим данным.`,"error.csrf_rejected":`Запрос отклонен по соображениям безопасности. Повторите попытку.`,"error.invalid_credentials":`Имя пользователя или пароль неверны.`,"error.locked_out":`Слишком много неудачных попыток. Пожалуйста, повторите попытку позже.`,"error.network_error":`Сервер недоступен.`,"error.no_session":`Срок действия вашей сессии истек, пожалуйста, войдите снова.`,"error.not_found":`Не найдено.`,"error.permission_denied":`Вам не разрешено это делать.`,"error.report_font_missing":`Для этого отчета требуется шрифт Unicode (report_font_path).`,"error.revision_conflict":`Тем временем отметка была изменена, пожалуйста, перезагрузите.`,"error.session_expired":`Срок действия вашей сессии истек, пожалуйста, войдите снова.`,"error.unknown_error":`Неожиданная ошибка.`,"error.user_inactive":`Эта учетная запись деактивирована.`,"login.failed":`Войти не удалось`,"login.login":`Имя пользователя`,"login.password":`Пароль`,"login.submit":`Войти`,"login.title":`Войти`,"month.absence":`Отсутствие`,"month.balance":`Баланс`,"error.edit_window_closed":`Вне окна редактирования`,"admin.profile.pauseRules":`Свои правила перерывов`,"admin.profile.pauseRulesHint":`Правила только для этого сотрудника: они заменяют правило компании с тем же «с минут». Без своих правил действует шкала компании.`,"report.csv":`Исходные данные (CSV)`,"month.edit":`Исправить`,"month.editTitle":`Исправить отбивки · {{date}}`,"month.editHint":`Только внутри окна редактирования - более старые дни меняет администрация.`,"month.time":`Время`,"month.direction":`Направление`,"month.directionIn":`Приход`,"month.directionOut":`Уход`,"month.addPunch":`Добавить отбивку`,"month.pause":`Перерыв`,"month.paidBreak":`из них оплачено`,"month.empty":`Нет дней в этом месяце.`,"month.holiday":`Праздничный день`,"month.months":`Месяцы года`,"month.next":`В следующем месяце`,"month.open":`открыт`,"month.previous":`Предыдущий месяц`,"month.target":`Цель`,"month.title":`Месяц`,"month.worked":`Работал`,"nav.absences":`Отсутствие`,"nav.dashboard":`Отметка`,"nav.logout":`выход`,"nav.menu":`Меню`,"nav.month":`Месяц`,"nav.profile":`Профиль`,"nav.reports":`Отчеты`,"nav.sync":`Синхронизация`,"profile.changePassword":`Изменить пароль`,"profile.changed":`Пароль изменен, пожалуйста, войдите снова.`,"profile.language":`Язык`,"profile.newPassword":`Новый пароль`,"profile.roles":`Разрешения`,"profile.title":`Профиль`,"profile.user":`Пользователь`,"punch.balance":`Сальдо сегодня`,"punch.closed":`Не отмечено`,"punch.in":`Приход`,"punch.last":`Последняя отметка {{time}}`,"punch.note":`Примечание`,"punch.now":`Отметиться`,"punch.open":`Отметка с {{time}}`,"punch.out":`Уход`,"punch.queued":`Сохранено оффлайн – будет отправлено автоматически.`,"punch.quick":`Быстрая отметка`,"punch.sent":`Отметка сохранена ({{time}})`,"punch.target":`План сегодня`,"punch.worked":`Отработано сегодня`,"report.failed":`Не удалось создать заявление.`,"report.pdf":`PDF`,"report.xls":`Эксель`,"reports.empty":`Данных за этот период нет.`,"reports.monthTotals":`Итоги месяца`,"reports.overtime":`Переработка`,"reports.paidOut":`Выплачено: {{minutes}}`,"reports.title":`Отчеты`,"reports.vacation":`Отпуск (взятый/право)`,"reports.year":`Год`,"reports.yearTotals":`Итоги года`,"sync.accept":`Сохраняйте ценность сервера`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Открытые конфликты`,"sync.dismiss":`Отказаться`,"sync.done":`Отправлено: {{accepted}}, дубликаты: {{duplicates}}, конфликты: {{conflicts}}`,"sync.empty":`Никаких открытых конфликтов.`,"sync.flush":`Отправить сейчас`,"sync.none":`Нечего отправлять.`,"sync.pending":`{{count}} отметок в очереди`,"sync.permission":`Вам не разрешено разрешать конфликты.`,"sync.resolved":`Конфликт разрешен.`,"sync.title":`Синхронизация`,"terminal.title":`Терминал`,"terminal.deviceToken":`Токен устройства`,"terminal.connect":`Подключить`,"terminal.badge":`Пропуск`,"terminal.noPin":`На этом терминале PIN не нужен.`,"terminal.pin":`PIN-код`,"terminal.select":`Выберите имя`,"terminal.disabled":`Терминал отключён в настройках адаптера.`,"admin.terminals":`Терминалы`,"admin.terminal.name":`Название`,"admin.terminal.location":`Местоположение`,"admin.terminal.pinRequired":`Сотрудникам нужен их PIN-код`,"admin.terminal.create":`Создать терминал`,"admin.terminal.tokenOnce":`Скопируйте токен устройства сейчас — он хранится только как хеш и показывается один раз:`,"admin.terminal.url":`Откройте этот адрес на устройстве киоска:`,"admin.terminal.revoke":`Отозвать`,"admin.terminal.revoked":`отозван`,"admin.terminal.users":`Сотрудники`,"admin.terminal.usersHint":`Если ничего не выбрать, на терминале будут показаны все сотрудники.`,"admin.terminal.usersAll":`все сотрудники`,"admin.terminal.empty":`Терминал ещё не создан.`,"admin.terminal.confirmRevoke":`Отозвать «{{name}}»? Токен устройства перестанет работать сразу.`,"admin.settings":`Настройки`,"admin.settings.fontPath":`Файл шрифта Unicode для PDF-отчётов (.ttf/.otf)`,"admin.user.profile":`Рабочий профиль`,"admin.user.profileTitle":`Рабочий профиль · {{name}}`,"admin.profile.percent":`Занятость (%)`,"admin.profile.weeklyHours":`Часов в неделю при 100 %`,"admin.profile.workdays":`Рабочие дни`,"admin.profile.overtimeModel":`Модель переработок`,"admin.profile.model.monthly":`Помесячно`,"admin.profile.model.yearly":`За год`,"admin.profile.model.cumulative":`Накопительно`,"admin.profile.vacationPerYear":`Дней отпуска в год`,"admin.profile.vacationCarryover":`Перенос отпуска (дни)`,"admin.profile.overtimeCarryover":`Перенос переработок (часы)`,"admin.profile.vorholzeitPerYear":`«Vorholzeit» в год (часы)`,"admin.profile.pausePaid":`Оплачиваемых минут перерыва в день`,"admin.profile.pausePaidHint":`Столько минут перерыва входят в рабочее время (0 = перерыв не оплачивается).`,"admin.settings.pauseMode":`Перерывы`,"admin.settings.pauseModeTitle":`Правило перерывов`,"admin.settings.pauseModeHint":`Как определяется перерыв за день.`,"admin.settings.pauseRules":`Шкала перерывов`,"admin.settings.pauseRulesHint":`Действует для дней без отбитого перерыва: начиная с указанной длины блока (от первого до последнего отбития в блоке) минуты вычитаются.`,"admin.settings.pauseFrom":`с минут`,"admin.settings.pauseTo":`до минут (пусто = без ограничения)`,"admin.settings.pauseMinutes":`минут перерыва`,"admin.settings.pauseActive":`Правило активно`,"admin.settings.pauseAdd":`Добавить правило`,"admin.settings.pauseSave":`Сохранить шкалу перерывов`,"admin.settings.pauseMode.auto":`Отбитый перерыв, иначе шкала`,"admin.settings.pauseMode.punched":`Только отбитые перерывы`,"admin.settings.pauseMode.staffel":`Только шкала перерывов`,"admin.settings.fontPathHint":`Нужен для русского, украинского и китайского; пусто = встроенные шрифты, покрывающие только Latin-1.`,"admin.settings.advanced":`Все настройки экземпляра (технические имена, 1/0 для переключателей)`,"admin.settings.setting.edit_window_days":`Окно правки (дней)`,"admin.settings.setting.quick_round_minutes":`Округление (мин)`,"admin.settings.setting.absence_calc_until_today":`Отсутствия до сегодня`,"admin.settings.setting.absence_deduct_worktime":`Вычитать отсутствия`,"admin.settings.setting.print_limit_days":`Ограничение печати (дней)`,"admin.settings.setting.holiday_country":`Страна праздников`,"admin.settings.setting.default_language":`Язык по умолчанию`,"admin.settings.setting.session_ttl_minutes":`Сессия (минуты)`,"admin.settings.setting.backup_retention_days":`Копии (дней)`,"admin.settings.setting.attendance_list_visible":`Список присутствия`,"admin.settings.setting.timezone":`Часовой пояс`,"admin.settings.saved":`Настройки сохранены.`,"admin.holidays":`Праздничные дни`,"admin.holiday.date":`Дата (ГГГГ-ММ-ДД)`,"admin.holiday.name":`Название`,"holiday.newYear":`Новый год`,"holiday.epiphany":`Богоявление`,"holiday.goodFriday":`Страстная пятница`,"holiday.easterMonday":`Пасхальный понедельник`,"holiday.labourDay":`День труда`,"holiday.ascension":`Вознесение`,"holiday.whitMonday":`Духов понедельник`,"holiday.corpusChristi":`Праздник Тела Христова`,"holiday.nationalDay":`Национальный праздник`,"holiday.germanUnity":`День германского единства`,"holiday.assumption":`Успение Богородицы`,"holiday.allSaints":`День всех святых`,"holiday.immaculateConception":`Непорочное зачатие`,"holiday.christmas":`Рождество`,"holiday.boxingDay":`Второй день Рождества`,"admin.holiday.add":`Добавить праздничный день`,"admin.holiday.year":`Год`,"admin.holiday.region":`Регион (необязательно)`,"admin.holiday.empty":`За этот год праздничные дни не занесены.`,"admin.tags":`Пропуска (RFID/NFC)`,"admin.tag.label":`Метка`,"admin.tag.user":`Сотрудник`,"admin.tag.create":`Создать пропуск`,"admin.tag.linkOnce":`Запишите эту ссылку на метку или откройте её на телефоне:`,"admin.tag.delete":`Удалить`,"admin.tag.active":`активен`,"admin.tag.expired":`истёк`,"admin.tag.revoked":`отозван`,"admin.tag.lastUsed":`последнее использование`,"admin.tag.remove":`Удалить окончательно`,"admin.tag.edit":`Изменить`,"admin.tag.reissue":`Новая ссылка`,"admin.tag.editTitle":`Изменение пропуска`,"admin.tag.editHint":`Другой сотрудник или новый срок действия выпускает новую ссылку — выданная ранее ссылка сразу перестаёт работать.`,"admin.tag.validityDays":`Срок действия (дней)`,"admin.tag.oldLinkDead":`Выданная ранее ссылка больше не работает.`,"admin.tag.qrAlt":`QR-код ссылки пропуска`,"admin.tag.empty":`Пропуск ещё не создан.`,"nav.statistics":`Статистика`,"statistics.from":`С`,"statistics.to":`По`,"statistics.employee":`Сотрудник`,"statistics.worked":`Отработано`,"statistics.target":`План`,"statistics.balance":`Баланс`,"statistics.openDays":`Открытые дни`,"statistics.totals":`Все сотрудники`,"scan.title":`Пропуск`,"scan.done":`Отметка для {{name}} в {{time}}`,"scan.failed":`Пропуск не удалось использовать: {{reason}}`,"presence.title":`Присутствие`,"presence.present":`На рабочем месте`,"presence.absent":`Отсутствует`,"presence.tapPin":`Введите ПИН-код, чтобы отметиться`,"presence.cancel":`Отмена`,"presence.updated":`{{name}}: {{state}}`,"presence.disabled":`Киоск-терминал отключён в настройках экземпляра.`,"admin.user.photo":`Фото`,"admin.user.photoTitle":`Фото {{name}}`,"admin.user.photoChoose":`Выбрать изображение`,"admin.user.photoRemove":`Удалить изображение`,"admin.user.photoHint":`PNG, JPEG, WEBP или GIF до 256 КБ. Без изображения показывается заполнитель.`,"admin.corrections":`Корректировка времени`,"corrections.employee":`Сотрудник`,"corrections.previous":`Предыдущий месяц`,"corrections.next":`Следующий месяц`,"corrections.reason":`Причина`,"corrections.reasonHint":`Сохраняется в журнале (аудите)`,"corrections.add":`Добавить отметку или день`,"corrections.addTitle":`Добавить отметку`,"corrections.addHint":`Оставьте «уход» пустым, если не хватает одной отметки`,"corrections.editTitle":`Изменить отметку`,"corrections.remove":`Удалить отметку`,"corrections.date":`Дата`,"corrections.from":`Приход`,"corrections.to":`Уход`,"corrections.direction":`Направление`,"corrections.note":`Заметка`,"corrections.empty":`В этом месяце отметок нет`,"corrections.byAdmin":`добавлено администрацией`,"corrections.history":`История`,"corrections.actor":`Кто`,"corrections.actionCreate":`Добавлено`,"corrections.actionUpdate":`Изменено`,"corrections.actionDelete":`Удалено`,"keypad.backspace":`Удалить`,"admin.settings.branding":`Брендинг компании`,"admin.settings.brandingHint":`Логотип, фоновое изображение и цвет фона этой установки. Экран входа и экраны киоска тоже их показывают.`,"admin.settings.brandLogo":`Выбрать логотип`,"admin.settings.brandBackground":`Выбрать фон`,"admin.brand.imageResized":`Уменьшено для отображения ({{size}}).`,"admin.brand.imageTooLarge":`Даже в уменьшенном виде изображение слишком большое.`,"admin.brand.imageType":`Возможны только PNG, JPEG, WEBP или GIF.`,"admin.brand.imageUnreadable":`Не удалось прочитать изображение.`,"admin.settings.brandColor":`Цвет фона`,"admin.settings.brandColorHint":`Значение в формате Hex, например #1a2b3c; пусто — значение по умолчанию`,"admin.settings.brandColorPresets":`Готовые цвета`,"admin.settings.brandColorDefault":`По умолчанию`,"admin.backup.download":`Скачать`,"admin.backup.restore":`Восстановить`,"admin.backup.restoreTitle":`Восстановить резервную копию`,"admin.backup.restoreConfirm":`Резервная копия {{name}} будет применена при следующем запуске адаптера; текущая база данных сохранится рядом в виде файла. После этого перезапустите инстанс.`,"admin.backup.pendingHint":`{{name}} будет применена при следующем запуске ({{users}} сотрудников, {{entries}} отметок) - перезапустите инстанс.`,"error.backup_invalid":`Этот файл не является резервной копией этого адаптера.`,"admin.settings.brandImageRemove":`Удалить изображение`,"admin.settings.brandColorDefaultHint":`Сбрасывает цвет и изображение фона`,"admin.triggers":`Действия (ioBroker)`,"admin.triggersHint":"Состояние другого адаптера выполняет отметку или меняет присутствие — например, сканер отпечатка, кнопка или дверной контакт. Срабатывает только при изменении значения. В поле значения можно указать `toggle` — тогда срабатывает любое изменение (например, включение и выключение).","admin.trigger.label":`Название`,"admin.trigger.sourceState":`Состояние`,"admin.trigger.mode":`Условие`,"admin.trigger.modeCondition":`Состояние содержит значение`,"admin.trigger.modeUser":`Значение — это сотрудник`,"admin.trigger.condition":`Значение`,"admin.trigger.user":`Сотрудник`,"admin.trigger.action":`Действие`,"admin.trigger.actionPunch":`Отметиться (вход или выход)`,"admin.trigger.actionQuickPunch":`Отметиться с быстрым округлением`,"admin.trigger.actionPresent":`Сделать присутствующим`,"admin.trigger.actionAbsent":`Сделать отсутствующим`,"admin.trigger.cooldown":`Задержка (секунды)`,"admin.trigger.active":`Активно`,"admin.trigger.add":`Добавить действие`,"admin.trigger.lastFired":`Последнее срабатывание`,"admin.trigger.empty":`Действий пока нет.`,"admin.trigger.conditionHint":"Значение или `toggle` — тогда срабатывает любое изменение","admin.settings.automations":`Правила (автоматика)`,"admin.settings.automationsHint":`Что адаптер делает сам: отмечает выход в заданное местное время, сообщает об отсутствующей отметке выхода или напоминает о паузе после слишком долгой работы. Правило срабатывает не чаще одного раза в день на сотрудника.`,"admin.automation.kind":`Тип`,"admin.automation.kindClockIn":`Автоматически отметить приход`,"admin.automation.kindClockOut":`Автоматически отметить выход`,"admin.automation.kindMissingPunch":`Сообщить об отсутствии выхода`,"admin.automation.kindBreakReminder":`Напоминание о паузе`,"admin.automation.at":`Время`,"admin.automation.atHint":`Местное время сотрудника`,"admin.automation.after":`Через (минуты)`,"admin.automation.user":`Сотрудник`,"admin.automation.allUsers":`все сотрудники`,"admin.automation.add":`Добавить правило`,"admin.automation.empty":`Правил пока нет.`,"admin.automation.runs":`Последние срабатывания`,"admin.automation.weekdays":`Дни недели`,"admin.automation.repeat":`Повтор`,"admin.automation.repeatDay":`раз в день`,"admin.automation.repeatWeek":`раз в неделю`,"admin.settings.setting.report_font_path":`Шрифт для PDF`,"presence.workedToday":`Отработано сегодня`,"admin.user.workedTime":`Рабочее время на карточке присутствия`,"admin.user.workedTimeHint":`Показывает на карточке присутствия отработанное сегодня время (например, 1:23). Без отметки там 0:00; без разрешения карточка остаётся с присутствует/отсутствует и именем.`,"admin.automation.save":`Сохранить правила`,"admin.automation.edit":`Изменить`,"admin.automation.editTitle":`Изменить правило`,"admin.automation.newTitle":`Новое правило`},kw={"absences.create":`Solicitar ausência`,"absences.created":`Ausência solicitada.`,"absences.empty":`Não houve ausências neste ano.`,"absences.from":`De`,"absences.portion":`Fração do dia`,"absences.status":`Status`,"absences.title":`Ausências`,"absences.to":`Para`,"absences.type":`Tipo`,"absences.typeHint":`Código do tipo de ausência, por ex. F para férias`,"admin.backup":`Cópias de segurança`,"admin.backup.create":`Crie backup agora`,"admin.backup.upload":`Enviar cópia`,"admin.backup.uploadHint":`Escolhe uma cópia descarregada (.sqlite) - é verificada e aplicada no próximo arranque.`,"admin.backup.delete":`Eliminar`,"admin.backup.deleteTitle":`Eliminar cópia`,"admin.backup.deleteConfirm":`A cópia {{name}} é eliminada. Isto não pode ser anulado.`,"admin.backup.done":`Backup {{name}} escrito, {{removed}} arquivo(s) antigo(s) removido(s).`,"admin.backup.empty":`Ainda não há backups.`,"admin.backup.retention":`Os backups com mais de {{days}} dias são removidos, o mais recente é sempre mantido.`,"admin.forbidden":`Você não tem permissão para abrir a administração.`,"admin.title":`Administração`,"admin.user.active":`Ativo`,"admin.user.create":`Adicionar funcionário`,"admin.user.empty":`Ainda não há funcionários.`,"admin.user.inactive":`Desativado`,"admin.user.login":`Conecte-se`,"admin.user.name":`Nome`,"admin.user.newPin":`Novo PIN`,"admin.user.password":`Senha`,"admin.user.passwordHint":`Pelo menos 8 caracteres com letras maiúsculas e minúsculas e dígitos.`,"admin.user.pin":`PIN`,"admin.user.pinHint":`4 a 8 dígitos para o terminal`,"admin.user.pinTitle":`PIN do crachá de {{name}}`,"admin.user.roles":`Funções`,"admin.users":`Funcionários`,"app.offline":`Off-line – marcações na fila`,"app.online":`Conectado`,"app.title":`Controle de tempo`,"common.cancel":`Cancelar`,"common.close":`Fechar`,"common.loading":`Carregando…`,"common.none":`–`,"common.refresh":`Atualizar`,"common.retry":`Tentar novamente`,"common.save":`Salvar`,"error.bad_request":`A entrada não foi aceita.`,"error.conflict":`A alteração entra em conflito com os dados existentes.`,"error.csrf_rejected":`A solicitação foi rejeitada por motivos de segurança. Tente novamente.`,"error.invalid_credentials":`O nome de usuário ou a senha não estão corretos.`,"error.locked_out":`Muitas tentativas fracassadas. Por favor, tente novamente mais tarde.`,"error.network_error":`O servidor não está acessível.`,"error.no_session":`Sua sessão expirou, faça login novamente.`,"error.not_found":`Não encontrado.`,"error.permission_denied":`Você não tem permissão para fazer isso.`,"error.report_font_missing":`Este relatório precisa de uma fonte Unicode (report_font_path).`,"error.revision_conflict":`A marcação foi alterada nesse meio tempo, por favor recarregue.`,"error.session_expired":`Sua sessão expirou, faça login novamente.`,"error.unknown_error":`Erro inesperado.`,"error.user_inactive":`Esta conta está desativada.`,"login.failed":`Falha no login`,"login.login":`Nome de usuário`,"login.password":`Senha`,"login.submit":`Entrar`,"login.title":`Entrar`,"month.absence":`Ausência`,"month.balance":`Equilíbrio`,"error.edit_window_closed":`Fora da janela de correção`,"admin.profile.pauseRules":`Regras de pausa próprias`,"admin.profile.pauseRulesHint":`Regras só para este trabalhador: substituem a regra da empresa com o mesmo «a partir de minutos». Sem regras próprias aplica-se a escala da empresa.`,"report.csv":`Dados brutos (CSV)`,"month.edit":`Corrigir`,"month.editTitle":`Corrigir picagens · {{date}}`,"month.editHint":`Só dentro da janela de correção - os dias mais antigos são alterados pela administração.`,"month.time":`Hora`,"month.direction":`Direção`,"month.directionIn":`Entrada`,"month.directionOut":`Saída`,"month.addPunch":`Adicionar picagem`,"month.pause":`Pausa`,"month.paidBreak":`dos quais pago`,"month.empty":`Não há dias neste mês.`,"month.holiday":`Feriado`,"month.months":`Meses do ano`,"month.next":`Próximo mês`,"month.open":`em aberto`,"month.previous":`Mês anterior`,"month.target":`Alvo`,"month.title":`Mês`,"month.worked":`Trabalhado`,"nav.absences":`Ausências`,"nav.dashboard":`Marcação`,"nav.logout":`sair`,"nav.menu":`Menu`,"nav.month":`Mês`,"nav.profile":`Perfil`,"nav.reports":`Relatórios`,"nav.sync":`Sincronização`,"profile.changePassword":`Alterar a senha`,"profile.changed":`Senha alterada, faça login novamente.`,"profile.language":`Linguagem`,"profile.newPassword":`Nova Senha`,"profile.roles":`Permissões`,"profile.title":`Perfil`,"profile.user":`Usuário`,"punch.balance":`Saldo hoje`,"punch.closed":`Não marcado`,"punch.in":`Marcar entrada`,"punch.last":`Última marcação {{time}}`,"punch.note":`Observação`,"punch.now":`Marcar`,"punch.open":`Marcado desde {{time}}`,"punch.out":`Marcar saída`,"punch.queued":`Salvo off-line – será enviado automaticamente`,"punch.quick":`Marcação rápida`,"punch.sent":`Marcação guardada ({{time}})`,"punch.target":`Objetivo hoje`,"punch.worked":`Trabalhado hoje`,"report.failed":`Não foi possível criar a instrução.`,"report.pdf":`PDF`,"report.xls":`Excel`,"reports.empty":`Não há dados para este período.`,"reports.monthTotals":`Totais do mês`,"reports.overtime":`Horas extra`,"reports.paidOut":`Pago: {{minutes}}`,"reports.title":`Relatórios`,"reports.vacation":`Férias (tiradas/direito)`,"reports.year":`Ano`,"reports.yearTotals":`Totais do ano`,"sync.accept":`Mantenha o valor do servidor`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Conflitos abertos`,"sync.dismiss":`Descartar`,"sync.done":`Enviado: {{accepted}}, duplicatas: {{duplicates}}, conflitos: {{conflicts}}`,"sync.empty":`Sem conflitos abertos.`,"sync.flush":`Enviar agora`,"sync.none":`Nada para enviar.`,"sync.pending":`{{count}} marcação(ões) na fila`,"sync.permission":`Você não tem permissão para resolver conflitos.`,"sync.resolved":`Conflito resolvido.`,"sync.title":`Sincronização`,"terminal.title":`Terminal`,"terminal.deviceToken":`Token do dispositivo`,"terminal.connect":`Ligar`,"terminal.badge":`Cartão`,"terminal.noPin":`Não é necessário PIN neste terminal.`,"terminal.pin":`PIN`,"terminal.select":`Escolha o nome`,"terminal.disabled":`O terminal está desligado nas configurações do adaptador.`,"admin.terminals":`Terminais`,"admin.terminal.name":`Nome`,"admin.terminal.location":`Localização`,"admin.terminal.pinRequired":`Os funcionários precisam do seu PIN`,"admin.terminal.create":`Criar terminal`,"admin.terminal.tokenOnce":`Copie agora o token do dispositivo — é guardado apenas como hash e mostrado uma única vez:`,"admin.terminal.url":`Abra este endereço no dispositivo do quiosque:`,"admin.terminal.revoke":`Revogar`,"admin.terminal.revoked":`revogado`,"admin.terminal.users":`Funcionários`,"admin.terminal.usersHint":`Sem seleção, todos os funcionários aparecem no terminal.`,"admin.terminal.usersAll":`todos os funcionários`,"admin.terminal.empty":`Ainda não foi criado nenhum terminal.`,"admin.terminal.confirmRevoke":`Revogar «{{name}}»? O token do dispositivo deixa de funcionar imediatamente.`,"admin.settings":`Configurações`,"admin.settings.fontPath":`Ficheiro de tipo de letra Unicode para os extratos PDF (.ttf/.otf)`,"admin.user.profile":`Perfil de trabalho`,"admin.user.profileTitle":`Perfil de trabalho · {{name}}`,"admin.profile.percent":`Grau de ocupação (%)`,"admin.profile.weeklyHours":`Horas semanais a 100 %`,"admin.profile.workdays":`Dias de trabalho`,"admin.profile.overtimeModel":`Modelo de horas extra`,"admin.profile.model.monthly":`Mensal`,"admin.profile.model.yearly":`Anual`,"admin.profile.model.cumulative":`Cumulativo`,"admin.profile.vacationPerYear":`Dias de férias por ano`,"admin.profile.vacationCarryover":`Férias transitadas (dias)`,"admin.profile.overtimeCarryover":`Horas extra transitadas (horas)`,"admin.profile.vorholzeitPerYear":`«Vorholzeit» por ano (horas)`,"admin.profile.pausePaid":`Minutos de pausa pagos por dia`,"admin.profile.pausePaidHint":`Esses minutos da pausa contam como tempo de trabalho (0 = a pausa não é paga).`,"admin.settings.pauseMode":`Pausas`,"admin.settings.pauseModeTitle":`Regra de pausas`,"admin.settings.pauseModeHint":`Como a pausa de um dia é determinada.`,"admin.settings.pauseRules":`Escala de pausas`,"admin.settings.pauseRulesHint":`Aplica-se aos dias sem pausa registada: a partir da duração indicada (do primeiro ao último registo de um bloco) os minutos são descontados.`,"admin.settings.pauseFrom":`de minutos`,"admin.settings.pauseTo":`até minutos (vazio = sem fim)`,"admin.settings.pauseMinutes":`minutos de pausa`,"admin.settings.pauseActive":`Regra ativa`,"admin.settings.pauseAdd":`Adicionar regra`,"admin.settings.pauseSave":`Guardar escala de pausas`,"admin.settings.pauseMode.auto":`Pausa registada, senão a tabela`,"admin.settings.pauseMode.punched":`Apenas pausas registadas`,"admin.settings.pauseMode.staffel":`Apenas a tabela de pausas`,"admin.settings.fontPathHint":`Necessário para russo, ucraniano e chinês; vazio = tipos de letra incorporados, que só cobrem Latin-1.`,"admin.settings.advanced":`Todas as configurações da instância (nomes técnicos, 1/0 para interruptores)`,"admin.settings.setting.edit_window_days":`Janela de edição (dias)`,"admin.settings.setting.quick_round_minutes":`Arredondamento (min)`,"admin.settings.setting.absence_calc_until_today":`Ausências até hoje`,"admin.settings.setting.absence_deduct_worktime":`Deduzir ausências`,"admin.settings.setting.print_limit_days":`Limite de impressão (dias)`,"admin.settings.setting.holiday_country":`País dos feriados`,"admin.settings.setting.default_language":`Idioma predefinido`,"admin.settings.setting.session_ttl_minutes":`Sessão (minutos)`,"admin.settings.setting.backup_retention_days":`Cópias (dias)`,"admin.settings.setting.attendance_list_visible":`Lista de presenças`,"admin.settings.setting.timezone":`Fuso horário`,"admin.settings.saved":`Configurações guardadas.`,"admin.holidays":`Feriados`,"admin.holiday.date":`Data (AAAA-MM-DD)`,"admin.holiday.name":`Nome`,"holiday.newYear":`Ano Novo`,"holiday.epiphany":`Dia de Reis`,"holiday.goodFriday":`Sexta-feira Santa`,"holiday.easterMonday":`Segunda-feira de Páscoa`,"holiday.labourDay":`Dia do Trabalhador`,"holiday.ascension":`Dia da Ascensão`,"holiday.whitMonday":`Segunda-feira de Pentecostes`,"holiday.corpusChristi":`Corpo de Deus`,"holiday.nationalDay":`Dia nacional`,"holiday.germanUnity":`Dia da Unidade Alemã`,"holiday.assumption":`Assunção de Nossa Senhora`,"holiday.allSaints":`Dia de Todos os Santos`,"holiday.immaculateConception":`Imaculada Conceição`,"holiday.christmas":`Natal`,"holiday.boxingDay":`Segundo dia de Natal`,"admin.holiday.add":`Adicionar feriado`,"admin.holiday.year":`Ano`,"admin.holiday.region":`Região (opcional)`,"admin.holiday.empty":`Não há feriados registados para este ano.`,"admin.tags":`Cartões (RFID/NFC)`,"admin.tag.label":`Rótulo`,"admin.tag.user":`Funcionário`,"admin.tag.create":`Criar cartão`,"admin.tag.linkOnce":`Escreva este link no cartão ou abra-o no telemóvel:`,"admin.tag.delete":`Eliminar`,"admin.tag.active":`ativo`,"admin.tag.expired":`expirado`,"admin.tag.revoked":`revogado`,"admin.tag.lastUsed":`último uso`,"admin.tag.remove":`Remover definitivamente`,"admin.tag.edit":`Editar`,"admin.tag.reissue":`Nova ligação`,"admin.tag.editTitle":`Editar crachá`,"admin.tag.editHint":`Outro funcionário ou uma nova validade emite uma nova ligação — a ligação anterior deixa de funcionar imediatamente.`,"admin.tag.validityDays":`Validade (dias)`,"admin.tag.oldLinkDead":`A ligação anterior já não funciona.`,"admin.tag.qrAlt":`Código QR da ligação do crachá`,"admin.tag.empty":`Ainda não foi criado nenhum cartão.`,"nav.statistics":`Estatísticas`,"statistics.from":`De`,"statistics.to":`Até`,"statistics.employee":`Funcionário`,"statistics.worked":`Trabalhado`,"statistics.target":`Objetivo`,"statistics.balance":`Saldo`,"statistics.openDays":`Dias abertos`,"statistics.totals":`Todos os funcionários`,"scan.title":`Cartão`,"scan.done":`Registado para {{name}} às {{time}}`,"scan.failed":`Não foi possível usar o cartão: {{reason}}`,"presence.title":`Presença`,"presence.present":`Presente`,"presence.absent":`Ausente`,"presence.tapPin":`Introduza o PIN para registar a entrada ou a saída`,"presence.cancel":`Cancelar`,"presence.updated":`{{name}} está agora {{state}}`,"presence.disabled":`O terminal de quiosque está desligado nas definições da instância.`,"admin.user.photo":`Fotografia`,"admin.user.photoTitle":`Fotografia de {{name}}`,"admin.user.photoChoose":`Escolher imagem`,"admin.user.photoRemove":`Remover imagem`,"admin.user.photoHint":`PNG, JPEG, WEBP ou GIF até 256 KB. Sem imagem é mostrado o marcador.`,"admin.corrections":`Correções de tempo`,"corrections.employee":`Colaborador`,"corrections.previous":`Mês anterior`,"corrections.next":`Mês seguinte`,"corrections.reason":`Motivo`,"corrections.reasonHint":`Fica registado no histórico (auditoria)`,"corrections.add":`Adicionar marcação ou dia`,"corrections.addTitle":`Adicionar marcação`,"corrections.addHint":`Deixe «saída» vazio quando falta apenas uma marcação`,"corrections.editTitle":`Alterar marcação`,"corrections.remove":`Eliminar marcação`,"corrections.date":`Data`,"corrections.from":`Entrada`,"corrections.to":`Saída`,"corrections.direction":`Direção`,"corrections.note":`Nota`,"corrections.empty":`Sem marcações neste mês`,"corrections.byAdmin":`adicionado pela administração`,"corrections.history":`Histórico`,"corrections.actor":`Por`,"corrections.actionCreate":`Adicionado`,"corrections.actionUpdate":`Alterado`,"corrections.actionDelete":`Excluído`,"keypad.backspace":`Apagar`,"admin.settings.branding":`Marca da empresa`,"admin.settings.brandingHint":`Logotipo, imagem de fundo e cor de fundo desta instalação. O ecrã de início de sessão e os ecrãs de quiosque também os mostram.`,"admin.settings.brandLogo":`Escolher logotipo`,"admin.settings.brandBackground":`Escolher fundo`,"admin.brand.imageResized":`Reduzida para visualização ({{size}}).`,"admin.brand.imageTooLarge":`Mesmo reduzida, a imagem continua demasiado grande.`,"admin.brand.imageType":`Só são possíveis PNG, JPEG, WEBP ou GIF.`,"admin.brand.imageUnreadable":`Não foi possível ler a imagem.`,"admin.settings.brandColor":`Cor do fundo`,"admin.settings.brandColorHint":`Valor hexadecimal como #1a2b3c, vazio para o valor predefinido`,"admin.settings.brandColorPresets":`Cores sugeridas`,"admin.settings.brandColorDefault":`Padrão`,"admin.backup.download":`Descarregar`,"admin.backup.restore":`Restaurar`,"admin.backup.restoreTitle":`Restaurar uma cópia de segurança`,"admin.backup.restoreConfirm":`A cópia de segurança {{name}} é aplicada no próximo arranque do adaptador; a base de dados atual fica guardada ao lado como ficheiro. Reinicie a instância depois disso.`,"admin.backup.pendingHint":`{{name}} é aplicada no próximo arranque ({{users}} colaboradores, {{entries}} marcações) - reinicie a instância.`,"error.backup_invalid":`Esse ficheiro não é uma cópia de segurança deste adaptador.`,"admin.settings.brandImageRemove":`Remover imagem`,"admin.settings.brandColorDefaultHint":`Repõe a cor e a imagem de fundo`,"admin.triggers":`Ações (ioBroker)`,"admin.triggersHint":"Um estado de outro adaptador marca o ponto ou define a presença — um leitor de impressão digital, um botão ou um contacto de porta. Só dispara quando o valor muda. Como valor pode escrever `toggle`: assim dispara em qualquer mudança (por exemplo ligar e desligar).","admin.trigger.label":`Descrição`,"admin.trigger.sourceState":`Estado`,"admin.trigger.mode":`Disparo`,"admin.trigger.modeCondition":`O estado tem o valor`,"admin.trigger.modeUser":`O valor é o funcionário`,"admin.trigger.condition":`Valor`,"admin.trigger.user":`Funcionário`,"admin.trigger.action":`Ação`,"admin.trigger.actionPunch":`Marcar (entrada ou saída)`,"admin.trigger.actionQuickPunch":`Marcar com arredondamento rápido`,"admin.trigger.actionPresent":`Definir como presente`,"admin.trigger.actionAbsent":`Definir como ausente`,"admin.trigger.cooldown":`Bloqueio (segundos)`,"admin.trigger.active":`Ativo`,"admin.trigger.add":`Adicionar ação`,"admin.trigger.lastFired":`Último disparo`,"admin.trigger.empty":`Ainda não há ações.`,"admin.trigger.conditionHint":"Valor ou `toggle` para disparar em qualquer mudança","admin.settings.automations":`Regras (automáticas)`,"admin.settings.automationsHint":`O que o adaptador faz sozinho: marcar a saída à hora local definida, avisar de uma saída em falta ou lembrar depois de trabalhar demasiado tempo sem pausa. Cada regra corre no máximo uma vez por funcionário e dia.`,"admin.automation.kind":`Tipo`,"admin.automation.kindClockIn":`Marcar entrada automaticamente`,"admin.automation.kindClockOut":`Marcar saída automaticamente`,"admin.automation.kindMissingPunch":`Avisar de saída em falta`,"admin.automation.kindBreakReminder":`Lembrete de pausa`,"admin.automation.at":`Hora`,"admin.automation.atHint":`Hora local do funcionário`,"admin.automation.after":`Após (minutos)`,"admin.automation.user":`Funcionário`,"admin.automation.allUsers":`todos os funcionários`,"admin.automation.add":`Adicionar regra`,"admin.automation.empty":`Ainda não há regras.`,"admin.automation.runs":`Últimas execuções`,"admin.automation.weekdays":`Dias da semana`,"admin.automation.repeat":`Repetição`,"admin.automation.repeatDay":`uma vez por dia`,"admin.automation.repeatWeek":`uma vez por semana`,"admin.settings.setting.report_font_path":`Fonte para PDF`,"presence.workedToday":`Trabalhado hoje`,"admin.user.workedTime":`Tempo de trabalho no cartão de presença`,"admin.user.workedTimeHint":`Mostra no cartão de presença o tempo trabalhado hoje (por exemplo, 1:23). Sem marcação lê-se 0:00; sem esta permissão o cartão mantém presente/ausente e o nome.`,"admin.automation.save":`Guardar regras`,"admin.automation.edit":`Editar`,"admin.automation.editTitle":`Editar regra`,"admin.automation.newTitle":`Nova regra`},Aw={"absences.create":`Afwezigheid aanvragen`,"absences.created":`Afwezigheid aangevraagd.`,"absences.empty":`Geen afwezigheden dit jaar.`,"absences.from":`Van`,"absences.portion":`Deel van de dag`,"absences.status":`Status`,"absences.title":`Afwezigheden`,"absences.to":`Naar`,"absences.type":`Type`,"absences.typeHint":`Code van de verzuimsoort, b.v. F voor vakantie`,"admin.backup":`Back-ups`,"admin.backup.create":`Maak nu een back-up`,"admin.backup.upload":`Back-up uploaden`,"admin.backup.uploadHint":`Kies een gedownloade back-up (.sqlite) - die wordt gecontroleerd en bij de volgende start toegepast.`,"admin.backup.delete":`Verwijderen`,"admin.backup.deleteTitle":`Back-up verwijderen`,"admin.backup.deleteConfirm":`De back-up {{name}} wordt verwijderd. Dit kan niet ongedaan worden gemaakt.`,"admin.backup.done":`Back-up van {{name}} geschreven, {{removed}} oude bestand(en) verwijderd.`,"admin.backup.empty":`Nog geen back-ups.`,"admin.backup.retention":`Back-ups ouder dan {{days}} dagen worden verwijderd, de nieuwste wordt altijd bewaard.`,"admin.forbidden":`U mag de administratie niet openen.`,"admin.title":`Administratie`,"admin.user.active":`Actief`,"admin.user.create":`Medewerker toevoegen`,"admin.user.empty":`Nog geen medewerkers.`,"admin.user.inactive":`Gedeactiveerd`,"admin.user.login":`Login`,"admin.user.name":`Naam`,"admin.user.newPin":`Nieuwe pincode`,"admin.user.password":`Wachtwoord`,"admin.user.passwordHint":`Minimaal 8 tekens met hoofdletters, kleine letters en cijfers.`,"admin.user.pin":`PIN`,"admin.user.pinHint":`4 tot 8 cijfers voor de terminal`,"admin.user.pinTitle":`Badge-pincode voor {{name}}`,"admin.user.roles":`Rollen`,"admin.users":`Medewerkers`,"app.offline":`Offline – stoten worden in de wachtrij geplaatst`,"app.online":`Aangesloten`,"app.title":`Tijdregistratie`,"common.cancel":`Annuleren`,"common.close":`Dichtbij`,"common.loading":`Laden…`,"common.none":`–`,"common.refresh":`Vernieuwen`,"common.retry":`Opnieuw proberen`,"common.save":`Redden`,"error.bad_request":`De invoer werd niet geaccepteerd.`,"error.conflict":`De wijziging is in strijd met bestaande gegevens.`,"error.csrf_rejected":`Het verzoek is om veiligheidsredenen afgewezen. Probeer het opnieuw.`,"error.invalid_credentials":`Gebruikersnaam of wachtwoord zijn niet correct.`,"error.locked_out":`Te veel mislukte pogingen. Probeer het later opnieuw.`,"error.network_error":`De server is niet bereikbaar.`,"error.no_session":`Uw sessie is verlopen. Meld u opnieuw aan.`,"error.not_found":`Niet gevonden.`,"error.permission_denied":`Dit is niet toegestaan.`,"error.report_font_missing":`Dit rapport heeft een Unicode-lettertype nodig (report_font_path).`,"error.revision_conflict":`De punch is in de tussentijd gewijzigd. Herlaad alstublieft.`,"error.session_expired":`Uw sessie is verlopen. Meld u opnieuw aan.`,"error.unknown_error":`Onverwachte fout.`,"error.user_inactive":`Dit account is gedeactiveerd.`,"login.failed":`Aanmelden mislukt`,"login.login":`Gebruikersnaam`,"login.password":`Wachtwoord`,"login.submit":`Log in`,"login.title":`Log in`,"month.absence":`Afwezigheid`,"month.balance":`Evenwicht`,"error.edit_window_closed":`Buiten het correctievenster`,"admin.profile.pauseRules":`Eigen pauzeregels`,"admin.profile.pauseRulesHint":`Regels alleen voor deze medewerker: ze vervangen de bedrijfsregel met dezelfde “vanaf minuten”. Zonder eigen regels geldt de bedrijfsstaffel.`,"report.csv":`Ruwe gegevens (CSV)`,"month.edit":`Corrigeren`,"month.editTitle":`Stempels corrigeren · {{date}}`,"month.editHint":`Alleen binnen het correctievenster - oudere dagen worden door de administratie gewijzigd.`,"month.time":`Tijd`,"month.direction":`Richting`,"month.directionIn":`Klok in`,"month.directionOut":`Klok uit`,"month.addPunch":`Stempel toevoegen`,"month.pause":`Pauze`,"month.paidBreak":`waarvan betaald`,"month.empty":`Geen dagen in deze maand.`,"month.holiday":`Vakantie`,"month.months":`Maanden van het jaar`,"month.next":`Volgende maand`,"month.open":`open`,"month.previous":`Vorige maand`,"month.target":`Doel`,"month.title":`Maand`,"month.worked":`Werkte`,"nav.absences":`Afwezigheden`,"nav.dashboard":`Klokken`,"nav.logout":`Meld u af`,"nav.menu":`Menu`,"nav.month":`Maand`,"nav.profile":`Profiel`,"nav.reports":`Rapporten`,"nav.sync":`Synchronisatie`,"profile.changePassword":`Wachtwoord wijzigen`,"profile.changed":`Wachtwoord gewijzigd, log opnieuw in.`,"profile.language":`Taal`,"profile.newPassword":`Nieuw wachtwoord`,"profile.roles":`Machtigingen`,"profile.title":`Profiel`,"profile.user":`Gebruiker`,"punch.balance":`Saldo vandaag`,"punch.closed":`Niet ingeklokt`,"punch.in":`Inklokken`,"punch.last":`Laatste kloktijd {{time}}`,"punch.note":`Opmerking`,"punch.now":`Klokken`,"punch.open":`Ingeklokt sinds {{time}}`,"punch.out":`Uitklokken`,"punch.queued":`Offline opgeslagen – het wordt automatisch verzonden`,"punch.quick":`Snel klokken`,"punch.sent":`Kloktijd opgeslagen ({{time}})`,"punch.target":`Doel vandaag`,"punch.worked":`Vandaag gewerkt`,"report.failed":`De verklaring kan niet worden gemaakt.`,"report.pdf":`Pdf`,"report.xls":`Excel`,"reports.empty":`Geen gegevens voor deze periode.`,"reports.monthTotals":`Maandtotalen`,"reports.overtime":`Overwerk`,"reports.paidOut":`Uitbetaald: {{minutes}}`,"reports.title":`Rapporten`,"reports.vacation":`Vakantie (opgenomen / recht)`,"reports.year":`Jaar`,"reports.yearTotals":`Jaartotalen`,"sync.accept":`Behoud de serverwaarde`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Openlijke conflicten`,"sync.dismiss":`Weggooien`,"sync.done":`Verzonden: {{accepted}}, duplicaten: {{duplicates}}, conflicten: {{conflicts}}`,"sync.empty":`Geen openlijke conflicten.`,"sync.flush":`Verstuur nu`,"sync.none":`Niets om te verzenden.`,"sync.pending":`{{count}} punch(es) wachtend`,"sync.permission":`Je mag geen conflicten oplossen.`,"sync.resolved":`Conflict opgelost.`,"sync.title":`Synchronisatie`,"terminal.title":`Terminal`,"terminal.deviceToken":`Apparaattoken`,"terminal.connect":`Verbinden`,"terminal.badge":`Pas`,"terminal.noPin":`Op dit terminal is geen pincode nodig.`,"terminal.pin":`Pincode`,"terminal.select":`Kies uw naam`,"terminal.disabled":`De terminal is uitgeschakeld in de adapterinstellingen.`,"admin.terminals":`Terminals`,"admin.terminal.name":`Naam`,"admin.terminal.location":`Locatie`,"admin.terminal.pinRequired":`Medewerkers hebben hun pincode nodig`,"admin.terminal.create":`Terminal aanmaken`,"admin.terminal.tokenOnce":`Kopieer het apparaattoken nu — het wordt alleen als hash opgeslagen en maar één keer getoond:`,"admin.terminal.url":`Open dit adres op het kioskapparaat:`,"admin.terminal.revoke":`Intrekken`,"admin.terminal.revoked":`ingetrokken`,"admin.terminal.users":`Medewerkers`,"admin.terminal.usersHint":`Zonder selectie toont het terminal alle medewerkers.`,"admin.terminal.usersAll":`alle medewerkers`,"admin.terminal.empty":`Nog geen terminal aangemaakt.`,"admin.terminal.confirmRevoke":`«{{name}}» intrekken? Het apparaattoken werkt daarna direct niet meer.`,"admin.settings":`Instellingen`,"admin.settings.fontPath":`Unicode-lettertypebestand voor PDF-overzichten (.ttf/.otf)`,"admin.user.profile":`Werkprofiel`,"admin.user.profileTitle":`Werkprofiel · {{name}}`,"admin.profile.percent":`Deeltijdfactor (%)`,"admin.profile.weeklyHours":`Weekuren bij 100 %`,"admin.profile.workdays":`Werkdagen`,"admin.profile.overtimeModel":`Overurenmodel`,"admin.profile.model.monthly":`Maandelijks`,"admin.profile.model.yearly":`Jaarlijks`,"admin.profile.model.cumulative":`Cumulatief`,"admin.profile.vacationPerYear":`Vakantiedagen per jaar`,"admin.profile.vacationCarryover":`Overgedragen vakantie (dagen)`,"admin.profile.overtimeCarryover":`Overgedragen overuren (uren)`,"admin.profile.vorholzeitPerYear":`“Vorholzeit” per jaar (uren)`,"admin.profile.pausePaid":`Betaalde pauzeminuten per dag`,"admin.profile.pausePaidHint":`Zoveel minuten van de pauze tellen als werktijd (0 = de pauze wordt niet betaald).`,"admin.settings.pauseMode":`Pauzes`,"admin.settings.pauseModeTitle":`Pauzeregel`,"admin.settings.pauseModeHint":`Hoe de pauze van een dag wordt bepaald.`,"admin.settings.pauseRules":`Pauzestaffel`,"admin.settings.pauseRulesHint":`Geldt voor dagen zonder geklokte pauze: vanaf de aangegeven blokduur (eerste tot laatste stempel van een blok) worden de minuten afgetrokken.`,"admin.settings.pauseFrom":`vanaf minuten`,"admin.settings.pauseTo":`tot minuten (leeg = zonder einde)`,"admin.settings.pauseMinutes":`pauzeminuten`,"admin.settings.pauseActive":`Regel actief`,"admin.settings.pauseAdd":`Regel toevoegen`,"admin.settings.pauseSave":`Pauzestaffel opslaan`,"admin.settings.pauseMode.auto":`Geklokte pauze, anders de staffel`,"admin.settings.pauseMode.punched":`Alleen geklokte pauzes`,"admin.settings.pauseMode.staffel":`Alleen de pauzestaffel`,"admin.settings.fontPathHint":`Nodig voor Russisch, Oekraïens en Chinees; leeg = ingebouwde lettertypen die alleen Latin-1 dekken.`,"admin.settings.advanced":`Alle instellingen van de instantie (technische namen, 1/0 voor schakelaars)`,"admin.settings.setting.edit_window_days":`Bewerkingsvenster (dagen)`,"admin.settings.setting.quick_round_minutes":`Afronding (min)`,"admin.settings.setting.absence_calc_until_today":`Afwezigheid tot vandaag`,"admin.settings.setting.absence_deduct_worktime":`Afwezigheid aftrekken`,"admin.settings.setting.print_limit_days":`Afdrukgrens (dagen)`,"admin.settings.setting.holiday_country":`Land van feestdagen`,"admin.settings.setting.default_language":`Standaardtaal`,"admin.settings.setting.session_ttl_minutes":`Sessie (minuten)`,"admin.settings.setting.backup_retention_days":`Back-ups (dagen)`,"admin.settings.setting.attendance_list_visible":`Aanwezigheidslijst`,"admin.settings.setting.timezone":`Tijdzone`,"admin.settings.saved":`Instellingen opgeslagen.`,"admin.holidays":`Feestdagen`,"admin.holiday.date":`Datum (JJJJ-MM-DD)`,"admin.holiday.name":`Naam`,"holiday.newYear":`Nieuwjaar`,"holiday.epiphany":`Driekoningen`,"holiday.goodFriday":`Goede Vrijdag`,"holiday.easterMonday":`Tweede Paasdag`,"holiday.labourDay":`Dag van de Arbeid`,"holiday.ascension":`Hemelvaartsdag`,"holiday.whitMonday":`Tweede Pinksterdag`,"holiday.corpusChristi":`Sacramentsdag`,"holiday.nationalDay":`Nationale feestdag`,"holiday.germanUnity":`Dag van de Duitse eenheid`,"holiday.assumption":`Maria-Tenhemelopneming`,"holiday.allSaints":`Allerheiligen`,"holiday.immaculateConception":`Onbevlekte Ontvangenis`,"holiday.christmas":`Eerste Kerstdag`,"holiday.boxingDay":`Tweede Kerstdag`,"admin.holiday.add":`Feestdag toevoegen`,"admin.holiday.year":`Jaar`,"admin.holiday.region":`Regio (optioneel)`,"admin.holiday.empty":`Voor dit jaar is geen feestdag vastgelegd.`,"admin.tags":`Passen (RFID/NFC)`,"admin.tag.label":`Label`,"admin.tag.user":`Medewerker`,"admin.tag.create":`Pas aanmaken`,"admin.tag.linkOnce":`Schrijf deze link op de tag of open hem op de telefoon:`,"admin.tag.delete":`Verwijderen`,"admin.tag.active":`actief`,"admin.tag.expired":`verlopen`,"admin.tag.revoked":`ingetrokken`,"admin.tag.lastUsed":`laatst gebruikt`,"admin.tag.remove":`Definitief verwijderen`,"admin.tag.edit":`Bewerken`,"admin.tag.reissue":`Nieuwe link`,"admin.tag.editTitle":`Badge bewerken`,"admin.tag.editHint":`Een andere medewerker of een nieuwe geldigheid geeft een nieuwe link — de eerder uitgegeven link werkt onmiddellijk niet meer.`,"admin.tag.validityDays":`Geldigheid (dagen)`,"admin.tag.oldLinkDead":`De eerder uitgegeven link werkt niet meer.`,"admin.tag.qrAlt":`QR-code van de badge-link`,"admin.tag.empty":`Nog geen pas aangemaakt.`,"nav.statistics":`Statistieken`,"statistics.from":`Van`,"statistics.to":`Tot`,"statistics.employee":`Medewerker`,"statistics.worked":`Gewerkt`,"statistics.target":`Doel`,"statistics.balance":`Saldo`,"statistics.openDays":`Open dagen`,"statistics.totals":`Alle medewerkers`,"scan.title":`Pasje`,"scan.done":`Gestempeld voor {{name}} om {{time}}`,"scan.failed":`De pas kon niet worden gebruikt: {{reason}}`,"presence.title":`Aanwezigheid`,"presence.present":`Aanwezig`,"presence.absent":`Afwezig`,"presence.tapPin":`Voer de pincode in om in of uit te klokken`,"presence.cancel":`Annuleren`,"presence.updated":`{{name}} is nu {{state}}`,"presence.disabled":`De kioskterminal is uitgeschakeld in de instellingen van de instantie.`,"admin.user.photo":`Foto`,"admin.user.photoTitle":`Foto van {{name}}`,"admin.user.photoChoose":`Afbeelding kiezen`,"admin.user.photoRemove":`Afbeelding verwijderen`,"admin.user.photoHint":`PNG, JPEG, WEBP of GIF tot 256 KB. Zonder afbeelding wordt de plaatshouder getoond.`,"admin.corrections":`Tijdcorrecties`,"corrections.employee":`Medewerker`,"corrections.previous":`Vorige maand`,"corrections.next":`Volgende maand`,"corrections.reason":`Reden`,"corrections.reasonHint":`Wordt in het auditlogboek vastgelegd`,"corrections.add":`Stempel of dag toevoegen`,"corrections.addTitle":`Stempel toevoegen`,"corrections.addHint":`Laat “uit” leeg als er maar één stempel ontbreekt`,"corrections.editTitle":`Stempel wijzigen`,"corrections.remove":`Stempel verwijderen`,"corrections.date":`Datum`,"corrections.from":`In`,"corrections.to":`Uit`,"corrections.direction":`Richting`,"corrections.note":`Notitie`,"corrections.empty":`Geen stempels in deze maand`,"corrections.byAdmin":`toegevoegd door de administratie`,"corrections.history":`Geschiedenis`,"corrections.actor":`Door`,"corrections.actionCreate":`Toegevoegd`,"corrections.actionUpdate":`Gewijzigd`,"corrections.actionDelete":`Verwijderd`,"keypad.backspace":`Wissen`,"admin.settings.branding":`Bedrijfshuisstijl`,"admin.settings.brandingHint":`Logo, achtergrondafbeelding en achtergrondkleur van deze installatie. Het inlogscherm en de kioskschermen tonen ze ook.`,"admin.settings.brandLogo":`Logo kiezen`,"admin.settings.brandBackground":`Achtergrond kiezen`,"admin.brand.imageResized":`Verkleind voor weergave ({{size}}).`,"admin.brand.imageTooLarge":`Ook verkleind is de afbeelding nog te groot.`,"admin.brand.imageType":`Alleen PNG, JPEG, WEBP of GIF zijn mogelijk.`,"admin.brand.imageUnreadable":`De afbeelding kon niet worden gelezen.`,"admin.settings.brandColor":`Achtergrondkleur`,"admin.settings.brandColorHint":`Hex-waarde zoals #1a2b3c, leeg voor de standaard`,"admin.settings.brandColorPresets":`Voorgestelde kleuren`,"admin.settings.brandColorDefault":`Standaard`,"admin.backup.download":`Downloaden`,"admin.backup.restore":`Terugzetten`,"admin.backup.restoreTitle":`Back-up terugzetten`,"admin.backup.restoreConfirm":`De back-up {{name}} wordt bij de volgende start van de adapter toegepast; de huidige database blijft als bestand ernaast bewaard. Start de instantie daarna opnieuw.`,"admin.backup.pendingHint":`{{name}} wordt bij de volgende start toegepast ({{users}} medewerkers, {{entries}} stempels) - start de instantie opnieuw.`,"error.backup_invalid":`Dat bestand is geen back-up van deze adapter.`,"admin.settings.brandImageRemove":`Afbeelding verwijderen`,"admin.settings.brandColorDefaultHint":`Zet de achtergrondkleur en de achtergrondafbeelding terug`,"admin.triggers":`Acties (ioBroker)`,"admin.triggersHint":"Een state van een andere adapter stempelt of zet de aanwezigheid — een vingerafdruklezer, een knop of een deurcontact. Er wordt alleen uitgevoerd als de waarde verandert. Als waarde kun je `toggle` invullen: dan reageert hij op elke wijziging (bijvoorbeeld aan en weer uit).","admin.trigger.label":`Omschrijving`,"admin.trigger.sourceState":`Status`,"admin.trigger.mode":`Voorwaarde`,"admin.trigger.modeCondition":`State heeft de waarde`,"admin.trigger.modeUser":`Waarde is de medewerker`,"admin.trigger.condition":`Waarde`,"admin.trigger.user":`Medewerker`,"admin.trigger.action":`Actie`,"admin.trigger.actionPunch":`Stempelen (in of uit)`,"admin.trigger.actionQuickPunch":`Stempelen met snelle afronding`,"admin.trigger.actionPresent":`Op aanwezig zetten`,"admin.trigger.actionAbsent":`Op afwezig zetten`,"admin.trigger.cooldown":`Blokkade (seconden)`,"admin.trigger.active":`Actief`,"admin.trigger.add":`Actie toevoegen`,"admin.trigger.lastFired":`Laatst uitgevoerd`,"admin.trigger.empty":`Nog geen acties.`,"admin.trigger.conditionHint":"Waarde of `toggle` om bij elke wijziging te reageren","admin.settings.automations":`Regels (automatisch)`,"admin.settings.automationsHint":`Wat de adapter zelf doet: op de ingestelde lokale tijd uitstempelen, een ontbrekende uitstempeling melden of herinneren na te lang werken zonder pauze. Een regel loopt hooguit één keer per medewerker en dag.`,"admin.automation.kind":`Soort`,"admin.automation.kindClockIn":`Automatisch inklokken`,"admin.automation.kindClockOut":`Automatisch uitstempelen`,"admin.automation.kindMissingPunch":`Ontbrekende uitstempeling melden`,"admin.automation.kindBreakReminder":`Pauzeherinnering`,"admin.automation.at":`Tijd`,"admin.automation.atHint":`Lokale tijd van de medewerker`,"admin.automation.after":`Na (minuten)`,"admin.automation.user":`Medewerker`,"admin.automation.allUsers":`alle medewerkers`,"admin.automation.add":`Regel toevoegen`,"admin.automation.empty":`Nog geen regels.`,"admin.automation.runs":`Laatste uitvoeringen`,"admin.automation.weekdays":`Dagen van de week`,"admin.automation.repeat":`Herhaling`,"admin.automation.repeatDay":`één keer per dag`,"admin.automation.repeatWeek":`één keer per week`,"admin.settings.setting.report_font_path":`Lettertype voor PDF`,"presence.workedToday":`Vandaag gewerkt`,"admin.user.workedTime":`Werktijd op de aanwezigheidskaart`,"admin.user.workedTimeHint":`Toont op de aanwezigheidskaart de vandaag gewerkte tijd (bijvoorbeeld 1:23). Zonder stempeling staat er 0:00; zonder deze vrijgave blijft de kaart bij aanwezig/afwezig en de naam.`,"admin.automation.save":`Regels opslaan`,"admin.automation.edit":`Bewerken`,"admin.automation.editTitle":`Regel bewerken`,"admin.automation.newTitle":`Nieuwe regel`},jw={"absences.create":`Demander une absence`,"absences.created":`Absence demandée.`,"absences.empty":`Aucune absence cette année.`,"absences.from":`Depuis`,"absences.portion":`Part du jour`,"absences.status":`Statut`,"absences.title":`Absences`,"absences.to":`À`,"absences.type":`Type`,"absences.typeHint":`Code du type d'absence, par ex. F pour les vacances`,"admin.backup":`Sauvegardes`,"admin.backup.create":`Créer une sauvegarde maintenant`,"admin.backup.upload":`Importer une sauvegarde`,"admin.backup.uploadHint":`Choisir une sauvegarde téléchargée (.sqlite) - elle est vérifiée et appliquée au prochain démarrage.`,"admin.backup.delete":`Supprimer`,"admin.backup.deleteTitle":`Supprimer la sauvegarde`,"admin.backup.deleteConfirm":`La sauvegarde {{name}} est supprimée. Cette action est irréversible.`,"admin.backup.done":`Sauvegarde {{name}} écrite, {{removed}} anciens fichiers supprimés.`,"admin.backup.empty":`Aucune sauvegarde pour l'instant.`,"admin.backup.retention":`Les sauvegardes datant de plus de {{days}}\xA0jours sont supprimées, la plus récente est toujours conservée.`,"admin.forbidden":`Vous n'êtes pas autorisé à ouvrir l'administration.`,"admin.title":`Administration`,"admin.user.active":`Actif`,"admin.user.create":`Ajouter un employé`,"admin.user.empty":`Pas encore d'employés.`,"admin.user.inactive":`Désactivé`,"admin.user.login":`Se connecter`,"admin.user.name":`Nom`,"admin.user.newPin":`Nouveau code PIN`,"admin.user.password":`Mot de passe`,"admin.user.passwordHint":`Au moins 8 caractères avec majuscules, minuscules et chiffres.`,"admin.user.pin":`Code PIN`,"admin.user.pinHint":`4 à 8 chiffres pour le terminal`,"admin.user.pinTitle":`Code PIN du badge de {{name}}`,"admin.user.roles":`Rôles`,"admin.users":`Employés`,"app.offline":`Hors ligne\xA0: les pointages sont mis en file d'attente`,"app.online":`Connecté`,"app.title":`Suivi du temps`,"common.cancel":`Annuler`,"common.close":`Fermer`,"common.loading":`Chargement…`,"common.none":`–`,"common.refresh":`Rafraîchir`,"common.retry":`Réessayer`,"common.save":`Sauvegarder`,"error.bad_request":`La contribution n'a pas été acceptée.`,"error.conflict":`La modification entre en conflit avec les données existantes.`,"error.csrf_rejected":`La demande a été rejetée pour des raisons de sécurité, veuillez réessayer.`,"error.invalid_credentials":`Le nom d'utilisateur ou le mot de passe n'est pas correct.`,"error.locked_out":`Trop de tentatives infructueuses. Veuillez réessayer plus tard.`,"error.network_error":`Le serveur n'est pas accessible.`,"error.no_session":`Votre session a expiré, veuillez vous reconnecter.`,"error.not_found":`Pas trouvé.`,"error.permission_denied":`Vous n'êtes pas autorisé à faire cela.`,"error.report_font_missing":`Ce rapport nécessite une police Unicode (report_font_path).`,"error.revision_conflict":`Le pointage a été modifié entre temps, merci de recharger.`,"error.session_expired":`Votre session a expiré, veuillez vous reconnecter.`,"error.unknown_error":`Erreur inattendue.`,"error.user_inactive":`Ce compte est désactivé.`,"login.failed":`Échec de la connexion`,"login.login":`Nom d'utilisateur`,"login.password":`Mot de passe`,"login.submit":`Se connecter`,"login.title":`Se connecter`,"month.absence":`Absence`,"month.balance":`Équilibre`,"error.edit_window_closed":`Hors de la fenêtre de correction`,"admin.profile.pauseRules":`Règles de pause propres`,"admin.profile.pauseRulesHint":`Règles pour ce collaborateur uniquement : elles remplacent la règle d'entreprise avec le même « à partir de minutes ». Sans règle propre, le barème de l'entreprise s'applique.`,"report.csv":`Données brutes (CSV)`,"month.edit":`Corriger`,"month.editTitle":`Corriger les pointages · {{date}}`,"month.editHint":`Uniquement dans la fenêtre de correction - les jours plus anciens sont modifiés par l'administration.`,"month.time":`Heure`,"month.direction":`Sens`,"month.directionIn":`Entrée`,"month.directionOut":`Sortie`,"month.addPunch":`Ajouter un pointage`,"month.pause":`Pause`,"month.paidBreak":`dont payé`,"month.empty":`Aucun jour ce mois-ci.`,"month.holiday":`Vacances`,"month.months":`Mois de l'année`,"month.next":`Mois prochain`,"month.open":`en cours`,"month.previous":`Mois précédent`,"month.target":`Cible`,"month.title":`Mois`,"month.worked":`A travaillé`,"nav.absences":`Absences`,"nav.dashboard":`Pointage`,"nav.logout":`se déconnecter`,"nav.menu":`Menu`,"nav.month":`Mois`,"nav.profile":`Profil`,"nav.reports":`Rapports`,"nav.sync":`Synchronisation`,"profile.changePassword":`Changer le mot de passe`,"profile.changed":`Mot de passe modifié, veuillez vous reconnecter.`,"profile.language":`Langue`,"profile.newPassword":`Nouveau mot de passe`,"profile.roles":`Autorisations`,"profile.title":`Profil`,"profile.user":`Utilisateur`,"punch.balance":`Solde aujourd'hui`,"punch.closed":`Non pointé`,"punch.in":`Pointer l'arrivée`,"punch.last":`Dernier pointage {{time}}`,"punch.note":`Note`,"punch.now":`Pointer`,"punch.open":`Pointé depuis {{time}}`,"punch.out":`Pointer le départ`,"punch.queued":`Enregistré hors ligne – il sera envoyé automatiquement`,"punch.quick":`Pointage rapide`,"punch.sent":`Pointage enregistré ({{time}})`,"punch.target":`Objectif aujourd'hui`,"punch.worked":`Travaillé aujourd'hui`,"report.failed":`L'instruction n'a pas pu être créée.`,"report.pdf":`PDF`,"report.xls":`Exceller`,"reports.empty":`Aucune donnée pour cette période.`,"reports.monthTotals":`Totaux mensuels`,"reports.overtime":`Heures supplémentaires`,"reports.paidOut":`Payé\xA0:\xA0{{minutes}}`,"reports.title":`Rapports`,"reports.vacation":`Vacances (prises/droites)`,"reports.year":`Année`,"reports.yearTotals":`Totaux annuels`,"sync.accept":`Conserver la valeur du serveur`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Conflits ouverts`,"sync.dismiss":`Jeter`,"sync.done":`Envoyés\xA0: {{accepted}}, doublons\xA0: {{duplicates}}, conflits\xA0: {{conflicts}}`,"sync.empty":`Pas de conflits ouverts.`,"sync.flush":`Envoyer maintenant`,"sync.none":`Rien à envoyer.`,"sync.pending":`{{count}} point(s) en attente`,"sync.permission":`Vous n'êtes pas autorisé à résoudre les conflits.`,"sync.resolved":`Conflit résolu.`,"sync.title":`Synchronisation`,"terminal.title":`Terminal`,"terminal.deviceToken":`Jeton de l'appareil`,"terminal.connect":`Connecter`,"terminal.badge":`Badge`,"terminal.noPin":`Aucun code PIN n'est nécessaire sur ce terminal.`,"terminal.pin":`Code PIN`,"terminal.select":`Choisissez votre nom`,"terminal.disabled":`Le terminal est désactivé dans les paramètres de l'adaptateur.`,"admin.terminals":`Terminaux`,"admin.terminal.name":`Nom`,"admin.terminal.location":`Emplacement`,"admin.terminal.pinRequired":`Les employés ont besoin de leur code PIN`,"admin.terminal.create":`Créer un terminal`,"admin.terminal.tokenOnce":`Copiez le jeton de l'appareil maintenant — il n'est conservé que comme hachage et affiché une seule fois :`,"admin.terminal.url":`Ouvrez cette adresse sur l'appareil du kiosque :`,"admin.terminal.revoke":`Révoquer`,"admin.terminal.revoked":`révoqué`,"admin.terminal.users":`Employés`,"admin.terminal.usersHint":`Sans sélection, la borne affiche tous les employés.`,"admin.terminal.usersAll":`tous les employés`,"admin.terminal.empty":`Aucun terminal créé pour l'instant.`,"admin.terminal.confirmRevoke":`Révoquer « {{name}} » ? Son jeton d'appareil cesse immédiatement de fonctionner.`,"admin.settings":`Paramètres`,"admin.settings.fontPath":`Fichier de police Unicode pour les relevés PDF (.ttf/.otf)`,"admin.user.profile":`Profil de travail`,"admin.user.profileTitle":`Profil de travail · {{name}}`,"admin.profile.percent":`Taux d'occupation (%)`,"admin.profile.weeklyHours":`Heures hebdomadaires à 100 %`,"admin.profile.workdays":`Jours de travail`,"admin.profile.overtimeModel":`Modèle d'heures supplémentaires`,"admin.profile.model.monthly":`Mensuel`,"admin.profile.model.yearly":`Annuel`,"admin.profile.model.cumulative":`Cumulatif`,"admin.profile.vacationPerYear":`Jours de vacances par an`,"admin.profile.vacationCarryover":`Vacances reportées (jours)`,"admin.profile.overtimeCarryover":`Heures supplémentaires reportées (heures)`,"admin.profile.vorholzeitPerYear":`« Vorholzeit » par an (heures)`,"admin.profile.pausePaid":`Minutes de pause payées par jour`,"admin.profile.pausePaidHint":`Ces minutes de la pause comptent comme temps de travail (0 = la pause n'est pas payée).`,"admin.settings.pauseMode":`Pauses`,"admin.settings.pauseModeTitle":`Règle de pause`,"admin.settings.pauseModeHint":`Comment la pause d'une journée est déterminée.`,"admin.settings.pauseRules":`Barème des pauses`,"admin.settings.pauseRulesHint":`S'applique aux jours sans pause pointée : à partir de la durée indiquée (du premier au dernier pointage d'un bloc), les minutes sont déduites.`,"admin.settings.pauseFrom":`à partir de minutes`,"admin.settings.pauseTo":`jusqu'à minutes (vide = sans fin)`,"admin.settings.pauseMinutes":`minutes de pause`,"admin.settings.pauseActive":`Règle active`,"admin.settings.pauseAdd":`Ajouter une règle`,"admin.settings.pauseSave":`Enregistrer le barème`,"admin.settings.pauseMode.auto":`Pause pointée, sinon le barème`,"admin.settings.pauseMode.punched":`Uniquement les pauses pointées`,"admin.settings.pauseMode.staffel":`Uniquement le barème des pauses`,"admin.settings.fontPathHint":`Nécessaire pour le russe, l'ukrainien et le chinois ; vide = polices intégrées, qui ne couvrent que Latin-1.`,"admin.settings.advanced":`Tous les paramètres de l'instance (noms techniques, 1/0 pour les commutateurs)`,"admin.settings.setting.edit_window_days":`Fenêtre de modification (jours)`,"admin.settings.setting.quick_round_minutes":`Arrondi (min)`,"admin.settings.setting.absence_calc_until_today":`Absences à ce jour`,"admin.settings.setting.absence_deduct_worktime":`Déduire les absences`,"admin.settings.setting.print_limit_days":`Limite d'impression (jours)`,"admin.settings.setting.holiday_country":`Pays des jours fériés`,"admin.settings.setting.default_language":`Langue par défaut`,"admin.settings.setting.session_ttl_minutes":`Durée de session (min)`,"admin.settings.setting.backup_retention_days":`Sauvegardes (jours)`,"admin.settings.setting.attendance_list_visible":`Liste de présence`,"admin.settings.setting.timezone":`Fuseau horaire`,"admin.settings.saved":`Paramètres enregistrés.`,"admin.holidays":`Jours fériés`,"admin.holiday.date":`Date (AAAA-MM-JJ)`,"admin.holiday.name":`Nom`,"holiday.newYear":`Nouvel An`,"holiday.epiphany":`Épiphanie`,"holiday.goodFriday":`Vendredi saint`,"holiday.easterMonday":`Lundi de Pâques`,"holiday.labourDay":`Fête du Travail`,"holiday.ascension":`Ascension`,"holiday.whitMonday":`Lundi de Pentecôte`,"holiday.corpusChristi":`Fête-Dieu`,"holiday.nationalDay":`Fête nationale`,"holiday.germanUnity":`Jour de l'unité allemande`,"holiday.assumption":`Assomption`,"holiday.allSaints":`Toussaint`,"holiday.immaculateConception":`Immaculée Conception`,"holiday.christmas":`Noël`,"holiday.boxingDay":`Lendemain de Noël`,"admin.holiday.add":`Ajouter un jour férié`,"admin.holiday.year":`Année`,"admin.holiday.region":`Région (facultatif)`,"admin.holiday.empty":`Aucun jour férié enregistré pour cette année.`,"admin.tags":`Badges (RFID/NFC)`,"admin.tag.label":`Libellé`,"admin.tag.user":`Employé`,"admin.tag.create":`Créer un badge`,"admin.tag.linkOnce":`Écrivez ce lien sur le badge ou ouvrez-le sur le téléphone :`,"admin.tag.delete":`Supprimer`,"admin.tag.active":`actif`,"admin.tag.expired":`expiré`,"admin.tag.revoked":`révoqué`,"admin.tag.lastUsed":`dernier usage`,"admin.tag.remove":`Supprimer définitivement`,"admin.tag.edit":`Modifier`,"admin.tag.reissue":`Nouveau lien`,"admin.tag.editTitle":`Modifier le badge`,"admin.tag.editHint":`Un autre employé ou une nouvelle validité émet un nouveau lien — le lien précédent cesse immédiatement de fonctionner.`,"admin.tag.validityDays":`Validité (jours)`,"admin.tag.oldLinkDead":`Le lien précédent ne fonctionne plus.`,"admin.tag.qrAlt":`Code QR du lien du badge`,"admin.tag.empty":`Aucun badge créé pour l'instant.`,"nav.statistics":`Statistiques`,"statistics.from":`Du`,"statistics.to":`Au`,"statistics.employee":`Employé`,"statistics.worked":`Travaillé`,"statistics.target":`Objectif`,"statistics.balance":`Solde`,"statistics.openDays":`Jours ouverts`,"statistics.totals":`Tous les employés`,"scan.title":`Badge`,"scan.done":`Pointé pour {{name}} à {{time}}`,"scan.failed":`Le badge n'a pas pu être utilisé : {{reason}}`,"presence.title":`Présence`,"presence.present":`Présent`,"presence.absent":`Absent`,"presence.tapPin":`Saisissez le code PIN pour pointer`,"presence.cancel":`Annuler`,"presence.updated":`{{name}} est maintenant {{state}}`,"presence.disabled":`Le terminal borne est désactivé dans les paramètres de l'instance.`,"admin.user.photo":`Photo`,"admin.user.photoTitle":`Photo de {{name}}`,"admin.user.photoChoose":`Choisir une image`,"admin.user.photoRemove":`Supprimer l'image`,"admin.user.photoHint":`PNG, JPEG, WEBP ou GIF jusqu'à 256 Ko. Sans image, la vignette par défaut s'affiche.`,"admin.corrections":`Corrections de temps`,"corrections.employee":`Collaborateur`,"corrections.previous":`Mois précédent`,"corrections.next":`Mois suivant`,"corrections.reason":`Motif`,"corrections.reasonHint":`Conservé dans le journal (audit)`,"corrections.add":`Ajouter un pointage ou une journée`,"corrections.addTitle":`Ajouter un pointage`,"corrections.addHint":`Laissez « sortie » vide s’il ne manque qu’un pointage`,"corrections.editTitle":`Modifier le pointage`,"corrections.remove":`Supprimer le pointage`,"corrections.date":`Date`,"corrections.from":`Arrivée`,"corrections.to":`Départ`,"corrections.direction":`Sens`,"corrections.note":`Remarque`,"corrections.empty":`Aucun pointage ce mois-ci`,"corrections.byAdmin":`ajouté par l’administration`,"corrections.history":`Historique`,"corrections.actor":`Par`,"corrections.actionCreate":`Ajouté`,"corrections.actionUpdate":`Modifié`,"corrections.actionDelete":`Supprimé`,"keypad.backspace":`Effacer`,"admin.settings.branding":`Identité visuelle`,"admin.settings.brandingHint":`Logo, image d'arrière-plan et couleur d'arrière-plan de cette installation. L'écran de connexion et les écrans kiosque les affichent également.`,"admin.settings.brandLogo":`Choisir le logo`,"admin.settings.brandBackground":`Choisir l'arrière-plan`,"admin.brand.imageResized":`Réduite pour l'affichage ({{size}}).`,"admin.brand.imageTooLarge":`Même réduite, l'image reste trop grande.`,"admin.brand.imageType":`Seuls PNG, JPEG, WEBP ou GIF sont possibles.`,"admin.brand.imageUnreadable":`L'image n'a pas pu être lue.`,"admin.settings.brandColor":`Couleur d'arrière-plan`,"admin.settings.brandColorHint":`Valeur hexadécimale comme #1a2b3c`,"admin.settings.brandColorPresets":`Couleurs proposées`,"admin.settings.brandColorDefault":`Par défaut`,"admin.backup.download":`Télécharger`,"admin.backup.restore":`Restaurer`,"admin.backup.restoreTitle":`Restaurer une sauvegarde`,"admin.backup.restoreConfirm":`La sauvegarde {{name}} est appliquée au prochain démarrage de l'adaptateur ; la base de données actuelle est conservée à côté sous forme de fichier. Redémarrez ensuite l'instance.`,"admin.backup.pendingHint":`{{name}} est appliquée au prochain démarrage ({{users}} collaborateurs, {{entries}} pointages) - redémarrez l'instance.`,"error.backup_invalid":`Ce fichier n'est pas une sauvegarde de cet adaptateur.`,"admin.settings.brandImageRemove":`Supprimer l'image`,"admin.settings.brandColorDefaultHint":`Réinitialise la couleur et l'image d'arrière-plan`,"admin.triggers":`Actions (ioBroker)`,"admin.triggersHint":"Un état d'un autre adaptateur pointe ou définit la présence — un lecteur d'empreinte, un bouton ou un contact de porte. Il se déclenche uniquement lorsque la valeur change. Comme valeur, vous pouvez saisir `toggle` : il réagit alors à chaque changement (par exemple activé puis désactivé).","admin.trigger.label":`Désignation`,"admin.trigger.sourceState":`État`,"admin.trigger.mode":`Déclencheur`,"admin.trigger.modeCondition":`L'état porte la valeur`,"admin.trigger.modeUser":`La valeur est l'employé`,"admin.trigger.condition":`Valeur`,"admin.trigger.user":`Employé`,"admin.trigger.action":`Effet`,"admin.trigger.actionPunch":`Pointer (entrée ou sortie)`,"admin.trigger.actionQuickPunch":`Pointer avec arrondi rapide`,"admin.trigger.actionPresent":`Définir comme présent`,"admin.trigger.actionAbsent":`Définir comme absent`,"admin.trigger.cooldown":`Blocage (secondes)`,"admin.trigger.active":`Actif`,"admin.trigger.add":`Ajouter une action`,"admin.trigger.lastFired":`Dernier déclenchement`,"admin.trigger.empty":`Aucune action pour l'instant.`,"admin.trigger.conditionHint":"Valeur ou `toggle` pour réagir à chaque changement","admin.settings.automations":`Règles (automatiques)`,"admin.settings.automationsHint":`Ce que l'adaptateur fait seul : pointer la sortie à l'heure locale définie, signaler une sortie manquante ou rappeler après un travail trop long sans pause. Une règle s'exécute au plus une fois par employé et par jour.`,"admin.automation.kind":`Type`,"admin.automation.kindClockIn":`Pointer l'arrivée automatiquement`,"admin.automation.kindClockOut":`Pointer la sortie automatiquement`,"admin.automation.kindMissingPunch":`Signaler une sortie manquante`,"admin.automation.kindBreakReminder":`Rappel de pause`,"admin.automation.at":`Heure`,"admin.automation.atHint":`Heure locale de l'employé`,"admin.automation.after":`Après (minutes)`,"admin.automation.user":`Employé`,"admin.automation.allUsers":`tous les employés`,"admin.automation.add":`Ajouter une règle`,"admin.automation.empty":`Aucune règle pour l'instant.`,"admin.automation.runs":`Dernières exécutions`,"admin.automation.weekdays":`Jours de la semaine`,"admin.automation.repeat":`Répétition`,"admin.automation.repeatDay":`une fois par jour`,"admin.automation.repeatWeek":`une fois par semaine`,"admin.settings.setting.report_font_path":`Police pour PDF`,"presence.workedToday":`Travaillé aujourd'hui`,"admin.user.workedTime":`Temps de travail sur la carte de présence`,"admin.user.workedTimeHint":`Affiche sur la carte de présence le temps travaillé aujourd'hui (par exemple 1:23). Sans pointage, il y a 0:00 ; sans cette autorisation, la carte reste sur présent/absent et le nom.`,"admin.automation.save":`Enregistrer les règles`,"admin.automation.edit":`Modifier`,"admin.automation.editTitle":`Modifier la règle`,"admin.automation.newTitle":`Nouvelle règle`},Mw={"absences.create":`Richiesta assenza`,"absences.created":`Assenza richiesta.`,"absences.empty":`Nessuna assenza quest'anno.`,"absences.from":`Da`,"absences.portion":`Quota del giorno`,"absences.status":`Stato`,"absences.title":`Assenze`,"absences.to":`A`,"absences.type":`Tipo`,"absences.typeHint":`Codice del tipo di assenza, ad es. F per vacanza`,"admin.backup":`Backup`,"admin.backup.create":`Crea il backup ora`,"admin.backup.upload":`Carica backup`,"admin.backup.uploadHint":`Scegli un backup scaricato (.sqlite) - viene verificato e applicato al prossimo avvio.`,"admin.backup.delete":`Elimina`,"admin.backup.deleteTitle":`Elimina backup`,"admin.backup.deleteConfirm":`Il backup {{name}} viene eliminato. L'operazione non è reversibile.`,"admin.backup.done":`Backup di {{name}} scritto, {{removed}} vecchi file rimossi.`,"admin.backup.empty":`Nessun backup ancora.`,"admin.backup.retention":`I backup più vecchi di {{days}} giorni vengono rimossi, quello più recente viene sempre mantenuto.`,"admin.forbidden":`Non è consentito aprire l'amministrazione.`,"admin.title":`Amministrazione`,"admin.user.active":`Attivo`,"admin.user.create":`Aggiungi dipendente`,"admin.user.empty":`Nessun dipendente ancora.`,"admin.user.inactive":`Disattivato`,"admin.user.login":`Login`,"admin.user.name":`Nome`,"admin.user.newPin":`Nuovo PIN`,"admin.user.password":`Password`,"admin.user.passwordHint":`Almeno 8 caratteri tra maiuscoli, minuscoli e cifre.`,"admin.user.pin":`PIN`,"admin.user.pinHint":`Da 4 a 8 cifre per il terminale`,"admin.user.pinTitle":`PIN del badge di {{name}}`,"admin.user.roles":`Ruoli`,"admin.users":`Dipendenti`,"app.offline":`Offline: le timbrature sono in coda`,"app.online":`Collegato`,"app.title":`Monitoraggio del tempo`,"common.cancel":`Cancellare`,"common.close":`Vicino`,"common.loading":`Caricamento…`,"common.none":`–`,"common.refresh":`Aggiorna`,"common.retry":`Riprova`,"common.save":`Salva`,"error.bad_request":`L'input non è stato accettato.`,"error.conflict":`La modifica è in conflitto con i dati esistenti.`,"error.csrf_rejected":`La richiesta è stata respinta per motivi di sicurezza, riprova.`,"error.invalid_credentials":`Il nome utente o la password non sono corretti.`,"error.locked_out":`Troppi tentativi falliti. Per favore riprova più tardi.`,"error.network_error":`Il server non è raggiungibile.`,"error.no_session":`La tua sessione è scaduta, accedi nuovamente.`,"error.not_found":`Non trovato.`,"error.permission_denied":`Non ti è permesso farlo.`,"error.report_font_missing":`Questo report necessita di un carattere Unicode (report_font_path).`,"error.revision_conflict":`Nel frattempo il punzone è stato cambiato, ricaricare.`,"error.session_expired":`La tua sessione è scaduta, accedi nuovamente.`,"error.unknown_error":`Errore imprevisto.`,"error.user_inactive":`Questo account è disattivato.`,"login.failed":`Accesso non riuscito`,"login.login":`Nome utente`,"login.password":`Password`,"login.submit":`Registrazione`,"login.title":`Registrazione`,"month.absence":`Assenza`,"month.balance":`Bilancia`,"error.edit_window_closed":`Fuori dalla finestra di correzione`,"admin.profile.pauseRules":`Regole di pausa proprie`,"admin.profile.pauseRulesHint":`Regole solo per questo dipendente: sostituiscono la regola aziendale con lo stesso «da minuti». Senza regole proprie vale la scala aziendale.`,"report.csv":`Dati grezzi (CSV)`,"month.edit":`Correggi`,"month.editTitle":`Correggi timbrature · {{date}}`,"month.editHint":`Solo dentro la finestra di correzione - i giorni più vecchi li modifica l'amministrazione.`,"month.time":`Ora`,"month.direction":`Direzione`,"month.directionIn":`Entrata`,"month.directionOut":`Uscita`,"month.addPunch":`Aggiungi timbratura`,"month.pause":`Pausa`,"month.paidBreak":`di cui pagato`,"month.empty":`Nessun giorno in questo mese.`,"month.holiday":`Vacanza`,"month.months":`Mesi dell'anno`,"month.next":`Il mese prossimo`,"month.open":`aperto`,"month.previous":`Mese precedente`,"month.target":`Bersaglio`,"month.title":`Mese`,"month.worked":`Lavorato`,"nav.absences":`Assenze`,"nav.dashboard":`Timbratura`,"nav.logout":`disconnessione`,"nav.menu":`Menu`,"nav.month":`Mese`,"nav.profile":`Profilo`,"nav.reports":`Rapporti`,"nav.sync":`Sincronizzazione`,"profile.changePassword":`Cambiare la password`,"profile.changed":`Password modificata, accedi nuovamente.`,"profile.language":`Lingua`,"profile.newPassword":`Nuova password`,"profile.roles":`Autorizzazioni`,"profile.title":`Profilo`,"profile.user":`Utente`,"punch.balance":`Saldo oggi`,"punch.closed":`Non timbrato`,"punch.in":`Timbrare entrata`,"punch.last":`Ultima timbratura {{time}}`,"punch.note":`Nota`,"punch.now":`Timbrare`,"punch.open":`Timbrato dalle {{time}}`,"punch.out":`Timbrare uscita`,"punch.queued":`Salvato offline: verrà inviato automaticamente`,"punch.quick":`Timbratura rapida`,"punch.sent":`Timbratura registrata ({{time}})`,"punch.target":`Obiettivo oggi`,"punch.worked":`Lavorato oggi`,"report.failed":`Impossibile creare l'istruzione.`,"report.pdf":`PDF`,"report.xls":`Eccellere`,"reports.empty":`Nessun dato per questo periodo.`,"reports.monthTotals":`Totali mensili`,"reports.overtime":`Straordinari`,"reports.paidOut":`Pagato: {{minutes}}`,"reports.title":`Rapporti`,"reports.vacation":`Ferie (prese/diritto)`,"reports.year":`Anno`,"reports.yearTotals":`Totali dell'anno`,"sync.accept":`Mantieni il valore del server`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Conflitti aperti`,"sync.dismiss":`Scartare`,"sync.done":`Inviato: {{accepted}}, duplicati: {{duplicates}}, conflitti: {{conflicts}}`,"sync.empty":`Nessun conflitto aperto.`,"sync.flush":`Invia ora`,"sync.none":`Niente da inviare.`,"sync.pending":`{{count}} punch in attesa`,"sync.permission":`Non ti è consentito risolvere i conflitti.`,"sync.resolved":`Conflitto risolto.`,"sync.title":`Sincronizzazione`,"terminal.title":`Terminal`,"terminal.deviceToken":`Token del dispositivo`,"terminal.connect":`Connetti`,"terminal.badge":`Badge`,"terminal.noPin":`Su questo terminale non serve il PIN.`,"terminal.pin":`PIN`,"terminal.select":`Scegli il nome`,"terminal.disabled":`Il terminal è disattivato nelle impostazioni dell'adattatore.`,"admin.terminals":`Terminali`,"admin.terminal.name":`Nome`,"admin.terminal.location":`Posizione`,"admin.terminal.pinRequired":`I dipendenti hanno bisogno del loro PIN`,"admin.terminal.create":`Crea terminale`,"admin.terminal.tokenOnce":`Copia ora il token del dispositivo — viene salvato solo come hash e mostrato una sola volta:`,"admin.terminal.url":`Apri questo indirizzo sul dispositivo del chiosco:`,"admin.terminal.revoke":`Revoca`,"admin.terminal.revoked":`revocato`,"admin.terminal.users":`Dipendenti`,"admin.terminal.usersHint":`Senza selezione il terminale mostra tutti i dipendenti.`,"admin.terminal.usersAll":`tutti i dipendenti`,"admin.terminal.empty":`Nessun terminale creato finora.`,"admin.terminal.confirmRevoke":`Revocare «{{name}}»? Il token del dispositivo smette subito di funzionare.`,"admin.settings":`Impostazioni`,"admin.settings.fontPath":`File di font Unicode per gli estratti PDF (.ttf/.otf)`,"admin.user.profile":`Profilo di lavoro`,"admin.user.profileTitle":`Profilo di lavoro · {{name}}`,"admin.profile.percent":`Grado di occupazione (%)`,"admin.profile.weeklyHours":`Ore settimanali al 100 %`,"admin.profile.workdays":`Giorni lavorativi`,"admin.profile.overtimeModel":`Modello di straordinario`,"admin.profile.model.monthly":`Mensile`,"admin.profile.model.yearly":`Annuale`,"admin.profile.model.cumulative":`Cumulativo`,"admin.profile.vacationPerYear":`Giorni di ferie all'anno`,"admin.profile.vacationCarryover":`Ferie riportate (giorni)`,"admin.profile.overtimeCarryover":`Straordinari riportati (ore)`,"admin.profile.vorholzeitPerYear":`«Vorholzeit» all'anno (ore)`,"admin.profile.pausePaid":`Minuti di pausa pagati al giorno`,"admin.profile.pausePaidHint":`Questi minuti della pausa contano come tempo di lavoro (0 = la pausa non è pagata).`,"admin.settings.pauseMode":`Pause`,"admin.settings.pauseModeTitle":`Regola delle pause`,"admin.settings.pauseModeHint":`Come viene determinata la pausa di una giornata.`,"admin.settings.pauseRules":`Scala delle pause`,"admin.settings.pauseRulesHint":`Vale per i giorni senza pausa timbrata: dalla durata indicata (dal primo all'ultimo timbro di un blocco) i minuti vengono detratti.`,"admin.settings.pauseFrom":`da minuti`,"admin.settings.pauseTo":`a minuti (vuoto = senza fine)`,"admin.settings.pauseMinutes":`minuti di pausa`,"admin.settings.pauseActive":`Regola attiva`,"admin.settings.pauseAdd":`Aggiungi regola`,"admin.settings.pauseSave":`Salva scala delle pause`,"admin.settings.pauseMode.auto":`Pausa timbrata, altrimenti la scala`,"admin.settings.pauseMode.punched":`Solo pause timbrate`,"admin.settings.pauseMode.staffel":`Solo la scala delle pause`,"admin.settings.fontPathHint":`Necessario per russo, ucraino e cinese; vuoto = font integrate, che coprono solo Latin-1.`,"admin.settings.advanced":`Tutte le impostazioni dell'istanza (nomi tecnici, 1/0 per gli interruttori)`,"admin.settings.setting.edit_window_days":`Finestra di modifica (giorni)`,"admin.settings.setting.quick_round_minutes":`Arrotondamento (min)`,"admin.settings.setting.absence_calc_until_today":`Assenze fino a oggi`,"admin.settings.setting.absence_deduct_worktime":`Detrarre le assenze`,"admin.settings.setting.print_limit_days":`Limite di stampa (giorni)`,"admin.settings.setting.holiday_country":`Paese delle festività`,"admin.settings.setting.default_language":`Lingua predefinita`,"admin.settings.setting.session_ttl_minutes":`Sessione (minuti)`,"admin.settings.setting.backup_retention_days":`Backup (giorni)`,"admin.settings.setting.attendance_list_visible":`Elenco presenze`,"admin.settings.setting.timezone":`Fuso orario`,"admin.settings.saved":`Impostazioni salvate.`,"admin.holidays":`Giorni festivi`,"admin.holiday.date":`Data (AAAA-MM-GG)`,"admin.holiday.name":`Nome`,"holiday.newYear":`Capodanno`,"holiday.epiphany":`Epifania`,"holiday.goodFriday":`Venerdì santo`,"holiday.easterMonday":`Lunedì dell'Angelo`,"holiday.labourDay":`Festa dei lavoratori`,"holiday.ascension":`Ascensione`,"holiday.whitMonday":`Lunedì di Pentecoste`,"holiday.corpusChristi":`Corpus Domini`,"holiday.nationalDay":`Festa nazionale`,"holiday.germanUnity":`Giorno dell'unità tedesca`,"holiday.assumption":`Assunzione`,"holiday.allSaints":`Ognissanti`,"holiday.immaculateConception":`Immacolata Concezione`,"holiday.christmas":`Natale`,"holiday.boxingDay":`Santo Stefano`,"admin.holiday.add":`Aggiungi giorno festivo`,"admin.holiday.year":`Anno`,"admin.holiday.region":`Regione (facoltativo)`,"admin.holiday.empty":`Nessun giorno festivo registrato per quest'anno.`,"admin.tags":`Badge (RFID/NFC)`,"admin.tag.label":`Etichetta`,"admin.tag.user":`Dipendente`,"admin.tag.create":`Crea badge`,"admin.tag.linkOnce":`Scrivi questo link sul tag o aprilo sul telefono:`,"admin.tag.delete":`Elimina`,"admin.tag.active":`attivo`,"admin.tag.expired":`scaduto`,"admin.tag.revoked":`revocato`,"admin.tag.lastUsed":`ultimo utilizzo`,"admin.tag.remove":`Rimuovi definitivamente`,"admin.tag.edit":`Modifica`,"admin.tag.reissue":`Nuovo link`,"admin.tag.editTitle":`Modifica badge`,"admin.tag.editHint":`Un altro dipendente o una nuova validità emette un nuovo link — il link precedente smette subito di funzionare.`,"admin.tag.validityDays":`Validità (giorni)`,"admin.tag.oldLinkDead":`Il link precedente non funziona più.`,"admin.tag.qrAlt":`Codice QR del link del badge`,"admin.tag.empty":`Nessun badge creato finora.`,"nav.statistics":`Statistiche`,"statistics.from":`Da`,"statistics.to":`A`,"statistics.employee":`Dipendente`,"statistics.worked":`Lavorato`,"statistics.target":`Obiettivo`,"statistics.balance":`Saldo`,"statistics.openDays":`Giorni aperti`,"statistics.totals":`Tutti i dipendenti`,"scan.title":`Badge`,"scan.done":`Timbrato per {{name}} alle {{time}}`,"scan.failed":`Il badge non è stato utilizzato: {{reason}}`,"presence.title":`Presenza`,"presence.present":`Presente`,"presence.absent":`Assente`,"presence.tapPin":`Inserisci il PIN per timbrare`,"presence.cancel":`Annulla`,"presence.updated":`{{name}} ora è {{state}}`,"presence.disabled":`Il terminale chiosco è disattivato nelle impostazioni dell'istanza.`,"admin.user.photo":`Foto`,"admin.user.photoTitle":`Foto di {{name}}`,"admin.user.photoChoose":`Scegli immagine`,"admin.user.photoRemove":`Rimuovi immagine`,"admin.user.photoHint":`PNG, JPEG, WEBP o GIF fino a 256 KB. Senza immagine viene mostrato il segnaposto.`,"admin.corrections":`Correzioni orari`,"corrections.employee":`Dipendente`,"corrections.previous":`Mese precedente`,"corrections.next":`Mese successivo`,"corrections.reason":`Motivo`,"corrections.reasonHint":`Viene registrato nel log di controllo`,"corrections.add":`Aggiungi timbratura o giorno`,"corrections.addTitle":`Aggiungi timbratura`,"corrections.addHint":`Lascia vuoto «uscita» se manca una sola timbratura`,"corrections.editTitle":`Modifica timbratura`,"corrections.remove":`Elimina timbratura`,"corrections.date":`Data`,"corrections.from":`Entrata`,"corrections.to":`Uscita`,"corrections.direction":`Direzione`,"corrections.note":`Nota`,"corrections.empty":`Nessuna timbratura in questo mese`,"corrections.byAdmin":`aggiunto dall’amministrazione`,"corrections.history":`Cronologia`,"corrections.actor":`Da`,"corrections.actionCreate":`Aggiunto`,"corrections.actionUpdate":`Modificato`,"corrections.actionDelete":`Eliminato`,"keypad.backspace":`Cancella`,"admin.settings.branding":`Immagine aziendale`,"admin.settings.brandingHint":`Logo, immagine di sfondo e colore di sfondo di questa installazione. Anche la schermata di accesso e i chioschi li mostrano.`,"admin.settings.brandLogo":`Scegli il logo`,"admin.settings.brandBackground":`Scegli lo sfondo`,"admin.brand.imageResized":`Ridotta per la visualizzazione ({{size}}).`,"admin.brand.imageTooLarge":`Anche ridotta, l'immagine è troppo grande.`,"admin.brand.imageType":`Sono possibili solo PNG, JPEG, WEBP o GIF.`,"admin.brand.imageUnreadable":`Non è stato possibile leggere l'immagine.`,"admin.settings.brandColor":`Colore di sfondo`,"admin.settings.brandColorHint":`Valore esadecimale come #1a2b3c, vuoto per il valore predefinito`,"admin.settings.brandColorPresets":`Colori suggeriti`,"admin.settings.brandColorDefault":`Predefinito`,"admin.backup.download":`Scarica`,"admin.backup.restore":`Ripristina`,"admin.backup.restoreTitle":`Ripristinare un backup`,"admin.backup.restoreConfirm":`Il backup {{name}} viene applicato al prossimo avvio dell'adattatore; il database attuale resta accanto come file. Riavvia poi l'istanza.`,"admin.backup.pendingHint":`{{name}} viene applicato al prossimo avvio ({{users}} dipendenti, {{entries}} timbrature) - riavvia l'istanza.`,"error.backup_invalid":`Quel file non è un backup di questo adattatore.`,"admin.settings.brandImageRemove":`Rimuovi immagine`,"admin.settings.brandColorDefaultHint":`Reimposta il colore e l'immagine di sfondo`,"admin.triggers":`Azioni (ioBroker)`,"admin.triggersHint":"Uno stato di un altro adattatore timbra o imposta la presenza — un lettore di impronte, un pulsante o un contatto della porta. Scatta solo quando il valore cambia. Come valore puoi scrivere `toggle`: così scatta a ogni cambiamento (per esempio acceso e poi spento).","admin.trigger.label":`Descrizione`,"admin.trigger.sourceState":`Stato`,"admin.trigger.mode":`Attivatore`,"admin.trigger.modeCondition":`Lo stato porta il valore`,"admin.trigger.modeUser":`Il valore è il dipendente`,"admin.trigger.condition":`Valore`,"admin.trigger.user":`Dipendente`,"admin.trigger.action":`Azione`,"admin.trigger.actionPunch":`Timbra (entrata o uscita)`,"admin.trigger.actionQuickPunch":`Timbra con arrotondamento rapido`,"admin.trigger.actionPresent":`Imposta presente`,"admin.trigger.actionAbsent":`Imposta assente`,"admin.trigger.cooldown":`Blocco (secondi)`,"admin.trigger.active":`Attivo`,"admin.trigger.add":`Aggiungi azione`,"admin.trigger.lastFired":`Ultima esecuzione`,"admin.trigger.empty":`Nessuna azione per ora.`,"admin.trigger.conditionHint":"Valore o `toggle` per reagire a ogni cambiamento","admin.settings.automations":`Regole (automatiche)`,"admin.settings.automationsHint":`Cosa fa l'adattatore da solo: timbra l'uscita all'ora locale impostata, segnala una timbratura di uscita mancante o ricorda dopo troppo lavoro senza pausa. Una regola viene eseguita al massimo una volta per dipendente e giorno.`,"admin.automation.kind":`Tipo`,"admin.automation.kindClockIn":`Timbra l'entrata automaticamente`,"admin.automation.kindClockOut":`Timbra l'uscita automaticamente`,"admin.automation.kindMissingPunch":`Segnala uscita mancante`,"admin.automation.kindBreakReminder":`Promemoria pausa`,"admin.automation.at":`Ora`,"admin.automation.atHint":`Ora locale del dipendente`,"admin.automation.after":`Dopo (minuti)`,"admin.automation.user":`Dipendente`,"admin.automation.allUsers":`tutti i dipendenti`,"admin.automation.add":`Aggiungi regola`,"admin.automation.empty":`Nessuna regola per ora.`,"admin.automation.runs":`Ultime esecuzioni`,"admin.automation.weekdays":`Giorni della settimana`,"admin.automation.repeat":`Ripetizione`,"admin.automation.repeatDay":`una volta al giorno`,"admin.automation.repeatWeek":`una volta a settimana`,"admin.settings.setting.report_font_path":`Carattere per PDF`,"presence.workedToday":`Lavorato oggi`,"admin.user.workedTime":`Tempo di lavoro sulla scheda di presenza`,"admin.user.workedTimeHint":`Mostra sulla scheda di presenza il tempo lavorato oggi (per esempio 1:23). Senza timbratura c'è 0:00; senza questa autorizzazione la scheda resta con presente/assente e il nome.`,"admin.automation.save":`Salva regole`,"admin.automation.edit":`Modifica`,"admin.automation.editTitle":`Modifica regola`,"admin.automation.newTitle":`Nuova regola`},Nw={"absences.create":`Solicitar ausencia`,"absences.created":`Ausencia solicitada.`,"absences.empty":`No hay ausencias en este año.`,"absences.from":`De`,"absences.portion":`Parte del día`,"absences.status":`Estado`,"absences.title":`Ausencias`,"absences.to":`A`,"absences.type":`Tipo`,"absences.typeHint":`Código del tipo de ausencia, p.e. F de vacaciones`,"admin.backup":`Copias de seguridad`,"admin.backup.create":`Crear copia de seguridad ahora`,"admin.backup.upload":`Subir copia`,"admin.backup.uploadHint":`Elige una copia descargada (.sqlite) - se verifica y se aplica en el próximo inicio.`,"admin.backup.delete":`Eliminar`,"admin.backup.deleteTitle":`Eliminar copia`,"admin.backup.deleteConfirm":`La copia {{name}} se elimina. Esto no se puede deshacer.`,"admin.backup.done":`Copia de seguridad de {{name}} escrita, {{removed}} archivo(s) antiguo(s) eliminado(s).`,"admin.backup.empty":`Aún no hay copias de seguridad.`,"admin.backup.retention":`Las copias de seguridad anteriores a {{days}} días se eliminan y siempre se conserva la más reciente.`,"admin.forbidden":`No se le permite abrir la administración.`,"admin.title":`Administración`,"admin.user.active":`Activo`,"admin.user.create":`Agregar empleado`,"admin.user.empty":`Aún no hay empleados.`,"admin.user.inactive":`Desactivado`,"admin.user.login":`Acceso`,"admin.user.name":`Nombre`,"admin.user.newPin":`Nuevo PIN`,"admin.user.password":`Contraseña`,"admin.user.passwordHint":`Al menos 8 caracteres con mayúsculas, minúsculas y dígitos.`,"admin.user.pin":`PIN`,"admin.user.pinHint":`4 a 8 dígitos para el terminal`,"admin.user.pinTitle":`PIN de la tarjeta de {{name}}`,"admin.user.roles":`Roles`,"admin.users":`Empleados`,"app.offline":`Sin conexión: los marcajes están en cola`,"app.online":`Conectado`,"app.title":`Seguimiento del tiempo`,"common.cancel":`Cancelar`,"common.close":`Cerca`,"common.loading":`Cargando…`,"common.none":`–`,"common.refresh":`Refrescar`,"common.retry":`Rever`,"common.save":`Ahorrar`,"error.bad_request":`El aporte no fue aceptado.`,"error.conflict":`El cambio entra en conflicto con los datos existentes.`,"error.csrf_rejected":`La solicitud fue rechazada por razones de seguridad, inténtelo nuevamente.`,"error.invalid_credentials":`El nombre de usuario o la contraseña no son correctos.`,"error.locked_out":`Demasiados intentos fallidos. Inténtelo de nuevo más tarde.`,"error.network_error":`El servidor no es accesible.`,"error.no_session":`Su sesión ha caducado, inicie sesión nuevamente.`,"error.not_found":`Extraviado.`,"error.permission_denied":`No tienes permitido hacer esto.`,"error.report_font_missing":`Este informe necesita una fuente Unicode (report_font_path).`,"error.revision_conflict":`Mientras tanto, el punzón fue cambiado, por favor recarga.`,"error.session_expired":`Su sesión ha caducado, inicie sesión nuevamente.`,"error.unknown_error":`Error inesperado.`,"error.user_inactive":`Esta cuenta está desactivada.`,"login.failed":`Error al iniciar sesión`,"login.login":`Nombre de usuario`,"login.password":`Contraseña`,"login.submit":`Iniciar sesión`,"login.title":`Iniciar sesión`,"month.absence":`Ausencia`,"month.balance":`Saldo`,"error.edit_window_closed":`Fuera de la ventana de corrección`,"admin.profile.pauseRules":`Reglas de pausa propias`,"admin.profile.pauseRulesHint":`Reglas solo para este empleado: sustituyen la regla de la empresa con el mismo «desde minutos». Sin reglas propias se aplica la escala de la empresa.`,"report.csv":`Datos brutos (CSV)`,"month.edit":`Corregir`,"month.editTitle":`Corregir fichajes · {{date}}`,"month.editHint":`Solo dentro de la ventana de corrección - los días anteriores los cambia la administración.`,"month.time":`Hora`,"month.direction":`Dirección`,"month.directionIn":`Entrada`,"month.directionOut":`Salida`,"month.addPunch":`Añadir fichaje`,"month.pause":`Pausa`,"month.paidBreak":`de los cuales pagado`,"month.empty":`No hay días en este mes.`,"month.holiday":`Día festivo`,"month.months":`Meses del año`,"month.next":`Mes próximo`,"month.open":`abierto`,"month.previous":`Mes anterior`,"month.target":`Objetivo`,"month.title":`Mes`,"month.worked":`Trabajó`,"nav.absences":`Ausencias`,"nav.dashboard":`Fichaje`,"nav.logout":`desconectar`,"nav.menu":`Menú`,"nav.month":`Mes`,"nav.profile":`Perfil`,"nav.reports":`Informes`,"nav.sync":`Sincronización`,"profile.changePassword":`Cambiar la contraseña`,"profile.changed":`Contraseña cambiada, inicie sesión nuevamente.`,"profile.language":`Idioma`,"profile.newPassword":`Nueva contraseña`,"profile.roles":`Permisos`,"profile.title":`Perfil`,"profile.user":`Usuario`,"punch.balance":`Saldo hoy`,"punch.closed":`Sin fichar`,"punch.in":`Fichar entrada`,"punch.last":`Último fichaje {{time}}`,"punch.note":`Nota`,"punch.now":`Fichar`,"punch.open":`Fichado desde {{time}}`,"punch.out":`Fichar salida`,"punch.queued":`Guardado sin conexión: se enviará automáticamente`,"punch.quick":`Fichaje rápido`,"punch.sent":`Fichaje guardado ({{time}})`,"punch.target":`Objetivo hoy`,"punch.worked":`Trabajado hoy`,"report.failed":`No se pudo crear la declaración.`,"report.pdf":`PDF`,"report.xls":`Sobresalir`,"reports.empty":`No hay datos para este período.`,"reports.monthTotals":`Totales mensuales`,"reports.overtime":`Horas extras`,"reports.paidOut":`Pagado: {{minutes}}`,"reports.title":`Informes`,"reports.vacation":`Vacaciones (tomada/derecho)`,"reports.year":`Año`,"reports.yearTotals":`Totales del año`,"sync.accept":`Mantener el valor del servidor`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Conflictos abiertos`,"sync.dismiss":`Desechar`,"sync.done":`Enviado: {{accepted}}, duplicados: {{duplicates}}, conflictos: {{conflicts}}`,"sync.empty":`Sin conflictos abiertos.`,"sync.flush":`Enviar ahora`,"sync.none":`Nada que enviar.`,"sync.pending":`{{count}} golpe(es) esperando`,"sync.permission":`No se le permite resolver conflictos.`,"sync.resolved":`Conflicto resuelto.`,"sync.title":`Sincronización`,"terminal.title":`Terminal`,"terminal.deviceToken":`Token del dispositivo`,"terminal.connect":`Conectar`,"terminal.badge":`Tarjeta`,"terminal.noPin":`En este terminal no se necesita PIN.`,"terminal.pin":`PIN`,"terminal.select":`Elija su nombre`,"terminal.disabled":`El terminal está desactivado en la configuración del adaptador.`,"admin.terminals":`Terminales`,"admin.terminal.name":`Nombre`,"admin.terminal.location":`Ubicación`,"admin.terminal.pinRequired":`Los empleados necesitan su PIN`,"admin.terminal.create":`Crear terminal`,"admin.terminal.tokenOnce":`Copia ahora el token del dispositivo — solo se guarda como hash y se muestra una única vez:`,"admin.terminal.url":`Abre esta dirección en el dispositivo del kiosco:`,"admin.terminal.revoke":`Revocar`,"admin.terminal.revoked":`revocado`,"admin.terminal.users":`Empleados`,"admin.terminal.usersHint":`Sin selección, el terminal muestra a todos los empleados.`,"admin.terminal.usersAll":`todos los empleados`,"admin.terminal.empty":`Todavía no se ha creado ningún terminal.`,"admin.terminal.confirmRevoke":`¿Revocar «{{name}}»? Su token de dispositivo deja de funcionar de inmediato.`,"admin.settings":`Ajustes`,"admin.settings.fontPath":`Archivo de fuente Unicode para los extractos PDF (.ttf/.otf)`,"admin.user.profile":`Perfil laboral`,"admin.user.profileTitle":`Perfil laboral · {{name}}`,"admin.profile.percent":`Grado de ocupación (%)`,"admin.profile.weeklyHours":`Horas semanales al 100 %`,"admin.profile.workdays":`Días laborables`,"admin.profile.overtimeModel":`Modelo de horas extras`,"admin.profile.model.monthly":`Mensual`,"admin.profile.model.yearly":`Anual`,"admin.profile.model.cumulative":`Acumulativo`,"admin.profile.vacationPerYear":`Días de vacaciones al año`,"admin.profile.vacationCarryover":`Vacaciones arrastradas (días)`,"admin.profile.overtimeCarryover":`Horas extras arrastradas (horas)`,"admin.profile.vorholzeitPerYear":`«Vorholzeit» al año (horas)`,"admin.profile.pausePaid":`Minutos de pausa pagados por día`,"admin.profile.pausePaidHint":`Esos minutos de la pausa cuentan como tiempo de trabajo (0 = la pausa no se paga).`,"admin.settings.pauseMode":`Pausas`,"admin.settings.pauseModeTitle":`Regla de pausas`,"admin.settings.pauseModeHint":`Cómo se determina la pausa de un día.`,"admin.settings.pauseRules":`Escala de pausas`,"admin.settings.pauseRulesHint":`Se aplica a los días sin pausa registrada: a partir de la duración indicada (del primer al último registro de un bloque) se descuentan los minutos.`,"admin.settings.pauseFrom":`desde minutos`,"admin.settings.pauseTo":`hasta minutos (vacío = sin fin)`,"admin.settings.pauseMinutes":`minutos de pausa`,"admin.settings.pauseActive":`Regla activa`,"admin.settings.pauseAdd":`Añadir regla`,"admin.settings.pauseSave":`Guardar escala de pausas`,"admin.settings.pauseMode.auto":`Pausa registrada, si no la escala`,"admin.settings.pauseMode.punched":`Solo pausas registradas`,"admin.settings.pauseMode.staffel":`Solo la escala de pausas`,"admin.settings.fontPathHint":`Necesario para ruso, ucraniano y chino; vacío = fuentes integradas, que solo cubren Latin-1.`,"admin.settings.advanced":`Todos los ajustes de la instancia (nombres técnicos, 1/0 para interruptores)`,"admin.settings.setting.edit_window_days":`Ventana de edición (días)`,"admin.settings.setting.quick_round_minutes":`Redondeo (min)`,"admin.settings.setting.absence_calc_until_today":`Ausencias hasta hoy`,"admin.settings.setting.absence_deduct_worktime":`Descontar ausencias`,"admin.settings.setting.print_limit_days":`Límite de impresión (días)`,"admin.settings.setting.holiday_country":`País de los festivos`,"admin.settings.setting.default_language":`Idioma predeterminado`,"admin.settings.setting.session_ttl_minutes":`Sesión (minutos)`,"admin.settings.setting.backup_retention_days":`Copias (días)`,"admin.settings.setting.attendance_list_visible":`Lista de asistencia`,"admin.settings.setting.timezone":`Zona horaria`,"admin.settings.saved":`Ajustes guardados.`,"admin.holidays":`Días festivos`,"admin.holiday.date":`Fecha (AAAA-MM-DD)`,"admin.holiday.name":`Nombre`,"holiday.newYear":`Año Nuevo`,"holiday.epiphany":`Epifanía`,"holiday.goodFriday":`Viernes Santo`,"holiday.easterMonday":`Lunes de Pascua`,"holiday.labourDay":`Día del Trabajo`,"holiday.ascension":`Ascensión`,"holiday.whitMonday":`Lunes de Pentecostés`,"holiday.corpusChristi":`Solemnidad del Corpus Christi`,"holiday.nationalDay":`Fiesta nacional`,"holiday.germanUnity":`Día de la Unidad Alemana`,"holiday.assumption":`Asunción`,"holiday.allSaints":`Todos los Santos`,"holiday.immaculateConception":`Inmaculada Concepción`,"holiday.christmas":`Navidad`,"holiday.boxingDay":`San Esteban`,"admin.holiday.add":`Añadir día festivo`,"admin.holiday.year":`Año`,"admin.holiday.region":`Región (opcional)`,"admin.holiday.empty":`No hay días festivos registrados para este año.`,"admin.tags":`Tarjetas (RFID/NFC)`,"admin.tag.label":`Etiqueta`,"admin.tag.user":`Empleado`,"admin.tag.create":`Crear tarjeta`,"admin.tag.linkOnce":`Escribe este enlace en la etiqueta o ábrelo en el teléfono:`,"admin.tag.delete":`Eliminar`,"admin.tag.active":`activo`,"admin.tag.expired":`caducado`,"admin.tag.revoked":`revocado`,"admin.tag.lastUsed":`último uso`,"admin.tag.remove":`Eliminar definitivamente`,"admin.tag.edit":`Editar`,"admin.tag.reissue":`Nuevo enlace`,"admin.tag.editTitle":`Editar credencial`,"admin.tag.editHint":`Otro empleado o una nueva validez emite un nuevo enlace — el enlace anterior deja de funcionar de inmediato.`,"admin.tag.validityDays":`Validez (días)`,"admin.tag.oldLinkDead":`El enlace anterior ya no funciona.`,"admin.tag.qrAlt":`Código QR del enlace de la credencial`,"admin.tag.empty":`Todavía no se ha creado ninguna tarjeta.`,"nav.statistics":`Estadísticas`,"statistics.from":`Desde`,"statistics.to":`Hasta`,"statistics.employee":`Empleado`,"statistics.worked":`Trabajado`,"statistics.target":`Objetivo`,"statistics.balance":`Saldo`,"statistics.openDays":`Días abiertos`,"statistics.totals":`Todos los empleados`,"scan.title":`Tarjeta`,"scan.done":`Fichado para {{name}} a las {{time}}`,"scan.failed":`No se pudo usar la tarjeta: {{reason}}`,"presence.title":`Presencia`,"presence.present":`Presente`,"presence.absent":`Ausente`,"presence.tapPin":`Introduce el PIN para fichar`,"presence.cancel":`Cancelar`,"presence.updated":`{{name}} ahora está {{state}}`,"presence.disabled":`El terminal de quiosco está desactivado en la configuración de la instancia.`,"admin.user.photo":`Foto`,"admin.user.photoTitle":`Foto de {{name}}`,"admin.user.photoChoose":`Elegir imagen`,"admin.user.photoRemove":`Quitar imagen`,"admin.user.photoHint":`PNG, JPEG, WEBP o GIF hasta 256 KB. Sin imagen se muestra el marcador.`,"admin.corrections":`Correcciones de tiempo`,"corrections.employee":`Empleado`,"corrections.previous":`Mes anterior`,"corrections.next":`Mes siguiente`,"corrections.reason":`Motivo`,"corrections.reasonHint":`Se guarda en el registro de auditoría`,"corrections.add":`Añadir fichaje o día`,"corrections.addTitle":`Añadir fichaje`,"corrections.addHint":`Deja «salida» vacío si solo falta un fichaje`,"corrections.editTitle":`Modificar fichaje`,"corrections.remove":`Eliminar fichaje`,"corrections.date":`Fecha`,"corrections.from":`Entrada`,"corrections.to":`Salida`,"corrections.direction":`Dirección`,"corrections.note":`Nota`,"corrections.empty":`Sin fichajes en este mes`,"corrections.byAdmin":`añadido por la administración`,"corrections.history":`Historial`,"corrections.actor":`Por`,"corrections.actionCreate":`Añadido`,"corrections.actionUpdate":`Modificado`,"corrections.actionDelete":`Eliminado`,"keypad.backspace":`Borrar`,"admin.settings.branding":`Imagen corporativa`,"admin.settings.brandingHint":`Logotipo, imagen de fondo y color de fondo de esta instalación. La pantalla de inicio de sesión y las pantallas de kiosco también las muestran.`,"admin.settings.brandLogo":`Elegir logotipo`,"admin.settings.brandBackground":`Elegir fondo`,"admin.brand.imageResized":`Reducida para la visualización ({{size}}).`,"admin.brand.imageTooLarge":`Incluso reducida, la imagen sigue siendo demasiado grande.`,"admin.brand.imageType":`Solo son posibles PNG, JPEG, WEBP o GIF.`,"admin.brand.imageUnreadable":`No se pudo leer la imagen.`,"admin.settings.brandColor":`Color de fondo`,"admin.settings.brandColorHint":`Valor hexadecimal como #1a2b3c, vacío para el valor predeterminado`,"admin.settings.brandColorPresets":`Colores sugeridos`,"admin.settings.brandColorDefault":`Predeterminado`,"admin.backup.download":`Descargar`,"admin.backup.restore":`Restaurar`,"admin.backup.restoreTitle":`Restaurar una copia de seguridad`,"admin.backup.restoreConfirm":`La copia de seguridad {{name}} se aplica en el próximo arranque del adaptador; la base de datos actual se conserva al lado como archivo. Reinicia la instancia después.`,"admin.backup.pendingHint":`{{name}} se aplica en el próximo arranque ({{users}} empleados, {{entries}} fichajes) - reinicia la instancia.`,"error.backup_invalid":`Ese archivo no es una copia de seguridad de este adaptador.`,"admin.settings.brandImageRemove":`Quitar imagen`,"admin.settings.brandColorDefaultHint":`Restablece el color y la imagen de fondo`,"admin.triggers":`Acciones (ioBroker)`,"admin.triggersHint":"Un estado de otro adaptador ficha o define la presencia — un lector de huellas, un botón o un contacto de puerta. Solo se activa cuando cambia el valor. Como valor puedes escribir `toggle`: así se activa en cada cambio (por ejemplo encendido y otra vez apagado).","admin.trigger.label":`Descripción`,"admin.trigger.sourceState":`Estado`,"admin.trigger.mode":`Disparador`,"admin.trigger.modeCondition":`El estado lleva el valor`,"admin.trigger.modeUser":`El valor es el empleado`,"admin.trigger.condition":`Valor`,"admin.trigger.user":`Empleado`,"admin.trigger.action":`Acción`,"admin.trigger.actionPunch":`Fichar (entrada o salida)`,"admin.trigger.actionQuickPunch":`Fichar con redondeo rápido`,"admin.trigger.actionPresent":`Marcar como presente`,"admin.trigger.actionAbsent":`Marcar como ausente`,"admin.trigger.cooldown":`Bloqueo (segundos)`,"admin.trigger.active":`Activo`,"admin.trigger.add":`Añadir acción`,"admin.trigger.lastFired":`Última ejecución`,"admin.trigger.empty":`Todavía no hay acciones.`,"admin.trigger.conditionHint":"Valor o `toggle` para activarse en cada cambio","admin.settings.automations":`Reglas (automáticas)`,"admin.settings.automationsHint":`Lo que hace el adaptador por su cuenta: fichar la salida a la hora local configurada, avisar de una salida que falta o recordar tras trabajar demasiado tiempo sin pausa. Cada regla se ejecuta como máximo una vez por empleado y día.`,"admin.automation.kind":`Tipo`,"admin.automation.kindClockIn":`Fichar la entrada automáticamente`,"admin.automation.kindClockOut":`Fichar la salida automáticamente`,"admin.automation.kindMissingPunch":`Avisar de salida que falta`,"admin.automation.kindBreakReminder":`Recordatorio de pausa`,"admin.automation.at":`Hora`,"admin.automation.atHint":`Hora local del empleado`,"admin.automation.after":`Tras (minutos)`,"admin.automation.user":`Empleado`,"admin.automation.allUsers":`todos los empleados`,"admin.automation.add":`Añadir regla`,"admin.automation.empty":`Todavía no hay reglas.`,"admin.automation.runs":`Últimas ejecuciones`,"admin.automation.weekdays":`Días de la semana`,"admin.automation.repeat":`Repetición`,"admin.automation.repeatDay":`una vez al día`,"admin.automation.repeatWeek":`una vez por semana`,"admin.settings.setting.report_font_path":`Fuente para PDF`,"presence.workedToday":`Trabajado hoy`,"admin.user.workedTime":`Tiempo de trabajo en la tarjeta de presencia`,"admin.user.workedTimeHint":`Muestra en la tarjeta de presencia el tiempo trabajado hoy (por ejemplo, 1:23). Sin fichaje pone 0:00; sin esta autorización la tarjeta se queda en presente/ausente y el nombre.`,"admin.automation.save":`Guardar reglas`,"admin.automation.edit":`Editar`,"admin.automation.editTitle":`Editar regla`,"admin.automation.newTitle":`Nueva regla`},Pw={"absences.create":`Poproś o nieobecność`,"absences.created":`Zgłoszono nieobecność.`,"absences.empty":`Brak nieobecności w tym roku.`,"absences.from":`Z`,"absences.portion":`Udział dnia`,"absences.status":`Status`,"absences.title":`Nieobecności`,"absences.to":`Do`,"absences.type":`Typ`,"absences.typeHint":`Kod rodzaju nieobecności, np.: F na wakacje`,"admin.backup":`Kopie zapasowe`,"admin.backup.create":`Utwórz kopię zapasową teraz`,"admin.backup.upload":`Wgraj kopię`,"admin.backup.uploadHint":`Wybierz pobraną kopię (.sqlite) - zostanie sprawdzona i zastosowana przy następnym starcie.`,"admin.backup.delete":`Usuń`,"admin.backup.deleteTitle":`Usuń kopię`,"admin.backup.deleteConfirm":`Kopia {{name}} zostanie usunięta. Tego nie można cofnąć.`,"admin.backup.done":`Kopia zapasowa {{name}} została utworzona, usunięto {{removed}} stare pliki.`,"admin.backup.empty":`Nie ma jeszcze kopii zapasowych.`,"admin.backup.retention":`Kopie zapasowe starsze niż {{days}} dni są usuwane, zawsze zachowywana jest najnowsza.`,"admin.forbidden":`Nie możesz otwierać administracji.`,"admin.title":`Administracja`,"admin.user.active":`Aktywny`,"admin.user.create":`Dodaj pracownika`,"admin.user.empty":`Nie ma jeszcze pracowników.`,"admin.user.inactive":`Dezaktywowane`,"admin.user.login":`Login`,"admin.user.name":`Nazwa`,"admin.user.newPin":`Nowy PIN`,"admin.user.password":`Hasło`,"admin.user.passwordHint":`Co najmniej 8 znaków, duże i małe litery oraz cyfry.`,"admin.user.pin":`PIN`,"admin.user.pinHint":`4 do 8 cyfr dla terminala`,"admin.user.pinTitle":`PIN identyfikatora dla {{name}}`,"admin.user.roles":`Role`,"admin.users":`Pracownicy`,"app.offline":`Offline – ciosy są w kolejce`,"app.online":`Połączony`,"app.title":`Śledzenie czasu`,"common.cancel":`Anulować`,"common.close":`Zamknąć`,"common.loading":`Załadunek…`,"common.none":`–`,"common.refresh":`Odświeżać`,"common.retry":`Spróbować ponownie`,"common.save":`Ratować`,"error.bad_request":`Dane wejściowe nie zostały zaakceptowane.`,"error.conflict":`Zmiana jest sprzeczna z istniejącymi danymi.`,"error.csrf_rejected":`Żądanie zostało odrzucone ze względów bezpieczeństwa. Spróbuj ponownie.`,"error.invalid_credentials":`Nazwa użytkownika lub hasło są nieprawidłowe.`,"error.locked_out":`Zbyt wiele nieudanych prób. Spróbuj ponownie później.`,"error.network_error":`Serwer jest nieosiągalny.`,"error.no_session":`Twoja sesja wygasła. Zaloguj się ponownie.`,"error.not_found":`Nie znaleziono.`,"error.permission_denied":`Nie wolno Ci tego robić.`,"error.report_font_missing":`Ten raport wymaga czcionki Unicode (ścieżka_fontu_reportu).`,"error.revision_conflict":`W międzyczasie cios został zmieniony. Proszę załadować ponownie.`,"error.session_expired":`Twoja sesja wygasła. Zaloguj się ponownie.`,"error.unknown_error":`Nieoczekiwany błąd.`,"error.user_inactive":`To konto jest dezaktywowane.`,"login.failed":`Logowanie nie powiodło się`,"login.login":`Nazwa użytkownika`,"login.password":`Hasło`,"login.submit":`Zalogować się`,"login.title":`Zalogować się`,"month.absence":`Brak`,"month.balance":`Balansować`,"error.edit_window_closed":`Poza oknem edycji`,"admin.profile.pauseRules":`Własne zasady przerw`,"admin.profile.pauseRulesHint":`Zasady tylko dla tego pracownika: zastępują zasadę firmy z tym samym „od minut”. Bez własnych zasad obowiązuje tabela firmy.`,"report.csv":`Dane surowe (CSV)`,"month.edit":`Popraw`,"month.editTitle":`Popraw odbicia · {{date}}`,"month.editHint":`Tylko w oknie edycji - starsze dni zmienia administracja.`,"month.time":`Godzina`,"month.direction":`Kierunek`,"month.directionIn":`Wejście`,"month.directionOut":`Wyjście`,"month.addPunch":`Dodaj odbicie`,"month.pause":`Przerwa`,"month.paidBreak":`w tym płatne`,"month.empty":`Brak dni w tym miesiącu.`,"month.holiday":`Wakacje`,"month.months":`Miesiące roku`,"month.next":`Przyszły miesiąc`,"month.open":`otwarty`,"month.previous":`Poprzedni miesiąc`,"month.target":`Cel`,"month.title":`Miesiąc`,"month.worked":`Pracował`,"nav.absences":`Nieobecności`,"nav.dashboard":`Stemplowanie`,"nav.logout":`Wyloguj się`,"nav.menu":`Menu`,"nav.month":`Miesiąc`,"nav.profile":`Profil`,"nav.reports":`Raporty`,"nav.sync":`Synchronizacja`,"profile.changePassword":`Zmień hasło`,"profile.changed":`Hasło zostało zmienione. Zaloguj się ponownie.`,"profile.language":`Język`,"profile.newPassword":`Nowe hasło`,"profile.roles":`Uprawnienia`,"profile.title":`Profil`,"profile.user":`Użytkownik`,"punch.balance":`Saldo dziś`,"punch.closed":`Brak stempla`,"punch.in":`Zastempluj wejście`,"punch.last":`Ostatni stempel {{time}}`,"punch.note":`Notatka`,"punch.now":`Stempluj`,"punch.open":`Zarejestrowano od {{time}}`,"punch.out":`Zastempluj wyjście`,"punch.queued":`Zapisany offline – zostanie wysłany automatycznie`,"punch.quick":`Szybkie stemplowanie`,"punch.sent":`Stempel zapisany ({{time}})`,"punch.target":`Cel na dziś`,"punch.worked":`Przepracowano dziś`,"report.failed":`Nie można utworzyć wyciągu.`,"report.pdf":`PDF`,"report.xls":`Przewyższać`,"reports.empty":`Brak danych za ten okres.`,"reports.monthTotals":`Sumy miesięczne`,"reports.overtime":`Nadgodziny`,"reports.paidOut":`Wypłata: {{minutes}}`,"reports.title":`Raporty`,"reports.vacation":`Urlop (wykorzystany / uprawniony)`,"reports.year":`Rok`,"reports.yearTotals":`Sumy roku`,"sync.accept":`Zachowaj wartość serwera`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Otwarte konflikty`,"sync.dismiss":`Wyrzucać`,"sync.done":`Wysłano: {{accepted}}, duplikaty: {{duplicates}}, konflikty: {{conflicts}}`,"sync.empty":`Żadnych otwartych konfliktów.`,"sync.flush":`Wyślij teraz`,"sync.none":`Nic do wysłania.`,"sync.pending":`{{count}} ciosów czeka`,"sync.permission":`Nie wolno Ci rozwiązywać konfliktów.`,"sync.resolved":`Konflikt rozwiązany.`,"sync.title":`Synchronizacja`,"terminal.title":`Terminal`,"terminal.deviceToken":`Token urządzenia`,"terminal.connect":`Połącz`,"terminal.badge":`Karta`,"terminal.noPin":`Na tym terminalu PIN nie jest potrzebny.`,"terminal.pin":`PIN`,"terminal.select":`Wybierz nazwisko`,"terminal.disabled":`Terminal jest wyłączony w ustawieniach adaptera.`,"admin.terminals":`Terminale`,"admin.terminal.name":`Nazwa`,"admin.terminal.location":`Lokalizacja`,"admin.terminal.pinRequired":`Pracownicy potrzebują swojego PIN-u`,"admin.terminal.create":`Utwórz terminal`,"admin.terminal.tokenOnce":`Skopiuj teraz token urządzenia — jest przechowywany tylko jako hash i pokazywany jednorazowo:`,"admin.terminal.url":`Otwórz ten adres na urządzeniu kiosku:`,"admin.terminal.revoke":`Odwołaj`,"admin.terminal.revoked":`odwołany`,"admin.terminal.users":`Pracownicy`,"admin.terminal.usersHint":`Bez wyboru terminal pokazuje wszystkich pracowników.`,"admin.terminal.usersAll":`wszyscy pracownicy`,"admin.terminal.empty":`Nie utworzono jeszcze żadnego terminala.`,"admin.terminal.confirmRevoke":`Odwołać „{{name}}”? Token urządzenia przestanie działać natychmiast.`,"admin.settings":`Ustawienia`,"admin.settings.fontPath":`Plik czcionki Unicode dla wyciągów PDF (.ttf/.otf)`,"admin.user.profile":`Profil pracy`,"admin.user.profileTitle":`Profil pracy · {{name}}`,"admin.profile.percent":`Wymiar zatrudnienia (%)`,"admin.profile.weeklyHours":`Godziny tygodniowe przy 100 %`,"admin.profile.workdays":`Dni robocze`,"admin.profile.overtimeModel":`Model nadgodzin`,"admin.profile.model.monthly":`Miesięczny`,"admin.profile.model.yearly":`Roczny`,"admin.profile.model.cumulative":`Narastający`,"admin.profile.vacationPerYear":`Dni urlopu na rok`,"admin.profile.vacationCarryover":`Urlop przeniesiony (dni)`,"admin.profile.overtimeCarryover":`Nadgodziny przeniesione (godziny)`,"admin.profile.vorholzeitPerYear":`„Vorholzeit” na rok (godziny)`,"admin.profile.pausePaid":`Płatne minuty przerwy na dzień`,"admin.profile.pausePaidHint":`Tyle minut przerwy liczy się do czasu pracy (0 = przerwa nie jest płatna).`,"admin.settings.pauseMode":`Przerwy`,"admin.settings.pauseModeTitle":`Zasada przerw`,"admin.settings.pauseModeHint":`Jak ustalana jest przerwa dnia.`,"admin.settings.pauseRules":`Tabela przerw`,"admin.settings.pauseRulesHint":`Dotyczy dni bez zarejestrowanej przerwy: od podanego czasu bloku (od pierwszego do ostatniego odbicia) minuty są odejmowane.`,"admin.settings.pauseFrom":`od minut`,"admin.settings.pauseTo":`do minut (puste = bez końca)`,"admin.settings.pauseMinutes":`minuty przerwy`,"admin.settings.pauseActive":`Reguła aktywna`,"admin.settings.pauseAdd":`Dodaj regułę`,"admin.settings.pauseSave":`Zapisz tabelę przerw`,"admin.settings.pauseMode.auto":`Przerwa zarejestrowana, inaczej tabela`,"admin.settings.pauseMode.punched":`Tylko zarejestrowane przerwy`,"admin.settings.pauseMode.staffel":`Tylko tabela przerw`,"admin.settings.fontPathHint":`Potrzebne dla rosyjskiego, ukraińskiego i chińskiego; puste = wbudowane czcionki obejmujące tylko Latin-1.`,"admin.settings.advanced":`Wszystkie ustawienia instancji (nazwy techniczne, 1/0 dla przełączników)`,"admin.settings.setting.edit_window_days":`Okno edycji (dni)`,"admin.settings.setting.quick_round_minutes":`Zaokrąglanie (min)`,"admin.settings.setting.absence_calc_until_today":`Nieobecności do dziś`,"admin.settings.setting.absence_deduct_worktime":`Odliczaj nieobecności`,"admin.settings.setting.print_limit_days":`Limit wydruku (dni)`,"admin.settings.setting.holiday_country":`Kraj świąt`,"admin.settings.setting.default_language":`Język domyślny`,"admin.settings.setting.session_ttl_minutes":`Sesja (minuty)`,"admin.settings.setting.backup_retention_days":`Kopie (dni)`,"admin.settings.setting.attendance_list_visible":`Lista obecności`,"admin.settings.setting.timezone":`Strefa czasowa`,"admin.settings.saved":`Ustawienia zapisane.`,"admin.holidays":`Dni świąteczne`,"admin.holiday.date":`Data (RRRR-MM-DD)`,"admin.holiday.name":`Nazwa`,"holiday.newYear":`Nowy Rok`,"holiday.epiphany":`Trzech Króli`,"holiday.goodFriday":`Wielki Piątek`,"holiday.easterMonday":`Poniedziałek Wielkanocny`,"holiday.labourDay":`Święto Pracy`,"holiday.ascension":`Wniebowstąpienie`,"holiday.whitMonday":`Poniedziałek Zielonych Świąt`,"holiday.corpusChristi":`Boże Ciało`,"holiday.nationalDay":`Święto narodowe`,"holiday.germanUnity":`Dzień Jedności Niemiec`,"holiday.assumption":`Wniebowzięcie Najświętszej Maryi Panny`,"holiday.allSaints":`Wszystkich Świętych`,"holiday.immaculateConception":`Niepokalane Poczęcie`,"holiday.christmas":`Boże Narodzenie`,"holiday.boxingDay":`Drugi dzień świąt`,"admin.holiday.add":`Dodaj dzień świąteczny`,"admin.holiday.year":`Rok`,"admin.holiday.region":`Region (opcjonalnie)`,"admin.holiday.empty":`W tym roku nie zapisano dni świątecznych.`,"admin.tags":`Karty (RFID/NFC)`,"admin.tag.label":`Etykieta`,"admin.tag.user":`Pracownik`,"admin.tag.create":`Utwórz kartę`,"admin.tag.linkOnce":`Zapisz ten link na tagu albo otwórz go w telefonie:`,"admin.tag.delete":`Usuń`,"admin.tag.active":`aktywny`,"admin.tag.expired":`wygasły`,"admin.tag.revoked":`unieważniony`,"admin.tag.lastUsed":`ostatnie użycie`,"admin.tag.remove":`Usuń trwale`,"admin.tag.edit":`Edytuj`,"admin.tag.reissue":`Nowy link`,"admin.tag.editTitle":`Edycja identyfikatora`,"admin.tag.editHint":`Inny pracownik lub nowa ważność wydaje nowy link — wcześniej wydany link przestaje natychmiast działać.`,"admin.tag.validityDays":`Ważność (dni)`,"admin.tag.oldLinkDead":`Wcześniej wydany link nie działa już.`,"admin.tag.qrAlt":`Kod QR linku identyfikatora`,"admin.tag.empty":`Nie utworzono jeszcze karty.`,"nav.statistics":`Statystyki`,"statistics.from":`Od`,"statistics.to":`Do`,"statistics.employee":`Pracownik`,"statistics.worked":`Przepracowano`,"statistics.target":`Norma`,"statistics.balance":`Saldo`,"statistics.openDays":`Otwarte dni`,"statistics.totals":`Wszyscy pracownicy`,"scan.title":`Karta`,"scan.done":`Zastemplowano dla {{name}} o {{time}}`,"scan.failed":`Nie udało się użyć karty: {{reason}}`,"presence.title":`Obecność`,"presence.present":`Obecny`,"presence.absent":`Nieobecny`,"presence.tapPin":`Wprowadź PIN, aby wystemplować wejście lub wyjście`,"presence.cancel":`Anuluj`,"presence.updated":`{{name}} jest teraz {{state}}`,"presence.disabled":`Terminal kiosku jest wyłączony w ustawieniach instancji.`,"admin.user.photo":`Zdjęcie`,"admin.user.photoTitle":`Zdjęcie {{name}}`,"admin.user.photoChoose":`Wybierz obraz`,"admin.user.photoRemove":`Usuń obraz`,"admin.user.photoHint":`PNG, JPEG, WEBP lub GIF do 256 KB. Bez zdjęcia wyświetlany jest obraz zastępczy.`,"admin.corrections":`Korekty czasu`,"corrections.employee":`Pracownik`,"corrections.previous":`Poprzedni miesiąc`,"corrections.next":`Następny miesiąc`,"corrections.reason":`Powód`,"corrections.reasonHint":`Zapisywane w dzienniku audytu`,"corrections.add":`Dodaj odbicie lub dzień`,"corrections.addTitle":`Dodaj odbicie`,"corrections.addHint":`Pozostaw „wyjście” puste, jeśli brakuje jednego odbicia`,"corrections.editTitle":`Zmień odbicie`,"corrections.remove":`Usuń odbicie`,"corrections.date":`Data`,"corrections.from":`Przyjście`,"corrections.to":`Wyjście`,"corrections.direction":`Kierunek`,"corrections.note":`Notatka`,"corrections.empty":`Brak odbić w tym miesiącu`,"corrections.byAdmin":`dodane przez administrację`,"corrections.history":`Historia`,"corrections.actor":`Kto`,"corrections.actionCreate":`Dodano`,"corrections.actionUpdate":`Zmieniono`,"corrections.actionDelete":`Usunięto`,"keypad.backspace":`Usuń`,"admin.settings.branding":`Wizerunek firmy`,"admin.settings.brandingHint":`Logo, obraz tła i kolor tła tej instalacji. Ekran logowania i ekrany kiosku również je pokazują.`,"admin.settings.brandLogo":`Wybierz logo`,"admin.settings.brandBackground":`Wybierz tło`,"admin.brand.imageResized":`Pomniejszono do wyświetlania ({{size}}).`,"admin.brand.imageTooLarge":`Nawet pomniejszony obraz jest zbyt duży.`,"admin.brand.imageType":`Możliwe są tylko PNG, JPEG, WEBP lub GIF.`,"admin.brand.imageUnreadable":`Nie udało się odczytać obrazu.`,"admin.settings.brandColor":`Kolor tła`,"admin.settings.brandColorHint":`Wartość szesnastkowa, np. #1a2b3c; puste pole oznacza wartość domyślną`,"admin.settings.brandColorPresets":`Sugerowane kolory`,"admin.settings.brandColorDefault":`Domyślny`,"admin.backup.download":`Pobierz`,"admin.backup.restore":`Przywróć`,"admin.backup.restoreTitle":`Przywróć kopię zapasową`,"admin.backup.restoreConfirm":`Kopia zapasowa {{name}} zostanie zastosowana przy następnym uruchomieniu adaptera; obecna baza danych pozostanie obok jako plik. Następnie uruchom ponownie instancję.`,"admin.backup.pendingHint":`{{name}} zostanie zastosowana przy następnym uruchomieniu ({{users}} pracowników, {{entries}} stempli) - uruchom ponownie instancję.`,"error.backup_invalid":`Ten plik nie jest kopią zapasową tego adaptera.`,"admin.settings.brandImageRemove":`Usuń obraz`,"admin.settings.brandColorDefaultHint":`Przywraca kolor tła i obraz tła`,"admin.triggers":`Akcje (ioBroker)`,"admin.triggersHint":"Stan innego adaptera stempluje lub ustawia obecność — czytnik linii papilarnych, przycisk albo kontakt drzwiowy. Wyzwalane jest tylko przy zmianie wartości. Jako wartość możesz wpisać `toggle`: wtedy reaguje na każdą zmianę (np. włączenie i wyłączenie).","admin.trigger.label":`Nazwa`,"admin.trigger.sourceState":`Stan`,"admin.trigger.mode":`Wyzwalacz`,"admin.trigger.modeCondition":`Stan ma wartość`,"admin.trigger.modeUser":`Wartość to pracownik`,"admin.trigger.condition":`Wartość`,"admin.trigger.user":`Pracownik`,"admin.trigger.action":`Akcja`,"admin.trigger.actionPunch":`Zastempluj (wejście lub wyjście)`,"admin.trigger.actionQuickPunch":`Zastempluj z szybkim zaokrągleniem`,"admin.trigger.actionPresent":`Ustaw jako obecny`,"admin.trigger.actionAbsent":`Ustaw jako nieobecny`,"admin.trigger.cooldown":`Blokada (sekundy)`,"admin.trigger.active":`Aktywne`,"admin.trigger.add":`Dodaj akcję`,"admin.trigger.lastFired":`Ostatnie wyzwolenie`,"admin.trigger.empty":`Nie ma jeszcze akcji.`,"admin.trigger.conditionHint":"Wartość lub `toggle`, aby reagować na każdą zmianę","admin.settings.automations":`Reguły (automatyczne)`,"admin.settings.automationsHint":`Co adapter robi sam: stempluje wyjście o ustalonej godzinie lokalnej, zgłasza brak wyjścia albo przypomina po zbyt długiej pracy bez przerwy. Reguła działa co najwyżej raz na pracownika i dzień.`,"admin.automation.kind":`Rodzaj`,"admin.automation.kindClockIn":`Automatycznie zastempluj wejście`,"admin.automation.kindClockOut":`Automatycznie stempluj wyjście`,"admin.automation.kindMissingPunch":`Zgłoś brak wyjścia`,"admin.automation.kindBreakReminder":`Przypomnienie o przerwie`,"admin.automation.at":`Godzina`,"admin.automation.atHint":`Czas lokalny pracownika`,"admin.automation.after":`Po (minutach)`,"admin.automation.user":`Pracownik`,"admin.automation.allUsers":`wszyscy pracownicy`,"admin.automation.add":`Dodaj regułę`,"admin.automation.empty":`Nie ma jeszcze reguł.`,"admin.automation.runs":`Ostatnie wykonania`,"admin.automation.weekdays":`Dni tygodnia`,"admin.automation.repeat":`Powtarzanie`,"admin.automation.repeatDay":`raz dziennie`,"admin.automation.repeatWeek":`raz w tygodniu`,"admin.settings.setting.report_font_path":`Czcionka do PDF`,"presence.workedToday":`Przepracowane dzisiaj`,"admin.user.workedTime":`Czas pracy na karcie obecności`,"admin.user.workedTimeHint":`Pokazuje na karcie obecności czas przepracowany dzisiaj (np. 1:23). Bez rejestracji jest tam 0:00; bez tej zgody karta pozostaje przy obecny/nieobecny i nazwisku.`,"admin.automation.save":`Zapisz reguły`,"admin.automation.edit":`Edytuj`,"admin.automation.editTitle":`Edytuj regułę`,"admin.automation.newTitle":`Nowa reguła`},Fw={"absences.create":`Прохання про відсутність`,"absences.created":`Прохання про відсутність.`,"absences.empty":`Жодних пропусків у цьому році.`,"absences.from":`Від`,"absences.portion":`Частка дня`,"absences.status":`Статус`,"absences.title":`Прогули`,"absences.to":`до`,"absences.type":`Тип`,"absences.typeHint":`Код типу відсутності, напр. F для відпустки`,"admin.backup":`Резервні копії`,"admin.backup.create":`Створіть резервну копію зараз`,"admin.backup.upload":`Завантажити резервну копію`,"admin.backup.uploadHint":`Виберіть завантажену копію (.sqlite) - вона буде перевірена та застосована при наступному запуску.`,"admin.backup.delete":`Видалити`,"admin.backup.deleteTitle":`Видалити резервну копію`,"admin.backup.deleteConfirm":`Копію {{name}} буде видалено. Це не можна скасувати.`,"admin.backup.done":`Резервну копію {{name}} створено, {{removed}} старих файлів видалено.`,"admin.backup.empty":`Резервних копій ще немає.`,"admin.backup.retention":`Резервні копії, старші за {{days}} днів, видаляються, найновіша завжди зберігається.`,"admin.forbidden":`Вам заборонено відкривати адміністрацію.`,"admin.title":`Адміністрація`,"admin.user.active":`Активний`,"admin.user.create":`Додати співробітника`,"admin.user.empty":`Ще немає працівників.`,"admin.user.inactive":`Деактивовано`,"admin.user.login":`Логін`,"admin.user.name":`Ім'я`,"admin.user.newPin":`Новий PIN-код`,"admin.user.password":`Пароль`,"admin.user.passwordHint":`Мінімум 8 символів у верхньому та нижньому регістрах, а також цифри.`,"admin.user.pin":`PIN-код`,"admin.user.pinHint":`Від 4 до 8 цифр для терміналу`,"admin.user.pinTitle":`PIN-код перепустки для {{name}}`,"admin.user.roles":`Ролі`,"admin.users":`Співробітники`,"app.offline":`Offline – відмітки в черзі`,"app.online":`Підключено`,"app.title":`Відстеження часу`,"common.cancel":`Скасувати`,"common.close":`Закрити`,"common.loading":`Завантаження…`,"common.none":`–`,"common.refresh":`Оновити`,"common.retry":`Повторіть спробу`,"common.save":`зберегти`,"error.bad_request":`Вхід не прийнято.`,"error.conflict":`Зміна суперечить наявним даним.`,"error.csrf_rejected":`Запит відхилено з міркувань безпеки, повторіть спробу.`,"error.invalid_credentials":`Ім'я користувача або пароль неправильні.`,"error.locked_out":`Забагато невдалих спроб. Спробуйте пізніше.`,"error.network_error":`Сервер недоступний.`,"error.no_session":`Ваш сеанс закінчився, увійдіть знову.`,"error.not_found":`Не знайдено.`,"error.permission_denied":`Вам заборонено це робити.`,"error.report_font_missing":`Для цього звіту потрібен шрифт Unicode (report_font_path).`,"error.revision_conflict":`Перфорацію тим часом було змінено, перезавантажте.`,"error.session_expired":`Ваш сеанс закінчився, увійдіть знову.`,"error.unknown_error":`Несподівана помилка.`,"error.user_inactive":`Цей обліковий запис дезактивовано.`,"login.failed":`Помилка входу`,"login.login":`Ім'я користувача`,"login.password":`Пароль`,"login.submit":`Увійдіть`,"login.title":`Увійдіть`,"month.absence":`Відсутність`,"month.balance":`Баланс`,"error.edit_window_closed":`Поза вікном редагування`,"admin.profile.pauseRules":`Власні правила перерв`,"admin.profile.pauseRulesHint":`Правила лише для цього працівника: вони замінюють правило компанії з тим самим «з хвилин». Без власних правил діє шкала компанії.`,"report.csv":`Початкові дані (CSV)`,"month.edit":`Виправити`,"month.editTitle":`Виправити відбиття · {{date}}`,"month.editHint":`Лише всередині вікна редагування - старші дні змінює адміністрація.`,"month.time":`Час`,"month.direction":`Напрямок`,"month.directionIn":`Прихід`,"month.directionOut":`Вихід`,"month.addPunch":`Додати відбиття`,"month.pause":`Перерва`,"month.paidBreak":`з них оплачено`,"month.empty":`Немає днів у цьому місяці.`,"month.holiday":`Свято`,"month.months":`Місяці року`,"month.next":`Наступного місяця`,"month.open":`відкрито`,"month.previous":`Попередній місяць`,"month.target":`Цільова`,"month.title":`місяць`,"month.worked":`Працювала`,"nav.absences":`Прогули`,"nav.dashboard":`Відмітка`,"nav.logout":`Вийти`,"nav.menu":`Меню`,"nav.month":`місяць`,"nav.profile":`Профіль`,"nav.reports":`Звіти`,"nav.sync":`Синхронізація`,"profile.changePassword":`Змінити пароль`,"profile.changed":`Пароль змінено, увійдіть знову.`,"profile.language":`Мова`,"profile.newPassword":`Новий пароль`,"profile.roles":`Дозволи`,"profile.title":`Профіль`,"profile.user":`Користувач`,"punch.balance":`Сальдо сьогодні`,"punch.closed":`Немає відмітки`,"punch.in":`Прихід`,"punch.last":`Остання відмітка {{time}}`,"punch.note":`Примітка`,"punch.now":`Відмітитися`,"punch.open":`Відмітка з {{time}}`,"punch.out":`Вихід`,"punch.queued":`Збережено офлайн – буде надіслано автоматично`,"punch.quick":`Швидка відмітка`,"punch.sent":`Відмітку збережено ({{time}})`,"punch.target":`План сьогодні`,"punch.worked":`Відпрацьовано сьогодні`,"report.failed":`Не вдалося створити заяву.`,"report.pdf":`PDF`,"report.xls":`Excel`,"reports.empty":`Немає даних за цей період.`,"reports.monthTotals":`Підсумки за місяць`,"reports.overtime":`Понаднормова робота`,"reports.paidOut":`Виплачено: {{minutes}}`,"reports.title":`Звіти`,"reports.vacation":`Відпустка (взята / право)`,"reports.year":`рік`,"reports.yearTotals":`Підсумки року`,"sync.accept":`Зберігайте значення сервера`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`Відкриті конфлікти`,"sync.dismiss":`Відкинути`,"sync.done":`Надіслано: {{accepted}}, дублікатів: {{duplicates}}, конфліктів: {{conflicts}}`,"sync.empty":`Без відкритих конфліктів.`,"sync.flush":`Надішліть зараз`,"sync.none":`Немає надсилати.`,"sync.pending":`{{count}} відміток у черзі`,"sync.permission":`Вам заборонено вирішувати конфлікти.`,"sync.resolved":`Конфлікт вирішено.`,"sync.title":`Синхронізація`,"terminal.title":`Термінал`,"terminal.deviceToken":`Токен пристрою`,"terminal.connect":`Підключити`,"terminal.badge":`Перепустка`,"terminal.noPin":`На цьому терміналі PIN не потрібен.`,"terminal.pin":`PIN-код`,"terminal.select":`Виберіть ім'я`,"terminal.disabled":`Термінал вимкнено в налаштуваннях адаптера.`,"admin.terminals":`Термінали`,"admin.terminal.name":`Назва`,"admin.terminal.location":`Розташування`,"admin.terminal.pinRequired":`Працівникам потрібен їхній PIN-код`,"admin.terminal.create":`Створити термінал`,"admin.terminal.tokenOnce":`Скопіюйте токен пристрою зараз — він зберігається лише як хеш і показується один раз:`,"admin.terminal.url":`Відкрийте цю адресу на пристрої кіоску:`,"admin.terminal.revoke":`Відкликати`,"admin.terminal.revoked":`відкликано`,"admin.terminal.users":`Співробітники`,"admin.terminal.usersHint":`Якщо нічого не вибрати, термінал показує всіх співробітників.`,"admin.terminal.usersAll":`усі співробітники`,"admin.terminal.empty":`Термінал ще не створено.`,"admin.terminal.confirmRevoke":`Відкликати «{{name}}»? Токен пристрою перестане працювати негайно.`,"admin.settings":`Налаштування`,"admin.settings.fontPath":`Файл шрифту Unicode для PDF-звітів (.ttf/.otf)`,"admin.user.profile":`Робочий профіль`,"admin.user.profileTitle":`Робочий профіль · {{name}}`,"admin.profile.percent":`Зайнятість (%)`,"admin.profile.weeklyHours":`Годин на тиждень при 100 %`,"admin.profile.workdays":`Робочі дні`,"admin.profile.overtimeModel":`Модель надурочних`,"admin.profile.model.monthly":`Щомісяця`,"admin.profile.model.yearly":`За рік`,"admin.profile.model.cumulative":`Накопичувально`,"admin.profile.vacationPerYear":`Днів відпустки на рік`,"admin.profile.vacationCarryover":`Перенесення відпустки (дні)`,"admin.profile.overtimeCarryover":`Перенесення надурочних (години)`,"admin.profile.vorholzeitPerYear":`«Vorholzeit» на рік (години)`,"admin.profile.pausePaid":`Оплачуваних хвилин перерви на день`,"admin.profile.pausePaidHint":`Стільки хвилин перерви входять у робочий час (0 = перерва не оплачується).`,"admin.settings.pauseMode":`Перерви`,"admin.settings.pauseModeTitle":`Правило перерв`,"admin.settings.pauseModeHint":`Як визначається перерва за день.`,"admin.settings.pauseRules":`Шкала перерв`,"admin.settings.pauseRulesHint":`Діє для днів без відбитої перерви: починаючи з указаної довжини блоку (від першого до останнього відбиття в блоці) хвилини віднімаються.`,"admin.settings.pauseFrom":`з хвилин`,"admin.settings.pauseTo":`до хвилин (порожньо = без обмеження)`,"admin.settings.pauseMinutes":`хвилин перерви`,"admin.settings.pauseActive":`Правило активне`,"admin.settings.pauseAdd":`Додати правило`,"admin.settings.pauseSave":`Зберегти шкалу перерв`,"admin.settings.pauseMode.auto":`Відбита перерва, інакше шкала`,"admin.settings.pauseMode.punched":`Лише відбиті перерви`,"admin.settings.pauseMode.staffel":`Лише шкала перерв`,"admin.settings.fontPathHint":`Потрібен для російської, української та китайської; порожньо = вбудовані шрифти, що покривають лише Latin-1.`,"admin.settings.advanced":`Усі налаштування екземпляра (технічні назви, 1/0 для перемикачів)`,"admin.settings.setting.edit_window_days":`Вікно редагування (днів)`,"admin.settings.setting.quick_round_minutes":`Округлення (хв)`,"admin.settings.setting.absence_calc_until_today":`Відсутності до сьогодні`,"admin.settings.setting.absence_deduct_worktime":`Відрахувати відсутності`,"admin.settings.setting.print_limit_days":`Ліміт друку (днів)`,"admin.settings.setting.holiday_country":`Країна свят`,"admin.settings.setting.default_language":`Мова за замовчуванням`,"admin.settings.setting.session_ttl_minutes":`Сесія (хвилини)`,"admin.settings.setting.backup_retention_days":`Копії (днів)`,"admin.settings.setting.attendance_list_visible":`Список присутності`,"admin.settings.setting.timezone":`Часовий пояс`,"admin.settings.saved":`Налаштування збережено.`,"admin.holidays":`Святкові дні`,"admin.holiday.date":`Дата (РРРР-ММ-ДД)`,"admin.holiday.name":`Назва`,"holiday.newYear":`Новий рік`,"holiday.epiphany":`Богоявлення`,"holiday.goodFriday":`Страсна п'ятниця`,"holiday.easterMonday":`Великодній понеділок`,"holiday.labourDay":`День праці`,"holiday.ascension":`Вознесіння`,"holiday.whitMonday":`Другий день Трійці`,"holiday.corpusChristi":`Свято Тіла Христового`,"holiday.nationalDay":`Національне свято`,"holiday.germanUnity":`День німецької єдності`,"holiday.assumption":`Успіння Богородиці`,"holiday.allSaints":`День усіх святих`,"holiday.immaculateConception":`Непорочне зачаття`,"holiday.christmas":`Різдво`,"holiday.boxingDay":`Другий день Різдва`,"admin.holiday.add":`Додати святковий день`,"admin.holiday.year":`Рік`,"admin.holiday.region":`Регіон (необов'язково)`,"admin.holiday.empty":`За цей рік святкові дні не внесено.`,"admin.tags":`Перепустки (RFID/NFC)`,"admin.tag.label":`Мітка`,"admin.tag.user":`Працівник`,"admin.tag.create":`Створити перепустку`,"admin.tag.linkOnce":`Запишіть це посилання на мітку або відкрийте його на телефоні:`,"admin.tag.delete":`Видалити`,"admin.tag.active":`активний`,"admin.tag.expired":`прострочений`,"admin.tag.revoked":`відкликано`,"admin.tag.lastUsed":`останнє використання`,"admin.tag.remove":`Видалити остаточно`,"admin.tag.edit":`Змінити`,"admin.tag.reissue":`Нове посилання`,"admin.tag.editTitle":`Зміна перепустки`,"admin.tag.editHint":`Інший працівник або нова тривалість дії видає нове посилання — видане раніше посилання одразу перестає працювати.`,"admin.tag.validityDays":`Термін дії (днів)`,"admin.tag.oldLinkDead":`Видане раніше посилання більше не працює.`,"admin.tag.qrAlt":`QR-код посилання перепустки`,"admin.tag.empty":`Перепустку ще не створено.`,"nav.statistics":`Статистика`,"statistics.from":`З`,"statistics.to":`До`,"statistics.employee":`Працівник`,"statistics.worked":`Відпрацьовано`,"statistics.target":`План`,"statistics.balance":`Баланс`,"statistics.openDays":`Відкриті дні`,"statistics.totals":`Усі працівники`,"scan.title":`Перепустка`,"scan.done":`Відмітку для {{name}} о {{time}}`,"scan.failed":`Перепустку не вдалося використати: {{reason}}`,"presence.title":`Присутність`,"presence.present":`На робочому місці`,"presence.absent":`Відсутній`,"presence.tapPin":`Введіть PIN-код, щоб відмітитися`,"presence.cancel":`Скасувати`,"presence.updated":`{{name}} тепер {{state}}`,"presence.disabled":`Кіоск-термінал вимкнено в налаштуваннях екземпляра.`,"admin.user.photo":`Фото`,"admin.user.photoTitle":`Фото {{name}}`,"admin.user.photoChoose":`Вибрати зображення`,"admin.user.photoRemove":`Видалити зображення`,"admin.user.photoHint":`PNG, JPEG, WEBP або GIF до 256 КБ. Без зображення показується заповнювач.`,"admin.corrections":`Коригування часу`,"corrections.employee":`Співробітник`,"corrections.previous":`Попередній місяць`,"corrections.next":`Наступний місяць`,"corrections.reason":`Причина`,"corrections.reasonHint":`Зберігається в журналі (аудиті)`,"corrections.add":`Додати відмітку або день`,"corrections.addTitle":`Додати відмітку`,"corrections.addHint":`Залиште «вихід» порожнім, якщо бракує однієї відмітки`,"corrections.editTitle":`Змінити відмітку`,"corrections.remove":`Видалити відмітку`,"corrections.date":`Дата`,"corrections.from":`Прихід`,"corrections.to":`Вихід`,"corrections.direction":`Напрямок`,"corrections.note":`Нотатка`,"corrections.empty":`У цьому місяці відміток немає`,"corrections.byAdmin":`додано адміністрацією`,"corrections.history":`Історія`,"corrections.actor":`Хто`,"corrections.actionCreate":`Додано`,"corrections.actionUpdate":`Змінено`,"corrections.actionDelete":`Видалено`,"keypad.backspace":`Видалити`,"admin.settings.branding":`Брендинг компанії`,"admin.settings.brandingHint":`Логотип, фонове зображення та колір фону цієї інсталяції. Екран входу та екрани кіоску також їх показують.`,"admin.settings.brandLogo":`Вибрати логотип`,"admin.settings.brandBackground":`Вибрати фон`,"admin.brand.imageResized":`Зменшено для відображення ({{size}}).`,"admin.brand.imageTooLarge":`Навіть у зменшеному вигляді зображення завелике.`,"admin.brand.imageType":`Можливі лише PNG, JPEG, WEBP або GIF.`,"admin.brand.imageUnreadable":`Не вдалося прочитати зображення.`,"admin.settings.brandColor":`Колір фону`,"admin.settings.brandColorHint":`Значення у форматі Hex, наприклад #1a2b3c; порожньо — типове значення`,"admin.settings.brandColorPresets":`Готові кольори`,"admin.settings.brandColorDefault":`За замовчуванням`,"admin.backup.download":`Завантажити`,"admin.backup.restore":`Відновити`,"admin.backup.restoreTitle":`Відновити резервну копію`,"admin.backup.restoreConfirm":`Резервну копію {{name}} буде застосовано під час наступного запуску адаптера; поточна база даних залишиться поруч як файл. Після цього перезапустіть інстанс.`,"admin.backup.pendingHint":`{{name}} буде застосовано під час наступного запуску ({{users}} співробітників, {{entries}} відміток) - перезапустіть інстанс.`,"error.backup_invalid":`Цей файл не є резервною копією цього адаптера.`,"admin.settings.brandImageRemove":`Видалити зображення`,"admin.settings.brandColorDefaultHint":`Скидає колір і зображення фону`,"admin.triggers":`Дії (ioBroker)`,"admin.triggersHint":"Стан іншого адаптера відмічає час або встановлює присутність — сканер відбитка, кнопка чи дверний контакт. Спрацьовує лише при зміні значення. У полі значення можна вказати `toggle` — тоді реагує на будь-яку зміну (наприклад, увімкнення та вимкнення).","admin.trigger.label":`Назва`,"admin.trigger.sourceState":`Стан`,"admin.trigger.mode":`Умова`,"admin.trigger.modeCondition":`Стан має значення`,"admin.trigger.modeUser":`Значення — це працівник`,"admin.trigger.condition":`Значення`,"admin.trigger.user":`Працівник`,"admin.trigger.action":`Дія`,"admin.trigger.actionPunch":`Відмітитися (вхід або вихід)`,"admin.trigger.actionQuickPunch":`Відмітитися зі швидким округленням`,"admin.trigger.actionPresent":`Зробити присутнім`,"admin.trigger.actionAbsent":`Зробити відсутнім`,"admin.trigger.cooldown":`Затримка (секунди)`,"admin.trigger.active":`Активно`,"admin.trigger.add":`Додати дію`,"admin.trigger.lastFired":`Останнє спрацювання`,"admin.trigger.empty":`Дій поки немає.`,"admin.trigger.conditionHint":"Значення або `toggle`, щоб реагувати на будь-яку зміну","admin.settings.automations":`Правила (автоматика)`,"admin.settings.automationsHint":`Що адаптер робить сам: відмічає вихід у заданий місцевий час, повідомляє про відсутню відмітку виходу або нагадує про паузу після занадто довгої роботи. Правило спрацьовує щонайбільше раз на день на працівника.`,"admin.automation.kind":`Тип`,"admin.automation.kindClockIn":`Автоматично відмітити прихід`,"admin.automation.kindClockOut":`Автоматично відмітити вихід`,"admin.automation.kindMissingPunch":`Повідомити про відсутній вихід`,"admin.automation.kindBreakReminder":`Нагадування про паузу`,"admin.automation.at":`Час`,"admin.automation.atHint":`Місцевий час працівника`,"admin.automation.after":`Через (хвилини)`,"admin.automation.user":`Працівник`,"admin.automation.allUsers":`усі працівники`,"admin.automation.add":`Додати правило`,"admin.automation.empty":`Правил поки немає.`,"admin.automation.runs":`Останні спрацювання`,"admin.automation.weekdays":`Дні тижня`,"admin.automation.repeat":`Повторення`,"admin.automation.repeatDay":`раз на день`,"admin.automation.repeatWeek":`раз на тиждень`,"admin.settings.setting.report_font_path":`Шрифт для PDF`,"presence.workedToday":`Відпрацьовано сьогодні`,"admin.user.workedTime":`Робочий час на картці присутності`,"admin.user.workedTimeHint":`Показує на картці присутності відпрацьований сьогодні час (наприклад, 1:23). Без відмітки там 0:00; без цього дозволу картка залишається з присутній/відсутній і іменем.`,"admin.automation.save":`Зберегти правила`,"admin.automation.edit":`Змінити`,"admin.automation.editTitle":`Змінити правило`,"admin.automation.newTitle":`Нове правило`},Iw={"absences.create":`请求缺席`,"absences.created":`要求缺席。`,"absences.empty":`今年没有缺席。`,"absences.from":`从`,"absences.portion":`当日比例`,"absences.status":`状态`,"absences.title":`缺勤`,"absences.to":`到`,"absences.type":`类型`,"absences.typeHint":`缺勤类型的代码,例如F 假期`,"admin.backup":`备份`,"admin.backup.create":`立即创建备份`,"admin.backup.upload":`上传备份`,"admin.backup.uploadHint":`选择已下载的备份(.sqlite),它会先被校验,并在下次启动时应用。`,"admin.backup.delete":`删除`,"admin.backup.deleteTitle":`删除备份`,"admin.backup.deleteConfirm":`备份 {{name}} 将被删除。此操作无法撤销。`,"admin.backup.done":`备份 {{name}} 已写入,{{removed}} 旧文件已删除。`,"admin.backup.empty":`还没有备份。`,"admin.backup.retention":`早于 {{days}} 天的备份将被删除,最新的备份将始终保留。`,"admin.forbidden":`您无权打开管理。`,"admin.title":`行政`,"admin.user.active":`积极的`,"admin.user.create":`添加员工`,"admin.user.empty":`还没有员工。`,"admin.user.inactive":`已停用`,"admin.user.login":`登录`,"admin.user.name":`姓名`,"admin.user.newPin":`新 PIN 码`,"admin.user.password":`密码`,"admin.user.passwordHint":`至少8个字符,包含大小写和数字。`,"admin.user.pin":`PIN 码`,"admin.user.pinHint":`终端 4 至 8 位数字`,"admin.user.pinTitle":`{{name}} 的徽章 PIN 码`,"admin.user.roles":`角色`,"admin.users":`雇员`,"app.offline":`离线 – 打孔已排队`,"app.online":`已连接`,"app.title":`时间追踪`,"common.cancel":`取消`,"common.close":`关闭`,"common.loading":`加载中…`,"common.none":`–`,"common.refresh":`刷新`,"common.retry":`重试`,"common.save":`节省`,"error.bad_request":`输入未被接受。`,"error.conflict":`该更改与现有数据冲突。`,"error.csrf_rejected":`出于安全原因,请求被拒绝,请重试。`,"error.invalid_credentials":`用户名或密码不正确。`,"error.locked_out":`失败的尝试太多了。请稍后重试。`,"error.network_error":`服务器无法访问。`,"error.no_session":`您的会话已过期,请重新登录。`,"error.not_found":`未找到。`,"error.permission_denied":`你不可以这样做。`,"error.report_font_missing":`该报告需要 Unicode 字体 (report_font_path)。`,"error.revision_conflict":`其间冲头已更换,请重新装弹。`,"error.session_expired":`您的会话已过期,请重新登录。`,"error.unknown_error":`意外错误。`,"error.user_inactive":`该帐户已停用。`,"login.failed":`登录失败`,"login.login":`用户名`,"login.password":`密码`,"login.submit":`登入`,"login.title":`登入`,"month.absence":`缺席`,"month.balance":`平衡`,"error.edit_window_closed":`超出编辑窗口`,"admin.profile.pauseRules":`个人休息规则`,"admin.profile.pauseRulesHint":`仅适用于该员工的规则:它们会替换相同“从分钟”的公司规则。没有个人规则时适用公司阶梯。`,"report.csv":`原始数据(CSV)`,"month.edit":`更正`,"month.editTitle":`更正打点 · {{date}}`,"month.editHint":`仅在编辑窗口内 - 更早的日期由管理员修改。`,"month.time":`时间`,"month.direction":`方向`,"month.directionIn":`上班`,"month.directionOut":`下班`,"month.addPunch":`添加打点`,"month.pause":`休息`,"month.paidBreak":`其中带薪`,"month.empty":`这个月没有天。`,"month.holiday":`假期`,"month.months":`一年中的月份`,"month.next":`下个月`,"month.open":`进行中`,"month.previous":`上个月`,"month.target":`目标`,"month.title":`月`,"month.worked":`工作过`,"nav.absences":`缺勤`,"nav.dashboard":`打卡`,"nav.logout":`登出`,"nav.menu":`菜单`,"nav.month":`月`,"nav.profile":`轮廓`,"nav.reports":`报告`,"nav.sync":`同步`,"profile.changePassword":`更改密码`,"profile.changed":`密码已更改,请重新登录。`,"profile.language":`语言`,"profile.newPassword":`新密码`,"profile.roles":`权限`,"profile.title":`轮廓`,"profile.user":`用户`,"punch.balance":`今日结余`,"punch.closed":`未打卡`,"punch.in":`上班打卡`,"punch.last":`上次打卡 {{time}}`,"punch.note":`笔记`,"punch.now":`立即打卡`,"punch.open":`自 {{time}} 起打卡`,"punch.out":`下班打卡`,"punch.queued":`离线保存 – 它将自动发送`,"punch.quick":`快速打卡`,"punch.sent":`打卡已保存({{time}})`,"punch.target":`今日目标`,"punch.worked":`今日已工作`,"report.failed":`无法创建该语句。`,"report.pdf":`PDF`,"report.xls":`Excel`,"reports.empty":`此期间没有数据。`,"reports.monthTotals":`月份总计`,"reports.overtime":`加班`,"reports.paidOut":`支付时间:{{minutes}}`,"reports.title":`报告`,"reports.vacation":`假期(已享受/有权)`,"reports.year":`年`,"reports.yearTotals":`年度总计`,"sync.accept":`保持服务器价值`,"sync.conflictOf":`{{date}} · {{time}}`,"sync.conflicts":`公开冲突`,"sync.dismiss":`丢弃`,"sync.done":`已发送:{{accepted}},重复项:{{duplicates}},冲突:{{conflicts}}`,"sync.empty":`没有公开的冲突。`,"sync.flush":`立即发送`,"sync.none":`没什么可发送的。`,"sync.pending":`{{count}} 次打孔等待`,"sync.permission":`您无权解决冲突。`,"sync.resolved":`冲突解决了。`,"sync.title":`同步`,"terminal.title":`终端`,"terminal.deviceToken":`设备令牌`,"terminal.connect":`连接`,"terminal.badge":`工牌`,"terminal.noPin":`此终端无需 PIN。`,"terminal.pin":`PIN 码`,"terminal.select":`选择姓名`,"terminal.disabled":`终端已在适配器设置中关闭。`,"admin.terminals":`终端`,"admin.terminal.name":`名称`,"admin.terminal.location":`位置`,"admin.terminal.pinRequired":`员工需要使用其 PIN 码`,"admin.terminal.create":`创建终端`,"admin.terminal.tokenOnce":`请立即复制设备令牌——它仅以哈希形式保存,且只显示一次:`,"admin.terminal.url":`在自助终端设备上打开此地址:`,"admin.terminal.revoke":`撤销`,"admin.terminal.revoked":`已撤销`,"admin.terminal.users":`员工`,"admin.terminal.usersHint":`未选择时该终端显示所有员工。`,"admin.terminal.usersAll":`所有员工`,"admin.terminal.empty":`尚未创建终端。`,"admin.terminal.confirmRevoke":`撤销“{{name}}”?其设备令牌将立即失效。`,"admin.settings":`设置`,"admin.settings.fontPath":`PDF 报表使用的 Unicode 字体文件(.ttf/.otf)`,"admin.user.profile":`工作档案`,"admin.user.profileTitle":`工作档案 · {{name}}`,"admin.profile.percent":`就业比例(%)`,"admin.profile.weeklyHours":`100 % 时每周工时`,"admin.profile.workdays":`工作日`,"admin.profile.overtimeModel":`加班模式`,"admin.profile.model.monthly":`按月`,"admin.profile.model.yearly":`按年`,"admin.profile.model.cumulative":`累计`,"admin.profile.vacationPerYear":`每年年假天数`,"admin.profile.vacationCarryover":`结转年假(天)`,"admin.profile.overtimeCarryover":`结转加班(小时)`,"admin.profile.vorholzeitPerYear":`每年 “Vorholzeit”(小时)`,"admin.profile.pausePaid":`每天带薪休息分钟`,"admin.profile.pausePaidHint":`这些休息分钟计入工作时间(0 = 休息不带薪)。`,"admin.settings.pauseMode":`休息`,"admin.settings.pauseModeTitle":`休息规则`,"admin.settings.pauseModeHint":`每天休息时间的确定方式。`,"admin.settings.pauseRules":`休息阶梯`,"admin.settings.pauseRulesHint":`适用于未打点休息的工作日:从一个区块的首次到末次打点起,超过该时长即扣除相应分钟。`,"admin.settings.pauseFrom":`从分钟`,"admin.settings.pauseTo":`到分钟(留空 = 不设上限)`,"admin.settings.pauseMinutes":`休息分钟`,"admin.settings.pauseActive":`规则启用`,"admin.settings.pauseAdd":`添加规则`,"admin.settings.pauseSave":`保存休息阶梯`,"admin.settings.pauseMode.auto":`以打点休息为准,否则按阶梯`,"admin.settings.pauseMode.punched":`仅打点的休息`,"admin.settings.pauseMode.staffel":`仅按休息阶梯`,"admin.settings.fontPathHint":`俄语、乌克兰语和中文需要;留空则使用仅覆盖 Latin-1 的内置字体。`,"admin.settings.advanced":`所有实例设置(技术名称,开关使用 1/0)`,"admin.settings.setting.edit_window_days":`修改窗口(天)`,"admin.settings.setting.quick_round_minutes":`快速取整(分钟)`,"admin.settings.setting.absence_calc_until_today":`缺勤到今天`,"admin.settings.setting.absence_deduct_worktime":`缺勤扣减`,"admin.settings.setting.print_limit_days":`打印限制(天)`,"admin.settings.setting.holiday_country":`节假日国家`,"admin.settings.setting.default_language":`默认语言`,"admin.settings.setting.session_ttl_minutes":`会话(分钟)`,"admin.settings.setting.backup_retention_days":`备份(天)`,"admin.settings.setting.attendance_list_visible":`考勤列表`,"admin.settings.setting.timezone":`时区`,"admin.settings.saved":`设置已保存。`,"admin.holidays":`公共假日`,"admin.holiday.date":`日期(YYYY-MM-DD)`,"admin.holiday.name":`名称`,"holiday.newYear":`元旦`,"holiday.epiphany":`主显节`,"holiday.goodFriday":`耶稣受难日`,"holiday.easterMonday":`复活节星期一`,"holiday.labourDay":`劳动节`,"holiday.ascension":`耶稣升天节`,"holiday.whitMonday":`圣灵降临节星期一`,"holiday.corpusChristi":`基督圣体节`,"holiday.nationalDay":`国庆日`,"holiday.germanUnity":`德国统一日`,"holiday.assumption":`圣母升天节`,"holiday.allSaints":`诸圣节`,"holiday.immaculateConception":`圣母无染原罪瞻礼`,"holiday.christmas":`圣诞节`,"holiday.boxingDay":`节礼日`,"admin.holiday.add":`添加假日`,"admin.holiday.year":`年份`,"admin.holiday.region":`地区(可选)`,"admin.holiday.empty":`本年度未记录任何假日。`,"admin.tags":`工牌(RFID/NFC)`,"admin.tag.label":`标签`,"admin.tag.user":`员工`,"admin.tag.create":`创建工牌`,"admin.tag.linkOnce":`将此链接写入标签,或在手机上打开:`,"admin.tag.delete":`删除`,"admin.tag.active":`有效`,"admin.tag.expired":`已过期`,"admin.tag.revoked":`已撤销`,"admin.tag.lastUsed":`最近使用`,"admin.tag.remove":`永久删除`,"admin.tag.edit":`编辑`,"admin.tag.reissue":`新链接`,"admin.tag.editTitle":`编辑证件`,"admin.tag.editHint":`更换员工或设置新的有效期会生成新链接 —— 之前发出的链接会立即失效。`,"admin.tag.validityDays":`有效期(天)`,"admin.tag.oldLinkDead":`之前发出的链接已失效。`,"admin.tag.qrAlt":`证件链接的二维码`,"admin.tag.empty":`尚未创建工牌。`,"nav.statistics":`统计`,"statistics.from":`从`,"statistics.to":`至`,"statistics.employee":`员工`,"statistics.worked":`已工作`,"statistics.target":`目标`,"statistics.balance":`差额`,"statistics.openDays":`未完成天数`,"statistics.totals":`所有员工`,"scan.title":`工牌`,"scan.done":`已为 {{name}} 打卡,时间 {{time}}`,"scan.failed":`无法使用工牌:{{reason}}`,"presence.title":`在岗状态`,"presence.present":`在岗`,"presence.absent":`离岗`,"presence.tapPin":`输入 PIN 码进行打卡`,"presence.cancel":`取消`,"presence.updated":`{{name}} 现在 {{state}}`,"presence.disabled":`在实例设置中已关闭自助终端。`,"admin.user.photo":`照片`,"admin.user.photoTitle":`{{name}} 的照片`,"admin.user.photoChoose":`选择图片`,"admin.user.photoRemove":`删除图片`,"admin.user.photoHint":`PNG、JPEG、WEBP 或 GIF,最大 256 KB。没有图片时显示占位图。`,"admin.corrections":`时间改正`,"corrections.employee":`员工`,"corrections.previous":`上个月`,"corrections.next":`下个月`,"corrections.reason":`原因`,"corrections.reasonHint":`会记录在审计日志中`,"corrections.add":`添加打卡或整天`,"corrections.addTitle":`添加打卡`,"corrections.addHint":`如果只缺一次打卡,“下班”留空`,"corrections.editTitle":`修改打卡`,"corrections.remove":`删除打卡`,"corrections.date":`日期`,"corrections.from":`上班`,"corrections.to":`下班`,"corrections.direction":`方向`,"corrections.note":`备注`,"corrections.empty":`本月没有打卡`,"corrections.byAdmin":`由管理员添加`,"corrections.history":`历史记录`,"corrections.actor":`操作人`,"corrections.actionCreate":`已添加`,"corrections.actionUpdate":`已修改`,"corrections.actionDelete":`已删除`,"keypad.backspace":`删除`,"admin.settings.branding":`公司品牌`,"admin.settings.brandingHint":`本安装的标志、背景图片和背景颜色。登录界面和自助终端界面也会显示它们。`,"admin.settings.brandLogo":`选择标志`,"admin.settings.brandBackground":`选择背景`,"admin.brand.imageResized":`已缩小以便显示({{size}})。`,"admin.brand.imageTooLarge":`即使缩小,图片仍然过大。`,"admin.brand.imageType":`仅支持 PNG、JPEG、WEBP 或 GIF。`,"admin.brand.imageUnreadable":`无法读取该图片。`,"admin.settings.brandColor":`背景颜色`,"admin.settings.brandColorHint":`十六进制值,例如 #1a2b3c`,"admin.settings.brandColorPresets":`建议颜色`,"admin.settings.brandColorDefault":`默认`,"admin.backup.download":`下载`,"admin.backup.restore":`恢复`,"admin.backup.restoreTitle":`恢复备份`,"admin.backup.restoreConfirm":`备份 {{name}} 将在适配器下次启动时应用;当前数据库会以文件形式保留在旁边。之后请重启实例。`,"admin.backup.pendingHint":`{{name}} 将在下次启动时应用({{users}} 名员工,{{entries}} 条打卡)- 请重启实例。`,"error.backup_invalid":`该文件不是此适配器的备份。`,"admin.settings.brandImageRemove":`移除图片`,"admin.settings.brandColorDefaultHint":`重置背景颜色和背景图片`,"admin.triggers":`动作(ioBroker)`,"admin.triggersHint":"其他适配器的状态会打点或设置在场 —— 例如指纹读卡器、按钮或门磁。仅在数值变化时触发。数值可填写 `toggle`:这样每次变化都会触发(例如开与关)。","admin.trigger.label":`名称`,"admin.trigger.sourceState":`状态`,"admin.trigger.mode":`触发`,"admin.trigger.modeCondition":`状态带有该数值`,"admin.trigger.modeUser":`数值即员工`,"admin.trigger.condition":`数值`,"admin.trigger.user":`员工`,"admin.trigger.action":`动作`,"admin.trigger.actionPunch":`打点(上班或下班)`,"admin.trigger.actionQuickPunch":`带快速取整的打点`,"admin.trigger.actionPresent":`设为在场`,"admin.trigger.actionAbsent":`设为不在场`,"admin.trigger.cooldown":`间隔(秒)`,"admin.trigger.active":`启用`,"admin.trigger.add":`添加动作`,"admin.trigger.lastFired":`上次触发`,"admin.trigger.empty":`尚未添加动作。`,"admin.trigger.conditionHint":"数值,或 `toggle` 表示每次变化都触发","admin.settings.automations":`规则(自动)`,"admin.settings.automationsHint":`适配器自动完成的事:在设定的本地时间下班打点、提示缺少下班打点,或在长时间未休息后提醒。每条规则每位员工每天最多执行一次。`,"admin.automation.kind":`类型`,"admin.automation.kindClockIn":`自动上班打卡`,"admin.automation.kindClockOut":`自动下班打点`,"admin.automation.kindMissingPunch":`提示缺少下班打点`,"admin.automation.kindBreakReminder":`休息提醒`,"admin.automation.at":`时间`,"admin.automation.atHint":`员工的本地时间`,"admin.automation.after":`之后(分钟)`,"admin.automation.user":`员工`,"admin.automation.allUsers":`所有员工`,"admin.automation.add":`添加规则`,"admin.automation.empty":`尚未添加规则。`,"admin.automation.runs":`最近执行`,"admin.automation.weekdays":`星期`,"admin.automation.repeat":`重复`,"admin.automation.repeatDay":`每天一次`,"admin.automation.repeatWeek":`每周一次`,"admin.settings.setting.report_font_path":`PDF 字体`,"presence.workedToday":`今日已工作`,"admin.user.workedTime":`在岗卡片上的工作时间`,"admin.user.workedTimeHint":`在在岗卡片上显示今天的工作时间(例如 1:23)。未打卡时显示 0:00;未授权时卡片只显示在岗/缺勤和姓名。`,"admin.automation.save":`保存规则`,"admin.automation.edit":`编辑`,"admin.automation.editTitle":`编辑规则`,"admin.automation.newTitle":`新规则`},Lw=[`en`,`de`,`ru`,`pt`,`nl`,`fr`,`it`,`es`,`pl`,`uk`,`zh-cn`],Rw={en:{translation:Ew},de:{translation:Dw},ru:{translation:Ow},pt:{translation:kw},nl:{translation:Aw},fr:{translation:jw},it:{translation:Mw},es:{translation:Nw},pl:{translation:Pw},uk:{translation:Fw},"zh-cn":{translation:Iw}};function zw(){if(typeof navigator>`u`)return`en`;let e=[...navigator.languages??[],navigator.language];for(let t of e){let e=t.toLowerCase(),n=Lw.find(t=>t===e);if(n)return n;let r=e.split(`-`)[0],i=Lw.find(e=>e===r);if(i)return i;if(r===`zh`)return`zh-cn`}return`en`}function Bw(e){let t=(e??``).toLowerCase(),n=Lw.find(e=>e===t);if(n)return n;let r=t.split(`-`)[0];return Lw.find(e=>e===r)??zw()}kC.use(JC).init({resources:Rw,lng:zw(),fallbackLng:`en`,interpolation:{escapeValue:!1},returnNull:!1});var Vw=kC,Hw=(0,y.createContext)(null);function Uw({children:e}){let[t,n]=(0,y.useState)(()=>$.session()),[r,i]=(0,y.useState)([]),[a,o]=(0,y.useState)(t!==null),s=(0,y.useCallback)(e=>{if(!e)return;let t=Bw(e.language);Vw.language!==t&&Vw.changeLanguage(t)},[]),c=(0,y.useCallback)(async()=>{try{let e=await $.me();if(i(e.permissions??[]),e.user){s(e.user);let t=$.session();n(n=>n?{...n,user:e.user}:t)}}catch(e){e instanceof iw&&(e.status===401||e.status===0)&&e.status===401&&(n(null),i([]))}finally{o(!1)}},[s]);(0,y.useEffect)(()=>{c()},[c]);let l=(0,y.useCallback)(async(e,t)=>{let r=await $.login(e,t);s(r.user),n(r),await c()},[s,c]),u=(0,y.useCallback)(async()=>{await $.logout(),n(null),i([])},[]),d=(0,y.useMemo)(()=>({session:t,permissions:r,checking:a,signIn:l,signOut:u,refresh:c}),[t,r,a,l,u,c]);return(0,N.jsx)(Hw.Provider,{value:d,children:e})}function Ww(){let e=(0,y.useContext)(Hw);if(!e)throw Error(`useSession must be used inside a SessionProvider`);return e}function Gw(e,t){return e.includes(t)}var Kw=`time-tracker.queue`;function qw(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function Jw(e=window.localStorage,t=()=>Date.now()){function n(){try{let t=e.getItem(Kw);if(!t)return[];let n=JSON.parse(t);return Array.isArray(n)?n.filter(e=>typeof e?.idempotencyKey==`string`):[]}catch{return[]}}function r(t){e.setItem(Kw,JSON.stringify(t))}return{list:n,add(e){let i={idempotencyKey:e.idempotencyKey??qw(),tsUtc:e.tsUtc,...e.direction?{direction:e.direction}:{},...e.note?{note:e.note}:{},...e.quick?{quick:!0}:{},queuedAt:Math.floor(t()/1e3)};return r([...n(),i]),i},replace(e){r(e)},clear(){e.removeItem(Kw)},size:()=>n().length}}var Yw=Jw(),Xw=(0,y.createContext)(null);function Zw({children:e}){let[t,n]=(0,y.useState)(()=>Yw.list()),[r,i]=(0,y.useState)(()=>typeof navigator>`u`||navigator.onLine),[a,o]=(0,y.useState)(!1),[s,c]=(0,y.useState)(null),l=(0,y.useCallback)(()=>{n(Yw.list())},[]),u=(0,y.useCallback)(async()=>{let e=Yw.list();if(e.length===0)return c(null),null;o(!0);try{let t=await $.sync(e.map(e=>({idempotencyKey:e.idempotencyKey,tsUtc:e.tsUtc,...e.direction?{direction:e.direction}:{},...e.note?{note:e.note}:{}})));Yw.clear(),l();let n={accepted:t.accepted??0,duplicates:t.duplicates??0,conflicts:t.conflicts??0};return c(n),i(!0),n}catch(e){return e instanceof iw&&e.status===0&&i(!1),l(),null}finally{o(!1)}},[l]),d=(0,y.useCallback)(e=>{let t=Yw.add(e);return l(),u(),t},[u,l]);(0,y.useEffect)(()=>{let e=()=>i(!1),t=()=>{i(!0),u()};return window.addEventListener(`offline`,e),window.addEventListener(`online`,t),()=>{window.removeEventListener(`offline`,e),window.removeEventListener(`online`,t)}},[u]),(0,y.useEffect)(()=>{let e=()=>l();return window.addEventListener(`focus`,e),()=>window.removeEventListener(`focus`,e)},[l]);let f=(0,y.useMemo)(()=>({pending:t,online:r,busy:a,outcome:s,record:d,flush:u,reload:l}),[t,r,a,s,d,u,l]);return(0,N.jsx)(Xw.Provider,{value:f,children:e})}function Qw(){let e=(0,y.useContext)(Xw);if(!e)throw Error(`useSync must be used inside a SyncProvider`);return e}var $w=3e4;function eT(e){let t=Oc();(0,y.useEffect)(()=>{let n=e?$.streamUrl():null;if(!n||typeof WebSocket>`u`)return;let r=null,i=null,a=0,o=!1,s=()=>{r=new WebSocket(n),r.onopen=()=>{a=0},r.onmessage=()=>{t.invalidateQueries()},r.onerror=()=>r?.close(),r.onclose=()=>{o||(a+=1,i=window.setTimeout(s,Math.min(1e3*2**(a-1),$w)))}};return s(),()=>{o=!0,i!==null&&window.clearTimeout(i),r?.close()}},[e,t])}var tT=[{path:`/`,key:`nav.dashboard`,icon:(0,N.jsx)(vw,{})},{path:`/month`,key:`nav.month`,icon:(0,N.jsx)(Sw,{})},{path:`/reports`,key:`nav.reports`,icon:(0,N.jsx)(yw,{})},{path:`/statistics`,key:`nav.statistics`,icon:(0,N.jsx)(bw,{})},{path:`/absences`,key:`nav.absences`,icon:(0,N.jsx)(xw,{})},{path:`/sync`,key:`nav.sync`,icon:(0,N.jsx)(Tw,{})}];function nT({title:e,children:t}){let{t:n}=tw(),{session:r,signOut:i}=Ww(),{pending:a,online:o}=Qw();eT(r!==null);let{permissions:s}=Ww(),c=[`user.view`,`terminal.manage`,`settings.view`,`import.run`,`holiday.manage`,`rfid.manage`,`backup.run`].some(e=>Gw(s,e)),l=Ed(),u=Cd(),[d,f]=(0,y.useState)(null),p=gw(),m=tT.find(e=>e.path===u.pathname)?.path??`/`;return(0,N.jsxs)(q,{sx:{display:`flex`,flexDirection:`column`,minHeight:`100vh`},children:[(0,N.jsx)(Km,{position:`sticky`,color:`primary`,enableColorOnDark:!0,children:(0,N.jsxs)(eS,{variant:`dense`,sx:{gap:1},children:[p.logoUrl&&(0,N.jsx)(q,{component:`img`,src:p.logoUrl,alt:``,sx:{height:28,maxWidth:120,objectFit:`contain`}}),(0,N.jsx)(K,{variant:`h6`,sx:{flexGrow:1},children:n(`app.title`)}),!o&&(0,N.jsx)(rh,{size:`small`,color:`warning`,icon:(0,N.jsx)(Cw,{}),label:n(`app.offline`)}),a.length>0&&(0,N.jsx)(rh,{size:`small`,color:`secondary`,icon:(0,N.jsx)(Tw,{}),label:n(`sync.pending`,{count:a.length}),onClick:()=>void l(`/sync`)}),(0,N.jsx)(bm,{color:`inherit`,onClick:e=>f(e.currentTarget),title:n(`nav.menu`),children:(0,N.jsx)(ww,{})})]})}),(0,N.jsxs)(Hb,{anchorEl:d,open:d!==null,onClose:()=>f(null),children:[(0,N.jsx)(Yb,{disabled:!0,children:(0,N.jsx)(K,{variant:`body2`,children:r?.user.displayName??r?.user.login})}),c&&(0,N.jsx)(Yb,{onClick:()=>{f(null),l(`/admin`)},children:n(`admin.title`)}),(0,N.jsx)(Yb,{onClick:()=>{f(null),l(`/profile`)},children:n(`nav.profile`)}),(0,N.jsx)(Yb,{onClick:()=>{f(null),i()},children:n(`nav.logout`)})]}),(0,N.jsxs)(w_,{maxWidth:`sm`,sx:{py:2,flexGrow:1},children:[(0,N.jsx)(K,{variant:`h5`,component:`h1`,sx:{mb:2},children:e}),t]}),(0,N.jsx)(q,{sx:{position:`sticky`,bottom:0,borderTop:1,borderColor:`divider`,bgcolor:`background.paper`},children:(0,N.jsx)(ug,{value:m,showLabels:!0,onChange:(e,t)=>void l(t),sx:{maxWidth:600,mx:`auto`},children:tT.map(e=>(0,N.jsx)(_g,{value:e.path,label:n(e.key),icon:e.key===`nav.sync`?(0,N.jsx)(ag,{color:`secondary`,badgeContent:a.length,overlap:`circular`,children:e.icon}):e.icon},e.path))})})]})}function rT({primary:e,secondary:t,children:n}){return(0,N.jsxs)(ob,{divider:!0,sx:{flexWrap:`wrap`,alignItems:`center`,columnGap:1,rowGap:.5},children:[(0,N.jsx)(pb,{sx:{flex:`1 1 10rem`,minWidth:0},primary:e,secondary:t}),(0,N.jsx)(X,{direction:`row`,spacing:1,alignItems:`center`,sx:{ml:`auto`,flexShrink:0},children:n})]})}function iT(e){return e instanceof iw?`error.${e.code}`:`error.unknown_error`}function aT({error:e,severity:t=`error`}){let{t:n}=tw();if(!e)return null;let r=iT(e),i=n(r);return(0,N.jsx)(Nm,{severity:t,sx:{mb:2},children:i===r?n(`error.unknown_error`):i})}function oT(){let{t:e}=tw();return(0,N.jsxs)(q,{sx:{display:`flex`,justifyContent:`center`,alignItems:`center`,gap:2,py:6},children:[(0,N.jsx)(C_,{size:22}),e(`common.loading`)]})}function sT(){let{t:e,i18n:t}=tw(),{permissions:n}=Ww(),r=Oc(),[i,a]=(0,y.useState)(()=>new Date().getFullYear()),[o,s]=(0,y.useState)(``),[c,l]=(0,y.useState)(``),[u,d]=(0,y.useState)(``),[f,p]=(0,y.useState)(!1),m=Gw(n,`absence.request`),h=Yl({queryKey:[`absences`,i],queryFn:()=>$.absences(i)}),g=Yl({queryKey:[`absence-types`],queryFn:()=>$.absenceTypes(),enabled:m,staleTime:3e5}).data??[],_=Xl({mutationFn:()=>$.createAbsence({typeCode:o.trim(),dateFrom:c,...u?{dateTo:u}:{}}),onSuccess:()=>{s(``),l(``),d(``),p(!0),r.invalidateQueries({queryKey:[`absences`,i]})}});function v(e){e.preventDefault(),p(!1),_.mutate()}return(0,N.jsxs)(nT,{title:e(`absences.title`),children:[(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(X,{direction:`row`,alignItems:`center`,justifyContent:`space-between`,sx:{p:1},children:[(0,N.jsx)(bm,{onClick:()=>a(e=>e-1),title:e(`month.previous`),children:(0,N.jsx)(NS,{})}),(0,N.jsx)(K,{variant:`h6`,children:i}),(0,N.jsx)(bm,{onClick:()=>a(e=>e+1),title:e(`month.next`),children:(0,N.jsx)(PS,{})})]})}),(0,N.jsx)(aT,{error:h.error}),h.isLoading?(0,N.jsx)(oT,{}):(0,N.jsxs)(Y,{sx:{mb:3},children:[(0,N.jsx)(Gy,{dense:!0,children:(h.data??[]).map(n=>(0,N.jsx)(rT,{primary:`${n.typeCode}: ${lw(n.dateFrom,t.language)}${n.dateTo&&n.dateTo!==n.dateFrom?` – ${lw(n.dateTo,t.language)}`:``}`,secondary:`${e(`absences.portion`)}: ${n.dayPortion}`,children:(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:n.status})},n.id))}),(h.data??[]).length===0&&(0,N.jsx)(q,{sx:{p:2},children:(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`absences.empty`)})})]}),m&&(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:e(`absences.create`)}),f&&(0,N.jsx)(Nm,{severity:`success`,children:e(`absences.created`)}),(0,N.jsx)(aT,{error:_.error}),(0,N.jsx)(q,{component:`form`,onSubmit:v,children:(0,N.jsxs)(X,{spacing:2,children:[g.length>0?(0,N.jsx)(Z,{select:!0,label:e(`absences.type`),value:o,required:!0,size:`small`,onChange:e=>s(e.target.value),children:g.map(e=>(0,N.jsxs)(Yb,{value:e.code,children:[e.code,` – `,e.name]},e.id))}):(0,N.jsx)(Z,{label:e(`absences.type`),value:o,required:!0,size:`small`,helperText:e(`absences.typeHint`),onChange:e=>s(e.target.value)}),(0,N.jsx)(Z,{label:e(`absences.from`),type:`date`,value:c,required:!0,size:`small`,InputLabelProps:{shrink:!0},onChange:e=>l(e.target.value)}),(0,N.jsx)(Z,{label:e(`absences.to`),type:`date`,value:u,size:`small`,InputLabelProps:{shrink:!0},onChange:e=>d(e.target.value)}),(0,N.jsx)(J,{type:`submit`,variant:`contained`,disabled:_.isPending,children:e(`common.save`)})]})})]})})]})}var cT=524288,lT=262144,uT=2560,dT=[.85,.7,.55,.4],fT=[`image/png`,`image/jpeg`,`image/webp`,`image/gif`];function pT(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(typeof r.result==`string`?r.result:``),r.onerror=()=>n(Error(`unreadable`)),r.readAsDataURL(e)})}function mT(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>t(r),r.onerror=()=>n(Error(`unreadable`)),r.src=e})}async function hT(e,t){if(!fT.includes(e.type))return{ok:!1,problem:`type`};let n;try{n=await pT(e)}catch{return{ok:!1,problem:`unreadable`}}if(n.length<=t)return{ok:!0,image:{dataUrl:n,bytes:n.length,resized:!1}};let r;try{r=await mT(n)}catch{return{ok:!1,problem:`unreadable`}}let i=Math.max(r.width,r.height);if(i===0)return{ok:!1,problem:`unreadable`};for(let e=Math.min(i,uT);e>=320;e=Math.floor(e/2)){let n=e/i,a=document.createElement(`canvas`);a.width=Math.max(1,Math.round(r.width*n)),a.height=Math.max(1,Math.round(r.height*n));let o=a.getContext(`2d`);if(!o)return{ok:!1,problem:`unreadable`};o.fillStyle=`#ffffff`,o.fillRect(0,0,a.width,a.height),o.drawImage(r,0,0,a.width,a.height);for(let e of dT){let n=a.toDataURL(`image/jpeg`,e);if(n.length<=t)return{ok:!0,image:{dataUrl:n,bytes:n.length,resized:!0}}}}return{ok:!1,problem:`tooLarge`}}var gT=rp((0,N.jsx)(`path`,{d:`M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM19 4h-3.5l-1-1h-5l-1 1H5v2h14z`}),`Delete`),_T=rp((0,N.jsx)(`path`,{d:`M3 17.25V21h3.75L17.81 9.94l-3.75-3.75zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 0 0-1.41 0l-1.83 1.83 3.75 3.75z`}),`Edit`),vT=rp((0,N.jsx)(`path`,{d:`M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9m-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8z`}),`History`),yT=rp((0,N.jsx)(`path`,{d:`M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z`}),`Add`);function bT({day:e,timeZone:t,onClose:n}){let{t:r}=tw(),{session:i,permissions:a}=Ww(),o=Oc(),s=e?.localDate??``,c=Yl({queryKey:[`entries`,s],queryFn:()=>$.entries(s,s),enabled:e!==null}),[l,u]=(0,y.useState)(null),[d,f]=(0,y.useState)(null),[p,m]=(0,y.useState)(!1),h=Gw(a,`time.delete`),g=e=>new Intl.DateTimeFormat(`en-GB`,{hour:`2-digit`,minute:`2-digit`,hour12:!1,timeZone:t}).format(new Date(e*1e3)),_=l??(c.data??[]).map(e=>({id:e.id,revision:e.revision,time:g(e.tsUtc),direction:e.direction??`in`})),v=(e,t)=>u(_.map((n,r)=>r===e?{...n,...t}:n)),b=async()=>{m(!0),f(null);try{for(let e of _){let n=kT(s,e.time,t),r=e.id;if(r===void 0){await $.createEntry({userId:i?.user.id??0,tsUtc:n,direction:e.direction});continue}let a=(c.data??[]).find(e=>e.id===r);a&&a.tsUtc!==n&&await $.updateEntry(r,{tsUtc:n,revision:a.revision})}await o.invalidateQueries({queryKey:[`entries`,s]}),await o.invalidateQueries({queryKey:[`days`]}),n()}catch(e){f(e)}finally{m(!1)}},x=async e=>{if(e.id===void 0){u(_.filter(t=>t!==e));return}m(!0),f(null);try{await $.deleteEntry(e.id,null),u(null),await c.refetch(),await o.invalidateQueries({queryKey:[`days`]})}catch(e){f(e)}finally{m(!1)}};return(0,N.jsxs)(ov,{open:e!==null,onClose:n,fullWidth:!0,maxWidth:`xs`,children:[(0,N.jsx)(Dv,{children:r(`month.editTitle`,{date:s})}),(0,N.jsxs)(vv,{children:[(0,N.jsx)(aT,{error:d??c.error}),(0,N.jsx)(K,{variant:`caption`,color:`text.secondary`,display:`block`,sx:{mb:1},children:r(`month.editHint`)}),(0,N.jsxs)(X,{spacing:1,children:[_.map((e,t)=>(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsx)(Z,{size:`small`,type:`time`,label:r(`month.time`),value:e.time,onChange:e=>v(t,{time:e.target.value})}),(0,N.jsxs)(Z,{size:`small`,select:!0,label:r(`month.direction`),value:e.direction,onChange:e=>v(t,{direction:e.target.value}),children:[(0,N.jsx)(Yb,{value:`in`,children:r(`month.directionIn`)}),(0,N.jsx)(Yb,{value:`out`,children:r(`month.directionOut`)})]}),h&&(0,N.jsx)(bm,{size:`small`,title:r(`admin.backup.delete`),disabled:p,onClick:()=>void x(e),children:(0,N.jsx)(gT,{fontSize:`small`})})]},e.id??`new-${t}`)),(0,N.jsx)(J,{size:`small`,startIcon:(0,N.jsx)(yT,{}),disabled:p,onClick:()=>u([..._,{time:`12:00`,direction:_.length%2==0?`in`:`out`}]),children:r(`month.addPunch`)})]})]}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:n,children:r(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:p||_.length===0,onClick:()=>void b(),children:r(`common.save`)})]})]})}var xT=rp((0,N.jsx)(`path`,{d:`M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2M8 20H4v-4h4zm0-6H4v-4h4zm0-6H4V4h4zm6 12h-4v-4h4zm0-6h-4v-4h4zm0-6h-4V4h4zm6 12h-4v-4h4zm0-6h-4v-4h4zm0-6h-4V4h4z`}),`GridOn`),ST=rp((0,N.jsx)(`path`,{d:`M10 10.02h5V21h-5zM17 21h3c1.1 0 2-.9 2-2v-9h-5zm3-18H5c-1.1 0-2 .9-2 2v3h19V5c0-1.1-.9-2-2-2M3 19c0 1.1.9 2 2 2h3V10H3z`}),`TableChart`),CT=rp((0,N.jsx)(`path`,{d:`M20 2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m-8.5 7.5c0 .83-.67 1.5-1.5 1.5H9v2H7.5V7H10c.83 0 1.5.67 1.5 1.5zm5 2c0 .83-.67 1.5-1.5 1.5h-2.5V7H15c.83 0 1.5.67 1.5 1.5zm4-3H19v1h1.5V11H19v2h-1.5V7h3zM9 9.5h1v-1H9zM4 6H2v14c0 1.1.9 2 2 2h14v-2H4zm10 5.5h1v-3h-1z`}),`PictureAsPdf`);function wT(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.rel=`noopener`,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)}function TT({year:e,month:t,userId:n,compact:r=!1}){let{t:i}=tw(),[a,o]=(0,y.useState)(null),[s,c]=(0,y.useState)(null),l=async r=>{o(r),c(null);try{let i=await $.downloadReport(r,e,t,n);wT(i.blob,i.fileName)}catch(e){c(e)}finally{o(null)}},u=e=>i(e===`xls`?`report.xls`:e===`pdf`?`report.pdf`:`report.csv`);return r?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(X,{direction:`row`,spacing:.5,alignItems:`center`,children:[a!==null&&(0,N.jsx)(C_,{size:16}),(0,N.jsx)(bm,{size:`small`,title:u(`xls`),disabled:a!==null,onClick:()=>void l(`xls`),children:(0,N.jsx)(xT,{fontSize:`small`})}),(0,N.jsx)(bm,{size:`small`,title:u(`pdf`),disabled:a!==null,onClick:()=>void l(`pdf`),children:(0,N.jsx)(CT,{fontSize:`small`})}),(0,N.jsx)(bm,{size:`small`,title:u(`csv`),disabled:a!==null,onClick:()=>void l(`csv`),children:(0,N.jsx)(ST,{fontSize:`small`})})]}),(0,N.jsx)(aT,{error:s})]}):(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(X,{direction:`row`,spacing:1,alignItems:`center`,children:[(0,N.jsx)(J,{size:`small`,variant:`outlined`,startIcon:(0,N.jsx)(xT,{}),disabled:a!==null,onClick:()=>void l(`xls`),children:u(`xls`)}),(0,N.jsx)(J,{size:`small`,variant:`outlined`,startIcon:(0,N.jsx)(CT,{}),disabled:a!==null,onClick:()=>void l(`pdf`),children:u(`pdf`)}),(0,N.jsx)(J,{size:`small`,variant:`outlined`,startIcon:(0,N.jsx)(ST,{}),disabled:a!==null,onClick:()=>void l(`csv`),children:u(`csv`)}),a!==null&&(0,N.jsx)(C_,{size:18})]}),(0,N.jsx)(aT,{error:s})]})}function ET(e,t){let n=`${e}-${String(t).padStart(2,`0`)}-01`,r=new Date(Date.UTC(e,t,0)).getUTCDate();return{from:n,to:`${e}-${String(t).padStart(2,`0`)}-${String(r).padStart(2,`0`)}`}}function DT(){let{t:e,i18n:t}=tw(),{session:n,permissions:r}=Ww(),[i,a]=(0,y.useState)(null),[o]=Kf(),s=Number(o.get(`userId`))||void 0,c=(o.get(`name`)??``).trim(),[l,u]=(0,y.useState)(()=>{let e=Number(o.get(`year`)),t=Number(o.get(`month`));if(Number.isInteger(e)&&Number.isInteger(t)&&t>=1&&t<=12)return{year:e,month:t};let r=new Date,i=n?.user.timezone,[a,s]=new Intl.DateTimeFormat(`en-CA`,{timeZone:i,year:`numeric`,month:`2-digit`}).format(r).split(`-`);return{year:Number(a),month:Number(s)}}),d=ET(l.year,l.month),f=Yl({queryKey:[`days`,d.from,d.to,s],queryFn:()=>$.days(d.from,d.to,s)});function p(e){let t=new Date(Date.UTC(l.year,l.month-1+e,1));u({year:t.getUTCFullYear(),month:t.getUTCMonth()+1})}let m=new Intl.DateTimeFormat(t.language,{month:`long`,year:`numeric`,timeZone:`UTC`}).format(new Date(`${d.from}T12:00:00Z`));return(0,N.jsxs)(nT,{title:c?`${e(`month.title`)} · ${c}`:e(`month.title`),children:[(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(X,{direction:`row`,alignItems:`center`,justifyContent:`space-between`,sx:{p:1},children:[(0,N.jsx)(bm,{onClick:()=>p(-1),title:e(`month.previous`),children:(0,N.jsx)(NS,{})}),(0,N.jsx)(K,{variant:`h6`,children:m}),(0,N.jsx)(bm,{onClick:()=>p(1),title:e(`month.next`),children:(0,N.jsx)(PS,{})})]})}),(0,N.jsx)(aT,{error:f.error}),(0,N.jsx)(q,{sx:{mb:2},children:(0,N.jsx)(TT,{year:l.year,month:l.month,userId:s})}),f.isLoading?(0,N.jsx)(oT,{}):(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(X,{direction:`row`,spacing:3,useFlexGap:!0,sx:{px:1,mb:1,flexWrap:`wrap`},children:[(0,N.jsxs)(K,{variant:`body2`,color:`text.secondary`,children:[e(`month.worked`),`: `,sw(f.data?.workedMin??0)]}),(0,N.jsxs)(K,{variant:`body2`,color:`text.secondary`,children:[e(`month.pause`),`: `,sw(f.data?.breakMin??0),(f.data?.paidBreakMin??0)>0?` (${e(`month.paidBreak`)} ${sw(f.data?.paidBreakMin??0)})`:``]}),(0,N.jsxs)(K,{variant:`body2`,color:`text.secondary`,children:[e(`month.target`),`: `,sw(f.data?.targetMin??0)]}),(0,N.jsxs)(K,{variant:`body2`,color:(f.data?.balanceMin??0)<0?`error`:`text.secondary`,children:[e(`month.balance`),`: `,sw(f.data?.balanceMin??0)]})]}),(0,N.jsxs)(Y,{children:[(0,N.jsx)(Gy,{dense:!0,children:(f.data?.days??[]).map(n=>(0,N.jsx)(ob,{secondaryAction:(0,N.jsxs)(X,{direction:`row`,spacing:.5,sx:{alignItems:`center`},children:[Gw(r,`time.edit_own`)&&(0,N.jsx)(bm,{size:`small`,title:e(`month.edit`),onClick:()=>a(n),children:(0,N.jsx)(_T,{fontSize:`small`})}),(0,N.jsx)(K,{variant:`body2`,color:n.balanceMin<0?`error`:`text.secondary`,children:sw(n.balanceMin)})]}),children:(0,N.jsx)(pb,{primary:uw(n.localDate,t.language),secondary:[`${e(`month.worked`)} ${sw(n.workedMin)}`,`${e(`month.pause`)} ${sw(n.breakMin)}${n.paidBreakMin>0?` (${e(`month.paidBreak`)} ${sw(n.paidBreakMin)})`:``}`,`${e(`month.target`)} ${sw(n.targetMin)}`,n.isHoliday?e(`month.holiday`):null,n.absenceCode?`${e(`month.absence`)}: ${n.absenceCode}`:null,n.hasOpenEntry?e(`month.open`):null].filter(Boolean).join(` · `)})},n.localDate))}),(f.data?.days??[]).length===0&&(0,N.jsx)(q,{sx:{p:2},children:(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`month.empty`)})})]})]}),(0,N.jsx)(bT,{day:i,timeZone:n?.user.timezone??`UTC`,onClose:()=>a(null)})]})}function OT(e,t){let n=new Intl.DateTimeFormat(`en-US`,{timeZone:t,hour12:!1,year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`}).formatToParts(e),r=e=>Number(n.find(t=>t.type===e)?.value??`0`);return(Date.UTC(r(`year`),r(`month`)-1,r(`day`),r(`hour`)%24,r(`minute`),r(`second`))-e.getTime())/1e3}function kT(e,t,n){let r=Date.parse(`${e}T${t}:00Z`),i=r-OT(new Date(r),n)*1e3;return Math.round((r-OT(new Date(i),n)*1e3)/1e3)}function AT(e,t,n){return new Intl.DateTimeFormat(n,{timeZone:t,weekday:`short`,day:`2-digit`,month:`2-digit`,hour:`2-digit`,minute:`2-digit`}).format(new Date(e*1e3))}var jT={create:`corrections.actionCreate`,update:`corrections.actionUpdate`,delete:`corrections.actionDelete`};function MT({language:e}){let{t}=tw(),n=Oc(),[r,i]=(0,y.useState)(null),[a,o]=(0,y.useState)(()=>new Date().toISOString().slice(0,7)),[s,c]=(0,y.useState)(``),[l,u]=(0,y.useState)(null),[d,f]=(0,y.useState)(null),[p,m]=(0,y.useState)(null),h=Yl({queryKey:[`admin`,`users`],queryFn:()=>$.users(!0)}),g=r??h.data?.[0]?.id??null,[_,v]=a.split(`-`).map(Number),b=ET(_,v),x=h.data?.find(e=>e.id===g)?.timezone??`Europe/Berlin`,S=Yl({queryKey:[`admin`,`corrections`,g,b.from,b.to],queryFn:()=>$.entries(b.from,b.to,g??void 0),enabled:g!==null}),C=Yl({queryKey:[`admin`,`entry-audit`,p],queryFn:()=>$.entryAudit(p??0),enabled:p!==null}),w=async()=>{await n.invalidateQueries({queryKey:[`admin`,`corrections`]})},T=Xl({mutationFn:e=>$.updateEntry(e.id,{...e.patch,revision:e.revision,reason:s.trim()||null}),onSuccess:w}),E=Xl({mutationFn:e=>$.deleteEntry(e.id,s.trim()||null),onSuccess:w}),D=Xl({mutationFn:async e=>{if(g===null)return;let t=e.note.trim()||null,n=e.reason.trim()||s.trim()||null;await $.createEntry({userId:g,tsUtc:kT(e.date,e.from,x),direction:`in`,note:t,reason:n}),e.to.trim()&&await $.createEntry({userId:g,tsUtc:kT(e.date,e.to,x),direction:`out`,note:t,reason:n})},onSuccess:w});if(h.isLoading)return(0,N.jsx)(oT,{});let O=e=>{let t=new Date(Date.UTC(_,v-1+e,1));o(`${t.getUTCFullYear()}-${String(t.getUTCMonth()+1).padStart(2,`0`)}`)};return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:h.error??S.error??T.error??E.error??D.error}),(0,N.jsx)(Y,{sx:{p:2,mb:2},children:(0,N.jsxs)(X,{spacing:2,children:[(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,alignItems:{xs:`stretch`,sm:`center`},children:[(0,N.jsx)(Z,{select:!0,size:`small`,label:t(`corrections.employee`),value:g??``,onChange:e=>i(Number(e.target.value)),sx:{minWidth:200},children:(h.data??[]).map(e=>(0,N.jsx)(Yb,{value:e.id,children:e.displayName},e.id))}),(0,N.jsxs)(X,{direction:`row`,spacing:.5,alignItems:`center`,children:[(0,N.jsx)(bm,{onClick:()=>O(-1),title:t(`corrections.previous`),"aria-label":t(`corrections.previous`),children:(0,N.jsx)(NS,{})}),(0,N.jsx)(K,{sx:{minWidth:90,textAlign:`center`},children:a}),(0,N.jsx)(bm,{onClick:()=>O(1),title:t(`corrections.next`),"aria-label":t(`corrections.next`),children:(0,N.jsx)(PS,{})})]}),(0,N.jsx)(J,{variant:`contained`,disabled:g===null,sx:{ml:{sm:`auto`}},onClick:()=>f({date:b.from,from:`08:00`,to:`17:00`,note:``,reason:s}),children:t(`corrections.add`)})]}),(0,N.jsx)(Z,{size:`small`,label:t(`corrections.reason`),helperText:t(`corrections.reasonHint`),value:s,onChange:e=>c(e.target.value),fullWidth:!0})]})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Gy,{dense:!0,children:[(S.data??[]).map(n=>(0,N.jsx)(rT,{primary:`${AT(n.tsUtc,x,e)} · ${t(n.direction===`in`?`punch.in`:`punch.out`)}`,secondary:[n.source===`admin`?t(`corrections.byAdmin`):n.source,n.note].filter(Boolean).join(` · `),children:(0,N.jsxs)(X,{direction:`row`,spacing:.5,children:[(0,N.jsx)(bm,{size:`small`,title:t(`corrections.history`),"aria-label":t(`corrections.history`),onClick:()=>m(n.id),children:(0,N.jsx)(vT,{fontSize:`small`})}),(0,N.jsx)(bm,{size:`small`,title:t(`corrections.editTitle`),"aria-label":t(`corrections.editTitle`),onClick:()=>{let e=n.localDate,t=cw(n.tsUtc,x,`de-DE`);u({entry:n,date:e,time:t,direction:n.direction,note:n.note??``})},children:(0,N.jsx)(_T,{fontSize:`small`})}),(0,N.jsx)(bm,{size:`small`,title:t(`corrections.remove`),"aria-label":t(`corrections.remove`),onClick:()=>E.mutate(n),children:(0,N.jsx)(gT,{fontSize:`small`})})]})},n.id)),(S.data??[]).length===0&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{secondary:t(`corrections.empty`)})})]})}),l&&(0,N.jsxs)(ov,{open:!0,onClose:()=>u(null),children:[(0,N.jsx)(Dv,{children:t(`corrections.editTitle`)}),(0,N.jsx)(vv,{children:(0,N.jsxs)(X,{spacing:2,sx:{mt:1},children:[(0,N.jsx)(Z,{type:`date`,label:t(`corrections.date`),value:l.date,onChange:e=>u({...l,date:e.target.value}),InputLabelProps:{shrink:!0},fullWidth:!0}),(0,N.jsx)(Z,{type:`time`,label:t(`corrections.${l.direction===`in`?`from`:`to`}`),value:l.time,onChange:e=>u({...l,time:e.target.value}),InputLabelProps:{shrink:!0},fullWidth:!0}),(0,N.jsx)(Z,{label:t(`corrections.note`),value:l.note,onChange:e=>u({...l,note:e.target.value}),fullWidth:!0})]})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>u(null),children:t(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:T.isPending,onClick:()=>{T.mutate({id:l.entry.id,revision:l.entry.revision,patch:{tsUtc:kT(l.date,l.time,x),note:l.note.trim()||null}}),u(null)},children:t(`common.save`)})]})]}),d&&(0,N.jsxs)(ov,{open:!0,onClose:()=>f(null),children:[(0,N.jsx)(Dv,{children:t(`corrections.addTitle`)}),(0,N.jsx)(vv,{children:(0,N.jsxs)(X,{spacing:2,sx:{mt:1},children:[(0,N.jsx)(Z,{type:`date`,label:t(`corrections.date`),value:d.date,onChange:e=>f({...d,date:e.target.value}),InputLabelProps:{shrink:!0},fullWidth:!0}),(0,N.jsx)(Z,{type:`time`,label:t(`corrections.from`),value:d.from,onChange:e=>f({...d,from:e.target.value}),InputLabelProps:{shrink:!0},fullWidth:!0}),(0,N.jsx)(Z,{type:`time`,label:t(`corrections.to`),value:d.to,onChange:e=>f({...d,to:e.target.value}),helperText:t(`corrections.addHint`),InputLabelProps:{shrink:!0},fullWidth:!0}),(0,N.jsx)(Z,{label:t(`corrections.note`),value:d.note,onChange:e=>f({...d,note:e.target.value}),fullWidth:!0}),(0,N.jsx)(Z,{label:t(`corrections.reason`),helperText:t(`corrections.reasonHint`),value:d.reason,onChange:e=>f({...d,reason:e.target.value}),fullWidth:!0})]})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>f(null),children:t(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:D.isPending||d.from.trim()===``,onClick:()=>{D.mutate(d),f(null)},children:t(`common.save`)})]})]}),p!==null&&(0,N.jsxs)(ov,{open:!0,onClose:()=>m(null),children:[(0,N.jsx)(Dv,{children:t(`corrections.history`)}),(0,N.jsxs)(vv,{children:[(0,N.jsx)(aT,{error:C.error}),C.isLoading?(0,N.jsx)(oT,{}):(0,N.jsx)(Gy,{dense:!0,children:(C.data??[]).map(n=>(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{primary:`${t(jT[n.action]??n.action)} · ${AT(n.atUtc,x,e)}`,secondary:[n.actorName?`${t(`corrections.actor`)}: ${n.actorName}`:null,n.reason?`${t(`corrections.reason`)}: ${n.reason}`:null].filter(Boolean).join(` · `)})},n.id))})]}),(0,N.jsx)(dv,{children:(0,N.jsx)(J,{onClick:()=>m(null),children:t(`common.close`)})})]})]})}var NT=rp((0,N.jsx)(`path`,{d:`M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96M14 13v4h-4v-4H7l5-5 5 5z`}),`Backup`),PT=rp((0,N.jsx)(`path`,{d:`M5 20h14v-2H5zM19 9h-4V3H9v6H5l7 7z`}),`Download`),FT=rp((0,N.jsx)(`path`,{d:`M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9m-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8z`}),`Restore`),IT=rp((0,N.jsx)(`path`,{d:`M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8zm4 18H6V4h7v5h5zM8 15.01l1.41 1.41L11 14.84V19h2v-4.16l1.59 1.59L16 15.01 12.01 11z`}),`UploadFile`),LT=rp((0,N.jsx)(`path`,{d:`M21 10h-8.35C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H13l2 2 2-2 2 2 4-4.04zM7 15c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3`}),`Key`),RT=rp((0,N.jsx)(`path`,{d:`M15 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4m-9-2V7H4v3H1v2h3v3h2v-3h3v-2zm9 4c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4`}),`PersonAdd`),zT=rp((0,N.jsx)(`path`,{d:`M20 4H4c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2m0 14H4V8h16zm-2-1h-6v-2h6zM7.5 17l-1.41-1.41L8.67 13l-2.59-2.59L7.5 9l4 4z`}),`Terminal`),BT=s(((e,t)=>{t.exports=function(){return typeof Promise==`function`&&Promise.prototype&&Promise.prototype.then}})),VT=s((e=>{var t,n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(e){if(!e)throw Error(`"version" cannot be null or undefined`);if(e<1||e>40)throw Error(`"version" should be in range from 1 to 40`);return e*4+17},e.getSymbolTotalCodewords=function(e){return n[e]},e.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t},e.setToSJISFunction=function(e){if(typeof e!=`function`)throw Error(`"toSJISFunc" is not a valid function.`);t=e},e.isKanjiModeEnabled=function(){return t!==void 0},e.toSJIS=function(e){return t(e)}})),HT=s((e=>{e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`l`:case`low`:return e.L;case`m`:case`medium`:return e.M;case`q`:case`quartile`:return e.Q;case`h`:case`high`:return e.H;default:throw Error(`Unknown EC Level: `+t)}}e.isValid=function(e){return e&&e.bit!==void 0&&e.bit>=0&&e.bit<4},e.from=function(n,r){if(e.isValid(n))return n;try{return t(n)}catch{return r}}})),UT=s(((e,t)=>{function n(){this.buffer=[],this.length=0}n.prototype={get:function(e){let t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)==1},put:function(e,t){for(let n=0;n<t;n++)this.putBit((e>>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},t.exports=n})),WT=s(((e,t)=>{function n(e){if(!e||e<1)throw Error(`BitMatrix size must be defined and greater than 0`);this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}n.prototype.set=function(e,t,n,r){let i=e*this.size+t;this.data[i]=n,r&&(this.reservedBit[i]=!0)},n.prototype.get=function(e,t){return this.data[e*this.size+t]},n.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},n.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},t.exports=n})),GT=s((e=>{var t=VT().getSymbolSize;e.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=t(e),i=r===145?26:Math.ceil((r-13)/(2*n-2))*2,a=[r-7];for(let e=1;e<n-1;e++)a[e]=a[e-1]-i;return a.push(6),a.reverse()},e.getPositions=function(t){let n=[],r=e.getRowColCoords(t),i=r.length;for(let e=0;e<i;e++)for(let t=0;t<i;t++)e===0&&t===0||e===0&&t===i-1||e===i-1&&t===0||n.push([r[e],r[t]]);return n}})),KT=s((e=>{var t=VT().getSymbolSize,n=7;e.getPositions=function(e){let r=t(e);return[[0,0],[r-n,0],[0,r-n]]}})),qT=s((e=>{e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(e){return e!=null&&e!==``&&!isNaN(e)&&e>=0&&e<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(e){let n=e.size,r=0,i=0,a=0,o=null,s=null;for(let c=0;c<n;c++){i=a=0,o=s=null;for(let l=0;l<n;l++){let n=e.get(c,l);n===o?i++:(i>=5&&(r+=t.N1+(i-5)),o=n,i=1),n=e.get(l,c),n===s?a++:(a>=5&&(r+=t.N1+(a-5)),s=n,a=1)}i>=5&&(r+=t.N1+(i-5)),a>=5&&(r+=t.N1+(a-5))}return r},e.getPenaltyN2=function(e){let n=e.size,r=0;for(let t=0;t<n-1;t++)for(let i=0;i<n-1;i++){let n=e.get(t,i)+e.get(t,i+1)+e.get(t+1,i)+e.get(t+1,i+1);(n===4||n===0)&&r++}return r*t.N2},e.getPenaltyN3=function(e){let n=e.size,r=0,i=0,a=0;for(let t=0;t<n;t++){i=a=0;for(let o=0;o<n;o++)i=i<<1&2047|e.get(t,o),o>=10&&(i===1488||i===93)&&r++,a=a<<1&2047|e.get(o,t),o>=10&&(a===1488||a===93)&&r++}return r*t.N3},e.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let t=0;t<r;t++)n+=e.data[t];return Math.abs(Math.ceil(n*100/r/5)-10)*t.N4};function n(t,n,r){switch(t){case e.Patterns.PATTERN000:return(n+r)%2==0;case e.Patterns.PATTERN001:return n%2==0;case e.Patterns.PATTERN010:return r%3==0;case e.Patterns.PATTERN011:return(n+r)%3==0;case e.Patterns.PATTERN100:return(Math.floor(n/2)+Math.floor(r/3))%2==0;case e.Patterns.PATTERN101:return n*r%2+n*r%3==0;case e.Patterns.PATTERN110:return(n*r%2+n*r%3)%2==0;case e.Patterns.PATTERN111:return(n*r%3+(n+r)%2)%2==0;default:throw Error(`bad maskPattern:`+t)}}e.applyMask=function(e,t){let r=t.size;for(let i=0;i<r;i++)for(let a=0;a<r;a++)t.isReserved(a,i)||t.xor(a,i,n(e,a,i))},e.getBestMask=function(t,n){let r=Object.keys(e.Patterns).length,i=0,a=1/0;for(let o=0;o<r;o++){n(o),e.applyMask(o,t);let r=e.getPenaltyN1(t)+e.getPenaltyN2(t)+e.getPenaltyN3(t)+e.getPenaltyN4(t);e.applyMask(o,t),r<a&&(a=r,i=o)}return i}})),JT=s((e=>{var t=HT(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(e,r){switch(r){case t.L:return n[(e-1)*4+0];case t.M:return n[(e-1)*4+1];case t.Q:return n[(e-1)*4+2];case t.H:return n[(e-1)*4+3];default:return}},e.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return r[(e-1)*4+0];case t.M:return r[(e-1)*4+1];case t.Q:return r[(e-1)*4+2];case t.H:return r[(e-1)*4+3];default:return}}})),YT=s((e=>{var t=new Uint8Array(512),n=new Uint8Array(256);(function(){let e=1;for(let r=0;r<255;r++)t[r]=e,n[e]=r,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)t[e]=t[e-255]})(),e.log=function(e){if(e<1)throw Error(`log(`+e+`)`);return n[e]},e.exp=function(e){return t[e]},e.mul=function(e,r){return e===0||r===0?0:t[n[e]+n[r]]}})),XT=s((e=>{var t=YT();e.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let i=0;i<e.length;i++)for(let a=0;a<n.length;a++)r[i+a]^=t.mul(e[i],n[a]);return r},e.mod=function(e,n){let r=new Uint8Array(e);for(;r.length-n.length>=0;){let e=r[0];for(let i=0;i<n.length;i++)r[i]^=t.mul(n[i],e);let i=0;for(;i<r.length&&r[i]===0;)i++;r=r.slice(i)}return r},e.generateECPolynomial=function(n){let r=new Uint8Array([1]);for(let i=0;i<n;i++)r=e.mul(r,new Uint8Array([1,t.exp(i)]));return r}})),ZT=s(((e,t)=>{var n=XT();function r(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(e){this.degree=e,this.genPoly=n.generateECPolynomial(this.degree)},r.prototype.encode=function(e){if(!this.genPoly)throw Error(`Encoder not initialized`);let t=new Uint8Array(e.length+this.degree);t.set(e);let r=n.mod(t,this.genPoly),i=this.degree-r.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(r,i),e}return r},t.exports=r})),QT=s((e=>{e.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}})),$T=s((e=>{var t=`[0-9]+`,n=`[A-Z $%*+\\-./:]+`,r=`(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+`;r=r.replace(/u/g,`\\u`);var i=`(?:(?![A-Z0-9 $%*+\\-./:]|`+r+`)(?:.|[\r
|
|
112
112
|
]))+`;e.KANJI=new RegExp(r,`g`),e.BYTE_KANJI=RegExp(`[^A-Z0-9 $%*+\\-./:]+`,`g`),e.BYTE=new RegExp(i,`g`),e.NUMERIC=new RegExp(t,`g`),e.ALPHANUMERIC=new RegExp(n,`g`);var a=RegExp(`^`+r+`$`),o=RegExp(`^[0-9]+$`),s=RegExp(`^[A-Z0-9 $%*+\\-./:]+$`);e.testKanji=function(e){return a.test(e)},e.testNumeric=function(e){return o.test(e)},e.testAlphanumeric=function(e){return s.test(e)}})),eE=s((e=>{var t=QT(),n=$T();e.NUMERIC={id:`Numeric`,bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:`Alphanumeric`,bit:2,ccBits:[9,11,13]},e.BYTE={id:`Byte`,bit:4,ccBits:[8,16,16]},e.KANJI={id:`Kanji`,bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(e,n){if(!e.ccBits)throw Error(`Invalid mode: `+e);if(!t.isValid(n))throw Error(`Invalid version: `+n);return n>=1&&n<10?e.ccBits[0]:n<27?e.ccBits[1]:e.ccBits[2]},e.getBestModeForData=function(t){return n.testNumeric(t)?e.NUMERIC:n.testAlphanumeric(t)?e.ALPHANUMERIC:n.testKanji(t)?e.KANJI:e.BYTE},e.toString=function(e){if(e&&e.id)return e.id;throw Error(`Invalid mode`)},e.isValid=function(e){return e&&e.bit&&e.ccBits};function r(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`numeric`:return e.NUMERIC;case`alphanumeric`:return e.ALPHANUMERIC;case`kanji`:return e.KANJI;case`byte`:return e.BYTE;default:throw Error(`Unknown mode: `+t)}}e.from=function(t,n){if(e.isValid(t))return t;try{return r(t)}catch{return n}}})),tE=s((e=>{var t=VT(),n=JT(),r=HT(),i=eE(),a=QT(),o=7973,s=t.getBCHDigit(o);function c(t,n,r){for(let i=1;i<=40;i++)if(n<=e.getCapacity(i,r,t))return i}function l(e,t){return i.getCharCountIndicator(e,t)+4}function u(e,t){let n=0;return e.forEach(function(e){let r=l(e.mode,t);n+=r+e.getBitsLength()}),n}function d(t,n){for(let r=1;r<=40;r++)if(u(t,r)<=e.getCapacity(r,n,i.MIXED))return r}e.from=function(e,t){return a.isValid(e)?parseInt(e,10):t},e.getCapacity=function(e,r,o){if(!a.isValid(e))throw Error(`Invalid QR Code version`);o===void 0&&(o=i.BYTE);let s=(t.getSymbolTotalCodewords(e)-n.getTotalCodewordsCount(e,r))*8;if(o===i.MIXED)return s;let c=s-l(o,e);switch(o){case i.NUMERIC:return Math.floor(c/10*3);case i.ALPHANUMERIC:return Math.floor(c/11*2);case i.KANJI:return Math.floor(c/13);case i.BYTE:default:return Math.floor(c/8)}},e.getBestVersionForData=function(e,t){let n,i=r.from(t,r.M);if(Array.isArray(e)){if(e.length>1)return d(e,i);if(e.length===0)return 1;n=e[0]}else n=e;return c(n.mode,n.getLength(),i)},e.getEncodedBits=function(e){if(!a.isValid(e)||e<7)throw Error(`Invalid QR Code version`);let n=e<<12;for(;t.getBCHDigit(n)-s>=0;)n^=o<<t.getBCHDigit(n)-s;return e<<12|n}})),nE=s((e=>{var t=VT(),n=1335,r=21522,i=t.getBCHDigit(n);e.getEncodedBits=function(e,a){let o=e.bit<<3|a,s=o<<10;for(;t.getBCHDigit(s)-i>=0;)s^=n<<t.getBCHDigit(s)-i;return(o<<10|s)^r}})),rE=s(((e,t)=>{var n=eE();function r(e){this.mode=n.NUMERIC,this.data=e.toString()}r.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){let t,n,r;for(t=0;t+3<=this.data.length;t+=3)n=this.data.substr(t,3),r=parseInt(n,10),e.put(r,10);let i=this.data.length-t;i>0&&(n=this.data.substr(t),r=parseInt(n,10),e.put(r,i*3+1))},t.exports=r})),iE=s(((e,t)=>{var n=eE(),r=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`.split(``);function i(e){this.mode=n.ALPHANUMERIC,this.data=e}i.getBitsLength=function(e){return 11*Math.floor(e/2)+e%2*6},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t=0;for(;t+2<=this.data.length;t+=2){let n=r.indexOf(this.data[t])*45;n+=r.indexOf(this.data[t+1]),e.put(n,11)}this.data.length%2&&e.put(r.indexOf(this.data[t]),6)},t.exports=i})),aE=s(((e,t)=>{var n=eE();function r(e){this.mode=n.BYTE,this.data=typeof e==`string`?new TextEncoder().encode(e):new Uint8Array(e)}r.getBitsLength=function(e){return e*8},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){for(let t=0,n=this.data.length;t<n;t++)e.put(this.data[t],8)},t.exports=r})),oE=s(((e,t)=>{var n=eE(),r=VT();function i(e){this.mode=n.KANJI,this.data=e}i.getBitsLength=function(e){return e*13},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t=0;for(;t<this.data.length;t++){let n=r.toSJIS(this.data[t]);if(n>=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw Error(`Invalid SJIS character: `+this.data[t]+`
|
|
113
113
|
Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),e.put(n,13)}},t.exports=i})),sE=s(((e,t)=>{var n={single_source_shortest_paths:function(e,t,r){var i={},a={};a[t]=0;var o=n.PriorityQueue.make();o.push(t,0);for(var s,c,l,u,d,f,p,m,h;!o.empty();)for(l in s=o.pop(),c=s.value,u=s.cost,d=e[c]||{},d)d.hasOwnProperty(l)&&(f=d[l],p=u+f,m=a[l],h=a[l]===void 0,(h||m>p)&&(a[l]=p,o.push(l,p),i[l]=c));if(r!==void 0&&a[r]===void 0){var g=[`Could not find a path from `,t,` to `,r,`.`].join(``);throw Error(g)}return i},extract_shortest_path_from_predecessor_list:function(e,t){for(var n=[],r=t;r;)n.push(r),e[r],r=e[r];return n.reverse(),n},find_path:function(e,t,r){var i=n.single_source_shortest_paths(e,t,r);return n.extract_shortest_path_from_predecessor_list(i,r)},PriorityQueue:{make:function(e){var t=n.PriorityQueue,r={},i;for(i in e||={},t)t.hasOwnProperty(i)&&(r[i]=t[i]);return r.queue=[],r.sorter=e.sorter||t.default_sorter,r},default_sorter:function(e,t){return e.cost-t.cost},push:function(e,t){var n={value:e,cost:t};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};t!==void 0&&(t.exports=n)})),cE=s((e=>{var t=eE(),n=rE(),r=iE(),i=aE(),a=oE(),o=$T(),s=VT(),c=sE();function l(e){return unescape(encodeURIComponent(e)).length}function u(e,t,n){let r=[],i;for(;(i=e.exec(n))!==null;)r.push({data:i[0],index:i.index,mode:t,length:i[0].length});return r}function d(e){let n=u(o.NUMERIC,t.NUMERIC,e),r=u(o.ALPHANUMERIC,t.ALPHANUMERIC,e),i,a;return s.isKanjiModeEnabled()?(i=u(o.BYTE,t.BYTE,e),a=u(o.KANJI,t.KANJI,e)):(i=u(o.BYTE_KANJI,t.BYTE,e),a=[]),n.concat(r,i,a).sort(function(e,t){return e.index-t.index}).map(function(e){return{data:e.data,mode:e.mode,length:e.length}})}function f(e,o){switch(o){case t.NUMERIC:return n.getBitsLength(e);case t.ALPHANUMERIC:return r.getBitsLength(e);case t.KANJI:return a.getBitsLength(e);case t.BYTE:return i.getBitsLength(e)}}function p(e){return e.reduce(function(e,t){let n=e.length-1>=0?e[e.length-1]:null;return n&&n.mode===t.mode?(e[e.length-1].data+=t.data,e):(e.push(t),e)},[])}function m(e){let n=[];for(let r=0;r<e.length;r++){let i=e[r];switch(i.mode){case t.NUMERIC:n.push([i,{data:i.data,mode:t.ALPHANUMERIC,length:i.length},{data:i.data,mode:t.BYTE,length:i.length}]);break;case t.ALPHANUMERIC:n.push([i,{data:i.data,mode:t.BYTE,length:i.length}]);break;case t.KANJI:n.push([i,{data:i.data,mode:t.BYTE,length:l(i.data)}]);break;case t.BYTE:n.push([{data:i.data,mode:t.BYTE,length:l(i.data)}])}}return n}function h(e,n){let r={},i={start:{}},a=[`start`];for(let o=0;o<e.length;o++){let s=e[o],c=[];for(let e=0;e<s.length;e++){let l=s[e],u=``+o+e;c.push(u),r[u]={node:l,lastCount:0},i[u]={};for(let e=0;e<a.length;e++){let o=a[e];r[o]&&r[o].node.mode===l.mode?(i[o][u]=f(r[o].lastCount+l.length,l.mode)-f(r[o].lastCount,l.mode),r[o].lastCount+=l.length):(r[o]&&(r[o].lastCount=l.length),i[o][u]=f(l.length,l.mode)+4+t.getCharCountIndicator(l.mode,n))}}a=c}for(let e=0;e<a.length;e++)i[a[e]].end=0;return{map:i,table:r}}function g(e,o){let c,l=t.getBestModeForData(e);if(c=t.from(o,l),c!==t.BYTE&&c.bit<l.bit)throw Error(`"`+e+`" cannot be encoded with mode `+t.toString(c)+`.
|
|
114
114
|
Suggested mode is: `+t.toString(l));switch(c===t.KANJI&&!s.isKanjiModeEnabled()&&(c=t.BYTE),c){case t.NUMERIC:return new n(e);case t.ALPHANUMERIC:return new r(e);case t.KANJI:return new a(e);case t.BYTE:return new i(e)}}e.fromArray=function(e){return e.reduce(function(e,t){return typeof t==`string`?e.push(g(t,null)):t.data&&e.push(g(t.data,t.mode)),e},[])},e.fromString=function(t,n){let r=h(m(d(t,s.isKanjiModeEnabled())),n),i=c.find_path(r.map,`start`,`end`),a=[];for(let e=1;e<i.length-1;e++)a.push(r.table[i[e]].node);return e.fromArray(p(a))},e.rawSplit=function(t){return e.fromArray(d(t,s.isKanjiModeEnabled()))}})),lE=s((e=>{var t=VT(),n=HT(),r=UT(),i=WT(),a=GT(),o=KT(),s=qT(),c=JT(),l=ZT(),u=tE(),d=nE(),f=eE(),p=cE();function m(e,t){let n=e.size,r=o.getPositions(t);for(let t=0;t<r.length;t++){let i=r[t][0],a=r[t][1];for(let t=-1;t<=7;t++)if(!(i+t<=-1||n<=i+t))for(let r=-1;r<=7;r++)a+r<=-1||n<=a+r||(t>=0&&t<=6&&(r===0||r===6)||r>=0&&r<=6&&(t===0||t===6)||t>=2&&t<=4&&r>=2&&r<=4?e.set(i+t,a+r,!0,!0):e.set(i+t,a+r,!1,!0))}}function h(e){let t=e.size;for(let n=8;n<t-8;n++){let t=n%2==0;e.set(n,6,t,!0),e.set(6,n,t,!0)}}function g(e,t){let n=a.getPositions(t);for(let t=0;t<n.length;t++){let r=n[t][0],i=n[t][1];for(let t=-2;t<=2;t++)for(let n=-2;n<=2;n++)t===-2||t===2||n===-2||n===2||t===0&&n===0?e.set(r+t,i+n,!0,!0):e.set(r+t,i+n,!1,!0)}}function _(e,t){let n=e.size,r=u.getEncodedBits(t),i,a,o;for(let t=0;t<18;t++)i=Math.floor(t/3),a=t%3+n-8-3,o=(r>>t&1)==1,e.set(i,a,o,!0),e.set(a,i,o,!0)}function v(e,t,n){let r=e.size,i=d.getEncodedBits(t,n),a,o;for(a=0;a<15;a++)o=(i>>a&1)==1,a<6?e.set(a,8,o,!0):a<8?e.set(a+1,8,o,!0):e.set(r-15+a,8,o,!0),a<8?e.set(8,r-a-1,o,!0):a<9?e.set(8,15-a-1+1,o,!0):e.set(8,15-a-1,o,!0);e.set(r-8,8,1,!0)}function y(e,t){let n=e.size,r=-1,i=n-1,a=7,o=0;for(let s=n-1;s>0;s-=2)for(s===6&&s--;;){for(let n=0;n<2;n++)if(!e.isReserved(i,s-n)){let r=!1;o<t.length&&(r=(t[o]>>>a&1)==1),e.set(i,s-n,r),a--,a===-1&&(o++,a=7)}if(i+=r,i<0||n<=i){i-=r,r=-r;break}}}function b(e,n,i){let a=new r;i.forEach(function(t){a.put(t.mode.bit,4),a.put(t.getLength(),f.getCharCountIndicator(t.mode,e)),t.write(a)});let o=(t.getSymbolTotalCodewords(e)-c.getTotalCodewordsCount(e,n))*8;for(a.getLengthInBits()+4<=o&&a.put(0,4);a.getLengthInBits()%8!=0;)a.putBit(0);let s=(o-a.getLengthInBits())/8;for(let e=0;e<s;e++)a.put(e%2?17:236,8);return x(a,e,n)}function x(e,n,r){let i=t.getSymbolTotalCodewords(n),a=i-c.getTotalCodewordsCount(n,r),o=c.getBlocksCount(n,r),s=o-i%o,u=Math.floor(i/o),d=Math.floor(a/o),f=d+1,p=u-d,m=new l(p),h=0,g=Array(o),_=Array(o),v=0,y=new Uint8Array(e.buffer);for(let e=0;e<o;e++){let t=e<s?d:f;g[e]=y.slice(h,h+t),_[e]=m.encode(g[e]),h+=t,v=Math.max(v,t)}let b=new Uint8Array(i),x=0,S,C;for(S=0;S<v;S++)for(C=0;C<o;C++)S<g[C].length&&(b[x++]=g[C][S]);for(S=0;S<p;S++)for(C=0;C<o;C++)b[x++]=_[C][S];return b}function S(e,n,r,a){let o;if(Array.isArray(e))o=p.fromArray(e);else if(typeof e==`string`){let t=n;if(!t){let n=p.rawSplit(e);t=u.getBestVersionForData(n,r)}o=p.fromString(e,t||40)}else throw Error(`Invalid data`);let c=u.getBestVersionForData(o,r);if(!c)throw Error(`The amount of data is too big to be stored in a QR Code`);if(!n)n=c;else if(n<c)throw Error(`
|
|
115
115
|
The chosen QR Code version cannot contain this amount of data.
|
|
116
116
|
Minimum version required to store current data is: `+c+`.
|
|
117
117
|
`);let l=b(n,r,o),d=new i(t.getSymbolSize(n));return m(d,n),h(d),g(d,n),v(d,r,0),n>=7&&_(d,n),y(d,l),isNaN(a)&&(a=s.getBestMask(d,v.bind(null,d,r))),s.applyMask(a,d),v(d,r,a),{modules:d,version:n,errorCorrectionLevel:r,maskPattern:a,segments:o}}e.create=function(e,r){if(e===void 0||e===``)throw Error(`No input text`);let i=n.M,a,o;return r!==void 0&&(i=n.from(r.errorCorrectionLevel,n.M),a=u.from(r.version),o=s.from(r.maskPattern),r.toSJISFunc&&t.setToSJISFunction(r.toSJISFunc)),S(e,a,i,o)}})),uE=s((e=>{function t(e){if(typeof e==`number`&&(e=e.toString()),typeof e!=`string`)throw Error(`Color should be defined as hex string`);let t=e.slice().replace(`#`,``).split(``);if(t.length<3||t.length===5||t.length>8)throw Error(`Invalid hex color: `+e);(t.length===3||t.length===4)&&(t=Array.prototype.concat.apply([],t.map(function(e){return[e,e]}))),t.length===6&&t.push(`F`,`F`);let n=parseInt(t.join(``),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:n&255,hex:`#`+t.slice(0,6).join(``)}}e.getOptions=function(e){e||={},e.color||(e.color={});let n=e.margin===void 0||e.margin===null||e.margin<0?4:e.margin,r=e.width&&e.width>=21?e.width:void 0,i=e.scale||4;return{width:r,scale:r?4:i,margin:n,color:{dark:t(e.color.dark||`#000000ff`),light:t(e.color.light||`#ffffffff`)},type:e.type,rendererOpts:e.rendererOpts||{}}},e.getScale=function(e,t){return t.width&&t.width>=e+t.margin*2?t.width/(e+t.margin*2):t.scale},e.getImageWidth=function(t,n){let r=e.getScale(t,n);return Math.floor((t+n.margin*2)*r)},e.qrToImageData=function(t,n,r){let i=n.modules.size,a=n.modules.data,o=e.getScale(i,r),s=Math.floor((i+r.margin*2)*o),c=r.margin*o,l=[r.color.light,r.color.dark];for(let e=0;e<s;e++)for(let n=0;n<s;n++){let u=(e*s+n)*4,d=r.color.light;if(e>=c&&n>=c&&e<s-c&&n<s-c){let t=Math.floor((e-c)/o),r=Math.floor((n-c)/o);d=l[+!!a[t*i+r]]}t[u++]=d.r,t[u++]=d.g,t[u++]=d.b,t[u]=d.a}}})),dE=s((e=>{var t=uE();function n(e,t,n){e.clearRect(0,0,t.width,t.height),t.style||={},t.height=n,t.width=n,t.style.height=n+`px`,t.style.width=n+`px`}function r(){try{return document.createElement(`canvas`)}catch{throw Error(`You need to specify a canvas element`)}}e.render=function(e,i,a){let o=a,s=i;o===void 0&&(!i||!i.getContext)&&(o=i,i=void 0),i||(s=r()),o=t.getOptions(o);let c=t.getImageWidth(e.modules.size,o),l=s.getContext(`2d`),u=l.createImageData(c,c);return t.qrToImageData(u.data,e,o),n(l,s,c),l.putImageData(u,0,0),s},e.renderToDataURL=function(t,n,r){let i=r;i===void 0&&(!n||!n.getContext)&&(i=n,n=void 0),i||={};let a=e.render(t,n,i),o=i.type||`image/png`,s=i.rendererOpts||{};return a.toDataURL(o,s.quality)}})),fE=s((e=>{var t=uE();function n(e,t){let n=e.a/255,r=t+`="`+e.hex+`"`;return n<1?r+` `+t+`-opacity="`+n.toFixed(2).slice(1)+`"`:r}function r(e,t,n){let r=e+t;return n!==void 0&&(r+=` `+n),r}function i(e,t,n){let i=``,a=0,o=!1,s=0;for(let c=0;c<e.length;c++){let l=Math.floor(c%t),u=Math.floor(c/t);!l&&!o&&(o=!0),e[c]?(s++,c>0&&l>0&&e[c-1]||(i+=o?r(`M`,l+n,.5+u+n):r(`m`,a,0),a=0,o=!1),l+1<t&&e[c+1]||(i+=r(`h`,s),s=0)):a++}return i}e.render=function(e,r,a){let o=t.getOptions(r),s=e.modules.size,c=e.modules.data,l=s+o.margin*2,u=o.color.light.a?`<path `+n(o.color.light,`fill`)+` d="M0 0h`+l+`v`+l+`H0z"/>`:``,d=`<path `+n(o.color.dark,`stroke`)+` d="`+i(c,s,o.margin)+`"/>`,f=`viewBox="0 0 `+l+` `+l+`"`,p=`<svg xmlns="http://www.w3.org/2000/svg" `+(o.width?`width="`+o.width+`" height="`+o.width+`" `:``)+f+` shape-rendering="crispEdges">`+u+d+`</svg>
|
|
118
|
-
`;return typeof a==`function`&&a(null,p),p}})),pE=u(s((e=>{var t=BT(),n=lE(),r=dE(),i=fE();function a(e,r,i,a,o){let s=[].slice.call(arguments,1),c=s.length,l=typeof s[c-1]==`function`;if(!l&&!t())throw Error(`Callback required as last argument`);if(l){if(c<2)throw Error(`Too few arguments provided`);c===2?(o=i,i=r,r=a=void 0):c===3&&(r.getContext&&o===void 0?(o=a,a=void 0):(o=a,a=i,i=r,r=void 0))}else{if(c<1)throw Error(`Too few arguments provided`);return c===1?(i=r,r=a=void 0):c===2&&!r.getContext&&(a=i,i=r,r=void 0),new Promise(function(t,o){try{t(e(n.create(i,a),r,a))}catch(e){o(e)}})}try{let t=n.create(i,a);o(null,e(t,r,a))}catch(e){o(e)}}e.create=n.create,e.toCanvas=a.bind(null,r.render),e.toDataURL=a.bind(null,r.renderToDataURL),e.toString=a.bind(null,function(e,t,n){return i.render(e,n)})}))(),1);function mE(e){let t=new Intl.DateTimeFormat(e,{weekday:`short`});return[1,2,3,4,5,6,7].map(e=>({value:e,label:t.format(new Date(Date.UTC(2024,0,e)))}))}function hE(e,t,n){let r=n?[...e,t]:e.filter(e=>e!==t);return[...new Set(r)].sort((e,t)=>e-t)}function gE(e,t){return new Intl.NumberFormat(t,{style:`unit`,unit:`kilobyte`,maximumFractionDigits:0}).format(Math.max(1,Math.round(e/1024)))}function _E({onClose:e,onCreated:t}){let{t:n}=tw(),r=Yl({queryKey:[`admin`,`roles`],queryFn:()=>$.roles()}),[i,a]=(0,y.useState)({login:``,displayName:``,password:``,roleKeys:[`employee`]}),o=Xl({mutationFn:e=>$.createUser(e),onSuccess:t}),s=e=>({value:String(i[e]),onChange:t=>a(n=>({...n,[e]:t.target.value}))});return(0,N.jsxs)(ov,{open:!0,onClose:e,fullWidth:!0,children:[(0,N.jsx)(Dv,{children:n(`admin.user.create`)}),(0,N.jsxs)(vv,{children:[(0,N.jsx)(aT,{error:o.error??r.error}),(0,N.jsxs)(X,{sx:{mt:1},children:[(0,N.jsx)(Z,{autoFocus:!0,fullWidth:!0,label:n(`admin.user.login`),...s(`login`)}),(0,N.jsx)(Z,{fullWidth:!0,label:n(`admin.user.name`),sx:{mt:2},...s(`displayName`)}),(0,N.jsx)(Z,{fullWidth:!0,type:`password`,label:n(`admin.user.password`),helperText:n(`admin.user.passwordHint`),sx:{mt:2},...s(`password`)}),(0,N.jsx)(Z,{select:!0,fullWidth:!0,label:n(`admin.user.roles`),sx:{mt:2},value:i.roleKeys[0]??`employee`,onChange:e=>a(t=>({...t,roleKeys:[e.target.value]})),children:(r.data??[]).map(e=>(0,N.jsx)(Yb,{value:e.key,children:e.name},e.key))})]})]}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:e,children:n(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:o.isPending||i.login.trim()===``||i.displayName.trim()===``||i.password.length<8,onClick:()=>o.mutate(i),children:n(`common.save`)})]})]})}function vE(e,t){return new Intl.DateTimeFormat(t,{dateStyle:`short`,timeStyle:`short`}).format(new Date(e*1e3))}function yE({rules:e,disabled:t,saving:n,onChange:r,onSave:i}){let{t:a}=tw(),o=(t,n)=>r(e.map((e,r)=>r===t?{...e,...n}:e));return(0,N.jsxs)(X,{spacing:1,children:[e.map((n,i)=>(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsx)(Z,{size:`small`,type:`number`,label:a(`admin.settings.pauseFrom`),value:String(n.fromMin),onChange:e=>o(i,{fromMin:Number(e.target.value)}),disabled:t}),(0,N.jsx)(Z,{size:`small`,type:`number`,label:a(`admin.settings.pauseTo`),value:n.toMin===null?``:String(n.toMin),onChange:e=>o(i,{toMin:e.target.value===``?null:Number(e.target.value)}),disabled:t}),(0,N.jsx)(Z,{size:`small`,type:`number`,label:a(`admin.settings.pauseMinutes`),value:String(n.pauseMin),onChange:e=>o(i,{pauseMin:Number(e.target.value)}),disabled:t}),(0,N.jsx)(Ux,{checked:n.isActive!==!1,title:a(`admin.settings.pauseActive`),onChange:()=>o(i,{isActive:n.isActive===!1}),disabled:t}),(0,N.jsx)(bm,{size:`small`,title:a(`admin.backup.delete`),disabled:t,onClick:()=>r(e.filter((e,t)=>t!==i)),children:(0,N.jsx)(gT,{fontSize:`small`})})]},n.id??`new-${i}`)),(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsx)(J,{size:`small`,startIcon:(0,N.jsx)(yT,{}),disabled:t,onClick:()=>r([...e,{fromMin:360,toMin:null,pauseMin:30,isActive:!0}]),children:a(`admin.settings.pauseAdd`)}),(0,N.jsx)(J,{size:`small`,variant:`contained`,disabled:t||n,onClick:i,children:a(`admin.settings.pauseSave`)})]})]})}function bE({user:e,onClose:t}){let{t:n,i18n:r}=tw(),i=Oc(),a=e?.id??0,o=Yl({queryKey:[`admin`,`profile`,a],queryFn:()=>$.workProfile(a),enabled:e!==null}),[s,c]=(0,y.useState)({}),l=Xl({mutationFn:e=>$.saveWorkProfile(a,e),onSuccess:async()=>{c({}),await i.invalidateQueries({queryKey:[`admin`,`profile`,a]}),t()}}),u=Yl({queryKey:[`admin`,`pauseRules`,a],queryFn:()=>$.userPauseRules(a),enabled:e!==null}),[d,f]=(0,y.useState)(null),p=d??u.data??[],m=Xl({mutationFn:e=>$.saveUserPauseRules(a,e),onSuccess:async()=>{f(null),await i.invalidateQueries({queryKey:[`admin`,`pauseRules`,a]}),t()}}),h=e=>c(t=>({...t,...e})),g=o.data?{...o.data,...s}:null,_=e=>Math.round(e/60*100)/100,v=Array.from({length:7},(e,t)=>new Intl.DateTimeFormat(r.language,{weekday:`narrow`}).format(new Date(Date.UTC(2026,0,4+t)))),b=(g?.workdays??`0;1;1;1;1;1;0`).split(`;`),x=(e,t,n)=>(0,N.jsx)(Z,{fullWidth:!0,size:`small`,type:`number`,label:t,value:String(g?.[e]??0),onChange:t=>h({[e]:Number(t.target.value)}),inputProps:n?{step:n}:void 0});return(0,N.jsxs)(ov,{open:e!==null,onClose:t,fullWidth:!0,maxWidth:`sm`,children:[(0,N.jsx)(Dv,{children:n(`admin.user.profileTitle`,{name:e?.displayName??``})}),(0,N.jsxs)(vv,{children:[(0,N.jsx)(aT,{error:o.error??l.error??u.error??m.error}),o.isLoading?(0,N.jsx)(oT,{}):(0,N.jsxs)(X,{spacing:2,sx:{mt:1},children:[(0,N.jsxs)(X,{direction:`row`,spacing:2,children:[x(`percent`,n(`admin.profile.percent`)),x(`weeklyHours`,n(`admin.profile.weeklyHours`),`0.5`)]}),(0,N.jsxs)(q,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:n(`admin.profile.workdays`)}),(0,N.jsx)(X,{direction:`row`,spacing:1,sx:{alignItems:`center`,flexWrap:`wrap`},children:v.map((e,t)=>(0,N.jsxs)(X,{direction:`row`,sx:{alignItems:`center`},children:[(0,N.jsx)(c_,{size:`small`,checked:b[t]===`1`,onChange:()=>{let e=b.slice();e[t]=e[t]===`1`?`0`:`1`,h({workdays:e.join(`;`)})}}),(0,N.jsx)(K,{variant:`body2`,children:e})]},`${e}-${t}`))})]}),(0,N.jsx)(Z,{select:!0,fullWidth:!0,size:`small`,label:n(`admin.profile.overtimeModel`),value:g?.overtimeModel??`monthly`,onChange:e=>h({overtimeModel:e.target.value}),children:[`monthly`,`yearly`,`cumulative`].map(e=>(0,N.jsx)(Yb,{value:e,children:n(`admin.profile.model.${e}`)},e))}),(0,N.jsxs)(q,{children:[(0,N.jsx)(Gv,{control:(0,N.jsx)(Ux,{checked:g?.showWorkedTime===!0,onChange:e=>h({showWorkedTime:e.target.checked})}),label:n(`admin.user.workedTime`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:n(`admin.user.workedTimeHint`)})]}),(0,N.jsxs)(X,{direction:`row`,spacing:2,children:[x(`vacationPerYear`,n(`admin.profile.vacationPerYear`),`0.5`),x(`vacationCarryover`,n(`admin.profile.vacationCarryover`),`0.5`)]}),(0,N.jsxs)(X,{direction:`row`,spacing:2,children:[(0,N.jsx)(Z,{fullWidth:!0,size:`small`,type:`number`,label:n(`admin.profile.overtimeCarryover`),value:String(_(g?.overtimeCarryover??0)),onChange:e=>h({overtimeCarryover:Math.round(Number(e.target.value)*60)})}),(0,N.jsx)(Z,{fullWidth:!0,size:`small`,type:`number`,label:n(`admin.profile.vorholzeitPerYear`),value:String(_(g?.vorholzeitPerYear??0)),onChange:e=>h({vorholzeitPerYear:Math.round(Number(e.target.value)*60)})})]}),(0,N.jsx)(Z,{fullWidth:!0,size:`small`,type:`number`,label:n(`admin.profile.pausePaid`),helperText:n(`admin.profile.pausePaidHint`),value:String(g?.pausePaidMinutes??0),onChange:e=>h({pausePaidMinutes:Math.max(0,Math.round(Number(e.target.value)))})}),(0,N.jsxs)(q,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:n(`admin.profile.pauseRules`)}),(0,N.jsx)(K,{variant:`caption`,color:`text.secondary`,display:`block`,sx:{mb:1},children:n(`admin.profile.pauseRulesHint`)}),(0,N.jsx)(yE,{rules:p,disabled:!1,saving:m.isPending,onChange:f,onSave:()=>m.mutate(p)})]})]})]}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:t,children:n(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:l.isPending||Object.keys(s).length===0,onClick:()=>l.mutate(s),children:n(`common.save`)})]})]})}function xE({language:e}){let{t}=tw(),{permissions:n}=Ww(),r=Oc(),i=Gw(n,`user.edit`),a=Gw(n,`user.create`),[o,s]=(0,y.useState)(!1),[c,l]=(0,y.useState)(null),[u,d]=(0,y.useState)(``),[f,p]=(0,y.useState)(null),[m,h]=(0,y.useState)(null),[g,_]=(0,y.useState)(null),[v,b]=(0,y.useState)(null),x=Gw(n,`user.manage_roles`),S=Yl({queryKey:[`admin`,`users`],queryFn:()=>$.users(!0)}),C=async()=>{await r.invalidateQueries({queryKey:[`admin`,`users`]})},w=Xl({mutationFn:({id:e,patch:t})=>$.updateUser(e,t),onSuccess:C}),T=Xl({mutationFn:({id:e,value:t})=>$.setPin(e,t),onSuccess:async()=>{l(null),d(``),await C()}}),E=Xl({mutationFn:({id:e,value:t})=>$.updateUser(e,{avatar:t}),onSuccess:async()=>{p(null),h(null),await C()}});return S.isLoading?(0,N.jsx)(oT,{}):(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:S.error??w.error??T.error??E.error}),a&&(0,N.jsx)(q,{sx:{mb:2},children:(0,N.jsx)(J,{variant:`contained`,startIcon:(0,N.jsx)(RT,{}),onClick:()=>s(!0),children:t(`admin.user.create`)})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Gy,{dense:!0,children:[(S.data??[]).map(e=>(0,N.jsx)(rT,{primary:`${e.displayName} (${e.login})`,secondary:(0,N.jsxs)(X,{direction:`row`,spacing:.5,sx:{mt:.5},children:[e.roles.map(e=>(0,N.jsx)(rh,{size:`small`,label:e},e)),!e.isActive&&(0,N.jsx)(rh,{size:`small`,color:`default`,label:t(`admin.user.inactive`)})]}),children:i&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(J,{size:`small`,startIcon:(0,N.jsx)(LT,{}),onClick:()=>{l(e),d(``)},children:t(`admin.user.pin`)}),(0,N.jsx)(J,{size:`small`,onClick:()=>{p(e),h(null)},children:t(`admin.user.photo`)}),(0,N.jsx)(J,{size:`small`,onClick:()=>b(e),children:t(`admin.user.profile`)}),x&&(0,N.jsx)(J,{size:`small`,onClick:()=>_(e),children:t(`admin.user.roles`)}),(0,N.jsx)(Ux,{checked:e.isActive,title:t(e.isActive?`admin.user.active`:`admin.user.inactive`),onChange:()=>w.mutate({id:e.id,patch:{isActive:!e.isActive}})})]})},e.id)),(S.data??[]).length===0&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{secondary:t(`admin.user.empty`)})})]})}),(0,N.jsx)(bE,{user:v,onClose:()=>b(null)}),(0,N.jsxs)(ov,{open:c!==null,onClose:()=>l(null),children:[(0,N.jsx)(Dv,{children:t(`admin.user.pinTitle`,{name:c?.displayName??``})}),(0,N.jsx)(vv,{children:(0,N.jsx)(Z,{autoFocus:!0,fullWidth:!0,inputMode:`numeric`,label:t(`admin.user.newPin`),helperText:t(`admin.user.pinHint`),value:u,onChange:e=>d(e.target.value.replace(/\D/g,``).slice(0,8)),sx:{mt:1}})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>l(null),children:t(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:u.length<4||T.isPending,onClick:()=>c&&T.mutate({id:c.id,value:u}),children:t(`common.save`)})]})]}),(0,N.jsxs)(ov,{open:f!==null,onClose:()=>p(null),children:[(0,N.jsx)(Dv,{children:t(`admin.user.photoTitle`,{name:f?.displayName??``})}),(0,N.jsx)(vv,{children:(0,N.jsxs)(X,{spacing:2,sx:{mt:1},children:[(0,N.jsx)(`img`,{src:m??f?.avatarUrl??`/person.png`,alt:``,width:96,height:96,style:{objectFit:`cover`,borderRadius:8}}),(0,N.jsx)(NE,{label:t(`admin.user.photoChoose`),maxBytes:lT,hint:t(`admin.user.photoHint`),onChange:e=>h(e)})]})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>p(null),children:t(`common.cancel`)}),(0,N.jsx)(J,{disabled:f?.avatarUrl===null||f?.avatarUrl===void 0,onClick:()=>f&&E.mutate({id:f.id,value:null}),children:t(`admin.user.photoRemove`)}),(0,N.jsx)(J,{variant:`contained`,disabled:m===null||E.isPending,onClick:()=>f&&E.mutate({id:f.id,value:m}),children:t(`common.save`)})]})]}),g&&(0,N.jsx)(EE,{user:g,onClose:()=>_(null),onSaved:e=>{w.mutate({id:g.id,patch:{roleKeys:e}}),_(null)}}),o&&(0,N.jsx)(_E,{language:e,onClose:()=>s(!1),onCreated:async()=>{s(!1),await C()}})]})}function SE({onClose:e,onCreated:t}){let{t:n}=tw(),r=Yl({queryKey:[`admin`,`users`,`active`],queryFn:()=>$.users(!1)}),[i,a]=(0,y.useState)(``),[o,s]=(0,y.useState)(``),[c,l]=(0,y.useState)(!0),[u,d]=(0,y.useState)([]),f=Xl({mutationFn:()=>$.createTerminal({name:i.trim(),...o.trim()?{location:o.trim()}:{},pinRequired:c,userIds:u}),onSuccess:t});return(0,N.jsxs)(ov,{open:!0,onClose:e,fullWidth:!0,children:[(0,N.jsx)(Dv,{children:n(`admin.terminal.create`)}),(0,N.jsx)(vv,{children:(0,N.jsxs)(X,{spacing:2,sx:{mt:1},children:[(0,N.jsx)(Z,{label:n(`admin.terminal.name`),value:i,onChange:e=>a(e.target.value),fullWidth:!0,autoFocus:!0}),(0,N.jsx)(Z,{label:n(`admin.terminal.location`),value:o,onChange:e=>s(e.target.value),fullWidth:!0}),(0,N.jsxs)(X,{direction:`row`,spacing:1,alignItems:`center`,children:[(0,N.jsx)(Ux,{checked:c,onChange:(e,t)=>l(t)}),(0,N.jsx)(K,{children:n(`admin.terminal.pinRequired`)})]}),(0,N.jsx)(K,{variant:`subtitle2`,children:n(`admin.terminal.users`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:n(`admin.terminal.usersHint`)}),(0,N.jsx)(CE,{users:r.data??[],chosen:u,onChange:d}),(0,N.jsx)(aT,{error:f.error})]})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:e,children:n(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:i.trim().length===0||f.isPending,onClick:()=>f.mutate(),children:n(`admin.terminal.create`)})]})]})}function CE({users:e,chosen:t,onChange:n}){return(0,N.jsx)(q,{sx:{maxHeight:240,overflowY:`auto`},children:(0,N.jsx)(X,{spacing:.5,children:e.map(e=>(0,N.jsxs)(X,{direction:`row`,spacing:1,sx:{alignItems:`center`},children:[(0,N.jsx)(Ux,{checked:t.includes(e.id),inputProps:{"aria-label":e.displayName},onChange:(r,i)=>n(i?[...new Set([...t,e.id])]:t.filter(t=>t!==e.id))}),(0,N.jsx)(K,{children:e.displayName})]},e.id))})})}function wE({terminal:e,onClose:t,onSaved:n}){let{t:r}=tw(),i=Yl({queryKey:[`admin`,`users`,`active`],queryFn:()=>$.users(!1)}),[a,o]=(0,y.useState)(e.userIds),s=Xl({mutationFn:()=>$.setTerminalUsers(e.id,a),onSuccess:n});return(0,N.jsxs)(ov,{open:!0,onClose:t,fullWidth:!0,children:[(0,N.jsx)(Dv,{children:`${r(`admin.terminal.users`)} · ${e.name}`}),(0,N.jsx)(vv,{children:(0,N.jsxs)(X,{spacing:1,sx:{mt:1},children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:r(`admin.terminal.usersHint`)}),(0,N.jsx)(CE,{users:i.data??[],chosen:a,onChange:o}),(0,N.jsx)(aT,{error:i.error??s.error})]})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:t,children:r(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:s.isPending,onClick:()=>s.mutate(),children:r(`common.save`)})]})]})}function TE({language:e}){let{t}=tw(),n=Oc(),r=Yl({queryKey:[`admin`,`terminals`],queryFn:()=>$.terminals()}),i=Yl({queryKey:[`admin`,`users`,`active`],queryFn:()=>$.users(!1)}),[a,o]=(0,y.useState)(!1),[s,c]=(0,y.useState)(null),[l,u]=(0,y.useState)(null),[d,f]=(0,y.useState)(null),p=Xl({mutationFn:e=>$.revokeTerminal(e),onSuccess:async()=>{c(null),await n.invalidateQueries({queryKey:[`admin`,`terminals`]})}}),m=d?`${window.location.origin}/terminal?token=${encodeURIComponent(d.deviceToken)}`:``,h=d?`${window.location.origin}/presence?token=${encodeURIComponent(d.deviceToken)}`:``,g=`${t(`common.none`)}`,_=n=>{let r=n.userIds.length===0?t(`admin.terminal.usersAll`):(i.data??[]).filter(e=>n.userIds.includes(e.id)).map(e=>e.displayName).join(`, `)||t(`admin.terminal.usersAll`);return[n.location||g,vE(n.createdAt,e),r].join(` · `)};return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:r.error??p.error}),d&&(0,N.jsxs)(Nm,{severity:`success`,sx:{mb:2},children:[(0,N.jsx)(K,{variant:`body2`,gutterBottom:!0,children:t(`admin.terminal.tokenOnce`)}),(0,N.jsx)(K,{variant:`body2`,sx:{fontFamily:`monospace`,wordBreak:`break-all`},gutterBottom:!0,children:d.deviceToken}),(0,N.jsx)(K,{variant:`body2`,gutterBottom:!0,children:t(`admin.terminal.url`)}),(0,N.jsx)(K,{variant:`body2`,sx:{fontFamily:`monospace`,wordBreak:`break-all`},children:m}),(0,N.jsxs)(K,{variant:`body2`,sx:{mt:1},children:[t(`presence.title`),`:`]}),(0,N.jsx)(K,{variant:`body2`,sx:{fontFamily:`monospace`,wordBreak:`break-all`},children:h})]}),(0,N.jsx)(q,{sx:{mb:2},children:(0,N.jsx)(J,{variant:`contained`,startIcon:(0,N.jsx)(zT,{}),disabled:a,onClick:()=>o(!0),children:t(`admin.terminal.create`)})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Gy,{dense:!0,children:[(r.data??[]).map(e=>(0,N.jsx)(rT,{primary:(0,N.jsxs)(X,{direction:`row`,spacing:1,alignItems:`center`,sx:{flexWrap:`wrap`,gap:1},children:[(0,N.jsx)(K,{children:e.name}),e.pinRequired&&(0,N.jsx)(rh,{size:`small`,label:t(`admin.terminal.pinRequired`)}),!e.isActive&&(0,N.jsx)(rh,{size:`small`,variant:`outlined`,label:t(`admin.terminal.revoked`)})]}),secondary:_(e),children:e.isActive&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(J,{size:`small`,onClick:()=>u(e),children:t(`admin.terminal.users`)}),(0,N.jsx)(J,{size:`small`,color:`error`,onClick:()=>c(e),children:t(`admin.terminal.revoke`)})]})},e.id)),r.isLoading&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{secondary:t(`common.loading`)})}),!r.isLoading&&(r.data??[]).length===0&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{secondary:t(`admin.terminal.empty`)})})]})}),l&&(0,N.jsx)(wE,{terminal:l,onClose:()=>u(null),onSaved:async()=>{u(null),await n.invalidateQueries({queryKey:[`admin`,`terminals`]})}}),a&&(0,N.jsx)(SE,{onClose:()=>o(!1),onCreated:async e=>{o(!1),f(e),await n.invalidateQueries({queryKey:[`admin`,`terminals`]})}}),s&&(0,N.jsxs)(ov,{open:!0,onClose:()=>c(null),children:[(0,N.jsx)(Dv,{children:t(`admin.terminal.revoke`)}),(0,N.jsx)(vv,{children:t(`admin.terminal.confirmRevoke`,{name:s.name})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>c(null),children:t(`common.cancel`)}),(0,N.jsx)(J,{color:`error`,variant:`contained`,disabled:p.isPending,onClick:()=>p.mutate(s.id),children:t(`admin.terminal.revoke`)})]})]})]})}function EE({user:e,onClose:t,onSaved:n}){let{t:r}=tw(),i=Yl({queryKey:[`admin`,`roles`],queryFn:()=>$.roles()}),[a,o]=(0,y.useState)(e.roles),s=(e,t)=>o(n=>t?[...new Set([...n,e])]:n.filter(t=>t!==e));return(0,N.jsxs)(ov,{open:!0,onClose:t,fullWidth:!0,children:[(0,N.jsx)(Dv,{children:r(`admin.user.roles`)}),(0,N.jsx)(vv,{children:(0,N.jsx)(X,{spacing:1,sx:{mt:1},children:(i.data??[]).map(e=>(0,N.jsxs)(X,{direction:`row`,spacing:1,alignItems:`center`,children:[(0,N.jsx)(Ux,{checked:a.includes(e.key),onChange:(t,n)=>s(e.key,n)}),(0,N.jsx)(K,{children:e.name})]},e.key))})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:t,children:r(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:a.length===0,onClick:()=>n(a),children:r(`common.save`)})]})]})}function DE({language:e}){let{t}=tw(),n=Oc(),[r,i]=(0,y.useState)(String(new Date().getFullYear())),[a,o]=(0,y.useState)(``),[s,c]=(0,y.useState)(``),[l,u]=(0,y.useState)(``),d=Yl({queryKey:[`admin`,`holidays`,r],queryFn:()=>$.holidays(Number(r))}),f=async()=>{await n.invalidateQueries({queryKey:[`admin`,`holidays`,r]})},p=Xl({mutationFn:()=>$.createHoliday({date:a.trim(),name:s.trim(),...l.trim()?{region:l.trim()}:{}}),onSuccess:async()=>{o(``),c(``),u(``),await f()}}),m=Xl({mutationFn:e=>$.deleteHoliday(e),onSuccess:f}),h=/^\d{4}-\d{2}-\d{2}$/.test(a.trim())&&s.trim().length>0;return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:d.error??p.error??m.error}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,sx:{mt:1},children:[(0,N.jsx)(Z,{label:t(`admin.holiday.year`),value:r,onChange:e=>i(e.target.value.replace(/\D/g,``).slice(0,4)),sx:{width:140}}),(0,N.jsx)(Z,{label:t(`admin.holiday.date`),value:a,onChange:e=>o(e.target.value)}),(0,N.jsx)(Z,{label:t(`admin.holiday.name`),value:s,onChange:e=>c(e.target.value),fullWidth:!0}),(0,N.jsx)(Z,{label:t(`admin.holiday.region`),value:l,onChange:e=>u(e.target.value),sx:{width:200}})]}),(0,N.jsx)(q,{sx:{mt:2},children:(0,N.jsx)(J,{variant:`contained`,disabled:!h||p.isPending,onClick:()=>p.mutate(),children:t(`admin.holiday.add`)})})]})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Gy,{dense:!0,children:[(d.data??[]).map(n=>(0,N.jsx)(rT,{primary:`${lw(n.date,e)} · ${n.key?t(`holiday.${n.key}`,{defaultValue:n.name}):n.name}`,secondary:n.region??t(`common.none`),children:(0,N.jsx)(J,{size:`small`,color:`error`,onClick:()=>m.mutate(n.id),children:t(`admin.tag.delete`)})},n.id)),!d.isLoading&&(d.data??[]).length===0&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{secondary:t(`admin.holiday.empty`)})})]})})]})}function OE({tag:e,onClose:t,onSaved:n}){let{t:r}=tw(),i=Yl({queryKey:[`admin`,`users`],queryFn:()=>$.users()}),[a,o]=(0,y.useState)(e.userId===null?``:String(e.userId)),[s,c]=(0,y.useState)(e.label??``),[l,u]=(0,y.useState)(``),d=l.trim()===``?void 0:Number(l),f=!a||d!==void 0&&(!Number.isInteger(d)||d<=0),p=Xl({mutationFn:()=>$.updateTag(e.id,{userId:Number(a),label:s.trim()?s.trim():null,...d===void 0?{}:{ttlDays:d}}),onSuccess:n}),m=Xl({mutationFn:()=>$.reissueTagLink(e.id),onSuccess:n});return(0,N.jsxs)(ov,{open:!0,onClose:t,fullWidth:!0,children:[(0,N.jsx)(Dv,{children:`${r(`admin.tag.editTitle`)} · ${e.label??e.uid}`}),(0,N.jsx)(vv,{children:(0,N.jsxs)(X,{spacing:2,sx:{mt:1},children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:r(`admin.tag.editHint`)}),(0,N.jsx)(Z,{select:!0,label:r(`admin.tag.user`),value:a,onChange:e=>o(e.target.value),children:(i.data??[]).map(e=>(0,N.jsx)(Yb,{value:String(e.id),children:`${e.displayName} (${e.login})`},e.id))}),(0,N.jsx)(Z,{label:r(`admin.tag.label`),value:s,onChange:e=>c(e.target.value)}),(0,N.jsx)(Z,{label:r(`admin.tag.validityDays`),type:`number`,value:l,onChange:e=>u(e.target.value)}),(0,N.jsx)(aT,{error:i.error??p.error??m.error})]})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>m.mutate(),disabled:m.isPending,sx:{mr:`auto`},children:r(`admin.tag.reissue`)}),(0,N.jsx)(J,{onClick:t,children:r(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:f||p.isPending,onClick:()=>p.mutate(),children:r(`common.save`)})]})]})}function kE({language:e}){let{t}=tw(),n=Oc(),r=Yl({queryKey:[`admin`,`tags`],queryFn:()=>$.rfidTags()}),i=Yl({queryKey:[`admin`,`users`],queryFn:()=>$.users()}),[a,o]=(0,y.useState)(``),[s,c]=(0,y.useState)(``),[l,u]=(0,y.useState)(null),[d,f]=(0,y.useState)(null),[p,m]=(0,y.useState)(null),h=async()=>{await n.invalidateQueries({queryKey:[`admin`,`tags`]})},g=e=>`${window.location.origin}/?tag=${e}`,_=(e,t)=>{u({token:e,url:g(e),reissued:t})};(0,y.useEffect)(()=>{if(!l){f(null);return}let e=!1;return pE.toDataURL(l.url,{margin:1,width:240}).then(t=>{e||f(t)}).catch(()=>{e||f(null)}),()=>{e=!0}},[l]);let v=Xl({mutationFn:()=>$.createTag({userId:Number(a),...s.trim()?{label:s.trim()}:{}}),onSuccess:async e=>{_(e.token,!1),c(``),await h()}}),b=Xl({mutationFn:e=>$.deleteTag(e),onSuccess:h}),x=Xl({mutationFn:e=>$.deleteTagPermanently(e),onSuccess:h}),S=e=>(i.data??[]).find(t=>t.id===e)?.displayName??`#${e}`;return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:r.error??v.error??b.error??x.error}),l&&(0,N.jsxs)(Nm,{severity:`success`,sx:{mb:2},children:[(0,N.jsx)(K,{variant:`body2`,gutterBottom:!0,children:t(`admin.tag.linkOnce`)}),(0,N.jsx)(K,{variant:`body2`,sx:{fontFamily:`monospace`,wordBreak:`break-all`},children:l.url}),d&&(0,N.jsx)(q,{sx:{mt:1.5},children:(0,N.jsx)(`img`,{src:d,alt:t(`admin.tag.qrAlt`),width:200,height:200,style:{display:`block`,borderRadius:4}})}),l.reissued&&(0,N.jsx)(K,{variant:`body2`,sx:{mt:1},children:t(`admin.tag.oldLinkDead`)})]}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsx)(Wg,{children:(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,sx:{mt:1},children:[(0,N.jsx)(Z,{select:!0,label:t(`admin.tag.user`),value:a,onChange:e=>o(e.target.value),sx:{minWidth:220},children:(i.data??[]).map(e=>(0,N.jsx)(Yb,{value:String(e.id),children:`${e.displayName} (${e.login})`},e.id))}),(0,N.jsx)(Z,{label:t(`admin.tag.label`),value:s,onChange:e=>c(e.target.value),fullWidth:!0}),(0,N.jsx)(J,{variant:`contained`,disabled:!a||v.isPending,onClick:()=>v.mutate(),children:t(`admin.tag.create`)})]})})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Gy,{dense:!0,children:[(r.data??[]).map(n=>{let r=n.expiresAt!==null&&n.expiresAt*1e3<Date.now(),i=n.isActive===!1?t(`admin.tag.revoked`):t(r?`admin.tag.expired`:`admin.tag.active`),a=n.expiresAt?vE(n.expiresAt,e):t(`common.none`),o=n.lastUsedAt?vE(n.lastUsedAt,e):t(`common.none`);return(0,N.jsxs)(rT,{primary:`${n.label??n.uid??`#${n.id}`} · ${S(n.userId)}`,secondary:`${i} · ${t(`admin.tag.lastUsed`)}: ${o} · ${n.uid??t(`common.none`)} · ${a}`,children:[(0,N.jsx)(J,{size:`small`,onClick:()=>m(n),children:t(`admin.tag.edit`)}),n.isActive!==!1&&(0,N.jsx)(J,{size:`small`,color:`error`,onClick:()=>b.mutate(n.id),children:t(`admin.tag.delete`)}),n.isActive===!1&&(0,N.jsx)(J,{size:`small`,color:`error`,onClick:()=>x.mutate(n.id),children:t(`admin.tag.remove`)})]},n.id)}),!r.isLoading&&(r.data??[]).length===0&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{secondary:t(`admin.tag.empty`)})})]})}),p&&(0,N.jsx)(OE,{tag:p,onClose:()=>m(null),onSaved:async e=>{m(null),e.token&&_(e.token,!0),await h()}})]})}function AE({language:e}){let{t}=tw(),{permissions:n}=Ww(),r=Gw(n,`settings.edit`),i=Oc(),a=Yl({queryKey:[`admin`,`triggerRules`],queryFn:()=>$.triggerRules()}),o=Yl({queryKey:[`admin`,`users`],queryFn:()=>$.users()}),[s,c]=(0,y.useState)(null),l=s??a.data??[],u=Xl({mutationFn:e=>$.saveTriggerRules(e),onSuccess:async()=>{c(null),await i.invalidateQueries({queryKey:[`admin`,`triggerRules`]})}}),d=(e,t)=>c(l.map((n,r)=>r===e?{...n,...t}:n)),f=n=>n.lastFiredAt?`${t(`admin.trigger.lastFired`)}: ${vE(n.lastFiredAt,e)}`:t(`common.none`);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:a.error??u.error}),u.isSuccess&&(0,N.jsx)(Nm,{severity:`success`,sx:{mb:2},children:t(`admin.settings.saved`)}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`subtitle1`,gutterBottom:!0,children:t(`admin.triggers`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,gutterBottom:!0,children:t(`admin.triggersHint`)}),(0,N.jsxs)(X,{spacing:2,children:[l.map((e,n)=>(0,N.jsxs)(X,{spacing:1,sx:{border:1,borderColor:`divider`,borderRadius:1,p:1},children:[(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsx)(Z,{size:`small`,label:t(`admin.trigger.label`),value:e.label??``,onChange:e=>d(n,{label:e.target.value}),disabled:!r,sx:{minWidth:160}}),(0,N.jsx)(Z,{size:`small`,label:t(`admin.trigger.sourceState`),value:e.sourceState,onChange:e=>d(n,{sourceState:e.target.value}),disabled:!r,sx:{minWidth:260}}),(0,N.jsxs)(Z,{select:!0,size:`small`,label:t(`admin.trigger.mode`),value:e.mode??`condition`,onChange:e=>d(n,{mode:e.target.value}),disabled:!r,sx:{minWidth:200},children:[(0,N.jsx)(Yb,{value:`condition`,children:t(`admin.trigger.modeCondition`)}),(0,N.jsx)(Yb,{value:`user`,children:t(`admin.trigger.modeUser`)})]}),(e.mode??`condition`)===`condition`&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(Z,{size:`small`,label:t(`admin.trigger.condition`),helperText:t(`admin.trigger.conditionHint`),value:e.condition??``,onChange:e=>d(n,{condition:e.target.value}),disabled:!r,sx:{minWidth:170}}),(0,N.jsx)(Z,{select:!0,size:`small`,label:t(`admin.trigger.user`),value:e.userId===null||e.userId===void 0?``:String(e.userId),onChange:e=>d(n,{userId:e.target.value===``?null:Number(e.target.value)}),disabled:!r,sx:{minWidth:190},children:(o.data??[]).map(e=>(0,N.jsx)(Yb,{value:String(e.id),children:e.displayName},e.id))})]}),(0,N.jsxs)(Z,{select:!0,size:`small`,label:t(`admin.trigger.action`),value:e.action??`punch`,onChange:e=>d(n,{action:e.target.value}),disabled:!r,sx:{minWidth:230},children:[(0,N.jsx)(Yb,{value:`punch`,children:t(`admin.trigger.actionPunch`)}),(0,N.jsx)(Yb,{value:`quickPunch`,children:t(`admin.trigger.actionQuickPunch`)}),(0,N.jsx)(Yb,{value:`present`,children:t(`admin.trigger.actionPresent`)}),(0,N.jsx)(Yb,{value:`absent`,children:t(`admin.trigger.actionAbsent`)})]}),(0,N.jsx)(Z,{size:`small`,type:`number`,label:t(`admin.trigger.cooldown`),value:String(e.cooldownSec??0),onChange:e=>d(n,{cooldownSec:Number(e.target.value)}),disabled:!r,sx:{maxWidth:140}}),(0,N.jsx)(Ux,{checked:e.isActive!==!1,title:t(`admin.trigger.active`),onChange:()=>d(n,{isActive:e.isActive===!1}),disabled:!r}),(0,N.jsx)(bm,{size:`small`,title:t(`admin.tag.delete`),disabled:!r,onClick:()=>c(l.filter((e,t)=>t!==n)),children:(0,N.jsx)(gT,{fontSize:`small`})})]}),(0,N.jsx)(K,{variant:`caption`,color:`text.secondary`,children:f(e)})]},e.id??`new-${n}`)),(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsx)(J,{size:`small`,startIcon:(0,N.jsx)(yT,{}),disabled:!r,onClick:()=>c([...l,{sourceState:``,mode:`condition`,condition:`true`,action:`punch`,isActive:!0,cooldownSec:0}]),children:t(`admin.trigger.add`)}),(0,N.jsx)(J,{size:`small`,variant:`contained`,disabled:!r||u.isPending||s===null,onClick:()=>u.mutate(l),children:t(`common.save`)})]}),!a.isLoading&&l.length===0&&(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:t(`admin.trigger.empty`)})]})]})})]})}function jE({rules:e,runs:t,people:n,disabled:r,saving:i,onChange:a,onSave:o,language:s}){let{t:c}=tw(),l=(t,n)=>a(e.map((e,r)=>r===t?{...e,...n}:e)),u=e=>{let t=e??0;return`${String(Math.floor(t/60)).padStart(2,`0`)}:${String(t%60).padStart(2,`0`)}`},d=e=>{let t=/^(\d{1,2}):(\d{2})$/.exec(e.trim());if(!t)return null;let n=Number(t[1]),r=Number(t[2]);return n>=0&&n<=23&&r>=0&&r<=59?n*60+r:null},f=e=>n.find(t=>t.id===e)?.displayName??`#${e}`;return(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`subtitle1`,gutterBottom:!0,children:c(`admin.settings.automations`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,gutterBottom:!0,children:c(`admin.settings.automationsHint`)}),(0,N.jsxs)(X,{spacing:2,children:[e.map((t,i)=>(0,N.jsxs)(X,{spacing:.5,sx:{border:1,borderColor:`divider`,borderRadius:1,p:1},children:[(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsx)(Z,{size:`small`,label:c(`admin.trigger.label`),value:t.label??``,onChange:e=>l(i,{label:e.target.value}),disabled:r,sx:{minWidth:150}}),(0,N.jsxs)(Z,{select:!0,size:`small`,label:c(`admin.automation.kind`),value:t.kind,onChange:e=>l(i,{kind:e.target.value}),disabled:r,sx:{minWidth:230},children:[(0,N.jsx)(Yb,{value:`clockIn`,children:c(`admin.automation.kindClockIn`)}),(0,N.jsx)(Yb,{value:`clockOut`,children:c(`admin.automation.kindClockOut`)}),(0,N.jsx)(Yb,{value:`missingPunch`,children:c(`admin.automation.kindMissingPunch`)}),(0,N.jsx)(Yb,{value:`breakReminder`,children:c(`admin.automation.kindBreakReminder`)})]}),t.kind===`breakReminder`?(0,N.jsx)(Z,{size:`small`,type:`number`,label:c(`admin.automation.after`),value:String(t.afterMinutes??360),onChange:e=>l(i,{afterMinutes:Number(e.target.value)}),disabled:r,sx:{maxWidth:170}}):(0,N.jsx)(Z,{size:`small`,label:c(`admin.automation.at`),helperText:c(`admin.automation.atHint`),value:u(t.atMinute),onChange:e=>{let t=d(e.target.value);t!==null&&l(i,{atMinute:t})},disabled:r,sx:{maxWidth:160}}),(0,N.jsxs)(Z,{select:!0,size:`small`,label:c(`admin.automation.user`),value:t.userId===null||t.userId===void 0?``:String(t.userId),onChange:e=>l(i,{userId:e.target.value===``?null:Number(e.target.value)}),disabled:r,sx:{minWidth:190},children:[(0,N.jsx)(Yb,{value:``,children:c(`admin.automation.allUsers`)}),n.map(e=>(0,N.jsx)(Yb,{value:String(e.id),children:e.displayName},e.id))]}),(0,N.jsx)(J,{size:`small`,disabled:r,color:t.isActive===!1?`inherit`:`primary`,onClick:()=>l(i,{isActive:t.isActive===!1}),children:c(`admin.trigger.active`)}),(0,N.jsx)(bm,{size:`small`,title:c(`admin.tag.delete`),disabled:r,onClick:()=>a(e.filter((e,t)=>t!==i)),children:(0,N.jsx)(gT,{fontSize:`small`})})]}),(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:c(`admin.automation.weekdays`)}),mE(s).map(e=>(0,N.jsx)(Gv,{control:(0,N.jsx)(c_,{size:`small`,checked:t.weekdays?.includes(e.value)??!0,onChange:n=>l(i,{weekdays:hE(t.weekdays??[1,2,3,4,5,6,7],e.value,n.target.checked)}),disabled:r}),label:e.label},e.value)),(0,N.jsxs)(Z,{select:!0,size:`small`,label:c(`admin.automation.repeat`),value:t.repeat??`day`,onChange:e=>l(i,{repeat:e.target.value}),disabled:r,sx:{minWidth:190},children:[(0,N.jsx)(Yb,{value:`day`,children:c(`admin.automation.repeatDay`)}),(0,N.jsx)(Yb,{value:`week`,children:c(`admin.automation.repeatWeek`)})]})]})]},t.id??`new-${i}`)),(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsx)(J,{size:`small`,startIcon:(0,N.jsx)(yT,{}),disabled:r,onClick:()=>a([...e,{kind:`clockOut`,atMinute:1200,userId:null,weekdays:[1,2,3,4,5,6,7],repeat:`day`,isActive:!0}]),children:c(`admin.automation.add`)}),(0,N.jsx)(J,{size:`small`,variant:`contained`,disabled:r||i,onClick:o,children:c(`admin.settings.pauseSave`)})]}),e.length===0&&(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:c(`admin.automation.empty`)})]}),t.length>0&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(K,{variant:`subtitle2`,sx:{mt:2},children:c(`admin.automation.runs`)}),(0,N.jsx)(Gy,{dense:!0,children:t.map((e,t)=>(0,N.jsx)(ob,{disableGutters:!0,children:(0,N.jsx)(pb,{primary:`${vE(e.firedAt,s)} · ${f(e.userId)}`,secondary:e.action})},`${e.ruleId}-${e.userId}-${e.period}-${t}`))})]})]})})}function ME(e){return e===`type`?`admin.brand.imageType`:e===`tooLarge`?`admin.brand.imageTooLarge`:`admin.brand.imageUnreadable`}function NE({label:e,maxBytes:t,hint:n,onChange:r,disabled:i}){let{t:a,i18n:o}=tw(),[s,c]=(0,y.useState)(null),[l,u]=(0,y.useState)(``);return(0,N.jsxs)(X,{spacing:1,children:[(0,N.jsxs)(J,{variant:`outlined`,component:`label`,disabled:i===!0,sx:{alignSelf:`flex-start`},children:[e,(0,N.jsx)(`input`,{hidden:!0,type:`file`,accept:`image/png,image/jpeg,image/webp,image/gif`,onChange:e=>{let n=e.target.files?.[0];e.target.value=``,n&&(c(null),u(``),hT(n,t).then(e=>{if(!e.ok){c(e.problem);return}r(e.image.dataUrl),e.image.resized&&u(a(`admin.brand.imageResized`,{size:gE(e.image.bytes,o.language)}))}))}})]}),n&&(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:n}),l&&(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:l}),s&&(0,N.jsx)(Nm,{severity:`warning`,children:a(ME(s))})]})}function PE({label:e,value:t,maxBytes:n,onChange:r,disabled:i}){let{t:a}=tw();return(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,sx:{alignItems:{sm:`center`}},children:[(0,N.jsx)(NE,{label:e,maxBytes:n,onChange:r,disabled:i}),t!==``&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(q,{component:`img`,src:t,alt:``,sx:{height:40,maxWidth:160,objectFit:`contain`,border:1,borderColor:`divider`}}),(0,N.jsx)(J,{color:`inherit`,title:a(`admin.settings.brandImageRemove`),disabled:i,onClick:()=>r(``),children:a(`admin.settings.brandImageRemove`)})]})]})}var FE={pause_mode:`admin.settings.pauseModeTitle`};function IE({settingKey:e,value:t,disabled:n,onChange:r,fullLine:i=!1}){let{t:a}=tw(),o=FE[e]??`admin.settings.setting.${e}`;return(0,N.jsx)(Z,{label:a(o,{defaultValue:e}),helperText:e,value:t,onChange:e=>r(e.target.value),disabled:n,size:`small`,fullWidth:!0,...i?{sx:{gridColumn:{xs:`auto`,md:`1 / -1`}}}:{}})}function LE(){let{t:e,i18n:t}=tw(),{permissions:n}=Ww(),r=Gw(n,`settings.edit`),i=Oc(),a=Yl({queryKey:[`admin`,`settings`],queryFn:()=>$.settings()}),o=Yl({queryKey:[`admin`,`pauseRules`],queryFn:()=>$.pauseRules()}),s=Yl({queryKey:[`branding`],queryFn:()=>$.branding()}),[c,l]=(0,y.useState)({}),[u,d]=(0,y.useState)(null),f=u??o.data??[],p=Xl({mutationFn:e=>$.savePauseRules(e),onSuccess:async()=>{d(null),await i.invalidateQueries({queryKey:[`admin`,`pauseRules`]})}}),m=Yl({queryKey:[`admin`,`users`],queryFn:()=>$.users()}),h=Yl({queryKey:[`admin`,`automations`],queryFn:()=>$.automationRules()}),g=Yl({queryKey:[`admin`,`automationRuns`],queryFn:()=>$.automationRuns()}),[_,v]=(0,y.useState)(null),b=_??h.data??[],x=Xl({mutationFn:e=>$.saveAutomationRules(e),onSuccess:async()=>{v(null),await i.invalidateQueries({queryKey:[`admin`,`automations`]}),await i.invalidateQueries({queryKey:[`admin`,`automationRuns`]})}}),S=Xl({mutationFn:e=>$.updateSettings(e),onSuccess:async()=>{l({}),await i.invalidateQueries({queryKey:[`admin`,`settings`]}),await i.invalidateQueries({queryKey:[`branding`]})}});if(a.isLoading)return(0,N.jsx)(oT,{});let C=a.data??{},w=c.brand_logo??s.data?.logoUrl??``,T=c.brand_background??s.data?.backgroundUrl??``,E=(e,t)=>l(n=>({...n,[e]:t}));return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:a.error??s.error??S.error??o.error??p.error}),S.isSuccess&&(0,N.jsx)(Nm,{severity:`success`,sx:{mb:2},children:e(`admin.settings.saved`)}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`subtitle1`,gutterBottom:!0,children:e(`admin.settings.branding`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,gutterBottom:!0,children:e(`admin.settings.brandingHint`)}),(0,N.jsxs)(X,{spacing:2,children:[(0,N.jsx)(PE,{label:e(`admin.settings.brandLogo`),value:w,maxBytes:cT,onChange:e=>E(`brand_logo`,e),disabled:!r}),(0,N.jsx)(PE,{label:e(`admin.settings.brandBackground`),value:T,maxBytes:cT,onChange:e=>E(`brand_background`,e),disabled:!r}),(0,N.jsxs)(X,{direction:`row`,spacing:2,sx:{alignItems:`center`},children:[(0,N.jsx)(Z,{label:e(`admin.settings.brandColor`),helperText:e(`admin.settings.brandColorHint`),value:c.brand_color??C.brand_color??``,onChange:e=>E(`brand_color`,e.target.value),disabled:!r,sx:{maxWidth:260}}),(c.brand_color??C.brand_color??``)!==``&&(0,N.jsx)(q,{sx:{width:32,height:32,borderRadius:1,border:1,borderColor:`divider`,bgcolor:c.brand_color??C.brand_color??`transparent`}})]}),(0,N.jsxs)(X,{spacing:1,children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`admin.settings.brandColorPresets`)}),(0,N.jsxs)(X,{direction:`row`,sx:{flexWrap:`wrap`,gap:1,alignItems:`center`},children:[fw.map(e=>(0,N.jsx)(J,{"aria-label":e,title:e,disabled:!r,onClick:()=>E(`brand_color`,e),sx:{minWidth:40,width:40,height:40,p:0,borderRadius:1,border:2,borderColor:(c.brand_color??C.brand_color??``).toLowerCase()===e?`primary.main`:`divider`,bgcolor:e,"&:hover":{bgcolor:e}}},e)),(0,N.jsx)(J,{color:`inherit`,title:e(`admin.settings.brandColorDefaultHint`),disabled:!r,onClick:()=>{E(`brand_color`,``),E(`brand_background`,``)},children:e(`admin.settings.brandColorDefault`)})]})]})]})]})}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsx)(Wg,{children:(0,N.jsx)(Z,{label:e(`admin.settings.fontPath`),helperText:e(`admin.settings.fontPathHint`),value:c.report_font_path??C.report_font_path??``,onChange:e=>E(`report_font_path`,e.target.value),disabled:!r,fullWidth:!0})})}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`subtitle1`,gutterBottom:!0,children:e(`admin.settings.advanced`)}),(0,N.jsxs)(q,{sx:{display:`grid`,gap:2,gridTemplateColumns:{xs:`1fr`,sm:`repeat(2, minmax(0, 1fr))`,md:`repeat(3, minmax(0, 1fr))`}},children:[Object.keys(C).filter(e=>!e.startsWith(`brand_`)&&!e.endsWith(`timezone`)).sort().map(e=>(0,N.jsx)(IE,{settingKey:e,value:c[e]??C[e]??``,disabled:!r,onChange:t=>E(e,t)},e)),Object.keys(C).filter(e=>e.endsWith(`timezone`)).map(e=>(0,N.jsx)(IE,{settingKey:e,value:c[e]??C[e]??``,disabled:!r,onChange:t=>E(e,t),fullLine:!0},e))]})]})}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`subtitle1`,gutterBottom:!0,children:e(`admin.settings.pauseRules`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,gutterBottom:!0,children:e(`admin.settings.pauseRulesHint`)}),(0,N.jsx)(yE,{rules:f,disabled:!r,saving:p.isPending,onChange:d,onSave:()=>p.mutate(f)})]})}),(0,N.jsx)(jE,{rules:b,runs:g.data??[],people:m.data??[],disabled:!r,saving:x.isPending,onChange:v,onSave:()=>x.mutate(b),language:t.language}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`subtitle1`,gutterBottom:!0,children:e(`admin.settings.pauseMode`)}),(0,N.jsx)(Z,{select:!0,fullWidth:!0,label:e(`admin.settings.pauseModeTitle`),helperText:e(`admin.settings.pauseModeHint`),value:c.pause_mode??C.pause_mode??`auto`,onChange:e=>E(`pause_mode`,e.target.value),disabled:!r,children:[`auto`,`punched`,`staffel`].map(t=>(0,N.jsx)(Yb,{value:t,children:e(`admin.settings.pauseMode.${t}`)},t))})]})}),(0,N.jsx)(J,{variant:`contained`,disabled:!r||Object.keys(c).length===0||S.isPending,onClick:()=>S.mutate(c),children:e(`common.save`)})]})}function RE({language:e}){let{t}=tw(),n=Oc(),[r,i]=(0,y.useState)(null),[a,o]=(0,y.useState)(null),[s,c]=(0,y.useState)(``),l=(0,y.useRef)(null),u=Yl({queryKey:[`admin`,`backups`],queryFn:()=>$.backups()}),d=Xl({mutationFn:()=>$.createBackup(),onSuccess:async()=>{await n.invalidateQueries({queryKey:[`admin`,`backups`]})}}),f=Xl({mutationFn:e=>$.restoreBackup(e,s.trim()||void 0),onSuccess:async()=>{i(null),c(``),await n.invalidateQueries({queryKey:[`admin`,`backups`]})}}),p=Xl({mutationFn:e=>$.downloadBackup(e),onSuccess:e=>wT(e.blob,e.fileName)}),m=Xl({mutationFn:e=>$.uploadBackup(e),onSuccess:async()=>{await n.invalidateQueries({queryKey:[`admin`,`backups`]})}}),h=Xl({mutationFn:e=>$.deleteBackup(e),onSuccess:async()=>{o(null),await n.invalidateQueries({queryKey:[`admin`,`backups`]})}});if(u.isLoading)return(0,N.jsx)(oT,{});let g=u.data?.pending??null;return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:u.error??d.error??f.error??p.error??m.error??h.error}),g&&(0,N.jsx)(Nm,{severity:`warning`,sx:{mb:2},children:t(`admin.backup.pendingHint`,{name:g.name,users:g.users,entries:g.entries})}),d.isSuccess&&(0,N.jsx)(Nm,{severity:`success`,sx:{mb:2},children:t(`admin.backup.done`,{name:d.data.backup.name,removed:d.data.removed.length})}),(0,N.jsxs)(q,{sx:{mb:2},children:[(0,N.jsxs)(X,{direction:`row`,spacing:1,alignItems:`center`,flexWrap:`wrap`,useFlexGap:!0,children:[(0,N.jsx)(J,{variant:`contained`,startIcon:d.isPending?(0,N.jsx)(C_,{size:18}):(0,N.jsx)(NT,{}),disabled:d.isPending,onClick:()=>d.mutate(),children:t(`admin.backup.create`)}),(0,N.jsx)(J,{variant:`outlined`,startIcon:m.isPending?(0,N.jsx)(C_,{size:18}):(0,N.jsx)(IT,{}),disabled:m.isPending,onClick:()=>l.current?.click(),children:t(`admin.backup.upload`)}),(0,N.jsx)(`input`,{ref:l,type:`file`,accept:`.sqlite,application/octet-stream`,hidden:!0,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&m.mutate(t)}})]}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,sx:{mt:1},children:t(`admin.backup.uploadHint`)})]}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Gy,{dense:!0,children:[(u.data?.backups??[]).map(n=>(0,N.jsxs)(ob,{children:[(0,N.jsx)(pb,{primary:n.name,secondary:`${vE(n.createdAt,e)} · ${gE(n.sizeBytes,e)}`}),(0,N.jsxs)(X,{direction:`row`,spacing:.5,alignItems:`center`,children:[p.isPending&&p.variables===n.name&&(0,N.jsx)(C_,{size:16}),(0,N.jsx)(bm,{size:`small`,title:t(`admin.backup.download`),disabled:p.isPending,onClick:()=>p.mutate(n.name),children:(0,N.jsx)(PT,{fontSize:`small`})}),(0,N.jsx)(bm,{size:`small`,title:t(`admin.backup.restore`),disabled:f.isPending,onClick:()=>i(n.name),children:(0,N.jsx)(FT,{fontSize:`small`})}),(0,N.jsx)(bm,{size:`small`,title:t(`admin.backup.delete`),disabled:h.isPending,onClick:()=>o(n.name),children:(0,N.jsx)(gT,{fontSize:`small`})})]})]},n.name)),(u.data?.backups??[]).length===0&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{secondary:t(`admin.backup.empty`)})})]})}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,sx:{mt:2},children:t(`admin.backup.retention`,{days:u.data?.retentionDays??0})}),(0,N.jsxs)(ov,{open:r!==null,onClose:()=>i(null),children:[(0,N.jsx)(Dv,{children:t(`admin.backup.restoreTitle`)}),(0,N.jsxs)(vv,{children:[(0,N.jsx)(Cv,{sx:{mb:2},children:t(`admin.backup.restoreConfirm`,{name:r??``})}),(0,N.jsx)(Z,{fullWidth:!0,label:t(`corrections.reason`),helperText:t(`corrections.reasonHint`),value:s,onChange:e=>c(e.target.value)})]}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>i(null),children:t(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:f.isPending,onClick:()=>r&&f.mutate(r),children:t(`admin.backup.restore`)})]})]}),(0,N.jsxs)(ov,{open:a!==null,onClose:()=>o(null),children:[(0,N.jsx)(Dv,{children:t(`admin.backup.deleteTitle`)}),(0,N.jsx)(vv,{children:(0,N.jsx)(Cv,{children:t(`admin.backup.deleteConfirm`,{name:a??``})})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>o(null),children:t(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,color:`error`,disabled:h.isPending,onClick:()=>a&&h.mutate(a),children:t(`admin.backup.delete`)})]})]})]})}function zE(){let{t:e,i18n:t}=tw(),{permissions:n}=Ww(),[r,i]=(0,y.useState)(0),a=[];if(Gw(n,`user.view`)&&a.push({label:e(`admin.users`),render:()=>(0,N.jsx)(xE,{language:t.language})}),Gw(n,`time.edit_other`)&&a.push({label:e(`admin.corrections`),render:()=>(0,N.jsx)(MT,{language:t.language})}),Gw(n,`terminal.manage`)&&a.push({label:e(`admin.terminals`),render:()=>(0,N.jsx)(TE,{language:t.language})}),Gw(n,`settings.view`)&&a.push({label:e(`admin.settings`),render:()=>(0,N.jsx)(LE,{})}),Gw(n,`holiday.manage`)&&a.push({label:e(`admin.holidays`),render:()=>(0,N.jsx)(DE,{language:t.language})}),Gw(n,`rfid.manage`)&&a.push({label:e(`admin.tags`),render:()=>(0,N.jsx)(kE,{language:t.language})}),Gw(n,`settings.view`)&&a.push({label:e(`admin.triggers`),render:()=>(0,N.jsx)(AE,{language:t.language})}),Gw(n,`backup.run`)&&a.push({label:e(`admin.backup`),render:()=>(0,N.jsx)(RE,{language:t.language})}),a.length===0)return(0,N.jsx)(nT,{title:e(`admin.title`),children:(0,N.jsx)(Nm,{severity:`info`,children:e(`admin.forbidden`)})});let o=Math.min(r,a.length-1);return(0,N.jsxs)(nT,{title:e(`admin.title`),children:[(0,N.jsx)(DS,{value:o,onChange:(e,t)=>i(t),variant:`scrollable`,scrollButtons:`auto`,allowScrollButtonsMobile:!0,sx:{mb:2},children:a.map(e=>(0,N.jsx)(Yx,{label:e.label},e.label))}),a[o]?.render()]})}var BE=rp((0,N.jsx)(`path`,{d:`M11 7 9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8z`}),`Login`),VE=rp((0,N.jsx)(`path`,{d:`m17 7-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4z`}),`Logout`);function HE(){let{t:e,i18n:t}=tw(),{session:n}=Ww(),{pending:r,record:i,outcome:a}=Qw(),o=Oc(),[s,c]=(0,y.useState)(``),[l,u]=(0,y.useState)(!1),d=n?.user.timezone??`UTC`,f=Yl({queryKey:[`status`],queryFn:()=>$.status()});(0,y.useEffect)(()=>{a&&o.invalidateQueries({queryKey:[`status`]})},[a,o]);function p(e){i({tsUtc:Math.floor(Date.now()/1e3),...s?{note:s}:{},quick:e}),c(``),u(!0)}let m=f.data,h=m?.hasOpenEntry??!1;return(0,N.jsxs)(nT,{title:e(`nav.dashboard`),children:[(0,N.jsx)(aT,{error:f.error}),l&&r.length>0&&(0,N.jsx)(Nm,{severity:`warning`,children:e(`punch.queued`)}),(0,N.jsx)(Y,{sx:{mb:3},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,component:`p`,gutterBottom:!0,children:h?e(`punch.open`,{time:cw(m?.lastEntry?.tsUtc??null,d,t.language)}):e(`punch.closed`)}),m?.lastEntry&&(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,gutterBottom:!0,children:e(`punch.last`,{time:cw(m.lastEntry.tsUtc,d,t.language)})}),(0,N.jsxs)(X,{spacing:2,sx:{mt:2},children:[(0,N.jsx)(Z,{label:e(`punch.note`),value:s,size:`small`,onChange:e=>c(e.target.value)}),(0,N.jsx)(J,{variant:`contained`,size:`large`,startIcon:m?.nextDirection===`out`?(0,N.jsx)(VE,{}):(0,N.jsx)(BE,{}),disabled:f.isLoading,onClick:()=>p(!1),children:m?.nextDirection===`out`?e(`punch.out`):e(`punch.in`)}),(0,N.jsx)(J,{variant:`outlined`,onClick:()=>p(!0),disabled:f.isLoading,children:e(`punch.quick`)})]})]})}),(0,N.jsxs)(wy,{container:!0,spacing:2,children:[(0,N.jsx)(wy,{item:!0,xs:12,sm:4,children:(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`punch.worked`)}),(0,N.jsx)(K,{variant:`h5`,children:sw(m?.day.workedMin??0)})]})})}),(0,N.jsx)(wy,{item:!0,xs:12,sm:4,children:(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`punch.target`)}),(0,N.jsx)(K,{variant:`h5`,children:sw(m?.day.targetMin??0)})]})})}),(0,N.jsx)(wy,{item:!0,xs:12,sm:4,children:(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`punch.balance`)}),(0,N.jsx)(K,{variant:`h5`,color:(m?.day.balanceMin??0)<0?`error`:`text.primary`,children:sw(m?.day.balanceMin??0)})]})})})]}),(0,N.jsx)(q,{sx:{mt:2},children:(0,N.jsx)(J,{variant:`text`,onClick:()=>void f.refetch(),disabled:f.isFetching,children:e(`common.refresh`)})})]})}function UE(){let{t:e}=tw(),{signIn:t}=Ww(),n=gw(),[r,i]=(0,y.useState)(``),[a,o]=(0,y.useState)(``),[s,c]=(0,y.useState)(null),[l,u]=(0,y.useState)(!1);async function d(e){e.preventDefault(),u(!0),c(null);try{await t(r.trim(),a)}catch(e){c(e)}finally{u(!1)}}return(0,N.jsx)(q,{sx:{display:`flex`,justifyContent:`center`,alignItems:`center`,minHeight:`100vh`,p:2},children:(0,N.jsx)(Y,{sx:{width:`100%`,maxWidth:420},children:(0,N.jsxs)(Wg,{children:[n.logoUrl&&(0,N.jsx)(q,{component:`img`,src:n.logoUrl,alt:``,sx:{display:`block`,maxHeight:64,maxWidth:`100%`,mb:2}}),(0,N.jsx)(K,{variant:`h5`,component:`h1`,gutterBottom:!0,children:e(`app.title`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,gutterBottom:!0,children:e(`login.title`)}),(0,N.jsx)(q,{component:`form`,onSubmit:e=>void d(e),sx:{mt:2},children:(0,N.jsxs)(X,{spacing:2,children:[(0,N.jsx)(Z,{label:e(`login.login`),value:r,autoComplete:`username`,autoFocus:!0,required:!0,onChange:e=>i(e.target.value)}),(0,N.jsx)(Z,{label:e(`login.password`),type:`password`,value:a,autoComplete:`current-password`,required:!0,onChange:e=>o(e.target.value)}),l?(0,N.jsx)(Nm,{severity:`info`,children:e(`login.failed`)}):(0,N.jsx)(aT,{error:s}),(0,N.jsx)(J,{type:`submit`,variant:`contained`,size:`large`,disabled:l,children:e(`login.submit`)})]})})]})})})}function WE(){let{t:e}=tw(),{session:t,signOut:n}=Ww(),[r,i]=(0,y.useState)(``),[a,o]=(0,y.useState)(!1),[s,c]=(0,y.useState)(null),[l,u]=(0,y.useState)(!1);async function d(){o(!0),c(null);try{await $.changePassword(r),u(!0);try{await n()}catch{}}catch(e){c(e)}finally{o(!1)}}return(0,N.jsx)(q,{sx:{display:`flex`,justifyContent:`center`,alignItems:`center`,minHeight:`100vh`,p:2},children:(0,N.jsx)(Y,{sx:{maxWidth:420,width:`100%`},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:e(`profile.changePassword`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,gutterBottom:!0,children:t?.user.login}),l?(0,N.jsx)(Nm,{severity:`success`,children:e(`profile.changed`)}):(0,N.jsxs)(X,{spacing:2,sx:{mt:1},children:[(0,N.jsx)(Z,{type:`password`,label:e(`profile.newPassword`),helperText:e(`admin.user.passwordHint`),value:r,onChange:e=>i(e.target.value),autoComplete:`new-password`,fullWidth:!0}),(0,N.jsx)(aT,{error:s}),(0,N.jsx)(J,{variant:`contained`,disabled:a||r.length===0,onClick:()=>void d(),children:e(`profile.changePassword`)})]})]})})})}var GE=rp((0,N.jsx)(`path`,{d:`M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z`}),`Refresh`),KE=rp([(0,N.jsx)(`path`,{d:`M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2M12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8`},`0`),(0,N.jsx)(`path`,{d:`M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z`},`1`)],`Schedule`);function qE(e){return e instanceof iw&&e.status===401&&(e.code===`no_session`||e.code===`invalid_credentials`)}function JE(e){return $.terminalSession(e)}async function YE(e){try{return await e.call(e.session)}catch(t){if(!qE(t))throw t;let n=await JE(e.deviceToken);return e.onRenewed?.(n),e.call(n)}}var XE=rp((0,N.jsx)(`path`,{d:`M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m0 16H7.07L2.4 12l4.66-7H22zm-11.59-2L14 13.41 17.59 17 19 15.59 15.41 12 19 8.41 17.59 7 14 10.59 10.41 7 9 8.41 12.59 12 9 15.59z`}),`BackspaceOutlined`),ZE=[`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,``,`0`];function QE({onDigit:e,onBackspace:t,disabled:n=!1}){let{t:r}=tw(),i=e=>e.preventDefault();return(0,N.jsxs)(q,{sx:{display:`grid`,gridTemplateColumns:`repeat(3, 1fr)`,gap:1,width:`100%`,maxWidth:260},children:[ZE.map(t=>t===``?(0,N.jsx)(q,{},`blank`):(0,N.jsx)(J,{variant:`outlined`,size:`large`,disabled:n,"aria-label":t,onMouseDown:i,onClick:()=>e(t),sx:{minHeight:56,fontSize:`1.4rem`},children:t},t)),(0,N.jsx)(J,{variant:`outlined`,size:`large`,disabled:n,"aria-label":r(`keypad.backspace`),onMouseDown:i,onClick:t,sx:{minHeight:56},children:(0,N.jsx)(XE,{})})]})}var $E=`time-tracker.presence`,eD=2e4,tD=3e5,nD=8e3;function rD(){let e=new URLSearchParams(window.location.search).get(`token`);if(e?.trim()){try{window.localStorage.setItem($E,e.trim())}catch{}return e.trim()}try{return window.localStorage.getItem($E)}catch{return null}}function iD(){let{t:e,i18n:t}=tw(),[n,r]=(0,y.useState)(()=>rD()),[i,a]=(0,y.useState)(``),[o,s]=(0,y.useState)(null),[c,l]=(0,y.useState)([]),[u,d]=(0,y.useState)(null),[f,p]=(0,y.useState)(``),[m,h]=(0,y.useState)(null),[g,_]=(0,y.useState)(null),[v,b]=(0,y.useState)(null),[x,S]=(0,y.useState)(!1),[C,w]=(0,y.useState)(`UTC`),[T,E]=(0,y.useState)(Math.floor(Date.now()/1e3)),D=(0,y.useRef)(0),O=gw(),k=(0,y.useCallback)(()=>{try{window.localStorage.removeItem($E)}catch{}r(null)},[]);(0,y.useEffect)(()=>{(async()=>{try{let e=await $.terminalStatus();b(e.enabled),w(e.timezone),D.current=e.serverTime-Math.floor(Date.now()/1e3)}catch(e){_(e)}})()},[]),(0,y.useEffect)(()=>{let e=window.setInterval(()=>E(Math.floor(Date.now()/1e3)+D.current),1e3);return()=>window.clearInterval(e)},[]),(0,y.useEffect)(()=>{if(!n){s(null);return}(async()=>{try{let e=await $.terminalSession(n);s(e),_(null)}catch(e){s(null),_(e)}})()},[n]);let A=(0,y.useCallback)(async()=>{if(o&&n)try{let e=await YE({deviceToken:n,session:o,call:e=>$.terminalUsers(e.terminalSession),onRenewed:s});l(e.users),_(null)}catch(e){_(e)}},[o,n]);(0,y.useEffect)(()=>{A();let e=window.setInterval(()=>void A(),eD);return()=>window.clearInterval(e)},[A]),(0,y.useEffect)(()=>{if(!o||!n)return;let e=window.setInterval(()=>{$.terminalHeartbeat(o.terminalSession).catch(async()=>{try{s(await JE(n))}catch(e){_(e),k()}})},tD);return()=>window.clearInterval(e)},[o,n,k]),(0,y.useEffect)(()=>{if(!m)return;let e=window.setTimeout(()=>h(null),nD);return()=>window.clearTimeout(e)},[m]);let j=(0,y.useCallback)(async()=>{let e=o?.terminal.pinRequired===!0;if(o&&n&&u&&(!e||f.length!==0)){S(!0);try{let e=await YE({deviceToken:n,session:o,call:e=>$.terminalPunch({terminalSession:e.terminalSession,userId:u.id,...f?{pin:f}:{}}),onRenewed:s});h(e),l(t=>t.map(t=>t.id===e.user.id?{...t,present:e.day.hasOpenEntry,workedMin:e.day.workedMin??t.workedMin}:t)),d(null),p(``),_(null)}catch(e){_(e)}finally{S(!1)}}},[f,u,o,n]);return n?(0,N.jsxs)(q,{sx:{p:2},children:[(0,N.jsxs)(X,{direction:`row`,justifyContent:`space-between`,alignItems:`baseline`,sx:{mb:2},children:[(0,N.jsxs)(X,{direction:`row`,spacing:1,sx:{alignItems:`center`},children:[O.logoUrl&&(0,N.jsx)(q,{component:`img`,src:O.logoUrl,alt:``,sx:{height:28,maxWidth:120,objectFit:`contain`}}),(0,N.jsx)(K,{variant:`h5`,children:e(`presence.title`)})]}),(0,N.jsxs)(X,{direction:`row`,spacing:1,alignItems:`center`,children:[(0,N.jsx)(K,{variant:`h5`,children:cw(T,C,t.language)}),(0,N.jsx)(K,{variant:`body1`,children:o?.terminal.name??``}),(0,N.jsx)(bm,{size:`small`,title:e(`common.refresh`),"aria-label":e(`common.refresh`),onClick:()=>void A(),children:(0,N.jsx)(GE,{fontSize:`small`})})]})]}),v===!1&&(0,N.jsx)(Nm,{severity:`warning`,sx:{mb:2},children:e(`presence.disabled`)}),(0,N.jsx)(aT,{error:g}),m&&(0,N.jsx)(Nm,{severity:`success`,sx:{mb:2},children:e(`presence.updated`,{name:m.user.displayName,state:e(m.day.hasOpenEntry?`presence.present`:`presence.absent`)})}),(0,N.jsx)(q,{sx:{display:`grid`,gridTemplateColumns:`repeat(auto-fill, minmax(240px, 1fr))`,gap:1.5},children:c.map(t=>(0,N.jsx)(Y,{variant:`outlined`,sx:{borderWidth:t.present?2:1,borderColor:t.present?`success.main`:`divider`,bgcolor:t.present?`success.light`:`background.paper`},children:(0,N.jsx)(zg,{onClick:()=>{d(t),p(``)},children:(0,N.jsxs)(X,{direction:`row`,spacing:1.5,alignItems:`center`,sx:{px:1.5,py:.5},children:[(0,N.jsx)(Vh,{src:t.avatarUrl??`/person.png`,sx:{width:56,height:56,bgcolor:t.present?`success.main`:`grey.500`},children:aD(t.displayName)}),(0,N.jsxs)(q,{sx:{minWidth:0,flexGrow:1},children:[(0,N.jsxs)(X,{direction:`row`,spacing:.5,sx:{alignItems:`center`},children:[(0,N.jsx)(rh,{size:`small`,color:t.present?`success`:`default`,label:e(t.present?`presence.present`:`presence.absent`)}),t.workedMin!==void 0&&(0,N.jsx)(rh,{size:`small`,variant:`outlined`,icon:(0,N.jsx)(KE,{fontSize:`small`}),label:sw(t.workedMin),title:e(`presence.workedToday`)})]}),(0,N.jsx)(K,{variant:`subtitle1`,noWrap:!0,sx:{lineHeight:1.3},children:t.displayName})]})]})})},t.id))}),u&&(0,N.jsx)(Y,{sx:{mt:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:u.displayName}),(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,children:[o?.terminal.pinRequired===!1?(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,sx:{alignSelf:`center`},children:e(`terminal.noPin`)}):(0,N.jsx)(Z,{label:e(`terminal.pin`),type:`password`,value:f,onChange:e=>p(e.target.value),onKeyDown:e=>{e.key===`Enter`&&j()},helperText:e(`presence.tapPin`),autoFocus:!0,fullWidth:!0}),o?.terminal.pinRequired===!1?null:(0,N.jsx)(QE,{onDigit:e=>p(t=>t+e),onBackspace:()=>p(e=>e.slice(0,-1)),disabled:x}),(0,N.jsx)(J,{variant:`contained`,size:`large`,disabled:x||o?.terminal.pinRequired===!0&&f.length===0,onClick:()=>void j(),children:e(`punch.now`)}),(0,N.jsx)(J,{variant:`text`,size:`large`,onClick:()=>{d(null),p(``)},children:e(`presence.cancel`)})]})]})})]}):(0,N.jsxs)(q,{sx:{p:2,maxWidth:480,mx:`auto`},children:[(0,N.jsx)(K,{variant:`h5`,gutterBottom:!0,children:e(`presence.title`)}),(0,N.jsx)(aT,{error:g}),(0,N.jsx)(Z,{label:e(`terminal.deviceToken`),value:i,onChange:e=>a(e.target.value),fullWidth:!0,sx:{mt:1}}),(0,N.jsx)(J,{variant:`contained`,size:`large`,sx:{mt:2},disabled:i.trim().length===0,onClick:()=>r(i.trim()),children:e(`terminal.connect`)})]})}function aD(e){let t=e.trim().split(/\s+/).filter(e=>e.length>0);return t.length===0?`?`:t.length===1?t[0].slice(0,2).toUpperCase():`${t[0][0]}${t[t.length-1][0]}`.toUpperCase()}function oD(){let{t:e,i18n:t}=tw(),{session:n,permissions:r}=Ww(),[i,a]=(0,y.useState)(``),[o,s]=(0,y.useState)(!1),[c,l]=(0,y.useState)(null);async function u(e){e.preventDefault(),l(null);try{await $.changePassword(i),s(!0),a(``)}catch(e){l(e)}}return(0,N.jsxs)(nT,{title:e(`profile.title`),children:[(0,N.jsx)(Y,{sx:{mb:3},children:(0,N.jsx)(Wg,{children:(0,N.jsxs)(X,{spacing:1,children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`profile.user`)}),(0,N.jsx)(K,{variant:`h6`,children:n?.user.displayName??n?.user.login}),(0,N.jsxs)(K,{variant:`body2`,color:`text.secondary`,children:[n?.user.login,` · `,n?.user.timezone]}),(0,N.jsx)(Z,{select:!0,label:e(`profile.language`),size:`small`,value:t.language,onChange:e=>void t.changeLanguage(e.target.value),sx:{maxWidth:240,mt:1},children:Lw.map(e=>(0,N.jsx)(Yb,{value:e,children:e},e))}),(0,N.jsxs)(q,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`profile.roles`)}),(0,N.jsx)(K,{variant:`body2`,children:r.join(`, `)||e(`common.none`)})]})]})})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:e(`profile.changePassword`)}),o&&(0,N.jsx)(Nm,{severity:`success`,children:e(`profile.changed`)}),(0,N.jsx)(aT,{error:c}),(0,N.jsx)(q,{component:`form`,onSubmit:e=>void u(e),children:(0,N.jsxs)(X,{spacing:2,children:[(0,N.jsx)(Z,{label:e(`profile.newPassword`),type:`password`,value:i,autoComplete:`new-password`,required:!0,size:`small`,onChange:e=>a(e.target.value)}),(0,N.jsx)(J,{type:`submit`,variant:`contained`,children:e(`profile.changePassword`)})]})})]})})]})}function sD(){let{t:e,i18n:t}=tw(),[n,r]=(0,y.useState)(()=>new Date().getFullYear()),[i,a]=(0,y.useState)(void 0),{permissions:o,session:s}=Ww(),c=Gw(o,`payout.view`),l=Gw(o,`report.view_other`)&&Gw(o,`user.view`),u=Yl({queryKey:[`employees`],queryFn:()=>$.users(),enabled:l}),d=Yl({queryKey:[`months`,n,i],queryFn:()=>$.months(n,i)}),f=Yl({queryKey:[`payouts`,n],queryFn:()=>$.payouts(n),enabled:c&&i===void 0,retry:!1}),p=d.data?.months??[],m=i===void 0?``:(u.data??[]).find(e=>e.id===i)?.displayName??``,h=e=>new Intl.DateTimeFormat(t.language,{month:`long`,timeZone:`UTC`}).format(new Date(Date.UTC(n,e-1,15)));return(0,N.jsxs)(nT,{title:e(`reports.title`),children:[(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(X,{direction:`row`,alignItems:`center`,justifyContent:`space-between`,sx:{p:1},children:[(0,N.jsx)(bm,{onClick:()=>r(e=>e-1),title:e(`month.previous`),children:(0,N.jsx)(NS,{})}),(0,N.jsxs)(K,{variant:`h6`,children:[e(`reports.year`),` `,n]}),(0,N.jsx)(bm,{onClick:()=>r(e=>e+1),title:e(`month.next`),children:(0,N.jsx)(PS,{})})]})}),l&&(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsx)(Wg,{children:(0,N.jsxs)(Z,{select:!0,fullWidth:!0,size:`small`,label:e(`statistics.employee`),value:i??``,onChange:e=>a(e.target.value===``?void 0:Number(e.target.value)),children:[(0,N.jsx)(Yb,{value:``,children:s?.user.displayName??e(`profile.user`)}),(u.data??[]).filter(e=>e.isActive).map(e=>(0,N.jsx)(Yb,{value:e.id,children:e.displayName},e.id))]})})}),(0,N.jsx)(aT,{error:d.error}),d.isLoading?(0,N.jsx)(oT,{}):(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(wy,{container:!0,spacing:2,sx:{mb:2},children:[(0,N.jsx)(wy,{item:!0,xs:6,children:(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`reports.yearTotals`)}),(0,N.jsx)(K,{variant:`h5`,children:sw(d.data?.year.workedMin??0)}),(0,N.jsxs)(K,{variant:`body2`,color:`text.secondary`,children:[e(`month.target`),`: `,sw(d.data?.year.targetMin??0)]})]})})}),(0,N.jsx)(wy,{item:!0,xs:6,children:(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`reports.overtime`)}),(0,N.jsx)(K,{variant:`h5`,color:(d.data?.year.overtimeMin??0)<0?`error`:`text.primary`,children:sw(d.data?.year.overtimeMin??0)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`reports.vacation`,{used:d.data?.year.vacationUsed??0,total:(d.data?.year.vacationCarryover??0)+(d.data?.year.vacationDays??0)})}),c&&i===void 0&&(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`reports.paidOut`,{minutes:sw(f.data?.totalMinutes??0)})})]})})})]}),(0,N.jsxs)(Y,{children:[(0,N.jsx)(Gy,{dense:!0,children:p.map((t,r)=>(0,N.jsx)(ob,{secondaryAction:(0,N.jsxs)(X,{direction:`row`,spacing:1,alignItems:`center`,children:[(0,N.jsx)(K,{variant:`body2`,color:(t?.balanceMin??0)<0?`error`:`text.secondary`,children:sw(t?.balanceMin??0)}),t&&(0,N.jsx)(TT,{year:n,month:r+1,userId:i,compact:!0})]}),children:(0,N.jsx)(pb,{primary:i===void 0?h(r+1):(0,N.jsx)(K,{component:Bf,to:`/month?year=${n}&month=${r+1}&userId=${i}&name=${encodeURIComponent(m)}`,title:e(`month.title`),sx:{color:`primary.main`,textDecoration:`none`,"&:hover":{textDecoration:`underline`}},children:h(r+1)}),secondary:t?`${e(`month.worked`)} ${sw(t.workedMin)} · ${e(`month.target`)} ${sw(t.targetMin)}`:e(`reports.empty`)})},r))}),p.length===0&&(0,N.jsx)(q,{sx:{p:2},children:(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`reports.empty`)})})]})]})]})}function cD(){let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-01`}function lD(){let e=new Date,t=new Date(e.getFullYear(),e.getMonth()+1,0);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}`}function uD(e,t){return new Intl.NumberFormat(t,{style:`unit`,unit:`hour`,maximumFractionDigits:2}).format(e/60)}function dD(){let{t:e,i18n:t}=tw(),[n,r]=(0,y.useState)(cD),[i,a]=(0,y.useState)(lD),o=/^\d{4}-\d{2}-\d{2}$/.test(n)&&/^\d{4}-\d{2}-\d{2}$/.test(i)&&n<=i,s=Yl({queryKey:[`statistics`,n,i],queryFn:()=>$.statistics(n,i),enabled:o});if(s.isLoading)return(0,N.jsx)(nT,{title:e(`nav.statistics`),children:(0,N.jsx)(oT,{})});let c=(n,r,i,a)=>`${e(`statistics.worked`)} ${uD(n,t.language)} · ${e(`statistics.target`)} ${uD(r,t.language)} · ${e(`statistics.balance`)} ${uD(i,t.language)} · ${e(`statistics.openDays`)} ${a}`,l=s.data?.totals;return(0,N.jsxs)(nT,{title:e(`nav.statistics`),children:[(0,N.jsx)(aT,{error:s.error}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsx)(Wg,{children:(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,children:[(0,N.jsx)(Z,{label:e(`statistics.from`),value:n,onChange:e=>r(e.target.value)}),(0,N.jsx)(Z,{label:e(`statistics.to`),value:i,onChange:e=>a(e.target.value)})]})})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Gy,{dense:!0,children:[(s.data?.users??[]).map(e=>(0,N.jsx)(ob,{divider:!0,children:(0,N.jsx)(pb,{primary:e.displayName,secondary:c(e.workedMin,e.targetMin,e.balanceMin,e.openDays)})},e.userId)),l&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{primary:(0,N.jsx)(K,{variant:`body1`,sx:{fontWeight:600},children:e(`statistics.totals`)}),secondary:c(l.workedMin,l.targetMin,l.balanceMin,l.openDays)})})]})})]})}function fD(){let{t:e,i18n:t}=tw(),{session:n,permissions:r}=Ww(),{pending:i,flush:a,busy:o,outcome:s}=Qw(),c=Oc(),l=n?.user.timezone??`UTC`,u=Gw(r,`time.resolve_conflict`),d=Yl({queryKey:[`conflicts`],queryFn:()=>$.conflicts(),enabled:u,retry:!1}),f=Xl({mutationFn:e=>$.resolve(e.entryId,e.action),onSuccess:()=>void c.invalidateQueries({queryKey:[`conflicts`]})});return(0,N.jsxs)(nT,{title:e(`sync.title`),children:[(0,N.jsx)(Y,{sx:{mb:3},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:i.length>0?e(`sync.pending`,{count:i.length}):e(`sync.none`)}),s&&(0,N.jsx)(Nm,{severity:`success`,sx:{mt:1},children:e(`sync.done`,{accepted:s.accepted,duplicates:s.duplicates,conflicts:s.conflicts})}),(0,N.jsx)(X,{spacing:2,sx:{mt:2},children:(0,N.jsx)(J,{variant:`contained`,disabled:o||i.length===0,onClick:()=>void a(),children:e(`sync.flush`)})}),i.length>0&&(0,N.jsx)(Gy,{dense:!0,children:i.map(e=>(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{primary:cw(e.tsUtc,l,t.language),secondary:e.note??void 0})},e.idempotencyKey))})]})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:e(`sync.conflicts`)}),u?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:d.error}),f.error&&(0,N.jsx)(aT,{error:f.error}),(d.data??[]).length===0?(0,N.jsx)(q,{children:(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`sync.empty`)})}):(0,N.jsx)(Gy,{dense:!0,children:(d.data??[]).map(n=>(0,N.jsxs)(rT,{primary:e(`sync.conflictOf`,{date:n.localDate,time:cw(n.tsUtc,l,t.language)}),secondary:n.note??void 0,children:[(0,N.jsx)(J,{size:`small`,onClick:()=>f.mutate({entryId:n.entryId??n.id,action:`accept`}),children:e(`sync.accept`)}),(0,N.jsx)(J,{size:`small`,color:`warning`,onClick:()=>f.mutate({entryId:n.entryId??n.id,action:`dismiss`}),children:e(`sync.dismiss`)})]},n.id))})]}):(0,N.jsx)(Nm,{severity:`info`,children:e(`sync.permission`)})]})})]})}var pD=`time-tracker.scan`;function mD(){let e=new URLSearchParams(window.location.search),t=e.get(`tag`);if(t?.trim()){try{window.sessionStorage.setItem(pD,t.trim())}catch{}e.delete(`tag`);let n=e.toString();return window.history.replaceState(null,``,`${window.location.pathname}${n?`?${n}`:``}`),t.trim()}try{return window.sessionStorage.getItem(pD)}catch{return null}}function hD(){let{t:e,i18n:t}=tw(),n=(0,y.useRef)(mD()),[r,i]=(0,y.useState)(null),[a,o]=(0,y.useState)(null),[s,c]=(0,y.useState)(!1);(0,y.useEffect)(()=>{s||(c(!0),(async()=>{try{i(await $.scanTag(n.current??``))}catch(e){o(e)}})())},[s]);let l=Intl.DateTimeFormat().resolvedOptions().timeZone;return(0,N.jsx)(q,{sx:{display:`flex`,minHeight:`100vh`,alignItems:`center`,justifyContent:`center`,p:2},children:(0,N.jsx)(Y,{sx:{maxWidth:520,width:`100%`},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:e(`scan.title`)}),!r&&!a&&(0,N.jsxs)(q,{sx:{display:`flex`,gap:2,alignItems:`center`},children:[(0,N.jsx)(C_,{size:20}),(0,N.jsx)(K,{children:e(`common.loading`)})]}),r&&(0,N.jsx)(Nm,{severity:`success`,children:e(`scan.done`,{name:r.user?.displayName??``,time:cw(r.entry?.tsUtc??null,l,t.language)})}),a?(0,N.jsx)(Nm,{severity:`error`,children:e(`scan.failed`,{reason:e(iT(a))})}):null,(0,N.jsx)(J,{sx:{mt:2},variant:`contained`,href:`/`,children:e(`nav.dashboard`)})]})})})}var gD=`time-tracker.terminal`,_D=8e3,vD=3e5;function yD(){let e=new URLSearchParams(window.location.search).get(`token`);if(e?.trim()){try{window.localStorage.setItem(gD,e.trim())}catch{}return e.trim()}try{return window.localStorage.getItem(gD)}catch{return null}}function bD(){let{t:e,i18n:t}=tw(),[n,r]=(0,y.useState)(()=>yD()),[i,a]=(0,y.useState)(``),[o,s]=(0,y.useState)(null),[c,l]=(0,y.useState)([]),[u,d]=(0,y.useState)(null),[f,p]=(0,y.useState)(``),[m,h]=(0,y.useState)(``),[g,_]=(0,y.useState)(null),[v,b]=(0,y.useState)(null),[x,S]=(0,y.useState)(null),[C,w]=(0,y.useState)(`UTC`),[T,E]=(0,y.useState)(Math.floor(Date.now()/1e3)),D=(0,y.useRef)(0),O=gw(),k=(0,y.useCallback)(()=>{try{window.localStorage.removeItem(gD)}catch{}r(null)},[]);(0,y.useEffect)(()=>{(async()=>{try{let e=await $.terminalStatus();S(e.enabled),w(e.timezone),D.current=e.serverTime-Math.floor(Date.now()/1e3)}catch(e){b(e),S(!1)}})()},[]),(0,y.useEffect)(()=>{let e=window.setInterval(()=>E(Math.floor(Date.now()/1e3)+D.current),1e3);return()=>window.clearInterval(e)},[]),(0,y.useEffect)(()=>{n&&x===!0&&(async()=>{try{let e=await $.terminalSession(n);s(e);let t=await $.terminalUsers(e.terminalSession);l(t.users)}catch(e){b(e),k()}})()},[n,x,k]),(0,y.useEffect)(()=>{if(!o||!n)return;let e=window.setInterval(()=>{$.terminalHeartbeat(o.terminalSession).catch(async()=>{try{s(await JE(n))}catch{k()}})},vD);return()=>window.clearInterval(e)},[o,n,k]);let A=(0,y.useCallback)(async e=>{if(o&&n){b(null);try{let t=await YE({deviceToken:n,session:o,call:t=>$.terminalPunch({terminalSession:t.terminalSession,...e}),onRenewed:s});_(t),d(null),p(``),h(``),window.setTimeout(()=>_(null),_D)}catch(e){b(e)}}},[o,n]);return x===null?(0,N.jsx)(q,{sx:{display:`flex`,minHeight:`100vh`,alignItems:`center`,justifyContent:`center`},children:(0,N.jsx)(K,{children:e(`common.loading`)})}):x===!0?n?o?g?(0,N.jsx)(q,{sx:{display:`flex`,minHeight:`100vh`,alignItems:`center`,justifyContent:`center`,p:2},children:(0,N.jsx)(Y,{sx:{maxWidth:560,width:`100%`},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h4`,gutterBottom:!0,children:g.user.displayName}),(0,N.jsx)(Nm,{severity:`success`,children:`${e(g.entry.direction===`out`?`punch.out`:`punch.in`)} — ${e(`punch.sent`,{time:cw(g.entry.tsUtc,C,t.language)})}`}),(0,N.jsxs)(X,{spacing:.5,sx:{mt:2},children:[(0,N.jsxs)(K,{variant:`body1`,children:[e(`punch.worked`),`: `,g.day.workedMin,` min`]}),(0,N.jsxs)(K,{variant:`body1`,children:[e(`punch.target`),`: `,g.day.targetMin,` min`]}),(0,N.jsxs)(K,{variant:`body1`,children:[e(`punch.balance`),`: `,g.day.balanceMin,` min`]}),!g.day.hasOpenEntry&&(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`punch.closed`)})]})]})})}):(0,N.jsxs)(q,{sx:{p:2},children:[(0,N.jsxs)(X,{direction:`row`,justifyContent:`space-between`,alignItems:`baseline`,sx:{mb:2},children:[(0,N.jsxs)(X,{direction:`row`,spacing:1,sx:{alignItems:`center`,minWidth:0},children:[O.logoUrl&&(0,N.jsx)(q,{component:`img`,src:O.logoUrl,alt:``,sx:{height:28,maxWidth:120,objectFit:`contain`}}),(0,N.jsx)(K,{variant:`h5`,children:o.terminal.name})]}),(0,N.jsx)(K,{variant:`h5`,children:cw(T,C,t.language)})]}),(0,N.jsx)(aT,{error:v}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,children:[(0,N.jsx)(Z,{label:e(`terminal.badge`),value:f,onChange:e=>p(e.target.value),onKeyDown:e=>{e.key===`Enter`&&f.trim()&&A({badge:f.trim()})},autoFocus:!0,fullWidth:!0}),(0,N.jsx)(J,{variant:`contained`,size:`large`,disabled:f.trim().length===0,onClick:()=>void A({badge:f.trim()}),children:e(`punch.now`)})]}),(0,N.jsx)(QE,{onDigit:e=>p(t=>t+e),onBackspace:()=>p(e=>e.slice(0,-1))})]})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`subtitle1`,gutterBottom:!0,children:e(`terminal.select`)}),(0,N.jsx)(X,{direction:`row`,spacing:1,sx:{flexWrap:`wrap`,gap:1},children:c.map(e=>(0,N.jsx)(J,{variant:u?.id===e.id?`contained`:`outlined`,startIcon:(0,N.jsx)(Vh,{src:e.avatarUrl??`/person.png`,alt:``,sx:{width:24,height:24}}),onClick:()=>d(e),children:e.displayName},e.id))}),(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,sx:{mt:2},children:[o.terminal.pinRequired?(0,N.jsx)(Z,{label:e(`terminal.pin`),type:`password`,value:m,onChange:e=>h(e.target.value),helperText:e(`admin.user.pinHint`),fullWidth:!0}):(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,sx:{alignSelf:`center`},children:e(`terminal.noPin`)}),(0,N.jsx)(J,{variant:`contained`,size:`large`,disabled:!u||o.terminal.pinRequired&&m.length===0,onClick:()=>u&&void A(o.terminal.pinRequired?{userId:u.id,pin:m}:{userId:u.id}),children:e(`punch.now`)})]}),o.terminal.pinRequired&&(0,N.jsx)(QE,{onDigit:e=>h(t=>t+e),onBackspace:()=>h(e=>e.slice(0,-1))})]})})]}):(0,N.jsxs)(q,{sx:{p:3},children:[(0,N.jsx)(K,{children:e(`common.loading`)}),(0,N.jsx)(aT,{error:v})]}):(0,N.jsx)(q,{sx:{display:`flex`,minHeight:`100vh`,alignItems:`center`,justifyContent:`center`,p:2},children:(0,N.jsx)(Y,{sx:{maxWidth:480,width:`100%`},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:e(`terminal.title`)}),(0,N.jsxs)(X,{spacing:2,children:[(0,N.jsx)(Z,{label:e(`terminal.deviceToken`),value:i,onChange:e=>a(e.target.value),fullWidth:!0,autoFocus:!0}),(0,N.jsx)(aT,{error:v}),(0,N.jsx)(J,{variant:`contained`,disabled:i.trim().length===0,onClick:()=>r(i.trim()),children:e(`terminal.connect`)})]})]})})}):(0,N.jsxs)(q,{sx:{p:3},children:[(0,N.jsx)(Nm,{severity:`warning`,children:e(`terminal.disabled`)}),(0,N.jsx)(aT,{error:v})]})}var xD=dc({palette:{mode:`light`,primary:{main:`#1976d2`},secondary:{main:`#00897b`}},shape:{borderRadius:10},components:{MuiButton:{defaultProps:{disableElevation:!0},styleOverrides:{root:{textTransform:`none`,minHeight:44}}},MuiCard:{styleOverrides:{root:{border:`1px solid rgba(0,0,0,0.08)`}}}}}),SD=new Il({defaultOptions:{queries:{retry:!1,refetchOnWindowFocus:!0,staleTime:3e4}}});function CD(){let{session:e,checking:t}=Ww();return t&&!e?(0,N.jsx)(q,{sx:{display:`flex`,justifyContent:`center`,alignItems:`center`,minHeight:`100vh`},children:(0,N.jsx)(C_,{})}):e?e.user.mustChangePw?(0,N.jsx)(Qd,{children:(0,N.jsx)(Xd,{path:`*`,element:(0,N.jsx)(WE,{})})}):(0,N.jsxs)(Qd,{children:[(0,N.jsx)(Xd,{path:`/`,element:(0,N.jsx)(HE,{})}),(0,N.jsx)(Xd,{path:`/month`,element:(0,N.jsx)(DT,{})}),(0,N.jsx)(Xd,{path:`/reports`,element:(0,N.jsx)(sD,{})}),(0,N.jsx)(Xd,{path:`/statistics`,element:(0,N.jsx)(dD,{})}),(0,N.jsx)(Xd,{path:`/absences`,element:(0,N.jsx)(sT,{})}),(0,N.jsx)(Xd,{path:`/sync`,element:(0,N.jsx)(fD,{})}),(0,N.jsx)(Xd,{path:`/profile`,element:(0,N.jsx)(oD,{})}),(0,N.jsx)(Xd,{path:`/admin`,element:(0,N.jsx)(zE,{})}),(0,N.jsx)(Xd,{path:`*`,element:(0,N.jsx)(Yd,{to:`/`,replace:!0})})]}):(0,N.jsx)(Qd,{children:(0,N.jsx)(Xd,{path:`*`,element:(0,N.jsx)(UE,{})})})}function wD(){let[e]=(0,y.useState)(()=>new URLSearchParams(window.location.search).has(`tag`));return e?(0,N.jsx)(hD,{}):(0,N.jsxs)(Qd,{children:[(0,N.jsx)(Xd,{path:`/terminal`,element:(0,N.jsx)(bD,{})}),(0,N.jsx)(Xd,{path:`/presence`,element:(0,N.jsx)(iD,{})}),(0,N.jsx)(Xd,{path:`*`,element:(0,N.jsx)(CD,{})})]})}function TD(){let e=gw();return(0,N.jsx)(q,{sx:{minHeight:`100vh`,..._w(e)},children:(0,N.jsx)(wD,{})})}function ED(){return(0,N.jsxs)(Tc,{theme:xD,children:[(0,N.jsx)(vc,{}),(0,N.jsx)(kc,{client:SD,children:(0,N.jsx)(Uw,{children:(0,N.jsx)(Zw,{children:(0,N.jsx)(zf,{children:(0,N.jsx)(hw,{children:(0,N.jsx)(TD,{})})})})})})]})}k({immediate:!0});var DD=document.getElementById(`root`);if(!DD)throw Error(`index.html does not contain #root`);(0,b.createRoot)(DD).render((0,N.jsx)(y.StrictMode,{children:(0,N.jsx)(ED,{})}));
|
|
119
|
-
//# sourceMappingURL=index-
|
|
118
|
+
`;return typeof a==`function`&&a(null,p),p}})),pE=u(s((e=>{var t=BT(),n=lE(),r=dE(),i=fE();function a(e,r,i,a,o){let s=[].slice.call(arguments,1),c=s.length,l=typeof s[c-1]==`function`;if(!l&&!t())throw Error(`Callback required as last argument`);if(l){if(c<2)throw Error(`Too few arguments provided`);c===2?(o=i,i=r,r=a=void 0):c===3&&(r.getContext&&o===void 0?(o=a,a=void 0):(o=a,a=i,i=r,r=void 0))}else{if(c<1)throw Error(`Too few arguments provided`);return c===1?(i=r,r=a=void 0):c===2&&!r.getContext&&(a=i,i=r,r=void 0),new Promise(function(t,o){try{t(e(n.create(i,a),r,a))}catch(e){o(e)}})}try{let t=n.create(i,a);o(null,e(t,r,a))}catch(e){o(e)}}e.create=n.create,e.toCanvas=a.bind(null,r.render),e.toDataURL=a.bind(null,r.renderToDataURL),e.toString=a.bind(null,function(e,t,n){return i.render(e,n)})}))(),1);function mE(e){let t=new Intl.DateTimeFormat(e,{weekday:`short`});return[1,2,3,4,5,6,7].map(e=>({value:e,label:t.format(new Date(Date.UTC(2024,0,e)))}))}function hE(e,t,n){let r=n?[...e,t]:e.filter(e=>e!==t);return[...new Set(r)].sort((e,t)=>e-t)}function gE(e,t){return new Intl.NumberFormat(t,{style:`unit`,unit:`kilobyte`,maximumFractionDigits:0}).format(Math.max(1,Math.round(e/1024)))}function _E({onClose:e,onCreated:t}){let{t:n}=tw(),r=Yl({queryKey:[`admin`,`roles`],queryFn:()=>$.roles()}),[i,a]=(0,y.useState)({login:``,displayName:``,password:``,roleKeys:[`employee`]}),o=Xl({mutationFn:e=>$.createUser(e),onSuccess:t}),s=e=>({value:String(i[e]),onChange:t=>a(n=>({...n,[e]:t.target.value}))});return(0,N.jsxs)(ov,{open:!0,onClose:e,fullWidth:!0,children:[(0,N.jsx)(Dv,{children:n(`admin.user.create`)}),(0,N.jsxs)(vv,{children:[(0,N.jsx)(aT,{error:o.error??r.error}),(0,N.jsxs)(X,{sx:{mt:1},children:[(0,N.jsx)(Z,{autoFocus:!0,fullWidth:!0,label:n(`admin.user.login`),...s(`login`)}),(0,N.jsx)(Z,{fullWidth:!0,label:n(`admin.user.name`),sx:{mt:2},...s(`displayName`)}),(0,N.jsx)(Z,{fullWidth:!0,type:`password`,label:n(`admin.user.password`),helperText:n(`admin.user.passwordHint`),sx:{mt:2},...s(`password`)}),(0,N.jsx)(Z,{select:!0,fullWidth:!0,label:n(`admin.user.roles`),sx:{mt:2},value:i.roleKeys[0]??`employee`,onChange:e=>a(t=>({...t,roleKeys:[e.target.value]})),children:(r.data??[]).map(e=>(0,N.jsx)(Yb,{value:e.key,children:e.name},e.key))})]})]}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:e,children:n(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:o.isPending||i.login.trim()===``||i.displayName.trim()===``||i.password.length<8,onClick:()=>o.mutate(i),children:n(`common.save`)})]})]})}function vE(e,t){return new Intl.DateTimeFormat(t,{dateStyle:`short`,timeStyle:`short`}).format(new Date(e*1e3))}function yE({rules:e,disabled:t,saving:n,onChange:r,onSave:i}){let{t:a}=tw(),o=(t,n)=>r(e.map((e,r)=>r===t?{...e,...n}:e));return(0,N.jsxs)(X,{spacing:1,children:[e.map((n,i)=>(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsx)(Z,{size:`small`,type:`number`,label:a(`admin.settings.pauseFrom`),value:String(n.fromMin),onChange:e=>o(i,{fromMin:Number(e.target.value)}),disabled:t}),(0,N.jsx)(Z,{size:`small`,type:`number`,label:a(`admin.settings.pauseTo`),value:n.toMin===null?``:String(n.toMin),onChange:e=>o(i,{toMin:e.target.value===``?null:Number(e.target.value)}),disabled:t}),(0,N.jsx)(Z,{size:`small`,type:`number`,label:a(`admin.settings.pauseMinutes`),value:String(n.pauseMin),onChange:e=>o(i,{pauseMin:Number(e.target.value)}),disabled:t}),(0,N.jsx)(Ux,{checked:n.isActive!==!1,title:a(`admin.settings.pauseActive`),onChange:()=>o(i,{isActive:n.isActive===!1}),disabled:t}),(0,N.jsx)(bm,{size:`small`,title:a(`admin.backup.delete`),disabled:t,onClick:()=>r(e.filter((e,t)=>t!==i)),children:(0,N.jsx)(gT,{fontSize:`small`})})]},n.id??`new-${i}`)),(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsx)(J,{size:`small`,startIcon:(0,N.jsx)(yT,{}),disabled:t,onClick:()=>r([...e,{fromMin:360,toMin:null,pauseMin:30,isActive:!0}]),children:a(`admin.settings.pauseAdd`)}),(0,N.jsx)(J,{size:`small`,variant:`contained`,disabled:t||n,onClick:i,children:a(`admin.settings.pauseSave`)})]})]})}function bE({user:e,onClose:t}){let{t:n,i18n:r}=tw(),i=Oc(),a=e?.id??0,o=Yl({queryKey:[`admin`,`profile`,a],queryFn:()=>$.workProfile(a),enabled:e!==null}),[s,c]=(0,y.useState)({}),l=Xl({mutationFn:e=>$.saveWorkProfile(a,e),onSuccess:async()=>{c({}),await i.invalidateQueries({queryKey:[`admin`,`profile`,a]}),t()}}),u=Yl({queryKey:[`admin`,`pauseRules`,a],queryFn:()=>$.userPauseRules(a),enabled:e!==null}),[d,f]=(0,y.useState)(null),p=d??u.data??[],m=Xl({mutationFn:e=>$.saveUserPauseRules(a,e),onSuccess:async()=>{f(null),await i.invalidateQueries({queryKey:[`admin`,`pauseRules`,a]}),t()}}),h=e=>c(t=>({...t,...e})),g=o.data?{...o.data,...s}:null,_=e=>Math.round(e/60*100)/100,v=Array.from({length:7},(e,t)=>new Intl.DateTimeFormat(r.language,{weekday:`narrow`}).format(new Date(Date.UTC(2026,0,4+t)))),b=(g?.workdays??`0;1;1;1;1;1;0`).split(`;`),x=(e,t,n)=>(0,N.jsx)(Z,{fullWidth:!0,size:`small`,type:`number`,label:t,value:String(g?.[e]??0),onChange:t=>h({[e]:Number(t.target.value)}),inputProps:n?{step:n}:void 0});return(0,N.jsxs)(ov,{open:e!==null,onClose:t,fullWidth:!0,maxWidth:`sm`,children:[(0,N.jsx)(Dv,{children:n(`admin.user.profileTitle`,{name:e?.displayName??``})}),(0,N.jsxs)(vv,{children:[(0,N.jsx)(aT,{error:o.error??l.error??u.error??m.error}),o.isLoading?(0,N.jsx)(oT,{}):(0,N.jsxs)(X,{spacing:2,sx:{mt:1},children:[(0,N.jsxs)(X,{direction:`row`,spacing:2,children:[x(`percent`,n(`admin.profile.percent`)),x(`weeklyHours`,n(`admin.profile.weeklyHours`),`0.5`)]}),(0,N.jsxs)(q,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:n(`admin.profile.workdays`)}),(0,N.jsx)(X,{direction:`row`,spacing:1,sx:{alignItems:`center`,flexWrap:`wrap`},children:v.map((e,t)=>(0,N.jsxs)(X,{direction:`row`,sx:{alignItems:`center`},children:[(0,N.jsx)(c_,{size:`small`,checked:b[t]===`1`,onChange:()=>{let e=b.slice();e[t]=e[t]===`1`?`0`:`1`,h({workdays:e.join(`;`)})}}),(0,N.jsx)(K,{variant:`body2`,children:e})]},`${e}-${t}`))})]}),(0,N.jsx)(Z,{select:!0,fullWidth:!0,size:`small`,label:n(`admin.profile.overtimeModel`),value:g?.overtimeModel??`monthly`,onChange:e=>h({overtimeModel:e.target.value}),children:[`monthly`,`yearly`,`cumulative`].map(e=>(0,N.jsx)(Yb,{value:e,children:n(`admin.profile.model.${e}`)},e))}),(0,N.jsxs)(q,{children:[(0,N.jsx)(Gv,{control:(0,N.jsx)(Ux,{checked:g?.showWorkedTime===!0,onChange:e=>h({showWorkedTime:e.target.checked})}),label:n(`admin.user.workedTime`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:n(`admin.user.workedTimeHint`)})]}),(0,N.jsxs)(X,{direction:`row`,spacing:2,children:[x(`vacationPerYear`,n(`admin.profile.vacationPerYear`),`0.5`),x(`vacationCarryover`,n(`admin.profile.vacationCarryover`),`0.5`)]}),(0,N.jsxs)(X,{direction:`row`,spacing:2,children:[(0,N.jsx)(Z,{fullWidth:!0,size:`small`,type:`number`,label:n(`admin.profile.overtimeCarryover`),value:String(_(g?.overtimeCarryover??0)),onChange:e=>h({overtimeCarryover:Math.round(Number(e.target.value)*60)})}),(0,N.jsx)(Z,{fullWidth:!0,size:`small`,type:`number`,label:n(`admin.profile.vorholzeitPerYear`),value:String(_(g?.vorholzeitPerYear??0)),onChange:e=>h({vorholzeitPerYear:Math.round(Number(e.target.value)*60)})})]}),(0,N.jsx)(Z,{fullWidth:!0,size:`small`,type:`number`,label:n(`admin.profile.pausePaid`),helperText:n(`admin.profile.pausePaidHint`),value:String(g?.pausePaidMinutes??0),onChange:e=>h({pausePaidMinutes:Math.max(0,Math.round(Number(e.target.value)))})}),(0,N.jsxs)(q,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:n(`admin.profile.pauseRules`)}),(0,N.jsx)(K,{variant:`caption`,color:`text.secondary`,display:`block`,sx:{mb:1},children:n(`admin.profile.pauseRulesHint`)}),(0,N.jsx)(yE,{rules:p,disabled:!1,saving:m.isPending,onChange:f,onSave:()=>m.mutate(p)})]})]})]}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:t,children:n(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:l.isPending||Object.keys(s).length===0,onClick:()=>l.mutate(s),children:n(`common.save`)})]})]})}function xE({language:e}){let{t}=tw(),{permissions:n}=Ww(),r=Oc(),i=Gw(n,`user.edit`),a=Gw(n,`user.create`),[o,s]=(0,y.useState)(!1),[c,l]=(0,y.useState)(null),[u,d]=(0,y.useState)(``),[f,p]=(0,y.useState)(null),[m,h]=(0,y.useState)(null),[g,_]=(0,y.useState)(null),[v,b]=(0,y.useState)(null),x=Gw(n,`user.manage_roles`),S=Yl({queryKey:[`admin`,`users`],queryFn:()=>$.users(!0)}),C=async()=>{await r.invalidateQueries({queryKey:[`admin`,`users`]})},w=Xl({mutationFn:({id:e,patch:t})=>$.updateUser(e,t),onSuccess:C}),T=Xl({mutationFn:({id:e,value:t})=>$.setPin(e,t),onSuccess:async()=>{l(null),d(``),await C()}}),E=Xl({mutationFn:({id:e,value:t})=>$.updateUser(e,{avatar:t}),onSuccess:async()=>{p(null),h(null),await C()}});return S.isLoading?(0,N.jsx)(oT,{}):(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:S.error??w.error??T.error??E.error}),a&&(0,N.jsx)(q,{sx:{mb:2},children:(0,N.jsx)(J,{variant:`contained`,startIcon:(0,N.jsx)(RT,{}),onClick:()=>s(!0),children:t(`admin.user.create`)})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Gy,{dense:!0,children:[(S.data??[]).map(e=>(0,N.jsx)(rT,{primary:`${e.displayName} (${e.login})`,secondary:(0,N.jsxs)(X,{direction:`row`,spacing:.5,sx:{mt:.5},children:[e.roles.map(e=>(0,N.jsx)(rh,{size:`small`,label:e},e)),!e.isActive&&(0,N.jsx)(rh,{size:`small`,color:`default`,label:t(`admin.user.inactive`)})]}),children:i&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(J,{size:`small`,startIcon:(0,N.jsx)(LT,{}),onClick:()=>{l(e),d(``)},children:t(`admin.user.pin`)}),(0,N.jsx)(J,{size:`small`,onClick:()=>{p(e),h(null)},children:t(`admin.user.photo`)}),(0,N.jsx)(J,{size:`small`,onClick:()=>b(e),children:t(`admin.user.profile`)}),x&&(0,N.jsx)(J,{size:`small`,onClick:()=>_(e),children:t(`admin.user.roles`)}),(0,N.jsx)(Ux,{checked:e.isActive,title:t(e.isActive?`admin.user.active`:`admin.user.inactive`),onChange:()=>w.mutate({id:e.id,patch:{isActive:!e.isActive}})})]})},e.id)),(S.data??[]).length===0&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{secondary:t(`admin.user.empty`)})})]})}),(0,N.jsx)(bE,{user:v,onClose:()=>b(null)}),(0,N.jsxs)(ov,{open:c!==null,onClose:()=>l(null),children:[(0,N.jsx)(Dv,{children:t(`admin.user.pinTitle`,{name:c?.displayName??``})}),(0,N.jsx)(vv,{children:(0,N.jsx)(Z,{autoFocus:!0,fullWidth:!0,inputMode:`numeric`,label:t(`admin.user.newPin`),helperText:t(`admin.user.pinHint`),value:u,onChange:e=>d(e.target.value.replace(/\D/g,``).slice(0,8)),sx:{mt:1}})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>l(null),children:t(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:u.length<4||T.isPending,onClick:()=>c&&T.mutate({id:c.id,value:u}),children:t(`common.save`)})]})]}),(0,N.jsxs)(ov,{open:f!==null,onClose:()=>p(null),children:[(0,N.jsx)(Dv,{children:t(`admin.user.photoTitle`,{name:f?.displayName??``})}),(0,N.jsx)(vv,{children:(0,N.jsxs)(X,{spacing:2,sx:{mt:1},children:[(0,N.jsx)(`img`,{src:m??f?.avatarUrl??`/person.png`,alt:``,width:96,height:96,style:{objectFit:`cover`,borderRadius:8}}),(0,N.jsx)(NE,{label:t(`admin.user.photoChoose`),maxBytes:lT,hint:t(`admin.user.photoHint`),onChange:e=>h(e)})]})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>p(null),children:t(`common.cancel`)}),(0,N.jsx)(J,{disabled:f?.avatarUrl===null||f?.avatarUrl===void 0,onClick:()=>f&&E.mutate({id:f.id,value:null}),children:t(`admin.user.photoRemove`)}),(0,N.jsx)(J,{variant:`contained`,disabled:m===null||E.isPending,onClick:()=>f&&E.mutate({id:f.id,value:m}),children:t(`common.save`)})]})]}),g&&(0,N.jsx)(EE,{user:g,onClose:()=>_(null),onSaved:e=>{w.mutate({id:g.id,patch:{roleKeys:e}}),_(null)}}),o&&(0,N.jsx)(_E,{language:e,onClose:()=>s(!1),onCreated:async()=>{s(!1),await C()}})]})}function SE({onClose:e,onCreated:t}){let{t:n}=tw(),r=Yl({queryKey:[`admin`,`users`,`active`],queryFn:()=>$.users(!1)}),[i,a]=(0,y.useState)(``),[o,s]=(0,y.useState)(``),[c,l]=(0,y.useState)(!0),[u,d]=(0,y.useState)([]),f=Xl({mutationFn:()=>$.createTerminal({name:i.trim(),...o.trim()?{location:o.trim()}:{},pinRequired:c,userIds:u}),onSuccess:t});return(0,N.jsxs)(ov,{open:!0,onClose:e,fullWidth:!0,children:[(0,N.jsx)(Dv,{children:n(`admin.terminal.create`)}),(0,N.jsx)(vv,{children:(0,N.jsxs)(X,{spacing:2,sx:{mt:1},children:[(0,N.jsx)(Z,{label:n(`admin.terminal.name`),value:i,onChange:e=>a(e.target.value),fullWidth:!0,autoFocus:!0}),(0,N.jsx)(Z,{label:n(`admin.terminal.location`),value:o,onChange:e=>s(e.target.value),fullWidth:!0}),(0,N.jsxs)(X,{direction:`row`,spacing:1,alignItems:`center`,children:[(0,N.jsx)(Ux,{checked:c,onChange:(e,t)=>l(t)}),(0,N.jsx)(K,{children:n(`admin.terminal.pinRequired`)})]}),(0,N.jsx)(K,{variant:`subtitle2`,children:n(`admin.terminal.users`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:n(`admin.terminal.usersHint`)}),(0,N.jsx)(CE,{users:r.data??[],chosen:u,onChange:d}),(0,N.jsx)(aT,{error:f.error})]})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:e,children:n(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:i.trim().length===0||f.isPending,onClick:()=>f.mutate(),children:n(`admin.terminal.create`)})]})]})}function CE({users:e,chosen:t,onChange:n}){return(0,N.jsx)(q,{sx:{maxHeight:240,overflowY:`auto`},children:(0,N.jsx)(X,{spacing:.5,children:e.map(e=>(0,N.jsxs)(X,{direction:`row`,spacing:1,sx:{alignItems:`center`},children:[(0,N.jsx)(Ux,{checked:t.includes(e.id),inputProps:{"aria-label":e.displayName},onChange:(r,i)=>n(i?[...new Set([...t,e.id])]:t.filter(t=>t!==e.id))}),(0,N.jsx)(K,{children:e.displayName})]},e.id))})})}function wE({terminal:e,onClose:t,onSaved:n}){let{t:r}=tw(),i=Yl({queryKey:[`admin`,`users`,`active`],queryFn:()=>$.users(!1)}),[a,o]=(0,y.useState)(e.userIds),s=Xl({mutationFn:()=>$.setTerminalUsers(e.id,a),onSuccess:n});return(0,N.jsxs)(ov,{open:!0,onClose:t,fullWidth:!0,children:[(0,N.jsx)(Dv,{children:`${r(`admin.terminal.users`)} · ${e.name}`}),(0,N.jsx)(vv,{children:(0,N.jsxs)(X,{spacing:1,sx:{mt:1},children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:r(`admin.terminal.usersHint`)}),(0,N.jsx)(CE,{users:i.data??[],chosen:a,onChange:o}),(0,N.jsx)(aT,{error:i.error??s.error})]})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:t,children:r(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:s.isPending,onClick:()=>s.mutate(),children:r(`common.save`)})]})]})}function TE({language:e}){let{t}=tw(),n=Oc(),r=Yl({queryKey:[`admin`,`terminals`],queryFn:()=>$.terminals()}),i=Yl({queryKey:[`admin`,`users`,`active`],queryFn:()=>$.users(!1)}),[a,o]=(0,y.useState)(!1),[s,c]=(0,y.useState)(null),[l,u]=(0,y.useState)(null),[d,f]=(0,y.useState)(null),p=Xl({mutationFn:e=>$.revokeTerminal(e),onSuccess:async()=>{c(null),await n.invalidateQueries({queryKey:[`admin`,`terminals`]})}}),m=d?`${window.location.origin}/terminal?token=${encodeURIComponent(d.deviceToken)}`:``,h=d?`${window.location.origin}/presence?token=${encodeURIComponent(d.deviceToken)}`:``,g=`${t(`common.none`)}`,_=n=>{let r=n.userIds.length===0?t(`admin.terminal.usersAll`):(i.data??[]).filter(e=>n.userIds.includes(e.id)).map(e=>e.displayName).join(`, `)||t(`admin.terminal.usersAll`);return[n.location||g,vE(n.createdAt,e),r].join(` · `)};return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:r.error??p.error}),d&&(0,N.jsxs)(Nm,{severity:`success`,sx:{mb:2},children:[(0,N.jsx)(K,{variant:`body2`,gutterBottom:!0,children:t(`admin.terminal.tokenOnce`)}),(0,N.jsx)(K,{variant:`body2`,sx:{fontFamily:`monospace`,wordBreak:`break-all`},gutterBottom:!0,children:d.deviceToken}),(0,N.jsx)(K,{variant:`body2`,gutterBottom:!0,children:t(`admin.terminal.url`)}),(0,N.jsx)(K,{variant:`body2`,sx:{fontFamily:`monospace`,wordBreak:`break-all`},children:m}),(0,N.jsxs)(K,{variant:`body2`,sx:{mt:1},children:[t(`presence.title`),`:`]}),(0,N.jsx)(K,{variant:`body2`,sx:{fontFamily:`monospace`,wordBreak:`break-all`},children:h})]}),(0,N.jsx)(q,{sx:{mb:2},children:(0,N.jsx)(J,{variant:`contained`,startIcon:(0,N.jsx)(zT,{}),disabled:a,onClick:()=>o(!0),children:t(`admin.terminal.create`)})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Gy,{dense:!0,children:[(r.data??[]).map(e=>(0,N.jsx)(rT,{primary:(0,N.jsxs)(X,{direction:`row`,spacing:1,alignItems:`center`,sx:{flexWrap:`wrap`,gap:1},children:[(0,N.jsx)(K,{children:e.name}),e.pinRequired&&(0,N.jsx)(rh,{size:`small`,label:t(`admin.terminal.pinRequired`)}),!e.isActive&&(0,N.jsx)(rh,{size:`small`,variant:`outlined`,label:t(`admin.terminal.revoked`)})]}),secondary:_(e),children:e.isActive&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(J,{size:`small`,onClick:()=>u(e),children:t(`admin.terminal.users`)}),(0,N.jsx)(J,{size:`small`,color:`error`,onClick:()=>c(e),children:t(`admin.terminal.revoke`)})]})},e.id)),r.isLoading&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{secondary:t(`common.loading`)})}),!r.isLoading&&(r.data??[]).length===0&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{secondary:t(`admin.terminal.empty`)})})]})}),l&&(0,N.jsx)(wE,{terminal:l,onClose:()=>u(null),onSaved:async()=>{u(null),await n.invalidateQueries({queryKey:[`admin`,`terminals`]})}}),a&&(0,N.jsx)(SE,{onClose:()=>o(!1),onCreated:async e=>{o(!1),f(e),await n.invalidateQueries({queryKey:[`admin`,`terminals`]})}}),s&&(0,N.jsxs)(ov,{open:!0,onClose:()=>c(null),children:[(0,N.jsx)(Dv,{children:t(`admin.terminal.revoke`)}),(0,N.jsx)(vv,{children:t(`admin.terminal.confirmRevoke`,{name:s.name})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>c(null),children:t(`common.cancel`)}),(0,N.jsx)(J,{color:`error`,variant:`contained`,disabled:p.isPending,onClick:()=>p.mutate(s.id),children:t(`admin.terminal.revoke`)})]})]})]})}function EE({user:e,onClose:t,onSaved:n}){let{t:r}=tw(),i=Yl({queryKey:[`admin`,`roles`],queryFn:()=>$.roles()}),[a,o]=(0,y.useState)(e.roles),s=(e,t)=>o(n=>t?[...new Set([...n,e])]:n.filter(t=>t!==e));return(0,N.jsxs)(ov,{open:!0,onClose:t,fullWidth:!0,children:[(0,N.jsx)(Dv,{children:r(`admin.user.roles`)}),(0,N.jsx)(vv,{children:(0,N.jsx)(X,{spacing:1,sx:{mt:1},children:(i.data??[]).map(e=>(0,N.jsxs)(X,{direction:`row`,spacing:1,alignItems:`center`,children:[(0,N.jsx)(Ux,{checked:a.includes(e.key),onChange:(t,n)=>s(e.key,n)}),(0,N.jsx)(K,{children:e.name})]},e.key))})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:t,children:r(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:a.length===0,onClick:()=>n(a),children:r(`common.save`)})]})]})}function DE({language:e}){let{t}=tw(),n=Oc(),[r,i]=(0,y.useState)(String(new Date().getFullYear())),[a,o]=(0,y.useState)(``),[s,c]=(0,y.useState)(``),[l,u]=(0,y.useState)(``),d=Yl({queryKey:[`admin`,`holidays`,r],queryFn:()=>$.holidays(Number(r))}),f=async()=>{await n.invalidateQueries({queryKey:[`admin`,`holidays`,r]})},p=Xl({mutationFn:()=>$.createHoliday({date:a.trim(),name:s.trim(),...l.trim()?{region:l.trim()}:{}}),onSuccess:async()=>{o(``),c(``),u(``),await f()}}),m=Xl({mutationFn:e=>$.deleteHoliday(e),onSuccess:f}),h=/^\d{4}-\d{2}-\d{2}$/.test(a.trim())&&s.trim().length>0;return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:d.error??p.error??m.error}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,sx:{mt:1},children:[(0,N.jsx)(Z,{label:t(`admin.holiday.year`),value:r,onChange:e=>i(e.target.value.replace(/\D/g,``).slice(0,4)),sx:{width:140}}),(0,N.jsx)(Z,{label:t(`admin.holiday.date`),value:a,onChange:e=>o(e.target.value)}),(0,N.jsx)(Z,{label:t(`admin.holiday.name`),value:s,onChange:e=>c(e.target.value),fullWidth:!0}),(0,N.jsx)(Z,{label:t(`admin.holiday.region`),value:l,onChange:e=>u(e.target.value),sx:{width:200}})]}),(0,N.jsx)(q,{sx:{mt:2},children:(0,N.jsx)(J,{variant:`contained`,disabled:!h||p.isPending,onClick:()=>p.mutate(),children:t(`admin.holiday.add`)})})]})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Gy,{dense:!0,children:[(d.data??[]).map(n=>(0,N.jsx)(rT,{primary:`${lw(n.date,e)} · ${n.key?t(`holiday.${n.key}`,{defaultValue:n.name}):n.name}`,secondary:n.region??t(`common.none`),children:(0,N.jsx)(J,{size:`small`,color:`error`,onClick:()=>m.mutate(n.id),children:t(`admin.tag.delete`)})},n.id)),!d.isLoading&&(d.data??[]).length===0&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{secondary:t(`admin.holiday.empty`)})})]})})]})}function OE({tag:e,onClose:t,onSaved:n}){let{t:r}=tw(),i=Yl({queryKey:[`admin`,`users`],queryFn:()=>$.users()}),[a,o]=(0,y.useState)(e.userId===null?``:String(e.userId)),[s,c]=(0,y.useState)(e.label??``),[l,u]=(0,y.useState)(``),d=l.trim()===``?void 0:Number(l),f=!a||d!==void 0&&(!Number.isInteger(d)||d<=0),p=Xl({mutationFn:()=>$.updateTag(e.id,{userId:Number(a),label:s.trim()?s.trim():null,...d===void 0?{}:{ttlDays:d}}),onSuccess:n}),m=Xl({mutationFn:()=>$.reissueTagLink(e.id),onSuccess:n});return(0,N.jsxs)(ov,{open:!0,onClose:t,fullWidth:!0,children:[(0,N.jsx)(Dv,{children:`${r(`admin.tag.editTitle`)} · ${e.label??e.uid}`}),(0,N.jsx)(vv,{children:(0,N.jsxs)(X,{spacing:2,sx:{mt:1},children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:r(`admin.tag.editHint`)}),(0,N.jsx)(Z,{select:!0,label:r(`admin.tag.user`),value:a,onChange:e=>o(e.target.value),children:(i.data??[]).map(e=>(0,N.jsx)(Yb,{value:String(e.id),children:`${e.displayName} (${e.login})`},e.id))}),(0,N.jsx)(Z,{label:r(`admin.tag.label`),value:s,onChange:e=>c(e.target.value)}),(0,N.jsx)(Z,{label:r(`admin.tag.validityDays`),type:`number`,value:l,onChange:e=>u(e.target.value)}),(0,N.jsx)(aT,{error:i.error??p.error??m.error})]})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>m.mutate(),disabled:m.isPending,sx:{mr:`auto`},children:r(`admin.tag.reissue`)}),(0,N.jsx)(J,{onClick:t,children:r(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:f||p.isPending,onClick:()=>p.mutate(),children:r(`common.save`)})]})]})}function kE({language:e}){let{t}=tw(),n=Oc(),r=Yl({queryKey:[`admin`,`tags`],queryFn:()=>$.rfidTags()}),i=Yl({queryKey:[`admin`,`users`],queryFn:()=>$.users()}),[a,o]=(0,y.useState)(``),[s,c]=(0,y.useState)(``),[l,u]=(0,y.useState)(null),[d,f]=(0,y.useState)(null),[p,m]=(0,y.useState)(null),h=async()=>{await n.invalidateQueries({queryKey:[`admin`,`tags`]})},g=e=>`${window.location.origin}/?tag=${e}`,_=(e,t)=>{u({token:e,url:g(e),reissued:t})};(0,y.useEffect)(()=>{if(!l){f(null);return}let e=!1;return pE.toDataURL(l.url,{margin:1,width:240}).then(t=>{e||f(t)}).catch(()=>{e||f(null)}),()=>{e=!0}},[l]);let v=Xl({mutationFn:()=>$.createTag({userId:Number(a),...s.trim()?{label:s.trim()}:{}}),onSuccess:async e=>{_(e.token,!1),c(``),await h()}}),b=Xl({mutationFn:e=>$.deleteTag(e),onSuccess:h}),x=Xl({mutationFn:e=>$.deleteTagPermanently(e),onSuccess:h}),S=e=>(i.data??[]).find(t=>t.id===e)?.displayName??`#${e}`;return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:r.error??v.error??b.error??x.error}),l&&(0,N.jsxs)(Nm,{severity:`success`,sx:{mb:2},children:[(0,N.jsx)(K,{variant:`body2`,gutterBottom:!0,children:t(`admin.tag.linkOnce`)}),(0,N.jsx)(K,{variant:`body2`,sx:{fontFamily:`monospace`,wordBreak:`break-all`},children:l.url}),d&&(0,N.jsx)(q,{sx:{mt:1.5},children:(0,N.jsx)(`img`,{src:d,alt:t(`admin.tag.qrAlt`),width:200,height:200,style:{display:`block`,borderRadius:4}})}),l.reissued&&(0,N.jsx)(K,{variant:`body2`,sx:{mt:1},children:t(`admin.tag.oldLinkDead`)})]}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsx)(Wg,{children:(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,sx:{mt:1},children:[(0,N.jsx)(Z,{select:!0,label:t(`admin.tag.user`),value:a,onChange:e=>o(e.target.value),sx:{minWidth:220},children:(i.data??[]).map(e=>(0,N.jsx)(Yb,{value:String(e.id),children:`${e.displayName} (${e.login})`},e.id))}),(0,N.jsx)(Z,{label:t(`admin.tag.label`),value:s,onChange:e=>c(e.target.value),fullWidth:!0}),(0,N.jsx)(J,{variant:`contained`,disabled:!a||v.isPending,onClick:()=>v.mutate(),children:t(`admin.tag.create`)})]})})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Gy,{dense:!0,children:[(r.data??[]).map(n=>{let r=n.expiresAt!==null&&n.expiresAt*1e3<Date.now(),i=n.isActive===!1?t(`admin.tag.revoked`):t(r?`admin.tag.expired`:`admin.tag.active`),a=n.expiresAt?vE(n.expiresAt,e):t(`common.none`),o=n.lastUsedAt?vE(n.lastUsedAt,e):t(`common.none`);return(0,N.jsxs)(rT,{primary:`${n.label??n.uid??`#${n.id}`} · ${S(n.userId)}`,secondary:`${i} · ${t(`admin.tag.lastUsed`)}: ${o} · ${n.uid??t(`common.none`)} · ${a}`,children:[(0,N.jsx)(J,{size:`small`,onClick:()=>m(n),children:t(`admin.tag.edit`)}),n.isActive!==!1&&(0,N.jsx)(J,{size:`small`,color:`error`,onClick:()=>b.mutate(n.id),children:t(`admin.tag.delete`)}),n.isActive===!1&&(0,N.jsx)(J,{size:`small`,color:`error`,onClick:()=>x.mutate(n.id),children:t(`admin.tag.remove`)})]},n.id)}),!r.isLoading&&(r.data??[]).length===0&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{secondary:t(`admin.tag.empty`)})})]})}),p&&(0,N.jsx)(OE,{tag:p,onClose:()=>m(null),onSaved:async e=>{m(null),e.token&&_(e.token,!0),await h()}})]})}function AE({language:e}){let{t}=tw(),{permissions:n}=Ww(),r=Gw(n,`settings.edit`),i=Oc(),a=Yl({queryKey:[`admin`,`triggerRules`],queryFn:()=>$.triggerRules()}),o=Yl({queryKey:[`admin`,`users`],queryFn:()=>$.users()}),[s,c]=(0,y.useState)(null),l=s??a.data??[],u=Xl({mutationFn:e=>$.saveTriggerRules(e),onSuccess:async()=>{c(null),await i.invalidateQueries({queryKey:[`admin`,`triggerRules`]})}}),d=(e,t)=>c(l.map((n,r)=>r===e?{...n,...t}:n)),f=n=>n.lastFiredAt?`${t(`admin.trigger.lastFired`)}: ${vE(n.lastFiredAt,e)}`:t(`common.none`);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:a.error??u.error}),u.isSuccess&&(0,N.jsx)(Nm,{severity:`success`,sx:{mb:2},children:t(`admin.settings.saved`)}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`subtitle1`,gutterBottom:!0,children:t(`admin.triggers`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,gutterBottom:!0,children:t(`admin.triggersHint`)}),(0,N.jsxs)(X,{spacing:2,children:[l.map((e,n)=>(0,N.jsxs)(X,{spacing:1,sx:{border:1,borderColor:`divider`,borderRadius:1,p:1},children:[(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsx)(Z,{size:`small`,label:t(`admin.trigger.label`),value:e.label??``,onChange:e=>d(n,{label:e.target.value}),disabled:!r,sx:{minWidth:160}}),(0,N.jsx)(Z,{size:`small`,label:t(`admin.trigger.sourceState`),value:e.sourceState,onChange:e=>d(n,{sourceState:e.target.value}),disabled:!r,sx:{minWidth:260}}),(0,N.jsxs)(Z,{select:!0,size:`small`,label:t(`admin.trigger.mode`),value:e.mode??`condition`,onChange:e=>d(n,{mode:e.target.value}),disabled:!r,sx:{minWidth:200},children:[(0,N.jsx)(Yb,{value:`condition`,children:t(`admin.trigger.modeCondition`)}),(0,N.jsx)(Yb,{value:`user`,children:t(`admin.trigger.modeUser`)})]}),(e.mode??`condition`)===`condition`&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(Z,{size:`small`,label:t(`admin.trigger.condition`),helperText:t(`admin.trigger.conditionHint`),value:e.condition??``,onChange:e=>d(n,{condition:e.target.value}),disabled:!r,sx:{minWidth:170}}),(0,N.jsx)(Z,{select:!0,size:`small`,label:t(`admin.trigger.user`),value:e.userId===null||e.userId===void 0?``:String(e.userId),onChange:e=>d(n,{userId:e.target.value===``?null:Number(e.target.value)}),disabled:!r,sx:{minWidth:190},children:(o.data??[]).map(e=>(0,N.jsx)(Yb,{value:String(e.id),children:e.displayName},e.id))})]}),(0,N.jsxs)(Z,{select:!0,size:`small`,label:t(`admin.trigger.action`),value:e.action??`punch`,onChange:e=>d(n,{action:e.target.value}),disabled:!r,sx:{minWidth:230},children:[(0,N.jsx)(Yb,{value:`punch`,children:t(`admin.trigger.actionPunch`)}),(0,N.jsx)(Yb,{value:`quickPunch`,children:t(`admin.trigger.actionQuickPunch`)}),(0,N.jsx)(Yb,{value:`present`,children:t(`admin.trigger.actionPresent`)}),(0,N.jsx)(Yb,{value:`absent`,children:t(`admin.trigger.actionAbsent`)})]}),(0,N.jsx)(Z,{size:`small`,type:`number`,label:t(`admin.trigger.cooldown`),value:String(e.cooldownSec??0),onChange:e=>d(n,{cooldownSec:Number(e.target.value)}),disabled:!r,sx:{maxWidth:140}}),(0,N.jsx)(Ux,{checked:e.isActive!==!1,title:t(`admin.trigger.active`),onChange:()=>d(n,{isActive:e.isActive===!1}),disabled:!r}),(0,N.jsx)(bm,{size:`small`,title:t(`admin.tag.delete`),disabled:!r,onClick:()=>c(l.filter((e,t)=>t!==n)),children:(0,N.jsx)(gT,{fontSize:`small`})})]}),(0,N.jsx)(K,{variant:`caption`,color:`text.secondary`,children:f(e)})]},e.id??`new-${n}`)),(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsx)(J,{size:`small`,startIcon:(0,N.jsx)(yT,{}),disabled:!r,onClick:()=>c([...l,{sourceState:``,mode:`condition`,condition:`true`,action:`punch`,isActive:!0,cooldownSec:0}]),children:t(`admin.trigger.add`)}),(0,N.jsx)(J,{size:`small`,variant:`contained`,disabled:!r||u.isPending||s===null,onClick:()=>u.mutate(l),children:t(`common.save`)})]}),!a.isLoading&&l.length===0&&(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:t(`admin.trigger.empty`)})]})]})})]})}function jE({rules:e,runs:t,people:n,disabled:r,saving:i,onChange:a,onSave:o,language:s}){let{t:c}=tw(),[l,u]=(0,y.useState)(null),[d,f]=(0,y.useState)(null),[p,m]=(0,y.useState)(!1),h=(t,n)=>{f(n?{...n}:{...e[t]}),m(n!==void 0),u(t)},g=e=>c(`admin.automation.kind${e.charAt(0).toUpperCase()}${e.slice(1)}`),_=e=>{let t=mE(s);return e.length>=7?c(`admin.automation.repeatDay`):e.map(e=>t.find(t=>t.value===e)?.label??String(e)).join(`, `)},v=(t,n)=>a(e.map((e,r)=>r===t?{...e,...n}:e)),b=()=>{l!==null&&d&&v(l,d),u(null),f(null)},x=e=>{let t=e??0;return`${String(Math.floor(t/60)).padStart(2,`0`)}:${String(t%60).padStart(2,`0`)}`},S=e=>{let t=/^(\d{1,2}):(\d{2})$/.exec(e.trim());if(!t)return null;let n=Number(t[1]),r=Number(t[2]);return n>=0&&n<=23&&r>=0&&r<=59?n*60+r:null},C=e=>n.find(t=>t.id===e)?.displayName??`#${e}`;return(0,N.jsx)(Y,{sx:{mb:2},"data-testid":`automation-rules`,children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`subtitle1`,gutterBottom:!0,children:c(`admin.settings.automations`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,gutterBottom:!0,children:c(`admin.settings.automationsHint`)}),(0,N.jsxs)(X,{spacing:1,children:[e.map((t,n)=>(0,N.jsxs)(rT,{primary:t.label?.trim()?t.label:g(t.kind),secondary:[g(t.kind),t.kind===`breakReminder`?`${c(`admin.automation.after`)} ${t.afterMinutes??360}`:x(t.atMinute),t.userId===null||t.userId===void 0?c(`admin.automation.allUsers`):C(t.userId),_(t.weekdays??[1,2,3,4,5,6,7]),c(t.repeat===`week`?`admin.automation.repeatWeek`:`admin.automation.repeatDay`)].join(` · `),children:[(0,N.jsx)(J,{size:`small`,disabled:r,color:t.isActive===!1?`inherit`:`primary`,onClick:()=>v(n,{isActive:t.isActive===!1}),children:c(`admin.trigger.active`)}),(0,N.jsx)(J,{size:`small`,disabled:r,onClick:()=>h(n),children:c(`admin.automation.edit`)}),(0,N.jsx)(bm,{size:`small`,title:c(`admin.tag.delete`),disabled:r,onClick:()=>a(e.filter((e,t)=>t!==n)),children:(0,N.jsx)(gT,{fontSize:`small`})})]},t.id??`new-${n}`)),(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsx)(J,{size:`small`,startIcon:(0,N.jsx)(yT,{}),disabled:r,onClick:()=>{let t={kind:`clockOut`,atMinute:1200,userId:null,weekdays:[1,2,3,4,5,6,7],repeat:`day`,isActive:!0};a([...e,t]),h(e.length,t)},children:c(`admin.automation.add`)}),(0,N.jsx)(J,{size:`small`,variant:`contained`,disabled:r||i,onClick:o,children:c(`admin.automation.save`)})]}),e.length===0&&(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:c(`admin.automation.empty`)})]}),(0,N.jsxs)(ov,{open:d!==null,onClose:()=>{u(null),f(null)},fullWidth:!0,maxWidth:`sm`,children:[(0,N.jsx)(Dv,{children:c(p?`admin.automation.newTitle`:`admin.automation.editTitle`)}),(0,N.jsx)(vv,{children:d&&(0,N.jsxs)(X,{spacing:1.5,sx:{mt:1},children:[(0,N.jsx)(Z,{size:`small`,label:c(`admin.trigger.label`),value:d.label??``,onChange:e=>f({...d,label:e.target.value}),disabled:r,fullWidth:!0}),(0,N.jsxs)(Z,{select:!0,size:`small`,label:c(`admin.automation.kind`),value:d.kind,onChange:e=>f({...d,kind:e.target.value}),disabled:r,fullWidth:!0,children:[(0,N.jsx)(Yb,{value:`clockIn`,children:c(`admin.automation.kindClockIn`)}),(0,N.jsx)(Yb,{value:`clockOut`,children:c(`admin.automation.kindClockOut`)}),(0,N.jsx)(Yb,{value:`missingPunch`,children:c(`admin.automation.kindMissingPunch`)}),(0,N.jsx)(Yb,{value:`breakReminder`,children:c(`admin.automation.kindBreakReminder`)})]}),d.kind===`breakReminder`?(0,N.jsx)(Z,{size:`small`,type:`number`,label:c(`admin.automation.after`),value:String(d.afterMinutes??360),onChange:e=>f({...d,afterMinutes:Number(e.target.value)}),disabled:r,fullWidth:!0}):(0,N.jsx)(Z,{size:`small`,label:c(`admin.automation.at`),helperText:c(`admin.automation.atHint`),value:x(d.atMinute),onChange:e=>{let t=S(e.target.value);t!==null&&f({...d,atMinute:t})},disabled:r,fullWidth:!0}),(0,N.jsxs)(Z,{select:!0,size:`small`,label:c(`admin.automation.user`),value:d.userId===null||d.userId===void 0?``:String(d.userId),onChange:e=>f({...d,userId:e.target.value===``?null:Number(e.target.value)}),disabled:r,fullWidth:!0,children:[(0,N.jsx)(Yb,{value:``,children:c(`admin.automation.allUsers`)}),n.map(e=>(0,N.jsx)(Yb,{value:String(e.id),children:e.displayName},e.id))]}),(0,N.jsxs)(q,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:c(`admin.automation.weekdays`)}),(0,N.jsx)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:mE(s).map(e=>(0,N.jsx)(Gv,{control:(0,N.jsx)(c_,{size:`small`,checked:d.weekdays?.includes(e.value)??!0,onChange:t=>f({...d,weekdays:hE(d.weekdays??[1,2,3,4,5,6,7],e.value,t.target.checked)}),disabled:r}),label:e.label},e.value))})]}),(0,N.jsxs)(X,{direction:`row`,spacing:1,useFlexGap:!0,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,N.jsxs)(Z,{select:!0,size:`small`,label:c(`admin.automation.repeat`),value:d.repeat??`day`,onChange:e=>f({...d,repeat:e.target.value}),disabled:r,sx:{minWidth:190},children:[(0,N.jsx)(Yb,{value:`day`,children:c(`admin.automation.repeatDay`)}),(0,N.jsx)(Yb,{value:`week`,children:c(`admin.automation.repeatWeek`)})]}),(0,N.jsx)(J,{size:`small`,color:d.isActive===!1?`inherit`:`primary`,onClick:()=>f({...d,isActive:d.isActive===!1}),disabled:r,children:c(`admin.trigger.active`)})]})]})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>{u(null),f(null)},children:c(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,onClick:b,disabled:d===null,children:c(`common.save`)})]})]}),t.length>0&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(K,{variant:`subtitle2`,sx:{mt:2},children:c(`admin.automation.runs`)}),(0,N.jsx)(Gy,{dense:!0,children:t.map((e,t)=>(0,N.jsx)(ob,{disableGutters:!0,children:(0,N.jsx)(pb,{primary:`${vE(e.firedAt,s)} · ${C(e.userId)}`,secondary:e.action})},`${e.ruleId}-${e.userId}-${e.period}-${t}`))})]})]})})}function ME(e){return e===`type`?`admin.brand.imageType`:e===`tooLarge`?`admin.brand.imageTooLarge`:`admin.brand.imageUnreadable`}function NE({label:e,maxBytes:t,hint:n,onChange:r,disabled:i}){let{t:a,i18n:o}=tw(),[s,c]=(0,y.useState)(null),[l,u]=(0,y.useState)(``);return(0,N.jsxs)(X,{spacing:1,children:[(0,N.jsxs)(J,{variant:`outlined`,component:`label`,disabled:i===!0,sx:{alignSelf:`flex-start`},children:[e,(0,N.jsx)(`input`,{hidden:!0,type:`file`,accept:`image/png,image/jpeg,image/webp,image/gif`,onChange:e=>{let n=e.target.files?.[0];e.target.value=``,n&&(c(null),u(``),hT(n,t).then(e=>{if(!e.ok){c(e.problem);return}r(e.image.dataUrl),e.image.resized&&u(a(`admin.brand.imageResized`,{size:gE(e.image.bytes,o.language)}))}))}})]}),n&&(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:n}),l&&(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:l}),s&&(0,N.jsx)(Nm,{severity:`warning`,children:a(ME(s))})]})}function PE({label:e,value:t,maxBytes:n,onChange:r,disabled:i}){let{t:a}=tw();return(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,sx:{alignItems:{sm:`center`}},children:[(0,N.jsx)(NE,{label:e,maxBytes:n,onChange:r,disabled:i}),t!==``&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(q,{component:`img`,src:t,alt:``,sx:{height:40,maxWidth:160,objectFit:`contain`,border:1,borderColor:`divider`}}),(0,N.jsx)(J,{color:`inherit`,title:a(`admin.settings.brandImageRemove`),disabled:i,onClick:()=>r(``),children:a(`admin.settings.brandImageRemove`)})]})]})}var FE={pause_mode:`admin.settings.pauseModeTitle`};function IE({settingKey:e,value:t,disabled:n,onChange:r,fullLine:i=!1}){let{t:a}=tw(),o=FE[e]??`admin.settings.setting.${e}`;return(0,N.jsx)(Z,{label:a(o,{defaultValue:e}),helperText:e,value:t,onChange:e=>r(e.target.value),disabled:n,size:`small`,fullWidth:!0,...i?{sx:{gridColumn:{xs:`auto`,md:`1 / -1`}}}:{}})}function LE(){let{t:e,i18n:t}=tw(),{permissions:n}=Ww(),r=Gw(n,`settings.edit`),i=Oc(),a=Yl({queryKey:[`admin`,`settings`],queryFn:()=>$.settings()}),o=Yl({queryKey:[`admin`,`pauseRules`],queryFn:()=>$.pauseRules()}),s=Yl({queryKey:[`branding`],queryFn:()=>$.branding()}),[c,l]=(0,y.useState)({}),[u,d]=(0,y.useState)(null),f=u??o.data??[],p=Xl({mutationFn:e=>$.savePauseRules(e),onSuccess:async()=>{d(null),await i.invalidateQueries({queryKey:[`admin`,`pauseRules`]})}}),m=Yl({queryKey:[`admin`,`users`],queryFn:()=>$.users()}),h=Yl({queryKey:[`admin`,`automations`],queryFn:()=>$.automationRules()}),g=Yl({queryKey:[`admin`,`automationRuns`],queryFn:()=>$.automationRuns()}),[_,v]=(0,y.useState)(null),b=_??h.data??[],x=Xl({mutationFn:e=>$.saveAutomationRules(e),onSuccess:async()=>{v(null),await i.invalidateQueries({queryKey:[`admin`,`automations`]}),await i.invalidateQueries({queryKey:[`admin`,`automationRuns`]})}}),S=Xl({mutationFn:e=>$.updateSettings(e),onSuccess:async()=>{l({}),await i.invalidateQueries({queryKey:[`admin`,`settings`]}),await i.invalidateQueries({queryKey:[`branding`]})}});if(a.isLoading)return(0,N.jsx)(oT,{});let C=a.data??{},w=c.brand_logo??s.data?.logoUrl??``,T=c.brand_background??s.data?.backgroundUrl??``,E=(e,t)=>l(n=>({...n,[e]:t}));return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:a.error??s.error??S.error??o.error??p.error}),S.isSuccess&&(0,N.jsx)(Nm,{severity:`success`,sx:{mb:2},children:e(`admin.settings.saved`)}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`subtitle1`,gutterBottom:!0,children:e(`admin.settings.branding`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,gutterBottom:!0,children:e(`admin.settings.brandingHint`)}),(0,N.jsxs)(X,{spacing:2,children:[(0,N.jsx)(PE,{label:e(`admin.settings.brandLogo`),value:w,maxBytes:cT,onChange:e=>E(`brand_logo`,e),disabled:!r}),(0,N.jsx)(PE,{label:e(`admin.settings.brandBackground`),value:T,maxBytes:cT,onChange:e=>E(`brand_background`,e),disabled:!r}),(0,N.jsxs)(X,{direction:`row`,spacing:2,sx:{alignItems:`center`},children:[(0,N.jsx)(Z,{label:e(`admin.settings.brandColor`),helperText:e(`admin.settings.brandColorHint`),value:c.brand_color??C.brand_color??``,onChange:e=>E(`brand_color`,e.target.value),disabled:!r,sx:{maxWidth:260}}),(c.brand_color??C.brand_color??``)!==``&&(0,N.jsx)(q,{sx:{width:32,height:32,borderRadius:1,border:1,borderColor:`divider`,bgcolor:c.brand_color??C.brand_color??`transparent`}})]}),(0,N.jsxs)(X,{spacing:1,children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`admin.settings.brandColorPresets`)}),(0,N.jsxs)(X,{direction:`row`,sx:{flexWrap:`wrap`,gap:1,alignItems:`center`},children:[fw.map(e=>(0,N.jsx)(J,{"aria-label":e,title:e,disabled:!r,onClick:()=>E(`brand_color`,e),sx:{minWidth:40,width:40,height:40,p:0,borderRadius:1,border:2,borderColor:(c.brand_color??C.brand_color??``).toLowerCase()===e?`primary.main`:`divider`,bgcolor:e,"&:hover":{bgcolor:e}}},e)),(0,N.jsx)(J,{color:`inherit`,title:e(`admin.settings.brandColorDefaultHint`),disabled:!r,onClick:()=>{E(`brand_color`,``),E(`brand_background`,``)},children:e(`admin.settings.brandColorDefault`)})]})]})]})]})}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsx)(Wg,{children:(0,N.jsx)(Z,{label:e(`admin.settings.fontPath`),helperText:e(`admin.settings.fontPathHint`),value:c.report_font_path??C.report_font_path??``,onChange:e=>E(`report_font_path`,e.target.value),disabled:!r,fullWidth:!0})})}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`subtitle1`,gutterBottom:!0,children:e(`admin.settings.advanced`)}),(0,N.jsxs)(q,{sx:{display:`grid`,gap:2,gridTemplateColumns:{xs:`1fr`,sm:`repeat(2, minmax(0, 1fr))`,md:`repeat(3, minmax(0, 1fr))`}},children:[Object.keys(C).filter(e=>!e.startsWith(`brand_`)&&!e.endsWith(`timezone`)).sort().map(e=>(0,N.jsx)(IE,{settingKey:e,value:c[e]??C[e]??``,disabled:!r,onChange:t=>E(e,t)},e)),Object.keys(C).filter(e=>e.endsWith(`timezone`)).map(e=>(0,N.jsx)(IE,{settingKey:e,value:c[e]??C[e]??``,disabled:!r,onChange:t=>E(e,t),fullLine:!0},e))]})]})}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`subtitle1`,gutterBottom:!0,children:e(`admin.settings.pauseRules`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,gutterBottom:!0,children:e(`admin.settings.pauseRulesHint`)}),(0,N.jsx)(yE,{rules:f,disabled:!r,saving:p.isPending,onChange:d,onSave:()=>p.mutate(f)})]})}),(0,N.jsx)(jE,{rules:b,runs:g.data??[],people:m.data??[],disabled:!r,saving:x.isPending,onChange:v,onSave:()=>x.mutate(b),language:t.language}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`subtitle1`,gutterBottom:!0,children:e(`admin.settings.pauseMode`)}),(0,N.jsx)(Z,{select:!0,fullWidth:!0,label:e(`admin.settings.pauseModeTitle`),helperText:e(`admin.settings.pauseModeHint`),value:c.pause_mode??C.pause_mode??`auto`,onChange:e=>E(`pause_mode`,e.target.value),disabled:!r,children:[`auto`,`punched`,`staffel`].map(t=>(0,N.jsx)(Yb,{value:t,children:e(`admin.settings.pauseMode.${t}`)},t))})]})}),(0,N.jsx)(J,{variant:`contained`,disabled:!r||Object.keys(c).length===0||S.isPending,onClick:()=>S.mutate(c),children:e(`common.save`)})]})}function RE({language:e}){let{t}=tw(),n=Oc(),[r,i]=(0,y.useState)(null),[a,o]=(0,y.useState)(null),[s,c]=(0,y.useState)(``),l=(0,y.useRef)(null),u=Yl({queryKey:[`admin`,`backups`],queryFn:()=>$.backups()}),d=Xl({mutationFn:()=>$.createBackup(),onSuccess:async()=>{await n.invalidateQueries({queryKey:[`admin`,`backups`]})}}),f=Xl({mutationFn:e=>$.restoreBackup(e,s.trim()||void 0),onSuccess:async()=>{i(null),c(``),await n.invalidateQueries({queryKey:[`admin`,`backups`]})}}),p=Xl({mutationFn:e=>$.downloadBackup(e),onSuccess:e=>wT(e.blob,e.fileName)}),m=Xl({mutationFn:e=>$.uploadBackup(e),onSuccess:async()=>{await n.invalidateQueries({queryKey:[`admin`,`backups`]})}}),h=Xl({mutationFn:e=>$.deleteBackup(e),onSuccess:async()=>{o(null),await n.invalidateQueries({queryKey:[`admin`,`backups`]})}});if(u.isLoading)return(0,N.jsx)(oT,{});let g=u.data?.pending??null;return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:u.error??d.error??f.error??p.error??m.error??h.error}),g&&(0,N.jsx)(Nm,{severity:`warning`,sx:{mb:2},children:t(`admin.backup.pendingHint`,{name:g.name,users:g.users,entries:g.entries})}),d.isSuccess&&(0,N.jsx)(Nm,{severity:`success`,sx:{mb:2},children:t(`admin.backup.done`,{name:d.data.backup.name,removed:d.data.removed.length})}),(0,N.jsxs)(q,{sx:{mb:2},children:[(0,N.jsxs)(X,{direction:`row`,spacing:1,alignItems:`center`,flexWrap:`wrap`,useFlexGap:!0,children:[(0,N.jsx)(J,{variant:`contained`,startIcon:d.isPending?(0,N.jsx)(C_,{size:18}):(0,N.jsx)(NT,{}),disabled:d.isPending,onClick:()=>d.mutate(),children:t(`admin.backup.create`)}),(0,N.jsx)(J,{variant:`outlined`,startIcon:m.isPending?(0,N.jsx)(C_,{size:18}):(0,N.jsx)(IT,{}),disabled:m.isPending,onClick:()=>l.current?.click(),children:t(`admin.backup.upload`)}),(0,N.jsx)(`input`,{ref:l,type:`file`,accept:`.sqlite,application/octet-stream`,hidden:!0,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&m.mutate(t)}})]}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,sx:{mt:1},children:t(`admin.backup.uploadHint`)})]}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Gy,{dense:!0,children:[(u.data?.backups??[]).map(n=>(0,N.jsxs)(ob,{children:[(0,N.jsx)(pb,{primary:n.name,secondary:`${vE(n.createdAt,e)} · ${gE(n.sizeBytes,e)}`}),(0,N.jsxs)(X,{direction:`row`,spacing:.5,alignItems:`center`,children:[p.isPending&&p.variables===n.name&&(0,N.jsx)(C_,{size:16}),(0,N.jsx)(bm,{size:`small`,title:t(`admin.backup.download`),disabled:p.isPending,onClick:()=>p.mutate(n.name),children:(0,N.jsx)(PT,{fontSize:`small`})}),(0,N.jsx)(bm,{size:`small`,title:t(`admin.backup.restore`),disabled:f.isPending,onClick:()=>i(n.name),children:(0,N.jsx)(FT,{fontSize:`small`})}),(0,N.jsx)(bm,{size:`small`,title:t(`admin.backup.delete`),disabled:h.isPending,onClick:()=>o(n.name),children:(0,N.jsx)(gT,{fontSize:`small`})})]})]},n.name)),(u.data?.backups??[]).length===0&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{secondary:t(`admin.backup.empty`)})})]})}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,sx:{mt:2},children:t(`admin.backup.retention`,{days:u.data?.retentionDays??0})}),(0,N.jsxs)(ov,{open:r!==null,onClose:()=>i(null),children:[(0,N.jsx)(Dv,{children:t(`admin.backup.restoreTitle`)}),(0,N.jsxs)(vv,{children:[(0,N.jsx)(Cv,{sx:{mb:2},children:t(`admin.backup.restoreConfirm`,{name:r??``})}),(0,N.jsx)(Z,{fullWidth:!0,label:t(`corrections.reason`),helperText:t(`corrections.reasonHint`),value:s,onChange:e=>c(e.target.value)})]}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>i(null),children:t(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,disabled:f.isPending,onClick:()=>r&&f.mutate(r),children:t(`admin.backup.restore`)})]})]}),(0,N.jsxs)(ov,{open:a!==null,onClose:()=>o(null),children:[(0,N.jsx)(Dv,{children:t(`admin.backup.deleteTitle`)}),(0,N.jsx)(vv,{children:(0,N.jsx)(Cv,{children:t(`admin.backup.deleteConfirm`,{name:a??``})})}),(0,N.jsxs)(dv,{children:[(0,N.jsx)(J,{onClick:()=>o(null),children:t(`common.cancel`)}),(0,N.jsx)(J,{variant:`contained`,color:`error`,disabled:h.isPending,onClick:()=>a&&h.mutate(a),children:t(`admin.backup.delete`)})]})]})]})}function zE(){let{t:e,i18n:t}=tw(),{permissions:n}=Ww(),[r,i]=(0,y.useState)(0),a=[];if(Gw(n,`user.view`)&&a.push({label:e(`admin.users`),render:()=>(0,N.jsx)(xE,{language:t.language})}),Gw(n,`time.edit_other`)&&a.push({label:e(`admin.corrections`),render:()=>(0,N.jsx)(MT,{language:t.language})}),Gw(n,`terminal.manage`)&&a.push({label:e(`admin.terminals`),render:()=>(0,N.jsx)(TE,{language:t.language})}),Gw(n,`settings.view`)&&a.push({label:e(`admin.settings`),render:()=>(0,N.jsx)(LE,{})}),Gw(n,`holiday.manage`)&&a.push({label:e(`admin.holidays`),render:()=>(0,N.jsx)(DE,{language:t.language})}),Gw(n,`rfid.manage`)&&a.push({label:e(`admin.tags`),render:()=>(0,N.jsx)(kE,{language:t.language})}),Gw(n,`settings.view`)&&a.push({label:e(`admin.triggers`),render:()=>(0,N.jsx)(AE,{language:t.language})}),Gw(n,`backup.run`)&&a.push({label:e(`admin.backup`),render:()=>(0,N.jsx)(RE,{language:t.language})}),a.length===0)return(0,N.jsx)(nT,{title:e(`admin.title`),children:(0,N.jsx)(Nm,{severity:`info`,children:e(`admin.forbidden`)})});let o=Math.min(r,a.length-1);return(0,N.jsxs)(nT,{title:e(`admin.title`),children:[(0,N.jsx)(DS,{value:o,onChange:(e,t)=>i(t),variant:`scrollable`,scrollButtons:`auto`,allowScrollButtonsMobile:!0,sx:{mb:2},children:a.map(e=>(0,N.jsx)(Yx,{label:e.label},e.label))}),a[o]?.render()]})}var BE=rp((0,N.jsx)(`path`,{d:`M11 7 9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8z`}),`Login`),VE=rp((0,N.jsx)(`path`,{d:`m17 7-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4z`}),`Logout`);function HE(){let{t:e,i18n:t}=tw(),{session:n}=Ww(),{pending:r,record:i,outcome:a}=Qw(),o=Oc(),[s,c]=(0,y.useState)(``),[l,u]=(0,y.useState)(!1),d=n?.user.timezone??`UTC`,f=Yl({queryKey:[`status`],queryFn:()=>$.status()});(0,y.useEffect)(()=>{a&&o.invalidateQueries({queryKey:[`status`]})},[a,o]);function p(e){i({tsUtc:Math.floor(Date.now()/1e3),...s?{note:s}:{},quick:e}),c(``),u(!0)}let m=f.data,h=m?.hasOpenEntry??!1;return(0,N.jsxs)(nT,{title:e(`nav.dashboard`),children:[(0,N.jsx)(aT,{error:f.error}),l&&r.length>0&&(0,N.jsx)(Nm,{severity:`warning`,children:e(`punch.queued`)}),(0,N.jsx)(Y,{sx:{mb:3},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,component:`p`,gutterBottom:!0,children:h?e(`punch.open`,{time:cw(m?.lastEntry?.tsUtc??null,d,t.language)}):e(`punch.closed`)}),m?.lastEntry&&(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,gutterBottom:!0,children:e(`punch.last`,{time:cw(m.lastEntry.tsUtc,d,t.language)})}),(0,N.jsxs)(X,{spacing:2,sx:{mt:2},children:[(0,N.jsx)(Z,{label:e(`punch.note`),value:s,size:`small`,onChange:e=>c(e.target.value)}),(0,N.jsx)(J,{variant:`contained`,size:`large`,startIcon:m?.nextDirection===`out`?(0,N.jsx)(VE,{}):(0,N.jsx)(BE,{}),disabled:f.isLoading,onClick:()=>p(!1),children:m?.nextDirection===`out`?e(`punch.out`):e(`punch.in`)}),(0,N.jsx)(J,{variant:`outlined`,onClick:()=>p(!0),disabled:f.isLoading,children:e(`punch.quick`)})]})]})}),(0,N.jsxs)(wy,{container:!0,spacing:2,children:[(0,N.jsx)(wy,{item:!0,xs:12,sm:4,children:(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`punch.worked`)}),(0,N.jsx)(K,{variant:`h5`,children:sw(m?.day.workedMin??0)})]})})}),(0,N.jsx)(wy,{item:!0,xs:12,sm:4,children:(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`punch.target`)}),(0,N.jsx)(K,{variant:`h5`,children:sw(m?.day.targetMin??0)})]})})}),(0,N.jsx)(wy,{item:!0,xs:12,sm:4,children:(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`punch.balance`)}),(0,N.jsx)(K,{variant:`h5`,color:(m?.day.balanceMin??0)<0?`error`:`text.primary`,children:sw(m?.day.balanceMin??0)})]})})})]}),(0,N.jsx)(q,{sx:{mt:2},children:(0,N.jsx)(J,{variant:`text`,onClick:()=>void f.refetch(),disabled:f.isFetching,children:e(`common.refresh`)})})]})}function UE(){let{t:e}=tw(),{signIn:t}=Ww(),n=gw(),[r,i]=(0,y.useState)(``),[a,o]=(0,y.useState)(``),[s,c]=(0,y.useState)(null),[l,u]=(0,y.useState)(!1);async function d(e){e.preventDefault(),u(!0),c(null);try{await t(r.trim(),a)}catch(e){c(e)}finally{u(!1)}}return(0,N.jsx)(q,{sx:{display:`flex`,justifyContent:`center`,alignItems:`center`,minHeight:`100vh`,p:2},children:(0,N.jsx)(Y,{sx:{width:`100%`,maxWidth:420},children:(0,N.jsxs)(Wg,{children:[n.logoUrl&&(0,N.jsx)(q,{component:`img`,src:n.logoUrl,alt:``,sx:{display:`block`,maxHeight:64,maxWidth:`100%`,mb:2}}),(0,N.jsx)(K,{variant:`h5`,component:`h1`,gutterBottom:!0,children:e(`app.title`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,gutterBottom:!0,children:e(`login.title`)}),(0,N.jsx)(q,{component:`form`,onSubmit:e=>void d(e),sx:{mt:2},children:(0,N.jsxs)(X,{spacing:2,children:[(0,N.jsx)(Z,{label:e(`login.login`),value:r,autoComplete:`username`,autoFocus:!0,required:!0,onChange:e=>i(e.target.value)}),(0,N.jsx)(Z,{label:e(`login.password`),type:`password`,value:a,autoComplete:`current-password`,required:!0,onChange:e=>o(e.target.value)}),l?(0,N.jsx)(Nm,{severity:`info`,children:e(`login.failed`)}):(0,N.jsx)(aT,{error:s}),(0,N.jsx)(J,{type:`submit`,variant:`contained`,size:`large`,disabled:l,children:e(`login.submit`)})]})})]})})})}function WE(){let{t:e}=tw(),{session:t,signOut:n}=Ww(),[r,i]=(0,y.useState)(``),[a,o]=(0,y.useState)(!1),[s,c]=(0,y.useState)(null),[l,u]=(0,y.useState)(!1);async function d(){o(!0),c(null);try{await $.changePassword(r),u(!0);try{await n()}catch{}}catch(e){c(e)}finally{o(!1)}}return(0,N.jsx)(q,{sx:{display:`flex`,justifyContent:`center`,alignItems:`center`,minHeight:`100vh`,p:2},children:(0,N.jsx)(Y,{sx:{maxWidth:420,width:`100%`},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:e(`profile.changePassword`)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,gutterBottom:!0,children:t?.user.login}),l?(0,N.jsx)(Nm,{severity:`success`,children:e(`profile.changed`)}):(0,N.jsxs)(X,{spacing:2,sx:{mt:1},children:[(0,N.jsx)(Z,{type:`password`,label:e(`profile.newPassword`),helperText:e(`admin.user.passwordHint`),value:r,onChange:e=>i(e.target.value),autoComplete:`new-password`,fullWidth:!0}),(0,N.jsx)(aT,{error:s}),(0,N.jsx)(J,{variant:`contained`,disabled:a||r.length===0,onClick:()=>void d(),children:e(`profile.changePassword`)})]})]})})})}var GE=rp((0,N.jsx)(`path`,{d:`M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z`}),`Refresh`),KE=rp([(0,N.jsx)(`path`,{d:`M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2M12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8`},`0`),(0,N.jsx)(`path`,{d:`M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z`},`1`)],`Schedule`);function qE(e){return e instanceof iw&&e.status===401&&(e.code===`no_session`||e.code===`invalid_credentials`)}function JE(e){return $.terminalSession(e)}async function YE(e){try{return await e.call(e.session)}catch(t){if(!qE(t))throw t;let n=await JE(e.deviceToken);return e.onRenewed?.(n),e.call(n)}}var XE=rp((0,N.jsx)(`path`,{d:`M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m0 16H7.07L2.4 12l4.66-7H22zm-11.59-2L14 13.41 17.59 17 19 15.59 15.41 12 19 8.41 17.59 7 14 10.59 10.41 7 9 8.41 12.59 12 9 15.59z`}),`BackspaceOutlined`),ZE=[`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,``,`0`];function QE({onDigit:e,onBackspace:t,disabled:n=!1}){let{t:r}=tw(),i=e=>e.preventDefault();return(0,N.jsxs)(q,{sx:{display:`grid`,gridTemplateColumns:`repeat(3, 1fr)`,gap:1,width:`100%`,maxWidth:260},children:[ZE.map(t=>t===``?(0,N.jsx)(q,{},`blank`):(0,N.jsx)(J,{variant:`outlined`,size:`large`,disabled:n,"aria-label":t,onMouseDown:i,onClick:()=>e(t),sx:{minHeight:56,fontSize:`1.4rem`},children:t},t)),(0,N.jsx)(J,{variant:`outlined`,size:`large`,disabled:n,"aria-label":r(`keypad.backspace`),onMouseDown:i,onClick:t,sx:{minHeight:56},children:(0,N.jsx)(XE,{})})]})}var $E=`time-tracker.presence`,eD=2e4,tD=3e5,nD=8e3;function rD(){let e=new URLSearchParams(window.location.search).get(`token`);if(e?.trim()){try{window.localStorage.setItem($E,e.trim())}catch{}return e.trim()}try{return window.localStorage.getItem($E)}catch{return null}}function iD(){let{t:e,i18n:t}=tw(),[n,r]=(0,y.useState)(()=>rD()),[i,a]=(0,y.useState)(``),[o,s]=(0,y.useState)(null),[c,l]=(0,y.useState)([]),[u,d]=(0,y.useState)(null),[f,p]=(0,y.useState)(``),[m,h]=(0,y.useState)(null),[g,_]=(0,y.useState)(null),[v,b]=(0,y.useState)(null),[x,S]=(0,y.useState)(!1),[C,w]=(0,y.useState)(`UTC`),[T,E]=(0,y.useState)(Math.floor(Date.now()/1e3)),D=(0,y.useRef)(0),O=gw(),k=(0,y.useCallback)(()=>{try{window.localStorage.removeItem($E)}catch{}r(null)},[]);(0,y.useEffect)(()=>{(async()=>{try{let e=await $.terminalStatus();b(e.enabled),w(e.timezone),D.current=e.serverTime-Math.floor(Date.now()/1e3)}catch(e){_(e)}})()},[]),(0,y.useEffect)(()=>{let e=window.setInterval(()=>E(Math.floor(Date.now()/1e3)+D.current),1e3);return()=>window.clearInterval(e)},[]),(0,y.useEffect)(()=>{if(!n){s(null);return}(async()=>{try{let e=await $.terminalSession(n);s(e),_(null)}catch(e){s(null),_(e)}})()},[n]);let A=(0,y.useCallback)(async()=>{if(o&&n)try{let e=await YE({deviceToken:n,session:o,call:e=>$.terminalUsers(e.terminalSession),onRenewed:s});l(e.users),_(null)}catch(e){_(e)}},[o,n]);(0,y.useEffect)(()=>{A();let e=window.setInterval(()=>void A(),eD);return()=>window.clearInterval(e)},[A]),(0,y.useEffect)(()=>{if(!o||!n)return;let e=window.setInterval(()=>{$.terminalHeartbeat(o.terminalSession).catch(async()=>{try{s(await JE(n))}catch(e){_(e),k()}})},tD);return()=>window.clearInterval(e)},[o,n,k]),(0,y.useEffect)(()=>{if(!m)return;let e=window.setTimeout(()=>h(null),nD);return()=>window.clearTimeout(e)},[m]);let j=(0,y.useCallback)(async()=>{let e=o?.terminal.pinRequired===!0;if(o&&n&&u&&(!e||f.length!==0)){S(!0);try{let e=await YE({deviceToken:n,session:o,call:e=>$.terminalPunch({terminalSession:e.terminalSession,userId:u.id,...f?{pin:f}:{}}),onRenewed:s});h(e),l(t=>t.map(t=>t.id===e.user.id?{...t,present:e.day.hasOpenEntry,workedMin:e.day.workedMin??t.workedMin}:t)),d(null),p(``),_(null)}catch(e){_(e)}finally{S(!1)}}},[f,u,o,n]);return n?(0,N.jsxs)(q,{sx:{p:2},children:[(0,N.jsxs)(X,{direction:`row`,justifyContent:`space-between`,alignItems:`baseline`,sx:{mb:2},children:[(0,N.jsxs)(X,{direction:`row`,spacing:1,sx:{alignItems:`center`},children:[O.logoUrl&&(0,N.jsx)(q,{component:`img`,src:O.logoUrl,alt:``,sx:{height:28,maxWidth:120,objectFit:`contain`}}),(0,N.jsx)(K,{variant:`h5`,children:e(`presence.title`)})]}),(0,N.jsxs)(X,{direction:`row`,spacing:1,alignItems:`center`,children:[(0,N.jsx)(K,{variant:`h5`,children:cw(T,C,t.language)}),(0,N.jsx)(K,{variant:`body1`,children:o?.terminal.name??``}),(0,N.jsx)(bm,{size:`small`,title:e(`common.refresh`),"aria-label":e(`common.refresh`),onClick:()=>void A(),children:(0,N.jsx)(GE,{fontSize:`small`})})]})]}),v===!1&&(0,N.jsx)(Nm,{severity:`warning`,sx:{mb:2},children:e(`presence.disabled`)}),(0,N.jsx)(aT,{error:g}),m&&(0,N.jsx)(Nm,{severity:`success`,sx:{mb:2},children:e(`presence.updated`,{name:m.user.displayName,state:e(m.day.hasOpenEntry?`presence.present`:`presence.absent`)})}),(0,N.jsx)(q,{sx:{display:`grid`,gridTemplateColumns:`repeat(auto-fill, minmax(240px, 1fr))`,gap:1.5},children:c.map(t=>(0,N.jsx)(Y,{variant:`outlined`,sx:{borderWidth:t.present?2:1,borderColor:t.present?`success.main`:`divider`,bgcolor:t.present?`success.light`:`background.paper`},children:(0,N.jsx)(zg,{onClick:()=>{d(t),p(``)},children:(0,N.jsxs)(X,{direction:`row`,spacing:1.5,alignItems:`center`,sx:{px:1.5,py:.5},children:[(0,N.jsx)(Vh,{src:t.avatarUrl??`/person.png`,sx:{width:56,height:56,bgcolor:t.present?`success.main`:`grey.500`},children:aD(t.displayName)}),(0,N.jsxs)(q,{sx:{minWidth:0,flexGrow:1},children:[(0,N.jsxs)(X,{direction:`row`,spacing:.5,sx:{alignItems:`center`},children:[(0,N.jsx)(rh,{size:`small`,color:t.present?`success`:`default`,label:e(t.present?`presence.present`:`presence.absent`)}),t.workedMin!==void 0&&(0,N.jsx)(rh,{size:`small`,variant:`outlined`,icon:(0,N.jsx)(KE,{fontSize:`small`}),label:sw(t.workedMin),title:e(`presence.workedToday`)})]}),(0,N.jsx)(K,{variant:`subtitle1`,noWrap:!0,sx:{lineHeight:1.3},children:t.displayName})]})]})})},t.id))}),u&&(0,N.jsx)(Y,{sx:{mt:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:u.displayName}),(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,children:[o?.terminal.pinRequired===!1?(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,sx:{alignSelf:`center`},children:e(`terminal.noPin`)}):(0,N.jsx)(Z,{label:e(`terminal.pin`),type:`password`,value:f,onChange:e=>p(e.target.value),onKeyDown:e=>{e.key===`Enter`&&j()},helperText:e(`presence.tapPin`),autoFocus:!0,fullWidth:!0}),o?.terminal.pinRequired===!1?null:(0,N.jsx)(QE,{onDigit:e=>p(t=>t+e),onBackspace:()=>p(e=>e.slice(0,-1)),disabled:x}),(0,N.jsx)(J,{variant:`contained`,size:`large`,disabled:x||o?.terminal.pinRequired===!0&&f.length===0,onClick:()=>void j(),children:e(`punch.now`)}),(0,N.jsx)(J,{variant:`text`,size:`large`,onClick:()=>{d(null),p(``)},children:e(`presence.cancel`)})]})]})})]}):(0,N.jsxs)(q,{sx:{p:2,maxWidth:480,mx:`auto`},children:[(0,N.jsx)(K,{variant:`h5`,gutterBottom:!0,children:e(`presence.title`)}),(0,N.jsx)(aT,{error:g}),(0,N.jsx)(Z,{label:e(`terminal.deviceToken`),value:i,onChange:e=>a(e.target.value),fullWidth:!0,sx:{mt:1}}),(0,N.jsx)(J,{variant:`contained`,size:`large`,sx:{mt:2},disabled:i.trim().length===0,onClick:()=>r(i.trim()),children:e(`terminal.connect`)})]})}function aD(e){let t=e.trim().split(/\s+/).filter(e=>e.length>0);return t.length===0?`?`:t.length===1?t[0].slice(0,2).toUpperCase():`${t[0][0]}${t[t.length-1][0]}`.toUpperCase()}function oD(){let{t:e,i18n:t}=tw(),{session:n,permissions:r}=Ww(),[i,a]=(0,y.useState)(``),[o,s]=(0,y.useState)(!1),[c,l]=(0,y.useState)(null);async function u(e){e.preventDefault(),l(null);try{await $.changePassword(i),s(!0),a(``)}catch(e){l(e)}}return(0,N.jsxs)(nT,{title:e(`profile.title`),children:[(0,N.jsx)(Y,{sx:{mb:3},children:(0,N.jsx)(Wg,{children:(0,N.jsxs)(X,{spacing:1,children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`profile.user`)}),(0,N.jsx)(K,{variant:`h6`,children:n?.user.displayName??n?.user.login}),(0,N.jsxs)(K,{variant:`body2`,color:`text.secondary`,children:[n?.user.login,` · `,n?.user.timezone]}),(0,N.jsx)(Z,{select:!0,label:e(`profile.language`),size:`small`,value:t.language,onChange:e=>void t.changeLanguage(e.target.value),sx:{maxWidth:240,mt:1},children:Lw.map(e=>(0,N.jsx)(Yb,{value:e,children:e},e))}),(0,N.jsxs)(q,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`profile.roles`)}),(0,N.jsx)(K,{variant:`body2`,children:r.join(`, `)||e(`common.none`)})]})]})})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:e(`profile.changePassword`)}),o&&(0,N.jsx)(Nm,{severity:`success`,children:e(`profile.changed`)}),(0,N.jsx)(aT,{error:c}),(0,N.jsx)(q,{component:`form`,onSubmit:e=>void u(e),children:(0,N.jsxs)(X,{spacing:2,children:[(0,N.jsx)(Z,{label:e(`profile.newPassword`),type:`password`,value:i,autoComplete:`new-password`,required:!0,size:`small`,onChange:e=>a(e.target.value)}),(0,N.jsx)(J,{type:`submit`,variant:`contained`,children:e(`profile.changePassword`)})]})})]})})]})}function sD(){let{t:e,i18n:t}=tw(),[n,r]=(0,y.useState)(()=>new Date().getFullYear()),[i,a]=(0,y.useState)(void 0),{permissions:o,session:s}=Ww(),c=Gw(o,`payout.view`),l=Gw(o,`report.view_other`)&&Gw(o,`user.view`),u=Yl({queryKey:[`employees`],queryFn:()=>$.users(),enabled:l}),d=Yl({queryKey:[`months`,n,i],queryFn:()=>$.months(n,i)}),f=Yl({queryKey:[`payouts`,n],queryFn:()=>$.payouts(n),enabled:c&&i===void 0,retry:!1}),p=d.data?.months??[],m=i===void 0?``:(u.data??[]).find(e=>e.id===i)?.displayName??``,h=e=>new Intl.DateTimeFormat(t.language,{month:`long`,timeZone:`UTC`}).format(new Date(Date.UTC(n,e-1,15)));return(0,N.jsxs)(nT,{title:e(`reports.title`),children:[(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(X,{direction:`row`,alignItems:`center`,justifyContent:`space-between`,sx:{p:1},children:[(0,N.jsx)(bm,{onClick:()=>r(e=>e-1),title:e(`month.previous`),children:(0,N.jsx)(NS,{})}),(0,N.jsxs)(K,{variant:`h6`,children:[e(`reports.year`),` `,n]}),(0,N.jsx)(bm,{onClick:()=>r(e=>e+1),title:e(`month.next`),children:(0,N.jsx)(PS,{})})]})}),l&&(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsx)(Wg,{children:(0,N.jsxs)(Z,{select:!0,fullWidth:!0,size:`small`,label:e(`statistics.employee`),value:i??``,onChange:e=>a(e.target.value===``?void 0:Number(e.target.value)),children:[(0,N.jsx)(Yb,{value:``,children:s?.user.displayName??e(`profile.user`)}),(u.data??[]).filter(e=>e.isActive).map(e=>(0,N.jsx)(Yb,{value:e.id,children:e.displayName},e.id))]})})}),(0,N.jsx)(aT,{error:d.error}),d.isLoading?(0,N.jsx)(oT,{}):(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(wy,{container:!0,spacing:2,sx:{mb:2},children:[(0,N.jsx)(wy,{item:!0,xs:6,children:(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`reports.yearTotals`)}),(0,N.jsx)(K,{variant:`h5`,children:sw(d.data?.year.workedMin??0)}),(0,N.jsxs)(K,{variant:`body2`,color:`text.secondary`,children:[e(`month.target`),`: `,sw(d.data?.year.targetMin??0)]})]})})}),(0,N.jsx)(wy,{item:!0,xs:6,children:(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`reports.overtime`)}),(0,N.jsx)(K,{variant:`h5`,color:(d.data?.year.overtimeMin??0)<0?`error`:`text.primary`,children:sw(d.data?.year.overtimeMin??0)}),(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`reports.vacation`,{used:d.data?.year.vacationUsed??0,total:(d.data?.year.vacationCarryover??0)+(d.data?.year.vacationDays??0)})}),c&&i===void 0&&(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`reports.paidOut`,{minutes:sw(f.data?.totalMinutes??0)})})]})})})]}),(0,N.jsxs)(Y,{children:[(0,N.jsx)(Gy,{dense:!0,children:p.map((t,r)=>(0,N.jsx)(ob,{secondaryAction:(0,N.jsxs)(X,{direction:`row`,spacing:1,alignItems:`center`,children:[(0,N.jsx)(K,{variant:`body2`,color:(t?.balanceMin??0)<0?`error`:`text.secondary`,children:sw(t?.balanceMin??0)}),t&&(0,N.jsx)(TT,{year:n,month:r+1,userId:i,compact:!0})]}),children:(0,N.jsx)(pb,{primary:i===void 0?h(r+1):(0,N.jsx)(K,{component:Bf,to:`/month?year=${n}&month=${r+1}&userId=${i}&name=${encodeURIComponent(m)}`,title:e(`month.title`),sx:{color:`primary.main`,textDecoration:`none`,"&:hover":{textDecoration:`underline`}},children:h(r+1)}),secondary:t?`${e(`month.worked`)} ${sw(t.workedMin)} · ${e(`month.target`)} ${sw(t.targetMin)}`:e(`reports.empty`)})},r))}),p.length===0&&(0,N.jsx)(q,{sx:{p:2},children:(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`reports.empty`)})})]})]})]})}function cD(){let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-01`}function lD(){let e=new Date,t=new Date(e.getFullYear(),e.getMonth()+1,0);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}`}function uD(e,t){return new Intl.NumberFormat(t,{style:`unit`,unit:`hour`,maximumFractionDigits:2}).format(e/60)}function dD(){let{t:e,i18n:t}=tw(),[n,r]=(0,y.useState)(cD),[i,a]=(0,y.useState)(lD),o=/^\d{4}-\d{2}-\d{2}$/.test(n)&&/^\d{4}-\d{2}-\d{2}$/.test(i)&&n<=i,s=Yl({queryKey:[`statistics`,n,i],queryFn:()=>$.statistics(n,i),enabled:o});if(s.isLoading)return(0,N.jsx)(nT,{title:e(`nav.statistics`),children:(0,N.jsx)(oT,{})});let c=(n,r,i,a)=>`${e(`statistics.worked`)} ${uD(n,t.language)} · ${e(`statistics.target`)} ${uD(r,t.language)} · ${e(`statistics.balance`)} ${uD(i,t.language)} · ${e(`statistics.openDays`)} ${a}`,l=s.data?.totals;return(0,N.jsxs)(nT,{title:e(`nav.statistics`),children:[(0,N.jsx)(aT,{error:s.error}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsx)(Wg,{children:(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,children:[(0,N.jsx)(Z,{label:e(`statistics.from`),value:n,onChange:e=>r(e.target.value)}),(0,N.jsx)(Z,{label:e(`statistics.to`),value:i,onChange:e=>a(e.target.value)})]})})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Gy,{dense:!0,children:[(s.data?.users??[]).map(e=>(0,N.jsx)(ob,{divider:!0,children:(0,N.jsx)(pb,{primary:e.displayName,secondary:c(e.workedMin,e.targetMin,e.balanceMin,e.openDays)})},e.userId)),l&&(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{primary:(0,N.jsx)(K,{variant:`body1`,sx:{fontWeight:600},children:e(`statistics.totals`)}),secondary:c(l.workedMin,l.targetMin,l.balanceMin,l.openDays)})})]})})]})}function fD(){let{t:e,i18n:t}=tw(),{session:n,permissions:r}=Ww(),{pending:i,flush:a,busy:o,outcome:s}=Qw(),c=Oc(),l=n?.user.timezone??`UTC`,u=Gw(r,`time.resolve_conflict`),d=Yl({queryKey:[`conflicts`],queryFn:()=>$.conflicts(),enabled:u,retry:!1}),f=Xl({mutationFn:e=>$.resolve(e.entryId,e.action),onSuccess:()=>void c.invalidateQueries({queryKey:[`conflicts`]})});return(0,N.jsxs)(nT,{title:e(`sync.title`),children:[(0,N.jsx)(Y,{sx:{mb:3},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:i.length>0?e(`sync.pending`,{count:i.length}):e(`sync.none`)}),s&&(0,N.jsx)(Nm,{severity:`success`,sx:{mt:1},children:e(`sync.done`,{accepted:s.accepted,duplicates:s.duplicates,conflicts:s.conflicts})}),(0,N.jsx)(X,{spacing:2,sx:{mt:2},children:(0,N.jsx)(J,{variant:`contained`,disabled:o||i.length===0,onClick:()=>void a(),children:e(`sync.flush`)})}),i.length>0&&(0,N.jsx)(Gy,{dense:!0,children:i.map(e=>(0,N.jsx)(ob,{children:(0,N.jsx)(pb,{primary:cw(e.tsUtc,l,t.language),secondary:e.note??void 0})},e.idempotencyKey))})]})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:e(`sync.conflicts`)}),u?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(aT,{error:d.error}),f.error&&(0,N.jsx)(aT,{error:f.error}),(d.data??[]).length===0?(0,N.jsx)(q,{children:(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`sync.empty`)})}):(0,N.jsx)(Gy,{dense:!0,children:(d.data??[]).map(n=>(0,N.jsxs)(rT,{primary:e(`sync.conflictOf`,{date:n.localDate,time:cw(n.tsUtc,l,t.language)}),secondary:n.note??void 0,children:[(0,N.jsx)(J,{size:`small`,onClick:()=>f.mutate({entryId:n.entryId??n.id,action:`accept`}),children:e(`sync.accept`)}),(0,N.jsx)(J,{size:`small`,color:`warning`,onClick:()=>f.mutate({entryId:n.entryId??n.id,action:`dismiss`}),children:e(`sync.dismiss`)})]},n.id))})]}):(0,N.jsx)(Nm,{severity:`info`,children:e(`sync.permission`)})]})})]})}var pD=`time-tracker.scan`;function mD(){let e=new URLSearchParams(window.location.search),t=e.get(`tag`);if(t?.trim()){try{window.sessionStorage.setItem(pD,t.trim())}catch{}e.delete(`tag`);let n=e.toString();return window.history.replaceState(null,``,`${window.location.pathname}${n?`?${n}`:``}`),t.trim()}try{return window.sessionStorage.getItem(pD)}catch{return null}}function hD(){let{t:e,i18n:t}=tw(),n=(0,y.useRef)(mD()),[r,i]=(0,y.useState)(null),[a,o]=(0,y.useState)(null),[s,c]=(0,y.useState)(!1);(0,y.useEffect)(()=>{s||(c(!0),(async()=>{try{i(await $.scanTag(n.current??``))}catch(e){o(e)}})())},[s]);let l=Intl.DateTimeFormat().resolvedOptions().timeZone;return(0,N.jsx)(q,{sx:{display:`flex`,minHeight:`100vh`,alignItems:`center`,justifyContent:`center`,p:2},children:(0,N.jsx)(Y,{sx:{maxWidth:520,width:`100%`},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:e(`scan.title`)}),!r&&!a&&(0,N.jsxs)(q,{sx:{display:`flex`,gap:2,alignItems:`center`},children:[(0,N.jsx)(C_,{size:20}),(0,N.jsx)(K,{children:e(`common.loading`)})]}),r&&(0,N.jsx)(Nm,{severity:`success`,children:e(`scan.done`,{name:r.user?.displayName??``,time:cw(r.entry?.tsUtc??null,l,t.language)})}),a?(0,N.jsx)(Nm,{severity:`error`,children:e(`scan.failed`,{reason:e(iT(a))})}):null,(0,N.jsx)(J,{sx:{mt:2},variant:`contained`,href:`/`,children:e(`nav.dashboard`)})]})})})}var gD=`time-tracker.terminal`,_D=8e3,vD=3e5;function yD(){let e=new URLSearchParams(window.location.search).get(`token`);if(e?.trim()){try{window.localStorage.setItem(gD,e.trim())}catch{}return e.trim()}try{return window.localStorage.getItem(gD)}catch{return null}}function bD(){let{t:e,i18n:t}=tw(),[n,r]=(0,y.useState)(()=>yD()),[i,a]=(0,y.useState)(``),[o,s]=(0,y.useState)(null),[c,l]=(0,y.useState)([]),[u,d]=(0,y.useState)(null),[f,p]=(0,y.useState)(``),[m,h]=(0,y.useState)(``),[g,_]=(0,y.useState)(null),[v,b]=(0,y.useState)(null),[x,S]=(0,y.useState)(null),[C,w]=(0,y.useState)(`UTC`),[T,E]=(0,y.useState)(Math.floor(Date.now()/1e3)),D=(0,y.useRef)(0),O=gw(),k=(0,y.useCallback)(()=>{try{window.localStorage.removeItem(gD)}catch{}r(null)},[]);(0,y.useEffect)(()=>{(async()=>{try{let e=await $.terminalStatus();S(e.enabled),w(e.timezone),D.current=e.serverTime-Math.floor(Date.now()/1e3)}catch(e){b(e),S(!1)}})()},[]),(0,y.useEffect)(()=>{let e=window.setInterval(()=>E(Math.floor(Date.now()/1e3)+D.current),1e3);return()=>window.clearInterval(e)},[]),(0,y.useEffect)(()=>{n&&x===!0&&(async()=>{try{let e=await $.terminalSession(n);s(e);let t=await $.terminalUsers(e.terminalSession);l(t.users)}catch(e){b(e),k()}})()},[n,x,k]),(0,y.useEffect)(()=>{if(!o||!n)return;let e=window.setInterval(()=>{$.terminalHeartbeat(o.terminalSession).catch(async()=>{try{s(await JE(n))}catch{k()}})},vD);return()=>window.clearInterval(e)},[o,n,k]);let A=(0,y.useCallback)(async e=>{if(o&&n){b(null);try{let t=await YE({deviceToken:n,session:o,call:t=>$.terminalPunch({terminalSession:t.terminalSession,...e}),onRenewed:s});_(t),d(null),p(``),h(``),window.setTimeout(()=>_(null),_D)}catch(e){b(e)}}},[o,n]);return x===null?(0,N.jsx)(q,{sx:{display:`flex`,minHeight:`100vh`,alignItems:`center`,justifyContent:`center`},children:(0,N.jsx)(K,{children:e(`common.loading`)})}):x===!0?n?o?g?(0,N.jsx)(q,{sx:{display:`flex`,minHeight:`100vh`,alignItems:`center`,justifyContent:`center`,p:2},children:(0,N.jsx)(Y,{sx:{maxWidth:560,width:`100%`},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h4`,gutterBottom:!0,children:g.user.displayName}),(0,N.jsx)(Nm,{severity:`success`,children:`${e(g.entry.direction===`out`?`punch.out`:`punch.in`)} — ${e(`punch.sent`,{time:cw(g.entry.tsUtc,C,t.language)})}`}),(0,N.jsxs)(X,{spacing:.5,sx:{mt:2},children:[(0,N.jsxs)(K,{variant:`body1`,children:[e(`punch.worked`),`: `,g.day.workedMin,` min`]}),(0,N.jsxs)(K,{variant:`body1`,children:[e(`punch.target`),`: `,g.day.targetMin,` min`]}),(0,N.jsxs)(K,{variant:`body1`,children:[e(`punch.balance`),`: `,g.day.balanceMin,` min`]}),!g.day.hasOpenEntry&&(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,children:e(`punch.closed`)})]})]})})}):(0,N.jsxs)(q,{sx:{p:2},children:[(0,N.jsxs)(X,{direction:`row`,justifyContent:`space-between`,alignItems:`baseline`,sx:{mb:2},children:[(0,N.jsxs)(X,{direction:`row`,spacing:1,sx:{alignItems:`center`,minWidth:0},children:[O.logoUrl&&(0,N.jsx)(q,{component:`img`,src:O.logoUrl,alt:``,sx:{height:28,maxWidth:120,objectFit:`contain`}}),(0,N.jsx)(K,{variant:`h5`,children:o.terminal.name})]}),(0,N.jsx)(K,{variant:`h5`,children:cw(T,C,t.language)})]}),(0,N.jsx)(aT,{error:v}),(0,N.jsx)(Y,{sx:{mb:2},children:(0,N.jsxs)(Wg,{children:[(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,children:[(0,N.jsx)(Z,{label:e(`terminal.badge`),value:f,onChange:e=>p(e.target.value),onKeyDown:e=>{e.key===`Enter`&&f.trim()&&A({badge:f.trim()})},autoFocus:!0,fullWidth:!0}),(0,N.jsx)(J,{variant:`contained`,size:`large`,disabled:f.trim().length===0,onClick:()=>void A({badge:f.trim()}),children:e(`punch.now`)})]}),(0,N.jsx)(QE,{onDigit:e=>p(t=>t+e),onBackspace:()=>p(e=>e.slice(0,-1))})]})}),(0,N.jsx)(Y,{children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`subtitle1`,gutterBottom:!0,children:e(`terminal.select`)}),(0,N.jsx)(X,{direction:`row`,spacing:1,sx:{flexWrap:`wrap`,gap:1},children:c.map(e=>(0,N.jsx)(J,{variant:u?.id===e.id?`contained`:`outlined`,startIcon:(0,N.jsx)(Vh,{src:e.avatarUrl??`/person.png`,alt:``,sx:{width:24,height:24}}),onClick:()=>d(e),children:e.displayName},e.id))}),(0,N.jsxs)(X,{direction:{xs:`column`,sm:`row`},spacing:2,sx:{mt:2},children:[o.terminal.pinRequired?(0,N.jsx)(Z,{label:e(`terminal.pin`),type:`password`,value:m,onChange:e=>h(e.target.value),helperText:e(`admin.user.pinHint`),fullWidth:!0}):(0,N.jsx)(K,{variant:`body2`,color:`text.secondary`,sx:{alignSelf:`center`},children:e(`terminal.noPin`)}),(0,N.jsx)(J,{variant:`contained`,size:`large`,disabled:!u||o.terminal.pinRequired&&m.length===0,onClick:()=>u&&void A(o.terminal.pinRequired?{userId:u.id,pin:m}:{userId:u.id}),children:e(`punch.now`)})]}),o.terminal.pinRequired&&(0,N.jsx)(QE,{onDigit:e=>h(t=>t+e),onBackspace:()=>h(e=>e.slice(0,-1))})]})})]}):(0,N.jsxs)(q,{sx:{p:3},children:[(0,N.jsx)(K,{children:e(`common.loading`)}),(0,N.jsx)(aT,{error:v})]}):(0,N.jsx)(q,{sx:{display:`flex`,minHeight:`100vh`,alignItems:`center`,justifyContent:`center`,p:2},children:(0,N.jsx)(Y,{sx:{maxWidth:480,width:`100%`},children:(0,N.jsxs)(Wg,{children:[(0,N.jsx)(K,{variant:`h6`,gutterBottom:!0,children:e(`terminal.title`)}),(0,N.jsxs)(X,{spacing:2,children:[(0,N.jsx)(Z,{label:e(`terminal.deviceToken`),value:i,onChange:e=>a(e.target.value),fullWidth:!0,autoFocus:!0}),(0,N.jsx)(aT,{error:v}),(0,N.jsx)(J,{variant:`contained`,disabled:i.trim().length===0,onClick:()=>r(i.trim()),children:e(`terminal.connect`)})]})]})})}):(0,N.jsxs)(q,{sx:{p:3},children:[(0,N.jsx)(Nm,{severity:`warning`,children:e(`terminal.disabled`)}),(0,N.jsx)(aT,{error:v})]})}var xD=dc({palette:{mode:`light`,primary:{main:`#1976d2`},secondary:{main:`#00897b`}},shape:{borderRadius:10},components:{MuiButton:{defaultProps:{disableElevation:!0},styleOverrides:{root:{textTransform:`none`,minHeight:44}}},MuiCard:{styleOverrides:{root:{border:`1px solid rgba(0,0,0,0.08)`}}}}}),SD=new Il({defaultOptions:{queries:{retry:!1,refetchOnWindowFocus:!0,staleTime:3e4}}});function CD(){let{session:e,checking:t}=Ww();return t&&!e?(0,N.jsx)(q,{sx:{display:`flex`,justifyContent:`center`,alignItems:`center`,minHeight:`100vh`},children:(0,N.jsx)(C_,{})}):e?e.user.mustChangePw?(0,N.jsx)(Qd,{children:(0,N.jsx)(Xd,{path:`*`,element:(0,N.jsx)(WE,{})})}):(0,N.jsxs)(Qd,{children:[(0,N.jsx)(Xd,{path:`/`,element:(0,N.jsx)(HE,{})}),(0,N.jsx)(Xd,{path:`/month`,element:(0,N.jsx)(DT,{})}),(0,N.jsx)(Xd,{path:`/reports`,element:(0,N.jsx)(sD,{})}),(0,N.jsx)(Xd,{path:`/statistics`,element:(0,N.jsx)(dD,{})}),(0,N.jsx)(Xd,{path:`/absences`,element:(0,N.jsx)(sT,{})}),(0,N.jsx)(Xd,{path:`/sync`,element:(0,N.jsx)(fD,{})}),(0,N.jsx)(Xd,{path:`/profile`,element:(0,N.jsx)(oD,{})}),(0,N.jsx)(Xd,{path:`/admin`,element:(0,N.jsx)(zE,{})}),(0,N.jsx)(Xd,{path:`*`,element:(0,N.jsx)(Yd,{to:`/`,replace:!0})})]}):(0,N.jsx)(Qd,{children:(0,N.jsx)(Xd,{path:`*`,element:(0,N.jsx)(UE,{})})})}function wD(){let[e]=(0,y.useState)(()=>new URLSearchParams(window.location.search).has(`tag`));return e?(0,N.jsx)(hD,{}):(0,N.jsxs)(Qd,{children:[(0,N.jsx)(Xd,{path:`/terminal`,element:(0,N.jsx)(bD,{})}),(0,N.jsx)(Xd,{path:`/presence`,element:(0,N.jsx)(iD,{})}),(0,N.jsx)(Xd,{path:`*`,element:(0,N.jsx)(CD,{})})]})}function TD(){let e=gw();return(0,N.jsx)(q,{sx:{minHeight:`100vh`,..._w(e)},children:(0,N.jsx)(wD,{})})}function ED(){return(0,N.jsxs)(Tc,{theme:xD,children:[(0,N.jsx)(vc,{}),(0,N.jsx)(kc,{client:SD,children:(0,N.jsx)(Uw,{children:(0,N.jsx)(Zw,{children:(0,N.jsx)(zf,{children:(0,N.jsx)(hw,{children:(0,N.jsx)(TD,{})})})})})})]})}k({immediate:!0});var DD=document.getElementById(`root`);if(!DD)throw Error(`index.html does not contain #root`);(0,b.createRoot)(DD).render((0,N.jsx)(y.StrictMode,{children:(0,N.jsx)(ED,{})}));
|
|
119
|
+
//# sourceMappingURL=index-D7f1X_an.js.map
|