From eb60c329d8c756e6ec4aaf332c7704a56459d322 Mon Sep 17 00:00:00 2001 From: Jakub Zych Date: Tue, 13 Oct 2026 16:53:58 +0200 Subject: [PATCH] fix(18-07): money accepts trailing zeros beyond the field scale A scale-2 money field over a four-decimal column (the documented fee example) was served "12.5000" and answered money.too_precise when the untouched value was saved back. Trailing zeros carry no precision, so the server check and the SPA parser count only significant fraction digits; the value still reaches the column unchanged, never rounded or truncated. - cabana validateMoneyValue and admin parseMoneyInput trim trailing zeros before the scale comparison - forms docs and cabana README name the rule; embedded dist rebuilt - MoneyField spec asserts 12.5000 at scale 2 is accepted, 12.5010 refused --- admin/src/app/money.ts | 8 +++++--- admin/tests/form/MoneyField.test.ts | 3 +++ docs/backend/forms.md | 2 +- .../assets/{editor-CP-kudaY.js => editor-BLtg3HaH.js} | 2 +- .../dist/assets/{index-Dioh6ysQ.js => index-DYW0Mjwc.js} | 4 ++-- modules/boardwalk/dist/index.html | 2 +- modules/cabana/README.md | 2 +- modules/cabana/field_money.go | 9 ++++++--- 8 files changed, 20 insertions(+), 12 deletions(-) rename modules/boardwalk/dist/assets/{editor-CP-kudaY.js => editor-BLtg3HaH.js} (99%) rename modules/boardwalk/dist/assets/{index-Dioh6ysQ.js => index-DYW0Mjwc.js} (80%) diff --git a/admin/src/app/money.ts b/admin/src/app/money.ts index 9fb7b40..3c3621b 100644 --- a/admin/src/app/money.ts +++ b/admin/src/app/money.ts @@ -20,8 +20,10 @@ const digitsOnly = /^[0-9]+$/ * Turns typed text into the canonical money string: spaces and U+00A0 are * stripped, one comma or dot is the decimal separator, an optional leading * minus is kept, digits only otherwise. Empty text is null. More than - * `scale` fraction digits is `too_precise`: the value is never rounded or - * truncated. Anything else (letters, two separators, grouping) is `invalid`. + * `scale` significant fraction digits is `too_precise`: the value is never + * rounded or truncated, and trailing zeros beyond the scale are kept and + * accepted (they carry no precision), as the server does. Anything else + * (letters, two separators, grouping) is `invalid`. */ export function parseMoneyInput(text: string, scale: number): MoneyParseResult { const compact = text.replace(/[\s ]/g, '') @@ -42,7 +44,7 @@ export function parseMoneyInput(text: string, scale: number): MoneyParseResult { if (!digitsOnly.test(whole ?? '') || (separators.length === 1 && !digitsOnly.test(fraction))) { return { value: null, error: 'invalid' } } - if (fraction.length > scale) { + if (fraction.replace(/0+$/, '').length > scale) { return { value: null, error: 'too_precise' } } const canonical = fraction === '' ? whole : `${whole}.${fraction}` diff --git a/admin/tests/form/MoneyField.test.ts b/admin/tests/form/MoneyField.test.ts index ee65a5d..c6f254a 100644 --- a/admin/tests/form/MoneyField.test.ts +++ b/admin/tests/form/MoneyField.test.ts @@ -65,6 +65,9 @@ describe('money helpers', () => { expect(parseMoneyInput('', 4)).toEqual({ value: null, error: null }) expect(parseMoneyInput(' ', 4)).toEqual({ value: null, error: null }) expect(parseMoneyInput('12.34567', 4)).toEqual({ value: null, error: 'too_precise' }) + // Trailing zeros beyond the scale carry no precision: kept, accepted. + expect(parseMoneyInput('12.5000', 2)).toEqual({ value: '12.5000', error: null }) + expect(parseMoneyInput('12.5010', 2)).toEqual({ value: null, error: 'too_precise' }) expect(parseMoneyInput('1.234,56', 4)).toEqual({ value: null, error: 'invalid' }) expect(parseMoneyInput('12a', 4)).toEqual({ value: null, error: 'invalid' }) expect(parseMoneyInput('1e3', 4)).toEqual({ value: null, error: 'invalid' }) diff --git a/docs/backend/forms.md b/docs/backend/forms.md index dfc0e31..8d65142 100644 --- a/docs/backend/forms.md +++ b/docs/backend/forms.md @@ -499,7 +499,7 @@ A save checks every submitted money value before the transaction and answers a 4 | Value | Answer | |-------|--------| | Not a string, or a string that is not an optional minus, digits and at most one dot followed by digits (`"1,5"`, `"1e3"`, `"1 000"`, a JSON number) | `money.invalid` | -| More fraction digits than `scale` (`"12.34567"` at scale 4) | `money.too_precise`, with `:scale` | +| More significant fraction digits than `scale` (`"12.34567"` at scale 4); trailing zeros do not count, so a scale-2 field over a `numeric(10,4)` column accepts its loaded `"12.5000"` | `money.too_precise`, with `:scale` | | Above `max` in absolute magnitude, compared as scaled digit strings | `money.too_large`, with `:max` | `null` is accepted and stored as NULL (or the column type's empty value); `required: true` refuses it through the usual rule. A value the administrator did not edit is sent back as it was loaded, so opening and saving a form with a stored `85.4193` writes `85.4193` again, never `85.42`. The same checks run on settings forms and relation forms. diff --git a/modules/boardwalk/dist/assets/editor-CP-kudaY.js b/modules/boardwalk/dist/assets/editor-BLtg3HaH.js similarity index 99% rename from modules/boardwalk/dist/assets/editor-CP-kudaY.js rename to modules/boardwalk/dist/assets/editor-BLtg3HaH.js index 5e2d0de..55f1308 100644 --- a/modules/boardwalk/dist/assets/editor-CP-kudaY.js +++ b/modules/boardwalk/dist/assets/editor-BLtg3HaH.js @@ -1,4 +1,4 @@ -import{L as mu,i as gu}from"./index-Dioh6ysQ.js";var Vs=Object.defineProperty,yu=(n,e)=>{let t={};for(var r in n)Vs(t,r,{get:n[r],enumerable:!0});return Vs(t,Symbol.toStringTag,{value:"Module"}),t};function Q(n){this.content=n}Q.prototype={constructor:Q,find:function(n){for(var e=0;e>1}};Q.from=function(n){if(n instanceof Q)return n;var e=[];if(n)for(var t in n)e.push(t,n[t]);return new Q(e)};function Cl(n,e,t){for(let r=0;;r++){if(r==n.childCount||r==e.childCount)return n.childCount==e.childCount?null:t;let i=n.child(r),s=e.child(r);if(i==s){t+=i.nodeSize;continue}if(!i.sameMarkup(s))return t;if(i.isText&&i.text!=s.text){let o=i.text,l=s.text,a=0;for(;o[a]==l[a];a++)t++;return a&&a0&&f>0&&c[d-1]==u[f-1];)d--,f--,t--,r--;return d&&f&&d=56320&&n<57344}function El(n){return n>=55296&&n<56320}class k{constructor(e,t){if(this.content=e,this.size=t||0,t==null)for(let r=0;re&&r(a,i+l,s||null,o)!==!1&&a.content.size){let u=l+1;a.nodesBetween(Math.max(0,e-u),Math.min(a.content.size,t-u),r,i+u)}l=c}}descendants(e){this.nodesBetween(0,this.size,e)}textBetween(e,t,r,i){let s="",o=!0;return this.nodesBetween(e,t,(l,a)=>{let c=l.isText?l.text.slice(Math.max(e,a)-a,t-a):l.isLeaf?i?typeof i=="function"?i(l):i:l.type.spec.leafText?l.type.spec.leafText(l):"":"";l.isBlock&&(l.isLeaf&&c||l.isTextblock)&&r&&(o?o=!1:s+=r),s+=c},0),s}append(e){if(!e.size)return this;if(!this.size)return e;let t=this.lastChild,r=e.firstChild,i=this.content.slice(),s=0;for(t.isText&&t.sameMarkup(r)&&(i[i.length-1]=t.withText(t.text+r.text),s=1);se)for(let s=0,o=0;oe&&((ot)&&(l.isText?l=l.cut(Math.max(0,e-o),Math.min(l.text.length,t-o)):l=l.cut(Math.max(0,e-o-1),Math.min(l.content.size,t-o-1))),r.push(l),i+=l.nodeSize),o=a}return new k(r,i)}cutByIndex(e,t){return e==t?k.empty:e==0&&t==this.content.length?this:new k(this.content.slice(e,t))}replaceChild(e,t){let r=this.content[e];if(r==t)return this;let i=this.content.slice(),s=this.size+t.nodeSize-r.nodeSize;return i[e]=t,new k(i,s)}addToStart(e){return new k([e].concat(this.content),this.size+e.nodeSize)}addToEnd(e){return new k(this.content.concat(e),this.size+e.nodeSize)}eq(e){if(this.content.length!=e.content.length)return!1;for(let t=0;tthis.size||e<0)throw new RangeError(`Position ${e} outside of fragment (${this})`);for(let t=0,r=0;;t++){let i=this.child(t),s=r+i.nodeSize;if(s>=e)return s==e?Rn(t+1,s):Rn(t,r);r=s}}toString(){return"<"+this.toStringInner()+">"}toStringInner(){return this.content.join(", ")}toJSON(){return this.content.length?this.content.map(e=>e.toJSON()):null}static fromJSON(e,t){if(!t)return k.empty;if(!Array.isArray(t))throw new RangeError("Invalid input for Fragment.fromJSON");return k.fromArray(t.map(e.nodeFromJSON))}static fromArray(e){if(!e.length)return k.empty;let t,r=0;for(let i=0;ithis.type.rank&&(t||(t=e.slice(0,i)),t.push(this),r=!0),t&&t.push(s)}}return t||(t=e.slice()),r||t.push(this),t}removeFromSet(e){for(let t=0;tr.type.rank-i.type.rank),t}};B.none=[];class gn extends Error{}class w{constructor(e,t,r){this.content=e,this.openStart=t,this.openEnd=r}get size(){return this.content.size-this.openStart-this.openEnd}insertAt(e,t){let r=Al(this.content,e+this.openStart,t,this.openStart+1,this.openEnd+1);return r&&new w(r,this.openStart,this.openEnd)}removeBetween(e,t){return new w(vl(this.content,e+this.openStart,t+this.openStart),this.openStart,this.openEnd)}eq(e){return this.content.eq(e.content)&&this.openStart==e.openStart&&this.openEnd==e.openEnd}toString(){return this.content+"("+this.openStart+","+this.openEnd+")"}toJSON(){if(!this.content.size)return null;let e={content:this.content.toJSON()};return this.openStart>0&&(e.openStart=this.openStart),this.openEnd>0&&(e.openEnd=this.openEnd),e}static fromJSON(e,t){if(!t)return w.empty;let r=t.openStart||0,i=t.openEnd||0;if(typeof r!="number"||typeof i!="number")throw new RangeError("Invalid input for Slice.fromJSON");return new w(k.fromJSON(e,t.content),r,i)}static maxOpen(e,t=!0){let r=0,i=0;for(let s=e.firstChild;s&&!s.isLeaf&&(t||!s.type.spec.isolating);s=s.firstChild)r++;for(let s=e.lastChild;s&&!s.isLeaf&&(t||!s.type.spec.isolating);s=s.lastChild)i++;return new w(e,r,i)}}w.empty=new w(k.empty,0,0);function vl(n,e,t){let{index:r,offset:i}=n.findIndex(e),s=n.maybeChild(r),{index:o,offset:l}=n.findIndex(t);if(i==e||s.isText){if(l!=t&&!n.child(o).isText)throw new RangeError("Removing non-flat range");return n.cut(0,e).append(n.cut(t))}if(r!=o)throw new RangeError("Removing non-flat range");return n.replaceChild(r,s.copy(vl(s.content,e-i-1,t-i-1)))}function Al(n,e,t,r,i,s){let{index:o,offset:l}=n.findIndex(e),a=n.maybeChild(o);if(l==e||a.isText)return s&&r<=0&&i<=0&&!s.canReplace(o,o,t)?null:n.cut(0,e).append(t).append(n.cut(e));let c=Al(a.content,e-l-1,t,o==0?r-1:0,o==n.childCount-1?i-1:0,a);return c&&n.replaceChild(o,a.copy(c))}function ku(n,e,t){if(t.openStart>n.depth)throw new gn("Inserted content deeper than insertion position");if(n.depth-t.openStart!=e.depth-t.openEnd)throw new gn("Inconsistent open depths");return Ol(n,e,t,0)}function Ol(n,e,t,r){let i=n.index(r),s=n.node(r);if(i==e.index(r)&&r=0&&n.isText&&n.sameMarkup(e[t])?e[t]=n.withText(e[t].text+n.text):e.push(n)}function nn(n,e,t,r){let i=(e||n).node(t),s=0,o=e?e.index(t):i.childCount;n&&(s=n.index(t),n.depth>t?s++:n.textOffset&&(mt(n.nodeAfter,r),s++));for(let l=s;li&&Ai(n,e,i+1),o=r.depth>i&&Ai(t,r,i+1),l=[];return nn(null,n,i,l),s&&o&&e.index(i)==t.index(i)?(Nl(s,o),mt(gt(s,Dl(n,e,t,r,i+1)),l)):(s&&mt(gt(s,Qn(n,e,i+1)),l),nn(e,t,i,l),o&&mt(gt(o,Qn(t,r,i+1)),l)),nn(r,null,i,l),new k(l)}function Qn(n,e,t){let r=[];if(nn(null,n,t,r),n.depth>t){let i=Ai(n,e,t+1);mt(gt(i,Qn(n,e,t+1)),r)}return nn(e,null,t,r),new k(r)}function bu(n,e){let t=e.depth-n.openStart,i=e.node(t).copy(n.content);for(let s=t-1;s>=0;s--)i=e.node(s).copy(k.from(i));return{start:i.resolveNoCache(n.openStart+t),end:i.resolveNoCache(i.content.size-n.openEnd-t)}}class yn{constructor(e,t,r){this.pos=e,this.path=t,this.parentOffset=r,this.depth=t.length/3-1}resolveDepth(e){return e==null?this.depth:e<0?this.depth+e:e}get parent(){return this.node(this.depth)}get doc(){return this.node(0)}node(e){return this.path[this.resolveDepth(e)*3]}index(e){return this.path[this.resolveDepth(e)*3+1]}indexAfter(e){return e=this.resolveDepth(e),this.index(e)+(e==this.depth&&!this.textOffset?0:1)}start(e){return e=this.resolveDepth(e),e==0?0:this.path[e*3-1]+1}end(e){return e=this.resolveDepth(e),this.start(e)+this.node(e).content.size}before(e){if(e=this.resolveDepth(e),!e)throw new RangeError("There is no position before the top-level node");return e==this.depth+1?this.pos:this.path[e*3-1]}after(e){if(e=this.resolveDepth(e),!e)throw new RangeError("There is no position after the top-level node");return e==this.depth+1?this.pos:this.path[e*3-1]+this.path[e*3].nodeSize}get textOffset(){return this.pos-this.path[this.path.length-1]}get nodeAfter(){let e=this.parent,t=this.index(this.depth);if(t==e.childCount)return null;let r=this.pos-this.path[this.path.length-1],i=e.child(t);return r?e.child(t).cut(r):i}get nodeBefore(){let e=this.index(this.depth),t=this.pos-this.path[this.path.length-1];return t?this.parent.child(e).cut(0,t):e==0?null:this.parent.child(e-1)}posAtIndex(e,t){t=this.resolveDepth(t);let r=this.path[t*3],i=t==0?0:this.path[t*3-1]+1;for(let s=0;s0;t--)if(this.start(t)<=e&&this.end(t)>=e)return t;return 0}blockRange(e=this,t){if(e.pos=0;r--)if(e.pos<=this.end(r)&&(!t||t(this.node(r))))return new Zn(this,e,r);return null}sameParent(e){return this.pos-this.parentOffset==e.pos-e.parentOffset}max(e){return e.pos>this.pos?e:this}min(e){return e.pos=0&&t<=e.content.size))throw new RangeError("Position "+t+" out of range");let r=[],i=0,s=t;for(let o=e;;){let{index:l,offset:a}=o.content.findIndex(s),c=s-a;if(r.push(o,l,i+a),!c||(o=o.child(l),o.isText))break;s=c-1,i+=a+1}return new yn(t,r,s)}static resolveCached(e,t){let r=Hs.get(e);if(r)for(let s=0;se&&this.nodesBetween(e,t,s=>(r.isInSet(s.marks)&&(i=!0),!i)),i}get isBlock(){return this.type.isBlock}get isTextblock(){return this.type.isTextblock}get inlineContent(){return this.type.inlineContent}get isInline(){return this.type.isInline}get isText(){return this.type.isText}get isLeaf(){return this.type.isLeaf}get isAtom(){return this.type.isAtom}toString(){if(this.type.spec.toDebugString)return this.type.spec.toDebugString(this);let e=this.type.name;return this.content.size&&(e+="("+this.content.toStringInner()+")"),Il(this.marks,e)}contentMatchAt(e){let t=this.type.contentMatch.matchFragment(this.content,0,e);if(!t)throw new Error("Called contentMatchAt on a node with invalid content");return t}canReplace(e,t,r=k.empty,i=0,s=r.childCount){let o=this.contentMatchAt(e).matchFragment(r,i,s),l=o&&o.matchFragment(this.content,t);if(!l||!l.validEnd)return!1;for(let a=i;at.type.name)}`);this.content.forEach(t=>t.check())}toJSON(){let e={type:this.type.name};for(let t in this.attrs){e.attrs=this.attrs;break}return this.content.size&&(e.content=this.content.toJSON()),this.marks.length&&(e.marks=this.marks.map(t=>t.toJSON())),e}static fromJSON(e,t){if(!t)throw new RangeError("Invalid input for Node.fromJSON");let r;if(t.marks){if(!Array.isArray(t.marks))throw new RangeError("Invalid mark data for Node.fromJSON");r=t.marks.map(e.markFromJSON)}if(t.type=="text"){if(typeof t.text!="string")throw new RangeError("Invalid text node in JSON");return e.text(t.text,r)}let i=k.fromJSON(e,t.content);return e.nodeType(t.type).create(t.attrs,i,r)}};yt.prototype.text=void 0;class er extends yt{constructor(e,t,r,i){if(super(e,t,null,i),!r)throw new RangeError("Empty text nodes are not allowed");this.text=r}toString(){return this.type.spec.toDebugString?this.type.spec.toDebugString(this):Il(this.marks,JSON.stringify(this.text))}get textContent(){return this.text}textBetween(e,t){return this.text.slice(e,t)}get nodeSize(){return this.text.length}mark(e){return e==this.marks?this:new er(this.type,this.attrs,this.text,e)}withText(e){return e==this.text?this:new er(this.type,this.attrs,e,this.marks)}cut(e=0,t=this.text.length){return e==0&&t==this.text.length?this:this.withText(this.text.slice(e,t))}eq(e){return this.sameMarkup(e)&&this.text==e.text}toJSON(){let e=super.toJSON();return e.text=this.text,e}}function Il(n,e){for(let t=n.length-1;t>=0;t--)e=n[t].type.name+"("+e+")";return e}function js(n,e,t,r){for(let i in e)if(!(i in n))throw new RangeError(`Unsupported attribute ${i} for ${t} of type ${r}`);for(let i in n)n[i].validate&&n[i].validate(e[i])}class xt{constructor(e){this.validEnd=e,this.next=[],this.wrapCache=[]}static parse(e,t){let r=new Cu(e,t);if(r.next==null)return xt.empty;let i=Rl(r);r.next&&r.err("Unexpected trailing text");let s=Nu(Ou(i));return Du(s,r),s}matchType(e){for(let t=0;tc.createAndFill()));for(let c=0;c=this.next.length)throw new RangeError(`There's no ${e}th edge in this content match`);return this.next[e]}toString(){let e=[];function t(r){e.push(r);for(let i=0;i{let s=i+(r.validEnd?"*":" ")+" ";for(let o=0;o"+e.indexOf(r.next[o].next);return s}).join(` +import{L as mu,i as gu}from"./index-DYW0Mjwc.js";var Vs=Object.defineProperty,yu=(n,e)=>{let t={};for(var r in n)Vs(t,r,{get:n[r],enumerable:!0});return Vs(t,Symbol.toStringTag,{value:"Module"}),t};function Q(n){this.content=n}Q.prototype={constructor:Q,find:function(n){for(var e=0;e>1}};Q.from=function(n){if(n instanceof Q)return n;var e=[];if(n)for(var t in n)e.push(t,n[t]);return new Q(e)};function Cl(n,e,t){for(let r=0;;r++){if(r==n.childCount||r==e.childCount)return n.childCount==e.childCount?null:t;let i=n.child(r),s=e.child(r);if(i==s){t+=i.nodeSize;continue}if(!i.sameMarkup(s))return t;if(i.isText&&i.text!=s.text){let o=i.text,l=s.text,a=0;for(;o[a]==l[a];a++)t++;return a&&a0&&f>0&&c[d-1]==u[f-1];)d--,f--,t--,r--;return d&&f&&d=56320&&n<57344}function El(n){return n>=55296&&n<56320}class k{constructor(e,t){if(this.content=e,this.size=t||0,t==null)for(let r=0;re&&r(a,i+l,s||null,o)!==!1&&a.content.size){let u=l+1;a.nodesBetween(Math.max(0,e-u),Math.min(a.content.size,t-u),r,i+u)}l=c}}descendants(e){this.nodesBetween(0,this.size,e)}textBetween(e,t,r,i){let s="",o=!0;return this.nodesBetween(e,t,(l,a)=>{let c=l.isText?l.text.slice(Math.max(e,a)-a,t-a):l.isLeaf?i?typeof i=="function"?i(l):i:l.type.spec.leafText?l.type.spec.leafText(l):"":"";l.isBlock&&(l.isLeaf&&c||l.isTextblock)&&r&&(o?o=!1:s+=r),s+=c},0),s}append(e){if(!e.size)return this;if(!this.size)return e;let t=this.lastChild,r=e.firstChild,i=this.content.slice(),s=0;for(t.isText&&t.sameMarkup(r)&&(i[i.length-1]=t.withText(t.text+r.text),s=1);se)for(let s=0,o=0;oe&&((ot)&&(l.isText?l=l.cut(Math.max(0,e-o),Math.min(l.text.length,t-o)):l=l.cut(Math.max(0,e-o-1),Math.min(l.content.size,t-o-1))),r.push(l),i+=l.nodeSize),o=a}return new k(r,i)}cutByIndex(e,t){return e==t?k.empty:e==0&&t==this.content.length?this:new k(this.content.slice(e,t))}replaceChild(e,t){let r=this.content[e];if(r==t)return this;let i=this.content.slice(),s=this.size+t.nodeSize-r.nodeSize;return i[e]=t,new k(i,s)}addToStart(e){return new k([e].concat(this.content),this.size+e.nodeSize)}addToEnd(e){return new k(this.content.concat(e),this.size+e.nodeSize)}eq(e){if(this.content.length!=e.content.length)return!1;for(let t=0;tthis.size||e<0)throw new RangeError(`Position ${e} outside of fragment (${this})`);for(let t=0,r=0;;t++){let i=this.child(t),s=r+i.nodeSize;if(s>=e)return s==e?Rn(t+1,s):Rn(t,r);r=s}}toString(){return"<"+this.toStringInner()+">"}toStringInner(){return this.content.join(", ")}toJSON(){return this.content.length?this.content.map(e=>e.toJSON()):null}static fromJSON(e,t){if(!t)return k.empty;if(!Array.isArray(t))throw new RangeError("Invalid input for Fragment.fromJSON");return k.fromArray(t.map(e.nodeFromJSON))}static fromArray(e){if(!e.length)return k.empty;let t,r=0;for(let i=0;ithis.type.rank&&(t||(t=e.slice(0,i)),t.push(this),r=!0),t&&t.push(s)}}return t||(t=e.slice()),r||t.push(this),t}removeFromSet(e){for(let t=0;tr.type.rank-i.type.rank),t}};B.none=[];class gn extends Error{}class w{constructor(e,t,r){this.content=e,this.openStart=t,this.openEnd=r}get size(){return this.content.size-this.openStart-this.openEnd}insertAt(e,t){let r=Al(this.content,e+this.openStart,t,this.openStart+1,this.openEnd+1);return r&&new w(r,this.openStart,this.openEnd)}removeBetween(e,t){return new w(vl(this.content,e+this.openStart,t+this.openStart),this.openStart,this.openEnd)}eq(e){return this.content.eq(e.content)&&this.openStart==e.openStart&&this.openEnd==e.openEnd}toString(){return this.content+"("+this.openStart+","+this.openEnd+")"}toJSON(){if(!this.content.size)return null;let e={content:this.content.toJSON()};return this.openStart>0&&(e.openStart=this.openStart),this.openEnd>0&&(e.openEnd=this.openEnd),e}static fromJSON(e,t){if(!t)return w.empty;let r=t.openStart||0,i=t.openEnd||0;if(typeof r!="number"||typeof i!="number")throw new RangeError("Invalid input for Slice.fromJSON");return new w(k.fromJSON(e,t.content),r,i)}static maxOpen(e,t=!0){let r=0,i=0;for(let s=e.firstChild;s&&!s.isLeaf&&(t||!s.type.spec.isolating);s=s.firstChild)r++;for(let s=e.lastChild;s&&!s.isLeaf&&(t||!s.type.spec.isolating);s=s.lastChild)i++;return new w(e,r,i)}}w.empty=new w(k.empty,0,0);function vl(n,e,t){let{index:r,offset:i}=n.findIndex(e),s=n.maybeChild(r),{index:o,offset:l}=n.findIndex(t);if(i==e||s.isText){if(l!=t&&!n.child(o).isText)throw new RangeError("Removing non-flat range");return n.cut(0,e).append(n.cut(t))}if(r!=o)throw new RangeError("Removing non-flat range");return n.replaceChild(r,s.copy(vl(s.content,e-i-1,t-i-1)))}function Al(n,e,t,r,i,s){let{index:o,offset:l}=n.findIndex(e),a=n.maybeChild(o);if(l==e||a.isText)return s&&r<=0&&i<=0&&!s.canReplace(o,o,t)?null:n.cut(0,e).append(t).append(n.cut(e));let c=Al(a.content,e-l-1,t,o==0?r-1:0,o==n.childCount-1?i-1:0,a);return c&&n.replaceChild(o,a.copy(c))}function ku(n,e,t){if(t.openStart>n.depth)throw new gn("Inserted content deeper than insertion position");if(n.depth-t.openStart!=e.depth-t.openEnd)throw new gn("Inconsistent open depths");return Ol(n,e,t,0)}function Ol(n,e,t,r){let i=n.index(r),s=n.node(r);if(i==e.index(r)&&r=0&&n.isText&&n.sameMarkup(e[t])?e[t]=n.withText(e[t].text+n.text):e.push(n)}function nn(n,e,t,r){let i=(e||n).node(t),s=0,o=e?e.index(t):i.childCount;n&&(s=n.index(t),n.depth>t?s++:n.textOffset&&(mt(n.nodeAfter,r),s++));for(let l=s;li&&Ai(n,e,i+1),o=r.depth>i&&Ai(t,r,i+1),l=[];return nn(null,n,i,l),s&&o&&e.index(i)==t.index(i)?(Nl(s,o),mt(gt(s,Dl(n,e,t,r,i+1)),l)):(s&&mt(gt(s,Qn(n,e,i+1)),l),nn(e,t,i,l),o&&mt(gt(o,Qn(t,r,i+1)),l)),nn(r,null,i,l),new k(l)}function Qn(n,e,t){let r=[];if(nn(null,n,t,r),n.depth>t){let i=Ai(n,e,t+1);mt(gt(i,Qn(n,e,t+1)),r)}return nn(e,null,t,r),new k(r)}function bu(n,e){let t=e.depth-n.openStart,i=e.node(t).copy(n.content);for(let s=t-1;s>=0;s--)i=e.node(s).copy(k.from(i));return{start:i.resolveNoCache(n.openStart+t),end:i.resolveNoCache(i.content.size-n.openEnd-t)}}class yn{constructor(e,t,r){this.pos=e,this.path=t,this.parentOffset=r,this.depth=t.length/3-1}resolveDepth(e){return e==null?this.depth:e<0?this.depth+e:e}get parent(){return this.node(this.depth)}get doc(){return this.node(0)}node(e){return this.path[this.resolveDepth(e)*3]}index(e){return this.path[this.resolveDepth(e)*3+1]}indexAfter(e){return e=this.resolveDepth(e),this.index(e)+(e==this.depth&&!this.textOffset?0:1)}start(e){return e=this.resolveDepth(e),e==0?0:this.path[e*3-1]+1}end(e){return e=this.resolveDepth(e),this.start(e)+this.node(e).content.size}before(e){if(e=this.resolveDepth(e),!e)throw new RangeError("There is no position before the top-level node");return e==this.depth+1?this.pos:this.path[e*3-1]}after(e){if(e=this.resolveDepth(e),!e)throw new RangeError("There is no position after the top-level node");return e==this.depth+1?this.pos:this.path[e*3-1]+this.path[e*3].nodeSize}get textOffset(){return this.pos-this.path[this.path.length-1]}get nodeAfter(){let e=this.parent,t=this.index(this.depth);if(t==e.childCount)return null;let r=this.pos-this.path[this.path.length-1],i=e.child(t);return r?e.child(t).cut(r):i}get nodeBefore(){let e=this.index(this.depth),t=this.pos-this.path[this.path.length-1];return t?this.parent.child(e).cut(0,t):e==0?null:this.parent.child(e-1)}posAtIndex(e,t){t=this.resolveDepth(t);let r=this.path[t*3],i=t==0?0:this.path[t*3-1]+1;for(let s=0;s0;t--)if(this.start(t)<=e&&this.end(t)>=e)return t;return 0}blockRange(e=this,t){if(e.pos=0;r--)if(e.pos<=this.end(r)&&(!t||t(this.node(r))))return new Zn(this,e,r);return null}sameParent(e){return this.pos-this.parentOffset==e.pos-e.parentOffset}max(e){return e.pos>this.pos?e:this}min(e){return e.pos=0&&t<=e.content.size))throw new RangeError("Position "+t+" out of range");let r=[],i=0,s=t;for(let o=e;;){let{index:l,offset:a}=o.content.findIndex(s),c=s-a;if(r.push(o,l,i+a),!c||(o=o.child(l),o.isText))break;s=c-1,i+=a+1}return new yn(t,r,s)}static resolveCached(e,t){let r=Hs.get(e);if(r)for(let s=0;se&&this.nodesBetween(e,t,s=>(r.isInSet(s.marks)&&(i=!0),!i)),i}get isBlock(){return this.type.isBlock}get isTextblock(){return this.type.isTextblock}get inlineContent(){return this.type.inlineContent}get isInline(){return this.type.isInline}get isText(){return this.type.isText}get isLeaf(){return this.type.isLeaf}get isAtom(){return this.type.isAtom}toString(){if(this.type.spec.toDebugString)return this.type.spec.toDebugString(this);let e=this.type.name;return this.content.size&&(e+="("+this.content.toStringInner()+")"),Il(this.marks,e)}contentMatchAt(e){let t=this.type.contentMatch.matchFragment(this.content,0,e);if(!t)throw new Error("Called contentMatchAt on a node with invalid content");return t}canReplace(e,t,r=k.empty,i=0,s=r.childCount){let o=this.contentMatchAt(e).matchFragment(r,i,s),l=o&&o.matchFragment(this.content,t);if(!l||!l.validEnd)return!1;for(let a=i;at.type.name)}`);this.content.forEach(t=>t.check())}toJSON(){let e={type:this.type.name};for(let t in this.attrs){e.attrs=this.attrs;break}return this.content.size&&(e.content=this.content.toJSON()),this.marks.length&&(e.marks=this.marks.map(t=>t.toJSON())),e}static fromJSON(e,t){if(!t)throw new RangeError("Invalid input for Node.fromJSON");let r;if(t.marks){if(!Array.isArray(t.marks))throw new RangeError("Invalid mark data for Node.fromJSON");r=t.marks.map(e.markFromJSON)}if(t.type=="text"){if(typeof t.text!="string")throw new RangeError("Invalid text node in JSON");return e.text(t.text,r)}let i=k.fromJSON(e,t.content);return e.nodeType(t.type).create(t.attrs,i,r)}};yt.prototype.text=void 0;class er extends yt{constructor(e,t,r,i){if(super(e,t,null,i),!r)throw new RangeError("Empty text nodes are not allowed");this.text=r}toString(){return this.type.spec.toDebugString?this.type.spec.toDebugString(this):Il(this.marks,JSON.stringify(this.text))}get textContent(){return this.text}textBetween(e,t){return this.text.slice(e,t)}get nodeSize(){return this.text.length}mark(e){return e==this.marks?this:new er(this.type,this.attrs,this.text,e)}withText(e){return e==this.text?this:new er(this.type,this.attrs,e,this.marks)}cut(e=0,t=this.text.length){return e==0&&t==this.text.length?this:this.withText(this.text.slice(e,t))}eq(e){return this.sameMarkup(e)&&this.text==e.text}toJSON(){let e=super.toJSON();return e.text=this.text,e}}function Il(n,e){for(let t=n.length-1;t>=0;t--)e=n[t].type.name+"("+e+")";return e}function js(n,e,t,r){for(let i in e)if(!(i in n))throw new RangeError(`Unsupported attribute ${i} for ${t} of type ${r}`);for(let i in n)n[i].validate&&n[i].validate(e[i])}class xt{constructor(e){this.validEnd=e,this.next=[],this.wrapCache=[]}static parse(e,t){let r=new Cu(e,t);if(r.next==null)return xt.empty;let i=Rl(r);r.next&&r.err("Unexpected trailing text");let s=Nu(Ou(i));return Du(s,r),s}matchType(e){for(let t=0;tc.createAndFill()));for(let c=0;c=this.next.length)throw new RangeError(`There's no ${e}th edge in this content match`);return this.next[e]}toString(){let e=[];function t(r){e.push(r);for(let i=0;i{let s=i+(r.validEnd?"*":" ")+" ";for(let o=0;o"+e.indexOf(r.next[o].next);return s}).join(` `)}}xt.empty=new xt(!0);class Cu{constructor(e,t){this.string=e,this.nodeTypes=t,this.inline=null,this.pos=0,this.tokens=e.split(/\s*(?=\b|\W|$)/),this.tokens[this.tokens.length-1]==""&&this.tokens.pop(),this.tokens[0]==""&&this.tokens.shift()}get next(){return this.tokens[this.pos]}eat(e){return this.next==e&&(this.pos++||!0)}err(e){throw new SyntaxError(e+" (in content expression '"+this.string+"')")}}function Rl(n){let e=[];do e.push(Mu(n));while(n.eat("|"));return e.length==1?e[0]:{type:"choice",exprs:e}}function Mu(n){let e=[];do e.push(Tu(n));while(n.next&&n.next!=")"&&n.next!="|");return e.length==1?e[0]:{type:"seq",exprs:e}}function Tu(n){let e=Au(n);for(;;)if(n.eat("+"))e={type:"plus",expr:e};else if(n.eat("*"))e={type:"star",expr:e};else if(n.eat("?"))e={type:"opt",expr:e};else if(n.eat("{"))e=Eu(n,e);else break;return e}function Ws(n){/\D/.test(n.next)&&n.err("Expected number, got '"+n.next+"'");let e=Number(n.next);return n.pos++,e}function Eu(n,e){let t=Ws(n),r=t;return n.eat(",")&&(n.next!="}"?r=Ws(n):r=-1),n.eat("}")||n.err("Unclosed braced range"),{type:"range",min:t,max:r,expr:e}}function vu(n,e){let t=n.nodeTypes,r=t[e];if(r)return[r];let i=[];for(let s in t){let o=t[s];o.isInGroup(e)&&i.push(o)}return i.length==0&&n.err("No node type or group '"+e+"' found"),i}function Au(n){if(n.eat("(")){let e=Rl(n);return n.eat(")")||n.err("Missing closing paren"),e}else if(/\W/.test(n.next))n.err("Unexpected token '"+n.next+"'");else{let e=vu(n,n.next).map(t=>(n.inline==null?n.inline=t.isInline:n.inline!=t.isInline&&n.err("Mixing inline and block content"),{type:"name",value:t}));return n.pos++,e.length==1?e[0]:{type:"choice",exprs:e}}}function Ou(n){let e=[[]];return i(s(n,0),t()),e;function t(){return e.push([])-1}function r(o,l,a){let c={term:a,to:l};return e[o].push(c),c}function i(o,l){o.forEach(a=>a.to=l)}function s(o,l){if(o.type=="choice")return o.exprs.reduce((a,c)=>a.concat(s(c,l)),[]);if(o.type=="seq")for(let a=0;;a++){let c=s(o.exprs[a],l);if(a==o.exprs.length-1)return c;i(c,l=t())}else if(o.type=="star"){let a=t();return r(l,a),i(s(o.expr,a),a),[r(a)]}else if(o.type=="plus"){let a=t();return i(s(o.expr,l),a),i(s(o.expr,a),a),[r(a)]}else{if(o.type=="opt")return[r(l)].concat(s(o.expr,l));if(o.type=="range"){let a=l;for(let c=0;c{n[o].forEach(({term:l,to:a})=>{if(!l)return;let c;for(let u=0;u{c||i.push([l,c=[]]),c.indexOf(u)==-1&&c.push(u)})})});let s=e[r.join(",")]=new xt(r.indexOf(n.length-1)>-1);for(let o=0;o-1}get whitespace(){return this.spec.whitespace||(this.spec.code?"pre":"normal")}hasRequiredAttrs(){for(let e in this.attrs)if(this.attrs[e].isRequired)return!0;return!1}compatibleContent(e){return this==e||this.contentMatch.compatible(e.contentMatch)}computeAttrs(e){return!e&&this.defaultAttrs?this.defaultAttrs:Bl(this.attrs,e)}create(e=null,t,r){if(this.isText)throw new Error("NodeType.create can't construct text nodes");return new yt(this,this.computeAttrs(e),k.from(t),B.setFrom(r))}createChecked(e=null,t,r){return t=k.from(t),this.checkContent(t),new yt(this,this.computeAttrs(e),t,B.setFrom(r))}createAndFill(e=null,t,r){if(e=this.computeAttrs(e),t=k.from(t),t.size){let o=this.contentMatch.fillBefore(t);if(!o)return null;t=o.append(t)}let i=this.contentMatch.matchFragment(t),s=i&&i.fillBefore(k.empty,!0);return s?new yt(this,e,t.append(s),B.setFrom(r)):null}validContent(e){let t=this.contentMatch.matchFragment(e);if(!t||!t.validEnd)return!1;for(let r=0;r-1}allowsMarks(e){if(this.markSet==null)return!0;for(let t=0;tr[s]=new $l(s,t,o));let i=t.spec.topNode||"doc";if(!r[i])throw new RangeError("Schema is missing its top node type ('"+i+"')");if(!r.text)throw new RangeError("Every schema needs a 'text' type");for(let s in r.text.attrs)throw new RangeError("The text node type should not have attributes");return r}};function Iu(n,e,t){let r=t.split("|");return i=>{let s=i===null?"null":typeof i;if(r.indexOf(s)<0)throw new RangeError(`Expected value of type ${r} for attribute ${e} on type ${n}, got ${s}`)}}class Ru{constructor(e,t,r){this.hasDefault=Object.prototype.hasOwnProperty.call(r,"default"),this.default=r.default,this.validate=typeof r.validate=="string"?Iu(e,t,r.validate):r.validate}get isRequired(){return!this.hasDefault}}class Fr{constructor(e,t,r,i){this.name=e,this.rank=t,this.schema=r,this.spec=i,this.attrs=zl(e,i.attrs),this.excluded=null;let s=Pl(this.attrs);this.instance=s?new B(this,s):null}create(e=null){return!e&&this.instance?this.instance:new B(this,Bl(this.attrs,e))}static compile(e,t){let r=Object.create(null),i=0;return e.forEach((s,o)=>r[s]=new Fr(s,i++,t,o)),r}removeFromSet(e){for(var t=0;t-1}}class Fl{constructor(e){this.linebreakReplacement=null,this.cached=Object.create(null);let t=this.spec={};for(let i in e)t[i]=e[i];t.nodes=Q.from(e.nodes),t.marks=Q.from(e.marks||{}),this.nodes=Us.compile(this.spec.nodes,this),this.marks=Fr.compile(this.spec.marks,this);let r=Object.create(null);for(let i in this.nodes){if(i in this.marks)throw new RangeError(i+" can not be both a node and a mark");let s=this.nodes[i],o=s.spec.content||"",l=s.spec.marks;if(s.contentMatch=r[o]||(r[o]=xt.parse(o,this.nodes)),s.inlineContent=s.contentMatch.inlineContent,s.spec.linebreakReplacement){if(this.linebreakReplacement)throw new RangeError("Multiple linebreak nodes defined");if(!s.isInline||!s.isLeaf)throw new RangeError("Linebreak replacement nodes must be inline leaf nodes");this.linebreakReplacement=s}s.markSet=l=="_"?null:l?_s(this,l.split(" ")):l==""||!s.inlineContent?[]:null}for(let i in this.marks){let s=this.marks[i],o=s.spec.excludes;s.excluded=o==null?[s]:o==""?[]:_s(this,o.split(" "))}this.nodeFromJSON=i=>yt.fromJSON(this,i),this.markFromJSON=i=>B.fromJSON(this,i),this.topNodeType=this.nodes[this.spec.topNode||"doc"],this.cached.wrappings=Object.create(null)}node(e,t=null,r,i){if(typeof e=="string")e=this.nodeType(e);else if(e instanceof Us){if(e.schema!=this)throw new RangeError("Node type from different schema used ("+e.name+")")}else throw new RangeError("Invalid node type: "+e);return e.createChecked(t,r,i)}text(e,t){let r=this.nodes.text;return new er(r,r.defaultAttrs,e,B.setFrom(t))}mark(e,t){return typeof e=="string"&&(e=this.marks[e]),e.create(t)}nodeType(e){let t=this.nodes[e];if(!t)throw new RangeError("Unknown node type: "+e);return t}}function _s(n,e){let t=[];for(let r=0;r-1)&&t.push(o=a)}if(!o)throw new SyntaxError("Unknown mark type: '"+e[r]+"'")}return t}function Lu(n){return n.tag!=null}function Pu(n){return n.style!=null}class Xe{constructor(e,t){this.schema=e,this.rules=t,this.tags=[],this.styles=[];let r=this.matchedStyles=[];t.forEach(i=>{if(Lu(i))this.tags.push(i);else if(Pu(i)){let s=/[^=]*/.exec(i.style)[0];r.indexOf(s)<0&&r.push(s),this.styles.push(i)}}),this.normalizeLists=!this.tags.some(i=>{if(!/^(ul|ol)\b/.test(i.tag)||!i.node)return!1;let s=e.nodes[i.node];return s.contentMatch.matchType(s)})}parse(e,t={}){let r=new Js(this,t,!1);return r.addAll(e,B.none,t.from,t.to),r.finish()}parseSlice(e,t={}){let r=new Js(this,t,!0);return r.addAll(e,B.none,t.from,t.to),w.maxOpen(r.finish())}matchTag(e,t,r){for(let i=r?this.tags.indexOf(r)+1:0;ie.length&&(l.charCodeAt(e.length)!=61||l.slice(e.length+1)!=t))){if(o.getAttrs){let a=o.getAttrs(t);if(a===!1)continue;o.attrs=a||void 0}return o}}}static schemaRules(e){let t=[];function r(i){let s=i.priority==null?50:i.priority,o=0;for(;o{r(o=Gs(o)),o.mark||o.ignore||o.clearMark||(o.mark=i)})}for(let i in e.nodes){let s=e.nodes[i].spec.parseDOM;s&&s.forEach(o=>{r(o=Gs(o)),o.node||o.ignore||o.mark||(o.node=i)})}return t}static fromSchema(e){return e.cached.domParser||(e.cached.domParser=new Xe(e,Xe.schemaRules(e)))}}const Vl={address:!0,article:!0,aside:!0,blockquote:!0,body:!0,canvas:!0,dd:!0,div:!0,dl:!0,fieldset:!0,figcaption:!0,figure:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,li:!0,noscript:!0,ol:!0,output:!0,p:!0,pre:!0,section:!0,table:!0,tfoot:!0,ul:!0},Bu={head:!0,noscript:!0,object:!0,script:!0,style:!0,title:!0},Hl={ol:!0,ul:!0},kn=1,Ni=2,rn=4;function qs(n,e,t){return e!=null?(e?kn:0)|(e==="full"?Ni:0):n&&n.whitespace=="pre"?kn|Ni:t&~rn}class Ln{constructor(e,t,r,i,s,o){this.type=e,this.attrs=t,this.marks=r,this.solid=i,this.options=o,this.content=[],this.activeMarks=B.none,this.match=s||(o&rn?null:e.contentMatch)}findWrapping(e){if(!this.match){if(!this.type)return[];let t=this.type.contentMatch.fillBefore(k.from(e));if(t)this.match=this.type.contentMatch.matchFragment(t);else{let r=this.type.contentMatch,i;return(i=r.findWrapping(e.type))?(this.match=r,i):null}}return this.match.findWrapping(e.type)}finish(e){if(!(this.options&kn)){let r=this.content[this.content.length-1],i;if(r&&r.isText&&(i=/[ \t\r\n\u000c]+$/.exec(r.text))){let s=r;r.text.length==i[0].length?this.content.pop():this.content[this.content.length-1]=s.withText(s.text.slice(0,s.text.length-i[0].length))}}let t=k.from(this.content);return!e&&this.match&&(t=t.append(this.match.fillBefore(k.empty,!0))),this.type?this.type.create(this.attrs,t,this.marks):t}inlineContext(e){return this.type?this.type.inlineContent:this.content.length?this.content[0].isInline:e.parentNode&&!Vl.hasOwnProperty(e.parentNode.nodeName.toLowerCase())}}class Js{constructor(e,t,r){this.parser=e,this.options=t,this.isOpen=r,this.open=0,this.localPreserveWS=!1;let i=t.topNode,s,o=qs(null,t.preserveWhitespace,0)|(r?rn:0);i?s=new Ln(i.type,i.attrs,B.none,!0,t.topMatch||i.type.contentMatch,o):r?s=new Ln(null,null,B.none,!0,null,o):s=new Ln(e.schema.topNodeType,null,B.none,!0,null,o),this.nodes=[s],this.find=t.findPositions,this.needsBlock=!1}get top(){return this.nodes[this.open]}addDOM(e,t){e.nodeType==3?this.addTextNode(e,t):e.nodeType==1&&this.addElement(e,t)}addTextNode(e,t){let r=e.nodeValue,i=this.top,s=i.options&Ni?"full":this.localPreserveWS||(i.options&kn)>0,{schema:o}=this.parser;if(s==="full"||i.inlineContext(e)||/[^ \t\r\n\u000c]/.test(r)){if(s)if(s==="full")r=r.replace(/\r\n?/g,` `);else if(o.linebreakReplacement&&/[\r\n]/.test(r)&&this.top.findWrapping(o.linebreakReplacement.create())){let l=r.split(/\r?\n|\r/);for(let a=0;a!a.clearMark(c)):t=t.concat(this.parser.schema.marks[a.mark].create(a.attrs)),a.consuming===!1)l=a;else break}}return t}addElementByRule(e,t,r,i){let s,o;if(t.node)if(o=this.parser.schema.nodes[t.node],o.isLeaf)this.insertNode(o.create(t.attrs),r,e.nodeName=="BR")||this.leafFallback(e,r);else{let a=this.enter(o,t.attrs||null,r,t.preserveWhitespace);a&&(s=!0,r=a)}else{let a=this.parser.schema.marks[t.mark];r=r.concat(a.create(t.attrs))}let l=this.top;if(o&&o.isLeaf)this.findInside(e);else if(i)this.addElement(e,r,i);else if(t.getContent)this.findInside(e),t.getContent(e,this.parser.schema).forEach(a=>this.insertNode(a,r,!1));else{let a=e;typeof t.contentElement=="string"?a=e.querySelector(t.contentElement):typeof t.contentElement=="function"?a=t.contentElement(e):t.contentElement&&(a=t.contentElement),this.findAround(e,a,!0),this.addAll(a,r),this.findAround(e,a,!1)}s&&this.sync(l)&&this.open--}addAll(e,t,r,i){let s=r||0;for(let o=r?e.childNodes[r]:e.firstChild,l=i==null?null:e.childNodes[i];o!=l;o=o.nextSibling,++s)this.findAtPoint(e,s),this.addDOM(o,t);this.findAtPoint(e,s)}findPlace(e,t,r){let i,s;for(let o=this.open,l=0;o>=0;o--){let a=this.nodes[o],c=a.findWrapping(e);if(c&&(!i||i.length>c.length+l)&&(i=c,s=a,!c.length))break;if(a.solid){if(r)break;l+=2}}if(!i)return null;this.sync(s);for(let o=0;o(o.type?o.type.allowsMarkType(c.type):Ys(c.type,e))?(a=c.addToSet(a),!1):!0),this.nodes.push(new Ln(e,t,a,i,null,l)),this.open++,r}closeExtra(e=!1){let t=this.nodes.length-1;if(t>this.open){for(;t>this.open;t--)this.nodes[t-1].content.push(this.nodes[t].finish(e));this.nodes.length=this.open+1}}finish(){return this.open=0,this.closeExtra(this.isOpen),this.nodes[0].finish(!!(this.isOpen||this.options.topOpen))}sync(e){for(let t=this.open;t>=0;t--){if(this.nodes[t]==e)return this.open=t,!0;this.localPreserveWS&&(this.nodes[t].options|=kn)}return!1}get currentPos(){this.closeExtra();let e=0;for(let t=this.open;t>=0;t--){let r=this.nodes[t].content;for(let i=r.length-1;i>=0;i--)e+=r[i].nodeSize;t&&e++}return e}findAtPoint(e,t){if(this.find)for(let r=0;r-1)return e.split(/\s*\|\s*/).some(this.matchesContext,this);let t=e.split("/"),r=this.options.context,i=!this.isOpen&&(!r||r.parent.type==this.nodes[0].type),s=-(r?r.depth+1:0)+(i?0:1),o=(l,a)=>{for(;l>=0;l--){let c=t[l];if(c==""){if(l==t.length-1||l==0)continue;for(;a>=s;a--)if(o(l-1,a))return!0;return!1}else{let u=a>0||a==0&&i?this.nodes[a].type:r&&a>=s?r.node(a-s).type:null;if(!u||u.name!=c&&!u.isInGroup(c))return!1;a--}}return!0};return o(t.length-1,this.open)}textblockFromContext(){let e=this.options.context;if(e)for(let t=e.depth;t>=0;t--){let r=e.node(t).contentMatchAt(e.indexAfter(t)).defaultType;if(r&&r.isTextblock&&r.defaultAttrs)return r}for(let t in this.parser.schema.nodes){let r=this.parser.schema.nodes[t];if(r.isTextblock&&r.defaultAttrs)return r}}}function zu(n){for(let e=n.firstChild,t=null;e;e=e.nextSibling){let r=e.nodeType==1?e.nodeName.toLowerCase():null;r&&Hl.hasOwnProperty(r)&&t?(t.appendChild(e),e=t):r=="li"?t=e:r&&(t=null)}}function $u(n,e){return(n.matches||n.msMatchesSelector||n.webkitMatchesSelector||n.mozMatchesSelector).call(n,e)}function Gs(n){let e={};for(let t in n)e[t]=n[t];return e}function Ys(n,e){let t=e.schema.nodes;for(let r in t){let i=t[r];if(!i.allowsMarkType(n))continue;let s=[],o=l=>{s.push(l);for(let a=0;a{if(s.length||o.marks.length){let l=0,a=0;for(;l=0;i--){let s=this.serializeMark(e.marks[i],e.isInline,t);s&&((s.contentDOM||s.dom).appendChild(r),r=s.dom)}return r}serializeMark(e,t,r={}){let i=this.marks[e.type.name];return i&&_n(Pn(r),i(e,t),null,e.attrs)}static renderSpec(e,t,r=null,i){return typeof t=="string"?{dom:e.createTextNode(t)}:_n(e,t,r,i)}static fromSchema(e){return e.cached.domSerializer||(e.cached.domSerializer=new Tt(this.nodesFromSchema(e),this.marksFromSchema(e)))}static nodesFromSchema(e){let t=Xs(e.nodes);return t.text||(t.text=r=>r.text),t}static marksFromSchema(e){return Xs(e.marks)}}function Xs(n){let e={};for(let t in n){let r=n[t].spec.toDOM;r&&(e[t]=r)}return e}function Pn(n){return n.document||window.document}const Qs=new WeakMap;function Fu(n){let e=Qs.get(n);return e===void 0&&Qs.set(n,e=Vu(n)),e}function Vu(n){let e=null;function t(r){if(r&&typeof r=="object")if(Array.isArray(r))if(typeof r[0]=="string")e||(e=[]),e.push(r);else for(let i=0;i-1)throw new RangeError("Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.");let o=i.indexOf(" ");o>0&&(t=i.slice(0,o),i=i.slice(o+1));let l,a=t?n.createElementNS(t,i):n.createElement(i),c=e[1],u=1;if(c&&typeof c=="object"&&c.nodeType==null&&!Array.isArray(c)){u=2;for(let d in c)if(c[d]!=null){let f=d.indexOf(" ");f>0?a.setAttributeNS(d.slice(0,f),d.slice(f+1),c[d]):d=="style"&&a.style?a.style.cssText=c[d]:a.setAttribute(d,c[d])}}for(let d=u;du)throw new RangeError("Content hole must be the only child of its parent node");return{dom:a,contentDOM:a}}else if(typeof f=="string")a.appendChild(n.createTextNode(f));else{let{dom:h,contentDOM:p}=_n(n,f,t,r);if(a.appendChild(h),p){if(l)throw new RangeError("Multiple content holes");l=p}}}return{dom:a,contentDOM:l}}const jl=65535,Wl=Math.pow(2,16);function Hu(n,e){return n+e*Wl}function Zs(n){return n&jl}function ju(n){return(n-(n&jl))/Wl}const Kl=1,Ul=2,qn=4,_l=8;class Di{constructor(e,t,r){this.pos=e,this.delInfo=t,this.recover=r}get deleted(){return(this.delInfo&_l)>0}get deletedBefore(){return(this.delInfo&(Kl|qn))>0}get deletedAfter(){return(this.delInfo&(Ul|qn))>0}get deletedAcross(){return(this.delInfo&qn)>0}}class de{constructor(e,t=!1){if(this.ranges=e,this.inverted=t,!e.length&&de.empty)return de.empty}recover(e){let t=0,r=Zs(e);if(!this.inverted)for(let i=0;ie)break;let c=this.ranges[l+s],u=this.ranges[l+o],d=a+c;if(e<=d){let f=c?e==a?-1:e==d?1:t:t,h=a+i+(f<0?0:u);if(r)return h;let p=e==(t<0?a:d)?null:Hu(l/3,e-a),m=0;return c&&(m|=e==a?Ul:e==d?Kl:qn,(t<0?e!=a:e!=d)&&(m|=_l)),new Di(h,m,p)}i+=u-c}return r?e+i:new Di(e+i,0,null)}touches(e,t){let r=0,i=Zs(t),s=this.inverted?2:1,o=this.inverted?1:2;for(let l=0;le)break;let c=this.ranges[l+s],u=a+c;if(e<=u&&l==i*3)return!0;r+=this.ranges[l+o]-c}return!1}forEach(e){let t=this.inverted?2:1,r=this.inverted?1:2;for(let i=0,s=0;i=0;t--){let i=e.getMirror(t);this.appendMap(e._maps[t].invert(),i!=null&&i>t?r-i-1:void 0)}}invert(){let e=new bn;return e.appendMappingInverted(this),e}map(e,t=1){if(this.mirror)return this._map(e,t,!0);for(let r=this.from;rs&&a!o.isAtom||!l.type.allowsMarkType(this.mark.type)?o:o.mark(this.mark.addToSet(o.marks)),i),t.openStart,t.openEnd);return K.fromReplace(e,this.from,this.to,s)}invert(){return new Ce(this.from,this.to,this.mark)}map(e){let t=e.mapResult(this.from,1),r=e.mapResult(this.to,-1);return t.deleted&&r.deleted||t.pos>=r.pos?null:new Ge(t.pos,r.pos,this.mark)}merge(e){return e instanceof Ge&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from?new Ge(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark):null}toJSON(){return{stepType:"addMark",mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(e,t){if(typeof t.from!="number"||typeof t.to!="number")throw new RangeError("Invalid input for AddMarkStep.fromJSON");return new Ge(t.from,t.to,e.markFromJSON(t.mark))}}se.jsonID("addMark",Ge);class Ce extends se{constructor(e,t,r){super(),this.from=e,this.to=t,this.mark=r}apply(e){let t=e.slice(this.from,this.to),r=new w(ss(t.content,i=>i.mark(this.mark.removeFromSet(i.marks)),e),t.openStart,t.openEnd);return K.fromReplace(e,this.from,this.to,r)}invert(){return new Ge(this.from,this.to,this.mark)}map(e){let t=e.mapResult(this.from,1),r=e.mapResult(this.to,-1);return t.deleted&&r.deleted||t.pos>=r.pos?null:new Ce(t.pos,r.pos,this.mark)}merge(e){return e instanceof Ce&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from?new Ce(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark):null}toJSON(){return{stepType:"removeMark",mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(e,t){if(typeof t.from!="number"||typeof t.to!="number")throw new RangeError("Invalid input for RemoveMarkStep.fromJSON");return new Ce(t.from,t.to,e.markFromJSON(t.mark))}}se.jsonID("removeMark",Ce);class Ye extends se{constructor(e,t){super(),this.pos=e,this.mark=t}apply(e){let t=e.nodeAt(this.pos);if(!t)return K.fail("No node at mark step's position");let r=t.type.create(t.attrs,null,this.mark.addToSet(t.marks));return K.fromReplace(e,this.pos,this.pos+1,new w(k.from(r),0,t.isLeaf?0:1))}invert(e){let t=e.nodeAt(this.pos);if(t){let r=this.mark.addToSet(t.marks);if(r.length==t.marks.length){for(let i=0;ir.pos?null:new G(t.pos,r.pos,i,s,this.slice,this.insert,this.structure)}toJSON(){let e={stepType:"replaceAround",from:this.from,to:this.to,gapFrom:this.gapFrom,gapTo:this.gapTo,insert:this.insert};return this.slice.size&&(e.slice=this.slice.toJSON()),this.structure&&(e.structure=!0),e}static fromJSON(e,t){if(typeof t.from!="number"||typeof t.to!="number"||typeof t.gapFrom!="number"||typeof t.gapTo!="number"||typeof t.insert!="number")throw new RangeError("Invalid input for ReplaceAroundStep.fromJSON");return new G(t.from,t.to,t.gapFrom,t.gapTo,w.fromJSON(e,t.slice),t.insert,!!t.structure)}}se.jsonID("replaceAround",G);function Ii(n,e,t){let r=n.resolve(e),i=t-e,s=r.depth;for(;i>0&&s>0&&r.indexAfter(s)==r.node(s).childCount;)s--,i--;if(i>0){let o=r.node(s).maybeChild(r.indexAfter(s));for(;i>0;){if(!o||o.isLeaf)return!0;o=o.firstChild,i--}}return!1}function Wu(n,e,t,r){let i=[],s=[],o,l;n.doc.nodesBetween(e,t,(a,c,u)=>{if(!a.isInline)return;let d=a.marks;if(!r.isInSet(d)&&u.type.allowsMarkType(r.type)){let f=Math.max(c,e),h=Math.min(c+a.nodeSize,t),p=r.addToSet(d);for(let m=0;mn.step(a)),s.forEach(a=>n.step(a))}function Ku(n,e,t,r){let i=[],s=0;n.doc.nodesBetween(e,t,(o,l)=>{if(!o.isInline)return;s++;let a=null;if(r instanceof Fr){let c=o.marks,u;for(;u=r.isInSet(c);)(a||(a=[])).push(u),c=u.removeFromSet(c)}else r?r.isInSet(o.marks)&&(a=[r]):a=o.marks;if(a&&a.length){let c=Math.min(l+o.nodeSize,t);for(let u=0;un.step(new Ce(o.from,o.to,o.style)))}function ls(n,e,t,r=t.contentMatch,i=!0){let s=n.doc.nodeAt(e),o=[],l=e+1;for(let a=0;a=0;a--)n.step(o[a])}function Uu(n,e,t){return(e==0||n.canReplace(e,n.childCount))&&(t==n.childCount||n.canReplace(0,t))}function _t(n){let t=n.parent.content.cutByIndex(n.startIndex,n.endIndex);for(let r=n.depth,i=0,s=0;;--r){let o=n.$from.node(r),l=n.$from.index(r)+i,a=n.$to.indexAfter(r)-s;if(rt;p--)m||r.index(p)>0?(m=!0,u=k.from(r.node(p).copy(u)),d++):a--;let f=k.empty,h=0;for(let p=s,m=!1;p>t;p--)m||i.after(p+1)=0;o--){if(r.size){let l=t[o].type.contentMatch.matchFragment(r);if(!l||!l.validEnd)throw new RangeError("Wrapper type given to Transform.wrap does not form valid content of its parent wrapper")}r=k.from(t[o].type.create(t[o].attrs,r))}let i=e.start,s=e.end;n.step(new G(i,s,i,s,new w(r,0,0),t.length,!0))}function Yu(n,e,t,r,i){if(!r.isTextblock)throw new RangeError("Type given to setBlockType should be a textblock");let s=n.steps.length;n.doc.nodesBetween(e,t,(o,l)=>{let a=typeof i=="function"?i(o):i;if(o.isTextblock&&!o.hasMarkup(r,a)&&Xu(n.doc,n.mapping.slice(s).map(l),r)){let c=null;if(r.schema.linebreakReplacement){let h=r.whitespace=="pre",p=!!r.contentMatch.matchType(r.schema.linebreakReplacement);h&&!p?c=!1:!h&&p&&(c=!0)}c===!1&&Jl(n,o,l,s),ls(n,n.mapping.slice(s).map(l,1),r,void 0,c===null);let u=n.mapping.slice(s),d=u.map(l,1),f=u.map(l+o.nodeSize,1);return n.step(new G(d,f,d+1,f-1,new w(k.from(r.create(a,null,o.marks)),0,0),1,!0)),c===!0&&ql(n,o,l,s),!1}})}function ql(n,e,t,r){e.forEach((i,s)=>{if(i.isText){let o,l=/\r?\n|\r/g;for(;o=l.exec(i.text);){let a=n.mapping.slice(r).map(t+1+s+o.index);n.replaceWith(a,a+1,e.type.schema.linebreakReplacement.create())}}})}function Jl(n,e,t,r){e.forEach((i,s)=>{if(i.type==i.type.schema.linebreakReplacement){let o=n.mapping.slice(r).map(t+1+s);n.replaceWith(o,o+1,e.type.schema.text(` diff --git a/modules/boardwalk/dist/assets/index-Dioh6ysQ.js b/modules/boardwalk/dist/assets/index-DYW0Mjwc.js similarity index 80% rename from modules/boardwalk/dist/assets/index-Dioh6ysQ.js rename to modules/boardwalk/dist/assets/index-DYW0Mjwc.js index 335aae2..3a82bab 100644 --- a/modules/boardwalk/dist/assets/index-Dioh6ysQ.js +++ b/modules/boardwalk/dist/assets/index-DYW0Mjwc.js @@ -6,6 +6,6 @@ - \`null\` or \`undefined\` if the progress is indeterminate. Defaulting to \`null\`.`),null)}function nO(e){return Ss(e)&&!Number.isNaN(e)&&e>0?e:(console.error(`Invalid prop \`max\` of value \`${e}\` supplied to \`ProgressRoot\`. Only numbers greater than 0 are valid max values. Defaulting to \`${Xo}\`.`),Xo)}var aO=le({__name:"ProgressRoot",props:{modelValue:{type:[Number,null],required:!1},max:{type:Number,required:!1,default:Xo},getValueLabel:{type:Function,required:!1,default:(e,t)=>Ss(e)?`${Math.round(e/t*Xo)}%`:void 0},getValueText:{type:Function,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:modelValue","update:max"],setup(e,{emit:t}){const n=e,a=t;tt();const r=Rt(n,"modelValue",a,{passive:n.modelValue===void 0}),l=Rt(n,"max",a,{passive:n.max===void 0});je(()=>r.value,async i=>{const u=tO(i,n.max);u!==i&&(await Xe(),r.value=u)},{immediate:!0}),je(()=>n.max,i=>{const u=nO(n.max);u!==i&&(l.value=u)},{immediate:!0});const o=b(()=>mn(r.value)?"indeterminate":r.value===l.value?"complete":"loading");return eO({modelValue:r,max:l,progressState:o}),(i,u)=>(v(),U(s(nt),{"as-child":i.asChild,as:i.as,"aria-valuemax":s(l),"aria-valuemin":0,"aria-valuenow":Ss(s(r))?s(r):void 0,"aria-valuetext":i.getValueText?.(s(r),s(l)),"aria-label":i.getValueLabel(s(r),s(l)),role:"progressbar","data-state":o.value,"data-value":s(r)??void 0,"data-max":s(l)},{default:F(()=>[xe(i.$slots,"default",{modelValue:s(r)})]),_:3},8,["as-child","as","aria-valuemax","aria-valuenow","aria-valuetext","aria-label","data-state","data-value","data-max"]))}}),cc=aO,rO=le({__name:"ProgressIndicator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,n=QD();return tt(),(a,r)=>(v(),U(s(nt),He(t,{"data-state":s(n).progressState.value,"data-value":s(n).modelValue?.value??void 0,"data-max":s(n).max.value}),{default:F(()=>[xe(a.$slots,"default")]),_:3},16,["data-state","data-value","data-max"]))}}),dc=rO;const lO="radio.select";function oO(e,t,n){Kd(lO,n,{originalEvent:e,value:t})}var iO=le({__name:"Radio",props:{id:{type:String,required:!1},value:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},checked:{type:Boolean,required:!1,default:void 0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:checked","select"],setup(e,{emit:t}){const n=e,a=t,r=Rt(n,"checked",a,{passive:n.checked===void 0}),{value:l}=Yt(n),{forwardRef:o,currentElement:i}=tt(),u=df(i),c=b(()=>n.id&&i.value?document.querySelector(`[for="${n.id}"]`)?.innerText??n.value:void 0);function d(f){n.disabled||oO(f,n.value,m=>{a("select",m),!m?.defaultPrevented&&(r.value=!0,u.value&&m.stopPropagation())})}return(f,m)=>(v(),U(s(nt),He(f.$attrs,{id:f.id,ref:s(o),role:"radio",type:f.as==="button"?"button":void 0,as:f.as,"aria-checked":s(r),"aria-label":c.value,"as-child":f.asChild,disabled:f.disabled?"":void 0,"data-state":s(r)?"checked":"unchecked","data-disabled":f.disabled?"":void 0,value:s(l),required:f.required,name:f.name,onClick:vt(d,["stop"])}),{default:F(()=>[xe(f.$slots,"default",{checked:s(r)}),s(u)&&f.name?(v(),U(s(yf),{key:0,type:"radio",tabindex:"-1",value:s(l),checked:!!s(r),name:f.name,disabled:f.disabled,required:f.required},null,8,["value","checked","name","disabled","required"])):ne("v-if",!0)]),_:3},16,["id","type","as","aria-checked","aria-label","as-child","disabled","data-state","data-disabled","value","required","name"]))}}),sO=iO;const[uO,cO]=Ct("RadioGroupRoot");var dO=le({__name:"RadioGroupRoot",props:{modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1,default:!1}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,{forwardRef:r,currentElement:l}=tt(),o=Rt(n,"modelValue",a,{defaultValue:n.defaultValue,passive:n.modelValue===void 0}),{disabled:i,loop:u,orientation:c,name:d,required:f,dir:m}=Yt(n),p=Ta(m),h=df(l);return cO({modelValue:o,changeModelValue:x=>{o.value=x},disabled:i,loop:u,orientation:c,name:d?.value,required:f}),(x,$)=>(v(),U(s(Af),{"as-child":"",orientation:s(c),dir:s(p),loop:s(u)},{default:F(()=>[B(s(nt),{ref:s(r),role:"radiogroup","data-disabled":s(i)?"":void 0,"as-child":x.asChild,as:x.as,"aria-orientation":s(c),"aria-required":s(f),dir:s(p)},{default:F(()=>[xe(x.$slots,"default",{modelValue:s(o)}),s(h)&&s(d)?(v(),U(s(yf),{key:0,required:s(f),disabled:s(i),value:s(o),name:s(d)},null,8,["required","disabled","value","name"])):ne("v-if",!0)]),_:3},8,["data-disabled","as-child","as","aria-orientation","aria-required","dir"])]),_:3},8,["orientation","dir","loop"]))}}),Nb=dO;const[vV,fO]=Ct("RadioGroupItem");var pO=le({inheritAttrs:!1,__name:"RadioGroupItem",props:{id:{type:String,required:!1},value:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["select"],setup(e,{emit:t}){const n=e,a=t,{forwardRef:r,currentElement:l}=tt(),o=uO(),i=b(()=>o.disabled.value||n.disabled),u=b(()=>o.required.value||n.required),c=b(()=>Wo(o.modelValue?.value,n.value));fO({disabled:i,checked:c});const d=R(!1),f=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"];Bl("keydown",p=>{f.includes(p.key)&&(d.value=!0)}),Bl("keyup",()=>{d.value=!1});function m(){setTimeout(()=>{d.value&&l.value?.click()},0)}return(p,h)=>(v(),U(s(Tf),{checked:c.value,disabled:i.value,"as-child":"",focusable:!i.value,active:c.value},{default:F(()=>[B(sO,He({...p.$attrs,...n},{ref:s(r),checked:c.value,required:u.value,disabled:i.value,"onUpdate:checked":h[0]||(h[0]=x=>s(o).changeModelValue(p.value)),onSelect:h[1]||(h[1]=x=>a("select",x)),onKeydown:h[2]||(h[2]=nr(vt(()=>{},["prevent"]),["enter"])),onFocus:m}),{default:F(()=>[xe(p.$slots,"default",{checked:c.value,required:u.value,disabled:i.value})]),_:3},16,["checked","required","disabled"])]),_:3},8,["checked","disabled","focusable","active"]))}}),Lb=pO,vO=le({__name:"BaseSeparator",props:{orientation:{type:String,required:!1,default:"horizontal"},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,n=["horizontal","vertical"];function a(i){return n.includes(i)}const r=b(()=>a(t.orientation)?t.orientation:"horizontal"),l=b(()=>r.value==="vertical"?t.orientation:void 0),o=b(()=>t.decorative?{role:"none"}:{"aria-orientation":l.value,role:"separator"});return(i,u)=>(v(),U(s(nt),He({as:i.as,"as-child":i.asChild,"data-orientation":r.value},o.value),{default:F(()=>[xe(i.$slots,"default")]),_:3},16,["as","as-child","data-orientation"]))}}),mO=vO;const[hO,yO]=Ct("TimeFieldRoot");function Li(e,t=mi(Ln())){return e&&"day"in e?e:ta(t,e)}var gO=le({inheritAttrs:!1,__name:"TimeFieldRoot",props:{defaultValue:{type:Object,required:!1,default:void 0},defaultPlaceholder:{type:Object,required:!1},placeholder:{type:Object,required:!1,default:void 0},modelValue:{type:[Object,null],required:!1},hourCycle:{type:null,required:!1},step:{type:Object,required:!1},stepSnapping:{type:Boolean,required:!1,default:!1},granularity:{type:String,required:!1},hideTimeZone:{type:Boolean,required:!1},maxValue:{type:Object,required:!1},minValue:{type:Object,required:!1},locale:{type:String,required:!1},disabled:{type:Boolean,required:!1,default:!1},readonly:{type:Boolean,required:!1,default:!1},id:{type:String,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue","update:placeholder"],setup(e,{expose:t,emit:n}){const a=e,r=n,{disabled:l,readonly:o,granularity:i,defaultValue:u,minValue:c,maxValue:d,stepSnapping:f,dir:m,locale:p}=Yt(a),h=su(p),x=Ta(m),$=cf(h.value,{hourCycle:Yo(a.hourCycle)}),{primitiveElement:g,currentElement:C}=Fr(),E=R(new Set),D=b(()=>Gg(a)),O=b(()=>c.value?Li(c.value):void 0),L=b(()=>d.value?Li(d.value):void 0);wt(()=>{dm(C.value).forEach(ae=>E.value.add(ae))});const N=Rt(a,"modelValue",r,{defaultValue:u.value,passive:a.modelValue===void 0}),z=b({get(){return mn(N.value)?N.value:Li(N.value)},set(ae){return ae?N.value=N.value&&"day"in N.value?ae:new Yn(ae.hour,ae.minute,ae.second,N.value?.millisecond):N.value=ae,ae}}),w=NE({defaultPlaceholder:a.placeholder,defaultValue:N.value}),P=Rt(a,"placeholder",r,{defaultValue:a.defaultPlaceholder??w.copy(),passive:a.placeholder===void 0}),Y=b({get(){return Li(P.value)},set(ae){return ae&&(P.value="day"in P.value?ae.copy():new Yn(ae.hour,ae.minute,ae.second,P.value?.millisecond)),ae}}),I=b(()=>i.value?i.value:"minute"),X=b(()=>N.value?!!(O.value&&Za(z.value,O.value)||L.value&&Za(L.value,z.value)):!1),Z=hT(I.value),j=R(N.value?{...dd({value:z.value,formatter:$})}:{...Z}),H=b(()=>wb({granularity:I.value,dateRef:Y.value,formatter:$,hideTimeZone:a.hideTimeZone,hourCycle:a.hourCycle,segmentValues:j.value,locale:h,isTimeValue:!0})),re=b(()=>{const ae=H.value.arr;return a.hourCycle===12?ae.map(Q=>{if(Q.part==="hour"&&"hour"in j.value){const ue=j.value.hour;if(ue!==null){const V=ue===0?12:ue>12?ue-12:ue;return{...Q,value:V.toString()}}}return Q}):ae}),ce=b(()=>re.value.filter(({part:ae})=>ae!=="literal"));je(h,ae=>{$.getLocale()!==ae&&($.setLocale(ae),Xe(()=>{E.value.clear(),dm(C.value).forEach(Q=>E.value.add(Q))}))}),je(z,ae=>{!mn(ae)&&(!Al(Y.value,ae)||Y.value.compare(ae)!==0)&&(P.value=ae.copy())}),je([z,h],([ae])=>{mn(ae)?Object.values(j.value).every(Q=>Q!==null)&&mn(ae)&&(j.value={...Z}):j.value={...dd({value:ae,formatter:$})}});const $e=R(null),me=b(()=>Array.from(E.value).findIndex(ae=>ae.getAttribute("data-reka-time-field-segment")===$e.value?.getAttribute("data-reka-time-field-segment"))),be=b(()=>{const ae=x.value==="rtl"?-1:1;return(ae<0?me.value<0:me.value>E.value.size-1)?null:Array.from(E.value)[me.value+ae]}),fe=b(()=>{const ae=x.value==="rtl"?-1:1;return(ae>0?me.value<0:me.value>E.value.size-1)?null:Array.from(E.value)[me.value-ae]}),Te=Ul();function W(ae){ae.isComposing||ca(ae.key)&&(ae.key===Te.ARROW_LEFT&&fe.value?.focus(),ae.key===Te.ARROW_RIGHT&&be.value?.focus())}function ke(ae){$e.value=ae}return yO({locale:h,modelValue:z,placeholder:Y,disabled:l,formatter:$,hourCycle:a.hourCycle,step:D,stepSnapping:f,readonly:o,segmentValues:j,isInvalid:X,segmentContents:ce,elements:E,setFocusedElement:ke,focusNext(){be.value?.focus()}}),t({setFocusedElement:ke}),(ae,Q)=>(v(),U(s(nt),He(ae.$attrs,{ref_key:"primitiveElement",ref:g,role:"group","aria-disabled":s(l)?!0:void 0,"data-disabled":s(l)?"":void 0,"data-readonly":s(o)?"":void 0,"data-invalid":X.value?"":void 0,dir:s(x),onKeydown:nr(W,["left","right"])}),{default:F(()=>[xe(ae.$slots,"default",{modelValue:s(N),segments:re.value,isInvalid:X.value}),B(s(hf),{id:ae.id,as:"input",feature:"focusable",tabindex:"-1",value:s(N)?s(N).toString():"",name:ae.name,disabled:s(l),required:ae.required,onFocus:Q[0]||(Q[0]=ue=>Array.from(E.value)?.[0]?.focus())},null,8,["id","value","name","disabled","required"])]),_:3},16,["aria-disabled","data-disabled","data-readonly","data-invalid","dir"]))}}),pm=gO,bO=le({__name:"TimeFieldInput",props:{part:{type:null,required:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,n=hO(),a=R(!0),r=R(!1),{handleSegmentClick:l,handleSegmentKeydown:o,handleSegmentBeforeInput:i,handleSegmentCompositionStart:u,handleSegmentCompositionEnd:c,handleSegmentFocusOut:d,attributes:f}=$b({hasLeftFocus:a,lastKeyZero:r,placeholder:n.placeholder,hourCycle:n.hourCycle,step:n.step,stepSnapping:n.stepSnapping,segmentValues:n.segmentValues,formatter:n.formatter,part:t.part,disabled:n.disabled,readonly:n.readonly,focusNext:n.focusNext,modelValue:n.modelValue}),m=b(()=>n.disabled.value),p=b(()=>n.readonly.value),h=b(()=>n.isInvalid.value);return(x,$)=>(v(),U(s(nt),He({as:x.as,"as-child":x.asChild},s(f),{contenteditable:m.value||p.value?!1:x.part!=="literal","data-reka-time-field-segment":x.part,"aria-disabled":m.value?!0:void 0,"aria-readonly":p.value?!0:void 0,"data-disabled":m.value?"":void 0,"data-invalid":h.value?"":void 0,"aria-invalid":h.value?!0:void 0},Kh(x.part!=="literal"?{mousedown:s(l),keydown:s(o),beforeinput:s(i),compositionstart:s(u),compositionend:s(c),focusout:()=>{a.value=!0,s(d)()},focusin:g=>{s(n).setFocusedElement(g.target)}}:{})),{default:F(()=>[xe(x.$slots,"default")]),_:3},16,["as","as-child","contenteditable","data-reka-time-field-segment","aria-disabled","aria-readonly","data-disabled","data-invalid","aria-invalid"]))}}),vm=bO,_O=le({__name:"ToolbarButton",props:{disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const t=e,{forwardRef:n}=tt();return(a,r)=>(v(),U(s(Tf),{"as-child":"",focusable:!a.disabled},{default:F(()=>[B(s(nt),He({ref:s(n),type:a.as==="button"?"button":void 0},t),{default:F(()=>[xe(a.$slots,"default")]),_:3},16,["type"])]),_:3},8,["focusable"]))}}),fo=_O;const[xO,kO]=Ct("ToolbarRoot");var wO=le({__name:"ToolbarRoot",props:{orientation:{type:String,required:!1,default:"horizontal"},dir:{type:String,required:!1},loop:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,{orientation:n,dir:a}=Yt(t),r=Ta(a),{forwardRef:l}=tt();return kO({orientation:n,dir:r}),(o,i)=>(v(),U(s(Af),{"as-child":"",orientation:s(n),dir:s(r),loop:o.loop},{default:F(()=>[B(s(nt),{ref:s(l),role:"toolbar","aria-orientation":s(n),"as-child":o.asChild,as:o.as},{default:F(()=>[xe(o.$slots,"default")]),_:3},8,["aria-orientation","as-child","as"])]),_:3},8,["orientation","dir","loop"]))}}),$O=wO,CO=le({__name:"ToolbarSeparator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,n=xO();return tt(),(a,r)=>(v(),U(mO,{orientation:s(n).orientation.value,"as-child":t.asChild,as:a.as},{default:F(()=>[xe(a.$slots,"default")]),_:3},8,["orientation","as-child","as"]))}}),fc=CO;const SO=/^filter\[(.+)\]$/,EO=/^[1-9]\d*$/;function il(e){const t=Array.isArray(e)?e[e.length-1]:e;return typeof t=="string"?t:""}function mm(e){return EO.test(e)?Number(e):void 0}function Bb(e){const t={},n=il(e.search).trim();n!==""&&(t.search=n);const a=il(e.sort).trim();if(a!==""){t.sort=a;const i=il(e.dir);t.dir=i==="desc"?"desc":"asc"}const r=mm(il(e.page));r!==void 0&&(t.page=r);const l=mm(il(e.per_page));l!==void 0&&(t.per_page=l);const o={};for(const i of Object.keys(e).sort()){const u=SO.exec(i)?.[1],c=il(e[i]);u&&c!==""&&(o[u]=c)}return Object.keys(o).length>0&&(t.filter=o),t}function Es(e){const t={};e.search&&(t.search=e.search),e.sort&&(t.sort=e.sort,t.dir=e.dir==="desc"?"desc":"asc"),e.page!==void 0&&e.page>1&&(t.page=String(e.page)),e.per_page!==void 0&&(t.per_page=String(e.per_page));for(const n of Object.keys(e.filter??{}).sort()){const a=e.filter?.[n];a!==void 0&&a!==""&&(t[`filter[${n}]`]=a)}return t}function _l(e){return JSON.stringify(Es(e))}const Fb="summer-admin.list:",AO=_l({});let pd=null;function hu(){try{return typeof window>"u"?null:window.localStorage}catch{return null}}function Vb(e){return`${Fb}${e}:`}function zb(e){return pd===null?null:Vb(pd)+e}function vd(e){try{hu()?.removeItem(e)}catch{}}function hm(e){const t=hu();if(t)try{const n=[];for(let a=0;a!0);return}const n=Vb(t);hm(a=>!a.startsWith(n))}function TO(e){const t=zb(e);if(t===null)return{};let n=null;try{n=hu()?.getItem(t)??null}catch{return{}}if(n===null)return{};let a;try{a=JSON.parse(n)}catch{return vd(t),{}}return typeof a!="object"||a===null||Array.isArray(a)||Object.getPrototypeOf(a)!==Object.prototype||!Object.values(a).every(r=>typeof r=="string")?(vd(t),{}):Bb(a)}function Bi(e,t){const n=zb(e);if(n!==null){if(_l(t)===AO){vd(n);return}try{hu()?.setItem(n,JSON.stringify(Es(t)))}catch{}}}const Ml=R(null),jb=R(null);let Lo=null;function Ub(e){Hb(),jb.value=e,!(e===null||e<=0)&&(Lo=setTimeout(()=>{Lo=null,Bd()},e*800))}function Hb(){Lo!==null&&(clearTimeout(Lo),Lo=null)}Jk(Ub);const ln=Pt(Ml);async function DO(e,t){const{data:n,response:a}=await Le.POST("/auth/login",{body:{login:e,password:t}});return!a.ok||!n?!1:(Ub(typeof n.data.expires_in=="number"?n.data.expires_in:null),!0)}async function Wb(){const{data:e,response:t}=await Le.GET("/auth/me");return Ml.value=t.ok&&e?e.data:null,Pf(Ml.value?.id??null),Ml.value}function Kb(e){if(!e)return"";const t=[e.first_name,e.last_name].map(n=>n.trim()).filter(Boolean);return t.length>0?t.slice(0,2).map(n=>n.charAt(0).toUpperCase()).join(""):e.login.slice(0,2).toUpperCase()}function pc(e){Ml.value=e,Pf(e.id)}function Gb(){Hb(),Ml.value=null,jb.value=null,Pf(null)}function OO(e){Gb();const t=e.currentRoute.value;t.name!=="login"&&e.push({name:"login",query:{redirect:t.fullPath}}).catch(()=>{})}async function MO(e){try{await Le.POST("/auth/logout")}catch{}finally{Gb(),nw([]),lw([])}e&&await e.replace({name:"login"}).catch(()=>{})}const PO=["src"],RO={key:1,class:"flex size-[34px] shrink-0 items-center justify-center rounded-full bg-accent text-[13px] font-bold text-on-accent","aria-hidden":"true","data-user-initials":""},IO={class:"flex flex-col leading-tight max-[1099px]:hidden","data-user-identity":""},qO={class:"font-semibold"},NO={key:0,class:"text-[12px] text-muted","data-user-role":""},LO={class:"flex items-center gap-3 px-2 py-2"},BO=["src"],FO={key:1,class:"flex size-10 shrink-0 items-center justify-center rounded-full bg-accent text-[14px] font-bold text-on-accent","aria-hidden":"true"},VO={class:"flex min-w-0 flex-col leading-tight"},zO={class:"truncate font-bold"},jO={class:"truncate text-[13px] text-muted"},UO=le({__name:"UserMenu",setup(e){const t=Ur(),n=b(()=>{const u=ln.value;if(!u)return"";const c=`${u.first_name} ${u.last_name}`.trim();return c===""?u.login:c}),a=b(()=>Kb(ln.value)),r=b(()=>ln.value?.avatar?.thumb_url||ln.value?.avatar?.url||""),l=b(()=>ln.value?.role?.name??"");async function o(){await t.push({name:"account"}).catch(()=>{})}async function i(){await MO(t)}return(u,c)=>(v(),U(s(Pb),{modal:!1},{default:F(()=>[B(s(qb),{"data-user-menu":"",disabled:!s(ln),"aria-label":`${s(k)("backend::lang.nav.user_menu")}: ${n.value}`,class:"flex h-input items-center gap-2.5 rounded-inner px-2 text-left transition-colors duration-150 ease-out hover:bg-hover"},{default:F(()=>[r.value?(v(),_("img",{key:0,src:r.value,alt:"","data-user-avatar":"",class:"size-[34px] shrink-0 rounded-full object-cover"},null,8,PO)):(v(),_("span",RO,T(a.value),1)),S("span",IO,[S("span",qO,T(n.value),1),l.value?(v(),_("span",NO,T(l.value),1)):ne("",!0)]),B(s(lr),{size:16,class:"text-muted","aria-hidden":"true"})]),_:1},8,["disabled","aria-label"]),B(s(Ib),null,{default:F(()=>[B(s(Rb),{"data-user-menu-content":"",align:"end","side-offset":8,class:"z-50 flex w-[280px] flex-col rounded-[14px] border border-border bg-surface p-2 text-text shadow-menu"},{default:F(()=>[S("div",LO,[r.value?(v(),_("img",{key:0,src:r.value,alt:"","data-user-avatar":"",class:"size-10 shrink-0 rounded-full object-cover"},null,8,BO)):(v(),_("span",FO,T(a.value),1)),S("span",VO,[S("span",zO,T(n.value),1),S("span",jO,T(s(ln)?.email),1)])]),B(s(fd),{"data-action":"account",class:"flex h-10 cursor-pointer items-center gap-2.5 rounded-control px-3 font-medium outline-none transition-colors duration-150 ease-out data-[highlighted]:bg-hover",onSelect:o},{default:F(()=>[B(s(NC),{size:18,"aria-hidden":"true"}),S("span",null,T(s(k)("backend::lang.myaccount.menu_label")),1)]),_:1}),B(s(ZD),{class:"my-1 h-px bg-border"}),B(s(fd),{"data-action":"logout",class:"flex h-10 cursor-pointer items-center gap-2.5 rounded-control px-3 font-medium outline-none transition-colors duration-150 ease-out data-[highlighted]:bg-hover",onSelect:i},{default:F(()=>[B(s(tg),{size:18,"aria-hidden":"true"}),S("span",null,T(s(k)("backend::lang.auth.logout")),1)]),_:1})]),_:1})]),_:1})]),_:1}))}}),HO=4e3,Qo=R([]),md=new Map;let WO=1;const KO=Pt(Qo);function Ne(e,t="success"){const n=WO++;return Qo.value=[{id:n,text:e,tone:t},...Qo.value],md.set(n,setTimeout(()=>Yb(n),HO)),n}function Yb(e){const t=md.get(e);t!==void 0&&(clearTimeout(t),md.delete(e)),Qo.value=Qo.value.filter(n=>n.id!==e)}const GO=["role","data-tone"],YO={class:"font-medium"},JO=["aria-label","onClick"],ZO=le({__name:"Toast",setup(e){return(t,n)=>(v(),U(wx,{tag:"div",name:"toast",class:"pointer-events-none fixed inset-x-0 bottom-[88px] z-50 flex flex-col items-center gap-2 px-4"},{default:F(()=>[(v(!0),_(pe,null,qe(s(KO),a=>(v(),_("div",{key:a.id,role:a.tone==="danger"?"alert":"status","data-tone":a.tone,class:"pointer-events-auto flex max-w-[560px] items-center gap-3 rounded-[14px] bg-[#1d2740] py-3 pr-2.5 pl-3.5 text-white shadow-toast"},[S("span",{class:ye([a.tone==="danger"?"bg-[#f58a8a] text-[#1d2740]":"bg-accent text-on-accent","flex size-[26px] shrink-0 items-center justify-center rounded-full"]),"aria-hidden":"true"},[a.tone==="danger"?(v(),U(s(yt),{key:0,size:16})):(v(),U(s(rr),{key:1,size:16}))],2),S("span",YO,T(a.text),1),S("button",{type:"button","aria-label":s(k)("backend::lang.form.close"),class:"flex size-8 items-center justify-center rounded-pager text-[#c3cbda] transition-colors duration-150 ease-out hover:bg-side-hover hover:text-white",onClick:r=>s(Yb)(a.id)},[B(s(yn),{size:16,"aria-hidden":"true"})],8,JO)],8,GO))),128))]),_:1}))}}),XO={class:"flex min-h-screen bg-bg text-text"},QO={class:"flex min-w-0 flex-1 flex-col"},eM={class:"flex h-header shrink-0 items-center justify-between gap-4 border-b border-border bg-surface pr-6 pl-8"},tM={class:"flex shrink-0 items-center gap-1"},nM=["title","aria-label"],aM={class:"min-w-0 flex-1 px-8 py-7"},rM=le({__name:"AppShell",setup(e){const t=An(),{collapsed:n,watchViewport:a}=mg(),r=a();At(r);const l=`${window.location.origin}/`,o=b(()=>ui(String(t.params.vendor??""),String(t.params.plugin??"")));return(i,u)=>(v(),_("div",XO,[B(uS),o.value&&!s(n)?(v(),U(vS,{key:0,entry:o.value},null,8,["entry"])):ne("",!0),S("div",QO,[S("header",eM,[B(gS),S("div",tM,[S("a",{"data-view-site":"",href:l,target:"_blank",rel:"noopener noreferrer",title:s(k)("backend::lang.nav.view_site"),"aria-label":s(k)("backend::lang.nav.view_site"),class:"flex size-input items-center justify-center rounded-inner text-muted transition-colors duration-150 ease-out hover:bg-hover hover:text-text"},[B(s(Zy),{class:"size-[18px]","aria-hidden":"true"})],8,nM),B(UO)])]),S("main",aM,[xe(i.$slots,"default")])]),B(ZO)]))}}),lM=le({__name:"App",setup(e){const t=An(),n=b(()=>t.meta.shell===!0);return bn(()=>{document.title=iw(t)}),(a,r)=>n.value?(v(),U(rM,{key:0},{default:F(()=>[B(s(Wc),null,{default:F(({Component:l,route:o})=>[(v(),U(jt(l),{key:o.path}))]),_:1})]),_:1})):(v(),U(s(Wc),{key:1}))}}),oM="data-summer-controller",Jb="*",vc=new Map,hd=new Map;let Zb="";function Xb(){return`${Zs.base}/assets/`}function Qb(e){if(!e.startsWith(Xb())||e.includes("\\"))return!1;for(const n of e){const a=n.codePointAt(0)??0;if(a<=32||a===127)return!1}return!(e.split(/[?#]/,1)[0]??"").split("/").some(n=>{const a=n.toLowerCase().replaceAll("%2e",".");return a==="."||a===".."})}function e1(e){if(!Qb(e))return Promise.reject(new Error(`plugin script outside ${Xb()}: ${e}`));const t=vc.get(e);if(t)return t;const n=new Promise((a,r)=>{const l=document.createElement("script");l.type="module",l.addEventListener("load",()=>a(),{once:!0}),l.addEventListener("error",()=>{vc.delete(e),l.remove(),r(new Error(`plugin script failed to load: ${e}`))},{once:!0}),l.src=e,document.head.appendChild(l)});return vc.set(e,n),n}function t1(e,t){for(const n of t){const a=`${e} -${n}`;if(!Qb(n)||hd.has(a))continue;const r=document.createElement("link");r.rel="stylesheet",r.setAttribute(oM,e),r.disabled=!n1(e),r.href=n,hd.set(a,{owner:e,link:r}),document.head.appendChild(r)}}function iM(e){Zb=e;for(const{owner:t,link:n}of hd.values())n.disabled=!n1(t)}function n1(e){return e===Jb||e===Zb}function sM(e){t1(Jb,e)}async function Rf(e,t){t1(e,t?.styles??[]);const n=t?.scripts??[],a=await Promise.allSettled(n.map(r=>e1(r)));return n.filter((r,l)=>a[l]?.status==="rejected")}const a1=new Map;async function r1(){let e=[];try{const{data:t,response:n}=await Le.GET("/field-types");e=n.ok&&t?t.data:[]}catch{return[]}for(const t of e){sM(t.styles??[]);const n=t.scripts??[];a1.set(t.element,Promise.allSettled(n.map(a=>e1(a))).then(a=>n.filter((r,l)=>a[l]?.status==="rejected")))}return e}function uM(e){return a1.get(e)??Promise.resolve([])}const cM={class:"flex min-h-screen items-center justify-center px-4",style:{background:"radial-gradient(ellipse at 50% 35%, #2b3a5c 0%, #1d2740 60%)"}},dM={class:"flex w-full max-w-[400px] flex-col gap-6"},fM={class:"flex items-center justify-center gap-3"},pM={class:"flex size-[34px] items-center justify-center rounded-full bg-accent-soft"},vM={class:"text-[22px] font-bold tracking-[-0.02em]"},mM={class:"flex flex-col gap-1.5"},hM={class:"font-semibold"},yM={class:"flex flex-col gap-1.5"},gM={class:"font-semibold"},bM=["aria-invalid"],_M={key:0,role:"alert",class:"flex items-center gap-2.5 rounded-control bg-[#fdf0f0] px-3.5 py-3 text-[#c62828]"},xM=["disabled"],kM=le({__name:"LoginView",setup(e){const t=An(),n=Ur(),a=R(""),r=R(""),l=R(!1),o=R(!1);async function i(){if(!o.value){o.value=!0,l.value=!1;try{if(!await DO(a.value.trim(),r.value)||!await Wb()){l.value=!0;return}r.value="",await Promise.all([Fy(),Vy().catch(()=>[]),r1()]),await n.replace(H1(t.query.redirect)??"/")}finally{o.value=!1}}}return(u,c)=>(v(),_("main",cM,[S("div",dM,[S("div",fM,[S("span",pM,[B(s(eu),{size:20,class:"text-accent","aria-hidden":"true"})]),c[2]||(c[2]=S("span",{class:"text-[18px] font-bold text-white"},[_e("Summer"),S("span",{class:"text-accent"},"CMS")],-1))]),S("form",{class:"flex flex-col gap-[18px] rounded-card bg-white p-8 text-[#141b2d] shadow-login",novalidate:"",onSubmit:vt(i,["prevent"])},[S("h1",vM,T(s(k)("backend::lang.auth.title")),1),S("label",mM,[S("span",hM,T(s(k)("backend::lang.auth.login")),1),Qn(S("input",{"onUpdate:modelValue":c[0]||(c[0]=d=>a.value=d),name:"login",type:"text",autocomplete:"username",required:"",class:"h-input rounded-control border border-[#d2d8e2] bg-white px-3.5"},null,512),[[ql,a.value]])]),S("label",yM,[S("span",gM,T(s(k)("backend::lang.auth.password")),1),Qn(S("input",{"onUpdate:modelValue":c[1]||(c[1]=d=>r.value=d),name:"password",type:"password",autocomplete:"current-password",required:"","aria-invalid":l.value?"true":void 0,class:ye([l.value?"border-[#c62828]":"border-[#d2d8e2]","h-input rounded-control border bg-white px-3.5"])},null,10,bM),[[ql,r.value]])]),l.value?(v(),_("div",_M,[B(s(yt),{size:18,"aria-hidden":"true"}),S("span",null,T(s(k)("backend::lang.auth.invalid")),1)])):ne("",!0),S("button",{type:"submit",disabled:o.value,class:"h-input rounded-control bg-[#22304d] font-semibold text-white disabled:opacity-60"},T(s(k)("backend::lang.auth.submit")),9,xM)],32)])]))}}),ym=/^\d+$/;function l1(e,t,n){const a=Ys(t),r=qn(t);if(!a||!r)return"/";const o=((e??"").trim().split(/[?#]/,1)[0]??"").split("/").filter(d=>d!==""),i=[a.vendor,a.plugin,a.controller];if(!i.every((d,f)=>o[f]?.toLowerCase()===d.toLowerCase()))return r;const c=o.slice(i.length);if(c.length===0)return r;if(c.length===1&&c[0]==="create")return`${r}/create`;if(c.length===2&&c[0]==="update"){const d=c[1]===":id"?String(n??""):c[1]??"";return ym.test(d)?`${r}/${d}`:r}if(c.length===2&&c[0]==="preview"){const d=c[1]===":id"?String(n??""):c[1]??"";return ym.test(d)?`${r}/${d}/preview`:r}return r}const gm=/^[0-9]+$/;function wM(e,t){const n=e.replace(/[\s ]/g,"");if(n==="")return{value:null,error:null};let a=n,r=!1;a.startsWith("-")&&(r=!0,a=a.slice(1));const l=a.match(/[.,]/g)??[];if(l.length>1)return{value:null,error:"invalid"};const[o,i=""]=a.split(/[.,]/);if(!gm.test(o??"")||l.length===1&&!gm.test(i))return{value:null,error:"invalid"};if(i.length>t)return{value:null,error:"too_precise"};const u=i===""?o:`${o}.${i}`;return{value:`${r?"-":""}${u}`,error:null}}function $M(e){const[t,n]=e.split(".");if(n===void 0||n.length<=2)return e;let a=n.length;for(;a>2&&n.charAt(a-1)==="0";)a-=1;return`${t}.${n.slice(0,a)}`}function CM(e){return new Intl.NumberFormat(e).formatToParts(1.1).find(n=>n.type==="decimal")?.value??"."}function o1(e,t,n,a=4){const r={minimumFractionDigits:2,maximumFractionDigits:Math.max(2,a)},l=t===""?{style:"decimal",...r}:{style:"currency",currency:t,currencyDisplay:"code",...r};let o;try{o=new Intl.NumberFormat(n,l)}catch{return`${new Intl.NumberFormat(n,{style:"decimal",...r}).format(e)} ${t}`.trim()}return o.format(e)}const SM={key:0,"data-switch":"true",class:"inline-flex h-6 items-center gap-1 rounded-pill bg-ok-bg px-2.5 text-[12px] font-semibold text-ok-text"},EM={key:1,"data-switch":"false",class:"inline-flex h-6 items-center rounded-pill border border-border-strong px-2.5 text-[12px] font-semibold text-muted"},AM={key:1,class:"text-muted","data-empty":""},TM={key:2,class:"text-[13px] text-muted tabular-nums"},DM={key:3,"data-money":"",class:"tabular-nums whitespace-nowrap"},sl=le({__name:"CellValue",props:{column:{},value:{},row:{}},setup(e){const t=e;function n(p){return p==null||p===""}function a(p){return n(p)?"":Array.isArray(p)?p.map(a).filter(h=>h!=="").join(", "):typeof p=="boolean"?k(p?"backend::lang.list.column_switch_true":"backend::lang.list.column_switch_false"):typeof p=="object"?"":String(p)}function r(p){return String(p).padStart(2,"0")}function l(p){if(typeof p!="string"&&typeof p!="number")return"";const h=new Date(p);return Number.isNaN(h.getTime())?String(p):`${h.getFullYear()}-${r(h.getMonth()+1)}-${r(h.getDate())} ${r(h.getHours())}:${r(h.getMinutes())}`}function o(p){if(typeof p!="string")return"";const h=/^\d{4}-\d{2}-\d{2}/.exec(p.trim());return h?h[0]:p.trim()}function i(p){if(typeof p!="string")return"";const h=/(\d{2}):(\d{2})/.exec(p);return h?`${h[1]}:${h[2]}`:p.trim()}function u(p){return typeof p=="string"?p!==""&&p!=="0"&&p.toLowerCase()!=="false":!!p}function c(){if(t.column.currencyFrom){const p=t.row?.[t.column.currencyFrom];return typeof p=="string"?p.trim():""}return t.column.currency??""}function d(p){return typeof p!="string"||p.trim()===""?"":o1(p.trim(),c(),ar.value,4)}const f=b(()=>t.column.type==="switch"?"switch":t.column.type==="money"?"money":t.column.type==="datetime"?"datetime":t.column.type==="date"?"date":t.column.type==="time"?"time":"text"),m=b(()=>{switch(f.value){case"datetime":return l(t.value);case"date":return o(t.value);case"time":return i(t.value);case"money":return d(t.value);default:return a(t.value)}});return(p,h)=>f.value==="switch"&&!n(e.value)?(v(),_(pe,{key:0},[u(e.value)?(v(),_("span",SM,[B(s(Hy),{size:14,"aria-hidden":"true"}),_e(T(s(k)("backend::lang.list.column_switch_true")),1)])):(v(),_("span",EM,T(s(k)("backend::lang.list.column_switch_false")),1))],64)):m.value===""?(v(),_("span",AM,"—")):f.value==="datetime"||f.value==="date"||f.value==="time"?(v(),_("span",TM,T(m.value),1)):f.value==="money"?(v(),_("span",DM,T(m.value),1)):(v(),_(pe,{key:4},[_e(T(m.value),1)],64))}}),OM={key:0,class:"flex shrink-0 gap-2"},MM=["data-row-state"],PM=le({__name:"RowStateBadges",props:{states:{},labels:{}},setup(e){const t=e,n={deleted:"border border-border-strong text-muted",negative:"bg-danger-soft text-danger",disabled:"bg-subtle text-muted"},a=["deleted","negative","disabled"],r=b(()=>a.filter(l=>t.states.includes(l)));return(l,o)=>r.value.length>0?(v(),_("span",OM,[(v(!0),_(pe,null,qe(r.value,i=>(v(),_("span",{key:i,"data-row-state":i,class:ye([n[i],"inline-flex h-6 shrink-0 items-center rounded-pill px-2.5 text-[12px] font-semibold whitespace-nowrap"])},T(e.labels[i]??i),11,MM))),128))])):ne("",!0)}}),RM={class:"overflow-x-auto"},IM={class:"sticky top-0 z-10"},qM={class:"h-row-head border-y border-border bg-subtle"},NM={key:0,scope:"col","data-select":"",class:"w-[52px] pl-5"},LM=["aria-checked","aria-label","disabled"],BM=["aria-sort"],FM=["data-sort","onClick"],VM={key:1,class:"w-[56px] pr-5"},zM=["aria-busy"],jM={key:0,class:"pl-5"},UM={key:1,class:"pr-5"},HM={key:1},WM=["colspan"],KM={class:"text-muted"},GM=["aria-selected","data-row-states","onClick"],YM={key:0,"data-select":"",class:"pl-5"},JM=["aria-checked","aria-label","onClick"],ZM={key:0,class:"flex items-center gap-3"},XM={"data-avatar":"",class:"flex size-[30px] shrink-0 items-center justify-center rounded-full bg-subtle text-[12px] font-bold text-text","aria-hidden":"true"},QM=["onClick"],e5={key:1,class:"flex items-center gap-2"},t5={key:1,"data-trailing":"",class:"w-[56px] pr-5"},i1=le({__name:"DataTable",props:{columns:{},rows:{},loading:{type:Boolean,default:!1},rowLink:{type:Function,default:void 0},selectable:{type:Boolean,default:!1},selected:{default:()=>[]},sortable:{type:Boolean,default:!1},sort:{default:null},variant:{default:"list"},openable:{type:Boolean,default:!1},trailing:{type:Boolean,default:!1},rowStates:{default:()=>({})},stateLabels:{default:()=>({})}},emits:["update:selected","sort","open"],setup(e,{emit:t}){const n=e,a=t,r=Ur();function l(Z){const j=Z.id;return typeof j=="number"||typeof j=="string"?j:null}function o(Z,j){const H=l(Z);return H===null?`row-${j}`:String(H)}function i(Z){return n.rowLink?n.rowLink(Z):null}function u(Z,j){if(Z.target?.closest("a, button, input, label, select"))return;if(n.openable){const ce=Z.currentTarget?.querySelector("[data-row-open]")??null;a("open",j,ce);return}const re=i(j);re&&r.push(re)}const c=b(()=>n.rows.map(l).filter(Z=>Z!==null)),d=b(()=>new Set(n.selected.map(String))),f=b(()=>{const Z=c.value,j=Z.filter(H=>d.value.has(String(H))).length;return j===0?"false":j===Z.length?"true":"mixed"});function m(Z){const j=l(Z);return j!==null&&d.value.has(String(j))}function p(){a("update:selected",f.value==="true"?[]:[...c.value])}function h(Z){const j=l(Z);j!==null&&(d.value.has(String(j))?a("update:selected",n.selected.filter(H=>String(H)!==String(j))):a("update:selected",[...n.selected,j]))}function x(Z){if(n.sort?.column===Z.key)return n.sort.dir==="desc"?"descending":"ascending"}function $(Z){return n.sortable&&Z.sortable}const g=b(()=>n.variant==="relation"),C=b(()=>g.value?"h-[56px]":"h-row"),E=b(()=>g.value?3:8);function D(Z){return(typeof Z=="string"||typeof Z=="number"?String(Z):"").split(/[\s@._-]+/).filter(Boolean).slice(0,2).map(H=>H.charAt(0).toUpperCase()).join("")}const O=["deleted","negative","disabled"];function L(Z){const j=l(Z),H=j===null?void 0:n.rowStates[String(j)];return Array.isArray(H)?O.filter(re=>H.includes(re)):[]}function N(Z,j,H=[]){const re=H.includes("deleted")||H.includes("disabled"),ce=z(Z);return j===0?[re?"font-semibold text-muted":"font-semibold",ce].filter(Boolean).join(" "):[re||g.value||Z.relation?"text-muted":"",ce].filter(Boolean).join(" ")}function z(Z){return Z.type==="money"?"text-right":""}function w(Z){return["min-w-0 truncate",Z.includes("deleted")?"line-through":"no-underline",Z.includes("negative")?"text-danger":Z.includes("deleted")||Z.includes("disabled")?"text-muted":"text-text"]}const P=b(()=>n.columns.filter(Z=>!Z.invisible)),Y=b(()=>Math.max(P.value.length+(n.selectable?1:0)+(n.trailing?1:0),1));function I(Z,j){a("open",j,Z.currentTarget)}const X=["w-3/5","w-2/5","w-1/2","w-3/4","w-1/3","w-2/3","w-1/2","w-2/5"];return(Z,j)=>(v(),_("div",RM,[S("table",{class:ye([g.value?"min-w-[480px]":"min-w-[640px]","w-full border-collapse text-left"])},[S("thead",IM,[S("tr",qM,[e.selectable?(v(),_("th",NM,[S("button",{type:"button",role:"checkbox","aria-checked":f.value,"aria-label":s(k)("backend::lang.list.select_all"),disabled:e.loading||c.value.length===0,class:ye([f.value==="false"?"border-border-strong bg-surface":"border-primary bg-primary text-on-primary","flex size-[18px] items-center justify-center rounded-checkbox border disabled:opacity-60"]),onClick:p},[f.value==="mixed"?(v(),U(s(ng),{key:0,size:14,"aria-hidden":"true"})):f.value==="true"?(v(),U(s(rr),{key:1,size:14,"aria-hidden":"true"})):ne("",!0)],10,LM)])):ne("",!0),(v(!0),_(pe,null,qe(P.value,H=>(v(),_("th",{key:H.key,scope:"col","aria-sort":$(H)?x(H)??"none":void 0,class:ye([[x(H)?"text-text":"text-muted",z(H)],"px-3.5 text-[12px] font-semibold first:pl-5 last:pr-5"])},[$(H)?(v(),_("button",{key:0,type:"button","data-sort":H.key,class:"inline-flex items-center gap-1 font-semibold",onClick:re=>a("sort",H.key)},[_e(T(H.label)+" ",1),x(H)==="ascending"?(v(),U(s(Wy),{key:0,size:14,"aria-hidden":"true"})):x(H)==="descending"?(v(),U(s(jy),{key:1,size:14,"aria-hidden":"true"})):ne("",!0)],8,FM)):(v(),_(pe,{key:1},[_e(T(H.label),1)],64))],10,BM))),128)),e.trailing?(v(),_("td",VM)):ne("",!0)])]),S("tbody",{"aria-busy":e.loading?"true":void 0},[e.loading?(v(!0),_(pe,{key:0},qe(E.value,H=>(v(),_("tr",{key:`skeleton-${H}`,"data-skeleton":"",class:ye([C.value,"border-b border-border"])},[e.selectable?(v(),_("td",jM,[...j[0]||(j[0]=[S("span",{class:"block size-[18px] rounded-checkbox bg-skel"},null,-1)])])):ne("",!0),(v(!0),_(pe,null,qe(P.value,re=>(v(),_("td",{key:re.key,class:"px-3.5 first:pl-5 last:pr-5"},[S("span",{class:ye([X[(H-1)%X.length],"block h-3 rounded-[6px] bg-skel"])},null,2)]))),128)),e.trailing?(v(),_("td",UM)):ne("",!0)],2))),128)):e.rows.length===0?(v(),_("tr",HM,[S("td",{colspan:Y.value,class:"px-5 py-20 text-center"},[xe(Z.$slots,"empty",{},()=>[S("span",KM,T(s(k)("backend::lang.list.no_records")),1)])],8,WM)])):(v(!0),_(pe,{key:2},qe(e.rows,(H,re)=>(v(),_("tr",{key:o(H,re),class:ye([[C.value,m(H)?"bg-sel":i(H)||e.openable?"hover:bg-hover":"",i(H)||e.openable?"cursor-pointer":""],"border-b border-border transition-colors duration-150 ease-out"]),"aria-selected":e.selectable?m(H)?"true":"false":void 0,"data-row-states":L(H).length>0?L(H).join(" "):void 0,onClick:ce=>u(ce,H)},[e.selectable?(v(),_("td",YM,[S("button",{type:"button",role:"checkbox","aria-checked":m(H)?"true":"false","aria-label":s(k)("backend::lang.list.select_row"),class:ye([m(H)?"border-primary bg-primary text-on-primary":"border-border-strong bg-surface","flex size-[18px] items-center justify-center rounded-checkbox border"]),onClick:ce=>h(H)},[m(H)?(v(),U(s(rr),{key:0,size:14,"aria-hidden":"true"})):ne("",!0)],10,JM)])):ne("",!0),(v(!0),_(pe,null,qe(P.value,(ce,$e)=>(v(),_("td",{key:ce.key,class:ye([N(ce,$e,L(H)),"px-3.5 first:pl-5 last:pr-5"])},[g.value&&$e===0?(v(),_("span",ZM,[S("span",XM,T(D(H[ce.key])),1),e.openable?(v(),_("button",{key:0,type:"button","data-row-open":"",class:"min-w-0 truncate text-left font-semibold text-text",onClick:me=>I(me,H)},[B(sl,{column:ce,value:H[ce.key],row:H},null,8,["column","value","row"])],8,QM)):(v(),U(sl,{key:1,column:ce,value:H[ce.key],row:H},null,8,["column","value","row"]))])):$e===0&&L(H).length>0?(v(),_("span",e5,[i(H)?(v(),U(s(ea),{key:0,to:i(H),class:ye(w(L(H)))},{default:F(()=>[B(sl,{column:ce,value:H[ce.key],row:H},null,8,["column","value","row"])]),_:2},1032,["to","class"])):(v(),_("span",{key:1,class:ye(w(L(H)))},[B(sl,{column:ce,value:H[ce.key],row:H},null,8,["column","value","row"])],2)),B(PM,{states:L(H),labels:e.stateLabels},null,8,["states","labels"])])):$e===0&&i(H)?(v(),U(s(ea),{key:2,to:i(H),class:"text-text no-underline"},{default:F(()=>[B(sl,{column:ce,value:H[ce.key],row:H},null,8,["column","value","row"])]),_:2},1032,["to"])):(v(),U(sl,{key:3,column:ce,value:H[ce.key],row:H},null,8,["column","value","row"]))],2))),128)),e.trailing?(v(),_("td",t5,[xe(Z.$slots,"trailing",{row:H})])):ne("",!0)],10,GM))),128))],8,zM)],2)]))}}),n5=["aria-label"],a5={key:0,class:"flex flex-col gap-1 text-[13px]"},r5={class:"font-semibold text-muted"},l5=["data-filter","value","onChange"],o5=["value"],i5={key:1,class:"flex flex-col gap-1 text-[13px]"},s5={class:"mb-1 font-semibold text-muted"},u5={class:"flex items-center gap-2"},c5=["data-filter","aria-label","value","onChange"],d5=["data-filter","aria-label","value","onChange"],f5={key:2,class:"flex flex-col gap-1 text-[13px]"},p5={class:"font-semibold text-muted"},v5=["data-filter","value","onChange"],m5=["value"],po="",Fi="h-button rounded-control border border-border-strong bg-surface px-3 text-text",h5=le({__name:"FilterBar",props:{filters:{},values:{},source:{}},emits:["update"],setup(e,{emit:t}){const n=e,a=t;function r(f){if(f.options&&f.options.length>0)return f.options.map(p=>({value:JSON.stringify(p.value),label:p.label}));const m=[];return f.trueValue!==void 0&&m.push({value:JSON.stringify(f.trueValue),label:k("backend::lang.list.column_switch_true")}),f.falseValue!==void 0&&m.push({value:JSON.stringify(f.falseValue),label:k("backend::lang.list.column_switch_false")}),m}const l=R({});async function o(f){const{data:m}=await Le.GET("/{vendor}/{plugin}/{controller}/filters/{scope}/options",{params:{path:{...n.source,scope:f.name}}});l.value={...l.value,[f.name]:m?.data??[]}}wt(()=>{for(const f of n.filters)f.type==="scope"&&o(f)});const i=Mn({});function u(){for(const f of n.filters){if(f.type!=="daterange")continue;const[m="",p=""]=(n.values[f.name]??"").split(".."),h=i[f.name];(!h||n.values[f.name]!==void 0||h.from!==""&&h.to!=="")&&(i[f.name]={from:m,to:p})}}je(()=>n.values,u,{immediate:!0,deep:!0});function c(f,m,p){const h={...i[f.name]??{from:"",to:""},[m]:p};i[f.name]=h,h.from!==""&&h.to!==""?a("update",f.name,`${h.from}..${h.to}`):(h.from===""&&h.to===""||n.values[f.name]!==void 0)&&a("update",f.name,null)}function d(f,m){a("update",f.name,m===po?null:m)}return(f,m)=>(v(),_("div",{role:"group","aria-label":s(k)("backend::lang.list.filters"),"data-filter-bar":"",class:"flex flex-wrap items-end gap-4 border-t border-border px-5 py-3.5"},[(v(!0),_(pe,null,qe(e.filters,p=>(v(),_(pe,{key:p.name},[p.type==="switch"?(v(),_("label",a5,[S("span",r5,T(p.label||p.name),1),S("select",{"data-filter":p.name,value:e.values[p.name]??po,class:ye(Fi),onChange:h=>d(p,h.target.value)},[S("option",{value:po},T(s(k)("backend::lang.list.filter_all")),1),(v(!0),_(pe,null,qe(r(p),h=>(v(),_("option",{key:h.value,value:h.value},T(h.label),9,o5))),128))],40,l5)])):p.type==="daterange"?(v(),_("fieldset",i5,[S("legend",s5,T(p.label||p.name),1),S("div",u5,[S("input",{type:"date","data-filter":`${p.name}-from`,"aria-label":s(k)("backend::lang.list.filter_from"),value:i[p.name]?.from??"",class:ye(Fi),onChange:h=>c(p,"from",h.target.value)},null,40,c5),m[0]||(m[0]=S("span",{"aria-hidden":"true"},"–",-1)),S("input",{type:"date","data-filter":`${p.name}-to`,"aria-label":s(k)("backend::lang.list.filter_to"),value:i[p.name]?.to??"",class:ye(Fi),onChange:h=>c(p,"to",h.target.value)},null,40,d5)])])):p.type==="scope"?(v(),_("label",f5,[S("span",p5,T(p.label||p.name),1),(v(),_("select",{key:`${p.name}-${l.value[p.name]?.length??-1}`,"data-filter":p.name,value:e.values[p.name]??po,class:ye(Fi),onChange:h=>d(p,h.target.value)},[S("option",{value:po},T(s(k)("backend::lang.list.filter_all")),1),(v(!0),_(pe,null,qe(l.value[p.name]??[],h=>(v(),_("option",{key:h.value,value:h.value},T(h.label),9,m5))),128))],40,v5))])):ne("",!0)],64))),128))],8,n5))}}),y5=["type","disabled"],Ze=le({__name:"Button",props:{variant:{default:"outline"},size:{default:"md"},type:{default:"button"},disabled:{type:Boolean,default:!1},icon:{default:void 0},to:{default:void 0}},setup(e){const t=e,n={primary:"bg-primary text-on-primary hover:opacity-90",outline:"border border-border-strong bg-surface text-text hover:bg-hover",ghost:"text-muted hover:bg-hover hover:text-text",danger:"border border-danger bg-surface text-danger hover:bg-danger-soft"},a=b(()=>["inline-flex shrink-0 items-center justify-center gap-2 rounded-control px-4 font-semibold whitespace-nowrap no-underline transition-colors duration-150 ease-out disabled:cursor-not-allowed disabled:opacity-60",t.size==="sm"?"h-[38px]":"h-button",n[t.variant]]);return(r,l)=>e.to!==void 0?(v(),U(s(ea),{key:0,to:e.to,class:ye(a.value)},{default:F(()=>[e.icon?(v(),U(jt(e.icon),{key:0,size:16,"aria-hidden":"true"})):ne("",!0),xe(r.$slots,"default")]),_:3},8,["to","class"])):(v(),_("button",{key:1,type:e.type,disabled:e.disabled,class:ye(a.value)},[e.icon?(v(),U(jt(e.icon),{key:0,size:16,"aria-hidden":"true"})):ne("",!0),xe(r.$slots,"default")],10,y5))}}),g5=le({__name:"BulkActionsMenu",props:{actions:{},disabled:{type:Boolean}},emits:["select"],setup(e,{expose:t,emit:n}){const a=n,r=R(null);function l(){const o=r.value?.$el;o instanceof HTMLElement&&o.focus()}return t({focus:l}),(o,i)=>(v(),U(s(Pb),{modal:!1},{default:F(()=>[B(s(qb),{"as-child":"",disabled:e.disabled},{default:F(()=>[B(Ze,{ref_key:"trigger",ref:r,variant:"outline",size:"md","data-action":"bulk-actions",disabled:e.disabled},{default:F(()=>[_e(T(s(k)("backend::lang.list.bulk_actions"))+" ",1),B(s(lr),{size:16,class:"text-muted","aria-hidden":"true"})]),_:1},8,["disabled"])]),_:1},8,["disabled"]),B(s(Ib),null,{default:F(()=>[B(s(Rb),{"data-bulk-menu":"",align:"end","side-offset":8,class:"z-50 flex w-[240px] max-w-[320px] flex-col rounded-[14px] border border-border bg-surface p-2 text-text shadow-menu"},{default:F(()=>[(v(!0),_(pe,null,qe(e.actions,u=>(v(),U(s(fd),{key:u.name,"data-bulk-action":u.name,class:"flex min-h-10 cursor-pointer items-center rounded-control px-3 py-2 outline-none transition-colors duration-150 ease-out data-[highlighted]:bg-hover",onSelect:c=>a("select",u.name)},{default:F(()=>[_e(T(u.label),1)]),_:2},1032,["data-bulk-action","onSelect"]))),128))]),_:1})]),_:1})]),_:1}))}}),b5={class:"flex flex-wrap items-center justify-between gap-3 px-5 py-4"},_5={key:0,class:"relative block w-[320px] max-w-full"},x5={class:"sr-only"},k5=["value","placeholder"],w5={key:1},$5={class:"flex flex-wrap items-center justify-end gap-2.5"},C5={key:0,"data-selected-pill":"",class:"inline-flex h-8 items-center gap-1.5 rounded-pill bg-sel px-3 text-[13px] font-semibold"},S5=le({__name:"ListToolbar",props:{showSearch:{type:Boolean},search:{},searchPrompt:{},buttons:{},selectedCount:{},selectedLabel:{},deleteLabel:{},actions:{default:()=>[]},busyAction:{default:null},bulkActions:{default:()=>[]},bulkBusy:{type:Boolean,default:!1}},emits:["update:search","delete","action","bulk"],setup(e,{expose:t,emit:n}){const a=e,r=n,l=b(()=>new Map(a.actions.map(u=>[u.name,u.label]))),o=R(null);function i(){o.value?.focus()}return t({focusBulk:i}),(u,c)=>(v(),_("div",b5,[e.showSearch?(v(),_("label",_5,[S("span",x5,T(s(k)("backend::lang.list.search")),1),B(s(Qs),{size:18,class:"pointer-events-none absolute top-1/2 left-3.5 -translate-y-1/2 text-muted","aria-hidden":"true"}),S("input",{type:"search","data-list-search":"",value:e.search,placeholder:e.searchPrompt,class:"h-button w-full rounded-control border border-transparent bg-subtle pr-3.5 pl-10",onInput:c[0]||(c[0]=d=>r("update:search",d.target.value))},null,40,k5)])):(v(),_("span",w5)),S("div",$5,[e.selectedCount>0?(v(),_("span",C5,[B(s(rr),{size:14,"aria-hidden":"true"}),_e(T(e.selectedLabel),1)])):ne("",!0),e.bulkActions.length>0?(v(),U(g5,{key:1,ref_key:"bulkMenu",ref:o,actions:e.bulkActions,disabled:e.selectedCount===0||e.bulkBusy,onSelect:c[1]||(c[1]=d=>r("bulk",d))},null,8,["actions","disabled"])):ne("",!0),(v(!0),_(pe,null,qe(e.buttons,d=>(v(),_(pe,{key:d},[d==="delete"?(v(),U(Ze,{key:0,"data-action":"delete",variant:e.selectedCount>0?"danger":"outline",icon:s(mr),disabled:e.selectedCount===0,onClick:c[2]||(c[2]=f=>r("delete"))},{default:F(()=>[_e(T(e.deleteLabel),1)]),_:1},8,["variant","icon","disabled"])):l.value.has(d)?(v(),U(Ze,{key:1,variant:"outline",size:"md","data-action":d,disabled:e.busyAction===d,"aria-busy":e.busyAction===d?"true":void 0,onClick:f=>r("action",d)},{default:F(()=>[_e(T(l.value.get(d)),1)]),_:2},1032,["data-action","disabled","aria-busy","onClick"])):ne("",!0)],64))),128))])]))}}),E5={class:"flex flex-wrap items-center gap-x-6 gap-y-3 border-t border-border px-5 py-3.5 text-[13px] text-muted"},A5={"data-range":""},T5={key:0,class:"flex items-center gap-2"},D5=["value"],O5=["value"],M5=["aria-label"],P5=["disabled"],R5={key:0,"aria-hidden":"true",class:"px-1"},I5=["data-page","aria-current","onClick"],q5=["disabled"],mc="inline-flex h-pager min-w-pager items-center justify-center gap-1 rounded-pager border border-border px-2.5 text-[13px] text-text disabled:cursor-not-allowed disabled:opacity-60 hover:bg-hover",s1=le({__name:"Pagination",props:{meta:{},loading:{type:Boolean},perPageOptions:{},perPage:{}},emits:["page","perPage"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>n.meta?.total??0),l=b(()=>n.meta?.page??1),o=b(()=>Math.max(n.meta?.last_page??1,1)),i=b(()=>{const d=n.meta;if(!d||d.total===0)return qr("backend::lang.list.results",0);const f=(d.page-1)*d.per_page+1,m=Math.min(d.page*d.per_page,d.total);return k("backend::lang.list.pagination_range",{from:f,to:m,total:d.total})}),u=b(()=>{const d=o.value,f=l.value,m=new Set([1,d,f-1,f,f+1].filter(x=>x>=1&&x<=d));f<=3&&[2,3].forEach(x=>x<=d&&m.add(x)),f>=d-2&&[d-1,d-2].forEach(x=>x>=1&&m.add(x));const p=[...m].sort((x,$)=>x-$),h=[];return p.forEach((x,$)=>{const g=p[$-1];g!==void 0&&x-g>1&&h.push(null),h.push(x)}),h});function c(d){const f=Number(d.target.value);Number.isFinite(f)&&f>0&&a("perPage",f)}return(d,f)=>(v(),_("footer",E5,[S("span",A5,T(e.loading?s(k)("backend::lang.list.loading"):i.value),1),e.perPageOptions.length>1?(v(),_("label",T5,[S("span",null,T(s(k)("backend::lang.list.records_per_page")),1),S("select",{"data-per-page":"",value:String(e.perPage),class:"h-pager rounded-pager border border-border-strong bg-surface px-2 text-text",onChange:c},[(v(!0),_(pe,null,qe(e.perPageOptions,m=>(v(),_("option",{key:m,value:String(m)},T(m),9,O5))),128))],40,D5)])):ne("",!0),!e.loading&&r.value>0?(v(),_("nav",{key:1,"aria-label":s(k)("backend::lang.list.pagination"),class:"ml-auto flex items-center gap-1.5"},[S("button",{type:"button","data-page":"prev",class:ye(mc),disabled:l.value<=1,onClick:f[0]||(f[0]=m=>a("page",l.value-1))},[B(s(Xs),{size:14,"aria-hidden":"true"}),_e(T(s(k)("backend::lang.list.prev_page")),1)],8,P5),(v(!0),_(pe,null,qe(u.value,(m,p)=>(v(),_(pe,{key:m??`gap-${p}`},[m===null?(v(),_("span",R5,"…")):(v(),_("button",{key:1,type:"button","data-page":m,"aria-current":m===l.value?"page":void 0,class:ye([mc,m===l.value?"border-transparent bg-sel font-bold":""]),onClick:h=>m!==l.value&&a("page",m)},T(m),11,I5))],64))),128)),S("button",{type:"button","data-page":"next",class:ye(mc),disabled:l.value>=o.value,onClick:f[1]||(f[1]=m=>a("page",l.value+1))},[_e(T(s(k)("backend::lang.list.next_page")),1),B(s(di),{size:14,"aria-hidden":"true"})],8,q5)],8,M5)):ne("",!0)]))}}),N5={role:"alert","data-extension-failure":"",class:"flex min-h-input items-center rounded-control border-[1.5px] border-dashed border-border-strong bg-subtle px-3.5 py-2.5 text-[13px] text-muted"},L5={class:"flex min-w-0 items-start gap-2.5"},B5={class:"min-w-0 [overflow-wrap:anywhere]"},yu=le({__name:"ExtensionFailure",props:{text:{}},setup(e){return(t,n)=>(v(),_("div",N5,[S("span",L5,[B(s(yt),{size:16,class:"mt-0.5 shrink-0 text-danger","aria-hidden":"true"}),S("span",B5,T(e.text),1)])]))}}),F5=new Set(["div","span","p","strong","em","b","i","u","s","small","mark","code","pre","br","hr","ul","ol","li","dl","dt","dd","h2","h3","h4","h5","h6","table","thead","tbody","tfoot","tr","th","td","caption","section","header","footer","figure","figcaption","blockquote","q","abbr","time","data","meter","progress","sup","sub","a","img"]),V5=new Set(["script","style","template","iframe","object","embed","noscript","textarea","title","xmp","svg","math","form","input","button","select","link","meta","base"]),z5=32,j5=2e3,U5=new Set(["class","title","lang","dir","role"]),H5={a:new Set(["href"]),img:new Set(["src","alt","width","height"]),td:new Set(["colspan","rowspan","scope"]),th:new Set(["colspan","rowspan","scope"]),time:new Set(["datetime"]),data:new Set(["value"]),meter:new Set(["value","min","max","low","high","optimum"]),progress:new Set(["value","max"])},W5=/^(aria|data)-[a-z0-9_-]+$/;function K5(e,t){if(e==="")return!1;for(const n of e){const a=n.codePointAt(0)??0;if(a<=32||a===127)return!1}return e.startsWith("#")?t:e.startsWith("/")?e.length===1||e[1]!=="/"&&e[1]!=="\\":!1}function G5(e,t,n){return U5.has(t)||H5[e]?.has(t)===!0||W5.test(t)?e==="a"&&t==="href"||e==="img"&&t==="src"?K5(n,e==="a"):!0:!1}function Y5(e,t){const n={};for(const[a,r]of Object.entries(t??{})){const l=a.toLowerCase();typeof r=="string"&&G5(e,l,r)&&(n[l]=r)}return n}function yd(e,t,n){const a=[];for(const r of e??[]){if(n.left<=0)break;if(r.tag===void 0||r.tag===""){typeof r.text=="string"&&r.text!==""&&(n.left-=1,a.push(r.text));continue}const l=r.tag.toLowerCase();if(V5.has(l))continue;if(!F5.has(l)){a.push(...yd(r.children,t,n));continue}if(t+1>z5)continue;n.left-=1;const o=yd(r.children,t+1,n);a.push(Sn(l,Y5(l,r.attrs),o.length>0?o:void 0))}return a}function J5(e){return yd(e,0,{left:j5})}const Z5={key:1,"data-partial-loading":"","aria-busy":"true"},X5=["data-partial","aria-busy"],If=le({__name:"PartialHost",props:{source:{},name:{},recordId:{default:null},variant:{},reloadKey:{default:0},hint:{type:Boolean,default:!1}},setup(e){const t=e,n=R(null),a=R(!1),r=R(!1);let l=0;const o=u=>J5(u.nodes);o.props=["nodes"];async function i(){const u=++l;r.value=!0;let c=null;try{c=(await Le.GET("/{vendor}/{plugin}/{controller}/partials/{name}",{params:{path:{...t.source,name:t.name},query:t.recordId!=null?{id:t.recordId}:void 0}})).data?.data.nodes??null}catch{c=null}u===l&&(r.value=!1,a.value=c===null,n.value=c)}return je(()=>t.reloadKey,()=>{i()}),i(),(u,c)=>a.value?(v(),U(yu,{key:0,"data-partial-failed":"",text:s(k)("backend::lang.extension.partial_failed")},null,8,["text"])):n.value===null?(v(),_("div",Z5,[S("div",{"data-partial-skeleton":"",class:ye([e.hint?"h-[68px] w-full rounded-inner":e.variant==="header"?"h-[80px] w-full rounded-card":"h-[44px] w-full rounded-control","bg-skel"]),"aria-hidden":"true"},null,2)])):n.value.length>0?(v(),_("div",{key:2,class:"summer-partial","data-partial":e.variant,"aria-busy":r.value?"true":void 0},[B(o,{nodes:n.value},null,8,["nodes"])],8,X5)):ne("",!0)}}),Q5={class:"flex gap-2.5"},eP=["disabled","aria-busy"],gr=le({__name:"ConfirmDialog",props:{open:{type:Boolean},message:{},title:{default:void 0},confirmLabel:{default:void 0},cancelLabel:{default:void 0},danger:{type:Boolean,default:!1},busy:{type:Boolean,default:!1}},emits:["update:open","confirm","cancel"],setup(e,{emit:t}){const n=e,a=t;function r(o){!o&&n.busy||(a("update:open",o),o||a("cancel"))}function l(){n.busy||(a("confirm"),a("update:open",!1))}return(o,i)=>(v(),U(s(HA),{open:e.open,"onUpdate:open":r},{default:F(()=>[B(s(jA),null,{default:F(()=>[B(s(VA),{class:"pointer-events-auto fixed inset-0 z-[80] bg-overlay"}),B(s(IA),{"data-confirm-dialog":"",class:"pointer-events-auto fixed top-1/2 left-1/2 z-[90] flex w-[calc(100%-32px)] max-w-[440px] -translate-x-1/2 -translate-y-1/2 flex-col gap-4 rounded-modal bg-surface p-6 text-text shadow-pop"},{default:F(()=>[B(s(KA),{class:"text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[_e(T(e.title??s(k)("backend::lang.form.confirm")),1)]),_:1}),B(s(BA),{class:"text-muted [overflow-wrap:anywhere]"},{default:F(()=>[_e(T(e.message),1)]),_:1}),S("div",Q5,[B(s(NA),{"data-action":"cancel",disabled:e.busy,class:"inline-flex h-button flex-1 items-center justify-center rounded-control border border-border-strong bg-surface font-semibold hover:bg-hover disabled:cursor-not-allowed disabled:opacity-60"},{default:F(()=>[_e(T(e.cancelLabel??s(k)("backend::lang.form.cancel")),1)]),_:1},8,["disabled"]),S("button",{type:"button","data-action":"confirm",disabled:e.busy,"aria-busy":e.busy?"true":void 0,class:ye([e.danger?"bg-danger text-white":"bg-primary text-on-primary","inline-flex h-button flex-1 items-center justify-center gap-2 rounded-control font-semibold hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-60"]),onClick:vt(l,["prevent"])},[e.busy?(v(),U(s(Sl),{key:0,size:16,class:"animate-spin","aria-hidden":"true"})):ne("",!0),_e(" "+T(e.confirmLabel??s(k)("backend::lang.form.confirm")),1)],10,eP)])]),_:1})]),_:1})]),_:1},8,["open"]))}});function br(){const e=R(null),t=R(!1);let n=null,a=null;function r(u){const c=n;n=null,a=null,e.value=null,c?.(u)}function l(u,c){return r(!1),e.value=u,a=c??null,new Promise(d=>{n=d})}async function o(){if(t.value)return;const u=a;if(u){t.value=!0;try{await u()}finally{t.value=!1}}r(!0)}function i(){t.value||r(!1)}return{request:e,busy:t,ask:l,confirm:o,cancel:i}}const tP={class:"flex flex-col gap-5"},nP={class:"flex flex-wrap items-end justify-between gap-4"},aP={class:"flex flex-col"},rP={class:"text-[26px] font-bold tracking-[-0.02em]"},lP={key:0,"data-record-count":"",class:"text-muted"},oP={key:0,class:"flex items-center gap-2.5"},iP={class:"overflow-hidden rounded-card border border-border bg-surface shadow-card"},sP={key:2,"data-list-failed":"",class:"flex flex-wrap items-center justify-between gap-3 border-t border-border px-5 py-4"},uP={role:"alert",class:"text-danger"},cP={key:0,"data-empty-search":"",class:"flex flex-col items-center gap-3"},dP={class:"flex size-14 items-center justify-center rounded-full bg-subtle text-muted"},fP={class:"text-[17px] font-bold"},pP={class:"max-w-[420px] text-muted"},vP={key:1,"data-empty-list":"",class:"text-muted"},mP=300,hP=le({__name:"ListView",setup(e){const t=An(),n=Ur(),a={vendor:String(t.params.vendor??""),plugin:String(t.params.plugin??""),controller:String(t.params.controller??"")},r=ii(a),l=qn(r)??"/",o=R(null),i=R([]),u=R(null),c=R(!0),d=R(!1),f=R(!1),m=b(()=>d.value||f.value),p=R([]),h=R(!1),x=R(0),$=br(),g=b(()=>Bb(t.query)),C=R(g.value.search??""),E=b(()=>o.value?.messages),D=b(()=>o.value?.title?o.value.title:ui(a.vendor,a.plugin)?.sideMenu.find(Ce=>Ce.controller===r)?.label??r),O=b(()=>u.value?Je(E.value?.recordCount,u.value.total):""),L=b(()=>o.value?.toolbarButtons??[]),N=b(()=>L.value.filter(se=>se==="create")),z=b(()=>{const se=o.value?.reorder;if(!se)return null;const Ce=se.partition?.column,he=Ce?o.value?.filters.find(Fe=>Fe.column===Ce||Fe.name===Ce):void 0,Re=he?g.value.filter?.[he.name]:void 0;return{path:`${l}/reorder`,query:Re!==void 0&&Re!==""?{partition:String(Re)}:{}}}),w=b(()=>o.value?.toolbarActions??[]),P=b(()=>L.value.filter(se=>se==="delete"||w.value.some(Ce=>Ce.name===se))),Y=R(null),I=b(()=>u.value?.row_states??{}),X=b(()=>({deleted:Je(E.value?.rowStateDeleted),negative:Je(E.value?.rowStateNegative),disabled:Je(E.value?.rowStateDisabled)})),Z=b(()=>(o.value?.bulkActions??[]).filter(se=>se.name!=="delete")),j=R(!1),H=R(null),re=b(()=>{const se=o.value?.perPageOptions??[];return se.length>0?se:[o.value?.recordsPerPage||20]}),ce=b(()=>g.value.per_page??u.value?.per_page??o.value?.recordsPerPage??20),$e=b(()=>g.value.sort?{column:g.value.sort,dir:g.value.dir==="desc"?"desc":"asc"}:null);function me(se){const Ce=o.value?.recordUrl,he=se.id;return!Ce||typeof he!="number"&&typeof he!="string"?null:l1(Ce,r,he)}function be(se){Bi(r,se),n.replace({path:t.path,query:Es(se)})}const fe=_l({}),Te=b(()=>_l(g.value)!==fe);let W=0,ke=null;function ae(){be({})}async function Q(se=!1){const Ce=++W;c.value=!0,f.value=!1;let he=null;try{he=await V()}catch{he=null}if(Ce!==W)return;if(!he?.data&&se){Bi(r,{}),n.replace({path:t.path,query:{}});return}if(!he?.data&&he?.response?.status===404&&await ue(Ce))return;if(i.value=he?.data?.data??[],u.value=he?.data?.meta??null,f.value=!he?.data,c.value=!1,he?.response?.status===422){Bi(r,{});return}const Re=u.value?.last_page??0;Re>=1&&(u.value?.page??0)>Re&&be({...g.value,page:Re})}async function ue(se){try{const{data:Ce}=await Le.GET("/{vendor}/{plugin}/{controller}/singleton",{params:{path:a}});return se!==W?!0:Ce?(await n.replace(`${l}/${Ce.data.id}`),!0):!1}catch{return!1}}function V(){return Le.GET("/{vendor}/{plugin}/{controller}",{params:{path:a,query:g.value}})}async function K(){const se=await Le.GET("/{vendor}/{plugin}/{controller}/schema/list",{params:{path:a}});o.value=se.data?.data??null,d.value=!o.value,o.value&&Rf(r,o.value.assets)}K(),je(()=>_l(g.value),se=>{if(se===fe){const he=TO(r),Re=_l(he);if(Re!==fe){ke=Re,n.replace({path:t.path,query:Es(he)});return}}const Ce=ke!==null&&ke===se;ke=null,Bi(r,g.value),p.value=[],C.value=g.value.search??"",Q(Ce)},{immediate:!0});let te=null;function y(se){C.value=se,te!==null&&clearTimeout(te),te=setTimeout(()=>{te=null;const Ce=se.trim();be({...g.value,search:Ce===""?void 0:Ce,page:void 0})},mP)}At(()=>{te!==null&&clearTimeout(te)});function A(){C.value="",be({...g.value,search:void 0,page:void 0})}function M(se){const Ce=$e.value;Ce?.column!==se?be({...g.value,sort:se,dir:"asc",page:void 0}):Ce.dir==="asc"?be({...g.value,sort:se,dir:"desc",page:void 0}):be({...g.value,sort:void 0,dir:void 0,page:void 0})}function oe(se){be({...g.value,page:se})}function J(se){be({...g.value,per_page:se,page:void 0})}function de(se,Ce){const he={...g.value.filter??{}};Ce===null?delete he[se]:he[se]=Ce,be({...g.value,filter:he,page:void 0})}async function we(){const se=p.value.map(Number).filter(he=>Number.isInteger(he)&&he>0);if(!(se.length===0||h.value||!await $.ask({message:Je(E.value?.deleteConfirm,se.length),confirmLabel:k("backend::lang.form.delete"),danger:!0}))){h.value=!0;try{const he=await Le.POST("/{vendor}/{plugin}/{controller}/bulk-delete",{params:{path:a},body:{ids:se}});if(he.data){Ne(Je(E.value?.deleted,he.data.data.deleted)),p.value=[],await Q(),x.value+=1;return}Ne(he.error?.error.message||k("backend::lang.list.delete_failed"),"danger")}catch{Ne(k("backend::lang.list.delete_failed"),"danger")}finally{h.value=!1}}}async function Ae(se){const Ce=Z.value.find(Ue=>Ue.name===se),he=p.value.map(Number).filter(Ue=>Number.isInteger(Ue)&&Ue>0);if(!Ce||he.length===0||j.value)return;const Re=Ce.label??se;let Fe=0,Ge=null,ge="";const Se=await $.ask({message:Ce.confirm||qr("backend::lang.list.bulk_confirm",he.length,{action:Re}),confirmLabel:Re,danger:!1},async()=>{j.value=!0;try{const Ue=await Le.POST("/{vendor}/{plugin}/{controller}/bulk/{action}",{params:{path:{...a,action:se}},body:{ids:he}});Fe=Ue.response.status,Ge=Ue.data?.data??null,ge=Ue.error?.error.message??""}catch{Fe=0}finally{j.value=!1}});if(await new Promise(Ue=>setTimeout(Ue,0)),H.value?.focusBulk(),!Se)return;const Be=Ge;if(Be){Ne(Be.message||qr("backend::lang.list.bulk_done",Be.affected)),p.value=[],await Q(),x.value+=1;return}if(Fe===409){Ne(k("backend::lang.list.bulk_stale"),"danger"),p.value=[],await Q();return}if(Fe===403){Ne(ge||k("backend::lang.list.action_forbidden"),"danger");return}Ne(ge||k("backend::lang.extension.action_failed"),"danger")}async function De(se){if(Y.value===null){Y.value=se;try{const Ce=await Le.POST("/{vendor}/{plugin}/{controller}/toolbar/{action}",{params:{path:{...a,action:se}},body:{}});if(Ce.data){Ce.data.data.message&&Ne(Ce.data.data.message),await Q(),x.value+=1;return}Ne(Ce.error?.error.message||k("backend::lang.extension.action_failed"),"danger")}catch{Ne(k("backend::lang.extension.action_failed"),"danger")}finally{Y.value=null}}}return(se,Ce)=>(v(),_("section",tP,[S("header",nP,[S("div",aP,[S("h1",rP,T(D.value),1),O.value?(v(),_("p",lP,T(O.value),1)):ne("",!0)]),N.value.length>0||z.value?(v(),_("div",oP,[z.value?(v(),U(Ze,{key:0,"data-action":"reorder",variant:"outline",icon:s(Uy),to:z.value},{default:F(()=>[_e(T(s(k)("backend::lang.messages.list.reorder")),1)]),_:1},8,["icon","to"])):ne("",!0),(v(!0),_(pe,null,qe(N.value,he=>(v(),U(Ze,{key:he,"data-action":"create",variant:"primary",icon:s(pi),to:`${s(l)}/create`},{default:F(()=>[_e(T(s(Je)(E.value?.create)),1)]),_:1},8,["icon","to"]))),128))])):ne("",!0)]),o.value?.headerPartial?(v(),U(If,{key:0,variant:"header",source:a,name:o.value.headerPartial,"reload-key":x.value},null,8,["name","reload-key"])):ne("",!0),S("div",iP,[o.value?(v(),U(S5,{key:0,ref_key:"toolbar",ref:H,"show-search":o.value.showSearch,search:C.value,"search-prompt":s(Je)(E.value?.searchPrompt),buttons:P.value,"selected-count":p.value.length,"selected-label":s(Je)(E.value?.selected,p.value.length),"delete-label":s(Je)(E.value?.deleteSelected,p.value.length),actions:w.value,"busy-action":Y.value,"bulk-actions":Z.value,"bulk-busy":j.value,"onUpdate:search":y,onDelete:we,onAction:De,onBulk:Ae},null,8,["show-search","search","search-prompt","buttons","selected-count","selected-label","delete-label","actions","busy-action","bulk-actions","bulk-busy"])):ne("",!0),o.value&&o.value.filters.length>0?(v(),U(h5,{key:1,filters:o.value.filters,values:g.value.filter??{},source:a,onUpdate:de},null,8,["filters","values"])):ne("",!0),m.value&&!c.value?(v(),_("div",sP,[S("p",uP,T(s(k)("backend::lang.list.load_failed")),1),f.value&&Te.value?(v(),U(Ze,{key:0,"data-action":"reset-list",onClick:ae},{default:F(()=>[_e(T(s(k)("backend::lang.list.reset_list")),1)]),_:1})):ne("",!0)])):(v(),U(i1,{key:3,columns:o.value?.columns??[],rows:i.value,loading:c.value||!o.value,"row-link":me,selectable:o.value?.showCheckboxes??!1,selected:p.value,sortable:o.value?.showSorting??!1,sort:$e.value,"row-states":I.value,"state-labels":X.value,"onUpdate:selected":Ce[0]||(Ce[0]=he=>p.value=he),onSort:M},{empty:F(()=>[g.value.search?(v(),_("div",cP,[S("span",dP,[B(s(og),{size:24,"aria-hidden":"true"})]),S("p",fP,T(s(Je)(E.value?.emptySearch,void 0,{term:g.value.search})),1),S("p",pP,T(s(Je)(E.value?.emptySearchHint,void 0,{term:g.value.search})),1),B(Ze,{"data-action":"clear-search",onClick:A},{default:F(()=>[_e(T(s(k)("backend::lang.list.clear_search")),1)]),_:1})])):(v(),_("p",vP,T(s(Je)(E.value?.empty)||o.value?.noRecordsMessage||s(k)("backend::lang.list.no_records")),1))]),_:1},8,["columns","rows","loading","selectable","selected","sortable","sort","row-states","state-labels"])),B(s1,{meta:u.value,loading:c.value||!o.value,"per-page-options":re.value,"per-page":ce.value,onPage:oe,onPerPage:J},null,8,["meta","loading","per-page-options","per-page"])]),B(gr,{open:s($).request.value!==null,message:s($).request.value?.message??"","confirm-label":s($).request.value?.confirmLabel,danger:s($).request.value?.danger,busy:s($).busy.value,onConfirm:s($).confirm,onCancel:s($).cancel},null,8,["open","message","confirm-label","danger","busy","onConfirm","onCancel"])]))}}),cr="X-Session-Key",u1="X-Child-Session-Key",yP=32;function ei(){const e=new Uint8Array(yP);globalThis.crypto.getRandomValues(e);let t="";for(const n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}const gP="X-Upload-Id";async function Xa(e){try{const t=await e();return{data:t.data?t.data.data:null,status:t.response.status,error:t.error?.error??null}}catch{return{data:null,status:0,error:null}}}async function As(e){try{const t=await e();return t.response.ok&&t.data instanceof Blob?t.data:null}catch{return null}}function ya(e){return encodeURIComponent(String(e))}function c1(e){return`${Zs.api}/${ya(e.vendor)}/${ya(e.plugin)}/${ya(e.controller)}`}function bP(e){try{return e===""?null:JSON.parse(e)}catch{return null}}function qf(e){if(!e)return"";for(const t of Object.values(e.details??{})){const n=Array.isArray(t)?t.find(a=>typeof a=="string"&&a!==""):t;if(typeof n=="string"&&n!=="")return n}return e.message??""}function _P(e,t){const n=t;if((e===200||e===201)&&n?.data)return{ok:!0,item:n.data};const a=qf(n?.error);return e===413?{ok:!1,reason:"too_large",status:e,message:a}:e===422?{ok:!1,reason:"invalid",status:e,message:a}:e===0?{ok:!1,reason:"network",status:e,message:a}:{ok:!1,reason:"failed",status:e,message:a}}function d1(e,t,n,a,r){let l=null,o=!1;const i=()=>new Promise(c=>{const d=new XMLHttpRequest;l=d,d.open("POST",e),d.setRequestHeader("X-Requested-With",Ly),d.setRequestHeader("Accept","application/json");for(const[m,p]of Object.entries(n))d.setRequestHeader(m,p);r&&d.setRequestHeader(gP,r),d.upload.onprogress=m=>{m.lengthComputable&&a?.(m.loaded,m.total)},d.onload=()=>c({status:d.status,body:bP(d.responseText)}),d.onerror=()=>c("network"),d.ontimeout=()=>c("network"),d.onabort=()=>c("aborted");const f=new FormData;f.append("file_data",t,t.name),d.send(f)});return{promise:(async()=>{let c=await i();return typeof c=="object"&&c.status===401&&!o&&(await Bd()&&(c=o?"aborted":await i()),typeof c=="object"&&c.status===401&&Yk()),c==="aborted"||o?{ok:!1,reason:"aborted",status:0,message:""}:c==="network"?{ok:!1,reason:"network",status:0,message:""}:_P(c.status,c.body)})(),abort(){o=!0,l?.abort()}}}function f1(e,t,n,a){const r={...e,id:t,field:n},l={[cr]:a},o=`${c1(e)}/${ya(t)}/files/${ya(n)}`;return{list:()=>Xa(()=>Le.GET("/{vendor}/{plugin}/{controller}/{id}/files/{field}",{params:{path:r,header:l}})),upload:(i,u,c)=>d1(o,i,{...l},u,c),update:(i,u)=>Xa(()=>Le.PUT("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}",{params:{path:{...r,file:i},header:l},body:u})),remove:i=>Xa(()=>Le.DELETE("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}",{params:{path:{...r,file:i},header:l}})),reorder:i=>Xa(()=>Le.POST("/{vendor}/{plugin}/{controller}/{id}/files/{field}/reorder",{params:{path:r,header:l},body:{ids:i}})),download:i=>As(()=>Le.GET("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}/download",{params:{path:{...r,file:i},header:l},parseAs:"blob"})),thumb:i=>As(()=>Le.GET("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}/thumb",{params:{path:{...r,file:i},header:l},parseAs:"blob"}))}}function xP(e,t,n,a,r,l,o){const i={...e,id:t,name:n,child:a,field:r},u={[cr]:l,[u1]:o},c=`${c1(e)}/${ya(t)}/relations/${ya(n)}/records/${ya(a)}/files/${ya(r)}`;return{list:()=>Xa(()=>Le.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}",{params:{path:i,header:u}})),upload:(d,f,m)=>d1(c,d,{...u},f,m),update:(d,f)=>Xa(()=>Le.PUT("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}",{params:{path:{...i,file:d},header:u},body:f})),remove:d=>Xa(()=>Le.DELETE("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}",{params:{path:{...i,file:d},header:u}})),reorder:d=>Xa(()=>Le.POST("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/reorder",{params:{path:i,header:u},body:{ids:d}})),download:d=>As(()=>Le.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}/download",{params:{path:{...i,file:d},header:u},parseAs:"blob"})),thumb:d=>As(()=>Le.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}/thumb",{params:{path:{...i,file:d},header:u},parseAs:"blob"}))}}const kP=new Set(["readonly","placeholder","maxlength","minlength","min","max","step","autocomplete","spellcheck","pattern"]);function Kr(e){const t={};for(const[n,a]of Object.entries(e.attributes??{})){const r=n.toLowerCase();!kP.has(r)||a===null||a===!1||(t[r]=a)}return t}function Nt(e){return["w-full rounded-control border bg-surface px-3.5 text-text transition-colors duration-150 ease-out",e?"border-danger":"border-border-strong"].join(" ")}function Nf(e){return typeof e=="string"?e!==""&&e!=="0"&&e.toLowerCase()!=="false":!!e}function p1(e,t){return typeof e=="number"?t?1:0:t}function v1(e,t){const n={};if(t===null||typeof t!="object"||Array.isArray(t))return n;const a=t;for(const r of e.permissionOptions??[]){const l=Number(a[r.code]);(l===1||e.mode==="radio"&&l===-1)&&(n[r.code]=l)}return n}const wP=new Set(["mltext","mltextarea","mlmarkdown"]);function $P(e){return e!==void 0&&wP.has(e)}function dr(e){return e?$P(e.type)||!!e.element&&e.translatable===!0:!1}const ti="summer:ml-locale";function CP(e){typeof window>"u"||e===""||window.dispatchEvent(new CustomEvent(ti,{detail:e}))}function Zn(e){const t={};if(e===null||typeof e!="object"||Array.isArray(e))return t;for(const[n,a]of Object.entries(e))typeof a=="string"&&(t[n]=a);return t}const SP={class:"flex min-w-0 flex-col"},EP=["for"],AP={key:0,class:"text-danger","aria-hidden":"true"},TP=["id"],DP=["id","name","checked","aria-invalid","aria-describedby"],OP=le({__name:"CheckboxField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>Nf(n.modelValue));function l(o){a("update:modelValue",p1(n.modelValue,o.target.checked))}return(o,i)=>(v(),_("div",{class:ye([e.invalid?"border-danger":"border-border","flex items-center justify-between gap-4 rounded-inner border px-4 py-3.5"]),"data-toggle-card":""},[S("div",SP,[S("label",{for:e.controlId,class:"font-semibold"},[_e(T(e.field.label||e.field.name),1),e.field.required?(v(),_("span",AP," *")):ne("",!0)],8,EP),e.field.comment?(v(),_("p",{key:0,id:`${e.controlId}-comment`,class:"text-[13px] text-muted"},T(e.field.comment),9,TP)):ne("",!0)]),S("input",{id:e.controlId,type:"checkbox",name:e.field.name,checked:r.value,"aria-invalid":e.invalid?"true":void 0,"aria-describedby":e.describedBy||void 0,class:"size-5 shrink-0 rounded-[6px] accent-primary",onChange:l},null,40,DP)],2))}});function MP(e){return e==="date"||e==="time"?e:"datetime"}function rn(e,t=2){return String(e).padStart(t,"0")}const PP=/(Z|[+-]\d{2}:?\d{2})$/i;function RP(e,t,n=!1){if(typeof t!="string"||t.trim()==="")return null;const a=t.trim();try{if(e==="date")return Ig(a.slice(0,10));if(e==="time"){const l=/(\d{2}:\d{2}(:\d{2})?)/.exec(a.includes("T")?a.slice(a.indexOf("T")):a);return l?sE(l[1]):null}const r=PP.test(a)?a.replace(" ","T"):`${a.replace(" ","T")}Z`;return n?ta(Dv(r,"UTC")):Dv(r,Ln())}catch{return null}}function hc(e){return`${rn(e.year,4)}-${rn(e.month)}-${rn(e.day)}`}function yc(e){return`${rn(e.hour)}:${rn(e.minute)}:${rn(e.second)}`}function bm(e,t,n=!1){if(!t)return null;if(e==="time")return"hour"in t?yc(t):null;if(!("year"in t))return null;if(e==="date")return hc(t);if(n){const l=t instanceof $a?ta(t):t,o="hour"in l?yc(l):"00:00:00";return`${hc(l)}T${o}Z`}const a=t instanceof $a?t:Qd(t instanceof mt?ta(t):t,Ln()),r=ou(a,"UTC");return`${hc(r)}T${yc(r)}Z`}const IP={date:"YYYY-MM-DD",datetime:"YYYY-MM-DD HH:mm",time:"HH:mm"},qP=/\[([^\]]*)\]|YYYY|YY|MMMM|MMM|MM|M|dddd|ddd|DD|D|HH|H|hh|h|mm|ss|A|a/g;function NP(e){return"year"in e?new mt(e.year,e.month,e.day):null}function gc(e,t,n,a){return new Tn(e,{...n,timeZone:"UTC"}).formatToParts(t.toDate("UTC")).find(l=>l.type===a)?.value??""}function LP(e,t,n,a){if(!e)return"";const r=n||IP[t],l=NP(e),o="hour"in e?e:null,i=/D/.test(r.replace(/\[[^\]]*\]/g,""));return r.replace(qP,(u,c)=>{if(c!==void 0)return c;switch(u){case"YYYY":return l?rn(l.year,4):"";case"YY":return l?rn(l.year%100):"";case"MMMM":case"MMM":{if(!l)return"";const d=u==="MMMM"?"long":"short";return i?gc(a,l,{day:"numeric",month:d},"month"):gc(a,l,{month:d},"month")}case"MM":return l?rn(l.month):"";case"M":return l?String(l.month):"";case"dddd":case"ddd":return l?gc(a,l,{weekday:u==="dddd"?"long":"short"},"weekday"):"";case"DD":return l?rn(l.day):"";case"D":return l?String(l.day):"";case"HH":return o?rn(o.hour):"";case"H":return o?String(o.hour):"";case"hh":return o?rn(o.hour%12||12):"";case"h":return o?String(o.hour%12||12):"";case"mm":return o?rn(o.minute):"";case"ss":return o?rn(o.second):"";case"A":return o?o.hour<12?"AM":"PM":"";case"a":return o?o.hour<12?"am":"pm":"";default:return u}})}const BP=new mt(2026,10,4);function FP(e,t){if(typeof t=="number"&&Number.isInteger(t)&&t>=0&&t<=6)return t;try{return(7-lu(BP,e))%7}catch{return 1}}function _m(e){if(e)try{return Ig(e.slice(0,10))}catch{return}}function VP(e,t=mi(Ln())){const n=_m(e.minDate),a=_m(e.maxDate);if(n||a)return{min:n,max:a};const r=e.yearRange??[];return r.length===1&&typeof r[0]=="number"?{min:new mt(t.year-r[0],1,1),max:new mt(t.year+r[0],12,31)}:r.length===2&&typeof r[0]=="number"&&typeof r[1]=="number"?{min:new mt(r[0],1,1),max:new mt(r[1],12,31)}:{}}function gd(e,t,n,a){if(!e||t==="time")return;if(t==="date")return e;const r=new ir(e.year,e.month,e.day,a?23:0,a?59:0,a?59:0);return n?r:ou(Qd(r,"UTC"),Ln())}function zP(e,t){const n=mi(Ln());return gd(n,e==="time"?"datetime":e,t,!1)??n}const jP=["id","aria-describedby"],UP={key:0},HP={key:1,class:"text-muted","data-empty":""},WP=["aria-label"],KP={class:"flex size-8 shrink-0 items-center justify-center text-muted","aria-hidden":"true"},GP=["data-mode"],YP=["aria-label"],JP={key:0,"data-datepicker-time":"",class:"mt-3 flex items-center gap-2 border-t border-border pt-3"},vo="flex size-8 shrink-0 items-center justify-center rounded-pager text-muted transition-colors duration-150 ease-out hover:bg-hover hover:text-text",ZP=le({__name:"DatepickerField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>MP(n.field.mode)),l=b(()=>r.value==="datetime"&&!!n.field.ignoreTimezone),o=b(()=>ar.value||"pl"),i=b(()=>{const fe=n.field.attributes?.readonly;return!!n.field.readOnly||fe!=null&&fe!==!1}),u=b(()=>RP(r.value,n.modelValue,l.value)),c=b(()=>r.value==="time"?null:u.value),d=b(()=>r.value==="time"?u.value:null),f=b(()=>VP(n.field)),m=b(()=>gd(f.value.min,r.value,l.value,!1)),p=b(()=>gd(f.value.max,r.value,l.value,!0)),h=zP(r.value,l.value),x=b(()=>FP(o.value,n.field.firstDay)),$=b(()=>n.field.twelveHour?12:24),g=b(()=>r.value==="date"?"day":"minute"),C=b(()=>LP(u.value,r.value,n.field.displayFormat,o.value)),E=b(()=>!n.field.required&&u.value!==null&&!i.value),D=b(()=>{const fe=c.value;return fe?!!m.value&&fe.compare(m.value)<0||!!p.value&&fe.compare(p.value)>0:!1}),O=new Set(["day","month","year","hour","minute","second"]),L=R(null),N=R(!1);function z(){const fe=L.value;if(!fe){N.value=!1;return}const Te=Array.from(fe.querySelectorAll("[data-reka-date-field-segment], [data-reka-time-field-segment]")).filter(ke=>O.has(ke.dataset.rekaDateFieldSegment??ke.dataset.rekaTimeFieldSegment??"")),W=Te.filter(ke=>!ke.hasAttribute("data-placeholder")).length;N.value=W>0&&W!!n.invalid||D.value||N.value),Y=b(()=>bm(r.value,u.value,l.value));function I(fe){const Te=bm(r.value,fe??null,l.value);w(),!(Te===Y.value&&(Te!==null||n.modelValue===null))&&a("update:modelValue",Te)}function X(fe){if(!fe||r.value!=="datetime"){I(fe);return}const Te=c.value,W=H.value,ke=!Te||Te.year!==fe.year||Te.month!==fe.month||Te.day!==fe.day,ae=!("hour"in fe)||fe.hour!==W.hour||fe.minute!==W.minute;ke&&ae&&(fe=re(fe,W)),j.value=fe,I(fe)}function Z(){a("update:modelValue",null),w()}const j=R(null);je(c,fe=>{j.value=fe},{immediate:!0});const H=b(()=>{const fe=j.value??c.value;return fe&&"hour"in fe?new Yn(fe.hour,fe.minute):new Yn(0,0)});function re(fe,Te){return"hour"in fe?fe.set({hour:Te.hour,minute:Te.minute,second:0,millisecond:0}):new ir(fe.year,fe.month,fe.day,Te.hour,Te.minute)}function ce(fe){if(!fe)return;const Te=fe instanceof Yn?fe:new Yn(fe.hour,fe.minute),W=j.value??c.value??h,ke=re(W,Te);j.value=ke,I(ke)}function $e(fe){return fe.charAt(0).toLocaleUpperCase(o.value)+fe.slice(1)}const me=b(()=>[Nt(P.value),"h-input flex min-w-0 items-center gap-1 pl-3.5 pr-1.5","focus-within:border-primary focus-within:shadow-[0_0_0_3px_var(--c-ring)]","has-[[data-invalid]]:border-danger"]);function be(fe){return fe==="literal"?"text-muted":fe==="timeZoneName"?"ml-2 min-w-0 truncate text-[13px] text-muted":"rounded-[4px] px-0.5 tabular-nums outline-none focus:bg-sel focus:text-text focus-visible:outline-none data-[placeholder]:text-placeholder focus:data-[placeholder]:text-text"}return(fe,Te)=>i.value?(v(),_("p",{key:0,id:e.controlId,"data-datepicker-readonly":"","aria-describedby":e.describedBy||void 0,class:"flex min-h-input items-center rounded-control border border-border bg-subtle px-3.5 tabular-nums"},[C.value!==""?(v(),_("span",UP,T(C.value),1)):(v(),_("span",HP,"—"))],8,jP)):r.value==="time"?(v(),_("div",{key:1,ref_key:"container",ref:L,"data-datepicker":"","data-mode":"time",class:ye(me.value),onKeyup:w,onFocusout:w},[B(s(pm),{id:e.controlId,"model-value":d.value,locale:o.value,"hour-cycle":$.value,granularity:"minute",name:e.field.name,required:e.field.required||void 0,"aria-invalid":P.value?"true":void 0,"aria-describedby":e.describedBy||void 0,class:"flex min-w-0 flex-1 items-center","onUpdate:modelValue":I},{default:F(({segments:W})=>[(v(!0),_(pe,null,qe(W,ke=>(v(),U(s(vm),{key:ke.part,part:ke.part,class:ye(be(ke.part))},{default:F(()=>[_e(T(ke.value),1)]),_:2},1032,["part","class"]))),128))]),_:1},8,["id","model-value","locale","hour-cycle","name","required","aria-invalid","aria-describedby"]),E.value?(v(),_("button",{key:0,type:"button","data-action":"clear","aria-label":s(k)("backend::lang.datepicker.clear"),class:ye(vo),onClick:Z},[B(s(yn),{size:16,"aria-hidden":"true"})],8,WP)):ne("",!0),S("span",KP,[B(s(Gc),{size:16})])],34)):(v(),U(s(rD),{key:2,id:e.controlId,"model-value":c.value,"default-placeholder":s(h),locale:o.value,granularity:g.value,"hour-cycle":$.value,"hide-time-zone":r.value!=="datetime"||l.value,"min-value":m.value,"max-value":p.value,"week-starts-on":x.value,name:e.field.name,required:e.field.required||void 0,"close-on-select":r.value==="date","prevent-deselect":"","onUpdate:modelValue":X},{default:F(()=>[S("div",{ref_key:"container",ref:L,"data-datepicker":"","data-mode":r.value,class:ye(me.value),onKeyup:w,onFocusout:w},[B(s(xD),{"aria-invalid":P.value?"true":void 0,"aria-describedby":e.describedBy||void 0,class:"flex min-w-0 flex-1 items-center overflow-hidden"},{default:F(({segments:W})=>[(v(!0),_(pe,null,qe(W,ke=>(v(),U(s(qD),{key:ke.part,part:ke.part,class:ye(be(ke.part))},{default:F(()=>[_e(T(ke.value),1)]),_:2},1032,["part","class"]))),128))]),_:1},8,["aria-invalid","aria-describedby"]),E.value?(v(),_("button",{key:0,type:"button","data-action":"clear","aria-label":s(k)("backend::lang.datepicker.clear"),class:ye(vo),onClick:Z},[B(s(yn),{size:16,"aria-hidden":"true"})],8,YP)):ne("",!0),B(s(UD),{"data-action":"open-calendar","aria-label":s(k)("backend::lang.datepicker.open_calendar"),class:ye(vo)},{default:F(()=>[B(s(Ky),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label"])],42,GP),B(s(bD),{"data-datepicker-calendar":"","side-offset":4,align:"end",class:"z-50 w-[284px] rounded-inner border border-border bg-surface p-4 text-text shadow-menu"},{default:F(()=>[B(s(oD),null,{default:F(({weekDays:W,grid:ke})=>[B(s(MD),{class:"flex h-9 items-center justify-between"},{default:F(()=>[B(s(FD),{"aria-label":s(k)("backend::lang.datepicker.prev_month"),class:ye(vo)},{default:F(()=>[B(s(Xs),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label"]),B(s(RD),{class:"font-semibold"},{default:F(({headingValue:ae})=>[_e(T($e(ae)),1)]),_:1}),B(s(LD),{"aria-label":s(k)("backend::lang.datepicker.next_month"),class:ye(vo)},{default:F(()=>[B(s(di),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label"])]),_:1}),(v(!0),_(pe,null,qe(ke,ae=>(v(),U(s(wD),{key:ae.value.toString(),class:"mt-2 w-full border-collapse select-none"},{default:F(()=>[B(s(ED),null,{default:F(()=>[B(s(fm),{class:"flex"},{default:F(()=>[(v(!0),_(pe,null,qe(W,Q=>(v(),U(s(DD),{key:Q,class:"flex h-9 w-9 items-center justify-center text-[13px] font-normal text-muted"},{default:F(()=>[_e(T(Q),1)]),_:2},1024))),128))]),_:2},1024)]),_:2},1024),B(s(CD),null,{default:F(()=>[(v(!0),_(pe,null,qe(ae.rows,(Q,ue)=>(v(),U(s(fm),{key:`week-${ue}`,class:"flex"},{default:F(()=>[(v(!0),_(pe,null,qe(Q,V=>(v(),U(s(sD),{key:V.toString(),date:V,class:"p-0"},{default:F(()=>[B(s(cD),{day:V,month:ae.value,class:"flex size-9 items-center justify-center rounded-pager tabular-nums text-text transition-colors duration-150 ease-out hover:bg-hover data-[outside-view]:text-placeholder data-[today]:font-semibold data-[today]:shadow-[inset_0_0_0_1px_var(--c-border-strong)] data-[selected]:bg-primary data-[selected]:font-semibold data-[selected]:text-on-primary data-[disabled]:cursor-not-allowed data-[disabled]:text-placeholder data-[disabled]:opacity-40 data-[disabled]:hover:bg-transparent data-[unavailable]:cursor-not-allowed data-[unavailable]:opacity-40"},null,8,["day","month"])]),_:2},1032,["date"]))),128))]),_:2},1024))),128))]),_:2},1024)]),_:2},1024))),128))]),_:1}),r.value==="datetime"?(v(),_("div",JP,[B(s(Gc),{size:16,class:"shrink-0 text-muted","aria-hidden":"true"}),B(s(pm),{"model-value":H.value,locale:o.value,"hour-cycle":$.value,granularity:"minute","hide-time-zone":"",class:"flex min-w-0 items-center","onUpdate:modelValue":ce},{default:F(({segments:W})=>[(v(!0),_(pe,null,qe(W,ke=>(v(),U(s(vm),{key:ke.part,part:ke.part,class:ye(be(ke.part))},{default:F(()=>[_e(T(ke.value),1)]),_:2},1032,["part","class"]))),128))]),_:1},8,["model-value","locale","hour-cycle"])])):ne("",!0)]),_:1})]),_:1},8,["id","model-value","default-placeholder","locale","granularity","hour-cycle","hide-time-zone","min-value","max-value","week-starts-on","name","required","close-on-select"]))}}),Lf=Symbol("summer.form.values"),Bf=Symbol("summer.form.patch"),Ff=Symbol("summer.form.locale"),Ts=Symbol("summer.form.enabledLocales"),m1=Symbol("summer.form.assets");function Vf(){const e=R(0);return{activeUploads:e,beginUpload(){e.value++;let t=!1;return()=>{t||(t=!0,e.value>0&&e.value--)}}}}const Xl=Symbol("summer.form.session"),h1=Symbol("summer.settings.secrets"),xm="summer-action",XP="summer-result",km="summer-change",wm="summer-upload",QP="summer-upload-result",y1=5e3,zf=Symbol("summer.form.feedback"),gu=Symbol("summer.form.fieldScope"),g1=Symbol("summer.form.dependentCache"),e6=["data-dependent"],t6={class:"relative"},n6=["id","name","value","disabled","required","aria-required","aria-invalid","aria-busy","aria-describedby"],a6={key:0,value:"state",class:"text-muted"},r6=["value"],l6=["id"],o6={key:1,class:"flex flex-wrap items-center gap-2"},i6=["id"],Vi="empty",zi="placeholder",s6=le({__name:"DropdownField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=" ".repeat(4),l=ut(gu,null),o=ut(zf,null),i=ut(g1,null)??new Map,u=b(()=>n.field.dependsOn??""),c=b(()=>u.value!==""),d=R("waiting"),f=R([]),m=b(()=>{const H=l?.values.value[u.value];return H==null||H===""||typeof H=="object"?null:String(H)}),p=b(()=>l?.fields.value.find(H=>H.name===u.value)),h=b(()=>p.value?.label||u.value),x=b(()=>(p.value?.options??[]).find(re=>g(re.value,m.value))?.label??m.value??""),$=b(()=>c.value?f.value:n.field.options??[]);function g(H,re){return H==null||re===null||re===void 0?H===re||H==null&&re==null:String(H)===String(re)}function C(){return n.modelValue!==null&&n.modelValue!==void 0&&n.modelValue!==""}function E(){C()&&(a("update:modelValue",null),o?.announce(k("backend::lang.form.dependent_cleared",{field:n.field.label||n.field.name})))}function D(H,re){if(!H.applies){f.value=[],d.value="unused",re&&E();return}f.value=H.options.map(ce=>({value:ce.value,label:r.repeat(Math.max(0,ce.depth))+ce.label})),d.value=f.value.length>0?"ready":"empty",re&&C()&&!f.value.some(ce=>g(ce.value,n.modelValue))&&E()}let O=0,L=!1;async function N(H){const re=++O,ce=m.value;if(ce===null){f.value=[],d.value="waiting",H&&E();return}const $e=l?.path(n.field.name)??n.field.name,me=`${$e}\0${ce}`,be=i.get(me);if(be){D(be,H);return}if(!n.source){L=H,d.value="failed";return}d.value="loading";try{const{data:fe}=await Le.GET("/{vendor}/{plugin}/{controller}/fields/{field}/dependent-options",{params:{path:{...n.source,field:$e},query:{[`values[${u.value}]`]:ce}}});if(re!==O)return;if(!fe){L=H,d.value="failed";return}i.set(me,fe.data),D(fe.data,H)}catch{re===O&&(L=H,d.value="failed")}}function z(){N(L)}je(m,(H,re)=>{c.value&&H!==re&&N(!0)}),wt(()=>{c.value&&N(!1)}),At(()=>{O++});const w=b(()=>{const H=$.value.findIndex(re=>g(re.value,n.modelValue));return H>=0?String(H):n.field.emptyOption!==void 0&&!C()?Vi:zi}),P=b(()=>{switch(d.value){case"waiting":return k("backend::lang.form.dependent_waiting",{field:h.value});case"loading":return k("backend::lang.form.loading_options");case"unused":return k("backend::lang.form.dependent_not_used");case"empty":return k("backend::lang.form.dependent_empty",{type:x.value});case"failed":return k("backend::lang.form.dependent_failed");default:return""}}),Y=b(()=>c.value&&d.value!=="ready"),I=b(()=>Y.value||w.value===Vi||w.value===zi),X=b(()=>`${n.controlId}-dependent`),Z=b(()=>[n.describedBy??"",c.value&&(d.value==="empty"||d.value==="failed")?X.value:""].filter(Boolean).join(" "));function j(H){const re=H.target.value;if(re===Vi){a("update:modelValue",null);return}const ce=$.value[Number(re)];ce&&a("update:modelValue",ce.value)}return(H,re)=>(v(),_("div",{class:"flex flex-col gap-1.5","data-dependent":c.value?d.value:void 0},[S("div",t6,[S("select",{id:e.controlId,name:e.field.name,value:Y.value?"state":w.value,disabled:Y.value||void 0,required:e.field.required||void 0,"aria-required":e.field.required?"true":void 0,"aria-invalid":e.invalid?"true":void 0,"aria-busy":c.value&&d.value==="loading"?"true":void 0,"aria-describedby":Z.value||void 0,class:ye([[s(Nt)(e.invalid),I.value?"text-muted":""],"h-input appearance-none pr-10 disabled:cursor-not-allowed"]),onChange:j},[Y.value?(v(),_("option",a6,T(P.value),1)):(v(),_(pe,{key:1},[e.field.emptyOption!==void 0?(v(),_("option",{key:0,value:Vi,class:"text-muted"},T(e.field.emptyOption),1)):ne("",!0),w.value===zi?(v(),_("option",{key:1,value:zi,disabled:""},T(s(k)("backend::lang.form.select_placeholder")),1)):ne("",!0),(v(!0),_(pe,null,qe($.value,(ce,$e)=>(v(),_("option",{key:$e,value:String($e),class:"text-text"},T(ce.label),9,r6))),128))],64))],42,n6),B(s(lr),{size:16,class:"pointer-events-none absolute top-1/2 right-3.5 -translate-y-1/2 text-muted","aria-hidden":"true"})]),c.value&&d.value==="empty"?(v(),_("p",{key:0,id:X.value,"data-dependent-hint":"",class:"text-[13px] text-muted"},T(P.value),9,l6)):c.value&&d.value==="failed"?(v(),_("div",o6,[S("p",{id:X.value,role:"alert",class:"flex items-center gap-1.5 text-[13px] text-danger"},[B(s(yt),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(s(k)("backend::lang.form.dependent_failed")),1)],8,i6),B(Ze,{variant:"ghost",size:"sm",icon:s(Ji),"data-action":"dependent-retry",onClick:z},{default:F(()=>[_e(T(s(k)("backend::lang.form.dependent_retry")),1)]),_:1},8,["icon"])])):ne("",!0)],8,e6))}}),u6={class:"flex items-start gap-3"},c6={class:"flex min-w-0 flex-1 flex-col gap-1"},d6={key:0,class:"flex items-center gap-4"},f6=["src"],p6={key:1,class:"flex size-16 shrink-0 items-center justify-center rounded-inner bg-subtle","aria-hidden":"true"},v6=["title"],m6={class:"flex flex-col gap-1.5"},h6=["for"],y6=["id","disabled","aria-invalid","aria-describedby"],g6=["id"],b6={class:"flex flex-col gap-1.5"},_6=["for"],x6=["id","disabled","aria-invalid","aria-describedby"],k6=["id"],w6={class:"flex gap-2.5"},$6=["disabled"],C6=["disabled"],S6=le({__name:"FileCaptionModal",props:{open:{type:Boolean},file:{},routes:{},preview:{},idPrefix:{}},emits:["update:open","saved","closed"],setup(e,{emit:t}){const n=e,a=t,r=R(""),l=R(""),o=R({}),i=R(!1),u=br();function c($){const g={};for(const[C,E]of Object.entries($??{})){const D=(Array.isArray(E)?E:[E]).filter(O=>typeof O=="string"&&O!=="");D.length>0&&(g[C]=D)}return g}const d=b(()=>`${n.idPrefix}-caption-title`),f=b(()=>`${n.idPrefix}-caption-description`),m=b(()=>!!n.file&&(r.value!==n.file.title||l.value!==n.file.description));je(()=>n.open,$=>{$&&n.file&&(r.value=n.file.title??"",l.value=n.file.description??"",o.value={},i.value=!1)},{immediate:!0});async function p($){if($){a("update:open",!0);return}i.value||m.value&&!await u.ask({message:k("backend::lang.form.unsaved_confirm"),confirmLabel:k("backend::lang.form.discard"),danger:!0})||a("update:open",!1)}async function h(){if(!(i.value||!n.file||!n.routes)){i.value=!0;try{const $=await n.routes.update(n.file.id,{title:r.value,description:l.value});if($.data){o.value={},a("saved",$.data),a("update:open",!1),Ne(k("backend::lang.fileupload.details_saved"));return}if($.status===422){o.value=c($.error?.details),Object.keys(o.value).length===0&&(o.value={title:[qf($.error)||k("backend::lang.form.error_generic")]});return}Ne($.error?.message||k("backend::lang.form.error_generic"),"danger")}finally{i.value=!1}}}function x($){$.preventDefault(),a("closed")}return($,g)=>(v(),_(pe,null,[B(s(Hl),{open:e.open,"onUpdate:open":p},{default:F(()=>[B(s(yi),null,{default:F(()=>[B(s(Kl),{"data-dialog-overlay":"",class:"fixed inset-0 z-40 bg-overlay"}),B(s(Wl),{"data-caption-modal":"","data-dialog-content":"","aria-modal":"true",class:"fixed top-1/2 left-1/2 z-50 flex max-h-[calc(100vh-32px)] w-[calc(100%-32px)] max-w-[560px] -translate-x-1/2 -translate-y-1/2 flex-col gap-4 overflow-y-auto rounded-modal bg-surface p-6 text-text shadow-pop",onCloseAutoFocus:x},{default:F(()=>[S("div",u6,[S("div",c6,[B(s(Gl),{class:"text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[_e(T(s(k)("backend::lang.fileupload.attachment")),1)]),_:1}),B(s(Vr),{class:"text-muted"},{default:F(()=>[_e(T(s(k)("backend::lang.fileupload.help")),1)]),_:1})]),B(s(Vl),{"data-action":"close","aria-label":s(k)("backend::lang.form.close"),disabled:i.value,class:"flex size-[34px] shrink-0 items-center justify-center rounded-tab bg-subtle text-muted hover:bg-hover hover:text-text"},{default:F(()=>[B(s(yn),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label","disabled"])]),e.file?(v(),_("div",d6,[e.preview?(v(),_("img",{key:0,src:e.preview,alt:"",class:"size-16 shrink-0 rounded-inner object-cover"},null,8,f6)):(v(),_("span",p6,[B(s(bl),{size:16,class:"text-muted"})])),S("span",{class:"min-w-0 truncate text-[13px] text-muted",title:e.file.file_name},T(e.file.file_name),9,v6)])):ne("",!0),S("form",{class:"flex flex-col gap-4",novalidate:"",onSubmit:vt(h,["prevent"])},[S("div",m6,[S("label",{for:d.value,class:"font-semibold"},T(s(k)("backend::lang.fileupload.title_label")),9,h6),Qn(S("input",{id:d.value,"onUpdate:modelValue":g[0]||(g[0]=C=>r.value=C),type:"text","data-caption-title":"",disabled:i.value,"aria-invalid":o.value.title?"true":void 0,"aria-describedby":o.value.title?`${d.value}-error`:void 0,class:ye([s(Nt)(!!o.value.title),"h-input"])},null,10,y6),[[ql,r.value]]),o.value.title?(v(),_("p",{key:0,id:`${d.value}-error`,class:"flex items-center gap-1.5 text-[13px] text-danger"},[B(s(yt),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(o.value.title.join(" ")),1)],8,g6)):ne("",!0)]),S("div",b6,[S("label",{for:f.value,class:"font-semibold"},T(s(k)("backend::lang.fileupload.description_label")),9,_6),Qn(S("textarea",{id:f.value,"onUpdate:modelValue":g[1]||(g[1]=C=>l.value=C),rows:"3","data-caption-description":"",disabled:i.value,"aria-invalid":o.value.description?"true":void 0,"aria-describedby":o.value.description?`${f.value}-error`:void 0,class:ye([s(Nt)(!!o.value.description),"min-h-input resize-y py-2.5"])},null,10,x6),[[ql,l.value]]),o.value.description?(v(),_("p",{key:0,id:`${f.value}-error`,class:"flex items-center gap-1.5 text-[13px] text-danger"},[B(s(yt),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(o.value.description.join(" ")),1)],8,k6)):ne("",!0)]),S("div",w6,[S("button",{type:"button","data-action":"cancel",disabled:i.value,class:"inline-flex h-button flex-1 items-center justify-center rounded-control border border-border-strong bg-surface font-semibold hover:bg-hover disabled:cursor-not-allowed disabled:opacity-60",onClick:g[2]||(g[2]=C=>p(!1))},T(s(k)("backend::lang.form.cancel")),9,$6),S("button",{type:"submit","data-action":"save-caption",disabled:i.value,class:"inline-flex h-button flex-1 items-center justify-center rounded-control bg-primary font-semibold text-on-primary hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-60"},T(i.value?s(k)("backend::lang.form.saving"):s(k)("backend::lang.fileupload.details_submit")),9,C6)])],32)]),_:1})]),_:1})]),_:1},8,["open"]),B(gr,{open:s(u).request.value!==null,message:s(u).request.value?.message??"","confirm-label":s(u).request.value?.confirmLabel,danger:s(u).request.value?.danger,onConfirm:s(u).confirm,onCancel:s(u).cancel},null,8,["open","message","confirm-label","danger","onConfirm","onCancel"])],64))}}),E6=["id","data-field-name","aria-labelledby","aria-describedby","aria-busy"],A6={key:0,"data-fileupload-loading":"",class:"h-[112px] rounded-control bg-skel","aria-hidden":"true"},T6={key:1,role:"alert","data-fileupload-failed":"",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},D6={key:0,"data-fileupload-empty":"",class:"flex min-h-input items-center rounded-control border border-border bg-subtle px-3.5 text-muted"},O6={key:1,"data-fileupload-grid":"",class:"grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4"},M6=["data-file-item","data-state","onDragover","onDrop"],P6={class:"relative flex aspect-square items-center justify-center bg-subtle"},R6=["href","aria-label"],I6=["src","alt","onError"],q6=["aria-label","onClick"],N6=["src","alt"],L6={key:2,"data-preview-unavailable":"",class:"flex flex-col items-center gap-2 text-[13px] text-muted"},B6=["data-handle","aria-label","onKeydown","onDragstart"],F6={key:5,class:"absolute top-2 right-2 flex gap-1"},V6=["data-caption","aria-label","onClick"],z6=["aria-label","onClick"],j6=["aria-label","onClick"],U6={class:"flex flex-col gap-1 p-2"},H6=["title"],W6={class:"flex items-center gap-2 text-[13px] text-muted tabular-nums"},K6={key:0},G6={key:1},Y6={key:2},J6={key:3,"data-unsaved-chip":"",class:"inline-flex h-6 items-center rounded-pill bg-sel px-2 text-[13px] font-semibold text-text"},Z6={key:1,"data-file-error":"",class:"text-[13px] text-danger"},X6={class:"sr-only"},Q6={key:2,"data-fileupload-single":"",class:"flex flex-col gap-2"},e8=["data-file-item","data-state"],t8=["src","alt","onError"],n8={key:3,"data-preview-unavailable":"",class:"flex flex-col items-center gap-2 text-[13px] text-muted"},a8={class:"flex min-w-0 flex-1 flex-col gap-1"},r8=["title"],l8={class:"flex items-center gap-2 text-[13px] text-muted tabular-nums"},o8={key:0},i8={key:1},s8={key:2},u8={key:3,"data-unsaved-chip":"",class:"inline-flex h-6 items-center rounded-pill bg-sel px-2 text-[13px] font-semibold text-text"},c8={key:1,"data-file-error":"",class:"text-[13px] text-danger"},d8={class:"sr-only"},f8={key:2,class:"mt-1 flex flex-wrap gap-2"},p8={key:3,"data-fileupload-rows":"",class:"flex flex-col gap-2"},v8=["data-file-item","data-state","onDragover","onDrop"],m8={class:"flex items-center gap-3"},h8=["data-handle","aria-label","onKeydown","onDragstart"],y8={class:"flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-pager bg-subtle"},g8=["src","onError"],b8={class:"flex min-w-0 flex-1 flex-col leading-tight"},_8=["title"],x8=["title"],k8=["title"],w8={class:"flex shrink-0 items-center gap-2 text-[13px] text-muted tabular-nums"},$8={key:0},C8={key:1},S8={key:2},E8={key:3,"data-unsaved-chip":"",class:"inline-flex h-6 items-center rounded-pill bg-sel px-2 text-[13px] font-semibold text-text"},A8={class:"flex shrink-0 items-center gap-1"},T8=["href","aria-label"],D8=["aria-label","onClick"],O8=["data-caption","aria-label","onClick"],M8=["aria-label","onClick"],P8=["aria-label","onClick"],R8={key:1,"data-file-error":"",class:"text-[13px] text-danger"},I8={class:"sr-only"},q8=["aria-describedby"],N8={class:"flex size-10 items-center justify-center rounded-full bg-surface","aria-hidden":"true"},L8={class:"text-text"},B8={key:0,"data-fileupload-limits":"",class:"text-[13px] text-muted tabular-nums"},F8={key:5,"data-fileupload-limits":"",class:"text-[13px] text-muted tabular-nums"},V8={key:6,role:"alert","data-fileupload-too-many":"",class:"flex items-center gap-1.5 text-[13px] text-danger"},z8=["accept","multiple"],j8={class:"sr-only","aria-live":"polite","data-fileupload-live":""},U8=1<<20,H8=400,bc="inline-flex size-8 items-center justify-center rounded-pager border border-border bg-surface text-muted hover:text-text",W8="inline-flex size-8 items-center justify-center rounded-pager border border-border bg-surface text-muted hover:bg-danger-soft hover:text-danger",ul="inline-flex size-8 shrink-0 items-center justify-center rounded-pager text-muted hover:bg-hover hover:text-text",K8=le({__name:"FileuploadField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},setup(e){const t=e,n=ut(Xl,null),a=["jpg","jpeg","png","gif","webp"],r=["image/jpeg","image/png","image/gif","image/webp"];let l=1;const o=R([]),i=R("loading"),u=R(!1),c=R(0),d=R(""),f=R(null),m=R(null),p=R(null),h=R(null),x=R(null),$=R(!1),g=R({}),C=R(new Set),E=new Set,D=[],O=n?n.routes(t.field.name):null;let L=null,N=null,z=!1,w=null,P=0,Y=!1;const I=b(()=>{const G=t.field.attributes?.readonly;return!!t.field.readOnly||G!=null&&G!==!1}),X=b(()=>t.field.multiple===!0),Z=b(()=>t.field.mode==="image"),j=b(()=>X.value?t.field.maxFiles:1),H=b(()=>(n?.recordId??0)!==0),re=b(()=>o.value.filter(G=>G.state!=="failed")),ce=b(()=>{if(X.value)return o.value;const G=re.value,Oe=G[G.length-1];return o.value.filter(ee=>ee.state==="failed"||ee===Oe)}),$e=b(()=>ce.value.filter(G=>G.state!=="failed").length),me=b(()=>I.value||i.value!=="ready"?!1:X.value?j.value===void 0||j.value===null||re.value.lengthX.value&&!I.value&&typeof j.value=="number"&&re.value.length>=j.value),fe=b(()=>t.field.fileTypes?.length?t.field.fileTypes.map(G=>G.toLowerCase()):Z.value&&!t.field.mimeTypes?.length?a:null),Te=b(()=>(t.field.fileTypes?.length?t.field.fileTypes:t.field.mimeTypes??[]).join(", ")),W=b(()=>{const G=[];for(const Oe of t.field.fileTypes??[])G.push(`.${Oe.toLowerCase()}`);for(const Oe of t.field.mimeTypes??[])G.push(Oe.includes("/")?Oe:`.${Oe.toLowerCase()}`);return G.length===0&&Z.value&&G.push(...r),G.length>0?G.join(","):void 0}),ke=b(()=>t.field.prompt||k(X.value?"backend::lang.fileupload.default_prompt_many":"backend::lang.fileupload.default_prompt"));function ae(G,Oe){return new Intl.NumberFormat(ar.value,{minimumFractionDigits:Oe,maximumFractionDigits:Oe}).format(G)}function Q(G){const Oe=["B","kB","MB","GB"];let ee=G,Ie=0;for(;ee>=1e3&&Ie{const G=t.field.maxFilesize;return typeof G=="number"?`${new Intl.NumberFormat(ar.value).format(G)} MB`:""}),V=b(()=>{const G=[];return Te.value!==""&&G.push(k("backend::lang.fileupload.limits_types",{types:Te.value})),ue.value!==""&&G.push(k("backend::lang.fileupload.limits_size",{size:ue.value})),X.value&&typeof j.value=="number"&&G.push(k("backend::lang.fileupload.limits_count",{current:re.value.length,max:j.value})),G.join(" · ")});function K(G){const Oe=G.lastIndexOf(".");return Oe<0?"":G.slice(Oe+1).toLowerCase()}function te(G){const Oe=t.field.mimeTypes??[];if(Oe.length===0||G.type==="")return!0;const ee=G.type.toLowerCase(),Ie=K(G.name);return Oe.some(Qe=>{const Ft=Qe.toLowerCase();return Ft.includes("/")?Ft.endsWith("/*")?ee.startsWith(Ft.slice(0,-1)):ee===Ft:Ft===Ie})}function y(G){const Oe=fe.value;if(Oe&&!Oe.includes(K(G.name)))return k("backend::lang.fileupload.wrong_type",{name:G.name,types:Oe.join(", ")});if(!te(G))return k("backend::lang.fileupload.wrong_type",{name:G.name,types:Te.value});const ee=t.field.maxFilesize;return typeof ee=="number"&&G.size>Math.ceil(ee*U8)?k("backend::lang.fileupload.too_large",{name:G.name,size:ue.value}):""}function A(G){return Mn({uid:l++,name:G.file_name,size:G.file_size,state:"done",progress:100,error:"",retryable:!1,file:G,source:null,handle:null,uploadId:""})}function M(){return globalThis.crypto?.randomUUID?.()??`u${Date.now().toString(36)}${Math.random().toString(36).slice(2,10)}`}function oe(G,Oe){return Mn({uid:l++,name:G.name,size:G.size,state:Oe===""?"queued":"failed",progress:0,error:Oe,retryable:!1,file:null,source:ns(G),handle:null,uploadId:M()})}function J(G){return o.value.find(Oe=>Oe.uid===G)}async function de(G){if(!O){i.value="failed";return}G&&(i.value="loading");const Oe=await O.list();if(Y)return;if(!Oe.data){G&&(i.value="failed");return}const ee=o.value.filter(Ie=>Ie.state!=="done");for(const Ie of o.value)Ie.state==="done"&&Jr(Ie.uid);o.value=[...Oe.data.map(A),...ee],i.value="ready"}function we(){I.value||f.value?.click()}function Ae(G){if(G.length===0||I.value)return;if(c.value=0,!X.value)for(const Qe of[...o.value])Qe.state!=="failed"&&(Qe.state!=="done"||Qe.file?.pending)&&Se(Qe);let Oe=X.value?typeof j.value=="number"?Math.max(j.value-re.value.length,0):Number.POSITIVE_INFINITY:1,ee=0;const Ie=[];for(const Qe of G.slice(0,X.value?G.length:1)){const Ft=y(Qe);if(Ft===""&&Oe<=0){ee++;continue}Ft===""&&Oe--,Ie.push(oe(Qe,Ft))}o.value=[...o.value,...Ie],c.value=ee,Re()}function De(G){const Oe=G.target;Ae(Array.from(Oe.files??[])),Oe.value=""}function se(G){return p.value===null&&Array.from(G.dataTransfer?.types??[]).includes("Files")}function Ce(G){se(G)&&(G.preventDefault(),u.value=!0)}function he(G){se(G)&&(G.preventDefault(),u.value=!1,Ae(Array.from(G.dataTransfer?.files??[])))}function Re(){if(!O||o.value.some(Oe=>Oe.state==="uploading"))return;const G=o.value.find(Oe=>Oe.state==="queued");G&&Fe(G)}async function Fe(G){if(!O||!G.source)return;G.state="uploading",G.progress=0,G.error="",G.retryable=!1;const Oe=new Set(o.value.filter(Ie=>Ie.file).map(Ie=>Ie.file.id)),ee=n?.beginUpload();try{const Ie=O.upload(G.source,(nn,qa)=>{G.progress=qa>0?Math.min(100,Math.round(nn/qa*100)):0},G.uploadId||void 0);G.handle=ns(Ie);const Qe=await Ie.promise;G.handle=null;const Ft=!!J(G.uid);if(Qe.ok)!Ft||Y?O.remove(Qe.item.id):(G.state="done",G.progress=100,G.file=Qe.item,G.name=Qe.item.file_name,G.size=Qe.item.file_size,n?.markDirty());else if(Qe.reason==="aborted"||Qe.reason==="network"){const nn=await Ge(Oe);if(Qe.reason==="aborted"){for(const qa of nn)O.remove(qa.id);o.value=o.value.filter(qa=>qa.uid!==G.uid),Jr(G.uid)}else Ft&&nn[0]&&nn.length===1?(G.state="done",G.progress=100,G.file=nn[0],G.name=nn[0].file_name,G.size=nn[0].file_size,n?.markDirty()):(G.state="failed",G.error=k("backend::lang.fileupload.upload_failed"),G.retryable=!0)}else if(Ft)switch(G.state="failed",Qe.reason){case"too_large":G.error=ue.value?k("backend::lang.fileupload.too_large",{name:G.name,size:ue.value}):Qe.message||k("backend::lang.fileupload.upload_failed");break;case"invalid":G.error=Qe.message||k("backend::lang.fileupload.upload_failed");break;default:G.error=Qe.message||k("backend::lang.fileupload.upload_failed"),G.retryable=Qe.status>=500}}finally{ee?.(),Y||Re()}}async function Ge(G){if(!O)return[];const Oe=await O.list();return Oe.data?Oe.data.filter(ee=>ee.pending&&!G.has(ee.id)):[]}function ge(G){G.state!=="failed"||!G.source||(G.state="queued",G.error="",G.retryable=!1,Re())}async function Se(G){const Oe=o.value.findIndex(Ie=>Ie.uid===G.uid);if(Oe<0)return;switch(o.value=o.value.filter(Ie=>Ie.uid!==G.uid),Jr(G.uid),G.state){case"uploading":G.handle?.abort(),n?.markDirty(),Re();return;case"queued":case"failed":return}if(!O||!G.file)return;n?.markDirty();const ee=await O.remove(G.file.id);if(!ee.data&&!Y){const Ie=[...o.value];Ie.splice(Math.min(Oe,Ie.length),0,G),o.value=Ie,Ne(ee.error?.message||k("backend::lang.form.error_generic"),"danger")}}function Be(){return o.value.map(G=>G.uid)}function Ue(G){const Oe=new Map(o.value.map(Qe=>[Qe.uid,Qe])),ee=G.map(Qe=>Oe.get(Qe)).filter(Qe=>!!Qe),Ie=o.value.filter(Qe=>!G.includes(Qe.uid));o.value=[...ee,...Ie]}function rt(){L!==null&&clearTimeout(L),L=setTimeout(()=>{L=null,Bt()},H8)}function St(){return o.value.filter(G=>G.state==="done"&&G.file).map(G=>G.file.id)}async function Bt(){if(!O)return;const G=St();if(z){w=G;return}const Oe=N;N=null;const ee=++P;z=!0;try{const Ie=await O.reorder(G);if(w)return;!Ie.data&&!Y&&ee===P&&(Oe&&Ue(Oe),Ne(k("backend::lang.fileupload.reorder_failed"),"danger"))}finally{z=!1,w&&(w=null,Bt())}}function ze(G,Oe){const ee=o.value.findIndex(Ft=>Ft.uid===G);if(ee<0||Oe<0||Oe>=o.value.length||Oe===ee)return!1;N===null&&(N=Be());const Ie=[...o.value],[Qe]=Ie.splice(ee,1);return Ie.splice(Oe,0,Qe),o.value=Ie,d.value=k("backend::lang.fileupload.moved",{name:Qe.name,position:Oe+1,total:Ie.length}),rt(),!0}async function Ve(G,Oe){const ee=o.value.findIndex(Qe=>Qe.uid===Oe.uid);let Ie;switch(G.key){case"ArrowUp":case"ArrowLeft":Ie=ee-1;break;case"ArrowDown":case"ArrowRight":Ie=ee+1;break;default:return}G.preventDefault(),ze(Oe.uid,Ie)&&(await Xe(),m.value?.querySelector(`[data-handle="${Oe.uid}"]`)?.focus())}function Ke(G,Oe){p.value=Oe.uid,G.dataTransfer&&(G.dataTransfer.effectAllowed="move",G.dataTransfer.setData("text/plain",Oe.name))}function It(G,Oe){p.value!==null&&(G.preventDefault(),h.value=Oe.uid)}function Pa(G,Oe){p.value!==null&&(G.preventDefault(),ze(p.value,o.value.findIndex(ee=>ee.uid===Oe.uid)),_r())}function _r(){p.value=null,h.value=null}function Yr(G){const Oe=G.file?.content_type??G.source?.type??"";return r.includes(Oe.toLowerCase())}function Ut(G){return!G.file||!Yr(G)||C.value.has(G.uid)?null:t.field.protected?g.value[G.uid]??null:G.file.thumb_url||G.file.url||null}function la(){return typeof URL.revokeObjectURL=="function"}function Jr(G){const Oe=g.value[G];if(Oe!==void 0){la()&&URL.revokeObjectURL(Oe);const ee={...g.value};delete ee[G],g.value=ee}E.delete(G)}async function bi(G){if(!O||!G.file||E.has(G.uid)||typeof URL.createObjectURL!="function")return;E.add(G.uid);const Oe=await O.thumb(G.file.id);if(!(Y||!J(G.uid)||!E.has(G.uid))){if(!Oe){C.value=new Set([...C.value,G.uid]);return}g.value={...g.value,[G.uid]:URL.createObjectURL(Oe)}}}je(()=>o.value.map(G=>`${G.uid}:${G.state}`).join(","),()=>{if(t.field.protected)for(const G of o.value)G.state==="done"&&Yr(G)&&bi(G)});function Zr(G){C.value=new Set([...C.value,G.uid])}async function to(G,Oe){if(!O||!G.file||typeof URL.createObjectURL!="function")return;const ee=await O.download(G.file.id);if(!ee){Ne(k("backend::lang.form.error_generic"),"danger");return}const Ie=URL.createObjectURL(ee);D.push(Ie);const Qe=document.createElement("a");Qe.href=Ie,Qe.rel="noopener",Oe?Qe.download=G.file.file_name:Qe.target="_blank",Qe.click()}function Bn(G){return t.field.useCaption&&G.file?.title?G.file.title:G.name}function Ra(G){return H.value&&!!G.file?.pending}const oa=b(()=>x.value===null?void 0:J(x.value));function tn(G){x.value=G.uid,$.value=!0}function Ia(G){const Oe=oa.value;Oe&&(Oe.file=G)}function no(){const G=x.value;x.value=null,G!==null&&m.value?.querySelector(`[data-caption="${G}"]`)?.focus()}const xr=b(()=>{const G=t.field.thumbOptions?.mode;return G==="fit"||G==="auto"?"object-contain":"object-cover"});return wt(()=>{de(!0)}),n&&je(n.revision,()=>{de(!1)}),At(()=>{Y=!0,L!==null&&(clearTimeout(L),L=null);for(const G of o.value)G.handle?.abort();if(la()){for(const G of Object.values(g.value))URL.revokeObjectURL(G);for(const G of D)URL.revokeObjectURL(G)}}),(G,Oe)=>(v(),_("div",{id:e.controlId,ref_key:"root",ref:m,role:"group","data-fileupload":"","data-field-name":e.field.name,"aria-labelledby":e.field.label?`${e.controlId}-label`:void 0,"aria-describedby":e.describedBy||void 0,"aria-busy":i.value==="loading"?"true":void 0,class:"flex min-w-0 flex-col gap-4"},[i.value==="loading"?(v(),_("span",A6)):i.value==="failed"?(v(),_("p",T6,T(s(k)("backend::lang.fileupload.load_failed")),1)):(v(),_(pe,{key:2},[I.value&&ce.value.length===0?(v(),_("p",D6,T(s(k)("backend::lang.fileupload.empty")),1)):Z.value&&X.value&&ce.value.length>0?(v(),_("ul",O6,[(v(!0),_(pe,null,qe(ce.value,ee=>(v(),_("li",{key:ee.uid,"data-file-item":ee.uid,"data-state":ee.state,class:ye([[ee.state==="failed"?"border-danger":"border-border",p.value===ee.uid?"opacity-50":"",h.value===ee.uid&&p.value!==ee.uid?"border-2 border-dashed border-primary bg-sel":""],"relative overflow-hidden rounded-inner border bg-surface"]),onDragover:Ie=>It(Ie,ee),onDrop:Ie=>Pa(Ie,ee)},[S("div",P6,[ee.state==="uploading"?(v(),U(s(Sl),{key:0,size:20,class:"animate-spin text-muted","aria-hidden":"true"})):ee.state==="failed"?(v(),U(s(yt),{key:1,size:16,class:"text-danger","aria-hidden":"true"})):ee.state==="done"?(v(),_(pe,{key:2},[Ut(ee)&&!e.field.protected&&ee.file?.url?(v(),_("a",{key:0,href:ee.file.url,target:"_blank",rel:"noopener",class:"block size-full","aria-label":s(k)("backend::lang.fileupload.open_preview",{name:ee.name})},[S("img",{src:Ut(ee)??void 0,alt:Bn(ee),class:ye([xr.value,"size-full"]),onError:Ie=>Zr(ee)},null,42,I6)],8,R6)):Ut(ee)?(v(),_("button",{key:1,type:"button",class:"block size-full","aria-label":s(k)("backend::lang.fileupload.open_preview",{name:ee.name}),onClick:Ie=>to(ee,!1)},[S("img",{src:Ut(ee)??void 0,alt:Bn(ee),class:ye([xr.value,"size-full"])},null,10,N6)],8,q6)):C.value.has(ee.uid)?(v(),_("span",L6,[B(s(yv),{size:20,"aria-hidden":"true"}),_e(" "+T(s(k)("backend::lang.fileupload.preview_unavailable")),1)])):(v(),U(s(bl),{key:3,size:20,class:"text-muted","aria-hidden":"true"}))],64)):(v(),U(s(bl),{key:3,size:20,class:"text-muted","aria-hidden":"true"})),!I.value&&ee.state==="done"?(v(),_("button",{key:4,type:"button",draggable:"true","data-handle":ee.uid,"aria-label":s(k)("backend::lang.fileupload.move",{name:ee.name}),class:ye([bc,"absolute top-2 left-2 cursor-grab"]),onKeydown:Ie=>Ve(Ie,ee),onDragstart:Ie=>Ke(Ie,ee),onDragend:_r},[B(s(gs),{size:16,"aria-hidden":"true"})],40,B6)):ne("",!0),I.value?ne("",!0):(v(),_("div",F6,[e.field.useCaption&&ee.state==="done"?(v(),_("button",{key:0,type:"button","data-caption":ee.uid,"aria-label":s(k)("backend::lang.fileupload.edit_details",{name:ee.name}),class:ye(bc),onClick:Ie=>tn(ee)},[B(s(Ro),{size:16,"aria-hidden":"true"})],8,V6)):ne("",!0),ee.state==="failed"&&ee.retryable?(v(),_("button",{key:1,type:"button","data-action":"retry","aria-label":s(k)("backend::lang.fileupload.retry"),class:ye(bc),onClick:Ie=>ge(ee)},[B(s(Ji),{size:16,"aria-hidden":"true"})],8,z6)):ne("",!0),S("button",{type:"button","data-action":"remove-file","aria-label":ee.state==="uploading"||ee.state==="queued"?s(k)("backend::lang.fileupload.cancel_upload",{name:ee.name}):s(k)("backend::lang.form.remove_item",{name:ee.name}),class:ye(W8),onClick:Ie=>Se(ee)},[B(s(yn),{size:16,"aria-hidden":"true"})],8,j6)]))]),S("div",U6,[S("span",{class:"truncate text-[13px]",title:Bn(ee)},T(Bn(ee)),9,H6),S("span",W6,[ee.state==="queued"?(v(),_("span",K6,T(s(k)("backend::lang.fileupload.queued")),1)):ee.state==="uploading"?(v(),_("span",G6,T(s(k)("backend::lang.fileupload.uploading",{percent:ee.progress})),1)):(v(),_("span",Y6,T(Q(ee.size)),1)),Ra(ee)?(v(),_("span",J6,T(s(k)("backend::lang.fileupload.unsaved")),1)):ne("",!0)]),ee.state==="uploading"?(v(),U(s(cc),{key:0,"model-value":ee.progress,max:100,"aria-label":s(k)("backend::lang.fileupload.uploading",{percent:ee.progress}),class:"h-1 w-full overflow-hidden rounded-pill bg-subtle"},{default:F(()=>[B(s(dc),{class:"h-full bg-primary",style:Dn({width:`${ee.progress}%`})},null,8,["style"])]),_:2},1032,["model-value","aria-label"])):ne("",!0),ee.state==="failed"?(v(),_("p",Z6,[S("span",X6,T(s(k)("backend::lang.fileupload.upload_error"))+": ",1),_e(T(ee.error),1)])):ne("",!0)])],42,M6))),128))])):Z.value&&!X.value&&ce.value.length>0?(v(),_("div",Q6,[(v(!0),_(pe,null,qe(ce.value,ee=>(v(),_("div",{key:ee.uid,"data-file-item":ee.uid,"data-state":ee.state,class:"flex items-start gap-4"},[S("div",{class:ye([ee.state==="failed"?"border-danger":"border-border","flex size-40 shrink-0 items-center justify-center overflow-hidden rounded-inner border bg-subtle"])},[ee.state==="uploading"?(v(),U(s(Sl),{key:0,size:20,class:"animate-spin text-muted","aria-hidden":"true"})):ee.state==="failed"?(v(),U(s(yt),{key:1,size:16,class:"text-danger","aria-hidden":"true"})):Ut(ee)?(v(),_("img",{key:2,src:Ut(ee)??void 0,alt:Bn(ee),class:ye([xr.value,"size-full"]),onError:Ie=>Zr(ee)},null,42,t8)):C.value.has(ee.uid)?(v(),_("span",n8,[B(s(yv),{size:20,"aria-hidden":"true"}),_e(" "+T(s(k)("backend::lang.fileupload.preview_unavailable")),1)])):(v(),U(s(bl),{key:4,size:20,class:"text-muted","aria-hidden":"true"}))],2),S("div",a8,[S("span",{class:"truncate font-semibold",title:Bn(ee)},T(Bn(ee)),9,r8),S("span",l8,[ee.state==="queued"?(v(),_("span",o8,T(s(k)("backend::lang.fileupload.queued")),1)):ee.state==="uploading"?(v(),_("span",i8,T(s(k)("backend::lang.fileupload.uploading",{percent:ee.progress})),1)):(v(),_("span",s8,T(Q(ee.size)),1)),Ra(ee)?(v(),_("span",u8,T(s(k)("backend::lang.fileupload.unsaved")),1)):ne("",!0)]),ee.state==="uploading"?(v(),U(s(cc),{key:0,"model-value":ee.progress,max:100,"aria-label":s(k)("backend::lang.fileupload.uploading",{percent:ee.progress}),class:"h-1 w-full overflow-hidden rounded-pill bg-subtle"},{default:F(()=>[B(s(dc),{class:"h-full bg-primary",style:Dn({width:`${ee.progress}%`})},null,8,["style"])]),_:2},1032,["model-value","aria-label"])):ne("",!0),ee.state==="failed"?(v(),_("p",c8,[S("span",d8,T(s(k)("backend::lang.fileupload.upload_error"))+": ",1),_e(T(ee.error),1)])):ne("",!0),I.value?ne("",!0):(v(),_("div",f8,[ee.state!=="failed"?(v(),U(Ze,{key:0,size:"sm",variant:"outline","data-action":"replace-file",icon:s(Zi),onClick:we},{default:F(()=>[_e(T(s(k)("backend::lang.fileupload.replace_file")),1)]),_:1},8,["icon"])):ne("",!0),ee.state==="failed"&&ee.retryable?(v(),U(Ze,{key:1,size:"sm",variant:"outline","data-action":"retry",icon:s(Ji),onClick:Ie=>ge(ee)},{default:F(()=>[_e(T(s(k)("backend::lang.fileupload.retry")),1)]),_:1},8,["icon","onClick"])):ne("",!0),e.field.useCaption&&ee.state==="done"?(v(),U(Ze,{key:2,size:"sm",variant:"outline","data-caption":ee.uid,icon:s(Ro),onClick:Ie=>tn(ee)},{default:F(()=>[_e(T(s(k)("backend::lang.fileupload.details_submit")),1)]),_:1},8,["data-caption","icon","onClick"])):ne("",!0),B(Ze,{size:"sm",variant:"danger","data-action":"remove-file",icon:s(yn),onClick:Ie=>Se(ee)},{default:F(()=>[_e(T(s(k)("backend::lang.fileupload.remove_file")),1)]),_:1},8,["icon","onClick"])]))])],8,e8))),128))])):ce.value.length>0?(v(),_("ul",p8,[(v(!0),_(pe,null,qe(ce.value,ee=>(v(),_("li",{key:ee.uid,"data-file-item":ee.uid,"data-state":ee.state,class:ye([[ee.state==="failed"?"border-danger":"border-border",p.value===ee.uid?"opacity-50":"",h.value===ee.uid&&p.value!==ee.uid?"border-2 border-dashed border-primary bg-sel":""],"flex min-h-14 flex-col justify-center gap-1 rounded-inner border bg-surface px-3 py-2"]),onDragover:Ie=>It(Ie,ee),onDrop:Ie=>Pa(Ie,ee)},[S("div",m8,[X.value&&!I.value&&ee.state==="done"?(v(),_("button",{key:0,type:"button",draggable:"true","data-handle":ee.uid,"aria-label":s(k)("backend::lang.fileupload.move",{name:ee.name}),class:ye([ul,"cursor-grab"]),onKeydown:Ie=>Ve(Ie,ee),onDragstart:Ie=>Ke(Ie,ee),onDragend:_r},[B(s(gs),{size:16,"aria-hidden":"true"})],40,h8)):ne("",!0),S("span",y8,[ee.state==="uploading"?(v(),U(s(Sl),{key:0,size:16,class:"animate-spin text-muted","aria-hidden":"true"})):ee.state==="failed"?(v(),U(s(yt),{key:1,size:16,class:"text-danger","aria-hidden":"true"})):Ut(ee)?(v(),_("img",{key:2,src:Ut(ee)??void 0,alt:"",class:"size-8 object-cover",onError:Ie=>Zr(ee)},null,40,g8)):(v(),U(s(bl),{key:3,size:16,class:"text-muted","aria-hidden":"true"}))]),S("span",b8,[e.field.useCaption&&ee.file?.title?(v(),_(pe,{key:0},[S("span",{class:"truncate font-semibold",title:ee.file.title},T(ee.file.title),9,_8),S("span",{class:"truncate text-[13px] text-muted",title:ee.name},T(ee.name),9,x8)],64)):(v(),_("span",{key:1,class:"truncate",title:ee.name},T(ee.name),9,k8))]),S("span",w8,[ee.state==="queued"?(v(),_("span",$8,T(s(k)("backend::lang.fileupload.queued")),1)):ee.state==="uploading"?(v(),_("span",C8,T(s(k)("backend::lang.fileupload.uploading",{percent:ee.progress})),1)):(v(),_("span",S8,T(Q(ee.size)),1)),Ra(ee)?(v(),_("span",E8,T(s(k)("backend::lang.fileupload.unsaved")),1)):ne("",!0)]),!X.value&&!I.value&&ee.state!=="failed"?(v(),U(Ze,{key:1,size:"sm",variant:"outline","data-action":"replace-file",icon:s(Zi),onClick:we},{default:F(()=>[_e(T(s(k)("backend::lang.fileupload.replace_file")),1)]),_:1},8,["icon"])):ne("",!0),S("span",A8,[ee.state==="done"&&ee.file?(v(),_(pe,{key:0},[!e.field.protected&&ee.file.url?(v(),_("a",{key:0,href:ee.file.url,download:"",target:"_blank",rel:"noopener","aria-label":s(k)("backend::lang.fileupload.download",{name:ee.name}),class:ye(ul)},[B(s(Yc),{size:16,"aria-hidden":"true"})],8,T8)):e.field.protected?(v(),_("button",{key:1,type:"button","data-action":"download","aria-label":s(k)("backend::lang.fileupload.download",{name:ee.name}),class:ye(ul),onClick:Ie=>to(ee,!0)},[B(s(Yc),{size:16,"aria-hidden":"true"})],8,D8)):ne("",!0),e.field.useCaption&&!I.value?(v(),_("button",{key:2,type:"button","data-caption":ee.uid,"aria-label":s(k)("backend::lang.fileupload.edit_details",{name:ee.name}),class:ye(ul),onClick:Ie=>tn(ee)},[B(s(Ro),{size:16,"aria-hidden":"true"})],8,O8)):ne("",!0)],64)):ne("",!0),ee.state==="failed"&&ee.retryable?(v(),_("button",{key:1,type:"button","data-action":"retry","aria-label":s(k)("backend::lang.fileupload.retry"),class:ye(ul),onClick:Ie=>ge(ee)},[B(s(Ji),{size:16,"aria-hidden":"true"})],8,M8)):ne("",!0),I.value?ne("",!0):(v(),_("button",{key:2,type:"button","data-action":"remove-file","aria-label":ee.state==="uploading"||ee.state==="queued"?s(k)("backend::lang.fileupload.cancel_upload",{name:ee.name}):s(k)("backend::lang.form.remove_item",{name:ee.name}),class:ye([ul,"hover:bg-danger-soft hover:text-danger"]),onClick:Ie=>Se(ee)},[B(s(yn),{size:16,"aria-hidden":"true"})],8,P8))])]),ee.state==="uploading"?(v(),U(s(cc),{key:0,"model-value":ee.progress,max:100,"aria-label":s(k)("backend::lang.fileupload.uploading",{percent:ee.progress}),class:"h-1 w-full overflow-hidden rounded-pill bg-subtle"},{default:F(()=>[B(s(dc),{class:"h-full bg-primary",style:Dn({width:`${ee.progress}%`})},null,8,["style"])]),_:2},1032,["model-value","aria-label"])):ne("",!0),ee.state==="failed"?(v(),_("p",R8,[S("span",I8,T(s(k)("backend::lang.fileupload.upload_error"))+": ",1),_e(T(ee.error),1)])):ne("",!0)],42,v8))),128))])):ne("",!0),me.value?(v(),_("button",{key:4,type:"button","data-fileupload-dropzone":"","aria-describedby":e.describedBy||void 0,class:ye([[u.value?"border-solid border-primary bg-sel":e.invalid?"border-dashed border-danger bg-subtle":"border-dashed border-border-strong bg-subtle"],"flex min-h-[112px] w-full flex-col items-center justify-center gap-2 rounded-control border-[1.5px] px-4 py-6 text-center transition-colors duration-150 ease-out hover:bg-hover"]),onClick:we,onDragover:Ce,onDragleave:Oe[0]||(Oe[0]=ee=>u.value=!1),onDrop:he},[S("span",N8,[B(s(Zi),{size:20,class:"text-muted"})]),S("span",L8,T(ke.value),1),V.value!==""?(v(),_("span",B8,T(V.value),1)):ne("",!0)],42,q8)):be.value&&V.value!==""?(v(),_("p",F8,T(V.value),1)):ne("",!0),c.value>0?(v(),_("p",V8,[B(s(yt),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(s(qr)("backend::lang.fileupload.too_many",c.value,{max:j.value??0})),1)])):ne("",!0)],64)),S("input",{ref_key:"input",ref:f,type:"file",hidden:"",tabindex:"-1","data-fileupload-input":"",accept:W.value,multiple:X.value||void 0,onChange:De},null,40,z8),S("p",j8,T(d.value),1),e.field.useCaption?(v(),U(S6,{key:3,open:$.value,"onUpdate:open":Oe[1]||(Oe[1]=ee=>$.value=ee),file:oa.value?.file??null,routes:s(O),preview:oa.value?Ut(oa.value):null,"id-prefix":e.controlId,onSaved:Ia,onClosed:no},null,8,["open","file","routes","preview","id-prefix"])):ne("",!0)],8,E6))}}),G8=["id","name","value","required","aria-required","aria-invalid","aria-describedby"],Y8=le({__name:"NumberField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>n.modelValue===null||n.modelValue===void 0?"":String(n.modelValue)),l=b(()=>Kr(n.field));function o(i){const u=i.target.value.trim();if(u===""){a("update:modelValue",null);return}const c=Number(u);a("update:modelValue",Number.isFinite(c)?c:null)}return(i,u)=>(v(),_("input",He({id:e.controlId},l.value,{name:e.field.name,type:"number",inputmode:"decimal",value:r.value,required:e.field.required||void 0,"aria-required":e.field.required?"true":void 0,"aria-invalid":e.invalid?"true":void 0,"aria-describedby":e.describedBy||void 0,class:[s(Nt)(e.invalid),"h-input tabular-nums"],onInput:o}),null,16,G8))}}),J8=["id","aria-labelledby","aria-describedby"],Z8=le({__name:"PartialField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},setup(e){const t=e;return(n,a)=>(v(),_("div",{id:e.controlId,role:"group","data-partial-field":"","aria-labelledby":t.field.label?`${e.controlId}-label`:void 0,"aria-describedby":e.describedBy||void 0},[e.source?(v(),U(If,{key:0,variant:"field",source:e.source,name:t.field.path||t.field.name,"record-id":e.recordId??null},null,8,["source","name","record-id"])):(v(),U(yu,{key:1,"data-partial-failed":"",text:s(k)("backend::lang.extension.partial_failed")},null,8,["text"]))],8,J8))}}),X8={class:"flex min-w-0 flex-col gap-1.5"},Q8={class:"relative"},eR=["id","name","type","value","placeholder","disabled","required","aria-required","aria-invalid","aria-describedby"],tR=["aria-pressed","aria-label","disabled"],nR=["id","data-secret-state","role"],aR={key:3},rR=le({__name:"PasswordField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=R(!1),l=b(()=>typeof n.modelValue=="string"?n.modelValue:""),o=b(()=>Kr(n.field)),i=ut(Xl,null);i&&je(i.revision,()=>{r.value=!1});const u=ut(h1,null),c=b(()=>u?.value[n.field.name]??""),d=b(()=>c.value!==""),f=b(()=>c.value==="stored"&&n.modelValue===null),m=b(()=>`${n.controlId}-secret`),p=b(()=>[n.describedBy??"",d.value?m.value:""].filter(Boolean).join(" ")),h=b(()=>{if(c.value==="stored"&&!f.value)return k("backend::lang.secret.placeholder_stored");const g=o.value.placeholder;return typeof g=="string"?g:void 0});function x(){r.value=!1,a("update:modelValue",null)}function $(){a("update:modelValue","")}return(g,C)=>(v(),_("div",X8,[S("div",Q8,[S("input",He({id:e.controlId,autocomplete:"new-password",spellcheck:"false"},o.value,{name:e.field.name,type:r.value?"text":"password",value:f.value?"":l.value,placeholder:h.value,disabled:f.value||void 0,required:e.field.required||void 0,"aria-required":e.field.required?"true":void 0,"aria-invalid":e.invalid?"true":void 0,"aria-describedby":p.value||void 0,class:[s(Nt)(e.invalid),"h-input pr-12"],onInput:C[0]||(C[0]=E=>a("update:modelValue",E.target.value))}),null,16,eR),S("button",{type:"button","data-password-toggle":"","aria-pressed":r.value?"true":"false","aria-label":s(k)(r.value?"backend::lang.form.hide_password":"backend::lang.form.show_password"),disabled:f.value||void 0,class:"absolute top-1/2 right-1.5 flex size-8 -translate-y-1/2 items-center justify-center rounded-pager text-muted transition-colors duration-150 ease-out hover:bg-hover hover:text-text disabled:opacity-60",onClick:C[1]||(C[1]=E=>r.value=!r.value)},[(v(),U(jt(r.value?s(k2):s($2)),{size:16,"aria-hidden":"true"}))],8,tR)]),d.value?(v(),_("p",{key:0,id:m.value,"data-secret-state":f.value?"clearing":c.value,role:f.value?"status":void 0,class:ye([f.value?"text-danger":"text-muted","flex flex-wrap items-center gap-2 text-[13px]"])},[f.value?(v(),_(pe,{key:0},[B(s(yt),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(s(k)("backend::lang.secret.clear_pending")),1),B(Ze,{variant:"ghost",size:"sm",icon:s(ug),"data-action":"secret-undo",onClick:$},{default:F(()=>[_e(T(s(k)("backend::lang.secret.undo")),1)]),_:1},8,["icon"])],64)):c.value==="stored"?(v(),_(pe,{key:1},[B(s(Ya),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(s(k)("backend::lang.secret.stored")),1),B(Ze,{variant:"ghost",size:"sm",icon:s(mr),"data-action":"secret-clear",onClick:x},{default:F(()=>[_e(T(s(k)("backend::lang.secret.clear")),1)]),_:1},8,["icon"])],64)):c.value==="env"?(v(),_(pe,{key:2},[B(s(fi),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(s(k)("backend::lang.secret.env")),1)],64)):(v(),_("span",aR,T(s(k)("backend::lang.secret.empty")),1))],10,nR)):ne("",!0)]))}}),lR=["aria-labelledby","data-ml-field"],oR={class:"flex flex-wrap items-center gap-2"},iR=["value","aria-label"],sR=["value"],bu=le({__name:"MLField",props:{inner:{},innerType:{},mlType:{},contentLocale:{type:Boolean},field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>Zn(n.modelValue)),l=ut(Ts,null),o=b(()=>{const g=l?.value;return g&&g.length>0?[...g]:[]}),i=R(o.value[0]??"en"),u=b(()=>`${n.controlId}-label`),c=b(()=>`${n.controlId}-editor`),d=b(()=>r.value[i.value]??""),f=b(()=>({...n.field,type:n.innerType})),m=b(()=>n.contentLocale?{contentLocale:i.value}:{});function p(g){g&&(i.value=g)}function h(g){const C=g.target.value;p(C),CP(C)}function x(g){a("update:modelValue",{...r.value,[i.value]:g})}function $(g){const C=g.detail;typeof C=="string"&&C!==""&&p(C)}return wt(()=>{window.addEventListener(ti,$)}),Ea(()=>{window.removeEventListener(ti,$)}),(g,C)=>(v(),_("div",{class:"flex flex-col gap-1.5",role:"group","aria-labelledby":u.value,"data-ml-field":e.mlType},[S("div",oR,[S("select",{"data-ml-locale":"",class:"rounded-control border border-border-strong bg-surface px-2 py-1 text-[13px]",value:i.value,"aria-label":`Locale for ${e.field.label||e.field.name}`,onChange:h},[(v(!0),_(pe,null,qe(o.value,E=>(v(),_("option",{key:E,value:E},T(E),9,sR))),128))],40,iR)]),(v(),U(jt(e.inner),He({field:f.value,"model-value":d.value,"control-id":c.value,invalid:e.invalid,"described-by":e.describedBy,source:e.source,"record-id":e.recordId},m.value,{"onUpdate:modelValue":x}),null,16,["field","model-value","control-id","invalid","described-by","source","record-id"]))],8,lR))}}),uR=["id","aria-labelledby","aria-describedby","aria-busy"],cR={key:0,"data-plugin-field-skeleton":"",class:"h-[42px] w-full rounded-control bg-skel","aria-hidden":"true"},b1=le({__name:"PluginField",props:{contentLocale:{},field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=ut(Ff,null),l=R("loading"),o=R(null);let i=null,u=!1;const c=b(()=>r?.value||ar.value),d=b(()=>JSON.stringify(n.field.typeOptions??{})),f=b(()=>n.field.readOnly===!0);function m(O,L){if(Object.is(O,L))return!0;if(O===null||L===null||typeof O!="object"||typeof L!="object")return!1;try{return JSON.stringify(O)===JSON.stringify(L)}catch{return!1}}function p(O,L){m(O.value,L)||(O.value=L)}function h(O,L,N){N?O.setAttribute(L,""):O.removeAttribute(L)}function x(O){O.setAttribute("field-name",n.field.name),O.setAttribute("record-id",n.recordId==null?"":String(n.recordId)),O.setAttribute("locale",n.contentLocale??""),O.setAttribute("ui-locale",c.value),O.setAttribute("options",d.value),h(O,"disabled",f.value),h(O,"invalid",n.invalid===!0)}function $(O){let L;return{promise:new Promise((z,w)=>{L=setTimeout(()=>w(new Error("field type element was not defined in time")),O)}),cancel:()=>clearTimeout(L)}}async function g(O){const L=await uM(O);if(customElements.get(O))return;if(L.length>0)throw new Error(`plugin script failed: ${L.join(", ")}`);const N=$(y1);try{await Promise.race([customElements.whenDefined(O),N.promise])}finally{N.cancel()}}async function C(O){const L=i,N=O.detail;if(!L||N===null||typeof N!="object")return;const{id:z,file:w}=N,P=Z=>{!u&&i===L&&L.dispatchEvent(new CustomEvent(QP,{detail:{id:z,...Z}}))},Y=()=>k("backend::lang.fileupload.upload_failed"),I=n.source;if(!(w instanceof Blob)||!I){P({error:Y()});return}const X=w instanceof File&&w.name!==""?w.name:"upload";try{const Z=await Le.POST("/{vendor}/{plugin}/{controller}/{id}/fields/{field}/upload",{params:{path:{...I,id:n.recordId??0,field:n.field.name}},body:{file:""},bodySerializer:()=>{const H=new FormData;return H.append("file",w,X),H}});if(Z.data){P({url:Z.data.data.url});return}const j=Z.response.status===422?qf(Z.error?.error):"";P({error:j||Y()})}catch{P({error:Y()})}}function E(O){C(O)}function D(O){const L=O.detail;L!==null&&typeof L=="object"&&Object.hasOwn(L,"value")&&a("update:modelValue",L.value)}return wt(async()=>{const O=n.field.element??"";try{if(O==="")throw new Error("plugin field without an element");if(await g(O),u||!o.value)return;const L=document.createElement(O);x(L),p(L,n.modelValue),L.addEventListener(km,D),L.addEventListener(wm,E),o.value.append(L),i=L,l.value="ready"}catch{u||(l.value="failed")}}),je(()=>[n.recordId,n.invalid,n.contentLocale,f.value,c.value,d.value],()=>{i&&x(i)}),je(()=>n.modelValue,O=>{i&&p(i,O)},{deep:!0}),At(()=>{u=!0,i?.removeEventListener(km,D),i?.removeEventListener(wm,E),i=null}),(O,L)=>l.value==="failed"?(v(),U(yu,{key:0,id:e.controlId,"data-plugin-field-failed":"","aria-describedby":e.describedBy||void 0,text:s(k)("backend::lang.extension.widget_failed")},null,8,["id","aria-describedby","text"])):(v(),_("div",{key:1,id:e.controlId,role:"group","data-plugin-field":"","aria-labelledby":e.field.label?`${e.controlId}-label`:void 0,"aria-describedby":e.describedBy||void 0,"aria-busy":l.value==="loading"?"true":void 0,class:"flex min-h-input min-w-0 flex-col"},[l.value==="loading"?(v(),_("span",cR)):ne("",!0),S("div",{ref_key:"mountPoint",ref:o,class:"contents"},null,512)],8,uR))}}),dR=le({__name:"MLPluginField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t;return(r,l)=>(v(),U(bu,He(n,{inner:b1,"inner-type":e.field.type,"ml-type":e.field.type,"content-locale":"","onUpdate:modelValue":l[0]||(l[0]=o=>a("update:modelValue",o))}),null,16,["inner-type","ml-type"]))}}),fR=["id"],pR=["id","aria-labelledby","aria-label","aria-describedby","data-mode"],vR=["aria-labelledby"],mR=["id"],hR={class:"min-w-0 [overflow-wrap:anywhere]"},yR={key:0,class:"shrink-0 text-[12px] font-semibold text-muted","aria-hidden":"true"},gR=["data-permission","data-locked"],bR={class:"flex min-w-0 flex-col"},_R=["id"],xR=["id"],kR=le({__name:"PermissionEditorField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>n.field.permissionOptions??[]),l=b(()=>n.field.mode==="radio"),o=b(()=>!!n.field.readOnly||!!Kr(n.field).readonly),i=b(()=>v1(n.field,n.modelValue)),u=b(()=>{const $=[],g=[];for(const C of r.value){if(!C.tab){g.push(C);continue}let E=$.find(D=>D.label===C.tab);E||(E={key:`tab:${C.tab}`,label:C.tab,options:[]},$.push(E)),E.options.push(C)}return g.length>0&&$.push({key:"other",label:k("backend::lang.permissioneditor.other"),options:g}),$}),c=[{value:"1",label:"backend::lang.permissioneditor.allow",checked:"data-[state=checked]:bg-ok-bg data-[state=checked]:text-ok-text"},{value:"0",label:"backend::lang.permissioneditor.inherit",checked:"data-[state=checked]:bg-surface data-[state=checked]:text-text data-[state=checked]:shadow-tab"},{value:"-1",label:"backend::lang.permissioneditor.deny",checked:"data-[state=checked]:bg-danger-soft data-[state=checked]:text-danger"}],d=b(()=>`${n.controlId}-label`);function f($,g){return`${n.controlId}-${$}-${g}`}function m($){return o.value||!!$.locked}function p($){return!!$.locked&&!o.value}function h($){return i.value[$.code]??0}function x($,g){if(m($))return;const C={...i.value};g===1||l.value&&g===-1?C[$.code]=g:delete C[$.code],a("update:modelValue",C)}return($,g)=>r.value.length===0?(v(),_("div",{key:0,id:e.controlId,"data-permission-empty":"",class:"flex min-h-input items-center rounded-control border border-border bg-subtle px-3.5 text-muted"},T(s(k)("backend::lang.permissioneditor.empty")),9,fR)):(v(),_("div",{key:1,id:e.controlId,role:"group","aria-labelledby":e.field.label?d.value:void 0,"aria-label":e.field.label?void 0:e.field.name,"aria-describedby":e.describedBy||void 0,class:ye([e.invalid?"border-danger":"border-border","overflow-hidden rounded-inner border"]),"data-permission-editor":"","data-mode":l.value?"radio":"checkbox"},[(v(!0),_(pe,null,qe(u.value,(C,E)=>(v(),_("div",{key:C.key,role:"group","aria-labelledby":`${e.controlId}-section-${E}`,"data-permission-section":""},[S("h3",{id:`${e.controlId}-section-${E}`,class:ye([E>0?"border-t border-border":"","flex h-row-head items-center justify-between gap-4 bg-subtle px-4 font-semibold"])},[S("span",hR,T(C.label),1),l.value?ne("",!0):(v(),_("span",yR,T(s(k)("backend::lang.permissioneditor.allow")),1))],10,mR),(v(!0),_(pe,null,qe(C.options,(D,O)=>(v(),_("div",{key:D.code,"data-permission":D.code,"data-locked":p(D)?"":void 0,class:"flex min-h-[56px] items-center justify-between gap-x-4 gap-y-2 border-t border-border px-4 py-3 max-sm:flex-col max-sm:items-start"},[S("div",bR,[(v(),U(jt(l.value?"span":"label"),{id:`${f(E,O)}-label`,for:l.value?void 0:f(E,O),class:"[overflow-wrap:anywhere]"},{default:F(()=>[_e(T(D.label||D.code)+" ",1),p(D)?(v(),U(s(Ya),{key:0,size:14,class:"ml-1 inline-block align-[-2px] text-muted","aria-hidden":"true"})):ne("",!0)]),_:2},1032,["id","for"])),p(D)?(v(),_("p",{key:0,id:`${f(E,O)}-note`,class:"text-[13px] text-muted [overflow-wrap:anywhere]","data-permission-locked":""},T(s(k)("backend::lang.permissioneditor.locked")),9,_R)):D.comment?(v(),_("p",{key:1,id:`${f(E,O)}-note`,class:"text-[13px] text-muted [overflow-wrap:anywhere]"},T(D.comment),9,xR)):ne("",!0)]),l.value?(v(),U(s(Nb),{key:0,orientation:"horizontal","model-value":String(h(D)),disabled:m(D),"aria-disabled":m(D)?"true":void 0,"aria-labelledby":`${f(E,O)}-label`,"aria-describedby":p(D)||D.comment?`${f(E,O)}-note`:void 0,class:"inline-flex shrink-0 gap-1 rounded-inner border border-border bg-subtle p-1","onUpdate:modelValue":L=>x(D,Number(L))},{default:F(()=>[(v(),_(pe,null,qe(c,L=>B(s(Lb),{key:L.value,value:L.value,"data-segment":L.value,class:ye([L.checked,"inline-flex h-pager items-center rounded-tab px-4 text-[13px] whitespace-nowrap text-muted transition-colors duration-150 ease-out hover:text-text disabled:cursor-not-allowed disabled:hover:text-muted data-[state=checked]:text-[14px] data-[state=checked]:font-semibold"])},{default:F(()=>[_e(T(s(k)(L.label)),1)]),_:2},1032,["value","data-segment","class"])),64))]),_:1},8,["model-value","disabled","aria-disabled","aria-labelledby","aria-describedby","onUpdate:modelValue"])):(v(),U(s(b4),{key:1,id:f(E,O),"model-value":h(D)===1,disabled:m(D),"aria-disabled":m(D)?"true":void 0,"aria-labelledby":`${f(E,O)}-label`,"aria-describedby":p(D)||D.comment?`${f(E,O)}-note`:void 0,class:"flex size-[18px] shrink-0 items-center justify-center rounded-checkbox border border-border-strong bg-surface disabled:cursor-not-allowed disabled:opacity-60 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-on-primary","onUpdate:modelValue":L=>x(D,L===!0?1:0)},{default:F(()=>[B(s(x4),null,{default:F(()=>[B(s(rr),{size:14,"aria-hidden":"true"})]),_:1})]),_:1},8,["id","model-value","disabled","aria-disabled","aria-labelledby","aria-describedby","onUpdate:modelValue"]))],8,gR))),128))],8,vR))),128))],10,pR))}}),wR=le({__name:"FieldRenderer",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>I1(n.field));return(l,o)=>(v(),U(jt(r.value),{field:e.field,"model-value":e.modelValue,"control-id":e.controlId,invalid:e.invalid,"described-by":e.describedBy,labels:e.labels,source:e.source,"record-id":e.recordId,"onUpdate:modelValue":o[0]||(o[0]=i=>a("update:modelValue",i))},null,8,["field","model-value","control-id","invalid","described-by","labels","source","record-id"]))}}),$R=["data-field"],CR=["id"],SR={key:0,class:"text-danger","aria-hidden":"true"},ER=["id","for"],AR={key:0,class:"text-danger","aria-hidden":"true"},TR=["id"],DR=["id"],OR=["id"],MR=le({__name:"FormField",props:{field:{},modelValue:{},errors:{},notices:{},labels:{},source:{},recordId:{},idPrefix:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>`${n.idPrefix??"field"}-${n.field.name}`),l=b(()=>r.value),o=b(()=>`${r.value}-comment`),i=b(()=>`${r.value}-error`),u=b(()=>`${r.value}-notice`),c=b(()=>(n.errors?.length??0)>0),d=b(()=>(n.notices?.length??0)>0),f=b(()=>j9(n.field.type)),m=b(()=>U9(n.field.type)||xu(n.field)),p=b(()=>!f.value&&!!n.field.comment),h=b(()=>[p.value||f.value&&n.field.comment?o.value:"",c.value?i.value:"",d.value?u.value:""].filter(Boolean).join(" "));return(x,$)=>(v(),_("div",{class:"flex min-w-0 flex-col gap-1.5","data-field":e.field.name},[m.value&&e.field.label?(v(),_("span",{key:0,id:`${l.value}-label`,class:"font-semibold"},[_e(T(e.field.label),1),e.field.required?(v(),_("span",SR," *")):ne("",!0)],8,CR)):!f.value&&!m.value?(v(),_("label",{key:1,id:`${l.value}-label`,for:l.value,class:"font-semibold"},[_e(T(e.field.label||e.field.name),1),e.field.required?(v(),_("span",AR," *")):ne("",!0)],8,ER)):ne("",!0),B(wR,{field:e.field,"model-value":e.modelValue,"control-id":l.value,invalid:c.value,"described-by":h.value,labels:e.labels,source:e.source,"record-id":e.recordId,"onUpdate:modelValue":$[0]||($[0]=g=>a("update:modelValue",g))},null,8,["field","model-value","control-id","invalid","described-by","labels","source","record-id"]),p.value?(v(),_("p",{key:2,id:o.value,class:"text-[13px] text-muted"},T(e.field.comment),9,TR)):ne("",!0),d.value?(v(),_("div",{key:3,id:u.value,role:"status","data-field-notice":"",class:"summer-callout summer-callout--warning text-[13px]!"},[(v(!0),_(pe,null,qe(e.notices,(g,C)=>(v(),_("p",{key:C,class:"summer-callout__text"},T(g),1))),128))],8,DR)):ne("",!0),c.value?(v(),_("div",{key:4,id:i.value,class:"flex flex-col gap-0.5 text-[13px] text-danger"},[(v(!0),_(pe,null,qe(e.errors,(g,C)=>(v(),_("p",{key:C,class:"flex items-center gap-1.5"},[B(s(yt),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(g),1)]))),128))],8,OR)):ne("",!0)],8,$R))}}),PR={class:"grid grid-cols-1 gap-x-6 gap-y-[22px] min-[600px]:grid-cols-2"},Ql=le({__name:"FormGrid",props:{fields:{},values:{},errors:{},notices:{},labels:{},source:{},recordId:{},idPrefix:{},scopePath:{}},emits:["update"],setup(e,{emit:t}){const n=e,a=t;xt(gu,{fields:b(()=>n.fields),values:b(()=>n.values),path:l=>n.scopePath?`${n.scopePath}.${l}`:l});function r(l){if(l.type===Gr)return"col-span-full";switch(l.span){case"left":return"min-[600px]:col-start-1";case"right":return"min-[600px]:col-start-2";case"auto":case"row":return"";default:return"col-span-full"}}return(l,o)=>(v(),_("div",PR,[(v(!0),_(pe,null,qe(e.fields,i=>(v(),U(MR,{key:i.name,class:ye(r(i)),field:i,"model-value":e.values[i.name],errors:e.errors[i.name],notices:e.notices?.[i.name],labels:e.labels?.[i.name],source:e.source,"record-id":e.recordId,"id-prefix":e.idPrefix,"onUpdate:modelValue":u=>a("update",i.name,u)},null,8,["class","field","model-value","errors","notices","labels","source","record-id","id-prefix","onUpdate:modelValue"]))),128))]))}}),RR=["data-preview-field"],IR=["id"],qR={class:"m-0 min-w-0"},NR={key:0,"data-switch":"true",class:"inline-flex h-6 items-center rounded-pill bg-ok-bg px-2.5 text-[12px] font-semibold text-ok-text"},LR={key:1,"data-switch":"false",class:"inline-flex h-6 items-center rounded-pill border border-border-strong px-2.5 text-[12px] font-semibold text-muted"},BR={class:"flex size-[22px] shrink-0 items-center justify-center rounded-full bg-primary text-[10px] font-bold text-on-primary","aria-hidden":"true"},FR={class:"font-semibold"},VR={key:0,class:"px-2 text-muted","data-empty":""},zR={key:0},jR={key:1,class:"text-muted","data-empty":""},UR={key:0},HR={key:1,class:"text-muted","data-empty":""},_c="flex min-h-input items-center rounded-control border border-border bg-subtle px-3.5 [overflow-wrap:anywhere]",_1=le({__name:"PreviewField",props:{field:{},value:{},labels:{},source:{},recordId:{},idPrefix:{}},setup(e){const t=e,n=new Set(["datepicker","fileupload","partial","permissioneditor","richeditor","repeater","money"]),a=b(()=>`${t.idPrefix??"preview"}-${t.field.name}`),r=b(()=>`${a.value}-label`),l=b(()=>{const p=t.field.type;return n.has(p)||xu(t.field)?"control":p==="checkbox"||p==="switch"?"toggle":p==="relation"?t.field.multiple?"chips":"relation":p==="textarea"?"textarea":"text"}),o=b(()=>({...t.field,readOnly:!0})),i=b(()=>I1(t.field));function u(p){return p==null||p===""}const c=b(()=>{const p=t.value;if(u(p)||typeof p=="object")return"";if(t.field.type==="dropdown"){const h=(t.field.options??[]).find(x=>String(x.value)===String(p));return h?h.label:String(p)}return String(p)}),d=b(()=>t.labels?.[0]?.label??""),f=b(()=>Array.isArray(t.value)?t.labels??[]:[]);function m(p){return p.trim().split(/\s+/).filter(Boolean).slice(0,2).map(x=>x.charAt(0).toUpperCase()).join("")}return(p,h)=>(v(),_("div",{class:"flex min-w-0 flex-col gap-1.5","data-preview-field":e.field.name},[S("dt",{id:r.value,class:"font-semibold"},T(e.field.label||e.field.name),9,IR),S("dd",qR,[l.value==="control"?(v(),U(jt(i.value),{key:0,field:o.value,"model-value":e.value,"control-id":a.value,labels:e.labels,source:e.source,"record-id":e.recordId},null,8,["field","model-value","control-id","labels","source","record-id"])):l.value==="toggle"?(v(),_(pe,{key:1},[s(Nf)(e.value)?(v(),_("span",NR,T(s(k)("backend::lang.list.column_switch_true")),1)):(v(),_("span",LR,T(s(k)("backend::lang.list.column_switch_false")),1))],64)):l.value==="chips"?(v(),_("div",{key:2,"data-preview-value":"",class:ye([_c,"flex-wrap gap-1.5 p-1.5"])},[(v(!0),_(pe,null,qe(f.value,x=>(v(),_("span",{key:String(x.value),"data-chip":"",class:"inline-flex min-h-[30px] items-center gap-1.5 rounded-pill bg-surface pr-3 pl-1"},[S("span",BR,T(m(x.label)),1),S("span",FR,T(x.label),1)]))),128)),f.value.length===0?(v(),_("span",VR,T(s(k)("backend::lang.list.empty_value")),1)):ne("",!0)])):l.value==="relation"?(v(),_("div",{key:3,"data-preview-value":"",class:ye(_c)},[d.value!==""?(v(),_("span",zR,T(d.value),1)):(v(),_("span",jR,T(e.field.emptyOption||s(k)("backend::lang.list.empty_value")),1))])):(v(),_("div",{key:4,"data-preview-value":"",class:ye([_c,l.value==="textarea"?"items-start! py-3 whitespace-pre-wrap":""])},[c.value!==""?(v(),_("span",UR,T(c.value),1)):(v(),_("span",HR,T(s(k)("backend::lang.list.empty_value")),1))],2))])],8,RR))}}),x1=new Set(["p","br","strong","b","em","i","u","s","h3","ul","ol","li","blockquote","a","div","span"]);function k1(e){const t=document.createElement("template");return t.innerHTML=e,t.content}function WR(e){if(e==="")return[];const t=new Set;for(const n of Array.from(k1(e).querySelectorAll("*")))t.add(n.localName.toLowerCase());return[...t]}function $m(e){return WR(e).some(t=>!x1.has(t))}const KR=["aria-labelledby","aria-describedby","data-repeater"],GR={key:0,"data-repeater-empty":"",class:"flex flex-col items-center gap-2 rounded-inner border border-dashed border-border-strong px-6 py-8 text-center"},YR={class:"font-semibold"},JR={key:0,class:"max-w-[420px] text-[13px] text-muted"},ZR={key:0,"data-repeater-slot":"",class:"h-12 rounded-inner border-2 border-dashed border-primary bg-sel"},XR=["data-repeater-row","data-repeater-key","onDragover"],QR=["data-repeater-handle","aria-label","onKeydown","onDragstart"],eI={class:"text-[13px] text-muted tabular-nums"},tI=["title"],nI={key:1,"data-repeater-errors":"",class:"inline-flex h-6 items-center rounded-pill bg-danger-soft px-2.5 text-[13px] font-semibold text-danger"},aI={key:2,class:"flex gap-1"},rI=["aria-label","disabled","onClick"],lI=["aria-label","disabled","onClick"],oI=["aria-label","aria-expanded","aria-controls","onClick"],iI=["aria-label","disabled","onClick"],sI=["id"],uI={key:0,class:"m-0 grid grid-cols-1 gap-x-6 gap-y-[22px] min-[600px]:grid-cols-2"},cI={key:2,class:"flex flex-wrap items-center gap-4"},dI={key:0,"data-repeater-count":"",class:"text-[13px] text-muted tabular-nums"},mo="inline-flex size-8 shrink-0 items-center justify-center rounded-pager text-muted transition-colors duration-150 ease-out hover:bg-hover hover:text-text disabled:cursor-not-allowed disabled:opacity-40",fI=le({__name:"RepeaterField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=ut(zf,null),l=b(()=>n.field.form?.fields??[]),o=b(()=>!!n.field.readOnly),i=b(()=>Array.isArray(n.modelValue)?n.modelValue.map(V=>V!==null&&typeof V=="object"&&!Array.isArray(V)?V:{}):[]),u=b(()=>typeof n.field.maxItems=="number"?n.field.maxItems:null),c=b(()=>typeof n.field.minItems=="number"?n.field.minItems:0),d=b(()=>n.field.prompt||k("backend::lang.repeater.add")),f=b(()=>`${n.controlId}-label`);let m=0;const p=R([]),h=R(new Set);let x;function $(){return m+=1,`r${m}`}je(()=>n.modelValue,V=>{V===x&&p.value.length===i.value.length||p.value.length!==i.value.length&&(p.value=i.value.map(()=>$()),h.value=new Set)},{immediate:!0});function g(V,K){p.value=K,x=V,a("update:modelValue",V)}function C(V){return V==null||V===""||V===!1||Array.isArray(V)&&V.length===0}function E(){const V={};for(const K of l.value)K.default!==void 0?V[K.name]=K.default:K.type==="checkbox"||K.type==="switch"?V[K.name]=!1:V[K.name]=null;return V}function D(V){return l.value.some(K=>{const te=V[K.name];return C(te)?!1:K.default===void 0||String(K.default)!==String(te)})}function O(V){return(k1(V).textContent??"").replace(/\s+/g," ").trim()}function L(V){const K=i.value[V]??{},te=l.value.find(M=>M.name===n.field.titleFrom),y=te?K[te.name]:void 0;let A="";return te&&!C(y)&&typeof y!="object"&&(te.type==="dropdown"?A=(te.options??[]).find(M=>String(M.value)===String(y))?.label??String(y):te.type==="richeditor"?A=O(String(y)):A=String(y).trim()),A!==""?A:k("backend::lang.repeater.untitled",{n:V+1})}function N(V,K){const te=`${n.field.name}.${K}.`,y={};for(const[A,M]of Object.entries(V??{}))A.startsWith(te)&&A.length>te.length&&(y[A.slice(te.length)]=M);return y}const z=b(()=>i.value.map((V,K)=>N(r?.errors.value,K))),w=b(()=>i.value.map((V,K)=>N(r?.notices.value,K))),P=V=>Object.keys(z.value[V]??{}).length;je(z,V=>{const K=V.flatMap((te,y)=>Object.keys(te).length>0?[p.value[y]]:[]);if(K.length>0){const te=new Set(h.value);for(const y of K)te.delete(y);h.value=te}});function Y(V){return o.value||!h.value.has(V)}function I(V,K){const te=new Set(h.value);K?te.delete(V):te.add(V),h.value=te}const X=b(()=>p.value.some(V=>!h.value.has(V)));function Z(){h.value=X.value?new Set(p.value):new Set}const j=R(null),H=R(null);function re(V){return j.value?.querySelector(`[data-repeater-handle="${V}"]`)??null}function ce(V,K,te){const y=i.value.map((A,M)=>M===V?{...A,[K]:te}:A);g(y,[...p.value]),r?.clearError(`${n.field.name}.${V}.${K}`)}async function $e(){if(o.value||u.value!==null&&i.value.length>=u.value)return;const V=$();g([...i.value,E()],[...p.value,V]),await Xe(),j.value?.querySelector(`[data-repeater-key="${V}"]`)?.querySelector('[data-repeater-body] input, [data-repeater-body] select, [data-repeater-body] textarea, [data-repeater-body] [contenteditable="true"]')?.focus()}async function me(V){const K=i.value[V];if(!K||o.value||i.value.length<=c.value)return;if(D(K)&&r){const M=L(V);if(!await r.confirm({message:k("backend::lang.repeater.remove_confirm",{title:M}),confirmLabel:k("backend::lang.repeater.remove"),danger:!0}))return}const te=p.value.filter((M,oe)=>oe!==V);g(i.value.filter((M,oe)=>oe!==V),te),await Xe();const y=te[V]??te[V-1],A=y?re(y):null;A?A.focus():H.value?.$el.focus()}async function be(V,K){const te=i.value.length;if(o.value||V===K||V<0||K<0||V>=te||K>=te)return;const y=[...i.value],A=[...p.value],[M]=y.splice(V,1),[oe]=A.splice(V,1);y.splice(K,0,M),A.splice(K,0,oe),g(y,A),await Xe(),re(oe)?.focus(),r?.announce(k("backend::lang.repeater.moved",{title:L(K),position:K+1,total:te}))}function fe(V,K){(V.key==="ArrowUp"||V.key==="ArrowDown")&&(V.preventDefault(),be(K,V.key==="ArrowUp"?K-1:K+1))}const Te=R(null),W=R(null);function ke(V,K){Te.value=K,W.value=null,V.dataTransfer?.setData("text/plain",p.value[K]??""),V.dataTransfer&&(V.dataTransfer.effectAllowed="move")}function ae(V,K){if(Te.value===null)return;V.preventDefault();const y=V.currentTarget.getBoundingClientRect();W.value=V.clientY>y.top+y.height/2?K+1:K}function Q(V){if(Te.value===null||W.value===null)return;V.preventDefault();const K=Te.value,te=W.value>K?W.value-1:W.value;ue(),be(K,te)}function ue(){Te.value=null,W.value=null}return(V,K)=>(v(),_("div",{ref_key:"root",ref:j,role:"group","aria-labelledby":f.value,"aria-describedby":e.describedBy||void 0,"data-repeater":e.field.name,class:"flex flex-col gap-4"},[i.value.length===0?(v(),_("div",GR,[S("p",YR,T(s(k)("backend::lang.repeater.empty")),1),o.value?ne("",!0):(v(),_("p",JR,T(s(k)("backend::lang.repeater.empty_hint",{prompt:d.value})),1))])):ne("",!0),(v(!0),_(pe,null,qe(i.value,(te,y)=>(v(),_(pe,{key:p.value[y]},[Te.value!==null&&W.value===y&&W.value!==Te.value&&W.value!==Te.value+1?(v(),_("div",ZR)):ne("",!0),S("div",{"data-repeater-row":y,"data-repeater-key":p.value[y],class:ye([[P(y)>0?"border-danger":"border-border",Te.value===y?"opacity-50":""],"rounded-inner border bg-surface"]),onDragover:A=>ae(A,y),onDrop:Q},[S("div",{class:ye([Y(p.value[y])?"rounded-t-inner border-b border-border":"rounded-inner","flex min-h-12 items-center gap-2 bg-subtle px-2"])},[o.value?ne("",!0):(v(),_("button",{key:0,type:"button",draggable:"true","data-repeater-handle":p.value[y],"aria-label":s(k)("backend::lang.repeater.move",{title:L(y)}),class:ye([mo,"cursor-grab"]),onKeydown:A=>fe(A,y),onDragstart:A=>ke(A,y),onDragend:ue},[B(s(gs),{size:16,"aria-hidden":"true"})],40,QR)),S("span",eI,T(y+1)+".",1),S("span",{"data-repeater-title":"",class:"min-w-0 flex-1 truncate font-semibold",title:L(y)},T(L(y)),9,tI),P(y)>0?(v(),_("span",nI,T(s(qr)("backend::lang.form.tab_errors",P(y))),1)):ne("",!0),o.value?ne("",!0):(v(),_("div",aI,[S("button",{type:"button","data-action":"repeater-up","aria-label":s(k)("backend::lang.repeater.move_up",{title:L(y)}),disabled:y===0,class:ye(mo),onClick:A=>be(y,y-1)},[B(s(Gy),{size:16,"aria-hidden":"true"})],8,rI),S("button",{type:"button","data-action":"repeater-down","aria-label":s(k)("backend::lang.repeater.move_down",{title:L(y)}),disabled:y===i.value.length-1,class:ye(mo),onClick:A=>be(y,y+1)},[B(s(lr),{size:16,"aria-hidden":"true"})],8,lI),S("button",{type:"button","data-action":"repeater-toggle","aria-label":s(k)(Y(p.value[y])?"backend::lang.repeater.collapse":"backend::lang.repeater.expand",{title:L(y)}),"aria-expanded":Y(p.value[y])?"true":"false","aria-controls":`${e.controlId}-${p.value[y]}-body`,class:ye(mo),onClick:A=>I(p.value[y],!Y(p.value[y]))},[B(s(lr),{size:16,class:ye([Y(p.value[y])?"rotate-180":"","transition-transform duration-150"]),"aria-hidden":"true"},null,8,["class"])],8,oI),S("button",{type:"button","data-action":"repeater-remove","aria-label":s(k)("backend::lang.repeater.remove_named",{title:L(y)}),disabled:i.value.length<=c.value,class:ye([mo,"hover:bg-danger-soft hover:text-danger"]),onClick:A=>me(y)},[B(s(mr),{size:16,"aria-hidden":"true"})],8,iI)]))],2),Y(p.value[y])?(v(),_("div",{key:0,id:`${e.controlId}-${p.value[y]}-body`,"data-repeater-body":"",class:"p-4"},[o.value?(v(),_("dl",uI,[(v(!0),_(pe,null,qe(l.value,A=>(v(),U(_1,{key:A.name,class:ye(A.span==="left"?"min-[600px]:col-start-1":A.span==="right"?"min-[600px]:col-start-2":"col-span-full"),field:{...A,readOnly:!0},value:te[A.name],source:e.source,"record-id":e.recordId,"id-prefix":`${e.controlId}-${p.value[y]}`},null,8,["class","field","value","source","record-id","id-prefix"]))),128))])):(v(),U(Ql,{key:1,fields:l.value,values:te,errors:z.value[y]??{},notices:w.value[y],source:e.source,"record-id":e.recordId,"id-prefix":`${e.controlId}-${p.value[y]}`,"scope-path":e.field.name,onUpdate:(A,M)=>ce(y,A,M)},null,8,["fields","values","errors","notices","source","record-id","id-prefix","scope-path","onUpdate"]))],8,sI)):ne("",!0)],42,XR)],64))),128)),Te.value!==null&&W.value===i.value.length&&W.value!==Te.value+1?(v(),_("div",{key:1,"data-repeater-slot":"",class:"h-12 rounded-inner border-2 border-dashed border-primary bg-sel",onDragover:K[0]||(K[0]=vt(()=>{},["prevent"])),onDrop:Q},null,32)):ne("",!0),o.value?ne("",!0):(v(),_("div",cI,[B(Ze,{ref_key:"addButton",ref:H,variant:"outline",size:"sm",icon:s(pi),"data-action":"repeater-add",disabled:u.value!==null&&i.value.length>=u.value,onClick:$e},{default:F(()=>[_e(T(d.value),1)]),_:1},8,["icon","disabled"]),u.value!==null?(v(),_("span",dI,T(s(k)("backend::lang.repeater.count",{current:i.value.length,max:u.value})),1)):ne("",!0),i.value.length>1?(v(),U(Ze,{key:1,variant:"ghost",size:"sm",class:"ml-auto","data-action":"repeater-toggle-all",onClick:Z},{default:F(()=>[_e(T(s(k)(X.value?"backend::lang.repeater.collapse_all":"backend::lang.repeater.expand_all")),1)]),_:1})):ne("",!0)]))],8,KR))}}),pI="modulepreload",vI=function(e,t){return new URL(e,t).href},Cm={},mI=function(t,n,a){let r=Promise.resolve();if(n&&n.length>0){let c=function(d){return Promise.all(d.map(f=>Promise.resolve(f).then(m=>({status:"fulfilled",value:m}),m=>({status:"rejected",reason:m}))))};const o=document.getElementsByTagName("link"),i=document.querySelector("meta[property=csp-nonce]"),u=i?.nonce||i?.getAttribute("nonce");r=c(n.map(d=>{if(d=vI(d,a),d in Cm)return;Cm[d]=!0;const f=d.endsWith(".css"),m=f?'[rel="stylesheet"]':"";if(a)for(let h=o.length-1;h>=0;h--){const x=o[h];if(x.href===d&&(!f||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${d}"]${m}`))return;const p=document.createElement("link");if(p.rel=f?"stylesheet":pI,f||(p.as="script"),p.crossOrigin="",p.href=d,u&&p.setAttribute("nonce",u),document.head.appendChild(p),f)return new Promise((h,x)=>{p.addEventListener("load",h),p.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${d}`)))})}))}function l(o){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=o,window.dispatchEvent(i),!i.defaultPrevented)throw o}return r.then(o=>{for(const i of o||[])i.status==="rejected"&&l(i.reason);return t().catch(l)})};function Sm(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);ne1(r)));return n.filter((r,l)=>a[l]?.status==="rejected")}const a1=new Map;async function r1(){let e=[];try{const{data:t,response:n}=await Le.GET("/field-types");e=n.ok&&t?t.data:[]}catch{return[]}for(const t of e){sM(t.styles??[]);const n=t.scripts??[];a1.set(t.element,Promise.allSettled(n.map(a=>e1(a))).then(a=>n.filter((r,l)=>a[l]?.status==="rejected")))}return e}function uM(e){return a1.get(e)??Promise.resolve([])}const cM={class:"flex min-h-screen items-center justify-center px-4",style:{background:"radial-gradient(ellipse at 50% 35%, #2b3a5c 0%, #1d2740 60%)"}},dM={class:"flex w-full max-w-[400px] flex-col gap-6"},fM={class:"flex items-center justify-center gap-3"},pM={class:"flex size-[34px] items-center justify-center rounded-full bg-accent-soft"},vM={class:"text-[22px] font-bold tracking-[-0.02em]"},mM={class:"flex flex-col gap-1.5"},hM={class:"font-semibold"},yM={class:"flex flex-col gap-1.5"},gM={class:"font-semibold"},bM=["aria-invalid"],_M={key:0,role:"alert",class:"flex items-center gap-2.5 rounded-control bg-[#fdf0f0] px-3.5 py-3 text-[#c62828]"},xM=["disabled"],kM=le({__name:"LoginView",setup(e){const t=An(),n=Ur(),a=R(""),r=R(""),l=R(!1),o=R(!1);async function i(){if(!o.value){o.value=!0,l.value=!1;try{if(!await DO(a.value.trim(),r.value)||!await Wb()){l.value=!0;return}r.value="",await Promise.all([Fy(),Vy().catch(()=>[]),r1()]),await n.replace(H1(t.query.redirect)??"/")}finally{o.value=!1}}}return(u,c)=>(v(),_("main",cM,[S("div",dM,[S("div",fM,[S("span",pM,[B(s(eu),{size:20,class:"text-accent","aria-hidden":"true"})]),c[2]||(c[2]=S("span",{class:"text-[18px] font-bold text-white"},[_e("Summer"),S("span",{class:"text-accent"},"CMS")],-1))]),S("form",{class:"flex flex-col gap-[18px] rounded-card bg-white p-8 text-[#141b2d] shadow-login",novalidate:"",onSubmit:vt(i,["prevent"])},[S("h1",vM,T(s(k)("backend::lang.auth.title")),1),S("label",mM,[S("span",hM,T(s(k)("backend::lang.auth.login")),1),Qn(S("input",{"onUpdate:modelValue":c[0]||(c[0]=d=>a.value=d),name:"login",type:"text",autocomplete:"username",required:"",class:"h-input rounded-control border border-[#d2d8e2] bg-white px-3.5"},null,512),[[ql,a.value]])]),S("label",yM,[S("span",gM,T(s(k)("backend::lang.auth.password")),1),Qn(S("input",{"onUpdate:modelValue":c[1]||(c[1]=d=>r.value=d),name:"password",type:"password",autocomplete:"current-password",required:"","aria-invalid":l.value?"true":void 0,class:ye([l.value?"border-[#c62828]":"border-[#d2d8e2]","h-input rounded-control border bg-white px-3.5"])},null,10,bM),[[ql,r.value]])]),l.value?(v(),_("div",_M,[B(s(yt),{size:18,"aria-hidden":"true"}),S("span",null,T(s(k)("backend::lang.auth.invalid")),1)])):ne("",!0),S("button",{type:"submit",disabled:o.value,class:"h-input rounded-control bg-[#22304d] font-semibold text-white disabled:opacity-60"},T(s(k)("backend::lang.auth.submit")),9,xM)],32)])]))}}),ym=/^\d+$/;function l1(e,t,n){const a=Ys(t),r=qn(t);if(!a||!r)return"/";const o=((e??"").trim().split(/[?#]/,1)[0]??"").split("/").filter(d=>d!==""),i=[a.vendor,a.plugin,a.controller];if(!i.every((d,f)=>o[f]?.toLowerCase()===d.toLowerCase()))return r;const c=o.slice(i.length);if(c.length===0)return r;if(c.length===1&&c[0]==="create")return`${r}/create`;if(c.length===2&&c[0]==="update"){const d=c[1]===":id"?String(n??""):c[1]??"";return ym.test(d)?`${r}/${d}`:r}if(c.length===2&&c[0]==="preview"){const d=c[1]===":id"?String(n??""):c[1]??"";return ym.test(d)?`${r}/${d}/preview`:r}return r}const gm=/^[0-9]+$/;function wM(e,t){const n=e.replace(/[\s ]/g,"");if(n==="")return{value:null,error:null};let a=n,r=!1;a.startsWith("-")&&(r=!0,a=a.slice(1));const l=a.match(/[.,]/g)??[];if(l.length>1)return{value:null,error:"invalid"};const[o,i=""]=a.split(/[.,]/);if(!gm.test(o??"")||l.length===1&&!gm.test(i))return{value:null,error:"invalid"};if(i.replace(/0+$/,"").length>t)return{value:null,error:"too_precise"};const u=i===""?o:`${o}.${i}`;return{value:`${r?"-":""}${u}`,error:null}}function $M(e){const[t,n]=e.split(".");if(n===void 0||n.length<=2)return e;let a=n.length;for(;a>2&&n.charAt(a-1)==="0";)a-=1;return`${t}.${n.slice(0,a)}`}function CM(e){return new Intl.NumberFormat(e).formatToParts(1.1).find(n=>n.type==="decimal")?.value??"."}function o1(e,t,n,a=4){const r={minimumFractionDigits:2,maximumFractionDigits:Math.max(2,a)},l=t===""?{style:"decimal",...r}:{style:"currency",currency:t,currencyDisplay:"code",...r};let o;try{o=new Intl.NumberFormat(n,l)}catch{return`${new Intl.NumberFormat(n,{style:"decimal",...r}).format(e)} ${t}`.trim()}return o.format(e)}const SM={key:0,"data-switch":"true",class:"inline-flex h-6 items-center gap-1 rounded-pill bg-ok-bg px-2.5 text-[12px] font-semibold text-ok-text"},EM={key:1,"data-switch":"false",class:"inline-flex h-6 items-center rounded-pill border border-border-strong px-2.5 text-[12px] font-semibold text-muted"},AM={key:1,class:"text-muted","data-empty":""},TM={key:2,class:"text-[13px] text-muted tabular-nums"},DM={key:3,"data-money":"",class:"tabular-nums whitespace-nowrap"},sl=le({__name:"CellValue",props:{column:{},value:{},row:{}},setup(e){const t=e;function n(p){return p==null||p===""}function a(p){return n(p)?"":Array.isArray(p)?p.map(a).filter(h=>h!=="").join(", "):typeof p=="boolean"?k(p?"backend::lang.list.column_switch_true":"backend::lang.list.column_switch_false"):typeof p=="object"?"":String(p)}function r(p){return String(p).padStart(2,"0")}function l(p){if(typeof p!="string"&&typeof p!="number")return"";const h=new Date(p);return Number.isNaN(h.getTime())?String(p):`${h.getFullYear()}-${r(h.getMonth()+1)}-${r(h.getDate())} ${r(h.getHours())}:${r(h.getMinutes())}`}function o(p){if(typeof p!="string")return"";const h=/^\d{4}-\d{2}-\d{2}/.exec(p.trim());return h?h[0]:p.trim()}function i(p){if(typeof p!="string")return"";const h=/(\d{2}):(\d{2})/.exec(p);return h?`${h[1]}:${h[2]}`:p.trim()}function u(p){return typeof p=="string"?p!==""&&p!=="0"&&p.toLowerCase()!=="false":!!p}function c(){if(t.column.currencyFrom){const p=t.row?.[t.column.currencyFrom];return typeof p=="string"?p.trim():""}return t.column.currency??""}function d(p){return typeof p!="string"||p.trim()===""?"":o1(p.trim(),c(),ar.value,4)}const f=b(()=>t.column.type==="switch"?"switch":t.column.type==="money"?"money":t.column.type==="datetime"?"datetime":t.column.type==="date"?"date":t.column.type==="time"?"time":"text"),m=b(()=>{switch(f.value){case"datetime":return l(t.value);case"date":return o(t.value);case"time":return i(t.value);case"money":return d(t.value);default:return a(t.value)}});return(p,h)=>f.value==="switch"&&!n(e.value)?(v(),_(pe,{key:0},[u(e.value)?(v(),_("span",SM,[B(s(Hy),{size:14,"aria-hidden":"true"}),_e(T(s(k)("backend::lang.list.column_switch_true")),1)])):(v(),_("span",EM,T(s(k)("backend::lang.list.column_switch_false")),1))],64)):m.value===""?(v(),_("span",AM,"—")):f.value==="datetime"||f.value==="date"||f.value==="time"?(v(),_("span",TM,T(m.value),1)):f.value==="money"?(v(),_("span",DM,T(m.value),1)):(v(),_(pe,{key:4},[_e(T(m.value),1)],64))}}),OM={key:0,class:"flex shrink-0 gap-2"},MM=["data-row-state"],PM=le({__name:"RowStateBadges",props:{states:{},labels:{}},setup(e){const t=e,n={deleted:"border border-border-strong text-muted",negative:"bg-danger-soft text-danger",disabled:"bg-subtle text-muted"},a=["deleted","negative","disabled"],r=b(()=>a.filter(l=>t.states.includes(l)));return(l,o)=>r.value.length>0?(v(),_("span",OM,[(v(!0),_(pe,null,qe(r.value,i=>(v(),_("span",{key:i,"data-row-state":i,class:ye([n[i],"inline-flex h-6 shrink-0 items-center rounded-pill px-2.5 text-[12px] font-semibold whitespace-nowrap"])},T(e.labels[i]??i),11,MM))),128))])):ne("",!0)}}),RM={class:"overflow-x-auto"},IM={class:"sticky top-0 z-10"},qM={class:"h-row-head border-y border-border bg-subtle"},NM={key:0,scope:"col","data-select":"",class:"w-[52px] pl-5"},LM=["aria-checked","aria-label","disabled"],BM=["aria-sort"],FM=["data-sort","onClick"],VM={key:1,class:"w-[56px] pr-5"},zM=["aria-busy"],jM={key:0,class:"pl-5"},UM={key:1,class:"pr-5"},HM={key:1},WM=["colspan"],KM={class:"text-muted"},GM=["aria-selected","data-row-states","onClick"],YM={key:0,"data-select":"",class:"pl-5"},JM=["aria-checked","aria-label","onClick"],ZM={key:0,class:"flex items-center gap-3"},XM={"data-avatar":"",class:"flex size-[30px] shrink-0 items-center justify-center rounded-full bg-subtle text-[12px] font-bold text-text","aria-hidden":"true"},QM=["onClick"],e5={key:1,class:"flex items-center gap-2"},t5={key:1,"data-trailing":"",class:"w-[56px] pr-5"},i1=le({__name:"DataTable",props:{columns:{},rows:{},loading:{type:Boolean,default:!1},rowLink:{type:Function,default:void 0},selectable:{type:Boolean,default:!1},selected:{default:()=>[]},sortable:{type:Boolean,default:!1},sort:{default:null},variant:{default:"list"},openable:{type:Boolean,default:!1},trailing:{type:Boolean,default:!1},rowStates:{default:()=>({})},stateLabels:{default:()=>({})}},emits:["update:selected","sort","open"],setup(e,{emit:t}){const n=e,a=t,r=Ur();function l(Z){const j=Z.id;return typeof j=="number"||typeof j=="string"?j:null}function o(Z,j){const H=l(Z);return H===null?`row-${j}`:String(H)}function i(Z){return n.rowLink?n.rowLink(Z):null}function u(Z,j){if(Z.target?.closest("a, button, input, label, select"))return;if(n.openable){const ce=Z.currentTarget?.querySelector("[data-row-open]")??null;a("open",j,ce);return}const re=i(j);re&&r.push(re)}const c=b(()=>n.rows.map(l).filter(Z=>Z!==null)),d=b(()=>new Set(n.selected.map(String))),f=b(()=>{const Z=c.value,j=Z.filter(H=>d.value.has(String(H))).length;return j===0?"false":j===Z.length?"true":"mixed"});function m(Z){const j=l(Z);return j!==null&&d.value.has(String(j))}function p(){a("update:selected",f.value==="true"?[]:[...c.value])}function h(Z){const j=l(Z);j!==null&&(d.value.has(String(j))?a("update:selected",n.selected.filter(H=>String(H)!==String(j))):a("update:selected",[...n.selected,j]))}function x(Z){if(n.sort?.column===Z.key)return n.sort.dir==="desc"?"descending":"ascending"}function $(Z){return n.sortable&&Z.sortable}const g=b(()=>n.variant==="relation"),C=b(()=>g.value?"h-[56px]":"h-row"),E=b(()=>g.value?3:8);function D(Z){return(typeof Z=="string"||typeof Z=="number"?String(Z):"").split(/[\s@._-]+/).filter(Boolean).slice(0,2).map(H=>H.charAt(0).toUpperCase()).join("")}const O=["deleted","negative","disabled"];function L(Z){const j=l(Z),H=j===null?void 0:n.rowStates[String(j)];return Array.isArray(H)?O.filter(re=>H.includes(re)):[]}function N(Z,j,H=[]){const re=H.includes("deleted")||H.includes("disabled"),ce=z(Z);return j===0?[re?"font-semibold text-muted":"font-semibold",ce].filter(Boolean).join(" "):[re||g.value||Z.relation?"text-muted":"",ce].filter(Boolean).join(" ")}function z(Z){return Z.type==="money"?"text-right":""}function w(Z){return["min-w-0 truncate",Z.includes("deleted")?"line-through":"no-underline",Z.includes("negative")?"text-danger":Z.includes("deleted")||Z.includes("disabled")?"text-muted":"text-text"]}const P=b(()=>n.columns.filter(Z=>!Z.invisible)),Y=b(()=>Math.max(P.value.length+(n.selectable?1:0)+(n.trailing?1:0),1));function I(Z,j){a("open",j,Z.currentTarget)}const X=["w-3/5","w-2/5","w-1/2","w-3/4","w-1/3","w-2/3","w-1/2","w-2/5"];return(Z,j)=>(v(),_("div",RM,[S("table",{class:ye([g.value?"min-w-[480px]":"min-w-[640px]","w-full border-collapse text-left"])},[S("thead",IM,[S("tr",qM,[e.selectable?(v(),_("th",NM,[S("button",{type:"button",role:"checkbox","aria-checked":f.value,"aria-label":s(k)("backend::lang.list.select_all"),disabled:e.loading||c.value.length===0,class:ye([f.value==="false"?"border-border-strong bg-surface":"border-primary bg-primary text-on-primary","flex size-[18px] items-center justify-center rounded-checkbox border disabled:opacity-60"]),onClick:p},[f.value==="mixed"?(v(),U(s(ng),{key:0,size:14,"aria-hidden":"true"})):f.value==="true"?(v(),U(s(rr),{key:1,size:14,"aria-hidden":"true"})):ne("",!0)],10,LM)])):ne("",!0),(v(!0),_(pe,null,qe(P.value,H=>(v(),_("th",{key:H.key,scope:"col","aria-sort":$(H)?x(H)??"none":void 0,class:ye([[x(H)?"text-text":"text-muted",z(H)],"px-3.5 text-[12px] font-semibold first:pl-5 last:pr-5"])},[$(H)?(v(),_("button",{key:0,type:"button","data-sort":H.key,class:"inline-flex items-center gap-1 font-semibold",onClick:re=>a("sort",H.key)},[_e(T(H.label)+" ",1),x(H)==="ascending"?(v(),U(s(Wy),{key:0,size:14,"aria-hidden":"true"})):x(H)==="descending"?(v(),U(s(jy),{key:1,size:14,"aria-hidden":"true"})):ne("",!0)],8,FM)):(v(),_(pe,{key:1},[_e(T(H.label),1)],64))],10,BM))),128)),e.trailing?(v(),_("td",VM)):ne("",!0)])]),S("tbody",{"aria-busy":e.loading?"true":void 0},[e.loading?(v(!0),_(pe,{key:0},qe(E.value,H=>(v(),_("tr",{key:`skeleton-${H}`,"data-skeleton":"",class:ye([C.value,"border-b border-border"])},[e.selectable?(v(),_("td",jM,[...j[0]||(j[0]=[S("span",{class:"block size-[18px] rounded-checkbox bg-skel"},null,-1)])])):ne("",!0),(v(!0),_(pe,null,qe(P.value,re=>(v(),_("td",{key:re.key,class:"px-3.5 first:pl-5 last:pr-5"},[S("span",{class:ye([X[(H-1)%X.length],"block h-3 rounded-[6px] bg-skel"])},null,2)]))),128)),e.trailing?(v(),_("td",UM)):ne("",!0)],2))),128)):e.rows.length===0?(v(),_("tr",HM,[S("td",{colspan:Y.value,class:"px-5 py-20 text-center"},[xe(Z.$slots,"empty",{},()=>[S("span",KM,T(s(k)("backend::lang.list.no_records")),1)])],8,WM)])):(v(!0),_(pe,{key:2},qe(e.rows,(H,re)=>(v(),_("tr",{key:o(H,re),class:ye([[C.value,m(H)?"bg-sel":i(H)||e.openable?"hover:bg-hover":"",i(H)||e.openable?"cursor-pointer":""],"border-b border-border transition-colors duration-150 ease-out"]),"aria-selected":e.selectable?m(H)?"true":"false":void 0,"data-row-states":L(H).length>0?L(H).join(" "):void 0,onClick:ce=>u(ce,H)},[e.selectable?(v(),_("td",YM,[S("button",{type:"button",role:"checkbox","aria-checked":m(H)?"true":"false","aria-label":s(k)("backend::lang.list.select_row"),class:ye([m(H)?"border-primary bg-primary text-on-primary":"border-border-strong bg-surface","flex size-[18px] items-center justify-center rounded-checkbox border"]),onClick:ce=>h(H)},[m(H)?(v(),U(s(rr),{key:0,size:14,"aria-hidden":"true"})):ne("",!0)],10,JM)])):ne("",!0),(v(!0),_(pe,null,qe(P.value,(ce,$e)=>(v(),_("td",{key:ce.key,class:ye([N(ce,$e,L(H)),"px-3.5 first:pl-5 last:pr-5"])},[g.value&&$e===0?(v(),_("span",ZM,[S("span",XM,T(D(H[ce.key])),1),e.openable?(v(),_("button",{key:0,type:"button","data-row-open":"",class:"min-w-0 truncate text-left font-semibold text-text",onClick:me=>I(me,H)},[B(sl,{column:ce,value:H[ce.key],row:H},null,8,["column","value","row"])],8,QM)):(v(),U(sl,{key:1,column:ce,value:H[ce.key],row:H},null,8,["column","value","row"]))])):$e===0&&L(H).length>0?(v(),_("span",e5,[i(H)?(v(),U(s(ea),{key:0,to:i(H),class:ye(w(L(H)))},{default:F(()=>[B(sl,{column:ce,value:H[ce.key],row:H},null,8,["column","value","row"])]),_:2},1032,["to","class"])):(v(),_("span",{key:1,class:ye(w(L(H)))},[B(sl,{column:ce,value:H[ce.key],row:H},null,8,["column","value","row"])],2)),B(PM,{states:L(H),labels:e.stateLabels},null,8,["states","labels"])])):$e===0&&i(H)?(v(),U(s(ea),{key:2,to:i(H),class:"text-text no-underline"},{default:F(()=>[B(sl,{column:ce,value:H[ce.key],row:H},null,8,["column","value","row"])]),_:2},1032,["to"])):(v(),U(sl,{key:3,column:ce,value:H[ce.key],row:H},null,8,["column","value","row"]))],2))),128)),e.trailing?(v(),_("td",t5,[xe(Z.$slots,"trailing",{row:H})])):ne("",!0)],10,GM))),128))],8,zM)],2)]))}}),n5=["aria-label"],a5={key:0,class:"flex flex-col gap-1 text-[13px]"},r5={class:"font-semibold text-muted"},l5=["data-filter","value","onChange"],o5=["value"],i5={key:1,class:"flex flex-col gap-1 text-[13px]"},s5={class:"mb-1 font-semibold text-muted"},u5={class:"flex items-center gap-2"},c5=["data-filter","aria-label","value","onChange"],d5=["data-filter","aria-label","value","onChange"],f5={key:2,class:"flex flex-col gap-1 text-[13px]"},p5={class:"font-semibold text-muted"},v5=["data-filter","value","onChange"],m5=["value"],po="",Fi="h-button rounded-control border border-border-strong bg-surface px-3 text-text",h5=le({__name:"FilterBar",props:{filters:{},values:{},source:{}},emits:["update"],setup(e,{emit:t}){const n=e,a=t;function r(f){if(f.options&&f.options.length>0)return f.options.map(p=>({value:JSON.stringify(p.value),label:p.label}));const m=[];return f.trueValue!==void 0&&m.push({value:JSON.stringify(f.trueValue),label:k("backend::lang.list.column_switch_true")}),f.falseValue!==void 0&&m.push({value:JSON.stringify(f.falseValue),label:k("backend::lang.list.column_switch_false")}),m}const l=R({});async function o(f){const{data:m}=await Le.GET("/{vendor}/{plugin}/{controller}/filters/{scope}/options",{params:{path:{...n.source,scope:f.name}}});l.value={...l.value,[f.name]:m?.data??[]}}wt(()=>{for(const f of n.filters)f.type==="scope"&&o(f)});const i=Mn({});function u(){for(const f of n.filters){if(f.type!=="daterange")continue;const[m="",p=""]=(n.values[f.name]??"").split(".."),h=i[f.name];(!h||n.values[f.name]!==void 0||h.from!==""&&h.to!=="")&&(i[f.name]={from:m,to:p})}}je(()=>n.values,u,{immediate:!0,deep:!0});function c(f,m,p){const h={...i[f.name]??{from:"",to:""},[m]:p};i[f.name]=h,h.from!==""&&h.to!==""?a("update",f.name,`${h.from}..${h.to}`):(h.from===""&&h.to===""||n.values[f.name]!==void 0)&&a("update",f.name,null)}function d(f,m){a("update",f.name,m===po?null:m)}return(f,m)=>(v(),_("div",{role:"group","aria-label":s(k)("backend::lang.list.filters"),"data-filter-bar":"",class:"flex flex-wrap items-end gap-4 border-t border-border px-5 py-3.5"},[(v(!0),_(pe,null,qe(e.filters,p=>(v(),_(pe,{key:p.name},[p.type==="switch"?(v(),_("label",a5,[S("span",r5,T(p.label||p.name),1),S("select",{"data-filter":p.name,value:e.values[p.name]??po,class:ye(Fi),onChange:h=>d(p,h.target.value)},[S("option",{value:po},T(s(k)("backend::lang.list.filter_all")),1),(v(!0),_(pe,null,qe(r(p),h=>(v(),_("option",{key:h.value,value:h.value},T(h.label),9,o5))),128))],40,l5)])):p.type==="daterange"?(v(),_("fieldset",i5,[S("legend",s5,T(p.label||p.name),1),S("div",u5,[S("input",{type:"date","data-filter":`${p.name}-from`,"aria-label":s(k)("backend::lang.list.filter_from"),value:i[p.name]?.from??"",class:ye(Fi),onChange:h=>c(p,"from",h.target.value)},null,40,c5),m[0]||(m[0]=S("span",{"aria-hidden":"true"},"–",-1)),S("input",{type:"date","data-filter":`${p.name}-to`,"aria-label":s(k)("backend::lang.list.filter_to"),value:i[p.name]?.to??"",class:ye(Fi),onChange:h=>c(p,"to",h.target.value)},null,40,d5)])])):p.type==="scope"?(v(),_("label",f5,[S("span",p5,T(p.label||p.name),1),(v(),_("select",{key:`${p.name}-${l.value[p.name]?.length??-1}`,"data-filter":p.name,value:e.values[p.name]??po,class:ye(Fi),onChange:h=>d(p,h.target.value)},[S("option",{value:po},T(s(k)("backend::lang.list.filter_all")),1),(v(!0),_(pe,null,qe(l.value[p.name]??[],h=>(v(),_("option",{key:h.value,value:h.value},T(h.label),9,m5))),128))],40,v5))])):ne("",!0)],64))),128))],8,n5))}}),y5=["type","disabled"],Ze=le({__name:"Button",props:{variant:{default:"outline"},size:{default:"md"},type:{default:"button"},disabled:{type:Boolean,default:!1},icon:{default:void 0},to:{default:void 0}},setup(e){const t=e,n={primary:"bg-primary text-on-primary hover:opacity-90",outline:"border border-border-strong bg-surface text-text hover:bg-hover",ghost:"text-muted hover:bg-hover hover:text-text",danger:"border border-danger bg-surface text-danger hover:bg-danger-soft"},a=b(()=>["inline-flex shrink-0 items-center justify-center gap-2 rounded-control px-4 font-semibold whitespace-nowrap no-underline transition-colors duration-150 ease-out disabled:cursor-not-allowed disabled:opacity-60",t.size==="sm"?"h-[38px]":"h-button",n[t.variant]]);return(r,l)=>e.to!==void 0?(v(),U(s(ea),{key:0,to:e.to,class:ye(a.value)},{default:F(()=>[e.icon?(v(),U(jt(e.icon),{key:0,size:16,"aria-hidden":"true"})):ne("",!0),xe(r.$slots,"default")]),_:3},8,["to","class"])):(v(),_("button",{key:1,type:e.type,disabled:e.disabled,class:ye(a.value)},[e.icon?(v(),U(jt(e.icon),{key:0,size:16,"aria-hidden":"true"})):ne("",!0),xe(r.$slots,"default")],10,y5))}}),g5=le({__name:"BulkActionsMenu",props:{actions:{},disabled:{type:Boolean}},emits:["select"],setup(e,{expose:t,emit:n}){const a=n,r=R(null);function l(){const o=r.value?.$el;o instanceof HTMLElement&&o.focus()}return t({focus:l}),(o,i)=>(v(),U(s(Pb),{modal:!1},{default:F(()=>[B(s(qb),{"as-child":"",disabled:e.disabled},{default:F(()=>[B(Ze,{ref_key:"trigger",ref:r,variant:"outline",size:"md","data-action":"bulk-actions",disabled:e.disabled},{default:F(()=>[_e(T(s(k)("backend::lang.list.bulk_actions"))+" ",1),B(s(lr),{size:16,class:"text-muted","aria-hidden":"true"})]),_:1},8,["disabled"])]),_:1},8,["disabled"]),B(s(Ib),null,{default:F(()=>[B(s(Rb),{"data-bulk-menu":"",align:"end","side-offset":8,class:"z-50 flex w-[240px] max-w-[320px] flex-col rounded-[14px] border border-border bg-surface p-2 text-text shadow-menu"},{default:F(()=>[(v(!0),_(pe,null,qe(e.actions,u=>(v(),U(s(fd),{key:u.name,"data-bulk-action":u.name,class:"flex min-h-10 cursor-pointer items-center rounded-control px-3 py-2 outline-none transition-colors duration-150 ease-out data-[highlighted]:bg-hover",onSelect:c=>a("select",u.name)},{default:F(()=>[_e(T(u.label),1)]),_:2},1032,["data-bulk-action","onSelect"]))),128))]),_:1})]),_:1})]),_:1}))}}),b5={class:"flex flex-wrap items-center justify-between gap-3 px-5 py-4"},_5={key:0,class:"relative block w-[320px] max-w-full"},x5={class:"sr-only"},k5=["value","placeholder"],w5={key:1},$5={class:"flex flex-wrap items-center justify-end gap-2.5"},C5={key:0,"data-selected-pill":"",class:"inline-flex h-8 items-center gap-1.5 rounded-pill bg-sel px-3 text-[13px] font-semibold"},S5=le({__name:"ListToolbar",props:{showSearch:{type:Boolean},search:{},searchPrompt:{},buttons:{},selectedCount:{},selectedLabel:{},deleteLabel:{},actions:{default:()=>[]},busyAction:{default:null},bulkActions:{default:()=>[]},bulkBusy:{type:Boolean,default:!1}},emits:["update:search","delete","action","bulk"],setup(e,{expose:t,emit:n}){const a=e,r=n,l=b(()=>new Map(a.actions.map(u=>[u.name,u.label]))),o=R(null);function i(){o.value?.focus()}return t({focusBulk:i}),(u,c)=>(v(),_("div",b5,[e.showSearch?(v(),_("label",_5,[S("span",x5,T(s(k)("backend::lang.list.search")),1),B(s(Qs),{size:18,class:"pointer-events-none absolute top-1/2 left-3.5 -translate-y-1/2 text-muted","aria-hidden":"true"}),S("input",{type:"search","data-list-search":"",value:e.search,placeholder:e.searchPrompt,class:"h-button w-full rounded-control border border-transparent bg-subtle pr-3.5 pl-10",onInput:c[0]||(c[0]=d=>r("update:search",d.target.value))},null,40,k5)])):(v(),_("span",w5)),S("div",$5,[e.selectedCount>0?(v(),_("span",C5,[B(s(rr),{size:14,"aria-hidden":"true"}),_e(T(e.selectedLabel),1)])):ne("",!0),e.bulkActions.length>0?(v(),U(g5,{key:1,ref_key:"bulkMenu",ref:o,actions:e.bulkActions,disabled:e.selectedCount===0||e.bulkBusy,onSelect:c[1]||(c[1]=d=>r("bulk",d))},null,8,["actions","disabled"])):ne("",!0),(v(!0),_(pe,null,qe(e.buttons,d=>(v(),_(pe,{key:d},[d==="delete"?(v(),U(Ze,{key:0,"data-action":"delete",variant:e.selectedCount>0?"danger":"outline",icon:s(mr),disabled:e.selectedCount===0,onClick:c[2]||(c[2]=f=>r("delete"))},{default:F(()=>[_e(T(e.deleteLabel),1)]),_:1},8,["variant","icon","disabled"])):l.value.has(d)?(v(),U(Ze,{key:1,variant:"outline",size:"md","data-action":d,disabled:e.busyAction===d,"aria-busy":e.busyAction===d?"true":void 0,onClick:f=>r("action",d)},{default:F(()=>[_e(T(l.value.get(d)),1)]),_:2},1032,["data-action","disabled","aria-busy","onClick"])):ne("",!0)],64))),128))])]))}}),E5={class:"flex flex-wrap items-center gap-x-6 gap-y-3 border-t border-border px-5 py-3.5 text-[13px] text-muted"},A5={"data-range":""},T5={key:0,class:"flex items-center gap-2"},D5=["value"],O5=["value"],M5=["aria-label"],P5=["disabled"],R5={key:0,"aria-hidden":"true",class:"px-1"},I5=["data-page","aria-current","onClick"],q5=["disabled"],mc="inline-flex h-pager min-w-pager items-center justify-center gap-1 rounded-pager border border-border px-2.5 text-[13px] text-text disabled:cursor-not-allowed disabled:opacity-60 hover:bg-hover",s1=le({__name:"Pagination",props:{meta:{},loading:{type:Boolean},perPageOptions:{},perPage:{}},emits:["page","perPage"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>n.meta?.total??0),l=b(()=>n.meta?.page??1),o=b(()=>Math.max(n.meta?.last_page??1,1)),i=b(()=>{const d=n.meta;if(!d||d.total===0)return qr("backend::lang.list.results",0);const f=(d.page-1)*d.per_page+1,m=Math.min(d.page*d.per_page,d.total);return k("backend::lang.list.pagination_range",{from:f,to:m,total:d.total})}),u=b(()=>{const d=o.value,f=l.value,m=new Set([1,d,f-1,f,f+1].filter(x=>x>=1&&x<=d));f<=3&&[2,3].forEach(x=>x<=d&&m.add(x)),f>=d-2&&[d-1,d-2].forEach(x=>x>=1&&m.add(x));const p=[...m].sort((x,$)=>x-$),h=[];return p.forEach((x,$)=>{const g=p[$-1];g!==void 0&&x-g>1&&h.push(null),h.push(x)}),h});function c(d){const f=Number(d.target.value);Number.isFinite(f)&&f>0&&a("perPage",f)}return(d,f)=>(v(),_("footer",E5,[S("span",A5,T(e.loading?s(k)("backend::lang.list.loading"):i.value),1),e.perPageOptions.length>1?(v(),_("label",T5,[S("span",null,T(s(k)("backend::lang.list.records_per_page")),1),S("select",{"data-per-page":"",value:String(e.perPage),class:"h-pager rounded-pager border border-border-strong bg-surface px-2 text-text",onChange:c},[(v(!0),_(pe,null,qe(e.perPageOptions,m=>(v(),_("option",{key:m,value:String(m)},T(m),9,O5))),128))],40,D5)])):ne("",!0),!e.loading&&r.value>0?(v(),_("nav",{key:1,"aria-label":s(k)("backend::lang.list.pagination"),class:"ml-auto flex items-center gap-1.5"},[S("button",{type:"button","data-page":"prev",class:ye(mc),disabled:l.value<=1,onClick:f[0]||(f[0]=m=>a("page",l.value-1))},[B(s(Xs),{size:14,"aria-hidden":"true"}),_e(T(s(k)("backend::lang.list.prev_page")),1)],8,P5),(v(!0),_(pe,null,qe(u.value,(m,p)=>(v(),_(pe,{key:m??`gap-${p}`},[m===null?(v(),_("span",R5,"…")):(v(),_("button",{key:1,type:"button","data-page":m,"aria-current":m===l.value?"page":void 0,class:ye([mc,m===l.value?"border-transparent bg-sel font-bold":""]),onClick:h=>m!==l.value&&a("page",m)},T(m),11,I5))],64))),128)),S("button",{type:"button","data-page":"next",class:ye(mc),disabled:l.value>=o.value,onClick:f[1]||(f[1]=m=>a("page",l.value+1))},[_e(T(s(k)("backend::lang.list.next_page")),1),B(s(di),{size:14,"aria-hidden":"true"})],8,q5)],8,M5)):ne("",!0)]))}}),N5={role:"alert","data-extension-failure":"",class:"flex min-h-input items-center rounded-control border-[1.5px] border-dashed border-border-strong bg-subtle px-3.5 py-2.5 text-[13px] text-muted"},L5={class:"flex min-w-0 items-start gap-2.5"},B5={class:"min-w-0 [overflow-wrap:anywhere]"},yu=le({__name:"ExtensionFailure",props:{text:{}},setup(e){return(t,n)=>(v(),_("div",N5,[S("span",L5,[B(s(yt),{size:16,class:"mt-0.5 shrink-0 text-danger","aria-hidden":"true"}),S("span",B5,T(e.text),1)])]))}}),F5=new Set(["div","span","p","strong","em","b","i","u","s","small","mark","code","pre","br","hr","ul","ol","li","dl","dt","dd","h2","h3","h4","h5","h6","table","thead","tbody","tfoot","tr","th","td","caption","section","header","footer","figure","figcaption","blockquote","q","abbr","time","data","meter","progress","sup","sub","a","img"]),V5=new Set(["script","style","template","iframe","object","embed","noscript","textarea","title","xmp","svg","math","form","input","button","select","link","meta","base"]),z5=32,j5=2e3,U5=new Set(["class","title","lang","dir","role"]),H5={a:new Set(["href"]),img:new Set(["src","alt","width","height"]),td:new Set(["colspan","rowspan","scope"]),th:new Set(["colspan","rowspan","scope"]),time:new Set(["datetime"]),data:new Set(["value"]),meter:new Set(["value","min","max","low","high","optimum"]),progress:new Set(["value","max"])},W5=/^(aria|data)-[a-z0-9_-]+$/;function K5(e,t){if(e==="")return!1;for(const n of e){const a=n.codePointAt(0)??0;if(a<=32||a===127)return!1}return e.startsWith("#")?t:e.startsWith("/")?e.length===1||e[1]!=="/"&&e[1]!=="\\":!1}function G5(e,t,n){return U5.has(t)||H5[e]?.has(t)===!0||W5.test(t)?e==="a"&&t==="href"||e==="img"&&t==="src"?K5(n,e==="a"):!0:!1}function Y5(e,t){const n={};for(const[a,r]of Object.entries(t??{})){const l=a.toLowerCase();typeof r=="string"&&G5(e,l,r)&&(n[l]=r)}return n}function yd(e,t,n){const a=[];for(const r of e??[]){if(n.left<=0)break;if(r.tag===void 0||r.tag===""){typeof r.text=="string"&&r.text!==""&&(n.left-=1,a.push(r.text));continue}const l=r.tag.toLowerCase();if(V5.has(l))continue;if(!F5.has(l)){a.push(...yd(r.children,t,n));continue}if(t+1>z5)continue;n.left-=1;const o=yd(r.children,t+1,n);a.push(Sn(l,Y5(l,r.attrs),o.length>0?o:void 0))}return a}function J5(e){return yd(e,0,{left:j5})}const Z5={key:1,"data-partial-loading":"","aria-busy":"true"},X5=["data-partial","aria-busy"],If=le({__name:"PartialHost",props:{source:{},name:{},recordId:{default:null},variant:{},reloadKey:{default:0},hint:{type:Boolean,default:!1}},setup(e){const t=e,n=R(null),a=R(!1),r=R(!1);let l=0;const o=u=>J5(u.nodes);o.props=["nodes"];async function i(){const u=++l;r.value=!0;let c=null;try{c=(await Le.GET("/{vendor}/{plugin}/{controller}/partials/{name}",{params:{path:{...t.source,name:t.name},query:t.recordId!=null?{id:t.recordId}:void 0}})).data?.data.nodes??null}catch{c=null}u===l&&(r.value=!1,a.value=c===null,n.value=c)}return je(()=>t.reloadKey,()=>{i()}),i(),(u,c)=>a.value?(v(),U(yu,{key:0,"data-partial-failed":"",text:s(k)("backend::lang.extension.partial_failed")},null,8,["text"])):n.value===null?(v(),_("div",Z5,[S("div",{"data-partial-skeleton":"",class:ye([e.hint?"h-[68px] w-full rounded-inner":e.variant==="header"?"h-[80px] w-full rounded-card":"h-[44px] w-full rounded-control","bg-skel"]),"aria-hidden":"true"},null,2)])):n.value.length>0?(v(),_("div",{key:2,class:"summer-partial","data-partial":e.variant,"aria-busy":r.value?"true":void 0},[B(o,{nodes:n.value},null,8,["nodes"])],8,X5)):ne("",!0)}}),Q5={class:"flex gap-2.5"},eP=["disabled","aria-busy"],gr=le({__name:"ConfirmDialog",props:{open:{type:Boolean},message:{},title:{default:void 0},confirmLabel:{default:void 0},cancelLabel:{default:void 0},danger:{type:Boolean,default:!1},busy:{type:Boolean,default:!1}},emits:["update:open","confirm","cancel"],setup(e,{emit:t}){const n=e,a=t;function r(o){!o&&n.busy||(a("update:open",o),o||a("cancel"))}function l(){n.busy||(a("confirm"),a("update:open",!1))}return(o,i)=>(v(),U(s(HA),{open:e.open,"onUpdate:open":r},{default:F(()=>[B(s(jA),null,{default:F(()=>[B(s(VA),{class:"pointer-events-auto fixed inset-0 z-[80] bg-overlay"}),B(s(IA),{"data-confirm-dialog":"",class:"pointer-events-auto fixed top-1/2 left-1/2 z-[90] flex w-[calc(100%-32px)] max-w-[440px] -translate-x-1/2 -translate-y-1/2 flex-col gap-4 rounded-modal bg-surface p-6 text-text shadow-pop"},{default:F(()=>[B(s(KA),{class:"text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[_e(T(e.title??s(k)("backend::lang.form.confirm")),1)]),_:1}),B(s(BA),{class:"text-muted [overflow-wrap:anywhere]"},{default:F(()=>[_e(T(e.message),1)]),_:1}),S("div",Q5,[B(s(NA),{"data-action":"cancel",disabled:e.busy,class:"inline-flex h-button flex-1 items-center justify-center rounded-control border border-border-strong bg-surface font-semibold hover:bg-hover disabled:cursor-not-allowed disabled:opacity-60"},{default:F(()=>[_e(T(e.cancelLabel??s(k)("backend::lang.form.cancel")),1)]),_:1},8,["disabled"]),S("button",{type:"button","data-action":"confirm",disabled:e.busy,"aria-busy":e.busy?"true":void 0,class:ye([e.danger?"bg-danger text-white":"bg-primary text-on-primary","inline-flex h-button flex-1 items-center justify-center gap-2 rounded-control font-semibold hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-60"]),onClick:vt(l,["prevent"])},[e.busy?(v(),U(s(Sl),{key:0,size:16,class:"animate-spin","aria-hidden":"true"})):ne("",!0),_e(" "+T(e.confirmLabel??s(k)("backend::lang.form.confirm")),1)],10,eP)])]),_:1})]),_:1})]),_:1},8,["open"]))}});function br(){const e=R(null),t=R(!1);let n=null,a=null;function r(u){const c=n;n=null,a=null,e.value=null,c?.(u)}function l(u,c){return r(!1),e.value=u,a=c??null,new Promise(d=>{n=d})}async function o(){if(t.value)return;const u=a;if(u){t.value=!0;try{await u()}finally{t.value=!1}}r(!0)}function i(){t.value||r(!1)}return{request:e,busy:t,ask:l,confirm:o,cancel:i}}const tP={class:"flex flex-col gap-5"},nP={class:"flex flex-wrap items-end justify-between gap-4"},aP={class:"flex flex-col"},rP={class:"text-[26px] font-bold tracking-[-0.02em]"},lP={key:0,"data-record-count":"",class:"text-muted"},oP={key:0,class:"flex items-center gap-2.5"},iP={class:"overflow-hidden rounded-card border border-border bg-surface shadow-card"},sP={key:2,"data-list-failed":"",class:"flex flex-wrap items-center justify-between gap-3 border-t border-border px-5 py-4"},uP={role:"alert",class:"text-danger"},cP={key:0,"data-empty-search":"",class:"flex flex-col items-center gap-3"},dP={class:"flex size-14 items-center justify-center rounded-full bg-subtle text-muted"},fP={class:"text-[17px] font-bold"},pP={class:"max-w-[420px] text-muted"},vP={key:1,"data-empty-list":"",class:"text-muted"},mP=300,hP=le({__name:"ListView",setup(e){const t=An(),n=Ur(),a={vendor:String(t.params.vendor??""),plugin:String(t.params.plugin??""),controller:String(t.params.controller??"")},r=ii(a),l=qn(r)??"/",o=R(null),i=R([]),u=R(null),c=R(!0),d=R(!1),f=R(!1),m=b(()=>d.value||f.value),p=R([]),h=R(!1),x=R(0),$=br(),g=b(()=>Bb(t.query)),C=R(g.value.search??""),E=b(()=>o.value?.messages),D=b(()=>o.value?.title?o.value.title:ui(a.vendor,a.plugin)?.sideMenu.find(Ce=>Ce.controller===r)?.label??r),O=b(()=>u.value?Je(E.value?.recordCount,u.value.total):""),L=b(()=>o.value?.toolbarButtons??[]),N=b(()=>L.value.filter(se=>se==="create")),z=b(()=>{const se=o.value?.reorder;if(!se)return null;const Ce=se.partition?.column,he=Ce?o.value?.filters.find(Fe=>Fe.column===Ce||Fe.name===Ce):void 0,Re=he?g.value.filter?.[he.name]:void 0;return{path:`${l}/reorder`,query:Re!==void 0&&Re!==""?{partition:String(Re)}:{}}}),w=b(()=>o.value?.toolbarActions??[]),P=b(()=>L.value.filter(se=>se==="delete"||w.value.some(Ce=>Ce.name===se))),Y=R(null),I=b(()=>u.value?.row_states??{}),X=b(()=>({deleted:Je(E.value?.rowStateDeleted),negative:Je(E.value?.rowStateNegative),disabled:Je(E.value?.rowStateDisabled)})),Z=b(()=>(o.value?.bulkActions??[]).filter(se=>se.name!=="delete")),j=R(!1),H=R(null),re=b(()=>{const se=o.value?.perPageOptions??[];return se.length>0?se:[o.value?.recordsPerPage||20]}),ce=b(()=>g.value.per_page??u.value?.per_page??o.value?.recordsPerPage??20),$e=b(()=>g.value.sort?{column:g.value.sort,dir:g.value.dir==="desc"?"desc":"asc"}:null);function me(se){const Ce=o.value?.recordUrl,he=se.id;return!Ce||typeof he!="number"&&typeof he!="string"?null:l1(Ce,r,he)}function be(se){Bi(r,se),n.replace({path:t.path,query:Es(se)})}const fe=_l({}),Te=b(()=>_l(g.value)!==fe);let W=0,ke=null;function ae(){be({})}async function Q(se=!1){const Ce=++W;c.value=!0,f.value=!1;let he=null;try{he=await V()}catch{he=null}if(Ce!==W)return;if(!he?.data&&se){Bi(r,{}),n.replace({path:t.path,query:{}});return}if(!he?.data&&he?.response?.status===404&&await ue(Ce))return;if(i.value=he?.data?.data??[],u.value=he?.data?.meta??null,f.value=!he?.data,c.value=!1,he?.response?.status===422){Bi(r,{});return}const Re=u.value?.last_page??0;Re>=1&&(u.value?.page??0)>Re&&be({...g.value,page:Re})}async function ue(se){try{const{data:Ce}=await Le.GET("/{vendor}/{plugin}/{controller}/singleton",{params:{path:a}});return se!==W?!0:Ce?(await n.replace(`${l}/${Ce.data.id}`),!0):!1}catch{return!1}}function V(){return Le.GET("/{vendor}/{plugin}/{controller}",{params:{path:a,query:g.value}})}async function K(){const se=await Le.GET("/{vendor}/{plugin}/{controller}/schema/list",{params:{path:a}});o.value=se.data?.data??null,d.value=!o.value,o.value&&Rf(r,o.value.assets)}K(),je(()=>_l(g.value),se=>{if(se===fe){const he=TO(r),Re=_l(he);if(Re!==fe){ke=Re,n.replace({path:t.path,query:Es(he)});return}}const Ce=ke!==null&&ke===se;ke=null,Bi(r,g.value),p.value=[],C.value=g.value.search??"",Q(Ce)},{immediate:!0});let te=null;function y(se){C.value=se,te!==null&&clearTimeout(te),te=setTimeout(()=>{te=null;const Ce=se.trim();be({...g.value,search:Ce===""?void 0:Ce,page:void 0})},mP)}At(()=>{te!==null&&clearTimeout(te)});function A(){C.value="",be({...g.value,search:void 0,page:void 0})}function M(se){const Ce=$e.value;Ce?.column!==se?be({...g.value,sort:se,dir:"asc",page:void 0}):Ce.dir==="asc"?be({...g.value,sort:se,dir:"desc",page:void 0}):be({...g.value,sort:void 0,dir:void 0,page:void 0})}function oe(se){be({...g.value,page:se})}function J(se){be({...g.value,per_page:se,page:void 0})}function de(se,Ce){const he={...g.value.filter??{}};Ce===null?delete he[se]:he[se]=Ce,be({...g.value,filter:he,page:void 0})}async function we(){const se=p.value.map(Number).filter(he=>Number.isInteger(he)&&he>0);if(!(se.length===0||h.value||!await $.ask({message:Je(E.value?.deleteConfirm,se.length),confirmLabel:k("backend::lang.form.delete"),danger:!0}))){h.value=!0;try{const he=await Le.POST("/{vendor}/{plugin}/{controller}/bulk-delete",{params:{path:a},body:{ids:se}});if(he.data){Ne(Je(E.value?.deleted,he.data.data.deleted)),p.value=[],await Q(),x.value+=1;return}Ne(he.error?.error.message||k("backend::lang.list.delete_failed"),"danger")}catch{Ne(k("backend::lang.list.delete_failed"),"danger")}finally{h.value=!1}}}async function Ae(se){const Ce=Z.value.find(Ue=>Ue.name===se),he=p.value.map(Number).filter(Ue=>Number.isInteger(Ue)&&Ue>0);if(!Ce||he.length===0||j.value)return;const Re=Ce.label??se;let Fe=0,Ge=null,ge="";const Se=await $.ask({message:Ce.confirm||qr("backend::lang.list.bulk_confirm",he.length,{action:Re}),confirmLabel:Re,danger:!1},async()=>{j.value=!0;try{const Ue=await Le.POST("/{vendor}/{plugin}/{controller}/bulk/{action}",{params:{path:{...a,action:se}},body:{ids:he}});Fe=Ue.response.status,Ge=Ue.data?.data??null,ge=Ue.error?.error.message??""}catch{Fe=0}finally{j.value=!1}});if(await new Promise(Ue=>setTimeout(Ue,0)),H.value?.focusBulk(),!Se)return;const Be=Ge;if(Be){Ne(Be.message||qr("backend::lang.list.bulk_done",Be.affected)),p.value=[],await Q(),x.value+=1;return}if(Fe===409){Ne(k("backend::lang.list.bulk_stale"),"danger"),p.value=[],await Q();return}if(Fe===403){Ne(ge||k("backend::lang.list.action_forbidden"),"danger");return}Ne(ge||k("backend::lang.extension.action_failed"),"danger")}async function De(se){if(Y.value===null){Y.value=se;try{const Ce=await Le.POST("/{vendor}/{plugin}/{controller}/toolbar/{action}",{params:{path:{...a,action:se}},body:{}});if(Ce.data){Ce.data.data.message&&Ne(Ce.data.data.message),await Q(),x.value+=1;return}Ne(Ce.error?.error.message||k("backend::lang.extension.action_failed"),"danger")}catch{Ne(k("backend::lang.extension.action_failed"),"danger")}finally{Y.value=null}}}return(se,Ce)=>(v(),_("section",tP,[S("header",nP,[S("div",aP,[S("h1",rP,T(D.value),1),O.value?(v(),_("p",lP,T(O.value),1)):ne("",!0)]),N.value.length>0||z.value?(v(),_("div",oP,[z.value?(v(),U(Ze,{key:0,"data-action":"reorder",variant:"outline",icon:s(Uy),to:z.value},{default:F(()=>[_e(T(s(k)("backend::lang.messages.list.reorder")),1)]),_:1},8,["icon","to"])):ne("",!0),(v(!0),_(pe,null,qe(N.value,he=>(v(),U(Ze,{key:he,"data-action":"create",variant:"primary",icon:s(pi),to:`${s(l)}/create`},{default:F(()=>[_e(T(s(Je)(E.value?.create)),1)]),_:1},8,["icon","to"]))),128))])):ne("",!0)]),o.value?.headerPartial?(v(),U(If,{key:0,variant:"header",source:a,name:o.value.headerPartial,"reload-key":x.value},null,8,["name","reload-key"])):ne("",!0),S("div",iP,[o.value?(v(),U(S5,{key:0,ref_key:"toolbar",ref:H,"show-search":o.value.showSearch,search:C.value,"search-prompt":s(Je)(E.value?.searchPrompt),buttons:P.value,"selected-count":p.value.length,"selected-label":s(Je)(E.value?.selected,p.value.length),"delete-label":s(Je)(E.value?.deleteSelected,p.value.length),actions:w.value,"busy-action":Y.value,"bulk-actions":Z.value,"bulk-busy":j.value,"onUpdate:search":y,onDelete:we,onAction:De,onBulk:Ae},null,8,["show-search","search","search-prompt","buttons","selected-count","selected-label","delete-label","actions","busy-action","bulk-actions","bulk-busy"])):ne("",!0),o.value&&o.value.filters.length>0?(v(),U(h5,{key:1,filters:o.value.filters,values:g.value.filter??{},source:a,onUpdate:de},null,8,["filters","values"])):ne("",!0),m.value&&!c.value?(v(),_("div",sP,[S("p",uP,T(s(k)("backend::lang.list.load_failed")),1),f.value&&Te.value?(v(),U(Ze,{key:0,"data-action":"reset-list",onClick:ae},{default:F(()=>[_e(T(s(k)("backend::lang.list.reset_list")),1)]),_:1})):ne("",!0)])):(v(),U(i1,{key:3,columns:o.value?.columns??[],rows:i.value,loading:c.value||!o.value,"row-link":me,selectable:o.value?.showCheckboxes??!1,selected:p.value,sortable:o.value?.showSorting??!1,sort:$e.value,"row-states":I.value,"state-labels":X.value,"onUpdate:selected":Ce[0]||(Ce[0]=he=>p.value=he),onSort:M},{empty:F(()=>[g.value.search?(v(),_("div",cP,[S("span",dP,[B(s(og),{size:24,"aria-hidden":"true"})]),S("p",fP,T(s(Je)(E.value?.emptySearch,void 0,{term:g.value.search})),1),S("p",pP,T(s(Je)(E.value?.emptySearchHint,void 0,{term:g.value.search})),1),B(Ze,{"data-action":"clear-search",onClick:A},{default:F(()=>[_e(T(s(k)("backend::lang.list.clear_search")),1)]),_:1})])):(v(),_("p",vP,T(s(Je)(E.value?.empty)||o.value?.noRecordsMessage||s(k)("backend::lang.list.no_records")),1))]),_:1},8,["columns","rows","loading","selectable","selected","sortable","sort","row-states","state-labels"])),B(s1,{meta:u.value,loading:c.value||!o.value,"per-page-options":re.value,"per-page":ce.value,onPage:oe,onPerPage:J},null,8,["meta","loading","per-page-options","per-page"])]),B(gr,{open:s($).request.value!==null,message:s($).request.value?.message??"","confirm-label":s($).request.value?.confirmLabel,danger:s($).request.value?.danger,busy:s($).busy.value,onConfirm:s($).confirm,onCancel:s($).cancel},null,8,["open","message","confirm-label","danger","busy","onConfirm","onCancel"])]))}}),cr="X-Session-Key",u1="X-Child-Session-Key",yP=32;function ei(){const e=new Uint8Array(yP);globalThis.crypto.getRandomValues(e);let t="";for(const n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}const gP="X-Upload-Id";async function Xa(e){try{const t=await e();return{data:t.data?t.data.data:null,status:t.response.status,error:t.error?.error??null}}catch{return{data:null,status:0,error:null}}}async function As(e){try{const t=await e();return t.response.ok&&t.data instanceof Blob?t.data:null}catch{return null}}function ya(e){return encodeURIComponent(String(e))}function c1(e){return`${Zs.api}/${ya(e.vendor)}/${ya(e.plugin)}/${ya(e.controller)}`}function bP(e){try{return e===""?null:JSON.parse(e)}catch{return null}}function qf(e){if(!e)return"";for(const t of Object.values(e.details??{})){const n=Array.isArray(t)?t.find(a=>typeof a=="string"&&a!==""):t;if(typeof n=="string"&&n!=="")return n}return e.message??""}function _P(e,t){const n=t;if((e===200||e===201)&&n?.data)return{ok:!0,item:n.data};const a=qf(n?.error);return e===413?{ok:!1,reason:"too_large",status:e,message:a}:e===422?{ok:!1,reason:"invalid",status:e,message:a}:e===0?{ok:!1,reason:"network",status:e,message:a}:{ok:!1,reason:"failed",status:e,message:a}}function d1(e,t,n,a,r){let l=null,o=!1;const i=()=>new Promise(c=>{const d=new XMLHttpRequest;l=d,d.open("POST",e),d.setRequestHeader("X-Requested-With",Ly),d.setRequestHeader("Accept","application/json");for(const[m,p]of Object.entries(n))d.setRequestHeader(m,p);r&&d.setRequestHeader(gP,r),d.upload.onprogress=m=>{m.lengthComputable&&a?.(m.loaded,m.total)},d.onload=()=>c({status:d.status,body:bP(d.responseText)}),d.onerror=()=>c("network"),d.ontimeout=()=>c("network"),d.onabort=()=>c("aborted");const f=new FormData;f.append("file_data",t,t.name),d.send(f)});return{promise:(async()=>{let c=await i();return typeof c=="object"&&c.status===401&&!o&&(await Bd()&&(c=o?"aborted":await i()),typeof c=="object"&&c.status===401&&Yk()),c==="aborted"||o?{ok:!1,reason:"aborted",status:0,message:""}:c==="network"?{ok:!1,reason:"network",status:0,message:""}:_P(c.status,c.body)})(),abort(){o=!0,l?.abort()}}}function f1(e,t,n,a){const r={...e,id:t,field:n},l={[cr]:a},o=`${c1(e)}/${ya(t)}/files/${ya(n)}`;return{list:()=>Xa(()=>Le.GET("/{vendor}/{plugin}/{controller}/{id}/files/{field}",{params:{path:r,header:l}})),upload:(i,u,c)=>d1(o,i,{...l},u,c),update:(i,u)=>Xa(()=>Le.PUT("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}",{params:{path:{...r,file:i},header:l},body:u})),remove:i=>Xa(()=>Le.DELETE("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}",{params:{path:{...r,file:i},header:l}})),reorder:i=>Xa(()=>Le.POST("/{vendor}/{plugin}/{controller}/{id}/files/{field}/reorder",{params:{path:r,header:l},body:{ids:i}})),download:i=>As(()=>Le.GET("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}/download",{params:{path:{...r,file:i},header:l},parseAs:"blob"})),thumb:i=>As(()=>Le.GET("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}/thumb",{params:{path:{...r,file:i},header:l},parseAs:"blob"}))}}function xP(e,t,n,a,r,l,o){const i={...e,id:t,name:n,child:a,field:r},u={[cr]:l,[u1]:o},c=`${c1(e)}/${ya(t)}/relations/${ya(n)}/records/${ya(a)}/files/${ya(r)}`;return{list:()=>Xa(()=>Le.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}",{params:{path:i,header:u}})),upload:(d,f,m)=>d1(c,d,{...u},f,m),update:(d,f)=>Xa(()=>Le.PUT("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}",{params:{path:{...i,file:d},header:u},body:f})),remove:d=>Xa(()=>Le.DELETE("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}",{params:{path:{...i,file:d},header:u}})),reorder:d=>Xa(()=>Le.POST("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/reorder",{params:{path:i,header:u},body:{ids:d}})),download:d=>As(()=>Le.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}/download",{params:{path:{...i,file:d},header:u},parseAs:"blob"})),thumb:d=>As(()=>Le.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}/thumb",{params:{path:{...i,file:d},header:u},parseAs:"blob"}))}}const kP=new Set(["readonly","placeholder","maxlength","minlength","min","max","step","autocomplete","spellcheck","pattern"]);function Kr(e){const t={};for(const[n,a]of Object.entries(e.attributes??{})){const r=n.toLowerCase();!kP.has(r)||a===null||a===!1||(t[r]=a)}return t}function Nt(e){return["w-full rounded-control border bg-surface px-3.5 text-text transition-colors duration-150 ease-out",e?"border-danger":"border-border-strong"].join(" ")}function Nf(e){return typeof e=="string"?e!==""&&e!=="0"&&e.toLowerCase()!=="false":!!e}function p1(e,t){return typeof e=="number"?t?1:0:t}function v1(e,t){const n={};if(t===null||typeof t!="object"||Array.isArray(t))return n;const a=t;for(const r of e.permissionOptions??[]){const l=Number(a[r.code]);(l===1||e.mode==="radio"&&l===-1)&&(n[r.code]=l)}return n}const wP=new Set(["mltext","mltextarea","mlmarkdown"]);function $P(e){return e!==void 0&&wP.has(e)}function dr(e){return e?$P(e.type)||!!e.element&&e.translatable===!0:!1}const ti="summer:ml-locale";function CP(e){typeof window>"u"||e===""||window.dispatchEvent(new CustomEvent(ti,{detail:e}))}function Zn(e){const t={};if(e===null||typeof e!="object"||Array.isArray(e))return t;for(const[n,a]of Object.entries(e))typeof a=="string"&&(t[n]=a);return t}const SP={class:"flex min-w-0 flex-col"},EP=["for"],AP={key:0,class:"text-danger","aria-hidden":"true"},TP=["id"],DP=["id","name","checked","aria-invalid","aria-describedby"],OP=le({__name:"CheckboxField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>Nf(n.modelValue));function l(o){a("update:modelValue",p1(n.modelValue,o.target.checked))}return(o,i)=>(v(),_("div",{class:ye([e.invalid?"border-danger":"border-border","flex items-center justify-between gap-4 rounded-inner border px-4 py-3.5"]),"data-toggle-card":""},[S("div",SP,[S("label",{for:e.controlId,class:"font-semibold"},[_e(T(e.field.label||e.field.name),1),e.field.required?(v(),_("span",AP," *")):ne("",!0)],8,EP),e.field.comment?(v(),_("p",{key:0,id:`${e.controlId}-comment`,class:"text-[13px] text-muted"},T(e.field.comment),9,TP)):ne("",!0)]),S("input",{id:e.controlId,type:"checkbox",name:e.field.name,checked:r.value,"aria-invalid":e.invalid?"true":void 0,"aria-describedby":e.describedBy||void 0,class:"size-5 shrink-0 rounded-[6px] accent-primary",onChange:l},null,40,DP)],2))}});function MP(e){return e==="date"||e==="time"?e:"datetime"}function rn(e,t=2){return String(e).padStart(t,"0")}const PP=/(Z|[+-]\d{2}:?\d{2})$/i;function RP(e,t,n=!1){if(typeof t!="string"||t.trim()==="")return null;const a=t.trim();try{if(e==="date")return Ig(a.slice(0,10));if(e==="time"){const l=/(\d{2}:\d{2}(:\d{2})?)/.exec(a.includes("T")?a.slice(a.indexOf("T")):a);return l?sE(l[1]):null}const r=PP.test(a)?a.replace(" ","T"):`${a.replace(" ","T")}Z`;return n?ta(Dv(r,"UTC")):Dv(r,Ln())}catch{return null}}function hc(e){return`${rn(e.year,4)}-${rn(e.month)}-${rn(e.day)}`}function yc(e){return`${rn(e.hour)}:${rn(e.minute)}:${rn(e.second)}`}function bm(e,t,n=!1){if(!t)return null;if(e==="time")return"hour"in t?yc(t):null;if(!("year"in t))return null;if(e==="date")return hc(t);if(n){const l=t instanceof $a?ta(t):t,o="hour"in l?yc(l):"00:00:00";return`${hc(l)}T${o}Z`}const a=t instanceof $a?t:Qd(t instanceof mt?ta(t):t,Ln()),r=ou(a,"UTC");return`${hc(r)}T${yc(r)}Z`}const IP={date:"YYYY-MM-DD",datetime:"YYYY-MM-DD HH:mm",time:"HH:mm"},qP=/\[([^\]]*)\]|YYYY|YY|MMMM|MMM|MM|M|dddd|ddd|DD|D|HH|H|hh|h|mm|ss|A|a/g;function NP(e){return"year"in e?new mt(e.year,e.month,e.day):null}function gc(e,t,n,a){return new Tn(e,{...n,timeZone:"UTC"}).formatToParts(t.toDate("UTC")).find(l=>l.type===a)?.value??""}function LP(e,t,n,a){if(!e)return"";const r=n||IP[t],l=NP(e),o="hour"in e?e:null,i=/D/.test(r.replace(/\[[^\]]*\]/g,""));return r.replace(qP,(u,c)=>{if(c!==void 0)return c;switch(u){case"YYYY":return l?rn(l.year,4):"";case"YY":return l?rn(l.year%100):"";case"MMMM":case"MMM":{if(!l)return"";const d=u==="MMMM"?"long":"short";return i?gc(a,l,{day:"numeric",month:d},"month"):gc(a,l,{month:d},"month")}case"MM":return l?rn(l.month):"";case"M":return l?String(l.month):"";case"dddd":case"ddd":return l?gc(a,l,{weekday:u==="dddd"?"long":"short"},"weekday"):"";case"DD":return l?rn(l.day):"";case"D":return l?String(l.day):"";case"HH":return o?rn(o.hour):"";case"H":return o?String(o.hour):"";case"hh":return o?rn(o.hour%12||12):"";case"h":return o?String(o.hour%12||12):"";case"mm":return o?rn(o.minute):"";case"ss":return o?rn(o.second):"";case"A":return o?o.hour<12?"AM":"PM":"";case"a":return o?o.hour<12?"am":"pm":"";default:return u}})}const BP=new mt(2026,10,4);function FP(e,t){if(typeof t=="number"&&Number.isInteger(t)&&t>=0&&t<=6)return t;try{return(7-lu(BP,e))%7}catch{return 1}}function _m(e){if(e)try{return Ig(e.slice(0,10))}catch{return}}function VP(e,t=mi(Ln())){const n=_m(e.minDate),a=_m(e.maxDate);if(n||a)return{min:n,max:a};const r=e.yearRange??[];return r.length===1&&typeof r[0]=="number"?{min:new mt(t.year-r[0],1,1),max:new mt(t.year+r[0],12,31)}:r.length===2&&typeof r[0]=="number"&&typeof r[1]=="number"?{min:new mt(r[0],1,1),max:new mt(r[1],12,31)}:{}}function gd(e,t,n,a){if(!e||t==="time")return;if(t==="date")return e;const r=new ir(e.year,e.month,e.day,a?23:0,a?59:0,a?59:0);return n?r:ou(Qd(r,"UTC"),Ln())}function zP(e,t){const n=mi(Ln());return gd(n,e==="time"?"datetime":e,t,!1)??n}const jP=["id","aria-describedby"],UP={key:0},HP={key:1,class:"text-muted","data-empty":""},WP=["aria-label"],KP={class:"flex size-8 shrink-0 items-center justify-center text-muted","aria-hidden":"true"},GP=["data-mode"],YP=["aria-label"],JP={key:0,"data-datepicker-time":"",class:"mt-3 flex items-center gap-2 border-t border-border pt-3"},vo="flex size-8 shrink-0 items-center justify-center rounded-pager text-muted transition-colors duration-150 ease-out hover:bg-hover hover:text-text",ZP=le({__name:"DatepickerField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>MP(n.field.mode)),l=b(()=>r.value==="datetime"&&!!n.field.ignoreTimezone),o=b(()=>ar.value||"pl"),i=b(()=>{const fe=n.field.attributes?.readonly;return!!n.field.readOnly||fe!=null&&fe!==!1}),u=b(()=>RP(r.value,n.modelValue,l.value)),c=b(()=>r.value==="time"?null:u.value),d=b(()=>r.value==="time"?u.value:null),f=b(()=>VP(n.field)),m=b(()=>gd(f.value.min,r.value,l.value,!1)),p=b(()=>gd(f.value.max,r.value,l.value,!0)),h=zP(r.value,l.value),x=b(()=>FP(o.value,n.field.firstDay)),$=b(()=>n.field.twelveHour?12:24),g=b(()=>r.value==="date"?"day":"minute"),C=b(()=>LP(u.value,r.value,n.field.displayFormat,o.value)),E=b(()=>!n.field.required&&u.value!==null&&!i.value),D=b(()=>{const fe=c.value;return fe?!!m.value&&fe.compare(m.value)<0||!!p.value&&fe.compare(p.value)>0:!1}),O=new Set(["day","month","year","hour","minute","second"]),L=R(null),N=R(!1);function z(){const fe=L.value;if(!fe){N.value=!1;return}const Te=Array.from(fe.querySelectorAll("[data-reka-date-field-segment], [data-reka-time-field-segment]")).filter(ke=>O.has(ke.dataset.rekaDateFieldSegment??ke.dataset.rekaTimeFieldSegment??"")),W=Te.filter(ke=>!ke.hasAttribute("data-placeholder")).length;N.value=W>0&&W!!n.invalid||D.value||N.value),Y=b(()=>bm(r.value,u.value,l.value));function I(fe){const Te=bm(r.value,fe??null,l.value);w(),!(Te===Y.value&&(Te!==null||n.modelValue===null))&&a("update:modelValue",Te)}function X(fe){if(!fe||r.value!=="datetime"){I(fe);return}const Te=c.value,W=H.value,ke=!Te||Te.year!==fe.year||Te.month!==fe.month||Te.day!==fe.day,ae=!("hour"in fe)||fe.hour!==W.hour||fe.minute!==W.minute;ke&&ae&&(fe=re(fe,W)),j.value=fe,I(fe)}function Z(){a("update:modelValue",null),w()}const j=R(null);je(c,fe=>{j.value=fe},{immediate:!0});const H=b(()=>{const fe=j.value??c.value;return fe&&"hour"in fe?new Yn(fe.hour,fe.minute):new Yn(0,0)});function re(fe,Te){return"hour"in fe?fe.set({hour:Te.hour,minute:Te.minute,second:0,millisecond:0}):new ir(fe.year,fe.month,fe.day,Te.hour,Te.minute)}function ce(fe){if(!fe)return;const Te=fe instanceof Yn?fe:new Yn(fe.hour,fe.minute),W=j.value??c.value??h,ke=re(W,Te);j.value=ke,I(ke)}function $e(fe){return fe.charAt(0).toLocaleUpperCase(o.value)+fe.slice(1)}const me=b(()=>[Nt(P.value),"h-input flex min-w-0 items-center gap-1 pl-3.5 pr-1.5","focus-within:border-primary focus-within:shadow-[0_0_0_3px_var(--c-ring)]","has-[[data-invalid]]:border-danger"]);function be(fe){return fe==="literal"?"text-muted":fe==="timeZoneName"?"ml-2 min-w-0 truncate text-[13px] text-muted":"rounded-[4px] px-0.5 tabular-nums outline-none focus:bg-sel focus:text-text focus-visible:outline-none data-[placeholder]:text-placeholder focus:data-[placeholder]:text-text"}return(fe,Te)=>i.value?(v(),_("p",{key:0,id:e.controlId,"data-datepicker-readonly":"","aria-describedby":e.describedBy||void 0,class:"flex min-h-input items-center rounded-control border border-border bg-subtle px-3.5 tabular-nums"},[C.value!==""?(v(),_("span",UP,T(C.value),1)):(v(),_("span",HP,"—"))],8,jP)):r.value==="time"?(v(),_("div",{key:1,ref_key:"container",ref:L,"data-datepicker":"","data-mode":"time",class:ye(me.value),onKeyup:w,onFocusout:w},[B(s(pm),{id:e.controlId,"model-value":d.value,locale:o.value,"hour-cycle":$.value,granularity:"minute",name:e.field.name,required:e.field.required||void 0,"aria-invalid":P.value?"true":void 0,"aria-describedby":e.describedBy||void 0,class:"flex min-w-0 flex-1 items-center","onUpdate:modelValue":I},{default:F(({segments:W})=>[(v(!0),_(pe,null,qe(W,ke=>(v(),U(s(vm),{key:ke.part,part:ke.part,class:ye(be(ke.part))},{default:F(()=>[_e(T(ke.value),1)]),_:2},1032,["part","class"]))),128))]),_:1},8,["id","model-value","locale","hour-cycle","name","required","aria-invalid","aria-describedby"]),E.value?(v(),_("button",{key:0,type:"button","data-action":"clear","aria-label":s(k)("backend::lang.datepicker.clear"),class:ye(vo),onClick:Z},[B(s(yn),{size:16,"aria-hidden":"true"})],8,WP)):ne("",!0),S("span",KP,[B(s(Gc),{size:16})])],34)):(v(),U(s(rD),{key:2,id:e.controlId,"model-value":c.value,"default-placeholder":s(h),locale:o.value,granularity:g.value,"hour-cycle":$.value,"hide-time-zone":r.value!=="datetime"||l.value,"min-value":m.value,"max-value":p.value,"week-starts-on":x.value,name:e.field.name,required:e.field.required||void 0,"close-on-select":r.value==="date","prevent-deselect":"","onUpdate:modelValue":X},{default:F(()=>[S("div",{ref_key:"container",ref:L,"data-datepicker":"","data-mode":r.value,class:ye(me.value),onKeyup:w,onFocusout:w},[B(s(xD),{"aria-invalid":P.value?"true":void 0,"aria-describedby":e.describedBy||void 0,class:"flex min-w-0 flex-1 items-center overflow-hidden"},{default:F(({segments:W})=>[(v(!0),_(pe,null,qe(W,ke=>(v(),U(s(qD),{key:ke.part,part:ke.part,class:ye(be(ke.part))},{default:F(()=>[_e(T(ke.value),1)]),_:2},1032,["part","class"]))),128))]),_:1},8,["aria-invalid","aria-describedby"]),E.value?(v(),_("button",{key:0,type:"button","data-action":"clear","aria-label":s(k)("backend::lang.datepicker.clear"),class:ye(vo),onClick:Z},[B(s(yn),{size:16,"aria-hidden":"true"})],8,YP)):ne("",!0),B(s(UD),{"data-action":"open-calendar","aria-label":s(k)("backend::lang.datepicker.open_calendar"),class:ye(vo)},{default:F(()=>[B(s(Ky),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label"])],42,GP),B(s(bD),{"data-datepicker-calendar":"","side-offset":4,align:"end",class:"z-50 w-[284px] rounded-inner border border-border bg-surface p-4 text-text shadow-menu"},{default:F(()=>[B(s(oD),null,{default:F(({weekDays:W,grid:ke})=>[B(s(MD),{class:"flex h-9 items-center justify-between"},{default:F(()=>[B(s(FD),{"aria-label":s(k)("backend::lang.datepicker.prev_month"),class:ye(vo)},{default:F(()=>[B(s(Xs),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label"]),B(s(RD),{class:"font-semibold"},{default:F(({headingValue:ae})=>[_e(T($e(ae)),1)]),_:1}),B(s(LD),{"aria-label":s(k)("backend::lang.datepicker.next_month"),class:ye(vo)},{default:F(()=>[B(s(di),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label"])]),_:1}),(v(!0),_(pe,null,qe(ke,ae=>(v(),U(s(wD),{key:ae.value.toString(),class:"mt-2 w-full border-collapse select-none"},{default:F(()=>[B(s(ED),null,{default:F(()=>[B(s(fm),{class:"flex"},{default:F(()=>[(v(!0),_(pe,null,qe(W,Q=>(v(),U(s(DD),{key:Q,class:"flex h-9 w-9 items-center justify-center text-[13px] font-normal text-muted"},{default:F(()=>[_e(T(Q),1)]),_:2},1024))),128))]),_:2},1024)]),_:2},1024),B(s(CD),null,{default:F(()=>[(v(!0),_(pe,null,qe(ae.rows,(Q,ue)=>(v(),U(s(fm),{key:`week-${ue}`,class:"flex"},{default:F(()=>[(v(!0),_(pe,null,qe(Q,V=>(v(),U(s(sD),{key:V.toString(),date:V,class:"p-0"},{default:F(()=>[B(s(cD),{day:V,month:ae.value,class:"flex size-9 items-center justify-center rounded-pager tabular-nums text-text transition-colors duration-150 ease-out hover:bg-hover data-[outside-view]:text-placeholder data-[today]:font-semibold data-[today]:shadow-[inset_0_0_0_1px_var(--c-border-strong)] data-[selected]:bg-primary data-[selected]:font-semibold data-[selected]:text-on-primary data-[disabled]:cursor-not-allowed data-[disabled]:text-placeholder data-[disabled]:opacity-40 data-[disabled]:hover:bg-transparent data-[unavailable]:cursor-not-allowed data-[unavailable]:opacity-40"},null,8,["day","month"])]),_:2},1032,["date"]))),128))]),_:2},1024))),128))]),_:2},1024)]),_:2},1024))),128))]),_:1}),r.value==="datetime"?(v(),_("div",JP,[B(s(Gc),{size:16,class:"shrink-0 text-muted","aria-hidden":"true"}),B(s(pm),{"model-value":H.value,locale:o.value,"hour-cycle":$.value,granularity:"minute","hide-time-zone":"",class:"flex min-w-0 items-center","onUpdate:modelValue":ce},{default:F(({segments:W})=>[(v(!0),_(pe,null,qe(W,ke=>(v(),U(s(vm),{key:ke.part,part:ke.part,class:ye(be(ke.part))},{default:F(()=>[_e(T(ke.value),1)]),_:2},1032,["part","class"]))),128))]),_:1},8,["model-value","locale","hour-cycle"])])):ne("",!0)]),_:1})]),_:1},8,["id","model-value","default-placeholder","locale","granularity","hour-cycle","hide-time-zone","min-value","max-value","week-starts-on","name","required","close-on-select"]))}}),Lf=Symbol("summer.form.values"),Bf=Symbol("summer.form.patch"),Ff=Symbol("summer.form.locale"),Ts=Symbol("summer.form.enabledLocales"),m1=Symbol("summer.form.assets");function Vf(){const e=R(0);return{activeUploads:e,beginUpload(){e.value++;let t=!1;return()=>{t||(t=!0,e.value>0&&e.value--)}}}}const Xl=Symbol("summer.form.session"),h1=Symbol("summer.settings.secrets"),xm="summer-action",XP="summer-result",km="summer-change",wm="summer-upload",QP="summer-upload-result",y1=5e3,zf=Symbol("summer.form.feedback"),gu=Symbol("summer.form.fieldScope"),g1=Symbol("summer.form.dependentCache"),e6=["data-dependent"],t6={class:"relative"},n6=["id","name","value","disabled","required","aria-required","aria-invalid","aria-busy","aria-describedby"],a6={key:0,value:"state",class:"text-muted"},r6=["value"],l6=["id"],o6={key:1,class:"flex flex-wrap items-center gap-2"},i6=["id"],Vi="empty",zi="placeholder",s6=le({__name:"DropdownField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=" ".repeat(4),l=ut(gu,null),o=ut(zf,null),i=ut(g1,null)??new Map,u=b(()=>n.field.dependsOn??""),c=b(()=>u.value!==""),d=R("waiting"),f=R([]),m=b(()=>{const H=l?.values.value[u.value];return H==null||H===""||typeof H=="object"?null:String(H)}),p=b(()=>l?.fields.value.find(H=>H.name===u.value)),h=b(()=>p.value?.label||u.value),x=b(()=>(p.value?.options??[]).find(re=>g(re.value,m.value))?.label??m.value??""),$=b(()=>c.value?f.value:n.field.options??[]);function g(H,re){return H==null||re===null||re===void 0?H===re||H==null&&re==null:String(H)===String(re)}function C(){return n.modelValue!==null&&n.modelValue!==void 0&&n.modelValue!==""}function E(){C()&&(a("update:modelValue",null),o?.announce(k("backend::lang.form.dependent_cleared",{field:n.field.label||n.field.name})))}function D(H,re){if(!H.applies){f.value=[],d.value="unused",re&&E();return}f.value=H.options.map(ce=>({value:ce.value,label:r.repeat(Math.max(0,ce.depth))+ce.label})),d.value=f.value.length>0?"ready":"empty",re&&C()&&!f.value.some(ce=>g(ce.value,n.modelValue))&&E()}let O=0,L=!1;async function N(H){const re=++O,ce=m.value;if(ce===null){f.value=[],d.value="waiting",H&&E();return}const $e=l?.path(n.field.name)??n.field.name,me=`${$e}\0${ce}`,be=i.get(me);if(be){D(be,H);return}if(!n.source){L=H,d.value="failed";return}d.value="loading";try{const{data:fe}=await Le.GET("/{vendor}/{plugin}/{controller}/fields/{field}/dependent-options",{params:{path:{...n.source,field:$e},query:{[`values[${u.value}]`]:ce}}});if(re!==O)return;if(!fe){L=H,d.value="failed";return}i.set(me,fe.data),D(fe.data,H)}catch{re===O&&(L=H,d.value="failed")}}function z(){N(L)}je(m,(H,re)=>{c.value&&H!==re&&N(!0)}),wt(()=>{c.value&&N(!1)}),At(()=>{O++});const w=b(()=>{const H=$.value.findIndex(re=>g(re.value,n.modelValue));return H>=0?String(H):n.field.emptyOption!==void 0&&!C()?Vi:zi}),P=b(()=>{switch(d.value){case"waiting":return k("backend::lang.form.dependent_waiting",{field:h.value});case"loading":return k("backend::lang.form.loading_options");case"unused":return k("backend::lang.form.dependent_not_used");case"empty":return k("backend::lang.form.dependent_empty",{type:x.value});case"failed":return k("backend::lang.form.dependent_failed");default:return""}}),Y=b(()=>c.value&&d.value!=="ready"),I=b(()=>Y.value||w.value===Vi||w.value===zi),X=b(()=>`${n.controlId}-dependent`),Z=b(()=>[n.describedBy??"",c.value&&(d.value==="empty"||d.value==="failed")?X.value:""].filter(Boolean).join(" "));function j(H){const re=H.target.value;if(re===Vi){a("update:modelValue",null);return}const ce=$.value[Number(re)];ce&&a("update:modelValue",ce.value)}return(H,re)=>(v(),_("div",{class:"flex flex-col gap-1.5","data-dependent":c.value?d.value:void 0},[S("div",t6,[S("select",{id:e.controlId,name:e.field.name,value:Y.value?"state":w.value,disabled:Y.value||void 0,required:e.field.required||void 0,"aria-required":e.field.required?"true":void 0,"aria-invalid":e.invalid?"true":void 0,"aria-busy":c.value&&d.value==="loading"?"true":void 0,"aria-describedby":Z.value||void 0,class:ye([[s(Nt)(e.invalid),I.value?"text-muted":""],"h-input appearance-none pr-10 disabled:cursor-not-allowed"]),onChange:j},[Y.value?(v(),_("option",a6,T(P.value),1)):(v(),_(pe,{key:1},[e.field.emptyOption!==void 0?(v(),_("option",{key:0,value:Vi,class:"text-muted"},T(e.field.emptyOption),1)):ne("",!0),w.value===zi?(v(),_("option",{key:1,value:zi,disabled:""},T(s(k)("backend::lang.form.select_placeholder")),1)):ne("",!0),(v(!0),_(pe,null,qe($.value,(ce,$e)=>(v(),_("option",{key:$e,value:String($e),class:"text-text"},T(ce.label),9,r6))),128))],64))],42,n6),B(s(lr),{size:16,class:"pointer-events-none absolute top-1/2 right-3.5 -translate-y-1/2 text-muted","aria-hidden":"true"})]),c.value&&d.value==="empty"?(v(),_("p",{key:0,id:X.value,"data-dependent-hint":"",class:"text-[13px] text-muted"},T(P.value),9,l6)):c.value&&d.value==="failed"?(v(),_("div",o6,[S("p",{id:X.value,role:"alert",class:"flex items-center gap-1.5 text-[13px] text-danger"},[B(s(yt),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(s(k)("backend::lang.form.dependent_failed")),1)],8,i6),B(Ze,{variant:"ghost",size:"sm",icon:s(Ji),"data-action":"dependent-retry",onClick:z},{default:F(()=>[_e(T(s(k)("backend::lang.form.dependent_retry")),1)]),_:1},8,["icon"])])):ne("",!0)],8,e6))}}),u6={class:"flex items-start gap-3"},c6={class:"flex min-w-0 flex-1 flex-col gap-1"},d6={key:0,class:"flex items-center gap-4"},f6=["src"],p6={key:1,class:"flex size-16 shrink-0 items-center justify-center rounded-inner bg-subtle","aria-hidden":"true"},v6=["title"],m6={class:"flex flex-col gap-1.5"},h6=["for"],y6=["id","disabled","aria-invalid","aria-describedby"],g6=["id"],b6={class:"flex flex-col gap-1.5"},_6=["for"],x6=["id","disabled","aria-invalid","aria-describedby"],k6=["id"],w6={class:"flex gap-2.5"},$6=["disabled"],C6=["disabled"],S6=le({__name:"FileCaptionModal",props:{open:{type:Boolean},file:{},routes:{},preview:{},idPrefix:{}},emits:["update:open","saved","closed"],setup(e,{emit:t}){const n=e,a=t,r=R(""),l=R(""),o=R({}),i=R(!1),u=br();function c($){const g={};for(const[C,E]of Object.entries($??{})){const D=(Array.isArray(E)?E:[E]).filter(O=>typeof O=="string"&&O!=="");D.length>0&&(g[C]=D)}return g}const d=b(()=>`${n.idPrefix}-caption-title`),f=b(()=>`${n.idPrefix}-caption-description`),m=b(()=>!!n.file&&(r.value!==n.file.title||l.value!==n.file.description));je(()=>n.open,$=>{$&&n.file&&(r.value=n.file.title??"",l.value=n.file.description??"",o.value={},i.value=!1)},{immediate:!0});async function p($){if($){a("update:open",!0);return}i.value||m.value&&!await u.ask({message:k("backend::lang.form.unsaved_confirm"),confirmLabel:k("backend::lang.form.discard"),danger:!0})||a("update:open",!1)}async function h(){if(!(i.value||!n.file||!n.routes)){i.value=!0;try{const $=await n.routes.update(n.file.id,{title:r.value,description:l.value});if($.data){o.value={},a("saved",$.data),a("update:open",!1),Ne(k("backend::lang.fileupload.details_saved"));return}if($.status===422){o.value=c($.error?.details),Object.keys(o.value).length===0&&(o.value={title:[qf($.error)||k("backend::lang.form.error_generic")]});return}Ne($.error?.message||k("backend::lang.form.error_generic"),"danger")}finally{i.value=!1}}}function x($){$.preventDefault(),a("closed")}return($,g)=>(v(),_(pe,null,[B(s(Hl),{open:e.open,"onUpdate:open":p},{default:F(()=>[B(s(yi),null,{default:F(()=>[B(s(Kl),{"data-dialog-overlay":"",class:"fixed inset-0 z-40 bg-overlay"}),B(s(Wl),{"data-caption-modal":"","data-dialog-content":"","aria-modal":"true",class:"fixed top-1/2 left-1/2 z-50 flex max-h-[calc(100vh-32px)] w-[calc(100%-32px)] max-w-[560px] -translate-x-1/2 -translate-y-1/2 flex-col gap-4 overflow-y-auto rounded-modal bg-surface p-6 text-text shadow-pop",onCloseAutoFocus:x},{default:F(()=>[S("div",u6,[S("div",c6,[B(s(Gl),{class:"text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[_e(T(s(k)("backend::lang.fileupload.attachment")),1)]),_:1}),B(s(Vr),{class:"text-muted"},{default:F(()=>[_e(T(s(k)("backend::lang.fileupload.help")),1)]),_:1})]),B(s(Vl),{"data-action":"close","aria-label":s(k)("backend::lang.form.close"),disabled:i.value,class:"flex size-[34px] shrink-0 items-center justify-center rounded-tab bg-subtle text-muted hover:bg-hover hover:text-text"},{default:F(()=>[B(s(yn),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label","disabled"])]),e.file?(v(),_("div",d6,[e.preview?(v(),_("img",{key:0,src:e.preview,alt:"",class:"size-16 shrink-0 rounded-inner object-cover"},null,8,f6)):(v(),_("span",p6,[B(s(bl),{size:16,class:"text-muted"})])),S("span",{class:"min-w-0 truncate text-[13px] text-muted",title:e.file.file_name},T(e.file.file_name),9,v6)])):ne("",!0),S("form",{class:"flex flex-col gap-4",novalidate:"",onSubmit:vt(h,["prevent"])},[S("div",m6,[S("label",{for:d.value,class:"font-semibold"},T(s(k)("backend::lang.fileupload.title_label")),9,h6),Qn(S("input",{id:d.value,"onUpdate:modelValue":g[0]||(g[0]=C=>r.value=C),type:"text","data-caption-title":"",disabled:i.value,"aria-invalid":o.value.title?"true":void 0,"aria-describedby":o.value.title?`${d.value}-error`:void 0,class:ye([s(Nt)(!!o.value.title),"h-input"])},null,10,y6),[[ql,r.value]]),o.value.title?(v(),_("p",{key:0,id:`${d.value}-error`,class:"flex items-center gap-1.5 text-[13px] text-danger"},[B(s(yt),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(o.value.title.join(" ")),1)],8,g6)):ne("",!0)]),S("div",b6,[S("label",{for:f.value,class:"font-semibold"},T(s(k)("backend::lang.fileupload.description_label")),9,_6),Qn(S("textarea",{id:f.value,"onUpdate:modelValue":g[1]||(g[1]=C=>l.value=C),rows:"3","data-caption-description":"",disabled:i.value,"aria-invalid":o.value.description?"true":void 0,"aria-describedby":o.value.description?`${f.value}-error`:void 0,class:ye([s(Nt)(!!o.value.description),"min-h-input resize-y py-2.5"])},null,10,x6),[[ql,l.value]]),o.value.description?(v(),_("p",{key:0,id:`${f.value}-error`,class:"flex items-center gap-1.5 text-[13px] text-danger"},[B(s(yt),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(o.value.description.join(" ")),1)],8,k6)):ne("",!0)]),S("div",w6,[S("button",{type:"button","data-action":"cancel",disabled:i.value,class:"inline-flex h-button flex-1 items-center justify-center rounded-control border border-border-strong bg-surface font-semibold hover:bg-hover disabled:cursor-not-allowed disabled:opacity-60",onClick:g[2]||(g[2]=C=>p(!1))},T(s(k)("backend::lang.form.cancel")),9,$6),S("button",{type:"submit","data-action":"save-caption",disabled:i.value,class:"inline-flex h-button flex-1 items-center justify-center rounded-control bg-primary font-semibold text-on-primary hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-60"},T(i.value?s(k)("backend::lang.form.saving"):s(k)("backend::lang.fileupload.details_submit")),9,C6)])],32)]),_:1})]),_:1})]),_:1},8,["open"]),B(gr,{open:s(u).request.value!==null,message:s(u).request.value?.message??"","confirm-label":s(u).request.value?.confirmLabel,danger:s(u).request.value?.danger,onConfirm:s(u).confirm,onCancel:s(u).cancel},null,8,["open","message","confirm-label","danger","onConfirm","onCancel"])],64))}}),E6=["id","data-field-name","aria-labelledby","aria-describedby","aria-busy"],A6={key:0,"data-fileupload-loading":"",class:"h-[112px] rounded-control bg-skel","aria-hidden":"true"},T6={key:1,role:"alert","data-fileupload-failed":"",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},D6={key:0,"data-fileupload-empty":"",class:"flex min-h-input items-center rounded-control border border-border bg-subtle px-3.5 text-muted"},O6={key:1,"data-fileupload-grid":"",class:"grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4"},M6=["data-file-item","data-state","onDragover","onDrop"],P6={class:"relative flex aspect-square items-center justify-center bg-subtle"},R6=["href","aria-label"],I6=["src","alt","onError"],q6=["aria-label","onClick"],N6=["src","alt"],L6={key:2,"data-preview-unavailable":"",class:"flex flex-col items-center gap-2 text-[13px] text-muted"},B6=["data-handle","aria-label","onKeydown","onDragstart"],F6={key:5,class:"absolute top-2 right-2 flex gap-1"},V6=["data-caption","aria-label","onClick"],z6=["aria-label","onClick"],j6=["aria-label","onClick"],U6={class:"flex flex-col gap-1 p-2"},H6=["title"],W6={class:"flex items-center gap-2 text-[13px] text-muted tabular-nums"},K6={key:0},G6={key:1},Y6={key:2},J6={key:3,"data-unsaved-chip":"",class:"inline-flex h-6 items-center rounded-pill bg-sel px-2 text-[13px] font-semibold text-text"},Z6={key:1,"data-file-error":"",class:"text-[13px] text-danger"},X6={class:"sr-only"},Q6={key:2,"data-fileupload-single":"",class:"flex flex-col gap-2"},e8=["data-file-item","data-state"],t8=["src","alt","onError"],n8={key:3,"data-preview-unavailable":"",class:"flex flex-col items-center gap-2 text-[13px] text-muted"},a8={class:"flex min-w-0 flex-1 flex-col gap-1"},r8=["title"],l8={class:"flex items-center gap-2 text-[13px] text-muted tabular-nums"},o8={key:0},i8={key:1},s8={key:2},u8={key:3,"data-unsaved-chip":"",class:"inline-flex h-6 items-center rounded-pill bg-sel px-2 text-[13px] font-semibold text-text"},c8={key:1,"data-file-error":"",class:"text-[13px] text-danger"},d8={class:"sr-only"},f8={key:2,class:"mt-1 flex flex-wrap gap-2"},p8={key:3,"data-fileupload-rows":"",class:"flex flex-col gap-2"},v8=["data-file-item","data-state","onDragover","onDrop"],m8={class:"flex items-center gap-3"},h8=["data-handle","aria-label","onKeydown","onDragstart"],y8={class:"flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-pager bg-subtle"},g8=["src","onError"],b8={class:"flex min-w-0 flex-1 flex-col leading-tight"},_8=["title"],x8=["title"],k8=["title"],w8={class:"flex shrink-0 items-center gap-2 text-[13px] text-muted tabular-nums"},$8={key:0},C8={key:1},S8={key:2},E8={key:3,"data-unsaved-chip":"",class:"inline-flex h-6 items-center rounded-pill bg-sel px-2 text-[13px] font-semibold text-text"},A8={class:"flex shrink-0 items-center gap-1"},T8=["href","aria-label"],D8=["aria-label","onClick"],O8=["data-caption","aria-label","onClick"],M8=["aria-label","onClick"],P8=["aria-label","onClick"],R8={key:1,"data-file-error":"",class:"text-[13px] text-danger"},I8={class:"sr-only"},q8=["aria-describedby"],N8={class:"flex size-10 items-center justify-center rounded-full bg-surface","aria-hidden":"true"},L8={class:"text-text"},B8={key:0,"data-fileupload-limits":"",class:"text-[13px] text-muted tabular-nums"},F8={key:5,"data-fileupload-limits":"",class:"text-[13px] text-muted tabular-nums"},V8={key:6,role:"alert","data-fileupload-too-many":"",class:"flex items-center gap-1.5 text-[13px] text-danger"},z8=["accept","multiple"],j8={class:"sr-only","aria-live":"polite","data-fileupload-live":""},U8=1<<20,H8=400,bc="inline-flex size-8 items-center justify-center rounded-pager border border-border bg-surface text-muted hover:text-text",W8="inline-flex size-8 items-center justify-center rounded-pager border border-border bg-surface text-muted hover:bg-danger-soft hover:text-danger",ul="inline-flex size-8 shrink-0 items-center justify-center rounded-pager text-muted hover:bg-hover hover:text-text",K8=le({__name:"FileuploadField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},setup(e){const t=e,n=ut(Xl,null),a=["jpg","jpeg","png","gif","webp"],r=["image/jpeg","image/png","image/gif","image/webp"];let l=1;const o=R([]),i=R("loading"),u=R(!1),c=R(0),d=R(""),f=R(null),m=R(null),p=R(null),h=R(null),x=R(null),$=R(!1),g=R({}),C=R(new Set),E=new Set,D=[],O=n?n.routes(t.field.name):null;let L=null,N=null,z=!1,w=null,P=0,Y=!1;const I=b(()=>{const G=t.field.attributes?.readonly;return!!t.field.readOnly||G!=null&&G!==!1}),X=b(()=>t.field.multiple===!0),Z=b(()=>t.field.mode==="image"),j=b(()=>X.value?t.field.maxFiles:1),H=b(()=>(n?.recordId??0)!==0),re=b(()=>o.value.filter(G=>G.state!=="failed")),ce=b(()=>{if(X.value)return o.value;const G=re.value,Oe=G[G.length-1];return o.value.filter(ee=>ee.state==="failed"||ee===Oe)}),$e=b(()=>ce.value.filter(G=>G.state!=="failed").length),me=b(()=>I.value||i.value!=="ready"?!1:X.value?j.value===void 0||j.value===null||re.value.lengthX.value&&!I.value&&typeof j.value=="number"&&re.value.length>=j.value),fe=b(()=>t.field.fileTypes?.length?t.field.fileTypes.map(G=>G.toLowerCase()):Z.value&&!t.field.mimeTypes?.length?a:null),Te=b(()=>(t.field.fileTypes?.length?t.field.fileTypes:t.field.mimeTypes??[]).join(", ")),W=b(()=>{const G=[];for(const Oe of t.field.fileTypes??[])G.push(`.${Oe.toLowerCase()}`);for(const Oe of t.field.mimeTypes??[])G.push(Oe.includes("/")?Oe:`.${Oe.toLowerCase()}`);return G.length===0&&Z.value&&G.push(...r),G.length>0?G.join(","):void 0}),ke=b(()=>t.field.prompt||k(X.value?"backend::lang.fileupload.default_prompt_many":"backend::lang.fileupload.default_prompt"));function ae(G,Oe){return new Intl.NumberFormat(ar.value,{minimumFractionDigits:Oe,maximumFractionDigits:Oe}).format(G)}function Q(G){const Oe=["B","kB","MB","GB"];let ee=G,Ie=0;for(;ee>=1e3&&Ie{const G=t.field.maxFilesize;return typeof G=="number"?`${new Intl.NumberFormat(ar.value).format(G)} MB`:""}),V=b(()=>{const G=[];return Te.value!==""&&G.push(k("backend::lang.fileupload.limits_types",{types:Te.value})),ue.value!==""&&G.push(k("backend::lang.fileupload.limits_size",{size:ue.value})),X.value&&typeof j.value=="number"&&G.push(k("backend::lang.fileupload.limits_count",{current:re.value.length,max:j.value})),G.join(" · ")});function K(G){const Oe=G.lastIndexOf(".");return Oe<0?"":G.slice(Oe+1).toLowerCase()}function te(G){const Oe=t.field.mimeTypes??[];if(Oe.length===0||G.type==="")return!0;const ee=G.type.toLowerCase(),Ie=K(G.name);return Oe.some(Qe=>{const Ft=Qe.toLowerCase();return Ft.includes("/")?Ft.endsWith("/*")?ee.startsWith(Ft.slice(0,-1)):ee===Ft:Ft===Ie})}function y(G){const Oe=fe.value;if(Oe&&!Oe.includes(K(G.name)))return k("backend::lang.fileupload.wrong_type",{name:G.name,types:Oe.join(", ")});if(!te(G))return k("backend::lang.fileupload.wrong_type",{name:G.name,types:Te.value});const ee=t.field.maxFilesize;return typeof ee=="number"&&G.size>Math.ceil(ee*U8)?k("backend::lang.fileupload.too_large",{name:G.name,size:ue.value}):""}function A(G){return Mn({uid:l++,name:G.file_name,size:G.file_size,state:"done",progress:100,error:"",retryable:!1,file:G,source:null,handle:null,uploadId:""})}function M(){return globalThis.crypto?.randomUUID?.()??`u${Date.now().toString(36)}${Math.random().toString(36).slice(2,10)}`}function oe(G,Oe){return Mn({uid:l++,name:G.name,size:G.size,state:Oe===""?"queued":"failed",progress:0,error:Oe,retryable:!1,file:null,source:ns(G),handle:null,uploadId:M()})}function J(G){return o.value.find(Oe=>Oe.uid===G)}async function de(G){if(!O){i.value="failed";return}G&&(i.value="loading");const Oe=await O.list();if(Y)return;if(!Oe.data){G&&(i.value="failed");return}const ee=o.value.filter(Ie=>Ie.state!=="done");for(const Ie of o.value)Ie.state==="done"&&Jr(Ie.uid);o.value=[...Oe.data.map(A),...ee],i.value="ready"}function we(){I.value||f.value?.click()}function Ae(G){if(G.length===0||I.value)return;if(c.value=0,!X.value)for(const Qe of[...o.value])Qe.state!=="failed"&&(Qe.state!=="done"||Qe.file?.pending)&&Se(Qe);let Oe=X.value?typeof j.value=="number"?Math.max(j.value-re.value.length,0):Number.POSITIVE_INFINITY:1,ee=0;const Ie=[];for(const Qe of G.slice(0,X.value?G.length:1)){const Ft=y(Qe);if(Ft===""&&Oe<=0){ee++;continue}Ft===""&&Oe--,Ie.push(oe(Qe,Ft))}o.value=[...o.value,...Ie],c.value=ee,Re()}function De(G){const Oe=G.target;Ae(Array.from(Oe.files??[])),Oe.value=""}function se(G){return p.value===null&&Array.from(G.dataTransfer?.types??[]).includes("Files")}function Ce(G){se(G)&&(G.preventDefault(),u.value=!0)}function he(G){se(G)&&(G.preventDefault(),u.value=!1,Ae(Array.from(G.dataTransfer?.files??[])))}function Re(){if(!O||o.value.some(Oe=>Oe.state==="uploading"))return;const G=o.value.find(Oe=>Oe.state==="queued");G&&Fe(G)}async function Fe(G){if(!O||!G.source)return;G.state="uploading",G.progress=0,G.error="",G.retryable=!1;const Oe=new Set(o.value.filter(Ie=>Ie.file).map(Ie=>Ie.file.id)),ee=n?.beginUpload();try{const Ie=O.upload(G.source,(nn,qa)=>{G.progress=qa>0?Math.min(100,Math.round(nn/qa*100)):0},G.uploadId||void 0);G.handle=ns(Ie);const Qe=await Ie.promise;G.handle=null;const Ft=!!J(G.uid);if(Qe.ok)!Ft||Y?O.remove(Qe.item.id):(G.state="done",G.progress=100,G.file=Qe.item,G.name=Qe.item.file_name,G.size=Qe.item.file_size,n?.markDirty());else if(Qe.reason==="aborted"||Qe.reason==="network"){const nn=await Ge(Oe);if(Qe.reason==="aborted"){for(const qa of nn)O.remove(qa.id);o.value=o.value.filter(qa=>qa.uid!==G.uid),Jr(G.uid)}else Ft&&nn[0]&&nn.length===1?(G.state="done",G.progress=100,G.file=nn[0],G.name=nn[0].file_name,G.size=nn[0].file_size,n?.markDirty()):(G.state="failed",G.error=k("backend::lang.fileupload.upload_failed"),G.retryable=!0)}else if(Ft)switch(G.state="failed",Qe.reason){case"too_large":G.error=ue.value?k("backend::lang.fileupload.too_large",{name:G.name,size:ue.value}):Qe.message||k("backend::lang.fileupload.upload_failed");break;case"invalid":G.error=Qe.message||k("backend::lang.fileupload.upload_failed");break;default:G.error=Qe.message||k("backend::lang.fileupload.upload_failed"),G.retryable=Qe.status>=500}}finally{ee?.(),Y||Re()}}async function Ge(G){if(!O)return[];const Oe=await O.list();return Oe.data?Oe.data.filter(ee=>ee.pending&&!G.has(ee.id)):[]}function ge(G){G.state!=="failed"||!G.source||(G.state="queued",G.error="",G.retryable=!1,Re())}async function Se(G){const Oe=o.value.findIndex(Ie=>Ie.uid===G.uid);if(Oe<0)return;switch(o.value=o.value.filter(Ie=>Ie.uid!==G.uid),Jr(G.uid),G.state){case"uploading":G.handle?.abort(),n?.markDirty(),Re();return;case"queued":case"failed":return}if(!O||!G.file)return;n?.markDirty();const ee=await O.remove(G.file.id);if(!ee.data&&!Y){const Ie=[...o.value];Ie.splice(Math.min(Oe,Ie.length),0,G),o.value=Ie,Ne(ee.error?.message||k("backend::lang.form.error_generic"),"danger")}}function Be(){return o.value.map(G=>G.uid)}function Ue(G){const Oe=new Map(o.value.map(Qe=>[Qe.uid,Qe])),ee=G.map(Qe=>Oe.get(Qe)).filter(Qe=>!!Qe),Ie=o.value.filter(Qe=>!G.includes(Qe.uid));o.value=[...ee,...Ie]}function rt(){L!==null&&clearTimeout(L),L=setTimeout(()=>{L=null,Bt()},H8)}function St(){return o.value.filter(G=>G.state==="done"&&G.file).map(G=>G.file.id)}async function Bt(){if(!O)return;const G=St();if(z){w=G;return}const Oe=N;N=null;const ee=++P;z=!0;try{const Ie=await O.reorder(G);if(w)return;!Ie.data&&!Y&&ee===P&&(Oe&&Ue(Oe),Ne(k("backend::lang.fileupload.reorder_failed"),"danger"))}finally{z=!1,w&&(w=null,Bt())}}function ze(G,Oe){const ee=o.value.findIndex(Ft=>Ft.uid===G);if(ee<0||Oe<0||Oe>=o.value.length||Oe===ee)return!1;N===null&&(N=Be());const Ie=[...o.value],[Qe]=Ie.splice(ee,1);return Ie.splice(Oe,0,Qe),o.value=Ie,d.value=k("backend::lang.fileupload.moved",{name:Qe.name,position:Oe+1,total:Ie.length}),rt(),!0}async function Ve(G,Oe){const ee=o.value.findIndex(Qe=>Qe.uid===Oe.uid);let Ie;switch(G.key){case"ArrowUp":case"ArrowLeft":Ie=ee-1;break;case"ArrowDown":case"ArrowRight":Ie=ee+1;break;default:return}G.preventDefault(),ze(Oe.uid,Ie)&&(await Xe(),m.value?.querySelector(`[data-handle="${Oe.uid}"]`)?.focus())}function Ke(G,Oe){p.value=Oe.uid,G.dataTransfer&&(G.dataTransfer.effectAllowed="move",G.dataTransfer.setData("text/plain",Oe.name))}function It(G,Oe){p.value!==null&&(G.preventDefault(),h.value=Oe.uid)}function Pa(G,Oe){p.value!==null&&(G.preventDefault(),ze(p.value,o.value.findIndex(ee=>ee.uid===Oe.uid)),_r())}function _r(){p.value=null,h.value=null}function Yr(G){const Oe=G.file?.content_type??G.source?.type??"";return r.includes(Oe.toLowerCase())}function Ut(G){return!G.file||!Yr(G)||C.value.has(G.uid)?null:t.field.protected?g.value[G.uid]??null:G.file.thumb_url||G.file.url||null}function la(){return typeof URL.revokeObjectURL=="function"}function Jr(G){const Oe=g.value[G];if(Oe!==void 0){la()&&URL.revokeObjectURL(Oe);const ee={...g.value};delete ee[G],g.value=ee}E.delete(G)}async function bi(G){if(!O||!G.file||E.has(G.uid)||typeof URL.createObjectURL!="function")return;E.add(G.uid);const Oe=await O.thumb(G.file.id);if(!(Y||!J(G.uid)||!E.has(G.uid))){if(!Oe){C.value=new Set([...C.value,G.uid]);return}g.value={...g.value,[G.uid]:URL.createObjectURL(Oe)}}}je(()=>o.value.map(G=>`${G.uid}:${G.state}`).join(","),()=>{if(t.field.protected)for(const G of o.value)G.state==="done"&&Yr(G)&&bi(G)});function Zr(G){C.value=new Set([...C.value,G.uid])}async function to(G,Oe){if(!O||!G.file||typeof URL.createObjectURL!="function")return;const ee=await O.download(G.file.id);if(!ee){Ne(k("backend::lang.form.error_generic"),"danger");return}const Ie=URL.createObjectURL(ee);D.push(Ie);const Qe=document.createElement("a");Qe.href=Ie,Qe.rel="noopener",Oe?Qe.download=G.file.file_name:Qe.target="_blank",Qe.click()}function Bn(G){return t.field.useCaption&&G.file?.title?G.file.title:G.name}function Ra(G){return H.value&&!!G.file?.pending}const oa=b(()=>x.value===null?void 0:J(x.value));function tn(G){x.value=G.uid,$.value=!0}function Ia(G){const Oe=oa.value;Oe&&(Oe.file=G)}function no(){const G=x.value;x.value=null,G!==null&&m.value?.querySelector(`[data-caption="${G}"]`)?.focus()}const xr=b(()=>{const G=t.field.thumbOptions?.mode;return G==="fit"||G==="auto"?"object-contain":"object-cover"});return wt(()=>{de(!0)}),n&&je(n.revision,()=>{de(!1)}),At(()=>{Y=!0,L!==null&&(clearTimeout(L),L=null);for(const G of o.value)G.handle?.abort();if(la()){for(const G of Object.values(g.value))URL.revokeObjectURL(G);for(const G of D)URL.revokeObjectURL(G)}}),(G,Oe)=>(v(),_("div",{id:e.controlId,ref_key:"root",ref:m,role:"group","data-fileupload":"","data-field-name":e.field.name,"aria-labelledby":e.field.label?`${e.controlId}-label`:void 0,"aria-describedby":e.describedBy||void 0,"aria-busy":i.value==="loading"?"true":void 0,class:"flex min-w-0 flex-col gap-4"},[i.value==="loading"?(v(),_("span",A6)):i.value==="failed"?(v(),_("p",T6,T(s(k)("backend::lang.fileupload.load_failed")),1)):(v(),_(pe,{key:2},[I.value&&ce.value.length===0?(v(),_("p",D6,T(s(k)("backend::lang.fileupload.empty")),1)):Z.value&&X.value&&ce.value.length>0?(v(),_("ul",O6,[(v(!0),_(pe,null,qe(ce.value,ee=>(v(),_("li",{key:ee.uid,"data-file-item":ee.uid,"data-state":ee.state,class:ye([[ee.state==="failed"?"border-danger":"border-border",p.value===ee.uid?"opacity-50":"",h.value===ee.uid&&p.value!==ee.uid?"border-2 border-dashed border-primary bg-sel":""],"relative overflow-hidden rounded-inner border bg-surface"]),onDragover:Ie=>It(Ie,ee),onDrop:Ie=>Pa(Ie,ee)},[S("div",P6,[ee.state==="uploading"?(v(),U(s(Sl),{key:0,size:20,class:"animate-spin text-muted","aria-hidden":"true"})):ee.state==="failed"?(v(),U(s(yt),{key:1,size:16,class:"text-danger","aria-hidden":"true"})):ee.state==="done"?(v(),_(pe,{key:2},[Ut(ee)&&!e.field.protected&&ee.file?.url?(v(),_("a",{key:0,href:ee.file.url,target:"_blank",rel:"noopener",class:"block size-full","aria-label":s(k)("backend::lang.fileupload.open_preview",{name:ee.name})},[S("img",{src:Ut(ee)??void 0,alt:Bn(ee),class:ye([xr.value,"size-full"]),onError:Ie=>Zr(ee)},null,42,I6)],8,R6)):Ut(ee)?(v(),_("button",{key:1,type:"button",class:"block size-full","aria-label":s(k)("backend::lang.fileupload.open_preview",{name:ee.name}),onClick:Ie=>to(ee,!1)},[S("img",{src:Ut(ee)??void 0,alt:Bn(ee),class:ye([xr.value,"size-full"])},null,10,N6)],8,q6)):C.value.has(ee.uid)?(v(),_("span",L6,[B(s(yv),{size:20,"aria-hidden":"true"}),_e(" "+T(s(k)("backend::lang.fileupload.preview_unavailable")),1)])):(v(),U(s(bl),{key:3,size:20,class:"text-muted","aria-hidden":"true"}))],64)):(v(),U(s(bl),{key:3,size:20,class:"text-muted","aria-hidden":"true"})),!I.value&&ee.state==="done"?(v(),_("button",{key:4,type:"button",draggable:"true","data-handle":ee.uid,"aria-label":s(k)("backend::lang.fileupload.move",{name:ee.name}),class:ye([bc,"absolute top-2 left-2 cursor-grab"]),onKeydown:Ie=>Ve(Ie,ee),onDragstart:Ie=>Ke(Ie,ee),onDragend:_r},[B(s(gs),{size:16,"aria-hidden":"true"})],40,B6)):ne("",!0),I.value?ne("",!0):(v(),_("div",F6,[e.field.useCaption&&ee.state==="done"?(v(),_("button",{key:0,type:"button","data-caption":ee.uid,"aria-label":s(k)("backend::lang.fileupload.edit_details",{name:ee.name}),class:ye(bc),onClick:Ie=>tn(ee)},[B(s(Ro),{size:16,"aria-hidden":"true"})],8,V6)):ne("",!0),ee.state==="failed"&&ee.retryable?(v(),_("button",{key:1,type:"button","data-action":"retry","aria-label":s(k)("backend::lang.fileupload.retry"),class:ye(bc),onClick:Ie=>ge(ee)},[B(s(Ji),{size:16,"aria-hidden":"true"})],8,z6)):ne("",!0),S("button",{type:"button","data-action":"remove-file","aria-label":ee.state==="uploading"||ee.state==="queued"?s(k)("backend::lang.fileupload.cancel_upload",{name:ee.name}):s(k)("backend::lang.form.remove_item",{name:ee.name}),class:ye(W8),onClick:Ie=>Se(ee)},[B(s(yn),{size:16,"aria-hidden":"true"})],8,j6)]))]),S("div",U6,[S("span",{class:"truncate text-[13px]",title:Bn(ee)},T(Bn(ee)),9,H6),S("span",W6,[ee.state==="queued"?(v(),_("span",K6,T(s(k)("backend::lang.fileupload.queued")),1)):ee.state==="uploading"?(v(),_("span",G6,T(s(k)("backend::lang.fileupload.uploading",{percent:ee.progress})),1)):(v(),_("span",Y6,T(Q(ee.size)),1)),Ra(ee)?(v(),_("span",J6,T(s(k)("backend::lang.fileupload.unsaved")),1)):ne("",!0)]),ee.state==="uploading"?(v(),U(s(cc),{key:0,"model-value":ee.progress,max:100,"aria-label":s(k)("backend::lang.fileupload.uploading",{percent:ee.progress}),class:"h-1 w-full overflow-hidden rounded-pill bg-subtle"},{default:F(()=>[B(s(dc),{class:"h-full bg-primary",style:Dn({width:`${ee.progress}%`})},null,8,["style"])]),_:2},1032,["model-value","aria-label"])):ne("",!0),ee.state==="failed"?(v(),_("p",Z6,[S("span",X6,T(s(k)("backend::lang.fileupload.upload_error"))+": ",1),_e(T(ee.error),1)])):ne("",!0)])],42,M6))),128))])):Z.value&&!X.value&&ce.value.length>0?(v(),_("div",Q6,[(v(!0),_(pe,null,qe(ce.value,ee=>(v(),_("div",{key:ee.uid,"data-file-item":ee.uid,"data-state":ee.state,class:"flex items-start gap-4"},[S("div",{class:ye([ee.state==="failed"?"border-danger":"border-border","flex size-40 shrink-0 items-center justify-center overflow-hidden rounded-inner border bg-subtle"])},[ee.state==="uploading"?(v(),U(s(Sl),{key:0,size:20,class:"animate-spin text-muted","aria-hidden":"true"})):ee.state==="failed"?(v(),U(s(yt),{key:1,size:16,class:"text-danger","aria-hidden":"true"})):Ut(ee)?(v(),_("img",{key:2,src:Ut(ee)??void 0,alt:Bn(ee),class:ye([xr.value,"size-full"]),onError:Ie=>Zr(ee)},null,42,t8)):C.value.has(ee.uid)?(v(),_("span",n8,[B(s(yv),{size:20,"aria-hidden":"true"}),_e(" "+T(s(k)("backend::lang.fileupload.preview_unavailable")),1)])):(v(),U(s(bl),{key:4,size:20,class:"text-muted","aria-hidden":"true"}))],2),S("div",a8,[S("span",{class:"truncate font-semibold",title:Bn(ee)},T(Bn(ee)),9,r8),S("span",l8,[ee.state==="queued"?(v(),_("span",o8,T(s(k)("backend::lang.fileupload.queued")),1)):ee.state==="uploading"?(v(),_("span",i8,T(s(k)("backend::lang.fileupload.uploading",{percent:ee.progress})),1)):(v(),_("span",s8,T(Q(ee.size)),1)),Ra(ee)?(v(),_("span",u8,T(s(k)("backend::lang.fileupload.unsaved")),1)):ne("",!0)]),ee.state==="uploading"?(v(),U(s(cc),{key:0,"model-value":ee.progress,max:100,"aria-label":s(k)("backend::lang.fileupload.uploading",{percent:ee.progress}),class:"h-1 w-full overflow-hidden rounded-pill bg-subtle"},{default:F(()=>[B(s(dc),{class:"h-full bg-primary",style:Dn({width:`${ee.progress}%`})},null,8,["style"])]),_:2},1032,["model-value","aria-label"])):ne("",!0),ee.state==="failed"?(v(),_("p",c8,[S("span",d8,T(s(k)("backend::lang.fileupload.upload_error"))+": ",1),_e(T(ee.error),1)])):ne("",!0),I.value?ne("",!0):(v(),_("div",f8,[ee.state!=="failed"?(v(),U(Ze,{key:0,size:"sm",variant:"outline","data-action":"replace-file",icon:s(Zi),onClick:we},{default:F(()=>[_e(T(s(k)("backend::lang.fileupload.replace_file")),1)]),_:1},8,["icon"])):ne("",!0),ee.state==="failed"&&ee.retryable?(v(),U(Ze,{key:1,size:"sm",variant:"outline","data-action":"retry",icon:s(Ji),onClick:Ie=>ge(ee)},{default:F(()=>[_e(T(s(k)("backend::lang.fileupload.retry")),1)]),_:1},8,["icon","onClick"])):ne("",!0),e.field.useCaption&&ee.state==="done"?(v(),U(Ze,{key:2,size:"sm",variant:"outline","data-caption":ee.uid,icon:s(Ro),onClick:Ie=>tn(ee)},{default:F(()=>[_e(T(s(k)("backend::lang.fileupload.details_submit")),1)]),_:1},8,["data-caption","icon","onClick"])):ne("",!0),B(Ze,{size:"sm",variant:"danger","data-action":"remove-file",icon:s(yn),onClick:Ie=>Se(ee)},{default:F(()=>[_e(T(s(k)("backend::lang.fileupload.remove_file")),1)]),_:1},8,["icon","onClick"])]))])],8,e8))),128))])):ce.value.length>0?(v(),_("ul",p8,[(v(!0),_(pe,null,qe(ce.value,ee=>(v(),_("li",{key:ee.uid,"data-file-item":ee.uid,"data-state":ee.state,class:ye([[ee.state==="failed"?"border-danger":"border-border",p.value===ee.uid?"opacity-50":"",h.value===ee.uid&&p.value!==ee.uid?"border-2 border-dashed border-primary bg-sel":""],"flex min-h-14 flex-col justify-center gap-1 rounded-inner border bg-surface px-3 py-2"]),onDragover:Ie=>It(Ie,ee),onDrop:Ie=>Pa(Ie,ee)},[S("div",m8,[X.value&&!I.value&&ee.state==="done"?(v(),_("button",{key:0,type:"button",draggable:"true","data-handle":ee.uid,"aria-label":s(k)("backend::lang.fileupload.move",{name:ee.name}),class:ye([ul,"cursor-grab"]),onKeydown:Ie=>Ve(Ie,ee),onDragstart:Ie=>Ke(Ie,ee),onDragend:_r},[B(s(gs),{size:16,"aria-hidden":"true"})],40,h8)):ne("",!0),S("span",y8,[ee.state==="uploading"?(v(),U(s(Sl),{key:0,size:16,class:"animate-spin text-muted","aria-hidden":"true"})):ee.state==="failed"?(v(),U(s(yt),{key:1,size:16,class:"text-danger","aria-hidden":"true"})):Ut(ee)?(v(),_("img",{key:2,src:Ut(ee)??void 0,alt:"",class:"size-8 object-cover",onError:Ie=>Zr(ee)},null,40,g8)):(v(),U(s(bl),{key:3,size:16,class:"text-muted","aria-hidden":"true"}))]),S("span",b8,[e.field.useCaption&&ee.file?.title?(v(),_(pe,{key:0},[S("span",{class:"truncate font-semibold",title:ee.file.title},T(ee.file.title),9,_8),S("span",{class:"truncate text-[13px] text-muted",title:ee.name},T(ee.name),9,x8)],64)):(v(),_("span",{key:1,class:"truncate",title:ee.name},T(ee.name),9,k8))]),S("span",w8,[ee.state==="queued"?(v(),_("span",$8,T(s(k)("backend::lang.fileupload.queued")),1)):ee.state==="uploading"?(v(),_("span",C8,T(s(k)("backend::lang.fileupload.uploading",{percent:ee.progress})),1)):(v(),_("span",S8,T(Q(ee.size)),1)),Ra(ee)?(v(),_("span",E8,T(s(k)("backend::lang.fileupload.unsaved")),1)):ne("",!0)]),!X.value&&!I.value&&ee.state!=="failed"?(v(),U(Ze,{key:1,size:"sm",variant:"outline","data-action":"replace-file",icon:s(Zi),onClick:we},{default:F(()=>[_e(T(s(k)("backend::lang.fileupload.replace_file")),1)]),_:1},8,["icon"])):ne("",!0),S("span",A8,[ee.state==="done"&&ee.file?(v(),_(pe,{key:0},[!e.field.protected&&ee.file.url?(v(),_("a",{key:0,href:ee.file.url,download:"",target:"_blank",rel:"noopener","aria-label":s(k)("backend::lang.fileupload.download",{name:ee.name}),class:ye(ul)},[B(s(Yc),{size:16,"aria-hidden":"true"})],8,T8)):e.field.protected?(v(),_("button",{key:1,type:"button","data-action":"download","aria-label":s(k)("backend::lang.fileupload.download",{name:ee.name}),class:ye(ul),onClick:Ie=>to(ee,!0)},[B(s(Yc),{size:16,"aria-hidden":"true"})],8,D8)):ne("",!0),e.field.useCaption&&!I.value?(v(),_("button",{key:2,type:"button","data-caption":ee.uid,"aria-label":s(k)("backend::lang.fileupload.edit_details",{name:ee.name}),class:ye(ul),onClick:Ie=>tn(ee)},[B(s(Ro),{size:16,"aria-hidden":"true"})],8,O8)):ne("",!0)],64)):ne("",!0),ee.state==="failed"&&ee.retryable?(v(),_("button",{key:1,type:"button","data-action":"retry","aria-label":s(k)("backend::lang.fileupload.retry"),class:ye(ul),onClick:Ie=>ge(ee)},[B(s(Ji),{size:16,"aria-hidden":"true"})],8,M8)):ne("",!0),I.value?ne("",!0):(v(),_("button",{key:2,type:"button","data-action":"remove-file","aria-label":ee.state==="uploading"||ee.state==="queued"?s(k)("backend::lang.fileupload.cancel_upload",{name:ee.name}):s(k)("backend::lang.form.remove_item",{name:ee.name}),class:ye([ul,"hover:bg-danger-soft hover:text-danger"]),onClick:Ie=>Se(ee)},[B(s(yn),{size:16,"aria-hidden":"true"})],8,P8))])]),ee.state==="uploading"?(v(),U(s(cc),{key:0,"model-value":ee.progress,max:100,"aria-label":s(k)("backend::lang.fileupload.uploading",{percent:ee.progress}),class:"h-1 w-full overflow-hidden rounded-pill bg-subtle"},{default:F(()=>[B(s(dc),{class:"h-full bg-primary",style:Dn({width:`${ee.progress}%`})},null,8,["style"])]),_:2},1032,["model-value","aria-label"])):ne("",!0),ee.state==="failed"?(v(),_("p",R8,[S("span",I8,T(s(k)("backend::lang.fileupload.upload_error"))+": ",1),_e(T(ee.error),1)])):ne("",!0)],42,v8))),128))])):ne("",!0),me.value?(v(),_("button",{key:4,type:"button","data-fileupload-dropzone":"","aria-describedby":e.describedBy||void 0,class:ye([[u.value?"border-solid border-primary bg-sel":e.invalid?"border-dashed border-danger bg-subtle":"border-dashed border-border-strong bg-subtle"],"flex min-h-[112px] w-full flex-col items-center justify-center gap-2 rounded-control border-[1.5px] px-4 py-6 text-center transition-colors duration-150 ease-out hover:bg-hover"]),onClick:we,onDragover:Ce,onDragleave:Oe[0]||(Oe[0]=ee=>u.value=!1),onDrop:he},[S("span",N8,[B(s(Zi),{size:20,class:"text-muted"})]),S("span",L8,T(ke.value),1),V.value!==""?(v(),_("span",B8,T(V.value),1)):ne("",!0)],42,q8)):be.value&&V.value!==""?(v(),_("p",F8,T(V.value),1)):ne("",!0),c.value>0?(v(),_("p",V8,[B(s(yt),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(s(qr)("backend::lang.fileupload.too_many",c.value,{max:j.value??0})),1)])):ne("",!0)],64)),S("input",{ref_key:"input",ref:f,type:"file",hidden:"",tabindex:"-1","data-fileupload-input":"",accept:W.value,multiple:X.value||void 0,onChange:De},null,40,z8),S("p",j8,T(d.value),1),e.field.useCaption?(v(),U(S6,{key:3,open:$.value,"onUpdate:open":Oe[1]||(Oe[1]=ee=>$.value=ee),file:oa.value?.file??null,routes:s(O),preview:oa.value?Ut(oa.value):null,"id-prefix":e.controlId,onSaved:Ia,onClosed:no},null,8,["open","file","routes","preview","id-prefix"])):ne("",!0)],8,E6))}}),G8=["id","name","value","required","aria-required","aria-invalid","aria-describedby"],Y8=le({__name:"NumberField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>n.modelValue===null||n.modelValue===void 0?"":String(n.modelValue)),l=b(()=>Kr(n.field));function o(i){const u=i.target.value.trim();if(u===""){a("update:modelValue",null);return}const c=Number(u);a("update:modelValue",Number.isFinite(c)?c:null)}return(i,u)=>(v(),_("input",He({id:e.controlId},l.value,{name:e.field.name,type:"number",inputmode:"decimal",value:r.value,required:e.field.required||void 0,"aria-required":e.field.required?"true":void 0,"aria-invalid":e.invalid?"true":void 0,"aria-describedby":e.describedBy||void 0,class:[s(Nt)(e.invalid),"h-input tabular-nums"],onInput:o}),null,16,G8))}}),J8=["id","aria-labelledby","aria-describedby"],Z8=le({__name:"PartialField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},setup(e){const t=e;return(n,a)=>(v(),_("div",{id:e.controlId,role:"group","data-partial-field":"","aria-labelledby":t.field.label?`${e.controlId}-label`:void 0,"aria-describedby":e.describedBy||void 0},[e.source?(v(),U(If,{key:0,variant:"field",source:e.source,name:t.field.path||t.field.name,"record-id":e.recordId??null},null,8,["source","name","record-id"])):(v(),U(yu,{key:1,"data-partial-failed":"",text:s(k)("backend::lang.extension.partial_failed")},null,8,["text"]))],8,J8))}}),X8={class:"flex min-w-0 flex-col gap-1.5"},Q8={class:"relative"},eR=["id","name","type","value","placeholder","disabled","required","aria-required","aria-invalid","aria-describedby"],tR=["aria-pressed","aria-label","disabled"],nR=["id","data-secret-state","role"],aR={key:3},rR=le({__name:"PasswordField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=R(!1),l=b(()=>typeof n.modelValue=="string"?n.modelValue:""),o=b(()=>Kr(n.field)),i=ut(Xl,null);i&&je(i.revision,()=>{r.value=!1});const u=ut(h1,null),c=b(()=>u?.value[n.field.name]??""),d=b(()=>c.value!==""),f=b(()=>c.value==="stored"&&n.modelValue===null),m=b(()=>`${n.controlId}-secret`),p=b(()=>[n.describedBy??"",d.value?m.value:""].filter(Boolean).join(" ")),h=b(()=>{if(c.value==="stored"&&!f.value)return k("backend::lang.secret.placeholder_stored");const g=o.value.placeholder;return typeof g=="string"?g:void 0});function x(){r.value=!1,a("update:modelValue",null)}function $(){a("update:modelValue","")}return(g,C)=>(v(),_("div",X8,[S("div",Q8,[S("input",He({id:e.controlId,autocomplete:"new-password",spellcheck:"false"},o.value,{name:e.field.name,type:r.value?"text":"password",value:f.value?"":l.value,placeholder:h.value,disabled:f.value||void 0,required:e.field.required||void 0,"aria-required":e.field.required?"true":void 0,"aria-invalid":e.invalid?"true":void 0,"aria-describedby":p.value||void 0,class:[s(Nt)(e.invalid),"h-input pr-12"],onInput:C[0]||(C[0]=E=>a("update:modelValue",E.target.value))}),null,16,eR),S("button",{type:"button","data-password-toggle":"","aria-pressed":r.value?"true":"false","aria-label":s(k)(r.value?"backend::lang.form.hide_password":"backend::lang.form.show_password"),disabled:f.value||void 0,class:"absolute top-1/2 right-1.5 flex size-8 -translate-y-1/2 items-center justify-center rounded-pager text-muted transition-colors duration-150 ease-out hover:bg-hover hover:text-text disabled:opacity-60",onClick:C[1]||(C[1]=E=>r.value=!r.value)},[(v(),U(jt(r.value?s(k2):s($2)),{size:16,"aria-hidden":"true"}))],8,tR)]),d.value?(v(),_("p",{key:0,id:m.value,"data-secret-state":f.value?"clearing":c.value,role:f.value?"status":void 0,class:ye([f.value?"text-danger":"text-muted","flex flex-wrap items-center gap-2 text-[13px]"])},[f.value?(v(),_(pe,{key:0},[B(s(yt),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(s(k)("backend::lang.secret.clear_pending")),1),B(Ze,{variant:"ghost",size:"sm",icon:s(ug),"data-action":"secret-undo",onClick:$},{default:F(()=>[_e(T(s(k)("backend::lang.secret.undo")),1)]),_:1},8,["icon"])],64)):c.value==="stored"?(v(),_(pe,{key:1},[B(s(Ya),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(s(k)("backend::lang.secret.stored")),1),B(Ze,{variant:"ghost",size:"sm",icon:s(mr),"data-action":"secret-clear",onClick:x},{default:F(()=>[_e(T(s(k)("backend::lang.secret.clear")),1)]),_:1},8,["icon"])],64)):c.value==="env"?(v(),_(pe,{key:2},[B(s(fi),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(s(k)("backend::lang.secret.env")),1)],64)):(v(),_("span",aR,T(s(k)("backend::lang.secret.empty")),1))],10,nR)):ne("",!0)]))}}),lR=["aria-labelledby","data-ml-field"],oR={class:"flex flex-wrap items-center gap-2"},iR=["value","aria-label"],sR=["value"],bu=le({__name:"MLField",props:{inner:{},innerType:{},mlType:{},contentLocale:{type:Boolean},field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>Zn(n.modelValue)),l=ut(Ts,null),o=b(()=>{const g=l?.value;return g&&g.length>0?[...g]:[]}),i=R(o.value[0]??"en"),u=b(()=>`${n.controlId}-label`),c=b(()=>`${n.controlId}-editor`),d=b(()=>r.value[i.value]??""),f=b(()=>({...n.field,type:n.innerType})),m=b(()=>n.contentLocale?{contentLocale:i.value}:{});function p(g){g&&(i.value=g)}function h(g){const C=g.target.value;p(C),CP(C)}function x(g){a("update:modelValue",{...r.value,[i.value]:g})}function $(g){const C=g.detail;typeof C=="string"&&C!==""&&p(C)}return wt(()=>{window.addEventListener(ti,$)}),Ea(()=>{window.removeEventListener(ti,$)}),(g,C)=>(v(),_("div",{class:"flex flex-col gap-1.5",role:"group","aria-labelledby":u.value,"data-ml-field":e.mlType},[S("div",oR,[S("select",{"data-ml-locale":"",class:"rounded-control border border-border-strong bg-surface px-2 py-1 text-[13px]",value:i.value,"aria-label":`Locale for ${e.field.label||e.field.name}`,onChange:h},[(v(!0),_(pe,null,qe(o.value,E=>(v(),_("option",{key:E,value:E},T(E),9,sR))),128))],40,iR)]),(v(),U(jt(e.inner),He({field:f.value,"model-value":d.value,"control-id":c.value,invalid:e.invalid,"described-by":e.describedBy,source:e.source,"record-id":e.recordId},m.value,{"onUpdate:modelValue":x}),null,16,["field","model-value","control-id","invalid","described-by","source","record-id"]))],8,lR))}}),uR=["id","aria-labelledby","aria-describedby","aria-busy"],cR={key:0,"data-plugin-field-skeleton":"",class:"h-[42px] w-full rounded-control bg-skel","aria-hidden":"true"},b1=le({__name:"PluginField",props:{contentLocale:{},field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=ut(Ff,null),l=R("loading"),o=R(null);let i=null,u=!1;const c=b(()=>r?.value||ar.value),d=b(()=>JSON.stringify(n.field.typeOptions??{})),f=b(()=>n.field.readOnly===!0);function m(O,L){if(Object.is(O,L))return!0;if(O===null||L===null||typeof O!="object"||typeof L!="object")return!1;try{return JSON.stringify(O)===JSON.stringify(L)}catch{return!1}}function p(O,L){m(O.value,L)||(O.value=L)}function h(O,L,N){N?O.setAttribute(L,""):O.removeAttribute(L)}function x(O){O.setAttribute("field-name",n.field.name),O.setAttribute("record-id",n.recordId==null?"":String(n.recordId)),O.setAttribute("locale",n.contentLocale??""),O.setAttribute("ui-locale",c.value),O.setAttribute("options",d.value),h(O,"disabled",f.value),h(O,"invalid",n.invalid===!0)}function $(O){let L;return{promise:new Promise((z,w)=>{L=setTimeout(()=>w(new Error("field type element was not defined in time")),O)}),cancel:()=>clearTimeout(L)}}async function g(O){const L=await uM(O);if(customElements.get(O))return;if(L.length>0)throw new Error(`plugin script failed: ${L.join(", ")}`);const N=$(y1);try{await Promise.race([customElements.whenDefined(O),N.promise])}finally{N.cancel()}}async function C(O){const L=i,N=O.detail;if(!L||N===null||typeof N!="object")return;const{id:z,file:w}=N,P=Z=>{!u&&i===L&&L.dispatchEvent(new CustomEvent(QP,{detail:{id:z,...Z}}))},Y=()=>k("backend::lang.fileupload.upload_failed"),I=n.source;if(!(w instanceof Blob)||!I){P({error:Y()});return}const X=w instanceof File&&w.name!==""?w.name:"upload";try{const Z=await Le.POST("/{vendor}/{plugin}/{controller}/{id}/fields/{field}/upload",{params:{path:{...I,id:n.recordId??0,field:n.field.name}},body:{file:""},bodySerializer:()=>{const H=new FormData;return H.append("file",w,X),H}});if(Z.data){P({url:Z.data.data.url});return}const j=Z.response.status===422?qf(Z.error?.error):"";P({error:j||Y()})}catch{P({error:Y()})}}function E(O){C(O)}function D(O){const L=O.detail;L!==null&&typeof L=="object"&&Object.hasOwn(L,"value")&&a("update:modelValue",L.value)}return wt(async()=>{const O=n.field.element??"";try{if(O==="")throw new Error("plugin field without an element");if(await g(O),u||!o.value)return;const L=document.createElement(O);x(L),p(L,n.modelValue),L.addEventListener(km,D),L.addEventListener(wm,E),o.value.append(L),i=L,l.value="ready"}catch{u||(l.value="failed")}}),je(()=>[n.recordId,n.invalid,n.contentLocale,f.value,c.value,d.value],()=>{i&&x(i)}),je(()=>n.modelValue,O=>{i&&p(i,O)},{deep:!0}),At(()=>{u=!0,i?.removeEventListener(km,D),i?.removeEventListener(wm,E),i=null}),(O,L)=>l.value==="failed"?(v(),U(yu,{key:0,id:e.controlId,"data-plugin-field-failed":"","aria-describedby":e.describedBy||void 0,text:s(k)("backend::lang.extension.widget_failed")},null,8,["id","aria-describedby","text"])):(v(),_("div",{key:1,id:e.controlId,role:"group","data-plugin-field":"","aria-labelledby":e.field.label?`${e.controlId}-label`:void 0,"aria-describedby":e.describedBy||void 0,"aria-busy":l.value==="loading"?"true":void 0,class:"flex min-h-input min-w-0 flex-col"},[l.value==="loading"?(v(),_("span",cR)):ne("",!0),S("div",{ref_key:"mountPoint",ref:o,class:"contents"},null,512)],8,uR))}}),dR=le({__name:"MLPluginField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t;return(r,l)=>(v(),U(bu,He(n,{inner:b1,"inner-type":e.field.type,"ml-type":e.field.type,"content-locale":"","onUpdate:modelValue":l[0]||(l[0]=o=>a("update:modelValue",o))}),null,16,["inner-type","ml-type"]))}}),fR=["id"],pR=["id","aria-labelledby","aria-label","aria-describedby","data-mode"],vR=["aria-labelledby"],mR=["id"],hR={class:"min-w-0 [overflow-wrap:anywhere]"},yR={key:0,class:"shrink-0 text-[12px] font-semibold text-muted","aria-hidden":"true"},gR=["data-permission","data-locked"],bR={class:"flex min-w-0 flex-col"},_R=["id"],xR=["id"],kR=le({__name:"PermissionEditorField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>n.field.permissionOptions??[]),l=b(()=>n.field.mode==="radio"),o=b(()=>!!n.field.readOnly||!!Kr(n.field).readonly),i=b(()=>v1(n.field,n.modelValue)),u=b(()=>{const $=[],g=[];for(const C of r.value){if(!C.tab){g.push(C);continue}let E=$.find(D=>D.label===C.tab);E||(E={key:`tab:${C.tab}`,label:C.tab,options:[]},$.push(E)),E.options.push(C)}return g.length>0&&$.push({key:"other",label:k("backend::lang.permissioneditor.other"),options:g}),$}),c=[{value:"1",label:"backend::lang.permissioneditor.allow",checked:"data-[state=checked]:bg-ok-bg data-[state=checked]:text-ok-text"},{value:"0",label:"backend::lang.permissioneditor.inherit",checked:"data-[state=checked]:bg-surface data-[state=checked]:text-text data-[state=checked]:shadow-tab"},{value:"-1",label:"backend::lang.permissioneditor.deny",checked:"data-[state=checked]:bg-danger-soft data-[state=checked]:text-danger"}],d=b(()=>`${n.controlId}-label`);function f($,g){return`${n.controlId}-${$}-${g}`}function m($){return o.value||!!$.locked}function p($){return!!$.locked&&!o.value}function h($){return i.value[$.code]??0}function x($,g){if(m($))return;const C={...i.value};g===1||l.value&&g===-1?C[$.code]=g:delete C[$.code],a("update:modelValue",C)}return($,g)=>r.value.length===0?(v(),_("div",{key:0,id:e.controlId,"data-permission-empty":"",class:"flex min-h-input items-center rounded-control border border-border bg-subtle px-3.5 text-muted"},T(s(k)("backend::lang.permissioneditor.empty")),9,fR)):(v(),_("div",{key:1,id:e.controlId,role:"group","aria-labelledby":e.field.label?d.value:void 0,"aria-label":e.field.label?void 0:e.field.name,"aria-describedby":e.describedBy||void 0,class:ye([e.invalid?"border-danger":"border-border","overflow-hidden rounded-inner border"]),"data-permission-editor":"","data-mode":l.value?"radio":"checkbox"},[(v(!0),_(pe,null,qe(u.value,(C,E)=>(v(),_("div",{key:C.key,role:"group","aria-labelledby":`${e.controlId}-section-${E}`,"data-permission-section":""},[S("h3",{id:`${e.controlId}-section-${E}`,class:ye([E>0?"border-t border-border":"","flex h-row-head items-center justify-between gap-4 bg-subtle px-4 font-semibold"])},[S("span",hR,T(C.label),1),l.value?ne("",!0):(v(),_("span",yR,T(s(k)("backend::lang.permissioneditor.allow")),1))],10,mR),(v(!0),_(pe,null,qe(C.options,(D,O)=>(v(),_("div",{key:D.code,"data-permission":D.code,"data-locked":p(D)?"":void 0,class:"flex min-h-[56px] items-center justify-between gap-x-4 gap-y-2 border-t border-border px-4 py-3 max-sm:flex-col max-sm:items-start"},[S("div",bR,[(v(),U(jt(l.value?"span":"label"),{id:`${f(E,O)}-label`,for:l.value?void 0:f(E,O),class:"[overflow-wrap:anywhere]"},{default:F(()=>[_e(T(D.label||D.code)+" ",1),p(D)?(v(),U(s(Ya),{key:0,size:14,class:"ml-1 inline-block align-[-2px] text-muted","aria-hidden":"true"})):ne("",!0)]),_:2},1032,["id","for"])),p(D)?(v(),_("p",{key:0,id:`${f(E,O)}-note`,class:"text-[13px] text-muted [overflow-wrap:anywhere]","data-permission-locked":""},T(s(k)("backend::lang.permissioneditor.locked")),9,_R)):D.comment?(v(),_("p",{key:1,id:`${f(E,O)}-note`,class:"text-[13px] text-muted [overflow-wrap:anywhere]"},T(D.comment),9,xR)):ne("",!0)]),l.value?(v(),U(s(Nb),{key:0,orientation:"horizontal","model-value":String(h(D)),disabled:m(D),"aria-disabled":m(D)?"true":void 0,"aria-labelledby":`${f(E,O)}-label`,"aria-describedby":p(D)||D.comment?`${f(E,O)}-note`:void 0,class:"inline-flex shrink-0 gap-1 rounded-inner border border-border bg-subtle p-1","onUpdate:modelValue":L=>x(D,Number(L))},{default:F(()=>[(v(),_(pe,null,qe(c,L=>B(s(Lb),{key:L.value,value:L.value,"data-segment":L.value,class:ye([L.checked,"inline-flex h-pager items-center rounded-tab px-4 text-[13px] whitespace-nowrap text-muted transition-colors duration-150 ease-out hover:text-text disabled:cursor-not-allowed disabled:hover:text-muted data-[state=checked]:text-[14px] data-[state=checked]:font-semibold"])},{default:F(()=>[_e(T(s(k)(L.label)),1)]),_:2},1032,["value","data-segment","class"])),64))]),_:1},8,["model-value","disabled","aria-disabled","aria-labelledby","aria-describedby","onUpdate:modelValue"])):(v(),U(s(b4),{key:1,id:f(E,O),"model-value":h(D)===1,disabled:m(D),"aria-disabled":m(D)?"true":void 0,"aria-labelledby":`${f(E,O)}-label`,"aria-describedby":p(D)||D.comment?`${f(E,O)}-note`:void 0,class:"flex size-[18px] shrink-0 items-center justify-center rounded-checkbox border border-border-strong bg-surface disabled:cursor-not-allowed disabled:opacity-60 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-on-primary","onUpdate:modelValue":L=>x(D,L===!0?1:0)},{default:F(()=>[B(s(x4),null,{default:F(()=>[B(s(rr),{size:14,"aria-hidden":"true"})]),_:1})]),_:1},8,["id","model-value","disabled","aria-disabled","aria-labelledby","aria-describedby","onUpdate:modelValue"]))],8,gR))),128))],8,vR))),128))],10,pR))}}),wR=le({__name:"FieldRenderer",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>I1(n.field));return(l,o)=>(v(),U(jt(r.value),{field:e.field,"model-value":e.modelValue,"control-id":e.controlId,invalid:e.invalid,"described-by":e.describedBy,labels:e.labels,source:e.source,"record-id":e.recordId,"onUpdate:modelValue":o[0]||(o[0]=i=>a("update:modelValue",i))},null,8,["field","model-value","control-id","invalid","described-by","labels","source","record-id"]))}}),$R=["data-field"],CR=["id"],SR={key:0,class:"text-danger","aria-hidden":"true"},ER=["id","for"],AR={key:0,class:"text-danger","aria-hidden":"true"},TR=["id"],DR=["id"],OR=["id"],MR=le({__name:"FormField",props:{field:{},modelValue:{},errors:{},notices:{},labels:{},source:{},recordId:{},idPrefix:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=b(()=>`${n.idPrefix??"field"}-${n.field.name}`),l=b(()=>r.value),o=b(()=>`${r.value}-comment`),i=b(()=>`${r.value}-error`),u=b(()=>`${r.value}-notice`),c=b(()=>(n.errors?.length??0)>0),d=b(()=>(n.notices?.length??0)>0),f=b(()=>j9(n.field.type)),m=b(()=>U9(n.field.type)||xu(n.field)),p=b(()=>!f.value&&!!n.field.comment),h=b(()=>[p.value||f.value&&n.field.comment?o.value:"",c.value?i.value:"",d.value?u.value:""].filter(Boolean).join(" "));return(x,$)=>(v(),_("div",{class:"flex min-w-0 flex-col gap-1.5","data-field":e.field.name},[m.value&&e.field.label?(v(),_("span",{key:0,id:`${l.value}-label`,class:"font-semibold"},[_e(T(e.field.label),1),e.field.required?(v(),_("span",SR," *")):ne("",!0)],8,CR)):!f.value&&!m.value?(v(),_("label",{key:1,id:`${l.value}-label`,for:l.value,class:"font-semibold"},[_e(T(e.field.label||e.field.name),1),e.field.required?(v(),_("span",AR," *")):ne("",!0)],8,ER)):ne("",!0),B(wR,{field:e.field,"model-value":e.modelValue,"control-id":l.value,invalid:c.value,"described-by":h.value,labels:e.labels,source:e.source,"record-id":e.recordId,"onUpdate:modelValue":$[0]||($[0]=g=>a("update:modelValue",g))},null,8,["field","model-value","control-id","invalid","described-by","labels","source","record-id"]),p.value?(v(),_("p",{key:2,id:o.value,class:"text-[13px] text-muted"},T(e.field.comment),9,TR)):ne("",!0),d.value?(v(),_("div",{key:3,id:u.value,role:"status","data-field-notice":"",class:"summer-callout summer-callout--warning text-[13px]!"},[(v(!0),_(pe,null,qe(e.notices,(g,C)=>(v(),_("p",{key:C,class:"summer-callout__text"},T(g),1))),128))],8,DR)):ne("",!0),c.value?(v(),_("div",{key:4,id:i.value,class:"flex flex-col gap-0.5 text-[13px] text-danger"},[(v(!0),_(pe,null,qe(e.errors,(g,C)=>(v(),_("p",{key:C,class:"flex items-center gap-1.5"},[B(s(yt),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,T(g),1)]))),128))],8,OR)):ne("",!0)],8,$R))}}),PR={class:"grid grid-cols-1 gap-x-6 gap-y-[22px] min-[600px]:grid-cols-2"},Ql=le({__name:"FormGrid",props:{fields:{},values:{},errors:{},notices:{},labels:{},source:{},recordId:{},idPrefix:{},scopePath:{}},emits:["update"],setup(e,{emit:t}){const n=e,a=t;xt(gu,{fields:b(()=>n.fields),values:b(()=>n.values),path:l=>n.scopePath?`${n.scopePath}.${l}`:l});function r(l){if(l.type===Gr)return"col-span-full";switch(l.span){case"left":return"min-[600px]:col-start-1";case"right":return"min-[600px]:col-start-2";case"auto":case"row":return"";default:return"col-span-full"}}return(l,o)=>(v(),_("div",PR,[(v(!0),_(pe,null,qe(e.fields,i=>(v(),U(MR,{key:i.name,class:ye(r(i)),field:i,"model-value":e.values[i.name],errors:e.errors[i.name],notices:e.notices?.[i.name],labels:e.labels?.[i.name],source:e.source,"record-id":e.recordId,"id-prefix":e.idPrefix,"onUpdate:modelValue":u=>a("update",i.name,u)},null,8,["class","field","model-value","errors","notices","labels","source","record-id","id-prefix","onUpdate:modelValue"]))),128))]))}}),RR=["data-preview-field"],IR=["id"],qR={class:"m-0 min-w-0"},NR={key:0,"data-switch":"true",class:"inline-flex h-6 items-center rounded-pill bg-ok-bg px-2.5 text-[12px] font-semibold text-ok-text"},LR={key:1,"data-switch":"false",class:"inline-flex h-6 items-center rounded-pill border border-border-strong px-2.5 text-[12px] font-semibold text-muted"},BR={class:"flex size-[22px] shrink-0 items-center justify-center rounded-full bg-primary text-[10px] font-bold text-on-primary","aria-hidden":"true"},FR={class:"font-semibold"},VR={key:0,class:"px-2 text-muted","data-empty":""},zR={key:0},jR={key:1,class:"text-muted","data-empty":""},UR={key:0},HR={key:1,class:"text-muted","data-empty":""},_c="flex min-h-input items-center rounded-control border border-border bg-subtle px-3.5 [overflow-wrap:anywhere]",_1=le({__name:"PreviewField",props:{field:{},value:{},labels:{},source:{},recordId:{},idPrefix:{}},setup(e){const t=e,n=new Set(["datepicker","fileupload","partial","permissioneditor","richeditor","repeater","money"]),a=b(()=>`${t.idPrefix??"preview"}-${t.field.name}`),r=b(()=>`${a.value}-label`),l=b(()=>{const p=t.field.type;return n.has(p)||xu(t.field)?"control":p==="checkbox"||p==="switch"?"toggle":p==="relation"?t.field.multiple?"chips":"relation":p==="textarea"?"textarea":"text"}),o=b(()=>({...t.field,readOnly:!0})),i=b(()=>I1(t.field));function u(p){return p==null||p===""}const c=b(()=>{const p=t.value;if(u(p)||typeof p=="object")return"";if(t.field.type==="dropdown"){const h=(t.field.options??[]).find(x=>String(x.value)===String(p));return h?h.label:String(p)}return String(p)}),d=b(()=>t.labels?.[0]?.label??""),f=b(()=>Array.isArray(t.value)?t.labels??[]:[]);function m(p){return p.trim().split(/\s+/).filter(Boolean).slice(0,2).map(x=>x.charAt(0).toUpperCase()).join("")}return(p,h)=>(v(),_("div",{class:"flex min-w-0 flex-col gap-1.5","data-preview-field":e.field.name},[S("dt",{id:r.value,class:"font-semibold"},T(e.field.label||e.field.name),9,IR),S("dd",qR,[l.value==="control"?(v(),U(jt(i.value),{key:0,field:o.value,"model-value":e.value,"control-id":a.value,labels:e.labels,source:e.source,"record-id":e.recordId},null,8,["field","model-value","control-id","labels","source","record-id"])):l.value==="toggle"?(v(),_(pe,{key:1},[s(Nf)(e.value)?(v(),_("span",NR,T(s(k)("backend::lang.list.column_switch_true")),1)):(v(),_("span",LR,T(s(k)("backend::lang.list.column_switch_false")),1))],64)):l.value==="chips"?(v(),_("div",{key:2,"data-preview-value":"",class:ye([_c,"flex-wrap gap-1.5 p-1.5"])},[(v(!0),_(pe,null,qe(f.value,x=>(v(),_("span",{key:String(x.value),"data-chip":"",class:"inline-flex min-h-[30px] items-center gap-1.5 rounded-pill bg-surface pr-3 pl-1"},[S("span",BR,T(m(x.label)),1),S("span",FR,T(x.label),1)]))),128)),f.value.length===0?(v(),_("span",VR,T(s(k)("backend::lang.list.empty_value")),1)):ne("",!0)])):l.value==="relation"?(v(),_("div",{key:3,"data-preview-value":"",class:ye(_c)},[d.value!==""?(v(),_("span",zR,T(d.value),1)):(v(),_("span",jR,T(e.field.emptyOption||s(k)("backend::lang.list.empty_value")),1))])):(v(),_("div",{key:4,"data-preview-value":"",class:ye([_c,l.value==="textarea"?"items-start! py-3 whitespace-pre-wrap":""])},[c.value!==""?(v(),_("span",UR,T(c.value),1)):(v(),_("span",HR,T(s(k)("backend::lang.list.empty_value")),1))],2))])],8,RR))}}),x1=new Set(["p","br","strong","b","em","i","u","s","h3","ul","ol","li","blockquote","a","div","span"]);function k1(e){const t=document.createElement("template");return t.innerHTML=e,t.content}function WR(e){if(e==="")return[];const t=new Set;for(const n of Array.from(k1(e).querySelectorAll("*")))t.add(n.localName.toLowerCase());return[...t]}function $m(e){return WR(e).some(t=>!x1.has(t))}const KR=["aria-labelledby","aria-describedby","data-repeater"],GR={key:0,"data-repeater-empty":"",class:"flex flex-col items-center gap-2 rounded-inner border border-dashed border-border-strong px-6 py-8 text-center"},YR={class:"font-semibold"},JR={key:0,class:"max-w-[420px] text-[13px] text-muted"},ZR={key:0,"data-repeater-slot":"",class:"h-12 rounded-inner border-2 border-dashed border-primary bg-sel"},XR=["data-repeater-row","data-repeater-key","onDragover"],QR=["data-repeater-handle","aria-label","onKeydown","onDragstart"],eI={class:"text-[13px] text-muted tabular-nums"},tI=["title"],nI={key:1,"data-repeater-errors":"",class:"inline-flex h-6 items-center rounded-pill bg-danger-soft px-2.5 text-[13px] font-semibold text-danger"},aI={key:2,class:"flex gap-1"},rI=["aria-label","disabled","onClick"],lI=["aria-label","disabled","onClick"],oI=["aria-label","aria-expanded","aria-controls","onClick"],iI=["aria-label","disabled","onClick"],sI=["id"],uI={key:0,class:"m-0 grid grid-cols-1 gap-x-6 gap-y-[22px] min-[600px]:grid-cols-2"},cI={key:2,class:"flex flex-wrap items-center gap-4"},dI={key:0,"data-repeater-count":"",class:"text-[13px] text-muted tabular-nums"},mo="inline-flex size-8 shrink-0 items-center justify-center rounded-pager text-muted transition-colors duration-150 ease-out hover:bg-hover hover:text-text disabled:cursor-not-allowed disabled:opacity-40",fI=le({__name:"RepeaterField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=ut(zf,null),l=b(()=>n.field.form?.fields??[]),o=b(()=>!!n.field.readOnly),i=b(()=>Array.isArray(n.modelValue)?n.modelValue.map(V=>V!==null&&typeof V=="object"&&!Array.isArray(V)?V:{}):[]),u=b(()=>typeof n.field.maxItems=="number"?n.field.maxItems:null),c=b(()=>typeof n.field.minItems=="number"?n.field.minItems:0),d=b(()=>n.field.prompt||k("backend::lang.repeater.add")),f=b(()=>`${n.controlId}-label`);let m=0;const p=R([]),h=R(new Set);let x;function $(){return m+=1,`r${m}`}je(()=>n.modelValue,V=>{V===x&&p.value.length===i.value.length||p.value.length!==i.value.length&&(p.value=i.value.map(()=>$()),h.value=new Set)},{immediate:!0});function g(V,K){p.value=K,x=V,a("update:modelValue",V)}function C(V){return V==null||V===""||V===!1||Array.isArray(V)&&V.length===0}function E(){const V={};for(const K of l.value)K.default!==void 0?V[K.name]=K.default:K.type==="checkbox"||K.type==="switch"?V[K.name]=!1:V[K.name]=null;return V}function D(V){return l.value.some(K=>{const te=V[K.name];return C(te)?!1:K.default===void 0||String(K.default)!==String(te)})}function O(V){return(k1(V).textContent??"").replace(/\s+/g," ").trim()}function L(V){const K=i.value[V]??{},te=l.value.find(M=>M.name===n.field.titleFrom),y=te?K[te.name]:void 0;let A="";return te&&!C(y)&&typeof y!="object"&&(te.type==="dropdown"?A=(te.options??[]).find(M=>String(M.value)===String(y))?.label??String(y):te.type==="richeditor"?A=O(String(y)):A=String(y).trim()),A!==""?A:k("backend::lang.repeater.untitled",{n:V+1})}function N(V,K){const te=`${n.field.name}.${K}.`,y={};for(const[A,M]of Object.entries(V??{}))A.startsWith(te)&&A.length>te.length&&(y[A.slice(te.length)]=M);return y}const z=b(()=>i.value.map((V,K)=>N(r?.errors.value,K))),w=b(()=>i.value.map((V,K)=>N(r?.notices.value,K))),P=V=>Object.keys(z.value[V]??{}).length;je(z,V=>{const K=V.flatMap((te,y)=>Object.keys(te).length>0?[p.value[y]]:[]);if(K.length>0){const te=new Set(h.value);for(const y of K)te.delete(y);h.value=te}});function Y(V){return o.value||!h.value.has(V)}function I(V,K){const te=new Set(h.value);K?te.delete(V):te.add(V),h.value=te}const X=b(()=>p.value.some(V=>!h.value.has(V)));function Z(){h.value=X.value?new Set(p.value):new Set}const j=R(null),H=R(null);function re(V){return j.value?.querySelector(`[data-repeater-handle="${V}"]`)??null}function ce(V,K,te){const y=i.value.map((A,M)=>M===V?{...A,[K]:te}:A);g(y,[...p.value]),r?.clearError(`${n.field.name}.${V}.${K}`)}async function $e(){if(o.value||u.value!==null&&i.value.length>=u.value)return;const V=$();g([...i.value,E()],[...p.value,V]),await Xe(),j.value?.querySelector(`[data-repeater-key="${V}"]`)?.querySelector('[data-repeater-body] input, [data-repeater-body] select, [data-repeater-body] textarea, [data-repeater-body] [contenteditable="true"]')?.focus()}async function me(V){const K=i.value[V];if(!K||o.value||i.value.length<=c.value)return;if(D(K)&&r){const M=L(V);if(!await r.confirm({message:k("backend::lang.repeater.remove_confirm",{title:M}),confirmLabel:k("backend::lang.repeater.remove"),danger:!0}))return}const te=p.value.filter((M,oe)=>oe!==V);g(i.value.filter((M,oe)=>oe!==V),te),await Xe();const y=te[V]??te[V-1],A=y?re(y):null;A?A.focus():H.value?.$el.focus()}async function be(V,K){const te=i.value.length;if(o.value||V===K||V<0||K<0||V>=te||K>=te)return;const y=[...i.value],A=[...p.value],[M]=y.splice(V,1),[oe]=A.splice(V,1);y.splice(K,0,M),A.splice(K,0,oe),g(y,A),await Xe(),re(oe)?.focus(),r?.announce(k("backend::lang.repeater.moved",{title:L(K),position:K+1,total:te}))}function fe(V,K){(V.key==="ArrowUp"||V.key==="ArrowDown")&&(V.preventDefault(),be(K,V.key==="ArrowUp"?K-1:K+1))}const Te=R(null),W=R(null);function ke(V,K){Te.value=K,W.value=null,V.dataTransfer?.setData("text/plain",p.value[K]??""),V.dataTransfer&&(V.dataTransfer.effectAllowed="move")}function ae(V,K){if(Te.value===null)return;V.preventDefault();const y=V.currentTarget.getBoundingClientRect();W.value=V.clientY>y.top+y.height/2?K+1:K}function Q(V){if(Te.value===null||W.value===null)return;V.preventDefault();const K=Te.value,te=W.value>K?W.value-1:W.value;ue(),be(K,te)}function ue(){Te.value=null,W.value=null}return(V,K)=>(v(),_("div",{ref_key:"root",ref:j,role:"group","aria-labelledby":f.value,"aria-describedby":e.describedBy||void 0,"data-repeater":e.field.name,class:"flex flex-col gap-4"},[i.value.length===0?(v(),_("div",GR,[S("p",YR,T(s(k)("backend::lang.repeater.empty")),1),o.value?ne("",!0):(v(),_("p",JR,T(s(k)("backend::lang.repeater.empty_hint",{prompt:d.value})),1))])):ne("",!0),(v(!0),_(pe,null,qe(i.value,(te,y)=>(v(),_(pe,{key:p.value[y]},[Te.value!==null&&W.value===y&&W.value!==Te.value&&W.value!==Te.value+1?(v(),_("div",ZR)):ne("",!0),S("div",{"data-repeater-row":y,"data-repeater-key":p.value[y],class:ye([[P(y)>0?"border-danger":"border-border",Te.value===y?"opacity-50":""],"rounded-inner border bg-surface"]),onDragover:A=>ae(A,y),onDrop:Q},[S("div",{class:ye([Y(p.value[y])?"rounded-t-inner border-b border-border":"rounded-inner","flex min-h-12 items-center gap-2 bg-subtle px-2"])},[o.value?ne("",!0):(v(),_("button",{key:0,type:"button",draggable:"true","data-repeater-handle":p.value[y],"aria-label":s(k)("backend::lang.repeater.move",{title:L(y)}),class:ye([mo,"cursor-grab"]),onKeydown:A=>fe(A,y),onDragstart:A=>ke(A,y),onDragend:ue},[B(s(gs),{size:16,"aria-hidden":"true"})],40,QR)),S("span",eI,T(y+1)+".",1),S("span",{"data-repeater-title":"",class:"min-w-0 flex-1 truncate font-semibold",title:L(y)},T(L(y)),9,tI),P(y)>0?(v(),_("span",nI,T(s(qr)("backend::lang.form.tab_errors",P(y))),1)):ne("",!0),o.value?ne("",!0):(v(),_("div",aI,[S("button",{type:"button","data-action":"repeater-up","aria-label":s(k)("backend::lang.repeater.move_up",{title:L(y)}),disabled:y===0,class:ye(mo),onClick:A=>be(y,y-1)},[B(s(Gy),{size:16,"aria-hidden":"true"})],8,rI),S("button",{type:"button","data-action":"repeater-down","aria-label":s(k)("backend::lang.repeater.move_down",{title:L(y)}),disabled:y===i.value.length-1,class:ye(mo),onClick:A=>be(y,y+1)},[B(s(lr),{size:16,"aria-hidden":"true"})],8,lI),S("button",{type:"button","data-action":"repeater-toggle","aria-label":s(k)(Y(p.value[y])?"backend::lang.repeater.collapse":"backend::lang.repeater.expand",{title:L(y)}),"aria-expanded":Y(p.value[y])?"true":"false","aria-controls":`${e.controlId}-${p.value[y]}-body`,class:ye(mo),onClick:A=>I(p.value[y],!Y(p.value[y]))},[B(s(lr),{size:16,class:ye([Y(p.value[y])?"rotate-180":"","transition-transform duration-150"]),"aria-hidden":"true"},null,8,["class"])],8,oI),S("button",{type:"button","data-action":"repeater-remove","aria-label":s(k)("backend::lang.repeater.remove_named",{title:L(y)}),disabled:i.value.length<=c.value,class:ye([mo,"hover:bg-danger-soft hover:text-danger"]),onClick:A=>me(y)},[B(s(mr),{size:16,"aria-hidden":"true"})],8,iI)]))],2),Y(p.value[y])?(v(),_("div",{key:0,id:`${e.controlId}-${p.value[y]}-body`,"data-repeater-body":"",class:"p-4"},[o.value?(v(),_("dl",uI,[(v(!0),_(pe,null,qe(l.value,A=>(v(),U(_1,{key:A.name,class:ye(A.span==="left"?"min-[600px]:col-start-1":A.span==="right"?"min-[600px]:col-start-2":"col-span-full"),field:{...A,readOnly:!0},value:te[A.name],source:e.source,"record-id":e.recordId,"id-prefix":`${e.controlId}-${p.value[y]}`},null,8,["class","field","value","source","record-id","id-prefix"]))),128))])):(v(),U(Ql,{key:1,fields:l.value,values:te,errors:z.value[y]??{},notices:w.value[y],source:e.source,"record-id":e.recordId,"id-prefix":`${e.controlId}-${p.value[y]}`,"scope-path":e.field.name,onUpdate:(A,M)=>ce(y,A,M)},null,8,["fields","values","errors","notices","source","record-id","id-prefix","scope-path","onUpdate"]))],8,sI)):ne("",!0)],42,XR)],64))),128)),Te.value!==null&&W.value===i.value.length&&W.value!==Te.value+1?(v(),_("div",{key:1,"data-repeater-slot":"",class:"h-12 rounded-inner border-2 border-dashed border-primary bg-sel",onDragover:K[0]||(K[0]=vt(()=>{},["prevent"])),onDrop:Q},null,32)):ne("",!0),o.value?ne("",!0):(v(),_("div",cI,[B(Ze,{ref_key:"addButton",ref:H,variant:"outline",size:"sm",icon:s(pi),"data-action":"repeater-add",disabled:u.value!==null&&i.value.length>=u.value,onClick:$e},{default:F(()=>[_e(T(d.value),1)]),_:1},8,["icon","disabled"]),u.value!==null?(v(),_("span",dI,T(s(k)("backend::lang.repeater.count",{current:i.value.length,max:u.value})),1)):ne("",!0),i.value.length>1?(v(),U(Ze,{key:1,variant:"ghost",size:"sm",class:"ml-auto","data-action":"repeater-toggle-all",onClick:Z},{default:F(()=>[_e(T(s(k)(X.value?"backend::lang.repeater.collapse_all":"backend::lang.repeater.expand_all")),1)]),_:1})):ne("",!0)]))],8,KR))}}),pI="modulepreload",vI=function(e,t){return new URL(e,t).href},Cm={},mI=function(t,n,a){let r=Promise.resolve();if(n&&n.length>0){let c=function(d){return Promise.all(d.map(f=>Promise.resolve(f).then(m=>({status:"fulfilled",value:m}),m=>({status:"rejected",reason:m}))))};const o=document.getElementsByTagName("link"),i=document.querySelector("meta[property=csp-nonce]"),u=i?.nonce||i?.getAttribute("nonce");r=c(n.map(d=>{if(d=vI(d,a),d in Cm)return;Cm[d]=!0;const f=d.endsWith(".css"),m=f?'[rel="stylesheet"]':"";if(a)for(let h=o.length-1;h>=0;h--){const x=o[h];if(x.href===d&&(!f||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${d}"]${m}`))return;const p=document.createElement("link");if(p.rel=f?"stylesheet":pI,f||(p.as="script"),p.crossOrigin="",p.href=d,u&&p.setAttribute("nonce",u),document.head.appendChild(p),f)return new Promise((h,x)=>{p.addEventListener("load",h),p.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${d}`)))})}))}function l(o){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=o,window.dispatchEvent(i),!i.defaultPrevented)throw o}return r.then(o=>{for(const i of o||[])i.status==="rejected"&&l(i.reason);return t().catch(l)})};function Sm(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n2?a-2:0),l=2;l1?n-1:0),r=1;r"u"?null:Tt(BigInt.prototype.toString),Mm=typeof Symbol>"u"?null:Tt(Symbol.prototype.toString),an=Tt(Object.prototype.hasOwnProperty),go=Tt(Object.prototype.toString),Ht=Tt(RegExp.prototype.test),Va=TI(TypeError);function Tt(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var n=arguments.length,a=new Array(n>1?n-1:0),r=1;r2&&arguments[2]!==void 0?arguments[2]:Co;if(Em&&Em(e,null),!Pl(t))return e;let a=t.length;for(;a--;){let r=t[a];if(typeof r=="string"){const l=n(r);l!==r&&(xI(t)||(t[a]=l),r=l)}e[r]=!0}return e}function DI(e){for(let t=0;t/g),NI=Lt(/\${[\w\W]*/g),LI=Lt(/^data-[\-\w.\u00B7-\uFFFF]+$/),BI=Lt(/^aria-[\-\w]+$/),Nm=Lt(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),FI=Lt(/^(?:\w+script|data):/i),VI=Lt(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),zI=Lt(/^html$/i),jI=Lt(/^[a-z][.\w]*(-[.\w]+)+$/i),Lm=Lt(/<[/\w!]/g),Bm=Lt(/<[/\w]/g),UI=Lt(/<\/no(script|embed|frames)/i),HI=Lt(/\/>/i),fn={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},C1=["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"],WI=Mt(st({},C1)),KI=(function(){const e={};return Dr(C1,t=>{e[t]=Lt(new RegExp("])","i"))}),Mt(e)})(),GI=function(){return typeof window>"u"?null:window},YI=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let a=null;const r="data-tt-policy-suffix";n&&n.hasAttribute(r)&&(a=n.getAttribute(r));const l="dompurify"+(a?"#"+a:"");try{return t.createPolicy(l,{createHTML(o){return o},createScriptURL(o){return o}})}catch{return console.warn("TrustedTypes policy "+l+" could not be created."),null}},Fm=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},za=function(t,n,a,r){return an(t,n)&&Pl(t[n])?st(r.base?pn(r.base):{},t[n],r.transform):a},Sc=function(t,n,a){const r=an(t,n)?t[n]:void 0;return r&&typeof r=="object"?pn(r):a()};function S1(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:GI();const t=Me=>S1(Me);if(t.version="3.4.16",t.removed=[],!e||!e.document||e.document.nodeType!==fn.document||!e.Element)return t.isSupported=!1,t;let n=e.document;const a=n,r=a.currentScript;e.DocumentFragment;const l=e.HTMLTemplateElement,o=e.Node,i=e.Element,u=e.NodeFilter;e.NamedNodeMap===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;const c=e.DOMParser,d=e.trustedTypes,f=i.prototype,m=kn(f,"cloneNode"),p=kn(f,"remove"),h=kn(f,"removeAttributeNode"),x=kn(f,"nextSibling"),$=kn(f,"childNodes"),g=kn(f,"parentNode"),C=kn(f,"shadowRoot"),E=kn(f,"attributes"),D=o&&o.prototype?kn(o.prototype,"nodeType"):null,O=o&&o.prototype?kn(o.prototype,"nodeName"):null,L=o&&o.prototype?kn(o.prototype,"ownerDocument"):null,N=function(q){return D?D(q):q.nodeType},z=function(q){return O?O(q):q.nodeName};if(typeof l=="function"){const Me=n.createElement("template");Me.content&&Me.content.ownerDocument&&(n=Me.content.ownerDocument)}let w,P="",Y,I=!1,X=0;const Z=function(){if(X>0)throw Va('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.')},j=function(q){Z(),X++;try{return w.createHTML(q)}finally{X--}},H=function(q){Z(),X++;try{return w.createScriptURL(q)}finally{X--}},re=function(){return I||(Y=YI(d,r),I=!0),Y},ce=n,$e=ce.implementation,me=ce.createNodeIterator,be=ce.createDocumentFragment,fe=ce.getElementsByTagName,Te=a.importNode;let W=Fm();t.isSupported=typeof w1=="function"&&typeof g=="function"&&$e&&$e.createHTMLDocument!==void 0;const ke=II,ae=qI,Q=NI,ue=LI,V=BI,K=FI,te=VI,y=jI;let A=Nm,M=null;const oe=st({},[...Pm,...kc,...wc,...$c,...Rm]);let J=null;const de=st({},[...Im,...Cc,...qm,...ji]);let we=Object.seal(hl(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ae=null,De=null;const se=Object.seal(hl(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let Ce=!0,he=!0,Re=!1,Fe=!0,Ge=!1,ge=!0,Se=!1,Be=!1,Ue=null,rt=null,St=!1,Bt=!1,ze=!1,Ve=!1,Ke=!0,It=!1;const Pa="user-content-";let _r=!0,Yr=!1,Ut={},la=null;const Jr=st({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","selectedcontent","style","svg","template","thead","title","video","xmp"]);let bi=null;const Zr=st({},["audio","video","img","source","image","track"]);let to=null;const Bn=st({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ra="http://www.w3.org/1998/Math/MathML",oa="http://www.w3.org/2000/svg",tn="http://www.w3.org/1999/xhtml";let Ia=tn,no=!1,xr=null;const G=st({},[Ra,oa,tn],xc),Oe=Mt(["mi","mo","mn","ms","mtext"]);let ee=st({},Oe);const Ie=Mt(["annotation-xml"]);let Qe=st({},Ie);const Ft=st({},["title","style","font","a","script"]);let nn=null;const qa=["application/xhtml+xml","text/html"],W1="text/html";let $t=null,Xr=null;const K1=n.createElement("form"),Uf=function(q){return q instanceof RegExp||q instanceof Function},ku=function(){let q=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Xr&&Xr===q)return;(!q||typeof q!="object")&&(q={}),q=pn(q),nn=qa.indexOf(q.PARSER_MEDIA_TYPE)===-1?W1:q.PARSER_MEDIA_TYPE,$t=nn==="application/xhtml+xml"?xc:Co,M=za(q,"ALLOWED_TAGS",oe,{transform:$t}),J=za(q,"ALLOWED_ATTR",de,{transform:$t}),xr=za(q,"ALLOWED_NAMESPACES",G,{transform:xc}),to=za(q,"ADD_URI_SAFE_ATTR",Bn,{transform:$t,base:Bn}),bi=za(q,"ADD_DATA_URI_TAGS",Zr,{transform:$t,base:Zr}),la=za(q,"FORBID_CONTENTS",Jr,{transform:$t}),Ae=za(q,"FORBID_TAGS",pn({}),{transform:$t}),De=za(q,"FORBID_ATTR",pn({}),{transform:$t}),Ut=an(q,"USE_PROFILES")?q.USE_PROFILES&&typeof q.USE_PROFILES=="object"?pn(q.USE_PROFILES):q.USE_PROFILES:!1,Ce=q.ALLOW_ARIA_ATTR!==!1,he=q.ALLOW_DATA_ATTR!==!1,Re=q.ALLOW_UNKNOWN_PROTOCOLS||!1,Fe=q.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Ge=q.SAFE_FOR_TEMPLATES||!1,ge=q.SAFE_FOR_XML!==!1,Se=q.WHOLE_DOCUMENT||!1,Bt=q.RETURN_DOM||!1,ze=q.RETURN_DOM_FRAGMENT||!1,Ve=q.RETURN_TRUSTED_TYPE||!1,St=q.FORCE_BODY||!1,Ke=q.SANITIZE_DOM!==!1,It=q.SANITIZE_NAMED_PROPS||!1,_r=q.KEEP_CONTENT!==!1,Yr=q.IN_PLACE||!1,A=MI(q.ALLOWED_URI_REGEXP)?q.ALLOWED_URI_REGEXP:Nm,Ia=typeof q.NAMESPACE=="string"?q.NAMESPACE:tn,ee=Sc(q,"MATHML_TEXT_INTEGRATION_POINTS",()=>st({},Oe)),Qe=Sc(q,"HTML_INTEGRATION_POINTS",()=>st({},Ie));const ie=Sc(q,"CUSTOM_ELEMENT_HANDLING",()=>hl(null));if(we=hl(null),an(ie,"tagNameCheck")&&Uf(ie.tagNameCheck)&&(we.tagNameCheck=ie.tagNameCheck),an(ie,"attributeNameCheck")&&Uf(ie.attributeNameCheck)&&(we.attributeNameCheck=ie.attributeNameCheck),an(ie,"allowCustomizedBuiltInElements")&&typeof ie.allowCustomizedBuiltInElements=="boolean"&&(we.allowCustomizedBuiltInElements=ie.allowCustomizedBuiltInElements),Lt(we),Ge&&(he=!1),ze&&(Bt=!0),Ut&&(M=st({},Rm),J=hl(null),Ut.html===!0&&(st(M,Pm),st(J,Im)),Ut.svg===!0&&(st(M,kc),st(J,Cc),st(J,ji)),Ut.svgFilters===!0&&(st(M,wc),st(J,Cc),st(J,ji)),Ut.mathMl===!0&&(st(M,$c),st(J,qm),st(J,ji))),se.tagCheck=null,se.attributeCheck=null,an(q,"ADD_TAGS")&&(typeof q.ADD_TAGS=="function"?se.tagCheck=q.ADD_TAGS:Pl(q.ADD_TAGS)&&(M===oe&&(M=pn(M)),st(M,q.ADD_TAGS,$t))),an(q,"ADD_ATTR")&&(typeof q.ADD_ATTR=="function"?se.attributeCheck=q.ADD_ATTR:Pl(q.ADD_ATTR)&&(J===de&&(J=pn(J)),st(J,q.ADD_ATTR,$t))),an(q,"ADD_FORBID_CONTENTS")&&Pl(q.ADD_FORBID_CONTENTS)&&(la===Jr&&(la=pn(la)),st(la,q.ADD_FORBID_CONTENTS,$t)),_r&&(M["#text"]=!0),Se&&st(M,["html","head","body"]),M.table&&(st(M,["tbody"]),delete Ae.tbody),q.TRUSTED_TYPES_POLICY){if(typeof q.TRUSTED_TYPES_POLICY.createHTML!="function")throw Va('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof q.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Va('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');const Ee=w;w=q.TRUSTED_TYPES_POLICY;try{P=j("")}catch(Pe){throw w=Ee,Pe}}else q.TRUSTED_TYPES_POLICY===null?(w=void 0,P=""):(w===void 0&&(w=re()),w&&typeof P=="string"&&(P=j("")));Mt&&Mt(q),Xr=q},Hf=st({},[...kc,...wc,...PI]),Wf=st({},[...$c,...RI]),G1=function(q,ie,Ee){return ie.namespaceURI===tn?q==="svg":ie.namespaceURI===Ra?q==="svg"&&(Ee==="annotation-xml"||ee[Ee]):!!Hf[q]},Y1=function(q,ie,Ee){return ie.namespaceURI===tn?q==="math":ie.namespaceURI===oa?q==="math"&&Qe[Ee]:!!Wf[q]},J1=function(q,ie,Ee){return ie.namespaceURI===oa&&!Qe[Ee]||ie.namespaceURI===Ra&&!ee[Ee]?!1:!Wf[q]&&(Ft[q]||!Hf[q])},Z1=function(q){let ie=g(q);(!ie||!ie.tagName)&&(ie={namespaceURI:Ia,tagName:"template"});const Ee=Co(q.tagName),Pe=Co(ie.tagName);return xr[q.namespaceURI]?q.namespaceURI===oa?G1(Ee,ie,Pe):q.namespaceURI===Ra?Y1(Ee,ie,Pe):q.namespaceURI===tn?J1(Ee,ie,Pe):!!(nn==="application/xhtml+xml"&&xr[q.namespaceURI]):!1},Na=function(q){ho(t.removed,{element:q});try{g(q).removeChild(q)}catch{if(p(q),!g(q))throw Va("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},Kf=function(q,ie,Ee){try{h(q,ie)}catch{try{q.removeAttribute(Ee)}catch{}}},_i=function(q){xi(q);const ie=$(q);if(ie){const Pe=[];Dr(ie,We=>{ho(Pe,We)}),Dr(Pe,We=>{try{p(We)}catch{}})}const Ee=E(q);if(Ee)for(let Pe=Ee.length-1;Pe>=0;--Pe){const We=Ee[Pe],at=We&&We.name;typeof at=="string"&&Kf(q,We,at)}},kr=function(q,ie,Ee){if(!Ee)try{Ee=ie.getAttributeNode(q)}catch{Ee=null}ho(t.removed,{attribute:Ee||null,from:ie});try{Ee?h(ie,Ee):ie.removeAttribute(q)}catch{try{ie.removeAttribute(q)}catch{}}if(q==="is")if(Bt||ze)try{Na(ie)}catch{}else try{ie.setAttribute(q,"")}catch{}},X1=function(q){const ie=E(q);if(ie)for(let Ee=ie.length-1;Ee>=0;--Ee){const Pe=ie[Ee],We=Pe&&Pe.name;typeof We!="string"||J[$t(We)]||Kf(q,Pe,We)}},xi=function(q){const ie=[q];for(;ie.length>0;){const Ee=ie.pop();N(Ee)===fn.element&&X1(Ee);const Pe=$(Ee);if(Pe)for(let We=Pe.length-1;We>=0;--We)ie.push(Pe[We])}},Gf=function(q,ie){return ge?q==="patchsrc"?!0:q==="for"&&ie!=="label"&&ie!=="output":!1},Q1=function(q){if(!ge)return;const ie=[q];for(;ie.length>0;){const Ee=ie.pop(),Pe=N(Ee);if(Pe===fn.processingInstruction||Pe===fn.comment&&Ht(Bm,Ee.data)){try{p(Ee)}catch{}continue}if(Pe===fn.element){const at=Ee,ot=$t(z(Ee));try{at.hasAttribute&&at.hasAttribute("patchsrc")&&at.removeAttribute("patchsrc"),at.hasAttribute&&at.hasAttribute("for")&&Gf("for",ot)&&at.removeAttribute("for")}catch{}}const We=$(Ee);if(We)for(let at=We.length-1;at>=0;--at)ie.push(We[at])}},Yf=function(q){let ie=null,Ee=null;if(St)q=""+q;else{const at=Tm(q,/^[\r\n\t ]+/);Ee=at&&at[0]}nn==="application/xhtml+xml"&&Ia===tn&&(q=''+q+"");const Pe=w?j(q):q;if(Ia===tn)try{ie=new c().parseFromString(Pe,nn)}catch{}if(!ie||!ie.documentElement){ie=$e.createDocument(Ia,"template",null);try{ie.documentElement.innerHTML=no?P:Pe}catch{}}const We=ie.body||ie.documentElement;return q&&Ee&&We.insertBefore(n.createTextNode(Ee),We.childNodes[0]||null),Ia===tn?fe.call(ie,Se?"html":"body")[0]:Se?ie.documentElement:We},Jf=function(q){const ie=L?L(q):q.ownerDocument;return me.call(ie||q,q,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT|u.SHOW_PROCESSING_INSTRUCTION|u.SHOW_CDATA_SECTION,null)},ki=function(q){return q=yo(q,ke," "),q=yo(q,ae," "),q=yo(q,Q," "),q},wu=function(q){var ie;q.normalize();const Ee=L?L(q):q.ownerDocument,Pe=me.call(Ee||q,q,u.SHOW_TEXT|u.SHOW_COMMENT|u.SHOW_CDATA_SECTION|u.SHOW_PROCESSING_INSTRUCTION,null);let We=Pe.nextNode();for(;We;)We.data=ki(We.data),We=Pe.nextNode();const at=(ie=q.querySelectorAll)===null||ie===void 0?void 0:ie.call(q,"template");at&&Dr(at,ot=>{Qr(ot.content)&&wu(ot.content)})},wi=function(q){const ie=O?O(q):null;return typeof ie!="string"||$t(ie)!=="form"?!1:typeof q.nodeName!="string"||typeof q.textContent!="string"||typeof q.removeChild!="function"||q.attributes!==E(q)||typeof q.removeAttribute!="function"||typeof q.removeAttributeNode!="function"||typeof q.getAttributeNode!="function"||typeof q.setAttribute!="function"||typeof q.namespaceURI!="string"||typeof q.insertBefore!="function"||typeof q.hasChildNodes!="function"||q.nodeType!==D(q)||q.childNodes!==$(q)},Qr=function(q){if(!D||typeof q!="object"||q===null)return!1;try{return D(q)===fn.documentFragment}catch{return!1}},ao=function(q){if(!D||typeof q!="object"||q===null)return!1;try{return typeof D(q)=="number"}catch{return!1}};function Fn(Me,q,ie){Me.length!==0&&Dr(Me,Ee=>{Ee.call(t,q,ie,Xr)})}const e0=function(q,ie){return!!(ge&&q.hasChildNodes()&&!ao(q.firstElementChild)&&Ht(Lm,q.textContent)&&Ht(Lm,q.innerHTML)||ge&&q.namespaceURI===tn&&WI[ie]&&(ao(q.firstElementChild)||typeof q.textContent=="string"&&Ht(KI[ie],q.textContent))||q.nodeType===fn.processingInstruction||ge&&q.nodeType===fn.comment&&Ht(Bm,q.data))},$i=function(q,ie){if(q instanceof RegExp)return Ht(q,ie);if(q instanceof Function){for(var Ee=arguments.length,Pe=new Array(Ee>2?Ee-2:0),We=2;We=0;--ot){const kt=q===Ee?m(We[ot],!0):We[ot];Pe.insertBefore(kt,x(q))}}}return Na(q),!0},Zf=function(q,ie,Ee,Pe){return q.length===0?ie:ie===Ee||ie===Pe?pn(ie):ie},el=function(q,ie){return q===ie||g(q)!==null?!1:(Yr&&xi(q),!0)},Xf=function(q,ie){if(Fn(W.beforeSanitizeElements,q,null),el(q,ie))return!0;if(wi(q))return Na(q),!0;const Ee=$t(z(q));if(M=Zf(W.uponSanitizeElement,M,oe,Ue),Fn(W.uponSanitizeElement,q,{tagName:Ee,allowedTags:M}),el(q,ie))return!0;if(e0(q,Ee))return Na(q),!0;if(Ae[Ee]||!(se.tagCheck instanceof Function&&se.tagCheck(Ee))&&!M[Ee]){const Pe=t0(q,Ee,ie);return Pe===!1&&(Fn(W.afterSanitizeElements,q,null),el(q,ie))?!0:Pe}if(N(q)===fn.element&&!Z1(q)||(Ee==="noscript"||Ee==="noembed"||Ee==="noframes")&&Ht(UI,q.innerHTML))return Na(q),!0;if(Ge&&q.nodeType===fn.text){const Pe=ki(q.textContent);q.textContent!==Pe&&(ho(t.removed,{element:q.cloneNode()}),q.textContent=Pe)}return Fn(W.afterSanitizeElements,q,null),el(q,ie)},Qf=function(q,ie,Ee){if(De[ie]||Gf(ie,q)||Ke&&(ie==="id"||ie==="name")&&(Ee in n||Ee in K1))return!1;const Pe=J[ie]||se.attributeCheck instanceof Function&&se.attributeCheck(ie,q);return he&&Ht(ue,ie)||Ce&&Ht(V,ie)?!0:Pe?to[ie]||Ht(A,yo(Ee,te,""))||(ie==="src"||ie==="xlink:href"||ie==="href")&&q!=="script"&&Dm(Ee,"data:")===0&&bi[q]||Re&&!Ht(K,yo(Ee,te,""))?!0:!Ee:ep(q)&&$i(we.tagNameCheck,q)&&$i(we.attributeNameCheck,ie,q)||ie==="is"&&we.allowCustomizedBuiltInElements&&$i(we.tagNameCheck,Ee)},n0=st({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),ep=function(q){return!n0[Co(q)]&&Ht(y,q)},a0=function(q,ie,Ee,Pe){if(w&&typeof d=="object"&&typeof d.getAttributeType=="function"&&!Ee)switch(d.getAttributeType(q,ie)){case"TrustedHTML":return j(Pe);case"TrustedScriptURL":return H(Pe)}return Pe},r0=function(q,ie,Ee,Pe){try{return Ee?q.setAttributeNS(Ee,ie,Pe):q.setAttribute(ie,Pe),wi(q)?(Na(q),!1):!0}catch{return kr(ie,q),!1}},tp=function(q,ie){if(Fn(W.beforeSanitizeAttributes,q,null),el(q,ie))return;const Ee=q.attributes;if(!Ee||wi(q))return;J=Zf(W.uponSanitizeAttribute,J,de,rt);const Pe={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:J,forceKeepAttr:void 0};let We=Ee.length;const at=$t(q.nodeName);for(;We--;){const ot=Ee[We],kt=ot.name,_n=ot.namespaceURI,cn=ot.value,tl=$t(kt),Cu=cn;let Jt=kt==="value"?Cu:SI(Cu),np=!1;if(Pe.attrName=tl,Pe.attrValue=Jt,Pe.keepAttr=!0,Pe.forceKeepAttr=void 0,Fn(W.uponSanitizeAttribute,q,Pe),Jt=Pe.attrValue,It&&(tl==="id"||tl==="name")&&Dm(Jt,Pa)!==0&&(kr(kt,q,ot),Jt=Pa+Jt,np=!0),ge&&Ht(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,Jt)){kr(kt,q,ot);continue}if(tl==="attributename"&&Tm(Jt,"href")){kr(kt,q,ot);continue}if(!Pe.forceKeepAttr){if(!Pe.keepAttr){kr(kt,q,ot);continue}if(!Fe&&Ht(HI,Jt)){kr(kt,q,ot);continue}if(Ge&&(Jt=ki(Jt)),!Qf(at,tl,Jt)){kr(kt,q,ot);continue}Jt=a0(at,tl,_n,Jt),Jt!==Cu&&r0(q,kt,_n,Jt)&&np&&Am(t.removed)}}Fn(W.afterSanitizeAttributes,q,null),el(q,ie)},Ci=function(q){let ie=null;const Ee=Jf(q);for(Fn(W.beforeSanitizeShadowDOM,q,null);ie=Ee.nextNode();)if(Fn(W.uponSanitizeShadowNode,ie,null),Xf(ie,q),tp(ie,q),Qr(ie.content)&&Ci(ie.content),N(ie)===fn.element){const Pe=C(ie);Qr(Pe)&&($u(Pe),Ci(Pe))}Fn(W.afterSanitizeShadowDOM,q,null)},$u=function(q){const ie=[{node:q,shadow:null}];for(;ie.length>0;){const Ee=ie.pop();if(Ee.shadow){Ci(Ee.shadow);continue}const Pe=Ee.node,We=N(Pe)===fn.element,at=$(Pe);if(at)for(let ot=at.length-1;ot>=0;--ot)ie.push({node:at[ot],shadow:null});if(We){const ot=O?O(Pe):null;if(typeof ot=="string"&&$t(ot)==="template"){const kt=Pe.content;Qr(kt)&&ie.push({node:kt,shadow:null})}}if(We){const ot=C(Pe);Qr(ot)&&ie.push({node:null,shadow:ot},{node:ot,shadow:null})}}};return t.sanitize=function(Me){let q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ie=null,Ee=null,Pe=null,We=null;if(no=!Me,no&&(Me=""),typeof Me!="string"&&!ao(Me)&&(Me=OI(Me),typeof Me!="string"))throw Va("dirty is not a string, aborting");if(!t.isSupported)return Me;Be?(M=Ue,J=rt):ku(q),(W.uponSanitizeElement.length>0||W.uponSanitizeAttribute.length>0)&&(M=pn(M)),W.uponSanitizeAttribute.length>0&&(J=pn(J)),t.removed=[];const at=Yr&&typeof Me!="string"&&ao(Me);if(at){Q1(Me);const _n=z(Me);if(typeof _n=="string"){const cn=$t(_n);if(!M[cn]||Ae[cn])throw _i(Me),Va("root node is forbidden and cannot be sanitized in-place")}if(wi(Me))throw _i(Me),Va("root node is clobbered and cannot be sanitized in-place");try{$u(Me)}catch(cn){throw _i(Me),cn}}else if(ao(Me))ie=Yf(""),Ee=ie.ownerDocument.importNode(Me,!0),Ee.nodeType===fn.element&&Ee.nodeName==="BODY"||Ee.nodeName==="HTML"?ie=Ee:ie.appendChild(Ee),$u(ie);else{if(!Bt&&!Ge&&!Se&&Me.indexOf("<")===-1)return w&&Ve?j(Me):Me;if(ie=Yf(Me),!ie)return Bt?null:Ve?P:""}ie&&St&&Na(ie.firstChild);const ot=at?Me:ie;try{const _n=Jf(ot);for(;Pe=_n.nextNode();)Xf(Pe,ot),tp(Pe,ot),Qr(Pe.content)&&Ci(Pe.content)}catch(_n){throw at&&(_i(Me),Dr(t.removed,cn=>{cn.element&&xi(cn.element)})),_n}if(at){let _n=!1;if(Dr(t.removed,cn=>{cn.element&&(cn.element===Me&&(_n=!0),xi(cn.element))}),_n)throw Va("a node selected for removal could not be safely returned; refusing to sanitize in place");return Ge&&wu(Me),Me}if(Bt){if(Ge&&wu(ie),ze)for(We=be.call(ie.ownerDocument);ie.firstChild;)We.appendChild(ie.firstChild);else We=ie;return(J.shadowroot||J.shadowrootmode)&&(We=Te.call(a,We,!0)),We}let kt=Se?ie.outerHTML:ie.innerHTML;return Se&&M["!doctype"]&&ie.ownerDocument&&ie.ownerDocument.doctype&&ie.ownerDocument.doctype.name&&Ht(zI,ie.ownerDocument.doctype.name)&&(kt=" -`+kt),Ge&&(kt=ki(kt)),w&&Ve?j(kt):kt},t.setConfig=function(){let Me=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};ku(Me),Be=!0,Ue=M,rt=J},t.clearConfig=function(){Xr=null,Be=!1,Ue=null,rt=null,w=Y,P=""},t.isValidAttribute=function(Me,q,ie){Xr||ku({});const Ee=$t(Me),Pe=$t(q);return Qf(Ee,Pe,ie)},t.addHook=function(Me,q){typeof q=="function"&&an(W,Me)&&ho(W[Me],q)},t.removeHook=function(Me,q){if(an(W,Me)){if(q!==void 0){const ie=$I(W[Me],q);return ie===-1?void 0:CI(W[Me],ie,1)[0]}return Am(W[Me])}},t.removeHooks=function(Me){an(W,Me)&&(W[Me]=[])},t.removeAllHooks=function(){W=Fm()},t}var JI=S1();const ZI=["http","https","mailto","tel"],XI=/[\x00-\x20\x7f]+/g,QI=/^([a-z][a-z0-9+.-]*):/i;function E1(e){if(e==null)return!1;const t=e.replace(XI,"");if(t==="")return!1;const n=QI.exec(t);if(n)return ZI.includes(n[1].toLowerCase());try{return new URL(t,"https://admin.invalid/"),!0}catch{return!1}}const eq=["script","style","template","noscript","iframe","frame","frameset","object","embed","applet","svg","math","title","head","meta","link","base"],A1=Object.freeze({ALLOWED_TAGS:[...x1],ALLOWED_ATTR:["href"],ALLOW_DATA_ATTR:!1,ALLOW_ARIA_ATTR:!1,ADD_FORBID_CONTENTS:[...eq],KEEP_CONTENT:!0,RETURN_TRUSTED_TYPE:!1}),tq='

a + diff --git a/modules/cabana/README.md b/modules/cabana/README.md index dad6359..d8f4428 100644 --- a/modules/cabana/README.md +++ b/modules/cabana/README.md @@ -46,7 +46,7 @@ Use cases: - Preset fields: `preset` on a `type: text` or `type: mltext` field (a source field name, or a mapping with `field` and `type`, `slug` or `exact`) makes the field follow another text or mltext field of the same form on the create screen until the administrator edits it, per locale for an mltext pair. The schema reports it as `preset` (`cabana.FieldPreset`); the server does not fill the field. - Server-rendered partials: `headerPartial: ` in `config_list.yaml` (a strip above the list) and `type: partial` with `path: ` in `fields.yaml` render the template `{ConfigDir}/_.htm` with `html/template` against a view model from the controller's `pact.AdminPartialData`. The result reaches the SPA as an allowlisted node tree, never as an HTML string. A missing or unparsable template, a free-form path or a controller without `pact.AdminPartialData` fails boot. - Date pickers: a `type: datepicker` field in `fields.yaml` edits a date (`mode: date`, a `lagoon.Date` column), a date and time (`mode: datetime`, the default, a `time.Time` column stored in UTC) or a time of day (`mode: time`, a `lagoon.TimeOfDay` column); pointers to the three types make the value optional. It accepts WinterCMS's `mode`, `format` (a PHP `date()` format, served also as `displayFormat` in the SPA's tokens), `minDate`, `maxDate`, `yearRange`, `firstDay`, `twelveHour` and `ignoreTimezone`; any other key, a format letter with no equivalent, bounds on `mode: time`, `ignoreTimezone` outside `mode: datetime` or a column whose Go type does not match the mode fails boot. The save rechecks `minDate` and `maxDate` on the calendar date and answers 422 on the field. List columns take `type: date` and `type: time` for these columns; when `type` is omitted, a `time.Time` column is compiled as `datetime`, a `lagoon.Date` column as `date` and a `lagoon.TimeOfDay` column as `time`. A struct column that implements `sql.Scanner` or `driver.Valuer` is never taken for a relation. -- Money fields: a `type: money` field in `fields.yaml` edits an exact decimal amount that travels as a decimal string with a dot and at most `scale` (2 to 4, default 4) fraction digits, or null; the server never parses it into a float, never rounds it and never truncates it, and fills the accepted string into a string column or a type with its own `sql.Scanner` and `driver.Valuer` unchanged. A field declares exactly one of `currency` (an ISO 4217 code) or `currencyFrom` (a sibling string column holding the code) and may declare `max` (the column ceiling); two sources, none, a scale outside 2..4, a max beyond the scale, a column of another type or a currencyFrom that is not a string column fails boot naming the field. A save answers 422 on the field with `backend::lang.money.invalid`, `money.too_precise` (`:scale`) or `money.too_large` (`:max`, compared as scaled digit strings), on controller forms, settings forms and relation forms alike. The schema serves `currency`, `currencyFrom`, `scale` and `max` on the field. A list column `type: money` takes the same `currency` or `currencyFrom` key, is never searchable and not sortable by default, and every list row carries the `currencyFrom` column's value under its own key even when it is not a declared column; the admin right-aligns the locale-formatted amount with its ISO code. +- Money fields: a `type: money` field in `fields.yaml` edits an exact decimal amount that travels as a decimal string with a dot and at most `scale` (2 to 4, default 4) significant fraction digits (trailing zeros beyond the scale are accepted unchanged), or null; the server never parses it into a float, never rounds it and never truncates it, and fills the accepted string into a string column or a type with its own `sql.Scanner` and `driver.Valuer` unchanged. A field declares exactly one of `currency` (an ISO 4217 code) or `currencyFrom` (a sibling string column holding the code) and may declare `max` (the column ceiling); two sources, none, a scale outside 2..4, a max beyond the scale, a column of another type or a currencyFrom that is not a string column fails boot naming the field. A save answers 422 on the field with `backend::lang.money.invalid`, `money.too_precise` (`:scale`) or `money.too_large` (`:max`, compared as scaled digit strings), on controller forms, settings forms and relation forms alike. The schema serves `currency`, `currencyFrom`, `scale` and `max` on the field. A list column `type: money` takes the same `currency` or `currencyFrom` key, is never searchable and not sortable by default, and every list row carries the `currencyFrom` column's value under its own key even when it is not a declared column; the admin right-aligns the locale-formatted amount with its ISO code. - File uploads: a `type: fileupload` field in `fields.yaml` edits an attachOne or attachMany relation the record model declares through `attach.HasRelations` (its `AttachRelations` method) next to `attach.Owner`. The field accepts WinterCMS's `mode` (`image` or `file`), `fileTypes`, `mimeTypes`, `maxFilesize` (megabytes), `maxFiles` (attachMany only), `imageWidth`, `imageHeight`, `thumbOptions` (only `mode`: `auto`, `exact`, `crop` or `fit`), `useCaption` and `prompt`; any other key, an image-mode file type outside jpg, jpeg, png, gif and webp, a name that is not a declared relation or a `maxFilesize` whose file plus 64 KiB of multipart framing exceeds `http.body_limits.upload_bytes` fails boot. Uploads and removals are deferred, as in WinterCMS: the SPA sends a random form session key in the `X-Session-Key` header (`cabana.SessionKeyHeader`) with every file call and with the save, the server keeps the pending work in `deferred_bindings` against that key and the signed-in administrator, and the record's next create or update save applies it inside its transaction. A retry of the same upload may send `X-Upload-Id` so the server returns the already stored file. A save that fails with 422 keeps the pending uploads; another administrator's key matches nothing. The upload route caps the request body at the smaller of `http.body_limits.upload_bytes` and `maxFilesize` plus 64 KiB and answers 413 `payload_too_large` past it; the size, type and image checks run on the server (through `attach.Store`) and answer 422 on the field. A file list (`cabana.FileItem`) carries `url` and `thumb_url` only for a public relation. - Refusals: a lifecycle hook, a relation hook or a bulk, record, toolbar or widget action that returns a `cabana.ForbiddenError` is answered 403 `forbidden` with the error's `Message` and `Details` (a field name to a list of messages), both translated in the request locale; an empty `Message` stays empty. The surrounding transaction is rolled back. Every other error that is not a `cabana.ValidationError` stays the opaque 500, logged on the server. - Danger record actions: `pact.AdminRecordAction.Danger` is served as `danger` on the record response's `cabana.RecordAction` (absent when false, so existing payloads are unchanged); the admin's confirm dialog then uses its danger variant. diff --git a/modules/cabana/field_money.go b/modules/cabana/field_money.go index 0e80365..321ef63 100644 --- a/modules/cabana/field_money.go +++ b/modules/cabana/field_money.go @@ -153,8 +153,11 @@ func allDigits(s string) bool { // validateMoneyValue checks one submitted money value against the field's // scale and max: null is accepted (stored as NULL or the column type's zero // value); a string must match the decimal grammar (money.invalid), carry at -// most scale fraction digits (money.too_precise, :scale) and, when the field -// declares max, not exceed it in absolute magnitude (money.too_large, :max). +// most scale significant fraction digits (money.too_precise, :scale) and, +// when the field declares max, not exceed it in absolute magnitude +// (money.too_large, :max). Trailing zeros beyond the scale carry no +// precision and are accepted as they are, so a scale-2 field over a +// four-decimal column saves its loaded "12.5000" again unchanged. // Magnitudes are compared as scaled digit strings, never as floats, and the // value is never rounded or truncated. Anything that is not a string or null // is money.invalid. It returns the phrase key and its placeholders of the @@ -171,7 +174,7 @@ func validateMoneyValue(value any, scale int, max string) (string, map[string]st if !ok { return msgMoneyInvalid, nil } - if len(frac) > scale { + if len(strings.TrimRight(frac, "0")) > scale { return msgMoneyTooPrecise, map[string]string{"scale": fmt.Sprint(scale)} } if max != "" {