@maudecode/kanvil 0.4.0 → 0.4.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/apps/server/.env.example +4 -0
- package/apps/server/dist/{auth-Cuo7ECLh.mjs → auth-CLAZTAoL.mjs} +33 -9
- package/apps/server/dist/client.mjs +1 -1
- package/apps/server/dist/{config-DtNfVSnB.mjs → config-DOT1SDQO.mjs} +3 -1
- package/apps/server/dist/index.mjs +6 -6
- package/apps/server/dist/migrate.mjs +1 -1
- package/apps/server/dist/recover.mjs +3 -3
- package/apps/server/dist/{src-tQ82UI8k.mjs → src-VxR5jZiK.mjs} +145 -8
- package/apps/web/dist/assets/{CompositeItem-DgnfVvrF.js → CompositeItem-B5Qlh5m0.js} +1 -1
- package/apps/web/dist/assets/{Trans-f2VYVS9z.js → Trans-DxqBaUXP.js} +1 -1
- package/apps/web/dist/assets/{admin-settings-DBZL4siY.js → admin-settings-Bp7V2t1V.js} +1 -1
- package/apps/web/dist/assets/{archive-restore-CGuLxoHC.js → archive-restore-wsAzhqi-.js} +1 -1
- package/apps/web/dist/assets/az-AZ-DlsPlUZi.js +1 -0
- package/apps/web/dist/assets/{az-BE5iqNIE.js → az-C4KDjOOw.js} +1 -1
- package/apps/web/dist/assets/{corner-left-up-BCro--Gl.js → corner-left-up-arA2ipmM.js} +1 -1
- package/apps/web/dist/assets/de-DE-DLCaqUUe.js +1 -0
- package/apps/web/dist/assets/{de-DLGjUGf_.js → de-Z599ZW7b.js} +1 -1
- package/apps/web/dist/assets/default-6QIAyMq2.js +56 -0
- package/apps/web/dist/assets/{delivery-settings-CZOtb4X8.js → delivery-settings-D5NKPlhN.js} +1 -1
- package/apps/web/dist/assets/el-GR-P2XcwrSU.js +1 -0
- package/apps/web/dist/assets/{el-CG6Xy42v.js → el-xsvq992p.js} +1 -1
- package/apps/web/dist/assets/{ellipsis-ZJM26JNS.js → ellipsis-UOkL14vq.js} +1 -1
- package/apps/web/dist/assets/{es-Bbj5WuMM.js → es-D3e9L5_i.js} +1 -1
- package/apps/web/dist/assets/es-ES-CJoX8f3w.js +1 -0
- package/apps/web/dist/assets/{forms-C3pNy-qY.js → forms-BbWAl0BZ.js} +1 -1
- package/apps/web/dist/assets/{fr-CjuIKc1o.js → fr-CY35Bcpp.js} +1 -1
- package/apps/web/dist/assets/fr-FR-yLkQdy6a.js +1 -0
- package/apps/web/dist/assets/{hi-BVVrZ-zZ.js → hi-Cqfv-E5P.js} +1 -1
- package/apps/web/dist/assets/hi-IN-y8dqej7z.js +1 -0
- package/apps/web/dist/assets/{highlight-CKyEM4jx.js → highlight-Ds7xUUQv.js} +1 -1
- package/apps/web/dist/assets/{id-BhNWOQnp.js → id-CFBOVDUC.js} +1 -1
- package/apps/web/dist/assets/id-ID-DSvh8mGH.js +1 -0
- package/apps/web/dist/assets/{index-BIuqxnJn.js → index-2V6MWx63.js} +5 -5
- package/apps/web/dist/assets/{invitations-D5unaga2.js → invitations-BPk5fwwU.js} +1 -1
- package/apps/web/dist/assets/{it-Cav3_-xd.js → it-DNLponcC.js} +1 -1
- package/apps/web/dist/assets/it-IT-BUcfUqNo.js +1 -0
- package/apps/web/dist/assets/{item-Cj8xpMLk.js → item-DED0Ikqi.js} +1 -1
- package/apps/web/dist/assets/ja-JP-C-jLP_Ay.js +1 -0
- package/apps/web/dist/assets/{ja-DTmZE0Qe.js → ja-ZXGlS4WA.js} +1 -1
- package/apps/web/dist/assets/{ko-BuYCMOUj.js → ko-CSoj1hQM.js} +1 -1
- package/apps/web/dist/assets/ko-KR-C5Ozdm2E.js +1 -0
- package/apps/web/dist/assets/{label-settings-B89Ehf78.js → label-settings-D12QOkDs.js} +1 -1
- package/apps/web/dist/assets/{markdown-blocks-DSEA68s5.js → markdown-blocks-DbsqN1T2.js} +1 -1
- package/apps/web/dist/assets/{member-directory-48yD01yN.js → member-directory-BRhEIYZ6.js} +1 -1
- package/apps/web/dist/assets/{mk-BZ2Rg2sU.js → mk-D77vceoz.js} +1 -1
- package/apps/web/dist/assets/mk-MK-BdM_SsE8.js +1 -0
- package/apps/web/dist/assets/{nl-BtnPzRih.js → nl-Bew8-xmX.js} +1 -1
- package/apps/web/dist/assets/nl-NL-CwjB5sva.js +1 -0
- package/apps/web/dist/assets/{pl-Beg8hEdK.js → pl-CEBl_oa9.js} +1 -1
- package/apps/web/dist/assets/pl-PL-6-PMhTBd.js +1 -0
- package/apps/web/dist/assets/{project-lifecycle-CIAMJ-SX.js → project-lifecycle-DGHAmEB2.js} +1 -1
- package/apps/web/dist/assets/{project-settings-C7lolDSl.js → project-settings-DY8Ossd-.js} +1 -1
- package/apps/web/dist/assets/{pt-BR-B4VZ35N_.js → pt-BR-BDTQeKcp.js} +1 -1
- package/apps/web/dist/assets/pt-BR-TD_wt6Hr.js +1 -0
- package/apps/web/dist/assets/{public-project-DvvfaUd2.js → public-project-BeXla8TL.js} +1 -1
- package/apps/web/dist/assets/{rotate-ccw-GjVJPDML.js → rotate-ccw-DGM890Fc.js} +1 -1
- package/apps/web/dist/assets/{ru-DjVJVHzv.js → ru-BeH0eXQq.js} +1 -1
- package/apps/web/dist/assets/ru-RU-Bk1a6Oln.js +1 -0
- package/apps/web/dist/assets/{search-ZaQmVnj1.js → search-B3-w3oCd.js} +3 -3
- package/apps/web/dist/assets/{send-Dr9bXHhf.js → send-B9baaCnt.js} +1 -1
- package/apps/web/dist/assets/{settings-DXvrVvyS.js → settings-BKZfEkVk.js} +1 -1
- package/apps/web/dist/assets/{sliders-horizontal-C1t_zA7D.js → sliders-horizontal-yKgghk8h.js} +1 -1
- package/apps/web/dist/assets/{switch-D-WTDajm.js → switch-ByOrazEW.js} +1 -1
- package/apps/web/dist/assets/{table-BaRMFP84.js → table-Cm6NQXfq.js} +1 -1
- package/apps/web/dist/assets/{ticket-detail-CFJI4qoK.js → ticket-detail-Cd3_e2jz.js} +2 -2
- package/apps/web/dist/assets/{ticket-editor-DL3nHG_q.js → ticket-editor-CLDBUk0n.js} +2 -2
- package/apps/web/dist/assets/{ticket-list-CDkweYGS.js → ticket-list-BC9acNl4.js} +1 -1
- package/apps/web/dist/assets/{ticket-list-controls-CmTgFQQ-.js → ticket-list-controls-CRQk5ghe.js} +1 -1
- package/apps/web/dist/assets/{tr-Ckc4TA71.js → tr-BNApk6Hc.js} +1 -1
- package/apps/web/dist/assets/tr-TR-CUfBb7K9.js +1 -0
- package/apps/web/dist/assets/{uk-B4ZvJ8xG.js → uk-CjShsgpN.js} +1 -1
- package/apps/web/dist/assets/uk-UA-BDaXBsDP.js +1 -0
- package/apps/web/dist/assets/{upload-BwGa8shS.js → upload-BzLq4CMS.js} +1 -1
- package/apps/web/dist/assets/{useQueries-sQEHjB0a.js → useQueries-D64vLhM6.js} +1 -1
- package/apps/web/dist/assets/vi-VN-Bgb-L6mE.js +1 -0
- package/apps/web/dist/assets/{vi-Dq2krfY8.js → vi-s5Hfv1Y-.js} +1 -1
- package/apps/web/dist/assets/{visual-editor-CBhwqTDu.js → visual-editor-KE96mwCg.js} +1 -1
- package/apps/web/dist/assets/{workspace-settings-DgLyieJN.js → workspace-settings-C-Phmi9i.js} +1 -1
- package/apps/web/dist/assets/{zh-CN-B7Rxc3Mp.js → zh-CN-BBnpHJ9R.js} +1 -1
- package/apps/web/dist/assets/zh-CN-BypkvBe6.js +1 -0
- package/apps/web/dist/assets/zh-TW-CgMsT_XS.js +1 -0
- package/apps/web/dist/assets/{zh-TW-awiwHjeM.js → zh-TW-sSWkqSLN.js} +1 -1
- package/apps/web/dist/index.html +7 -7
- package/compose.yml +2 -0
- package/docs/api.md +3 -3
- package/docs/self-hosting.md +5 -1
- package/package.json +1 -1
- package/apps/server/dist/instance-CCeXRJ6m.mjs +0 -133
- package/apps/web/dist/assets/az-AZ-DesqXNg5.js +0 -1
- package/apps/web/dist/assets/de-DE-BIGY9SNm.js +0 -1
- package/apps/web/dist/assets/default-BgvtI7HK.js +0 -56
- package/apps/web/dist/assets/el-GR-D2TjImt0.js +0 -1
- package/apps/web/dist/assets/es-ES-C_fRqLGU.js +0 -1
- package/apps/web/dist/assets/fr-FR-_tnQsn4j.js +0 -1
- package/apps/web/dist/assets/hi-IN-CcmFsZYy.js +0 -1
- package/apps/web/dist/assets/id-ID-C59tC61D.js +0 -1
- package/apps/web/dist/assets/it-IT-BAP5O3gK.js +0 -1
- package/apps/web/dist/assets/ja-JP-vQa7mEdh.js +0 -1
- package/apps/web/dist/assets/ko-KR-CXlpmX0-.js +0 -1
- package/apps/web/dist/assets/mk-MK-BU5BLpXM.js +0 -1
- package/apps/web/dist/assets/nl-NL-2aSpdZkg.js +0 -1
- package/apps/web/dist/assets/pl-PL-C5Wvnv7f.js +0 -1
- package/apps/web/dist/assets/pt-BR-CVvI-ZB7.js +0 -1
- package/apps/web/dist/assets/ru-RU-C7UUdGIh.js +0 -1
- package/apps/web/dist/assets/tr-TR-VVsL3uMp.js +0 -1
- package/apps/web/dist/assets/uk-UA-DRpCbOps.js +0 -1
- package/apps/web/dist/assets/vi-VN-C0YFqq9j.js +0 -1
- package/apps/web/dist/assets/zh-CN-pcgTdR8c.js +0 -1
- package/apps/web/dist/assets/zh-TW-DymSXkFg.js +0 -1
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/az-D-kj4lmf.js","assets/core-jXc03Sty.js","assets/de-DAv77-wP.js","assets/el-D2ypddWn.js","assets/en-EnSRisMz.js","assets/rolldown-runtime-COiEfhsA.js","assets/es-B_49BMhR.js","assets/fr-B-WmPGZD.js","assets/hi-DvoDcUpL.js","assets/id-CPASBZ2r.js","assets/it-Cd7u97Jd.js","assets/ja-LkOrjegp.js","assets/ko-DPpXw683.js","assets/mk-CkaQRpqe.js","assets/nl-DiEjqOA8.js","assets/pl-CauoMfkf.js","assets/pt-BR-BpOhwoDW.js","assets/ru-DOaRp00B.js","assets/tr-DeYojjLx.js","assets/uk-DACrfgCP.js","assets/vi-CkqUo4w_.js","assets/zh-CN-CC7ghLLr.js","assets/zh-TW-BlIRMi1C.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./rolldown-runtime-COiEfhsA.js";import{A as t,B as n,C as r,D as i,E as a,F as o,G as s,I as c,J as l,K as u,L as d,M as f,O as p,P as m,Q as ee,R as te,S as ne,T as re,U as ie,V as ae,W as oe,X as se,Y as ce,Z as le,_ as h,a as g,b as ue,c as de,d as fe,f as pe,g as me,h as he,i as ge,j as _e,k as ve,l as ye,m as be,n as xe,o as Se,p as Ce,q as we,r as _,s as Te,t as Ee,u as De,v,w as Oe,x as ke,y as Ae,z as je}from"./core-jXc03Sty.js";import{t as Me}from"./en-EnSRisMz.js";import{t as y}from"./preload-helper-BLdHbfdN.js";var Ne=e((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.for(`react.view_transition`),m=Symbol.iterator;function ee(e){return typeof e!=`object`||!e?null:(e=m&&e[m]||e[`@@iterator`],typeof e==`function`?e:null)}var te={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},ne=Object.assign,re={};function ie(e,t,n){this.props=e,this.context=t,this.refs=re,this.updater=n||te}ie.prototype.isReactComponent={},ie.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},ie.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function ae(){}ae.prototype=ie.prototype;function oe(e,t,n){this.props=e,this.context=t,this.refs=re,this.updater=n||te}var se=oe.prototype=new ae;se.constructor=oe,ne(se,ie.prototype),se.isPureReactComponent=!0;var ce=Array.isArray;function le(){}var h={H:null,A:null,T:null,S:null},g=Object.prototype.hasOwnProperty;function ue(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function de(e,t){return ue(e.type,t,e.props)}function fe(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function pe(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var me=/\/+/g;function he(e,t){return typeof e==`object`&&e&&e.key!=null?pe(``+e.key):t.toString(36)}function ge(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(le,le):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function _e(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,_e(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+he(e,0):a,ce(o)?(i=``,c!=null&&(i=c.replace(me,`$&/`)+`/`),_e(o,r,i,``,function(e){return e})):o!=null&&(fe(o)&&(o=de(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(me,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(ce(e))for(var u=0;u<e.length;u++)a=e[u],s=l+he(a,u),c+=_e(a,r,i,s,o);else if(u=ee(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+he(a,u++),c+=_e(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return _e(ge(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function ve(e,t,n){if(e==null)return e;var r=[],i=0;return _e(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function ye(e){if(e._status===-1){var t=e._result,n=t();n.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t,n.status===void 0&&(n.status=`fulfilled`,n.value=t))},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t,n.status===void 0&&(n.status=`rejected`,n.reason=t))}),e._status===-1&&(e._status=0,e._result=n)}if(e._status===1)return e._result.default;throw e._result}var be=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)};function xe(e){var t=h.T,n={};n.types=t===null?null:t.types,h.T=n;try{var r=e(),i=h.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(le,be)}catch(e){be(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),h.T=t}}function Se(e){var t=h.T;if(t!==null){var n=t.types;n===null?t.types=[e]:n.indexOf(e)===-1&&n.push(e)}else xe(Se.bind(null,e))}var Ce={map:ve,forEach:function(e,t,n){ve(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return ve(e,function(){t++}),t},toArray:function(e){return ve(e,function(e){return e})||[]},only:function(e){if(!fe(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=Ce,e.Component=ie,e.Fragment=r,e.Profiler=a,e.PureComponent=oe,e.StrictMode=i,e.Suspense=l,e.ViewTransition=p,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=h,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return h.H.useMemoCache(e)}},e.addTransitionType=Se,e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=ne({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!g.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return ue(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)g.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return ue(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=fe,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:ye}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=xe,e.unstable_useCacheRefresh=function(){return h.H.useCacheRefresh()},e.use=function(e){return h.H.use(e)},e.useActionState=function(e,t,n){return h.H.useActionState(e,t,n)},e.useCallback=function(e,t){return h.H.useCallback(e,t)},e.useContext=function(e){return h.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return h.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return h.H.useEffect(e,t)},e.useEffectEvent=function(e){return h.H.useEffectEvent(e)},e.useId=function(){return h.H.useId()},e.useImperativeHandle=function(e,t,n){return h.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return h.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return h.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return h.H.useMemo(e,t)},e.useOptimistic=function(e,t){return h.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return h.H.useReducer(e,t,n)},e.useRef=function(e){return h.H.useRef(e)},e.useState=function(e){return h.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return h.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return h.H.useTransition()},e.version=`19.3.1`})),Pe=e(((e,t)=>{t.exports=Ne()}));function Fe(){let e=this._zod;return e.message??=JSON.stringify(e.def,m,2),e.message}function Ie(e){this._zod.message=e}var Le={get:Fe,set:Ie,enumerable:!0,configurable:!0},Re={value:void 0,enumerable:!1},ze=new WeakSet([Object.prototype,Error.prototype]),Be=_(`$ZodError`,(e,t)=>{e.name=`$ZodError`,Re.value=t,Object.defineProperty(e,"issues",Re),Re.value=void 0,Object.defineProperty(e,"message",Le);let n=Object.getPrototypeOf(e);ze.has(n)||(ze.add(n),Object.defineProperty(n,"toString",{configurable:!0,enumerable:!1,get(){let e=()=>this.message;return Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0})}}))});function Ve(e,t,n){return Object.prototype.hasOwnProperty.call(e,t)||(t===`__proto__`?Object.defineProperty(e,t,{value:n(),writable:!0,enumerable:!0,configurable:!0}):e[t]=n()),e[t]}function He(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?Ve(n,i.path[0],()=>[]).push(t(i)):r.push(t(i));return{formErrors:r,fieldErrors:n}}function Ue(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i<e.length;){let n=e[i],o=i===e.length-1;if(n===`_errors`){o&&r._errors.push(t(a)),i++;continue}Object.prototype.hasOwnProperty.call(r,n)||Object.defineProperty(r,n,{value:{_errors:[]},enumerable:!0,writable:!0,configurable:!0});let s=r[n];o&&s._errors.push(t(a)),r=s,i++}}}};return r(e),n}function We(e,t){return{callee:t?.callee??e,Err:t?.Err}}var Ge=e=>{let t=(n,r,i,a)=>{let o=i?{...i,async:!1}:{async:!1},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise)throw new Ee;if(s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>Oe(e,o,ge())));throw Ce(n,a?.callee??t),n}return s.value};return t},Ke=e=>{let t=async(n,r,i,a)=>{let o=i?{...i,async:!0}:{async:!0},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise&&(s=await s),s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>Oe(e,o,ge())));throw Ce(n,a?.callee??t),n}return s.value};return t},qe=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new Ee;return a.issues.length?Je(e,a.issues,i):{success:!0,data:a.value}};function Je(e,t,n){let r;return{success:!1,get error(){return r||(r=new e(t.map(e=>Oe(e,n,ge()))),t=void 0,n=void 0),r},set error(e){r=e,t=void 0,n=void 0}}}var Ye=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?Je(e,a.issues,i):{success:!0,data:a.value}},Xe=Symbol.for(`zod.compile.invalid`),Ze=Symbol.for(`zod.compile.fallback`),Qe=((e,t,n)=>{let r=e._zod.bag.validator;if(r!==void 0){if(r(t)!==Xe)return!0;if(r.definite===!0&&n===void 0)return!1}return $e(e,t,n)});function $e(e,t,n){let r=n?{...n,async:!1,abortEarly:!0}:{async:!1,abortEarly:!0},i=e._zod.bag.fallbackRun,a;if(i?(r[Ze]=!0,a=i({value:t,issues:[]},r)):a=e._zod.run({value:t,issues:[]},r),a instanceof Promise)throw new Ee;return a.issues.length===0}var et=async(e,t,n)=>{let r=n?{...n,async:!0,abortEarly:!0}:{async:!0,abortEarly:!0},i=e._zod.run({value:t,issues:[]},r);return i instanceof Promise&&(i=await i),i.issues.length===0},tt=e=>{let t=Ge(e),n=(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return t(e,r,o,We(n,a))};return n},nt=e=>{let t=Ge(e),n=(e,r,i,a)=>t(e,r,i,We(n,a));return n},rt=e=>{let t=Ke(e),n=async(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return await t(e,r,o,We(n,a))};return n},it=e=>{let t=Ke(e),n=async(e,r,i,a)=>await t(e,r,i,We(n,a));return n},at=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return qe(e)(t,n,i)},ot=e=>(t,n,r)=>qe(e)(t,n,r),st=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ye(e)(t,n,i)},ct=e=>async(t,n,r)=>Ye(e)(t,n,r),lt=/^[cC][0-9a-z]{6,}$/,ut=/^[0-9a-z]+$/,dt=/^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/,ft=/^[0-9a-vA-V]{20}$/,pt=/^[A-Za-z0-9]{27}$/,mt=/^[a-zA-Z0-9_-]{21}$/;function ht(e){return RegExp(`^[a-zA-Z0-9_-]{${e}}$`)}var gt=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,_t=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,vt=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,yt=/^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,bt=`^(?=[\\s\\S]*[\\p{Extended_Pictographic}\\p{Regional_Indicator}\\u20E3])[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$`;function xt(){return new RegExp(bt,`u`)}var St=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Ct=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,wt=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Tt=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Et=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Dt=/^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$/,Ot=/^https?$/,kt=/^\+[1-9]\d{6,14}$/,At=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`;function jt(e){return RegExp(`^${e}$`)}var Mt=jt(At);function Nt(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:e.seconds?`${t}:[0-5]\\d(?:\\.\\d+)?`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Pt(e){return RegExp(`^${Nt(e)}$`)}function Ft(e){let t=[`Z`];e.offset&&t.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let n=`${Nt({precision:e.precision,seconds:!0})}(?:${t.join(`|`)})`,r=e.local?`${n}|${Nt({precision:e.precision})}`:n;return RegExp(`^${At}T(?:${r})$`)}var It=/^[\s\S]{0,}$/,Lt=/^-?\d+$/,Rt=/^-?\d+(?:\.\d+)?$/,zt=/^(?:true|false)$/i,Bt=/^null$/i,Vt=/^[^A-Z]*$/,Ht=/^[^a-z]*$/,b=_(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),Ut=e=>{let t=e.value;return!te(t)&&t.length!==void 0},Wt={number:`number`,bigint:`bigint`,object:`date`},Gt=_(`$ZodCheckLessThan`,(e,t)=>{b.init(e,t);let n=Wt[typeof t.value];e._zod.check=r=>{(t.inclusive?r.value<=t.value:r.value<t.value)||r.issues.push({origin:Wt[typeof r.value]??n,code:`too_big`,maximum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Kt=_(`$ZodCheckGreaterThan`,(e,t)=>{b.init(e,t);let n=Wt[typeof t.value];e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:Wt[typeof r.value]??n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),qt=_(`$ZodCheckMultipleOf`,(e,t)=>{b.init(e,t),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?t.value!==BigInt(0)&&n.value%t.value===BigInt(0):re(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),Jt=_(`$ZodCheckNumberFormat`,(e,t)=>{b.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=Te[t.format];e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}s<i&&o.issues.push({origin:`number`,input:s,code:`too_small`,minimum:i,inclusive:!0,inst:e,continue:!t.abort}),s>a&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),Yt=_(`$ZodCheckMaxLength`,(e,t)=>{var n;b.init(e,t),(n=e._zod.def).when??(n.when=Ut),e._zod.check=n=>{let r=n.value,a=r.length;if((typeof r==`string`&&a>t.maximum?me(r):a)<=t.maximum)return;let o=i(r);n.issues.push({origin:o,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Xt=_(`$ZodCheckMinLength`,(e,t)=>{var n;b.init(e,t),(n=e._zod.def).when??(n.when=Ut),e._zod.check=n=>{let r=n.value,a=r.length;if((typeof r==`string`&&a>=t.minimum&&a<t.minimum*2?me(r):a)>=t.minimum)return;let o=i(r);n.issues.push({origin:o,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Zt=_(`$ZodCheckLengthEquals`,(e,t)=>{var n;b.init(e,t),(n=e._zod.def).when??(n.when=Ut),e._zod.check=n=>{let r=n.value,a=r.length,o=typeof r==`string`&&a>=t.length&&a<=t.length*2?me(r):a;if(o===t.length)return;let s=i(r),c=o>t.length;n.issues.push({origin:s,...c?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),Qt=_(`$ZodCheckStringFormat`,(e,t)=>{var n,r;b.init(e,t),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),$t=_(`$ZodCheckRegex`,(e,t)=>{Qt.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),en=_(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=Vt,Qt.init(e,t)}),tn=_(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=Ht,Qt.init(e,t)}),nn=_(`$ZodCheckIncludes`,(e,t)=>{b.init(e,t);let n=ke(t.includes);t.pattern=new RegExp(typeof t.position==`number`?`^.{${t.position},}${n}`:n),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),rn=_(`$ZodCheckStartsWith`,(e,t)=>{b.init(e,t);let n=RegExp(`^${ke(t.prefix)}.*`);t.pattern??=n,e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),an=_(`$ZodCheckEndsWith`,(e,t)=>{b.init(e,t);let n=RegExp(`.*${ke(t.suffix)}$`);t.pattern??=n,e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),on=_(`$ZodCheckOverwrite`,(e,t)=>{b.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),sn=class{constructor(e=[],t={}){this.content=[],this.indent=0,this.args=e,this.closed=t}indented(e){this.indent+=1;try{e(this)}finally{--this.indent}}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(`
|
|
3
|
-
`).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.content??[``];return new e(...Object.keys(this.closed),`return function (${this.args.join(`, `)}) {\n${t.join(`
|
|
4
|
-
`)}\n};`)(...Object.values(this.closed))}},cn={major:4,minor:6,patch:7},x=_(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=cn;let r=e._zod.def.checks,i=e._zod.traits.has(`$ZodCheck`)?[e,...r??[]]:r?.length?[...r]:[];for(let t of i)for(let n of t._zod.onattach)n(e);if(i.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(t,n,r)=>{if(t.memo)return t;let i=de(t),a;for(let o of n){if(o._zod.def.when){if(ne(t)||!o._zod.def.when(t))continue}else if(i)continue;let n=t.issues.length,s=o._zod.check(t);if(s instanceof Promise&&r?.async===!1)throw new Ee;if(a||s instanceof Promise)a=(a??Promise.resolve()).then(async()=>{await s,t.issues.length!==n&&(fe(t.issues,n,e),i||=de(t,n))});else{if(t.issues.length===n)continue;fe(t.issues,n,e),i||=de(t,n)}}return a?a.then(()=>t):t},n=(n,r,a)=>{if(de(n))return n.aborted=!0,n;let o=t(r,i,a);if(o instanceof Promise){if(a.async===!1)throw new Ee;return o.then(t=>e._zod.parse(t,a))}return e._zod.parse(o,a)};e._zod.run=(r,a)=>{if(a.skipChecks)return e._zod.parse(r,a);if(a.direction===`backward`){let t=e._zod.parse({value:r.value,issues:[]},{...a,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,r,a)):n(t,r,a)}let o=e._zod.parse(r,a);if(o instanceof Promise){if(a.async===!1)throw new Ee;return o.then(e=>t(e,i,a))}return t(o,i,a)}}},{get"~standard"(){return p(this,`~standard`,dn(this))},set"~standard"(e){ae(this,`~standard`,e)}}),ln=(e,t)=>e.issues.length?{issues:e.issues.map(e=>Oe(e,t,ge()))}:{value:e.value};async function un(e,t){let n={async:!0};return ln(await e._zod.run({value:t,issues:[]},n),n)}function dn(e){return{validate:t=>{let n={async:!1};try{let r=e._zod.run({value:t,issues:[]},n);if(!(r instanceof Promise))return ln(r,n)}catch{}return un(e,t)},vendor:`zod`,version:1}}var fn=_(`$ZodString`,(e,t)=>{x.init(e,t),e._zod.pattern=t.pattern??It,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),S=_(`$ZodStringFormat`,(e,t)=>{Qt.init(e,t),fn.init(e,t)}),pn=_(`$ZodGUID`,(e,t)=>{t.pattern??=_t,S.init(e,t)}),mn=_(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=vt(e)}else t.pattern??=vt();S.init(e,t)}),hn=_(`$ZodEmail`,(e,t)=>{t.pattern??=yt,S.init(e,t)});function gn(e){try{return typeof URL<`u`&&typeof URL.canParse==`function`?URL.canParse(e):(new URL(e),!0)}catch{return!1}}function _n(e,t){return!(`normalize`in t)&&!(`hostname`in t)&&!(`protocol`in t)?gn(e)||2:vn(e,t)}function vn(e,t){if(!t.normalize&&t.protocol?.source===Ot.source&&!/^https?:\/\//i.test(e))return 1;try{if(typeof URL<`u`){let t=URL;if(typeof t.parse==`function`)return t.parse(e)??2}return new URL(e)}catch{return 2}}var yn=/[\t\n\r]/g;function bn(e){return e.replace(yn,``)}function xn(e,t){return t.lastIndex=0,t.test(e.hostname)}function Sn(e,t){return t.lastIndex=0,t.test(e.protocol.endsWith(`:`)?e.protocol.slice(0,-1):e.protocol)}var Cn=_(`$ZodURL`,(e,t)=>{S.init(e,t),e._zod.check=n=>{try{let r=n.value.trim(),i=_n(r,t);if(i===1){n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid URL format`,input:n.value,inst:e,continue:!t.abort});return}if(i===2){n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort});return}if(i===!0){n.value=bn(r);return}t.hostname&&!xn(i,t.hostname)&&n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort}),t.protocol&&!Sn(i,t.protocol)&&n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort}),n.value=t.normalize?i.href:bn(r);return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),wn=_(`$ZodEmoji`,(e,t)=>{t.pattern??=xt(),S.init(e,t)}),Tn=_(`$ZodNanoID`,(e,t)=>{if(t.length!==void 0&&(!Number.isInteger(t.length)||t.length<1))throw Error(`Invalid nanoid length: ${t.length}`);t.pattern??=t.length===void 0?mt:ht(t.length),S.init(e,t)}),En=_(`$ZodCUID`,(e,t)=>{t.pattern??=lt,S.init(e,t)}),Dn=_(`$ZodCUID2`,(e,t)=>{t.pattern??=ut,S.init(e,t)}),On=_(`$ZodULID`,(e,t)=>{t.pattern??=dt,S.init(e,t)}),kn=_(`$ZodXID`,(e,t)=>{t.pattern??=ft,S.init(e,t)}),An=_(`$ZodKSUID`,(e,t)=>{t.pattern??=pt,S.init(e,t)}),jn=_(`$ZodISODateTime`,(e,t)=>{t.pattern??=Ft(t),S.init(e,t)}),Mn=_(`$ZodISODate`,(e,t)=>{t.pattern??=Mt,S.init(e,t)}),Nn=_(`$ZodISOTime`,(e,t)=>{t.pattern??=Pt(t),S.init(e,t)}),Pn=_(`$ZodISODuration`,(e,t)=>{t.pattern??=gt,S.init(e,t)}),Fn=_(`$ZodIPv4`,(e,t)=>{t.pattern??=St,S.init(e,t)}),In=/^[0-9a-fA-F:.]+$/;function Ln(e){return In.test(e)?gn(`http://[${e}]`):!1}var Rn=_(`$ZodIPv6`,(e,t)=>{t.pattern??=Ct,S.init(e,t),e._zod.check=n=>{Ln(n.value)||n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}),zn=_(`$ZodCIDRv4`,(e,t)=>{t.pattern??=wt,S.init(e,t)});function Bn(e){let t=e.split(`/`);if(t.length!==2)return!1;let[n,r]=t;if(!r)return!1;let i=Number(r);return`${i}`!==r||i<0||i>128?!1:Ln(n)}var Vn=_(`$ZodCIDRv6`,(e,t)=>{t.pattern??=Tt,S.init(e,t),e._zod.check=n=>{Bn(n.value)||n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}});function Hn(e){if(e===``)return!0;if(/\s/.test(e)||e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var Un=/^[0-9a-zA-Z+/]*={0,2}$/,Wn=_(`$ZodBase64`,(e,t)=>{t.pattern??=Un,S.init(e,t),e._zod.check=n=>{Hn(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}}),Gn=/^[A-Za-z0-9_-]*$/;function Kn(e){if(!Gn.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return Hn(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var qn=_(`$ZodBase64URL`,(e,t)=>{t.pattern??=Gn,S.init(e,t),e._zod.check=n=>{Kn(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),Jn=_(`$ZodE164`,(e,t)=>{t.pattern??=kt,S.init(e,t)});function Yn(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var Xn=_(`$ZodJWT`,(e,t)=>{S.init(e,t),e._zod.check=n=>{Yn(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),Zn=_(`$ZodNumber`,(e,t)=>{x.init(e,t),e._zod.pattern=Rt,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch{}let i=n.value;if(typeof i==`number`&&!Number.isNaN(i)&&Number.isFinite(i))return n;let a=typeof i==`number`?Number.isNaN(i)?`NaN`:Number.isFinite(i)?void 0:String(i):void 0;return n.issues.push({expected:`number`,code:`invalid_type`,input:i,inst:e,...a?{received:a}:{}}),n}}),Qn=_(`$ZodNumberFormat`,(e,t)=>{Jt.init(e,t),Zn.init(e,t)}),$n=_(`$ZodBoolean`,(e,t)=>{x.init(e,t),e._zod.pattern=zt,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=!!n.value}catch{}let i=n.value;return typeof i==`boolean`||n.issues.push({expected:`boolean`,code:`invalid_type`,input:i,inst:e}),n}}),er=_(`$ZodNull`,(e,t)=>{x.init(e,t),e._zod.pattern=Bt,e._zod.values=new Set([null]),e._zod.parse=(t,n)=>{let r=t.value;return r===null||t.issues.push({expected:`null`,code:`invalid_type`,input:r,inst:e}),t}}),tr=_(`$ZodUnknown`,(e,t)=>{x.init(e,t),e._zod.parse=e=>e}),nr=_(`$ZodNever`,(e,t)=>{x.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)});function rr(e,t){let n=le(e._zod.def.checks);if(!n.length)return;let r=Math.min(...n.map(e=>e[0])),i=e._zod.parse;e._zod.parse=(n,a)=>{let o=t(n.value);if(o>r&&!a?.skipChecks&&a?.direction!==`backward`){for(let[t,r]of le(e._zod.def.checks))if(o>t&&r._zod.def.when(n)){let t=n.issues.length;return r._zod.check(n),n.issues[t].continue=!1,fe(n.issues,t,e),n}}return i(n,a)}}var ir=e=>Array.isArray(e)?e.length:-1;function ar(e,t,n){e.issues.length&&t.issues.push(...s(n,e.issues)),t.value[n]=e.value}var or=_(`$ZodArray`,(e,t)=>{x.init(e,t);let n=g.memoizer;n?.attach(e),e._zod.parse=(r,i)=>{let a=r.value;if(!Array.isArray(a))return r.issues.push({expected:`array`,code:`invalid_type`,input:a,inst:e}),r;r.value=n?n.alloc(e,r,Array(a.length),i):Array(a.length);let o=[],s=i?.abortEarly;for(let e=0;e<a.length;e++){let n=a[e],c=t.element._zod.run({value:n,issues:[]},i);if(c instanceof Promise)o.push(c.then(t=>ar(t,r,e)));else if(ar(c,r,e),s&&c.issues.length!==0&&de(c))break}return o.length?Promise.all(o).then(()=>r):r},rr(e,ir)});function sr(e,t,n,r,i,a){let o=n in r,c=a===`optional`;if(o||!c||i!==`optional`){if(e.issues.length){if(i!==void 0&&c&&!o)return;t.issues.push(...s(n,e.issues))}!o&&i===void 0?e.issues.length||t.issues.push({code:`invalid_type`,expected:`nonoptional`,input:void 0,path:[n]}):e.value===void 0?(o||i===`defaulted`&&!c)&&(t.value[n]=void 0):t.value[n]=e.value}}var cr=[];function lr(e){let t=Object.keys(e.shape),r=Object.getOwnPropertySymbols(e.shape),i=r.length?r:cr,a=i.length?[...t,...i]:t;for(let t of a)if(!e.shape?.[t]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${String(t)}": expected a Zod schema`);let o=n(e.shape);return{...e,allKeys:a,symbolKeys:i,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(o)}}function ur(e,t,n,r,i,a,o){let s=[],c=i.keySet,l=i.catchall._zod,u=l.def.type,d=l.optin,f=l.optout,p=0;for(let i in t){if(o&&n.issues.length!==p){if(de(n,p))break;p=n.issues.length}if(c.has(i))continue;if(i===`__proto__`){u===`never`&&s.push(i);continue}if(u===`never`){s.push(i);continue}let a=l.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>sr(e,n,i,t,d,f))):sr(a,n,i,t,d,f)}return s.length&&n.issues.push({code:`unrecognized_keys`,keys:s,input:t,inst:a,continue:!0}),e.length?Promise.all(e).then(()=>n):n}var dr=_(`$ZodObject`,(e,n)=>{x.init(e,n);let r=Object.getOwnPropertyDescriptor(n,`shape`),i=r?.get?r.get.raw:n.shape??{};if(i){let e=()=>{let t={...i};return Object.defineProperty(n,"shape",{value:t}),e.raw=t,t};e.raw=i,Object.defineProperty(n,"shape",{get:e})}let a=pe(()=>lr(n));v(e,`propValues`,e=>{let t=e.def.shape,n={};for(let e in t){let r=t[e]._zod;if(r.values){Object.prototype.hasOwnProperty.call(n,e)||De(n,e,new Set);for(let t of r.values)n[e].add(t);r.optin!==void 0&&n[e].add(void 0)}}return n});let o=t,s=n.catchall,c,l=g.memoizer;l?.attach(e),e._zod.parse=(t,n)=>{c??=a.value;let r=t.value;if(!o(r))return t.issues.push({expected:`object`,code:`invalid_type`,input:r,inst:e}),t;t.value=l?l.alloc(e,t,{},n):{};let i=[],u=c.shape,d=n?.abortEarly,f=t.issues.length;for(let e of c.allKeys){if(d&&t.issues.length!==f){if(de(t,f))break;f=t.issues.length}if(e===`__proto__`)continue;let a=u[e],o=a._zod.optin,s=a._zod.optout,c=a._zod.run({value:r[e],issues:[]},n);c instanceof Promise?i.push(c.then(n=>sr(n,t,e,r,o,s))):sr(c,t,e,r,o,s)}return s?ur(i,r,t,n,a.value,e,d===!0):i.length?Promise.all(i).then(()=>t):t}}),fr=_(`$ZodObjectJIT`,(e,n)=>{dr.init(e,n);let r=e._zod.parse,i=pe(()=>lr(n)),a=g.memoizer,o=t=>{let n=i.value,r=n.symbolKeys,o=new sn([`payload`,`ctx`],{shape:t,inst:e,memo:a,syms:r}),s=e=>`shape[${e}]._zod.run({ value: input[${e}], issues: [] }, ctx)`,c=(e,t)=>`
|
|
5
|
-
let ${e}_ab = false;
|
|
6
|
-
for (let i = 0; i < ${e}.issues.length; i++) {
|
|
7
|
-
const iss = ${e}.issues[i];
|
|
8
|
-
iss.path = iss.path ? [${t}, ...iss.path] : [${t}];
|
|
9
|
-
payload.issues.push(iss);
|
|
10
|
-
if (iss.continue !== true) ${e}_ab = true;
|
|
11
|
-
}
|
|
12
|
-
if (${e}_ab && ctx && ctx.abortEarly) {
|
|
13
|
-
payload.value = newResult;
|
|
14
|
-
return payload;
|
|
15
|
-
}`;o.write(`const input = payload.value;`);let l=Object.create(null),u=0;for(let e of n.allKeys)l[e]=`key_${u++}`;o.write(a?`const newResult = memo.alloc(inst, payload, {}, ctx);`:`const newResult = {};`);for(let e of n.allKeys){if(e===`__proto__`)continue;let n=l[e],i=typeof e==`symbol`?`syms[${r.indexOf(e)}]`:ue(e),a=`${i} in input`,u=t[e],d=u?._zod?.optin,f=d!==void 0,p=u?._zod?.optout===`optional`;if(o.write(`const ${n} = ${s(i)};`),f&&p){let e=d===`optional`?`${n}_present`:`${n}.value !== undefined || ${n}_present`;o.write(`
|
|
16
|
-
const ${n}_present = ${a};
|
|
17
|
-
if (!${n}.issues.length || ${n}_present) {
|
|
18
|
-
if (${n}.issues.length) {${c(n,i)}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
if (${e}) {
|
|
22
|
-
newResult[${i}] = ${n}.value;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
`)}else f?(o.write(`
|
|
27
|
-
if (${n}.issues.length) {${c(n,i)}
|
|
28
|
-
}
|
|
29
|
-
`),d===`defaulted`?o.write(`newResult[${i}] = ${n}.value;`):o.write(`
|
|
30
|
-
if (${n}.value !== undefined || ${a}) {
|
|
31
|
-
newResult[${i}] = ${n}.value;
|
|
32
|
-
}
|
|
33
|
-
`)):o.write(`
|
|
34
|
-
const ${n}_present = ${a};
|
|
35
|
-
if (${n}.issues.length) {${c(n,i)}
|
|
36
|
-
}
|
|
37
|
-
if (!${n}_present && !${n}.issues.length) {
|
|
38
|
-
payload.issues.push({
|
|
39
|
-
code: "invalid_type",
|
|
40
|
-
expected: "nonoptional",
|
|
41
|
-
input: undefined,
|
|
42
|
-
path: [${i}]
|
|
43
|
-
});
|
|
44
|
-
if (ctx && ctx.abortEarly) {
|
|
45
|
-
payload.value = newResult;
|
|
46
|
-
return payload;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (${n}_present) {
|
|
51
|
-
newResult[${i}] = ${n}.value;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
`)}return o.write(`payload.value = newResult;`),o.write(`return payload;`),o.compile()},s,c=t,l=!g.jitless,u=l&&ye.value,d=n.catchall,f;e._zod.parse=(t,a)=>{f??=i.value;let p=t.value;return c(p)?l&&u&&a?.async===!1&&a.jitless!==!0?(s||=o(n.shape),t=s(t,a),d?ur([],p,t,a,f,e,a?.abortEarly===!0):t):r(t,a):(t.issues.push({expected:`object`,code:`invalid_type`,input:p,inst:e}),t)}});function pr(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!de(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>Oe(e,r,ge())))}),t)}var mr=_(`$ZodUnion`,(e,t)=>{x.init(e,t),v(e,`optin`,e=>e.def.options.some(e=>e._zod.optin===`defaulted`)?`defaulted`:e.def.options.some(e=>e._zod.optin!==void 0)?`optional`:void 0),v(e,`optout`,e=>e.def.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),v(e,`values`,e=>{if(e.def.options.every(e=>e._zod.values))return new Set(e.def.options.flatMap(e=>Array.from(e._zod.values)))}),v(e,`pattern`,e=>{if(e.def.options.every(e=>e._zod.pattern)){let t=e.def.options.map(e=>e._zod.pattern);return RegExp(`^(${t.map(e=>be(e.source)).join(`|`)})$`)}});let n=t.options.length===1?t.options[0]._zod.run:null;e._zod.parse=(r,i)=>{if(n)return n(r,i);let a=!1,o=[];for(let e of t.options){let t=e._zod.run({value:r.value,issues:[]},i);if(t instanceof Promise)o.push(t),a=!0;else{if(t.issues.length===0)return t;o.push(t)}}return a?Promise.all(o).then(t=>pr(t,r,e,i)):pr(o,r,e,i)}});function hr(e){let t=new Map;for(let n of e.options){let r=n._zod.propValues?.[e.discriminator];if(!r||r.size===0)throw Error(`Invalid discriminated union option at index "${e.options.indexOf(n)}"`);for(let e of r)if(t.has(e)){if(e!==void 0)throw Error(`Duplicate discriminator value "${String(e)}"`);t.set(e,null)}else t.set(e,n)}return t}var gr=_(`$ZodDiscriminatedUnion`,(e,n)=>{n.inclusive=!1,mr.init(e,n);let r=e._zod.parse;v(e,`propValues`,e=>{let t={},n=0;for(let r of e.def.options){let i=r._zod.propValues;if(!i||Object.keys(i).length===0)throw Error(`Invalid discriminated union option at index "${e.def.options.indexOf(r)}"`);i[e.def.discriminator]?.has(void 0)&&n++;for(let[e,n]of Object.entries(i)){Object.prototype.hasOwnProperty.call(t,e)||De(t,e,new Set);for(let r of n)t[e].add(r)}}return!e.def.unionFallback&&n>1&&t[e.def.discriminator]?.delete(void 0),t}),n.options.forEach((e,t)=>{let r=we(e._zod.def);if(r&&!Object.prototype.hasOwnProperty.call(r,n.discriminator))throw Error(`Invalid discriminated union option at index "${t}"`)});let i=pe(()=>hr(n));e._zod.parse=(a,o)=>{let s=a.value;if(!t(s))return a.issues.push({code:`invalid_type`,expected:`object`,input:s,inst:e}),a;let c=s?.[n.discriminator],l=i.value.get(c);return l&&(c!==void 0||o.direction!==`backward`)?l._zod.run(a,o):n.unionFallback||o.direction===`backward`?r(a,o):(a.issues.push({code:`invalid_union`,errors:[],note:`No matching discriminator`,discriminator:n.discriminator,options:Array.from(i.value.keys()).filter(e=>i.value.get(e)!==null),input:s,path:[n.discriminator],inst:e}),a)}}),_r=_(`$ZodIntersection`,(e,t)=>{x.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>yr(e,t,n)):yr(e,i,a)}});function vr(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(_e(e)&&_e(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};Object.prototype.hasOwnProperty.call(i,`__proto__`)&&delete i.__proto__;for(let n of r){if(n===`__proto__`)continue;let r=vr(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;r<e.length;r++){let i=e[r],a=t[r],o=vr(i,a);if(!o.valid)return{valid:!1,mergeErrorPath:[r,...o.mergeErrorPath]};n.push(o.data)}return{valid:!0,data:n}}return{valid:!1,mergeErrorPath:[]}}function yr(e,t,n){let r=new Map,i,a=new Map,o=(e,t)=>{let n;if(e.code===`unrecognized_keys`&&!e.path?.length)i??=e,n=e.keys;else if(e.code===`invalid_key`&&e.origin===`record`&&e.path?.length===1){let t=String(e.path[0]);a.has(t)||a.set(t,e),n=[t]}else return!1;for(let e of n)r.has(e)||r.set(e,{}),r.get(e)[t]=!0;return!0};for(let n of t.issues)o(n,`l`)||e.issues.push(n);for(let t of n.issues)o(t,`r`)||e.issues.push(t);let s=[...r].filter(([,e])=>e.l&&e.r).map(([e])=>e);if(s.length){let t=i?s.filter(e=>i.keys.includes(e)):[];t.length&&e.issues.push({...i,keys:t});for(let n of s)!t.includes(n)&&a.has(n)&&e.issues.push(a.get(n))}let c=vr(t.value,n.value);if(!c.valid){if(de(e))return e;throw Error(`Unmergable intersection. Error path: ${JSON.stringify(c.mergeErrorPath)}`)}return e.value=c.data,e}var br=_(`$ZodTuple`,(e,t)=>{x.init(e,t);let n=t.items,r=g.memoizer;r?.attach(e),e._zod.parse=(i,a)=>{let o=i.value;if(!Array.isArray(o))return i.issues.push({input:o,inst:e,expected:`tuple`,code:`invalid_type`}),i;i.value=r?r.alloc(e,i,[],a):[];let s=[],c=xr(n,`optin`),l=xr(n,`optout`);if(!t.rest){if(o.length<c)return i.issues.push({code:`too_small`,minimum:c,inclusive:!0,input:o,inst:e,origin:`array`}),i;o.length>n.length&&i.issues.push({code:`too_big`,maximum:n.length,inclusive:!0,input:o,inst:e,origin:`array`})}let u=Array(n.length),d=t.rest?a?.abortEarly:void 0,f=!1;for(let e=0;e<n.length;e++){let t=n[e]._zod.run({value:o[e],issues:[]},a);t instanceof Promise?s.push(t.then(t=>{u[e]=t})):(u[e]=t,d&&!f&&t.issues.length&&(f=de(t)))}if(t.rest&&!f){let e=n.length-1,r=o.slice(n.length),c=i.issues.length;for(let n of r){if(d&&i.issues.length!==c){if(de(i,c))break;c=i.issues.length}e++;let r=t.rest._zod.run({value:n,issues:[]},a);r instanceof Promise?s.push(r.then(t=>Sr(t,i,e))):Sr(r,i,e)}}return s.length?Promise.all(s).then(()=>Cr(u,i,n,o,l)):Cr(u,i,n,o,l)}});function xr(e,t){for(let n=e.length-1;n>=0;n--)if(!(t===`optin`?e[n]._zod.optin!==void 0:e[n]._zod.optout===`optional`))return n+1;return 0}function Sr(e,t,n){e.issues.length&&t.issues.push(...s(n,e.issues)),t.value[n]=e.value}function Cr(e,t,n,r,i){for(let a=0;a<n.length;a++){let o=e[a],c=a<r.length;if(!c&&a>=i&&n[a]._zod.optin===`optional`){t.value.length=a;break}if(o.issues.length){if(!c&&a>=i){t.value.length=a;break}t.issues.push(...s(a,o.issues))}t.value[a]=o.value}for(let e=t.value.length-1;e>=r.length&&n[e]._zod.optout===`optional`&&t.value[e]===void 0;e--)t.value.length=e;return t}var wr=_(`$ZodRecord`,(e,t)=>{x.init(e,t);let n=g.memoizer;n?.attach(e),e._zod.parse=(r,i)=>{let a=r.value;if(!_e(a))return r.issues.push({expected:`record`,code:`invalid_type`,input:a,inst:e}),r;let o=[],c=t.keyType._zod.values;if(c&&!t.partial){r.value=n?n.alloc(e,r,{},i):{};let l=new Set;for(let n of c)if(typeof n==`string`||typeof n==`number`||typeof n==`symbol`){if(l.add(typeof n==`number`?n.toString():n),n===`__proto__`)continue;let c=t.keyType._zod.run({value:n,issues:[]},i);if(c instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(c.issues.length){r.issues.push({code:`invalid_key`,origin:`record`,issues:c.issues.map(e=>Oe(e,i,ge())),input:n,path:[n],inst:e});continue}let u=c.value;if(u===`__proto__`)continue;let d=t.valueType._zod.run({value:a[n],issues:[]},i);d instanceof Promise?o.push(d.then(e=>{e.issues.length&&r.issues.push(...s(n,e.issues)),r.value[u]=e.value})):(d.issues.length&&r.issues.push(...s(n,d.issues)),r.value[u]=d.value)}let u;for(let e in a)if(!l.has(e)){if(t.mode===`loose`){if(e===`__proto__`)continue;r.value[e]=a[e]}else u??=[],u.push(e)}u&&u.length>0&&r.issues.push({code:`unrecognized_keys`,input:a,inst:e,keys:u,continue:!0})}else{r.value=n?n.alloc(e,r,{},i):{};let l;for(let n of Reflect.ownKeys(a)){if(n===`__proto__`||!Object.prototype.propertyIsEnumerable.call(a,n))continue;let u=t.keyType._zod.run({value:n,issues:[]},i);if(u instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(typeof n==`string`&&Rt.test(n)&&u.issues.length){let e=t.keyType._zod.run({value:Number(n),issues:[]},i);if(e instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);e.issues.length===0&&(u=e)}if(u.issues.length){t.mode===`loose`?r.value[n]=a[n]:c?(l??=[],l.push(n)):r.issues.push({code:`invalid_key`,origin:`record`,issues:u.issues.map(e=>Oe(e,i,ge())),input:n,path:[n],inst:e});continue}let d=u.value;if(d===`__proto__`)continue;let f=t.valueType._zod.run({value:a[n],issues:[]},i);f instanceof Promise?o.push(f.then(e=>{e.issues.length&&r.issues.push(...s(n,e.issues)),r.value[d]=e.value})):(f.issues.length&&r.issues.push(...s(n,f.issues)),r.value[d]=f.value)}l&&l.length>0&&r.issues.push({code:`unrecognized_keys`,input:a,inst:e,keys:l,continue:!0})}return o.length?Promise.all(o).then(()=>r):r}}),Tr=_(`$ZodEnum`,(e,t)=>{x.init(e,t);let n=a(t.entries),r=new Set(n);e._zod.values=r,v(e,`pattern`,e=>{let t=a(e.def.entries).filter(e=>u.has(typeof e));return RegExp(t.length?`^(${t.map(e=>ke(e.toString())).join(`|`)})$`:`^[^\\s\\S]$`)}),e._zod.parse=(t,i)=>{let a=t.value;return r.has(a)||t.issues.push({code:`invalid_value`,values:n,input:a,inst:e}),t}}),Er=_(`$ZodLiteral`,(e,t)=>{x.init(e,t);let n=new Set(t.values);e._zod.values=n,v(e,`pattern`,e=>{let t=e.def.values;return RegExp(t.length?`^(${t.map(e=>typeof e==`string`?ke(e):e?ke(e.toString()):String(e)).join(`|`)})$`:`^[^\\s\\S]$`)}),e._zod.parse=(r,i)=>{let a=r.value;return n.has(a)||r.issues.push({code:`invalid_value`,values:t.values,input:a,inst:e}),r}}),Dr=_(`$ZodTransform`,(e,t)=>{x.init(e,t),e._zod.optin=`optional`,g.memoizer?.guard(e),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new xe(e.constructor.name);let i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n));if(i instanceof Promise)throw new Ee;return n.value=i,n}});function Or(e,t){return e.value=t.issues.length?void 0:t.value,e}var kr=_(`$ZodOptional`,(e,t)=>{x.init(e,t),v(e,`optin`,e=>e.def.innerType._zod.optin===`defaulted`?`defaulted`:`optional`),e._zod.optout=`optional`,v(e,`values`,e=>{let t=e.def.innerType._zod.values;return t?new Set([...t,void 0]):void 0}),v(e,`pattern`,e=>{let t=e.def.innerType._zod.pattern;return t?RegExp(`^(${be(t.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(e.value===void 0){if(t.innerType._zod.optin!==`defaulted`)return e;let r=t.innerType._zod.run({value:e.value,issues:[]},n);return r instanceof Promise?r.then(t=>Or(e,t)):Or(e,r)}return t.innerType._zod.run(e,n)}}),Ar=_(`$ZodExactOptional`,(e,t)=>{kr.init(e,t),v(e,`values`,e=>e.def.innerType._zod.values),v(e,`pattern`,e=>e.def.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),jr=_(`$ZodNullable`,(e,t)=>{x.init(e,t),v(e,`optin`,e=>e.def.innerType._zod.optin),v(e,`optout`,e=>e.def.innerType._zod.optout),v(e,`pattern`,e=>{let t=e.def.innerType._zod.pattern;return t?RegExp(`^(${be(t.source)}|null)$`):void 0}),v(e,`values`,e=>e.def.innerType._zod.values?new Set([...e.def.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),Mr=_(`$ZodDefault`,(e,t)=>{x.init(e,t),e._zod.optin=`defaulted`,v(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>Nr(e,t)):Nr(r,t)}});function Nr(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}var Pr=_(`$ZodPrefault`,(e,t)=>{x.init(e,t),e._zod.optin=`defaulted`,v(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),Fr=_(`$ZodNonOptional`,(e,t)=>{x.init(e,t),v(e,`values`,e=>{let t=e.def.innerType._zod.values;return t?new Set([...t].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>Ir(t,e)):Ir(i,e)}});function Ir(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}function Lr(e,t,n,r){return t.issues.length?(e.value=n.catchValue({...t,value:e.value,error:{issues:t.issues.map(e=>Oe(e,r,ge()))},input:e.value}),e):(e.value=t.value,t.memo&&(e.memo=!0),e)}var Rr=_(`$ZodCatch`,(e,t)=>{x.init(e,t),v(e,`optin`,e=>e.def.innerType._zod.optin===`defaulted`?`defaulted`:`optional`),v(e,`optout`,e=>e.def.innerType._zod.optout),v(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run({value:e.value,issues:[]},n);return r instanceof Promise?r.then(r=>Lr(e,r,t,n)):Lr(e,r,t,n)}}),zr=_(`$ZodPipe`,(e,t)=>{x.init(e,t),v(e,`values`,e=>e.def.in._zod.values),v(e,`optin`,e=>e.def.in._zod.optin),v(e,`optout`,e=>e.def.out._zod.optout),v(e,`propValues`,e=>e.def.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>Br(e,t.in,n)):Br(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>Br(e,t.out,n)):Br(r,t.out,n)}});function Br(e,t,n){return e.issues.some(e=>e.code!==`unrecognized_keys`)?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues},n)}var Vr=_(`$ZodReadonly`,(e,t)=>{x.init(e,t),v(e,`propValues`,e=>e.def.innerType._zod.propValues),v(e,`values`,e=>e.def.innerType._zod.values),v(e,`optin`,e=>e.def.innerType?._zod?.optin),v(e,`optout`,e=>e.def.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(Hr):Hr(r)}});function Hr(e){return e.memo||(e.value=Object.freeze(e.value)),e}var Ur=_(`$ZodCustom`,(e,t)=>{b.init(e,t),x.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>Wr(t,n,r,e));Wr(i,n,r,e)}});function Wr(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(f(e))}}var Gr=class extends Error{constructor(){super(`Cannot parse a reference cycle that closes through a transform`),this.name=`ZodCyclicError`}},Kr=`~memo`,qr=[];function Jr(e){return typeof e==`object`&&!!e}function Yr(e){return e.map(e=>e.path?{...e,path:e.path.slice()}:{...e})}var Xr=new WeakMap,Zr=0,Qr=1,$r=2;function ei(e,t,n){let r=Xr.get(e);if(r!==void 0)return r?$r:Zr;if(t.has(e))return $r;t.add(e);let i=Zr,a=e=>{if(i!==$r&&e?._zod){let r=ei(e,t,n);r>i&&(i=r)}},o=(e,r)=>{let i=Zr;for(let a of Reflect.ownKeys(e)){let o=Object.getOwnPropertyDescriptor(e,a);if(r&&!o.enumerable)continue;let s=o.get?Qr:o.value?._zod?ei(o.value,t,n):Zr;s>i&&(i=s)}return i},s=e=>{e>i&&(i=e)},c=e._zod.def;switch(c.type){case`object`:{let e=we(c);s(e?o(e,!0):Qr),a(c.catchall);break}case`array`:a(c.element);break;case`tuple`:for(let e of c.items)a(e);a(c.rest);break;case`record`:case`map`:a(c.keyType),a(c.valueType);break;case`set`:a(c.valueType);break;case`union`:for(let e of c.options)a(e);break;case`intersection`:a(c.left),a(c.right);break;case`optional`:case`nullable`:case`default`:case`prefault`:case`catch`:case`readonly`:case`nonoptional`:case`promise`:case`success`:a(c.innerType);break;case`pipe`:a(c.in),a(c.out);break;case`function`:a(c.input),a(c.output);break;case`lazy`:{let r=c._cachedInner??(n?e._zod.innerType:void 0);s(r?ei(r,t,!1):Qr);break}case`template_literal`:case`string`:case`number`:case`int`:case`boolean`:case`bigint`:case`symbol`:case`undefined`:case`null`:case`void`:case`never`:case`any`:case`unknown`:case`date`:case`nan`:case`enum`:case`literal`:case`file`:case`transform`:case`custom`:break;default:for(let e in c){let t=Object.getOwnPropertyDescriptor(c,e);if(!t||t.get)continue;let n=t.value;if(n&&typeof n==`object`){if(n._zod)a(n);else if(Array.isArray(n))for(let e of n)a(e)}}}return t.delete(e),ti(e,i)}function ti(e,t){return t!==Qr&&Xr.set(e,t===$r),t}function ni(e,t){let n=e.buckets.get(t);return n||(n=new WeakMap,e.buckets.set(t,n)),n}var ri,ii=[],ai={alloc(e,t,n){let r=ri;if(!r)return n;ri=void 0;let i={value:n,issues:null};return r.set(t.value,i),ii.push(i),n},guard(e){var t;(t=e._zod).deferred??(t.deferred=[]),e._zod.deferred.push(()=>{let t=e._zod.parse,n=(e,n)=>{if(n.direction!==`backward`&&si(n,e.value))throw new Gr;return t(e,n)};e._zod.parse=n,e._zod.run===t&&(e._zod.run=n)})},attach(e){var t;let n,r=!1,i,a;(t=e._zod).deferred??(t.deferred=[]),e._zod.deferred.push(()=>{let t=e._zod.parse,o=(s,c)=>{if(n===void 0){let i=ei(e,new Set,!1);if(i===Zr)return e._zod.parse=t,e._zod.run===o&&(e._zod.run=t),t(s,c);i===$r||r?n=!0:r=!0}let l=s.value;if(!Jr(l))return t(s,c);let u=c[Kr];u||(u={buckets:new WeakMap,backEdges:void 0},c[Kr]=u);let d;i===c?d=a:(d=ni(u,e),i=c,a=d);let f=d.get(l);if(f)return s.value=f.value,f.issues?f.issues.length&&s.issues.push(...Yr(f.issues)):(s.memo=!0,u.backEdges??(u.backEdges=new WeakSet),u.backEdges.add(f.value)),s;ri=d;let p=ii.length,m=t(s,c);ri=void 0;let ee=ii.length>p?ii.pop():void 0;return m instanceof Promise?m.then(e=>(ee&&(ee.issues=e.issues.length?Yr(e.issues):qr),e)):(ee&&(ee.issues=m.issues.length?Yr(m.issues):qr),m)};e._zod.parse=o,e._zod.run===t&&(e._zod.run=o)})}};function oi(){return ai}function si(e,t){let n=e[Kr]?.backEdges;return n!==void 0&&Jr(t)&&n.has(t)}var ci,li=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function ui(){return new li}(ci=globalThis).__zod_globalRegistry??(ci.__zod_globalRegistry=ui());var di=globalThis.__zod_globalRegistry;function fi(e){return e.checks&&=[...e.checks],e}function pi(e,t){return new e(fi({type:`string`,...d(t)}))}function mi(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...d(t)})}function hi(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...d(t)})}function gi(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...d(t)})}function _i(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...d(t)})}function vi(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...d(t)})}function yi(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...d(t)})}function bi(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...d(t)})}function xi(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...d(t)})}function Si(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...d(t)})}function Ci(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...d(t)})}function wi(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...d(t)})}function Ti(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...d(t)})}function Ei(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...d(t)})}function Di(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...d(t)})}function Oi(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...d(t)})}function ki(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...d(t)})}function Ai(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...d(t)})}function ji(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...d(t)})}function Mi(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...d(t)})}function Ni(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...d(t)})}function Pi(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...d(t)})}function Fi(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...d(t)})}function Ii(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...d(t)})}function Li(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...d(t)})}function Ri(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...d(t)})}function zi(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...d(t)})}function Bi(e,t){return new e(fi({type:`number`,checks:[],...d(t)}))}function Vi(e,t){return new e(fi({type:`number`,coerce:!0,checks:[],...d(t)}))}function Hi(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...d(t)})}function Ui(e,t){return new e({type:`boolean`,...d(t)})}function Wi(e,t){return new e({type:`null`,...d(t)})}function Gi(e){return new e({type:`unknown`})}function Ki(e,t){return new e({type:`never`,...d(t)})}function qi(e,t){return new Gt({check:`less_than`,...d(t),value:e,inclusive:!1})}function Ji(e,t){return new Gt({check:`less_than`,...d(t),value:e,inclusive:!0})}function Yi(e,t){return new Kt({check:`greater_than`,...d(t),value:e,inclusive:!1})}function Xi(e,t){return new Kt({check:`greater_than`,...d(t),value:e,inclusive:!0})}function Zi(e,t){return new qt({check:`multiple_of`,...d(t),value:e})}function Qi(e,t){return new Yt({check:`max_length`,...d(t),maximum:e})}function $i(e,t){return new Xt({check:`min_length`,...d(t),minimum:e})}function ea(e,t){return new Zt({check:`length_equals`,...d(t),length:e})}function ta(e,t){return new $t({check:`string_format`,format:`regex`,...d(t),pattern:e})}function na(e){return new en({check:`string_format`,format:`lowercase`,...d(e)})}function ra(e){return new tn({check:`string_format`,format:`uppercase`,...d(e)})}function ia(e,t){return new nn({check:`string_format`,format:`includes`,...d(t),includes:e})}function aa(e,t){return new rn({check:`string_format`,format:`starts_with`,...d(t),prefix:e})}function oa(e,t){return new an({check:`string_format`,format:`ends_with`,...d(t),suffix:e})}function sa(e){return new on({check:`overwrite`,tx:e})}function ca(e){return sa(t=>t.normalize(e))}function la(){return sa(e=>e.trim())}function ua(){return sa(e=>e.toLowerCase())}function da(){return sa(e=>e.toUpperCase())}function fa(){return sa(e=>ee(e))}function pa(e,t,n){return new e({type:`array`,element:t,...d(n)})}function ma(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...d(n)})}function ha(e,t){let n=ga(t=>(t.addIssue=e=>{if(typeof e==`string`)t.issues.push(f(e,t.value,n._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,`input`in r||(r.input=t.value),r.inst??=n,r.continue??=!n._zod.def.abort,t.issues.push(f(r))}},e(t.value,t)),t);return n}function ga(e,t){let n=new b({check:`custom`,...d(t)});return n._zod.check=e,n}function _a(e,...t){for(let n of t)for(let t of Reflect.ownKeys(n))Object.prototype.propertyIsEnumerable.call(n,t)&&De(e,t,n[t]);return e}function va(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??di,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:new Map,sharedDefsExtractedFor:void 0,sharedEmitDoneFor:void 0,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,intersections:[],deferred:[],external:e?.external??void 0}}function ya(e,t,n,r,i){let a=typeof t.unrepresentable==`function`?t.unrepresentable({zodSchema:e,path:r.path,message:i}):t.unrepresentable;if(a===`any`)return!1;if(a===void 0||a===`throw`)throw Error(i);return Object.assign(n,a),!0}function C(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o),t.sharedDefsExtractedFor=void 0,t.sharedEmitDoneFor=void 0;let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,C(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&_a(o.schema,c),t.io===`input`&&w(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&`_prefault`in o.schema&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function ba(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}function xa(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);if(e.external&&e.sharedDefsExtractedFor===e.external)return;let r=new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${ba(a)}`}}let i=`#/${r}/`;if(t[1]===n&&!t[1].schema.id)return{ref:`#`};let a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+ba(a)}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/<root>
|
|
55
|
-
|
|
56
|
-
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0])a(n);else{if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}(e.metadataRegistry.get(n[0])?.id||r.cycle||r.count>1&&e.reused===`ref`)&&a(n)}}e.external&&(e.sharedDefsExtractedFor=e.external)}function Sa(e){let t=e.anyOf;if(!Array.isArray(t)||t.length===0||e.type!==void 0)return;let n=[];for(let e of t){if(!e||typeof e!=`object`)return;Sa(e);let t=Object.keys(e);if(t.length!==1||t[0]!==`type`)return;let r=e.type;for(let e of Array.isArray(r)?r:[r]){if(typeof e!=`string`)return;n.includes(e)||n.push(e)}}delete e.anyOf,e.type=n.length===1?n[0]:n}var Ca=new Set([`type`,`properties`,`required`,`additionalProperties`]),wa=[`oneOf`,`anyOf`];function Ta(e){let t=e.additionalProperties;return t===void 0||t===!1||typeof t!=`object`||!t?null:Object.keys(t).length?t:null}function Ea(e){let t=[];for(let n of e){if(typeof n!=`object`||n.type!==`object`)return null;for(let e in n)if(!Ca.has(e))return null;t.push(n)}let n={},r=new Set;for(let e of t){for(let r in e.properties){if(Object.prototype.hasOwnProperty.call(n,r))continue;let e=[];for(let n of t){let t=n.properties?.[r]??Ta(n);t!=null&&(e.some(e=>JSON.stringify(e)===JSON.stringify(t))||e.push(t))}let i=e.length===1?e[0]:Ea(e)??{allOf:e};De(n,r,i)}for(let t of e.required??[])r.add(t)}let i={type:`object`,properties:n};if(r.size&&(i.required=[...r]),t.every(e=>e.additionalProperties===!1))i.additionalProperties=!1;else{let e=[];for(let n of t){let t=Ta(n);t&&!e.some(e=>JSON.stringify(e)===JSON.stringify(t))&&e.push(t)}e.length===1?i.additionalProperties=e[0]:e.length>1&&(i.additionalProperties={allOf:e})}return i}function Da(e){let t=e.allOf;if(!Array.isArray(t)||t.length<2)return;for(let t of Ca)if(t in e)return;let n=t.filter(e=>wa.some(t=>Array.isArray(e[t]))),r=null;if(!n.length)r=Ea(t);else{let e=n[0],i=wa.find(t=>Array.isArray(e[t]));if(Object.keys(e).length!==1)return;let a=t.filter(t=>t!==e),o=e[i].map(e=>Ea([...a,e]));if(o.some(e=>!e))return;r={[i]:o}}r&&(delete e.allOf,_a(e,r))}function Oa(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):_a(i,s),_a(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};if(!e.external||e.sharedEmitDoneFor!==e.external){for(let t of[...e.seen.entries()].reverse())r(t[0]);if(e.target!==`openapi-3.0`)for(let t of e.seen.entries())Sa(t[1].def??t[1].schema);for(let t of e.deferred)t();if(e.intersections.length){let t=new Map;for(let n of e.seen.values())for(let e of[n.schema,n.def]){let n=e?.allOf;if(!Array.isArray(n))continue;let r=t.get(n);r?r.push(e):t.set(n,[e])}for(let n of e.intersections)for(let e of t.get(n)??[])Da(e)}}let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}_a(i,n.defId?n.schema:n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};if(!e.external||e.sharedEmitDoneFor!==e.external)for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,De(o,e.defId,e.def))}e.external&&(e.sharedEmitDoneFor=e.external),e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:Aa(t,`input`,e.processors),output:Aa(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function w(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return w(r.element,n);if(r.type===`set`)return w(r.valueType,n);if(r.type===`lazy`)return w(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`||r.type===`catch`)return w(r.innerType,n);if(r.type===`intersection`)return w(r.left,n)||w(r.right,n);if(r.type===`record`||r.type===`map`)return w(r.keyType,n)||w(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:w(r.in,n)||w(r.out,n);if(r.type===`object`){for(let e in r.shape)if(w(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(w(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(w(e,n))return!0;return!!(r.rest&&w(r.rest,n))}return!1}var ka=(e,t={})=>n=>{let r=va({...n,processors:t});return C(e,r),xa(r,e),Oa(r,e)},Aa=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=va({...i??{},target:a,io:t,processors:n});return C(e,o),xa(o,e),Oa(o,e)},ja=(e,t,n)=>{(e[t]===void 0||n>e[t])&&(e[t]=n)},Ma=(e,t,n)=>{(e[t]===void 0||n<e[t])&&(e[t]=n)},Na=(e,t)=>{ja(e,`minimum`,t),Ma(e,`maximum`,t)},Pa=(e,t)=>{e.multipleOf??=[],e.multipleOf.includes(t)||e.multipleOf.push(t)},Fa=(e,t)=>{e.patterns??=new Set,e.patterns.add(t)},Ia=(e,t)=>{e.mime=e.mime?e.mime.filter(e=>t.includes(e)):[...t]},La=(e,t)=>{e.format=t,t.includes(`int`)&&(e.isInt=!0)},Ra=(e,t)=>ja(e,`minimum`,t.minimum),za=(e,t)=>Ma(e,`maximum`,t.maximum),Ba=e=>(t,n)=>{La(t,n.format);let[r,i]=e[n.format];ja(t,`minimum`,r),Ma(t,`maximum`,i)},Va={greater_than:(e,t)=>ja(e,t.inclusive?`minimum`:`exclusiveMinimum`,t.value),less_than:(e,t)=>Ma(e,t.inclusive?`maximum`:`exclusiveMaximum`,t.value),multiple_of:(e,t)=>Pa(e,t.value),number_format:Ba(Te),bigint_format:Ba(Se),min_length:Ra,max_length:za,length_equals:(e,t)=>Na(e,t.length),min_size:Ra,max_size:za,size_equals:(e,t)=>Na(e,t.size),string_format:(e,t)=>{La(e,t.format),t.pattern&&Fa(e,t.pattern),(t.format===`base64`||t.format===`base64url`)&&(e.contentEncoding=t.format),(t.local||t.precision===-1)&&(e.laxFormat=!0)},mime_type:(e,t)=>Ia(e,t.mime)};function Ha(e){let t={},n=e._zod.def,r=e._zod.traits.has(`$ZodCheck`)?[e,...n.checks??[]]:n.checks??[];for(let e of r)Va[e._zod.def.check]?.(t,e._zod.def);let i=e._zod.bag;i.minimum!==void 0&&ja(t,`minimum`,i.minimum),i.exclusiveMinimum!==void 0&&ja(t,`exclusiveMinimum`,i.exclusiveMinimum),i.maximum!==void 0&&Ma(t,`maximum`,i.maximum),i.exclusiveMaximum!==void 0&&Ma(t,`exclusiveMaximum`,i.exclusiveMaximum),i.multipleOf!==void 0&&Pa(t,i.multipleOf),i.format!==void 0&&(t.format??=i.format,i.format.includes(`int`)&&(t.isInt=!0)),i.mime&&Ia(t,i.mime);for(let e of i.patterns??[])Fa(t,e);return t}var Ua={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},Wa=new Map([[Un,Et],[Gn,Dt]]),Ga=e=>Wa.get(e)??e,Ka=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l,laxFormat:u}=Ha(e);if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Ua[s]??s,i.format===``&&delete i.format,(s===`time`||u)&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c].map(Ga);e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},qa=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,multipleOf:s,exclusiveMaximum:c,exclusiveMinimum:l,isInt:u}=Ha(e);i.type=u?`integer`:`number`;let d=typeof l==`number`&&l>=(a??-1/0),f=typeof c==`number`&&c<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;if(d?p?(i.minimum=l,i.exclusiveMinimum=!0):i.exclusiveMinimum=l:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=c,i.exclusiveMaximum=!0):i.exclusiveMaximum=c:typeof o==`number`&&(i.maximum=o),s){let n=new Set;for(let a of s)Number.isFinite(a)&&a!==0?n.add(Math.abs(a)):ya(e,t,i,r,`A multipleOf divisor of ${a} cannot be represented in JSON Schema`);let[a,...o]=n;a!==void 0&&(i.multipleOf=a),o.length&&(i.allOf=[...i.allOf??[],...o.map(e=>({multipleOf:e}))])}},Ja=(e,t,n,r)=>{n.type=`boolean`},Ya=(e,t,n,r)=>{t.target===`openapi-3.0`?(n.type=`string`,n.nullable=!0,n.enum=[null]):n.type=`null`},Xa=(e,t,n,r)=>{n.not={}},Za=(e,t,n,r)=>{let i=e._zod.def,o=a(i.entries);o.length===0?n.not={}:(o.every(e=>typeof e==`number`)&&(n.type=`number`),o.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=o)},Qa=(e,t,n,r)=>{let i=e._zod.def;if(i.values.length===0){n.not={};return}let a=[];for(let o of i.values)if(o===void 0){if(ya(e,t,n,r,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof o==`bigint`){if(ya(e,t,n,r,`BigInt literals cannot be represented in JSON Schema`))return;a.push(Number(o))}else a.push(o);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},$a=(e,t,n,r)=>{ya(e,t,n,r,`Custom types cannot be represented in JSON Schema`)},eo=(e,t,n,r)=>{ya(e,t,n,r,`Transforms cannot be represented in JSON Schema`)},to=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=Ha(e);typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=C(a.element,t,{...r,path:[...r.path,`items`]})};function no(e){let t=e._zod.def;return t.type===`pipe`&&t.in._zod.traits.has(`$ZodTransform`)?no(t.out):t.type===`catch`?no(t.innerType):e._zod.optin}var ro=(e,t,n,r)=>{let i=n,a=e._zod.def,o=a.shape;if(Object.getOwnPropertySymbols(o).length&&ya(e,t,i,r,`Symbol keys cannot be represented in JSON Schema`))return;i.type=`object`,i.properties={};for(let e in o)De(i.properties,e,C(o[e],t,{...r,path:[...r.path,`properties`,e]}));let s=[];for(let e of Object.keys(o)){let n=a.shape[e];(t.io===`input`?no(n)===void 0:n._zod.optout===void 0)&&s.push(e)}s.length>0&&(i.required=s),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=C(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},io=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>C(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},ao=(e,t,n,r)=>{let i=e._zod.def,a=C(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=C(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1,c=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]];n.allOf=c,t.intersections.push(c)},oo=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`array`;let o=t.target===`draft-2020-12`?`prefixItems`:`items`,s=t.target===`draft-2020-12`||t.target===`openapi-3.0`?`items`:`additionalItems`,c=a.items.map((e,n)=>C(e,t,{...r,path:[...r.path,o,n]})),l=a.rest?C(a.rest,t,{...r,path:[...r.path,s,...t.target===`openapi-3.0`?[a.items.length]:[]]}):null,u=a.items.length;for(;u>0;){let e=a.items[u-1];if(!(t.io===`input`?no(e)!==void 0:e._zod.optout===`optional`))break;u--}let d=a.items.length,f=!a.rest;t.target===`draft-2020-12`?(i.prefixItems=c,f?i.items=!1:l&&(i.items=l),u>0&&(i.minItems=u),f&&(i.maxItems=d)):t.target===`openapi-3.0`?(i.items={anyOf:c},l&&i.items.anyOf.push(l),u>0&&(i.minItems=u),f&&(i.maxItems=d)):(i.items=c,f?i.additionalItems=!1:l&&(i.additionalItems=l),u>0&&(i.minItems=u),f&&(i.maxItems=d));let{minimum:p,maximum:m}=Ha(e);typeof p==`number`&&(i.minItems=p),typeof m==`number`&&(i.maxItems=m)};function so(e,t,n){if(t.$ref){if(n.has(t))return t;n.add(t);let r=e.get(t)?.def;if(!r)return t;let i=so(e,r,n);return i===r?t:i}for(let r of[`anyOf`,`oneOf`]){let i=t[r];if(!Array.isArray(i))continue;let a=i.map(t=>so(e,t,n));a.some((e,t)=>e!==i[t])&&(t={...t,[r]:a})}let r=Array.isArray(t.type)?t.type:[t.type],i=!r.includes(`string`)&&r.some(e=>e===`number`||e===`integer`),a=t.enum??(t.const===void 0?void 0:[t.const]);if(!i&&!a?.some(e=>typeof e==`number`))return t;let{minimum:o,maximum:s,exclusiveMinimum:c,exclusiveMaximum:l,multipleOf:u,format:d,id:f,...p}=t;return p.enum?p.enum=p.enum.map(e=>typeof e==`number`?String(e):e):typeof p.const==`number`&&(p.const=String(p.const)),i&&(p.type=`string`,a||(p.pattern=(r.includes(`number`)?Rt:Lt).source)),p}var co=new WeakMap;function lo(e){let t=new Map;for(let n of e.seen.values())n.def&&!t.has(n.schema)&&t.set(n.schema,n);let n=new Map;for(let r of co.get(e)??[]){let i=e.seen.get(r),a=(i?.def??i?.schema)?.propertyNames;if(!a||a===!0||n.has(a))continue;let o=so(t,a,new Set);o!==a&&n.set(a,o)}if(n.size)for(let t of e.seen.values())for(let e of[t.schema,t.def]){let t=e&&n.get(e.propertyNames);t&&(e.propertyNames=t)}}var uo=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=Ha(o).patterns;if(a.mode===`loose`&&s&&s.size>0){let e=C(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)De(i.patternProperties,Ga(t).source,e)}else{if(t.target===`draft-07`||t.target===`draft-2020-12`){i.propertyNames=C(a.keyType,t,{...r,path:[...r.path,`propertyNames`]});let n=co.get(t);n||(n=[],co.set(t,n),t.deferred.push(()=>lo(t))),n.push(e)}i.additionalProperties=C(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]})}let c=o._zod.values,l=t.io===`input`&&no(a.valueType)!==void 0;if(c&&!a.partial&&!l){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e.map(String))}},fo=(e,t,n,r)=>{let i=e._zod.def,a=C(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},po=(e,t,n,r)=>{let i=e._zod.def;C(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},mo=Symbol();function ho(e,t,n,r,i){let a=!1,o=JSON.stringify(e,(e,t)=>typeof t==`bigint`?(a=!0,null):t);return a?(ya(t,n,r,i,`BigInt defaults cannot be represented in JSON Schema`),mo):JSON.parse(o)}var go=(e,t,n,r)=>{let i=e._zod.def;C(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o=ho(i.defaultValue,e,t,n,r);o!==mo&&(n.default=o)},_o=(e,t,n,r)=>{let i=e._zod.def;C(i.innerType,t,r);let a=t.seen.get(e);if(a.ref=i.innerType,t.io!==`input`)return;let o=ho(i.defaultValue,e,t,n,r);o!==mo&&(n._prefault=o)},vo=(e,t,n,r)=>{let i=e._zod.def;C(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{ya(e,t,n,r,`Dynamic catch values are not supported in JSON Schema`);return}n.default=o},yo=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;C(o,t,r);let s=t.seen.get(e);s.ref=o},bo=(e,t,n,r)=>{let i=e._zod.def;C(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},xo=(e,t,n,r)=>{let i=e._zod.def;C(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},So=new WeakSet([Object.prototype,Error.prototype]);function Co(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,get(){let e=n(this);return Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0})}})}var wo=(e,t)=>{Be.init(e,t),e.name=`ZodError`;let n=Object.getPrototypeOf(e);So.has(n)||(So.add(n),Co(n,`format`,e=>t=>Ue(e,t)),Co(n,`flatten`,e=>t=>He(e,t)),Co(n,`addIssue`,e=>t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,m,2)}),Co(n,`addIssues`,e=>t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,m,2)}),Object.defineProperty(n,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}}))},To=_(`ZodError`,wo),Eo=_(`ZodError`,wo,void 0,{Parent:Error}),Do=Ge(Eo),Oo=Ke(Eo),ko=qe(Eo),Ao=Ye(Eo),jo=tt(Eo),Mo=nt(Eo),No=rt(Eo),Po=it(Eo),Fo=at(Eo),Io=ot(Eo),Lo=st(Eo),Ro=ct(Eo);function zo(){g.localeError||ge(Me())}function Bo(){g.memoizer||ge({memoizer:oi()})}var T=_(`ZodType`,(e,t)=>(zo(),x.init(e,t),e.def=t,e.type=t.type,e),{check(...e){let t=this.def;return this.clone(c(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return he(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(oc(e,t))},superRefine(e,t){return this.check(sc(e,t))},overwrite(e){return this.check(sa(e))},optional(){return Hs(this)},exactOptional(){return Ws(this)},nullable(){return Ks(this)},nullish(){return Hs(Ks(this))},nonoptional(e){return Qs(this,e)},array(){return j(this)},or(e){return Ds([this,e])},and(e){return js(this,e)},transform(e){return nc(this,Bs(e))},default(e){return Js(this,e)},prefault(e){return Xs(this,e)},catch(e){return ec(this,e)},pipe(e){return nc(this,e)},readonly(){return ic(this)},describe(e){let t=this.clone();return di.add(t,{description:e}),t},meta(...e){if(e.length===0)return di.get(this);let t=this.clone();return di.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e,...t){return t.length===0?e(this):e(this,...t)},get"~standard"(){return p(this,`~standard`,{...dn(this),jsonSchema:{input:Aa(this,`input`),output:Aa(this,`output`)}})},set"~standard"(e){ae(this,`~standard`,e)},parse:function e(t,n){return Do(this,t,n,{callee:e})},parseAsync:async function e(t,n){return await Oo(this,t,n,{callee:e})},safeParse(e,t){return ko(this,e,t)},async safeParseAsync(e,t){return Ao(this,e,t)},get spa(){return this?.safeParseAsync},set spa(e){ae(this,`spa`,e)},validate(e,t){return Qe(this,e,t)},validateAsync(e,t){return et(this,e,t)},encode:function e(t,n){return jo(this,t,n,{callee:e})},decode:function e(t,n){return Mo(this,t,n,{callee:e})},encodeAsync:async function e(t,n){return await No(this,t,n,{callee:e})},decodeAsync:async function e(t,n){return await Po(this,t,n,{callee:e})},safeEncode(e,t){return Fo(this,e,t)},safeDecode(e,t){return Io(this,e,t)},async safeEncodeAsync(e,t){return Lo(this,e,t)},async safeDecodeAsync(e,t){return Ro(this,e,t)},toJSONSchema(e){return ka(this,{})(e)},get description(){return di.get(this)?.description},get _def(){return this._zod.def}}),Vo=_(`_ZodString`,(e,t)=>{fn.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ka(e,t,n,r)},Ae({format:e=>Ha(e).format??null,minLength:e=>Ha(e).minimum??null,maxLength:e=>Ha(e).maximum??null},{regex(...e){return this.check(ta(...e))},includes(...e){return this.check(ia(...e))},startsWith(...e){return this.check(aa(...e))},endsWith(...e){return this.check(oa(...e))},min(...e){return this.check($i(...e))},max(...e){return this.check(Qi(...e))},length(...e){return this.check(ea(...e))},nonempty(...e){return this.check($i(1,...e))},lowercase(e){return this.check(na(e))},uppercase(e){return this.check(ra(e))},trim(){return this.check(la())},normalize(...e){return this.check(ca(...e))},toLowerCase(){return this.check(ua())},toUpperCase(){return this.check(da())},slugify(){return this.check(fa())}})),Ho=_(`ZodString`,(e,t)=>{fn.init(e,t),Vo.init(e,t)},{email(e){return this.check(mi(qo,e))},url(e){return this.check(bi(Zo,e))},jwt(e){return this.check(Fi(ps,e))},emoji(e){return this.check(xi($o,e))},guid(e){return this.check(hi(Yo,e))},uuid(e){return this.check(gi(Xo,e))},uuidv4(e){return this.check(_i(Xo,e))},uuidv6(e){return this.check(vi(Xo,e))},uuidv7(e){return this.check(yi(Xo,e))},nanoid(e){return this.check(Si(es,e))},cuid(e){return this.check(Ci(ts,e))},cuid2(e){return this.check(wi(ns,e))},ulid(e){return this.check(Ti(rs,e))},base64(e){return this.check(Mi(us,e))},base64url(e){return this.check(Ni(ds,e))},xid(e){return this.check(Ei(is,e))},ksuid(e){return this.check(Di(as,e))},ipv4(e){return this.check(Oi(os,e))},ipv6(e){return this.check(ki(ss,e))},cidrv4(e){return this.check(Ai(cs,e))},cidrv6(e){return this.check(ji(ls,e))},e164(e){return this.check(Pi(fs,e))},datetime(e){return this.check(Ii(Uo,e))},date(e){return this.check(Li(Wo,e))},time(e){return this.check(Ri(Go,e))},duration(e){return this.check(zi(Ko,e))}});function E(e){return pi(Ho,e)}var D=_(`ZodStringFormat`,(e,t)=>{S.init(e,t),Vo.init(e,t)}),Uo=_(`ZodISODateTime`,(e,t)=>{jn.init(e,t),D.init(e,t)}),Wo=_(`ZodISODate`,(e,t)=>{Mn.init(e,t),D.init(e,t)}),Go=_(`ZodISOTime`,(e,t)=>{Nn.init(e,t),D.init(e,t)}),Ko=_(`ZodISODuration`,(e,t)=>{Pn.init(e,t),D.init(e,t)}),qo=_(`ZodEmail`,(e,t)=>{hn.init(e,t),D.init(e,t)});function Jo(e){return mi(qo,e)}var Yo=_(`ZodGUID`,(e,t)=>{pn.init(e,t),D.init(e,t)}),Xo=_(`ZodUUID`,(e,t)=>{mn.init(e,t),D.init(e,t)});function O(e){return gi(Xo,e)}var Zo=_(`ZodURL`,(e,t)=>{Cn.init(e,t),D.init(e,t)});function Qo(e){return bi(Zo,e)}var $o=_(`ZodEmoji`,(e,t)=>{wn.init(e,t),D.init(e,t)}),es=_(`ZodNanoID`,(e,t)=>{Tn.init(e,t),D.init(e,t)}),ts=_(`ZodCUID`,(e,t)=>{En.init(e,t),D.init(e,t)}),ns=_(`ZodCUID2`,(e,t)=>{Dn.init(e,t),D.init(e,t)}),rs=_(`ZodULID`,(e,t)=>{On.init(e,t),D.init(e,t)}),is=_(`ZodXID`,(e,t)=>{kn.init(e,t),D.init(e,t)}),as=_(`ZodKSUID`,(e,t)=>{An.init(e,t),D.init(e,t)}),os=_(`ZodIPv4`,(e,t)=>{Fn.init(e,t),D.init(e,t)}),ss=_(`ZodIPv6`,(e,t)=>{Rn.init(e,t),D.init(e,t)}),cs=_(`ZodCIDRv4`,(e,t)=>{zn.init(e,t),D.init(e,t)}),ls=_(`ZodCIDRv6`,(e,t)=>{Vn.init(e,t),D.init(e,t)}),us=_(`ZodBase64`,(e,t)=>{Wn.init(e,t),D.init(e,t)}),ds=_(`ZodBase64URL`,(e,t)=>{qn.init(e,t),D.init(e,t)}),fs=_(`ZodE164`,(e,t)=>{Jn.init(e,t),D.init(e,t)}),ps=_(`ZodJWT`,(e,t)=>{Xn.init(e,t),D.init(e,t)}),ms=_(`ZodNumber`,(e,t)=>{Zn.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>qa(e,t,n,r),e.isFinite=!0},Ae({minValue:e=>{let{minimum:t,exclusiveMinimum:n}=Ha(e);return Math.max(t??-1/0,n??-1/0)},maxValue:e=>{let{maximum:t,exclusiveMaximum:n}=Ha(e);return Math.min(t??1/0,n??1/0)},isInt:e=>{let{isInt:t,multipleOf:n}=Ha(e);return!!t||!!n?.some(Number.isSafeInteger)},format:e=>Ha(e).format??null},{gt(e,t){return this.check(Yi(e,t))},gte(e,t){return this.check(Xi(e,t))},min(e,t){return this.check(Xi(e,t))},lt(e,t){return this.check(qi(e,t))},lte(e,t){return this.check(Ji(e,t))},max(e,t){return this.check(Ji(e,t))},int(e){return this.check(gs(e))},safe(e){return this.check(gs(e))},positive(e){return this.check(Yi(0,e))},nonnegative(e){return this.check(Xi(0,e))},negative(e){return this.check(qi(0,e))},nonpositive(e){return this.check(Ji(0,e))},multipleOf(e,t){return this.check(Zi(e,t))},step(e,t){return this.check(Zi(e,t))},finite(){return this}}));function k(e){return Bi(ms,e)}var hs=_(`ZodNumberFormat`,(e,t)=>{Qn.init(e,t),ms.init(e,t)});function gs(e){return Hi(hs,e)}var _s=_(`ZodBoolean`,(e,t)=>{$n.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ja(e,t,n,r)});function A(e){return Ui(_s,e)}var vs=_(`ZodNull`,(e,t)=>{er.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ya(e,t,n,r)});function ys(e){return Wi(vs,e)}var bs=_(`ZodUnknown`,(e,t)=>{tr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function xs(){return Gi(bs)}var Ss=_(`ZodNever`,(e,t)=>{nr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Xa(e,t,n,r)});function Cs(e){return Ki(Ss,e)}var ws=_(`ZodArray`,(e,t)=>{Bo(),or.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>to(e,t,n,r),e.element=t.element},{min(e,t){return this.check($i(e,t))},nonempty(e){return this.check($i(1,e))},max(e,t){return this.check(Qi(e,t))},length(e,t){return this.check(ea(e,t))},unwrap(){return this.element}});function j(e,t){return pa(ws,e,t)}var Ts=_(`ZodObject`,(e,t)=>{Bo(),fr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ro(e,t,n,r),ve(e,`shape`,e=>e._zod.def.shape,!1)},{keyof(){return N(Object.keys(this._zod.def.shape))},catchall(e){return this.clone(c(this._zod.def,{catchall:e}))},passthrough(){return this.clone(c(this._zod.def,{catchall:xs()}))},loose(){return this.clone(c(this._zod.def,{catchall:xs()}))},strict(){return this.clone(c(this._zod.def,{catchall:Cs()}))},strip(){return this.clone(c(this._zod.def,{catchall:void 0}))},extend(e){return r(this,e)},safeExtend(e){return ce(this,e)},merge(e){return o(this,e)},pick(e){return oe(this,e)},omit(e){return je(this,e)},partial(...e){return ie(Vs,this,e[0])},exactPartial(...e){return ie(Us,this,e[0],`exactPartial`)},required(...e){return l(Zs,this,e[0])}});function M(e,t){return new Ts({type:`object`,shape:e??{},...d(t)})}var Es=_(`ZodUnion`,(e,t)=>{mr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>io(e,t,n,r),e.options=t.options});function Ds(e,t){return new Es({type:`union`,options:e,...d(t)})}var Os=_(`ZodDiscriminatedUnion`,(e,t)=>{Es.init(e,t),gr.init(e,t)});function ks(e,t,n){return new Os({type:`union`,options:t,discriminator:e,...d(n)})}var As=_(`ZodIntersection`,(e,t)=>{_r.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ao(e,t,n,r)});function js(e,t){return new As({type:`intersection`,left:e,right:t})}var Ms=_(`ZodTuple`,(e,t)=>{Bo(),br.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>oo(e,t,n,r)},{rest(e){return this.clone({...this._zod.def,rest:e})},partial(){let e=this._zod.def;if(e.checks?.length)throw Error(`.partial() cannot be used on tuple schemas containing refinements`);return this.clone({...e,items:e.items.map(e=>new Vs({type:`optional`,innerType:e}))})}});function Ns(e,t,n){let r=t instanceof x;return new Ms({type:`tuple`,items:e,rest:r?t:null,...d(r?n:t)})}var Ps=_(`ZodRecord`,(e,t)=>{Bo(),wr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>uo(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function Fs(e,t,n){return!t||!t._zod?new Ps({type:`record`,keyType:E(),valueType:e,...d(t)}):new Ps({type:`record`,keyType:e,valueType:t,...d(n)})}function Is(e,t,n){return new Ps({type:`record`,keyType:e,valueType:t,...d(n),partial:!0})}var Ls=_(`ZodEnum`,(e,t)=>{Tr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Za(e,t,n,r),e.enum=t.entries,e.options=[...e._zod.values];let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new Ls({...t,checks:[],...d(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new Ls({...t,checks:[],...d(r),entries:i})}});function N(e,t){return new Ls({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...d(t)})}var Rs=_(`ZodLiteral`,(e,t)=>{Er.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Qa(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function P(e,t){return new Rs({type:`literal`,values:Array.isArray(e)?e:[e],...d(t)})}var zs=_(`ZodTransform`,(e,t)=>{Bo(),Dr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>eo(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new xe(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(f(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,`input`in t||(t.input=n.value),t.inst??=e,n.issues.push(f(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function Bs(e){return new zs({type:`transform`,transform:e})}var Vs=_(`ZodOptional`,(e,t)=>{kr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>xo(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Hs(e){return new Vs({type:`optional`,innerType:e})}var Us=_(`ZodExactOptional`,(e,t)=>{Ar.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>xo(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Ws(e){return new Us({type:`optional`,innerType:e})}var Gs=_(`ZodNullable`,(e,t)=>{jr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>fo(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Ks(e){return new Gs({type:`nullable`,innerType:e})}var qs=_(`ZodDefault`,(e,t)=>{Mr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>go(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function Js(e,t){return new qs({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():se(t)}})}var Ys=_(`ZodPrefault`,(e,t)=>{Pr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>_o(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Xs(e,t){return new Ys({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():se(t)}})}var Zs=_(`ZodNonOptional`,(e,t)=>{Fr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>po(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Qs(e,t){return new Zs({type:`nonoptional`,innerType:e,...d(t)})}var $s=_(`ZodCatch`,(e,t)=>{Rr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>vo(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function ec(e,t){return new $s({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:h(t)})}var tc=_(`ZodPipe`,(e,t)=>{zr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>yo(e,t,n,r),e.in=t.in,e.out=t.out});function nc(e,t){return new tc({type:`pipe`,in:e,out:t})}var rc=_(`ZodReadonly`,(e,t)=>{Vr.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>bo(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function ic(e){return new rc({type:`readonly`,innerType:e})}var ac=_(`ZodCustom`,(e,t)=>{Ur.init(e,t),T.init(e,t),e._zod.processJSONSchema=(t,n,r)=>$a(e,t,n,r)});function oc(e,t={}){return ma(ac,e,t)}function sc(e,t){return ha(e,t)}function cc(e){return Ii(Uo,e)}function lc(e){return Vi(ms,e)}var uc=Qo({protocol:/^https?$/}).refine(e=>!/^https?:\/\/[^/]*@/.test(e)&&!/[?#]/.test(e),`Use an HTTP(S) endpoint without embedded credentials`),dc=M({endpoint:Ds([uc,P(``)]).default(``),region:E().min(1).max(100).default(`us-east-1`),bucket:E().min(3).max(255),prefix:E().max(200).regex(/^[a-zA-Z0-9/_-]*$/).default(`kanvil/`),forcePathStyle:A().default(!0),accessKeyId:E().max(500).default(``),secretAccessKey:E().max(2e3).optional()}).strict(),fc=N([`none`,`apiKey`,`basic`]),pc=M({url:uc,auth:fc.optional(),index:E().regex(/^[a-z0-9][a-z0-9_-]{0,100}$/),apiKey:E().max(4e3).optional(),username:E().max(500).default(``),password:E().max(2e3).optional()}).strict(),mc=ks(`provider`,[M({provider:P(`local`)}).strict(),dc.extend({provider:P(`s3`)})]),hc=ks(`provider`,[M({provider:P(`postgres`)}).strict(),pc.extend({provider:P(`elasticsearch`)})]),gc=M({url:Qo({protocol:/^amqps?$/}).max(4e3).optional(),exchange:E().min(1).max(200).regex(/^[a-zA-Z0-9_.-]+$/).refine(e=>!e.startsWith(`amq.`),`Use an application exchange`).default(`kanvil.events`)}).strict(),_c=ks(`provider`,[M({provider:P(`postgres`)}).strict(),gc.extend({provider:P(`rabbitmq`)})]),vc=M({emailPasswordEnabled:A().default(!0),ssoAutoProvision:A().default(!1)}).strict(),yc=M({expectedVersion:k().int().positive(),name:E().trim().min(1).max(100),description:E().max(500),storage:mc,search:hc,broker:_c.optional(),authentication:vc.optional()}).strict();M({name:E(),description:E()});var bc=M({id:O(),version:k().int(),name:E(),description:E(),authentication:vc.default(()=>vc.parse({})),storage:M({provider:N([`local`,`s3`]),source:N([`deployment`,`admin`]),settings:dc.omit({secretAccessKey:!0}).nullable(),secretConfigured:A(),pending:k().int(),status:N([`ready`,`transferring`,`unavailable`]),error:E().nullable()}),search:M({provider:N([`postgres`,`elasticsearch`]),source:N([`deployment`,`admin`]),settings:pc.omit({apiKey:!0,password:!0}).nullable(),secretConfigured:A(),status:N([`builtin`,`indexing`,`ready`,`unavailable`]),cursor:E(),error:E().nullable()}),broker:M({provider:N([`postgres`,`rabbitmq`]),source:N([`deployment`,`admin`]),settings:M({endpoint:E(),exchange:E()}).nullable(),secretConfigured:A(),status:N([`builtin`,`connecting`,`ready`,`unavailable`]),error:E().nullable()}),deployment:M({url:E(),oidc:M({name:E(),discoveryUrl:E(),clientId:E()}).nullable(),push:A(),version:E()}),locations:j(M({id:O(),bucket:E(),endpoint:E(),prefix:E(),objects:k().int()}))});M({data:E().max(7e5),contentType:N([`image/png`,`image/jpeg`,`image/webp`])}).strict();var xc=M({image:E().nullable()}),F=e=>typeof e==`string`,Sc=()=>{let e,t,n=new Promise((n,r)=>{e=n,t=r});return n.resolve=e,n.reject=t,n},Cc=e=>e==null?``:String(e),wc=(e,t,n)=>{e.forEach(e=>{t[e]&&(n[e]=t[e])})},Tc=/###/g,Ec=e=>e&&e.includes(`###`)?e.replace(Tc,`.`):e,Dc=e=>!e||F(e),Oc=(e,t,n)=>{let r=F(t)?t.split(`.`):t,i=0;for(;i<r.length-1;){if(Dc(e))return{};let t=Ec(r[i]);!e[t]&&n&&(e[t]=new n),e=Object.prototype.hasOwnProperty.call(e,t)?e[t]:{},++i}return Dc(e)?{}:{obj:e,k:Ec(r[i])}},kc=(e,t,n)=>{let{obj:r,k:i}=Oc(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=Oc(e,o,Object);for(;s.obj===void 0&&o.length;)a=`${o[o.length-1]}.${a}`,o=o.slice(0,o.length-1),s=Oc(e,o,Object),s?.obj&&s.obj[`${s.k}.${a}`]!==void 0&&(s.obj=void 0);s.obj[`${s.k}.${a}`]=n},Ac=(e,t,n,r)=>{let{obj:i,k:a}=Oc(e,t,Object);i[a]=i[a]||[],i[a].push(n)},jc=(e,t)=>{let{obj:n,k:r}=Oc(e,t);if(n&&Object.prototype.hasOwnProperty.call(n,r))return n[r]},Mc=(e,t,n)=>{let r=jc(e,n);return r===void 0?jc(t,n):r},Nc=(e,t,n)=>{for(let r in t)r!==`__proto__`&&r!==`constructor`&&(Object.prototype.hasOwnProperty.call(e,r)?F(e[r])||e[r]instanceof String||F(t[r])||t[r]instanceof String?n&&(e[r]=t[r]):Nc(e[r],t[r],n):e[r]=t[r]);return e},Pc=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,`\\$&`),Fc={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`,"/":`/`},Ic=e=>F(e)?e.replace(/[&<>"'\/]/g,e=>Fc[e]):e,Lc=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}},Rc=[` `,`,`,`?`,`!`,`;`],zc=new Lc(20),Bc=(e,t,n)=>{t||=``,n||=``;let r=Rc.filter(e=>!t.includes(e)&&!n.includes(e));if(r.length===0)return!0;let i=zc.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},Vc=(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},Hc=e=>e?.replace(/_/g,`-`),Uc={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)}},Wc=new class e{constructor(e,t={}){this.init(e,t)}init(e,t={}){this.prefix=t.prefix||`i18next:`,this.logger=e||Uc,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=>F(e)?e.replace(/[\r\n\x00-\x1F\x7F]/g,` `):e),F(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)}},Gc=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){this.observers[e]&&(t?this.observers[e].delete(t):delete this.observers[e])}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)})}},Kc=new WeakSet,qc=class extends Gc{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):F(n)&&i?o.push(...n.split(i)):o.push(n)));let s=jc(this.data,o);return!s&&!t&&!n&&e.includes(`.`)&&(e=o[0],t=o[1],n=o.slice(2).join(`.`)),s||!a||!F(n)?s:Vc(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),kc(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)(F(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=jc(this.data,o)||{};a.skipCopy||(n=JSON.parse(JSON.stringify(n))),r?Nc(s,n,i):s={...s,...n},kc(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=>{let n=t[e];return Kc.has(n)?!0:!n||Object.keys(n).length===0?!1:(typeof n==`object`&&Kc.add(n),!0)})}toJSON(){return this.data}},Jc={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}},Yc=Symbol(`i18next/PATH_KEY`);function Xc(){let e=[],t=Object.create(null),n;return t.get=(r,i)=>(n?.revoke?.(),i===Yc?e:(e.push(i),n=Proxy.revocable(r,t),n.proxy)),Proxy.revocable(Object.create(null),t).proxy}function Zc(e,t){let{[Yc]:n}=e(Xc()),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 Qc=e=>!F(e)&&typeof e!=`boolean`&&typeof e!=`number`,$c=class e extends Gc{constructor(e,t={}){super(),wc([`resourceStore`,`languageUtils`,`pluralResolver`,`interpolator`,`backendConnector`,`i18nFormat`,`utils`],e,this),this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator=`.`),this.logger=Wc.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=Qc(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&&!Bc(e,n,r);if(a&&!o){let t=e.match(this.interpolator.nestingRegexp);if(t&&t.length>0)return{key:e,namespaces:F(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:F(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=Zc(t,{...this.options,...i})),Array.isArray(t)||(t=[String(t)]),t=t.map(e=>typeof e==`function`?Zc(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,ee=p?.usedKey||s,te=p?.exactUsedKey||s,ne=[`[object Number]`,`[object Function]`,`[object RegExp]`],re=i.joinArrays===void 0?this.options.joinArrays:i.joinArrays,ie=!this.i18nFormat||this.i18nFormat.handleAsObject,ae=i.count!==void 0&&!F(i.count),oe=e.hasDefaultValue(i),se=ae?this.pluralResolver.getSuffix(d,i.count,i):``,ce=i.ordinal&&ae?this.pluralResolver.getSuffix(d,i.count,{ordinal:!1}):``,le=ae&&!i.ordinal&&i.count===0,h=le&&i[`defaultValue${this.options.pluralSeparator}zero`]||i[`defaultValue${se}`]||i[`defaultValue${ce}`]||i.defaultValue,g=m;ie&&!m&&oe&&(g=h);let ue=Qc(g),de=Object.prototype.toString.apply(g);if(ie&&g&&ue&&!ne.includes(de)&&!(F(re)&&Array.isArray(g))){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(ee,g,{...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(g),t=e?[]:{},n=e?te:ee;for(let e in g)if(Object.prototype.hasOwnProperty.call(g,e)){let r=`${n}${o}${e}`;t[e]=oe&&!m?this.translate(r,{...i,defaultValue:Qc(h)?h[e]:void 0,joinArrays:!1,ns:c}):this.translate(r,{...i,joinArrays:!1,ns:c}),t[e]===r&&(t[e]=g[e])}m=t}}else if(ie&&F(re)&&Array.isArray(m))m=m.join(re),m&&=this.extendTranslation(m,t,i,r);else{let e=!1,n=!1;!this.isValidLookup(m)&&oe&&(e=!0,m=h),this.isValidLookup(m)||(n=!0,m=s);let a=(i.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&n?void 0:m,c=oe&&h!==m&&this.options.updateMissing;if(n||e||c){if(this.logger.log(c?`updateKey`:`missingKey`,d,l,ae&&!c?`${s}${this.pluralResolver.getSuffix(d,i.count,i)}`:s,c?h: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=oe&&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&&ae?e.forEach(e=>{let t=this.pluralResolver.getSuffixes(e,i);le&&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}`]||h)})}):n(e,s,h))}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=F(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&&!F(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=F(a)?[a]:a;return e!=null&&o?.length&&n.applyPostProcessor!==!1&&(e=Jc.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 F(e)&&(e=[e]),Array.isArray(e)&&(e=e.map(e=>typeof e==`function`?Zc(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&&!F(t.count),d=u&&!t.ordinal&&t.count===0,f=t.context!==void 0&&(F(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&&!F(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}},el=class{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=Wc.create(`languageUtils`),this.resolveHierarchyCache={}}clearCache(){this.resolveHierarchyCache={}}getScriptPartFromCode(e){if(e=Hc(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=Hc(e),!e||!e.includes(`-`))return e;let t=e.split(`-`);return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(F(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)),F(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||F(t),a=t===void 0&&typeof this.options.fallbackLng==`function`,o=F(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 F(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))):F(e)&&u(this.formatLanguageCode(e)),c.forEach(e=>{let t=this.formatLanguageCode(e);l.includes(t)||u(t)}),s===null?l:(this.resolveHierarchyCache[s]=l,l.slice())}},tl={zero:0,one:1,two:2,few:3,many:4,other:5},nl={select:e=>e===1?`one`:`other`,resolvedOptions:()=>({pluralCategories:[`one`,`other`]})},rl=class{constructor(e,t={}){this.languageUtils=e,this.options=t,this.logger=Wc.create(`pluralResolver`),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(e,t={}){let n=Hc(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!`),nl;if(!e.match(/-|_/))return nl;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)=>tl[e]-tl[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))}},il=(e,t,n,r=`.`,i=!0)=>{let a=Mc(e,t,n);return!a&&i&&F(n)&&(a=Vc(e,n,r),a===void 0&&(a=Vc(t,n,r))),a},al=e=>e.replace(/\$/g,`$$$$`),ol=class{constructor(e={}){this.logger=Wc.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:ee,maxReplaces:te,alwaysFormat:ne}=e.interpolation;this.escape=t===void 0?Ic:t,this.escapeValue=n===void 0||n,this.useRawValueToEscape=r!==void 0&&r,this.prefix=i?Pc(i):a||`{{`,this.suffix=o?Pc(o):s||`}}`,this.formatSeparator=c||`,`,this.unescapePrefix=l?``:u?Pc(u):`-`,this.unescapeSuffix=this.unescapePrefix?``:l?Pc(l):``,this.nestingPrefix=d?Pc(d):f||Pc(`$t(`),this.nestingSuffix=p?Pc(p):m||Pc(`)`),this.nestingOptionsSeparator=ee||`,`,this.maxReplaces=te||1e3,this.alwaysFormat=ne!==void 0&&ne,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=il(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(il(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=F(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!F(a)&&!this.useRawValueToEscape&&(a=Cc(a));let s=t.safeValue(a);if(e=e.replace(i[0],al(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(`${Pc(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},s=new RegExp(this.nestingRegexp),c=``,l=0;for(;r=s.exec(e);){let u=[];a={...n},a=a.replace&&!F(a.replace)?a.replace:a,a.applyPostProcessor=!1,delete a.defaultValue;let d=/{.*}/s.test(r[1])?r[1].lastIndexOf(`}`)+1:r[1].indexOf(this.formatSeparator);if(d!==-1&&(u=r[1].slice(d).split(this.formatSeparator).map(e=>e.trim()).filter(Boolean),r[1]=r[1].slice(0,d)),i=t(o.call(this,r[1].trim(),a),a),i&&r[0]===e&&!F(i))return i;F(i)||(i=Cc(i)),i||=(this.logger.warn(`missed to resolve ${r[1]} for nesting ${e}`),``),u.length&&(i=u.reduce((e,t)=>this.format(e,t,n.lng,{...n,interpolationkey:r[1].trim()}),i.trim())),c+=e.slice(l,r.index)+Cc(i),l=s.lastIndex,this.regexp.lastIndex=0}return l?c+e.slice(l):e}},sl=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}},cl=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(Hc(r),i),t[o]=s),s(n)}},ll=e=>(t,n,r)=>e(Hc(n),r)(t),ul=class{constructor(e={}){this.logger=Wc.create(`formatter`),this.options=e,this.init(e)}init(e,t={interpolation:{}}){this.formatSeparator=t.interpolation.formatSeparator||`,`;let n=t.cacheInBuiltFormats?cl:ll;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()]=cl(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}=sl(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)}},dl=(e,t)=>{e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)},fl=class extends Gc{constructor(e,t,n,r={}){super(),this.backend=e,this.store=t,this.services=n,this.languageUtils=n.languageUtils,this.options=r,this.logger=Wc.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=>{Ac(n.loaded,[i],a),dl(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)}o&&s&&r<this.maxRetries?setTimeout(()=>{this.read(e,t,n,r+1,i*2,a)},i):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)}else 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();F(e)&&(e=this.languageUtils.toResolveHierarchy(e)),F(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!!!`);else 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)}}},pl=()=>({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]),F(e[1])&&(t.defaultValue=e[1]),F(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}),ml=e=>(F(e.ns)&&(e.ns=[e.ns]),F(e.fallbackLng)&&(e.fallbackLng=[e.fallbackLng]),F(e.fallbackNS)&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&!e.supportedLngs.includes(`cimode`)&&(e.supportedLngs=e.supportedLngs.concat([`cimode`])),e),hl=()=>{},gl=e=>{Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(t=>{typeof e[t]==`function`&&(e[t]=e[t].bind(e))})},I=class e extends Gc{constructor(e={},t){if(super(),this.options=ml(e),this.services={},this.logger=Wc,this.modules={external:[]},gl(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&&(F(e.ns)?e.defaultNS=e.ns:e.ns.includes(`translation`)||(e.defaultNS=e.ns[0]));let n=pl();this.options={...n,...this.options,...ml(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?Wc.init(r(this.modules.logger),this.options):Wc.init(null,this.options);let e;e=this.modules.formatter?this.modules.formatter:ul;let t=new el(this.options);this.store=new qc(this.options.resources,this.options);let n=this.services;n.logger=Wc,n.resourceStore=this.store,n.languageUtils=t,n.pluralResolver=new rl(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 ol(this.options),n.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},n.backendConnector=new fl(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 $c(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||=hl,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=Sc(),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=hl){let n=t,r=F(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=Sc();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||=hl,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`&&Jc.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=Sc();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=F(t)?t:t&&t[0],a=this.store.hasLanguageSomeTranslations(n)?n:this.services.languageUtils.getBestMatchFromCodes(F(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=Zc(o.keyPrefix,c));let l=this.options.keySeparator||`.`,u;return o.keyPrefix&&Array.isArray(e)?u=e.map(e=>(typeof e==`function`&&(e=Zc(e,c)),`${o.keyPrefix}${l}${e}`)):(typeof e==`function`&&(e=Zc(e,c)),u=o.keyPrefix?`${o.keyPrefix}${l}${e}`:e),this.t(u,o)};return F(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}if(this.hasResourceBundle(n,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages)return!0;let{languageUtils:o}=this.services,s=t.lng?o.isSupportedCode(n)&&o.toResolveHierarchy(n,!1)[0]:n;return!(s&&!a(s,e)||r&&!a(i,e))}loadNamespaces(e,t){let n=Sc();return this.options.ns?(F(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=Sc();F(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 el(pl());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=hl){let r=t.forkResourceStore;r&&delete t.forkResourceStore;let i={...this.options,preload:!1,...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 qc(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={...pl().interpolation,...this.options.interpolation,...t.interpolation},n={...i,interpolation:e};a.services.interpolator=new ol(n)}return a.translator=new $c(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();I.createInstance,I.dir,I.init,I.loadResources,I.reloadResources,I.use,I.changeLanguage,I.getFixedT,I.t,I.exists,I.setDefaultNamespace,I.hasLoadedNamespace,I.loadNamespaces,I.loadLanguages;var _l={common:{status:{backlog:`Backlog`,todo:`To do`,in_progress:`In progress`,in_review:`In review`,done:`Done`,cancelled:`Cancelled`},priority:{urgent:`Urgent`,high:`High`,medium:`Medium`,low:`Low`,none:`No priority`},kind:{feature:`Feature`,bug:`Bug`,chore:`Chore`,research:`Research`,documentation:`Documentation`},difficulty:{low:`Low`,med:`Medium`,high:`High`,none:`No difficulty`},role:{reader:`Read only`,writer:`Can edit`,admin:`Admin`},permission:{ticket:{write:{label:`Edit tickets`,description:`Create, edit, move, claim, and comment on tickets; create projects`},delete:{label:`Delete tickets`,description:`Delete tickets permanently`}},project:{manage:{label:`Manage projects`,description:`Project details, workflow, labels, fields, integrations, and lifecycle`}},member:{manage:{label:`Manage members`,description:`Add, change, and remove members`}},invitation:{manage:{label:`Manage invitations`,description:`Invite people by email`}},sharing:{manage:{label:`Manage sharing`,description:`Public read-only links and calendar feeds`}},workspace:{manage:{label:`Manage workspace`,description:`Workspace details, shared labels, and roles`}}},customFieldType:{text:`Text`,number:`Number`,date:`Date`,checkbox:`Checkbox`,select:`Select`,multiselect:`Multi-select`},customField:{removedOption:`Removed option`,checked:`Yes`},filterField:{status:`Status`,priority:`Priority`,kind:`Kind`,difficulty:`Difficulty`,label:`Label`,assigneeId:`Assignee`,customField:`Field`},sort:{priority:`Priority`,updated:`Recently updated`,created:`Recently created`,title:`Title`,labels:`Labels`,due:`Due date`,start:`Start date`,number:`Ticket number`,status:`Status`,difficulty:`Difficulty`,kind:`Kind`,assignee:`Assignee`,manual:`Manual`},due:{overdue:`Overdue`,today:`Due today`,week:`Due this week`,scheduled:`Has a due date`,none:`No due date`},relation:{blocks:{outgoing:`Blocks`,incoming:`Is blocked by`},related:{outgoing:`Related to`,incoming:`Related to`},duplicate:{outgoing:`Duplicates`,incoming:`Is duplicated by`},causes:{outgoing:`Causes`,incoming:`Is caused by`},clones:{outgoing:`Clones`,incoming:`Is cloned by`},implements:{outgoing:`Implements`,incoming:`Is implemented by`},reviews:{outgoing:`Reviews`,incoming:`Is reviewed by`}},remoteKind:{branch:`Branch`,pull_request:`Pull request`,issue:`Issue`},notificationCategory:{assignment:`Assignments`,status:`Status changes`,comment:`Comments`,mention:`Mentions`,update:`Other updates`,due_soon:`Due soon`,overdue:`Overdue`},destinationEvent:{created:`New tickets`},deliveryKind:{email:`Email`,webhook:`Webhook`},change:{pull_request:{name:`Pull request`,opened:`Pull request opened`,draft:`Draft pull request`,merged:`Pull request merged`,closed:`Pull request closed unmerged`},merge_request:{name:`Merge request`,opened:`Merge request opened`,draft:`Draft merge request`,merged:`Merge request merged`,closed:`Merge request closed unmerged`},branchCreated:`Branch created`},issueLinkState:{active:`Syncing`,paused:`Paused`,review:`Needs review`,creating:`Creating issue`,unknown:`Creation unconfirmed`},importStatus:{previewed:`Ready to import`,running:`Importing`,completed:`Imported`,failed:`Failed`,cancelled:`Cancelled`},importProvider:{linear:{project:`Team`,setup:`Create a personal API key under Settings › Security & access in Linear; read access is enough.`},jira:{project:`Project`,setup:`Jira Cloud signs in with your account email and an API token from id.atlassian.com; Data Center and Server use a personal access token. Browse access to the project is enough.`},trello:{project:`Board`,setup:`Use the API key of a Power-Up you administer at trello.com/power-ups/admin and a token generated for it; read access is enough.`},plane:{project:`Project`,setup:`Create a personal access token under Profile settings › Personal access tokens in Plane. Plane Cloud's API address is https://api.plane.so; the workspace slug is the first part of its web address.`},planka:{project:`Board`,setup:`Sign in with a PLANKA account that can open the board; the session Kanvil opens ends when the read does. PLANKA 2 administrators can issue API keys instead.`},kaneo:{project:`Project`,setup:`Create an API key under Settings › Account › Developer in Kaneo.`}},plankaSignIn:{password:`Username and password`,api_key:`API key`},jiraEdition:{cloud:`Cloud`,data_center:`Data Center or Server`},event:{time_entry:{created:`Time entry created`,updated:`Time entry updated`,deleted:`Time entry deleted`},label:{created:`Label created`,updated:`Label updated`,deleted:`Label deleted`},workflow:{created:`Workflow state added`,updated:`Workflow state changed`,deleted:`Workflow state removed`},custom_field:{created:`Field created`,updated:`Field updated`,deleted:`Field deleted`},ticket:{created:`Ticket created`,updated:`Ticket updated`,deleted:`Ticket deleted`,moved:`Moved from another project`,moved_away:`Moved to another project`,due_soon:`Due soon`,overdue:`Overdue`,claimed:`Work claimed`},claim:{renewed:`Claim renewed`,released:`Claim released`,recovered:`Claim recovered`},comment:{created:`Comment added`,updated:`Comment edited`,deleted:`Comment deleted`},relation:{added:`Relationship added`,removed:`Relationship removed`},attachment:{created:`File attached`,deleted:`File removed`},evidence:{added:`Evidence attached`},resource:{added:`Link added`,updated:`Link edited`,removed:`Link removed`},calendar_feed:{created:`Calendar feed created`,revoked:`Calendar feed revoked`},project:{created:`Project created`,updated:`Project updated`,archived:`Project archived`,restored:`Project restored`,transferred:`Project moved to another workspace`,deleted:`Project deleted`},membership:{updated:`Project access changed`},workspace:{owner_changed:`Workspace owner changed`},role:{created:`Role created`,updated:`Role changed`,deleted:`Role deleted`},invitation:{updated:`Invitation changed`},destination:{created:`Destination added`,updated:`Destination changed`,deleted:`Destination removed`},repository:{connected:`Repository connected`,updated:`Repository connection changed`,disconnected:`Repository disconnected`,received:`Repository webhook received`},issue_link:{updated:`Issue sync changed`}},error:{network:`Could not reach Kanvil. Check your connection and retry.`,fallback:`The request could not be completed`,input:`Input`,code:{unauthorized:`Sign in to continue.`,session_required:`Use a signed-in account for this action.`,account_disabled:`This account is disabled.`,forbidden:`You do not have permission to do this.`,insufficient_scope:`This credential does not allow this action.`,workspace_scope_required:`Use an account with workspace access for this action.`,invalid_origin:`This origin is not allowed.`,not_found:`This item was not found or is not yours to see.`,version_conflict:`This changed since you loaded it. Reload and try again.`,time_entry_conflict:`This actor already has a running entry on the ticket.`,claim_conflict:`Another worker holds this ticket.`,idempotency_conflict:`This request was already used for another change.`,project_archived:`Restore the archived project before changing it.`,rate_limited:`Too many changes in a short time. Wait and retry.`,snapshot_required:`The live feed fell behind. Reload to continue.`,request_failed:`The request could not be completed`}},action:{add:`Add`,apply:`Apply`,back:`Back`,cancel:`Cancel`,clear:`Clear`,close:`Close`,confirm:`Confirm`,continue:`Continue`,copy:`Copy`,create:`Create`,delete:`Delete`,done:`Done`,edit:`Edit`,open:`Open`,remove:`Remove`,rename:`Rename`,reset:`Reset`,retry:`Retry`,save:`Save`,search:`Search`},state:{copied:`Copied`,loading:`Loading…`,saved:`Saved`,saving:`Saving…`,none:`None`,unassigned:`Unassigned`},evidenceKind:{pull_request:`Pull request`,test:`Test`,review:`Review`,deployment:`Deployment`,device:`Device`,other:`Other`},evidenceOutcome:{reported:`Reported`,pending:`Pending`,passed:`Passed`,failed:`Failed`},readinessReason:{project_archived:`The project is archived`,not_open:`Ticket must be in a To do state and unarchived`,not_enabled:`Agent work has not been enabled`,missing_description:`Add a description`,missing_acceptance_criteria:`Add acceptance criteria`,missing_difficulty:`Choose a difficulty`,duplicate:`This ticket is marked as a duplicate`,claim_recovery_required:`Confirm the previous worker stopped before recovering ownership`,claimed:`Claimed by {{worker}}`,dependency:`{{key}} is unfinished`},person:{deleted:`Deleted account`,former:`Former member`},signIn:{codeTitle:`Sign in with a code`,resetTitle:`Reset password`,codeSent:`If {{email}} has an account, a code is on its way. It expires in 10 minutes.`,code:`Code`,newPassword:`New password`,sendCode:`Email me a code`,back:`Back to sign in`,resend:`Resend code`,resent:`Code sent again`,emailCode:`Email me a sign-in code`,forgot:`Forgot password?`,resetDone:`Password reset. Sign in with the new password.`,resetDoneTitle:`Password reset`,resetDoneBody:`Sign in with the new password.`,invalidCode:`That code is wrong, used, or expired. Resend it to get one that works.`,localPassword:`Local password`},language:{label:`Language`,system:`System default`}},shell:{ui:{showValue:`Show {{label, lowercase}}`,hideValue:`Hide {{label, lowercase}}`,previousPage:`Previous {{noun}}`,nextPage:`Next {{noun}}`,pageRange:`{{from}}–{{to}} of {{total}}`,priority:`{{label}} priority`,working:`Working…`,searchPlaceholder:`Search…`,clearValue:`Clear {{label, lowercase}}`,copyValue:`Copy {{label, lowercase}}`,copied:`{{value}} copied`},documentTitle:`{{name}} · Kanvil`,openKanvil:`Open Kanvil`,page:{home:`Home`,myWork:`My work`,inbox:`Inbox`,search:`Search`,settings:`Settings`,planning:`Planning`,ticket:`Ticket`,tickets:`Tickets`,projects:`Projects`},connection:{restored:`Connection restored`,lost:`Connection lost`,reconnecting:`Reconnecting…`,reload:`Reload`,signIn:`Sign in to reconnect`},app:{skipToContent:`Skip to content`,assigned:`Assigned to you`,openCount_one:`{{count, number}} open`,openCount_other:`{{count, number}} open`,noAssigned:`No open tickets assigned to you`,allInMyWork_one:`All {{count, number}} in My work`,allInMyWork_other:`All {{count, number}} in My work`,openMyWork:`Open My work`,recentActivity:`Recent activity`,noActivity:`No activity yet`,searchProjects:`Search projects`,projectCount_one:`{{count, number}} project`,projectCount_other:`{{count, number}} projects`,noMatchingProjects:`No matching projects`,clearSearch:`Clear search`,noWorkspaces:`No workspaces yet`,noActiveProjects:`No active projects`,noProjects:`No projects yet`,archivedProjects:`Archived projects`,archived:`Archived`,noOpenTickets:`No open tickets`,overdueCount_one:`{{count, number}} overdue`,overdueCount_other:`{{count, number}} overdue`,percentDone:`{{percent}} done`,nextDue:`next due <time/>`,projectSettingsFor:`Project settings for {{name}}`,pageNotFound:`Page not found`,openHome:`Open home`,tryAgain:`Try again`,adminRequired:`Instance administrator access is required`,projectNotFound:`Project not found`,noWorkspaceSelected:`No workspace selected`},auth:{signIn:`Sign in`,createOwner:`Create your owner account`,ownerHint:`The first account administers this instance.`,invitedHint:`Sign in with the invited email address to accept the invitation.`,signInWith:`Sign in with {{provider}}`,useEmail:`Use email and password`,or:`or`,name:`Name`,setupToken:`Setup token`,setupTokenHint:`Use KANVIL_SETUP_TOKEN from your instance configuration.`,email:`Email`,password:`Password`,signingIn:`Signing in…`,createAccount:`Create account`,consent:{expired:`The authorization request has expired. Reconnect your client.`,title:`Authorize {{client}}`,titleUnnamed:`Authorize client`,subtitle:`This client requests access as your account. Project permissions still apply.`,deny:`Deny`,allow:`Allow access`},invitation:{unavailable:`Invitation unavailable`,join:`Join {{workspace}}`,invited:`Invited`,from:`From`,access:`Access`,removedProjects:`Removed projects`,wholeWorkspace:`Whole workspace`,expires:`Expires`,expired:`This invitation has expired. Ask a workspace administrator for a new invitation.`,revoked:`This invitation was revoked. Ask a workspace administrator for a new invitation.`,accepted:`This invitation was already accepted. Ask a workspace administrator for a new invitation.`,wrongAccount:`You are signed in as <account>{{current}}</account>. Sign in as {{invited}} to accept.`,signOut:`Sign out`,joined:`Joined {{workspace}}`,accept:`Accept invitation`},callback:{cancelled:`Sign-in was cancelled. Try again when you are ready.`,linkedElsewhere:`This identity is already linked to another Kanvil account. Use a different identity or contact your administrator.`,notLinked:`This identity is not linked to a Kanvil account. Sign in with your local account and link it in Settings.`,expired:`The sign-in request expired or could not be verified. Try again from this screen.`,emailMismatch:`The identity provider email could not be linked. Contact your administrator.`,failed:`Sign-in could not be completed. Try again or contact your administrator.`}},you:`You`,inbox:{markAllRead:`Mark all read`,clearRead:`Clear read`,cleared_one:`Cleared {{count, number}} read notification`,cleared_other:`Cleared {{count, number}} read notifications`,unread:`Unread`,mentions:`Mentions`,all:`All notifications`,noUnread:`No unread notifications`,noMentions:`No mentions`,noNotifications:`No notifications`,markUnread:`Mark unread`,markRead:`Mark read`,dismiss:`Dismiss`},search:{field:`Search workspace`,placeholder:`Search tickets, projects, comments, activity…`,tab:{all:`All`,project:`Projects`,ticket:`Tickets`,comment:`Comments`,activity:`Activity`},indexing:`External search is catching up, so ticket matches come from PostgreSQL.`,empty:`Search tickets, projects, comments, and activity`,noResults:`No results for “{{query}}”`,results:`Search results`,pages:`Search pages`,previous:`Previous`,next:`Next`,type:{project:`Project`,ticket:`Ticket`,comment:`Comment`,activity:`Activity`}},column:{key:`Ticket`,labels:`Labels`,scopes:`Scopes`,status:`Status`,priority:`Priority`,difficulty:`Difficulty`,kind:`Kind`,assigneeId:`Assignee`,startAt:`Start`,dueAt:`Due`,createdAt:`Created`,updatedAt:`Updated`},public:{notShared:`This project is not shared`,notSharedHint:`The link was turned off or never existed. Members can sign in to read it.`,noTickets:`No tickets`,ticketUnavailable:`Ticket unavailable`,backToTickets:`Back to tickets`,description:`Description`,noDescription:`_No description_`,acceptanceCriteria:`Acceptance criteria`,noAcceptanceCriteria:`_No acceptance criteria_`,ticketProperties:`Ticket properties`,properties:`Properties`,status:`Status`,priority:`Priority`,kind:`Kind`,difficulty:`Difficulty`,startDate:`Start date`,dueDate:`Due date`,labels:`Labels`,scopes:`Scopes`,created:`Created`,updated:`Updated`,relationships:`Relationships`,parent:`Parent`,child:`Child`},sidebar:{workspace:`Workspace`,unread_one:`{{count, number}} unread`,unread_other:`{{count, number}} unread`,userSettings:`User settings`,administration:`Administration`,signOut:`Sign out`,projectSettings:`Project settings`},workspace:{new:`New workspace`,name:`Workspace name`,key:`Workspace key`,create:`Create workspace`,workspaces:`Workspaces`,switch:`Switch workspace`,settings:`Workspace settings`},palette:{open:`Go to…`,title:`Go to`,description:`Find a project, ticket, page, or action`,placeholder:`Search tickets, projects, pages, actions…`,searching:`Searching…`,noResults:`No results`,jumpTo:`Jump to`,openKey:`Open {{key}} in {{project}}`,resultsIn:`Results in {{workspace}}`,results:`Results`,seeAll_one:`See all {{count, number}} results`,seeAll_other:`See all {{count, number}} results`,actions:`Actions`,pages:`Pages`,newTicketIn:`New ticket in {{project}}`,myTicketsIn:`My tickets in {{project}}`,lightMode:`Switch to light mode`,darkMode:`Switch to dark mode`,keywords:{jump:`{{query}} jump open`,allResults:`all results {{query}}`,newTicket:`new ticket create`,myTickets:`my tickets assigned to me`,lightMode:`switch to light mode theme appearance`,darkMode:`switch to dark mode theme appearance`,help:`keyboard shortcuts help`,home:`home overview all projects`,myWork:`my work assigned tickets`,search:`search comments activity projects tickets`,inbox:`inbox notifications`,settings:`settings {{scope}} {{label}}`}},actionCategory:{general:`General`,ticketList:`Ticket list`,inbox:`Inbox`,ticket:`Ticket`,search:`Search`,markdown:`Markdown`},action:{palette:`Go to anything`,help:`Keyboard shortcuts`,sidebar:`Toggle sidebar`,newTicket:`New ticket`,search:`Search tickets`,highlight:`Highlight the next or previous ticket`,open:`Open the highlighted ticket`,preview:`Preview the highlighted ticket beside the list`,select:`Select the highlighted ticket`,properties:`Set status, priority, or assignee of the highlighted ticket`,inboxHighlight:`Highlight the next or previous notification`,inboxOpen:`Read the highlighted notification's ticket beside the Inbox`,inboxRead:`Mark the highlighted notification read or unread`,inboxDismiss:`Dismiss the highlighted notification`,step:`Open the next or previous ticket`,edit:`Edit ticket`,save:`Save a ticket or comment`,results:`Move through search results`,insertBlock:`Insert a table, diagram, file, or other block in the Visual editor`},move:{top:{label:`Move the highlighted ticket to the top`,menu:`Move to top`},up:{label:`Move the highlighted ticket up`,menu:`Move up`},down:{label:`Move the highlighted ticket down`,menu:`Move down`},bottom:{label:`Move the highlighted ticket to the bottom`,menu:`Move to bottom`},previous:{label:`Move the highlighted ticket to the previous status`,menu:`Move to previous status`},next:{label:`Move the highlighted ticket to the next status`,menu:`Move to next status`}},copy:{link:{label:`Copy link`,copied:`Ticket link`},keyAndTitle:{label:`Copy key and title`,copied:`Ticket`},title:{label:`Copy title`,copied:`Title`},markdown:{label:`Copy as Markdown`,copied:`Markdown`},branch:{label:`Copy branch name`,copied:`Branch name`}},settingsNav:{account:`Account`,settings:`Settings`,workspace:`Workspace`,workspaceSettings:`Workspace settings`,projects:`Projects`,projectSettings:`Project settings`,administration:`Administration`,section:{profile:`Profile & security`,appearance:`Appearance`,preferences:`Preferences`,credentials:`API keys`,notifications:`Notifications`,general:`General`,members:`Members`,roles:`Roles`,labels:`Labels`,workflow:`Workflow`,fields:`Fields`,integrations:`Integrations`,calendar:`Calendar feeds`,storage:`File storage`,search:`Search`,events:`Event delivery`,users:`Users`,workspaces:`Workspaces`,authentication:`Authentication`}},browser:{copyFailed:`Copy failed. Select the text and copy it manually.`,readFailed:`The file could not be read`,encodeFailed:`The file could not be encoded`,imageTooBig:`Choose an image smaller than 10 MB.`,cannotResize:`This browser cannot resize the image.`,prepareFailed:`The image could not be prepared.`,stillTooLarge:`This image stays too large after resizing. Choose a simpler image.`},primitive:{close:`Close`,more:`More`,breadcrumb:`breadcrumb`,sidebar:`Sidebar`,sidebarDescription:`Displays the mobile sidebar.`,toggleSidebar:`Toggle Sidebar`,resizeSidebar:`Resize sidebar`,expandSidebar:`Expand sidebar`,commandTitle:`Command Palette`,commandDescription:`Search for a command to run...`}},ticket:{list:{selectSection:`Select {{section}} tickets`,expandSection:`Expand {{section}} tickets`,collapseSection:`Collapse {{section}} tickets`,sectionTickets:`{{section}} tickets`,later:`Later`,selectAll:`Select all displayed tickets`,selectTicket:`Select {{key}}`,title:`Title`,all:`All`,planned:`Planned`,archived:`Archived`,allTickets:`All tickets`,customView:`Custom view`,sectionCount:`{{n, number}} {{section}}`,planning:`{{project}} planning`,collection:`{{source}} ({{sections}})`,moved:`{{key}} moved`,movedTo:`{{key}} moved to {{status}}`,movedAbove:`{{key}} moved above {{neighbor}}`,movedBelow:`{{key}} moved below {{neighbor}}`,movedToAbove:`{{key}} moved to {{status}} above {{neighbor}}`,movedToBelow:`{{key}} moved to {{status}} below {{neighbor}}`,emptyFiltered:`No matching tickets`,emptyPlanning:`Nothing planned or archived`,emptyProject:`No tickets yet`,emptyWork:`No open tickets assigned to you`,createFirst:`Create the first ticket`,activeWork:`Active work`,views:`Ticket views`,saveCurrentView:`Save current view`,deleteView:`Delete view {{name}}`,deleteViewConfirm:`Remove {{name}} from saved views? Tickets stay unchanged.`,planningLink:`Planning`,newTicketShortcut:`New ticket ({{shortcut}})`,saveView:`Save view`,viewSaved:`View saved`,viewName:`View name`,retry:`Retry loading tickets`,board:`Ticket board`,tickets:`Tickets`,resizeColumn:`Resize {{column}} column`,count_one:`{{count, number}} ticket`,count_other:`{{count, number}} tickets`,scheduledCount_one:`{{count, number}} scheduled ticket`,scheduledCount_other:`{{count, number}} scheduled tickets`},move:{destination:`Destination`,projectPlaceholder:`Move to project…`,blockers:`Resolve before moving`,submit:`Move ticket`,pending:`Moving…`},picker:{placeholder:`Choose a ticket`,loading:`Loading ticket…`,searchLabel:`Search {{label, lowercase}}`,searchPlaceholder:`Search by title or key…`,noParent:`No parent`,searching:`Searching…`,empty:`No tickets found`},property:{status:`Status`,priority:`Priority`,kind:`Kind`,difficulty:`Difficulty`,assignee:`Assignee`,you:`{{name}} (you)`,assignTo:`Assign to…`,set:`Set {{label, lowercase}}…`,search:`Search {{label, lowercase}}`,noMatches:`No matches`},field:{mixed:`Mixed`,unchecked:`No`,noValue:`No value`},project:{label:`Project`,placeholder:`Create in project…`,search:`Search projects`},tags:{labels:`Labels`,scopes:`Scopes`,summary:`{{label}}: {{tags}}`,edit:`Edit {{label, lowercase}}`,editValues:`Edit {{label, lowercase}}: {{tags}}`,editMixed:`Edit {{label, lowercase}}: mixed`,mixed:`Mixed {{label, lowercase}}`,none:`No {{label, lowercase}}`,mixedNote:`The selected tickets have different {{label, lowercase}}.`,clear:`Clear {{label, lowercase}}`,replace:`Replace {{label, lowercase}}`},tagInput:{remove:`Remove {{label, lowercase}} {{tag}}`,addAnother:`Add another…`,add:`Add {{label, lowercase}}…`,choose:`Choose {{label, lowercase}}`,chooseLabels:`Choose labels`,searchPlaceholder:`Search labels…`,searchLabel:`Search project labels`,empty:`No matching labels`},link:{previewUnavailable:`Preview unavailable`},userPicker:{label:`Account`,placeholder:`Choose an account`,searchPlaceholder:`Search name or email…`,searchLabel:`Search accounts`,useEmail:`Use {{email}}`,emptyAnyAccount:`Search for a member or enter an existing account’s email.`,empty:`No matching members`},date:{placeholder:`Choose a date`,clear:`Clear {{label, lowercase}}`,start:`Start date`,startShort:`Start`,noStart:`No start date`,due:`Due date`,dueShort:`Due`,noDue:`No due date`},filter:{me:`Me`,searchTickets:`Search tickets`,searchTicketsPlaceholder:`Search tickets…`,filters:`Filters`,filtersActive:`Filters ({{active, number}})`,due:`Due`,anyDue:`Any due date`,archived:`Archived`,hideArchived:`Hide archived`,includeArchived:`Include archived`,archivedOnly:`Archived only`,includingArchived:`Including archived`,reset:`Reset filters`,clear:`Clear filters`,active:`Active ticket filters`,searchChip:`Search: {{query}}`,chipAny:`{{field}}:`,chipNone:`{{field}} is not:`,notValues:`Not {{values}}`,match:`{{label}} match`,is:`Is`,isNot:`Is not`,searchPlaceholder:`{{search}}…`,anyValue:{status:`All statuses`,priority:`All priorities`,kind:`All kinds`,difficulty:`All difficulties`,label:`All labels`,assigneeId:`Anyone`,customField:`Any field value`},searchValues:{status:`Search statuses`,priority:`Search priorities`,kind:`Search kinds`,difficulty:`Search difficulties`,label:`Search labels`,assigneeId:`Search people`,customField:`Search fields`}},display:{title:`Display`,orderBy:`Order by`,direction:`Direction`,ascending:`Ascending`,descending:`Descending`,reset:`Reset display`,groupBy:`Group by`,dueDate:`Due date`,layout:`Layout`,list:`List`,board:`Board`,backgrounds:`Project backgrounds`,show:`Show`,hide:`Hide`,rowSpacing:`Row spacing`,compact:`Compact`,comfortable:`Comfortable`,labelDisplay:`Label display`,compactPreview:`Compact preview`,allLabels:`All labels`,properties:`Properties`},selection:{region:`Selected tickets`,clear:`Clear selection`,selected_one:`{{count, number}} selected`,selected_other:`{{count, number}} selected`,selectedOf_one:`{{count, number}} of {{total}}<wide> selected</wide>`,selectedOf_other:`{{count, number}} of {{total}}<wide> selected</wide>`,applied_one:`{{label}} applied to {{count, number}} ticket`,applied_other:`{{label}} applied to {{count, number}} tickets`,partlyApplied_one:`Applied to {{done, number}} of {{count, number}} ticket`,partlyApplied_other:`Applied to {{done, number}} of {{count, number}} tickets`,mixedDue:`Mixed due dates`,fields:`Fields`,more:`More actions`,moveTo:`Move to {{status}}`,restoreChange:`Restore`,restore:`Restore selected`,archive:`Archive selected`,delete:`Delete selected`,deleteLimit:`Delete up to {{limit, number}} at once`,archiveConfirm_one:`Archive {{count, number}} ticket from {{collection}}?`,archiveConfirm_other:`Archive {{count, number}} tickets from {{collection}}?`,deleteConfirm_one:`Permanently delete {{count, number}} ticket from {{collection}}, with their comments, relationships, and attachments? Children outside the selection lose their parent.`,deleteConfirm_other:`Permanently delete {{count, number}} tickets from {{collection}}, with their comments, relationships, and attachments? Children outside the selection lose their parent.`,deleted_one:`Deleted {{count, number}} ticket`,deleted_other:`Deleted {{count, number}} tickets`},menu:{copied:`{{label}} copied`,open:`Open ticket`,preview:`Preview`,newTab:`Open in new tab`,edit:`Edit ticket`,editTitle:`Edit {{key}}`,duplicate:`Duplicate ticket`,created:`Created {{key}}`,move:`Move`,moveToProject:`Move to project…`,moveTitle:`Move {{key}}`,moved:`Moved to {{key}}`,follow:`Follow ticket`,unfollow:`Unfollow ticket`,archive:`Archive ticket`,unarchive:`Unarchive ticket`,delete:`Delete ticket`,deleteConfirm:`Permanently delete {{key}}, its comments, relationships, and attachments?`,openProject:`Open project`,projectLink:`Project link`,copyLink:`Copy link`,newTicket:`New ticket`,projectSettings:`Project settings`,manageAccount:`Manage account`,email:`Email`,copyEmail:`Copy email`},schedule:{range:`{{from}} – {{to}}`,calendar:`Calendar`,timeline:`Timeline`,today:`Today`,previousMonth:`Previous month`,nextMonth:`Next month`,previousWeeks:`Previous two weeks`,nextWeeks:`Next two weeks`,emptyWeeks:`Nothing scheduled in these weeks`,monthTickets:`Tickets in {{title}}`,showDay_one:`Show all {{count, number}} ticket on {{day}}`,showDay_other:`Show all {{count, number}} tickets on {{day}}`,more_one:`{{count, number}} more`,more_other:`{{count, number}} more`,ticketColumn:`Ticket`,scheduledTickets:`Scheduled tickets`},copy:{description:`Description`,acceptanceCriteria:`Acceptance criteria`}},detail:{field:{title:`Title`,description:`Description`,acceptanceCriteria:`Acceptance criteria`,parent:`Parent`,parentTicket:`Parent ticket`,labels:`Labels`,scopes:`Scopes`,holdReason:`Hold reason`,url:`URL`},page:{preview:`Ticket preview`,unavailable:`Ticket unavailable`,noProject:`The link does not name the ticket's project.`,gone:`This ticket was deleted or you no longer have access.`,closePreview:`Close preview`,openFullPage:`Open in full page`,backToTickets:`Back to tickets`,tickets:`Tickets`,previousTicket:`Previous ticket`,previousTicketShortcut:`Previous ticket (K)`,nextTicket:`Next ticket`,nextTicketShortcut:`Next ticket (J)`,position:`{{position, number}} / {{total, number}}`,subscribe:`Subscribe`,unsubscribe:`Unsubscribe`,subscribed:`Subscribed to updates`,unsubscribed:`Unsubscribed`,archive:`Archive ticket`,unarchive:`Unarchive ticket`,archivedToast:`Ticket archived`,unarchivedToast:`Ticket unarchived`,archived:`Archived`,edit:`Edit ticket`,editShortcut:`Edit ticket (E)`,editTitle:`Edit {{key}}`,actions:`Ticket actions`,copyKey:`Copy ticket key`,keyCopied:`{{key}} copied`,noDescription:`_No description_`,noAcceptanceCriteria:`_No acceptance criteria_`,coordination:`Ticket coordination`,properties:`Properties`,created:`Created`,updated:`Updated`},section:{discussion:`Discussion`,evidence:`Evidence`,activity:`Activity`},readiness:{heading:`Agent readiness`,ready:`Ready to claim`,notReady:`Not ready to claim`,hold:`Hold: {{reason}}`,claimedUntil:`Claimed by <strong>{{worker}}</strong> until {{date}}.`},claim:{release:`Release my claim`,releaseDescription:`Release ownership after your worker has stopped writing?`,recover:`Recover expired claim`,recoverHelp:`Recovery requires project administrator access and an expired claim. Stop the worker first.`,reason:`Recovery reason`,confirmed:`I have confirmed the worker has stopped`,submit:`Recover ownership`},editor:{storageUnavailable:`This browser cannot save your draft. Keep the editor open until you save.`,saved:`{{key}} saved`,created:`{{key}} created`,properties:`Ticket properties`,readyForAgents:`Ready for agents`,readyForAgentsHelp:`Agents may claim this ticket once requirements, blockers, and ownership allow it`,agents:`Agents`,notReady:`Not ready`,moreProperties:`More properties`,holdPlaceholder:`Why should work wait?`,claimsNote:`Claims still depend on requirements, blockers, and current ownership.`,restoreSize:`Restore composer size`,expand:`Expand composer`,staleTitle:`This ticket changed.`,staleDescription:`Your draft still uses version {{version}}; saving will require the current version.`,discardAndReload:`Discard draft and reload`,titlePlaceholder:`Ticket title`,descriptionPlaceholder:`Add context, requirements, or a reproduction…`,criteriaPlaceholder:`- [ ] What will show that this is complete?`,removeCriteria:`Remove acceptance criteria`,addCriteria:`Add acceptance criteria`,savedLocally:`Draft saved on this device`,notSavedLocally:`Draft could not be saved`,discardDraft:`Discard draft`,createMore:`Create more`,save:`Save ticket`,create:`Create ticket`},resource:{removeConfirm:`Remove {{name}}?`,uploading:`Uploading…`},attachment:{heading:`Attachments`,tooLarge:`Choose files no larger than 10 MB each.`,attached_one:`File attached`,attached_other:`{{count, number}} files attached`,attach:`Attach file`,emptyWritable:`No attachments. Drop files here.`,empty:`No attachments`,remove:`Remove attachment`,fileInput:`File (up to 10 MB)`},evidence:{description:`Links and outcomes reported by the people and integrations working on this ticket.`,add:`Add evidence`,empty:`No evidence attached`,added:`Evidence added`,kindLabel:`Kind`,outcomeLabel:`Reported outcome`,commit:`Commit (full hash)`,note:`Note`},link:{heading:`Links`,add:`Add link`,edit:`Edit link`,save:`Save link`,remove:`Remove link`,empty:`No links`,stateUnknown:`State unknown`,remote:`{{kind}} · {{state}}`,remoteState:{open:`Open`,closed:`Closed`,merged:`Merged`,draft:`Draft`,active:`Active`,deleted:`Deleted`}},activity:{previous:`Previous activity`,next:`Next activity`},relations:{heading:`Relationships`,add:`Add relationship`,linkExisting:`Link existing ticket`,newChild:`New child ticket`,newChildTitle:`New child of {{key}}`,children:`Child tickets <count>{{done, number}}/{{total, number}}</count>`,previousChildren:`Previous children`,nextChildren:`Next children`,empty:`No relationships`,type:`Relationship`,ticket:`Ticket`,statusOf:`Status of {{key}}`,assigneeOf:`Assignee of {{key}}`,remove:{blocks:`Remove blocks relationship`,related:`Remove related relationship`,duplicate:`Remove duplicate relationship`,causes:`Remove causes relationship`,clones:`Remove clones relationship`,implements:`Remove implements relationship`,reviews:`Remove reviews relationship`}},discussion:{empty:`No comments yet`,previous:`Previous comments`,next:`Next comments`,comment:`Comment`,placeholder:`Write a comment…`,posting:`Posting…`,edited:`Edited`,edit:`Edit comment`,delete:`Delete comment`,deleteConfirm:`Permanently delete this comment?`},markdown:{format:{heading:`Heading`,bold:`Bold`,italic:`Italic`,link:`Link`,linkHelp:`Link the selected text`,bullets:`Bulleted list`,numbers:`Numbered list`,tasks:`Checklist`,code:`Code block`},formatting:`{{label}} formatting`,editor:`{{label}} editor`,insertFile:`Insert file`,insertFileInto:`Insert file into {{label}}`,write:`Write`,visual:`Visual`,preview:`Preview`,unsupported:`This text uses Markdown the visual editor can't keep, such as HTML or footnotes.`,nothingToPreview:`Nothing to preview`,mention:`Mention a member`,insertBlock:`Insert block`,block:{quote:`Quote`,table:`Table`,diagram:`Diagram`,divider:`Divider`,file:`File`},table:{addRow:`Add row`,addColumn:`Add column`,deleteRow:`Delete row`,deleteColumn:`Delete column`,deleteTable:`Delete table`},linkAddress:`Link address`,diagram:`Diagram`,diagramFailed:`This diagram could not be drawn: {{error}}`,diagramSource:`Diagram source`}},settings:{account:{title:`Settings`,security:`Sign-in & security`,localPassword:`Local password`,localPasswordDescription:`Changing your password signs out your other sessions.`,changePassword:`Change password`,oidcLinked:`Use this identity provider to sign in to the same account.`,oidcUnlinked:`Link your account before signing in through this provider.`,linked:`Linked`,link:`Link {{name}}`,currentPassword:`Current password`,newPassword:`New password`,confirmPassword:`Confirm new password`,passwordMismatch:`The new passwords do not match.`,passwordUpdated:`Password updated. Other sessions signed out.`},preferences:{behavior:`Behavior`,languageDescription:`Applies in this browser, including the sign-in page.`,weekStart:`Week starts on`,weekStartDescription:`Applies to every date picker.`,weekStartLanguage:`Language default`,sidebar:`Sidebar on launch`,sidebarDescription:`Takes effect the next time Kanvil opens.`,sidebarLast:`As last left`,sidebarExpanded:`Expanded`,sidebarCollapsed:`Collapsed`,ticketLists:`Ticket lists`,reset:`Reset preferences`,resetDescription:`Restores these choices to their defaults in this browser.`,resetDone:`Preferences reset`},notifications:{title:`Notifications`,inbox:`Inbox`,inboxDescription:`Updates to tickets you follow appear in Kanvil.`,inboxSwitch:`Subscribed ticket updates in Inbox`,push:`Push notifications`,pushDescription:`Send updates to devices you’ve registered.`,pushUnavailable:`Push delivery is not enabled on this instance.`,pushSwitch:`Push notifications on registered devices`,categories:`Categories`,categorySwitch:`{{label}} notifications`,reminder:`Due soon reminder`,reminderDescription:`How long before a followed ticket’s due date.`,reminderUnit:`Reminder unit`,reminderAmount:`Reminder amount`,unit:{minutes:`Minutes`,hours:`Hours`,days:`Days`,weeks:`Weeks`}},layout:{nav:`Settings`,section:`Settings section`,nested:`{{parent}} · {{child}}`,name:`Name`,description:`Description`,descriptionPlaceholder:`Add a description`,noDescription:`No description`,stale:`This changed elsewhere. Cancel and start again.`},profile:{title:`Profile`,displayName:`Display name`,edit:`Edit profile`,changePhoto:`Change photo`,removePhoto:`Remove photo`,photoFile:`Profile photo file`,photoUpdated:`Photo updated`,photoRemoved:`Photo removed`,saved:`Profile saved`},credentials:{global:`Global`,globalDescription:`Access every project and workspace your account can access, including future access.`,title:`API keys`,description:`Connect scripts, integrations, and agents with access you can revoke.`,create:`Create API key`,creating:`Creating…`,created:`API key created`,name:`Name`,access:`Access`,projects:`Projects`,expires:`Expires`,actions:`Actions`,unavailableProject:`Unavailable project`,untitled:`Untitled key`,expired:`Expired`,disabled:`Disabled`,custom:`Custom`,noProjects:`No project access`,never:`Never`,revoke:`Revoke API key`,revokeNamed:`Revoke {{name}}? Connections using it will immediately lose access.`,revokeUnnamed:`Revoke this API key? Connections using it will immediately lose access.`,empty:`No API keys`,emptyDescription:`Create a key when a script, integration, or agent needs access to your projects.`,copyNow:`Copy this key now. You won’t be able to see it again.`,newKey:`New API key`,copy:`Copy API key`,noProjectTitle:`Choose a project first`,noProjectDescription:`API keys need access to at least one project.`,goToProjects:`Go to projects`,keyName:`Key name`,keyNamePlaceholder:`e.g. Release automation`,projectAccess:`Project access`,findProject:`Find project`,projectDescription:`{{key}} · {{workspace}}`,workspace:`Workspace`,noMatches:`No matching projects`,roleLimit:`Your existing project role still limits what this key can do.`,accessLevel:`Access level`,preset:{read:`Read only`,write:`Read and write`,automation:`Read, write, and claim work`,custom:`Custom permissions`},permission:{read:{name:`Read tickets`,description:`View projects, tickets, comments, and attachments.`},write:{name:`Edit tickets`,description:`Create and update tickets, comments, and attachments.`},claim:{name:`Claim work`,description:`Claim, renew, and release ticket ownership.`},admin:{name:`Manage projects and workspaces`,description:`Change project and workspace settings and membership where your role allows it.`}},expiry:{7:`7 days`,30:`30 days`,90:`90 days`,365:`1 year`,custom:`Custom date`,never:`No expiry`},expiresOn:`Expires on`,neverDescription:`The key works until you delete it.`},calendarFeeds:{title:`Calendar feeds`,new:`New calendar feed`,created:`Calendar feed created`,create:`Create feed`,adminOnly:`Project administrators share and revoke calendar feeds.`,labels:`Labels`,everyLabel:`Every label`,stopped:`· Stopped: its creator no longer has access`,revoke:`Revoke {{name}}`,revokeDescription:`Calendars subscribed to {{name}} stop updating at once. Tickets stay unchanged.`,revoked:`Calendar feed revoked`,empty:`No calendar feeds`,copyNow:`Copy this link into a calendar app now. It is shown only once, and anyone with it can read the shared tickets.`,link:`Feed link`,name:`Feed name`,onlyLabels:`Only tickets with these labels`,explanation:`The feed lists open, unarchived tickets with a start or due date as all-day events in {{zone}}. Anyone with its link sees their keys, titles, statuses, priorities, and dates.`},project:{title:`Project settings`,edit:`Edit project`,copyPrefix:`Copy ticket prefix`,saved:`Project saved`,noOpenTickets:`No open tickets`,openTickets_one:`{{count, number}} open ticket`,openTickets_other:`{{count, number}} open tickets`,overdueTickets_one:`· {{count, number}} overdue`,overdueTickets_other:`· {{count, number}} overdue`,created:`· Created <time/>`,access:`Project access`,accessWorkspace:`Workspace members inherit access from their workspace role.`,accessPrivate:`Only members you add and workspace administrators can see this project.`,accessUpdated:`Project access updated`,visibility:{workspace:`Everyone in the workspace`,private:`Only project members`},workspace:`Workspace`,workspaceSettings:`Workspace settings`,prefix:`Ticket prefix`,prefixDescription:`Earlier prefixes and ticket keys keep working after a change.`,changePrefix:`Change prefix`,changePrefixTitle:`Change ticket prefix`,changePrefixDescription:`Every ticket in {{name}} takes the new prefix and keeps its number.`,changing:`Changing…`,prefixChanged:`Tickets now use {{key}}`,publicLink:`Public link`,publicDisclosure:`Anyone with the link can read every unarchived ticket's title, description, acceptance criteria, status, priority, kind, difficulty, labels, scopes, dates, and links to other tickets in this project. People, comments, activity, attachments, evidence, and claims stay private.`,publicOn:`Public link on`,publicOff:`Public link off`,off:`Off`,copyPublicLink:`Copy public link`,openPublic:`Open public view`,stopSharing:`Stop sharing`,share:`Share publicly`,background:`Background`,backgroundDescription:`Shown behind this project's ticket list and board.`,backgroundUpdated:`Background updated`,backgroundRemoved:`Background removed`,currentBackground:`Current background`,uploading:`Uploading…`,replace:`Replace`,upload:`Upload image`,backgroundFile:`Project background file`},tickets_one:`{{count, number}} ticket`,tickets_other:`{{count, number}} tickets`,moveUp:`Move {{name}} up`,moveDown:`Move {{name}} down`,workflow:{title:`Workflow`,new:`New state`,edit:`Edit state`,editNamed:`Edit state {{name}}`,deleteNamed:`Delete state {{name}}`,onlyState:`{{name}} is the only {{category}} state`,saved:`State saved`,name:`State name`,category:`Category`,color:`State color`,categoryChange:`Its tickets change status to {{status}}.`,save:`Save state`,delete:`Delete state`,deleteTitle:`Delete {{name}}`,deleted:`State deleted`,reassign_one:`Move {{count, number}} ticket to`,reassign_other:`Move {{count, number}} tickets to`},labels:{title:`Labels`,search:`Search labels`,new:`New label`,edit:`Edit label`,workspace:`Workspace`,editNamed:`Edit label {{name}}`,deleteNamed:`Delete label {{name}}`,deleteUsed_one:`Remove {{name}} from {{count, number}} ticket, including archived tickets? Saved views using this label will have their label filter removed.`,deleteUsed_other:`Remove {{name}} from {{count, number}} tickets, including archived tickets? Saved views using this label will have their label filter removed.`,deleteUsedShared_one:`Remove {{name}} from {{count, number}} ticket in every project, including archived tickets? Saved views using this label will have their label filter removed.`,deleteUsedShared_other:`Remove {{name}} from {{count, number}} tickets in every project, including archived tickets? Saved views using this label will have their label filter removed.`,deleteUnused:`Delete the unused label {{name}}? Saved views using it will have their label filter removed.`,deleted:`Label deleted`,noMatches:`No matching labels`,empty:`No labels yet`,saved:`Label saved`,name:`Label name`,color:`Label color`,rename:`Renaming updates this label on tickets and in saved views.`,renameShared:`Renaming updates this label on tickets and in saved views in every project.`,adopt:`Adopt the project labels`,adoptDescription:`Defined in {{projects}}. Their tickets keep the label and take this color.`,save:`Save label`},fields:{title:`Fields`,new:`New field`,edit:`Edit field`,editNamed:`Edit field {{name}}`,deleteNamed:`Delete field {{name}}`,deleteUsed_one:`Delete {{name}} and remove its values from {{count, number}} ticket, including archived tickets? Saved views lose their filters on it.`,deleteUsed_other:`Delete {{name}} and remove its values from {{count, number}} tickets, including archived tickets? Saved views lose their filters on it.`,deleteUnused:`Delete the unused field {{name}}? Saved views lose their filters on it.`,deleted:`Field deleted`,empty:`No fields yet`,saved:`Field saved`,required:`Required`,requiredDescription:`New tickets need a value.`,defaultValue:`Default {{value}}`,default:`Default`,name:`Field name`,type:`Type`,options:`Options`,option:`Option {{number}}`,optionInline:`option {{number}}`,optionColor:`{{name}} color`,removeOption:`Remove {{name}}`,addOption:`Add option`,reassign:`Tickets with {{name}}`,clearValue:`Clear the value`,moveTo:`Move to {{name}}`,save:`Save field`},lifecycle:{archivedToast:`Project archived`,restoredToast:`Project restored`,archivedNotice:`Archived <time/> · read only`,restore:`Restore`,archive:`Archive`,archivedDescription:`Archived <time/>. Its tickets are read only and stay out of lists, search, My work, calendar feeds, and agent queues.`,archiveDescription:`Hides the project from lists, search, My work, calendar feeds, and agent queues and makes its tickets read only. History is kept.`,archiveProject:`Archive project`,archiveConfirm:`{{name}} leaves project lists and agent queues until it is restored. Claimed tickets must be released first.`,blocker:`{{message}}: {{tickets}}`,row:{tickets:`Tickets`,losesAccess:`Loses access`,gainsAccess:`Gains access`,labelsCopied:`Labels copied`,labelsMerged:`Labels merged`,followsRemoved:`Follows removed`,invitations:`Invitations`,comments:`Comments`,files:`Files`,kept:`Kept`,projects:`Projects`,members:`Members`,sharedLabels:`Shared labels`,signIn:`Sign-in`,sessions:`Sessions`,credentials:`Credentials`,devices:`Devices`,access:`Access`,claims:`Claims`,imports:`Imports`,profile:`Profile`},transferTickets_one:`{{count, number}}, keeping their keys and links`,transferTickets_other:`{{count, number}}, keeping their keys and links`,noOne:`No one`,transferInvitations_one:`{{count, number}} pending invitation drops the project`,transferInvitations_other:`{{count, number}} pending invitations drop the project`,files_one:`{{count, number}} · {{size}}`,files_other:`{{count, number}} · {{size}}`,keptProject_one:`{{count, number}} activity entry and the {{key}} prefix`,keptProject_other:`{{count, number}} activity entries and the {{key}} prefix`,keptWorkspace_one:`{{count, number}} activity entry and the {{slug}} URL key`,keptWorkspace_other:`{{count, number}} activity entries and the {{slug}} URL key`,archivedProject:`archived`,membersLoseAccess_one:`{{count, number}} loses access; their account stays`,membersLoseAccess_other:`{{count, number}} lose access; their accounts stay`,pendingInvitations_one:`{{count, number}} pending`,pendingInvitations_other:`{{count, number}} pending`,move:`Move`,moveTitle:`Move {{name}}`,moved:`Moved to {{name}}`,movedUnnamed:`Moved to the workspace`,destination:`Destination workspace`,moveProject:`Move project`,moving:`Moving…`,export:`Export`,exportDescription:`Tickets with their workflow, fields, labels, relationships, comments, evidence, and links as versioned JSON. Attachments and activity history stay here.`,exporting:`Exporting…`,exportJson:`Export JSON`,delete:`Delete`,deleteTitle:`Delete {{name}}`,deleted:`{{name}} deleted`,typeToConfirm:`Type {{value}} to confirm`,deleting:`Deleting…`,deleteProject:`Delete project`,deleteProjectDescription:`Permanently removes tickets, comments, and files. Activity history stays, and {{key}} is never reused.`,signInAgain:`Sign in again`,deleteWorkspace:`Delete workspace`,deleteWorkspaceDescription:`Permanently deletes every project in the workspace with its tickets, comments, and files, and removes its members. Accounts and activity history stay.`,noSignInMethods:`No linked sign-in methods`,sessions_one:`{{count, number}} session signed out`,sessions_other:`{{count, number}} sessions signed out`,credentials_one:`{{count, number}} API key or app connection revoked`,credentials_other:`{{count, number}} API key or app connections revoked`,devices_one:`{{count, number}} device or notification channel removed`,devices_other:`{{count, number}} device or notification channels removed`,workspaceCount_one:`{{count, number}} workspace`,workspaceCount_other:`{{count, number}} workspaces`,directProjectCount_one:`{{count, number}} direct project`,directProjectCount_other:`{{count, number}} direct projects`,accessWorkspaces:`{{workspaces}} removed`,accessBoth:`{{workspaces}} and {{projects}} removed`,claims_one:`{{count, number}} claim released`,claims_other:`{{count, number}} claims released`,imports_one:`{{count, number}} import cancelled`,imports_other:`{{count, number}} imports cancelled`,profileErased:`Name, email, and photo erased`,commentCount_one:`{{count, number}} comment`,commentCount_other:`{{count, number}} comments`,activityCount_one:`{{count, number}} activity entry`,activityCount_other:`{{count, number}} activity entries`,keptAccount:`{{tickets}}, {{comments}}, and {{events}} shown as {{name}}`,deleteAccount:`Delete account`,deleteOwnAccount:`Permanently removes your sign-in, sessions, keys, devices, memberships, and personal details. Tickets, comments, and activity stay and show as {{name}}.`,deleteOtherAccount:`Permanently removes this account's sign-in, sessions, keys, devices, memberships, and personal details. Tickets, comments, and activity stay and show as {{name}}.`},icon:{change:`Change icon`,title:`Project icon`,library:`Icon library`,upload:`Upload image`,search:`Search icons`,searchPlaceholder:`Search icons…`,color:`Icon color`,choose:`Choose {{name}}`,noMatches:`No matching icons`,showMore:`Show more icons`,uploading:`Uploading…`,chooseImage:`Choose image`,formats:`PNG, JPEG, or WebP · up to 10 MB`,file:`Project icon file`,reset:`Reset icon`},createProject:{title:`New project`,inWorkspace:`In {{name}}`,everyoneLabel:`Everyone in this workspace`,name:`Project name`,namePlaceholder:`Mobile app`,create:`Create project`},workspace:{title:`Workspace settings`,owner:`Owner`,noOwner:`No owner. An instance administrator can assign one.`,transfer:`Transfer ownership`,transferring:`Transferring…`,transferred:`{{name}} now owns {{workspace}}`,newOwner:`New owner`,noEligible:`Ownership goes to an active workspace administrator. Make another member an administrator first.`,chosenCan:`{{name}} can then transfer or delete the workspace.`,newOwnerCan:`The new owner can transfer or delete the workspace.`,ownerStays:`{{name}} stays an administrator.`,unavailable:`Workspace unavailable`,backToProjects:`Back to projects`,name:`Workspace name`,edit:`Edit workspace`,copyKey:`Copy workspace key`,saved:`Workspace saved`,projects:`Projects`,projectCount_one:`{{count, number}} project you can access in this workspace.`,projectCount_other:`{{count, number}} projects you can access in this workspace.`,viewProjects:`View projects`,members:`Members`,membersDescription:`Workspace roles apply to projects that use workspace access.`,manageMembers:`Manage members`},members:{title:`Members`,customRole:`Custom role`,search:`Search members`,searchPlaceholder:`Name or email…`,add:`Add member`,added:`Member added`,workspaceAccess:`Workspace access`,owner:`Owner`,roleFor:`Role for {{name}}`,useWorkspaceAccess:`Use workspace access`,remove:`Remove member`,removeFromWorkspace:`Remove {{name}} from this workspace and all of its projects?`,restoreAccess:`Restore {{role}} workspace access for {{name}}?`,removeFromProject:`Remove {{name}}'s project access?`,noMatches:`No matching members`,empty:`No members`,projectRole:`Project role`,workspaceRole:`Workspace role`},invitations:{title:`Invitations`,invite:`Invite by email`,removedProjects:`Removed projects`,wholeWorkspace:`Whole workspace`,selectedProjects:`Selected projects`,expired:`Expired`,expires:`Expires <time/>`,resend:`Resend invitation to {{email}}`,revoke:`Revoke invitation`,revokeDescription:`The link sent to {{email}} will stop working.`,revoked:`Invitation revoked`,empty:`No pending invitations`,email:`Email`,role:`Role`,access:`Access`,projects:`Projects`,noProjects:`This workspace has no projects.`,linkExpires:`Link expires`,inDays_one:`In {{count, number}} day`,inDays_other:`In {{count, number}} days`,submit:`Invite`,link:`Invitation link`,copyLink:`Copy invitation link`,emailed:`Emailed to {{email}}. The link works once, for that address.`,notEmailed:`Email is not configured on this instance. Send this link to {{email}}; it works once, for that address.`,notEmailedUnknown:`Email is not configured on this instance. Send this link to the recipient; it works once, for that address.`},workspaces:{title:`Workspaces`,search:`Search workspaces`,searchPlaceholder:`Name or URL key…`,noMatches:`No matching workspaces`,empty:`No workspaces`,workspace:`Workspace`,administrators:`Administrators`,members:`Members`,projects:`Projects`,created:`Created`,actions:`Actions`,noAdministrator:`No administrator`,manage:`Manage {{name}}`,pagerNoun:`workspaces`,private:`Private`,noProjects:`No projects`},roles:{title:`Roles`,new:`New role`,edit:`Edit role`,builtIn:`Built in`,readOnly:`No actions beyond reading`,memberships_one:`{{count, number}} membership`,memberships_other:`{{count, number}} memberships`,editNamed:`Edit role {{name}}`,deleteNamed:`Delete role {{name}}`,deleteUnused:`Delete the unused role {{name}}?`,deleted:`Role deleted`,empty:`No roles`,saved:`Role saved`,name:`Role name`,actions:`Actions`,everyoneReads:`Every member can read the projects they reach.`,changesApply_one:`Changes apply at once to the {{count, number}} membership holding this role.`,changesApply_other:`Changes apply at once to the {{count, number}} memberships holding this role.`,save:`Save role`,delete:`Delete role`,reassignDescription_one:`{{count, number}} membership holds {{name}}. Choose the role they move to.`,reassignDescription_other:`{{count, number}} memberships hold {{name}}. Choose the role they move to.`,moveTo:`Move members to`},theme:{mode:{light:`Light`,dark:`Dark`,system:`System`},aligned:`Aligned`,hexColor:`Use a six-digit hex color`,contrast:{light:`Increase the light theme's text contrast to at least 4.5:1.`,dark:`Increase the dark theme's text contrast to at least 4.5:1.`},fileTooLarge:`Theme files must be smaller than 100 KB.`,tooMany:`Keep at most 50 custom themes.`},appearance:{colorScheme:`Color scheme`,theme:`Theme`,themes:`Themes`,colorTheme:`Color theme`,search:`Search themes`,searchPlaceholder:`Search themes…`,create:`Create theme`,add:`Add theme`,importFile:`Import theme file`,useMode:{light:`Use {{name}} light mode`,dark:`Use {{name}} dark mode`},modeOnly:{light:`Use for light mode only`,dark:`Use for dark mode only`},copyName:`{{name}} copy`,duplicate:`Duplicate {{name}}`,edit:`Edit {{name}}`,export:`Export {{name}}`,delete:`Delete {{name}}`,deleteDescription:`Remove {{name}} from this browser? Light or dark appearances using it will fall back to your base theme.`,noMatches:`No matching themes`,customTheme:`Custom theme`,name:`Theme name`,paletteColor:`{{mode}} {{color, lowercase}}`,color:{background:`Background`,foreground:`Text`,sidebar:`Sidebar`,primary:`Accent`,primaryForeground:`Accent text`},save:`Save theme`},color:{swatch:`{{color}} {{label, lowercase}}`,removeCustom:`Remove {{hex}} from custom colors`,custom:`Custom color`,default:`default`,red:`red`,orange:`orange`,amber:`amber`,yellow:`yellow`,lime:`lime`,green:`green`,emerald:`emerald`,teal:`teal`,cyan:`cyan`,sky:`sky`,blue:`blue`,indigo:`indigo`,violet:`violet`,purple:`purple`,fuchsia:`fuchsia`,pink:`pink`,rose:`rose`,gray:`gray`}},admin:{instance:{title:`Administration`,heading:`Instance`,edit:`Edit instance`,name:`Name`,description:`Description`,noDescription:`No description`,version:`Application version`,publicUrl:`Public URL`,provider:{local:`Local PostgreSQL storage`,s3:`S3-compatible object storage`,postgres:`Built-in PostgreSQL`,elasticsearch:`Elasticsearch-compatible search`},section:{storage:`File storage`,search:`Ticket search`,events:`Event delivery`},viewConfiguration:`View configuration`,configure:{storage:`Configure storage`,search:`Configure search`,events:`Configure event delivery`},providerTitle:`Provider`,deploymentManaged:`Deployment managed`,instanceManaged:`Instance managed`,transfers:`Transfers`,indexStatus:`Index status`,connection:`Connection`,transfersS3:`Files move to object storage after they are saved locally.`,transfersLocal:`New files are stored in PostgreSQL.`,searchBuiltIn:`Search runs directly in PostgreSQL.`,searchIndexed:`Ticket changes are indexed in the background.`,eventsConnection:`Notifications wake consumers; PostgreSQL keeps the replay history.`,builtIn:`Built in`,connected:`Connected`,upToDate:`Up to date`,status:{ready:`ready`,transferring:`transferring`,indexing:`indexing`,connecting:`connecting`,unavailable:`unavailable`},pendingTransfers:`Pending transfers`,pendingRemain:`These files remain available from PostgreSQL until transfer completes.`,noPending:`No files are waiting to transfer.`,bucket:`Bucket`,storageEndpoint:`Storage endpoint`,backup:`Backup`,backupBuckets:`Back up PostgreSQL and every referenced object-storage bucket.`,backupDatabase:`File bytes are included in your PostgreSQL backup.`,fallback:`Fallback`,fallbackDescription:`PostgreSQL search is available while an external index is behind or offline.`,searchEndpoint:`Search endpoint`,index:`Index`,delivery:`Delivery`,deliveryDescription:`Durable events and replay stay in PostgreSQL. An optional broker distributes wakeups.`,brokerEndpoint:`Broker endpoint`,exchange:`Exchange`},configure:{storageTitle:`Configure file storage`,searchTitle:`Configure ticket search`,eventsTitle:`Configure event delivery`,saved:`Instance settings saved`,instanceName:`Instance name`,instanceDescription:`Instance description`,publicUrlSource:`The public URL is set by KANVIL_URL in your deployment.`,storageIntro:`Attachments and profile photos use this provider. Existing files keep their original storage location.`,storageProvider:`Storage provider`,localDescription:`File bytes are stored in the local database and included in PostgreSQL backups.`,s3Endpoint:`S3 endpoint`,s3EndpointHint:`Leave the endpoint empty for Amazon S3.`,region:`Region`,prefix:`Object key prefix`,accessKeyId:`Access key ID`,secretAccessKey:`Secret access key`,savedSecret:`Saved. Leave empty to keep it.`,deploymentCredentials:`Deployment credentials when omitted`,pathStyle:`Use path-style bucket URLs`,storageVerified:`Storage connection verified`,testStorage:`Test storage connection`,filesWaiting_one:`{{count, number}} file waiting for transfer. Pending files remain readable from PostgreSQL.`,filesWaiting_other:`{{count, number}} files waiting for transfer. Pending files remain readable from PostgreSQL.`,transfersComplete:`All file transfers completed.`,storageDeployment:`Storage is configured by KANVIL_STORAGE_PROVIDER and S3_* deployment variables.`,locations:`Existing storage locations`,locationFiles_one:`{{count, number}} file`,locationFiles_other:`{{count, number}} files`,cleanUp:`Clean unused files`,cleanUpConfirm:`Remove unreferenced files and failed uploads older than one day? Files attached to tickets or profiles are retained.`,cleanUpNote:`Cleanup also runs automatically. S3 objects require a bucket backup alongside the database backup.`,searchProvider:`Search provider`,searchBuiltIn:`Built-in PostgreSQL search`,indexName:`Kanvil index name`,searchAuthentication:`Search authentication`,noAuthentication:`No authentication`,apiKey:`API key`,basic:`Username and password`,searchApiKey:`Search API key`,optional:`Optional`,searchUsername:`Search username`,searchPassword:`Search password`,searchVerified:`Search connection verified`,testSearch:`Test search connection`,rebuildQueued:`Search rebuild queued`,rebuild:`Rebuild index`,searchNote:`PostgreSQL remains authoritative for permissions and filters. Search falls back to PostgreSQL while an external index catches up or is unavailable.`,brokerProvider:`Event delivery provider`,brokerBuiltIn:`Built-in PostgreSQL notifications`,rabbitUrl:`RabbitMQ connection URL`,savedBrokerEndpoint:`Saved broker endpoint`,rabbitExchange:`RabbitMQ exchange`,brokerVerified:`RabbitMQ delivery verified`,testBroker:`Test broker connection`,brokerNote:`RabbitMQ fans out committed event wakeups to Kanvil instances and wakes background workers. PostgreSQL keeps the durable events and pending work, and delivers wakeups when the broker is unavailable.`,brokerDeployment:`Event delivery is configured by KANVIL_BROKER_PROVIDER and RABBITMQ_* deployment variables.`,save:`Save instance settings`},authentication:{title:`Authentication`,saved:`Authentication saved`,emailPassword:`Email and password sign-in`,emailPasswordDescription:`Includes emailed sign-in codes and password reset.`,ssoProvision:`Automatically create users from SSO`,ssoProvisionDescription:`New SSO users have no workspace or project access until invited.`,registration:`Public email registration`,registrationClosed:`Closed`,identityProvider:`Identity provider`,notConfigured:`Not configured`,linkedProviders:`Linked-account providers`,linkedProvidersDescription:`Sign in only accounts that linked them; they never create accounts.`,save:`Save authentication`,discoveryUrl:`OIDC discovery URL`,clientId:`OIDC client ID`,oidcSetup:`Configure OIDC_DISCOVERY_URL, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, and OIDC_NAME, or a GITHUB_, GOOGLE_, or DISCORD_ CLIENT_ID and CLIENT_SECRET pair, in your deployment, then restart Kanvil. Provider secrets are never returned to the browser.`,consumers:`Consumer interfaces`,mcpEndpoint:`MCP endpoint`,eventFeed:`Realtime event feed`,openApi:`Open API specification`},users:{title:`Users`,search:`Search users`,searchPlaceholder:`Name or email…`,new:`New user`,roleFilter:`Instance role filter`,allRoles:`All roles`,administrators:`Administrators`,users:`Users`,statusFilter:`Account status filter`,allAccounts:`All accounts`,active:`Active`,disabled:`Disabled`,noMatches:`No matching users`,empty:`No users`,user:`User`,role:`Role`,status:`Status`,joined:`Joined`,actions:`Actions`,administrator:`Administrator`,manage:`Manage {{name}}`,pagerNoun:`users`,create:`Create account`,creating:`Creating…`,created:`Created {{email}}`,name:`Name`,email:`Email`,initialPassword:`Initial password`,instanceRole:`Instance role`},account:{details:`Account details`,joined:`Joined {{date}}`,edit:`Edit account`,instanceRole:`Instance role`,adminDescription:`Can administer every workspace, account, and deployment setting.`,userDescription:`Workspace and project roles determine access.`,changeRole:`Change role`,changeRoleTitle:`Change instance role`,signInMethods:`Sign-in methods`,setPassword:`Set local password`,activeSessions:`Active sessions`,sessions_one:`{{count, number}} session`,sessions_other:`{{count, number}} sessions`,revokeSessions:`Revoke sessions`,revokeConfirm:`Sign {{name}} out of every device? API keys stay active.`,sessionsRevoked:`Sessions revoked`,access:`Account access`,accessDisabled:`Sign-in and API access are disabled.`,accessPreserved:`Disabling an account preserves tickets and activity history.`,enable:`Enable account`,disable:`Disable account`,enableConfirm:`Restore sign-in for {{name}}?`,disableConfirm:`Disable {{name}}'s sign-in and API access, and revoke their sessions?`,enabled:`Account enabled`,disabledToast:`Account disabled`,updateFailed:`The account could not be updated`,workspaces:`Workspaces`,addToWorkspace:`Add to workspace`,noWorkspaces:`No workspace membership`,projectAccess:`Direct project access`,updated:`Account updated`,roleUpdated:`Instance role updated`,workspaceAdded:`Workspace access added`,passwordMismatch:`The new passwords do not match.`,passwordSet:`Local password set and sessions revoked`,name:`Name`,email:`Email`,user:`User`,administrator:`Administrator`,adminsNote:`Administrators can manage all workspaces, users, and instance settings.`,workspace:`Workspace`,workspaceRole:`Workspace role`,newPassword:`New password`,confirmPassword:`Confirm new password`,passwordNote:`This sets a local password and signs the user out of every device.`,save:`Save changes`},delivery:{field:{address:`Email address`,server:`Server`,topic:`Topic`,accessToken:`Access token`,applicationToken:`Application token`,endpointUrl:`Endpoint URL`,signingSecret:`Signing secret`,incomingWebhookUrl:`Incoming webhook URL`,webhookUrl:`Webhook URL`,channel:`Channel`,botToken:`Bot token`,chatId:`Chat ID`,chatIdPlaceholder:`-1001234567890 or @channel`,topicId:`Topic ID`,optional:`{{label}} (optional)`,removeSaved:`Remove saved {{label, lowercase}}`,savedSecret:`Saved · leave blank to keep`},failure:{blockedAddress:`This address is not allowed`,redirectBlocked:`The endpoint redirected`,dnsError:`Host not found`,networkError:`Could not connect`,timeout:`Timed out`,invalidEndpoint:`Invalid endpoint`,emailUnavailable:`Email is not configured on this server`,smtpError:`Mail server unavailable`,accessRevoked:`The administrator who connected it lost access; reconnect`,repositoryMismatch:`A delivery came from another repository`,http:`Rejected with HTTP {{status}}`,smtp:`Mail server replied {{code}}`},health:{delivery:{done:`Delivered <time/>`,pending:`Sending…`,none:`Nothing sent yet`,failed:`{{reason}}`},access:{done:`Access checked <time/>`,pending:`Checking access…`,none:`Access not checked`,failed:`Access check: {{reason}}`},retrying:`retrying`},paused:`Paused`,failing:`Failing`,sendTest:`Send test to {{name}}`,testQueued:`Test queued`,resume:`Resume {{name}}`,pause:`Pause {{name}}`,edit:`Edit {{name}}`,disconnect:`Disconnect {{name}}`,disconnected:`{{name}} disconnected`,name:`Name`,type:`Type`,channels:`Channels`,addChannel:`Add channel`,noChannels:`No channels`,editChannel:`Edit channel`,channelSaved:`Channel saved`,channelRemoval:`Disconnect {{name}}? Its settings and queued notifications are discarded.`,sendFrom:`Send notifications from`,routeOff:`Nothing`,routeAll:`All projects`,routeSelected:`Selected projects`,saveChannel:`Save channel`,adminsOnly:`Project administrators manage integrations`,destinations:`Destinations`,addDestination:`Add destination`,noDestinations:`No destinations`,editDestination:`Edit destination`,destinationSaved:`Destination saved`,destinationRemoval:`Disconnect {{name}}? Its settings and queued messages are discarded.`,send:`Send`,saveDestination:`Save destination`},repository:{setup:{github:`The token needs repository read access, and issue and pull request write access to comment or sync issues. Add a GitHub webhook with the URL copied from this repository's row, content type application/json, this secret, and the Branch or tag creation, Branch or tag deletion, Issues, Issue comments, and Pull requests events.`,gitea:`The token needs the read:repository scope, and write:issue to comment or sync issues. Add a Gitea webhook with the URL copied from this repository's row, content type application/json, this secret, and the Create, Delete, Issues, Issue Label, Issue Comment, and Pull Request events.`,gitlab:`The token needs the read_api scope, and api to comment or sync issues. Add a GitLab webhook with the URL copied from this repository's row, this secret token, and the Push, Issues, Comments, and Merge request events.`},noWebhook:`No webhook received`,webhookReceived:`Webhook received <time/>`,saved:`Repository saved`,title:`Repositories`,connect:`Connect repository`,empty:`No repositories`,checkAccess:`Check access to {{repository}}`,accessQueued:`Access check queued`,copyWebhook:`Copy webhook URL for {{repository}}`,issueSync:`Issue sync for {{repository}}`,removal:`Disconnect {{repository}}? Its webhook stops working at once. Links it added stay on their tickets.`,edit:`Edit repository`,host:`Host`,serverUrl:`Server URL`,serverUrlOptional:`Server URL (optional)`,repository:`{{host}} repository`,nestedPlaceholder:`group/project`,placeholder:`owner/repository`,accessToken:`Access token`,webhookSecret:`Webhook secret`,savedSecret:`Saved · leave blank to keep`,commentOnLink:{pull_request:`Comment on newly linked issues and pull requests`,merge_request:`Comment on newly linked issues and merge requests`},moveTickets:`Move linked tickets`,noMove:`No move`,save:`Save repository`},issueSync:{reason:{labels:`Its sync labels changed`,conflict:`Changed on both sides`,changedWhilePaused:`The issue changed while the repository was paused`,unverified:`The host's answer did not confirm the change`,claimConflict:`The ticket is claimed`,invalidContent:`The issue is longer than a ticket allows`},issuesSyncing_one:`{{count, number}} issue syncing`,issuesSyncing_other:`{{count, number}} issues syncing`,linksStopped_one:`{{count, number}} link stopped`,linksStopped_other:`{{count, number}} links stopped`,match:`Match`,matchAny:`Any of these labels`,matchAll:`All of these labels`,preview:{matching:`Keep syncing`,export:`New issues to create`,pause:`Links to pause`,review:`Links to review`},applied:`Issue sync applied`,title:`Issue sync · {{repository}}`,outbound:`Kanvil to {{host}}`,exportTickets:`Export tickets as issues`,exportDescription:`Open tickets get a new issue; title, description, state, and new comments stay in step.`,ticketLabels:`Only tickets with these labels`,everyTicket:`Every open ticket`,inbound:`{{host}} to Kanvil`,importIssues:`Import issues as tickets`,importDescription:`Open issues import when {{host}} next reports them.`,issueLabels:`Only issues with these labels`,everyIssue:`Every open issue`,previewLabel:`Preview`,previewAction:`Preview`,stopped:`Stopped links · {{repository}}`,review:`Review`,linkRemoved:`Link removed`,resumed:`Sync resumed`,open:`Open`,closed:`Closed`,reviewTitle:`Review {{key}}`,mayExist:`{{host}} may already have this issue; check before creating it again.`,comparison:`Comparison`,field:{title:`title`,description:`description`,state:`state`},notReported:`Not reported`,unlink:`Unlink`,keepHost:`Keep {{host}}`,keepKanvil:`Keep Kanvil`,createAgain:`Create issue again`,unlinkTicket:`Unlink {{key}}`,unlinkConfirm:`Stop syncing {{key}}? The ticket and the issue both stay.`},import:{count:{tickets:`Tickets`,workflow:`Workflow states`,fields:`Custom fields`,labels:`Labels`,relations:`Relationships`,comments:`Comments`,evidence:`Evidence`,links:`Links`},notExport:`This file is not a Kanvil ticket export.`,progress_one:`{{status}} · {{done, number}} of {{count, number}} record`,progress_other:`{{status}} · {{done, number}} of {{count, number}} records`,progressFailed_one:`{{status}} · {{done, number}} of {{count, number}} record · {{failed, number}} failed`,progressFailed_other:`{{status}} · {{done, number}} of {{count, number}} records · {{failed, number}} failed`,title:`Import`,description:`Creates a project from a Kanvil ticket export or another tracker: Linear, Jira, Trello, Plane, PLANKA, or Kaneo.`,action:`Import project`,detailsOf:`Details of {{name}}`,details:`Details`,exportFile:`Kanvil export file`,source:`Source`,file:`Export file`,jiraEdition:`Jira edition`,siteUrl:`Site URL`,accountEmail:`Account email`,apiKey:`API key`,apiToken:`API token`,personalToken:`Personal access token`,token:`Token`,apiUrl:`API URL`,workspaceSlug:`Workspace slug`,signInWith:`Sign in with`,username:`Username or email`,password:`Password`,checkConnection:`Check the connection details`,noProjects:`These credentials cannot read any {{label, lowercase}}.`,includeComments:`Include comments`,projectName:`Project name`,start:`Import`,connect:`Connect`,preview:`Preview`,starting:`Starting…`,connecting:`Connecting…`,checking:`Checking…`,matched:`Matched people`,unmatched:`Unmatched people`,previewLabel:`Import preview`,errorPrefix:`Error: `,notePrefix:`Note: `,progressLabel:`Import progress`,notImported:`Records not imported`,stop:`Stop import`,openProject:`Open project`}},native:{labelValue:`{{label}}: {{value}}`,ui:{dismiss:`Dismiss`,loading:`Loading`},server:{url:`Server URL`,connect:`Connect`,change:`Change server`,invalidOrigin:`Use your Kanvil server's HTTP or HTTPS origin, without a path or credentials.`,httpsRequired:`Use HTTPS to connect to your Kanvil server.`},login:{setupTitle:`Create your owner account`,signIn:`Sign in`,signingIn:`Signing in…`,createAccount:`Create account`,signInWith:`Sign in with {{provider}}`,name:`Name`,setupToken:`Setup token`,email:`Email`,password:`Password`},connection:{connecting:`connecting`,connected:`● Live`,offline:`Offline · cached data`,closed:`closed`,signedOut:`Sign in to reconnect`},screen:{projects:`Projects`,inbox:`Inbox`,settings:`Settings`,tickets:`Tickets`,ticket:`Ticket`,newTicket:`New ticket`,editTicket:`Edit ticket`},projects:{empty:`No projects yet`,new:`New project`,name:`Project name`,prefix:`Ticket prefix`,description:`Description`,create:`Create project`},tickets:{search:`Search tickets`,searchPlaceholder:`Title, description, or key`,allStatuses:`All statuses`,empty:`No matching tickets`,count:`{{shown}} of {{total}}`},ticket:{priority:`{{priority}} priority`,noDifficulty:`Unspecified difficulty`,version:`v{{version}}`,starts:`Starts {{date}}`,due:`Due {{date}}`},editor:{stale:`This ticket changed. Your saved draft still uses version {{version}}.`,discardDraft:`Discard draft and reload`,title:`Title`,noDifficulty:`Unspecified`,labels:`Labels (comma separated)`,scopes:`Scopes (comma separated)`,editMarkdown:`Edit Markdown`,previewMarkdown:`Preview Markdown`,description:`Description (Markdown)`,acceptanceCriteria:`Acceptance criteria (Markdown)`,parent:`Parent ticket ID`,automationReady:`Ready for agents when requirements and dependencies permit`,holdReason:`Hold reason`,draftSaved:`Draft saved on this device`,save:`Save ticket`},detail:{archived:`Archived`,subscribe:`Subscribe`,unsubscribe:`Unsubscribe`,share:`Share`,description:`Description`,noDescription:`_No description_`,acceptanceCriteria:`Acceptance criteria`,noAcceptanceCriteria:`_No acceptance criteria_`,fields:`Fields`,archive:{action:`Archive ticket`,title:`Archive ticket?`,message:`Remove this ticket from active lists and agent eligibility?`},unarchive:{action:`Unarchive ticket`,title:`Unarchive ticket?`,message:`Restore this ticket to active lists?`}},readiness:{title:`Agent readiness`,ready:`Ready to claim`,notReady:`Not ready to claim`,hold:`Hold: {{reason}}`,claimed:`Claimed by {{worker}} until {{time}}.`,release:{action:`Release my claim`,title:`Release claim?`,message:`Stop your worker before releasing ownership.`,confirm:`Release`},recover:{action:`Recover expired claim`,explanation:`Only a project administrator can recover an expired claim. Confirm the worker has stopped first.`,reason:`Recovery reason`,confirm:`Worker stopped · recover`}},relations:{title:`Relationships`,parent:`Parent · {{key}} · {{title}}`,openParent:`Open parent ticket`,children:`Child tickets`,previousChildren:`Previous children`,nextChildren:`Next children`,remove:`Remove relationship`,removeTitle:`Remove relationship?`,add:`Add relationship`,find:`Find ticket`,type:`Relationship`,ticket:`Ticket`,choose:`Choose a ticket`},discussion:{title:`Discussion`,previous:`Previous comments`,next:`Next comments`,field:`Comment (Markdown)`,submit:`Comment`,you:`You`,edit:`Edit comment`,editField:`Comment`,delete:`Delete comment`,deleteTitle:`Delete comment?`,deleteMessage:`Permanently remove this comment?`,save:`Save comment`},attachments:{title:`Attachments`,item:`{{name}} · {{size}} kB`,remove:`Remove {{name}}`,removeTitle:`Remove attachment?`,working:`Working…`,add:`Add attachment`,tooLarge:`Choose a file no larger than 10 MB.`,sharingUnavailable:`File sharing is unavailable on this device.`},evidence:{title:`Evidence`,explanation:`Outcomes are reported by their submitting accounts.`,add:`Add evidence`,name:`Title`,url:`URL`,outcome:`Reported outcome`,commit:`Commit (full hash)`,note:`Note`,save:`Save evidence`},activity:{title:`Activity`,previous:`Previous activity`,next:`Next activity`},inbox:{markAllRead:`Mark all read`,empty:`No notifications`},notifications:{title:`Notifications`,inApp:`Subscribed ticket updates in Inbox`,push:`Push notifications`,enableDevice:`Enable push on this device`,disableDevice:`Disable push on this device`,unconfigured:`This build needs an Expo project ID and signing configuration for push.`,noProjectId:`This build needs an Expo project ID for push notifications.`,permissionDenied:`Allow notifications in device settings to enable push.`,channel:`Ticket updates`},settings:{password:{title:`Local password`,current:`Current password`,new:`New password`,change:`Change password`,updated:`Password updated; other sessions revoked`},oidc:{linked:`Account linked`,explanation:`Link this account before signing in with this provider.`,link:`Link {{provider}}`},signOut:{action:`Sign out`,title:`Sign out?`,message:`Cached tickets and drafts for this account will be removed from this device.`},changeServer:{title:`Change server?`,message:`Sign out and clear this account's local cache and drafts?`}}}},vl=[`az-AZ`,`de-DE`,`el-GR`,`en-US`,`es-ES`,`fr-FR`,`hi-IN`,`id-ID`,`it-IT`,`ja-JP`,`ko-KR`,`mk-MK`,`nl-NL`,`pl-PL`,`pt-BR`,`ru-RU`,`tr-TR`,`uk-UA`,`vi-VN`,`zh-CN`,`zh-TW`],yl=`en-US`,bl=e=>vl.some(t=>t===e),xl={"az-AZ":{name:`Azərbaycan dili`,firstDay:1},"de-DE":{name:`Deutsch`,firstDay:1},"el-GR":{name:`Ελληνικά`,firstDay:1},"en-US":{name:`English`,firstDay:0},"es-ES":{name:`Español`,firstDay:1},"fr-FR":{name:`Français`,firstDay:1},"hi-IN":{name:`हिन्दी`,firstDay:0},"id-ID":{name:`Bahasa Indonesia`,firstDay:0},"it-IT":{name:`Italiano`,firstDay:1},"ja-JP":{name:`日本語`,firstDay:0},"ko-KR":{name:`한국어`,firstDay:0},"mk-MK":{name:`Македонски`,firstDay:1},"nl-NL":{name:`Nederlands`,firstDay:1},"pl-PL":{name:`Polski`,firstDay:1},"pt-BR":{name:`Português (Brasil)`,firstDay:0},"ru-RU":{name:`Русский`,firstDay:1},"tr-TR":{name:`Türkçe`,firstDay:1},"uk-UA":{name:`Українська`,firstDay:1},"vi-VN":{name:`Tiếng Việt`,firstDay:1},"zh-CN":{name:`简体中文`,firstDay:1},"zh-TW":{name:`繁體中文`,firstDay:0}},Sl=Ds([N(vl),P(`system`)]).catch(`system`);function Cl(e,t=[]){let n=Sl.parse(e);if(n!==`system`)return n;for(let e of t){if(!e)continue;let t=e.replaceAll(`_`,`-`).toLowerCase(),n=vl.find(e=>e.toLowerCase()===t);if(n)return n;let[r]=t.split(`-`);if(r===`zh`)return/-(hant|tw|hk|mo)\b/.test(t)?`zh-TW`:`zh-CN`;let i=vl.find(e=>e.split(`-`)[0]===r);if(i)return i}return yl}var wl=I.createInstance();wl.init({lng:yl,fallbackLng:yl,supportedLngs:vl,resources:{[yl]:{translation:_l}},initAsync:!1,interpolation:{escapeValue:!1},returnEmptyString:!1}),wl.services.formatter?.add(`lowercase`,(e,t)=>String(e).toLocaleLowerCase(t));var L=wl.t.bind(wl),Tl=()=>bl(wl.language)?wl.language:yl,El={"az-AZ":()=>y(()=>import(`./az-AZ-DesqXNg5.js`),[]),"de-DE":()=>y(()=>import(`./de-DE-BIGY9SNm.js`),[]),"el-GR":()=>y(()=>import(`./el-GR-D2TjImt0.js`),[]),"es-ES":()=>y(()=>import(`./es-ES-C_fRqLGU.js`),[]),"fr-FR":()=>y(()=>import(`./fr-FR-_tnQsn4j.js`),[]),"hi-IN":()=>y(()=>import(`./hi-IN-CcmFsZYy.js`),[]),"id-ID":()=>y(()=>import(`./id-ID-C59tC61D.js`),[]),"it-IT":()=>y(()=>import(`./it-IT-BAP5O3gK.js`),[]),"ja-JP":()=>y(()=>import(`./ja-JP-vQa7mEdh.js`),[]),"ko-KR":()=>y(()=>import(`./ko-KR-CXlpmX0-.js`),[]),"mk-MK":()=>y(()=>import(`./mk-MK-BU5BLpXM.js`),[]),"nl-NL":()=>y(()=>import(`./nl-NL-2aSpdZkg.js`),[]),"pl-PL":()=>y(()=>import(`./pl-PL-C5Wvnv7f.js`),[]),"pt-BR":()=>y(()=>import(`./pt-BR-CVvI-ZB7.js`),[]),"ru-RU":()=>y(()=>import(`./ru-RU-C7UUdGIh.js`),[]),"tr-TR":()=>y(()=>import(`./tr-TR-VVsL3uMp.js`),[]),"uk-UA":()=>y(()=>import(`./uk-UA-DRpCbOps.js`),[]),"vi-VN":()=>y(()=>import(`./vi-VN-C0YFqq9j.js`),[]),"zh-CN":()=>y(()=>import(`./zh-CN-pcgTdR8c.js`),[]),"zh-TW":()=>y(()=>import(`./zh-TW-DymSXkFg.js`),[])},Dl={"az-AZ":()=>y(()=>import(`./az-D-kj4lmf.js`),__vite__mapDeps([0,1])),"de-DE":()=>y(()=>import(`./de-DAv77-wP.js`),__vite__mapDeps([2,1])),"el-GR":()=>y(()=>import(`./el-D2ypddWn.js`),__vite__mapDeps([3,1])),"en-US":()=>y(()=>import(`./en-EnSRisMz.js`).then(e=>e.n),__vite__mapDeps([4,5,1])),"es-ES":()=>y(()=>import(`./es-B_49BMhR.js`),__vite__mapDeps([6,1])),"fr-FR":()=>y(()=>import(`./fr-B-WmPGZD.js`),__vite__mapDeps([7,1])),"hi-IN":()=>y(()=>import(`./hi-DvoDcUpL.js`),__vite__mapDeps([8,1])),"id-ID":()=>y(()=>import(`./id-CPASBZ2r.js`),__vite__mapDeps([9,1])),"it-IT":()=>y(()=>import(`./it-Cd7u97Jd.js`),__vite__mapDeps([10,1])),"ja-JP":()=>y(()=>import(`./ja-LkOrjegp.js`),__vite__mapDeps([11,1])),"ko-KR":()=>y(()=>import(`./ko-DPpXw683.js`),__vite__mapDeps([12,1])),"mk-MK":()=>y(()=>import(`./mk-CkaQRpqe.js`),__vite__mapDeps([13,1])),"nl-NL":()=>y(()=>import(`./nl-DiEjqOA8.js`),__vite__mapDeps([14,1])),"pl-PL":()=>y(()=>import(`./pl-CauoMfkf.js`),__vite__mapDeps([15,1])),"pt-BR":()=>y(()=>import(`./pt-BR-BpOhwoDW.js`),__vite__mapDeps([16,1])),"ru-RU":()=>y(()=>import(`./ru-DOaRp00B.js`),__vite__mapDeps([17,1])),"tr-TR":()=>y(()=>import(`./tr-DeYojjLx.js`),__vite__mapDeps([18,1])),"uk-UA":()=>y(()=>import(`./uk-DACrfgCP.js`),__vite__mapDeps([19,1])),"vi-VN":()=>y(()=>import(`./vi-CkqUo4w_.js`),__vite__mapDeps([20,1])),"zh-CN":()=>y(()=>import(`./zh-CN-CC7ghLLr.js`),__vite__mapDeps([21,1])),"zh-TW":()=>y(()=>import(`./zh-TW-BlIRMi1C.js`),__vite__mapDeps([22,1]))},Ol=async e=>e===`en-US`?_l:(await El[e]()).default,kl=yl;async function Al(e){kl=e;try{wl.hasResourceBundle(e,`translation`)||wl.addResourceBundle(e,`translation`,await Ol(e));let t=(await Dl[e]()).default();return kl===e?(ge(t),await wl.changeLanguage(e),e):Tl()}catch(t){if(kl!==e)return Tl();throw await wl.changeLanguage(yl),t}}function jl(e){let t=new Map;return n=>{let r=Tl(),i=`${r}|${JSON.stringify(n)}`,a=t.get(i)??e(r,n);return t.set(i,a),a}}var Ml=jl((e,t)=>new Intl.DateTimeFormat(e,t)),Nl=jl((e,t)=>new Intl.NumberFormat(e,t)),Pl=jl((e,t)=>new Intl.ListFormat(e,t)),Fl=jl((e,t)=>new Intl.RelativeTimeFormat(e,t)),Il=(e={dateStyle:`medium`})=>Ml(e),Ll=(e,t)=>Il(t).format(new Date(e)),Rl=(e,t={})=>Nl(t).format(e),zl=e=>typeof Intl.ListFormat==`function`?Pl({type:`unit`,style:`short`}).format(e):e.join(`, `),Bl=[[`year`,31536e3],[`month`,2592e3],[`day`,86400],[`hour`,3600],[`minute`,60],[`second`,1]];function Vl(e,t=Date.now()){if(typeof Intl.RelativeTimeFormat!=`function`)return Ll(e,{dateStyle:`medium`,timeStyle:`short`});let n=(new Date(e).getTime()-t)/1e3,[r,i]=Bl.find(([,e])=>Math.abs(n)>=e)??[`second`,1];return Fl({numeric:`always`}).format(Math.round(n/i),r)}var Hl=(e=Tl())=>xl[e].firstDay,Ul=(e,t)=>t.every(t=>Object.hasOwn(e,t));function R(e,t){let n={};for(let r of e)Object.defineProperty(n,r,{get:()=>t(r),enumerable:!0});if(!Ul(n,e))throw Error(`A label table is missing a key`);return n}var z=[`backlog`,`todo`,`in_progress`,`in_review`,`done`,`cancelled`],Wl=[`done`,`cancelled`],Gl=[`urgent`,`high`,`medium`,`low`,`none`],Kl=[`feature`,`bug`,`chore`,`research`,`documentation`],ql=[`low`,`med`,`high`],Jl=[`reader`,`writer`,`admin`],Yl=R(Jl,e=>L(`common.role.${e}`)),Xl=R(Kl,e=>L(`common.kind.${e}`)),Zl=R(ql,e=>L(`common.difficulty.${e}`)),Ql=[`ticket.write`,`ticket.delete`,`project.manage`,`member.manage`,`invitation.manage`,`sharing.manage`,`workspace.manage`],$l=R(Ql,e=>({label:L(`common.permission.${e}.label`),description:L(`common.permission.${e}.description`)})),eu={reader:[],writer:[`ticket.write`],admin:Ql},tu=Ds([N(Jl),O()]),nu=e=>e.capabilities??(e.role?eu[e.role]:[]),ru=[`default`,`red`,`orange`,`amber`,`yellow`,`lime`,`green`,`emerald`,`teal`,`cyan`,`sky`,`blue`,`indigo`,`violet`,`purple`,`fuchsia`,`pink`,`rose`,`gray`],iu=E().regex(/^#[0-9a-f]{6}$/i).overwrite(e=>e.toLowerCase()),B=Ds([N(ru),iu]),au=e=>ru.some(t=>t===e),ou=e=>iu.safeParse(e).success,su=e=>e?.split(`,`).includes(`admin`)??!1,cu=[`read`,`write`,`claim`,`admin`],lu=1e7,uu=R(z,e=>L(`common.status.${e}`)),du=R(Gl,e=>L(`common.priority.${e}`)),fu=E().min(1).max(80),V=cc(),H=k().int().positive(),U=E().trim().min(1),pu=cc().refine(e=>new Date(e).getUTCFullYear()>=1,`Use a date in year 1 or later`),mu=j(U.max(40)).max(30).overwrite(e=>[...new Set(e)]),hu={id:O(),name:U.max(40),color:B,version:H},gu=M({...hu,projectId:O()}),_u=M({id:O(),projectId:O(),slug:E(),name:U.max(40),category:N(z),color:B,position:k().int().nonnegative(),version:H}),vu=z.map(e=>({slug:e,name:uu[e],category:e})),yu=e=>e.slug===e.category&&e.name===vu.find(t=>t.slug===e.category)?.name?uu[e.category]:e.name,bu=e=>e.map(e=>({...e,name:yu(e)})),xu=M({...hu,workspaceId:O()}),Su={count:k().int().nonnegative()},Cu=xu.extend({scope:P(`workspace`),...Su}),wu=ks(`scope`,[gu.extend({scope:P(`project`),...Su}),Cu]),Tu=[`text`,`number`,`date`,`checkbox`,`select`,`multiselect`],Eu=R(Tu,e=>L(`common.customFieldType.${e}`)),Du=Ds([E(),k(),A(),j(E())]),Ou=Fs(O(),Du.nullable()),ku=M({id:O(),name:U.max(60),color:B}),Au=M({id:O(),projectId:O(),name:U.max(60),type:N(Tu),options:j(ku),required:A(),defaultValue:Du.nullable(),version:H}),ju=j(M({id:O().optional(),name:U.max(60),color:B.default(`gray`)}).strict()).max(100).refine(e=>new Set(e.map(e=>e.name.toLowerCase())).size===e.length,`Option names must be unique`).refine(e=>{let t=e.flatMap(e=>e.id?[e.id]:[]);return new Set(t).size===t.length},`Option IDs must be unique`),Mu=(e,t)=>(Array.isArray(t)?t:[t]).map(t=>e.options.find(e=>e.id===t)?.name??L(`common.customField.removedOption`));function Nu(e,t){if(t==null)return``;switch(e.type){case`number`:return typeof t==`number`?Rl(t):String(t);case`date`:return typeof t==`string`&&/^\d{4}-\d{2}-\d{2}$/.test(t)?Ll(`${t}T00:00:00`):String(t);case`checkbox`:return t===!0?L(`common.customField.checked`):``;case`select`:case`multiselect`:return zl(Mu(e,t));default:return String(t)}}var Pu={empty:`none`,checked:`true`},Fu=(e,t)=>`${e}:${t}`;function Iu(e,t){return t===Pu.empty?e.type===`checkbox`?`Not checked`:`No value`:t===Pu.checked&&e.type===`checkbox`?`Checked`:Mu(e,t).join(``)}var Lu=(e,t)=>`${e.name}: ${Iu(e,t)}`,Ru={limit:lc().int().min(1).max(100).default(50),offset:lc().int().min(0).default(0)},W={requestId:O().optional()},zu={before:fu.optional(),after:fu.optional()},Bu=e=>e.before===void 0||e.after===void 0,G=M({projectId:fu}),K=G.extend({ticketId:fu}),Vu=E().trim().regex(/^[A-Z][A-Z0-9]{1,9}$/),Hu=[`project_archived`,`not_open`,`not_enabled`,`missing_description`,`missing_acceptance_criteria`,`missing_difficulty`,`duplicate`,`claim_recovery_required`];function Uu(e,t){let n=Hu.find(t=>t===e.code);return n?L(`common.readinessReason.${n}`):e.code===`claimed`&&t?L(`common.readinessReason.claimed`,{worker:t}):e.code===`dependency`&&e.ticketKey?L(`common.readinessReason.dependency`,{key:e.ticketKey}):e.message}var Wu=M({code:E(),message:E(),ticketId:O().optional(),ticketKey:E().optional()}),Gu=M({id:O(),key:E(),name:E()}),Ku=[`status`,`priority`,`kind`,`difficulty`,`label`,`assigneeId`,`customField`],q={status:N(z),priority:N(Gl),kind:N(Kl),difficulty:N(ql),label:E().max(40),assigneeId:Ds([fu,P(`none`)]),customField:E().regex(/^[0-9a-f-]{36}:(?:none|true|[0-9a-f-]{36})$/)},qu=R(Ku,e=>L(`common.filterField.${e}`)),Ju=[`any`,`none`],J=e=>Ds([e,j(e).min(1).max(25)]).optional(),Yu=e=>e===void 0?[]:[...new Set(Array.isArray(e)?e:[e])],Xu={status:J(q.status),statusNot:J(q.status),priority:J(q.priority),priorityNot:J(q.priority),kind:J(q.kind),kindNot:J(q.kind),difficulty:J(q.difficulty),difficultyNot:J(q.difficulty),label:J(q.label),labelNot:J(q.label),assigneeId:J(q.assigneeId),assigneeIdNot:J(q.assigneeId),customField:J(q.customField),customFieldNot:J(q.customField)},Zu=(e,t)=>t===`any`?e:`${e}Not`;function Qu(e){return Ku.flatMap(t=>Ju.flatMap(n=>{let r=Yu(e[Zu(t,n)]);return r.length?[{field:t,operator:n,values:r}]:[]}))}function $u(e,t){for(let n of Ku){let r=new Set(Yu(e[Zu(n,`none`)])),i=Yu(e[n]).filter(e=>r.has(e));i.length&&t.addIssue({code:`custom`,path:[n],message:`${qu[n]} cannot both include and exclude ${i.join(`, `)}`})}}var ed=j(M({ticketId:fu,expectedVersion:H})).min(1).max(100).refine(e=>new Set(e.map(e=>e.ticketId)).size===e.length,`Tickets must be unique`),td=M({q:E().trim().max(200).optional(),...Xu,parentId:fu.optional(),archived:N([`include`,`only`,`exclude`]).default(`exclude`),due:N([`overdue`,`today`,`week`,`scheduled`,`none`]).optional(),sort:N([`priority`,`updated`,`created`,`title`,`labels`,`due`,`start`,`number`,`status`,`difficulty`,`kind`,`assignee`,`manual`]).default(`priority`),order:N([`asc`,`desc`]).optional()}).strict().superRefine($u),nd=R(td.shape.sort.unwrap().options,e=>L(`common.sort.${e}`)),rd={priority:`asc`,updated:`desc`,created:`desc`,title:`asc`,labels:`asc`,due:`asc`,start:`asc`,number:`asc`,status:`asc`,difficulty:`asc`,kind:`asc`,assignee:`asc`,manual:`asc`},id=R(td.shape.due.unwrap().options,e=>L(`common.due.${e}`)),ad=M({title:U.max(500).overwrite(e=>e.replace(/\s+/gu,` `)),description:E().max(1e5),acceptanceCriteria:E().max(5e4),status:N(z),stateId:O(),priority:N(Gl),kind:N(Kl),difficulty:N(ql).nullable(),labels:mu,scopes:mu,assigneeId:E().nullable(),parentId:O().nullable(),automationReady:A(),holdReason:E().trim().max(2e3).nullable(),startAt:pu.nullable(),dueAt:pu.nullable(),archived:A(),customFields:Ou}).strict(),od=ad.partial().refine(e=>Object.keys(e).length>0,`Provide at least one change`),sd=M({id:O(),slug:U.max(80),name:U.max(120),description:E(),ownerId:E().nullable().default(null),version:H,createdAt:V,updatedAt:V,role:N(Jl).nullable(),roleId:E().nullable().optional(),capabilities:j(N(Ql)).optional()}),cd=M({id:tu,name:E(),permissions:j(N(Ql)),seeded:A(),assigned:k().int().nonnegative(),version:H}),ld=M({userId:E(),name:E(),email:E(),role:N(Jl),roleId:E().optional(),image:E().nullable().optional(),source:N([`project`,`workspace`]).optional(),inheritedRole:N(Jl).nullable().optional(),inheritedRoleId:E().nullable().optional(),disabled:A().optional()}),ud=Gu,dd=[`pending`,`expired`,`accepted`,`revoked`],fd=M({id:O(),workspaceId:O(),email:E(),role:N(Jl),projects:j(ud).nullable(),status:N(dd),invitedBy:E().nullable(),expiresAt:V,sentAt:V,version:H}),pd=M({invitation:fd,url:Qo(),emailed:A()}),md=E().min(20).max(200),hd=M({iconName:E().nullable().default(null),iconColor:N(ru).default(`default`),image:E().nullable().default(null),background:E().nullable().default(null),workspaceId:O(),visibility:N([`workspace`,`private`]),publicReadEnabled:A().default(!1),id:O(),key:E(),name:E(),description:E(),version:H,archivedAt:V.nullable().default(null),createdAt:V,updatedAt:V}),gd=M({userId:E(),name:E(),email:E()}),Y=k().int().nonnegative(),_d=M({tickets:Y,comments:Y,attachments:Y,attachmentBytes:Y,events:Y,blockers:j(M({code:E(),message:E(),tickets:j(E())})),transfer:M({workspaceId:O(),losingAccess:j(gd),gainingAccess:j(gd),copiedLabels:j(E()),mergedLabels:j(E()),subscriptions:Y,invitations:Y}).nullable()}),vd=_d.omit({transfer:!0}).extend({projects:j(M({...Gu.shape,archived:A(),tickets:Y})),members:Y,invitations:Y,labels:Y});function yd(e,t,n){return e?.find(e=>e.userId===n)?.name??(t?.includes(n)?L(`common.person.deleted`):L(`common.person.former`))}var bd=M({userId:E(),name:E(),email:E(),providers:j(E()),sessions:Y,credentials:Y,devices:Y,workspaces:Y,projects:Y,claims:Y,imports:Y,tickets:Y,comments:Y,events:Y,blockers:_d.shape.blockers}),X=M({...ad.shape,startAt:pu.nullable().default(null),stateId:O().nullable().default(null),customFields:Fs(E(),Du).default({}),claimRequired:A(),id:O(),projectId:O(),key:E(),number:k().int().positive(),version:H,createdBy:E(),createdAt:V,updatedAt:V}),xd=M({project:hd,tickets:j(X),cursor:E().regex(/^\d+$/)}),Sd=M({cursor:E().regex(/^\d+$/)}),Cd=M({ready:A(),reasons:j(Wu)}),wd=M({id:O(),projectId:O(),ticketId:O(),actorId:E(),workerId:E(),expiresAt:V,createdAt:V}),Td=M({id:O(),projectId:O(),sourceId:O(),targetId:O(),type:N([`blocks`,`related`,`duplicate`,`causes`,`clones`,`implements`,`reviews`]),sourceKey:E().optional(),sourceTitle:E().optional(),targetKey:E().optional(),targetTitle:E().optional()}),Ed=N([`outgoing`,`incoming`]),Dd=(e,t)=>L(`common.relation.${e}.${t?`outgoing`:`incoming`}`),Od=Td.shape.type.options.flatMap(e=>(e===`related`?[`outgoing`]:Ed.options).map(t=>({value:`${e}:${t}`,get label(){return Dd(e,t===`outgoing`)},type:e,direction:t})));function kd(e){let[t,n]=Ns([Td.shape.type,Ed]).parse(E().parse(e).split(`:`));return{type:t,direction:n}}function Ad(e,t){let n=e.sourceId===t,r=n?e.targetId:e.sourceId,i=(n?e.targetKey:e.sourceKey)??r,a=n?e.targetTitle:e.sourceTitle;return{id:r,label:Dd(e.type,n),title:`${i}${a?` · ${a}`:``}`}}var jd=M({id:O(),projectId:O(),ticketId:O(),actorId:E(),body:E(),version:H,createdAt:V,updatedAt:V}),Md=`mention:`,Nd=(e,t)=>`[@${e.replaceAll(/[\\[\]]/g,`\\$&`)}](${Md}${t})`,Pd=M({id:O(),projectId:O(),ticketId:O(),actorId:E(),name:E(),contentType:E(),size:k().int().nonnegative(),createdAt:V}),Fd=Pd.omit({ticketId:!0}).extend({expiresAt:V}),Id=(e,t)=>`/api/v1/projects/${e}/attachments/${t}/content`,Ld=Qo().regex(/^https?:\/\//i,`Use an HTTP or HTTPS URL`),Rd=M({kind:N([`pull_request`,`test`,`review`,`deployment`,`device`,`other`]),title:U.max(200),url:Ld,commit:E().regex(/^[a-f0-9]{40,64}$/i).nullable().default(null),outcome:N([`reported`,`pending`,`passed`,`failed`]).default(`reported`),note:E().max(2e4).default(``)}),zd=R(Rd.shape.kind.options,e=>L(`common.evidenceKind.${e}`)),Bd=R(Rd.shape.outcome.unwrap().options,e=>L(`common.evidenceOutcome.${e}`)),Vd=Rd.extend({id:O(),projectId:O(),ticketId:O(),actorId:E(),createdAt:V}),Hd=M({startAt:V,endAt:V.nullable().default(null),note:E().max(2e4).default(``)}),Ud=Hd.extend({id:O(),projectId:O(),ticketId:O(),actorId:E(),durationMs:k().int().nonnegative().nullable(),version:H,createdAt:V,updatedAt:V}),Wd=E().trim().max(200),Gd=M({url:Ld,title:Wd.default(``)});function Kd(e){let t=/^https?:\/\//i.exec(e)?.[0];if(!t)return null;let n=e.slice(t.length),r=n.search(/[/\\?#]/),i=r===-1?n:n.slice(0,r),a=i.slice(i.lastIndexOf(`@`)+1),o=a.startsWith(`[`)?a.slice(0,a.indexOf(`]`)+1):a.split(`:`)[0];return o?o.toLowerCase():null}var qd=[`branch`,`pull_request`,`issue`],Jd=R(qd,e=>L(`common.remoteKind.${e}`)),Yd=Gd.extend({id:O(),projectId:O(),ticketId:O(),actorId:E(),provider:E().nullable(),remoteKind:N(qd).nullable(),remoteState:E().nullable(),remoteCheckedAt:V.nullable(),version:H,createdAt:V,updatedAt:V}),Xd=M({id:O(),projectId:O(),name:U.max(80),labels:mu,timeZone:E(),createdBy:E(),createdAt:V,active:A()}),Zd=M({id:E().regex(/^\d+$/),projectId:O(),ticketId:O().nullable(),actorId:E().nullable(),type:E(),data:Fs(E(),xs()),createdAt:V}),Qd=[`project`,`ticket`,`comment`,`activity`],$d=M({type:N(Qd),id:E(),project:Gu,ticket:M({id:O(),key:E(),title:E(),status:N(z)}).nullable(),title:E(),excerpt:E(),actorId:E().nullable(),at:V}),ef=M({id:E(),name:E()}),tf={get credential(){return L(`common.signIn.localPassword`)},oidc:`OIDC`,github:`GitHub`,google:`Google`,discord:`Discord`};function nf(e){if(!e.error)return e;throw Error([`INVALID_OTP`,`OTP_EXPIRED`,`TOO_MANY_ATTEMPTS`].includes(e.error.code??``)?L(`common.signIn.invalidCode`):e.error.message??L(`common.error.fallback`))}var rf=M({authentication:vc.default(()=>vc.parse({})),name:E(),description:E().default(``),version:E(),setupRequired:A(),oidc:ef.nullable(),providers:j(ef).optional(),push:A().default(!1),email:A().default(!1),emailCodes:A().default(!1)}).transform(e=>({...e,providers:e.providers??(e.oidc?[e.oidc]:[])})),af=M({assignment:A().default(!0),status:A().default(!0),comment:A().default(!0),mention:A().default(!0),update:A().default(!0),due_soon:A().default(!0),overdue:A().default(!0)}),of=af.keyof().options,sf=R(of,e=>L(`common.notificationCategory.${e}`)),cf=[`minutes`,`hours`,`days`,`weeks`],lf=N(cf),uf=M({amount:k().int().min(1).max(999),unit:lf}),df=j(M({id:O(),readAt:V.nullable(),category:N(of).catch(`update`),createdAt:V.optional(),event:Zd})),ff=M({ids:j(O()).min(1).max(100)}).strict(),pf=ff.extend({read:A().default(!0)}).strict(),mf=M({inApp:A().default(!0),push:A().default(!1),categories:af.prefault({}),reminderLead:uf.prefault({amount:1,unit:`days`})}),hf=M({inApp:A(),push:A().optional(),categories:Is(N(of),A()).optional(),reminderLead:uf.strict().optional()}).strict();M({token:E().min(1).max(250)}).strict();var gf=[`email`,`ntfy`,`gotify`,`webhook`],_f=[`webhook`,`slack`,`discord`,`mattermost`,`telegram`],vf=[...new Set([...gf,..._f])],yf={get email(){return L(`common.deliveryKind.email`)},ntfy:`ntfy`,gotify:`Gotify`,get webhook(){return L(`common.deliveryKind.webhook`)},slack:`Slack`,discord:`Discord`,mattermost:`Mattermost`,telegram:`Telegram`},bf={email:[],ntfy:[`token`],gotify:[`token`],webhook:[`secret`],slack:[`url`],discord:[`url`],mattermost:[`url`],telegram:[`token`]},xf=Qo({protocol:/^https?$/}).max(2e3).refine(e=>!/^[a-z]+:\/\/[^/?#]*@/i.test(e),`Put credentials in their own field, not in the URL`),Sf=E().trim().min(1).max(500);ks(`kind`,[M({kind:P(`email`),address:Jo().max(254)}),M({kind:P(`ntfy`),server:xf.default(`https://ntfy.sh`),topic:E().regex(/^[\w-]{1,64}$/,`Use letters, digits, - or _`),token:Sf.optional()}),M({kind:P(`gotify`),server:xf,token:Sf}),M({kind:P(`webhook`),url:xf,secret:Sf.optional()}),M({kind:P(`slack`),url:xf}),M({kind:P(`discord`),url:xf}),M({kind:P(`mattermost`),url:xf,channel:E().trim().max(64).optional()}),M({kind:P(`telegram`),token:E().regex(/^\d+:[\w-]{20,}$/,`Use the bot token from BotFather`),chatId:E().regex(/^(-?\d{1,20}|@\w{5,32})$/,`Use a numeric chat ID or @channel`),topicId:lc().int().positive().optional()})]);var Cf=M({kind:N(vf)}).catchall(Ds([E().max(2e3),k(),ys()])),wf=[`off`,`all`,`selected`],Tf=M({workspaceId:O(),mode:N(wf),projectIds:j(O()).max(500).default([])}),Ef=j(Tf).max(100).refine(e=>new Set(e.map(e=>e.workspaceId)).size===e.length,`List each workspace once`),Df=[`created`,...of.filter(e=>e!==`mention`)],Of=R(Df,e=>e===`created`?L(`common.destinationEvent.created`):sf[e]),kf=M({status:N([`idle`,`ok`,`failing`]),error:E().nullable(),lastAttemptAt:V.nullable(),lastSuccessAt:V.nullable(),pending:k().int().nonnegative()}),Af={id:O(),name:E(),paused:A(),settings:Fs(E(),Ds([E(),k()])),secrets:j(E()),endpoint:E(),health:kf,version:H,createdAt:V},jf=M({...Af,kind:N(gf),routes:j(Tf)}),Mf=M({...Af,kind:N(_f),projectId:O(),events:j(N(Df))}),Nf=[`github`,`gitea`,`gitlab`],Pf={github:{label:`GitHub`,baseUrl:null,nested:!1,changeKind:`pull_request`,get change(){return L(`common.change.pull_request.name`)}},gitea:{label:`Gitea`,baseUrl:{default:null},nested:!1,changeKind:`pull_request`,get change(){return L(`common.change.pull_request.name`)}},gitlab:{label:`GitLab`,baseUrl:{default:`https://gitlab.com`},nested:!0,changeKind:`merge_request`,get change(){return L(`common.change.merge_request.name`)}}},Ff=[`branch_created`,`pull_request_opened`,`pull_request_draft`,`pull_request_merged`,`pull_request_closed`],If={pull_request_opened:`opened`,pull_request_draft:`draft`,pull_request_merged:`merged`,pull_request_closed:`closed`};function Lf(e,t){if(e===`branch_created`)return L(`common.change.branchCreated`);let n=Pf[t].changeKind;return L(`common.change.${n}.${If[e]}`)}function Rf(e,t){let n=Object.values(Pf).find(e=>e.label===t);return e===`pull_request`&&n?n.change:Jd[e]}var zf=[`token`,`webhookSecret`],Bf=E().trim().max(200).regex(/^[\w.-]+(?:\/[\w.-]+)+$/,`Use owner/repository`).refine(e=>e.split(`/`).every(e=>e!==`.`&&e!==`..`),`Use owner/repository`),Vf=xf.refine(e=>!/[?#]/.test(e),`Use the server address without a query or fragment`).pipe(Qo({normalize:!0})).transform(e=>e.replace(/\/+$/,``)),Hf=E().trim().min(1).max(500),Uf=Is(N(Ff),O()),Wf=M({enabled:A(),labels:j(O()).max(50),match:N([`any`,`all`])}).strict(),Gf=[`active`,`paused`,`review`,`creating`,`unknown`],Kf=R(Gf,e=>L(`common.issueLinkState.${e}`)),qf=M({id:O(),connectionId:O(),ticketId:O(),ticketKey:E(),ticketTitle:E(),origin:N([`inbound`,`outbound`]),state:N(Gf),reason:E().nullable(),number:k().int().nullable(),url:E().nullable(),version:H,updatedAt:V}),Jf=M({title:E(),description:E(),open:A()}),Yf=M({link:qf,ticketVersion:H,local:Jf,remote:Jf.nullable(),base:Jf.nullable()}),Xf=M({matching:k().int().nonnegative(),export:k().int().nonnegative(),pause:k().int().nonnegative(),review:k().int().nonnegative(),fingerprint:E()}),Zf=M({id:O(),projectId:O(),provider:N(Nf),repository:E(),baseUrl:E().nullable(),webhookUrl:E(),secrets:j(N(zf)),paused:A(),commentOnLink:A(),transitions:Uf,outbound:Wf,inbound:Wf,issueLinks:Is(N(Gf),k().int()),health:kf,lastEventAt:V.nullable(),lastEventError:E().nullable(),version:H,createdAt:V}),Qf=j(M({id:E(),name:E().nullable(),start:E().nullable(),enabled:A(),expiresAt:V.nullable(),createdAt:V,permissions:E().nullable(),metadata:E().nullable()})),$f=M({projectIds:j(O()).max(1e3).nullable()});M({name:E().trim().min(1).max(100),projectIds:$f.shape.projectIds.refine(e=>e===null||e.length>0),scopes:j(N(cu)).min(1),expiresIn:k().int().min(3600).max(31536e3).nullable().default(7776e3)}).strict();var ep=M({id:E(),key:E(),name:E().nullable(),expiresAt:V.nullable()}),Z=M({ok:P(!0)}),tp=R(`label.created,label.updated,label.deleted,workflow.created,workflow.updated,workflow.deleted,custom_field.created,custom_field.updated,custom_field.deleted,ticket.created,ticket.updated,ticket.deleted,ticket.moved,ticket.moved_away,ticket.due_soon,ticket.overdue,ticket.claimed,claim.renewed,claim.released,claim.recovered,comment.created,comment.updated,comment.deleted,relation.added,relation.removed,attachment.created,attachment.deleted,evidence.added,time_entry.created,time_entry.updated,time_entry.deleted,resource.added,resource.updated,resource.removed,calendar_feed.created,calendar_feed.revoked,project.created,project.updated,project.archived,project.restored,project.transferred,project.deleted,membership.updated,workspace.owner_changed,role.created,role.updated,role.deleted,invitation.updated,destination.created,destination.updated,destination.deleted,repository.connected,repository.updated,repository.disconnected,repository.received,issue_link.updated`.split(`,`),e=>L(`common.event.${e}`));function np(e,t=!1){let n=e.type.replaceAll(`.`,` `).replaceAll(`_`,` `),r=tp[e.type]??n.charAt(0).toUpperCase()+n.slice(1);return!t||!e.ticketId?r:`${r} · ${typeof e.data.key==`string`?e.data.key:e.ticketId}${typeof e.data.title==`string`?` · ${e.data.title}`:``}`}var rp=`kanvil.tickets`,ip={members:1e3,labels:1e3,tickets:5e3,relations:2e4,comments:2e4,evidence:1e4,resources:1e4},Q=E().min(1).max(200),ap=e=>{let t=(t,n)=>{let r=j(t);return(e?r.max(n):r).default([])};return M({format:P(rp),version:P(1),exportedAt:V,project:M({ref:Q,key:E().max(20),name:U.max(120),description:E().max(5e3).default(``)}),completeness:M({omitted:j(M({content:E().max(80),count:Y.nullable(),reason:E().max(500)})).max(50)}).default({omitted:[]}),members:t(M({ref:Q,name:E().max(200),email:E().max(320)}),ip.members),workflow:j(M({ref:Q,name:U.max(40),category:N(z),color:B.default(`default`)})).min(1).max(50),customFields:t(Au.pick({name:!0,type:!0,options:!0,required:!0,defaultValue:!0}).extend({ref:Q}),50),labels:t(M({name:U.max(40),color:B.default(`gray`)}),ip.labels),tickets:t(M({...ad.pick({title:!0,description:!0,acceptanceCriteria:!0,priority:!0,kind:!0,difficulty:!0,labels:!0,scopes:!0,automationReady:!0,holdReason:!0,startAt:!0,dueAt:!0,archived:!0}).shape,ref:Q,key:E().max(40),stateRef:Q,assigneeRef:Q.nullable().default(null),parentRef:Q.nullable().default(null),customFields:Fs(Q,Du).default({}),createdByRef:Q.nullable().default(null),createdAt:V.nullable().default(null)}),ip.tickets),relations:t(M({sourceRef:Q,targetRef:Q,type:Td.shape.type}),ip.relations),comments:t(M({ref:Q,ticketRef:Q,authorRef:Q.nullable(),body:U.max(5e4),createdAt:V}),ip.comments),evidence:t(Rd.extend({ref:Q,ticketRef:Q,authorRef:Q.nullable(),createdAt:V}),ip.evidence),resources:t(Gd.extend({ref:Q,ticketRef:Q,createdAt:V}),ip.resources)})},op=ap(!1),sp=ap(!0),cp=[`previewed`,`running`,`completed`,`failed`,`cancelled`],lp=R(cp,e=>L(`common.importStatus.${e}`)),up=M({id:O(),workspaceId:O(),projectId:O().nullable(),key:E(),name:E(),visibility:N([`workspace`,`private`]),status:N(cp),counts:Fs(E(),Y),members:j(M({ref:E(),name:E(),email:E(),userId:E().nullable()})),issues:j(M({severity:N([`error`,`warning`]),code:E(),message:E()})),progress:M({total:Y,done:Y,failed:Y}),errors:j(M({kind:E(),label:E(),code:E(),message:E()})),version:H,createdAt:V,updatedAt:V}),dp=M({workspaceId:O(),importId:O()}),fp=[`linear`,`jira`,`trello`,`plane`,`planka`,`kaneo`],pp=(e,t)=>({label:t,get project(){return L(`common.importProvider.${e}.project`)},get setup(){return L(`common.importProvider.${e}.setup`)}}),mp={linear:pp(`linear`,`Linear`),jira:pp(`jira`,`Jira`),trello:pp(`trello`,`Trello`),plane:pp(`plane`,`Plane`),planka:pp(`planka`,`PLANKA`),kaneo:pp(`kaneo`,`Kaneo`)},hp=[`cloud`,`data_center`],gp=R(hp,e=>L(`common.jiraEdition.${e}`)),_p=[`password`,`api_key`],vp=R(_p,e=>L(`common.plankaSignIn.${e}`)),yp=E().trim().min(1).max(2e3),bp=ks(`provider`,[M({provider:P(`linear`),token:yp}).strict(),M({provider:P(`jira`),edition:N(hp),baseUrl:Vf,email:E().trim().max(320).default(``),token:yp}).strict().refine(e=>e.edition!==`cloud`||e.email!==``,{message:`Jira Cloud needs the account email`,path:[`email`]}),M({provider:P(`trello`),apiKey:yp,token:yp}).strict(),M({provider:P(`plane`),baseUrl:Vf,workspace:E().trim().min(1).max(100).regex(/^[\w-]+$/,`Use the workspace slug from its web address`),token:yp}).strict(),M({provider:P(`planka`),baseUrl:Vf,signIn:N(_p),username:E().trim().max(256).default(``),password:E().max(2e3).default(``),token:E().trim().max(2e3).default(``)}).strict().refine(e=>e.signIn===`api_key`?e.token!==``:e.username!==``&&e.password!==``,{message:`PLANKA needs a username and password, or an API key`}),M({provider:P(`kaneo`),baseUrl:Vf,token:yp}).strict()]),xp=M({ref:E(),key:E(),name:E(),group:E().default(``)}),Sp=e=>M({items:j(e),total:k().int().nonnegative()}),Cp={name:U.max(255).refine(e=>{for(let t of e)if(t.charCodeAt(0)<32||t.charCodeAt(0)===127)return!1;return!0},`Use a filename without control characters`),contentType:E().max(120).regex(/^[a-z0-9][a-z0-9.+-]*\/[a-z0-9][a-z0-9.+-]*$/i).default(`application/octet-stream`),data:E().max(Math.ceil(lu/3)*4)},$=(e,t,n,r,i,a)=>({input:e,output:t,method:n,path:r,scope:i,description:a}),wp={list_workspaces:$(M({}),j(sd),`GET`,`/workspaces`,`read`,`List accessible workspaces and the current membership role.`),create_workspace:$(M({...W,name:U.max(120),slug:E().trim().regex(/^[a-z0-9][a-z0-9-]{1,79}$/),description:E().max(5e3).default(``)}).strict(),sd,`POST`,`/workspaces`,`write`,`Create a workspace and become its administrator.`),update_workspace:$(M({...W,workspaceId:O(),expectedVersion:H,name:U.max(120),description:E().max(5e3)}).strict(),sd,`PATCH`,`/workspaces/{workspaceId}`,`admin`,`Update workspace details with version checks.`),list_workspace_members:$(M({workspaceId:O()}),j(ld),`GET`,`/workspaces/{workspaceId}/members`,`read`,`List members of a workspace you belong to.`),set_workspace_member:$(M({...W,workspaceId:O(),email:Jo(),role:tu.nullable()}).strict(),Z,`POST`,`/workspaces/{workspaceId}/members`,`admin`,"Manage workspace access with a seeded or custom role; removal also revokes direct project access in this workspace. Needs `member.manage`; the role, and any role the person holds now, must grant nothing the caller lacks."),list_workspace_roles:$(M({workspaceId:O()}),j(cd),`GET`,`/workspaces/{workspaceId}/roles`,`read`,`List the seeded roles and the workspace's custom roles with the actions each grants and how many memberships hold it.`),create_workspace_role:$(M({...W,workspaceId:O(),name:U.max(40),permissions:j(N(Ql)).max(Ql.length)}).strict(),cd,`POST`,`/workspaces/{workspaceId}/roles`,`admin`,"Define a custom role. Needs `workspace.manage` and every action it grants. Names are unique in the workspace and the seeded role names are reserved (`duplicate_role`)."),update_workspace_role:$(M({...W,workspaceId:O(),roleId:O(),expectedVersion:H,name:U.max(40),permissions:j(N(Ql)).max(Ql.length)}).strict(),cd,`PATCH`,`/workspaces/{workspaceId}/roles/{roleId}`,`admin`,"Rename a custom role or change its actions; every membership holding it changes at once. Needs `workspace.manage` and every action the role grants before and after."),delete_workspace_role:$(M({...W,workspaceId:O(),roleId:O(),expectedVersion:H,reassignTo:tu.optional()}).strict(),Z,`DELETE`,`/workspaces/{workspaceId}/roles/{roleId}`,`admin`,"Delete a custom role. Fails with `role_in_use` while memberships hold it unless `reassignTo` names another role of the workspace for them."),transfer_workspace:$(M({...W,workspaceId:O(),expectedVersion:H,userId:E().min(1)}).strict(),sd,`POST`,`/workspaces/{workspaceId}/owner`,`admin`,"Make another active administrator of the workspace its owner. Only the owner or an instance administrator can transfer, and the previous owner stays an administrator. Fails with `owner_ineligible` when the person is not an active workspace administrator."),get_workspace_impact:$(M({workspaceId:O()}),vd,`GET`,`/workspaces/{workspaceId}/impact`,`admin`,`Preview what deleting the workspace removes: each project with its tickets, comments, files, and activity, its members, pending invitations, and shared labels, and blockers such as claimed tickets.`),delete_workspace:$(M({...W,workspaceId:O(),expectedVersion:H,confirmSlug:E().max(80)}).strict(),Z,`DELETE`,`/workspaces/{workspaceId}`,`admin`,"Permanently delete a workspace and every project in it as `delete_project` does, with its memberships, invitations, and shared labels. Only the owner or an instance administrator, signed in within the last 15 minutes, can delete; `confirmSlug` must repeat the workspace URL key. Fails with `claim_conflict` while any ticket is claimed. Accounts, the URL key, and the activity history are kept."),list_deleted_accounts:$(M({}),j(E()),`GET`,`/accounts/deleted`,`read`,"List the IDs of deleted accounts. Tickets, comments, evidence, and activity they wrote keep the ID; show it as `Deleted account`."),get_account_impact:$(M({userId:E().min(1)}),bd,`GET`,`/accounts/{userId}/impact`,`read`,`Preview deleting an account: its sign-in methods, sessions, credentials, devices, memberships, claims, and open imports, the history that stays, and blockers such as an owned workspace or the last instance administrator. Only the account itself or an instance administrator can read it.`),delete_account:$(M({...W,userId:E().min(1),confirmEmail:E().trim().max(320)}).strict(),Z,`DELETE`,`/accounts/{userId}`,`write`,"Delete an account: remove its sign-in methods, sessions, API keys, OAuth grants, devices, notification settings, memberships, and photo, release its claims, cancel its imports, and replace its name and email with a `Deleted account` tombstone. Tickets, comments, evidence, and activity keep the account ID. Only the account itself or an instance administrator, signed in within the last 15 minutes, can delete; `confirmEmail` must repeat the account's email. Fails with `workspace_owner` while it owns a workspace and `last_administrator` for the last active instance or workspace administrator."),list_workspace_labels:$(M({workspaceId:O()}),j(Cu),`GET`,`/workspaces/{workspaceId}/labels`,`read`,`List the workspace's shared labels with ticket counts from the projects you can read, including archived tickets.`),create_workspace_label:$(M({...W,workspaceId:O(),name:U.max(40),color:B.default(`gray`),adopt:A().default(!1)}).strict(),xu,`POST`,`/workspaces/{workspaceId}/labels`,`admin`,"Create a label every project in the workspace can use. When projects already define the name, the write fails with `label_conflict` unless `adopt` replaces those project definitions; their tickets keep the label."),update_workspace_label:$(M({...W,workspaceId:O(),labelId:O(),expectedVersion:H,name:U.max(40),color:B,adopt:A().default(!1)}).strict(),xu,`PATCH`,`/workspaces/{workspaceId}/labels/{labelId}`,`admin`,"Rename or recolor a workspace label. Renames update tickets and saved-view filters in every project of the workspace atomically; renaming onto a project label needs `adopt`."),delete_workspace_label:$(M({...W,workspaceId:O(),labelId:O(),expectedVersion:H}).strict(),Z,`DELETE`,`/workspaces/{workspaceId}/labels/{labelId}`,`admin`,`Delete a workspace label and remove it from tickets and saved-view filters in every project of the workspace atomically.`),list_invitations:$(M({workspaceId:O()}),j(fd),`GET`,`/workspaces/{workspaceId}/invitations`,`admin`,`List the workspace's pending and expired invitations.`),create_invitation:$(M({workspaceId:O(),email:Jo().overwrite(e=>e.toLowerCase()),role:N(Jl),projectIds:j(O()).min(1).max(100).nullable().default(null),expiresInDays:k().int().min(1).max(30).default(7)}).strict(),pd,`POST`,`/workspaces/{workspaceId}/invitations`,`admin`,`Invite an email address with a fixed role on the workspace or selected projects. Returns the one-time link and emails it when the instance has SMTP.`),resend_invitation:$(M({workspaceId:O(),invitationId:O(),expectedVersion:H,expiresInDays:k().int().min(1).max(30).default(7)}).strict(),pd,`POST`,`/workspaces/{workspaceId}/invitations/{invitationId}/resend`,`admin`,`Replace a pending or expired invitation's link, restart its expiry, and send it again.`),revoke_invitation:$(M({...W,workspaceId:O(),invitationId:O(),expectedVersion:H}).strict(),Z,`DELETE`,`/workspaces/{workspaceId}/invitations/{invitationId}`,`admin`,`Cancel an invitation so its link stops working.`),get_invitation:$(M({token:md}),M({workspace:M({id:O(),name:E()}),email:E(),role:N(Jl),projects:j(ud).nullable(),status:N(dd),invitedBy:E().nullable(),expiresAt:V,matchesAccount:A()}),`GET`,`/invitations/{token}`,`read`,`Read the invitation behind a link from a signed-in session.`),accept_invitation:$(M({...W,token:md}).strict(),M({workspaceId:O(),projectIds:j(O()).nullable()}),`POST`,`/invitations/accept`,`write`,`Accept an invitation addressed to the signed-in account's email.`),list_projects:$(M({workspaceId:O().optional(),archived:td.shape.archived}),j(hd.extend({openTickets:k().int().nonnegative(),overdueTickets:k().int().nonnegative(),closedTickets:k().int().nonnegative().default(0),nextDueAt:V.nullable().default(null),role:N(Jl),roleId:E().optional(),capabilities:j(N(Ql)).optional()})),`GET`,`/projects`,`read`,"List projects accessible to the current identity, each with open, overdue, and closed ticket counts, the soonest upcoming open due date, and the caller's role and actions there. Archived projects are left out unless `archived` is `include` or `only`."),create_project:$(M({...W,workspaceId:O().optional(),visibility:N([`workspace`,`private`]).default(`private`),key:Vu,name:U.max(120),description:E().max(5e3).default(``)}).strict(),hd,`POST`,`/projects`,`write`,`Create a project with a ticket prefix that no project has used before.`),get_project:$(G,hd,`GET`,`/projects/{projectId}`,`read`,`Read project details, workspace identity, and appearance.`),set_project_icon:$(G.extend({...W,expectedVersion:H,icon:Ds([M({kind:P(`library`),name:E().regex(/^[a-z0-9-]{1,80}$/),color:N(ru).default(`default`)}).strict(),M({kind:P(`image`),contentType:N([`image/png`,`image/jpeg`,`image/webp`]),data:E().max(7e5)}).strict(),ys()])}).strict(),hd,`POST`,`/projects/{projectId}/icon`,`admin`,`Choose an installed library icon, upload an image, or reset the project icon.`),set_project_background:$(G.extend({...W,expectedVersion:H,background:Ds([M({contentType:N([`image/png`,`image/jpeg`,`image/webp`]),data:E().max(7e5)}).strict(),ys()])}).strict(),hd,`POST`,`/projects/{projectId}/background`,`admin`,`Upload an image shown behind the project's ticket views, or remove it.`),update_project:$(G.extend({...W,expectedVersion:H,visibility:N([`workspace`,`private`]).optional(),publicReadEnabled:A().optional(),name:U.max(120),description:E().max(5e3),key:Vu.optional()}).strict(),hd,`PATCH`,`/projects/{projectId}`,`admin`,"Update project details. A new `key` re-keys every ticket of the project; the previous prefix stays reserved for the project, and the project and every key issued under it keep resolving. `publicReadEnabled` shares or stops sharing the project's read-only public view (see the public operations)."),move_project:$(G.extend({...W,expectedVersion:H,...zu}).strict().refine(Bu,`Name one neighbor: before or after`).refine(e=>e.before??e.after,`Name a neighbor: before or after`),hd,`POST`,`/projects/{projectId}/move`,`admin`,`Place a project directly before or after another accessible project of its workspace in the shared project order.`),archive_project:$(G.extend({...W,expectedVersion:H,archived:A()}).strict(),hd,`POST`,`/projects/{projectId}/archive`,`admin`,"Archive a project, or restore it with `archived: false`. An archived project keeps its tickets and history but leaves default project lists, search, My work, calendar feeds, public links, reminders, and agent queues, and its tickets and settings are read only. Fails with `claim_conflict` while any ticket is claimed."),get_project_impact:$(G.extend({workspaceId:O().optional()}),_d,`GET`,`/projects/{projectId}/impact`,`admin`,"Preview what deleting the project removes, or with `workspaceId`, what moving it to that workspace changes: who loses or gains access, labels copied or merged, follows and invitations dropped, and blockers such as claimed tickets."),transfer_project:$(G.extend({...W,expectedVersion:H,workspaceId:O()}).strict(),hd,`POST`,`/projects/{projectId}/transfer`,`admin`,"Move a project with its tickets, keys, and links to another workspace. Requires administration of both workspaces and applies the reconciliation `get_project_impact` previews in one transaction; blockers fail with their code."),delete_project:$(G.extend({...W,expectedVersion:H,confirmKey:E().max(20)}).strict(),Z,`DELETE`,`/projects/{projectId}`,`admin`,"Permanently delete a project's tickets, comments, attachments, labels, feeds, and destinations. `confirmKey` must repeat the project prefix. Fails with `claim_conflict` while any ticket is claimed. The prefix stays reserved and the activity history and deletion events are kept."),export_project:$(G,op,`GET`,`/projects/{projectId}/export`,`read`,"Export the project's tickets, archived ones included, as a versioned `kanvil.tickets` bundle: workflow states, custom fields, labels, relationships, comments, evidence, and links, with the people they name. Records reference each other by source ID. `completeness.omitted` counts what the bundle leaves out, such as attachments and activity history."),preview_import:$(M({...W,workspaceId:O(),key:Vu,name:U.max(120),visibility:N([`workspace`,`private`]).default(`private`),bundle:sp}).strict(),up,`POST`,`/workspaces/{workspaceId}/imports`,`write`,"Stage a `kanvil.tickets` bundle for import into a new project of the workspace and check it without writing tickets: references, workflow, custom field values, dependency cycles, and the prefix. People are matched by email to accounts that can open the new project. The run holds the issues found; errors block `start_import`. Signed-in accounts only; an unstarted run expires after 24 hours."),list_import_source_projects:$(M({workspaceId:O(),source:bp}).strict(),j(xp),`POST`,`/workspaces/{workspaceId}/import-sources/projects`,`write`,"Connect to Linear, Jira, Trello, Plane, PLANKA, or Kaneo with the given credentials and list the teams, projects, or boards they can read, for `preview_source_import`. Only reads the source and writes nothing; the credentials serve this request alone. Signed-in accounts only."),preview_source_import:$(M({...W,workspaceId:O(),key:Vu,name:U.max(120),visibility:N([`workspace`,`private`]).default(`private`),source:bp,sourceProject:E().trim().min(1).max(200),includeComments:A().default(!0)}).strict(),up,`POST`,`/workspaces/{workspaceId}/imports/source`,`write`,"Read a Linear team, a Jira, Plane, or Kaneo project, or a Trello or PLANKA board with the given credentials, translate it into a `kanvil.tickets` bundle, and stage it like `preview_import`: workflow, issues with parents, priorities, labels, assignees, dates, checklists, relationships, and optionally comments. What the source holds that Kanvil cannot, such as cycles, estimates, and attachments, is listed among the warnings. Only reads the source, before the write; the credentials serve this request alone and are never stored, and a retry with the same `requestId` returns the staged run without reading the source again. Start the run with `start_import`. Signed-in accounts only."),list_imports:$(M({workspaceId:O()}),j(up),`GET`,`/workspaces/{workspaceId}/imports`,`read`,`List your 20 most recently started imports into the workspace with their progress. Previews that were never started are left out.`),get_import:$(dp,up,`GET`,`/workspaces/{workspaceId}/imports/{importId}`,`read`,`Read one of your imports: its preview, progress, and the records that failed.`),start_import:$(dp.extend({...W,expectedVersion:H}).strict(),up,`POST`,`/workspaces/{workspaceId}/imports/{importId}/start`,`write`,`Start a previewed import without errors. The server creates the project and writes its records in the background through the regular operations, as you, resuming after a restart without duplicates. Imported writes carry import provenance on their events, notify no one, and reach no project destination.`),cancel_import:$(dp.extend({...W,expectedVersion:H}).strict(),up,`POST`,`/workspaces/{workspaceId}/imports/{importId}/cancel`,`write`,`Cancel a previewed or running import. Records already written stay in the new project.`),list_members:$(G,j(ld),`GET`,`/projects/{projectId}/members`,`read`,`List project members.`),list_project_roles:$(G,j(cd),`GET`,`/projects/{projectId}/roles`,`read`,`List the roles a project membership can hold: the seeded roles and its workspace's custom roles.`),set_member:$(G.extend({...W,email:Jo(),role:tu.nullable()}).strict(),Z,`POST`,`/projects/{projectId}/members`,`admin`,"Add or update an existing user's membership with a seeded role or a custom role of the project's workspace, or remove it with a null role. Needs `member.manage`; the role, and any role the person holds now, must grant nothing the caller lacks."),list_tickets:$(G.extend({...td.shape,...Ru,relatedTo:fu.optional(),stateId:O().optional(),scheduledFrom:V.optional(),scheduledTo:V.optional()}).superRefine($u),Sp(X),`GET`,`/projects/{projectId}/tickets`,`read`,"Search tickets with server-side filters, stable ordering, and pagination. Each property filter takes one value or a repeated list (any of them); its `Not` twin excludes values."),list_ticket_labels:$(G.extend({archived:td.shape.archived}),j(M({name:E(),count:k().int().nonnegative()})),`GET`,`/projects/{projectId}/labels`,`read`,`List distinct ticket labels and usage counts across the authorized project, independent of ticket pagination.`),list_project_labels:$(G,j(wu),`GET`,`/projects/{projectId}/labels/catalog`,`read`,"List the labels tickets in this project can use: the project's own definitions and its workspace's shared labels (`scope`), with colors and this project's ticket counts, including unused labels and archived tickets."),create_project_label:$(G.extend({...W,name:U.max(40),color:B.default(`gray`)}).strict(),gu,`POST`,`/projects/{projectId}/labels`,`admin`,`Create a reusable project label. Label names are unique within the project and cannot repeat a workspace label.`),update_project_label:$(G.extend({...W,labelId:O(),expectedVersion:H,name:U.max(40),color:B}).strict(),gu,`PATCH`,`/projects/{projectId}/labels/{labelId}`,`admin`,`Rename or recolor a project label. Renames update tickets and saved-view filters atomically.`),delete_project_label:$(G.extend({...W,labelId:O(),expectedVersion:H}).strict(),Z,`DELETE`,`/projects/{projectId}/labels/{labelId}`,`admin`,`Delete a project label and remove it from tickets and saved-view filters atomically.`),list_label_colors:$(M({}),j(M({value:iu,createdAt:V})),`GET`,`/label-colors`,`read`,`List the site-wide custom label colors, newest first. A custom color joins the list when a label is saved with it.`),remove_label_color:$(M({...W,value:iu}).strict(),Z,`POST`,`/label-colors/remove`,`write`,`Remove a custom color from the site-wide palette; instance administrators and the person who added it may do so. Labels already using it keep their color.`),list_workflow_states:$(G,j(_u.extend({count:k().int().nonnegative()})),`GET`,`/projects/{projectId}/workflow`,`read`,`List the project's workflow states in display order: by category (backlog, todo, in_progress, in_review, done, cancelled), then position. Counts include archived tickets. A ticket's status is its state's category, which open, closed, readiness, and claim rules read.`),create_workflow_state:$(G.extend({...W,name:U.max(40),category:N(z),color:B.default(`default`)}).strict(),_u,`POST`,`/projects/{projectId}/workflow`,`admin`,`Add a workflow state at the end of its category. Its slug is derived from the name once and never changes. Reuse requestId when retrying this write.`),update_workflow_state:$(G.extend({...W,stateId:O(),expectedVersion:H,name:U.max(40).optional(),color:B.optional(),category:N(z).optional(),position:k().int().min(0).max(1e3).optional()}).strict().refine(e=>e.name!==void 0||e.color!==void 0||e.category!==void 0||e.position!==void 0,{message:`Change the name, color, category, or position`}),_u,`PATCH`,`/projects/{projectId}/workflow/{stateId}`,`admin`,`Rename, recolor, recategorize, or reorder a workflow state. A category change moves the status of every ticket in the state and publishes their updates. The last state of a category cannot leave it.`),delete_workflow_state:$(G.extend({...W,stateId:O(),expectedVersion:H,reassignTo:O()}).strict(),Z,`DELETE`,`/projects/{projectId}/workflow/{stateId}`,`admin`,`Delete a workflow state after moving its tickets, archived ones included, to another state of the project, publishing their updates. The last state of a category cannot be deleted.`),list_custom_fields:$(G,j(Au.extend({count:k().int().nonnegative()})),`GET`,`/projects/{projectId}/custom-fields`,`read`,`List the project's custom field definitions in display order, each with how many tickets hold a value, including archived tickets.`),create_custom_field:$(G.extend({...W,name:Au.shape.name,type:Au.shape.type,options:ju.default([]),required:A().default(!1),defaultValue:Du.nullable().default(null)}).strict(),Au,`POST`,`/projects/{projectId}/custom-fields`,`admin`,`Define a typed ticket field: text, number, date (YYYY-MM-DD), checkbox, select, or multi-select with options. Names are unique within the project.`),update_custom_field:$(G.extend({...W,fieldId:O(),expectedVersion:H,name:Au.shape.name.optional(),options:ju.optional(),required:A().optional(),defaultValue:Du.nullable().optional(),reassign:Fs(O(),O().nullable()).optional()}).strict().refine(e=>[e.name,e.options,e.required,e.defaultValue].some(e=>e!==void 0),`Change the name, options, required rule, or default`),Au,`PATCH`,`/projects/{projectId}/custom-fields/{fieldId}`,`admin`,"Rename a custom field, edit its options, or change its required rule or default at its current version. The type never changes. Removing an option that tickets or the default still use requires `reassign` to map it to a remaining option or to null; affected tickets and saved-view filters update atomically."),move_custom_field:$(G.extend({...W,fieldId:O(),expectedVersion:H,...zu}).strict().refine(Bu,`Name one neighbor: before or after`).refine(e=>e.before??e.after,`Name a neighbor: before or after`),Au,`POST`,`/projects/{projectId}/custom-fields/{fieldId}/move`,`admin`,`Place a custom field directly before or after another field of the project in display order.`),delete_custom_field:$(G.extend({...W,fieldId:O(),expectedVersion:H}).strict(),Z,`DELETE`,`/projects/{projectId}/custom-fields/{fieldId}`,`admin`,`Delete a custom field and remove its values from tickets and saved-view filters atomically.`),get_ticket:$(K,M({ticket:X,readiness:Cd,claim:wd.nullable(),subscribed:A(),canReleaseClaim:A()}),`GET`,`/projects/{projectId}/tickets/{ticketId}`,`read`,`Read a ticket by ID or key, with readiness and ownership.`),create_ticket:$(G.extend({...W,title:ad.shape.title,description:E().max(1e5).default(``),acceptanceCriteria:E().max(5e4).default(``),status:N(z).optional(),stateId:O().optional(),priority:N(Gl).default(`medium`),kind:N(Kl).default(`feature`),difficulty:N(ql).nullable().default(null),startAt:pu.nullable().default(null),dueAt:pu.nullable().default(null),labels:mu.default([]),scopes:mu.default([]),assigneeId:E().nullable().default(null),parentId:O().nullable().default(null),automationReady:A().default(!1),holdReason:E().trim().max(2e3).nullable().default(null),archived:A().default(!1),uploads:j(O()).max(50).default([]),customFields:Ou.default({})}).strict(),X,`POST`,`/projects/{projectId}/tickets`,`write`,"Create a ticket. `customFields` maps field IDs from list_custom_fields to values; omitted fields take their default, and a required field must end with a value. `uploads` lists your staged inline uploads in this project; they become its attachments in the same write, or nothing is created. Reuse requestId when retrying this write."),duplicate_ticket:$(K.extend(W).strict(),X,`POST`,`/projects/{projectId}/tickets/{ticketId}/duplicate`,`write`,`Copy a ticket into a new To do ticket in the same project, linked to the original by a clones relationship. Copies requirements, properties, labels, scopes, and parent; resets agent readiness and never copies claims, comments, evidence, attachments, or children. Reuse requestId when retrying this write.`),update_ticket:$(K.extend({...W,expectedVersion:H,changes:od,claimId:O().optional()}).strict(),X,`PATCH`,`/projects/{projectId}/tickets/{ticketId}`,`write`,"Update a ticket with optimistic concurrency. Worker completion requires its active claim. `changes.customFields` sets only the named fields; null clears one."),move_ticket:$(K.extend({...W,expectedVersion:H,...zu,status:N(z).optional(),stateId:O().optional(),claimId:O().optional()}).strict().refine(Bu,`Name one neighbor: before or after`).refine(e=>e.before??e.after??e.status??e.stateId,`Name a neighbor, a status or state, or both`),X,`POST`,`/projects/{projectId}/tickets/{ticketId}/move`,`write`,"Place a ticket directly before or after another ticket of the project in the manual order (`sort: manual`), optionally changing its status or workflow state in the same versioned write. Only the moved ticket changes place; reorders alone notify no one."),check_ticket_relocation:$(K.extend({destinationProjectId:fu}).strict(),M({destination:Gu,states:j(_u),stateId:O(),blockers:j(Wu)}),`GET`,`/projects/{projectId}/tickets/{ticketId}/relocation`,`write`,`Check a move to another project of the same workspace before making it: the destination's workflow states and anything that keeps the ticket where it is. Both projects require write access; a destination you cannot write to reads as not found.`),relocate_ticket:$(K.extend({...W,expectedVersion:H,destinationProjectId:fu,status:N(z).optional(),stateId:O().optional()}).strict(),X,`POST`,`/projects/{projectId}/tickets/{ticketId}/relocate`,`write`,"Move a ticket to another project of the same workspace. It keeps its ID, comments, attachments, evidence, links, and followers, takes the destination's next number as its new key, and its previous key keeps resolving. A claim, a parent or children, relationships, an assignee without destination access, custom field values, or a destination field that is required without a default block the move with `relocation_blocked`; the ticket takes the destination's custom field defaults. Activity before the move stays with the original project. Reuse requestId when retrying this write."),resolve_ticket:$(M({ticketId:fu}).strict(),M({ticket:X,project:Gu}),`GET`,`/tickets/resolve`,`read`,`Find a ticket by ID, current key, or any earlier key from a prefix change or a move, across every accessible project. An unknown or inaccessible ticket reads as not found.`),bulk_update_tickets:$(G.extend({...W,tickets:ed,changes:od}).strict(),j(X),`POST`,`/projects/{projectId}/tickets/bulk`,`write`,`Apply an atomic bulk edit using each ticket's current version.`),delete_ticket:$(K.extend({...W,expectedVersion:H}).strict(),Z,`DELETE`,`/projects/{projectId}/tickets/{ticketId}`,`admin`,`Delete a ticket and publish a deletion event.`),bulk_delete_tickets:$(G.extend({...W,tickets:ed}).strict(),Z,`POST`,`/projects/{projectId}/tickets/bulk-delete`,`admin`,`Delete up to 100 tickets atomically. Every ticket's version and ownership is checked before anything is deleted; children outside the selection lose their parent. Reuse requestId when retrying this write.`),search_tickets:$(M({q:E().trim().min(1).max(200),workspaceId:O().optional(),limit:lc().int().min(1).max(50).default(20)}).strict(),M({items:j(M({ticket:X,project:Gu}))}),`GET`,`/tickets/search`,`read`,`Search unarchived tickets by key or text across every accessible project, optionally within one workspace.`),search_workspace:$(M({q:E().trim().min(1).max(200),workspaceId:O().optional(),type:N(Qd).optional(),...Xu,limit:lc().int().min(1).max(50).default(20),offset:lc().int().min(0).max(1e3).default(0)}).strict().superRefine($u),M({items:j($d),total:k().int().nonnegative(),counts:Fs(N(Qd),k().int().nonnegative()),engine:N([`postgres`,`index`]),indexing:A()}),`GET`,`/search`,`read`,`Search accessible tickets, projects, comments, and activity by text or ticket key, optionally within one workspace or one result type. Property filters restrict results to matching tickets. Results order by exact key match, then type, then recency.`),list_my_work:$(M({workspaceId:O().optional(),q:td.shape.q,sort:td.shape.sort,order:td.shape.order,activity:lc().int().min(0).max(50).default(0),...Ru}).strict(),Sp(X).extend({activity:j(Zd).default([])}),`GET`,`/my-work`,`read`,"List open, unarchived tickets assigned to the current identity across every accessible project, optionally within one workspace, with the most recent accessible activity when `activity` is set."),list_eligible_tickets:$(G.extend(Ru),Sp(M({ticket:X,readiness:Cd})),`GET`,`/projects/{projectId}/eligibility`,`read`,`Inspect eligibility and explicit blocking reasons for open tickets.`),list_relations:$(K,j(Td),`GET`,`/projects/{projectId}/tickets/{ticketId}/relations`,`read`,`List incoming and outgoing ticket relationships.`),add_relation:$(K.extend({...W,targetId:O(),type:Td.shape.type,direction:Ed.optional()}).strict(),Td,`POST`,`/projects/{projectId}/tickets/{ticketId}/relations`,`write`,`Relate tickets while rejecting dependency cycles.`),remove_relation:$(G.extend({...W,relationId:O()}).strict(),Z,`DELETE`,`/projects/{projectId}/relations/{relationId}`,`write`,`Remove a ticket relationship.`),list_comments:$(K.extend(Ru),Sp(jd),`GET`,`/projects/{projectId}/tickets/{ticketId}/comments`,`read`,`Read ticket discussion.`),add_comment:$(K.extend({...W,body:U.max(5e4)}).strict(),jd,`POST`,`/projects/{projectId}/tickets/{ticketId}/comments`,`write`,"Add a comment with authenticated attribution. Mention a project member with `[@Name](mention:<user id>)` from list_members; members who can read the project are notified."),update_comment:$(G.extend({...W,commentId:O(),expectedVersion:H,body:U.max(5e4)}).strict(),jd,`PATCH`,`/projects/{projectId}/comments/{commentId}`,`write`,`Edit your own comment or moderate as a project administrator. Only mentions the edit adds are notified.`),delete_comment:$(G.extend({...W,commentId:O(),expectedVersion:H}).strict(),Z,`DELETE`,`/projects/{projectId}/comments/{commentId}`,`write`,`Delete your own comment or moderate as a project administrator.`),list_activity:$(K.extend(Ru),Sp(Zd),`GET`,`/projects/{projectId}/tickets/{ticketId}/activity`,`read`,`Read durable ticket activity.`),upload_attachment:$(K.extend({...W,...Cp}).strict(),Pd,`POST`,`/projects/{projectId}/tickets/{ticketId}/attachments`,`write`,`Upload up to 10 MB of base64-encoded bytes. The original filename is metadata, never a filesystem path.`),stage_upload:$(G.extend({...W,...Cp}).strict(),Fd,`POST`,`/projects/{projectId}/uploads`,`write`,`Stage up to 10 MB of base64-encoded bytes for a ticket that does not exist yet. Only you can read it, at its attachment content address, until create_ticket claims it; unclaimed uploads expire after 24 hours.`),discard_upload:$(G.extend({...W,uploadId:O()}).strict(),Z,`DELETE`,`/projects/{projectId}/uploads/{uploadId}`,`write`,`Delete one of your unclaimed staged uploads and its bytes.`),list_attachments:$(K,j(Pd),`GET`,`/projects/{projectId}/tickets/{ticketId}/attachments`,`read`,`List authorized attachment metadata.`),delete_attachment:$(G.extend({...W,attachmentId:O()}).strict(),Z,`DELETE`,`/projects/{projectId}/attachments/{attachmentId}`,`write`,`Remove an attachment.`),list_evidence:$(K,j(Vd),`GET`,`/projects/{projectId}/tickets/{ticketId}/evidence`,`read`,`Read attributed evidence. Outcomes are reports from the submitting identity.`),add_evidence:$(K.extend({...W,...Rd.shape,claimId:O().optional()}).strict(),Vd,`POST`,`/projects/{projectId}/tickets/{ticketId}/evidence`,`write`,`Attach evidence with its commit and provenance.`),list_time_entries:$(K.extend(Ru),Sp(Ud),`GET`,`/projects/{projectId}/tickets/{ticketId}/time-entries`,`read`,`List observed time entries, newest first. Running entries have null endAt and durationMs.`),get_time_entry:$(K.extend({timeEntryId:O()}),Ud,`GET`,`/projects/{projectId}/tickets/{ticketId}/time-entries/{timeEntryId}`,`read`,`Read one attributed time entry within its current ticket and project.`),create_time_entry:$(K.extend({...W,...Hd.shape,claimId:O().optional()}).strict(),Ud,`POST`,`/projects/{projectId}/tickets/{ticketId}/time-entries`,`write`,`Record observed startAt and optional endAt timestamps. Duration is derived in milliseconds; at most one running entry per actor and ticket. Reuse requestId after interruption.`),update_time_entry:$(K.extend({...W,timeEntryId:O(),expectedVersion:H,claimId:O().optional(),startAt:Hd.shape.startAt.optional(),endAt:Hd.shape.endAt.unwrap().optional(),note:Hd.shape.note.unwrap().optional()}).strict().refine(e=>e.startAt!==void 0||e.endAt!==void 0||e.note!==void 0,{message:`Change the start, end, or note`}),Ud,`PATCH`,`/projects/{projectId}/tickets/{ticketId}/time-entries/{timeEntryId}`,`write`,`Edit your own time entry at its current version; project administrators may edit any. Omitting endAt keeps it, null reopens it. Original actor attribution never changes.`),delete_time_entry:$(K.extend({...W,timeEntryId:O(),expectedVersion:H,claimId:O().optional()}).strict(),Z,`DELETE`,`/projects/{projectId}/tickets/{ticketId}/time-entries/{timeEntryId}`,`write`,`Delete your own time entry at its current version; project administrators may delete any. Reuse requestId when retrying.`),list_resources:$(K,j(Yd),`GET`,`/projects/{projectId}/tickets/{ticketId}/resources`,`read`,`List the ticket's editable links. remoteState is null unless a configured connection confirmed it.`),add_resource:$(K.extend({...W,...Gd.shape,claimId:O().optional()}).strict(),Yd,`POST`,`/projects/{projectId}/tickets/{ticketId}/resources`,`write`,`Link an HTTP or HTTPS resource with an optional title. Reuse requestId when retrying this write.`),update_resource:$(G.extend({...W,resourceId:O(),expectedVersion:H,claimId:O().optional(),url:Ld.optional(),title:Wd.optional()}).strict().refine(e=>e.url!==void 0||e.title!==void 0,{message:`Change the URL or the title`}),Yd,`PATCH`,`/projects/{projectId}/resources/{resourceId}`,`write`,`Edit a link's URL or title at its current version. Changing the URL clears confirmed remote state.`),delete_resource:$(G.extend({...W,resourceId:O(),expectedVersion:H,claimId:O().optional()}).strict(),Z,`DELETE`,`/projects/{projectId}/resources/{resourceId}`,`write`,`Remove a link at its current version.`),claim_ticket:$(K.extend({...W,workerId:U.max(200),expectedVersion:H,leaseSeconds:k().int().min(30).max(3600).default(300)}).strict(),wd,`POST`,`/projects/{projectId}/tickets/{ticketId}/claim`,`claim`,`Atomically claim ready work. Expired claims require explicit recovery.`),renew_claim:$(K.extend({...W,claimId:O(),leaseSeconds:k().int().min(30).max(3600).default(300)}).strict(),wd,`POST`,`/projects/{projectId}/tickets/{ticketId}/claim/renew`,`claim`,`Renew the caller's unexpired claim.`),release_claim:$(K.extend({...W,claimId:O()}).strict(),Z,`POST`,`/projects/{projectId}/tickets/{ticketId}/claim/release`,`claim`,`Release the caller's claim.`),recover_claim:$(K.extend({...W,claimId:O(),reason:U.min(10).max(2e3),confirmedStopped:P(!0)}).strict(),Z,`POST`,`/projects/{projectId}/tickets/{ticketId}/claim/recover`,`admin`,`Recover an expired claim only after confirming the worker stopped.`),set_subscription:$(K.extend({...W,enabled:A()}).strict(),Z,`POST`,`/projects/{projectId}/tickets/{ticketId}/subscription`,`read`,`Subscribe to ticket updates or unsubscribe.`),list_calendar_feeds:$(G,j(Xd),`GET`,`/projects/{projectId}/calendar-feeds`,`admin`,`List the project's calendar feeds. Tokens are never returned after creation.`),create_calendar_feed:$(G.extend({name:U.max(80),labels:mu.default([]),timeZone:E().min(1).max(64)}).strict(),Xd.extend({token:E(),path:E()}),`POST`,`/projects/{projectId}/calendar-feeds`,`admin`,`Share the project's open, unarchived tickets that have a start or due date, optionally only those with any of the given labels, as an iCalendar feed of all-day events in the given IANA time zone. Anyone with the returned path can read the feed's ticket keys, titles, statuses, and dates; the token is shown only in this response.`),revoke_calendar_feed:$(G.extend({...W,feedId:O()}).strict(),Z,`DELETE`,`/projects/{projectId}/calendar-feeds/{feedId}`,`admin`,`Revoke a calendar feed. Its link stops working immediately.`),list_views:$(G,j(M({id:O(),name:E(),filters:td})),`GET`,`/projects/{projectId}/views`,`read`,`List your saved project views.`),save_view:$(G.extend({...W,name:U.max(80),filters:td}).strict(),M({id:O()}),`POST`,`/projects/{projectId}/views`,`read`,`Save a personal filtered view.`),delete_view:$(G.extend({...W,viewId:O()}).strict(),Z,`DELETE`,`/projects/{projectId}/views/{viewId}`,`read`,`Delete your own saved view.`),list_notification_channels:$(M({}),j(jf),`GET`,`/notification-channels`,`read`,`List your notification channels with masked settings, routing, and delivery health.`),create_notification_channel:$(M({...W,name:U.max(80),settings:Cf,routes:Ef.default([]),paused:A().default(!1)}).strict(),jf,`POST`,`/notification-channels`,`read`,`Add an email, ntfy, Gotify, or signed webhook channel for your notifications. Signed-in sessions only. A channel sends nothing until a workspace route selects it.`),update_notification_channel:$(M({...W,channelId:O(),expectedVersion:H,name:U.max(80).optional(),settings:Cf.optional(),routes:Ef.optional(),paused:A().optional()}).strict(),jf,`PATCH`,`/notification-channels/{channelId}`,`read`,`Edit, pause, or reroute your notification channel. Omitted secrets keep their saved value; pausing and routing changes keep the saved configuration.`),delete_notification_channel:$(M({...W,channelId:O(),expectedVersion:H}).strict(),Z,`DELETE`,`/notification-channels/{channelId}`,`read`,`Disconnect your notification channel and discard its queued deliveries.`),test_notification_channel:$(M({...W,channelId:O()}).strict(),Z,`POST`,`/notification-channels/{channelId}/test`,`read`,`Queue a test message to your notification channel; its health shows the result.`),list_project_destinations:$(G,j(Mf),`GET`,`/projects/{projectId}/destinations`,`admin`,`List the project's outgoing webhook and chat destinations with masked settings and delivery health.`),create_project_destination:$(G.extend({...W,name:U.max(80),settings:Cf,events:j(N(Df)).max(Df.length),paused:A().default(!1)}).strict(),Mf,`POST`,`/projects/{projectId}/destinations`,`admin`,`Send the project's ticket activity to a signed webhook, Slack, Discord, Mattermost, or Telegram.`),update_project_destination:$(G.extend({...W,destinationId:O(),expectedVersion:H,name:U.max(80).optional(),settings:Cf.optional(),events:j(N(Df)).max(Df.length).optional(),paused:A().optional()}).strict(),Mf,`PATCH`,`/projects/{projectId}/destinations/{destinationId}`,`admin`,`Edit, pause, or change the events of a project destination. Omitted secrets keep their saved value.`),delete_project_destination:$(G.extend({...W,destinationId:O(),expectedVersion:H}).strict(),Z,`DELETE`,`/projects/{projectId}/destinations/{destinationId}`,`admin`,`Remove a project destination and discard its queued deliveries.`),test_project_destination:$(G.extend({...W,destinationId:O()}).strict(),Z,`POST`,`/projects/{projectId}/destinations/{destinationId}/test`,`admin`,`Queue a test message to a project destination; its health shows the result.`),list_repository_connections:$(G,j(Zf),`GET`,`/projects/{projectId}/repositories`,`admin`,`List the project's connected repositories with their webhook URL, mapped transitions, access check, and latest webhook. Secrets are never returned.`),create_repository_connection:$(G.extend({...W,provider:N(Nf).default(`github`),repository:Bf,baseUrl:Vf.optional(),token:Hf,webhookSecret:Hf,commentOnLink:A().default(!1),transitions:Uf.default({}),paused:A().default(!1)}).strict(),Zf,`POST`,`/projects/{projectId}/repositories`,`admin`,"Connect a GitHub, Gitea, or GitLab repository with an access token and a webhook secret, both write-only. Gitea and GitLab take the instance `baseUrl` (GitLab defaults to gitlab.com). Queues an access check; `health` shows its result."),update_repository_connection:$(G.extend({...W,connectionId:O(),expectedVersion:H,repository:Bf.optional(),baseUrl:Vf.optional(),token:Hf.optional(),webhookSecret:Hf.optional(),commentOnLink:A().optional(),transitions:Uf.optional(),paused:A().optional()}).strict(),Zf,`PATCH`,`/projects/{projectId}/repositories/{connectionId}`,`admin`,`Reconnect, pause, or change the transitions of a repository connection. Omitted secrets keep their saved value; a new repository, base URL, or token queues another access check.`),delete_repository_connection:$(G.extend({...W,connectionId:O(),expectedVersion:H}).strict(),Z,`DELETE`,`/projects/{projectId}/repositories/{connectionId}`,`admin`,`Disconnect a repository. Its webhook stops being accepted at once; links it verified stay on their tickets.`),verify_repository_connection:$(G.extend({...W,connectionId:O()}).strict(),Z,`POST`,`/projects/{projectId}/repositories/{connectionId}/verify`,`admin`,"Queue an access check of the saved token against the repository; `health` shows the result."),preview_repository_sync:$(G.extend({...W,connectionId:O(),outbound:Wf,inbound:Wf}).strict(),Xf,`POST`,`/projects/{projectId}/repositories/{connectionId}/sync/preview`,`admin`,`Count what applying these issue sync rules would do without changing anything. Issues import when the host next reports them, so imports are not counted.`),apply_repository_sync:$(G.extend({...W,connectionId:O(),expectedVersion:H,outbound:Wf,inbound:Wf,fingerprint:E().max(100)}).strict(),Zf,`POST`,`/projects/{projectId}/repositories/{connectionId}/sync`,`admin`,"Save issue sync rules and apply the previewed effects: queue new issues for exported tickets, pause links that no longer qualify, and hold requalifying links for review. Refused with `version_conflict` when the preview's `fingerprint` is stale."),list_issue_links:$(G.extend({connectionId:O()}),j(qf),`GET`,`/projects/{projectId}/repositories/{connectionId}/issue-links`,`admin`,`List the tickets this connection synchronizes with issues, with each link's state.`),compare_issue_link:$(G.extend({linkId:O()}),Yf,`GET`,`/projects/{projectId}/issue-links/{linkId}`,`admin`,`Compare a linked ticket's title, description, and open state with its issue as the host last reported it.`),reconcile_issue_link:$(G.extend({...W,linkId:O(),expectedVersion:H,ticketVersion:H,resolution:N([`kanvil`,`remote`,`unlink`])}).strict(),Z,`POST`,`/projects/{projectId}/issue-links/{linkId}/reconcile`,`admin`,"Resume a paused, conflicting, or unconfirmed link from the side chosen as authoritative, or unlink it. `kanvil` writes the ticket to the issue (or creates the issue again); `remote` writes the issue to the ticket. Both versions come from `compare_issue_link`; a change on either side since then is refused with `version_conflict`. Unlinking keeps the ticket and the issue.")},Tp=E().overwrite(e=>e.replaceAll(/\[(@(?:\\.|[^\]\\])*)\]\(mention:[^)\s]*\)/g,`$1`)),Ep=X.pick({id:!0,projectId:!0,key:!0,number:!0,title:!0,description:!0,acceptanceCriteria:!0,status:!0,stateId:!0,priority:!0,kind:!0,difficulty:!0,labels:!0,scopes:!0,parentId:!0,startAt:!0,dueAt:!0,createdAt:!0,updatedAt:!0}).extend({description:Tp,acceptanceCriteria:Tp}),Dp=Ep.pick({id:!0,key:!0,title:!0,status:!0,stateId:!0}),Op=hd.pick({id:!0,key:!0,name:!0,iconName:!0,iconColor:!0}).extend({description:Tp,states:j(_u.pick({id:!0,name:!0,category:!0,color:!0,position:!0})),labels:j(M({name:E(),color:B}))}),kp=M({projectId:O()}),Ap=(e,t,n,r)=>({input:e,output:t,method:`GET`,path:n,description:r}),jp={get_public_project:Ap(kp,Op,`/projects/{projectId}`,`Read a shared project's name, description, icon, workflow states, and the colors of labels its unarchived tickets use.`),list_public_tickets:Ap(kp.extend(Ru).strict(),Sp(Ep),`/projects/{projectId}/tickets`,`List a shared project's unarchived tickets by status, then number.`),get_public_ticket:Ap(kp.extend({ticketId:fu}).strict(),M({ticket:Ep,parent:Dp.nullable(),children:j(Dp),relations:j(Td.omit({projectId:!0}))}),`/projects/{projectId}/tickets/{ticketId}`,`Read a shared project's unarchived ticket by ID or key with its unarchived parent, children, and related tickets.`)};function Mp(e,t){return jp[e].output.parse(t)}var Np=M({error:M({code:E(),message:E(),details:xs().optional()})}),Pp=M({status:k().int().min(400).max(599),code:E(),message:E()}),Fp=class extends Error{status;code;details;constructor(e,t,n,r){super(n),this.name=`ApiError`,this.status=e,this.code=t,this.details=r}};function Ip(e,t){return wp[e].output.parse(t)}function Lp(e){if(e instanceof Error&&/fetch failed|failed to fetch|network request failed|could not connect to the server/i.test(e.message))return L(`common.error.network`);if(e instanceof To)return e.issues.slice(0,3).map(e=>`${e.path.join(`.`)||L(`common.error.input`)}: ${e.message}`).join(`; `);if(e instanceof Fp&&Array.isArray(e.details)){let t=j(M({path:E(),message:E()})).safeParse(e.details);if(t.success)return t.data.slice(0,3).map(e=>`${e.path||L(`common.error.input`)}: ${e.message}`).join(`; `)}return e instanceof Fp&&Tl()!==`en-US`&&zp(e.code)?L(`common.error.code.${e.code}`):e instanceof Error?e.message:typeof e==`string`?e:L(`common.error.fallback`)}var Rp=[`unauthorized`,`session_required`,`account_disabled`,`forbidden`,`insufficient_scope`,`workspace_scope_required`,`invalid_origin`,`not_found`,`version_conflict`,`claim_conflict`,`idempotency_conflict`,`project_archived`,`rate_limited`,`snapshot_required`,`request_failed`],zp=e=>Rp.some(t=>t===e);function Bp(e){return Ll(e,{dateStyle:`medium`,timeStyle:`short`})}var Vp=e((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),Hp=e(((e,t)=>{t.exports=Vp()}));function Up(){}function Wp(){}export{Kf as $,Qu as $t,pu as A,E as An,lf as At,Zu as B,cu as Bt,yf as C,j as Cn,Gl as Ct,_f as D,k as Dn,Uu as Dt,Df as E,P as En,jp as Et,Rd as F,Lf as Ft,su as G,nd as Gt,Nu as H,eu as Ht,zd as I,Ff as It,bp as J,Pp as Jt,mp as K,uu as Kt,Bd as L,Kd as Lt,Lp as M,O as Mn,Rf as Mt,Np as N,Pe as Nn,Pf as Nt,ql as O,M as On,Od as Ot,Zd as P,Nf as Pt,au as Q,sp as Qt,qu as R,Yl as Rt,rd as S,N as Sn,bu as St,Of as T,Jo as Tn,ru as Tt,np as U,tf as Ut,Yu as V,Qd as Vt,Bp as W,xd as Wt,rf as X,ad as Xt,lp as Y,op as Yt,ou as Z,td as Zt,Iu as _,yc as _n,Mp as _t,lu as a,zl as an,Nd as at,Eu as b,lc as bn,Ql as bt,nu as c,wl as cn,sf as ct,Sd as d,Sl as dn,mf as dt,Tl as en,gp as et,Wl as f,vl as fn,pf as ft,Fu as g,bc as gn,Ip as gt,Qf as h,Zc as hn,wp as ht,Fp as i,Ll as in,ld as it,id as j,xs as jn,cf as jt,Zl as k,Fs as kn,Ad as kt,gf as l,R as ln,ff as lt,$f as m,L as mn,Z as mt,Wp as n,Il as nn,Kl as nt,Id as o,Rl as on,Md as ot,ep as p,Cl as pn,df as pt,fp as q,z as qt,Hp as r,Hl as rn,yd as rt,nf as s,Vl as sn,of as st,Up as t,Al as tn,Xl as tt,wf as u,xl as un,hf as ut,Lu as v,xc as vn,kd as vt,bf as w,A as wn,du as wt,Tu as x,cc as xn,vp as xt,Pu as y,fc as yn,$l as yt,Ku as z,Jl as zt};
|