@shapio/cms 0.5.5 → 0.5.6
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/dist/admin/assets/{AssetTile-CaYPqR_F.js → AssetTile-_qRYsivK.js} +2 -2
- package/dist/admin/assets/{AssetTile-CaYPqR_F.js.map → AssetTile-_qRYsivK.js.map} +1 -1
- package/dist/admin/assets/{AssistError-drmpXSbS.js → AssistError-CMXQWiQo.js} +2 -2
- package/dist/admin/assets/{AssistError-drmpXSbS.js.map → AssistError-CMXQWiQo.js.map} +1 -1
- package/dist/admin/assets/{BlockMenuItems-D-jZ0oaU.js → BlockMenuItems-WIrbyv1a.js} +2 -2
- package/dist/admin/assets/{BlockMenuItems-D-jZ0oaU.js.map → BlockMenuItems-WIrbyv1a.js.map} +1 -1
- package/dist/admin/assets/{Body-Gn_z2KPN.js → Body-BYc1IVsQ.js} +2 -2
- package/dist/admin/assets/{Body-Gn_z2KPN.js.map → Body-BYc1IVsQ.js.map} +1 -1
- package/dist/admin/assets/Builder-CwHpRhZN.js +2 -0
- package/dist/admin/assets/Builder-CwHpRhZN.js.map +1 -0
- package/dist/admin/assets/{CodeEditor-CzRU6och.js → CodeEditor-NMvrWgxT.js} +2 -2
- package/dist/admin/assets/{CodeEditor-CzRU6och.js.map → CodeEditor-NMvrWgxT.js.map} +1 -1
- package/dist/admin/assets/{ConfirmDialog-DZRJfdvH.js → ConfirmDialog-Rd6WDt6q.js} +2 -2
- package/dist/admin/assets/{ConfirmDialog-DZRJfdvH.js.map → ConfirmDialog-Rd6WDt6q.js.map} +1 -1
- package/dist/admin/assets/{CopyButton-h4HYhnYp.js → CopyButton-B0RuxynJ.js} +2 -2
- package/dist/admin/assets/{CopyButton-h4HYhnYp.js.map → CopyButton-B0RuxynJ.js.map} +1 -1
- package/dist/admin/assets/{CursorPager-H4SpVYw7.js → CursorPager-CQZsKNxR.js} +2 -2
- package/dist/admin/assets/{CursorPager-H4SpVYw7.js.map → CursorPager-CQZsKNxR.js.map} +1 -1
- package/dist/admin/assets/{FocalPoint-CSeKI4Iw.js → FocalPoint-BYu2fOTb.js} +2 -2
- package/dist/admin/assets/{FocalPoint-CSeKI4Iw.js.map → FocalPoint-BYu2fOTb.js.map} +1 -1
- package/dist/admin/assets/{Form-DF_YmR1G.js → Form-CiZUsLPp.js} +2 -2
- package/dist/admin/assets/{Form-DF_YmR1G.js.map → Form-CiZUsLPp.js.map} +1 -1
- package/dist/admin/assets/{FormCheckboxGroup-V3IKrvzc.js → FormCheckboxGroup-Bz8KERs1.js} +2 -2
- package/dist/admin/assets/{FormCheckboxGroup-V3IKrvzc.js.map → FormCheckboxGroup-Bz8KERs1.js.map} +1 -1
- package/dist/admin/assets/{FormRadioGroup-DIv-MYgn.js → FormRadioGroup-c-wyx7dq.js} +2 -2
- package/dist/admin/assets/{FormRadioGroup-DIv-MYgn.js.map → FormRadioGroup-c-wyx7dq.js.map} +1 -1
- package/dist/admin/assets/{FormSelectField-CUhaPIMY.js → FormSelectField-ijG9qPpb.js} +2 -2
- package/dist/admin/assets/{FormSelectField-CUhaPIMY.js.map → FormSelectField-ijG9qPpb.js.map} +1 -1
- package/dist/admin/assets/{FormSwitchField-DW8ysyk_.js → FormSwitchField-Bp3hNpeP.js} +2 -2
- package/dist/admin/assets/{FormSwitchField-DW8ysyk_.js.map → FormSwitchField-Bp3hNpeP.js.map} +1 -1
- package/dist/admin/assets/{FormTextareaField-DbqZ-MwI.js → FormTextareaField-BSKMqHcW.js} +2 -2
- package/dist/admin/assets/{FormTextareaField-DbqZ-MwI.js.map → FormTextareaField-BSKMqHcW.js.map} +1 -1
- package/dist/admin/assets/{HintedLabel-BlLtqVVz.js → HintedLabel-BrLH4NQW.js} +2 -2
- package/dist/admin/assets/{HintedLabel-BlLtqVVz.js.map → HintedLabel-BrLH4NQW.js.map} +1 -1
- package/dist/admin/assets/{InfoHint-bYMd_t0J.js → InfoHint-Dyzyf59c.js} +2 -2
- package/dist/admin/assets/{InfoHint-bYMd_t0J.js.map → InfoHint-Dyzyf59c.js.map} +1 -1
- package/dist/admin/assets/{InsertMenuItem-D2HGERzb.js → InsertMenuItem-BvRDuXtd.js} +2 -2
- package/dist/admin/assets/{InsertMenuItem-D2HGERzb.js.map → InsertMenuItem-BvRDuXtd.js.map} +1 -1
- package/dist/admin/assets/{Match-GDx_orOH.js → Match-Bixf1ygj.js} +2 -2
- package/dist/admin/assets/{Match-GDx_orOH.js.map → Match-Bixf1ygj.js.map} +1 -1
- package/dist/admin/assets/{QueryView-UBO-U5Wo.js → QueryView--_vvV7dC.js} +2 -2
- package/dist/admin/assets/{QueryView-UBO-U5Wo.js.map → QueryView--_vvV7dC.js.map} +1 -1
- package/dist/admin/assets/{RadioTile-CJbIIV8t.js → RadioTile-BCp6auUz.js} +2 -2
- package/dist/admin/assets/{RadioTile-CJbIIV8t.js.map → RadioTile-BCp6auUz.js.map} +1 -1
- package/dist/admin/assets/{RichTextField-M7HyUhYF.js → RichTextField-fWNjndUc.js} +2 -2
- package/dist/admin/assets/{RichTextField-M7HyUhYF.js.map → RichTextField-fWNjndUc.js.map} +1 -1
- package/dist/admin/assets/{RowTitle-DoxDM1XL.js → RowTitle-B4CE8tt7.js} +2 -2
- package/dist/admin/assets/{RowTitle-DoxDM1XL.js.map → RowTitle-B4CE8tt7.js.map} +1 -1
- package/dist/admin/assets/{SecretReveal-kCkLH5jg.js → SecretReveal-BhSqdWqh.js} +2 -2
- package/dist/admin/assets/{SecretReveal-kCkLH5jg.js.map → SecretReveal-BhSqdWqh.js.map} +1 -1
- package/dist/admin/assets/{SharedGlyph-D1OMHXPf.js → SharedGlyph-71FTypoi.js} +2 -2
- package/dist/admin/assets/{SharedGlyph-D1OMHXPf.js.map → SharedGlyph-71FTypoi.js.map} +1 -1
- package/dist/admin/assets/StepList-CZJmwy9e.js +2 -0
- package/dist/admin/assets/StepList-CZJmwy9e.js.map +1 -0
- package/dist/admin/assets/Structure-Dk87778W.js +2 -0
- package/dist/admin/assets/{Structure-CO4aJZVP.js.map → Structure-Dk87778W.js.map} +1 -1
- package/dist/admin/assets/{SuggestAltButton-CbRUxD5s.js → SuggestAltButton-CxS8IR6m.js} +2 -2
- package/dist/admin/assets/{SuggestAltButton-CbRUxD5s.js.map → SuggestAltButton-CxS8IR6m.js.map} +1 -1
- package/dist/admin/assets/{Thumbnail-D1XuDElk.js → Thumbnail-BwbCNpgQ.js} +2 -2
- package/dist/admin/assets/{Thumbnail-D1XuDElk.js.map → Thumbnail-BwbCNpgQ.js.map} +1 -1
- package/dist/admin/assets/{UnsavedChangesGuard-C1n7egF6.js → UnsavedChangesGuard-C6nD55Fn.js} +2 -2
- package/dist/admin/assets/{UnsavedChangesGuard-C1n7egF6.js.map → UnsavedChangesGuard-C6nD55Fn.js.map} +1 -1
- package/dist/admin/assets/{UserAvatar-Bl32IpG_.js → UserAvatar-D7IbSpsP.js} +2 -2
- package/dist/admin/assets/{UserAvatar-Bl32IpG_.js.map → UserAvatar-D7IbSpsP.js.map} +1 -1
- package/dist/admin/assets/{badge-ydvfgE8a.js → badge-vLiQczOd.js} +2 -2
- package/dist/admin/assets/{badge-ydvfgE8a.js.map → badge-vLiQczOd.js.map} +1 -1
- package/dist/admin/assets/{changeSets-DgfCKja3.js → changeSets-D5VevASj.js} +2 -2
- package/dist/admin/assets/{changeSets-DgfCKja3.js.map → changeSets-D5VevASj.js.map} +1 -1
- package/dist/admin/assets/{constants-esJAnNTh.js → constants-CKGh8uwT.js} +2 -2
- package/dist/admin/assets/{constants-esJAnNTh.js.map → constants-CKGh8uwT.js.map} +1 -1
- package/dist/admin/assets/{content-DsMSB6Wb.js → content-Cbavyq0x.js} +3 -3
- package/dist/admin/assets/{content-DsMSB6Wb.js.map → content-Cbavyq0x.js.map} +1 -1
- package/dist/admin/assets/{contentTypes-C-AKiYu1.js → contentTypes-DzQ_0v36.js} +2 -2
- package/dist/admin/assets/{contentTypes-C-AKiYu1.js.map → contentTypes-DzQ_0v36.js.map} +1 -1
- package/dist/admin/assets/{develop-DL-2W9jv.js → develop-BDqMOEql.js} +2 -2
- package/dist/admin/assets/{develop-DL-2W9jv.js.map → develop-BDqMOEql.js.map} +1 -1
- package/dist/admin/assets/{dropdown-menu-C53v9ioW.js → dropdown-menu-CVAnm22s.js} +2 -2
- package/dist/admin/assets/{dropdown-menu-C53v9ioW.js.map → dropdown-menu-CVAnm22s.js.map} +1 -1
- package/dist/admin/assets/es2015-BKfbx3rz.js +42 -0
- package/dist/admin/assets/es2015-BKfbx3rz.js.map +1 -0
- package/dist/admin/assets/{field-W1dB_h6d.js → field-Bg-JRgsB.js} +2 -2
- package/dist/admin/assets/{field-W1dB_h6d.js.map → field-Bg-JRgsB.js.map} +1 -1
- package/dist/admin/assets/{fileRoute-DzWMBrRx.js → fileRoute-DQCI1nMN.js} +2 -2
- package/dist/admin/assets/{fileRoute-DzWMBrRx.js.map → fileRoute-DQCI1nMN.js.map} +1 -1
- package/dist/admin/assets/{followPlural-D-5ZJqJF.js → followPlural-D0bENI5E.js} +2 -2
- package/dist/admin/assets/{followPlural-D-5ZJqJF.js.map → followPlural-D0bENI5E.js.map} +1 -1
- package/dist/admin/assets/{inbox-DUqOrFEA.js → inbox-Dfy4YBZ2.js} +2 -2
- package/dist/admin/assets/{inbox-DUqOrFEA.js.map → inbox-Dfy4YBZ2.js.map} +1 -1
- package/dist/admin/assets/{index-D03RZB7e.js → index-M4TUI1dl.js} +4 -4
- package/dist/admin/assets/{index-D03RZB7e.js.map → index-M4TUI1dl.js.map} +1 -1
- package/dist/admin/assets/{labels-CHE0gg1n.js → labels-BrwwGWnv.js} +2 -2
- package/dist/admin/assets/{labels-CHE0gg1n.js.map → labels-BrwwGWnv.js.map} +1 -1
- package/dist/admin/assets/{media-BUUEsWxd.js → media-DBdx-UmR.js} +2 -2
- package/dist/admin/assets/{media-BUUEsWxd.js.map → media-DBdx-UmR.js.map} +1 -1
- package/dist/admin/assets/{network-Bolr2lmf.js → network-BpbMYp6D.js} +2 -2
- package/dist/admin/assets/{network-Bolr2lmf.js.map → network-BpbMYp6D.js.map} +1 -1
- package/dist/admin/assets/{publishing-ClNjPLQ9.js → publishing-CpSDO3M7.js} +2 -2
- package/dist/admin/assets/{publishing-ClNjPLQ9.js.map → publishing-CpSDO3M7.js.map} +1 -1
- package/dist/admin/assets/{radio-group-rFxn7cz2.js → radio-group-DQ3sC1ol.js} +2 -2
- package/dist/admin/assets/{radio-group-rFxn7cz2.js.map → radio-group-DQ3sC1ol.js.map} +1 -1
- package/dist/admin/assets/{searchSchemas-C4qp-vCa.js → searchSchemas-D4S2ceA0.js} +2 -2
- package/dist/admin/assets/{searchSchemas-C4qp-vCa.js.map → searchSchemas-D4S2ceA0.js.map} +1 -1
- package/dist/admin/assets/{sections-C7Z6Xd8r.js → sections-Cl1LrzqH.js} +2 -2
- package/dist/admin/assets/{sections-C7Z6Xd8r.js.map → sections-Cl1LrzqH.js.map} +1 -1
- package/dist/admin/assets/{select-DUhL27UN.js → select-DjCAH45V.js} +2 -2
- package/dist/admin/assets/{select-DUhL27UN.js.map → select-DjCAH45V.js.map} +1 -1
- package/dist/admin/assets/{seo-l1ZORjtv.js → seo-DJ4k3LtY.js} +2 -2
- package/dist/admin/assets/{seo-l1ZORjtv.js.map → seo-DJ4k3LtY.js.map} +1 -1
- package/dist/admin/assets/{settings-DgoG3H8C.js → settings-DRZ33PTg.js} +2 -2
- package/dist/admin/assets/{settings-DgoG3H8C.js.map → settings-DRZ33PTg.js.map} +1 -1
- package/dist/admin/assets/{shapes-BZ87ap5s.js → shapes-BJe3IMuj.js} +5 -5
- package/dist/admin/assets/{shapes-BZ87ap5s.js.map → shapes-BJe3IMuj.js.map} +1 -1
- package/dist/admin/assets/{skeleton-Dyi_b1wq.js → skeleton-D4eOLKLY.js} +2 -2
- package/dist/admin/assets/{skeleton-Dyi_b1wq.js.map → skeleton-D4eOLKLY.js.map} +1 -1
- package/dist/admin/assets/src-DUpL-qwG.js +7 -0
- package/dist/admin/assets/src-DUpL-qwG.js.map +1 -0
- package/dist/admin/assets/{switch-C3dDDUIk.js → switch-B2R13aVU.js} +2 -2
- package/dist/admin/assets/{switch-C3dDDUIk.js.map → switch-B2R13aVU.js.map} +1 -1
- package/dist/admin/assets/{theme-DPe080iG.js → theme-X-qeg74W.js} +2 -2
- package/dist/admin/assets/{theme-DPe080iG.js.map → theme-X-qeg74W.js.map} +1 -1
- package/dist/admin/assets/{titles-C5PaMgFJ.js → titles-CLh5ftA2.js} +2 -2
- package/dist/admin/assets/{titles-C5PaMgFJ.js.map → titles-CLh5ftA2.js.map} +1 -1
- package/dist/admin/assets/{tooltip-BEaZkRPK.js → tooltip-u2epXfJF.js} +2 -2
- package/dist/admin/assets/{tooltip-BEaZkRPK.js.map → tooltip-u2epXfJF.js.map} +1 -1
- package/dist/admin/assets/{useContentSchema-wLDa2L3f.js → useContentSchema-DaQHlL19.js} +2 -2
- package/dist/admin/assets/{useContentSchema-wLDa2L3f.js.map → useContentSchema-DaQHlL19.js.map} +1 -1
- package/dist/admin/assets/{useDiscardGuard-WTUINqD5.js → useDiscardGuard-BVJGUCiH.js} +2 -2
- package/dist/admin/assets/{useDiscardGuard-WTUINqD5.js.map → useDiscardGuard-BVJGUCiH.js.map} +1 -1
- package/dist/admin/assets/{useMediaPickerDialog-CFN9ZKfe.js → useMediaPickerDialog-C23eOHQR.js} +2 -2
- package/dist/admin/assets/{useMediaPickerDialog-CFN9ZKfe.js.map → useMediaPickerDialog-C23eOHQR.js.map} +1 -1
- package/dist/admin/assets/{useMediaUploader-B42H_CMG.js → useMediaUploader-CTViR0LX.js} +2 -2
- package/dist/admin/assets/{useMediaUploader-B42H_CMG.js.map → useMediaUploader-CTViR0LX.js.map} +1 -1
- package/dist/admin/assets/{useResolvedScheme-aV0QDPi3.js → useResolvedScheme-Cg8TdO85.js} +2 -2
- package/dist/admin/assets/{useResolvedScheme-aV0QDPi3.js.map → useResolvedScheme-Cg8TdO85.js.map} +1 -1
- package/dist/admin/assets/{zod-C-k48Hnc.js → zod-D5i60ErJ.js} +2 -2
- package/dist/admin/assets/{zod-C-k48Hnc.js.map → zod-D5i60ErJ.js.map} +1 -1
- package/dist/admin/index.html +27 -27
- package/dist/cli.js +10 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.js +1 -1
- package/dist/{s3Adapter-sL1zP4Zl.js → s3Adapter-CtPzkzf0.js} +2 -2
- package/dist/{s3Adapter-sL1zP4Zl.js.map → s3Adapter-CtPzkzf0.js.map} +1 -1
- package/dist/{worker-DMES6pqh.js → worker-DRCCGGjl.js} +3823 -3719
- package/dist/worker-DRCCGGjl.js.map +1 -0
- package/package.json +5 -5
- package/dist/admin/assets/Builder-DyCcikfS.js +0 -2
- package/dist/admin/assets/Builder-DyCcikfS.js.map +0 -1
- package/dist/admin/assets/StepList-BIQjDaWQ.js +0 -2
- package/dist/admin/assets/StepList-BIQjDaWQ.js.map +0 -1
- package/dist/admin/assets/Structure-CO4aJZVP.js +0 -2
- package/dist/admin/assets/es2015-DrAA1N2V.js +0 -42
- package/dist/admin/assets/es2015-DrAA1N2V.js.map +0 -1
- package/dist/admin/assets/src-BcLeD2-K.js +0 -7
- package/dist/admin/assets/src-BcLeD2-K.js.map +0 -1
- package/dist/worker-DMES6pqh.js.map +0 -1
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./react-dom-pEVw9mjF.js";import{t as r}from"./jsx-runtime-DREnUpxT.js";import{a as i,m as a,s as o}from"./createLucideIcon-CqygG5K6.js";var s=e=>typeof e==`string`,c=()=>{let e,t,n=new Promise((n,r)=>{e=n,t=r});return n.resolve=e,n.reject=t,n},l=e=>e==null?``:String(e),u=(e,t,n)=>{e.forEach(e=>{t[e]&&(n[e]=t[e])})},d=/###/g,f=e=>e&&e.includes(`###`)?e.replace(d,`.`):e,p=e=>!e||s(e),m=(e,t,n)=>{let r=s(t)?t.split(`.`):t,i=0;for(;i<r.length-1;){if(p(e))return{};let t=f(r[i]);!e[t]&&n&&(e[t]=new n),e=Object.prototype.hasOwnProperty.call(e,t)?e[t]:{},++i}return p(e)?{}:{obj:e,k:f(r[i])}},h=(e,t,n)=>{let{obj:r,k:i}=m(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=m(e,o,Object);for(;s.obj===void 0&&o.length;)a=`${o[o.length-1]}.${a}`,o=o.slice(0,o.length-1),s=m(e,o,Object),s?.obj&&s.obj[`${s.k}.${a}`]!==void 0&&(s.obj=void 0);s.obj[`${s.k}.${a}`]=n},g=(e,t,n,r)=>{let{obj:i,k:a}=m(e,t,Object);i[a]=i[a]||[],i[a].push(n)},_=(e,t)=>{let{obj:n,k:r}=m(e,t);if(n&&Object.prototype.hasOwnProperty.call(n,r))return n[r]},ee=(e,t,n)=>{let r=_(e,n);return r===void 0?_(t,n):r},v=(e,t,n)=>{for(let r in t)r!==`__proto__`&&r!==`constructor`&&(Object.prototype.hasOwnProperty.call(e,r)?s(e[r])||e[r]instanceof String||s(t[r])||t[r]instanceof String?n&&(e[r]=t[r]):v(e[r],t[r],n):e[r]=t[r]);return e},y=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,`\\$&`),b={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`,"/":`/`},x=e=>s(e)?e.replace(/[&<>"'\/]/g,e=>b[e]):e,S=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}},te=[` `,`,`,`?`,`!`,`;`],C=new S(20),w=(e,t,n)=>{t||=``,n||=``;let r=te.filter(e=>!t.includes(e)&&!n.includes(e));if(r.length===0)return!0;let i=C.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},T=(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},E=e=>e?.replace(/_/g,`-`),ne={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)}},D=new class e{constructor(e,t={}){this.init(e,t)}init(e,t={}){this.prefix=t.prefix||`i18next:`,this.logger=e||ne,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=>s(e)?e.replace(/[\r\n\x00-\x1F\x7F]/g,` `):e),s(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)}},re=class{constructor(){this.observers={}}on(e,t){return e.split(` `).forEach(e=>{this.observers[e]||(this.observers[e]=new Map);let n=this.observers[e].get(t)||0;this.observers[e].set(t,n+1)}),this}off(e,t){if(this.observers[e]){if(!t){delete this.observers[e];return}this.observers[e].delete(t)}}once(e,t){let n=(...r)=>{t(...r),this.off(e,n)};return this.on(e,n),this}emit(e,...t){this.observers[e]&&Array.from(this.observers[e].entries()).forEach(([e,n])=>{for(let r=0;r<n;r++)e(...t)}),this.observers[`*`]&&Array.from(this.observers[`*`].entries()).forEach(([n,r])=>{for(let i=0;i<r;i++)n(e,...t)})}},ie=class extends re{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):s(n)&&i?o.push(...n.split(i)):o.push(n)));let c=_(this.data,o);return!c&&!t&&!n&&e.includes(`.`)&&(e=o[0],t=o[1],n=o.slice(2).join(`.`)),c||!a||!s(n)?c:T(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),h(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)(s(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=_(this.data,o)||{};a.skipCopy||(n=JSON.parse(JSON.stringify(n))),r?v(s,n,i):s={...s,...n},h(this.data,o,s),a.silent||this.emit(`added`,e,t,n)}removeResourceBundle(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit(`removed`,e,t)}hasResourceBundle(e,t){return this.getResource(e,t)!==void 0}getResourceBundle(e,t){return t||=this.options.defaultNS,this.getResource(e,t)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){let t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find(e=>t[e]&&Object.keys(t[e]).length>0)}toJSON(){return this.data}},ae={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}},oe=Symbol(`i18next/PATH_KEY`);function se(){let e=[],t=Object.create(null),n;return t.get=(r,i)=>(n?.revoke?.(),i===oe?e:(e.push(i),n=Proxy.revocable(r,t),n.proxy)),Proxy.revocable(Object.create(null),t).proxy}function O(e,t){let{[oe]:n}=e(se()),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 ce=e=>!s(e)&&typeof e!=`boolean`&&typeof e!=`number`,le=class e extends re{constructor(e,t={}){super(),u([`resourceStore`,`languageUtils`,`pluralResolver`,`interpolator`,`backendConnector`,`i18nFormat`,`utils`],e,this),this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator=`.`),this.logger=D.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=ce(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&&!w(e,n,r);if(a&&!o){let t=e.match(this.interpolator.nestingRegexp);if(t&&t.length>0)return{key:e,namespaces:s(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:s(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=O(t,{...this.options,...i})),Array.isArray(t)||(t=[String(t)]),t=t.map(e=>typeof e==`function`?O(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:c,namespaces:l}=this.extractFromKey(t[t.length-1],i),u=l[l.length-1],d=i.nsSeparator===void 0?this.options.nsSeparator:i.nsSeparator;d===void 0&&(d=`:`);let f=i.lng||this.language,p=i.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(f?.toLowerCase()===`cimode`)return p?a?{res:`${u}${d}${c}`,usedKey:c,exactUsedKey:c,usedLng:f,usedNS:u,usedParams:this.getUsedParamsDetails(i)}:`${u}${d}${c}`:a?{res:c,usedKey:c,exactUsedKey:c,usedLng:f,usedNS:u,usedParams:this.getUsedParamsDetails(i)}:c;let m=this.resolve(t,i),h=m?.res,g=m?.usedKey||c,_=m?.exactUsedKey||c,ee=[`[object Number]`,`[object Function]`,`[object RegExp]`],v=i.joinArrays===void 0?this.options.joinArrays:i.joinArrays,y=!this.i18nFormat||this.i18nFormat.handleAsObject,b=i.count!==void 0&&!s(i.count),x=e.hasDefaultValue(i),S=b?this.pluralResolver.getSuffix(f,i.count,i):``,te=i.ordinal&&b?this.pluralResolver.getSuffix(f,i.count,{ordinal:!1}):``,C=b&&!i.ordinal&&i.count===0,w=C&&i[`defaultValue${this.options.pluralSeparator}zero`]||i[`defaultValue${S}`]||i[`defaultValue${te}`]||i.defaultValue,T=h;y&&!h&&x&&(T=w);let E=ce(T),ne=Object.prototype.toString.apply(T);if(y&&T&&E&&!ee.includes(ne)&&!(s(v)&&Array.isArray(T))){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(g,T,{...i,ns:l}):`key '${c} (${this.language})' returned an object instead of string.`;return a?(m.res=e,m.usedParams=this.getUsedParamsDetails(i),m):e}if(o){let e=Array.isArray(T),t=e?[]:{},n=e?_:g;for(let e in T)if(Object.prototype.hasOwnProperty.call(T,e)){let r=`${n}${o}${e}`;t[e]=x&&!h?this.translate(r,{...i,defaultValue:ce(w)?w[e]:void 0,joinArrays:!1,ns:l}):this.translate(r,{...i,joinArrays:!1,ns:l}),t[e]===r&&(t[e]=T[e])}h=t}}else if(y&&s(v)&&Array.isArray(h))h=h.join(v),h&&=this.extendTranslation(h,t,i,r);else{let e=!1,n=!1;!this.isValidLookup(h)&&x&&(e=!0,h=w),this.isValidLookup(h)||(n=!0,h=c);let a=(i.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&n?void 0:h,s=x&&w!==h&&this.options.updateMissing;if(n||e||s){if(this.logger.log(s?`updateKey`:`missingKey`,f,u,b&&!s?`${c}${this.pluralResolver.getSuffix(f,i.count,i)}`:c,s?w:h),o){let e=this.resolve(c,{...i,keySeparator:!1});e&&e.res&&this.logger.warn(`Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.`)}let e=[],t=this.languageUtils.getFallbackCodes(this.options.fallbackLng,i.lng||this.language);if(this.options.saveMissingTo===`fallback`&&t&&t[0])for(let n=0;n<t.length;n++)e.push(t[n]);else this.options.saveMissingTo===`all`?e=this.languageUtils.toResolveHierarchy(i.lng||this.language):e.push(i.lng||this.language);let n=(e,t,n)=>{let r=x&&n!==h?n:a;this.options.missingKeyHandler?this.options.missingKeyHandler(e,u,t,r,s,i):this.backendConnector?.saveMissing&&this.backendConnector.saveMissing(e,u,t,r,s,i),this.emit(`missingKey`,e,u,t,h)};this.options.saveMissing&&(this.options.saveMissingPlurals&&b?e.forEach(e=>{let t=this.pluralResolver.getSuffixes(e,i);C&&i[`defaultValue${this.options.pluralSeparator}zero`]&&!t.includes(`${this.options.pluralSeparator}zero`)&&t.push(`${this.options.pluralSeparator}zero`),t.forEach(t=>{n([e],c+t,i[`defaultValue${t}`]||w)})}):n(e,c,w))}h=this.extendTranslation(h,t,i,m,r),n&&h===c&&this.options.appendNamespaceToMissingKey&&(h=`${u}${d}${c}`),(n||e)&&this.options.parseMissingKeyHandler&&(h=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${u}${d}${c}`:c,e?h:void 0,i))}return a?(m.res=h,m.usedParams=this.getUsedParamsDetails(i),m):h}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=s(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 c=n.replace&&!s(n.replace)?n.replace:n;if(this.options.interpolation.defaultVariables&&(c={...this.options.interpolation.defaultVariables,...c}),e=this.interpolator.interpolate(e,c,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=s(a)?[a]:a;return e!=null&&o?.length&&n.applyPostProcessor!==!1&&(e=ae.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 s(e)&&(e=[e]),Array.isArray(e)&&(e=e.map(e=>typeof e==`function`?O(e,{...this.options,...t}):e)),e.forEach(e=>{if(this.isValidLookup(n))return;let c=this.extractFromKey(e,t),l=c.key;r=l;let u=c.namespaces;this.options.fallbackNS&&(u=u.concat(this.options.fallbackNS));let d=t.count!==void 0&&!s(t.count),f=d&&!t.ordinal&&t.count===0,p=t.context!==void 0&&(s(t.context)||typeof t.context==`number`)&&t.context!==``,m=t.lngs?t.lngs:this.languageUtils.toResolveHierarchy(t.lng||this.language,t.fallbackLng);u.forEach(e=>{this.isValidLookup(n)||(o=e,!this.checkedLoadedFor[`${m[0]}-${e}`]&&this.utils?.hasLoadedNamespace&&!this.utils?.hasLoadedNamespace(o)&&(this.checkedLoadedFor[`${m[0]}-${e}`]=!0,this.logger.warn(`key "${r}" for languages "${m.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!!!`)),m.forEach(r=>{if(this.isValidLookup(n))return;a=r;let o=[l];if(this.i18nFormat?.addLookupKeys)this.i18nFormat.addLookupKeys(o,l,r,e,t);else{let e;d&&(e=this.pluralResolver.getSuffix(r,t.count,t));let n=`${this.options.pluralSeparator}zero`,i=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(d&&(t.ordinal&&e.startsWith(i)&&o.push(l+e.replace(i,this.options.pluralSeparator)),o.push(l+e),f&&o.push(l+n)),p){let r=`${l}${this.options.contextSeparator||`_`}${t.context}`;o.push(r),d&&(t.ordinal&&e.startsWith(i)&&o.push(r+e.replace(i,this.options.pluralSeparator)),o.push(r+e),f&&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&&!s(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}},ue=class{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=D.create(`languageUtils`),this.resolveHierarchyCache={}}clearCache(){this.resolveHierarchyCache={}}getScriptPartFromCode(e){if(e=E(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=E(e),!e||!e.includes(`-`))return e;let t=e.split(`-`);return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(s(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)),s(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||s(t),a=t===void 0&&typeof this.options.fallbackLng==`function`,o=s(e)&&i&&!a,c=null;if(o){let n;n=t===void 0?`undefined`:t===!1?`boolean:false`:`string:${t}`,c=`${e.length}:${e}|${n}`}if(c!==null){let e=this.resolveHierarchyCache[c];if(e!==void 0)return e.slice()}let l=this.getFallbackCodes((t===!1?[]:t)||this.options.fallbackLng||[],e),u=[],d=e=>{e&&(this.isSupportedCode(e)?u.push(e):this.logger.warn(`rejecting language code not found in supportedLngs: ${e}`))};return s(e)&&(e.includes(`-`)||e.includes(`_`))?(this.options.load!==`languageOnly`&&d(this.formatLanguageCode(e)),this.options.load!==`languageOnly`&&this.options.load!==`currentOnly`&&d(this.getScriptPartFromCode(e)),this.options.load!==`currentOnly`&&d(this.getLanguagePartFromCode(e))):s(e)&&d(this.formatLanguageCode(e)),l.forEach(e=>{u.includes(e)||d(this.formatLanguageCode(e))}),c===null?u:(this.resolveHierarchyCache[c]=u,u.slice())}},de={zero:0,one:1,two:2,few:3,many:4,other:5},fe={select:e=>e===1?`one`:`other`,resolvedOptions:()=>({pluralCategories:[`one`,`other`]})},pe=class{constructor(e,t={}){this.languageUtils=e,this.options=t,this.logger=D.create(`pluralResolver`),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(e,t={}){let n=E(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!`),fe;if(!e.match(/-|_/))return fe;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)=>de[e]-de[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))}},me=(e,t,n,r=`.`,i=!0)=>{let a=ee(e,t,n);return!a&&i&&s(n)&&(a=T(e,n,r),a===void 0&&(a=T(t,n,r))),a},he=e=>e.replace(/\$/g,`$$$$`),ge=class{constructor(e={}){this.logger=D.create(`interpolator`),this.options=e,this.format=e?.interpolation?.format||(e=>e),this.init(e)}init(e={}){e.interpolation||={escapeValue:!0};let{escape:t,escapeValue:n,useRawValueToEscape:r,prefix:i,prefixEscaped:a,suffix:o,suffixEscaped:s,formatSeparator:c,unescapeSuffix:l,unescapePrefix:u,nestingPrefix:d,nestingPrefixEscaped:f,nestingSuffix:p,nestingSuffixEscaped:m,nestingOptionsSeparator:h,maxReplaces:g,alwaysFormat:_}=e.interpolation;this.escape=t===void 0?x:t,this.escapeValue=n===void 0||n,this.useRawValueToEscape=r!==void 0&&r,this.prefix=i?y(i):a||`{{`,this.suffix=o?y(o):s||`}}`,this.formatSeparator=c||`,`,this.unescapePrefix=l?``:u?y(u):`-`,this.unescapeSuffix=this.unescapePrefix?``:l?y(l):``,this.nestingPrefix=d?y(d):f||y(`$t(`),this.nestingSuffix=p?y(p):m||y(`)`),this.nestingOptionsSeparator=h||`,`,this.maxReplaces=g||1e3,this.alwaysFormat=_!==void 0&&_,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){let e=(e,t)=>e?.source===t?(e.lastIndex=0,e):new RegExp(t,`g`);this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}((?:[^()"']+|"[^"]*"|'[^']*'|\\((?:[^()]|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`)}interpolate(e,t,n,r){let i,a,o,c=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},u=e=>{if(!e.includes(this.formatSeparator)){let i=me(t,c,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(me(t,c,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 d=r?.missingInterpolationHandler||this.options.missingInterpolationHandler,f=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=u(n),a===void 0){if(typeof d==`function`){let t=d(e,i,r);a=s(t)?t:``}else if(r&&Object.prototype.hasOwnProperty.call(r,n))a=``;else if(f){a=i[0];continue}else this.logger.warn(`missed to pass in variable ${n} for interpolating ${e}`),a=``}else!s(a)&&!this.useRawValueToEscape&&(a=l(a));let c=t.safeValue(a);if(e=e.replace(i[0],he(c)),f?(t.regex.lastIndex+=c.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(`${y(n)}[ ]*{`)),i=`{${r[1]}`;e=r[0],i=this.interpolate(i,a);let o=i.match(/'/g),s=i.match(/"/g);((o?.length??0)%2==0&&!s||(s?.length??0)%2!=0)&&(i=i.replace(/'/g,`"`));try{a=JSON.parse(i),t&&(a={...t,...a})}catch(t){return this.logger.warn(`failed parsing options string in nesting for key ${e}`,t),`${e}${n}${i}`}return a.defaultValue&&a.defaultValue.includes(this.prefix)&&delete a.defaultValue,e};for(;r=this.nestingRegexp.exec(e);){let c=[];a={...n},a=a.replace&&!s(a.replace)?a.replace:a,a.applyPostProcessor=!1,delete a.defaultValue;let u=/{.*}/s.test(r[1])?r[1].lastIndexOf(`}`)+1:r[1].indexOf(this.formatSeparator);if(u!==-1&&(c=r[1].slice(u).split(this.formatSeparator).map(e=>e.trim()).filter(Boolean),r[1]=r[1].slice(0,u)),i=t(o.call(this,r[1].trim(),a),a),i&&r[0]===e&&!s(i))return i;s(i)||(i=l(i)),i||=(this.logger.warn(`missed to resolve ${r[1]} for nesting ${e}`),``),c.length&&(i=c.reduce((e,t)=>this.format(e,t,n.lng,{...n,interpolationkey:r[1].trim()}),i.trim())),e=e.replace(r[0],he(l(i))),this.regexp.lastIndex=0}return e}},_e=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}},ve=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(E(r),i),t[o]=s),s(n)}},ye=e=>(t,n,r)=>e(E(n),r)(t),be=class{constructor(e={}){this.logger=D.create(`formatter`),this.options=e,this.init(e)}init(e,t={interpolation:{}}){this.formatSeparator=t.interpolation.formatSeparator||`,`;let n=t.cacheInBuiltFormats?ve:ye;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()]=ve(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}=_e(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)}},xe=(e,t)=>{e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)},Se=class extends re{constructor(e,t,n,r={}){super(),this.backend=e,this.store=t,this.services=n,this.languageUtils=n.languageUtils,this.options=r,this.logger=D.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=>{g(n.loaded,[i],a),xe(n,e),t&&n.errors.push(t),n.pendingCount===0&&!n.done&&(Object.keys(n.loaded).forEach(e=>{o[e]||(o[e]={});let t=n.loaded[e];t.length&&t.forEach(t=>{o[e][t]===void 0&&(o[e][t]=!0)})}),n.done=!0,n.errors.length?n.callback(n.errors):n.callback())}),this.emit(`loaded`,o),this.queue=this.queue.filter(e=>!e.done)}read(e,t,n,r=0,i=this.retryTimeout,a){if(!e.length)return a(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:t,fcName:n,tried:r,wait:i,callback:a});return}this.readingCalls++;let o=(o,s)=>{if(this.readingCalls--,this.waitingReads.length>0){let e=this.waitingReads.shift();this.read(e.lng,e.ns,e.fcName,e.tried,e.wait,e.callback)}if(o&&s&&r<this.maxRetries){setTimeout(()=>{this.read(e,t,n,r+1,i*2,a)},i);return}a(o,s)},s=this.backend[n].bind(this.backend);if(s.length===2){try{let n=s(e,t);n&&typeof n.then==`function`?n.then(e=>o(null,e)).catch(o):o(null,n)}catch(e){o(e)}return}return s(e,t,o)}prepareLoading(e,t,n={},r){if(!this.backend)return this.logger.warn(`No backend was added via i18next.use. Will not load resources.`),r&&r();s(e)&&(e=this.languageUtils.toResolveHierarchy(e)),s(t)&&(t=[t]);let i=this.queueLoad(e,t,n,r);if(!i.toLoad.length)return i.pending.length||r(),null;i.toLoad.forEach(e=>{this.loadOne(e)})}load(e,t,n){this.prepareLoading(e,t,{},n)}reload(e,t,n){this.prepareLoading(e,t,{reload:!0},n)}loadOne(e,t=``){let n=e.split(`|`),r=n[0],i=n[1];this.read(r,i,`read`,void 0,void 0,(n,a)=>{n&&this.logger.warn(`${t}loading namespace ${i} for language ${r} failed`,n),!n&&a&&this.logger.log(`${t}loaded namespace ${i} for language ${r}`,a),this.loaded(e,n,a)})}saveMissing(e,t,n,r,i,a={},o=()=>{}){if(this.services?.utils?.hasLoadedNamespace&&!this.services?.utils?.hasLoadedNamespace(t)){this.logger.warn(`did not save key "${n}" as the namespace "${t}" was not yet loaded`,`This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!`);return}if(n!=null&&n!==``){if(this.backend?.create){let s={...a,isUpdate:i},c=this.backend.create.bind(this.backend);if(c.length<6)try{let i;i=c.length===5?c(e,t,n,r,s):c(e,t,n,r),i&&typeof i.then==`function`?i.then(e=>o(null,e)).catch(o):o(null,i)}catch(e){o(e)}else c(e,t,n,r,o,s)}e&&e[0]&&this.store.addResource(e[0],t,n,r)}}},Ce=()=>({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]),s(e[1])&&(t.defaultValue=e[1]),s(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}),we=e=>(s(e.ns)&&(e.ns=[e.ns]),s(e.fallbackLng)&&(e.fallbackLng=[e.fallbackLng]),s(e.fallbackNS)&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&!e.supportedLngs.includes(`cimode`)&&(e.supportedLngs=e.supportedLngs.concat([`cimode`])),e),Te=()=>{},Ee=e=>{Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(t=>{typeof e[t]==`function`&&(e[t]=e[t].bind(e))})},k=class e extends re{constructor(e={},t){if(super(),this.options=we(e),this.services={},this.logger=D,this.modules={external:[]},Ee(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&&(s(e.ns)?e.defaultNS=e.ns:e.ns.includes(`translation`)||(e.defaultNS=e.ns[0]));let n=Ce();this.options={...n,...this.options,...we(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?D.init(r(this.modules.logger),this.options):D.init(null,this.options);let e;e=this.modules.formatter?this.modules.formatter:be;let t=new ue(this.options);this.store=new ie(this.options.resources,this.options);let n=this.services;n.logger=D,n.resourceStore=this.store,n.languageUtils=t,n.pluralResolver=new pe(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 ge(this.options),n.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},n.backendConnector=new Se(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 le(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||=Te,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=c(),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=Te){let n=t,r=s(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=c();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||=Te,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`&&ae.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=c();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=s(t)?t:t&&t[0],a=this.store.hasLanguageSomeTranslations(n)?n:this.services.languageUtils.getBestMatchFromCodes(s(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=O(o.keyPrefix,c));let l=this.options.keySeparator||`.`,u;return o.keyPrefix&&Array.isArray(e)?u=e.map(e=>(typeof e==`function`&&(e=O(e,c)),`${o.keyPrefix}${l}${e}`)):(typeof e==`function`&&(e=O(e,c)),u=o.keyPrefix?`${o.keyPrefix}${l}${e}`:e),this.t(u,o)};return s(e)?a.lng=e:a.lngs=e,a.ns=t,a.keyPrefix=n,a}t(...e){return this.translator?.translate(...e)}exists(...e){return this.translator?.exists(...e)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e,t={}){if(!this.isInitialized)return this.logger.warn(`hasLoadedNamespace: i18next was not initialized`,this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn(`hasLoadedNamespace: i18n.languages were undefined or empty`,this.languages),!1;let n=t.lng||this.resolvedLanguage||this.languages[0],r=this.options?this.options.fallbackLng:!1,i=this.languages[this.languages.length-1];if(n.toLowerCase()===`cimode`)return!0;let a=(e,t)=>{let n=this.services.backendConnector.state[`${e}|${t}`];return n===-1||n===0||n===2};if(t.precheck){let e=t.precheck(this,a);if(e!==void 0)return e}return!!(this.hasResourceBundle(n,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||a(n,e)&&(!r||a(i,e)))}loadNamespaces(e,t){let n=c();return this.options.ns?(s(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=c();s(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 ue(Ce());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=Te){let r=t.forkResourceStore;r&&delete t.forkResourceStore;let i={...this.options,...t,isClone:!0},a=new e(i);if((t.debug!==void 0||t.prefix!==void 0)&&(a.logger=a.logger.clone(t)),[`store`,`services`,`language`].forEach(e=>{a[e]=this[e]}),a.services={...this.services},a.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},r&&(a.store=new ie(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={...Ce().interpolation,...this.options.interpolation,...t.interpolation},n={...i,interpolation:e};a.services.interpolator=new ge(n)}return a.translator=new le(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();k.createInstance,k.dir,k.init,k.loadResources,k.reloadResources,k.use,k.changeLanguage,k.getFixedT,k.t,k.exists,k.setDefaultNamespace,k.hasLoadedNamespace,k.loadNamespaces,k.loadLanguages;var De={type:`3rdParty`,init(e){o(e.options.react),i(e)}},Oe={app:{name:`Shapio`,skipToContent:`Skip to content`},common:{cancel:`Cancel`,close:`Close`,saveChanges:`Save changes`,saving:`Saving…`,create:`Create`,delete:`Delete`,edit:`Edit`,remove:`Remove`,revoke:`Revoke`,retry:`Try again`,backHome:`Back home`,loading:`Loading…`,copy:`Copy`,copied:`Copied`,actions:`Actions`,never:`Never`,none:`None`,unknown:`Unknown`,previous:`Previous`,next:`Next`,toggleSidebar:`Toggle sidebar`,sidebar:`Sidebar`,sidebarDescription:`Displays the mobile sidebar.`,notifications:`Notifications`,pagination:`Pagination`,optionalLabel:`{{label}} (optional)`,first:`Newest`,breadcrumb:`Breadcrumb`,moreAbout:`More about {{about}}`,pageRange:`{{from}}–{{to}} of {{total}}`,rowsPerPage:`Rows per page`,perPage:`{{count}} per page`},validation:{required:`This field is required.`,email:`Enter a valid email address.`,passwordTooShort:`Use at least 12 characters.`,passwordsDontMatch:`The passwords don't match.`,roleKey:`Use lower-case letters, digits and hyphens, starting with a letter.`,selectRole:`Choose a role.`,passwordTooLong:`Use at most 256 characters.`,apiKeyInvalid:`Use letters, digits and _, not starting with a digit.`,apiKeyTooLong:`Use at most 64 characters.`,apiKeyReservedPrefix:`API IDs can't start with "__" (reserved by GraphQL).`,apiKeyReserved:`This name is reserved for a system field. Choose another.`,apiKeyTaken:`Another one already uses this API ID (IDs are case-insensitive).`,pluralApiKeySameAsSingular:`The plural API ID must differ from the API ID.`,localeCode:`Use a language code such as en, fr or fr-CA.`,tooLong:`This is too long.`,selectModel:`Choose a model.`,dateTime:`Choose a valid date and time.`,url:`Enter a full URL starting with https:// or http://.`,selectEvents:`Choose at least one event.`,maxAttempts:`Enter a whole number from 1 to 20.`,debounceSeconds:`Enter a whole number of seconds (0 to 86400).`,siteKey:`Use lower-case letters, digits and hyphens, starting with a letter.`,siteTwice:`Each site can only be listed once.`,ownerAllSites:`The owner role can only be given on all sites.`,titleTemplate:`Use %s exactly once where the page title goes, e.g. "%s · Acme".`,twitterHandle:`Use @ followed by up to 15 letters, digits or underscores.`},errors:{unexpected:`Something went wrong. Please try again.`,network:`Can't reach the Shapio server. Check your connection and try again.`,loadFailed:`This couldn't be loaded.`,forbidden:`You don't have permission to see this.`,forbiddenDescription:`Ask an owner or administrator to grant you access.`,codes:{INVALID_CREDENTIALS:`That email and password don't match an account.`,RATE_LIMITED:`Too many attempts. Wait a moment and try again.`,SETUP_COMPLETE:`Setup has already been completed. Sign in instead.`,INVALID_SETUP_TOKEN:`That setup token is not valid. Use the latest token from the server log.`,EMAIL_TAKEN:`An account with this email already exists.`,VERSION_CONFLICT:`Someone else changed this in the meantime. Reload and try again.`,INVALID_CURRENT_PASSWORD:`Your current password is not correct.`,INVALID_OR_EXPIRED_TOKEN:`This link is invalid or has expired. Ask for a new one.`,ROLE_KEY_TAKEN:`Another role already uses this key.`,LAST_OWNER:`There must always be at least one active owner.`,CANNOT_DELETE_SELF:`You can't remove your own account.`,SYSTEM_ROLE:`Built-in roles can't be changed or deleted.`,OWNER_REQUIRED:`Only an owner can do this.`,INVALID_ROLES:`One or more of the chosen roles can't be used here.`,INVALID_PERMISSIONS:`Some permissions don't apply to this kind of role.`,INVALID_EXPIRY:`Choose an expiry date in the future.`,UNAUTHENTICATED:`Your session has ended. Sign in again.`,FORBIDDEN:`You don't have permission to do this.`,CSRF_INVALID:`Your session security token expired. Reload the page and try again.`,VALIDATION_ERROR:`Some values aren't valid. Check the form and try again.`,NOT_FOUND:`This no longer exists. It may have been deleted.`,CONFLICT:`This conflicts with a change made elsewhere. Reload and try again.`,SCHEMA_VERSION_CONFLICT:`This model changed since you loaded it. Reload and try again.`,SCHEMA_CHANGE_IN_PROGRESS:`Another change to this model is still running. Wait for it to finish.`,SCHEMA_INVALID:`The model has problems. Fix the highlighted settings and try again.`,SCHEMA_CHANGE_UNSUPPORTED:`Shapio can't convert the existing values for this change.`,SCHEMA_CHANGE_NOT_ACKNOWLEDGED:`This change needs your explicit confirmation.`,SCHEMA_READ_ONLY:"Schema changes are locked on this instance. Use `shapio schema apply` instead.",SCHEMA_PREREQUISITE_FAILED:`Existing content doesn't satisfy the new model.`,API_KEY_TAKEN:`Another model or component already uses this API ID.`,LOCALE_EXISTS:`A locale with this code already exists.`,LOCALE_INVALID:`The fallback chain is invalid: check for duplicates and unknown locales.`,LOCALE_IS_DEFAULT:`Choose another default locale before deleting this one.`,TYPE_NOT_ALLOWED:`Files of this type cannot be uploaded.`,FILE_TOO_LARGE:`The file is larger than the upload limit.`,UNSUPPORTED_MEDIA_TYPE:`The file’s content is not an allowed type (it was checked from its bytes, not its name).`,UPLOAD_MISSING:`The file did not arrive. Try uploading it again.`,FILE_EMPTY:`The file is empty.`,UPLOAD_GRANT_EXPIRED:`The upload took too long. Try again.`,UPLOAD_GRANT_USED:`This upload was already finished.`,UPLOAD_GRANT_INVALID:`This upload link is no longer valid. Try again.`,UPLOAD_SIGNATURE_INVALID:`The upload was refused. Try again.`,ASSET_CHANGED:`The file changed while you were uploading. Try again.`,MEDIA_IN_USE:`This file is used by content.`,FOLDER_NOT_EMPTY:`Move or delete what is in this folder first.`,FOLDER_NAME_TAKEN:`A folder with this name already exists here.`,FOLDER_CYCLE:`A folder cannot be moved into itself.`,FOLDER_NOT_FOUND:`That folder no longer exists.`,NOT_CONFIGURED:`This isn't configured on the server yet.`,ALREADY_CONFIRMED:`This email address is already confirmed.`,ROLE_IN_USE:`Remove this role from everyone who holds it first.`,UNKNOWN_MODEL:`Some permissions name models that no longer exist. Reload and try again.`,CONTENT_INVALID:`Some fields need attention. Check the highlighted fields and try again.`,CONTENT_VERSION_CONFLICT:`This entry changed since you opened it. Reload it and try again.`,SCHEMA_CHANGED:`The model changed while saving. Reload the form and try again.`,ENTRY_REFERENCED:`Other entries still link to this entry. Remove those links first.`,ENTRY_NOT_FOUND:`This entry no longer exists.`,ENTRY_LOCALE_NOT_FOUND:`This entry has no version in that locale yet.`,SINGLETON_EXISTS:`This single type already has its entry.`,PUBLISHING_DISABLED:`This model has no draft state: every save is published.`,REVISION_NOT_FOUND:`That version no longer exists.`,INVALID_QUERY:`This filter or sort can't be used on this model.`,FORBIDDEN_FIELD:`You don't have access to one of the fields in this filter or sort.`,LOCALE_NOT_FOUND:`That locale doesn't exist.`,SITE_NOT_EMPTY:`This site still has content types, components, entries, media, change sets or app users. Delete them first.`,SITE_IS_PRIMARY:`The primary site can't be deleted.`,SITE_KEY_TAKEN:`Another site already uses this key.`,OWNER_ALL_SITES:`The owner role applies to every site; it can't be given on one site.`,SITE_FORBIDDEN:`You have no role on this site.`,SITE_MISMATCH:`This credential belongs to another site.`,SITE_NOT_FOUND:`That site doesn't exist.`,INVALID_SITES:`One of the chosen sites doesn't exist.`,ASSIST_DISABLED:`Assist is off on this server.`,ASSIST_PROVIDER_ERROR:`The model provider returned an error. Try again in a moment.`,ASSIST_PROVIDER_AUTH:`The model provider refused this server's credentials. Ask whoever runs Shapio to check the assist settings.`,ASSIST_PROVIDER_BUSY:`The model provider is busy. Try again in a moment.`,ASSIST_INVALID_OUTPUT:`The model's answer couldn't be used. Try again, or rephrase.`,ASSIST_DECLINED:`The model declined this request.`,ASSIST_VISION_UNSUPPORTED:`The configured model can't read images.`,ASSIST_NOT_AN_IMAGE:`Alt text can only be suggested for images.`,ASSIST_FIELD_NOT_SUMMARIZABLE:`This field can't be filled with a summary.`,ASSIST_NOTHING_TO_SUMMARIZE:`There is no saved body text to summarize yet.`,ASSIST_NOT_LOCALIZED:`This content type isn't localized.`,ASSIST_SAME_LOCALE:`Pick a different locale to translate from.`,ASSIST_RUN_NOT_FOUND:`That proposal run no longer exists.`}},notFound:{title:`Page not found`,description:`This page doesn't exist or has moved.`},routeError:{title:`Something went wrong`,description:`This page couldn't be shown.`},unsaved:{title:`Discard unsaved changes?`,description:`You have changes that haven't been saved. If you leave now, they will be lost.`,stay:`Keep editing`,leave:`Discard and leave`},secret:{saved:`I've saved it`,leaveTitle:`Leave without saving the secret?`,leaveDescription:`It's shown only once. If you leave now, you'll need to create a new one.`,stay:`Stay and copy it`,leave:`Leave`},theme:{label:`Theme`,toggle:`Change theme`},auth:{email:`Email`,password:`Password`,name:`Name`,confirmPassword:`Confirm password`,newPassword:`New password`,passwordHint:`12 characters or more.`,backToLogin:`Back to sign in`,brand:{label:`About Shapio`,tagline:`Shape your content.`,pitchLive:`Change content models live, with no rebuild or restart.`,pitchApi:`Deliver over REST and GraphQL.`,pitchSelfHosted:`Self-hosted and open source.`}},setup:{title:`Set up Shapio`,description:`Create the owner account. Invite your team later.`,token:`Setup token`,tokenHint:`Printed in the API server's log at startup.`,tokenMore:`In the banner "No admin account exists yet", on the line "One-time setup token: …".`,submit:`Create owner account`,submitting:`Creating account…`},login:{title:`Sign in`,submit:`Sign in`,submitting:`Signing in…`,forgotPassword:`Forgot password?`},forgotPassword:{title:`Reset your password`,description:`We'll email you a link to choose a new one.`,submit:`Send reset link`,submitting:`Sending…`,sentTitle:`Check your email`,sentDescription:`If {{email}} has an account, a reset link is on its way.`},resetPassword:{title:`Choose a new password`,description:`This signs you out everywhere else.`,submit:`Set new password`,submitting:`Saving…`,missingToken:`This reset link is incomplete. Open it from your email again.`,requestNew:`Request a new link`,doneTitle:`Password changed`,doneDescription:`Sign in with your new password.`},acceptInvitation:{title:`Join your team on Shapio`,submit:`Create account`,submitting:`Creating account…`,missingToken:`This invitation link is incomplete. Open the full link again.`,joiningAs:`You're joining as {{email}}.`},nav:{content:`Content`,publishing:`Publishing`},shell:{mainNavigation:`Main navigation`,home:`Inbox`,search:`Search or jump to…`,groups:{content:`Content`,develop:`Develop`,workspace:`Workspace`,network:`Network`},nav:{inbox:`Inbox`,media:`Media`,publishing:`Publishing`,newType:`New content type`,changes:`Changes`,snapshots:`Snapshots`,schema:`Schema as code`,components:`Components`,apiExplorer:`API explorer`,graphql:`GraphQL`,live:`Live`,apiTokens:`API tokens`,webhooks:`Webhooks`,users:`Users`,roles:`Roles`,locales:`Locales`,settings:`Settings`,team:`Team`,appUsers:`App users`,sites:`Sites`,auditLog:`Audit log`,sharedContentTypes:`Content types`}},palette:{title:`Search and commands`,inputLabel:`Search places, entries, media and commands`,placeholder:`Search or type a command…`,results:`Results`,searching:`Searching…`,noResults:`Nothing found for “{{query}}”`,resultCount_one:`{{count}} result`,resultCount_other:`{{count}} results`,untitled:`Untitled`,newEntry:`New {{name}}`,newComponent:`New component`,groups:{page:`On this page`,recent:`Recent`,create:`Create`,goto:`Go to`,entries:`Entries`,media:`Media`},hintMove:`↑↓ to move`,hintOpen:`Enter to open`,hintClose:`Esc to close`},inbox:{title:`Welcome, {{name}}`,titleFallback:`Welcome`,meta_one:`{{count}} thing needs you`,meta_other:`{{count}} things need you`,metaClear:`Nothing needs you right now`,needsYou:`Needs you`,allClear:`You’re all caught up`,allClearDescription:`Missing alt text, empty required fields and unstarted translations show up here.`,aField:`a field`,findingMeta:`{{place}} · {{sentence}}`,showAll:`Show all {{count}}`,loadMore:`Load more`,scheduledSoon:`Scheduled soon`,scheduledPublish:`{{place}} · goes live`,scheduledUnpublish:`{{place}} · comes down`,nothingScheduled:`Nothing scheduled`,viewAll:`View all`,recentlyPublished:`Recently published`,nothingPublished:`Nothing published yet`,overview:`Workspace overview`,rules:{requiredEmpty:{title:`Required fields left empty`,sentence:`{{field}} is required and still empty`,fix:`Fill in`},altMissing:{title:`Images without alt text`,sentence:`An image in {{field}} has no alt text`,fix:`Add alt text`},localeMissing:{title:`Translations not started`,sentence:`Not written in {{locale}} yet`,fix:`Start {{locale}}`},relationMissing:{title:`Links to deleted entries`,sentence:`{{field}} links to an entry that no longer exists`,fix:`Fix link`},relationUnpublished:{title:`Links to unpublished entries`,sentence:`{{field}} links to an entry that isn’t live, so readers won’t see it`,fix:`Review link`},uniqueConflict:{title:`Values already taken`,sentence:`{{field}} is already used by another published entry`,fix:`Change it`},staleDraft:{title:`Drafts going stale`,sentence_one:`Draft untouched for {{count}} day`,sentence_other:`Draft untouched for {{count}} days`,fix:`Open draft`},unpublishedChanges:{title:`Changes not published`,sentence_one:`Changes waiting to go live for {{count}} day`,sentence_other:`Changes waiting to go live for {{count}} days`,fix:`Review changes`}},wentLive:`{{place}} · went live`,liveUpdated:`{{place}} · live version updated`,nothingScheduledDescription:`Schedule a publish from an entry when it should go live later.`,nothingPublishedDescription:`Entries appear here as they go live.`,getStarted:{title:`Get started`,done:`Done`,type:{title:`Create a content type`,description:`Articles, pages, authors: the kinds of things you write. Live as soon as you create it.`},entry:{title:`Write your first entry`,description:`Open {{place}} and write something.`},invite:{title:`Invite your team`,description:`Add editors and administrators, each with the role they need.`,action:`Invite people`},token:{title:`Create an API token`,description:`Give your site or build pipeline scoped access to the API.`,action:`Create a token`},waiting:`Nothing to write yet.`,waitingDescription:`An administrator adds the first content type; it appears in the sidebar.`}},contentTypes:{newTitle:`New content type`,newComponentTitle:`New component`,noComponents:`No components yet`,availableOn:`Available on`,thisSite:`This site`,thisSiteDescription:`Only on {{site}}.`,allSites:`All sites`,allSitesDescription:`Every site has it, each with its own content.`,allSitesNeedsNetwork:`Sharing with all sites needs a role on every site.`,sharedWithAllSites:`Shared with all sites`,network:{title:`Content types`,count_one:`{{count}} shared with all sites`,count_other:`{{count}} shared with all sites`,create:`New shared type`,newTitle:`New shared content type`,empty:`Nothing is shared yet`,emptyDescription:`Content types and components shared with all sites are listed here.`}},userMenu:{label:`Account menu`,profile:`Profile`,signOut:`Sign out`,signedInAs:`Signed in as`},statusBar:{schema:`Schema v{{version}} · live, no restart needed`},home:{models:`Content types`,locales:`Locales`,admins:`Admins`,activity:`Recent activity`,activityTarget:`{{type}} · {{name}}`,viewAuditLog:`View audit log`,noActivity:`Nothing has happened yet.`,allModels:`All content types`,noModels:`No content types yet`,kinds:{collection:`Collection`,singleton:`Singleton`},version:`v{{version}}`,shortcuts:`Shortcuts`,createEntry:`Create entry`,newModel:`New content type`,uploadMedia:`Upload media`,invite:`Invite a teammate`,inviteTeam:`Invite your team`,inviteTeamDescription:`Add editors and administrators, each with the role they need.`,createToken:`Create an API token`,createTokenDescription:`Give your site or build pipeline scoped access to the API.`},settings:{sections:`Settings sections`,account:`Account`,workspace:`Workspace`,developer:`Developer`,profile:`Profile`,sessions:`Sessions`,appearance:`Appearance`,locales:`Locales`,seo:`SEO`,apiTokens:`API tokens`,assist:`Assist`},profile:{title:`Profile`,detailsTitle:`Details`,detailsSaved:`Profile saved.`,passwordTitle:`Password`,passwordDescription:`Changing your password signs you out on every other device.`,currentPassword:`Current password`,changePassword:`Change password`,passwordChanged:`Password changed.`,emailHint:`Your sign-in email. Ask an owner to change it.`},sessions:{title:`Sessions`,device:`Device`,ipAddress:`IP address`,signedIn:`Signed in`,lastActive:`Last active`,current:`This device`,unknownDevice:`Unknown device`,revokeTitle:`Revoke this session?`,revokeDescription:`That device will be signed out on its next request.`,revoked:`Session revoked.`,empty:`No other sessions.`},appearance:{title:`Appearance`,theme:`Theme`,storedHere:`Saved on this device.`,lookName:`{{theme}} {{variant}}`,variants:{light:`Light`,dark:`Dark`},themes:{shapio:{name:`Shapio`,description:`Plum, cream and acid yellow.`},classic:{name:`Cobalt`,description:`The original cobalt look.`},"murdered-out":{name:`Murdered out`,description:`Blacked out, no colour.`},forest:{name:`Forest`,description:`Deep green and lime.`},snowed:{name:`Snowed`,description:`White and ice blue.`},butter:{name:`Butter`,description:`Butter yellow and ink.`}}},locales:{title:`Locales`,add:`Add locale`,addTitle:`Add a locale`,editTitle:`Edit {{label}}`,code:`Code`,codeHint:`A language tag such as en, fr or fr-CA. It can't be changed later.`,label:`Name`,default:`Default`,fallbacks:`Fallbacks`,fallbacksHint:`Tried in order when content is missing in this locale; the default comes last.`,noFallbacks:`No fallbacks: the default locale is used.`,addFallback:`Add a fallback locale`,moveUp:`Move {{locale}} up`,moveDown:`Move {{locale}} down`,removeFallback:`Remove {{locale}}`,created:`{{label}} added.`,saved:`{{label}} saved.`,empty:`No locales configured.`,makeDefault:`Make default`,defaultTitle:`Make {{label}} the default locale?`,defaultDescription:`Requests without a locale, and every fallback chain, will end at {{label}} instead of {{current}}. Sites and apps may receive different content: this is a breaking change.`,defaultAcknowledge:`I understand API clients will get content in the new default locale.`,defaultChanged:`{{label}} is now the default locale.`,deleteTitle:`Delete {{label}}?`,deleteDescription:`It disappears from the API at once, and its content is purged in the background. This can't be undone.`,deleteContent_one:`{{count}} entry version has content in {{label}}. Deleting the locale permanently removes it.`,deleteContent_other:`{{count}} entry versions have content in {{label}}. Deleting the locale permanently removes them.`,deleteAcknowledge_one:`I understand {{count}} entry version will be permanently deleted.`,deleteAcknowledge_other:`I understand {{count}} entry versions will be permanently deleted.`,deleting:`Deleting…`,deleted:`{{label}} deleted.`},roles:{title:`Roles`,create:`New role`,name:`Name`,key:`Key`,keyHint:`Used in the API and in schema files. It can't be changed later.`,roleDescription:`Description`,kind:`Kind`,kindAdmin:`Admin`,kindDelivery:`Delivery`,kindHint:`Admin roles are held by admin users and management tokens; delivery roles by tokens that read content for your sites.`,builtIn:`Built-in`,custom:`Custom`,permissions:`Permissions`,permissionsCount_one:`{{count}} permission`,permissionsCount_other:`{{count}} permissions`,createTitle:`Create role`,editTitle:`Edit role`,created:`Role created.`,saved:`Role saved.`,deleteTitle:`Delete {{name}}?`,deleteDescription:`Users and tokens can't hold a role that's deleted. This can't be undone.`,deleted:`Role deleted.`,empty:`No roles yet.`,actions:{read:`Read entries`,readDrafts:`Read drafts`,readDraftsHint:`Lets this token's site render drafts, for development servers. Never grant it to a production token.`,create:`Create entries`,update:`Update entries`,delete:`Delete entries`,publish:`Publish entries`,schemaManage:`Change models`,schemaCreate:`Create models`,usersManage:`Manage admin users`,rolesManage:`Manage roles`,tokensManage:`Manage API tokens`,auditRead:`Read the audit log`,sitesManage:`Manage sites`,mediaRead:`Browse the media library`,mediaWrite:`Upload and edit media`,mediaManage:`Delete media and change its visibility`,publishingManage:`See jobs and every scheduled publication`,webhooksManage:`Manage webhooks`,deploymentsManage:`Manage deployment connections`,deploymentsTrigger:`Trigger and retry site builds`,changesManage:`Create and review change sets`,changesShip:`Ship and schedule change sets`,siteSettings:`Site settings`},contentPermissions:`Content, on every model`,instancePermissions:`Instance`,sections:`Role types`,tabAdmin:`Admin and token roles`,tabApp:`App roles`},apiTokens:{title:`API tokens`,create:`New token`,name:`Name`,role:`Role`,prefix:`Token`,expires:`Expires`,lastUsed:`Last used`,status:`Status`,active:`Active`,expiry:`Expiry`,expiryNever:`Never expires`,expiryDays_one:`In {{count}} day`,expiryDays_other:`In {{count}} days`,createTitle:`Create API token`,secretTitle:`Copy your new token`,secretDescription:`It's shown only this once. Store it somewhere safe, such as your deployment's secrets.`,secretLabel:`Token`,secretDone:`I've copied it`,revokeTitle:`Revoke {{name}}?`,revokeDescription:`Anything using this token will lose access immediately. This can't be undone.`,revoked:`Token revoked.`,revokedBadge:`Revoked`,draftsChip:`Drafts`,empty:`No API tokens yet.`,emptyDescription:`Create one to let a site or the CLI talk to Shapio.`,scope:`Works on`,scopeSite:`This site ({{name}})`,scopeSiteDescription:`The token's role applies on this site only.`,scopeNetwork:`Every site (network token)`,scopeNetworkDescription:`Its role applies on every site, including network actions such as managing users.`,appliesTo:`Site`},audit:{title:`Audit log`,when:`When`,actor:`Actor`,action:`Action`,target:`Target`,outcome:`Outcome`,ipAddress:`IP address`,success:`Success`,failure:`Failure`,filterAction:`Filter by action`,filterActionPlaceholder:`Filter by action, e.g. session.revoke`,filterActor:`Actor type`,allActors:`All actors`,actorTypes:{admin:`Admin`,app_user:`App user`,token:`API token`,anonymous:`Anonymous`,system:`System`},actions:{adminUserCreate:`Created admin user`,adminUserDelete:`Removed admin user`,adminUserPasswordChange:`Changed password`,adminUserUpdate:`Updated admin user`,apiTokenCreate:`Created API token`,apiTokenRevoke:`Revoked API token`,appAuthRefreshReuse:`Reused a revoked refresh token`,appRoleCreate:`Created app role`,appRoleDelete:`Deleted app role`,appRoleUpdate:`Updated app role`,appUserBlock:`Blocked app user`,appUserUnblock:`Unblocked app user`,appUserConfirmEmail:`Confirmed email`,appUserConfirmationResend:`Resent confirmation email`,appUserDelete:`Deleted app user`,appUserOauthLink:`Linked a sign-in provider`,appUserPasswordChange:`Changed password`,appUserPasswordReset:`Reset password`,appUserPasswordResetRequest:`Requested a password reset`,appUserRegister:`Signed up`,appUserRolesChange:`Changed app user roles`,appUserUpdate:`Updated app user`,authLogin:`Signed in`,authLogout:`Signed out`,authPasswordReset:`Reset password`,authPasswordResetRequest:`Requested a password reset`,changeSetCreate:`Created change set`,changeSetDiscard:`Discarded change set`,changeSetItemAdd:`Added to change set`,changeSetItemChangedAfterReview:`Draft changed after the change set was scheduled`,changeSetItemRemove:`Removed from change set`,changeSetSchedule:`Scheduled change set`,changeSetSchemaDraft:`Saved schema draft in change set`,changeSetSchemaDraftRemove:`Removed schema draft from change set`,changeSetShip:`Shipped change set`,changeSetShipping:`Started shipping change set`,changeSetUnschedule:`Unscheduled change set`,changeSetUpdate:`Updated change set`,contentDelete:`Deleted entry`,contentPublish:`Published entry`,contentRestore:`Restored entry version`,contentUnpublish:`Unpublished entry`,deploymentRetry:`Retried deployment`,deploymentTrigger:`Triggered deployment`,deploymentConnectionCreate:`Created deploy connection`,deploymentConnectionDelete:`Deleted deploy connection`,deploymentConnectionUpdate:`Updated deploy connection`,invitationAccept:`Accepted invitation`,invitationCreate:`Invited admin`,invitationLink:`Created an invitation link`,invitationRevoke:`Revoked invitation`,jobRetry:`Retried job`,localeCreate:`Added locale`,localeDelete:`Deleted locale`,localeUpdate:`Updated locale`,mediaDelete:`Deleted media`,mediaFolderDelete:`Deleted media folder`,mediaReplace:`Replaced media file`,mediaUpload:`Uploaded media`,mediaVisibilityChange:`Changed media visibility`,previewTokenCreate:`Created preview link`,previewTokenRevoke:`Revoked preview link`,publishingSchedule:`Scheduled publication`,publishingSchedulePublish:`Scheduled publishing`,publishingScheduleUnpublish:`Scheduled unpublishing`,publishingScheduleCancel:`Cancelled scheduled publication`,publishingScheduleExecute:`Ran scheduled publication`,roleCreate:`Created role`,roleDelete:`Deleted role`,roleUpdate:`Updated role`,schemaActivate:`Applied model change`,schemaChangeRequest:`Requested model change`,schemaCreate:`Created model`,schemaDelete:`Deleted model`,schemaSettingsUpdate:`Updated schema settings`,sessionRevoke:`Revoked session`,sessionRevokeAll:`Signed out everywhere`,setupComplete:`Completed setup`,transferImport:`Imported content`,webhookCreate:`Created webhook`,webhookDelete:`Deleted webhook`,webhookRedeliver:`Redelivered webhook`,webhookRotateSecret:`Rotated webhook secret`,webhookTest:`Tested webhook`,webhookUpdate:`Updated webhook`,assistAltText:`Suggested alt text with assist`,assistContentOps:`Proposed fixes with assist`,assistRewrite:`Rewrote text with assist`,assistSchemaDraft:`Proposed content types with assist`,assistSummarize:`Summarized with assist`,assistTranslate:`Translated with assist`,schemaScope:`Changed where a model is available`},targets:{adminInvitation:`Invitation`,adminRole:`Role`,adminSession:`Session`,adminUser:`Admin user`,apiToken:`API token`,appRole:`App role`,appUser:`App user`,component:`Component`,deploymentConnection:`Deploy connection`,entry:`Entry`,job:`Job`,locale:`Locale`,mediaAsset:`Media file`,mediaFolder:`Media folder`,model:`Model`,previewToken:`Preview link`,changeSet:`Change set`,schemaSettings:`Schema settings`,webhook:`Webhook`},empty:`No audit events match.`,clearFilters:`Clear filters`},users:{title:`Users`,invite:`Invite user`,name:`Name`,email:`Email`,roles:`Roles`,status:`Status`,lastLogin:`Last sign-in`,active:`Active`,disabled:`Disabled`,you:`You`,disable:`Disable`,enable:`Enable`,inviteTitle:`Invite a user`,invited:`Invitation sent to {{email}}.`,rolesSaved:`Access updated.`,removeTitle:`Remove {{name}}?`,removeDescription:`They will be signed out and can no longer sign in. Their past changes stay in the history.`,removed:`User removed.`,statusChanged:`User updated.`,empty:`No users yet.`,invitationsTitle:`Pending invitations`,invitationExpires:`Expires`,invitationRevoked:`Invitation revoked.`,revokeInvitationTitle:`Revoke the invitation for {{email}}?`,revokeInvitationDescription:`Their invitation link stops working.`,role:`Role`,copyLink:`Copy link`,invitationLink:{title:`Invitation link for {{email}}`,noEmailDescription:`Email isn't set up on this server, so send this link yourself. It expires {{date}}.`,description:`Send this link yourself. Earlier links, including the emailed one, no longer work. It expires {{date}}.`,label:`Invitation link`,done:`I've copied it`,confirmTitle:`Create a new link for {{email}}?`,confirmDescription:`This creates a new link; any earlier link stops working.`,create:`Create link`},editAccess:`Change access`,accessTitle:`Access for {{name}}`,access:{title:`Access`,row:`Access {{n}}`,site:`Site`,remove:`Remove access {{n}}`,add:`Add a site`,badge:`{{role}} · {{site}}`}},models:JSON.parse(`{"creating":"Creating…","created":"Created — no restart needed.","updated":"Model updated — no restart needed","deleted":"Deleted. Its entries are kept and come back if it is restored.","kind":"Kind","label":"Label","apiKey":"API ID","apiKeyHint":"Renaming it later breaks API clients.","pluralApiKey":"Plural API ID","pluralApiKeyHint":"Names the list route: /api/content/articles.","restLabel":"REST","graphqlLabel":"GraphQL","endpointPath":"/api/content/{{routeKey}}","fieldApiKeyHint":"Letters, digits and _, not starting with a digit.","descriptionLabel":"Description","localized":"Localized","localizedHint":"Content per locale.","versionNumber":"v{{version}}","pendingChange":"Change in progress","choose":"Choose…","notSet":"Not set","commaSeparated":"Separate values with commas.","emptyDescription":"It's live as soon as it's created.","columns":{"label":"Name","apiKey":"API IDs","fields":"Fields","version":"Version","activated":"Active since","kind":"Kind"},"kinds":{"collection":"Collection","singleton":"Singleton","component":"Component","collectionDescription":"Many entries, e.g. articles.","singletonDescription":"One entry, e.g. the home page.","componentDescription":"Reusable fields embedded in models."},"lock":{"title":"Schema editing is locked","description":"Changes come from \`shapio schema apply\`.","reason":"Reason: {{reason}}"},"dataTypes":{"string":{"name":"Short text","description":"A single line: titles, names, labels."},"text":{"name":"Long text","description":"Plain text over several lines, without formatting."},"richtext":{"name":"Rich text","description":"Formatted text with headings, links, lists, tables and images."},"code":{"name":"Code","description":"A snippet, embed code or config in one language, edited with line numbers and highlighting."},"number":{"name":"Number","description":"Any number, with or without decimals."},"integer":{"name":"Integer","description":"Whole numbers such as counts and positions."},"decimal":{"name":"Decimal","description":"Exact decimals such as prices, stored without rounding."},"biginteger":{"name":"Big integer","description":"Whole numbers too large for a normal number."},"boolean":{"name":"Boolean","description":"Yes or no."},"date":{"name":"Date","description":"A calendar date."},"datetime":{"name":"Date and time","description":"A moment in time, stored in UTC."},"time":{"name":"Time","description":"A time of day."},"enum":{"name":"Choice","description":"One (or several) values from a fixed list."},"json":{"name":"JSON","description":"Any structured data, edited as JSON."},"slug":{"name":"Slug","description":"A URL-friendly identifier, e.g. summer-sale-2026."},"email":{"name":"Email","description":"An email address."},"url":{"name":"URL","description":"A web address or link."},"uid":{"name":"UID","description":"A URL-safe unique identifier."},"media":{"name":"Media","description":"Images, videos and files from the media library."},"relation":{"name":"Relation","description":"Links to entries of another model."},"component":{"name":"Component","description":"A reusable group of fields, once or repeated."},"dynamiczone":{"name":"Dynamic zone","description":"A list of blocks chosen from several components."}},"builder":{"subtitle":"API ID {{apiKey}} · version {{version}}","subtitleCollection":"API IDs {{apiKey}} · {{pluralApiKey}} · version {{version}}","untitled":"Untitled","unsaved":"Unsaved changes","problems_one":"{{count}} problem to fix","problems_other":"{{count}} problems to fix","discard":"Discard changes","discardTitle":"Discard your changes?","discardDescription":"Your unsaved edits are lost.","review":"Review","planning":"Planning…","more":"More actions","delete":"Delete model","deleteTitle":"Delete {{label}}?","deleteDescription":"It leaves the API at once (a breaking change). Its entries are kept and return if it's restored.","changeStarted":"Checking existing content. The change goes live when the checks pass.","definitionSettings":"Model settings","summaryLocalized":"Localized","summaryNotLocalized":"Not localized","summaryDrafts":"Drafts","summaryNoDrafts":"No drafts","fieldsTitle":"Fields","fields_one":"{{count}} field","fields_other":"{{count}} fields","addField":"Add field","newField":"New field","dataType":"Data type","typeAllowed":"You can change this.","typeConverted":"Existing values will be converted when you save.","typeChecked":"Existing values will be checked when you save; if any fail, the change is refused and nothing changes.","typeKept":"Stored values stay as they are.","typeBreaking":"API clients will see a different type for this field.","typeDestructive":"Formatting is lost.","typeLimited":"Greyed-out types: Shapio can't convert {{type}} to them.","typeUnsupported":"Shapio can't convert {{from}} to {{to}}.","noFields":"No fields yet.","startTitle":"Start with a field","selectField":"Select a field","propertiesLabel":"Field properties","fieldProperties":"{{label}} properties","options":"Options","reorder":"Reorder {{label}}","reorderHelp":"Drag to reorder, or focus the handle and press the up or down arrow key.","moved":"Moved {{label}} to position {{position}} of {{total}}.","moveUp":"Move {{label}} up","moveDown":"Move {{label}} down","requiredBadge":"Required","localizedBadge":"Localized","hiddenBadge":"Hidden from the delivery API","hasProblems":"Has problems to fix","removeField":"Remove field","general":"General","helpText":"Help text","apiKeyRenameWarning":"Changing an API ID is a breaking change: API clients using the old name stop receiving this value.","pluralApiKeyRenameWarning":"Changing the plural API ID is a breaking change: API clients using the old list route and query stop working.","settings":"Settings","noSettings":"This data type has no settings.","patternHint":"A regular expression values must match.","sourceFieldHint":"The slug is suggested from this field's text.","chooseModel":"Choose a model","chooseComponent":"Choose a component","noComponents":"No components exist yet. Create one on the Components tab.","enumValuesHint":"The API stores the value; editors see the label.","enumLabel":"Label of choice {{position}}","enumValue":"Value of choice {{position}}","enumLabelPlaceholder":"Label","enumValuePlaceholder":"value","enumRemove":"Remove choice {{position}}","enumAdd":"Add choice","required":"Required","requiredHint":"Existing entries are checked first.","unique":"Unique","uniqueHint":"No two entries may share a value.","defaultValue":"Default value","defaultValueHint":"For new entries and when the field becomes required.","booleanTrue":"Yes","booleanFalse":"No","editorSection":"Editor","editor":"Editor","editorHint":"Changing it never changes stored data.","public":"Public","publicHint":"Off: hidden from the delivery API unless a role grants it.","fieldLocalized":"Localized","fieldLocalizedHint":"Off: one value shared by every locale.","filterable":"Filterable","indexHint":"Builds an index in the background.","sortable":"Sortable","deprecated":"Deprecated","deprecatedHint":"Hidden from the API and forms; values are kept.","content":"Content","modelLocalizedHint":"Off keeps only the default locale's values.","draftAndPublish":"Drafts and publishing","draftAndPublishHint":"Off: saving publishes immediately.","category":"Category","categoryHint":"Groups components in pickers.","display":"Display","titleField":"Title field","titleFieldHint":"Labels entries in lists, pickers and relations.","sortField":"Default order","sortFieldHint":"Only sortable fields can order the list.","sortNewest":"Newest first","sortDirection":"Direction","sortAscending":"Ascending","sortDescending":"Descending","listColumns":"List columns","automatic":"Automatic","coverField":"Cover","coverFieldHint":"The image shown above the title when an entry opens. Automatic uses the first single image field.","canvasFields":"Written in the document","canvasFieldsHint":"The fields written in the document under the title, in this order. Unset, rich text, sections, repeatable components and galleries are; everything else is a property. Any other field joins with Show in document in its settings.","placement":{"label":"Show in document","hint":"On, entries show this field in the document under its name, among the blocks. Off, it is a property, in the strip under the title and the Settings panel. Automatically, rich text, sections, repeatable components and galleries are in the document and everything else is a property.","lockedTitle":"The title is the document's heading.","lockedCover":"This is the cover, chosen in Display.","lockedLast":"The document keeps at least one field."},"stripFields":"Properties under the title","stripFieldsHint":"Shown as chips under the title. With none chosen, the first five filled-in properties are shown.","layout":"Layout","layoutHint":"Document: an entry opens as a page to write in, with the title as its heading, blocks in the body, and the other fields as properties. Form: every field is on the page at its width, with groups as sections.","layoutDocument":"Document","layoutForm":"Form","formWireframe_one":"Form preview: {{count}} field","formWireframe_other":"Form preview: {{count}} fields","width":"Width","widthHint":"How much of a row the field takes in the form. Rows fill in field order, so two halves or three thirds sit side by side.","widthFull":"Full","widthTwoThirds":"Two thirds","widthHalf":"Half","widthThird":"Third","summaryForm":"Form","group":"Group","groupHint":"Fields in the same group are shown together under its name, as a section of the form. A group sits where its first field is.","groupNone":"None","groupNew":"New group…","groupName":"Group name","groups":"Groups","groupsHint":"Rename a group here, or remove it to take its fields out of it. Put a field in a group from the field's settings.","groupsEmpty":"No groups yet. Choose one in a field's settings.","groupLabel":"Name of group {{position}}","groupRemove":"Remove group {{label}}"},"plan":{"title":"Review changes to {{label}}","summary":{"metadata":"Only metadata changes: applied instantly, and the API doesn't change.","live":"These changes go live immediately. Existing content stays valid.","prerequisites":"Existing content is checked first. The current version stays live until the checks pass, then the new one activates.","breaking":"This breaks the API contract or removes data. Review it and confirm below."},"buckets":{"metadata":"Metadata only","live":"Live","prerequisites":"Needs checks","breaking":"Breaking"},"affected_one":"{{count}} entry version affected (all locales and states)","affected_other":"{{count}} entry versions affected (all locales and states)","changes_one":"{{count}} change","changes_other":"{{count}} changes","prerequisites":"Prerequisites","prerequisitesHint":"They run before the new version activates.","followUps":"After activation","stepEntries_one":"{{count}} entry version to check","stepEntries_other":"{{count}} entry versions to check","stepInvalid_one":"{{count}} would fail","stepInvalid_other":"{{count}} would fail","acknowledge":"Confirm this change","acknowledgeBreaking":"I understand this changes the API contract: sites and apps using the old shape must be updated.","acknowledgeDestructive":"I understand stored data will be converted or removed, and a schema rollback can't restore it.","apply":"Ship now","applying":"Shipping…"},"changes":{"definitionAdded":"Create {{name}}","definitionRemoved":"Delete {{name}}","definitionApiKey":"Change the API ID from {{from}} to {{to}}","definitionPluralApiKey":"Change the plural API ID from {{from}} to {{to}}","definitionMetadata":"Change the {{property}}","modelKind":"Change the kind from {{from}} to {{to}}","modelLocalized_on":"Localize this model's content","modelLocalized_off":"Stop localizing: only the default locale's values are kept","modelDraftAndPublish_on":"Turn on drafts and publishing","modelDraftAndPublish_off":"Turn off drafts and publishing: unpublished drafts are discarded","fieldAdded":"Add the field {{field}} ({{type}})","fieldRemoved":"Remove the field {{field}} (stored values are kept)","fieldOrder":"Reorder the fields","fieldApiKey":"Change the API ID of {{field}} from {{from}} to {{to}}","fieldMetadata":"Change the {{property}} of {{field}}","fieldEditor":"Change the editor of {{field}}","fieldType":"Change the type of {{field}} from {{from}} to {{to}}","fieldRequired_on":"Make {{field}} required","fieldRequired_off":"Make {{field}} optional","fieldLocalized_on":"Localize {{field}}","fieldLocalized_off":"Share {{field}} across locales: only the default locale's value is kept","fieldPublic_on":"Show {{field}} in the delivery API","fieldPublic_off":"Hide {{field}} from the delivery API","fieldDeprecated_on":"Deprecate {{field}}","fieldDeprecated_off":"Restore {{field}}","fieldUnique_on":"Require unique values for {{field}}","fieldUnique_off":"Allow duplicate values for {{field}}","fieldFilterable_on":"Allow filtering on {{field}}","fieldFilterable_off":"Stop filtering on {{field}}","fieldSortable_on":"Allow sorting on {{field}}","fieldSortable_off":"Stop sorting on {{field}}","fieldSettings":"Change the {{property}} setting of {{field}}"},"steps":{"validateRequired":"Check that every entry has a value for {{field}}","backfill":"Fill {{field}} with its default value where it is empty","validateValues":"Check existing values against the new rules","checkUnique":"Check that values of {{field}} are unique","convert":"Convert stored values","buildIndex":"Build the filter and sort index for {{field}}","dropIndex":"Drop an index that is no longer used","releaseUnique":"Release the unique values of {{field}}","purgeLocale":"Remove the deleted locale's content"},"progress":{"runningTitle":"Applying your change","runningDescription":"The current version stays live until the checks pass.","failedTitle":"The change didn't go live","failedDescription":"Existing content doesn't fit, so the previous version stays active.","invalidCount_one":"{{count}} entry version doesn't fit.","invalidCount_other":"{{count}} entry versions don't fit."},"remote":{"title":"This model changed in another session","description":"A newer version is active. Reload to see it.","chooseDescription":"A newer version is active. Take it, or keep your edits on top of it and review again.","reload":"Reload","reloadLatest":"Reload latest (discard my edits)","keepEdits":"Keep my edits"},"formats":{"date":"Format: 2026-12-31","datetime":"Format: 2026-12-31T09:30:00Z (UTC)","time":"Format: 09:30 or 09:30:00","decimal":"A decimal number, e.g. 19.99","biginteger":"A whole number, e.g. 9007199254740993"},"properties":{"label":"label","description":"description","display":"display settings","category":"category","icon":"icon","defaultValue":"default value","minLength":"Minimum length","maxLength":"Maximum length","pattern":"Pattern","language":"Language","validate":"Require valid JSON","min":"Minimum","max":"Maximum","precision":"Precision (digits)","scale":"Scale (digits after the point)","values":"Choices","multiple":"Allow several","sourceFieldId":"Generate from","protocols":"Allowed protocols","allowedKinds":"Allowed media kinds","target":"Target model","cardinality":"Cardinality","component":"Component","repeatable":"Repeatable","components":"Allowed components","placeholder":"Placeholder","rows":"Rows","format":"Format","presets":"Preset colors","toolbar":"Toolbar","step":"Step","trueLabel":"Label for yes","falseLabel":"Label for no","layout":"Layout","stepMinutes":"Minute step","allowInlineCreate":"Allow creating entries from the picker","collapsed":"Start collapsed","width":"width"},"values":{"one":"One entry","many":"Many entries","http":"http","https":"https","mailto":"mailto","tel":"tel","image":"Images","video":"Videos","audio":"Audio","document":"Documents","other":"Other files","hex":"Hex","rgb":"RGB","full":"Full","minimal":"Minimal","vertical":"Vertical","horizontal":"Horizontal","local":"Local time","utc":"UTC","plain":"Plain text","html":"HTML","css":"CSS","javascript":"JavaScript","json":"JSON","yaml":"YAML","markdown":"Markdown"},"editors":{"textInput":"Text input","textarea":"Text area","color":"Color picker","richText":"Rich-text editor","numberInput":"Number input","toggle":"Toggle","checkbox":"Checkbox","segmented":"Segmented control","select":"Dropdown","radio":"Radio buttons","checkboxGroup":"Checkboxes","datePicker":"Date picker","dateTimePicker":"Date and time picker","timePicker":"Time picker","slugInput":"Slug input","jsonEditor":"JSON editor","codeEditor":"Code editor","mediaPicker":"Media picker","relationPicker":"Relation picker","componentEditor":"Component editor","dynamicZoneEditor":"Dynamic zone editor","seoEditor":"SEO editor"},"issues":{"INVALID_STRUCTURE":"This value isn't valid.","INVALID_ID":"Choose a valid target.","DUPLICATE_ID":"Another field has the same ID.","API_KEY_INVALID":"Use letters, digits and _, not starting with a digit.","API_KEY_TOO_LONG":"Use at most 64 characters.","API_KEY_RESERVED_PREFIX":"API IDs can't start with \\"__\\" (reserved by GraphQL).","API_KEY_RESERVED":"This name is reserved. Choose another.","API_KEY_COLLISION":"Another one already uses this API ID (IDs are case-insensitive).","PLURAL_API_KEY_SAME_AS_SINGULAR":"The plural API ID must differ from the API ID.","GENERATED_NAME_COLLISION":"This name would clash with a GraphQL name another model already generates.","INVALID_SETTINGS":"This setting isn't valid.","INVALID_RANGE":"The minimum is greater than the maximum.","INVALID_PATTERN":"This isn't a valid regular expression.","DUPLICATE_ENUM_VALUE":"This value is listed twice.","INVALID_ENUM_VALUE":"Use letters, digits and _, not starting with a digit (and not true, false or null).","UNSUPPORTED_FLAG":"This option isn't available for this field.","INVALID_DEFAULT_VALUE":"The default value doesn't fit this field's rules.","UNKNOWN_EDITOR":"This editor isn't installed.","INCOMPATIBLE_EDITOR":"This editor can't edit this field.","INVALID_EDITOR_OPTIONS":"This editor option isn't valid.","UNKNOWN_FIELD_REFERENCE":"This refers to a field that doesn't exist.","INVALID_FIELD_REFERENCE":"This field can't be used here.","DUPLICATE_GROUP":"Another group has the same ID.","UNKNOWN_REFERENCE":"This refers to a model or component that doesn't exist.","INVALID_REFERENCE_TARGET":"This kind of model or component can't be used here.","COMPONENT_CYCLE":"Components can't contain themselves, directly or through others.","COMPONENT_TOO_DEEP":"Components are nested too deeply.","REFERENCED_DEFINITION":"Another model still references this one. Remove the reference first.","apiKeyTakenOnSite":"Already used on {{site}}."},"scope":{"onlyOn":"Only on {{site}}","share":"Share with all sites","keep":"Keep on this site","shareTitle":"Share {{label}} with all sites?","shareDescription":"Every site gets it, each with its own content.","keepTitle":"Keep {{label}} on {{site}} only?","keepDescription":"Other sites lose it. Refused while another site has entries of it.","blocked":"Save or discard your changes first.","shared":"Shared with all sites.","kept":"Now only on this site.","readOnly":"Shared with all sites: changing it needs a role on every site."}}`),media:{title:`Media`,assetsLabel_one:`{{count}} file`,assetsLabel_other:`{{count}} files`,openDetails:`Open {{name}}`,select:`Select {{name}}`,selection:`Selection`,selectedCount_one:`{{count}} file selected`,selectedCount_other:`{{count}} files selected`,clearSelection:`Clear selection`,search:`Search media`,searchPlaceholder:`Search by name, alt text or caption`,typeFilter:`File type`,view:`View`,viewGrid:`Grid view`,viewList:`List view`,loadMore:`Load more`,empty:`No media yet`,emptyFiltered:`Nothing matches these filters`,emptyFolder:`This folder is empty`,dimensions:`{{width}} × {{height}}`,types:{all:`All types`,image:`Images`,video:`Video`,audio:`Audio`,pdf:`PDFs`},status:{processing:`Processing`,pending:`Pending`,ready:`Ready`,failed:`Failed`},fields:{filename:`File name`,type:`Type`,size:`Size`,status:`Status`,uploaded:`Uploaded`,alt:`Alt text`,caption:`Caption`},folders:{title:`Folders`,all:`All media`,unfiled:`Not in a folder`,none:`No folder`,new:`New folder`,newSubfolder:`New subfolder`,rename:`Rename`,actions:`Actions for {{name}}`,newName:`Name of the new folder`,renameLabel:`New name for “{{name}}”`,create:`Create folder`,saveName:`Save name`,created:`Folder “{{name}}” created`,renamed:`Folder renamed to “{{name}}”`,deleted:`Folder “{{name}}” deleted`,deleteTitle:`Delete “{{name}}”?`,deleteDescription:`Only empty folders can be deleted.`},move:{action:`Move to…`,title_one:`Move {{count}} file`,title_other:`Move {{count}} files`,done_one:`Moved {{count}} file`,done_other:`Moved {{count}} files`},upload:{action:`Upload`,dropHere:`Drop files to upload`,queueTitle:`Uploads`,summary:`{{active}} in progress, {{failed}} failed`,clearFinished:`Clear finished`,doneSummary_one:`{{count}} uploaded`,doneSummary_other:`{{count}} uploaded`,showFinished:`Show finished uploads`,hideFinished:`Hide finished uploads`,uploading:`Uploading… {{percent}}%`,checking:`Checking the file…`,done:`Uploaded`,progress:`Upload progress of {{name}}`,retry:`Retry {{name}}`,dismiss:`Dismiss {{name}}`,transferFailed:`The storage refused the file (status {{status}}).`,unreachable:`The upload could not reach the storage. Check your connection and the bucket’s CORS settings.`,replaced:`Replaced the file with {{name}}`},details:{title:`File details`,metadata:`Details`,formLabel:`File details`,altHint:`What the image shows`,saved:`Details saved`,replace:`Replace file`,openFile:`Open file`,previewOf:`Preview of {{name}}`,signedLinkNote:`This file is private: copied links work for one hour.`},focal:{title:`Focal point`,hint:`The part of the image that crops keep in view. Click the image to set it.`,x:`Horizontal (%)`,y:`Vertical (%)`,unset:`Centre`,clear:`Clear`},visibility:{title:`Visibility`,private:`Private`,privateLabel:`Private`,publicExplanation:`Anyone with the link can open it.`,privateExplanation:`Opens only through signed links that expire.`,needsManage:`Needs the media manage permission.`,makePrivateTitle:`Make this file private?`,makePrivateDescription:`Its public link stops working at once.`,makePublicTitle:`Make this file public?`,makePublicDescription:`Anyone with its link can open it.`,makePrivate:`Make private`,makePublic:`Make public`,changed:`Visibility changed`},variants:{title:`Sizes`,thumbnail:`Thumbnail`,w640:`640 px wide`,w1280:`1280 px wide`,w1920:`1920 px wide`,processing:`Sizes are being made…`,none:`No other sizes: only images get them.`},usage:{title:`Used in`,none:`Not used in any content.`,count_one:`Used by {{count}} entry version.`,count_other:`Used by {{count}} entry versions.`,entry:`Entry {{id}}`,draft:`Draft`,published:`Published`},delete:{action:`Delete file`,title:`Delete “{{name}}”?`,description:`The file and its sizes are removed for good.`,done:`Deleted {{name}}`,inUseTitle:`This file is in use`,inUseDescription_one:`{{count}} entry version still uses it.`,inUseDescription_other:`{{count}} entry versions still use it.`,ownerMayForce:`Deleting it anyway leaves those entries pointing at a missing file.`,onlyOwners:`Remove it from that content first, or ask an owner.`,force:`Delete anyway`}},entry:{shortcutHint:`{{action}} ({{keys}})`,layout:{setTitle:`Layout of {{model}}`,switchedForm:`{{model}} now opens as a form.`,switchedDocument:`{{model}} now opens as a document.`,undo:`Undo`,switchLabel:`Open as a form`,needsReview:`This change needs a review. Make it in Structure.`},title:{placeholder:`{{field}}`},canvas:{label:`Content`,placeholder:`Write, or press / for blocks`},blocks:{menu:`Blocks`,addBlock:`Add a block, or just keep writing`,addAfter:`Add a block below`,addBetween:`Add a block here ({{fields}})`,insertAt:`Add a block at position {{position}}`,addFiles:`Add files to {{field}}`,drag:`Move this block`,dragHint:`Drag to move, or click and press ⌥↑ / ⌥↓`,dragItem:`Drag {{item}} (item {{position}}) to move it`,groupWrite:`Write`,groupMedia:`Media`,groupComponents:`Your components`,groupIn:`{{group}} · {{field}}`,paragraph:`Paragraph`,heading:`Heading`,subheading:`Subheading`,quote:`Quote`,bulletList:`Bulleted list`,orderedList:`Numbered list`,code:`Code`,divider:`Divider`,image:`Image`,imageHint:`From the library, or drop a file`,table:`Table`},image:{caption:`Caption`,captionPlaceholder:`Add a caption`},upload:{uploading:`Uploading {{name}}…`,uploadingCount_one:`Uploading {{count}} file…`,uploadingCount_other:`Uploading {{count}} files…`,failed:`Couldn't upload {{name}}. Try again, or add it from the media library.`},gallery:{addOrDrop:`Add files, or drop them here`},cover:{add:`Add {{field}}`,addOrDrop:`Add {{field}}, or drop an image here`,replace:`Replace`,details:`Alt text and focal point`,remove:`Remove`},properties:{title:`Properties`,empty:`Empty`,more_one:`+{{count}} more`,more_other:`+{{count}} more`,add_one:`Add {{count}} property`,add_other:`Add {{count}} properties`,andMore_one:`{{list}} and {{count}} more`,andMore_other:`{{list}} and {{count}} more`,items_one:`{{count}} item`,items_other:`{{count}} items`},presence:{label:`Also editing: {{names}}`,youElsewhere:`you, in another tab`},palette:{switchLocale:`Switch to {{locale}}`},settings:{open:`Settings`,title:`Entry settings`,status:`Status`,now:`Now`,liveSince:`Live since`,startLocale:`Start {{locale}}`,cover:`{{field}}`,allVersions:`All versions and compare`,danger:`Danger zone`,unpublishTitle:`Unpublish this locale?`,unpublishDescription:`It stops being served by the API. The draft stays.`},preflight:{title:`Ready to publish?`,description:`It goes live as soon as you publish.`,checks:`Checks`,allClear:`Everything is ready.`,error:`Needs fixing:`,warning:`Worth a look:`,warningHint:`You can publish anyway.`,fix:`Fix`,schedule:`Schedule…`,scheduleAt:`Publish at`,scheduleConfirm:`Schedule`,scheduledToast:`Scheduled to publish {{time}}.`,notYet:`Not yet`,publishNow:`Publish now`,rules:{requiredEmpty:`{{field}} is empty, and it's required.`,invalid:`{{field}}: {{problem}}`,mediaMissing:`A file in {{field}} is no longer in the media library.`,altMissing:`An image in {{field}} has no alt text, so people using screen readers won't know what it shows.`,localeMissing:`There is no {{locale}} version to publish yet.`,localeNotStarted:`{{locale}} hasn't been started. This publishes the current locale only.`,relationMissing:`{{field}} links to an entry that no longer exists.`,relationUnpublished:`{{field}} links to an entry that isn't published, so the site won't show it.`,uniqueConflict:`Another published entry already uses this {{field}}.`,staleDraft_one:`This draft hasn't changed in {{days}} day.`,staleDraft_other:`This draft hasn't changed in {{days}} days.`,unpublishedChanges_one:`These changes have waited {{days}} day to be published.`,unpublishedChanges_other:`These changes have waited {{days}} days to be published.`},descriptionLocale:`{{locale}} goes live as soon as you publish. Other locales stay as they are.`},noFields:{title:`Nothing to write here yet`,ask:`This content type has no fields. Ask someone who manages its structure to add some.`,addFields:`Add fields`},changeSet:{add:`Add to change set…`,title:`Publish when a change set ships`,openSets:`Open change sets`,none:`No open change sets yet.`,newTitle:`New change set`,added:`Added to “{{title}}”. It goes live when the set ships.`,open:`Open`},preview:{frameTitle:`Preview of {{title}} on {{site}}`,site:`Site`,reload:`Reload the preview`,openInTab:`Open in a new tab`,showDocument:`Document`,close:`Close the preview`,noUrlTitle:`This connection has no preview URL`,noUrlDescription:`Add one to the deployment connection, or pick another site.`,notFramableTitle:`This site opens in a new tab`,notFramableDescription:`Its preview URL changes host with the entry or locale, so it can't be shown beside the document.`,blockedTitle:`Reload the admin to show this site`,blockedDescription:`The site was connected after the admin was loaded.`,reloadAdmin:`Reload the admin`,sdkMissingTitle:`The site isn't using @shapio/visual yet`,sdkMissingDescription:`The preview reloads after each save. With @shapio/visual, clicking part of the page takes you to its field.`,setupGuide:`How to set it up`,otherEntry:`That part of the page belongs to another entry.`,otherLocale:`That part of the page is in {{locale}}.`,unknownField:`That part of the page isn't a field of this entry.`}},content:{title:`Content`,untitled:`Untitled`,empty:{title:`No models yet`,action:`Create a model`},missingModel:{title:`There is no model “{{key}}”`,back:`Back to content`},status:{draft:`Draft`,published:`Published`,modified:`Changed`},scope:{localized:`Localized`,shared:`Shared`,sharedHint:`One value for every locale. Saving it updates every locale's draft.`},actions:{publish:`Publish`,published:`Published`,unpublish:`Unpublish`,duplicate:`Duplicate`,delete:`Delete entry`},list:{},filters:{operators:{eq:`is`,ne:`is not`,in:`is one of`,nin:`is none of`,lt:`is less than`,lte:`is at most`,gt:`is greater than`,gte:`is at least`,contains:`contains (case-sensitive)`,notContains:`does not contain`,containsi:`contains`,startsWith:`starts with`,endsWith:`ends with`,null:`is empty`,notNull:`is not empty`}},locales:{label:`Locale`,statuses:`Status per locale`,notCreated:`Not created`,copyFrom:`Copy from {{locale}}`,copyTitle:`Replace localized values with {{locale}}?`,copyDescription:`Localized fields get the default locale's values. Nothing is saved until you save.`,copyConfirm:`Copy values`,copiedToast:`Localized values copied. Review them, then save.`,missing:`This entry has no {{locale}} version yet. Fill in the localized fields and save to create it.`},save:{saving:`Saving…`,failed:`Couldn't save. Your changes are still here.`,unsaved:`Unsaved changes`,autosavedAt:`Draft autosaved {{time}}`,savedAt:`Saved {{time}}`,autosaved:`Draft autosaved`,saved:`Saved`,draftAutosaved:`Draft has autosaved changes`,allSaved:`All changes saved`},form:{newTitle:`New {{model}}`,create:`Create`,creating:`Creating…`,createLocale:`Create {{locale}} version`,save:`Save`,preview:`Preview`,previewUnavailable:`Preview needs a deployment connection with a preview URL.`,created:`Created`,updated:`Updated`,notPublished:`Not published`,fixProblems_one:`{{count}} field needs attention before this can be saved.`,fixProblems_other:`{{count}} fields need attention before this can be saved.`,createdToast:`Entry created.`,publishedToast:`Published.`,publishedOthersToast_one:`Published {{count}} more locale.`,publishedOthersToast_other:`Published {{count}} more locales.`,unpublishedToast:`Unpublished. It is no longer served by the API.`,deletedToast:`Entry deleted.`,duplicatedToast:`Duplicated. You're now editing the copy.`,deleteTitle:`Delete “{{title}}”?`,deleteDescription:`The entry disappears from the API in every locale. Its history is kept.`},conflict:{title:`Someone else saved this entry`,description:`Reload the latest version and keep your changes on top of it, or discard them.`,schemaTitle:`The model changed while you were editing`,reload:`Reload and keep my changes`,discard:`Discard my changes`,discardTitle:`Discard your changes?`,discardDescription:`The latest saved version replaces everything you changed here.`,discardConfirm:`Discard`},publishOthers:{notice_one:`{{count}} other published locale ({{locales}}) still serves older shared values.`,notice_other:`{{count}} other published locales ({{locales}}) still serve older shared values.`,confirm_one:`Publish it`,confirm_other:`Publish them`,notNow:`Not now`},referenced:{title:`This entry is still linked`,description:`Remove the links in these entries first.`,entry:`{{model}} · {{id}}`,unknown:`An entry you can't see · {{id}}`},history:{title:`History`,list:`Revisions`,empty:`No saved versions yet.`,latest:`current`,diffTitle:`Restoring this version changes`,noChanges:`Nothing: it matches the form.`,beforeAfter:`Current: {{before}} → After restore: {{after}}`,restore:`Restore this version`,restoreTitle:`Restore this version?`,restoreDescription:`Your unsaved changes will be replaced by the restored version.`,restoreConfirm:`Restore`,restoredToast:`Version restored as a new revision.`,reasons:{create:`Created`,save:`Saved`,publish:`Published`,restore:`Restored`,duplicate:`Duplicated`,localize:`Locale created`},changes:{added:`would be cleared`,removed:`would be filled in`,changed:`would change`}},items:{add:`Add {{item}}`,addSection:`Add section`,removeSingle:`Remove {{item}}`,empty:`Nothing added yet.`,emptyZone:`No sections yet.`,position:`item {{index}} of {{count}}`,problems_one:`{{count}} problem`,problems_other:`{{count}} problems`,moveUp:`Move {{item}} (item {{position}}) up`,moveDown:`Move {{item}} (item {{position}}) down`,duplicate:`Duplicate {{item}} (item {{position}})`,remove:`Remove {{item}} (item {{position}})`,expandAll:`Expand all`,collapseAll:`Collapse all`,componentMissing:`This field's component no longer exists.`,unknownComponent:`Unknown section ({{key}})`,unknownComponentHint:`This component is no longer allowed here.`},fields:{required:`(required)`,yes:`Yes`,no:`No`,choose:`Choose…`,clearValue:`Clear {{field}}`,characterCount:`{{count}} / {{max}} characters`,customEditorMissing:`The custom editor “{{id}}” isn't installed; the default editor is shown.`,number:{notNumber:`Enter a number.`,notInteger:`Enter a whole number.`},dateTime:{local:`Your time zone ({{zone}})`,utc:`UTC`},slug:{link:`Generate from the title`,unlink:`Edit the slug by hand`},json:{invalid:`Not valid JSON: {{reason}}`,format:`Format`},code:{keys:`Tab moves to the next field. Indent with {{indent}}, outdent with {{outdent}}.`,summary_one:`{{language}}, {{count}} line`,summary_other:`{{language}}, {{count}} lines`},color:{picker:`Pick a colour for {{field}}`,presets:`Preset colours`}},issues:{required:`This field is required.`,invalidType:`This value has the wrong type.`,invalidFormat:`This value isn't in the expected format.`,format:{email:`Enter an email address, like name@example.com.`,url:`Enter a full URL, like https://example.com.`,slug:`Use lowercase letters, numbers and single hyphens, like summer-sale.`,uid:`Use letters, numbers and . _ ~ - only.`,date:`Enter a date like 2026-10-01.`,datetime:`Enter a date and time.`,time:`Enter a time like 14:30.`,decimal:`Enter a decimal number, like 12.50.`,biginteger:`Enter a whole number.`,code:`Must be valid JSON.`},tooShort_one:`Use at least {{count}} character.`,tooShort_other:`Use at least {{count}} characters.`,tooLong_one:`Use at most {{count}} character.`,tooLong_other:`Use at most {{count}} characters.`,tooSmall:`Must be at least {{value}}.`,tooLarge:`Must be at most {{value}}.`,tooFew_one:`Add at least {{count}} item.`,tooFew_other:`Add at least {{count}} items.`,tooMany_one:`Use at most {{count}} item.`,tooMany_other:`Use at most {{count}} items.`,notAllowed:`Choose one of the listed values.`,patternMismatch:`This value doesn't match the required pattern.`,duplicate:`The same item is chosen twice.`,unknownField:`This field no longer exists in the model.`,unknownComponent:`This component isn't allowed here.`,invalidRichText:`The text contains formatting Shapio can't store.`,notUnique:`Another entry already uses this value.`,relationMissing:`A linked entry no longer exists.`,mediaMissing:`A chosen file no longer exists or isn't allowed here.`,invalidJson:`Not valid JSON.`},media:{empty:`No file chosen.`,add:`Add files`,chooseOne:`Choose a file`,replace:`Replace`,remove:`Remove {{name}}`,missing:`This file no longer exists.`,altValue:`Alt text: {{alt}}`,noAlt:`No alt text`,details:`Alt text and sizes of {{name}}`,detailsShort:`Details`,altLabel:`Alt text`,altHint:`Describes the image for people who can't see it. Shared by every use of the file.`,saveAlt:`Save alt text`,variants:`Sizes`,pickTitle:`Choose a file`,pickTitleMultiple:`Choose files`,allowedKinds:`Allowed here: {{kinds}}.`,selectedCount_one:`{{count}} selected`,selectedCount_other:`{{count}} selected`,choose_one:`Choose file`,choose_other:`Choose {{count}} files`},relation:{empty:`Nothing linked.`,add:`Add {{model}}`,choose:`Choose {{model}}`,change:`Change`,remove:`Unlink {{item}}`,missingEntry:`Entry {{id}} no longer exists or isn't visible.`,targetMissing:`The model this field links to no longer exists.`,chooseTitle:`Choose {{model}}`,search:`Search {{model}}`,searchPlaceholder:`Search by title…`,results:`Entries`,noResults:`No entries found.`,createNew:`Create a new {{model}}`,done:`Done`,createTitle:`New {{model}}`,createAndLink:`Create and link`},richText:{toolbar:`Text formatting`,placeholder:`Start writing…`,blockType:`Text style`,paragraph:`Paragraph`,heading1:`Heading 1`,heading2:`Heading 2`,heading3:`Heading 3`,heading4:`Heading 4`,heading5:`Heading 5`,heading6:`Heading 6`,codeBlock:`Code block`,bold:`Bold`,italic:`Italic`,code:`Inline code`,link:`Link`,linkUrl:`Link address`,linkPlaceholder:`https://example.com or /about`,linkInvalid:`Use a web, email or phone link (https://, mailto:, tel:) or a path starting with /.`,applyLink:`Apply`,removeLink:`Remove link`,bulletList:`Bulleted list`,orderedList:`Numbered list`,blockquote:`Quote`,image:`Insert image`,imageMissing:`This image is no longer in the media library.`,altLabel:`Alt text`,altPlaceholder:`Describe the image`,removeImage:`Remove image`,table:`Table`,insertTable:`Insert table`,addRow:`Add row below`,addColumn:`Add column right`,toggleHeaderRow:`Toggle header row`,deleteRow:`Delete row`,deleteColumn:`Delete column`,deleteTable:`Delete table`,horizontalRule:`Divider`,undo:`Undo`,redo:`Redo`,shortcut:`{{action}} ({{keys}})`,newerVersion:`This text was saved by a newer version of Shapio (format {{version}}) and is read-only here.`,unreadable:`This value isn't rich text Shapio can open. Saving will replace it.`}},place:{new:`New`,count_one:`{{count}} entry`,count_other:`{{count}} entries`,tabs:{label:`{{place}} sections`,entries:`Entries`,structure:`Structure`,api:`API`},list:{search:`Search entries`,searchPlaceholder:`Search by title…`,entry:`Entry`,status:`Status`,locale:`Locale`,createdAt:`Created`,updatedAt:`Updated`,sortBy:`Sort by {{field}}`,selectAll:`Select all entries on this page`,select:`Select {{entry}}`,emptyValue:`—`,itemCount_one:`{{count}} item`,itemCount_other:`{{count}} items`,empty:`No {{place}} entries yet`,emptyFiltered:`No entries match these filters.`,sort:`Sort`,sortField:`Sort by`,ascending:`Ascending`,descending:`Descending`,columns:`Columns`,columnsTitle:`Show columns`,resetColumns:`Reset to default`,author:`Created by`,localesOf:`Locales`,localeState:`{{locale}}: {{status}}`,rowsLabel:`{{place}} entries`},view:{label:`View`,table:`Table view`,cards:`Cards view`,cardsLabel:`{{place}} entries`},presence:{editing_one:`{{names}} is editing`,editing_other:`{{names}} are editing`},actions:{edit:`Edit {{entry}}`,publish:`Publish {{entry}}`,unpublish:`Unpublish {{entry}}`,more:`More actions for {{entry}}`,quickEdit:`Quick edit`,preview:`Preview`,previewUnavailable:`No site is connected for previews yet. Add a preview URL to a deployment connection.`,publishTitle:`Publish “{{entry}}”?`,publishDescription:`Its current draft goes live in the API.`,publishLocaleDescription:`The {{locale}} draft goes live in the API.`,unpublishTitle:`Unpublish “{{entry}}”?`,unpublishDescription:`It leaves the API; the draft is kept.`,unpublishLocaleDescription:`The {{locale}} version leaves the API; the draft is kept.`,publishing:`Publishing…`,unpublishing:`Unpublishing…`,publishedToast:`“{{entry}}” is live.`,unpublishedToast:`“{{entry}}” was unpublished.`,duplicatedToast:`Copied “{{entry}}” as a new draft.`,openCopy:`Open copy`,deleteTitle:`Delete “{{entry}}”?`,deleteDescription:`It leaves the API; its history is kept. Entries other entries link to can’t be deleted.`,deletedToast:`“{{entry}}” was deleted.`},filters:{button:`Filters`,title:`Show entries where`,none:`No filters yet.`,add:`Add filter`,apply:`Apply`,clear:`Clear all`,clearChips:`Clear filters`,field:`Field of filter {{index}}`,operator:`Condition for {{field}}`,value:`Value for {{field}}`,remove:`Remove the {{field}} filter`,listPlaceholder:`Values, separated by commas`,active:`Active filters`,removeChip:`Remove filter: {{filter}}`,findEntry:`Find {{model}}…`,entriesOf:`{{model}} entries`,noEntries:`No entries found.`,entriesFailed:`Entries couldn’t be loaded.`,status:`Status`,statusIs:`Status is`,author:`Created by`,createdBy:`Created by`,authors:`People`,you:`{{name}} (you)`},bulk:{label:`Bulk actions`,selected_one:`{{count}} entry selected`,selected_other:`{{count}} entries selected`,clear:`Clear selection`,published_one:`Published {{count}} entry.`,published_other:`Published {{count}} entries.`,unpublished_one:`Unpublished {{count}} entry.`,unpublished_other:`Unpublished {{count}} entries.`,deleted_one:`Deleted {{count}} entry.`,deleted_other:`Deleted {{count}} entries.`,publishFailed_one:`{{count}} entry couldn't be published: {{reason}}`,publishFailed_other:`{{count}} entries couldn't be published: {{reason}}`,unpublishFailed_one:`{{count}} entry couldn't be unpublished: {{reason}}`,unpublishFailed_other:`{{count}} entries couldn't be unpublished: {{reason}}`,deleteFailed_one:`{{count}} entry couldn't be deleted: {{reason}}`,deleteFailed_other:`{{count}} entries couldn't be deleted: {{reason}}`,deleteTitle_one:`Delete {{count}} entry?`,deleteTitle_other:`Delete {{count}} entries?`,deleteDescription:`Deleted entries leave the API; their history is kept. Entries still linked from others are skipped.`},api:{meta:`API ID {{apiKey}} · /api/content/{{routeKey}}`,explorer:`Open API explorer`,delivery:`Delivery API`,admin:`Admin API`,graphql:`GraphQL`,graphqlSchema:`GraphQL schema of {{place}}`},quickEdit:{label:`Quick edit {{entry}}`,save:`Save`,saved:`Saved “{{entry}}”.`,discardTitle:`Discard these changes?`,discardDescription:`Your edits to this row are not saved.`,discard:`Discard`}},publishing:{sections:`Publishing sections`,nav:{scheduled:`Scheduled`,deployments:`Deployments`,webhooks:`Webhooks`},actions:{publish:`Publish`,unpublish:`Unpublish`},fields:{model:`Model`,modelPlaceholder:`Choose a model`,entryId:`Entry ID`,entryIdHint:`Shown in the entry's URL.`,locale:`Locale`,localeHint:`Models that aren't localized use the default locale.`,defaultLocale:`Default locale`,action:`Action`,status:`Status`,error:`Error`,runAt:`Run at`,localTimeHint:`In your time zone ({{timeZone}}).`,snapshot:`Snapshot`,created:`Created`,deletedModel:`Deleted model`,allowPrivateNetwork:`Allow private network addresses`,allowPrivateNetworkHint:`Lets this reach the server's own network (such as 127.0.0.1), for addresses in OUTBOUND_PRIVATE_NETWORK_ALLOWLIST.`},filters:{all:`All`},snapshotNumber:`#{{snapshot}}`,secretDone:`I've copied it`,opensInNewTab:`(opens in a new tab)`,enabled:`Enabled`,disabled:`Disabled`,conflictReloaded:`Someone else changed this while you were editing. Their version has been loaded: review it and make your change again.`,scheduled:{create:`Schedule`,createTitle:`Schedule a change`,created:`Change scheduled`,empty:`Nothing scheduled`,noMatches:`Nothing matches this filter`,cancel:`Cancel`,cancelLabel:`Cancel the scheduled change to {{entryId}}`,cancelTitle:`Cancel this scheduled change?`,cancelDescription:`Entry {{entryId}} stays as it is.`,keep:`Keep it`,cancelled:`Scheduled change cancelled`,statuses:{scheduled:`Scheduled`,done:`Done`,failed:`Failed`,cancelled:`Cancelled`}},webhooks:{create:`New webhook`,createTitle:`New webhook`,name:`Name`,url:`URL`,urlPlaceholder:`https://example.com/hooks/shapio`,events:`Events`,eventsHint:`A whole group also includes events added later.`,allGroupEvents:`All {{group}} events`,maxAttempts:`Attempts`,maxAttemptsHint:`Tries for a failed delivery, with growing delays (1 to 20).`,enabled:`Enabled`,state:`State`,lastDelivery:`Last delivery`,empty:`No webhooks yet`,secretTitle:`Copy the signing secret`,secretDescription:`Shown only once. Your receiver uses it to verify requests.`,secretLabel:`Signing secret`,signatureTitle:`Verifying requests`,signatureDescription:`The signature is the HMAC-SHA256 of the timestamp, a dot and the raw body, keyed with the signing secret.`,signatureFormat:`v1=<hex HMAC-SHA256 of "<timestamp>.<raw body>">`,timestampFormat:`<unix seconds>`,eventFormat:`<event type>`,deliveryFormat:`<delivery ID, the same on every retry>`,settings:`Settings`,saved:`Webhook saved`,sendTest:`Send test`,testQueued:`Test delivery queued. Its result appears in the log below.`,enable:`Enable`,disable:`Disable`,enabledToast:`Webhook enabled`,disabledToast:`Webhook disabled`,rotateSecret:`Rotate secret`,rotateTitle:`Rotate the signing secret?`,rotateDescription:`The current secret stops working at once.`,deleteTitle:`Delete “{{name}}”?`,deleteDescription:`Its delivery log is deleted too.`,deleted:`“{{name}}” deleted`,deliveries:`Deliveries`,noDeliveries:`No deliveries yet`,attemptLog:`Attempt log`,eventType:`Event`,attempts:`Attempts`,lastResponse:`Last response`,testBadge:`Test`,toggleAttempts:`Show or hide the attempts of {{event}}`,redeliver:`Redeliver`,redeliverLabel:`Redeliver {{event}}`,redelivered:`Sent again as a new delivery`,lastErrorValue:`Last error: {{error}}`,noAttempts:`No attempts yet.`,attemptHeading:`Attempt {{attempt}} · {{at}} · {{duration}} ms`,request:`Request`,requestHeaders:`Request headers`,response:`Response`,responseBody:`Response body`,httpStatus:`HTTP {{status}}`,bodyTruncated:`The response body was cut short.`,noResponse:`No response arrived.`,deliveryStatuses:{pending:`Pending`,retrying:`Retrying`,succeeded:`Delivered`,dead:`Failed`},scope:`Receives events from`,scopeSite:`This site ({{name}})`,scopeNetwork:`Every site's events; each delivery names its site. Can't be changed later.`},deployments:{create:`New connection`,createTitle:`New deployment connection`,connections:`Connections`,recentRuns:`Recent runs`,empty:`No connections yet`,name:`Name`,provider:`Provider`,providers:{generic_webhook:`Build hook (generic webhook)`,cloudflare_pages:`Cloudflare Pages`,vercel:`Vercel`,netlify:`Netlify`,github:`GitHub`},enabled:`Enabled`,latestRun:`Latest run`,open:`Open`,currentSnapshot:`Live snapshot`,liveSnapshot:`Live snapshot {{snapshot}}`,settings:`Settings`,saved:`Connection saved`,settingLabels:{url:`Build hook URL`,accountId:`Account ID`,projectName:`Project name`,projectId:`Project ID`,teamId:`Team ID`,siteId:`Site ID`,owner:`Owner`,repo:`Repository`,branch:`Branch`,mode:`How changes are made`,directory:`Directory`},settingHints:{url:`Shapio sends a signed POST here to start a build.`,directory:`Where schema files go in the repository.`,teamId:`Leave empty for a project in your personal account.`},githubModes:{commit:`Commit to the branch`,pull_request:`Open a pull request`},secretLabels:{signingSecret:`Signing secret`,deployHookUrl:`Deploy hook URL`,apiToken:`API token`,token:`Access token`},secretHints:{signingSecret:`Signs triggers and callbacks. Leave empty to generate one.`,deployHookUrl:`From the project's build settings.`,apiToken:`Lets Shapio read the build's status.`,token:`Needs read and write access to the repository's contents.`},providerSecretHints:{netlify:{apiToken:`A personal access token. Starts builds and reads their status.`}},secretStored:`Stored`,replaceSecret:`Replace`,secretFromEnv:`From environment: {{name}}`,secretEnvHint:"Or enter ${ENV:SHAPIO_SECRET_NAME} to read it from that server variable.",deliveryRole:`Preview as`,deliveryRoleHint:`Previews show exactly the fields this delivery role can read.`,deliveryRoleNone:`Public fields`,keepSecret:`Keep stored value`,secretsUnreadable:`Secret can't be read. Enter it again.`,secretUnreadableHelper:`Paste the secret your build uses, or leave it empty to generate a new one and update the build.`,previewUrlTemplate:`Preview URL`,previewUrlTemplateHint:`Placeholders: {token} {modelKey} {entryId} {locale} {path}.`,previewUrlTemplatePlaceholder:`https://preview.example.com/{path}?token={token}`,triggerPolicy:`Start a run on`,triggers:{publish:`Publishing an entry`,changeSet:`Shipping a change set`,schema:`Schema changes`,manual:`Manual`},debounceSeconds:`Wait before building (seconds)`,debounceSecondsHint:`Changes within this time start one run.`,test:`Test connection`,testPassed:`All checks passed`,testFailed:`Some checks failed`,checkPassed:`{{name}}: passed`,checkFailed:`{{name}}: failed`,triggerRun:`Deploy now`,triggered:`Run started`,deleteTitle:`Delete “{{name}}”?`,deleteDescription:`Past runs stay listed.`,deleted:`“{{name}}” deleted`,callbacks:`Build callbacks`,callbacksDescription:`Without callbacks, Shapio only knows that the trigger was sent.`,callbackUrl:`Callback URL`,callbackBody:`Callback body (JSON)`,callbackFields:`status is building, deployed or failed; logUrl, siteUrl and message are optional.`,callbackSignature:`Sign callbacks like webhooks, with this connection's signing secret.`,generatedSecretTitle:`Copy the signing secret`,generatedSecretDescription:`Shown only once. Your build uses it to verify triggers and sign callbacks.`,runs:`Runs`,details:`Details`,run:`Run`,openRun:`Open the {{connection}} run of {{at}}`,connection:`Connection`,trigger:`Trigger`,runTriggers:{publish:`Publish`,changeSet:`Change set`,schema:`Schema change`,manual:`Manual`,retry:`Retry`},finishedAt:`Finished`,triggeredAt:`Trigger sent`,noRuns:`No runs yet`,runTitle:`{{connection}} run`,watching:`Updating automatically…`,completionUnknown:`This connection can't tell Shapio when the build finishes. The trigger was sent; check your build service for the outcome, or set up callbacks.`,schemaVersion:`Schema version`,providerRef:`Provider reference`,logUrl:`Build log`,siteUrl:`Site`,retryOf:`Retry of`,previousRun:`Previous run`,retry:`Retry`,retried:`New run started`,timeline:`Timeline`,timelineEmpty:`Nothing has happened yet.`,reportedBy:`reported by {{source}}`,sources:{shapio:`Shapio`,callback:`build callback`,provider:`provider`},statuses:{queued:`Queued`,triggered:`Trigger sent`,triggeredUnknown:`Trigger sent · completion unknown`,building:`Building`,deployed:`Deployed`,committed:`Committed`,failed:`Failed`,unknown:`Status unknown`}}},appUsers:{title:`App users`,search:`Search app users`,searchPlaceholder:`Search by email or name`,name:`Name`,signIn:`Signs in with`,password:`Password`,providerGoogle:`Google`,providerGithub:`GitHub`,roles:`Roles`,authenticatedOnly:`Authenticated only`,status:`Status`,active:`Active`,blocked:`Blocked`,unconfirmed:`Email not confirmed`,lastLogin:`Last sign-in`,editRoles:`Change roles`,rolesTitle:`Roles for {{name}}`,rolesDescription:`Every app user also holds the built-in Authenticated role.`,noCustomRoles:`There are no custom app roles yet. Create one in Settings → Roles → App roles.`,rolesSaved:`Roles updated.`,resendConfirmation:`Resend confirmation email`,confirmationSent:`Confirmation email sent to {{email}}.`,block:`Block`,unblock:`Unblock`,blockTitle:`Block {{name}}?`,blockDescription:`They are signed out everywhere at once and can't sign in until you unblock them.`,blockedToast:`App user blocked.`,unblockedToast:`App user unblocked.`,unblockTitle:`Unblock {{name}}?`,unblockDescription:`They can sign in again.`,removeTitle:`Delete {{name}}?`,removeDescription:`Their account and personal details are deleted and they are signed out. Entries they created stay. This can't be undone.`,removed:`App user deleted.`,empty:`No app users yet.`,emptyDescription:`People appear here when they sign up through /api/app-auth, Google, or GitHub.`,teamHint:`Looking for editors and admins? They're under <teamLink>Team</teamLink>.`,noMatches:`No app users match this search.`},appRoles:{title:`App roles`,create:`New app role`,createTitle:`Create app role`,created:`App role created.`,deleteDescription:`App users can't hold a role that's deleted. This can't be undone.`,heldBy:`Applies to`,holdersPublic:`Everyone without a token`,holdersAuthenticated:`Every signed-in app user`,userCount_one:`{{count}} app user`,userCount_other:`{{count}} app users`,editPermissions:`Edit permissions`,details:`Details`,publicExplained:`Applies to every request without a token. It grants nothing until you add permissions; grant read access to serve content to anyone.`,authenticatedExplained:`Every signed-in app user holds this role, in addition to their custom roles. It grants nothing until you add permissions.`,permissionsHint:`Reads return published content only. Without a field list, only public fields.`,model:`Model`,allModels:`All models`,allModelsHint:`Including models created later`,options:`Options`,everyRow:`{{action}} on every row`,ownOnly:`Only their own entries`,fieldScope:`Fields`,allPublicFields:`All public fields`,selectedFields:`Only selected fields`,notPublic:`Hidden by default`,actions:{read:`Read`,create:`Create`,update:`Update`,delete:`Delete`,publish:`Publish`},denyByDefault:`Visitors and app users see nothing until you grant it. Grant read on all models to a built-in role to serve published content.`,grantReadAll:`Grant read on all models`,readAllGranted:`{{name}} can now read published content in every model.`},changes:{title:`Changes`,create:`New change set`,createTitle:`New change set`,openTitle:`Open change sets`,empty:`No open change sets`,emptyDescription:`Group schema edits and entry drafts, review them together, and ship them as one snapshot.`,itemCount_one:`{{count}} item`,itemCount_other:`{{count}} items`,scheduledFor:`Ships {{at}}`,deploysTo:`Deploys to {{name}}`,addTo:`Add to…`,addToLabel:`Add “{{title}}” to a change set`,addToTitle:`Add to a change set`,added:`Added to “{{title}}”`,noOpenSets:`No open change sets yet.`,newSetTitle:`New change set`,scheduledPublications:`Scheduled publications`,noScheduledPublications:`No single-entry publications are scheduled.`,reviewInChangeSet:`Review in a change set`,builderSetTitle:`Schema: {{label}}`,fields:{title:`Title`,description:`Description`,status:`Status`,items:`Items`,author:`Author`,when:`When`,entry:`Entry`,model:`Model`,locale:`Locale`,action:`Action`,updated:`Updated`},statuses:{open:`Open`,scheduled:`Scheduled`,shipping:`Shipping`,shipped:`Shipped`,failed:`Failed`,discarded:`Discarded`},unassigned:{title:`Unassigned`,empty:`Every draft is in a change set.`,statuses:{draft:`Never published`,modified:`Changed`}},classes:{breaking:`Breaking`,conversion:`Conversion`,validation:`Validation`,additive:`Additive`,metadata:`Metadata`},tabs:{label:`Review`,changes:`Changes`,checks:`Checks`,consumers:`Consumers`,timeline:`Timeline`},review:{openedBy:`Opened by {{name}} {{at}}`,rename:`Rename change set`,renamed:`Change set renamed`,ship:`Ship`,shipping:`Shipping…`,shipTitle:`Ship “{{title}}”?`,shipDescription_one:`{{count}} item goes live as one new snapshot.`,shipDescription_other:`{{count}} items go live together as one new snapshot.`,shipped:`Shipped as v{{seq}}`,shippingStarted:`Shipping: checks run first, then everything goes live together.`,shipFailed:`The ship failed; nothing went live. See the reason above.`,shipWithDeploy:`Ship with deploy`,shipWithDeployTitle:`Ship, then deploy`,shipWithDeployHint:`The build is pinned to the new snapshot.`,connection:`Deployment`,schedule:`Schedule…`,scheduleTitle:`Schedule this change set`,scheduleAt:`Ship at`,scheduled:`Change set scheduled`,unschedule:`Unschedule`,unscheduled:`Schedule removed`,discard:`Discard`,discardTitle:`Discard “{{title}}”?`,discardDescription:`Its schema drafts are deleted. Entry drafts stay as they are.`,discarded:`Change set discarded`,shippedIn:`Shipped. Live as`,failedTitle:`The last ship failed; nothing went live`,staleTitle:`Changed since you looked`,staleDescription:`Something in this change set moved after this review loaded. Refresh to review the latest before shipping.`,refresh:`Refresh`,acknowledgeInChecks:`This change set breaks the API contract or removes data. Confirm it in`,notices:{newFieldsAfterShip:`Entries in this set can only use fields that are live now; fields this set adds are available after it ships.`},noItems:`Nothing in this change set yet`,noItemsDescription:`Add entry drafts from the Changes page, or schema edits from the model builder.`,itemRemoved:`Item removed`,removeItem:`Remove “{{title}}”`,removeItemTitle:`Remove “{{title}}” from this change set?`,removeItemDescription:`The draft stays; it just won't ship with this set.`,openEntry:`Open`,field:`Field`,before:`Live now`,after:`After shipping`,empty:`empty`,raw:`Raw`,fieldChangesOf:`Field changes in {{title}}`,noFieldChanges:`No field values change.`,schemaChangesOf:`Schema changes to {{name}}`,noSchemaChanges:`No schema changes.`,schemaStale:`Based on version {{base}}, but version {{active}} is live now. Rebase the draft before shipping.`,alsoChangedIn:`Also changed in`,operations:{create:`New`,update:`Changed`,delete:`Deleted`},liveStates:{unpublished:`Not live`,published:`Live, unchanged`,modified:`Live, changes`,missing:`Missing`},blockingTitle:`Shipping is blocked`,warningsTitle:`Worth a look`,plannerTitle:`Schema plan: {{name}}`,affected_one:`{{count}} entry version affected`,affected_other:`{{count}} entry versions affected`,noPrerequisites:`Nothing to check first: this goes live immediately.`,validationTitle:`Entry validation`,allEntriesValid_one:`{{count}} entry passes validation against the schema it ships with.`,allEntriesValid_other:`All {{count}} entries pass validation against the schema they ship with.`,notRestorableTitle:`Can't be restored`,notRestorable:{entry_deleted:`The entry was deleted.`,model_missing:`Its model no longer exists.`,publishing_disabled:`Its model no longer uses draft and publish.`,localization_changed:`Its model's localization changed.`,locale_missing:`The locale no longer exists.`,invalid:`That version doesn't fit the current schema.`,unique_conflict:`A unique value is now taken by another entry.`},healthTitle:`Content health`,noHealthFindings:`No open health findings on these entries.`,shared:`Shared, affects every site`},consumers:{window_one:`Reads from delivery traffic over the last {{count}} day.`,window_other:`Reads from delivery traffic over the last {{count}} days.`,none:`Nobody read the affected fields`,notBreaking:`No breaking changes, so no readers to check`,readers_one:`{{count}} reader`,readers_other:`{{count}} readers`,reader:`Reader`,reads:`Reads`,lastRead:`Last read`,selection:`How`,explicit:`Selects this field`,implicit:`Reads the whole model`,site:`Site`,otherSites_one:`Other sites: {{count}} reader, {{reads}} reads`,otherSites_other:`Other sites: {{count}} readers, {{reads}} reads`},timeline:{empty:`Nothing has happened yet.`,created:`Created`,updated:`Updated`,itemAdded:`Entry added`,itemRemoved:`Item removed`,schemaDraftSaved:`Schema draft saved`,reviewed:`Reviewed`,scheduled:`Scheduled`,unscheduled:`Unscheduled`,shipping:`Shipping`,shipped:`Shipped`,failed:`Failed`,discarded:`Discarded`,deployTriggered:`Deploy triggered`,deployBuilding:`Deploy building`,deployDeployed:`Deployed`,deployFailed:`Deploy failed`,deployRun:`View run`}},snapshots:{title:`Snapshots`,current:`Serving v{{seq}}`,empty:`Nothing has been published yet`,version:`v{{seq}}`,live:`Live`,schemaVersion:`Schema v{{version}}`,compare:`Compare`,compareLabel:`Compare v{{seq}} with v{{current}}`,restore:`Restore`,restoreLabel:`Restore v{{seq}}`,restoreTitle:`Restore v{{seq}}?`,restoreDescription:`Creates a change set that puts the content back to v{{seq}}. Nothing is deleted.`,pin:`Pin`,pinLabel:`Pin a token to v{{seq}}`,pinTitle:`Pin a reader to v{{seq}}`,pinDescription:`Readers pin a snapshot themselves by sending snapshot={{seq}} with their requests.`,pinToken:`Token`,diffSummary_one:`v{{from}} → v{{to}}: {{count}} entry changed`,diffSummary_other:`v{{from}} → v{{to}}: {{count}} entries changed`,schemaMoved:`schema v{{from}} → v{{to}}`,noChanges:`No live content changed between these snapshots.`,localeChange:`{{locale}} {{change}}`,changes:{published:`published`,updated:`updated`,unpublished:`unpublished`},fields:{version:`Version`,when:`When`,source:`Source`,entries:`Entries`,schema:`Schema`,pinnedBy:`Pinned by`,deploy:`Deploy`,locales:`Locales`},sources:{publish:`Publish`,unpublish:`Unpublish`,delete:`Delete`,schedule:`Scheduled`,change_set:`Change set`,schema:`Schema`,conversion:`Conversion`,import:`Import`,legacy:`Before the ledger`},tabs:{label:`Snapshot`,diff:`Changes`,timeline:`Timeline`},scrubber:{label:`Snapshot`,range:`v{{min}} – v{{max}}`},diffSummaryMore_one:`v{{from}} → v{{to}}: the first {{count}} changed entry`,diffSummaryMore_other:`v{{from}} → v{{to}}: the first {{count}} changed entries`,timeline:{label:`Time scrubber`,shippedBy:`shipped by {{name}}`,changedSince_one:`{{count}} entry changed since v{{seq}}`,changedSince_other:`{{count}} entries changed since v{{seq}}`,restoreHere:`Restore to here`,pinHere:`Pin a token here`,nothingLive:`Nothing was live at v{{seq}}`,liveCount_one:`{{count}} live`,liveCount_other:`{{count}} live`,untitled:`Untitled`,cardLabel:`{{title}}, {{state}}`,openVersion:`Open this version`,openVersionOf:`Open the version of “{{title}}” at this snapshot`,marks:{unchanged:`Live`,added:`New`,changed:`Changed`,removed:`Removed`}}},develop:{schemaTitle:`Schema`,apiExplorerTitle:`API explorer`,graphql:{title:`GraphQL`,hint:`GraphiQL on this site's GraphQL API, built live from its content types; the Docs panel describes every type and field. Your admin session can read drafts (publicationState: DRAFT); site tokens and visitors only ever see published content.`,frame:`GraphiQL playground`,unavailable:`GraphiQL is turned off`,unavailableDescription:`Set GRAPHQL_ENABLED and GRAPHQL_PLAYGROUND_ENABLED to use it here.`},noAccess:`You don't have access to this`,noAccessDescription:`Ask an owner for a role that includes it.`,actors:{admin:`An admin`,token:`An API token`,system:`Shapio`},principals:{appUsers:`App users`,anonymous:`Anonymous`,deletedToken:`Deleted token`},health:{error:`Errors`,warning:`Warnings`},live:{title:`Live`,snapshotTitle:`Serving`,since:`Since {{at}} · {{name}}`,healthTitle:`Content health`,healthClean:`No open findings.`,readersTitle:`Who reads what`,servedReads_one:`{{count}} request served in the last {{days}} days`,servedReads_other:`{{count}} requests served in the last {{days}} days`,noReaders_one:`No delivery reads in the last {{count}} day`,noReaders_other:`No delivery reads in the last {{count}} days`,fields:`Fields`,requests:`Requests`,pinned:`Snapshot`,followsLive:`Follows live`,wholeModel:`{{model}} (whole model)`,failedJobsTitle:`Failed jobs`,jobsFailed_one:`{{count}} job failed`,jobsFailed_other:`{{count}} jobs failed`,showFailedJobs:`Show and retry`,hideFailedJobs:`Hide`,retryJob:`Retry`,retryJobLabel:`Retry the {{type}} job`,jobRetried:`{{type}} job queued again`,webhooks:`Webhooks`,webhooksEnabled_one:`{{count}} on`,webhooksEnabled_other:`{{count}} on`,webhooksFailing_one:`{{count}} failing`,webhooksFailing_other:`{{count}} failing`,healthOpen_one:`{{count}} open finding`,healthOpen_other:`{{count}} open findings`,openInbox:`Open the Inbox`,notTracking:`Usage tracking is off on this server (USAGE_TRACKING=false); counts stop at the last flush.`},schema:{files:`Schema files`,modelsDir:`schema/models`,componentsDir:`schema/components`,lockDir:`.shapio`,meta_one:`Loaded at schema version {{version}} · {{count}} file, as shapio schema pull writes it`,meta_other:`Loaded at schema version {{version}} · {{count}} files, as shapio schema pull writes them`,modified:`Modified`,reload:`Reload`,reloadTitle:`Discard your edits and reload?`,reloadDescription:`Every file is loaded again from the instance.`,applying:`Applying…`,apply:{label_zero:`Apply`,label_one:`Apply {{count}} file`,label_other:`Apply {{count}} files`,newSetTitle:`Schema changes`,invalid:`Fix the problems in {{path}} before applying.`,nothing:`Nothing to apply: the instance already has these changes.`},moved:`The instance is at schema version {{live}}; these files were loaded at {{loaded}}. Apply checks every changed file against the instance; Reload loads the latest.`,revert:`Revert`,revertTitle:`Revert this file?`,revertDescription:`Your edits to this file are discarded.`,editorLabel:`{{path}} (JSON)`,invalidJson:`Not valid JSON: {{message}}`,problems_one:`{{count}} problem`,problems_other:`{{count}} problems`,lockDescription:`Written by pull: the version each file was loaded from. Read-only.`,preview:{title:`Preview`,tabs:{form:`Form`,rest:`REST`,graphql:`GraphQL`,types:`Types`,plan:`Plan`},invalidTitle:`Nothing to preview yet`,invalidDescription:`Fix the problems in the file to see what it produces.`,noFields:`This definition has no fields yet.`,document:`Document`,properties:`Properties`,endpoints:`Endpoints`,admin:`Admin`,componentEndpoints:`Components have no endpoints of their own: they appear inside entries.`,responseSample:`Example response`,componentSample:`Example value`,sdl:`GraphQL schema`,typescript:`TypeScript`,typesActive:`Types of the active version (schema version {{version}}). Your edits appear here once their change set ships.`,noTypes:`No types yet: this definition is not active.`},plan:{none:`No changes to this definition.`,breaking:`This changes the API contract. The change set's review asks for an acknowledgement.`,destructive:`This removes stored data. The change set's review asks for an acknowledgement.`,unsupported:`Shapio cannot convert existing content for one of these changes.`,serverChecks:`The change set's review plans this again with the content checks (conversions, required values, uniqueness).`},conflicts:{title_one:`Not applied: {{count}} file changed on the instance too`,title_other:`Not applied: {{count}} files changed on the instance too`,description:`Nothing was written. For each file, keep your version on top of the instance's or take the instance's, then apply again.`,fileTitle:`Conflict in {{path}}`,reasons:{changedOnBoth:`Changed here and on the instance since you loaded it.`,deletedOnTarget:`Deleted on the instance since you loaded it.`,existsOnTarget:`The instance already has a definition with this ID.`,changedOnTargetBeforeDelete:`Changed on the instance before your deletion.`},theirs:`On the instance since you loaded it`,yours:`Your changes`,keepLocal:`Keep my version`,takeRemote:`Use the instance's version`,takeRemoteTitle:`Use the instance's version?`,takeRemoteDescription:`Your edits to this file are discarded. Copy them first if you want to redo them.`}},api:{meta_one:`{{version}} · {{count}} delivery endpoint, live from the registry`,meta_other:`{{version}} · {{count}} delivery endpoints, live from the registry`,tabs:{label:`API`,rest:`REST`},endpoints:`Delivery endpoints`,empty:`No delivery endpoints yet`,emptyDescription:`Create a model and its endpoints appear here at once.`,send:`Send`,sending:`Sending…`,copyAs:`Copy as`,curl:`curl`,fetch:`fetch`,curlLabel:`curl`,fetchLabel:`fetch (JavaScript)`,request:{id:`Entry ID`,locale:`Locale`,localeHint:`The locale to serve; entries without one fall back along the locale chain.`,defaultLocale:`Default locale`,localeOption:`{{label}} ({{code}})`,snapshot:`Snapshot`,snapshotHint:`Read content as of this publication snapshot (meta.snapshot), as a pinned site build does.`,fields:`Fields`,fieldsHint:`Comma-separated API IDs to return, e.g. title,cover. Empty returns every field you may read.`,populate:`Populate`,populateHint:`Relations to expand, e.g. author,tags.author or *.`,sort:`Sort`,sortHint:`Comma-separated field:asc or field:desc (sortable fields, id, createdAt, updatedAt).`,search:`Search`,page:`Page`,pageSize:`Page size`,filters:`Filters`,filterKey:`Filter {{index}} key`,filterValue:`Filter {{index}} value`,filterKeyPlaceholder:`title[$contains]`,filterValuePlaceholder:`Value`,addFilter:`Add filter`,removeFilter:`Remove filter {{index}}`,token:`API token`,tokenHint:`Requests are sent as a site would send them: without your admin session. Empty sends them anonymously (what the public app role grants). The token stays in memory for this visit only: it is never saved or put in a URL, and snippets show $SHAPIO_TOKEN instead.`,tokenPlaceholder:`shp_…`},response:{title:`Response`,empty:`Send the request to see the live response.`,body:`Body`,duration:`{{ms}} ms`,announce:`Response {{status}} in {{ms}} ms`,entries:`Returned entries`,idLocale:`{{id}} · {{locale}}`,editEntry:`Edit entry`,editEntryLabel:`Edit {{entry}}`},shape:{title:`Shape`,description:`{{model}} fields, and who read them in the last {{days}} days`,field:`Field`,readers:`Who reads it`,reads_one:`{{count}} read`,reads_other:`{{count}} reads`,noReads:`No reads`,trackingOff:`Usage tracking is off`,anonymous:`Anonymous`,appUsers:`App users`,flags:{required:`Required`,localized:`Localized`,private:`Private`,unique:`Unique`,filterable:`Filterable`,sortable:`Sortable`}},graphql:{operations:`GraphQL queries`,example:`Example: {{name}}`,query:`Query`,fromRest:`The same request as the REST tab's for this endpoint.`,skipped:`Not carried over from REST: {{params}}`,openInPlayground:`Open in playground`}}},sites:{network:`Network`,switcher:{label:`Switch site (current: {{name}})`,sites:`Sites`,allSites:`All sites`},noAccess:{title:`You have no role on this site`,description:`Ask an owner for access, or open a site you work on.`,noSites:`Ask an owner to give you a role on a site.`},notFound:{title:`This site doesn't exist`,description:`It may have been deleted, or the address has a typo.`},title:`Sites`,count_one:`{{count}} site`,count_other:`{{count}} sites`,create:`New site`,createTitle:`Create site`,name:`Name`,key:`Key`,keyHint:`The site's key appears in its admin URLs and names the site in API calls (the Shapio-Site header or ?site=).`,keyFixed:`The key can't be changed once the site exists.`,createdAt:`Created`,created:`Site {{name}} created.`,empty:`No sites yet.`,primary:`Primary`,open:`Open`,openNamed:`Open {{name}}`,details:`Details`,renamed:`Site renamed.`,appRoles:{title:`App roles`,description:`What anonymous callers and signed-in app users of this site may do.`,public:`Anonymous callers (public)`,authenticated:`Signed-in app users (authenticated)`,saved:`App roles saved.`},danger:`Delete site`,deleteDescription:`Only an empty site can be deleted.`,delete:`Delete site`,deleteTitle:`Delete {{name}}?`,deleteConsequence:`Its tokens, webhooks, deployment connections and role assignments go with it.`,deleted:`{{name}} deleted.`,everySite:`Every site`},assist:{working:`Writing…`,discard:`Discard`,truncated:`Shortened to fit the field's limit.`,errors:{rateLimited:`Too many assist requests. Try again in a minute.`,runFailed:`The proposal run failed.`},rewrite:{open:`Rewrite…`,title:`Rewrite the selection`,instruction:`Instruction`,instructionPlaceholder:`Friendlier, for a general audience`,marksHint:`The proposal is plain text: bold, italic, links and code in the selection are not kept when you replace it.`,run:`Rewrite`,shorten:`Shorten`,expand:`Expand`,proposal:`Proposed by {{model}}`,replace:`Replace selection`,stale:`The selected text changed meanwhile. Select it again and rewrite.`,tooLong:`Select less text (at most {{max}} characters).`},altText:{suggest:`Suggest alt text`,pending:`Looking at the image…`},saveFirst:`Save your changes first: assist reads the saved version.`,saveFailed:`Your changes couldn't be saved, so assist didn't run. Check the document and try again.`,summarize:{run:`Summarize from body`,hint:`Writes a summary of the body into this field. Review it before you save: it's a proposal.`},translate:{run:`Translate {{locale}} from {{from}}`,pending:`Translating into {{locale}}…`},proposal:{title:`Proposed by {{model}}`,description:`Translated from {{from}} as a draft. Review it before publishing.`,issues:`Translation issues`,dismiss:`Dismiss`},describe:{title:`Describe it`,label:`What will editors write here?`,hint:`A model proposes the content types and fields from your description. Nothing changes until you ship the change set they go into.`,placeholder:`Recipes with a title, a cover photo, ingredients, steps and a cooking time`,run:`Propose content types`,proposedBy:`Proposed by {{model}}. Review it in a change set before shipping.`,proposalLabel:`Proposed content types`,fieldType:`({{type}})`,add:`Add to change set`,setTitle:`Content types proposed by {{model}}`},fixes:{propose:`Propose fixes`,again:`Propose again`,running:`Proposing fixes…`,review_one:`Review {{count}} proposal`,review_other:`Review {{count}} proposals`,none:`No fixes to propose.`,openSet_one:`{{count}} draft in a change set: review it`,openSet_other:`{{count}} drafts in a change set: review them`,nothingWritten:`No drafts written.`,skipped_one:`{{count}} left as it is`,skipped_other:`{{count}} left as they are`,altTitle:`Proposed alt text`,altDescription:`Proposed by {{model}}. Accepting saves the text to the file in the library.`,accept:`Accept`,reject:`Reject`,accepted:`Accepted`,rejected:`Rejected`},settings:{status:`Status`,on:`On`,off:`Off`,provider:`Provider`,model:`Model`,offDescription:`Editor assists are off: nothing is ever sent to a model provider. Whoever runs Shapio can turn them on with environment variables (AI_PROVIDER and AI_MODEL) and a restart.`,guide:`How to set up assist`,usage:`Usage in {{month}}`,runs:`Requests`,inputTokens:`Input tokens`,outputTokens:`Output tokens`,tryIt:`Try it`,tryText:`Text`}},seo:{builder:{menu:`More ways to add`,field:`Field`,seoFields:`SEO fields`,askAdmin:`Ask a network admin to enable SEO.`,present:`This content type already has SEO fields.`,enableTitle:`Enable SEO for every site?`,enableDescription:`Adds a shared SEO component to the schema of every site in the network. Each content type still chooses whether to use it.`,enable:`Enable SEO`,enabling:`Enabling…`,added:`SEO fields added. Review to ship them.`,conflict:`A component called {{label}} already uses the API ID "{{apiKey}}". Change its API ID, then enable SEO again.`},field:{counter:`{{count}} of {{max}} characters`,counterOver:`{{count}} of {{max}} characters: search results may cut it off`,preview:`Search result preview`,noTitle:`No title yet`,noindex:`Hidden from search engines.`},settings:{title:`SEO`,textsTitle:`Default texts`,siteName:`Site name`,siteNameHint:`Shown as the title of pages that have none, and to social networks as the site's name.`,titleTemplate:`Title template`,titleTemplateHint:`How page titles appear in search results and browser tabs: %s is replaced by the page's title.`,titleTemplatePlaceholder:`%s · Site name`,description:`Default description`,descriptionHint:`Used for pages whose SEO description is empty.`,socialTitle:`Social sharing`,image:`Default social image`,imageHint:`Shown when a page with no image of its own is shared. Choose a public image.`,chooseImage:`Choose image`,changeImage:`Change image`,imagePrivate:`This image is private, so it would never be shown. Choose a public image or make this one public in the media library.`,twitterHandle:`Twitter handle`,twitterHandleHint:`The site's account on X (Twitter), for the twitter:site tag.`,twitterHandlePlaceholder:`@yoursite`,saved:`SEO settings saved.`,conflict:`Someone else changed the SEO settings. Reload to see their version, then make your changes again.`,reload:`Reload`}}},ke=`translation`,Ae={en:{[ke]:Oe}},je=()=>k.use(De).init({resources:Ae,lng:`en`,fallbackLng:`en`,defaultNS:ke,interpolation:{escapeValue:!1},returnNull:!1}),Me=e=>Object.hasOwn(Oe.errors.codes,e),Ne=e=>Me(e)?k.t(`errors.codes.${e}`):void 0,Pe=e=>e instanceof a?Me(e.code)?k.t(`errors.codes.${e.code}`):e.message:e instanceof TypeError?k.t(`errors.network`):k.t(`errors.unexpected`),Fe=e(n(),1),A=e(r(),1),j=e(t(),1),Ie=Object.defineProperty,Le=(e,t)=>Ie(e,`name`,{value:t,configurable:!0});function Re(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}Le(Re,`setRef`);function ze(...e){return t=>{let n=!1,r=e.map(e=>{let r=Re(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():Re(e[t],null)}}}}Le(ze,`composeRefs`);function M(...e){return j.useCallback(ze(...e),e)}Le(M,`useComposedRefs`);var Be=Object.defineProperty,N=(e,t)=>Be(e,`name`,{value:t,configurable:!0});function P(e){let t=j.forwardRef((t,n)=>{let{children:r,...i}=t,a=null,o=!1,s=[];Ye(r)&&typeof F==`function`&&(r=F(r._payload)),j.Children.forEach(r,e=>{if(qe(e)){o=!0;let t=e,n=`child`in t.props?t.props.child:t.props.children;Ye(n)&&typeof F==`function`&&(n=F(n._payload)),a=We(t,n),s.push(a?.props?.children)}else s.push(e)}),a?a=j.cloneElement(a,void 0,s):!o&&j.Children.count(r)===1&&j.isValidElement(r)&&(a=r);let c=a?Ke(a):void 0,l=M(n,c);if(!a){if(r||r===0)throw Error(o?Qe(e):Ze(e));return r}let u=Ge(i,a.props??{});return a.type!==j.Fragment&&(u.ref=n?l:c),j.cloneElement(a,u)});return t.displayName=`${e}.Slot`,t}N(P,`createSlot`);var Ve=P(`Slot`),He=Symbol.for(`radix.slottable`);function Ue(e){let t=N(e=>`child`in e?e.children(e.child):e.children,`Slottable`);return t.displayName=`${e}.Slottable`,t.__radixId=He,t}N(Ue,`createSlottable`);var We=N((e,t)=>{if(`child`in e.props){let t=e.props.child;return j.isValidElement(t)?j.cloneElement(t,void 0,e.props.children(t.props.children)):null}return j.isValidElement(t)?t:null},`getSlottableElementFromSlottable`);function Ge(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}N(Ge,`mergeProps`);function Ke(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}N(Ke,`getElementRef`);function qe(e){return j.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===He}N(qe,`isSlottable`);var Je=Symbol.for(`react.lazy`);function Ye(e){return typeof e==`object`&&!!e&&`$$typeof`in e&&e.$$typeof===Je&&`_payload`in e&&Xe(e._payload)}N(Ye,`isLazyComponent`);function Xe(e){return typeof e==`object`&&!!e&&`then`in e}N(Xe,`isPromiseLike`);var Ze=N(e=>`${e} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,`createSlotError`),Qe=N(e=>`${e} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,`createSlottableError`),F=j.use,$e=Object.defineProperty,et=(e,t)=>$e(e,`name`,{value:t,configurable:!0}),tt=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=P(`Primitive.${t}`),r=j.forwardRef((e,r)=>{let{asChild:i,...a}=e,o=i?n:t;return typeof window<`u`&&(window[Symbol.for(`radix-ui`)]=!0),(0,A.jsx)(o,{...a,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function nt(e,t){e&&Fe.flushSync(()=>e.dispatchEvent(t))}et(nt,`dispatchDiscreteCustomEvent`);var rt=Object.defineProperty,I=(e,t)=>rt(e,`name`,{value:t,configurable:!0});function it(e,t){let n=j.createContext(t);n.displayName=e+`Context`;let r=I(e=>{let{children:t,...r}=e,i=j.useMemo(()=>r,Object.values(r));return(0,A.jsx)(n.Provider,{value:i,children:t})},`Provider`);r.displayName=e+`Provider`;function i(r,i={}){let{optional:a=!1}=i,o=j.useContext(n);if(o)return o;if(t!==void 0)return t;if(!a)throw Error(`\`${r}\` must be used within \`${e}\``)}return I(i,`useContext`),[r,i]}I(it,`createContext`);function at(e,t=[]){let n=[];function r(t,r){let i=j.createContext(r);i.displayName=t+`Context`;let a=n.length;n=[...n,r];let o=I(t=>{let{scope:n,children:r,...o}=t,s=n?.[e]?.[a]||i,c=j.useMemo(()=>o,Object.values(o));return(0,A.jsx)(s.Provider,{value:c,children:r})},`Provider`);o.displayName=t+`Provider`;function s(n,o,s={}){let{optional:c=!1}=s,l=o?.[e]?.[a]||i,u=j.useContext(l);if(u)return u;if(r!==void 0)return r;if(!c)throw Error(`\`${n}\` must be used within \`${t}\``)}return I(s,`useContext`),[o,s]}I(r,`createContext`);let i=I(()=>{let t=n.map(e=>j.createContext(e));return I(function(n){let r=n?.[e]||t;return j.useMemo(()=>({[`__scope${e}`]:{...n,[e]:r}}),[n,r])},`useScope`)},`createScope`);return i.scopeName=e,[r,ot(i,...t)]}I(at,`createContextScope`);function ot(...e){let t=e[0];if(e.length===1)return t;let n=I(()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return I(function(e){let r=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return{...t,...i}},{});return j.useMemo(()=>({[`__scope${t.scopeName}`]:r}),[r])},`useComposedScopes`)},`createScope`);return n.scopeName=t.scopeName,n}I(ot,`composeContextScopes`);var st=Object.defineProperty,L=(e,t)=>st(e,`name`,{value:t,configurable:!0}),ct=!!(typeof window<`u`&&window.document&&window.document.createElement);function R(e,t,{checkForDefaultPrevented:n=!0}={}){return L(function(r){if(e?.(r),n===!1||!r||!r.defaultPrevented)return t?.(r)},`handleEvent`)}L(R,`composeEventHandlers`);function lt(e){if(!ct)throw Error(`Cannot access window outside of the DOM`);return e?.ownerDocument?.defaultView??window}L(lt,`getOwnerWindow`);function ut(e){if(!ct)throw Error(`Cannot access document outside of the DOM`);return e?.ownerDocument??document}L(ut,`getOwnerDocument`);function dt(e,t=!1){let{activeElement:n}=ut(e);if(!n?.nodeName)return null;if(ft(n)&&n.contentDocument)return dt(n.contentDocument.body,t);if(t){let e=n.getAttribute(`aria-activedescendant`);if(e){let t=ut(n).getElementById(e);if(t)return t}}return n}L(dt,`getActiveElement`);function ft(e){return e.tagName===`IFRAME`}L(ft,`isFrame`);var z=globalThis?.document?j.useLayoutEffect:()=>{},pt=Object.defineProperty,mt=(e,t)=>pt(e,`name`,{value:t,configurable:!0}),ht=j.useEffectEvent,gt=j.useInsertionEffect;function _t(e){if(typeof ht==`function`)return ht(e);let t=j.useRef(()=>{throw Error(`Cannot call an event handler while rendering.`)});return typeof gt==`function`?gt(()=>{t.current=e}):z(()=>{t.current=e}),j.useMemo(()=>((...e)=>t.current?.(...e)),[])}mt(_t,`useEffectEvent`);var vt=Object.defineProperty,B=(e,t)=>vt(e,`name`,{value:t,configurable:!0}),yt=j.useInsertionEffect||z;function bt({prop:e,defaultProp:t,onChange:n=B(()=>{},`onChange`),caller:r}){let[i,a,o]=xt({defaultProp:t,onChange:n}),s=e!==void 0;return[s?e:i,j.useCallback(t=>{if(s){let n=St(t)?t(e):t;n!==e&&o.current?.(n)}else a(t)},[s,e,a,o])]}B(bt,`useControllableState`);function xt({defaultProp:e,onChange:t}){let[n,r]=j.useState(e),i=j.useRef(n),a=j.useRef(t);return yt(()=>{a.current=t},[t]),j.useEffect(()=>{i.current!==n&&(a.current?.(n),i.current=n)},[n,i]),[n,r,a]}B(xt,`useUncontrolledState`);function St(e){return typeof e==`function`}B(St,`isFunction`);var Ct=Symbol(`RADIX:SYNC_STATE`);function wt(e,t,n,r){let{prop:i,defaultProp:a,onChange:o,caller:s}=t,c=i!==void 0,l=_t(o),u=[{...n,state:a}];r&&u.push(r);let[d,f]=j.useReducer((t,n)=>{if(n.type===Ct)return{...t,state:n.state};let r=e(t,n);return c&&!Object.is(r.state,t.state)&&l(r.state),r},...u),p=d.state,m=j.useRef(p);j.useEffect(()=>{m.current!==p&&(m.current=p,c||l(p))},[p,m,c]);let h=j.useMemo(()=>i===void 0?d:{...d,state:i},[d,i]);return j.useEffect(()=>{c&&!Object.is(i,d.state)&&f({type:Ct,state:i})},[i,d.state,c]),[h,f]}B(wt,`useControllableStateReducer`);var Tt=Object.defineProperty,V=(e,t)=>Tt(e,`name`,{value:t,configurable:!0});function Et(e,t){return j.useReducer((e,n)=>t[e][n]??e,e)}V(Et,`useStateMachine`);var Dt=V(e=>{let{present:t,children:n}=e,r=Ot(t),i=typeof n==`function`?n({present:r.isPresent}):j.Children.only(n),a=At(r.ref,jt(i));return typeof n==`function`||r.isPresent?j.cloneElement(i,{ref:a}):null},`Presence`);function Ot(e){let[t,n]=j.useState(),r=j.useRef(null),i=j.useRef(e),a=j.useRef(`none`),o=j.useRef(void 0),[s,c]=Et(e?`mounted`:`unmounted`,{mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}});return j.useEffect(()=>{s===`mounted`?(a.current=o.current??H(r.current),o.current=void 0):a.current=`none`},[s]),z(()=>{let t=r.current,n=i.current;if(n!==e){let r=a.current,s=H(t);e?(o.current=s,c(`MOUNT`)):s===`none`||t?.display===`none`?c(`UNMOUNT`):c(n&&r!==s?`ANIMATION_OUT`:`UNMOUNT`),i.current=e}},[e,c]),z(()=>{if(t){let e,n=t.ownerDocument.defaultView??window,o=V(a=>{let o=H(r.current).includes(CSS.escape(a.animationName));if(a.target===t&&o&&(c(`ANIMATION_END`),!i.current)){let r=t.style.animationFillMode;t.style.animationFillMode=`forwards`,e=n.setTimeout(()=>{t.style.animationFillMode===`forwards`&&(t.style.animationFillMode=r)})}},`handleAnimationEnd`),s=V(e=>{e.target===t&&(a.current=H(r.current))},`handleAnimationStart`);return t.addEventListener(`animationstart`,s),t.addEventListener(`animationcancel`,o),t.addEventListener(`animationend`,o),()=>{n.clearTimeout(e),t.removeEventListener(`animationstart`,s),t.removeEventListener(`animationcancel`,o),t.removeEventListener(`animationend`,o)}}c(`ANIMATION_END`)},[t,c]),{isPresent:[`mounted`,`unmountSuspended`].includes(s),ref:j.useCallback(e=>{if(e){let t=getComputedStyle(e);r.current=t,o.current=H(t)}else r.current=null;n(e)},[])}}V(Ot,`usePresence`);function kt(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}V(kt,`setRef`);function At(...e){let t=j.useRef(e);return t.current=e,j.useCallback(e=>{let n=t.current,r=!1,i=n.map(t=>{let n=kt(t,e);return!r&&typeof n==`function`&&(r=!0),n});if(r)return()=>{for(let e=0;e<i.length;e++){let t=i[e];typeof t==`function`?t():kt(n[e],null)}}},[])}V(At,`useStableComposedRefs`);function H(e){return e?.animationName||`none`}V(H,`getAnimationName`);function jt(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}V(jt,`getElementRef`);var Mt=Object.defineProperty,Nt=(e,t)=>Mt(e,`name`,{value:t,configurable:!0}),Pt=j.useId||(()=>void 0),Ft=0;function It(e){let[t,n]=j.useState(Pt());return z(()=>{e||n(e=>e??String(Ft++))},[e]),e||(t?`radix-${t}`:``)}Nt(It,`useId`);var Lt=Object.defineProperty,Rt=(e,t)=>Lt(e,`name`,{value:t,configurable:!0});function U(e){let t=j.useRef(e);return j.useEffect(()=>{t.current=e}),j.useMemo(()=>((...e)=>t.current?.(...e)),[])}Rt(U,`useCallbackRef`);var zt=Object.defineProperty,W=(e,t)=>zt(e,`name`,{value:t,configurable:!0}),Bt=`dismissableLayer.update`,Vt=`dismissableLayer.pointerDownOutside`,Ht=`dismissableLayer.focusOutside`,Ut,Wt=j.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set,dismissableSurfaces:new Set}),Gt=j.forwardRef(W(function(e,t){let{disableOutsidePointerEvents:n=!1,deferPointerDownOutside:r=!1,onEscapeKeyDown:i,onPointerDownOutside:a,onFocusOutside:o,onInteractOutside:s,onDismiss:c,...l}=e,u=j.useContext(Wt),[d,f]=j.useState(null),p=d?.ownerDocument??globalThis?.document,[,m]=j.useState({}),h=M(t,f),g=Array.from(u.layers),[_]=[...u.layersWithOutsidePointerEventsDisabled].slice(-1),ee=_?g.indexOf(_):-1,v=d?g.indexOf(d):-1,y=u.layersWithOutsidePointerEventsDisabled.size>0,b=v>=ee,x=j.useRef(!1),S=Jt(e=>{a?.(e),s?.(e),e.defaultPrevented||c?.()},{ownerDocument:p,deferPointerDownOutside:r,isDeferredPointerDownOutsideRef:x,dismissableSurfaces:u.dismissableSurfaces,shouldHandlePointerDownOutside:j.useCallback(e=>{if(!(e instanceof Node))return!1;let t=[...u.branches].some(t=>t.contains(e));return b&&!t},[u.branches,b])}),te=Yt(e=>{if(r&&x.current)return;let t=e.target;[...u.branches].some(e=>e.contains(t))||(o?.(e),s?.(e),e.defaultPrevented||c?.())},p),C=d?v===g.length-1:!1,w=U(e=>{e.key===`Escape`&&(i?.(e),!e.defaultPrevented&&c&&(e.preventDefault(),c()))});return j.useEffect(()=>{if(C)return p.addEventListener(`keydown`,w,{capture:!0}),()=>p.removeEventListener(`keydown`,w,{capture:!0})},[p,C,w]),j.useEffect(()=>{if(d)return n&&(u.layersWithOutsidePointerEventsDisabled.size===0&&(Ut=p.body.style.pointerEvents,p.body.style.pointerEvents=`none`),u.layersWithOutsidePointerEventsDisabled.add(d)),u.layers.add(d),Xt(),()=>{n&&(u.layersWithOutsidePointerEventsDisabled.delete(d),u.layersWithOutsidePointerEventsDisabled.size===0&&(p.body.style.pointerEvents=Ut))}},[d,p,n,u]),j.useEffect(()=>()=>{d&&(u.layers.delete(d),u.layersWithOutsidePointerEventsDisabled.delete(d),Xt())},[d,u]),j.useEffect(()=>{let e=W(()=>m({}),`handleUpdate`);return document.addEventListener(Bt,e),()=>document.removeEventListener(Bt,e)},[]),(0,A.jsx)(tt.div,{...l,ref:h,style:{pointerEvents:y?b?`auto`:`none`:void 0,...e.style},onFocusCapture:R(e.onFocusCapture,te.onFocusCapture),onBlurCapture:R(e.onBlurCapture,te.onBlurCapture),onPointerDownCapture:R(e.onPointerDownCapture,S.onPointerDownCapture)})},`DismissableLayer`));function Kt(){let e=j.useContext(Wt),[t,n]=j.useState(null);return j.useEffect(()=>{if(t)return e.dismissableSurfaces.add(t),()=>{e.dismissableSurfaces.delete(t)}},[t,e.dismissableSurfaces]),n}W(Kt,`useDismissableLayerSurface`);var qt=W(()=>!0,`IS_TRUE`);function Jt(e,t){let{ownerDocument:n=globalThis?.document,deferPointerDownOutside:r=!1,isDeferredPointerDownOutsideRef:i,dismissableSurfaces:a,shouldHandlePointerDownOutside:o=qt}=t,s=U(e),c=j.useRef(!1),l=j.useRef(!1),u=j.useRef(new Map),d=j.useRef(()=>{});return j.useEffect(()=>{function e(){l.current=!1,i.current=!1,u.current.clear()}W(e,`resetOutsideInteraction`);function t(){return Array.from(u.current.values()).some(Boolean)}W(t,`isOutsideInteractionIntercepted`);function f(e){if(!l.current)return;let t=e.target;t instanceof Node&&[...a].some(e=>e.contains(t))||u.current.set(e.type,!0),e.type===`click`&&window.setTimeout(()=>{l.current&&d.current()},0)}W(f,`handleInteractionCapture`);function p(e){l.current&&u.current.set(e.type,!1)}W(p,`handleInteractionBubble`);let m=W(a=>{if(a.target&&!c.current){let f=function(){n.removeEventListener(`click`,d.current);let r=t();e(),r||Zt(Vt,s,p,{discrete:!0})};if(W(f,`handleAndDispatchPointerDownOutsideEvent`),!o(a.target)){n.removeEventListener(`click`,d.current),e(),c.current=!1;return}let p={originalEvent:a};l.current=!0,i.current=r&&a.button===0,u.current.clear(),!r||a.button!==0?f():(n.removeEventListener(`click`,d.current),d.current=f,n.addEventListener(`click`,d.current,{once:!0}))}else n.removeEventListener(`click`,d.current),e();c.current=!1},`handlePointerDown`),h=[`pointerup`,`mousedown`,`mouseup`,`touchstart`,`touchend`,`click`];for(let e of h)n.addEventListener(e,f,!0),n.addEventListener(e,p);let g=window.setTimeout(()=>{n.addEventListener(`pointerdown`,m)},0);return()=>{window.clearTimeout(g),n.removeEventListener(`pointerdown`,m),n.removeEventListener(`click`,d.current);for(let e of h)n.removeEventListener(e,f,!0),n.removeEventListener(e,p)}},[n,s,r,i,a,o]),{onPointerDownCapture:W(()=>c.current=!0,`onPointerDownCapture`)}}W(Jt,`usePointerDownOutside`);function Yt(e,t=globalThis?.document){let n=U(e),r=j.useRef(!1);return j.useEffect(()=>{let e=W(e=>{e.target&&!r.current&&Zt(Ht,n,{originalEvent:e},{discrete:!1})},`handleFocus`);return t.addEventListener(`focusin`,e),()=>t.removeEventListener(`focusin`,e)},[t,n]),{onFocusCapture:W(()=>r.current=!0,`onFocusCapture`),onBlurCapture:W(()=>r.current=!1,`onBlurCapture`)}}W(Yt,`useFocusOutside`);function Xt(){let e=new CustomEvent(Bt);document.dispatchEvent(e)}W(Xt,`dispatchUpdate`);function Zt(e,t,n,{discrete:r}){let i=n.originalEvent.target,a=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?nt(i,a):i.dispatchEvent(a)}W(Zt,`handleAndDispatchCustomEvent`);var Qt=Object.defineProperty,G=(e,t)=>Qt(e,`name`,{value:t,configurable:!0}),$t=`focusScope.autoFocusOnMount`,en=`focusScope.autoFocusOnUnmount`,tn={bubbles:!1,cancelable:!0},nn=j.forwardRef(G(function(e,t){let{loop:n=!1,trapped:r=!1,onMountAutoFocus:i,onUnmountAutoFocus:a,...o}=e,[s,c]=j.useState(null),l=U(i),u=U(a),d=j.useRef(null),f=M(t,c),p=j.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;j.useEffect(()=>{if(r){let e=function(e){if(p.paused||!s)return;let t=e.target;s.contains(t)?d.current=t:K(d.current,{select:!0})},t=function(e){if(p.paused||!s)return;let t=e.relatedTarget;t!==null&&(s.contains(t)||K(d.current,{select:!0}))},n=function(e){if(document.activeElement===document.body)for(let t of e)t.removedNodes.length>0&&K(s)};G(e,`handleFocusIn`),G(t,`handleFocusOut`),G(n,`handleMutations`),document.addEventListener(`focusin`,e),document.addEventListener(`focusout`,t);let r=new MutationObserver(n);return s&&r.observe(s,{childList:!0,subtree:!0}),()=>{document.removeEventListener(`focusin`,e),document.removeEventListener(`focusout`,t),r.disconnect()}}},[r,s,p.paused]),j.useEffect(()=>{if(s){un.add(p);let e=document.activeElement;if(!s.contains(e)){let t=new CustomEvent($t,tn);s.addEventListener($t,l),s.dispatchEvent(t),t.defaultPrevented||(rn(pn(on(s)),{select:!0}),document.activeElement===e&&K(s))}return()=>{s.removeEventListener($t,l),setTimeout(()=>{let t=new CustomEvent(en,tn);s.addEventListener(en,u),s.dispatchEvent(t),t.defaultPrevented||K(e??document.body,{select:!0}),s.removeEventListener(en,u),un.remove(p)},0)}}},[s,l,u,p]);let m=j.useCallback(e=>{if(!n&&!r||p.paused)return;let t=e.key===`Tab`&&!e.altKey&&!e.ctrlKey&&!e.metaKey,i=document.activeElement;if(t&&i){let t=e.currentTarget,[r,a]=an(t);r&&a?!e.shiftKey&&i===a?(e.preventDefault(),n&&K(r,{select:!0})):e.shiftKey&&i===r&&(e.preventDefault(),n&&K(a,{select:!0})):i===t&&e.preventDefault()}},[n,r,p.paused]);return(0,A.jsx)(tt.div,{tabIndex:-1,...o,ref:f,onKeyDown:m})},`FocusScope`));function rn(e,{select:t=!1}={}){let n=document.activeElement;for(let r of e)if(K(r,{select:t}),document.activeElement!==n)return}G(rn,`focusFirst`);function an(e){let t=on(e);return[sn(t,e),sn(t.reverse(),e)]}G(an,`getTabbableEdges`);function on(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:G(e=>{let t=e.tagName===`INPUT`&&e.type===`hidden`;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP},`acceptNode`)});for(;n.nextNode();)t.push(n.currentNode);return t}G(on,`getTabbableCandidates`);function sn(e,t){let n=typeof t.checkVisibility==`function`&&t.checkVisibility({checkVisibilityCSS:!0});for(let r of e)if(!(n?!r.checkVisibility({checkVisibilityCSS:!0}):cn(r,{upTo:t})))return r}G(sn,`findVisible`);function cn(e,{upTo:t}){if(getComputedStyle(e).visibility===`hidden`)return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display===`none`)return!0;e=e.parentElement}return!1}G(cn,`isHidden`);function ln(e){return e instanceof HTMLInputElement&&`select`in e}G(ln,`isSelectableInput`);function K(e,{select:t=!1}={}){if(e&&e.focus){let n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&ln(e)&&t&&e.select()}}G(K,`focus`);var un=dn();function dn(){let e=[];return{add(t){let n=e[0];t!==n&&n?.pause(),e=fn(e,t),e.unshift(t)},remove(t){e=fn(e,t),e[0]?.resume()}}}G(dn,`createFocusScopesStack`);function fn(e,t){let n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}G(fn,`arrayRemove`);function pn(e){return e.filter(e=>e.tagName!==`A`)}G(pn,`removeLinks`);var mn=Object.defineProperty,hn=j.forwardRef(((e,t)=>mn(e,`name`,{value:t,configurable:!0}))(function(e,t){let{container:n,...r}=e,[i,a]=j.useState(!1);z(()=>a(!0),[]);let o=n||i&&globalThis?.document?.body;return o?Fe.createPortal((0,A.jsx)(tt.div,{...r,ref:t}),o):null},`Portal`)),gn=Object.defineProperty,_n=(e,t)=>gn(e,`name`,{value:t,configurable:!0}),vn=0,q=null;function yn(e){return bn(),e.children}_n(yn,`FocusGuards`);function bn(){j.useEffect(()=>{q||={start:xn(),end:xn()};let{start:e,end:t}=q;return document.body.firstElementChild!==e&&document.body.insertAdjacentElement(`afterbegin`,e),document.body.lastElementChild!==t&&document.body.insertAdjacentElement(`beforeend`,t),vn++,()=>{vn===1&&(q?.start.remove(),q?.end.remove(),q=null),vn=Math.max(0,vn-1)}},[])}_n(bn,`useFocusGuards`);function xn(){let e=document.createElement(`span`);return e.setAttribute(`data-radix-focus-guard`,``),e.tabIndex=0,e.style.outline=`none`,e.style.opacity=`0`,e.style.position=`fixed`,e.style.pointerEvents=`none`,e}_n(xn,`createFocusGuard`);var J=function(){return J=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},J.apply(this,arguments)};function Sn(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}function Cn(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r<i;r++)(a||!(r in t))&&(a||=Array.prototype.slice.call(t,0,r),a[r]=t[r]);return e.concat(a||Array.prototype.slice.call(t))}var wn=`right-scroll-bar-position`,Tn=`width-before-scroll-bar`,En=`with-scroll-bars-hidden`,Dn=`--removed-body-scroll-bar-size`;function On(e,t){return typeof e==`function`?e(t):e&&(e.current=t),e}function kn(e,t){var n=(0,j.useState)(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(e){var t=n.value;t!==e&&(n.value=e,n.callback(e,t))}}}})[0];return n.callback=t,n.facade}var An=typeof window<`u`?j.useLayoutEffect:j.useEffect,jn=new WeakMap;function Mn(e,t){var n=kn(t||null,function(t){return e.forEach(function(e){return On(e,t)})});return An(function(){var t=jn.get(n);if(t){var r=new Set(t),i=new Set(e),a=n.current;r.forEach(function(e){i.has(e)||On(e,null)}),i.forEach(function(e){r.has(e)||On(e,a)})}jn.set(n,e)},[e]),n}function Nn(e){return e}function Pn(e,t){t===void 0&&(t=Nn);var n=[],r=!1;return{read:function(){if(r)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(e){var i=t(e,r);return n.push(i),function(){n=n.filter(function(e){return e!==i})}},assignSyncMedium:function(e){for(r=!0;n.length;){var t=n;n=[],t.forEach(e)}n={push:function(t){return e(t)},filter:function(){return n}}},assignMedium:function(e){r=!0;var t=[];if(n.length){var i=n;n=[],i.forEach(e),t=n}var a=function(){var n=t;t=[],n.forEach(e)},o=function(){return Promise.resolve().then(a)};o(),n={push:function(e){t.push(e),o()},filter:function(e){return t=t.filter(e),n}}}}}function Fn(e){e===void 0&&(e={});var t=Pn(null);return t.options=J({async:!0,ssr:!1},e),t}var In=function(e){var t=e.sideCar,n=Sn(e,[`sideCar`]);if(!t)throw Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw Error(`Sidecar medium not found`);return j.createElement(r,J({},n))};In.isSideCarExport=!0;function Ln(e,t){return e.useMedium(t),In}var Rn=Fn(),zn=function(){},Bn=j.forwardRef(function(e,t){var n=j.useRef(null),r=j.useState({onScrollCapture:zn,onWheelCapture:zn,onTouchMoveCapture:zn}),i=r[0],a=r[1],o=e.forwardProps,s=e.children,c=e.className,l=e.removeScrollBar,u=e.enabled,d=e.shards,f=e.sideCar,p=e.noRelative,m=e.noIsolation,h=e.inert,g=e.allowPinchZoom,_=e.as,ee=_===void 0?`div`:_,v=e.gapMode,y=Sn(e,[`forwardProps`,`children`,`className`,`removeScrollBar`,`enabled`,`shards`,`sideCar`,`noRelative`,`noIsolation`,`inert`,`allowPinchZoom`,`as`,`gapMode`]),b=f,x=Mn([n,t]),S=J(J({},y),i);return j.createElement(j.Fragment,null,u&&j.createElement(b,{sideCar:Rn,removeScrollBar:l,shards:d,noRelative:p,noIsolation:m,inert:h,setCallbacks:a,allowPinchZoom:!!g,lockRef:n,gapMode:v}),o?j.cloneElement(j.Children.only(s),J(J({},S),{ref:x})):j.createElement(ee,J({},S,{className:c,ref:x}),s))});Bn.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},Bn.classNames={fullWidth:Tn,zeroRight:wn};var Vn=function(){if(typeof __webpack_nonce__<`u`)return __webpack_nonce__};function Hn(){if(!document)return null;var e=document.createElement(`style`);e.type=`text/css`;var t=Vn();return t&&e.setAttribute(`nonce`,t),e}function Un(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function Wn(e){(document.head||document.getElementsByTagName(`head`)[0]).appendChild(e)}var Gn=function(){var e=0,t=null;return{add:function(n){e==0&&(t=Hn())&&(Un(t,n),Wn(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},Kn=function(){var e=Gn();return function(t,n){j.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},qn=function(){var e=Kn();return function(t){var n=t.styles,r=t.dynamic;return e(n,r),null}},Jn={left:0,top:0,right:0,gap:0},Yn=function(e){return parseInt(e||``,10)||0},Xn=function(e){var t=window.getComputedStyle(document.body),n=t[e===`padding`?`paddingLeft`:`marginLeft`],r=t[e===`padding`?`paddingTop`:`marginTop`],i=t[e===`padding`?`paddingRight`:`marginRight`];return[Yn(n),Yn(r),Yn(i)]},Zn=function(e){if(e===void 0&&(e=`margin`),typeof window>`u`)return Jn;var t=Xn(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},Qn=qn(),Y=`data-scroll-locked`,$n=function(e,t,n,r){var i=e.left,a=e.top,o=e.right,s=e.gap;return n===void 0&&(n=`margin`),`
|
|
2
|
-
.${En} {
|
|
3
|
-
overflow: hidden ${r};
|
|
4
|
-
padding-right: ${s}px ${r};
|
|
5
|
-
}
|
|
6
|
-
body[${Y}] {
|
|
7
|
-
overflow: hidden ${r};
|
|
8
|
-
overscroll-behavior: contain;
|
|
9
|
-
${[t&&`position: relative ${r};`,n===`margin`&&`
|
|
10
|
-
padding-left: ${i}px;
|
|
11
|
-
padding-top: ${a}px;
|
|
12
|
-
padding-right: ${o}px;
|
|
13
|
-
margin-left:0;
|
|
14
|
-
margin-top:0;
|
|
15
|
-
margin-right: ${s}px ${r};
|
|
16
|
-
`,n===`padding`&&`padding-right: ${s}px ${r};`].filter(Boolean).join(``)}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.${wn} {
|
|
20
|
-
right: ${s}px ${r};
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.${Tn} {
|
|
24
|
-
margin-right: ${s}px ${r};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.${wn} .${wn} {
|
|
28
|
-
right: 0 ${r};
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.${Tn} .${Tn} {
|
|
32
|
-
margin-right: 0 ${r};
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
body[${Y}] {
|
|
36
|
-
${Dn}: ${s}px;
|
|
37
|
-
}
|
|
38
|
-
`},er=function(){var e=parseInt(document.body.getAttribute(`data-scroll-locked`)||`0`,10);return isFinite(e)?e:0},tr=function(){j.useEffect(function(){return document.body.setAttribute(Y,(er()+1).toString()),function(){var e=er()-1;e<=0?document.body.removeAttribute(Y):document.body.setAttribute(Y,e.toString())}},[])},nr=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,i=r===void 0?`margin`:r;tr();var a=j.useMemo(function(){return Zn(i)},[i]);return j.createElement(Qn,{styles:$n(a,!t,i,n?``:`!important`)})},rr=!1;if(typeof window<`u`)try{var ir=Object.defineProperty({},"passive",{get:function(){return rr=!0,!0}});window.addEventListener(`test`,ir,ir),window.removeEventListener(`test`,ir,ir)}catch{rr=!1}var X=rr?{passive:!1}:!1,ar=function(e){return e.tagName===`TEXTAREA`},or=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!==`hidden`&&!(n.overflowY===n.overflowX&&!ar(e)&&n[t]===`visible`)},sr=function(e){return or(e,`overflowY`)},cr=function(e){return or(e,`overflowX`)},lr=function(e,t){var n=t.ownerDocument,r=t;do{if(typeof ShadowRoot<`u`&&r instanceof ShadowRoot&&(r=r.host),fr(e,r)){var i=pr(e,r);if(i[1]>i[2])return!0}r=r.parentNode}while(r&&r!==n.body);return!1},ur=function(e){return[e.scrollTop,e.scrollHeight,e.clientHeight]},dr=function(e){return[e.scrollLeft,e.scrollWidth,e.clientWidth]},fr=function(e,t){return e===`v`?sr(t):cr(t)},pr=function(e,t){return e===`v`?ur(t):dr(t)},mr=function(e,t){return e===`h`&&t===`rtl`?-1:1},hr=function(e,t,n,r,i){var a=mr(e,window.getComputedStyle(t).direction),o=a*r,s=n.target,c=t.contains(s),l=!1,u=o>0,d=0,f=0;do{if(!s)break;var p=pr(e,s),m=p[0],h=p[1]-p[2]-a*m;(m||h)&&fr(e,s)&&(d+=h,f+=m);var g=s.parentNode;s=g&&g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?g.host:g}while(!c&&s!==document.body||c&&(t.contains(s)||t===s));return(u&&(i&&Math.abs(d)<1||!i&&o>d)||!u&&(i&&Math.abs(f)<1||!i&&-o>f))&&(l=!0),l},gr=function(e){return`changedTouches`in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},_r=function(e){return[e.deltaX,e.deltaY]},vr=function(e){return e&&`current`in e?e.current:e},yr=function(e,t){return e[0]===t[0]&&e[1]===t[1]},br=function(e){return`
|
|
39
|
-
.block-interactivity-${e} {pointer-events: none;}
|
|
40
|
-
.allow-interactivity-${e} {pointer-events: all;}
|
|
41
|
-
`},xr=0,Z=[];function Sr(e){var t=j.useRef([]),n=j.useRef([0,0]),r=j.useRef(),i=j.useState(xr++)[0],a=j.useState(qn)[0],o=j.useRef(e);j.useEffect(function(){o.current=e},[e]),j.useEffect(function(){if(e.inert){document.body.classList.add(`block-interactivity-${i}`);var t=Cn([e.lockRef.current],(e.shards||[]).map(vr),!0).filter(Boolean);return t.forEach(function(e){return e.classList.add(`allow-interactivity-${i}`)}),function(){document.body.classList.remove(`block-interactivity-${i}`),t.forEach(function(e){return e.classList.remove(`allow-interactivity-${i}`)})}}},[e.inert,e.lockRef.current,e.shards]);var s=j.useCallback(function(e,t){if(`touches`in e&&e.touches.length===2||e.type===`wheel`&&e.ctrlKey)return!o.current.allowPinchZoom;var i=gr(e),a=n.current,s=`deltaX`in e?e.deltaX:a[0]-i[0],c=`deltaY`in e?e.deltaY:a[1]-i[1],l,u=e.target,d=Math.abs(s)>Math.abs(c)?`h`:`v`;if(`touches`in e&&d===`h`&&u.type===`range`)return!1;var f=window.getSelection(),p=f&&f.anchorNode;if(p&&(p===u||p.contains(u)))return!1;var m=lr(d,u);if(!m)return!0;if(m?l=d:(l=d===`v`?`h`:`v`,m=lr(d,u)),!m)return!1;if(!r.current&&`changedTouches`in e&&(s||c)&&(r.current=l),!l)return!0;var h=r.current||l;return hr(h,t,e,h===`h`?s:c,!0)},[]),c=j.useCallback(function(e){var n=e;if(Z.length&&Z[Z.length-1]===a){var r=`deltaY`in n?_r(n):gr(n),i=t.current.filter(function(e){return e.name===n.type&&(e.target===n.target||n.target===e.shadowParent)&&yr(e.delta,r)})[0];if(i&&i.should){n.cancelable&&n.preventDefault();return}if(!i){var c=(o.current.shards||[]).map(vr).filter(Boolean).filter(function(e){return e.contains(n.target)});(c.length>0?s(n,c[0]):!o.current.noIsolation)&&n.cancelable&&n.preventDefault()}}},[]),l=j.useCallback(function(e,n,r,i){var a={name:e,delta:n,target:r,should:i,shadowParent:Cr(r)};t.current.push(a),setTimeout(function(){t.current=t.current.filter(function(e){return e!==a})},1)},[]),u=j.useCallback(function(e){n.current=gr(e),r.current=void 0},[]),d=j.useCallback(function(t){l(t.type,_r(t),t.target,s(t,e.lockRef.current))},[]),f=j.useCallback(function(t){l(t.type,gr(t),t.target,s(t,e.lockRef.current))},[]);j.useEffect(function(){return Z.push(a),e.setCallbacks({onScrollCapture:d,onWheelCapture:d,onTouchMoveCapture:f}),document.addEventListener(`wheel`,c,X),document.addEventListener(`touchmove`,c,X),document.addEventListener(`touchstart`,u,X),function(){Z=Z.filter(function(e){return e!==a}),document.removeEventListener(`wheel`,c,X),document.removeEventListener(`touchmove`,c,X),document.removeEventListener(`touchstart`,u,X)}},[]);var p=e.removeScrollBar,m=e.inert;return j.createElement(j.Fragment,null,m?j.createElement(a,{styles:br(i)}):null,p?j.createElement(nr,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function Cr(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var wr=Ln(Rn,Sr),Tr=j.forwardRef(function(e,t){return j.createElement(Bn,J({},e,{ref:t,sideCar:wr}))});Tr.classNames=Bn.classNames;var Er=function(e){return typeof document>`u`?null:(Array.isArray(e)?e[0]:e).ownerDocument.body},Q=new WeakMap,Dr=new WeakMap,$={},Or=0,kr=function(e){return e&&(e.host||kr(e.parentNode))},Ar=function(e,t){return t.map(function(t){if(e.contains(t))return t;var n=kr(t);return n&&e.contains(n)?n:(console.error(`aria-hidden`,t,`in not contained inside`,e,`. Doing nothing`),null)}).filter(function(e){return!!e})},jr=function(e,t,n,r){var i=Ar(t,Array.isArray(e)?e:[e]);$[n]||($[n]=new WeakMap);var a=$[n],o=[],s=new Set,c=new Set(i),l=function(e){e&&!s.has(e)&&(s.add(e),l(e.parentNode))};i.forEach(l);var u=function(e){e&&!c.has(e)&&Array.prototype.forEach.call(e.children,function(e){if(s.has(e))u(e);else try{var t=e.getAttribute(r),i=t!==null&&t!==`false`,c=(Q.get(e)||0)+1,l=(a.get(e)||0)+1;Q.set(e,c),a.set(e,l),o.push(e),c===1&&i&&Dr.set(e,!0),l===1&&e.setAttribute(n,`true`),i||e.setAttribute(r,`true`)}catch(t){console.error(`aria-hidden: cannot operate on `,e,t)}})};return u(t),s.clear(),Or++,function(){o.forEach(function(e){var t=Q.get(e)-1,i=a.get(e)-1;Q.set(e,t),a.set(e,i),t||(Dr.has(e)||e.removeAttribute(r),Dr.delete(e)),i||e.removeAttribute(n)}),Or--,Or||(Q=new WeakMap,Q=new WeakMap,Dr=new WeakMap,$={})}},Mr=function(e,t,n){n===void 0&&(n=`data-aria-hidden`);var r=Array.from(Array.isArray(e)?e:[e]),i=t||Er(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll(`[aria-live], script`))),jr(r,i,n,`aria-hidden`)):function(){return null}};export{je as C,O as E,Ne as S,k as T,Ve as _,nn as a,M as b,U as c,bt as d,z as f,nt as g,tt as h,hn as i,It as l,at as m,Tr as n,Gt as o,R as p,bn as r,Kt as s,Mr as t,Dt as u,P as v,Oe as w,Pe as x,Ue as y};
|
|
42
|
-
//# sourceMappingURL=es2015-DrAA1N2V.js.map
|