From 1c930b6ff7762848d1e247968edcd11c4ede19e3 Mon Sep 17 00:00:00 2001 From: Jakub Zych Date: Sun, 11 Oct 2026 02:04:54 +0200 Subject: [PATCH] feat(16.3-02): list states, show-revoked toggle, and revoke via ConfirmDialog Add skeleton/empty/error coverage, revoked-row handling, ConfirmDialog overflow wrap for long names, and rebuild boardwalk dist. Co-authored-by: Cursor --- admin/src/components/ui/ConfirmDialog.vue | 2 +- admin/tests/account/ApiTokensPanel.test.ts | 98 ++++++++++++++++++- .../{index-DlYKDHwm.js => index-wuKo5sc0.js} | 2 +- modules/boardwalk/dist/index.html | 2 +- 4 files changed, 100 insertions(+), 4 deletions(-) rename modules/boardwalk/dist/assets/{index-DlYKDHwm.js => index-wuKo5sc0.js} (67%) diff --git a/admin/src/components/ui/ConfirmDialog.vue b/admin/src/components/ui/ConfirmDialog.vue index a5ab089..a273aec 100644 --- a/admin/src/components/ui/ConfirmDialog.vue +++ b/admin/src/components/ui/ConfirmDialog.vue @@ -60,7 +60,7 @@ function onConfirm(): void { {{ title ?? t('backend::lang.form.confirm') }} - {{ message }} + {{ message }}
({ status, body: { data, meta: {} } }) @@ -27,6 +29,14 @@ const existingToken = { expired: false, } +const revokedToken = { + ...existingToken, + id: 13, + name: 'Old token', + hint: 'dead', + revoked_at: '2026-02-01T08:30:00Z', +} + const createdToken = { ...existingToken, id: 12, @@ -52,6 +62,14 @@ const scopes = [ }, ] +function deferred(): { route: () => Promise; release: (reply: Reply) => void } { + let release!: (reply: Reply) => void + const pending = new Promise((resolve) => { + release = resolve + }) + return { route: () => pending, release } +} + function tokenRoutes(overrides: Record = {}, list: unknown[] = [existingToken]): Record { let listed = list return { @@ -71,6 +89,7 @@ async function openAccount(routes: Record = {}, list: unknown[] = const panel = () => document.body.querySelector('[data-api-tokens]') const dialog = () => document.body.querySelector('[data-token-dialog]') +const confirmDialog = () => document.body.querySelector('[data-confirm-dialog]') async function click(selector: string, root: ParentNode = document.body): Promise { const el = root.querySelector(selector) @@ -128,4 +147,81 @@ describe('ApiTokensPanel', () => { expect(dialog()).toBeNull() expect(document.body.textContent).not.toContain(createdToken.token) }) + + describe('list states', () => { + it('shows skeleton then the empty block', async () => { + const pending = deferred() + const { wrapper } = await mountApp( + '/account', + tokenRoutes({ [`GET ${TOKENS}`]: pending.route }, []), + { attach: true }, + ) + expect(panel()!.querySelector('[data-token-list]')!.getAttribute('aria-busy')).toBe('true') + expect(panel()!.querySelectorAll('[aria-hidden="true"]').length).toBeGreaterThanOrEqual(3) + expect(panel()!.querySelector('[data-action="create-token"]')!.disabled).toBe(true) + pending.release(envelope([])) + await flushPromises() + expect(panel()!.querySelector('[data-tokens-empty]')).toBeTruthy() + expect(panel()!.querySelector('[data-action="create-token"]')!.hasAttribute('disabled')).toBe(false) + wrapper.unmount() + }) + + it('shows the alert and hides the toggle when the load fails', async () => { + await openAccount({ + [`GET ${TOKENS}`]: { status: 500, body: { error: { code: 'x', message: 'fail', details: {} } } }, + }) + expect(panel()!.querySelector('[data-tokens-error]')!.getAttribute('role')).toBe('alert') + expect(panel()!.querySelector('[data-show-revoked]')).toBeNull() + expect(panel()!.querySelector('[data-action="create-token"]')!.disabled).toBe(false) + }) + }) + + describe('revoke', () => { + it('runs DELETE through the shared confirm and toasts success', async () => { + const { calls } = await openAccount({ + [`DELETE ${TOKEN_ID}`]: envelope({ ...existingToken, revoked_at: '2026-03-01T10:00:00Z' }), + }) + await click('[data-action="revoke-token"]', panel()!) + expect(confirmDialog()).toBeTruthy() + await click('[data-action="confirm"]', confirmDialog()!) + expect(requestsTo(calls, 'DELETE', TOKEN_ID)).toHaveLength(1) + expect(toasts.value[0]).toMatchObject({ text: 'Unieważniono token', tone: 'success' }) + }) + + it('toasts gone on 404 and reloads', async () => { + let listed: unknown[] = [existingToken] + const { calls } = await openAccount({ + [`GET ${TOKENS}`]: () => envelope(listed), + [`DELETE ${TOKEN_ID}`]: () => { + listed = [] + return { status: 404, body: { error: { code: 'not_found', message: 'gone', details: {} } } } + }, + }) + const getsBefore = requestsTo(calls, 'GET', TOKENS).length + await click('[data-action="revoke-token"]', panel()!) + await click('[data-action="confirm"]', confirmDialog()!) + expect(toasts.value[0]).toMatchObject({ + text: 'Ten token już nie istnieje. Lista została odświeżona.', + tone: 'danger', + }) + expect(requestsTo(calls, 'GET', TOKENS).length).toBeGreaterThan(getsBefore) + expect(panel()!.querySelector('[data-tokens-empty]')).toBeTruthy() + }) + + it('requests revoked=1 and hides revoke on revoked rows', async () => { + const { calls } = await openAccount({ + [`GET ${TOKENS}`]: (request) => + envelope(queryOf(request).get('revoked') === '1' ? [existingToken, revokedToken] : [existingToken]), + }) + const toggle = panel()!.querySelector('[data-show-revoked]')! + toggle.checked = true + toggle.dispatchEvent(new Event('change', { bubbles: true })) + await flushPromises() + const withRevoked = requestsTo(calls, 'GET', TOKENS).filter((request) => queryOf(request).get('revoked') === '1') + expect(withRevoked.length).toBeGreaterThan(0) + expect(panel()!.querySelector('[data-token-row="13"]')).toBeTruthy() + expect(panel()!.querySelector('[data-token-row="13"] [data-action="revoke-token"]')).toBeNull() + expect(panel()!.querySelector('[data-token-row="11"] [data-action="revoke-token"]')).toBeTruthy() + }) + }) }) diff --git a/modules/boardwalk/dist/assets/index-DlYKDHwm.js b/modules/boardwalk/dist/assets/index-wuKo5sc0.js similarity index 67% rename from modules/boardwalk/dist/assets/index-DlYKDHwm.js rename to modules/boardwalk/dist/assets/index-wuKo5sc0.js index 1b9a82c..be1d35f 100644 --- a/modules/boardwalk/dist/assets/index-DlYKDHwm.js +++ b/modules/boardwalk/dist/assets/index-wuKo5sc0.js @@ -6,4 +6,4 @@ - \`null\` or \`undefined\` if the progress is indeterminate. Defaulting to \`null\`.`),null)}function tA(e){return ls(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 \`${Hl}\`.`),Hl)}var nA=Z({__name:"ProgressRoot",props:{modelValue:{type:[Number,null],required:!1},max:{type:Number,required:!1,default:Hl},getValueLabel:{type:Function,required:!1,default:(e,t)=>ls(e)?`${Math.round(e/t*Hl)}%`: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;We();const r=ht(n,"modelValue",a,{passive:n.modelValue===void 0}),l=ht(n,"max",a,{passive:n.max===void 0});Ie(()=>r.value,async s=>{const i=eA(s,n.max);i!==s&&(await Ue(),r.value=i)},{immediate:!0}),Ie(()=>n.max,s=>{const i=tA(n.max);i!==s&&(l.value=i)},{immediate:!0});const o=_(()=>zt(r.value)?"indeterminate":r.value===l.value?"complete":"loading");return XE({modelValue:r,max:l,progressState:o}),(s,i)=>(m(),j(u(Ge),{"as-child":s.asChild,as:s.as,"aria-valuemax":u(l),"aria-valuemin":0,"aria-valuenow":ls(u(r))?u(r):void 0,"aria-valuetext":s.getValueText?.(u(r),u(l)),"aria-label":s.getValueLabel(u(r),u(l)),role:"progressbar","data-state":o.value,"data-value":u(r)??void 0,"data-max":u(l)},{default:F(()=>[ye(s.$slots,"default",{modelValue:u(r)})]),_:3},8,["as-child","as","aria-valuemax","aria-valuenow","aria-valuetext","aria-label","data-state","data-value","data-max"]))}}),Ji=nA,aA=Z({__name:"ProgressIndicator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,n=QE();return We(),(a,r)=>(m(),j(u(Ge),Re(t,{"data-state":u(n).progressState.value,"data-value":u(n).modelValue?.value??void 0,"data-max":u(n).max.value}),{default:F(()=>[ye(a.$slots,"default")]),_:3},16,["data-state","data-value","data-max"]))}}),Zi=aA;const rA="radio.select";function lA(e,t,n){kc(rA,n,{originalEvent:e,value:t})}var oA=Z({__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=ht(n,"checked",a,{passive:n.checked===void 0}),{value:l}=qt(n),{forwardRef:o,currentElement:s}=We(),i=Nc(s),c=_(()=>n.id&&s.value?document.querySelector(`[for="${n.id}"]`)?.innerText??n.value:void 0);function d(f){n.disabled||lA(f,n.value,p=>{a("select",p),!p?.defaultPrevented&&(r.value=!0,i.value&&p.stopPropagation())})}return(f,p)=>(m(),j(u(Ge),Re(f.$attrs,{id:f.id,ref:u(o),role:"radio",type:f.as==="button"?"button":void 0,as:f.as,"aria-checked":u(r),"aria-label":c.value,"as-child":f.asChild,disabled:f.disabled?"":void 0,"data-state":u(r)?"checked":"unchecked","data-disabled":f.disabled?"":void 0,value:u(l),required:f.required,name:f.name,onClick:it(d,["stop"])}),{default:F(()=>[ye(f.$slots,"default",{checked:u(r)}),u(i)&&f.name?(m(),j(u(Hc),{key:0,type:"radio",tabindex:"-1",value:u(l),checked:!!u(r),name:f.name,disabled:f.disabled,required:f.required},null,8,["value","checked","name","disabled","required"])):ee("v-if",!0)]),_:3},16,["id","type","as","aria-checked","aria-label","as-child","disabled","data-state","data-disabled","value","required","name"]))}}),sA=oA;const[iA,uA]=pt("RadioGroupRoot");var cA=Z({__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}=We(),o=ht(n,"modelValue",a,{defaultValue:n.defaultValue,passive:n.modelValue===void 0}),{disabled:s,loop:i,orientation:c,name:d,required:f,dir:p}=qt(n),v=Da(p),h=Nc(l);return uA({modelValue:o,changeModelValue:b=>{o.value=b},disabled:s,loop:i,orientation:c,name:d?.value,required:f}),(b,g)=>(m(),j(u(py),{"as-child":"",orientation:u(c),dir:u(v),loop:u(i)},{default:F(()=>[N(u(Ge),{ref:u(r),role:"radiogroup","data-disabled":u(s)?"":void 0,"as-child":b.asChild,as:b.as,"aria-orientation":u(c),"aria-required":u(f),dir:u(v)},{default:F(()=>[ye(b.$slots,"default",{modelValue:u(o)}),u(h)&&u(d)?(m(),j(u(Hc),{key:0,required:u(f),disabled:u(s),value:u(o),name:u(d)},null,8,["required","disabled","value","name"])):ee("v-if",!0)]),_:3},8,["data-disabled","as-child","as","aria-orientation","aria-required","dir"])]),_:3},8,["orientation","dir","loop"]))}}),$y=cA;const[OI,dA]=pt("RadioGroupItem");var fA=Z({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}=We(),o=iA(),s=_(()=>o.disabled.value||n.disabled),i=_(()=>o.required.value||n.required),c=_(()=>Nl(o.modelValue?.value,n.value));dA({disabled:s,checked:c});const d=q(!1),f=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"];Nr("keydown",v=>{f.includes(v.key)&&(d.value=!0)}),Nr("keyup",()=>{d.value=!1});function p(){setTimeout(()=>{d.value&&l.value?.click()},0)}return(v,h)=>(m(),j(u(vy),{checked:c.value,disabled:s.value,"as-child":"",focusable:!s.value,active:c.value},{default:F(()=>[N(sA,Re({...v.$attrs,...n},{ref:u(r),checked:c.value,required:i.value,disabled:s.value,"onUpdate:checked":h[0]||(h[0]=b=>u(o).changeModelValue(v.value)),onSelect:h[1]||(h[1]=b=>a("select",b)),onKeydown:h[2]||(h[2]=ga(it(()=>{},["prevent"]),["enter"])),onFocus:p}),{default:F(()=>[ye(v.$slots,"default",{checked:c.value,required:i.value,disabled:s.value})]),_:3},16,["checked","required","disabled"])]),_:3},8,["checked","disabled","focusable","active"]))}}),Cy=fA;const[pA,vA]=pt("TimeFieldRoot");function wo(e,t=ro(un())){return e&&"day"in e?e:Sn(t,e)}var mA=Z({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:s,defaultValue:i,minValue:c,maxValue:d,stepSnapping:f,dir:p,locale:v}=qt(a),h=Hs(v),b=Da(p),g=Fc(h.value,{hourCycle:jl(a.hourCycle)}),{primitiveElement:y,currentElement:k}=Za(),E=q(new Set),D=_(()=>Rh(a)),A=_(()=>c.value?wo(c.value):void 0),B=_(()=>d.value?wo(d.value):void 0);ft(()=>{Ap(k.value).forEach(J=>E.value.add(J))});const V=ht(a,"modelValue",r,{defaultValue:i.value,passive:a.modelValue===void 0}),U=_({get(){return zt(V.value)?V.value:wo(V.value)},set(J){return J?V.value=V.value&&"day"in V.value?J:new bn(J.hour,J.minute,J.second,V.value?.millisecond):V.value=J,J}}),C=R$({defaultPlaceholder:a.placeholder,defaultValue:V.value}),R=ht(a,"placeholder",r,{defaultValue:a.defaultPlaceholder??C.copy(),passive:a.placeholder===void 0}),W=_({get(){return wo(R.value)},set(J){return J&&(R.value="day"in R.value?J.copy():new bn(J.hour,J.minute,J.second,R.value?.millisecond)),J}}),T=_(()=>s.value?s.value:"minute"),L=_(()=>V.value?!!(A.value&&fa(U.value,A.value)||B.value&&fa(B.value,U.value)):!1),Y=vS(T.value),I=q(V.value?{...Uu({value:U.value,formatter:g})}:{...Y}),le=_(()=>dy({granularity:T.value,dateRef:W.value,formatter:g,hideTimeZone:a.hideTimeZone,hourCycle:a.hourCycle,segmentValues:I.value,locale:h,isTimeValue:!0})),X=_(()=>{const J=le.value.arr;return a.hourCycle===12?J.map(K=>{if(K.part==="hour"&&"hour"in I.value){const te=I.value.hour;if(te!==null){const ie=te===0?12:te>12?te-12:te;return{...K,value:ie.toString()}}}return K}):J}),de=_(()=>X.value.filter(({part:J})=>J!=="literal"));Ie(h,J=>{g.getLocale()!==J&&(g.setLocale(J),Ue(()=>{E.value.clear(),Ap(k.value).forEach(K=>E.value.add(K))}))}),Ie(U,J=>{!zt(J)&&(!Ar(W.value,J)||W.value.compare(J)!==0)&&(R.value=J.copy())}),Ie([U,h],([J])=>{zt(J)?Object.values(I.value).every(K=>K!==null)&&zt(J)&&(I.value={...Y}):I.value={...Uu({value:J,formatter:g})}});const xe=q(null),_e=_(()=>Array.from(E.value).findIndex(J=>J.getAttribute("data-reka-time-field-segment")===xe.value?.getAttribute("data-reka-time-field-segment"))),ke=_(()=>{const J=b.value==="rtl"?-1:1;return(J<0?_e.value<0:_e.value>E.value.size-1)?null:Array.from(E.value)[_e.value+J]}),fe=_(()=>{const J=b.value==="rtl"?-1:1;return(J>0?_e.value<0:_e.value>E.value.size-1)?null:Array.from(E.value)[_e.value-J]}),Se=Hr();function pe(J){J.isComposing||qn(J.key)&&(J.key===Se.ARROW_LEFT&&fe.value?.focus(),J.key===Se.ARROW_RIGHT&&ke.value?.focus())}function Ae(J){xe.value=J}return vA({locale:h,modelValue:U,placeholder:W,disabled:l,formatter:g,hourCycle:a.hourCycle,step:D,stepSnapping:f,readonly:o,segmentValues:I,isInvalid:L,segmentContents:de,elements:E,setFocusedElement:Ae,focusNext(){ke.value?.focus()}}),t({setFocusedElement:Ae}),(J,K)=>(m(),j(u(Ge),Re(J.$attrs,{ref_key:"primitiveElement",ref:y,role:"group","aria-disabled":u(l)?!0:void 0,"data-disabled":u(l)?"":void 0,"data-readonly":u(o)?"":void 0,"data-invalid":L.value?"":void 0,dir:u(b),onKeydown:ga(pe,["left","right"])}),{default:F(()=>[ye(J.$slots,"default",{modelValue:u(V),segments:X.value,isInvalid:L.value}),N(u(Uc),{id:J.id,as:"input",feature:"focusable",tabindex:"-1",value:u(V)?u(V).toString():"",name:J.name,disabled:u(l),required:J.required,onFocus:K[0]||(K[0]=te=>Array.from(E.value)?.[0]?.focus())},null,8,["id","value","name","disabled","required"])]),_:3},16,["aria-disabled","data-disabled","data-readonly","data-invalid","dir"]))}}),Mp=mA,hA=Z({__name:"TimeFieldInput",props:{part:{type:null,required:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,n=pA(),a=q(!0),r=q(!1),{handleSegmentClick:l,handleSegmentKeydown:o,handleSegmentBeforeInput:s,handleSegmentCompositionStart:i,handleSegmentCompositionEnd:c,handleSegmentFocusOut:d,attributes:f}=fy({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}),p=_(()=>n.disabled.value),v=_(()=>n.readonly.value),h=_(()=>n.isInvalid.value);return(b,g)=>(m(),j(u(Ge),Re({as:b.as,"as-child":b.asChild},u(f),{contenteditable:p.value||v.value?!1:b.part!=="literal","data-reka-time-field-segment":b.part,"aria-disabled":p.value?!0:void 0,"aria-readonly":v.value?!0:void 0,"data-disabled":p.value?"":void 0,"data-invalid":h.value?"":void 0,"aria-invalid":h.value?!0:void 0},Vv(b.part!=="literal"?{mousedown:u(l),keydown:u(o),beforeinput:u(s),compositionstart:u(i),compositionend:u(c),focusout:()=>{a.value=!0,u(d)()},focusin:y=>{u(n).setFocusedElement(y.target)}}:{})),{default:F(()=>[ye(b.$slots,"default")]),_:3},16,["as","as-child","contenteditable","data-reka-time-field-segment","aria-disabled","aria-readonly","data-disabled","data-invalid","aria-invalid"]))}}),Op=hA;const yA=/^filter\[(.+)\]$/,gA=/^[1-9]\d*$/;function dr(e){const t=Array.isArray(e)?e[e.length-1]:e;return typeof t=="string"?t:""}function Pp(e){return gA.test(e)?Number(e):void 0}function Sy(e){const t={},n=dr(e.search).trim();n!==""&&(t.search=n);const a=dr(e.sort).trim();if(a!==""){t.sort=a;const s=dr(e.dir);t.dir=s==="desc"?"desc":"asc"}const r=Pp(dr(e.page));r!==void 0&&(t.page=r);const l=Pp(dr(e.per_page));l!==void 0&&(t.per_page=l);const o={};for(const s of Object.keys(e).sort()){const i=yA.exec(s)?.[1],c=dr(e[s]);i&&c!==""&&(o[i]=c)}return Object.keys(o).length>0&&(t.filter=o),t}function os(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 xr(e){return JSON.stringify(os(e))}const Ey="summer-admin.list:",bA=xr({});let Ku=null;function Xs(){try{return typeof window>"u"?null:window.localStorage}catch{return null}}function Ay(e){return`${Ey}${e}:`}function Dy(e){return Ku===null?null:Ay(Ku)+e}function Wu(e){try{Xs()?.removeItem(e)}catch{}}function Tp(e){const t=Xs();if(t)try{const n=[];for(let a=0;a!0);return}const n=Ay(t);Tp(a=>!a.startsWith(n))}function _A(e){const t=Dy(e);if(t===null)return{};let n=null;try{n=Xs()?.getItem(t)??null}catch{return{}}if(n===null)return{};let a;try{a=JSON.parse(n)}catch{return Wu(t),{}}return typeof a!="object"||a===null||Array.isArray(a)||Object.getPrototypeOf(a)!==Object.prototype||!Object.values(a).every(r=>typeof r=="string")?(Wu(t),{}):Sy(a)}function $o(e,t){const n=Dy(e);if(n!==null){if(xr(t)===bA){Wu(n);return}try{Xs()?.setItem(n,JSON.stringify(os(t)))}catch{}}}const Pr=q(null),My=q(null);let Ml=null;function Oy(e){Py(),My.value=e,!(e===null||e<=0)&&(Ml=setTimeout(()=>{Ml=null,mc()},e*800))}function Py(){Ml!==null&&(clearTimeout(Ml),Ml=null)}d_(Oy);const Bt=mt(Pr);async function xA(e,t){const{data:n,response:a}=await Pe.POST("/auth/login",{body:{login:e,password:t}});return!a.ok||!n?!1:(Oy(typeof n.data.expires_in=="number"?n.data.expires_in:null),!0)}async function Ty(){const{data:e,response:t}=await Pe.GET("/auth/me");return Pr.value=t.ok&&e?e.data:null,rd(Pr.value?.id??null),Pr.value}function qy(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 Qi(e){Pr.value=e,rd(e.id)}function Ry(){Py(),Pr.value=null,My.value=null,rd(null)}function kA(e){Ry();const t=e.currentRoute.value;t.name!=="login"&&e.push({name:"login",query:{redirect:t.fullPath}}).catch(()=>{})}async function wA(e){try{await Pe.POST("/auth/logout")}catch{}finally{Ry(),y_([]),__([])}e&&await e.replace({name:"login"}).catch(()=>{})}const $A=["src"],CA={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":""},SA={class:"flex flex-col leading-tight max-[1099px]:hidden","data-user-identity":""},EA={class:"font-semibold"},AA={key:0,class:"text-[12px] text-muted","data-user-role":""},DA={class:"flex items-center gap-3 px-2 py-2"},MA=["src"],OA={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"},PA={class:"flex min-w-0 flex-col leading-tight"},TA={class:"truncate font-bold"},qA={class:"truncate text-[13px] text-muted"},RA=Z({__name:"UserMenu",setup(e){const t=jr(),n=_(()=>{const i=Bt.value;if(!i)return"";const c=`${i.first_name} ${i.last_name}`.trim();return c===""?i.login:c}),a=_(()=>qy(Bt.value)),r=_(()=>Bt.value?.avatar?.thumb_url||Bt.value?.avatar?.url||""),l=_(()=>Bt.value?.role?.name??"");async function o(){await t.push({name:"account"}).catch(()=>{})}async function s(){await wA(t)}return(i,c)=>(m(),j(u(_y),{modal:!1},{default:F(()=>[N(u(wy),{"data-user-menu":"",disabled:!u(Bt),"aria-label":`${u($)("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?(m(),x("img",{key:0,src:r.value,alt:"","data-user-avatar":"",class:"size-[34px] shrink-0 rounded-full object-cover"},null,8,$A)):(m(),x("span",CA,M(a.value),1)),S("span",SA,[S("span",EA,M(n.value),1),l.value?(m(),x("span",AA,M(l.value),1)):ee("",!0)]),N(u(to),{size:16,class:"text-muted","aria-hidden":"true"})]),_:1},8,["disabled","aria-label"]),N(u(ky),null,{default:F(()=>[N(u(xy),{"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",DA,[r.value?(m(),x("img",{key:0,src:r.value,alt:"","data-user-avatar":"",class:"size-10 shrink-0 rounded-full object-cover"},null,8,MA)):(m(),x("span",OA,M(a.value),1)),S("span",PA,[S("span",TA,M(n.value),1),S("span",qA,M(u(Bt)?.email),1)])]),N(u(Hu),{"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(()=>[N(u(Rw),{size:18,"aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.myaccount.menu_label")),1)]),_:1}),N(u(JE),{class:"my-1 h-px bg-border"}),N(u(Hu),{"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:s},{default:F(()=>[N(u(zm),{size:18,"aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.auth.logout")),1)]),_:1})]),_:1})]),_:1})]),_:1}))}}),IA=4e3,Kl=q([]),Gu=new Map;let BA=1;const FA=mt(Kl);function Me(e,t="success"){const n=BA++;return Kl.value=[{id:n,text:e,tone:t},...Kl.value],Gu.set(n,setTimeout(()=>Iy(n),IA)),n}function Iy(e){const t=Gu.get(e);t!==void 0&&(clearTimeout(t),Gu.delete(e)),Kl.value=Kl.value.filter(n=>n.id!==e)}const NA=["role","data-tone"],VA={class:"font-medium"},LA=["aria-label","onClick"],jA=Z({__name:"Toast",setup(e){return(t,n)=>(m(),j(B1,{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(()=>[(m(!0),x(me,null,Oe(u(FA),a=>(m(),x("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:ge([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"?(m(),j(u(ct),{key:0,size:16})):(m(),j(u(ba),{key:1,size:16}))],2),S("span",VA,M(a.text),1),S("button",{type:"button","aria-label":u($)("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=>u(Iy)(a.id)},[N(u(Ht),{size:16,"aria-hidden":"true"})],8,LA)],8,NA))),128))]),_:1}))}}),zA={class:"flex min-h-screen bg-bg text-text"},UA={class:"flex min-w-0 flex-1 flex-col"},HA={class:"flex h-header shrink-0 items-center justify-between gap-4 border-b border-border bg-surface pr-6 pl-8"},KA={class:"flex shrink-0 items-center gap-1"},WA=["title","aria-label"],GA={class:"min-w-0 flex-1 px-8 py-7"},YA=Z({__name:"AppShell",setup(e){const t=sn(),{collapsed:n,watchViewport:a}=nh(),r=a();xt(r);const l=`${window.location.origin}/`,o=_(()=>eo(String(t.params.vendor??""),String(t.params.plugin??"")));return(s,i)=>(m(),x("div",zA,[N(s2),o.value&&!u(n)?(m(),j(f2,{key:0,entry:o.value},null,8,["entry"])):ee("",!0),S("div",UA,[S("header",HA,[N(h2),S("div",KA,[S("a",{"data-view-site":"",href:l,target:"_blank",rel:"noopener noreferrer",title:u($)("backend::lang.nav.view_site"),"aria-label":u($)("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"},[N(u(jm),{class:"size-[18px]","aria-hidden":"true"})],8,WA),N(RA)])]),S("main",GA,[ye(s.$slots,"default")])]),N(jA)]))}}),JA=Z({__name:"App",setup(e){const t=sn(),n=_(()=>t.meta.shell===!0);return Xt(()=>{document.title=k_(t)}),(a,r)=>n.value?(m(),j(YA,{key:0},{default:F(()=>[N(u(Cu),null,{default:F(({Component:l,route:o})=>[(m(),j(Vt(l),{key:o.path}))]),_:1})]),_:1})):(m(),j(u(Cu),{key:1}))}}),ZA="data-summer-controller",By="*",Xi=new Map,Yu=new Map;let Fy="";function Ny(){return`${Ps.base}/assets/`}function Vy(e){if(!e.startsWith(Ny())||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 Ly(e){if(!Vy(e))return Promise.reject(new Error(`plugin script outside ${Ny()}: ${e}`));const t=Xi.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",()=>{Xi.delete(e),l.remove(),r(new Error(`plugin script failed to load: ${e}`))},{once:!0}),l.src=e,document.head.appendChild(l)});return Xi.set(e,n),n}function jy(e,t){for(const n of t){const a=`${e} -${n}`;if(!Vy(n)||Yu.has(a))continue;const r=document.createElement("link");r.rel="stylesheet",r.setAttribute(ZA,e),r.disabled=!zy(e),r.href=n,Yu.set(a,{owner:e,link:r}),document.head.appendChild(r)}}function QA(e){Fy=e;for(const{owner:t,link:n}of Yu.values())n.disabled=!zy(t)}function zy(e){return e===By||e===Fy}function XA(e){jy(By,e)}async function ld(e,t){jy(e,t?.styles??[]);const n=t?.scripts??[],a=await Promise.allSettled(n.map(r=>Ly(r)));return n.filter((r,l)=>a[l]?.status==="rejected")}const Uy=new Map;async function Hy(){let e=[];try{const{data:t,response:n}=await Pe.GET("/field-types");e=n.ok&&t?t.data:[]}catch{return[]}for(const t of e){XA(t.styles??[]);const n=t.scripts??[];Uy.set(t.element,Promise.allSettled(n.map(a=>Ly(a))).then(a=>n.filter((r,l)=>a[l]?.status==="rejected")))}return e}function e5(e){return Uy.get(e)??Promise.resolve([])}const t5={class:"flex min-h-screen items-center justify-center px-4",style:{background:"radial-gradient(ellipse at 50% 35%, #2b3a5c 0%, #1d2740 60%)"}},n5={class:"flex w-full max-w-[400px] flex-col gap-6"},a5={class:"flex items-center justify-center gap-3"},r5={class:"flex size-[34px] items-center justify-center rounded-full bg-accent-soft"},l5={class:"text-[22px] font-bold tracking-[-0.02em]"},o5={class:"flex flex-col gap-1.5"},s5={class:"font-semibold"},i5={class:"flex flex-col gap-1.5"},u5={class:"font-semibold"},c5=["aria-invalid"],d5={key:0,role:"alert",class:"flex items-center gap-2.5 rounded-control bg-[#fdf0f0] px-3.5 py-3 text-[#c62828]"},f5=["disabled"],p5=Z({__name:"LoginView",setup(e){const t=sn(),n=jr(),a=q(""),r=q(""),l=q(!1),o=q(!1);async function s(){if(!o.value){o.value=!0,l.value=!1;try{if(!await xA(a.value.trim(),r.value)||!await Ty()){l.value=!0;return}r.value="",await Promise.all([qm(),Rm().catch(()=>[]),Hy()]),await n.replace(pg(t.query.redirect)??"/")}finally{o.value=!1}}}return(i,c)=>(m(),x("main",t5,[S("div",n5,[S("div",a5,[S("span",r5,[N(u(Bs),{size:20,class:"text-accent","aria-hidden":"true"})]),c[2]||(c[2]=S("span",{class:"text-[18px] font-bold text-white"},[we("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:it(s,["prevent"])},[S("h1",l5,M(u($)("backend::lang.auth.title")),1),S("label",o5,[S("span",s5,M(u($)("backend::lang.auth.login")),1),ha(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),[[Fl,a.value]])]),S("label",i5,[S("span",u5,M(u($)("backend::lang.auth.password")),1),ha(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:ge([l.value?"border-[#c62828]":"border-[#d2d8e2]","h-input rounded-control border bg-white px-3.5"])},null,10,c5),[[Fl,r.value]])]),l.value?(m(),x("div",d5,[N(u(ct),{size:18,"aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.auth.invalid")),1)])):ee("",!0),S("button",{type:"submit",disabled:o.value,class:"h-input rounded-control bg-[#22304d] font-semibold text-white disabled:opacity-60"},M(u($)("backend::lang.auth.submit")),9,f5)],32)])]))}}),qp=/^\d+$/;function Ky(e,t,n){const a=Ds(t),r=Cn(t);if(!a||!r)return"/";const o=((e??"").trim().split(/[?#]/,1)[0]??"").split("/").filter(d=>d!==""),s=[a.vendor,a.plugin,a.controller];if(!s.every((d,f)=>o[f]?.toLowerCase()===d.toLowerCase()))return r;const c=o.slice(s.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 qp.test(d)?`${r}/${d}`:r}if(c.length===2&&c[0]==="preview"){const d=c[1]===":id"?String(n??""):c[1]??"";return qp.test(d)?`${r}/${d}/preview`:r}return r}const v5={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"},m5={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"},h5={key:1,class:"text-muted","data-empty":""},y5={key:2,class:"text-[13px] text-muted tabular-nums"},fr=Z({__name:"CellValue",props:{column:{},value:{}},setup(e){const t=e;function n(f){return f==null||f===""}function a(f){return n(f)?"":Array.isArray(f)?f.map(a).filter(p=>p!=="").join(", "):typeof f=="boolean"?$(f?"backend::lang.list.column_switch_true":"backend::lang.list.column_switch_false"):typeof f=="object"?"":String(f)}function r(f){return String(f).padStart(2,"0")}function l(f){if(typeof f!="string"&&typeof f!="number")return"";const p=new Date(f);return Number.isNaN(p.getTime())?String(f):`${p.getFullYear()}-${r(p.getMonth()+1)}-${r(p.getDate())} ${r(p.getHours())}:${r(p.getMinutes())}`}function o(f){if(typeof f!="string")return"";const p=/^\d{4}-\d{2}-\d{2}/.exec(f.trim());return p?p[0]:f.trim()}function s(f){if(typeof f!="string")return"";const p=/(\d{2}):(\d{2})/.exec(f);return p?`${p[1]}:${p[2]}`:f.trim()}function i(f){return typeof f=="string"?f!==""&&f!=="0"&&f.toLowerCase()!=="false":!!f}const c=_(()=>t.column.type==="switch"?"switch":t.column.type==="datetime"?"datetime":t.column.type==="date"?"date":t.column.type==="time"?"time":"text"),d=_(()=>{switch(c.value){case"datetime":return l(t.value);case"date":return o(t.value);case"time":return s(t.value);default:return a(t.value)}});return(f,p)=>c.value==="switch"&&!n(e.value)?(m(),x(me,{key:0},[i(e.value)?(m(),x("span",v5,[N(u(Fm),{size:14,"aria-hidden":"true"}),we(M(u($)("backend::lang.list.column_switch_true")),1)])):(m(),x("span",m5,M(u($)("backend::lang.list.column_switch_false")),1))],64)):d.value===""?(m(),x("span",h5,"—")):c.value==="datetime"||c.value==="date"||c.value==="time"?(m(),x("span",y5,M(d.value),1)):(m(),x(me,{key:3},[we(M(d.value),1)],64))}}),g5={key:0,class:"flex shrink-0 gap-2"},b5=["data-row-state"],_5=Z({__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=_(()=>a.filter(l=>t.states.includes(l)));return(l,o)=>r.value.length>0?(m(),x("span",g5,[(m(!0),x(me,null,Oe(r.value,s=>(m(),x("span",{key:s,"data-row-state":s,class:ge([n[s],"inline-flex h-6 shrink-0 items-center rounded-pill px-2.5 text-[12px] font-semibold whitespace-nowrap"])},M(e.labels[s]??s),11,b5))),128))])):ee("",!0)}}),x5={class:"overflow-x-auto"},k5={class:"sticky top-0 z-10"},w5={class:"h-row-head border-y border-border bg-subtle"},$5={key:0,scope:"col","data-select":"",class:"w-[52px] pl-5"},C5=["aria-checked","aria-label","disabled"],S5=["aria-sort"],E5=["data-sort","onClick"],A5={key:1,class:"w-[56px] pr-5"},D5=["aria-busy"],M5={key:0,class:"pl-5"},O5={key:1,class:"pr-5"},P5={key:1},T5=["colspan"],q5={class:"text-muted"},R5=["aria-selected","data-row-states","onClick"],I5={key:0,"data-select":"",class:"pl-5"},B5=["aria-checked","aria-label","onClick"],F5={key:0,class:"flex items-center gap-3"},N5={"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"},V5=["onClick"],L5={key:1,class:"flex items-center gap-2"},j5={key:1,"data-trailing":"",class:"w-[56px] pr-5"},Wy=Z({__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=jr();function l(L){const Y=L.id;return typeof Y=="number"||typeof Y=="string"?Y:null}function o(L,Y){const I=l(L);return I===null?`row-${Y}`:String(I)}function s(L){return n.rowLink?n.rowLink(L):null}function i(L,Y){if(L.target?.closest("a, button, input, label, select"))return;if(n.openable){const X=L.currentTarget?.querySelector("[data-row-open]")??null;a("open",Y,X);return}const le=s(Y);le&&r.push(le)}const c=_(()=>n.rows.map(l).filter(L=>L!==null)),d=_(()=>new Set(n.selected.map(String))),f=_(()=>{const L=c.value,Y=L.filter(I=>d.value.has(String(I))).length;return Y===0?"false":Y===L.length?"true":"mixed"});function p(L){const Y=l(L);return Y!==null&&d.value.has(String(Y))}function v(){a("update:selected",f.value==="true"?[]:[...c.value])}function h(L){const Y=l(L);Y!==null&&(d.value.has(String(Y))?a("update:selected",n.selected.filter(I=>String(I)!==String(Y))):a("update:selected",[...n.selected,Y]))}function b(L){if(n.sort?.column===L.key)return n.sort.dir==="desc"?"descending":"ascending"}function g(L){return n.sortable&&L.sortable}const y=_(()=>n.variant==="relation"),k=_(()=>y.value?"h-[56px]":"h-row"),E=_(()=>y.value?3:8);function D(L){return(typeof L=="string"||typeof L=="number"?String(L):"").split(/[\s@._-]+/).filter(Boolean).slice(0,2).map(I=>I.charAt(0).toUpperCase()).join("")}const A=["deleted","negative","disabled"];function B(L){const Y=l(L),I=Y===null?void 0:n.rowStates[String(Y)];return Array.isArray(I)?A.filter(le=>I.includes(le)):[]}function V(L,Y,I=[]){const le=I.includes("deleted")||I.includes("disabled");return Y===0?le?"font-semibold text-muted":"font-semibold":le||y.value||L.relation?"text-muted":""}function U(L){return["min-w-0 truncate",L.includes("deleted")?"line-through":"no-underline",L.includes("negative")?"text-danger":L.includes("deleted")||L.includes("disabled")?"text-muted":"text-text"]}const C=_(()=>n.columns.filter(L=>!L.invisible)),R=_(()=>Math.max(C.value.length+(n.selectable?1:0)+(n.trailing?1:0),1));function W(L,Y){a("open",Y,L.currentTarget)}const T=["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(L,Y)=>(m(),x("div",x5,[S("table",{class:ge([y.value?"min-w-[480px]":"min-w-[640px]","w-full border-collapse text-left"])},[S("thead",k5,[S("tr",w5,[e.selectable?(m(),x("th",$5,[S("button",{type:"button",role:"checkbox","aria-checked":f.value,"aria-label":u($)("backend::lang.list.select_all"),disabled:e.loading||c.value.length===0,class:ge([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:v},[f.value==="mixed"?(m(),j(u(Um),{key:0,size:14,"aria-hidden":"true"})):f.value==="true"?(m(),j(u(ba),{key:1,size:14,"aria-hidden":"true"})):ee("",!0)],10,C5)])):ee("",!0),(m(!0),x(me,null,Oe(C.value,I=>(m(),x("th",{key:I.key,scope:"col","aria-sort":g(I)?b(I)??"none":void 0,class:ge([b(I)?"text-text":"text-muted","px-3.5 text-[12px] font-semibold first:pl-5 last:pr-5"])},[g(I)?(m(),x("button",{key:0,type:"button","data-sort":I.key,class:"inline-flex items-center gap-1 font-semibold",onClick:le=>a("sort",I.key)},[we(M(I.label)+" ",1),b(I)==="ascending"?(m(),j(u(Nm),{key:0,size:14,"aria-hidden":"true"})):b(I)==="descending"?(m(),j(u(Bm),{key:1,size:14,"aria-hidden":"true"})):ee("",!0)],8,E5)):(m(),x(me,{key:1},[we(M(I.label),1)],64))],10,S5))),128)),e.trailing?(m(),x("td",A5)):ee("",!0)])]),S("tbody",{"aria-busy":e.loading?"true":void 0},[e.loading?(m(!0),x(me,{key:0},Oe(E.value,I=>(m(),x("tr",{key:`skeleton-${I}`,"data-skeleton":"",class:ge([k.value,"border-b border-border"])},[e.selectable?(m(),x("td",M5,[...Y[0]||(Y[0]=[S("span",{class:"block size-[18px] rounded-checkbox bg-skel"},null,-1)])])):ee("",!0),(m(!0),x(me,null,Oe(C.value,le=>(m(),x("td",{key:le.key,class:"px-3.5 first:pl-5 last:pr-5"},[S("span",{class:ge([T[(I-1)%T.length],"block h-3 rounded-[6px] bg-skel"])},null,2)]))),128)),e.trailing?(m(),x("td",O5)):ee("",!0)],2))),128)):e.rows.length===0?(m(),x("tr",P5,[S("td",{colspan:R.value,class:"px-5 py-20 text-center"},[ye(L.$slots,"empty",{},()=>[S("span",q5,M(u($)("backend::lang.list.no_records")),1)])],8,T5)])):(m(!0),x(me,{key:2},Oe(e.rows,(I,le)=>(m(),x("tr",{key:o(I,le),class:ge([[k.value,p(I)?"bg-sel":s(I)||e.openable?"hover:bg-hover":"",s(I)||e.openable?"cursor-pointer":""],"border-b border-border transition-colors duration-150 ease-out"]),"aria-selected":e.selectable?p(I)?"true":"false":void 0,"data-row-states":B(I).length>0?B(I).join(" "):void 0,onClick:X=>i(X,I)},[e.selectable?(m(),x("td",I5,[S("button",{type:"button",role:"checkbox","aria-checked":p(I)?"true":"false","aria-label":u($)("backend::lang.list.select_row"),class:ge([p(I)?"border-primary bg-primary text-on-primary":"border-border-strong bg-surface","flex size-[18px] items-center justify-center rounded-checkbox border"]),onClick:X=>h(I)},[p(I)?(m(),j(u(ba),{key:0,size:14,"aria-hidden":"true"})):ee("",!0)],10,B5)])):ee("",!0),(m(!0),x(me,null,Oe(C.value,(X,de)=>(m(),x("td",{key:X.key,class:ge([V(X,de,B(I)),"px-3.5 first:pl-5 last:pr-5"])},[y.value&&de===0?(m(),x("span",F5,[S("span",N5,M(D(I[X.key])),1),e.openable?(m(),x("button",{key:0,type:"button","data-row-open":"",class:"min-w-0 truncate text-left font-semibold text-text",onClick:xe=>W(xe,I)},[N(fr,{column:X,value:I[X.key]},null,8,["column","value"])],8,V5)):(m(),j(fr,{key:1,column:X,value:I[X.key]},null,8,["column","value"]))])):de===0&&B(I).length>0?(m(),x("span",L5,[s(I)?(m(),j(u($n),{key:0,to:s(I),class:ge(U(B(I)))},{default:F(()=>[N(fr,{column:X,value:I[X.key]},null,8,["column","value"])]),_:2},1032,["to","class"])):(m(),x("span",{key:1,class:ge(U(B(I)))},[N(fr,{column:X,value:I[X.key]},null,8,["column","value"])],2)),N(_5,{states:B(I),labels:e.stateLabels},null,8,["states","labels"])])):de===0&&s(I)?(m(),j(u($n),{key:2,to:s(I),class:"text-text no-underline"},{default:F(()=>[N(fr,{column:X,value:I[X.key]},null,8,["column","value"])]),_:2},1032,["to"])):(m(),j(fr,{key:3,column:X,value:I[X.key]},null,8,["column","value"]))],2))),128)),e.trailing?(m(),x("td",j5,[ye(L.$slots,"trailing",{row:I})])):ee("",!0)],10,R5))),128))],8,D5)],2)]))}}),z5=["aria-label"],U5={key:0,class:"flex flex-col gap-1 text-[13px]"},H5={class:"font-semibold text-muted"},K5=["data-filter","value","onChange"],W5=["value"],G5={key:1,class:"flex flex-col gap-1 text-[13px]"},Y5={class:"mb-1 font-semibold text-muted"},J5={class:"flex items-center gap-2"},Z5=["data-filter","aria-label","value","onChange"],Q5=["data-filter","aria-label","value","onChange"],X5={key:2,class:"flex flex-col gap-1 text-[13px]"},e6={class:"font-semibold text-muted"},t6=["data-filter","value","onChange"],n6=["value"],ul="",Co="h-button rounded-control border border-border-strong bg-surface px-3 text-text",a6=Z({__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(v=>({value:JSON.stringify(v.value),label:v.label}));const p=[];return f.trueValue!==void 0&&p.push({value:JSON.stringify(f.trueValue),label:$("backend::lang.list.column_switch_true")}),f.falseValue!==void 0&&p.push({value:JSON.stringify(f.falseValue),label:$("backend::lang.list.column_switch_false")}),p}const l=q({});async function o(f){const{data:p}=await Pe.GET("/{vendor}/{plugin}/{controller}/filters/{scope}/options",{params:{path:{...n.source,scope:f.name}}});l.value={...l.value,[f.name]:p?.data??[]}}ft(()=>{for(const f of n.filters)f.type==="scope"&&o(f)});const s=nn({});function i(){for(const f of n.filters){if(f.type!=="daterange")continue;const[p="",v=""]=(n.values[f.name]??"").split(".."),h=s[f.name];(!h||n.values[f.name]!==void 0||h.from!==""&&h.to!=="")&&(s[f.name]={from:p,to:v})}}Ie(()=>n.values,i,{immediate:!0,deep:!0});function c(f,p,v){const h={...s[f.name]??{from:"",to:""},[p]:v};s[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,p){a("update",f.name,p===ul?null:p)}return(f,p)=>(m(),x("div",{role:"group","aria-label":u($)("backend::lang.list.filters"),"data-filter-bar":"",class:"flex flex-wrap items-end gap-4 border-t border-border px-5 py-3.5"},[(m(!0),x(me,null,Oe(e.filters,v=>(m(),x(me,{key:v.name},[v.type==="switch"?(m(),x("label",U5,[S("span",H5,M(v.label||v.name),1),S("select",{"data-filter":v.name,value:e.values[v.name]??ul,class:ge(Co),onChange:h=>d(v,h.target.value)},[S("option",{value:ul},M(u($)("backend::lang.list.filter_all")),1),(m(!0),x(me,null,Oe(r(v),h=>(m(),x("option",{key:h.value,value:h.value},M(h.label),9,W5))),128))],40,K5)])):v.type==="daterange"?(m(),x("fieldset",G5,[S("legend",Y5,M(v.label||v.name),1),S("div",J5,[S("input",{type:"date","data-filter":`${v.name}-from`,"aria-label":u($)("backend::lang.list.filter_from"),value:s[v.name]?.from??"",class:ge(Co),onChange:h=>c(v,"from",h.target.value)},null,40,Z5),p[0]||(p[0]=S("span",{"aria-hidden":"true"},"–",-1)),S("input",{type:"date","data-filter":`${v.name}-to`,"aria-label":u($)("backend::lang.list.filter_to"),value:s[v.name]?.to??"",class:ge(Co),onChange:h=>c(v,"to",h.target.value)},null,40,Q5)])])):v.type==="scope"?(m(),x("label",X5,[S("span",e6,M(v.label||v.name),1),(m(),x("select",{key:`${v.name}-${l.value[v.name]?.length??-1}`,"data-filter":v.name,value:e.values[v.name]??ul,class:ge(Co),onChange:h=>d(v,h.target.value)},[S("option",{value:ul},M(u($)("backend::lang.list.filter_all")),1),(m(!0),x(me,null,Oe(l.value[v.name]??[],h=>(m(),x("option",{key:h.value,value:h.value},M(h.label),9,n6))),128))],40,t6))])):ee("",!0)],64))),128))],8,z5))}}),r6=["type","disabled"],Ke=Z({__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=_(()=>["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?(m(),j(u($n),{key:0,to:e.to,class:ge(a.value)},{default:F(()=>[e.icon?(m(),j(Vt(e.icon),{key:0,size:16,"aria-hidden":"true"})):ee("",!0),ye(r.$slots,"default")]),_:3},8,["to","class"])):(m(),x("button",{key:1,type:e.type,disabled:e.disabled,class:ge(a.value)},[e.icon?(m(),j(Vt(e.icon),{key:0,size:16,"aria-hidden":"true"})):ee("",!0),ye(r.$slots,"default")],10,r6))}}),l6=Z({__name:"BulkActionsMenu",props:{actions:{},disabled:{type:Boolean}},emits:["select"],setup(e,{expose:t,emit:n}){const a=n,r=q(null);function l(){const o=r.value?.$el;o instanceof HTMLElement&&o.focus()}return t({focus:l}),(o,s)=>(m(),j(u(_y),{modal:!1},{default:F(()=>[N(u(wy),{"as-child":"",disabled:e.disabled},{default:F(()=>[N(Ke,{ref_key:"trigger",ref:r,variant:"outline",size:"md","data-action":"bulk-actions",disabled:e.disabled},{default:F(()=>[we(M(u($)("backend::lang.list.bulk_actions"))+" ",1),N(u(to),{size:16,class:"text-muted","aria-hidden":"true"})]),_:1},8,["disabled"])]),_:1},8,["disabled"]),N(u(ky),null,{default:F(()=>[N(u(xy),{"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(()=>[(m(!0),x(me,null,Oe(e.actions,i=>(m(),j(u(Hu),{key:i.name,"data-bulk-action":i.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",i.name)},{default:F(()=>[we(M(i.label),1)]),_:2},1032,["data-bulk-action","onSelect"]))),128))]),_:1})]),_:1})]),_:1}))}}),o6={class:"flex flex-wrap items-center justify-between gap-3 px-5 py-4"},s6={key:0,class:"relative block w-[320px] max-w-full"},i6={class:"sr-only"},u6=["value","placeholder"],c6={key:1},d6={class:"flex flex-wrap items-center justify-end gap-2.5"},f6={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"},p6=Z({__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=_(()=>new Map(a.actions.map(i=>[i.name,i.label]))),o=q(null);function s(){o.value?.focus()}return t({focusBulk:s}),(i,c)=>(m(),x("div",o6,[e.showSearch?(m(),x("label",s6,[S("span",i6,M(u($)("backend::lang.list.search")),1),N(u(Is),{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,u6)])):(m(),x("span",c6)),S("div",d6,[e.selectedCount>0?(m(),x("span",f6,[N(u(ba),{size:14,"aria-hidden":"true"}),we(M(e.selectedLabel),1)])):ee("",!0),e.bulkActions.length>0?(m(),j(l6,{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"])):ee("",!0),(m(!0),x(me,null,Oe(e.buttons,d=>(m(),x(me,{key:d},[d==="delete"?(m(),j(Ke,{key:0,"data-action":"delete",variant:e.selectedCount>0?"danger":"outline",icon:u(zr),disabled:e.selectedCount===0,onClick:c[2]||(c[2]=f=>r("delete"))},{default:F(()=>[we(M(e.deleteLabel),1)]),_:1},8,["variant","icon","disabled"])):l.value.has(d)?(m(),j(Ke,{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(()=>[we(M(l.value.get(d)),1)]),_:2},1032,["data-action","disabled","aria-busy","onClick"])):ee("",!0)],64))),128))])]))}}),v6={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"},m6={"data-range":""},h6={key:0,class:"flex items-center gap-2"},y6=["value"],g6=["value"],b6=["aria-label"],_6=["disabled"],x6={key:0,"aria-hidden":"true",class:"px-1"},k6=["data-page","aria-current","onClick"],w6=["disabled"],eu="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",Gy=Z({__name:"Pagination",props:{meta:{},loading:{type:Boolean},perPageOptions:{},perPage:{}},emits:["page","perPage"],setup(e,{emit:t}){const n=e,a=t,r=_(()=>n.meta?.total??0),l=_(()=>n.meta?.page??1),o=_(()=>Math.max(n.meta?.last_page??1,1)),s=_(()=>{const d=n.meta;if(!d||d.total===0)return Fr("backend::lang.list.results",0);const f=(d.page-1)*d.per_page+1,p=Math.min(d.page*d.per_page,d.total);return $("backend::lang.list.pagination_range",{from:f,to:p,total:d.total})}),i=_(()=>{const d=o.value,f=l.value,p=new Set([1,d,f-1,f,f+1].filter(b=>b>=1&&b<=d));f<=3&&[2,3].forEach(b=>b<=d&&p.add(b)),f>=d-2&&[d-1,d-2].forEach(b=>b>=1&&p.add(b));const v=[...p].sort((b,g)=>b-g),h=[];return v.forEach((b,g)=>{const y=v[g-1];y!==void 0&&b-y>1&&h.push(null),h.push(b)}),h});function c(d){const f=Number(d.target.value);Number.isFinite(f)&&f>0&&a("perPage",f)}return(d,f)=>(m(),x("footer",v6,[S("span",m6,M(e.loading?u($)("backend::lang.list.loading"):s.value),1),e.perPageOptions.length>1?(m(),x("label",h6,[S("span",null,M(u($)("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},[(m(!0),x(me,null,Oe(e.perPageOptions,p=>(m(),x("option",{key:p,value:String(p)},M(p),9,g6))),128))],40,y6)])):ee("",!0),!e.loading&&r.value>0?(m(),x("nav",{key:1,"aria-label":u($)("backend::lang.list.pagination"),class:"ml-auto flex items-center gap-1.5"},[S("button",{type:"button","data-page":"prev",class:ge(eu),disabled:l.value<=1,onClick:f[0]||(f[0]=p=>a("page",l.value-1))},[N(u(qs),{size:14,"aria-hidden":"true"}),we(M(u($)("backend::lang.list.prev_page")),1)],8,_6),(m(!0),x(me,null,Oe(i.value,(p,v)=>(m(),x(me,{key:p??`gap-${v}`},[p===null?(m(),x("span",x6,"…")):(m(),x("button",{key:1,type:"button","data-page":p,"aria-current":p===l.value?"page":void 0,class:ge([eu,p===l.value?"border-transparent bg-sel font-bold":""]),onClick:h=>p!==l.value&&a("page",p)},M(p),11,k6))],64))),128)),S("button",{type:"button","data-page":"next",class:ge(eu),disabled:l.value>=o.value,onClick:f[1]||(f[1]=p=>a("page",l.value+1))},[we(M(u($)("backend::lang.list.next_page")),1),N(u(no),{size:14,"aria-hidden":"true"})],8,w6)],8,b6)):ee("",!0)]))}}),$6={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"},C6={class:"flex min-w-0 items-start gap-2.5"},S6={class:"min-w-0 [overflow-wrap:anywhere]"},ei=Z({__name:"ExtensionFailure",props:{text:{}},setup(e){return(t,n)=>(m(),x("div",$6,[S("span",C6,[N(u(ct),{size:16,class:"mt-0.5 shrink-0 text-danger","aria-hidden":"true"}),S("span",S6,M(e.text),1)])]))}}),E6=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"]),A6=new Set(["script","style","template","iframe","object","embed","noscript","textarea","title","xmp","svg","math","form","input","button","select","link","meta","base"]),D6=32,M6=2e3,O6=new Set(["class","title","lang","dir","role"]),P6={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"])},T6=/^(aria|data)-[a-z0-9_-]+$/;function q6(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 R6(e,t,n){return O6.has(t)||P6[e]?.has(t)===!0||T6.test(t)?e==="a"&&t==="href"||e==="img"&&t==="src"?q6(n,e==="a"):!0:!1}function I6(e,t){const n={};for(const[a,r]of Object.entries(t??{})){const l=a.toLowerCase();typeof r=="string"&&R6(e,l,r)&&(n[l]=r)}return n}function Ju(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(A6.has(l))continue;if(!E6.has(l)){a.push(...Ju(r.children,t,n));continue}if(t+1>D6)continue;n.left-=1;const o=Ju(r.children,t+1,n);a.push(Zt(l,I6(l,r.attrs),o.length>0?o:void 0))}return a}function B6(e){return Ju(e,0,{left:M6})}const F6={key:1,"data-partial-loading":"","aria-busy":"true"},N6=["data-partial","aria-busy"],od=Z({__name:"PartialHost",props:{source:{},name:{},recordId:{default:null},variant:{},reloadKey:{default:0},hint:{type:Boolean,default:!1}},setup(e){const t=e,n=q(null),a=q(!1),r=q(!1);let l=0;const o=i=>B6(i.nodes);o.props=["nodes"];async function s(){const i=++l;r.value=!0;let c=null;try{c=(await Pe.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}i===l&&(r.value=!1,a.value=c===null,n.value=c)}return Ie(()=>t.reloadKey,()=>{s()}),s(),(i,c)=>a.value?(m(),j(ei,{key:0,"data-partial-failed":"",text:u($)("backend::lang.extension.partial_failed")},null,8,["text"])):n.value===null?(m(),x("div",F6,[S("div",{"data-partial-skeleton":"",class:ge([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?(m(),x("div",{key:2,class:"summer-partial","data-partial":e.variant,"aria-busy":r.value?"true":void 0},[N(o,{nodes:n.value},null,8,["nodes"])],8,N6)):ee("",!0)}}),V6={class:"flex gap-2.5"},L6=["disabled","aria-busy"],Pa=Z({__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,s)=>(m(),j(u(zC),{open:e.open,"onUpdate:open":r},{default:F(()=>[N(u(LC),null,{default:F(()=>[N(u(NC),{class:"pointer-events-auto fixed inset-0 z-[80] bg-overlay"}),N(u(TC),{"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(()=>[N(u(HC),{class:"text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[we(M(e.title??u($)("backend::lang.form.confirm")),1)]),_:1}),N(u(BC),{class:"text-muted"},{default:F(()=>[we(M(e.message),1)]),_:1}),S("div",V6,[N(u(RC),{"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(()=>[we(M(e.cancelLabel??u($)("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:ge([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:it(l,["prevent"])},[e.busy?(m(),j(u(Cl),{key:0,size:16,class:"animate-spin","aria-hidden":"true"})):ee("",!0),we(" "+M(e.confirmLabel??u($)("backend::lang.form.confirm")),1)],10,L6)])]),_:1})]),_:1})]),_:1},8,["open"]))}});function Ta(){const e=q(null),t=q(!1);let n=null,a=null;function r(i){const c=n;n=null,a=null,e.value=null,c?.(i)}function l(i,c){return r(!1),e.value=i,a=c??null,new Promise(d=>{n=d})}async function o(){if(t.value)return;const i=a;if(i){t.value=!0;try{await i()}finally{t.value=!1}}r(!0)}function s(){t.value||r(!1)}return{request:e,busy:t,ask:l,confirm:o,cancel:s}}const j6={class:"flex flex-col gap-5"},z6={class:"flex flex-wrap items-end justify-between gap-4"},U6={class:"flex flex-col"},H6={class:"text-[26px] font-bold tracking-[-0.02em]"},K6={key:0,"data-record-count":"",class:"text-muted"},W6={key:0,class:"flex items-center gap-2.5"},G6={class:"overflow-hidden rounded-card border border-border bg-surface shadow-card"},Y6={key:2,"data-list-failed":"",class:"flex flex-wrap items-center justify-between gap-3 border-t border-border px-5 py-4"},J6={role:"alert",class:"text-danger"},Z6={key:0,"data-empty-search":"",class:"flex flex-col items-center gap-3"},Q6={class:"flex size-14 items-center justify-center rounded-full bg-subtle text-muted"},X6={class:"text-[17px] font-bold"},e8={class:"max-w-[420px] text-muted"},t8={key:1,"data-empty-list":"",class:"text-muted"},n8=300,a8=Z({__name:"ListView",setup(e){const t=sn(),n=jr(),a={vendor:String(t.params.vendor??""),plugin:String(t.params.plugin??""),controller:String(t.params.controller??"")},r=Ms(a),l=Cn(r)??"/",o=q(null),s=q([]),i=q(null),c=q(!0),d=q(!1),f=q(!1),p=_(()=>d.value||f.value),v=q([]),h=q(!1),b=q(0),g=Ta(),y=_(()=>Sy(t.query)),k=q(y.value.search??""),E=_(()=>o.value?.messages),D=_(()=>o.value?.title?o.value.title:eo(a.vendor,a.plugin)?.sideMenu.find(ue=>ue.controller===r)?.label??r),A=_(()=>i.value?Ve(E.value?.recordCount,i.value.total):""),B=_(()=>o.value?.toolbarButtons??[]),V=_(()=>B.value.filter(ae=>ae==="create")),U=_(()=>o.value?.toolbarActions??[]),C=_(()=>B.value.filter(ae=>ae==="delete"||U.value.some(ue=>ue.name===ae))),R=q(null),W=_(()=>i.value?.row_states??{}),T=_(()=>({deleted:Ve(E.value?.rowStateDeleted),negative:Ve(E.value?.rowStateNegative),disabled:Ve(E.value?.rowStateDisabled)})),L=_(()=>(o.value?.bulkActions??[]).filter(ae=>ae.name!=="delete")),Y=q(!1),I=q(null),le=_(()=>{const ae=o.value?.perPageOptions??[];return ae.length>0?ae:[o.value?.recordsPerPage||20]}),X=_(()=>y.value.per_page??i.value?.per_page??o.value?.recordsPerPage??20),de=_(()=>y.value.sort?{column:y.value.sort,dir:y.value.dir==="desc"?"desc":"asc"}:null);function xe(ae){const ue=o.value?.recordUrl,re=ae.id;return!ue||typeof re!="number"&&typeof re!="string"?null:Ky(ue,r,re)}function _e(ae){$o(r,ae),n.replace({path:t.path,query:os(ae)})}const ke=xr({}),fe=_(()=>xr(y.value)!==ke);let Se=0,pe=null;function Ae(){_e({})}async function J(ae=!1){const ue=++Se;c.value=!0,f.value=!1;let re=null;try{re=await K()}catch{re=null}if(ue!==Se)return;if(!re?.data&&ae){$o(r,{}),n.replace({path:t.path,query:{}});return}if(s.value=re?.data?.data??[],i.value=re?.data?.meta??null,f.value=!re?.data,c.value=!1,re?.response?.status===422){$o(r,{});return}const se=i.value?.last_page??0;se>=1&&(i.value?.page??0)>se&&_e({...y.value,page:se})}function K(){return Pe.GET("/{vendor}/{plugin}/{controller}",{params:{path:a,query:y.value}})}async function te(){const ae=await Pe.GET("/{vendor}/{plugin}/{controller}/schema/list",{params:{path:a}});o.value=ae.data?.data??null,d.value=!o.value,o.value&&ld(r,o.value.assets)}te(),Ie(()=>xr(y.value),ae=>{if(ae===ke){const re=_A(r),se=xr(re);if(se!==ke){pe=se,n.replace({path:t.path,query:os(re)});return}}const ue=pe!==null&&pe===ae;pe=null,$o(r,y.value),v.value=[],k.value=y.value.search??"",J(ue)},{immediate:!0});let ie=null;function ce(ae){k.value=ae,ie!==null&&clearTimeout(ie),ie=setTimeout(()=>{ie=null;const ue=ae.trim();_e({...y.value,search:ue===""?void 0:ue,page:void 0})},n8)}xt(()=>{ie!==null&&clearTimeout(ie)});function he(){k.value="",_e({...y.value,search:void 0,page:void 0})}function w(ae){const ue=de.value;ue?.column!==ae?_e({...y.value,sort:ae,dir:"asc",page:void 0}):ue.dir==="asc"?_e({...y.value,sort:ae,dir:"desc",page:void 0}):_e({...y.value,sort:void 0,dir:void 0,page:void 0})}function O(ae){_e({...y.value,page:ae})}function P(ae){_e({...y.value,per_page:ae,page:void 0})}function Q(ae,ue){const re={...y.value.filter??{}};ue===null?delete re[ae]:re[ae]=ue,_e({...y.value,filter:re,page:void 0})}async function G(){const ae=v.value.map(Number).filter(re=>Number.isInteger(re)&&re>0);if(!(ae.length===0||h.value||!await g.ask({message:Ve(E.value?.deleteConfirm,ae.length),confirmLabel:$("backend::lang.form.delete"),danger:!0}))){h.value=!0;try{const re=await Pe.POST("/{vendor}/{plugin}/{controller}/bulk-delete",{params:{path:a},body:{ids:ae}});if(re.data){Me(Ve(E.value?.deleted,re.data.data.deleted)),v.value=[],await J(),b.value+=1;return}Me(re.error?.error.message||$("backend::lang.list.delete_failed"),"danger")}catch{Me($("backend::lang.list.delete_failed"),"danger")}finally{h.value=!1}}}async function ne(ae){const ue=L.value.find(Le=>Le.name===ae),re=v.value.map(Number).filter(Le=>Number.isInteger(Le)&&Le>0);if(!ue||re.length===0||Y.value)return;const se=ue.label??ae;let oe=0,be=null,Ee="";const Fe=await g.ask({message:ue.confirm||Fr("backend::lang.list.bulk_confirm",re.length,{action:se}),confirmLabel:se,danger:!1},async()=>{Y.value=!0;try{const Le=await Pe.POST("/{vendor}/{plugin}/{controller}/bulk/{action}",{params:{path:{...a,action:ae}},body:{ids:re}});oe=Le.response.status,be=Le.data?.data??null,Ee=Le.error?.error.message??""}catch{oe=0}finally{Y.value=!1}});if(await new Promise(Le=>setTimeout(Le,0)),I.value?.focusBulk(),!Fe)return;const He=be;if(He){Me(He.message||Fr("backend::lang.list.bulk_done",He.affected)),v.value=[],await J(),b.value+=1;return}if(oe===409){Me($("backend::lang.list.bulk_stale"),"danger"),v.value=[],await J();return}if(oe===403){Me(Ee||$("backend::lang.list.action_forbidden"),"danger");return}Me(Ee||$("backend::lang.extension.action_failed"),"danger")}async function $e(ae){if(R.value===null){R.value=ae;try{const ue=await Pe.POST("/{vendor}/{plugin}/{controller}/toolbar/{action}",{params:{path:{...a,action:ae}},body:{}});if(ue.data){ue.data.data.message&&Me(ue.data.data.message),await J(),b.value+=1;return}Me(ue.error?.error.message||$("backend::lang.extension.action_failed"),"danger")}catch{Me($("backend::lang.extension.action_failed"),"danger")}finally{R.value=null}}}return(ae,ue)=>(m(),x("section",j6,[S("header",z6,[S("div",U6,[S("h1",H6,M(D.value),1),A.value?(m(),x("p",K6,M(A.value),1)):ee("",!0)]),V.value.length>0?(m(),x("div",W6,[(m(!0),x(me,null,Oe(V.value,re=>(m(),j(Ke,{key:re,"data-action":"create",variant:"primary",icon:u(Rs),to:`${u(l)}/create`},{default:F(()=>[we(M(u(Ve)(E.value?.create)),1)]),_:1},8,["icon","to"]))),128))])):ee("",!0)]),o.value?.headerPartial?(m(),j(od,{key:0,variant:"header",source:a,name:o.value.headerPartial,"reload-key":b.value},null,8,["name","reload-key"])):ee("",!0),S("div",G6,[o.value?(m(),j(p6,{key:0,ref_key:"toolbar",ref:I,"show-search":o.value.showSearch,search:k.value,"search-prompt":u(Ve)(E.value?.searchPrompt),buttons:C.value,"selected-count":v.value.length,"selected-label":u(Ve)(E.value?.selected,v.value.length),"delete-label":u(Ve)(E.value?.deleteSelected,v.value.length),actions:U.value,"busy-action":R.value,"bulk-actions":L.value,"bulk-busy":Y.value,"onUpdate:search":ce,onDelete:G,onAction:$e,onBulk:ne},null,8,["show-search","search","search-prompt","buttons","selected-count","selected-label","delete-label","actions","busy-action","bulk-actions","bulk-busy"])):ee("",!0),o.value&&o.value.filters.length>0?(m(),j(a6,{key:1,filters:o.value.filters,values:y.value.filter??{},source:a,onUpdate:Q},null,8,["filters","values"])):ee("",!0),p.value&&!c.value?(m(),x("div",Y6,[S("p",J6,M(u($)("backend::lang.list.load_failed")),1),f.value&&fe.value?(m(),j(Ke,{key:0,"data-action":"reset-list",onClick:Ae},{default:F(()=>[we(M(u($)("backend::lang.list.reset_list")),1)]),_:1})):ee("",!0)])):(m(),j(Wy,{key:3,columns:o.value?.columns??[],rows:s.value,loading:c.value||!o.value,"row-link":xe,selectable:o.value?.showCheckboxes??!1,selected:v.value,sortable:o.value?.showSorting??!1,sort:de.value,"row-states":W.value,"state-labels":T.value,"onUpdate:selected":ue[0]||(ue[0]=re=>v.value=re),onSort:w},{empty:F(()=>[y.value.search?(m(),x("div",Z6,[S("span",Q6,[N(u(Gm),{size:24,"aria-hidden":"true"})]),S("p",X6,M(u(Ve)(E.value?.emptySearch,void 0,{term:y.value.search})),1),S("p",e8,M(u(Ve)(E.value?.emptySearchHint,void 0,{term:y.value.search})),1),N(Ke,{"data-action":"clear-search",onClick:he},{default:F(()=>[we(M(u($)("backend::lang.list.clear_search")),1)]),_:1})])):(m(),x("p",t8,M(u(Ve)(E.value?.empty)||o.value?.noRecordsMessage||u($)("backend::lang.list.no_records")),1))]),_:1},8,["columns","rows","loading","selectable","selected","sortable","sort","row-states","state-labels"])),N(Gy,{meta:i.value,loading:c.value||!o.value,"per-page-options":le.value,"per-page":X.value,onPage:O,onPerPage:P},null,8,["meta","loading","per-page-options","per-page"])]),N(Pa,{open:u(g).request.value!==null,message:u(g).request.value?.message??"","confirm-label":u(g).request.value?.confirmLabel,danger:u(g).request.value?.danger,busy:u(g).busy.value,onConfirm:u(g).confirm,onCancel:u(g).cancel},null,8,["open","message","confirm-label","danger","busy","onConfirm","onCancel"])]))}}),$a="X-Session-Key",Yy="X-Child-Session-Key",r8=32;function Wl(){const e=new Uint8Array(r8);globalThis.crypto.getRandomValues(e);let t="";for(const n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}const l8="X-Upload-Id";async function pa(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 ss(e){try{const t=await e();return t.response.ok&&t.data instanceof Blob?t.data:null}catch{return null}}function Ln(e){return encodeURIComponent(String(e))}function Jy(e){return`${Ps.api}/${Ln(e.vendor)}/${Ln(e.plugin)}/${Ln(e.controller)}`}function o8(e){try{return e===""?null:JSON.parse(e)}catch{return null}}function sd(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 s8(e,t){const n=t;if((e===200||e===201)&&n?.data)return{ok:!0,item:n.data};const a=sd(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 Zy(e,t,n,a,r){let l=null,o=!1;const s=()=>new Promise(c=>{const d=new XMLHttpRequest;l=d,d.open("POST",e),d.setRequestHeader("X-Requested-With",Mm),d.setRequestHeader("Accept","application/json");for(const[p,v]of Object.entries(n))d.setRequestHeader(p,v);r&&d.setRequestHeader(l8,r),d.upload.onprogress=p=>{p.lengthComputable&&a?.(p.loaded,p.total)},d.onload=()=>c({status:d.status,body:o8(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 s();return typeof c=="object"&&c.status===401&&!o&&(await mc()&&(c=o?"aborted":await s()),typeof c=="object"&&c.status===401&&c_()),c==="aborted"||o?{ok:!1,reason:"aborted",status:0,message:""}:c==="network"?{ok:!1,reason:"network",status:0,message:""}:s8(c.status,c.body)})(),abort(){o=!0,l?.abort()}}}function Qy(e,t,n,a){const r={...e,id:t,field:n},l={[$a]:a},o=`${Jy(e)}/${Ln(t)}/files/${Ln(n)}`;return{list:()=>pa(()=>Pe.GET("/{vendor}/{plugin}/{controller}/{id}/files/{field}",{params:{path:r,header:l}})),upload:(s,i,c)=>Zy(o,s,{...l},i,c),update:(s,i)=>pa(()=>Pe.PUT("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}",{params:{path:{...r,file:s},header:l},body:i})),remove:s=>pa(()=>Pe.DELETE("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}",{params:{path:{...r,file:s},header:l}})),reorder:s=>pa(()=>Pe.POST("/{vendor}/{plugin}/{controller}/{id}/files/{field}/reorder",{params:{path:r,header:l},body:{ids:s}})),download:s=>ss(()=>Pe.GET("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}/download",{params:{path:{...r,file:s},header:l},parseAs:"blob"})),thumb:s=>ss(()=>Pe.GET("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}/thumb",{params:{path:{...r,file:s},header:l},parseAs:"blob"}))}}function i8(e,t,n,a,r,l,o){const s={...e,id:t,name:n,child:a,field:r},i={[$a]:l,[Yy]:o},c=`${Jy(e)}/${Ln(t)}/relations/${Ln(n)}/records/${Ln(a)}/files/${Ln(r)}`;return{list:()=>pa(()=>Pe.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}",{params:{path:s,header:i}})),upload:(d,f,p)=>Zy(c,d,{...i},f,p),update:(d,f)=>pa(()=>Pe.PUT("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}",{params:{path:{...s,file:d},header:i},body:f})),remove:d=>pa(()=>Pe.DELETE("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}",{params:{path:{...s,file:d},header:i}})),reorder:d=>pa(()=>Pe.POST("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/reorder",{params:{path:s,header:i},body:{ids:d}})),download:d=>ss(()=>Pe.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}/download",{params:{path:{...s,file:d},header:i},parseAs:"blob"})),thumb:d=>ss(()=>Pe.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}/thumb",{params:{path:{...s,file:d},header:i},parseAs:"blob"}))}}const u8={key:0,role:"alert","data-forbidden-banner":"",class:"flex items-start gap-3 rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},c8={class:"flex min-w-0 flex-col gap-1"},d8={class:"[overflow-wrap:anywhere]"},f8={key:1,role:"alert","data-error-banner":"",class:"flex items-start gap-3 rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},p8={class:"flex flex-col gap-1"},Qr=Z({__name:"FormErrorBanner",props:{errors:{},fieldNames:{},forbidden:{default:null}},setup(e){const t=e,n=_(()=>Object.keys(t.errors).length),a=_(()=>Object.entries(t.errors).filter(([r])=>!t.fieldNames.includes(r)).flatMap(([,r])=>r));return(r,l)=>e.forbidden?(m(),x("div",u8,[N(u(ct),{size:20,class:"mt-px shrink-0","aria-hidden":"true"}),S("div",c8,[S("p",d8,M(e.forbidden),1),(m(!0),x(me,null,Oe(a.value,(o,s)=>(m(),x("p",{key:s,class:"text-[13px] [overflow-wrap:anywhere]"},M(o),1))),128))])])):n.value>0?(m(),x("div",f8,[N(u(ct),{size:20,class:"mt-px shrink-0","aria-hidden":"true"}),S("div",p8,[S("p",null,[S("strong",null,M(u($)("backend::lang.form.error_title")),1),we(" "+M(u(Fr)("backend::lang.form.error_fields",n.value)),1)]),(m(!0),x(me,null,Oe(a.value,(o,s)=>(m(),x("p",{key:s,class:"text-[13px]"},M(o),1))),128))])])):ee("",!0)}}),v8=new Set(["readonly","placeholder","maxlength","minlength","min","max","step","autocomplete","spellcheck","pattern"]);function Xr(e){const t={};for(const[n,a]of Object.entries(e.attributes??{})){const r=n.toLowerCase();!v8.has(r)||a===null||a===!1||(t[r]=a)}return t}function Tt(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 id(e){return typeof e=="string"?e!==""&&e!=="0"&&e.toLowerCase()!=="false":!!e}function Xy(e,t){return typeof e=="number"?t?1:0:t}function eg(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 m8={class:"flex min-w-0 flex-col"},h8=["for"],y8={key:0,class:"text-danger","aria-hidden":"true"},g8=["id"],b8=["id","name","checked","aria-invalid","aria-describedby"],_8=Z({__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=_(()=>id(n.modelValue));function l(o){a("update:modelValue",Xy(n.modelValue,o.target.checked))}return(o,s)=>(m(),x("div",{class:ge([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",m8,[S("label",{for:e.controlId,class:"font-semibold"},[we(M(e.field.label||e.field.name),1),e.field.required?(m(),x("span",y8," *")):ee("",!0)],8,h8),e.field.comment?(m(),x("p",{key:0,id:`${e.controlId}-comment`,class:"text-[13px] text-muted"},M(e.field.comment),9,g8)):ee("",!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,b8)],2))}});function x8(e){return e==="date"||e==="time"?e:"datetime"}function It(e,t=2){return String(e).padStart(t,"0")}const k8=/(Z|[+-]\d{2}:?\d{2})$/i;function w8(e,t,n=!1){if(typeof t!="string"||t.trim()==="")return null;const a=t.trim();try{if(e==="date")return kh(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?o$(l[1]):null}const r=k8.test(a)?a.replace(" ","T"):`${a.replace(" ","T")}Z`;return n?Sn(Wf(r,"UTC")):Wf(r,un())}catch{return null}}function tu(e){return`${It(e.year,4)}-${It(e.month)}-${It(e.day)}`}function nu(e){return`${It(e.hour)}:${It(e.minute)}:${It(e.second)}`}function Rp(e,t,n=!1){if(!t)return null;if(e==="time")return"hour"in t?nu(t):null;if(!("year"in t))return null;if(e==="date")return tu(t);if(n){const l=t instanceof Gn?Sn(t):t,o="hour"in l?nu(l):"00:00:00";return`${tu(l)}T${o}Z`}const a=t instanceof Gn?t:Ac(t instanceof tt?Sn(t):t,un()),r=zs(a,"UTC");return`${tu(r)}T${nu(r)}Z`}const $8={date:"YYYY-MM-DD",datetime:"YYYY-MM-DD HH:mm",time:"HH:mm"},C8=/\[([^\]]*)\]|YYYY|YY|MMMM|MMM|MM|M|dddd|ddd|DD|D|HH|H|hh|h|mm|ss|A|a/g;function S8(e){return"year"in e?new tt(e.year,e.month,e.day):null}function au(e,t,n,a){return new en(e,{...n,timeZone:"UTC"}).formatToParts(t.toDate("UTC")).find(l=>l.type===a)?.value??""}function E8(e,t,n,a){if(!e)return"";const r=n||$8[t],l=S8(e),o="hour"in e?e:null,s=/D/.test(r.replace(/\[[^\]]*\]/g,""));return r.replace(C8,(i,c)=>{if(c!==void 0)return c;switch(i){case"YYYY":return l?It(l.year,4):"";case"YY":return l?It(l.year%100):"";case"MMMM":case"MMM":{if(!l)return"";const d=i==="MMMM"?"long":"short";return s?au(a,l,{day:"numeric",month:d},"month"):au(a,l,{month:d},"month")}case"MM":return l?It(l.month):"";case"M":return l?String(l.month):"";case"dddd":case"ddd":return l?au(a,l,{weekday:i==="dddd"?"long":"short"},"weekday"):"";case"DD":return l?It(l.day):"";case"D":return l?String(l.day):"";case"HH":return o?It(o.hour):"";case"H":return o?String(o.hour):"";case"hh":return o?It(o.hour%12||12):"";case"h":return o?String(o.hour%12||12):"";case"mm":return o?It(o.minute):"";case"ss":return o?It(o.second):"";case"A":return o?o.hour<12?"AM":"PM":"";case"a":return o?o.hour<12?"am":"pm":"";default:return i}})}const A8=new tt(2026,10,4);function D8(e,t){if(typeof t=="number"&&Number.isInteger(t)&&t>=0&&t<=6)return t;try{return(7-js(A8,e))%7}catch{return 1}}function Ip(e){if(e)try{return kh(e.slice(0,10))}catch{return}}function M8(e,t=ro(un())){const n=Ip(e.minDate),a=Ip(e.maxDate);if(n||a)return{min:n,max:a};const r=e.yearRange??[];return r.length===1&&typeof r[0]=="number"?{min:new tt(t.year-r[0],1,1),max:new tt(t.year+r[0],12,31)}:r.length===2&&typeof r[0]=="number"&&typeof r[1]=="number"?{min:new tt(r[0],1,1),max:new tt(r[1],12,31)}:{}}function Zu(e,t,n,a){if(!e||t==="time")return;if(t==="date")return e;const r=new xa(e.year,e.month,e.day,a?23:0,a?59:0,a?59:0);return n?r:zs(Ac(r,"UTC"),un())}function O8(e,t){const n=ro(un());return Zu(n,e==="time"?"datetime":e,t,!1)??n}const P8=["id","aria-describedby"],T8={key:0},q8={key:1,class:"text-muted","data-empty":""},R8=["aria-label"],I8={class:"flex size-8 shrink-0 items-center justify-center text-muted","aria-hidden":"true"},B8=["data-mode"],F8=["aria-label"],N8={key:0,"data-datepicker-time":"",class:"mt-3 flex items-center gap-2 border-t border-border pt-3"},cl="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",V8=Z({__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=_(()=>x8(n.field.mode)),l=_(()=>r.value==="datetime"&&!!n.field.ignoreTimezone),o=_(()=>Br.value||"pl"),s=_(()=>{const fe=n.field.attributes?.readonly;return!!n.field.readOnly||fe!=null&&fe!==!1}),i=_(()=>w8(r.value,n.modelValue,l.value)),c=_(()=>r.value==="time"?null:i.value),d=_(()=>r.value==="time"?i.value:null),f=_(()=>M8(n.field)),p=_(()=>Zu(f.value.min,r.value,l.value,!1)),v=_(()=>Zu(f.value.max,r.value,l.value,!0)),h=O8(r.value,l.value),b=_(()=>D8(o.value,n.field.firstDay)),g=_(()=>n.field.twelveHour?12:24),y=_(()=>r.value==="date"?"day":"minute"),k=_(()=>E8(i.value,r.value,n.field.displayFormat,o.value)),E=_(()=>!n.field.required&&i.value!==null&&!s.value),D=_(()=>{const fe=c.value;return fe?!!p.value&&fe.compare(p.value)<0||!!v.value&&fe.compare(v.value)>0:!1}),A=new Set(["day","month","year","hour","minute","second"]),B=q(null),V=q(!1);function U(){const fe=B.value;if(!fe){V.value=!1;return}const Se=Array.from(fe.querySelectorAll("[data-reka-date-field-segment], [data-reka-time-field-segment]")).filter(Ae=>A.has(Ae.dataset.rekaDateFieldSegment??Ae.dataset.rekaTimeFieldSegment??"")),pe=Se.filter(Ae=>!Ae.hasAttribute("data-placeholder")).length;V.value=pe>0&&pe!!n.invalid||D.value||V.value),W=_(()=>Rp(r.value,i.value,l.value));function T(fe){const Se=Rp(r.value,fe??null,l.value);C(),!(Se===W.value&&(Se!==null||n.modelValue===null))&&a("update:modelValue",Se)}function L(fe){if(!fe||r.value!=="datetime"){T(fe);return}const Se=c.value,pe=le.value,Ae=!Se||Se.year!==fe.year||Se.month!==fe.month||Se.day!==fe.day,J=!("hour"in fe)||fe.hour!==pe.hour||fe.minute!==pe.minute;Ae&&J&&(fe=X(fe,pe)),I.value=fe,T(fe)}function Y(){a("update:modelValue",null),C()}const I=q(null);Ie(c,fe=>{I.value=fe},{immediate:!0});const le=_(()=>{const fe=I.value??c.value;return fe&&"hour"in fe?new bn(fe.hour,fe.minute):new bn(0,0)});function X(fe,Se){return"hour"in fe?fe.set({hour:Se.hour,minute:Se.minute,second:0,millisecond:0}):new xa(fe.year,fe.month,fe.day,Se.hour,Se.minute)}function de(fe){if(!fe)return;const Se=fe instanceof bn?fe:new bn(fe.hour,fe.minute),pe=I.value??c.value??h,Ae=X(pe,Se);I.value=Ae,T(Ae)}function xe(fe){return fe.charAt(0).toLocaleUpperCase(o.value)+fe.slice(1)}const _e=_(()=>[Tt(R.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 ke(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,Se)=>s.value?(m(),x("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"},[k.value!==""?(m(),x("span",T8,M(k.value),1)):(m(),x("span",q8,"—"))],8,P8)):r.value==="time"?(m(),x("div",{key:1,ref_key:"container",ref:B,"data-datepicker":"","data-mode":"time",class:ge(_e.value),onKeyup:C,onFocusout:C},[N(u(Mp),{id:e.controlId,"model-value":d.value,locale:o.value,"hour-cycle":g.value,granularity:"minute",name:e.field.name,required:e.field.required||void 0,"aria-invalid":R.value?"true":void 0,"aria-describedby":e.describedBy||void 0,class:"flex min-w-0 flex-1 items-center","onUpdate:modelValue":T},{default:F(({segments:pe})=>[(m(!0),x(me,null,Oe(pe,Ae=>(m(),j(u(Op),{key:Ae.part,part:Ae.part,class:ge(ke(Ae.part))},{default:F(()=>[we(M(Ae.value),1)]),_:2},1032,["part","class"]))),128))]),_:1},8,["id","model-value","locale","hour-cycle","name","required","aria-invalid","aria-describedby"]),E.value?(m(),x("button",{key:0,type:"button","data-action":"clear","aria-label":u($)("backend::lang.datepicker.clear"),class:ge(cl),onClick:Y},[N(u(Ht),{size:16,"aria-hidden":"true"})],8,R8)):ee("",!0),S("span",I8,[N(u(Eu),{size:16})])],34)):(m(),j(u(tE),{key:2,id:e.controlId,"model-value":c.value,"default-placeholder":u(h),locale:o.value,granularity:y.value,"hour-cycle":g.value,"hide-time-zone":r.value!=="datetime"||l.value,"min-value":p.value,"max-value":v.value,"week-starts-on":b.value,name:e.field.name,required:e.field.required||void 0,"close-on-select":r.value==="date","prevent-deselect":"","onUpdate:modelValue":L},{default:F(()=>[S("div",{ref_key:"container",ref:B,"data-datepicker":"","data-mode":r.value,class:ge(_e.value),onKeyup:C,onFocusout:C},[N(u(_E),{"aria-invalid":R.value?"true":void 0,"aria-describedby":e.describedBy||void 0,class:"flex min-w-0 flex-1 items-center overflow-hidden"},{default:F(({segments:pe})=>[(m(!0),x(me,null,Oe(pe,Ae=>(m(),j(u(RE),{key:Ae.part,part:Ae.part,class:ge(ke(Ae.part))},{default:F(()=>[we(M(Ae.value),1)]),_:2},1032,["part","class"]))),128))]),_:1},8,["aria-invalid","aria-describedby"]),E.value?(m(),x("button",{key:0,type:"button","data-action":"clear","aria-label":u($)("backend::lang.datepicker.clear"),class:ge(cl),onClick:Y},[N(u(Ht),{size:16,"aria-hidden":"true"})],8,F8)):ee("",!0),N(u(zE),{"data-action":"open-calendar","aria-label":u($)("backend::lang.datepicker.open_calendar"),class:ge(cl)},{default:F(()=>[N(u(Vm),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label"])],42,B8),N(u(gE),{"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(()=>[N(u(aE),null,{default:F(({weekDays:pe,grid:Ae})=>[N(u(OE),{class:"flex h-9 items-center justify-between"},{default:F(()=>[N(u(NE),{"aria-label":u($)("backend::lang.datepicker.prev_month"),class:ge(cl)},{default:F(()=>[N(u(qs),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label"]),N(u(TE),{class:"font-semibold"},{default:F(({headingValue:J})=>[we(M(xe(J)),1)]),_:1}),N(u(BE),{"aria-label":u($)("backend::lang.datepicker.next_month"),class:ge(cl)},{default:F(()=>[N(u(no),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label"])]),_:1}),(m(!0),x(me,null,Oe(Ae,J=>(m(),j(u(kE),{key:J.value.toString(),class:"mt-2 w-full border-collapse select-none"},{default:F(()=>[N(u(SE),null,{default:F(()=>[N(u(Dp),{class:"flex"},{default:F(()=>[(m(!0),x(me,null,Oe(pe,K=>(m(),j(u(DE),{key:K,class:"flex h-9 w-9 items-center justify-center text-[13px] font-normal text-muted"},{default:F(()=>[we(M(K),1)]),_:2},1024))),128))]),_:2},1024)]),_:2},1024),N(u($E),null,{default:F(()=>[(m(!0),x(me,null,Oe(J.rows,(K,te)=>(m(),j(u(Dp),{key:`week-${te}`,class:"flex"},{default:F(()=>[(m(!0),x(me,null,Oe(K,ie=>(m(),j(u(lE),{key:ie.toString(),date:ie,class:"p-0"},{default:F(()=>[N(u(sE),{day:ie,month:J.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"?(m(),x("div",N8,[N(u(Eu),{size:16,class:"shrink-0 text-muted","aria-hidden":"true"}),N(u(Mp),{"model-value":le.value,locale:o.value,"hour-cycle":g.value,granularity:"minute","hide-time-zone":"",class:"flex min-w-0 items-center","onUpdate:modelValue":de},{default:F(({segments:pe})=>[(m(!0),x(me,null,Oe(pe,Ae=>(m(),j(u(Op),{key:Ae.part,part:Ae.part,class:ge(ke(Ae.part))},{default:F(()=>[we(M(Ae.value),1)]),_:2},1032,["part","class"]))),128))]),_:1},8,["model-value","locale","hour-cycle"])])):ee("",!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"]))}}),L8={class:"relative"},j8=["id","name","value","required","aria-required","aria-invalid","aria-describedby"],z8=["value"],So="empty",Eo="placeholder",U8=Z({__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=_(()=>n.field.options??[]);function l(c,d){return c==null||d===null||d===void 0?c===d||c==null&&d==null:String(c)===String(d)}const o=_(()=>{const c=r.value.findIndex(d=>l(d.value,n.modelValue));return c>=0?String(c):n.field.emptyOption!==void 0&&(n.modelValue===null||n.modelValue===void 0||n.modelValue==="")?So:Eo}),s=_(()=>o.value===So||o.value===Eo);function i(c){const d=c.target.value;if(d===So){a("update:modelValue",null);return}const f=r.value[Number(d)];f&&a("update:modelValue",f.value)}return(c,d)=>(m(),x("div",L8,[S("select",{id:e.controlId,name:e.field.name,value:o.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:ge([[u(Tt)(e.invalid),s.value?"text-muted":""],"h-input appearance-none pr-10"]),onChange:i},[e.field.emptyOption!==void 0?(m(),x("option",{key:0,value:So,class:"text-muted"},M(e.field.emptyOption),1)):ee("",!0),o.value===Eo?(m(),x("option",{key:1,value:Eo,disabled:""},M(u($)("backend::lang.form.select_placeholder")),1)):ee("",!0),(m(!0),x(me,null,Oe(r.value,(f,p)=>(m(),x("option",{key:p,value:String(p),class:"text-text"},M(f.label),9,z8))),128))],42,j8),N(u(to),{size:16,class:"pointer-events-none absolute top-1/2 right-3.5 -translate-y-1/2 text-muted","aria-hidden":"true"})]))}}),ud=Symbol("summer.form.values"),cd=Symbol("summer.form.patch"),dd=Symbol("summer.form.locale"),is=Symbol("summer.form.enabledLocales"),tg=Symbol("summer.form.assets");function fd(){const e=q(0);return{activeUploads:e,beginUpload(){e.value++;let t=!1;return()=>{t||(t=!0,e.value>0&&e.value--)}}}}const el=Symbol("summer.form.session"),Bp="summer-action",H8="summer-result",Fp="summer-change",Np="summer-upload",K8="summer-upload-result",ng=5e3,W8={class:"flex items-start gap-3"},G8={class:"flex min-w-0 flex-1 flex-col gap-1"},Y8={key:0,class:"flex items-center gap-4"},J8=["src"],Z8={key:1,class:"flex size-16 shrink-0 items-center justify-center rounded-inner bg-subtle","aria-hidden":"true"},Q8=["title"],X8={class:"flex flex-col gap-1.5"},eD=["for"],tD=["id","disabled","aria-invalid","aria-describedby"],nD=["id"],aD={class:"flex flex-col gap-1.5"},rD=["for"],lD=["id","disabled","aria-invalid","aria-describedby"],oD=["id"],sD={class:"flex gap-2.5"},iD=["disabled"],uD=["disabled"],cD=Z({__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=q(""),l=q(""),o=q({}),s=q(!1),i=Ta();function c(g){const y={};for(const[k,E]of Object.entries(g??{})){const D=(Array.isArray(E)?E:[E]).filter(A=>typeof A=="string"&&A!=="");D.length>0&&(y[k]=D)}return y}const d=_(()=>`${n.idPrefix}-caption-title`),f=_(()=>`${n.idPrefix}-caption-description`),p=_(()=>!!n.file&&(r.value!==n.file.title||l.value!==n.file.description));Ie(()=>n.open,g=>{g&&n.file&&(r.value=n.file.title??"",l.value=n.file.description??"",o.value={},s.value=!1)},{immediate:!0});async function v(g){if(g){a("update:open",!0);return}s.value||p.value&&!await i.ask({message:$("backend::lang.form.unsaved_confirm"),confirmLabel:$("backend::lang.form.discard"),danger:!0})||a("update:open",!1)}async function h(){if(!(s.value||!n.file||!n.routes)){s.value=!0;try{const g=await n.routes.update(n.file.id,{title:r.value,description:l.value});if(g.data){o.value={},a("saved",g.data),a("update:open",!1),Me($("backend::lang.fileupload.details_saved"));return}if(g.status===422){o.value=c(g.error?.details),Object.keys(o.value).length===0&&(o.value={title:[sd(g.error)||$("backend::lang.form.error_generic")]});return}Me(g.error?.message||$("backend::lang.form.error_generic"),"danger")}finally{s.value=!1}}}function b(g){g.preventDefault(),a("closed")}return(g,y)=>(m(),x(me,null,[N(u(Kr),{open:e.open,"onUpdate:open":v},{default:F(()=>[N(u(oo),null,{default:F(()=>[N(u(Gr),{"data-dialog-overlay":"",class:"fixed inset-0 z-40 bg-overlay"}),N(u(Wr),{"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:b},{default:F(()=>[S("div",W8,[S("div",G8,[N(u(Yr),{class:"text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[we(M(u($)("backend::lang.fileupload.attachment")),1)]),_:1}),N(u(Qa),{class:"text-muted"},{default:F(()=>[we(M(u($)("backend::lang.fileupload.help")),1)]),_:1})]),N(u(Lr),{"data-action":"close","aria-label":u($)("backend::lang.form.close"),disabled:s.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(()=>[N(u(Ht),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label","disabled"])]),e.file?(m(),x("div",Y8,[e.preview?(m(),x("img",{key:0,src:e.preview,alt:"",class:"size-16 shrink-0 rounded-inner object-cover"},null,8,J8)):(m(),x("span",Z8,[N(u(_r),{size:16,class:"text-muted"})])),S("span",{class:"min-w-0 truncate text-[13px] text-muted",title:e.file.file_name},M(e.file.file_name),9,Q8)])):ee("",!0),S("form",{class:"flex flex-col gap-4",novalidate:"",onSubmit:it(h,["prevent"])},[S("div",X8,[S("label",{for:d.value,class:"font-semibold"},M(u($)("backend::lang.fileupload.title_label")),9,eD),ha(S("input",{id:d.value,"onUpdate:modelValue":y[0]||(y[0]=k=>r.value=k),type:"text","data-caption-title":"",disabled:s.value,"aria-invalid":o.value.title?"true":void 0,"aria-describedby":o.value.title?`${d.value}-error`:void 0,class:ge([u(Tt)(!!o.value.title),"h-input"])},null,10,tD),[[Fl,r.value]]),o.value.title?(m(),x("p",{key:0,id:`${d.value}-error`,class:"flex items-center gap-1.5 text-[13px] text-danger"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(o.value.title.join(" ")),1)],8,nD)):ee("",!0)]),S("div",aD,[S("label",{for:f.value,class:"font-semibold"},M(u($)("backend::lang.fileupload.description_label")),9,rD),ha(S("textarea",{id:f.value,"onUpdate:modelValue":y[1]||(y[1]=k=>l.value=k),rows:"3","data-caption-description":"",disabled:s.value,"aria-invalid":o.value.description?"true":void 0,"aria-describedby":o.value.description?`${f.value}-error`:void 0,class:ge([u(Tt)(!!o.value.description),"min-h-input resize-y py-2.5"])},null,10,lD),[[Fl,l.value]]),o.value.description?(m(),x("p",{key:0,id:`${f.value}-error`,class:"flex items-center gap-1.5 text-[13px] text-danger"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(o.value.description.join(" ")),1)],8,oD)):ee("",!0)]),S("div",sD,[S("button",{type:"button","data-action":"cancel",disabled:s.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:y[2]||(y[2]=k=>v(!1))},M(u($)("backend::lang.form.cancel")),9,iD),S("button",{type:"submit","data-action":"save-caption",disabled:s.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"},M(s.value?u($)("backend::lang.form.saving"):u($)("backend::lang.fileupload.details_submit")),9,uD)])],32)]),_:1})]),_:1})]),_:1},8,["open"]),N(Pa,{open:u(i).request.value!==null,message:u(i).request.value?.message??"","confirm-label":u(i).request.value?.confirmLabel,danger:u(i).request.value?.danger,onConfirm:u(i).confirm,onCancel:u(i).cancel},null,8,["open","message","confirm-label","danger","onConfirm","onCancel"])],64))}}),dD=["id","data-field-name","aria-labelledby","aria-describedby","aria-busy"],fD={key:0,"data-fileupload-loading":"",class:"h-[112px] rounded-control bg-skel","aria-hidden":"true"},pD={key:1,role:"alert","data-fileupload-failed":"",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},vD={key:0,"data-fileupload-empty":"",class:"flex min-h-input items-center rounded-control border border-border bg-subtle px-3.5 text-muted"},mD={key:1,"data-fileupload-grid":"",class:"grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4"},hD=["data-file-item","data-state","onDragover","onDrop"],yD={class:"relative flex aspect-square items-center justify-center bg-subtle"},gD=["href","aria-label"],bD=["src","alt","onError"],_D=["aria-label","onClick"],xD=["src","alt"],kD={key:2,"data-preview-unavailable":"",class:"flex flex-col items-center gap-2 text-[13px] text-muted"},wD=["data-handle","aria-label","onKeydown","onDragstart"],$D={key:5,class:"absolute top-2 right-2 flex gap-1"},CD=["data-caption","aria-label","onClick"],SD=["aria-label","onClick"],ED=["aria-label","onClick"],AD={class:"flex flex-col gap-1 p-2"},DD=["title"],MD={class:"flex items-center gap-2 text-[13px] text-muted tabular-nums"},OD={key:0},PD={key:1},TD={key:2},qD={key:3,"data-unsaved-chip":"",class:"inline-flex h-6 items-center rounded-pill bg-sel px-2 text-[13px] font-semibold text-text"},RD={key:1,"data-file-error":"",class:"text-[13px] text-danger"},ID={class:"sr-only"},BD={key:2,"data-fileupload-single":"",class:"flex flex-col gap-2"},FD=["data-file-item","data-state"],ND=["src","alt","onError"],VD={key:3,"data-preview-unavailable":"",class:"flex flex-col items-center gap-2 text-[13px] text-muted"},LD={class:"flex min-w-0 flex-1 flex-col gap-1"},jD=["title"],zD={class:"flex items-center gap-2 text-[13px] text-muted tabular-nums"},UD={key:0},HD={key:1},KD={key:2},WD={key:3,"data-unsaved-chip":"",class:"inline-flex h-6 items-center rounded-pill bg-sel px-2 text-[13px] font-semibold text-text"},GD={key:1,"data-file-error":"",class:"text-[13px] text-danger"},YD={class:"sr-only"},JD={key:2,class:"mt-1 flex flex-wrap gap-2"},ZD={key:3,"data-fileupload-rows":"",class:"flex flex-col gap-2"},QD=["data-file-item","data-state","onDragover","onDrop"],XD={class:"flex items-center gap-3"},eM=["data-handle","aria-label","onKeydown","onDragstart"],tM={class:"flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-pager bg-subtle"},nM=["src","onError"],aM={class:"flex min-w-0 flex-1 flex-col leading-tight"},rM=["title"],lM=["title"],oM=["title"],sM={class:"flex shrink-0 items-center gap-2 text-[13px] text-muted tabular-nums"},iM={key:0},uM={key:1},cM={key:2},dM={key:3,"data-unsaved-chip":"",class:"inline-flex h-6 items-center rounded-pill bg-sel px-2 text-[13px] font-semibold text-text"},fM={class:"flex shrink-0 items-center gap-1"},pM=["href","aria-label"],vM=["aria-label","onClick"],mM=["data-caption","aria-label","onClick"],hM=["aria-label","onClick"],yM=["aria-label","onClick"],gM={key:1,"data-file-error":"",class:"text-[13px] text-danger"},bM={class:"sr-only"},_M=["aria-describedby"],xM={class:"flex size-10 items-center justify-center rounded-full bg-surface","aria-hidden":"true"},kM={class:"text-text"},wM={key:0,"data-fileupload-limits":"",class:"text-[13px] text-muted tabular-nums"},$M={key:5,"data-fileupload-limits":"",class:"text-[13px] text-muted tabular-nums"},CM={key:6,role:"alert","data-fileupload-too-many":"",class:"flex items-center gap-1.5 text-[13px] text-danger"},SM=["accept","multiple"],EM={class:"sr-only","aria-live":"polite","data-fileupload-live":""},AM=1<<20,DM=400,ru="inline-flex size-8 items-center justify-center rounded-pager border border-border bg-surface text-muted hover:text-text",MM="inline-flex size-8 items-center justify-center rounded-pager border border-border bg-surface text-muted hover:bg-danger-soft hover:text-danger",pr="inline-flex size-8 shrink-0 items-center justify-center rounded-pager text-muted hover:bg-hover hover:text-text",OM=Z({__name:"FileuploadField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},setup(e){const t=e,n=rt(el,null),a=["jpg","jpeg","png","gif","webp"],r=["image/jpeg","image/png","image/gif","image/webp"];let l=1;const o=q([]),s=q("loading"),i=q(!1),c=q(0),d=q(""),f=q(null),p=q(null),v=q(null),h=q(null),b=q(null),g=q(!1),y=q({}),k=q(new Set),E=new Set,D=[],A=n?n.routes(t.field.name):null;let B=null,V=null,U=!1,C=null,R=0,W=!1;const T=_(()=>{const z=t.field.attributes?.readonly;return!!t.field.readOnly||z!=null&&z!==!1}),L=_(()=>t.field.multiple===!0),Y=_(()=>t.field.mode==="image"),I=_(()=>L.value?t.field.maxFiles:1),le=_(()=>(n?.recordId??0)!==0),X=_(()=>o.value.filter(z=>z.state!=="failed")),de=_(()=>{if(L.value)return o.value;const z=X.value,Ce=z[z.length-1];return o.value.filter(H=>H.state==="failed"||H===Ce)}),xe=_(()=>de.value.filter(z=>z.state!=="failed").length),_e=_(()=>T.value||s.value!=="ready"?!1:L.value?I.value===void 0||I.value===null||X.value.lengthL.value&&!T.value&&typeof I.value=="number"&&X.value.length>=I.value),fe=_(()=>t.field.fileTypes?.length?t.field.fileTypes.map(z=>z.toLowerCase()):Y.value&&!t.field.mimeTypes?.length?a:null),Se=_(()=>(t.field.fileTypes?.length?t.field.fileTypes:t.field.mimeTypes??[]).join(", ")),pe=_(()=>{const z=[];for(const Ce of t.field.fileTypes??[])z.push(`.${Ce.toLowerCase()}`);for(const Ce of t.field.mimeTypes??[])z.push(Ce.includes("/")?Ce:`.${Ce.toLowerCase()}`);return z.length===0&&Y.value&&z.push(...r),z.length>0?z.join(","):void 0}),Ae=_(()=>t.field.prompt||$(L.value?"backend::lang.fileupload.default_prompt_many":"backend::lang.fileupload.default_prompt"));function J(z,Ce){return new Intl.NumberFormat(Br.value,{minimumFractionDigits:Ce,maximumFractionDigits:Ce}).format(z)}function K(z){const Ce=["B","kB","MB","GB"];let H=z,De=0;for(;H>=1e3&&De{const z=t.field.maxFilesize;return typeof z=="number"?`${new Intl.NumberFormat(Br.value).format(z)} MB`:""}),ie=_(()=>{const z=[];return Se.value!==""&&z.push($("backend::lang.fileupload.limits_types",{types:Se.value})),te.value!==""&&z.push($("backend::lang.fileupload.limits_size",{size:te.value})),L.value&&typeof I.value=="number"&&z.push($("backend::lang.fileupload.limits_count",{current:X.value.length,max:I.value})),z.join(" · ")});function ce(z){const Ce=z.lastIndexOf(".");return Ce<0?"":z.slice(Ce+1).toLowerCase()}function he(z){const Ce=t.field.mimeTypes??[];if(Ce.length===0||z.type==="")return!0;const H=z.type.toLowerCase(),De=ce(z.name);return Ce.some(ze=>{const Et=ze.toLowerCase();return Et.includes("/")?Et.endsWith("/*")?H.startsWith(Et.slice(0,-1)):H===Et:Et===De})}function w(z){const Ce=fe.value;if(Ce&&!Ce.includes(ce(z.name)))return $("backend::lang.fileupload.wrong_type",{name:z.name,types:Ce.join(", ")});if(!he(z))return $("backend::lang.fileupload.wrong_type",{name:z.name,types:Se.value});const H=t.field.maxFilesize;return typeof H=="number"&&z.size>Math.ceil(H*AM)?$("backend::lang.fileupload.too_large",{name:z.name,size:te.value}):""}function O(z){return nn({uid:l++,name:z.file_name,size:z.file_size,state:"done",progress:100,error:"",retryable:!1,file:z,source:null,handle:null,uploadId:""})}function P(){return globalThis.crypto?.randomUUID?.()??`u${Date.now().toString(36)}${Math.random().toString(36).slice(2,10)}`}function Q(z,Ce){return nn({uid:l++,name:z.name,size:z.size,state:Ce===""?"queued":"failed",progress:0,error:Ce,retryable:!1,file:null,source:Bo(z),handle:null,uploadId:P()})}function G(z){return o.value.find(Ce=>Ce.uid===z)}async function ne(z){if(!A){s.value="failed";return}z&&(s.value="loading");const Ce=await A.list();if(W)return;if(!Ce.data){z&&(s.value="failed");return}const H=o.value.filter(De=>De.state!=="done");for(const De of o.value)De.state==="done"&&oi(De.uid);o.value=[...Ce.data.map(O),...H],s.value="ready"}function $e(){T.value||f.value?.click()}function ae(z){if(z.length===0||T.value)return;if(c.value=0,!L.value)for(const ze of[...o.value])ze.state!=="failed"&&(ze.state!=="done"||ze.file?.pending)&&Le(ze);let Ce=L.value?typeof I.value=="number"?Math.max(I.value-X.value.length,0):Number.POSITIVE_INFINITY:1,H=0;const De=[];for(const ze of z.slice(0,L.value?z.length:1)){const Et=w(ze);if(Et===""&&Ce<=0){H++;continue}Et===""&&Ce--,De.push(Q(ze,Et))}o.value=[...o.value,...De],c.value=H,be()}function ue(z){const Ce=z.target;ae(Array.from(Ce.files??[])),Ce.value=""}function re(z){return v.value===null&&Array.from(z.dataTransfer?.types??[]).includes("Files")}function se(z){re(z)&&(z.preventDefault(),i.value=!0)}function oe(z){re(z)&&(z.preventDefault(),i.value=!1,ae(Array.from(z.dataTransfer?.files??[])))}function be(){if(!A||o.value.some(Ce=>Ce.state==="uploading"))return;const z=o.value.find(Ce=>Ce.state==="queued");z&&Ee(z)}async function Ee(z){if(!A||!z.source)return;z.state="uploading",z.progress=0,z.error="",z.retryable=!1;const Ce=new Set(o.value.filter(De=>De.file).map(De=>De.file.id)),H=n?.beginUpload();try{const De=A.upload(z.source,(ta,lr)=>{z.progress=lr>0?Math.min(100,Math.round(ta/lr*100)):0},z.uploadId||void 0);z.handle=Bo(De);const ze=await De.promise;z.handle=null;const Et=!!G(z.uid);if(ze.ok)!Et||W?A.remove(ze.item.id):(z.state="done",z.progress=100,z.file=ze.item,z.name=ze.item.file_name,z.size=ze.item.file_size,n?.markDirty());else if(ze.reason==="aborted"||ze.reason==="network"){const ta=await Fe(Ce);if(ze.reason==="aborted"){for(const lr of ta)A.remove(lr.id);o.value=o.value.filter(lr=>lr.uid!==z.uid),oi(z.uid)}else Et&&ta[0]&&ta.length===1?(z.state="done",z.progress=100,z.file=ta[0],z.name=ta[0].file_name,z.size=ta[0].file_size,n?.markDirty()):(z.state="failed",z.error=$("backend::lang.fileupload.upload_failed"),z.retryable=!0)}else if(Et)switch(z.state="failed",ze.reason){case"too_large":z.error=te.value?$("backend::lang.fileupload.too_large",{name:z.name,size:te.value}):ze.message||$("backend::lang.fileupload.upload_failed");break;case"invalid":z.error=ze.message||$("backend::lang.fileupload.upload_failed");break;default:z.error=ze.message||$("backend::lang.fileupload.upload_failed"),z.retryable=ze.status>=500}}finally{H?.(),W||be()}}async function Fe(z){if(!A)return[];const Ce=await A.list();return Ce.data?Ce.data.filter(H=>H.pending&&!z.has(H.id)):[]}function He(z){z.state!=="failed"||!z.source||(z.state="queued",z.error="",z.retryable=!1,be())}async function Le(z){const Ce=o.value.findIndex(De=>De.uid===z.uid);if(Ce<0)return;switch(o.value=o.value.filter(De=>De.uid!==z.uid),oi(z.uid),z.state){case"uploading":z.handle?.abort(),n?.markDirty(),be();return;case"queued":case"failed":return}if(!A||!z.file)return;n?.markDirty();const H=await A.remove(z.file.id);if(!H.data&&!W){const De=[...o.value];De.splice(Math.min(Ce,De.length),0,z),o.value=De,Me(H.error?.message||$("backend::lang.form.error_generic"),"danger")}}function ot(){return o.value.map(z=>z.uid)}function ut(z){const Ce=new Map(o.value.map(ze=>[ze.uid,ze])),H=z.map(ze=>Ce.get(ze)).filter(ze=>!!ze),De=o.value.filter(ze=>!z.includes(ze.uid));o.value=[...H,...De]}function Ct(){B!==null&&clearTimeout(B),B=setTimeout(()=>{B=null,cn()},DM)}function Rt(){return o.value.filter(z=>z.state==="done"&&z.file).map(z=>z.file.id)}async function cn(){if(!A)return;const z=Rt();if(U){C=z;return}const Ce=V;V=null;const H=++R;U=!0;try{const De=await A.reorder(z);if(C)return;!De.data&&!W&&H===R&&(Ce&&ut(Ce),Me($("backend::lang.fileupload.reorder_failed"),"danger"))}finally{U=!1,C&&(C=null,cn())}}function qe(z,Ce){const H=o.value.findIndex(Et=>Et.uid===z);if(H<0||Ce<0||Ce>=o.value.length||Ce===H)return!1;V===null&&(V=ot());const De=[...o.value],[ze]=De.splice(H,1);return De.splice(Ce,0,ze),o.value=De,d.value=$("backend::lang.fileupload.moved",{name:ze.name,position:Ce+1,total:De.length}),Ct(),!0}async function Te(z,Ce){const H=o.value.findIndex(ze=>ze.uid===Ce.uid);let De;switch(z.key){case"ArrowUp":case"ArrowLeft":De=H-1;break;case"ArrowDown":case"ArrowRight":De=H+1;break;default:return}z.preventDefault(),qe(Ce.uid,De)&&(await Ue(),p.value?.querySelector(`[data-handle="${Ce.uid}"]`)?.focus())}function Ne(z,Ce){v.value=Ce.uid,z.dataTransfer&&(z.dataTransfer.effectAllowed="move",z.dataTransfer.setData("text/plain",Ce.name))}function St(z,Ce){v.value!==null&&(z.preventDefault(),h.value=Ce.uid)}function tl(z,Ce){v.value!==null&&(z.preventDefault(),qe(v.value,o.value.findIndex(H=>H.uid===Ce.uid)),li())}function li(){v.value=null,h.value=null}function md(z){const Ce=z.file?.content_type??z.source?.type??"";return r.includes(Ce.toLowerCase())}function Mn(z){return!z.file||!md(z)||k.value.has(z.uid)?null:t.field.protected?y.value[z.uid]??null:z.file.thumb_url||z.file.url||null}function hd(){return typeof URL.revokeObjectURL=="function"}function oi(z){const Ce=y.value[z];if(Ce!==void 0){hd()&&URL.revokeObjectURL(Ce);const H={...y.value};delete H[z],y.value=H}E.delete(z)}async function vg(z){if(!A||!z.file||E.has(z.uid)||typeof URL.createObjectURL!="function")return;E.add(z.uid);const Ce=await A.thumb(z.file.id);if(!(W||!G(z.uid)||!E.has(z.uid))){if(!Ce){k.value=new Set([...k.value,z.uid]);return}y.value={...y.value,[z.uid]:URL.createObjectURL(Ce)}}}Ie(()=>o.value.map(z=>`${z.uid}:${z.state}`).join(","),()=>{if(t.field.protected)for(const z of o.value)z.state==="done"&&md(z)&&vg(z)});function si(z){k.value=new Set([...k.value,z.uid])}async function yd(z,Ce){if(!A||!z.file||typeof URL.createObjectURL!="function")return;const H=await A.download(z.file.id);if(!H){Me($("backend::lang.form.error_generic"),"danger");return}const De=URL.createObjectURL(H);D.push(De);const ze=document.createElement("a");ze.href=De,ze.rel="noopener",Ce?ze.download=z.file.file_name:ze.target="_blank",ze.click()}function qa(z){return t.field.useCaption&&z.file?.title?z.file.title:z.name}function ii(z){return le.value&&!!z.file?.pending}const uo=_(()=>b.value===null?void 0:G(b.value));function ui(z){b.value=z.uid,g.value=!0}function mg(z){const Ce=uo.value;Ce&&(Ce.file=z)}function hg(){const z=b.value;b.value=null,z!==null&&p.value?.querySelector(`[data-caption="${z}"]`)?.focus()}const ci=_(()=>{const z=t.field.thumbOptions?.mode;return z==="fit"||z==="auto"?"object-contain":"object-cover"});return ft(()=>{ne(!0)}),n&&Ie(n.revision,()=>{ne(!1)}),xt(()=>{W=!0,B!==null&&(clearTimeout(B),B=null);for(const z of o.value)z.handle?.abort();if(hd()){for(const z of Object.values(y.value))URL.revokeObjectURL(z);for(const z of D)URL.revokeObjectURL(z)}}),(z,Ce)=>(m(),x("div",{id:e.controlId,ref_key:"root",ref:p,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":s.value==="loading"?"true":void 0,class:"flex min-w-0 flex-col gap-4"},[s.value==="loading"?(m(),x("span",fD)):s.value==="failed"?(m(),x("p",pD,M(u($)("backend::lang.fileupload.load_failed")),1)):(m(),x(me,{key:2},[T.value&&de.value.length===0?(m(),x("p",vD,M(u($)("backend::lang.fileupload.empty")),1)):Y.value&&L.value&&de.value.length>0?(m(),x("ul",mD,[(m(!0),x(me,null,Oe(de.value,H=>(m(),x("li",{key:H.uid,"data-file-item":H.uid,"data-state":H.state,class:ge([[H.state==="failed"?"border-danger":"border-border",v.value===H.uid?"opacity-50":"",h.value===H.uid&&v.value!==H.uid?"border-2 border-dashed border-primary bg-sel":""],"relative overflow-hidden rounded-inner border bg-surface"]),onDragover:De=>St(De,H),onDrop:De=>tl(De,H)},[S("div",yD,[H.state==="uploading"?(m(),j(u(Cl),{key:0,size:20,class:"animate-spin text-muted","aria-hidden":"true"})):H.state==="failed"?(m(),j(u(ct),{key:1,size:16,class:"text-danger","aria-hidden":"true"})):H.state==="done"?(m(),x(me,{key:2},[Mn(H)&&!e.field.protected&&H.file?.url?(m(),x("a",{key:0,href:H.file.url,target:"_blank",rel:"noopener",class:"block size-full","aria-label":u($)("backend::lang.fileupload.open_preview",{name:H.name})},[S("img",{src:Mn(H)??void 0,alt:qa(H),class:ge([ci.value,"size-full"]),onError:De=>si(H)},null,42,bD)],8,gD)):Mn(H)?(m(),x("button",{key:1,type:"button",class:"block size-full","aria-label":u($)("backend::lang.fileupload.open_preview",{name:H.name}),onClick:De=>yd(H,!1)},[S("img",{src:Mn(H)??void 0,alt:qa(H),class:ge([ci.value,"size-full"])},null,10,xD)],8,_D)):k.value.has(H.uid)?(m(),x("span",kD,[N(u(qf),{size:20,"aria-hidden":"true"}),we(" "+M(u($)("backend::lang.fileupload.preview_unavailable")),1)])):(m(),j(u(_r),{key:3,size:20,class:"text-muted","aria-hidden":"true"}))],64)):(m(),j(u(_r),{key:3,size:20,class:"text-muted","aria-hidden":"true"})),!T.value&&H.state==="done"?(m(),x("button",{key:4,type:"button",draggable:"true","data-handle":H.uid,"aria-label":u($)("backend::lang.fileupload.move",{name:H.name}),class:ge([ru,"absolute top-2 left-2 cursor-grab"]),onKeydown:De=>Te(De,H),onDragstart:De=>Ne(De,H),onDragend:li},[N(u(Tf),{size:16,"aria-hidden":"true"})],40,wD)):ee("",!0),T.value?ee("",!0):(m(),x("div",$D,[e.field.useCaption&&H.state==="done"?(m(),x("button",{key:0,type:"button","data-caption":H.uid,"aria-label":u($)("backend::lang.fileupload.edit_details",{name:H.name}),class:ge(ru),onClick:De=>ui(H)},[N(u(Sl),{size:16,"aria-hidden":"true"})],8,CD)):ee("",!0),H.state==="failed"&&H.retryable?(m(),x("button",{key:1,type:"button","data-action":"retry","aria-label":u($)("backend::lang.fileupload.retry"),class:ge(ru),onClick:De=>He(H)},[N(u(Si),{size:16,"aria-hidden":"true"})],8,SD)):ee("",!0),S("button",{type:"button","data-action":"remove-file","aria-label":H.state==="uploading"||H.state==="queued"?u($)("backend::lang.fileupload.cancel_upload",{name:H.name}):u($)("backend::lang.form.remove_item",{name:H.name}),class:ge(MM),onClick:De=>Le(H)},[N(u(Ht),{size:16,"aria-hidden":"true"})],8,ED)]))]),S("div",AD,[S("span",{class:"truncate text-[13px]",title:qa(H)},M(qa(H)),9,DD),S("span",MD,[H.state==="queued"?(m(),x("span",OD,M(u($)("backend::lang.fileupload.queued")),1)):H.state==="uploading"?(m(),x("span",PD,M(u($)("backend::lang.fileupload.uploading",{percent:H.progress})),1)):(m(),x("span",TD,M(K(H.size)),1)),ii(H)?(m(),x("span",qD,M(u($)("backend::lang.fileupload.unsaved")),1)):ee("",!0)]),H.state==="uploading"?(m(),j(u(Ji),{key:0,"model-value":H.progress,max:100,"aria-label":u($)("backend::lang.fileupload.uploading",{percent:H.progress}),class:"h-1 w-full overflow-hidden rounded-pill bg-subtle"},{default:F(()=>[N(u(Zi),{class:"h-full bg-primary",style:jn({width:`${H.progress}%`})},null,8,["style"])]),_:2},1032,["model-value","aria-label"])):ee("",!0),H.state==="failed"?(m(),x("p",RD,[S("span",ID,M(u($)("backend::lang.fileupload.upload_error"))+": ",1),we(M(H.error),1)])):ee("",!0)])],42,hD))),128))])):Y.value&&!L.value&&de.value.length>0?(m(),x("div",BD,[(m(!0),x(me,null,Oe(de.value,H=>(m(),x("div",{key:H.uid,"data-file-item":H.uid,"data-state":H.state,class:"flex items-start gap-4"},[S("div",{class:ge([H.state==="failed"?"border-danger":"border-border","flex size-40 shrink-0 items-center justify-center overflow-hidden rounded-inner border bg-subtle"])},[H.state==="uploading"?(m(),j(u(Cl),{key:0,size:20,class:"animate-spin text-muted","aria-hidden":"true"})):H.state==="failed"?(m(),j(u(ct),{key:1,size:16,class:"text-danger","aria-hidden":"true"})):Mn(H)?(m(),x("img",{key:2,src:Mn(H)??void 0,alt:qa(H),class:ge([ci.value,"size-full"]),onError:De=>si(H)},null,42,ND)):k.value.has(H.uid)?(m(),x("span",VD,[N(u(qf),{size:20,"aria-hidden":"true"}),we(" "+M(u($)("backend::lang.fileupload.preview_unavailable")),1)])):(m(),j(u(_r),{key:4,size:20,class:"text-muted","aria-hidden":"true"}))],2),S("div",LD,[S("span",{class:"truncate font-semibold",title:qa(H)},M(qa(H)),9,jD),S("span",zD,[H.state==="queued"?(m(),x("span",UD,M(u($)("backend::lang.fileupload.queued")),1)):H.state==="uploading"?(m(),x("span",HD,M(u($)("backend::lang.fileupload.uploading",{percent:H.progress})),1)):(m(),x("span",KD,M(K(H.size)),1)),ii(H)?(m(),x("span",WD,M(u($)("backend::lang.fileupload.unsaved")),1)):ee("",!0)]),H.state==="uploading"?(m(),j(u(Ji),{key:0,"model-value":H.progress,max:100,"aria-label":u($)("backend::lang.fileupload.uploading",{percent:H.progress}),class:"h-1 w-full overflow-hidden rounded-pill bg-subtle"},{default:F(()=>[N(u(Zi),{class:"h-full bg-primary",style:jn({width:`${H.progress}%`})},null,8,["style"])]),_:2},1032,["model-value","aria-label"])):ee("",!0),H.state==="failed"?(m(),x("p",GD,[S("span",YD,M(u($)("backend::lang.fileupload.upload_error"))+": ",1),we(M(H.error),1)])):ee("",!0),T.value?ee("",!0):(m(),x("div",JD,[H.state!=="failed"?(m(),j(Ke,{key:0,size:"sm",variant:"outline","data-action":"replace-file",icon:u(Po),onClick:$e},{default:F(()=>[we(M(u($)("backend::lang.fileupload.replace_file")),1)]),_:1},8,["icon"])):ee("",!0),H.state==="failed"&&H.retryable?(m(),j(Ke,{key:1,size:"sm",variant:"outline","data-action":"retry",icon:u(Si),onClick:De=>He(H)},{default:F(()=>[we(M(u($)("backend::lang.fileupload.retry")),1)]),_:1},8,["icon","onClick"])):ee("",!0),e.field.useCaption&&H.state==="done"?(m(),j(Ke,{key:2,size:"sm",variant:"outline","data-caption":H.uid,icon:u(Sl),onClick:De=>ui(H)},{default:F(()=>[we(M(u($)("backend::lang.fileupload.details_submit")),1)]),_:1},8,["data-caption","icon","onClick"])):ee("",!0),N(Ke,{size:"sm",variant:"danger","data-action":"remove-file",icon:u(Ht),onClick:De=>Le(H)},{default:F(()=>[we(M(u($)("backend::lang.fileupload.remove_file")),1)]),_:1},8,["icon","onClick"])]))])],8,FD))),128))])):de.value.length>0?(m(),x("ul",ZD,[(m(!0),x(me,null,Oe(de.value,H=>(m(),x("li",{key:H.uid,"data-file-item":H.uid,"data-state":H.state,class:ge([[H.state==="failed"?"border-danger":"border-border",v.value===H.uid?"opacity-50":"",h.value===H.uid&&v.value!==H.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:De=>St(De,H),onDrop:De=>tl(De,H)},[S("div",XD,[L.value&&!T.value&&H.state==="done"?(m(),x("button",{key:0,type:"button",draggable:"true","data-handle":H.uid,"aria-label":u($)("backend::lang.fileupload.move",{name:H.name}),class:ge([pr,"cursor-grab"]),onKeydown:De=>Te(De,H),onDragstart:De=>Ne(De,H),onDragend:li},[N(u(Tf),{size:16,"aria-hidden":"true"})],40,eM)):ee("",!0),S("span",tM,[H.state==="uploading"?(m(),j(u(Cl),{key:0,size:16,class:"animate-spin text-muted","aria-hidden":"true"})):H.state==="failed"?(m(),j(u(ct),{key:1,size:16,class:"text-danger","aria-hidden":"true"})):Mn(H)?(m(),x("img",{key:2,src:Mn(H)??void 0,alt:"",class:"size-8 object-cover",onError:De=>si(H)},null,40,nM)):(m(),j(u(_r),{key:3,size:16,class:"text-muted","aria-hidden":"true"}))]),S("span",aM,[e.field.useCaption&&H.file?.title?(m(),x(me,{key:0},[S("span",{class:"truncate font-semibold",title:H.file.title},M(H.file.title),9,rM),S("span",{class:"truncate text-[13px] text-muted",title:H.name},M(H.name),9,lM)],64)):(m(),x("span",{key:1,class:"truncate",title:H.name},M(H.name),9,oM))]),S("span",sM,[H.state==="queued"?(m(),x("span",iM,M(u($)("backend::lang.fileupload.queued")),1)):H.state==="uploading"?(m(),x("span",uM,M(u($)("backend::lang.fileupload.uploading",{percent:H.progress})),1)):(m(),x("span",cM,M(K(H.size)),1)),ii(H)?(m(),x("span",dM,M(u($)("backend::lang.fileupload.unsaved")),1)):ee("",!0)]),!L.value&&!T.value&&H.state!=="failed"?(m(),j(Ke,{key:1,size:"sm",variant:"outline","data-action":"replace-file",icon:u(Po),onClick:$e},{default:F(()=>[we(M(u($)("backend::lang.fileupload.replace_file")),1)]),_:1},8,["icon"])):ee("",!0),S("span",fM,[H.state==="done"&&H.file?(m(),x(me,{key:0},[!e.field.protected&&H.file.url?(m(),x("a",{key:0,href:H.file.url,download:"",target:"_blank",rel:"noopener","aria-label":u($)("backend::lang.fileupload.download",{name:H.name}),class:ge(pr)},[N(u(Au),{size:16,"aria-hidden":"true"})],8,pM)):e.field.protected?(m(),x("button",{key:1,type:"button","data-action":"download","aria-label":u($)("backend::lang.fileupload.download",{name:H.name}),class:ge(pr),onClick:De=>yd(H,!0)},[N(u(Au),{size:16,"aria-hidden":"true"})],8,vM)):ee("",!0),e.field.useCaption&&!T.value?(m(),x("button",{key:2,type:"button","data-caption":H.uid,"aria-label":u($)("backend::lang.fileupload.edit_details",{name:H.name}),class:ge(pr),onClick:De=>ui(H)},[N(u(Sl),{size:16,"aria-hidden":"true"})],8,mM)):ee("",!0)],64)):ee("",!0),H.state==="failed"&&H.retryable?(m(),x("button",{key:1,type:"button","data-action":"retry","aria-label":u($)("backend::lang.fileupload.retry"),class:ge(pr),onClick:De=>He(H)},[N(u(Si),{size:16,"aria-hidden":"true"})],8,hM)):ee("",!0),T.value?ee("",!0):(m(),x("button",{key:2,type:"button","data-action":"remove-file","aria-label":H.state==="uploading"||H.state==="queued"?u($)("backend::lang.fileupload.cancel_upload",{name:H.name}):u($)("backend::lang.form.remove_item",{name:H.name}),class:ge([pr,"hover:bg-danger-soft hover:text-danger"]),onClick:De=>Le(H)},[N(u(Ht),{size:16,"aria-hidden":"true"})],8,yM))])]),H.state==="uploading"?(m(),j(u(Ji),{key:0,"model-value":H.progress,max:100,"aria-label":u($)("backend::lang.fileupload.uploading",{percent:H.progress}),class:"h-1 w-full overflow-hidden rounded-pill bg-subtle"},{default:F(()=>[N(u(Zi),{class:"h-full bg-primary",style:jn({width:`${H.progress}%`})},null,8,["style"])]),_:2},1032,["model-value","aria-label"])):ee("",!0),H.state==="failed"?(m(),x("p",gM,[S("span",bM,M(u($)("backend::lang.fileupload.upload_error"))+": ",1),we(M(H.error),1)])):ee("",!0)],42,QD))),128))])):ee("",!0),_e.value?(m(),x("button",{key:4,type:"button","data-fileupload-dropzone":"","aria-describedby":e.describedBy||void 0,class:ge([[i.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:$e,onDragover:se,onDragleave:Ce[0]||(Ce[0]=H=>i.value=!1),onDrop:oe},[S("span",xM,[N(u(Po),{size:20,class:"text-muted"})]),S("span",kM,M(Ae.value),1),ie.value!==""?(m(),x("span",wM,M(ie.value),1)):ee("",!0)],42,_M)):ke.value&&ie.value!==""?(m(),x("p",$M,M(ie.value),1)):ee("",!0),c.value>0?(m(),x("p",CM,[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(u(Fr)("backend::lang.fileupload.too_many",c.value,{max:I.value??0})),1)])):ee("",!0)],64)),S("input",{ref_key:"input",ref:f,type:"file",hidden:"",tabindex:"-1","data-fileupload-input":"",accept:pe.value,multiple:L.value||void 0,onChange:ue},null,40,SM),S("p",EM,M(d.value),1),e.field.useCaption?(m(),j(cD,{key:3,open:g.value,"onUpdate:open":Ce[1]||(Ce[1]=H=>g.value=H),file:uo.value?.file??null,routes:u(A),preview:uo.value?Mn(uo.value):null,"id-prefix":e.controlId,onSaved:mg,onClosed:hg},null,8,["open","file","routes","preview","id-prefix"])):ee("",!0)],8,dD))}}),PM=["id","name","value","required","aria-required","aria-invalid","aria-describedby"],TM=Z({__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=_(()=>n.modelValue===null||n.modelValue===void 0?"":String(n.modelValue)),l=_(()=>Xr(n.field));function o(s){const i=s.target.value.trim();if(i===""){a("update:modelValue",null);return}const c=Number(i);a("update:modelValue",Number.isFinite(c)?c:null)}return(s,i)=>(m(),x("input",Re({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:[u(Tt)(e.invalid),"h-input tabular-nums"],onInput:o}),null,16,PM))}}),qM=["id","aria-labelledby","aria-describedby"],RM=Z({__name:"PartialField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},setup(e){const t=e;return(n,a)=>(m(),x("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?(m(),j(od,{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"])):(m(),j(ei,{key:1,"data-partial-failed":"",text:u($)("backend::lang.extension.partial_failed")},null,8,["text"]))],8,qM))}}),IM={class:"relative"},BM=["id","name","type","value","required","aria-required","aria-invalid","aria-describedby"],FM=["aria-pressed","aria-label"],NM=Z({__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=q(!1),l=_(()=>typeof n.modelValue=="string"?n.modelValue:""),o=_(()=>Xr(n.field)),s=rt(el,null);return s&&Ie(s.revision,()=>{r.value=!1}),(i,c)=>(m(),x("div",IM,[S("input",Re({id:e.controlId,autocomplete:"new-password",spellcheck:"false"},o.value,{name:e.field.name,type:r.value?"text":"password",value:l.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:[u(Tt)(e.invalid),"h-input pr-12"],onInput:c[0]||(c[0]=d=>a("update:modelValue",d.target.value))}),null,16,BM),S("button",{type:"button","data-password-toggle":"","aria-pressed":r.value?"true":"false","aria-label":u($)(r.value?"backend::lang.form.hide_password":"backend::lang.form.show_password"),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",onClick:c[1]||(c[1]=d=>r.value=!r.value)},[(m(),j(Vt(r.value?u(qx):u(Ix)),{size:16,"aria-hidden":"true"}))],8,FM)]))}}),VM=new Set(["mltext","mltextarea","mlmarkdown"]);function LM(e){return e!==void 0&&VM.has(e)}function Ca(e){return e?LM(e.type)||!!e.element&&e.translatable===!0:!1}const Gl="summer:ml-locale";function jM(e){typeof window>"u"||e===""||window.dispatchEvent(new CustomEvent(Gl,{detail:e}))}function xn(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 zM=["aria-labelledby","data-ml-field"],UM={class:"flex flex-wrap items-center gap-2"},HM=["value","aria-label"],KM=["value"],ti=Z({__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=_(()=>xn(n.modelValue)),l=rt(is,null),o=_(()=>{const y=l?.value;return y&&y.length>0?[...y]:[]}),s=q(o.value[0]??"en"),i=_(()=>`${n.controlId}-label`),c=_(()=>`${n.controlId}-editor`),d=_(()=>r.value[s.value]??""),f=_(()=>({...n.field,type:n.innerType})),p=_(()=>n.contentLocale?{contentLocale:s.value}:{});function v(y){y&&(s.value=y)}function h(y){const k=y.target.value;v(k),jM(k)}function b(y){a("update:modelValue",{...r.value,[s.value]:y})}function g(y){const k=y.detail;typeof k=="string"&&k!==""&&v(k)}return ft(()=>{window.addEventListener(Gl,g)}),Aa(()=>{window.removeEventListener(Gl,g)}),(y,k)=>(m(),x("div",{class:"flex flex-col gap-1.5",role:"group","aria-labelledby":i.value,"data-ml-field":e.mlType},[S("div",UM,[S("select",{"data-ml-locale":"",class:"rounded-control border border-border-strong bg-surface px-2 py-1 text-[13px]",value:s.value,"aria-label":`Locale for ${e.field.label||e.field.name}`,onChange:h},[(m(!0),x(me,null,Oe(o.value,E=>(m(),x("option",{key:E,value:E},M(E),9,KM))),128))],40,HM)]),(m(),j(Vt(e.inner),Re({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},p.value,{"onUpdate:modelValue":b}),null,16,["field","model-value","control-id","invalid","described-by","source","record-id"]))],8,zM))}}),WM=["id","aria-labelledby","aria-describedby","aria-busy"],GM={key:0,"data-plugin-field-skeleton":"",class:"h-[42px] w-full rounded-control bg-skel","aria-hidden":"true"},ag=Z({__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=rt(dd,null),l=q("loading"),o=q(null);let s=null,i=!1;const c=_(()=>r?.value||Br.value),d=_(()=>JSON.stringify(n.field.typeOptions??{})),f=_(()=>n.field.readOnly===!0);function p(A,B){if(Object.is(A,B))return!0;if(A===null||B===null||typeof A!="object"||typeof B!="object")return!1;try{return JSON.stringify(A)===JSON.stringify(B)}catch{return!1}}function v(A,B){p(A.value,B)||(A.value=B)}function h(A,B,V){V?A.setAttribute(B,""):A.removeAttribute(B)}function b(A){A.setAttribute("field-name",n.field.name),A.setAttribute("record-id",n.recordId==null?"":String(n.recordId)),A.setAttribute("locale",n.contentLocale??""),A.setAttribute("ui-locale",c.value),A.setAttribute("options",d.value),h(A,"disabled",f.value),h(A,"invalid",n.invalid===!0)}function g(A){let B;return{promise:new Promise((U,C)=>{B=setTimeout(()=>C(new Error("field type element was not defined in time")),A)}),cancel:()=>clearTimeout(B)}}async function y(A){const B=await e5(A);if(customElements.get(A))return;if(B.length>0)throw new Error(`plugin script failed: ${B.join(", ")}`);const V=g(ng);try{await Promise.race([customElements.whenDefined(A),V.promise])}finally{V.cancel()}}async function k(A){const B=s,V=A.detail;if(!B||V===null||typeof V!="object")return;const{id:U,file:C}=V,R=Y=>{!i&&s===B&&B.dispatchEvent(new CustomEvent(K8,{detail:{id:U,...Y}}))},W=()=>$("backend::lang.fileupload.upload_failed"),T=n.source;if(!(C instanceof Blob)||!T){R({error:W()});return}const L=C instanceof File&&C.name!==""?C.name:"upload";try{const Y=await Pe.POST("/{vendor}/{plugin}/{controller}/{id}/fields/{field}/upload",{params:{path:{...T,id:n.recordId??0,field:n.field.name}},body:{file:""},bodySerializer:()=>{const le=new FormData;return le.append("file",C,L),le}});if(Y.data){R({url:Y.data.data.url});return}const I=Y.response.status===422?sd(Y.error?.error):"";R({error:I||W()})}catch{R({error:W()})}}function E(A){k(A)}function D(A){const B=A.detail;B!==null&&typeof B=="object"&&Object.hasOwn(B,"value")&&a("update:modelValue",B.value)}return ft(async()=>{const A=n.field.element??"";try{if(A==="")throw new Error("plugin field without an element");if(await y(A),i||!o.value)return;const B=document.createElement(A);b(B),v(B,n.modelValue),B.addEventListener(Fp,D),B.addEventListener(Np,E),o.value.append(B),s=B,l.value="ready"}catch{i||(l.value="failed")}}),Ie(()=>[n.recordId,n.invalid,n.contentLocale,f.value,c.value,d.value],()=>{s&&b(s)}),Ie(()=>n.modelValue,A=>{s&&v(s,A)},{deep:!0}),xt(()=>{i=!0,s?.removeEventListener(Fp,D),s?.removeEventListener(Np,E),s=null}),(A,B)=>l.value==="failed"?(m(),j(ei,{key:0,id:e.controlId,"data-plugin-field-failed":"","aria-describedby":e.describedBy||void 0,text:u($)("backend::lang.extension.widget_failed")},null,8,["id","aria-describedby","text"])):(m(),x("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"?(m(),x("span",GM)):ee("",!0),S("div",{ref_key:"mountPoint",ref:o,class:"contents"},null,512)],8,WM))}}),YM=Z({__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)=>(m(),j(ti,Re(n,{inner:ag,"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"]))}}),JM=["id"],ZM=["id","aria-labelledby","aria-label","aria-describedby","data-mode"],QM=["aria-labelledby"],XM=["id"],eO={class:"min-w-0 [overflow-wrap:anywhere]"},tO={key:0,class:"shrink-0 text-[12px] font-semibold text-muted","aria-hidden":"true"},nO=["data-permission","data-locked"],aO={class:"flex min-w-0 flex-col"},rO=["id"],lO=["id"],oO=Z({__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=_(()=>n.field.permissionOptions??[]),l=_(()=>n.field.mode==="radio"),o=_(()=>!!n.field.readOnly||!!Xr(n.field).readonly),s=_(()=>eg(n.field,n.modelValue)),i=_(()=>{const g=[],y=[];for(const k of r.value){if(!k.tab){y.push(k);continue}let E=g.find(D=>D.label===k.tab);E||(E={key:`tab:${k.tab}`,label:k.tab,options:[]},g.push(E)),E.options.push(k)}return y.length>0&&g.push({key:"other",label:$("backend::lang.permissioneditor.other"),options:y}),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=_(()=>`${n.controlId}-label`);function f(g,y){return`${n.controlId}-${g}-${y}`}function p(g){return o.value||!!g.locked}function v(g){return!!g.locked&&!o.value}function h(g){return s.value[g.code]??0}function b(g,y){if(p(g))return;const k={...s.value};y===1||l.value&&y===-1?k[g.code]=y:delete k[g.code],a("update:modelValue",k)}return(g,y)=>r.value.length===0?(m(),x("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"},M(u($)("backend::lang.permissioneditor.empty")),9,JM)):(m(),x("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:ge([e.invalid?"border-danger":"border-border","overflow-hidden rounded-inner border"]),"data-permission-editor":"","data-mode":l.value?"radio":"checkbox"},[(m(!0),x(me,null,Oe(i.value,(k,E)=>(m(),x("div",{key:k.key,role:"group","aria-labelledby":`${e.controlId}-section-${E}`,"data-permission-section":""},[S("h3",{id:`${e.controlId}-section-${E}`,class:ge([E>0?"border-t border-border":"","flex h-row-head items-center justify-between gap-4 bg-subtle px-4 font-semibold"])},[S("span",eO,M(k.label),1),l.value?ee("",!0):(m(),x("span",tO,M(u($)("backend::lang.permissioneditor.allow")),1))],10,XM),(m(!0),x(me,null,Oe(k.options,(D,A)=>(m(),x("div",{key:D.code,"data-permission":D.code,"data-locked":v(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",aO,[(m(),j(Vt(l.value?"span":"label"),{id:`${f(E,A)}-label`,for:l.value?void 0:f(E,A),class:"[overflow-wrap:anywhere]"},{default:F(()=>[we(M(D.label||D.code)+" ",1),v(D)?(m(),j(u(za),{key:0,size:14,class:"ml-1 inline-block align-[-2px] text-muted","aria-hidden":"true"})):ee("",!0)]),_:2},1032,["id","for"])),v(D)?(m(),x("p",{key:0,id:`${f(E,A)}-note`,class:"text-[13px] text-muted [overflow-wrap:anywhere]","data-permission-locked":""},M(u($)("backend::lang.permissioneditor.locked")),9,rO)):D.comment?(m(),x("p",{key:1,id:`${f(E,A)}-note`,class:"text-[13px] text-muted [overflow-wrap:anywhere]"},M(D.comment),9,lO)):ee("",!0)]),l.value?(m(),j(u($y),{key:0,orientation:"horizontal","model-value":String(h(D)),disabled:p(D),"aria-disabled":p(D)?"true":void 0,"aria-labelledby":`${f(E,A)}-label`,"aria-describedby":v(D)||D.comment?`${f(E,A)}-note`:void 0,class:"inline-flex shrink-0 gap-1 rounded-inner border border-border bg-subtle p-1","onUpdate:modelValue":B=>b(D,Number(B))},{default:F(()=>[(m(),x(me,null,Oe(c,B=>N(u(Cy),{key:B.value,value:B.value,"data-segment":B.value,class:ge([B.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(()=>[we(M(u($)(B.label)),1)]),_:2},1032,["value","data-segment","class"])),64))]),_:1},8,["model-value","disabled","aria-disabled","aria-labelledby","aria-describedby","onUpdate:modelValue"])):(m(),j(u(y4),{key:1,id:f(E,A),"model-value":h(D)===1,disabled:p(D),"aria-disabled":p(D)?"true":void 0,"aria-labelledby":`${f(E,A)}-label`,"aria-describedby":v(D)||D.comment?`${f(E,A)}-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":B=>b(D,B===!0?1:0)},{default:F(()=>[N(u(b4),null,{default:F(()=>[N(u(ba),{size:14,"aria-hidden":"true"})]),_:1})]),_:1},8,["id","model-value","disabled","aria-disabled","aria-labelledby","aria-describedby","onUpdate:modelValue"]))],8,nO))),128))],8,QM))),128))],10,ZM))}}),Ot="default";function kn(e){return e.tab?`tab:${e.tab}`:Ot}function Yl(e,t){return`${e}-tab-${t}`}function ni(e,t){return`${e}-panel-${t}`}function ai(e,t){const n=e.context;if(n==null)return!0;const a=Array.isArray(n)?n:[n];return a.length===0||a.includes(t)}function Jt(e,t,n="create"){const a={};for(const r of e){if(r.readOnly||!xT(r))continue;const l=t[r.name];if(!(r.type==="password"&&n==="update"&&(l===""||l===null))){if(r.type==="permissioneditor"){a[r.name]=eg(r,l);continue}if(Ca(r)){a[r.name]=xn(l);continue}l!==void 0&&(a[r.name]=l)}}return a}function lu(e,t){const n=typeof t=="string"||typeof t=="number"?String(t):"";return e!=="slug"?n:n.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function rg(e,t){const n=xn(e),a=xn(t),r=[];for(const l of new Set([...Object.keys(n),...Object.keys(a)]))(n[l]??"")!==(a[l]??"")&&r.push(l);return r}function sO(e,t,n,a,r,l,o){const s={},i=Ca(e.find(c=>c.name===t));for(const c of e){const d=c.preset;if(!d||d.field!==t||c.type!=="text"&&c.type!=="mltext")continue;if(c.type==="text"){if(o(c.name))continue;s[c.name]=lu(d.type,i?xn(a)[l]??"":a);continue}if(!i){if(o(c.name,l))continue;s[c.name]={...xn(r[c.name]),[l]:lu(d.type,a)};continue}const f=xn(a),p={...xn(r[c.name])};let v=!1;for(const h of rg(n,a))o(c.name,h)||(p[h]=lu(d.type,f[h]??""),v=!0);v&&(s[c.name]=p)}return s}function pd(e,t=[]){const n={};for(const a of e)if(a.default!==void 0)n[a.name]=a.default;else if(a.type==="switch"||a.type==="checkbox")n[a.name]=!1;else if(a.type==="relation"&&a.multiple)n[a.name]=[];else if(Ca(a)){const r={};for(const l of t)r[l]="";n[a.name]=r}return n}function br(e){return e?.enabledLocales??[]}function lg(e,t){const n={};for(const a of t)n[a]="";if(typeof e=="string"){const a=t[0];return a&&(n[a]=e),n}return{...n,...xn(e)}}function og(e,t,n){const a=e?.find(s=>s.type==="text"||Ca(s)),r=a?t[a.name]:void 0;if(typeof r=="string"||typeof r=="number")return String(r).trim();if(!a||!Ca(a))return"";const l=xn(r),o=n[0]!==void 0?(l[n[0]]??"").trim():"";if(o!=="")return o;for(const s of Object.values(l))if(s.trim()!=="")return s.trim();return""}function iO(e){const t={};for(const n of e??[]){if(!n||typeof n.message!="string"||n.message===""||typeof n.field!="string")continue;const a=n.locale?`${n.locale.toUpperCase()}: ${n.message}`:n.message;(t[n.field]??=[]).push(a)}return t}function Sa(e){const t={};for(const[n,a]of Object.entries(e??{})){const r=Array.isArray(a)?a.filter(l=>typeof l=="string"&&l!==""):typeof a=="string"&&a!==""?[a]:[];r.length>0&&(t[n]=r)}return t}function va(e){return JSON.stringify(Object.keys(e).sort().map(t=>[t,e[t]]))}function ar(e,t){const n=document.getElementById(`${e}-${t}`);return n?(n.matches("input, select, textarea, button, [tabindex]")||n.setAttribute("tabindex","-1"),n.focus(),!0):!1}const uO={role:"tablist",class:"inline-flex gap-1 rounded-inner border border-border bg-subtle p-1"},cO=["id","data-tab","aria-selected","aria-controls","tabindex","onClick","onKeydown"],dO=["aria-label"],vd=Z({__name:"FormTabs",props:{tabs:{},modelValue:{},idPrefix:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t;function r(l,o){const s=l.key==="ArrowRight"?1:l.key==="ArrowLeft"?-1:0;if(s===0)return;l.preventDefault();const i=(o+s+n.tabs.length)%n.tabs.length,c=n.tabs[i];c&&(a("update:modelValue",c.key),document.getElementById(Yl(n.idPrefix,i))?.focus())}return(l,o)=>(m(),x("div",uO,[(m(!0),x(me,null,Oe(e.tabs,(s,i)=>(m(),x("button",{id:u(Yl)(e.idPrefix,i),key:s.key,type:"button",role:"tab","data-tab":s.key,"aria-selected":s.key===e.modelValue?"true":"false","aria-controls":u(ni)(e.idPrefix,i),tabindex:s.key===e.modelValue?0:-1,class:ge([s.key===e.modelValue?"bg-surface text-text shadow-tab":"text-muted hover:text-text","inline-flex h-[34px] items-center gap-2 rounded-tab px-4 font-semibold transition-colors duration-150 ease-out"]),onClick:c=>a("update:modelValue",s.key),onKeydown:c=>r(c,i)},[we(M(s.label)+" ",1),s.errors>0?(m(),x("span",{key:0,"data-tab-errors":"","aria-label":u(Fr)("backend::lang.form.tab_errors",s.errors),class:"inline-flex h-5 min-w-5 items-center justify-center rounded-pill bg-danger px-1.5 text-[11px] font-bold text-white"},M(s.errors),9,dO)):ee("",!0)],42,cO))),128))]))}}),fO={class:"flex items-start gap-3 p-6 pb-4"},pO={key:0,"data-child-loading":"","aria-hidden":"true",class:"grid grid-cols-1 gap-x-6 gap-y-[22px] min-[600px]:grid-cols-2"},vO={key:1,role:"alert","data-child-load-failed":"",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},mO=["id","role","aria-labelledby"],hO=["disabled"],yO={class:"flex items-center gap-2.5 border-t border-border px-6 py-4"},gO={class:"ml-auto flex gap-2.5"},bO=Z({__name:"RelationChildModal",props:{open:{type:Boolean},source:{},ownerId:{},relation:{},schema:{},mode:{},childId:{},sessionKey:{},canDelete:{type:Boolean}},emits:["update:open","changed","gone","closed"],setup(e,{emit:t}){const n=e,a=t,r=q({}),l=q({}),o=q({}),s=q(!1),i=q(!1),c=q(!1),d=q(""),f=q(Ot),p=q(Wl()),v=q(0),h=q(0),{activeUploads:b,beginUpload:g}=fd(),y=q(null),k=Ta();let E=0;const D=_(()=>`child-${n.relation}`),A=_(()=>n.mode==="preview"),B=_(()=>n.mode==="create"?"create":"update"),V=_(()=>{const he=((A.value?n.schema.viewForm:n.schema.manageForm)??[]).filter(w=>ai(w,B.value));return A.value?he.map(w=>({...w,readOnly:!0,attributes:{...w.attributes??{},readonly:!0}})):he}),U=_(()=>V.value.map(ce=>ce.name)),C=_(()=>{if(!V.value.some(he=>he.tab))return[];const ce=[];for(const he of V.value){const w=kn(he);let O=ce.find(P=>P.key===w);O||(O={key:w,label:he.tab||$("backend::lang.form.tab_default"),errors:0},w===Ot?ce.unshift(O):ce.push(O)),o.value[he.name]&&(O.errors+=1)}return ce}),R=_(()=>Math.max(C.value.findIndex(ce=>ce.key===f.value),0)),W=_(()=>{if(C.value.length===0)return V.value;const ce=C.value[R.value]?.key??Ot;return V.value.filter(he=>kn(he)===ce)}),T=_(()=>{const ce=n.schema.messages;return n.mode==="create"?Ve(ce.createTitle):Ve(A.value?ce.previewTitle:ce.updateTitle)}),L=_(()=>Ve(n.mode==="create"?n.schema.messages.createSubmit:n.schema.messages.updateSubmit)),Y=_(()=>!A.value&&!s.value&&!i.value&&(v.value>0||b.value>0||va(Jt(V.value,r.value))!==d.value));function I(){return{[$a]:n.sessionKey,[Yy]:p.value}}function le(){return{...n.source,id:n.ownerId,name:n.relation}}gt(el,{get key(){return n.sessionKey},get childKey(){return p.value},get recordId(){return n.childId??0},routes:ce=>i8(n.source,n.ownerId,n.relation,n.childId??0,ce,n.sessionKey,p.value),markDirty:()=>{v.value++},pendingChanges:mt(v),revision:mt(h),beginUpload:g,activeUploads:mt(b)}),gt(ud,_(()=>r.value)),gt(cd,xe);const de=rt(is,_(()=>[]));gt(is,de);function xe(ce,he){if(r.value={...r.value,[ce]:he},o.value[ce]){const w={...o.value};delete w[ce],o.value=w}}function _e(ce,he){const w=de.value,O={...ce};for(const P of V.value)P.type==="password"?O[P.name]="":Ca(P)&&(O[P.name]=lg(ce[P.name],w));r.value=O,l.value=he?.labels??{},d.value=va(Jt(V.value,r.value))}async function ke(){await Ue(),y.value?.querySelector('input:not([type="hidden"]):not([tabindex="-1"]), select, textarea, button, [contenteditable="true"], [tabindex="0"]')?.focus()}function fe(){a("update:open",!1),Me($("backend::lang.relation.child_gone"),"danger"),a("gone")}async function Se(){const ce=++E;if(o.value={},i.value=!1,c.value=!1,v.value=0,p.value=Wl(),f.value=Ot,n.mode==="create"||n.childId===null){s.value=!1,_e(pd(V.value,de.value)),f.value=C.value[0]?.key??Ot,await ke();return}s.value=!0;try{const he=await Pe.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}",{params:{path:{...le(),child:n.childId},header:I()}});if(ce!==E)return;if(he.data)_e(he.data.data,he.data.meta),f.value=C.value[0]?.key??Ot;else if(he.response.status===404){fe();return}else i.value=!0}catch{ce===E&&(i.value=!0)}finally{ce===E&&(s.value=!1)}ce===E&&await ke()}Ie(()=>n.open,ce=>{ce?Se():E++},{immediate:!0});async function pe(ce){if(ce){a("update:open",!0);return}c.value||Y.value&&!await k.ask({message:$("backend::lang.form.unsaved_confirm"),confirmLabel:$("backend::lang.form.discard"),danger:!0})||a("update:open",!1)}async function Ae(ce){o.value=Sa(ce);const he=V.value.filter(O=>o.value[O.name]),w=he.find(O=>kn(O)===f.value)??he[0];w&&(C.value.length>0&&(f.value=kn(w)),await Ue(),ar(D.value,w.name))}async function J(){if(!(c.value||A.value||s.value||i.value||b.value>0)){c.value=!0;try{const ce=Jt(V.value,r.value),he=n.mode==="create"||n.childId===null?await Pe.POST("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records",{params:{path:le(),header:I()},body:ce}):await Pe.PUT("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}",{params:{path:{...le(),child:n.childId},header:I()},body:ce});if(he.data){const O=n.mode==="create"?"created":"updated";o.value={},v.value=0,a("update:open",!1),Me(Ve(O==="created"?n.schema.messages.created:n.schema.messages.updated)),a("changed",O);return}const w=he.response.status;w===422?await Ae(he.error?.error.details):w===404?fe():Me(he.error?.error.message||$("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{c.value=!1}}}async function K(){if(c.value||n.childId===null)return;const ce=n.childId;if(await k.ask({message:Ve(n.schema.messages.deleteOneConfirm),confirmLabel:$("backend::lang.form.delete"),danger:!0})){c.value=!0;try{const w=await Pe.POST("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/delete",{params:{path:le(),header:{[$a]:n.sessionKey}},body:{ids:[ce]}});if(w.data){v.value=0,a("update:open",!1),Me(Ve(n.schema.messages.deleted,w.data.data.deleted||1)),a("changed","deleted");return}if(w.response.status===404){fe();return}Me(w.error?.error.message||$("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{c.value=!1}}}function te(ce){ce.preventDefault()}function ie(ce){ce.preventDefault(),a("closed")}return(ce,he)=>(m(),x(me,null,[N(u(Kr),{open:e.open,"onUpdate:open":pe},{default:F(()=>[N(u(oo),null,{default:F(()=>[N(u(Gr),{"data-dialog-overlay":"",class:"fixed inset-0 z-40 bg-overlay"}),N(u(Wr),{"data-relation-child-modal":"","data-dialog-content":"","data-mode":e.mode,"aria-modal":"true","aria-describedby":void 0,class:"fixed top-1/2 left-1/2 z-50 flex max-h-[calc(100vh-32px)] w-[calc(100%-32px)] max-w-[720px] -translate-x-1/2 -translate-y-1/2 flex-col rounded-modal bg-surface text-text shadow-pop",onOpenAutoFocus:te,onCloseAutoFocus:ie},{default:F(()=>[S("div",fO,[N(u(Yr),{class:"min-w-0 flex-1 text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[we(M(T.value),1)]),_:1}),N(u(Lr),{"data-action":"close","aria-label":u($)("backend::lang.form.close"),disabled:c.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(()=>[N(u(Ht),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label","disabled"])]),S("div",{ref_key:"body",ref:y,"data-child-body":"",class:"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-6 pb-6"},[s.value?(m(),x("div",pO,[(m(),x(me,null,Oe(6,w=>S("div",{key:w,class:"flex flex-col gap-1.5"},[...he[3]||(he[3]=[S("span",{class:"block h-3 w-24 rounded-[6px] bg-skel"},null,-1),S("span",{class:"block h-input rounded-control bg-skel"},null,-1)])])),64))])):i.value?(m(),x("p",vO,M(u($)("backend::lang.relation.child_load_failed")),1)):(m(),x(me,{key:2},[N(Qr,{errors:o.value,"field-names":U.value},null,8,["errors","field-names"]),C.value.length>0?(m(),j(vd,{key:0,modelValue:f.value,"onUpdate:modelValue":he[0]||(he[0]=w=>f.value=w),tabs:C.value,"id-prefix":D.value,class:"self-start"},null,8,["modelValue","tabs","id-prefix"])):ee("",!0),S("form",{id:C.value.length>0?u(ni)(D.value,R.value):void 0,role:C.value.length>0?"tabpanel":void 0,"aria-labelledby":C.value.length>0?u(Yl)(D.value,R.value):void 0,novalidate:"",onSubmit:it(J,["prevent"])},[S("fieldset",{disabled:c.value||A.value,class:"m-0 min-w-0 border-0 p-0"},[N(io,{fields:W.value,values:r.value,errors:o.value,labels:l.value,source:e.source,"record-id":e.childId,"id-prefix":D.value,onUpdate:xe},null,8,["fields","values","errors","labels","source","record-id","id-prefix"])],8,hO)],40,mO)],64))],512),S("div",yO,[e.mode==="update"&&e.canDelete&&!s.value&&!i.value?(m(),j(Ke,{key:0,variant:"danger","data-action":"delete-child",icon:u(zr),disabled:c.value,onClick:K},{default:F(()=>[we(M(u($)("backend::lang.form.delete")),1)]),_:1},8,["icon","disabled"])):ee("",!0),S("div",gO,[A.value?(m(),j(Ke,{key:0,variant:"outline","data-action":"cancel",onClick:he[1]||(he[1]=w=>pe(!1))},{default:F(()=>[we(M(u($)("backend::lang.form.close")),1)]),_:1})):(m(),x(me,{key:1},[N(Ke,{variant:"ghost","data-action":"cancel",disabled:c.value,onClick:he[2]||(he[2]=w=>pe(!1))},{default:F(()=>[we(M(u($)("backend::lang.form.cancel")),1)]),_:1},8,["disabled"]),i.value?ee("",!0):(m(),j(Ke,{key:0,variant:"primary","data-action":"save-child",disabled:c.value||s.value||u(b)>0,onClick:J},{default:F(()=>[we(M(c.value?u($)("backend::lang.form.saving"):L.value),1)]),_:1},8,["disabled"]))],64))])])]),_:1},8,["data-mode"])]),_:1})]),_:1},8,["open"]),N(Pa,{open:u(k).request.value!==null,message:u(k).request.value?.message??"","confirm-label":u(k).request.value?.confirmLabel,danger:u(k).request.value?.danger,onConfirm:u(k).confirm,onCancel:u(k).cancel},null,8,["open","message","confirm-label","danger","onConfirm","onCancel"])],64))}}),_O={class:"flex items-start gap-3"},xO={class:"flex min-w-0 flex-1 flex-col gap-1"},kO=["title"],wO={key:0,class:"truncate text-[13px] text-muted"},$O=["disabled"],CO={class:"relative block"},SO={class:"sr-only"},EO=["value","placeholder"],AO=["aria-multiselectable","aria-label","aria-busy"],DO=["data-candidate","aria-selected","onClick","onKeydown"],MO={class:"flex size-8 shrink-0 items-center justify-center rounded-full bg-subtle text-[12px] font-bold","aria-hidden":"true"},OO={class:"flex min-w-0 flex-1 flex-col leading-tight"},PO={class:"truncate font-semibold"},TO={key:0,class:"truncate text-[13px] text-muted"},qO={key:0,class:"block size-2.5 rounded-full bg-primary"},RO={key:0,role:"presentation",class:"px-1 py-3 text-[13px] text-muted"},IO={key:1,role:"presentation","data-candidates-empty":"",class:"px-1 py-3 text-[13px] text-muted"},BO=["aria-label"],FO={"data-candidates-range":"",class:"flex-1"},NO=["aria-label","disabled"],VO=["aria-label","disabled"],LO={class:"flex gap-2.5"},jO=["disabled"],zO=["disabled"],UO=["disabled","aria-busy"],HO=5,KO=300,Vp="inline-flex size-[34px] items-center justify-center rounded-tab border border-border text-text hover:bg-hover disabled:cursor-not-allowed disabled:opacity-60",WO=Z({__name:"RelationPickerModal",props:{open:{type:Boolean},source:{},recordId:{},relation:{},schema:{},sessionKey:{}},emits:["update:open","linked","closed"],setup(e,{emit:t}){const n=e,a=t,r=q(""),l=q(1),o=q([]),s=q(null),i=q(!1),c=q(!1),d=q(new Set),f=q(null),p=q(1),v=q(null),h=q({}),b=q({}),g=q(null);let y=0,k=null;const E=_(()=>n.schema.manage.list.columns),D=_(()=>E.value[0]?.key??""),A=_(()=>E.value[1]?.key??""),B=_(()=>d.value.size),V=`relation-${n.relation}-candidates`,U=_(()=>n.schema.pivotForm??[]),C=_(()=>U.value.map(w=>w.name)),R=_(()=>U.value.length>0),W=_(()=>`link-${n.relation}`);function T(){return n.sessionKey?{[$a]:n.sessionKey}:void 0}const L=_(()=>{const w=s.value;if(!w||w.total===0)return"";const O=(w.page-1)*w.per_page+1,P=Math.min(w.page*w.per_page,w.total);return $("backend::lang.relation.candidates_range",{from:O,to:P,total:w.total})}),Y=_(()=>Math.max(s.value?.last_page??1,1));function I(w){const O=w.id;return typeof O=="number"&&Number.isInteger(O)?O:typeof O=="string"&&/^\d+$/.test(O)?Number(O):null}function le(w,O){const P=O===""?void 0:w[O];return typeof P=="string"||typeof P=="number"?String(P):""}function X(w){return w.split(/[\s@._-]+/).filter(Boolean).slice(0,2).map(O=>O.charAt(0).toUpperCase()).join("")}async function de(){const w=++y;i.value=!0;try{const O=r.value.trim(),{data:P}=await Pe.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/candidates",{params:{path:{...n.source,id:n.recordId,name:n.relation},query:{search:O===""?void 0:O,page:l.value,per_page:HO},header:T()}});if(w!==y)return;o.value=P?.data??[],s.value=P?.meta??null}catch{w===y&&(o.value=[],s.value=null)}finally{w===y&&(i.value=!1)}}function xe(){k!==null&&(clearTimeout(k),k=null),y++,r.value="",l.value=1,o.value=[],s.value=null,i.value=!1,d.value=new Set,p.value=1,v.value=null,h.value={},b.value={}}Ie(()=>n.open,w=>{w?(xe(),de()):xe()},{immediate:!0});function _e(w){r.value=w.target.value,k!==null&&clearTimeout(k),k=setTimeout(()=>{k=null,l.value=1,de()},KO)}function ke(w){w<1||w>Y.value||w===l.value||(l.value=w,de())}function fe(w){const O=I(w);return O!==null&&d.value.has(O)}function Se(w){const O=I(w);if(O===null)return;if(R.value){d.value=new Set([O]),v.value=w;return}const P=new Set(d.value);P.has(O)?P.delete(O):P.add(O),d.value=P}async function pe(){!R.value||d.value.size===0||!v.value||(p.value=2,h.value=pd(U.value,[]),b.value={},await Ue(),g.value?.querySelector('input, select, textarea, button, [contenteditable="true"]')?.focus())}async function Ae(){if(c.value)return;p.value=1,b.value={},await Ue(),(document.querySelector(`#${V} [aria-selected="true"]`)??f.value)?.focus()}function J(w,O){if(h.value={...h.value,[w]:O},b.value[w]){const P={...b.value};delete P[w],b.value=P}}function K(w,O,P){switch(w.key){case" ":w.preventDefault(),Se(O);break;case"Enter":w.preventDefault(),Se(O),R.value&&pe();break;case"ArrowDown":case"ArrowUp":{w.preventDefault();const Q=w.currentTarget.parentElement?.querySelectorAll('[role="option"]'),G=w.key==="ArrowDown"?1:-1;Q?.[Math.min(Math.max(P+G,0),Q.length-1)]?.focus();break}}}function te(w){a("update:open",w)}async function ie(){const w=[...d.value];if(c.value||w.length===0)return;const O=R.value;c.value=!0;try{const P=await Pe.POST("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/link",{params:{path:{...n.source,id:n.recordId,name:n.relation},header:T()},body:O?{ids:w.slice(0,1),pivot:Jt(U.value,h.value)}:{ids:w}});if(P.data){te(!1),a("linked",P.data.data.linked??w.length);return}const Q=P.response.status;if(O&&Q===422){b.value=Sa(P.error?.error.details);const G=U.value.find(ne=>b.value[ne.name]);G&&(await Ue(),ar(W.value,G.name));return}if(O&&Q===404){Me($("backend::lang.relation.child_gone"),"danger"),d.value=new Set,v.value=null,p.value=1,de();return}if(O){Me($("backend::lang.form.error_generic"),"danger");return}Me(P.error?.error.message||$("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{c.value=!1}}function ce(w){w.preventDefault(),f.value?.focus()}function he(w){w.preventDefault(),a("closed")}return xt(()=>{k!==null&&clearTimeout(k)}),(w,O)=>(m(),j(u(Kr),{open:e.open,"onUpdate:open":te},{default:F(()=>[N(u(oo),null,{default:F(()=>[N(u(Gr),{"data-dialog-overlay":"",class:"fixed inset-0 z-40 bg-overlay"}),N(u(Wr),{"data-relation-picker":"","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 rounded-modal bg-surface p-6 text-text shadow-pop",onOpenAutoFocus:ce,onCloseAutoFocus:he},{default:F(()=>[S("div",_O,[S("div",xO,[N(u(Yr),{class:"text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[we(M(p.value===2?u(Ve)(e.schema.messages.pivotTitle):u(Ve)(e.schema.messages.link)),1)]),_:1}),p.value===1?(m(),j(u(Qa),{key:0,class:"text-muted"},{default:F(()=>[we(M(u(Ve)(e.schema.messages.linkHint)),1)]),_:1})):(m(),j(u(Qa),{key:1,class:"flex min-w-0 flex-col","data-chosen-record":""},{default:F(()=>[S("span",{class:"truncate font-semibold text-text",title:le(v.value??{},D.value)},M(le(v.value??{},D.value)),9,kO),A.value?(m(),x("span",wO,M(le(v.value??{},A.value)),1)):ee("",!0)]),_:1}))]),N(u(Lr),{"data-action":"close","aria-label":u($)("backend::lang.form.close"),class:"flex size-[34px] shrink-0 items-center justify-center rounded-tab bg-subtle text-muted hover:bg-hover hover:text-text"},{default:F(()=>[N(u(Ht),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label"])]),p.value===2?(m(),x("div",{key:0,ref_key:"stepTwo",ref:g,"data-pivot-step":"",class:"flex min-h-0 flex-col gap-4 overflow-y-auto"},[N(Qr,{errors:b.value,"field-names":C.value},null,8,["errors","field-names"]),S("form",{novalidate:"",onSubmit:it(ie,["prevent"])},[S("fieldset",{disabled:c.value,class:"m-0 min-w-0 border-0 p-0"},[N(io,{fields:U.value,values:h.value,errors:b.value,source:e.source,"record-id":null,"id-prefix":W.value,onUpdate:J},null,8,["fields","values","errors","source","id-prefix"])],8,$O)],32)],512)):ee("",!0),ha(S("label",CO,[S("span",SO,M(u($)("backend::lang.list.search")),1),N(u(Is),{size:18,class:"pointer-events-none absolute top-1/2 left-3.5 -translate-y-1/2 text-muted","aria-hidden":"true"}),S("input",{ref_key:"searchInput",ref:f,type:"search","data-candidate-search":"",value:r.value,placeholder:u(Ve)(e.schema.messages.candidateSearch),"aria-controls":V,class:"h-input w-full rounded-control border border-border-strong bg-surface pr-3.5 pl-10",onInput:_e},null,40,EO)],512),[[xu,p.value===1]]),ha(S("ul",{id:V,role:"listbox","aria-multiselectable":R.value?"false":"true","aria-label":u(Ve)(e.schema.messages.link),"aria-busy":i.value?"true":void 0,class:"flex min-h-0 flex-col gap-2 overflow-y-auto"},[(m(!0),x(me,null,Oe(o.value,(P,Q)=>(m(),x("li",{key:I(P)??`row-${Q}`,role:"option",tabindex:"0","data-candidate":I(P)??void 0,"aria-selected":fe(P)?"true":"false",class:ge([fe(P)?"border-[#e0b020] bg-sel":"border-border hover:bg-hover","flex h-[54px] cursor-pointer items-center gap-3 rounded-inner border px-3 transition-colors duration-150 ease-out"]),onClick:G=>Se(P),onKeydown:G=>K(G,P,Q)},[S("span",MO,M(X(le(P,D.value))),1),S("span",OO,[S("span",PO,M(le(P,D.value)),1),A.value?(m(),x("span",TO,M(le(P,A.value)),1)):ee("",!0)]),R.value?(m(),x("span",{key:0,"data-radio":"",class:ge([fe(P)?"border-primary":"border-border-strong bg-surface","flex size-[18px] shrink-0 items-center justify-center rounded-full border"]),"aria-hidden":"true"},[fe(P)?(m(),x("span",qO)):ee("",!0)],2)):(m(),x("span",{key:1,class:ge([fe(P)?"border-primary bg-primary text-on-primary":"border-border-strong bg-surface","flex size-[18px] shrink-0 items-center justify-center rounded-checkbox border"]),"aria-hidden":"true"},[fe(P)?(m(),j(u(ba),{key:0,size:14})):ee("",!0)],2))],42,DO))),128)),i.value&&o.value.length===0?(m(),x("li",RO,M(u($)("backend::lang.list.loading")),1)):!i.value&&o.value.length===0?(m(),x("li",IO,M(u($)("backend::lang.relation.no_candidates")),1)):ee("",!0)],8,AO),[[xu,p.value===1]]),p.value===1&&s.value&&s.value.total>0?(m(),x("nav",{key:1,"aria-label":u($)("backend::lang.list.pagination"),class:"flex items-center gap-2 text-[13px] text-muted"},[S("span",FO,M(L.value),1),S("button",{type:"button","data-page":"prev","aria-label":u($)("backend::lang.list.prev_page"),class:ge(Vp),disabled:i.value||l.value<=1,onClick:O[0]||(O[0]=P=>ke(l.value-1))},[N(u(qs),{size:16,"aria-hidden":"true"})],8,NO),S("button",{type:"button","data-page":"next","aria-label":u($)("backend::lang.list.next_page"),class:ge(Vp),disabled:i.value||l.value>=Y.value,onClick:O[1]||(O[1]=P=>ke(l.value+1))},[N(u(no),{size:16,"aria-hidden":"true"})],8,VO)],8,BO)):ee("",!0),S("div",LO,[p.value===2?(m(),x("button",{key:0,type:"button","data-action":"back",disabled:c.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:Ae},M(u($)("backend::lang.relation.back")),9,jO)):(m(),j(u(Lr),{key:1,"data-action":"cancel",class:"inline-flex h-button flex-1 items-center justify-center rounded-control border border-border-strong bg-surface font-semibold hover:bg-hover"},{default:F(()=>[we(M(u($)("backend::lang.form.cancel")),1)]),_:1})),R.value&&p.value===1?(m(),x("button",{key:2,type:"button","data-action":"next",disabled:B.value===0,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",onClick:pe},M(u($)("backend::lang.relation.next")),9,zO)):(m(),x("button",{key:3,type:"button","data-action":"confirm-link",disabled:c.value||B.value===0,"aria-busy":c.value?"true":void 0,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",onClick:ie},[R.value?(m(),x(me,{key:0},[we(M(c.value?u($)("backend::lang.form.saving"):u(Ve)(e.schema.messages.linkSubmit)),1)],64)):(m(),x(me,{key:1},[we(M(u($)("backend::lang.relation.add_count",{count:B.value})),1)],64))],8,UO))])]),_:1})]),_:1})]),_:1},8,["open"]))}}),GO={class:"flex items-start gap-3"},YO={class:"flex min-w-0 flex-1 flex-col gap-1"},JO={key:0,"data-pivot-loading":"","aria-hidden":"true",class:"flex flex-col gap-1.5"},ZO={key:1,role:"alert",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},QO=["disabled"],XO={class:"flex gap-2.5"},eP=["disabled"],tP=["disabled"],nP=Z({__name:"RelationPivotModal",props:{open:{type:Boolean},source:{},ownerId:{},relation:{},schema:{},childId:{},childName:{},sessionKey:{}},emits:["update:open","saved","gone","closed"],setup(e,{emit:t}){const n=e,a=t,r=q({}),l=q({}),o=q(!1),s=q(!1),i=q(!1),c=q(""),d=Ta();let f=0;const p=_(()=>`pivot-${n.relation}`),v=_(()=>n.schema.pivotForm??[]),h=_(()=>v.value.map(U=>U.name)),b=_(()=>!o.value&&!s.value&&va(Jt(v.value,r.value))!==c.value);function g(){return{[$a]:n.sessionKey}}function y(U){return{...n.source,id:n.ownerId,name:n.relation,child:U}}function k(U,C){if(r.value={...r.value,[U]:C},l.value[U]){const R={...l.value};delete R[U],l.value=R}}function E(){a("update:open",!1),Me($("backend::lang.relation.child_gone"),"danger"),a("gone")}async function D(){const U=++f;if(l.value={},s.value=!1,i.value=!1,r.value={},c.value=va({}),n.childId!==null){o.value=!0;try{const C=await Pe.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/pivot/{child}",{params:{path:y(n.childId),header:g()}});if(U!==f)return;C.data?(r.value={...C.data.data},c.value=va(Jt(v.value,r.value))):C.response.status===404?E():s.value=!0}catch{U===f&&(s.value=!0)}finally{U===f&&(o.value=!1)}}}Ie(()=>n.open,U=>{U?D():f++},{immediate:!0});async function A(U){if(U){a("update:open",!0);return}i.value||b.value&&!await d.ask({message:$("backend::lang.form.unsaved_confirm"),confirmLabel:$("backend::lang.form.discard"),danger:!0})||a("update:open",!1)}async function B(){if(!(i.value||o.value||s.value||n.childId===null)){i.value=!0;try{const U=await Pe.PUT("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/pivot/{child}",{params:{path:y(n.childId),header:g()},body:Jt(v.value,r.value)});if(U.data){l.value={},c.value=va(Jt(v.value,r.value)),a("update:open",!1),Me(Ve(n.schema.messages.pivotSaved)),a("saved");return}const C=U.response.status;if(C===422){l.value=Sa(U.error?.error.details);const R=v.value.find(W=>l.value[W.name]);R&&(await Ue(),ar(p.value,R.name))}else C===404?E():Me($("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{i.value=!1}}}function V(U){U.preventDefault(),a("closed")}return(U,C)=>(m(),x(me,null,[N(u(Kr),{open:e.open,"onUpdate:open":A},{default:F(()=>[N(u(oo),null,{default:F(()=>[N(u(Gr),{"data-dialog-overlay":"",class:"fixed inset-0 z-40 bg-overlay"}),N(u(Wr),{"data-relation-pivot-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:V},{default:F(()=>[S("div",GO,[S("div",YO,[N(u(Yr),{class:"text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[we(M(u(Ve)(e.schema.messages.pivotTitle)),1)]),_:1}),N(u(Qa),{class:"truncate text-muted",title:e.childName},{default:F(()=>[we(M(e.childName),1)]),_:1},8,["title"])]),N(u(Lr),{"data-action":"close","aria-label":u($)("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(()=>[N(u(Ht),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label","disabled"])]),o.value?(m(),x("div",JO,[...C[1]||(C[1]=[S("span",{class:"block h-3 w-24 rounded-[6px] bg-skel"},null,-1),S("span",{class:"block h-input rounded-control bg-skel"},null,-1)])])):s.value?(m(),x("p",ZO,M(u($)("backend::lang.relation.child_load_failed")),1)):(m(),x("form",{key:2,class:"flex flex-col gap-4",novalidate:"",onSubmit:it(B,["prevent"])},[N(Qr,{errors:l.value,"field-names":h.value},null,8,["errors","field-names"]),S("fieldset",{disabled:i.value,class:"m-0 min-w-0 border-0 p-0"},[N(io,{fields:v.value,values:r.value,errors:l.value,source:e.source,"record-id":null,"id-prefix":p.value,onUpdate:k},null,8,["fields","values","errors","source","id-prefix"])],8,QO)],32)),S("div",XO,[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:C[0]||(C[0]=R=>A(!1))},M(u($)("backend::lang.form.cancel")),9,eP),S("button",{type:"button","data-action":"save-pivot",disabled:i.value||o.value||s.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",onClick:B},M(i.value?u($)("backend::lang.form.saving"):u(Ve)(e.schema.messages.pivotSubmit)),9,tP)])]),_:1})]),_:1})]),_:1},8,["open"]),N(Pa,{open:u(d).request.value!==null,message:u(d).request.value?.message??"","confirm-label":u(d).request.value?.confirmLabel,danger:u(d).request.value?.danger,onConfirm:u(d).confirm,onCancel:u(d).cancel},null,8,["open","message","confirm-label","danger","onConfirm","onCancel"])],64))}}),aP=["id","data-relation-name","data-deferred","aria-labelledby","aria-describedby"],rP={class:"flex flex-col gap-2"},lP={class:"flex flex-wrap items-center gap-3"},oP={class:"flex min-w-0 flex-1 flex-col"},sP=["id"],iP=["id"],uP={key:0,class:"relative block w-[220px] max-w-full"},cP={class:"sr-only"},dP=["value","placeholder"],fP={key:0,"data-relation-pending":"",class:"flex items-center gap-2 text-[13px] text-muted"},pP={key:0,role:"alert",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},vP={key:1,class:"overflow-hidden rounded-inner border border-border"},mP={"data-relation-empty":"",class:"text-muted"},hP=["aria-label","onClick"],yP=300,gP=Z({__name:"RelationManager",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},setup(e){const t=e,n=rt(el,null),a=_(()=>t.field.relation||t.field.name),r=_(()=>typeof t.recordId=="number"?t.recordId:n&&n.recordId===0&&t.field.deferrable?0:null),l=_(()=>r.value===0),o=_(()=>t.source!=null&&r.value!==null),s=n?.key??Wl(),i=q(null),c=q([]),d=q(null),f=q(!0),p=q(!1),v=q(""),h=q(1),b=q(null),g=q([]),y=q(!1),k=q(!1),E=q(!1),D=q("create"),A=q(null),B=q(!1),V=q(null),U=q("");let C=null,R=null,W=null;const T=Ta();let L=0,Y=null;const I=_(()=>i.value?.view.list.columns??[]),le=_(()=>i.value?.view.toolbarButtons??[]),X=_(()=>i.value?.messages),de=_(()=>`${t.controlId}-heading`),xe=_(()=>`${t.controlId}-comment`),_e=_(()=>le.value.includes("create")&&(i.value?.manageForm?.length??0)>0),ke=_(()=>le.value.includes("update")&&(i.value?.manageForm?.length??0)>0),fe=_(()=>i.value?.kind==="belongsToMany"&&(i.value?.pivotForm?.length??0)>0&&(le.value.includes("link")||le.value.includes("update"))),Se=_(()=>(i.value?.viewForm?.length??0)>0),pe=_(()=>ke.value?"update":fe.value?"pivot":Se.value?"preview":null),Ae=_(()=>ke.value&&fe.value),J=_(()=>le.value.includes("unlink")||le.value.includes("delete"));function K(){return l.value?{[$a]:s}:void 0}function te(){return{...t.source,id:r.value,name:a.value}}function ie(){l.value&&n?.markDirty()}async function ce(){const{data:qe}=await Pe.GET("/{vendor}/{plugin}/{controller}/schema/relation/{name}",{params:{path:{...t.source,name:a.value}}});i.value=qe?.data??null}async function he(){const qe=++L;f.value=!0,p.value=!1;try{const Te=v.value.trim(),Ne={page:h.value};Te!==""&&(Ne.search=Te),b.value&&(Ne.sort=b.value.column,Ne.dir=b.value.dir);const{data:St}=await Pe.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}",{params:{path:te(),query:Ne,header:K()}});if(qe!==L)return;c.value=St?.data??[],d.value=St?.meta??null,p.value=!St}catch{qe===L&&(c.value=[],d.value=null,p.value=!0)}finally{qe===L&&(f.value=!1)}}async function w(){if(o.value){try{await ce()}catch{i.value=null}if(!i.value){f.value=!1,p.value=!0;return}await he()}}function O(qe){v.value=qe.target.value,Y!==null&&clearTimeout(Y),Y=setTimeout(()=>{Y=null,h.value=1,g.value=[],he()},yP)}function P(qe){h.value=qe,g.value=[],he()}function Q(qe){const Te=b.value;Te?.column!==qe?b.value={column:qe,dir:"asc"}:Te.dir==="asc"?b.value={column:qe,dir:"desc"}:b.value=null,h.value=1,g.value=[],he()}function G(){return g.value.map(Number).filter(qe=>Number.isInteger(qe)&&qe>0)}function ne(qe){const Te=qe.id;return typeof Te=="number"&&Number.isInteger(Te)?Te:typeof Te=="string"&&/^\d+$/.test(Te)?Number(Te):null}function $e(qe){const Te=I.value[0]?.key,Ne=Te?qe[Te]:void 0;return typeof Ne=="string"||typeof Ne=="number"?String(Ne):""}async function ae(){const qe=G();if(!(y.value||qe.length===0||!i.value||!await T.ask({message:Ve(X.value?.unlinkConfirm,qe.length),confirmLabel:Ve(X.value?.unlinkSelected),danger:!0}))){y.value=!0;try{const Ne=await Pe.POST("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/unlink",{params:{path:te(),header:K()},body:{ids:qe}});if(Ne.data){g.value=[],ie(),Me(Ve(X.value?.unlinked,Ne.data.data.removed??qe.length)),await he();return}Me(Ne.error?.error.message||$("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{y.value=!1}}}async function ue(qe){y.value=!0;try{const Te=await Pe.POST("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/delete",{params:{path:te(),header:K()},body:{ids:qe}});if(Te.data){g.value=[],ie(),Me(Ve(X.value?.deleted,Te.data.data.deleted||qe.length)),await he();return}Me(Te.error?.error.message||$("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{y.value=!1}}async function re(){const qe=G();y.value||qe.length===0||!i.value||await T.ask({message:Ve(X.value?.deleteConfirm,qe.length),confirmLabel:Ve(X.value?.deleteSelected),danger:!0},()=>ue(qe))}async function se(qe){ie(),Me(Ve(X.value?.linked,qe)),g.value=[],await he()}function oe(qe){C=qe.currentTarget??W,D.value="create",A.value=null,E.value=!0}function be(qe,Te){const Ne=ne(qe);Ne!==null&&(C=Te,V.value=Ne,U.value=$e(qe),B.value=!0)}function Ee(qe,Te){const Ne=pe.value,St=ne(qe);if(!(Ne===null||St===null)){if(Ne==="pivot"){be(qe,Te);return}C=Te,D.value=Ne,A.value=St,E.value=!0}}async function Fe(){ie(),g.value=[],await he()}async function He(){ie(),await he()}async function Le(){g.value=[],await he()}function ot(){const qe=C&&C.isConnected?C:null;C=null,qe?.focus()}function ut(){R?.focus()}function Ct(qe){const Te=qe?.$el;return Te instanceof HTMLElement?Te:null}function Rt(qe){R=Ct(qe)}function cn(qe){W=Ct(qe)}return xt(()=>{Y!==null&&clearTimeout(Y)}),w(),(qe,Te)=>o.value?(m(),x("section",{key:0,id:e.controlId,"data-relation-manager":"","data-relation-name":a.value,"data-deferred":l.value?"true":void 0,"aria-labelledby":de.value,"aria-describedby":e.field.comment?xe.value:void 0,tabindex:"-1",class:"flex flex-col gap-4"},[S("div",rP,[S("header",lP,[S("div",oP,[S("h2",{id:de.value,class:"text-[17px] font-bold tracking-[-0.01em]"},M(i.value?.label||e.field.label||a.value),9,sP),e.field.comment?(m(),x("p",{key:0,id:xe.value,class:"text-[13px] text-muted"},M(e.field.comment),9,iP)):ee("",!0)]),i.value?.view.showSearch?(m(),x("label",uP,[S("span",cP,M(u($)("backend::lang.list.search")),1),N(u(Is),{size:16,class:"pointer-events-none absolute top-1/2 left-3 -translate-y-1/2 text-muted","aria-hidden":"true"}),S("input",{type:"search","data-relation-search":"",value:v.value,placeholder:u($)("backend::lang.list.search_prompt"),class:"h-[38px] w-full rounded-control border border-transparent bg-subtle pr-3 pl-9",onInput:O,onKeydown:Te[0]||(Te[0]=ga(it(()=>{},["prevent"]),["enter"]))},null,40,dP)])):ee("",!0),(m(!0),x(me,null,Oe(le.value,Ne=>(m(),x(me,{key:Ne},[Ne==="create"&&_e.value?(m(),j(Ke,{key:0,ref_for:!0,ref:cn,"data-action":"create",size:"sm",variant:"primary",icon:u(Rs),disabled:y.value||!i.value,"aria-haspopup":"dialog",onClick:oe},{default:F(()=>[we(M(u(Ve)(X.value?.create)),1)]),_:1},8,["icon","disabled"])):Ne==="link"?(m(),j(Ke,{key:1,ref_for:!0,ref:Rt,"data-action":"link",size:"sm",variant:_e.value?"outline":"primary",icon:u(Qm),disabled:y.value||!i.value,"aria-haspopup":"dialog",onClick:Te[1]||(Te[1]=St=>k.value=!0)},{default:F(()=>[we(M(u(Ve)(X.value?.link)),1)]),_:1},8,["variant","icon","disabled"])):Ne==="delete"?(m(),j(Ke,{key:2,"data-action":"delete",size:"sm",variant:"danger",icon:u(zr),disabled:y.value||g.value.length===0,onClick:re},{default:F(()=>[we(M(u(Ve)(X.value?.deleteSelected)),1)]),_:1},8,["icon","disabled"])):Ne==="unlink"?(m(),j(Ke,{key:3,"data-action":"unlink",size:"sm",variant:"danger",icon:u(Zm),disabled:y.value||g.value.length===0,onClick:ae},{default:F(()=>[we(M(u(Ve)(X.value?.unlinkSelected)),1)]),_:1},8,["icon","disabled"])):ee("",!0)],64))),128))]),l.value?(m(),x("p",fP,[N(u(xc),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.relation.pending_note")),1)])):ee("",!0)]),p.value&&!f.value?(m(),x("p",pP,M(u($)("backend::lang.relation.load_failed")),1)):(m(),x("div",vP,[N(Wy,{selected:g.value,"onUpdate:selected":Te[2]||(Te[2]=Ne=>g.value=Ne),variant:"relation",columns:I.value,rows:c.value,loading:f.value,selectable:J.value,sortable:!0,sort:b.value,openable:pe.value!==null,trailing:Ae.value,onSort:Q,onOpen:Ee},{empty:F(()=>[S("span",mP,M(u(Ve)(X.value?.empty)),1)]),trailing:F(({row:Ne})=>[S("button",{type:"button","data-action":"edit-pivot","aria-label":u(Ve)(X.value?.editPivot,void 0,{name:$e(Ne)}),class:"flex size-8 items-center justify-center rounded-pager text-muted transition-colors duration-150 ease-out hover:bg-hover hover:text-text",onClick:St=>be(Ne,St.currentTarget)},[N(u(bw),{size:16,"aria-hidden":"true"})],8,hP)]),_:1},8,["selected","columns","rows","loading","selectable","sort","openable","trailing"]),d.value&&d.value.last_page>1?(m(),j(Gy,{key:0,meta:d.value,loading:f.value,"per-page-options":[],"per-page":d.value.per_page,onPage:P},null,8,["meta","loading","per-page"])):ee("",!0)])),i.value&&le.value.includes("link")?(m(),j(WO,{key:2,open:k.value,"onUpdate:open":Te[3]||(Te[3]=Ne=>k.value=Ne),source:e.source,"record-id":r.value,relation:a.value,schema:i.value,"session-key":l.value?u(s):null,onLinked:se,onClosed:ut},null,8,["open","source","record-id","relation","schema","session-key"])):ee("",!0),i.value&&(_e.value||pe.value==="update"||pe.value==="preview")?(m(),j(bO,{key:3,open:E.value,"onUpdate:open":Te[4]||(Te[4]=Ne=>E.value=Ne),source:e.source,"owner-id":r.value,relation:a.value,schema:i.value,mode:D.value,"child-id":A.value,"session-key":u(s),"can-delete":le.value.includes("delete"),onChanged:Fe,onGone:Le,onClosed:ot},null,8,["open","source","owner-id","relation","schema","mode","child-id","session-key","can-delete"])):ee("",!0),i.value&&fe.value?(m(),j(nP,{key:4,open:B.value,"onUpdate:open":Te[5]||(Te[5]=Ne=>B.value=Ne),source:e.source,"owner-id":r.value,relation:a.value,schema:i.value,"child-id":V.value,"child-name":U.value,"session-key":u(s),onSaved:He,onGone:Le,onClosed:ot},null,8,["open","source","owner-id","relation","schema","child-id","child-name","session-key"])):ee("",!0),N(Pa,{open:u(T).request.value!==null,message:u(T).request.value?.message??"","confirm-label":u(T).request.value?.confirmLabel,danger:u(T).request.value?.danger,busy:u(T).busy.value,onConfirm:u(T).confirm,onCancel:u(T).cancel},null,8,["open","message","confirm-label","danger","busy","onConfirm","onCancel"])],8,aP)):ee("",!0)}}),bP=["id","aria-describedby"],_P=["id","aria-describedby"],xP={class:"min-w-0 [overflow-wrap:anywhere]"},kP=["id"],wP=["data-relation"],$P={class:"flex size-[22px] items-center justify-center rounded-full bg-primary text-[10px] font-bold text-on-primary","aria-hidden":"true"},CP={class:"font-semibold"},SP={key:0,"data-chip-locked":"",class:"flex size-6 items-center justify-center text-muted"},EP={class:"sr-only"},AP=["aria-label","onClick"],DP=["id","aria-expanded","aria-controls","aria-activedescendant","aria-required","aria-invalid","aria-describedby","value","placeholder"],MP={key:1,class:"relative"},OP=["id","aria-expanded","aria-controls","aria-activedescendant","aria-required","aria-invalid","aria-describedby","value","placeholder"],PP=["id"],TP=["id","data-value","aria-selected","aria-disabled","onMousedown"],qP={class:"min-w-0 truncate"},RP={key:0,role:"presentation",class:"px-3 py-2 text-[13px] text-muted"},IP={key:1,role:"presentation",class:"px-3 py-2 text-[13px] text-muted"},BP={key:2,role:"presentation",class:"p-1"},FP=["id"],NP=20,VP=300,LP=Z({__name:"RelationField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=_(()=>n.field.readOnly?"readonly":n.field.multiple?"multiple":"single"),l=_(()=>`${n.controlId}-listbox`),o=q({}),s=q(new Set);function i(J){const K={...o.value};let te=null;for(const ie of J)K[ie.value]=ie.label,ie.locked&&!s.value.has(ie.value)&&(te??=new Set(s.value),te.add(ie.value));o.value=K,te&&(s.value=te)}Ie(()=>n.labels,J=>i(J??[]),{immediate:!0});function c(J){return J!==null&&s.value.has(J)}const d=_(()=>`${n.controlId}-locked-note`),f=_(()=>s.value.size>0),p=_(()=>[n.describedBy,f.value?d.value:""].filter(Boolean).join(" "));function v(J){return typeof J=="number"&&Number.isInteger(J)?J:typeof J=="string"&&/^\d+$/.test(J)?Number(J):null}const h=_(()=>v(n.modelValue)),b=_(()=>Array.isArray(n.modelValue)?n.modelValue.map(v).filter(J=>J!==null):[]);function g(J){return o.value[J]??String(J)}function y(J){return J.split(/[\s@._-]+/).filter(Boolean).slice(0,2).map(K=>K.charAt(0).toUpperCase()).join("")}const k=_(()=>{const J=n.labels?.[0]?.label;return J||(n.field.emptyOption??"—")}),E=q(!1),D=q(""),A=q([]),B=q(0),V=q(0),U=q(!1),C=q(-1);let R=0,W=null;const T=_(()=>B.value{const J=[];r.value==="single"&&n.field.emptyOption!==void 0&&J.push({key:"empty",label:n.field.emptyOption,value:null,muted:!0,locked:!1});const K=new Set(b.value);for(const te of A.value)r.value==="multiple"&&K.has(te.value)||J.push({key:`option-${te.value}`,label:te.label,value:te.value,muted:!1,locked:!!te.locked||c(te.value)});return J});function I(J){return`${l.value}-${J}`}function le(){E.value||(E.value=!0,C.value=-1,L(1,!1))}function X(){E.value=!1,D.value="",C.value=-1,W!==null&&(clearTimeout(W),W=null)}function de(J){D.value=J.target.value,E.value=!0,C.value=-1,W!==null&&clearTimeout(W),W=setTimeout(()=>{W=null,L(1,!1)},VP)}function xe(){T.value&&!U.value&&L(B.value+1,!0)}function _e(J){const K=J.target;K.scrollTop+K.clientHeight>=K.scrollHeight-24&&xe()}function ke(J){J.locked||(r.value==="multiple"?J.value!==null&&!b.value.includes(J.value)&&a("update:modelValue",[...b.value,J.value]):a("update:modelValue",J.value),X())}function fe(J){c(J)||a("update:modelValue",b.value.filter(K=>K!==J))}function Se(J,K){for(let te=J+K;te>=0&&te!c(te));K!==void 0&&fe(K)}break}}const Ae=_(()=>h.value!==null?g(h.value):n.field.emptyOption??"");return xt(()=>{W!==null&&clearTimeout(W)}),(J,K)=>r.value==="readonly"?(m(),x("div",{key:0,id:e.controlId,"data-relation-readonly":"","aria-describedby":e.describedBy||void 0,class:ge([e.labels?.[0]?.label?"text-text":"text-muted","flex min-h-input items-center rounded-control border border-border bg-subtle px-3.5"])},M(k.value),11,bP)):r.value==="single"&&c(h.value)?(m(),x(me,{key:1},[S("div",{id:e.controlId,"data-relation-locked":"","aria-describedby":p.value||void 0,class:"flex min-h-input items-center justify-between gap-2 rounded-control border border-border bg-subtle px-3.5"},[S("span",xP,M(Ae.value),1),N(u(za),{size:14,class:"shrink-0 text-muted","aria-hidden":"true"})],8,_P),S("p",{id:d.value,"data-locked-note":"",class:"mt-1.5 flex items-center gap-2 text-[13px] text-muted"},[N(u(za),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.form.locked_note")),1)],8,kP)],64)):(m(),x("div",{key:2,class:"relative","data-relation":r.value},[r.value==="multiple"?(m(),x("div",{key:0,class:ge([e.invalid?"border-danger":"border-border-strong","flex min-h-input flex-wrap items-center gap-1.5 rounded-control border bg-surface p-1.5"])},[(m(!0),x(me,null,Oe(b.value,te=>(m(),x("span",{key:te,"data-chip":"",class:"inline-flex h-[30px] items-center gap-1.5 rounded-pill bg-subtle pr-1 pl-1"},[S("span",$P,M(y(g(te))),1),S("span",CP,M(g(te)),1),c(te)?(m(),x("span",SP,[N(u(za),{size:14,"aria-hidden":"true"}),S("span",EP,M(u($)("backend::lang.form.locked_item",{name:g(te)})),1)])):(m(),x("button",{key:1,type:"button","aria-label":u($)("backend::lang.form.remove_item",{name:g(te)}),class:"flex size-6 items-center justify-center rounded-full text-muted hover:bg-hover hover:text-text",onClick:ie=>fe(te)},[N(u(Ht),{size:14,"aria-hidden":"true"})],8,AP))]))),128)),S("input",{id:e.controlId,type:"text",role:"combobox",autocomplete:"off","aria-expanded":E.value?"true":"false","aria-controls":l.value,"aria-autocomplete":"list","aria-activedescendant":E.value&&C.value>=0?I(C.value):void 0,"aria-required":e.field.required?"true":void 0,"aria-invalid":e.invalid?"true":void 0,"aria-describedby":p.value||void 0,value:D.value,placeholder:u($)("backend::lang.form.add_item"),class:"h-[30px] min-w-[120px] flex-1 border-0 bg-transparent px-2 focus-visible:shadow-none",onClick:le,onInput:de,onKeydown:pe,onBlur:X},null,40,DP)],2)):(m(),x("div",MP,[S("input",{id:e.controlId,type:"text",role:"combobox",autocomplete:"off","aria-expanded":E.value?"true":"false","aria-controls":l.value,"aria-autocomplete":"list","aria-activedescendant":E.value&&C.value>=0?I(C.value):void 0,"aria-required":e.field.required?"true":void 0,"aria-invalid":e.invalid?"true":void 0,"aria-describedby":p.value||void 0,value:E.value?D.value:Ae.value,placeholder:E.value&&Ae.value||u($)("backend::lang.form.select_placeholder"),class:ge([[e.invalid?"border-danger":"border-border-strong",!E.value&&h.value===null?"text-muted":"text-text"],"h-input w-full rounded-control border bg-surface pr-10 pl-3.5"]),onClick:le,onInput:de,onKeydown:pe,onBlur:X},null,42,OP),N(u(to),{size:16,class:"pointer-events-none absolute top-1/2 right-3.5 -translate-y-1/2 text-muted","aria-hidden":"true"})])),ha(S("ul",{id:l.value,role:"listbox",class:"absolute inset-x-0 top-full z-20 mt-1 max-h-64 overflow-y-auto rounded-inner border border-border bg-surface p-1 shadow-menu",onScroll:_e},[(m(!0),x(me,null,Oe(Y.value,(te,ie)=>(m(),x("li",{id:I(ie),key:te.key,role:"option","data-value":te.value??"empty","aria-selected":r.value==="single"&&te.value===h.value?"true":"false","aria-disabled":te.locked?"true":void 0,class:ge([[te.muted||te.locked?"text-muted":"text-text",te.locked?"cursor-not-allowed":"cursor-pointer hover:bg-hover",ie===C.value&&!te.locked?"bg-hover":""],"flex h-10 items-center justify-between gap-2 rounded-control px-3"]),onMousedown:it(ce=>ke(te),["prevent"])},[S("span",qP,M(te.label),1),te.locked?(m(),j(u(za),{key:0,size:14,class:"shrink-0","aria-hidden":"true"})):ee("",!0)],42,TP))),128)),U.value?(m(),x("li",RP,M(u($)("backend::lang.form.loading_options")),1)):Y.value.filter(te=>te.value!==null).length===0?(m(),x("li",IP,M(u($)("backend::lang.form.no_options")),1)):ee("",!0),T.value&&!U.value?(m(),x("li",BP,[S("button",{type:"button","data-action":"more-options",class:"h-8 w-full rounded-control text-[13px] font-semibold text-muted hover:bg-hover hover:text-text",onMousedown:it(xe,["prevent"])},M(u($)("backend::lang.form.more_options")),33)])):ee("",!0)],40,PP),[[xu,E.value]]),f.value?(m(),x("p",{key:2,id:d.value,"data-locked-note":"",class:"mt-1.5 flex items-center gap-2 text-[13px] text-muted"},[N(u(za),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.form.locked_note")),1)],8,FP)):ee("",!0)],8,wP))}}),jP={class:"flex min-w-0 flex-col"},zP=["for"],UP={key:0,class:"text-danger","aria-hidden":"true"},HP=["id"],KP=["id","aria-checked","aria-invalid","aria-describedby"],WP=Z({__name:"SwitchField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=_(()=>id(n.modelValue));function l(){a("update:modelValue",Xy(n.modelValue,!r.value))}return(o,s)=>(m(),x("div",{class:ge([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",jP,[S("label",{for:e.controlId,class:"font-semibold"},[we(M(e.field.label||e.field.name),1),e.field.required?(m(),x("span",UP," *")):ee("",!0)],8,zP),e.field.comment?(m(),x("p",{key:0,id:`${e.controlId}-comment`,class:"text-[13px] text-muted"},M(e.field.comment),9,HP)):ee("",!0)]),S("button",{id:e.controlId,type:"button",role:"switch","aria-checked":r.value?"true":"false","aria-invalid":e.invalid?"true":void 0,"aria-describedby":e.describedBy||void 0,class:ge([r.value?"bg-primary":"bg-border-strong","relative h-[26px] w-[44px] shrink-0 rounded-pill transition-colors duration-150 ease-out"]),onClick:l},[S("span",{class:ge([r.value?"translate-x-[18px] bg-on-primary":"translate-x-0 bg-white","absolute top-[3px] left-[3px] size-[20px] rounded-full shadow-tab transition-transform duration-150 ease-out"]),"aria-hidden":"true"},null,2)],10,KP)],2))}}),GP=["id","name","value","required","aria-required","aria-invalid","aria-describedby"],sg=Z({__name:"TextField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=_(()=>n.modelValue===null||n.modelValue===void 0?"":String(n.modelValue)),l=_(()=>Xr(n.field));return(o,s)=>(m(),x("input",Re({id:e.controlId},l.value,{name:e.field.name,type:"text",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:[u(Tt)(e.invalid),"h-input"],onInput:s[0]||(s[0]=i=>a("update:modelValue",i.target.value))}),null,16,GP))}}),YP=["id","name","rows","value","required","aria-required","aria-invalid","aria-describedby"],ig=Z({__name:"TextareaField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r={tiny:2,small:4,large:8,huge:12,giant:18},l=_(()=>r[n.field.size??""]??5),o=_(()=>n.modelValue===null||n.modelValue===void 0?"":String(n.modelValue)),s=_(()=>Xr(n.field));return(i,c)=>(m(),x("textarea",Re({id:e.controlId},s.value,{name:e.field.name,rows:l.value,value:o.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:[u(Tt)(e.invalid),"min-h-input resize-y py-2.5"],onInput:c[0]||(c[0]=d=>a("update:modelValue",d.target.value))}),null,16,YP))}}),JP={class:"flex flex-col gap-1.5"},ZP=["aria-pressed"],QP={key:0,class:"flex flex-col gap-1.5"},XP={key:0,"data-markdown-preview-error":"",role:"status",class:"text-[13px] text-danger"},eT=["aria-busy","innerHTML"],tT=["id","name","rows","value","required","aria-required","aria-invalid","aria-describedby"],Lp="Preview unavailable.",nT=300,ug=Z({__name:"MarkdownField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r={tiny:2,small:4,large:8,huge:12,giant:18},l=_(()=>r[n.field.size??""]??8),o=_(()=>n.modelValue===null||n.modelValue===void 0?"":String(n.modelValue)),s=_(()=>Xr(n.field)),i=q(!1),c=q(""),d=q(""),f=q(!1);let p=0,v=null;function h(){v!==null&&(clearTimeout(v),v=null)}function b(k){const D=k?.error?.details?.markdown;return Array.isArray(D)&&typeof D[0]=="string"&&D[0]!==""?D[0]:Lp}async function g(){const k=++p;if(o.value.trim()===""){c.value="",d.value="",f.value=!1;return}f.value=!0;try{const{data:E,error:D}=await Pe.POST("/markdown/preview",{body:{markdown:o.value}});if(k!==p)return;E?(c.value=E.data.html,d.value=""):(c.value="",d.value=b(D))}catch{if(k!==p)return;c.value="",d.value=Lp}finally{k===p&&(f.value=!1)}}function y(){i.value=!i.value,h(),i.value?g():(p++,f.value=!1)}return Ie(o,()=>{i.value&&(h(),v=setTimeout(()=>{v=null,g()},nT))}),xt(()=>{h(),p++}),(k,E)=>(m(),x("div",JP,[S("button",{type:"button","data-markdown-preview":"",class:"self-start rounded-pager px-2 py-1 text-[13px] text-muted hover:bg-hover hover:text-text","aria-pressed":i.value?"true":"false",onClick:y}," Preview ",8,ZP),i.value?(m(),x("div",QP,[d.value?(m(),x("p",XP,M(d.value),1)):ee("",!0),S("div",{"data-markdown-preview-pane":"",class:ge([u(Tt)(e.invalid),"summer-markdown min-h-input overflow-auto px-3.5 py-2.5"]),"aria-busy":f.value?"true":"false",innerHTML:c.value},null,10,eT)])):(m(),x("textarea",Re({key:1,id:e.controlId},s.value,{name:e.field.name,rows:l.value,value:o.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:[u(Tt)(e.invalid),"min-h-input resize-y py-2.5"],onInput:E[0]||(E[0]=D=>a("update:modelValue",D.target.value))}),null,16,tT))]))}}),aT=Z({__name:"MLTextField",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)=>(m(),j(ti,Re(n,{inner:sg,"inner-type":"text","ml-type":"mltext","onUpdate:modelValue":l[0]||(l[0]=o=>a("update:modelValue",o))}),null,16))}}),rT=Z({__name:"MLTextareaField",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)=>(m(),j(ti,Re(n,{inner:ig,"inner-type":"textarea","ml-type":"mltextarea","onUpdate:modelValue":l[0]||(l[0]=o=>a("update:modelValue",o))}),null,16))}}),lT=Z({__name:"MLMarkdownField",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)=>(m(),j(ti,Re(n,{inner:ug,"inner-type":"markdown","ml-type":"mlmarkdown","onUpdate:modelValue":l[0]||(l[0]=o=>a("update:modelValue",o))}),null,16))}}),oT=["id","aria-describedby"],sT={key:0},iT={class:"font-mono text-text"},uT={key:1},cT={class:"font-mono text-text"},Ao="\0",dT=Z({__name:"UnsupportedField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},setup(e){const t=e,n=_(()=>{const[r="",l=""]=$("backend::lang.form.unsupported_field",{type:Ao}).split(Ao);return{before:r,after:l}}),a=_(()=>$("backend::lang.form.unsupported_field",{type:Ao}).includes(Ao));return(r,l)=>(m(),x("div",{id:e.controlId,"data-unsupported-field":"","aria-describedby":e.describedBy||void 0,class:"flex min-h-input items-center gap-2.5 rounded-control border-[1.5px] border-dashed border-border-strong bg-subtle px-3.5 text-[13px] text-muted"},[N(u(Wm),{size:16,"aria-hidden":"true"}),a.value?(m(),x("span",sT,[we(M(n.value.before),1),S("code",iT,M(t.field.type),1),we(M(n.value.after),1)])):(m(),x("span",uT,[we(M(u($)("backend::lang.form.unsupported_field"))+" ",1),S("code",cT,M(t.field.type),1)]))],8,oT))}}),fT=["id","aria-labelledby","aria-describedby","aria-busy"],pT={key:0,"data-widget-skeleton":"",class:"h-[42px] w-[160px] rounded-control bg-skel","aria-hidden":"true"},vT=Z({__name:"WidgetField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},setup(e){const t=e,n=rt(ud,null),a=rt(cd,()=>{}),r=rt(dd,null),l=rt(tg,()=>Promise.resolve([])),o=q("loading"),s=q(null);let i=null,c=!1,d=!1;function f(){const D=n?.value??{},A={};for(const B of t.field.fill??[])D[B]!==void 0&&(A[B]=D[B]);return A}const p=_(()=>JSON.stringify(f())),v=_(()=>r?.value||Br.value);function h(D){let A;return{promise:new Promise((V,U)=>{A=setTimeout(()=>U(new Error("widget element was not defined in time")),D)}),cancel:()=>clearTimeout(A)}}async function b(D){const A=await l();if(customElements.get(D))return;if(A.length>0)throw new Error(`plugin script failed: ${A.join(", ")}`);const B=h(ng);try{await Promise.race([customElements.whenDefined(D),B.promise])}finally{B.cancel()}}function g(D){Me(D||$("backend::lang.extension.action_failed"),"danger"),i?.setAttribute("state","error")}async function y(D){const A=t.source,B=i;if(!(!B||c||!A)){c=!0,B.setAttribute("busy",""),B.removeAttribute("state");try{const V=await Pe.POST("/{vendor}/{plugin}/{controller}/widgets/{field}",{params:{path:{...A,field:t.field.name}},body:{record_id:t.recordId??void 0,values:f(),...D===void 0?{}:{payload:D}}});if(V.data){const U=V.data.data,C=U.fill??{};for(const R of t.field.fill??[])Object.hasOwn(C,R)&&a(R,C[R]);d||(Object.hasOwn(U,"data")?B.setAttribute("data",JSON.stringify(U.data)):B.removeAttribute("data"),B.dispatchEvent(new CustomEvent(H8,{detail:{data:U.data,fill:C,message:U.message}}))),U.message&&Me(U.message)}else g(V.error?.error.message)}catch{g()}finally{c=!1,i?.removeAttribute("busy")}}}function k(D){const A=D.detail;if(A!==null&&typeof A=="object"&&Object.hasOwn(A,"payload"))return A.payload}function E(D){y(k(D))}return ft(async()=>{const D=t.field.widget??"";try{if(D===""||!t.source)throw new Error("widget field without a tag or controller");if(await b(D),d||!s.value)return;const A=document.createElement(D);A.setAttribute("record-id",t.recordId==null?"":String(t.recordId)),A.setAttribute("field-name",t.field.name),A.setAttribute("locale",v.value),A.setAttribute("fill-values",p.value),A.setAttribute("label",t.field.actionLabel||t.field.label||t.field.name),A.setAttribute("busy-label",$("backend::lang.extension.busy")),A.addEventListener(Bp,E),s.value.append(A),i=A,o.value="ready"}catch{d||(o.value="failed")}}),Ie(p,D=>i?.setAttribute("fill-values",D)),Ie(v,D=>i?.setAttribute("locale",D)),xt(()=>{d=!0,i?.removeEventListener(Bp,E),i=null}),(D,A)=>o.value==="failed"?(m(),j(ei,{key:0,id:e.controlId,"data-widget-failed":"","aria-describedby":e.describedBy||void 0,text:u($)("backend::lang.extension.widget_failed")},null,8,["id","aria-describedby","text"])):(m(),x("div",{key:1,id:e.controlId,role:"group","data-widget-host":"","aria-labelledby":e.field.label?`${e.controlId}-label`:void 0,"aria-describedby":e.describedBy||void 0,"aria-busy":o.value==="loading"?"true":void 0,class:"flex min-h-input items-center"},[o.value==="loading"?(m(),x("span",pT)):ee("",!0),S("div",{ref_key:"mountPoint",ref:s,class:"contents"},null,512)],8,fT))}}),rr="relation-manager",cg=new Map([[rr,()=>gP]]),dg=new Map([["text",sg],["textarea",ig],["number",TM],["dropdown",U8],["switch",WP],["checkbox",_8],["relation",LP],["widget",vT],["partial",RM],["fileupload",OM],["datepicker",V8],["password",NM],["permissioneditor",oO],["markdown",ug],["mltext",aT],["mltextarea",rT],["mlmarkdown",lT]]),mT=new Set(["switch","checkbox",rr]),hT=new Set([rr]),yT=new Set([rr,"widget","partial","fileupload"]),gT=new Set(["widget","partial","fileupload","permissioneditor","mltext","mltextarea","mlmarkdown"]);function bT(e){return dg.get(e)??cg.get(e)?.()??dT}function _T(e){return(dg.has(e)||cg.has(e))&&!yT.has(e)}function ri(e){return typeof e.element=="string"&&e.element!==""}function fg(e){return ri(e)?e.translatable?YM:ag:bT(e.type)}function xT(e){return ri(e)||_T(e.type)}function kT(e){return hT.has(e)}function wT(e){return mT.has(e)}function $T(e){return gT.has(e)}const CT=Z({__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=_(()=>fg(n.field));return(l,o)=>(m(),j(Vt(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]=s=>a("update:modelValue",s))},null,8,["field","model-value","control-id","invalid","described-by","labels","source","record-id"]))}}),ST=["data-field"],ET=["id"],AT={key:0,class:"text-danger","aria-hidden":"true"},DT=["for"],MT={key:0,class:"text-danger","aria-hidden":"true"},OT=["id"],PT=["id"],TT=["id"],qT=Z({__name:"FormField",props:{field:{},modelValue:{},errors:{},notices:{},labels:{},source:{},recordId:{},idPrefix:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=_(()=>`${n.idPrefix??"field"}-${n.field.name}`),l=_(()=>r.value),o=_(()=>`${r.value}-comment`),s=_(()=>`${r.value}-error`),i=_(()=>`${r.value}-notice`),c=_(()=>(n.errors?.length??0)>0),d=_(()=>(n.notices?.length??0)>0),f=_(()=>wT(n.field.type)),p=_(()=>$T(n.field.type)||ri(n.field)),v=_(()=>!f.value&&!!n.field.comment),h=_(()=>[v.value||f.value&&n.field.comment?o.value:"",c.value?s.value:"",d.value?i.value:""].filter(Boolean).join(" "));return(b,g)=>(m(),x("div",{class:"flex min-w-0 flex-col gap-1.5","data-field":e.field.name},[p.value&&e.field.label?(m(),x("span",{key:0,id:`${l.value}-label`,class:"font-semibold"},[we(M(e.field.label),1),e.field.required?(m(),x("span",AT," *")):ee("",!0)],8,ET)):!f.value&&!p.value?(m(),x("label",{key:1,for:l.value,class:"font-semibold"},[we(M(e.field.label||e.field.name),1),e.field.required?(m(),x("span",MT," *")):ee("",!0)],8,DT)):ee("",!0),N(CT,{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":g[0]||(g[0]=y=>a("update:modelValue",y))},null,8,["field","model-value","control-id","invalid","described-by","labels","source","record-id"]),v.value?(m(),x("p",{key:2,id:o.value,class:"text-[13px] text-muted"},M(e.field.comment),9,OT)):ee("",!0),d.value?(m(),x("div",{key:3,id:i.value,role:"status","data-field-notice":"",class:"summer-callout summer-callout--warning text-[13px]!"},[(m(!0),x(me,null,Oe(e.notices,(y,k)=>(m(),x("p",{key:k,class:"summer-callout__text"},M(y),1))),128))],8,PT)):ee("",!0),c.value?(m(),x("div",{key:4,id:s.value,class:"flex flex-col gap-0.5 text-[13px] text-danger"},[(m(!0),x(me,null,Oe(e.errors,(y,k)=>(m(),x("p",{key:k,class:"flex items-center gap-1.5"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(y),1)]))),128))],8,TT)):ee("",!0)],8,ST))}}),RT={class:"grid grid-cols-1 gap-x-6 gap-y-[22px] min-[600px]:grid-cols-2"},io=Z({__name:"FormGrid",props:{fields:{},values:{},errors:{},notices:{},labels:{},source:{},recordId:{},idPrefix:{}},emits:["update"],setup(e,{emit:t}){const n=t;function a(r){if(r.type===rr)return"col-span-full";switch(r.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(r,l)=>(m(),x("div",RT,[(m(!0),x(me,null,Oe(e.fields,o=>(m(),j(qT,{key:o.name,class:ge(a(o)),field:o,"model-value":e.values[o.name],errors:e.errors[o.name],notices:e.notices?.[o.name],labels:e.labels?.[o.name],source:e.source,"record-id":e.recordId,"id-prefix":e.idPrefix,"onUpdate:modelValue":s=>n("update",o.name,s)},null,8,["class","field","model-value","errors","notices","labels","source","record-id","id-prefix","onUpdate:modelValue"]))),128))]))}}),IT={class:"flex w-full flex-col gap-5 pb-24"},BT={class:"flex flex-wrap items-center gap-4"},FT={class:"flex min-w-0 flex-1 flex-col"},NT={class:"truncate text-[24px] font-bold tracking-[-0.02em]"},VT={key:0,class:"text-muted"},LT={key:0,role:"alert",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},jT=["id","role","aria-labelledby"],zT={class:"fixed inset-x-0 bottom-0 z-30 flex items-center gap-2.5 border-t border-border bg-surface px-8 py-3.5"},UT={class:"ml-auto flex items-center gap-2.5"},dl="field",jp=Z({__name:"FormView",setup(e){const t=sn(),n=jr(),a={vendor:String(t.params.vendor??""),plugin:String(t.params.plugin??""),controller:String(t.params.controller??"")},r=Ms(a),l=Cn(r)??"/",o=t.name==="create"?"create":"update",s=o==="update"?Number(t.params.id):null,i=q(null),c=q({}),d=q({}),f=q({}),p=q(null),v=q({}),h=q(!0),b=q(!1),g=q(!1),y=q(""),k=q(Ot),E=Ta();let D=!1,A=Promise.resolve([]);const B=Wl(),V={[$a]:B},U=q(0),C=q(0),{activeUploads:R,beginUpload:W}=fd(),T=_(()=>(i.value?.fields??[]).filter(se=>ai(se,o)&&(o==="update"||!kT(se.type)||se.type===rr&&!!se.deferrable))),L=_(()=>T.value.map(se=>se.name)),Y=_(()=>{if(!T.value.some(oe=>oe.tab))return[];const se=[];for(const oe of T.value){const be=kn(oe);let Ee=se.find(Fe=>Fe.key===be);Ee||(Ee={key:be,label:oe.tab||$("backend::lang.form.tab_default"),errors:0},be===Ot?se.unshift(Ee):se.push(Ee)),f.value[oe.name]&&(Ee.errors+=1)}return se}),I=_(()=>Math.max(Y.value.findIndex(se=>se.key===k.value),0)),le=_(()=>{if(Y.value.length===0)return T.value;const se=Y.value[I.value]?.key??Ot;return T.value.filter(oe=>kn(oe)===se)}),X=_(()=>og(i.value?.fields,c.value,br(i.value?.meta))),de=_(()=>{if(o==="update"&&X.value!=="")return X.value;const se=o==="create"?i.value?.messages.create:i.value?.messages.update;return Ve(se,void 0,{name:X.value})}),xe=_(()=>o==="update"?Ve(i.value?.messages.update,void 0,{name:X.value}):""),_e=_(()=>o==="update"&&!!i.value?.preview),ke=_(()=>_e.value?`${l}/${s}/preview`:l),fe=_(()=>!h.value&&(U.value>0||R.value>0||va(Jt(T.value,c.value,o))!==y.value));function Se(se){if(se){const oe=br(i.value?.meta),be={...se.data};for(const Ee of T.value)Ee.type==="password"?be[Ee.name]="":Ca(Ee)&&(be[Ee.name]=lg(se.data[Ee.name],oe));c.value=be,d.value=se.meta.labels??{}}y.value=va(Jt(T.value,c.value,o))}async function pe(){h.value=!0,b.value=!1;const se={path:a},[oe,be]=await Promise.all([Pe.GET("/{vendor}/{plugin}/{controller}/schema/form",{params:se}),s!==null?Pe.GET("/{vendor}/{plugin}/{controller}/{id}",{params:{path:{...a,id:s}}}):Promise.resolve(null)]);i.value=oe.data?.data??null,b.value=!oe.data||be!==null&&!be.data,i.value&&(A=ld(r,i.value.assets)),i.value&&o==="create"&&(c.value=pd(T.value,br(i.value.meta))),Se(be?.data),K.value=te(),k.value=Y.value[0]?.key??Ot,h.value=!1}const Ae=new Set,J=new Map,K=q("en");function te(){return br(i.value?.meta)[0]??"en"}function ie(se){const oe=se.detail;typeof oe=="string"&&oe!==""&&(K.value=oe)}Ie(k,()=>{K.value=te()});function ce(se,oe){return oe===void 0?Ae.has(se):J.get(se)?.has(oe)??!1}function he(se,oe){const be=c.value[se],Ee={...c.value,[se]:oe};if(Ae.add(se),Ca(T.value.find(Fe=>Fe.name===se))){let Fe=J.get(se);Fe||(Fe=new Set,J.set(se,Fe));for(const He of rg(be,oe))Fe.add(He)}if(o==="create"&&Object.assign(Ee,sO(T.value,se,be,oe,c.value,K.value,ce)),c.value=Ee,f.value[se]){const Fe={...f.value};delete Fe[se],f.value=Fe}}gt(ud,_(()=>c.value)),gt(cd,he),gt(dd,_(()=>i.value?.meta.locale||Br.value)),gt(is,_(()=>br(i.value?.meta))),gt(tg,()=>A),gt(el,{key:B,recordId:s??0,routes:se=>Qy(a,s??0,se,B),markDirty:()=>{U.value++},pendingChanges:mt(U),revision:mt(C),beginUpload:W,activeUploads:mt(R)});async function w(se){f.value=Sa(se?.details);const oe=T.value.filter(Ee=>f.value[Ee.name]),be=oe.find(Ee=>kn(Ee)===k.value)??oe[0];be&&(Y.value.length>0&&(k.value=kn(be)),await Ue(),ar(dl,be.name))}function O(se,oe){const be=i.value?.redirects,Ee=(be?.[o]?.[se]||be?.default)??"";return Ky(Ee,r,typeof oe=="number"||typeof oe=="string"?oe:null)}async function P(){if(g.value||!i.value||R.value>0)return null;g.value=!0,p.value=null,v.value={};try{const se=Jt(T.value,c.value,o),oe=s===null?await Pe.POST("/{vendor}/{plugin}/{controller}",{params:{path:a,header:V},body:se}):await Pe.PUT("/{vendor}/{plugin}/{controller}/{id}",{params:{path:{...a,id:s},header:V},body:se});if(oe.data){f.value={},Se(oe.data),v.value=iO(oe.data.meta.notices),U.value=0,C.value++;const be=Ve(i.value.messages.saved,void 0,{name:X.value}),Ee=Object.values(v.value).flat().join(" ");return Me(Ee===""?be:`${be} ${Ee}`),oe.data}return oe.response.status===422?await w(oe.error?.error):oe.response.status===403?(p.value=oe.error?.error.message||$("backend::lang.form.forbidden"),await w(oe.error?.error)):Me(oe.error?.error.message||$("backend::lang.form.error_generic"),"danger"),null}catch{return Me($("backend::lang.form.error_generic"),"danger"),null}finally{g.value=!1}}async function Q(se){D=!0;try{await n.push(se)}finally{D=!1}}async function G(){const se=await P();se&&o==="create"&&await Q(O("redirect",se.data.id))}async function ne(){const se=await P();se&&await Q(O("redirectClose",se.data.id))}async function $e(){if(!(s===null||g.value||!i.value||!await E.ask({message:Ve(i.value.messages.deleteConfirm,void 0,{name:X.value}),confirmLabel:$("backend::lang.form.delete"),danger:!0}))){g.value=!0;try{const oe=await Pe.DELETE("/{vendor}/{plugin}/{controller}/{id}",{params:{path:{...a,id:s}}});if(oe.data){Me(Ve(i.value.messages.deleted,void 0,{name:X.value})),await Q(l);return}const be=oe.response.status===403?"backend::lang.list.action_forbidden":"backend::lang.form.error_generic";Me(oe.error?.error.message||$(be),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{g.value=!1}}}async function ae(){return D||!fe.value?!0:E.ask({message:$("backend::lang.form.unsaved_confirm"),confirmLabel:$("backend::lang.form.discard"),danger:!0})}async function ue(){fe.value&&!await E.ask({message:$("backend::lang.form.unsaved_confirm"),confirmLabel:$("backend::lang.form.discard"),danger:!0})||await Q(ke.value)}E0(ae),A0(ae);function re(se){fe.value&&(se.preventDefault(),se.returnValue="")}return ft(()=>{window.addEventListener("beforeunload",re),window.addEventListener(Gl,ie)}),xt(()=>{window.removeEventListener("beforeunload",re),window.removeEventListener(Gl,ie)}),Xt(()=>Pm(h.value?"":de.value)),xt(Tm),pe(),(se,oe)=>(m(),x("section",IT,[S("header",BT,[N(Ke,{variant:"outline","data-action":"back","aria-label":u($)(_e.value?"backend::lang.form.return_to_preview":"backend::lang.form.return_to_list"),class:"size-10! px-0!",onClick:ue},{default:F(()=>[N(u(Ts),{size:18,"aria-hidden":"true"})]),_:1},8,["aria-label"]),S("div",FT,[S("h1",NT,M(h.value?"":de.value),1),xe.value?(m(),x("p",VT,M(xe.value),1)):ee("",!0)]),Y.value.length>0?(m(),j(vd,{key:0,modelValue:k.value,"onUpdate:modelValue":oe[0]||(oe[0]=be=>k.value=be),tabs:Y.value,"id-prefix":dl},null,8,["modelValue","tabs"])):ee("",!0)]),b.value&&!h.value?(m(),x("p",LT,M(u($)("backend::lang.form.load_failed")),1)):i.value?(m(),x(me,{key:1},[N(Qr,{errors:f.value,"field-names":L.value,forbidden:p.value},null,8,["errors","field-names","forbidden"]),S("form",{id:Y.value.length>0?u(ni)(dl,I.value):void 0,role:Y.value.length>0?"tabpanel":void 0,"aria-labelledby":Y.value.length>0?u(Yl)(dl,I.value):void 0,class:"rounded-card border border-border bg-surface p-7 shadow-card",novalidate:"",onSubmit:it(G,["prevent"])},[N(io,{fields:le.value,values:c.value,errors:f.value,notices:v.value,labels:d.value,source:a,"record-id":u(s),"id-prefix":dl,onUpdate:he},null,8,["fields","values","errors","notices","labels","record-id"])],40,jT)],64)):ee("",!0),S("footer",zT,[u(o)==="update"?(m(),j(Ke,{key:0,variant:"danger","data-action":"delete",icon:u(zr),disabled:g.value||h.value||!i.value,onClick:$e},{default:F(()=>[we(M(u($)("backend::lang.form.delete")),1)]),_:1},8,["icon","disabled"])):ee("",!0),S("div",UT,[N(Ke,{variant:"ghost","data-action":"cancel",onClick:ue},{default:F(()=>[we(M(u($)("backend::lang.form.cancel")),1)]),_:1}),N(Ke,{variant:"outline","data-action":"save-close",disabled:g.value||h.value||!i.value||u(R)>0,onClick:ne},{default:F(()=>[we(M(u($)("backend::lang.form.save_and_close")),1)]),_:1},8,["disabled"]),N(Ke,{variant:"primary","data-action":"save",disabled:g.value||h.value||!i.value||u(R)>0,onClick:G},{default:F(()=>[we(M(g.value?u($)("backend::lang.form.saving"):u($)("backend::lang.form.save")),1)]),_:1},8,["disabled"])])]),N(Pa,{open:u(E).request.value!==null,message:u(E).request.value?.message??"","confirm-label":u(E).request.value?.confirmLabel,danger:u(E).request.value?.danger,onConfirm:u(E).confirm,onCancel:u(E).cancel,"onUpdate:open":oe[1]||(oe[1]=be=>{be||u(E).cancel()})},null,8,["open","message","confirm-label","danger","onConfirm","onCancel"])]))}}),HT=["data-preview-field"],KT=["id"],WT={class:"m-0 min-w-0"},GT={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"},YT={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"},JT={class:"flex size-[22px] shrink-0 items-center justify-center rounded-full bg-primary text-[10px] font-bold text-on-primary","aria-hidden":"true"},ZT={class:"font-semibold"},QT={key:0,class:"px-2 text-muted","data-empty":""},XT={key:0},eq={key:1,class:"text-muted","data-empty":""},tq={key:0},nq={key:1,class:"text-muted","data-empty":""},ou="flex min-h-input items-center rounded-control border border-border bg-subtle px-3.5 [overflow-wrap:anywhere]",aq=Z({__name:"PreviewField",props:{field:{},value:{},labels:{},source:{},recordId:{},idPrefix:{}},setup(e){const t=e,n=new Set(["datepicker","fileupload","partial","permissioneditor"]),a=_(()=>`${t.idPrefix??"preview"}-${t.field.name}`),r=_(()=>`${a.value}-label`),l=_(()=>{const v=t.field.type;return n.has(v)||ri(t.field)?"control":v==="checkbox"||v==="switch"?"toggle":v==="relation"?t.field.multiple?"chips":"relation":v==="textarea"?"textarea":"text"}),o=_(()=>({...t.field,readOnly:!0})),s=_(()=>fg(t.field));function i(v){return v==null||v===""}const c=_(()=>{const v=t.value;if(i(v)||typeof v=="object")return"";if(t.field.type==="dropdown"){const h=(t.field.options??[]).find(b=>String(b.value)===String(v));return h?h.label:String(v)}return String(v)}),d=_(()=>t.labels?.[0]?.label??""),f=_(()=>Array.isArray(t.value)?t.labels??[]:[]);function p(v){return v.trim().split(/\s+/).filter(Boolean).slice(0,2).map(b=>b.charAt(0).toUpperCase()).join("")}return(v,h)=>(m(),x("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"},M(e.field.label||e.field.name),9,KT),S("dd",WT,[l.value==="control"?(m(),j(Vt(s.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"?(m(),x(me,{key:1},[u(id)(e.value)?(m(),x("span",GT,M(u($)("backend::lang.list.column_switch_true")),1)):(m(),x("span",YT,M(u($)("backend::lang.list.column_switch_false")),1))],64)):l.value==="chips"?(m(),x("div",{key:2,"data-preview-value":"",class:ge([ou,"flex-wrap gap-1.5 p-1.5"])},[(m(!0),x(me,null,Oe(f.value,b=>(m(),x("span",{key:String(b.value),"data-chip":"",class:"inline-flex min-h-[30px] items-center gap-1.5 rounded-pill bg-surface pr-3 pl-1"},[S("span",JT,M(p(b.label)),1),S("span",ZT,M(b.label),1)]))),128)),f.value.length===0?(m(),x("span",QT,M(u($)("backend::lang.list.empty_value")),1)):ee("",!0)])):l.value==="relation"?(m(),x("div",{key:3,"data-preview-value":"",class:ge(ou)},[d.value!==""?(m(),x("span",XT,M(d.value),1)):(m(),x("span",eq,M(e.field.emptyOption||u($)("backend::lang.list.empty_value")),1))])):(m(),x("div",{key:4,"data-preview-value":"",class:ge([ou,l.value==="textarea"?"items-start! py-3 whitespace-pre-wrap":""])},[c.value!==""?(m(),x("span",tq,M(c.value),1)):(m(),x("span",nq,M(u($)("backend::lang.list.empty_value")),1))],2))])],8,HT))}}),rq=Z({__name:"RecordActions",props:{source:{},recordId:{},actions:{},disabled:{type:Boolean,default:!1}},emits:["busy","done","stale","gone"],setup(e,{emit:t}){const n=e,a=t,r=Ta(),l=q(!1);async function o(s){if(l.value||n.disabled)return;let i=0,c=!1,d="";if(await r.ask({message:s.confirm||$("backend::lang.form.action_confirm",{action:s.label}),confirmLabel:s.label,danger:!1},async()=>{l.value=!0,a("busy",!0);try{const p=await Pe.POST("/{vendor}/{plugin}/{controller}/{id}/actions/{action}",{params:{path:{...n.source,id:n.recordId,action:s.name}},body:{}});i=p.response.status,c=!!p.data,d=p.data?.data.message??p.error?.error.message??""}catch{i=0}finally{l.value=!1,a("busy",!1)}})){if(c){a("done",d||$("backend::lang.form.action_done"));return}if(i===409){Me($("backend::lang.form.action_stale"),"danger"),a("stale");return}if(i===404){a("gone");return}if(i===403){Me(d||$("backend::lang.list.action_forbidden"),"danger");return}Me(d||$("backend::lang.extension.action_failed"),"danger")}}return(s,i)=>e.actions.length>0?(m(),x(me,{key:0},[(m(!0),x(me,null,Oe(e.actions,c=>(m(),j(Ke,{key:c.name,variant:"outline",size:"md","data-record-action":c.name,disabled:e.disabled||l.value,onClick:d=>o(c)},{default:F(()=>[we(M(c.label),1)]),_:2},1032,["data-record-action","disabled","onClick"]))),128)),N(Pa,{open:u(r).request.value!==null,message:u(r).request.value?.message??"","confirm-label":u(r).request.value?.confirmLabel,danger:u(r).request.value?.danger,busy:u(r).busy.value,onConfirm:u(r).confirm,onCancel:u(r).cancel},null,8,["open","message","confirm-label","danger","busy","onConfirm","onCancel"])],64)):ee("",!0)}}),lq={class:"flex w-full flex-col gap-5 pb-24","data-preview":""},oq={class:"flex flex-wrap items-center gap-4"},sq={class:"flex min-w-0 flex-1 flex-col"},iq={class:"truncate text-[24px] font-bold tracking-[-0.02em]"},uq={key:0,class:"text-muted"},cq={key:0,role:"alert",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},dq=["id","role","aria-labelledby"],fq={class:"m-0 grid grid-cols-1 gap-x-6 gap-y-[22px] min-[600px]:grid-cols-2"},pq={class:"fixed inset-x-0 bottom-0 z-30 flex flex-wrap items-center gap-2.5 border-t border-border bg-surface px-8 py-3.5"},vq={class:"ml-auto flex flex-wrap items-center gap-2.5"},Do="preview",mq=Z({__name:"PreviewView",setup(e){const t=sn(),n=jr(),a={vendor:String(t.params.vendor??""),plugin:String(t.params.plugin??""),controller:String(t.params.controller??"")},r=Ms(a),l=Cn(r)??"/",o=Number(t.params.id),s=`${l}/${o}`,i=q(null),c=q({}),d=q({}),f=q([]),p=q(!0),v=q(!1),h=q(!1),b=q(Ot),g=q(0),y=new Set(["password","widget",rr]),k=_(()=>(i.value?.fields??[]).filter(xe=>ai(xe,"preview")&&!y.has(xe.type))),E=_(()=>{if(!k.value.some(_e=>_e.tab))return[];const xe=[];for(const _e of k.value){const ke=kn(_e);if(xe.some(Se=>Se.key===ke))continue;const fe={key:ke,label:_e.tab||$("backend::lang.form.tab_default"),errors:0};ke===Ot?xe.unshift(fe):xe.push(fe)}return xe}),D=_(()=>Math.max(E.value.findIndex(xe=>xe.key===b.value),0)),A=_(()=>{if(E.value.length===0)return k.value;const xe=E.value[D.value]?.key??Ot;return k.value.filter(_e=>kn(_e)===xe)}),B=_(()=>og(i.value?.fields,c.value,br(i.value?.meta))),V=_(()=>Ve(i.value?.messages.preview,void 0,{name:B.value})),U=_(()=>i.value?.preview?.headerPartial??""),C=_(()=>!p.value&&!v.value&&i.value!==null);function R(xe){switch(xe.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"}}async function W(){try{const xe=await Pe.GET("/{vendor}/{plugin}/{controller}/{id}",{params:{path:{...a,id:o}}});return xe.data?(c.value={...xe.data.data},d.value=xe.data.meta.labels??{},f.value=xe.data.meta.actions??[],!0):!1}catch{return!1}}async function T(){p.value=!0,v.value=!1;const[xe,_e]=await Promise.all([Pe.GET("/{vendor}/{plugin}/{controller}/schema/form",{params:{path:a}}).catch(()=>null),W()]),ke=xe?.data?.data??null;if(ke&&!ke.preview){await n.replace(s);return}i.value=ke,v.value=!ke||!_e,ke&&ld(r,ke.assets),b.value=E.value[0]?.key??Ot,p.value=!1}async function L(){g.value++,await W()||(v.value=!0)}async function Y(xe){Me(xe),await L()}function I(){v.value=!0}const{activeUploads:le,beginUpload:X}=fd(),de=Wl();return gt(el,{key:de,recordId:o,routes:xe=>Qy(a,o,xe,de),markDirty:()=>{},pendingChanges:mt(q(0)),revision:mt(q(0)),beginUpload:X,activeUploads:mt(le)}),Xt(()=>Pm(p.value?"":B.value)),xt(Tm),T(),(xe,_e)=>(m(),x("section",lq,[S("header",oq,[N(Ke,{variant:"outline","data-action":"back",to:u(l),"aria-label":u($)("backend::lang.form.return_to_list"),class:"size-10! px-0!"},{default:F(()=>[N(u(Ts),{size:18,"aria-hidden":"true"})]),_:1},8,["to","aria-label"]),S("div",sq,[S("h1",iq,M(p.value?"":B.value),1),C.value&&V.value?(m(),x("p",uq,M(V.value),1)):ee("",!0)]),C.value&&E.value.length>0?(m(),j(vd,{key:0,modelValue:b.value,"onUpdate:modelValue":_e[0]||(_e[0]=ke=>b.value=ke),tabs:E.value,"id-prefix":Do},null,8,["modelValue","tabs"])):ee("",!0)]),v.value&&!p.value?(m(),x("p",cq,M(u($)("backend::lang.form.load_failed")),1)):C.value?(m(),x(me,{key:1},[U.value!==""?(m(),j(od,{key:0,variant:"header",hint:"",source:a,name:U.value,"record-id":u(o),"reload-key":g.value},null,8,["name","record-id","reload-key"])):ee("",!0),S("div",{id:E.value.length>0?u(ni)(Do,D.value):void 0,role:E.value.length>0?"tabpanel":void 0,"aria-labelledby":E.value.length>0?u(Yl)(Do,D.value):void 0,class:"rounded-card border border-border bg-surface p-7 shadow-card"},[S("dl",fq,[(m(!0),x(me,null,Oe(A.value,ke=>(m(),j(aq,{key:ke.name,class:ge(R(ke)),field:ke,value:c.value[ke.name],labels:d.value?.[ke.name],source:a,"record-id":u(o),"id-prefix":Do},null,8,["class","field","value","labels","record-id"]))),128))])],8,dq)],64)):ee("",!0),S("footer",pq,[S("div",vq,[C.value?(m(),j(rq,{key:0,source:a,"record-id":u(o),actions:f.value,disabled:h.value,onBusy:_e[1]||(_e[1]=ke=>h.value=ke),onDone:Y,onStale:L,onGone:I},null,8,["record-id","actions","disabled"])):ee("",!0),v.value?ee("",!0):(m(),j(Ke,{key:1,variant:"primary","data-action":"edit",icon:u(Sl),disabled:p.value||h.value,onClick:_e[2]||(_e[2]=ke=>u(n).push(s))},{default:F(()=>[we(M(u(Ve)(i.value?.messages.edit)),1)]),_:1},8,["icon","disabled"]))])])]))}}),hq={class:"flex w-full flex-col gap-5 pb-24"},yq={class:"flex items-center gap-4"},gq={class:"flex min-w-0 flex-col"},bq={class:"truncate text-[24px] font-bold tracking-[-0.02em]"},_q={key:0,class:"text-muted"},xq={key:0,role:"alert",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},kq={class:"fixed inset-x-0 bottom-0 z-30 flex items-center justify-end gap-2.5 border-t border-border bg-surface px-8 py-3.5"},zp="setting",wq=Z({__name:"SettingsFormView",setup(e){const t=sn(),n=String(t.params.code??""),a=q(null),r=q({}),l=q({}),o=q(!0),s=q(!1),i=q(!1),c=_(()=>(a.value?.fields??[]).filter(g=>ai(g,"update"))),d=_(()=>c.value.map(g=>g.name)),f=_(()=>Zo(n)?.label||a.value?.name||n),p=_(()=>Zo(n)?.description??"");async function v(){const g={path:{code:n}},[y,k]=await Promise.all([Pe.GET("/settings/{code}/schema",{params:g}),Pe.GET("/settings/{code}",{params:g})]);a.value=y.data?.data??null,r.value={...k.data?.data.data??{}},s.value=!y.data||!k.data,o.value=!1}function h(g,y){if(r.value={...r.value,[g]:y},l.value[g]){const k={...l.value};delete k[g],l.value=k}}async function b(){if(!(i.value||!a.value)){i.value=!0;try{const g=await Pe.PUT("/settings/{code}",{params:{path:{code:n}},body:Jt(c.value,r.value)});if(g.data){l.value={},r.value={...g.data.data.data},Me($("backend::lang.settings.saved"));return}if(g.response.status===422){l.value=Sa(g.error?.error.details);const y=c.value.find(k=>l.value[k.name]);await Ue(),y&&ar(zp,y.name);return}Me(g.error?.error.message||$("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{i.value=!1}}}return v(),(g,y)=>(m(),x("section",hq,[S("header",yq,[N(Ke,{variant:"outline","data-action":"back",to:"/settings","aria-label":u($)("backend::lang.settings.back"),class:"size-10! px-0!"},{default:F(()=>[N(u(Ts),{size:18,"aria-hidden":"true"})]),_:1},8,["aria-label"]),S("div",gq,[S("h1",bq,M(f.value),1),p.value?(m(),x("p",_q,M(p.value),1)):ee("",!0)])]),s.value&&!o.value?(m(),x("p",xq,M(u($)("backend::lang.form.load_failed")),1)):a.value?(m(),x(me,{key:1},[N(Qr,{errors:l.value,"field-names":d.value},null,8,["errors","field-names"]),S("form",{class:"rounded-card border border-border bg-surface p-7 shadow-card",novalidate:"",onSubmit:it(b,["prevent"])},[N(io,{fields:c.value,values:r.value,errors:l.value,source:null,"id-prefix":zp,onUpdate:h},null,8,["fields","values","errors"])],32)],64)):ee("",!0),S("footer",kq,[N(Ke,{variant:"ghost",to:"/settings"},{default:F(()=>[we(M(u($)("backend::lang.form.cancel")),1)]),_:1}),N(Ke,{variant:"primary","data-action":"save",disabled:i.value||o.value||!a.value,onClick:b},{default:F(()=>[we(M(i.value?u($)("backend::lang.form.saving"):u($)("backend::lang.form.save")),1)]),_:1},8,["disabled"])])]))}}),$q={class:"flex flex-col gap-5"},Cq={class:"text-[26px] font-bold tracking-[-0.02em]"},Sq={key:0,class:"text-muted"},Eq={key:0,class:"text-[13px] font-semibold tracking-[0.02em] text-muted uppercase"},Aq={class:"grid grid-cols-1 gap-3 min-[900px]:grid-cols-2"},Dq={class:"flex size-10 shrink-0 items-center justify-center rounded-inner bg-subtle text-muted"},Mq={class:"flex min-w-0 flex-col"},Oq={class:"font-semibold"},Pq={key:0,class:"text-[13px] text-muted"},Tq=Z({__name:"SettingsIndexView",setup(e){return(t,n)=>(m(),x("section",$q,[S("header",null,[S("h1",Cq,M(u($)("backend::lang.settings.title")),1)]),u(Df).length===0?(m(),x("p",Sq,M(u($)("backend::lang.settings.empty")),1)):ee("",!0),(m(!0),x(me,null,Oe(u(Df),a=>(m(),x("section",{key:a.category,"data-settings-group":"",class:"flex flex-col gap-3"},[a.category?(m(),x("h2",Eq,M(a.category),1)):ee("",!0),S("div",Aq,[(m(!0),x(me,null,Oe(a.entries,r=>(m(),j(u($n),{key:r.code,to:u(Im)(r),"data-settings":r.code,class:"flex items-start gap-3.5 rounded-card border border-border bg-surface p-5 text-text no-underline shadow-card hover:bg-hover"},{default:F(()=>[S("span",Dq,[(m(),j(Vt(u(Fs)(r.icon)),{size:20,"aria-hidden":"true"}))]),S("span",Mq,[S("span",Oq,M(r.label),1),r.description?(m(),x("span",Pq,M(r.description),1)):ee("",!0)])]),_:2},1032,["to","data-settings"]))),128))])]))),128))]))}}),qq={class:"flex items-start gap-3"},Rq={class:"flex min-w-0 flex-1 flex-col gap-1"},Iq=["disabled","aria-label"],Bq=["disabled"],Fq={class:"flex min-w-0 flex-col gap-1.5","data-field":"name"},Nq=["for"],Vq=["id","placeholder","aria-invalid","aria-describedby"],Lq=["id"],jq=["id"],zq={class:"flex min-w-0 flex-col gap-1.5","data-field":"expires"},Uq={id:"api-token-expires-label",class:"font-semibold"},Hq={class:"text-[13px] text-muted tabular-nums"},Kq={class:"flex min-w-0 flex-col gap-1.5","data-field":"scopes"},Wq={id:"api-token-scopes-label",class:"font-semibold"},Gq={key:0,role:"group","aria-labelledby":"api-token-scopes-label","data-scope-picker":"",class:"overflow-hidden rounded-inner border border-border"},Yq={key:1,role:"alert",class:"flex items-start gap-2 rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},Jq=["aria-invalid"],Zq=["data-scope"],Qq=["checked","disabled","onChange"],Xq={class:"flex min-w-0 flex-col"},eR={class:"flex flex-wrap items-center gap-1"},tR={class:"font-semibold"},nR={class:"font-mono text-[13px] text-muted"},aR={key:0,class:"inline-flex h-6 items-center rounded-pill bg-subtle px-2.5 text-[13px] font-semibold whitespace-nowrap text-muted"},rR={class:"text-[13px] text-muted [overflow-wrap:anywhere]"},lR={key:3,class:"flex items-center gap-2 text-[13px] text-muted"},oR=["id"],sR={class:"flex gap-2.5"},iR={key:1,class:"flex min-h-0 flex-col gap-4"},uR={class:"flex min-w-0 flex-col gap-2"},cR=["for"],dR=["id","value"],fR={class:"flex flex-wrap items-center gap-2"},pR={key:0,role:"alert",class:"flex items-center gap-1.5 text-[13px] text-danger"},vR={class:"sr-only","aria-live":"polite"},mR={class:"flex justify-end"},fn="api-token",hR=Z({__name:"ApiTokenCreateDialog",props:{open:{type:Boolean},confirm:{}},emits:["update:open","created","closed"],setup(e,{emit:t}){const n=e,a=t,r=[{value:"30d",label:"backend::lang.api_tokens.expires_30"},{value:"90d",label:"backend::lang.api_tokens.expires_90"},{value:"365d",label:"backend::lang.api_tokens.expires_365"},{value:"never",label:"backend::lang.api_tokens.expires_never"}],l=q(1),o=q(""),s=q("90d"),i=q(new Set),c=q([]),d=q(!1),f=q(!1),p=q(!1),v=q({}),h=q(""),b=q(!1),g=q(!1),y=q(!1),k=q("");let E=null;const D=q(null),A=q(null),B=q(null),V=_(()=>i.value.has("*")),U=_(()=>!d.value&&!f.value&&c.value.length>0&&!p.value);function C(P){return String(P).padStart(2,"0")}function R(P){const Q=new Date;return Q.setDate(Q.getDate()+P),`${Q.getFullYear()}-${C(Q.getMonth()+1)}-${C(Q.getDate())}`}const W=_(()=>{if(s.value==="never")return $("backend::lang.api_tokens.expires_never_note");const P=s.value==="30d"?30:s.value==="365d"?365:90;return $("backend::lang.api_tokens.expires_on",{date:R(P)})});function T(){h.value="",b.value=!1,g.value=!1,y.value=!1,k.value="",E!==null&&(clearTimeout(E),E=null)}function L(){l.value=1,o.value="",s.value="90d",i.value=new Set,v.value={},p.value=!1,f.value=!1,T()}function Y(P){a("update:open",P)}async function I(){d.value=!0,f.value=!1,c.value=[];try{const P=await Pe.GET("/account/tokens/scopes");if(P.data){const Q=P.data.data??[];c.value=Q,f.value=Q.length===0;return}f.value=!0}catch{f.value=!0}finally{d.value=!1}}Ie(()=>n.open,P=>{P?(L(),I()):(T(),l.value=1)});function le(P,Q){const G=new Set(i.value);if(P==="*"?Q?(G.clear(),G.add("*")):G.delete("*"):V.value||(Q?G.add(P):G.delete(P)),i.value=G,v.value.scopes){const ne={...v.value};delete ne.scopes,v.value=ne}}function X(P){return V.value&&P!=="*"}function de(){return V.value?["*"]:c.value.map(P=>P.name).filter(P=>i.value.has(P))}function xe(){const P=[`${fn}-name-comment`,v.value.name?`${fn}-name-error`:""].filter(Boolean);return P.length?P.join(" "):void 0}async function _e(){if(await Ue(),v.value.name){ar(fn,"name");return}if(v.value.scopes){const P=c.value.find(G=>!X(G.name));(P?document.querySelector(`[data-scope="${CSS.escape(P.name)}"] input[type="checkbox"]`):null)?.focus();return}v.value.expires&&document.querySelector("[data-expiry-segment]")?.focus()}async function ke(){if(!(p.value||!U.value||l.value!==1)){p.value=!0,v.value={};try{const P=await Pe.POST("/account/tokens",{body:{name:o.value,expires:s.value,scopes:de()}});if(P.data){h.value=P.data.data.token,l.value=2,a("created"),await Ue(),B.value?.querySelector("button")?.focus()??B.value?.focus();return}if(P.response.status===422){v.value=Sa(P.error?.error.details),await _e();return}Me($("backend::lang.api_tokens.create_failed"),"danger")}catch{Me($("backend::lang.api_tokens.create_failed"),"danger")}finally{p.value=!1}}}function fe(){b.value=!0,g.value=!1,y.value=!0,k.value=$("backend::lang.api_tokens.copied_announce"),E!==null&&clearTimeout(E),E=setTimeout(()=>{y.value=!1,E=null},2e3)}async function Se(){const P=h.value;if(P)try{if(!navigator.clipboard?.writeText)throw new Error("clipboard unavailable");await navigator.clipboard.writeText(P),fe()}catch{g.value=!0,await Ue(),A.value?.focus(),A.value?.select()}}function pe(){fe()}function Ae(P){P.target.select()}async function J(){T(),Y(!1)}async function K(){p.value||l.value===2&&h.value&&!b.value&&!await n.confirm.ask({message:$("backend::lang.api_tokens.close_uncopied_confirm"),confirmLabel:$("backend::lang.api_tokens.close_uncopied_submit"),danger:!0})||await J()}function te(P){if(!P){K();return}Y(!0)}function ie(P){if(P.preventDefault(),l.value===2){B.value?.querySelector("button")?.focus()??B.value?.focus();return}D.value?.focus()}function ce(P){P.preventDefault(),a("closed")}function he(P){(l.value===2||p.value)&&P.preventDefault()}function w(P){if(p.value){P.preventDefault();return}l.value===2&&(P.preventDefault(),K())}function O(){J()}return xt(()=>{T()}),(P,Q)=>(m(),j(u(Kr),{open:e.open,"onUpdate:open":te},{default:F(()=>[N(u(oo),null,{default:F(()=>[N(u(Gr),{"data-dialog-overlay":"",class:"fixed inset-0 z-40 bg-overlay"}),N(u(Wr),{"data-token-dialog":"","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 rounded-modal bg-surface p-6 text-text shadow-pop",onOpenAutoFocus:ie,onCloseAutoFocus:ce,onPointerDownOutside:he,onInteractOutside:he,onEscapeKeyDown:w},{default:F(()=>[S("div",qq,[S("div",Rq,[N(u(Yr),{class:"text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[we(M(l.value===1?u($)("backend::lang.api_tokens.create_title"):u($)("backend::lang.api_tokens.created_title")),1)]),_:1}),l.value===1?(m(),j(u(Qa),{key:0,class:"text-muted"},{default:F(()=>[we(M(u($)("backend::lang.api_tokens.create_description")),1)]),_:1})):(m(),j(u(Qa),{key:1,"data-token-notice":"",role:"note",class:"flex items-start gap-2 rounded-inner bg-sel px-4 py-3.5 text-text"},{default:F(()=>[N(u(Jm),{size:16,class:"mt-0.5 shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.api_tokens.created_notice")),1)]),_:1}))]),S("button",{type:"button","data-action":"close",disabled:p.value,"aria-label":u($)("backend::lang.form.close"),class:"flex size-[34px] shrink-0 items-center justify-center rounded-tab bg-subtle text-muted hover:bg-hover hover:text-text disabled:cursor-not-allowed disabled:opacity-60",onClick:K},[N(u(Ht),{size:16,"aria-hidden":"true"})],8,Iq)]),l.value===1?(m(),x("form",{key:0,novalidate:"",class:"flex min-h-0 flex-col gap-4",onSubmit:it(ke,["prevent"])},[S("fieldset",{disabled:p.value,class:"flex min-h-0 flex-col gap-[18px] overflow-y-auto"},[S("div",Fq,[S("label",{for:`${fn}-name`,class:"font-semibold"},M(u($)("backend::lang.api_tokens.name")),9,Nq),ha(S("input",{id:`${fn}-name`,ref_key:"nameInput",ref:D,"onUpdate:modelValue":Q[0]||(Q[0]=G=>o.value=G),name:"name",type:"text",maxlength:"100",autocomplete:"off",placeholder:u($)("backend::lang.api_tokens.name_placeholder"),"aria-invalid":v.value.name?"true":void 0,"aria-describedby":xe(),class:ge([u(Tt)(!!v.value.name),"h-input"])},null,10,Vq),[[Fl,o.value]]),S("p",{id:`${fn}-name-comment`,class:"text-[13px] text-muted"},M(u($)("backend::lang.api_tokens.name_comment")),9,Lq),v.value.name?(m(),x("div",{key:0,id:`${fn}-name-error`,class:"flex flex-col gap-0.5 text-[13px] text-danger"},[(m(!0),x(me,null,Oe(v.value.name,(G,ne)=>(m(),x("p",{key:ne,class:"flex items-center gap-1.5"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(G),1)]))),128))],8,jq)):ee("",!0)]),S("div",zq,[S("span",Uq,M(u($)("backend::lang.api_tokens.expires")),1),N(u($y),{modelValue:s.value,"onUpdate:modelValue":Q[1]||(Q[1]=G=>s.value=G),orientation:"horizontal","aria-labelledby":"api-token-expires-label",class:"inline-flex flex-wrap gap-1 rounded-inner border border-border bg-subtle p-1"},{default:F(()=>[(m(),x(me,null,Oe(r,G=>N(u(Cy),{key:G.value,value:G.value,"data-expiry-segment":"",class:"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 data-[state=checked]:bg-surface data-[state=checked]:text-text data-[state=checked]:shadow-tab data-[state=checked]:text-[14px] data-[state=checked]:font-semibold"},{default:F(()=>[we(M(u($)(G.label)),1)]),_:2},1032,["value"])),64))]),_:1},8,["modelValue"]),S("p",Hq,M(W.value),1)]),S("div",Kq,[S("span",Wq,M(u($)("backend::lang.api_tokens.scopes")),1),d.value?(m(),x("div",Gq,[(m(),x(me,null,Oe(3,G=>S("div",{key:G,class:"flex min-h-[56px] items-center gap-3 border-t border-border px-4 py-3 first:border-t-0","aria-hidden":"true"},[...Q[2]||(Q[2]=[S("span",{class:"size-5 shrink-0 rounded-[6px] bg-skel"},null,-1),S("span",{class:"h-3 w-40 rounded-[6px] bg-skel"},null,-1)])])),64))])):f.value?(m(),x("div",Yq,[N(u(ct),{size:16,class:"mt-0.5 shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.api_tokens.scopes_failed")),1)])):(m(),x("div",{key:2,role:"group","aria-labelledby":"api-token-scopes-label","data-scope-picker":"","aria-invalid":v.value.scopes?"true":void 0,class:ge([v.value.scopes?"border-danger":"border-border","overflow-hidden rounded-inner border"])},[(m(!0),x(me,null,Oe(c.value,G=>(m(),x("label",{key:G.name,"data-scope":G.name,class:ge([X(G.name)?"cursor-not-allowed opacity-60":"cursor-pointer","flex min-h-[56px] items-start gap-3 border-t border-border px-4 py-3 first:border-t-0"])},[S("input",{type:"checkbox",class:"mt-0.5 size-5 shrink-0 rounded-[6px] accent-primary",checked:i.value.has(G.name),disabled:X(G.name),onChange:ne=>le(G.name,ne.target.checked)},null,40,Qq),S("span",Xq,[S("span",eR,[S("span",tR,M(G.label),1),S("span",nR,M(G.name),1),G.read_only?(m(),x("span",aR,M(u($)("backend::lang.api_tokens.read_only")),1)):ee("",!0)]),S("span",rR,M(G.description),1)])],10,Zq))),128))],10,Jq)),V.value?(m(),x("p",lR,[N(u(xc),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.api_tokens.scope_all_includes")),1)])):ee("",!0),v.value.scopes?(m(),x("div",{key:4,id:`${fn}-scopes-error`,class:"flex flex-col gap-0.5 text-[13px] text-danger"},[(m(!0),x(me,null,Oe(v.value.scopes,(G,ne)=>(m(),x("p",{key:ne,class:"flex items-center gap-1.5"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(G),1)]))),128))],8,oR)):ee("",!0)])],8,Bq),S("div",sR,[N(Ke,{variant:"outline",class:"flex-1","data-action":"create-token-cancel",disabled:p.value,onClick:K},{default:F(()=>[we(M(u($)("backend::lang.api_tokens.create_cancel")),1)]),_:1},8,["disabled"]),N(Ke,{variant:"primary",type:"submit",class:"flex-1","data-action":"create-token-submit",disabled:!U.value},{default:F(()=>[p.value?(m(),j(u(Cl),{key:0,size:16,class:"animate-spin","aria-hidden":"true"})):ee("",!0),we(" "+M(p.value?u($)("backend::lang.api_tokens.creating"):u($)("backend::lang.api_tokens.create_submit")),1)]),_:1},8,["disabled"])])],32)):(m(),x("div",iR,[S("div",uR,[S("label",{for:`${fn}-plaintext`,class:"sr-only"},M(u($)("backend::lang.api_tokens.token_label")),9,cR),S("input",{id:`${fn}-plaintext`,ref_key:"plaintextInput",ref:A,value:h.value,type:"text",readonly:"",autocomplete:"off",spellcheck:"false","data-token-plaintext":"",class:ge([u(Tt)(!1),"h-input bg-subtle font-mono text-[14px]"]),onFocus:Ae,onClick:Ae,onCopy:pe},null,42,dR),S("div",fR,[S("span",{ref_key:"copyButton",ref:B},[N(Ke,{variant:"outline",size:"sm",icon:y.value?u(ba):u(Lm),"data-action":"copy-token",onClick:Se},{default:F(()=>[we(M(y.value?u($)("backend::lang.api_tokens.copied"):u($)("backend::lang.api_tokens.copy")),1)]),_:1},8,["icon"])],512),g.value?(m(),x("p",pR,[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.api_tokens.copy_failed")),1)])):ee("",!0),S("span",vR,M(k.value),1)])]),S("div",mR,[N(Ke,{variant:"primary","data-action":"hide-token",onClick:O},{default:F(()=>[we(M(u($)("backend::lang.api_tokens.done")),1)]),_:1})])]))]),_:1})]),_:1})]),_:1},8,["open"]))}}),yR={"data-api-tokens":"",class:"flex flex-col gap-4 rounded-card border border-border bg-surface p-7 shadow-card"},gR={class:"flex flex-wrap items-start justify-between gap-4"},bR={class:"flex min-w-0 flex-col gap-1"},_R={class:"text-[18px] font-bold"},xR={class:"max-w-[640px] text-[13px] text-muted"},kR={key:0,class:"flex items-center gap-2"},wR=["checked"],$R={key:1,role:"list","data-token-list":"","aria-busy":"true",class:"flex flex-col overflow-hidden rounded-inner border border-border"},CR={key:2,role:"alert","data-tokens-error":"",class:"flex items-start gap-2 rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},SR={key:3,"data-tokens-empty":"",class:"flex flex-col items-center gap-2 rounded-inner border border-dashed border-border-strong px-6 py-8 text-center"},ER={class:"flex size-10 items-center justify-center rounded-full bg-subtle text-muted"},AR={class:"font-semibold"},DR={class:"max-w-[420px] text-[13px] text-muted"},MR={key:4,role:"list","data-token-list":"",class:"flex flex-col overflow-hidden rounded-inner border border-border"},OR=["data-token-row"],PR={class:"flex min-w-0 flex-1 flex-col gap-2"},TR={class:"flex flex-wrap items-center gap-2"},qR=["aria-label"],RR={key:0,class:"inline-flex h-6 items-center rounded-pill bg-danger-soft px-2.5 text-[13px] font-semibold whitespace-nowrap text-danger"},IR={key:1,class:"inline-flex h-6 items-center rounded-pill border border-border-strong px-2.5 text-[13px] font-semibold whitespace-nowrap text-muted"},BR={"data-token-scopes":"",class:"flex flex-wrap gap-2"},FR=["title"],NR=Z({__name:"ApiTokensPanel",props:{confirm:{}},setup(e){const t=e,n=q([]),a=q(!0),r=q(!0),l=q(!1),o=q(!1),s=q(!1),i=q(null);function c(A){return String(A).padStart(2,"0")}function d(A){return typeof A=="string"&&A!==""}function f(A){const B=new Date(A);return Number.isNaN(B.getTime())?A:`${B.getFullYear()}-${c(B.getMonth()+1)}-${c(B.getDate())}`}function p(A){const B=new Date(A);return Number.isNaN(B.getTime())?A:`${f(A)} ${c(B.getHours())}:${c(B.getMinutes())}`}function v(A){const B=[$("backend::lang.api_tokens.created_at",{date:f(A.created_at)})];return d(A.last_used_at)?B.push($("backend::lang.api_tokens.last_used",{date:p(A.last_used_at)})):B.push($("backend::lang.api_tokens.never_used")),A.expired&&d(A.expires_at)?B.push($("backend::lang.api_tokens.expired_at",{date:f(A.expires_at)})):d(A.expires_at)?B.push($("backend::lang.api_tokens.expires_at",{date:f(A.expires_at)})):B.push($("backend::lang.api_tokens.no_expiry")),d(A.revoked_at)&&B.push($("backend::lang.api_tokens.revoked_at",{date:p(A.revoked_at)})),B.join(" · ")}function h(A){return d(A.revoked_at)}async function b(){a.value=!0,l.value=!1;try{const A=await Pe.GET("/account/tokens",{params:{query:o.value?{revoked:"1"}:{}}});if(A.data){n.value=A.data.data??[];return}l.value=!0,n.value=[]}catch{l.value=!0,n.value=[]}finally{a.value=!1,r.value=!1}}function g(A){o.value=A.target.checked,b()}function y(){s.value=!0}async function k(){await Ue(),i.value?.querySelector("button")?.focus()??i.value?.focus()}async function E(){await b()}async function D(A){await t.confirm.ask({message:$("backend::lang.api_tokens.revoke_confirm",{name:A.name}),confirmLabel:$("backend::lang.api_tokens.revoke_submit"),danger:!0},async()=>{const B=await Pe.DELETE("/account/tokens/{id}",{params:{path:{id:A.id}}});if(B.data){await b(),Me($("backend::lang.api_tokens.revoked")),await Ue(),i.value?.querySelector("button")?.focus()??i.value?.focus();return}if(B.response.status===404){Me($("backend::lang.api_tokens.gone"),"danger"),await b();return}Me($("backend::lang.api_tokens.revoke_failed"),"danger")})}return ft(()=>{b()}),(A,B)=>(m(),x("div",yR,[S("div",gR,[S("div",bR,[S("h2",_R,M(u($)("backend::lang.api_tokens.section")),1),S("p",xR,M(u($)("backend::lang.api_tokens.section_comment")),1)]),S("span",{ref_key:"createButton",ref:i},[N(Ke,{variant:"outline",size:"sm",icon:u(Rs),"data-action":"create-token",disabled:r.value&&a.value,onClick:y},{default:F(()=>[we(M(u($)("backend::lang.api_tokens.create")),1)]),_:1},8,["icon","disabled"])],512)]),!l.value&&!r.value?(m(),x("label",kR,[S("input",{type:"checkbox","data-show-revoked":"",class:"size-5 shrink-0 rounded-[6px] accent-primary",checked:o.value,onChange:g},null,40,wR),S("span",null,M(u($)("backend::lang.api_tokens.show_revoked")),1)])):ee("",!0),a.value?(m(),x("div",$R,[(m(),x(me,null,Oe(3,V=>S("div",{key:V,role:"listitem",class:"flex flex-col gap-2 border-t border-border px-4 py-3.5 first:border-t-0","aria-hidden":"true"},[...B[1]||(B[1]=[S("span",{class:"h-3 w-40 rounded-[6px] bg-skel"},null,-1),S("span",{class:"h-3 w-64 rounded-[6px] bg-skel"},null,-1)])])),64))])):l.value?(m(),x("div",CR,[N(u(ct),{size:16,class:"mt-0.5 shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.api_tokens.load_failed")),1)])):n.value.length===0?(m(),x("div",SR,[S("span",ER,[N(u(vk),{size:20,"aria-hidden":"true"})]),S("p",AR,M(u($)("backend::lang.api_tokens.empty_title")),1),S("p",DR,M(u($)("backend::lang.api_tokens.empty_body")),1)])):(m(),x("div",MR,[(m(!0),x(me,null,Oe(n.value,V=>(m(),x("div",{key:V.id,role:"listitem","data-token-row":V.id,class:"flex items-start justify-between gap-4 border-t border-border px-4 py-3.5 first:border-t-0 max-sm:flex-col"},[S("div",PR,[S("div",TR,[S("span",{class:ge([h(V)?"text-muted":"text-text","font-semibold [overflow-wrap:anywhere]"])},M(V.name),3),S("span",{class:"font-mono text-[13px] text-muted","aria-label":u($)("backend::lang.api_tokens.hint",{last4:V.hint})},"g15_…"+M(V.hint),9,qR),V.expired&&!h(V)?(m(),x("span",RR,M(u($)("backend::lang.api_tokens.state_expired")),1)):ee("",!0),h(V)?(m(),x("span",IR,M(u($)("backend::lang.api_tokens.state_revoked")),1)):ee("",!0)]),S("div",BR,[(m(!0),x(me,null,Oe(V.scopes,U=>(m(),x("span",{key:U.name,title:U.known?U.name:u($)("backend::lang.api_tokens.unknown_scope_hint"),class:ge([U.known?"bg-subtle text-text":"border border-dashed border-border-strong font-mono text-muted","inline-flex h-6 items-center rounded-pill px-2.5 text-[13px] font-semibold whitespace-nowrap"])},M(U.known?U.name==="*"?u($)("backend::lang.api_tokens.scope_all"):U.label:u($)("backend::lang.api_tokens.unknown_scope",{name:U.name})),11,FR))),128))]),S("p",{class:ge([(h(V),"text-muted"),"text-[13px] tabular-nums"])},M(v(V)),3)]),h(V)?ee("",!0):(m(),j(Ke,{key:0,variant:"danger",size:"sm",icon:u(F_),"data-action":"revoke-token",class:"max-sm:self-start","aria-label":u($)("backend::lang.api_tokens.revoke_named",{name:V.name}),onClick:U=>D(V)},{default:F(()=>[we(M(u($)("backend::lang.api_tokens.revoke")),1)]),_:1},8,["icon","aria-label","onClick"]))],8,OR))),128))])),N(hR,{open:s.value,"onUpdate:open":B[0]||(B[0]=V=>s.value=V),confirm:e.confirm,onCreated:E,onClosed:k},null,8,["open","confirm"])]))}}),VR={class:"flex w-full flex-col gap-5 pb-24","data-account":""},LR={class:"flex min-w-0 flex-col"},jR={class:"truncate text-[24px] font-bold tracking-[-0.02em]"},zR={class:"text-muted"},UR={class:"flex flex-col gap-3 rounded-card border border-border bg-surface p-7 shadow-card","data-account-avatar":""},HR={class:"text-[18px] font-bold"},KR={class:"flex flex-wrap items-center gap-5"},WR=["src"],GR={key:1,"aria-hidden":"true","data-account-avatar-initials":"",class:"flex size-20 shrink-0 items-center justify-center rounded-full bg-accent text-[26px] font-bold text-on-accent"},YR={class:"flex flex-col gap-2"},JR={class:"flex flex-wrap gap-2.5"},ZR={class:"text-[13px] text-muted"},QR={key:0,role:"alert","data-avatar-error":"",class:"flex flex-col gap-0.5 text-[13px] text-danger"},XR={class:"flex flex-col gap-[18px]"},eI={class:"mb-[18px] text-[18px] font-bold"},tI={class:"flex min-w-0 flex-col gap-1.5"},nI=["for"],aI=["id","value"],rI={class:"grid grid-cols-1 gap-[18px] md:grid-cols-2"},lI=["data-field"],oI=["for"],sI=["id","name","type","autocomplete","value","aria-invalid","aria-describedby","onInput"],iI=["id"],uI=["id"],cI={class:"flex flex-col gap-[18px]"},dI={class:"mb-1.5 text-[18px] font-bold"},fI={class:"text-[13px] text-muted"},pI={class:"grid grid-cols-1 gap-[18px] md:grid-cols-3"},vI=["data-field"],mI=["for"],hI=["id","name","autocomplete","value","aria-invalid","aria-describedby","onInput"],yI=["id"],gI={class:"fixed inset-x-0 bottom-0 z-30 flex items-center justify-end gap-2.5 border-t border-border bg-surface px-8 py-3.5"},Up="account",bI="image/jpeg,image/png,image/gif,image/webp",_I=Z({__name:"AccountView",setup(e){const t=[{name:"first_name",label:"backend::lang.myaccount.first_name",type:"text",autocomplete:"given-name"},{name:"last_name",label:"backend::lang.myaccount.last_name",type:"text",autocomplete:"family-name"},{name:"email",label:"backend::lang.myaccount.email",type:"email",autocomplete:"email"},{name:"subtitle",label:"backend::lang.myaccount.subtitle",type:"text",autocomplete:"organization-title",comment:"backend::lang.myaccount.subtitle_comment"}],n=[{name:"current_password",label:"backend::lang.myaccount.current_password",type:"password",autocomplete:"current-password"},{name:"password",label:"backend::lang.myaccount.password",type:"password",autocomplete:"new-password"},{name:"password_confirmation",label:"backend::lang.myaccount.password_confirmation",type:"password",autocomplete:"new-password"}],a=[...t,...n].map(R=>R.name);function r(){const R=Bt.value;return{first_name:R?.first_name??"",last_name:R?.last_name??"",email:R?.email??"",subtitle:R?.subtitle??""}}const l=q(r()),o=q({current_password:"",password:"",password_confirmation:""}),s=q({}),i=q(!1),c=_(()=>Bt.value?.login??""),d=q(null),f=q(!1),p=q([]),v=_(()=>Bt.value?.avatar?.thumb_url||Bt.value?.avatar?.url||""),h=_(()=>qy(Bt.value)),b=Ta();function g(){d.value?.click()}async function y(R){const W=R.target,T=W.files?.[0];if(W.value="",!(!T||f.value)){f.value=!0,p.value=[];try{const L=await Pe.POST("/account/avatar",{body:{file_data:""},bodySerializer:()=>{const Y=new FormData;return Y.append("file_data",T,T.name),Y}});if(L.data){Qi(L.data.data),Me($("backend::lang.myaccount.avatar_saved"));return}if(L.response.status===422){const Y=Sa(L.error?.error.details);p.value=Y.avatar??Object.values(Y).flat();return}if(L.response.status===413){p.value=[$("backend::lang.myaccount.avatar_hint")];return}Me($("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{f.value=!1}}}async function k(){if(!(f.value||!await b.ask({message:$("backend::lang.myaccount.avatar_remove_confirm"),confirmLabel:$("backend::lang.myaccount.avatar_remove"),danger:!0}))){f.value=!0,p.value=[];try{const W=await Pe.DELETE("/account/avatar");if(W.data){Qi(W.data.data),Me($("backend::lang.myaccount.avatar_removed"));return}Me($("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{f.value=!1}}}function E(R){return`${Up}-${R}`}function D(R){const T=[R.comment?`${E(R.name)}-comment`:"",s.value[R.name]?`${E(R.name)}-error`:""].filter(Boolean).join(" ");return T===""?void 0:T}function A(R){if(s.value[R]){const W={...s.value};delete W[R],s.value=W}}function B(R,W){l.value={...l.value,[R]:W},A(R)}function V(R,W){o.value={...o.value,[R]:W},A(R)}function U(){const R={first_name:l.value.first_name,last_name:l.value.last_name,email:l.value.email,subtitle:l.value.subtitle};return o.value.password!==""&&(R.current_password=o.value.current_password,R.password=o.value.password,R.password_confirmation=o.value.password_confirmation),R}async function C(){if(!i.value){i.value=!0;try{const R=await Pe.PUT("/account",{body:U()});if(R.data){s.value={},Qi(R.data.data),l.value=r(),o.value={current_password:"",password:"",password_confirmation:""},Me($("backend::lang.myaccount.saved"));return}if(R.response.status===422){s.value=Sa(R.error?.error.details);const W=a.find(T=>s.value[T]);await Ue(),W&&ar(Up,W);return}Me($("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{i.value=!1}}}return(R,W)=>(m(),x("section",VR,[S("header",LR,[S("h1",jR,M(u($)("backend::lang.myaccount.menu_label")),1),S("p",zR,M(u($)("backend::lang.myaccount.menu_description")),1)]),N(Qr,{errors:s.value,"field-names":u(a)},null,8,["errors","field-names"]),S("div",UR,[S("h2",HR,M(u($)("backend::lang.myaccount.avatar")),1),S("div",KR,[v.value?(m(),x("img",{key:0,src:v.value,alt:"","data-account-avatar-image":"",class:"size-20 shrink-0 rounded-full object-cover"},null,8,WR)):(m(),x("span",GR,M(h.value),1)),S("div",YR,[S("div",JR,[N(Ke,{variant:"outline",size:"sm",icon:u(sk),"data-action":"avatar-upload",disabled:f.value,onClick:g},{default:F(()=>[we(M(u($)("backend::lang.myaccount.avatar_upload")),1)]),_:1},8,["icon","disabled"]),u(Bt)?.avatar?(m(),j(Ke,{key:0,variant:"danger",size:"sm",icon:u(zr),"data-action":"avatar-remove",disabled:f.value,onClick:k},{default:F(()=>[we(M(u($)("backend::lang.myaccount.avatar_remove")),1)]),_:1},8,["icon","disabled"])):ee("",!0)]),S("p",ZR,M(u($)("backend::lang.myaccount.avatar_hint")),1)]),S("input",{ref_key:"avatarInput",ref:d,type:"file",name:"file_data",accept:bI,class:"hidden","data-account-avatar-input":"",onChange:y},null,544)]),p.value.length>0?(m(),x("div",QR,[(m(!0),x(me,null,Oe(p.value,(T,L)=>(m(),x("p",{key:L,class:"flex items-center gap-1.5"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(T),1)]))),128))])):ee("",!0)]),S("form",{class:"flex flex-col gap-7 rounded-card border border-border bg-surface p-7 shadow-card",novalidate:"",onSubmit:it(C,["prevent"])},[S("fieldset",XR,[S("legend",eI,M(u($)("backend::lang.myaccount.profile")),1),S("div",tI,[S("label",{for:E("login"),class:"font-semibold"},M(u($)("backend::lang.myaccount.login")),9,nI),S("input",{id:E("login"),name:"login",type:"text",value:c.value,readonly:"","data-account-login":"",class:ge([u(Tt)(!1),"h-input bg-hover text-muted"])},null,10,aI)]),S("div",rI,[(m(),x(me,null,Oe(t,T=>S("div",{key:T.name,class:"flex min-w-0 flex-col gap-1.5","data-field":T.name},[S("label",{for:E(T.name),class:"font-semibold"},M(u($)(T.label)),9,oI),S("input",{id:E(T.name),name:T.name,type:T.type,autocomplete:T.autocomplete,value:l.value[T.name],"aria-invalid":s.value[T.name]?"true":void 0,"aria-describedby":D(T),class:ge([u(Tt)(!!s.value[T.name]),"h-input"]),onInput:L=>B(T.name,L.target.value)},null,42,sI),T.comment?(m(),x("p",{key:0,id:`${E(T.name)}-comment`,class:"text-[13px] text-muted"},M(u($)(T.comment)),9,iI)):ee("",!0),s.value[T.name]?(m(),x("div",{key:1,id:`${E(T.name)}-error`,class:"flex flex-col gap-0.5 text-[13px] text-danger"},[(m(!0),x(me,null,Oe(s.value[T.name],(L,Y)=>(m(),x("p",{key:Y,class:"flex items-center gap-1.5"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(L),1)]))),128))],8,uI)):ee("",!0)],8,lI)),64))])]),S("fieldset",cI,[S("legend",dI,M(u($)("backend::lang.myaccount.password_section")),1),S("p",fI,M(u($)("backend::lang.myaccount.password_comment")),1),S("div",pI,[(m(),x(me,null,Oe(n,T=>S("div",{key:T.name,class:"flex min-w-0 flex-col gap-1.5","data-field":T.name},[S("label",{for:E(T.name),class:"font-semibold"},M(u($)(T.label)),9,mI),S("input",{id:E(T.name),name:T.name,type:"password",autocomplete:T.autocomplete,value:o.value[T.name],"aria-invalid":s.value[T.name]?"true":void 0,"aria-describedby":D(T),class:ge([u(Tt)(!!s.value[T.name]),"h-input"]),onInput:L=>V(T.name,L.target.value)},null,42,hI),s.value[T.name]?(m(),x("div",{key:0,id:`${E(T.name)}-error`,class:"flex flex-col gap-0.5 text-[13px] text-danger"},[(m(!0),x(me,null,Oe(s.value[T.name],(L,Y)=>(m(),x("p",{key:Y,class:"flex items-center gap-1.5"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(L),1)]))),128))],8,yI)):ee("",!0)],8,vI)),64))])])],32),N(NR,{confirm:u(b)},null,8,["confirm"]),N(Pa,{open:u(b).request.value!==null,message:u(b).request.value?.message??"","confirm-label":u(b).request.value?.confirmLabel,danger:u(b).request.value?.danger,busy:u(b).busy.value,onConfirm:u(b).confirm,onCancel:u(b).cancel},null,8,["open","message","confirm-label","danger","busy","onConfirm","onCancel"]),S("footer",gI,[N(Ke,{variant:"primary","data-action":"save",disabled:i.value,onClick:C},{default:F(()=>[we(M(i.value?u($)("backend::lang.form.saving"):u($)("backend::lang.form.save")),1)]),_:1},8,["disabled"])])]))}}),xI={class:"flex flex-col items-center gap-2 py-20 text-center"},kI={class:"text-[17px] font-bold"},Hp=Z({__name:"NotFoundView",props:{home:{type:Boolean}},setup(e){return(t,n)=>(m(),x("section",xI,[S("h1",kI,M(e.home?u($)("backend::lang.nav.empty"):u($)("backend::lang.page.not_found")),1)]))}});function pg(e){return typeof e!="string"||e.length===0||!e.startsWith("/")||e.startsWith("//")||e.startsWith("/\\")?null:e}const wI=new Set(["list","create","record","preview"]);function $I(e){if(typeof e.name!="string"||!wI.has(e.name))return"";const{vendor:t,plugin:n,controller:a}=e.params;return typeof t!="string"||typeof n!="string"||typeof a!="string"?"":Ms({vendor:t,plugin:n,controller:a})}function CI(e=T0(Ps.base)){const t=Q0({history:e,routes:[{path:"/login",name:"login",component:p5,meta:{public:!0}},{path:"/",name:"home",component:Hp,props:{home:!0},meta:{shell:!0},beforeEnter:()=>g_()??!0},{path:"/settings",name:"settings",component:Tq,meta:{shell:!0}},{path:"/settings/:code",name:"settings-form",component:wq,meta:{shell:!0}},{path:"/account",name:"account",component:_I,meta:{shell:!0}},{path:"/:vendor/:plugin/:controller",name:"list",component:a8,meta:{shell:!0}},{path:"/:vendor/:plugin/:controller/create",name:"create",component:jp,meta:{shell:!0}},{path:"/:vendor/:plugin/:controller/:id(\\d+)",name:"record",component:jp,meta:{shell:!0}},{path:"/:vendor/:plugin/:controller/:id(\\d+)/preview",name:"preview",component:mq,meta:{shell:!0}},{path:"/:pathMatch(.*)*",name:"not-found",component:Hp,meta:{shell:!0}}]});return t.beforeEach(n=>{const a=Bt.value!==null;return n.meta.public?a&&n.name==="login"?pg(n.query.redirect)??"/":!0:a?!0:{name:"login",query:{redirect:n.fullPath}}}),t.afterEach((n,a,r)=>{r||QA($I(n))}),t}const SI="(prefers-color-scheme: dark)";function EI(e=window){const t=e.document.documentElement;if(typeof e.matchMedia!="function")return t.classList.remove("dark"),()=>{};const n=e.matchMedia(SI),a=l=>{t.classList.toggle("dark",l)};a(n.matches);const r=l=>a(l.matches);return n.addEventListener("change",r),()=>n.removeEventListener("change",r)}async function AI(){EI(),await m_().catch(()=>{}),await Ty().catch(()=>null)&&await Promise.all([qm().catch(()=>[]),Rm().catch(()=>[]),Hy()]);const t=CI();u_(()=>kA(t));const n=G1(JA);n.use(t),await t.isReady(),n.mount("#app")}AI(); +${n}`;if(!Vy(n)||Yu.has(a))continue;const r=document.createElement("link");r.rel="stylesheet",r.setAttribute(ZA,e),r.disabled=!zy(e),r.href=n,Yu.set(a,{owner:e,link:r}),document.head.appendChild(r)}}function QA(e){Fy=e;for(const{owner:t,link:n}of Yu.values())n.disabled=!zy(t)}function zy(e){return e===By||e===Fy}function XA(e){jy(By,e)}async function ld(e,t){jy(e,t?.styles??[]);const n=t?.scripts??[],a=await Promise.allSettled(n.map(r=>Ly(r)));return n.filter((r,l)=>a[l]?.status==="rejected")}const Uy=new Map;async function Hy(){let e=[];try{const{data:t,response:n}=await Pe.GET("/field-types");e=n.ok&&t?t.data:[]}catch{return[]}for(const t of e){XA(t.styles??[]);const n=t.scripts??[];Uy.set(t.element,Promise.allSettled(n.map(a=>Ly(a))).then(a=>n.filter((r,l)=>a[l]?.status==="rejected")))}return e}function e5(e){return Uy.get(e)??Promise.resolve([])}const t5={class:"flex min-h-screen items-center justify-center px-4",style:{background:"radial-gradient(ellipse at 50% 35%, #2b3a5c 0%, #1d2740 60%)"}},n5={class:"flex w-full max-w-[400px] flex-col gap-6"},a5={class:"flex items-center justify-center gap-3"},r5={class:"flex size-[34px] items-center justify-center rounded-full bg-accent-soft"},l5={class:"text-[22px] font-bold tracking-[-0.02em]"},o5={class:"flex flex-col gap-1.5"},s5={class:"font-semibold"},i5={class:"flex flex-col gap-1.5"},u5={class:"font-semibold"},c5=["aria-invalid"],d5={key:0,role:"alert",class:"flex items-center gap-2.5 rounded-control bg-[#fdf0f0] px-3.5 py-3 text-[#c62828]"},f5=["disabled"],p5=Z({__name:"LoginView",setup(e){const t=sn(),n=jr(),a=q(""),r=q(""),l=q(!1),o=q(!1);async function s(){if(!o.value){o.value=!0,l.value=!1;try{if(!await xA(a.value.trim(),r.value)||!await Ty()){l.value=!0;return}r.value="",await Promise.all([qm(),Rm().catch(()=>[]),Hy()]),await n.replace(pg(t.query.redirect)??"/")}finally{o.value=!1}}}return(i,c)=>(m(),x("main",t5,[S("div",n5,[S("div",a5,[S("span",r5,[N(u(Bs),{size:20,class:"text-accent","aria-hidden":"true"})]),c[2]||(c[2]=S("span",{class:"text-[18px] font-bold text-white"},[we("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:it(s,["prevent"])},[S("h1",l5,M(u($)("backend::lang.auth.title")),1),S("label",o5,[S("span",s5,M(u($)("backend::lang.auth.login")),1),ha(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),[[Fl,a.value]])]),S("label",i5,[S("span",u5,M(u($)("backend::lang.auth.password")),1),ha(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:ge([l.value?"border-[#c62828]":"border-[#d2d8e2]","h-input rounded-control border bg-white px-3.5"])},null,10,c5),[[Fl,r.value]])]),l.value?(m(),x("div",d5,[N(u(ct),{size:18,"aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.auth.invalid")),1)])):ee("",!0),S("button",{type:"submit",disabled:o.value,class:"h-input rounded-control bg-[#22304d] font-semibold text-white disabled:opacity-60"},M(u($)("backend::lang.auth.submit")),9,f5)],32)])]))}}),qp=/^\d+$/;function Ky(e,t,n){const a=Ds(t),r=Cn(t);if(!a||!r)return"/";const o=((e??"").trim().split(/[?#]/,1)[0]??"").split("/").filter(d=>d!==""),s=[a.vendor,a.plugin,a.controller];if(!s.every((d,f)=>o[f]?.toLowerCase()===d.toLowerCase()))return r;const c=o.slice(s.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 qp.test(d)?`${r}/${d}`:r}if(c.length===2&&c[0]==="preview"){const d=c[1]===":id"?String(n??""):c[1]??"";return qp.test(d)?`${r}/${d}/preview`:r}return r}const v5={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"},m5={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"},h5={key:1,class:"text-muted","data-empty":""},y5={key:2,class:"text-[13px] text-muted tabular-nums"},fr=Z({__name:"CellValue",props:{column:{},value:{}},setup(e){const t=e;function n(f){return f==null||f===""}function a(f){return n(f)?"":Array.isArray(f)?f.map(a).filter(p=>p!=="").join(", "):typeof f=="boolean"?$(f?"backend::lang.list.column_switch_true":"backend::lang.list.column_switch_false"):typeof f=="object"?"":String(f)}function r(f){return String(f).padStart(2,"0")}function l(f){if(typeof f!="string"&&typeof f!="number")return"";const p=new Date(f);return Number.isNaN(p.getTime())?String(f):`${p.getFullYear()}-${r(p.getMonth()+1)}-${r(p.getDate())} ${r(p.getHours())}:${r(p.getMinutes())}`}function o(f){if(typeof f!="string")return"";const p=/^\d{4}-\d{2}-\d{2}/.exec(f.trim());return p?p[0]:f.trim()}function s(f){if(typeof f!="string")return"";const p=/(\d{2}):(\d{2})/.exec(f);return p?`${p[1]}:${p[2]}`:f.trim()}function i(f){return typeof f=="string"?f!==""&&f!=="0"&&f.toLowerCase()!=="false":!!f}const c=_(()=>t.column.type==="switch"?"switch":t.column.type==="datetime"?"datetime":t.column.type==="date"?"date":t.column.type==="time"?"time":"text"),d=_(()=>{switch(c.value){case"datetime":return l(t.value);case"date":return o(t.value);case"time":return s(t.value);default:return a(t.value)}});return(f,p)=>c.value==="switch"&&!n(e.value)?(m(),x(me,{key:0},[i(e.value)?(m(),x("span",v5,[N(u(Fm),{size:14,"aria-hidden":"true"}),we(M(u($)("backend::lang.list.column_switch_true")),1)])):(m(),x("span",m5,M(u($)("backend::lang.list.column_switch_false")),1))],64)):d.value===""?(m(),x("span",h5,"—")):c.value==="datetime"||c.value==="date"||c.value==="time"?(m(),x("span",y5,M(d.value),1)):(m(),x(me,{key:3},[we(M(d.value),1)],64))}}),g5={key:0,class:"flex shrink-0 gap-2"},b5=["data-row-state"],_5=Z({__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=_(()=>a.filter(l=>t.states.includes(l)));return(l,o)=>r.value.length>0?(m(),x("span",g5,[(m(!0),x(me,null,Oe(r.value,s=>(m(),x("span",{key:s,"data-row-state":s,class:ge([n[s],"inline-flex h-6 shrink-0 items-center rounded-pill px-2.5 text-[12px] font-semibold whitespace-nowrap"])},M(e.labels[s]??s),11,b5))),128))])):ee("",!0)}}),x5={class:"overflow-x-auto"},k5={class:"sticky top-0 z-10"},w5={class:"h-row-head border-y border-border bg-subtle"},$5={key:0,scope:"col","data-select":"",class:"w-[52px] pl-5"},C5=["aria-checked","aria-label","disabled"],S5=["aria-sort"],E5=["data-sort","onClick"],A5={key:1,class:"w-[56px] pr-5"},D5=["aria-busy"],M5={key:0,class:"pl-5"},O5={key:1,class:"pr-5"},P5={key:1},T5=["colspan"],q5={class:"text-muted"},R5=["aria-selected","data-row-states","onClick"],I5={key:0,"data-select":"",class:"pl-5"},B5=["aria-checked","aria-label","onClick"],F5={key:0,class:"flex items-center gap-3"},N5={"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"},V5=["onClick"],L5={key:1,class:"flex items-center gap-2"},j5={key:1,"data-trailing":"",class:"w-[56px] pr-5"},Wy=Z({__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=jr();function l(L){const Y=L.id;return typeof Y=="number"||typeof Y=="string"?Y:null}function o(L,Y){const I=l(L);return I===null?`row-${Y}`:String(I)}function s(L){return n.rowLink?n.rowLink(L):null}function i(L,Y){if(L.target?.closest("a, button, input, label, select"))return;if(n.openable){const X=L.currentTarget?.querySelector("[data-row-open]")??null;a("open",Y,X);return}const le=s(Y);le&&r.push(le)}const c=_(()=>n.rows.map(l).filter(L=>L!==null)),d=_(()=>new Set(n.selected.map(String))),f=_(()=>{const L=c.value,Y=L.filter(I=>d.value.has(String(I))).length;return Y===0?"false":Y===L.length?"true":"mixed"});function p(L){const Y=l(L);return Y!==null&&d.value.has(String(Y))}function v(){a("update:selected",f.value==="true"?[]:[...c.value])}function h(L){const Y=l(L);Y!==null&&(d.value.has(String(Y))?a("update:selected",n.selected.filter(I=>String(I)!==String(Y))):a("update:selected",[...n.selected,Y]))}function b(L){if(n.sort?.column===L.key)return n.sort.dir==="desc"?"descending":"ascending"}function g(L){return n.sortable&&L.sortable}const y=_(()=>n.variant==="relation"),k=_(()=>y.value?"h-[56px]":"h-row"),E=_(()=>y.value?3:8);function D(L){return(typeof L=="string"||typeof L=="number"?String(L):"").split(/[\s@._-]+/).filter(Boolean).slice(0,2).map(I=>I.charAt(0).toUpperCase()).join("")}const A=["deleted","negative","disabled"];function B(L){const Y=l(L),I=Y===null?void 0:n.rowStates[String(Y)];return Array.isArray(I)?A.filter(le=>I.includes(le)):[]}function V(L,Y,I=[]){const le=I.includes("deleted")||I.includes("disabled");return Y===0?le?"font-semibold text-muted":"font-semibold":le||y.value||L.relation?"text-muted":""}function U(L){return["min-w-0 truncate",L.includes("deleted")?"line-through":"no-underline",L.includes("negative")?"text-danger":L.includes("deleted")||L.includes("disabled")?"text-muted":"text-text"]}const C=_(()=>n.columns.filter(L=>!L.invisible)),R=_(()=>Math.max(C.value.length+(n.selectable?1:0)+(n.trailing?1:0),1));function W(L,Y){a("open",Y,L.currentTarget)}const T=["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(L,Y)=>(m(),x("div",x5,[S("table",{class:ge([y.value?"min-w-[480px]":"min-w-[640px]","w-full border-collapse text-left"])},[S("thead",k5,[S("tr",w5,[e.selectable?(m(),x("th",$5,[S("button",{type:"button",role:"checkbox","aria-checked":f.value,"aria-label":u($)("backend::lang.list.select_all"),disabled:e.loading||c.value.length===0,class:ge([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:v},[f.value==="mixed"?(m(),j(u(Um),{key:0,size:14,"aria-hidden":"true"})):f.value==="true"?(m(),j(u(ba),{key:1,size:14,"aria-hidden":"true"})):ee("",!0)],10,C5)])):ee("",!0),(m(!0),x(me,null,Oe(C.value,I=>(m(),x("th",{key:I.key,scope:"col","aria-sort":g(I)?b(I)??"none":void 0,class:ge([b(I)?"text-text":"text-muted","px-3.5 text-[12px] font-semibold first:pl-5 last:pr-5"])},[g(I)?(m(),x("button",{key:0,type:"button","data-sort":I.key,class:"inline-flex items-center gap-1 font-semibold",onClick:le=>a("sort",I.key)},[we(M(I.label)+" ",1),b(I)==="ascending"?(m(),j(u(Nm),{key:0,size:14,"aria-hidden":"true"})):b(I)==="descending"?(m(),j(u(Bm),{key:1,size:14,"aria-hidden":"true"})):ee("",!0)],8,E5)):(m(),x(me,{key:1},[we(M(I.label),1)],64))],10,S5))),128)),e.trailing?(m(),x("td",A5)):ee("",!0)])]),S("tbody",{"aria-busy":e.loading?"true":void 0},[e.loading?(m(!0),x(me,{key:0},Oe(E.value,I=>(m(),x("tr",{key:`skeleton-${I}`,"data-skeleton":"",class:ge([k.value,"border-b border-border"])},[e.selectable?(m(),x("td",M5,[...Y[0]||(Y[0]=[S("span",{class:"block size-[18px] rounded-checkbox bg-skel"},null,-1)])])):ee("",!0),(m(!0),x(me,null,Oe(C.value,le=>(m(),x("td",{key:le.key,class:"px-3.5 first:pl-5 last:pr-5"},[S("span",{class:ge([T[(I-1)%T.length],"block h-3 rounded-[6px] bg-skel"])},null,2)]))),128)),e.trailing?(m(),x("td",O5)):ee("",!0)],2))),128)):e.rows.length===0?(m(),x("tr",P5,[S("td",{colspan:R.value,class:"px-5 py-20 text-center"},[ye(L.$slots,"empty",{},()=>[S("span",q5,M(u($)("backend::lang.list.no_records")),1)])],8,T5)])):(m(!0),x(me,{key:2},Oe(e.rows,(I,le)=>(m(),x("tr",{key:o(I,le),class:ge([[k.value,p(I)?"bg-sel":s(I)||e.openable?"hover:bg-hover":"",s(I)||e.openable?"cursor-pointer":""],"border-b border-border transition-colors duration-150 ease-out"]),"aria-selected":e.selectable?p(I)?"true":"false":void 0,"data-row-states":B(I).length>0?B(I).join(" "):void 0,onClick:X=>i(X,I)},[e.selectable?(m(),x("td",I5,[S("button",{type:"button",role:"checkbox","aria-checked":p(I)?"true":"false","aria-label":u($)("backend::lang.list.select_row"),class:ge([p(I)?"border-primary bg-primary text-on-primary":"border-border-strong bg-surface","flex size-[18px] items-center justify-center rounded-checkbox border"]),onClick:X=>h(I)},[p(I)?(m(),j(u(ba),{key:0,size:14,"aria-hidden":"true"})):ee("",!0)],10,B5)])):ee("",!0),(m(!0),x(me,null,Oe(C.value,(X,de)=>(m(),x("td",{key:X.key,class:ge([V(X,de,B(I)),"px-3.5 first:pl-5 last:pr-5"])},[y.value&&de===0?(m(),x("span",F5,[S("span",N5,M(D(I[X.key])),1),e.openable?(m(),x("button",{key:0,type:"button","data-row-open":"",class:"min-w-0 truncate text-left font-semibold text-text",onClick:xe=>W(xe,I)},[N(fr,{column:X,value:I[X.key]},null,8,["column","value"])],8,V5)):(m(),j(fr,{key:1,column:X,value:I[X.key]},null,8,["column","value"]))])):de===0&&B(I).length>0?(m(),x("span",L5,[s(I)?(m(),j(u($n),{key:0,to:s(I),class:ge(U(B(I)))},{default:F(()=>[N(fr,{column:X,value:I[X.key]},null,8,["column","value"])]),_:2},1032,["to","class"])):(m(),x("span",{key:1,class:ge(U(B(I)))},[N(fr,{column:X,value:I[X.key]},null,8,["column","value"])],2)),N(_5,{states:B(I),labels:e.stateLabels},null,8,["states","labels"])])):de===0&&s(I)?(m(),j(u($n),{key:2,to:s(I),class:"text-text no-underline"},{default:F(()=>[N(fr,{column:X,value:I[X.key]},null,8,["column","value"])]),_:2},1032,["to"])):(m(),j(fr,{key:3,column:X,value:I[X.key]},null,8,["column","value"]))],2))),128)),e.trailing?(m(),x("td",j5,[ye(L.$slots,"trailing",{row:I})])):ee("",!0)],10,R5))),128))],8,D5)],2)]))}}),z5=["aria-label"],U5={key:0,class:"flex flex-col gap-1 text-[13px]"},H5={class:"font-semibold text-muted"},K5=["data-filter","value","onChange"],W5=["value"],G5={key:1,class:"flex flex-col gap-1 text-[13px]"},Y5={class:"mb-1 font-semibold text-muted"},J5={class:"flex items-center gap-2"},Z5=["data-filter","aria-label","value","onChange"],Q5=["data-filter","aria-label","value","onChange"],X5={key:2,class:"flex flex-col gap-1 text-[13px]"},e6={class:"font-semibold text-muted"},t6=["data-filter","value","onChange"],n6=["value"],ul="",Co="h-button rounded-control border border-border-strong bg-surface px-3 text-text",a6=Z({__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(v=>({value:JSON.stringify(v.value),label:v.label}));const p=[];return f.trueValue!==void 0&&p.push({value:JSON.stringify(f.trueValue),label:$("backend::lang.list.column_switch_true")}),f.falseValue!==void 0&&p.push({value:JSON.stringify(f.falseValue),label:$("backend::lang.list.column_switch_false")}),p}const l=q({});async function o(f){const{data:p}=await Pe.GET("/{vendor}/{plugin}/{controller}/filters/{scope}/options",{params:{path:{...n.source,scope:f.name}}});l.value={...l.value,[f.name]:p?.data??[]}}ft(()=>{for(const f of n.filters)f.type==="scope"&&o(f)});const s=nn({});function i(){for(const f of n.filters){if(f.type!=="daterange")continue;const[p="",v=""]=(n.values[f.name]??"").split(".."),h=s[f.name];(!h||n.values[f.name]!==void 0||h.from!==""&&h.to!=="")&&(s[f.name]={from:p,to:v})}}Ie(()=>n.values,i,{immediate:!0,deep:!0});function c(f,p,v){const h={...s[f.name]??{from:"",to:""},[p]:v};s[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,p){a("update",f.name,p===ul?null:p)}return(f,p)=>(m(),x("div",{role:"group","aria-label":u($)("backend::lang.list.filters"),"data-filter-bar":"",class:"flex flex-wrap items-end gap-4 border-t border-border px-5 py-3.5"},[(m(!0),x(me,null,Oe(e.filters,v=>(m(),x(me,{key:v.name},[v.type==="switch"?(m(),x("label",U5,[S("span",H5,M(v.label||v.name),1),S("select",{"data-filter":v.name,value:e.values[v.name]??ul,class:ge(Co),onChange:h=>d(v,h.target.value)},[S("option",{value:ul},M(u($)("backend::lang.list.filter_all")),1),(m(!0),x(me,null,Oe(r(v),h=>(m(),x("option",{key:h.value,value:h.value},M(h.label),9,W5))),128))],40,K5)])):v.type==="daterange"?(m(),x("fieldset",G5,[S("legend",Y5,M(v.label||v.name),1),S("div",J5,[S("input",{type:"date","data-filter":`${v.name}-from`,"aria-label":u($)("backend::lang.list.filter_from"),value:s[v.name]?.from??"",class:ge(Co),onChange:h=>c(v,"from",h.target.value)},null,40,Z5),p[0]||(p[0]=S("span",{"aria-hidden":"true"},"–",-1)),S("input",{type:"date","data-filter":`${v.name}-to`,"aria-label":u($)("backend::lang.list.filter_to"),value:s[v.name]?.to??"",class:ge(Co),onChange:h=>c(v,"to",h.target.value)},null,40,Q5)])])):v.type==="scope"?(m(),x("label",X5,[S("span",e6,M(v.label||v.name),1),(m(),x("select",{key:`${v.name}-${l.value[v.name]?.length??-1}`,"data-filter":v.name,value:e.values[v.name]??ul,class:ge(Co),onChange:h=>d(v,h.target.value)},[S("option",{value:ul},M(u($)("backend::lang.list.filter_all")),1),(m(!0),x(me,null,Oe(l.value[v.name]??[],h=>(m(),x("option",{key:h.value,value:h.value},M(h.label),9,n6))),128))],40,t6))])):ee("",!0)],64))),128))],8,z5))}}),r6=["type","disabled"],Ke=Z({__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=_(()=>["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?(m(),j(u($n),{key:0,to:e.to,class:ge(a.value)},{default:F(()=>[e.icon?(m(),j(Vt(e.icon),{key:0,size:16,"aria-hidden":"true"})):ee("",!0),ye(r.$slots,"default")]),_:3},8,["to","class"])):(m(),x("button",{key:1,type:e.type,disabled:e.disabled,class:ge(a.value)},[e.icon?(m(),j(Vt(e.icon),{key:0,size:16,"aria-hidden":"true"})):ee("",!0),ye(r.$slots,"default")],10,r6))}}),l6=Z({__name:"BulkActionsMenu",props:{actions:{},disabled:{type:Boolean}},emits:["select"],setup(e,{expose:t,emit:n}){const a=n,r=q(null);function l(){const o=r.value?.$el;o instanceof HTMLElement&&o.focus()}return t({focus:l}),(o,s)=>(m(),j(u(_y),{modal:!1},{default:F(()=>[N(u(wy),{"as-child":"",disabled:e.disabled},{default:F(()=>[N(Ke,{ref_key:"trigger",ref:r,variant:"outline",size:"md","data-action":"bulk-actions",disabled:e.disabled},{default:F(()=>[we(M(u($)("backend::lang.list.bulk_actions"))+" ",1),N(u(to),{size:16,class:"text-muted","aria-hidden":"true"})]),_:1},8,["disabled"])]),_:1},8,["disabled"]),N(u(ky),null,{default:F(()=>[N(u(xy),{"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(()=>[(m(!0),x(me,null,Oe(e.actions,i=>(m(),j(u(Hu),{key:i.name,"data-bulk-action":i.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",i.name)},{default:F(()=>[we(M(i.label),1)]),_:2},1032,["data-bulk-action","onSelect"]))),128))]),_:1})]),_:1})]),_:1}))}}),o6={class:"flex flex-wrap items-center justify-between gap-3 px-5 py-4"},s6={key:0,class:"relative block w-[320px] max-w-full"},i6={class:"sr-only"},u6=["value","placeholder"],c6={key:1},d6={class:"flex flex-wrap items-center justify-end gap-2.5"},f6={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"},p6=Z({__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=_(()=>new Map(a.actions.map(i=>[i.name,i.label]))),o=q(null);function s(){o.value?.focus()}return t({focusBulk:s}),(i,c)=>(m(),x("div",o6,[e.showSearch?(m(),x("label",s6,[S("span",i6,M(u($)("backend::lang.list.search")),1),N(u(Is),{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,u6)])):(m(),x("span",c6)),S("div",d6,[e.selectedCount>0?(m(),x("span",f6,[N(u(ba),{size:14,"aria-hidden":"true"}),we(M(e.selectedLabel),1)])):ee("",!0),e.bulkActions.length>0?(m(),j(l6,{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"])):ee("",!0),(m(!0),x(me,null,Oe(e.buttons,d=>(m(),x(me,{key:d},[d==="delete"?(m(),j(Ke,{key:0,"data-action":"delete",variant:e.selectedCount>0?"danger":"outline",icon:u(zr),disabled:e.selectedCount===0,onClick:c[2]||(c[2]=f=>r("delete"))},{default:F(()=>[we(M(e.deleteLabel),1)]),_:1},8,["variant","icon","disabled"])):l.value.has(d)?(m(),j(Ke,{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(()=>[we(M(l.value.get(d)),1)]),_:2},1032,["data-action","disabled","aria-busy","onClick"])):ee("",!0)],64))),128))])]))}}),v6={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"},m6={"data-range":""},h6={key:0,class:"flex items-center gap-2"},y6=["value"],g6=["value"],b6=["aria-label"],_6=["disabled"],x6={key:0,"aria-hidden":"true",class:"px-1"},k6=["data-page","aria-current","onClick"],w6=["disabled"],eu="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",Gy=Z({__name:"Pagination",props:{meta:{},loading:{type:Boolean},perPageOptions:{},perPage:{}},emits:["page","perPage"],setup(e,{emit:t}){const n=e,a=t,r=_(()=>n.meta?.total??0),l=_(()=>n.meta?.page??1),o=_(()=>Math.max(n.meta?.last_page??1,1)),s=_(()=>{const d=n.meta;if(!d||d.total===0)return Fr("backend::lang.list.results",0);const f=(d.page-1)*d.per_page+1,p=Math.min(d.page*d.per_page,d.total);return $("backend::lang.list.pagination_range",{from:f,to:p,total:d.total})}),i=_(()=>{const d=o.value,f=l.value,p=new Set([1,d,f-1,f,f+1].filter(b=>b>=1&&b<=d));f<=3&&[2,3].forEach(b=>b<=d&&p.add(b)),f>=d-2&&[d-1,d-2].forEach(b=>b>=1&&p.add(b));const v=[...p].sort((b,g)=>b-g),h=[];return v.forEach((b,g)=>{const y=v[g-1];y!==void 0&&b-y>1&&h.push(null),h.push(b)}),h});function c(d){const f=Number(d.target.value);Number.isFinite(f)&&f>0&&a("perPage",f)}return(d,f)=>(m(),x("footer",v6,[S("span",m6,M(e.loading?u($)("backend::lang.list.loading"):s.value),1),e.perPageOptions.length>1?(m(),x("label",h6,[S("span",null,M(u($)("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},[(m(!0),x(me,null,Oe(e.perPageOptions,p=>(m(),x("option",{key:p,value:String(p)},M(p),9,g6))),128))],40,y6)])):ee("",!0),!e.loading&&r.value>0?(m(),x("nav",{key:1,"aria-label":u($)("backend::lang.list.pagination"),class:"ml-auto flex items-center gap-1.5"},[S("button",{type:"button","data-page":"prev",class:ge(eu),disabled:l.value<=1,onClick:f[0]||(f[0]=p=>a("page",l.value-1))},[N(u(qs),{size:14,"aria-hidden":"true"}),we(M(u($)("backend::lang.list.prev_page")),1)],8,_6),(m(!0),x(me,null,Oe(i.value,(p,v)=>(m(),x(me,{key:p??`gap-${v}`},[p===null?(m(),x("span",x6,"…")):(m(),x("button",{key:1,type:"button","data-page":p,"aria-current":p===l.value?"page":void 0,class:ge([eu,p===l.value?"border-transparent bg-sel font-bold":""]),onClick:h=>p!==l.value&&a("page",p)},M(p),11,k6))],64))),128)),S("button",{type:"button","data-page":"next",class:ge(eu),disabled:l.value>=o.value,onClick:f[1]||(f[1]=p=>a("page",l.value+1))},[we(M(u($)("backend::lang.list.next_page")),1),N(u(no),{size:14,"aria-hidden":"true"})],8,w6)],8,b6)):ee("",!0)]))}}),$6={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"},C6={class:"flex min-w-0 items-start gap-2.5"},S6={class:"min-w-0 [overflow-wrap:anywhere]"},ei=Z({__name:"ExtensionFailure",props:{text:{}},setup(e){return(t,n)=>(m(),x("div",$6,[S("span",C6,[N(u(ct),{size:16,class:"mt-0.5 shrink-0 text-danger","aria-hidden":"true"}),S("span",S6,M(e.text),1)])]))}}),E6=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"]),A6=new Set(["script","style","template","iframe","object","embed","noscript","textarea","title","xmp","svg","math","form","input","button","select","link","meta","base"]),D6=32,M6=2e3,O6=new Set(["class","title","lang","dir","role"]),P6={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"])},T6=/^(aria|data)-[a-z0-9_-]+$/;function q6(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 R6(e,t,n){return O6.has(t)||P6[e]?.has(t)===!0||T6.test(t)?e==="a"&&t==="href"||e==="img"&&t==="src"?q6(n,e==="a"):!0:!1}function I6(e,t){const n={};for(const[a,r]of Object.entries(t??{})){const l=a.toLowerCase();typeof r=="string"&&R6(e,l,r)&&(n[l]=r)}return n}function Ju(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(A6.has(l))continue;if(!E6.has(l)){a.push(...Ju(r.children,t,n));continue}if(t+1>D6)continue;n.left-=1;const o=Ju(r.children,t+1,n);a.push(Zt(l,I6(l,r.attrs),o.length>0?o:void 0))}return a}function B6(e){return Ju(e,0,{left:M6})}const F6={key:1,"data-partial-loading":"","aria-busy":"true"},N6=["data-partial","aria-busy"],od=Z({__name:"PartialHost",props:{source:{},name:{},recordId:{default:null},variant:{},reloadKey:{default:0},hint:{type:Boolean,default:!1}},setup(e){const t=e,n=q(null),a=q(!1),r=q(!1);let l=0;const o=i=>B6(i.nodes);o.props=["nodes"];async function s(){const i=++l;r.value=!0;let c=null;try{c=(await Pe.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}i===l&&(r.value=!1,a.value=c===null,n.value=c)}return Ie(()=>t.reloadKey,()=>{s()}),s(),(i,c)=>a.value?(m(),j(ei,{key:0,"data-partial-failed":"",text:u($)("backend::lang.extension.partial_failed")},null,8,["text"])):n.value===null?(m(),x("div",F6,[S("div",{"data-partial-skeleton":"",class:ge([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?(m(),x("div",{key:2,class:"summer-partial","data-partial":e.variant,"aria-busy":r.value?"true":void 0},[N(o,{nodes:n.value},null,8,["nodes"])],8,N6)):ee("",!0)}}),V6={class:"flex gap-2.5"},L6=["disabled","aria-busy"],Pa=Z({__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,s)=>(m(),j(u(zC),{open:e.open,"onUpdate:open":r},{default:F(()=>[N(u(LC),null,{default:F(()=>[N(u(NC),{class:"pointer-events-auto fixed inset-0 z-[80] bg-overlay"}),N(u(TC),{"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(()=>[N(u(HC),{class:"text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[we(M(e.title??u($)("backend::lang.form.confirm")),1)]),_:1}),N(u(BC),{class:"text-muted [overflow-wrap:anywhere]"},{default:F(()=>[we(M(e.message),1)]),_:1}),S("div",V6,[N(u(RC),{"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(()=>[we(M(e.cancelLabel??u($)("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:ge([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:it(l,["prevent"])},[e.busy?(m(),j(u(Cl),{key:0,size:16,class:"animate-spin","aria-hidden":"true"})):ee("",!0),we(" "+M(e.confirmLabel??u($)("backend::lang.form.confirm")),1)],10,L6)])]),_:1})]),_:1})]),_:1},8,["open"]))}});function Ta(){const e=q(null),t=q(!1);let n=null,a=null;function r(i){const c=n;n=null,a=null,e.value=null,c?.(i)}function l(i,c){return r(!1),e.value=i,a=c??null,new Promise(d=>{n=d})}async function o(){if(t.value)return;const i=a;if(i){t.value=!0;try{await i()}finally{t.value=!1}}r(!0)}function s(){t.value||r(!1)}return{request:e,busy:t,ask:l,confirm:o,cancel:s}}const j6={class:"flex flex-col gap-5"},z6={class:"flex flex-wrap items-end justify-between gap-4"},U6={class:"flex flex-col"},H6={class:"text-[26px] font-bold tracking-[-0.02em]"},K6={key:0,"data-record-count":"",class:"text-muted"},W6={key:0,class:"flex items-center gap-2.5"},G6={class:"overflow-hidden rounded-card border border-border bg-surface shadow-card"},Y6={key:2,"data-list-failed":"",class:"flex flex-wrap items-center justify-between gap-3 border-t border-border px-5 py-4"},J6={role:"alert",class:"text-danger"},Z6={key:0,"data-empty-search":"",class:"flex flex-col items-center gap-3"},Q6={class:"flex size-14 items-center justify-center rounded-full bg-subtle text-muted"},X6={class:"text-[17px] font-bold"},e8={class:"max-w-[420px] text-muted"},t8={key:1,"data-empty-list":"",class:"text-muted"},n8=300,a8=Z({__name:"ListView",setup(e){const t=sn(),n=jr(),a={vendor:String(t.params.vendor??""),plugin:String(t.params.plugin??""),controller:String(t.params.controller??"")},r=Ms(a),l=Cn(r)??"/",o=q(null),s=q([]),i=q(null),c=q(!0),d=q(!1),f=q(!1),p=_(()=>d.value||f.value),v=q([]),h=q(!1),b=q(0),g=Ta(),y=_(()=>Sy(t.query)),k=q(y.value.search??""),E=_(()=>o.value?.messages),D=_(()=>o.value?.title?o.value.title:eo(a.vendor,a.plugin)?.sideMenu.find(ue=>ue.controller===r)?.label??r),A=_(()=>i.value?Ve(E.value?.recordCount,i.value.total):""),B=_(()=>o.value?.toolbarButtons??[]),V=_(()=>B.value.filter(ae=>ae==="create")),U=_(()=>o.value?.toolbarActions??[]),C=_(()=>B.value.filter(ae=>ae==="delete"||U.value.some(ue=>ue.name===ae))),R=q(null),W=_(()=>i.value?.row_states??{}),T=_(()=>({deleted:Ve(E.value?.rowStateDeleted),negative:Ve(E.value?.rowStateNegative),disabled:Ve(E.value?.rowStateDisabled)})),L=_(()=>(o.value?.bulkActions??[]).filter(ae=>ae.name!=="delete")),Y=q(!1),I=q(null),le=_(()=>{const ae=o.value?.perPageOptions??[];return ae.length>0?ae:[o.value?.recordsPerPage||20]}),X=_(()=>y.value.per_page??i.value?.per_page??o.value?.recordsPerPage??20),de=_(()=>y.value.sort?{column:y.value.sort,dir:y.value.dir==="desc"?"desc":"asc"}:null);function xe(ae){const ue=o.value?.recordUrl,re=ae.id;return!ue||typeof re!="number"&&typeof re!="string"?null:Ky(ue,r,re)}function _e(ae){$o(r,ae),n.replace({path:t.path,query:os(ae)})}const ke=xr({}),fe=_(()=>xr(y.value)!==ke);let Se=0,pe=null;function Ae(){_e({})}async function J(ae=!1){const ue=++Se;c.value=!0,f.value=!1;let re=null;try{re=await K()}catch{re=null}if(ue!==Se)return;if(!re?.data&&ae){$o(r,{}),n.replace({path:t.path,query:{}});return}if(s.value=re?.data?.data??[],i.value=re?.data?.meta??null,f.value=!re?.data,c.value=!1,re?.response?.status===422){$o(r,{});return}const se=i.value?.last_page??0;se>=1&&(i.value?.page??0)>se&&_e({...y.value,page:se})}function K(){return Pe.GET("/{vendor}/{plugin}/{controller}",{params:{path:a,query:y.value}})}async function te(){const ae=await Pe.GET("/{vendor}/{plugin}/{controller}/schema/list",{params:{path:a}});o.value=ae.data?.data??null,d.value=!o.value,o.value&&ld(r,o.value.assets)}te(),Ie(()=>xr(y.value),ae=>{if(ae===ke){const re=_A(r),se=xr(re);if(se!==ke){pe=se,n.replace({path:t.path,query:os(re)});return}}const ue=pe!==null&&pe===ae;pe=null,$o(r,y.value),v.value=[],k.value=y.value.search??"",J(ue)},{immediate:!0});let ie=null;function ce(ae){k.value=ae,ie!==null&&clearTimeout(ie),ie=setTimeout(()=>{ie=null;const ue=ae.trim();_e({...y.value,search:ue===""?void 0:ue,page:void 0})},n8)}xt(()=>{ie!==null&&clearTimeout(ie)});function he(){k.value="",_e({...y.value,search:void 0,page:void 0})}function w(ae){const ue=de.value;ue?.column!==ae?_e({...y.value,sort:ae,dir:"asc",page:void 0}):ue.dir==="asc"?_e({...y.value,sort:ae,dir:"desc",page:void 0}):_e({...y.value,sort:void 0,dir:void 0,page:void 0})}function O(ae){_e({...y.value,page:ae})}function P(ae){_e({...y.value,per_page:ae,page:void 0})}function Q(ae,ue){const re={...y.value.filter??{}};ue===null?delete re[ae]:re[ae]=ue,_e({...y.value,filter:re,page:void 0})}async function G(){const ae=v.value.map(Number).filter(re=>Number.isInteger(re)&&re>0);if(!(ae.length===0||h.value||!await g.ask({message:Ve(E.value?.deleteConfirm,ae.length),confirmLabel:$("backend::lang.form.delete"),danger:!0}))){h.value=!0;try{const re=await Pe.POST("/{vendor}/{plugin}/{controller}/bulk-delete",{params:{path:a},body:{ids:ae}});if(re.data){Me(Ve(E.value?.deleted,re.data.data.deleted)),v.value=[],await J(),b.value+=1;return}Me(re.error?.error.message||$("backend::lang.list.delete_failed"),"danger")}catch{Me($("backend::lang.list.delete_failed"),"danger")}finally{h.value=!1}}}async function ne(ae){const ue=L.value.find(Le=>Le.name===ae),re=v.value.map(Number).filter(Le=>Number.isInteger(Le)&&Le>0);if(!ue||re.length===0||Y.value)return;const se=ue.label??ae;let oe=0,be=null,Ee="";const Fe=await g.ask({message:ue.confirm||Fr("backend::lang.list.bulk_confirm",re.length,{action:se}),confirmLabel:se,danger:!1},async()=>{Y.value=!0;try{const Le=await Pe.POST("/{vendor}/{plugin}/{controller}/bulk/{action}",{params:{path:{...a,action:ae}},body:{ids:re}});oe=Le.response.status,be=Le.data?.data??null,Ee=Le.error?.error.message??""}catch{oe=0}finally{Y.value=!1}});if(await new Promise(Le=>setTimeout(Le,0)),I.value?.focusBulk(),!Fe)return;const He=be;if(He){Me(He.message||Fr("backend::lang.list.bulk_done",He.affected)),v.value=[],await J(),b.value+=1;return}if(oe===409){Me($("backend::lang.list.bulk_stale"),"danger"),v.value=[],await J();return}if(oe===403){Me(Ee||$("backend::lang.list.action_forbidden"),"danger");return}Me(Ee||$("backend::lang.extension.action_failed"),"danger")}async function $e(ae){if(R.value===null){R.value=ae;try{const ue=await Pe.POST("/{vendor}/{plugin}/{controller}/toolbar/{action}",{params:{path:{...a,action:ae}},body:{}});if(ue.data){ue.data.data.message&&Me(ue.data.data.message),await J(),b.value+=1;return}Me(ue.error?.error.message||$("backend::lang.extension.action_failed"),"danger")}catch{Me($("backend::lang.extension.action_failed"),"danger")}finally{R.value=null}}}return(ae,ue)=>(m(),x("section",j6,[S("header",z6,[S("div",U6,[S("h1",H6,M(D.value),1),A.value?(m(),x("p",K6,M(A.value),1)):ee("",!0)]),V.value.length>0?(m(),x("div",W6,[(m(!0),x(me,null,Oe(V.value,re=>(m(),j(Ke,{key:re,"data-action":"create",variant:"primary",icon:u(Rs),to:`${u(l)}/create`},{default:F(()=>[we(M(u(Ve)(E.value?.create)),1)]),_:1},8,["icon","to"]))),128))])):ee("",!0)]),o.value?.headerPartial?(m(),j(od,{key:0,variant:"header",source:a,name:o.value.headerPartial,"reload-key":b.value},null,8,["name","reload-key"])):ee("",!0),S("div",G6,[o.value?(m(),j(p6,{key:0,ref_key:"toolbar",ref:I,"show-search":o.value.showSearch,search:k.value,"search-prompt":u(Ve)(E.value?.searchPrompt),buttons:C.value,"selected-count":v.value.length,"selected-label":u(Ve)(E.value?.selected,v.value.length),"delete-label":u(Ve)(E.value?.deleteSelected,v.value.length),actions:U.value,"busy-action":R.value,"bulk-actions":L.value,"bulk-busy":Y.value,"onUpdate:search":ce,onDelete:G,onAction:$e,onBulk:ne},null,8,["show-search","search","search-prompt","buttons","selected-count","selected-label","delete-label","actions","busy-action","bulk-actions","bulk-busy"])):ee("",!0),o.value&&o.value.filters.length>0?(m(),j(a6,{key:1,filters:o.value.filters,values:y.value.filter??{},source:a,onUpdate:Q},null,8,["filters","values"])):ee("",!0),p.value&&!c.value?(m(),x("div",Y6,[S("p",J6,M(u($)("backend::lang.list.load_failed")),1),f.value&&fe.value?(m(),j(Ke,{key:0,"data-action":"reset-list",onClick:Ae},{default:F(()=>[we(M(u($)("backend::lang.list.reset_list")),1)]),_:1})):ee("",!0)])):(m(),j(Wy,{key:3,columns:o.value?.columns??[],rows:s.value,loading:c.value||!o.value,"row-link":xe,selectable:o.value?.showCheckboxes??!1,selected:v.value,sortable:o.value?.showSorting??!1,sort:de.value,"row-states":W.value,"state-labels":T.value,"onUpdate:selected":ue[0]||(ue[0]=re=>v.value=re),onSort:w},{empty:F(()=>[y.value.search?(m(),x("div",Z6,[S("span",Q6,[N(u(Gm),{size:24,"aria-hidden":"true"})]),S("p",X6,M(u(Ve)(E.value?.emptySearch,void 0,{term:y.value.search})),1),S("p",e8,M(u(Ve)(E.value?.emptySearchHint,void 0,{term:y.value.search})),1),N(Ke,{"data-action":"clear-search",onClick:he},{default:F(()=>[we(M(u($)("backend::lang.list.clear_search")),1)]),_:1})])):(m(),x("p",t8,M(u(Ve)(E.value?.empty)||o.value?.noRecordsMessage||u($)("backend::lang.list.no_records")),1))]),_:1},8,["columns","rows","loading","selectable","selected","sortable","sort","row-states","state-labels"])),N(Gy,{meta:i.value,loading:c.value||!o.value,"per-page-options":le.value,"per-page":X.value,onPage:O,onPerPage:P},null,8,["meta","loading","per-page-options","per-page"])]),N(Pa,{open:u(g).request.value!==null,message:u(g).request.value?.message??"","confirm-label":u(g).request.value?.confirmLabel,danger:u(g).request.value?.danger,busy:u(g).busy.value,onConfirm:u(g).confirm,onCancel:u(g).cancel},null,8,["open","message","confirm-label","danger","busy","onConfirm","onCancel"])]))}}),$a="X-Session-Key",Yy="X-Child-Session-Key",r8=32;function Wl(){const e=new Uint8Array(r8);globalThis.crypto.getRandomValues(e);let t="";for(const n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}const l8="X-Upload-Id";async function pa(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 ss(e){try{const t=await e();return t.response.ok&&t.data instanceof Blob?t.data:null}catch{return null}}function Ln(e){return encodeURIComponent(String(e))}function Jy(e){return`${Ps.api}/${Ln(e.vendor)}/${Ln(e.plugin)}/${Ln(e.controller)}`}function o8(e){try{return e===""?null:JSON.parse(e)}catch{return null}}function sd(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 s8(e,t){const n=t;if((e===200||e===201)&&n?.data)return{ok:!0,item:n.data};const a=sd(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 Zy(e,t,n,a,r){let l=null,o=!1;const s=()=>new Promise(c=>{const d=new XMLHttpRequest;l=d,d.open("POST",e),d.setRequestHeader("X-Requested-With",Mm),d.setRequestHeader("Accept","application/json");for(const[p,v]of Object.entries(n))d.setRequestHeader(p,v);r&&d.setRequestHeader(l8,r),d.upload.onprogress=p=>{p.lengthComputable&&a?.(p.loaded,p.total)},d.onload=()=>c({status:d.status,body:o8(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 s();return typeof c=="object"&&c.status===401&&!o&&(await mc()&&(c=o?"aborted":await s()),typeof c=="object"&&c.status===401&&c_()),c==="aborted"||o?{ok:!1,reason:"aborted",status:0,message:""}:c==="network"?{ok:!1,reason:"network",status:0,message:""}:s8(c.status,c.body)})(),abort(){o=!0,l?.abort()}}}function Qy(e,t,n,a){const r={...e,id:t,field:n},l={[$a]:a},o=`${Jy(e)}/${Ln(t)}/files/${Ln(n)}`;return{list:()=>pa(()=>Pe.GET("/{vendor}/{plugin}/{controller}/{id}/files/{field}",{params:{path:r,header:l}})),upload:(s,i,c)=>Zy(o,s,{...l},i,c),update:(s,i)=>pa(()=>Pe.PUT("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}",{params:{path:{...r,file:s},header:l},body:i})),remove:s=>pa(()=>Pe.DELETE("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}",{params:{path:{...r,file:s},header:l}})),reorder:s=>pa(()=>Pe.POST("/{vendor}/{plugin}/{controller}/{id}/files/{field}/reorder",{params:{path:r,header:l},body:{ids:s}})),download:s=>ss(()=>Pe.GET("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}/download",{params:{path:{...r,file:s},header:l},parseAs:"blob"})),thumb:s=>ss(()=>Pe.GET("/{vendor}/{plugin}/{controller}/{id}/files/{field}/{file}/thumb",{params:{path:{...r,file:s},header:l},parseAs:"blob"}))}}function i8(e,t,n,a,r,l,o){const s={...e,id:t,name:n,child:a,field:r},i={[$a]:l,[Yy]:o},c=`${Jy(e)}/${Ln(t)}/relations/${Ln(n)}/records/${Ln(a)}/files/${Ln(r)}`;return{list:()=>pa(()=>Pe.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}",{params:{path:s,header:i}})),upload:(d,f,p)=>Zy(c,d,{...i},f,p),update:(d,f)=>pa(()=>Pe.PUT("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}",{params:{path:{...s,file:d},header:i},body:f})),remove:d=>pa(()=>Pe.DELETE("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}",{params:{path:{...s,file:d},header:i}})),reorder:d=>pa(()=>Pe.POST("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/reorder",{params:{path:s,header:i},body:{ids:d}})),download:d=>ss(()=>Pe.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}/download",{params:{path:{...s,file:d},header:i},parseAs:"blob"})),thumb:d=>ss(()=>Pe.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}/files/{field}/{file}/thumb",{params:{path:{...s,file:d},header:i},parseAs:"blob"}))}}const u8={key:0,role:"alert","data-forbidden-banner":"",class:"flex items-start gap-3 rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},c8={class:"flex min-w-0 flex-col gap-1"},d8={class:"[overflow-wrap:anywhere]"},f8={key:1,role:"alert","data-error-banner":"",class:"flex items-start gap-3 rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},p8={class:"flex flex-col gap-1"},Qr=Z({__name:"FormErrorBanner",props:{errors:{},fieldNames:{},forbidden:{default:null}},setup(e){const t=e,n=_(()=>Object.keys(t.errors).length),a=_(()=>Object.entries(t.errors).filter(([r])=>!t.fieldNames.includes(r)).flatMap(([,r])=>r));return(r,l)=>e.forbidden?(m(),x("div",u8,[N(u(ct),{size:20,class:"mt-px shrink-0","aria-hidden":"true"}),S("div",c8,[S("p",d8,M(e.forbidden),1),(m(!0),x(me,null,Oe(a.value,(o,s)=>(m(),x("p",{key:s,class:"text-[13px] [overflow-wrap:anywhere]"},M(o),1))),128))])])):n.value>0?(m(),x("div",f8,[N(u(ct),{size:20,class:"mt-px shrink-0","aria-hidden":"true"}),S("div",p8,[S("p",null,[S("strong",null,M(u($)("backend::lang.form.error_title")),1),we(" "+M(u(Fr)("backend::lang.form.error_fields",n.value)),1)]),(m(!0),x(me,null,Oe(a.value,(o,s)=>(m(),x("p",{key:s,class:"text-[13px]"},M(o),1))),128))])])):ee("",!0)}}),v8=new Set(["readonly","placeholder","maxlength","minlength","min","max","step","autocomplete","spellcheck","pattern"]);function Xr(e){const t={};for(const[n,a]of Object.entries(e.attributes??{})){const r=n.toLowerCase();!v8.has(r)||a===null||a===!1||(t[r]=a)}return t}function Tt(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 id(e){return typeof e=="string"?e!==""&&e!=="0"&&e.toLowerCase()!=="false":!!e}function Xy(e,t){return typeof e=="number"?t?1:0:t}function eg(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 m8={class:"flex min-w-0 flex-col"},h8=["for"],y8={key:0,class:"text-danger","aria-hidden":"true"},g8=["id"],b8=["id","name","checked","aria-invalid","aria-describedby"],_8=Z({__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=_(()=>id(n.modelValue));function l(o){a("update:modelValue",Xy(n.modelValue,o.target.checked))}return(o,s)=>(m(),x("div",{class:ge([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",m8,[S("label",{for:e.controlId,class:"font-semibold"},[we(M(e.field.label||e.field.name),1),e.field.required?(m(),x("span",y8," *")):ee("",!0)],8,h8),e.field.comment?(m(),x("p",{key:0,id:`${e.controlId}-comment`,class:"text-[13px] text-muted"},M(e.field.comment),9,g8)):ee("",!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,b8)],2))}});function x8(e){return e==="date"||e==="time"?e:"datetime"}function It(e,t=2){return String(e).padStart(t,"0")}const k8=/(Z|[+-]\d{2}:?\d{2})$/i;function w8(e,t,n=!1){if(typeof t!="string"||t.trim()==="")return null;const a=t.trim();try{if(e==="date")return kh(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?o$(l[1]):null}const r=k8.test(a)?a.replace(" ","T"):`${a.replace(" ","T")}Z`;return n?Sn(Wf(r,"UTC")):Wf(r,un())}catch{return null}}function tu(e){return`${It(e.year,4)}-${It(e.month)}-${It(e.day)}`}function nu(e){return`${It(e.hour)}:${It(e.minute)}:${It(e.second)}`}function Rp(e,t,n=!1){if(!t)return null;if(e==="time")return"hour"in t?nu(t):null;if(!("year"in t))return null;if(e==="date")return tu(t);if(n){const l=t instanceof Gn?Sn(t):t,o="hour"in l?nu(l):"00:00:00";return`${tu(l)}T${o}Z`}const a=t instanceof Gn?t:Ac(t instanceof tt?Sn(t):t,un()),r=zs(a,"UTC");return`${tu(r)}T${nu(r)}Z`}const $8={date:"YYYY-MM-DD",datetime:"YYYY-MM-DD HH:mm",time:"HH:mm"},C8=/\[([^\]]*)\]|YYYY|YY|MMMM|MMM|MM|M|dddd|ddd|DD|D|HH|H|hh|h|mm|ss|A|a/g;function S8(e){return"year"in e?new tt(e.year,e.month,e.day):null}function au(e,t,n,a){return new en(e,{...n,timeZone:"UTC"}).formatToParts(t.toDate("UTC")).find(l=>l.type===a)?.value??""}function E8(e,t,n,a){if(!e)return"";const r=n||$8[t],l=S8(e),o="hour"in e?e:null,s=/D/.test(r.replace(/\[[^\]]*\]/g,""));return r.replace(C8,(i,c)=>{if(c!==void 0)return c;switch(i){case"YYYY":return l?It(l.year,4):"";case"YY":return l?It(l.year%100):"";case"MMMM":case"MMM":{if(!l)return"";const d=i==="MMMM"?"long":"short";return s?au(a,l,{day:"numeric",month:d},"month"):au(a,l,{month:d},"month")}case"MM":return l?It(l.month):"";case"M":return l?String(l.month):"";case"dddd":case"ddd":return l?au(a,l,{weekday:i==="dddd"?"long":"short"},"weekday"):"";case"DD":return l?It(l.day):"";case"D":return l?String(l.day):"";case"HH":return o?It(o.hour):"";case"H":return o?String(o.hour):"";case"hh":return o?It(o.hour%12||12):"";case"h":return o?String(o.hour%12||12):"";case"mm":return o?It(o.minute):"";case"ss":return o?It(o.second):"";case"A":return o?o.hour<12?"AM":"PM":"";case"a":return o?o.hour<12?"am":"pm":"";default:return i}})}const A8=new tt(2026,10,4);function D8(e,t){if(typeof t=="number"&&Number.isInteger(t)&&t>=0&&t<=6)return t;try{return(7-js(A8,e))%7}catch{return 1}}function Ip(e){if(e)try{return kh(e.slice(0,10))}catch{return}}function M8(e,t=ro(un())){const n=Ip(e.minDate),a=Ip(e.maxDate);if(n||a)return{min:n,max:a};const r=e.yearRange??[];return r.length===1&&typeof r[0]=="number"?{min:new tt(t.year-r[0],1,1),max:new tt(t.year+r[0],12,31)}:r.length===2&&typeof r[0]=="number"&&typeof r[1]=="number"?{min:new tt(r[0],1,1),max:new tt(r[1],12,31)}:{}}function Zu(e,t,n,a){if(!e||t==="time")return;if(t==="date")return e;const r=new xa(e.year,e.month,e.day,a?23:0,a?59:0,a?59:0);return n?r:zs(Ac(r,"UTC"),un())}function O8(e,t){const n=ro(un());return Zu(n,e==="time"?"datetime":e,t,!1)??n}const P8=["id","aria-describedby"],T8={key:0},q8={key:1,class:"text-muted","data-empty":""},R8=["aria-label"],I8={class:"flex size-8 shrink-0 items-center justify-center text-muted","aria-hidden":"true"},B8=["data-mode"],F8=["aria-label"],N8={key:0,"data-datepicker-time":"",class:"mt-3 flex items-center gap-2 border-t border-border pt-3"},cl="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",V8=Z({__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=_(()=>x8(n.field.mode)),l=_(()=>r.value==="datetime"&&!!n.field.ignoreTimezone),o=_(()=>Br.value||"pl"),s=_(()=>{const fe=n.field.attributes?.readonly;return!!n.field.readOnly||fe!=null&&fe!==!1}),i=_(()=>w8(r.value,n.modelValue,l.value)),c=_(()=>r.value==="time"?null:i.value),d=_(()=>r.value==="time"?i.value:null),f=_(()=>M8(n.field)),p=_(()=>Zu(f.value.min,r.value,l.value,!1)),v=_(()=>Zu(f.value.max,r.value,l.value,!0)),h=O8(r.value,l.value),b=_(()=>D8(o.value,n.field.firstDay)),g=_(()=>n.field.twelveHour?12:24),y=_(()=>r.value==="date"?"day":"minute"),k=_(()=>E8(i.value,r.value,n.field.displayFormat,o.value)),E=_(()=>!n.field.required&&i.value!==null&&!s.value),D=_(()=>{const fe=c.value;return fe?!!p.value&&fe.compare(p.value)<0||!!v.value&&fe.compare(v.value)>0:!1}),A=new Set(["day","month","year","hour","minute","second"]),B=q(null),V=q(!1);function U(){const fe=B.value;if(!fe){V.value=!1;return}const Se=Array.from(fe.querySelectorAll("[data-reka-date-field-segment], [data-reka-time-field-segment]")).filter(Ae=>A.has(Ae.dataset.rekaDateFieldSegment??Ae.dataset.rekaTimeFieldSegment??"")),pe=Se.filter(Ae=>!Ae.hasAttribute("data-placeholder")).length;V.value=pe>0&&pe!!n.invalid||D.value||V.value),W=_(()=>Rp(r.value,i.value,l.value));function T(fe){const Se=Rp(r.value,fe??null,l.value);C(),!(Se===W.value&&(Se!==null||n.modelValue===null))&&a("update:modelValue",Se)}function L(fe){if(!fe||r.value!=="datetime"){T(fe);return}const Se=c.value,pe=le.value,Ae=!Se||Se.year!==fe.year||Se.month!==fe.month||Se.day!==fe.day,J=!("hour"in fe)||fe.hour!==pe.hour||fe.minute!==pe.minute;Ae&&J&&(fe=X(fe,pe)),I.value=fe,T(fe)}function Y(){a("update:modelValue",null),C()}const I=q(null);Ie(c,fe=>{I.value=fe},{immediate:!0});const le=_(()=>{const fe=I.value??c.value;return fe&&"hour"in fe?new bn(fe.hour,fe.minute):new bn(0,0)});function X(fe,Se){return"hour"in fe?fe.set({hour:Se.hour,minute:Se.minute,second:0,millisecond:0}):new xa(fe.year,fe.month,fe.day,Se.hour,Se.minute)}function de(fe){if(!fe)return;const Se=fe instanceof bn?fe:new bn(fe.hour,fe.minute),pe=I.value??c.value??h,Ae=X(pe,Se);I.value=Ae,T(Ae)}function xe(fe){return fe.charAt(0).toLocaleUpperCase(o.value)+fe.slice(1)}const _e=_(()=>[Tt(R.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 ke(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,Se)=>s.value?(m(),x("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"},[k.value!==""?(m(),x("span",T8,M(k.value),1)):(m(),x("span",q8,"—"))],8,P8)):r.value==="time"?(m(),x("div",{key:1,ref_key:"container",ref:B,"data-datepicker":"","data-mode":"time",class:ge(_e.value),onKeyup:C,onFocusout:C},[N(u(Mp),{id:e.controlId,"model-value":d.value,locale:o.value,"hour-cycle":g.value,granularity:"minute",name:e.field.name,required:e.field.required||void 0,"aria-invalid":R.value?"true":void 0,"aria-describedby":e.describedBy||void 0,class:"flex min-w-0 flex-1 items-center","onUpdate:modelValue":T},{default:F(({segments:pe})=>[(m(!0),x(me,null,Oe(pe,Ae=>(m(),j(u(Op),{key:Ae.part,part:Ae.part,class:ge(ke(Ae.part))},{default:F(()=>[we(M(Ae.value),1)]),_:2},1032,["part","class"]))),128))]),_:1},8,["id","model-value","locale","hour-cycle","name","required","aria-invalid","aria-describedby"]),E.value?(m(),x("button",{key:0,type:"button","data-action":"clear","aria-label":u($)("backend::lang.datepicker.clear"),class:ge(cl),onClick:Y},[N(u(Ht),{size:16,"aria-hidden":"true"})],8,R8)):ee("",!0),S("span",I8,[N(u(Eu),{size:16})])],34)):(m(),j(u(tE),{key:2,id:e.controlId,"model-value":c.value,"default-placeholder":u(h),locale:o.value,granularity:y.value,"hour-cycle":g.value,"hide-time-zone":r.value!=="datetime"||l.value,"min-value":p.value,"max-value":v.value,"week-starts-on":b.value,name:e.field.name,required:e.field.required||void 0,"close-on-select":r.value==="date","prevent-deselect":"","onUpdate:modelValue":L},{default:F(()=>[S("div",{ref_key:"container",ref:B,"data-datepicker":"","data-mode":r.value,class:ge(_e.value),onKeyup:C,onFocusout:C},[N(u(_E),{"aria-invalid":R.value?"true":void 0,"aria-describedby":e.describedBy||void 0,class:"flex min-w-0 flex-1 items-center overflow-hidden"},{default:F(({segments:pe})=>[(m(!0),x(me,null,Oe(pe,Ae=>(m(),j(u(RE),{key:Ae.part,part:Ae.part,class:ge(ke(Ae.part))},{default:F(()=>[we(M(Ae.value),1)]),_:2},1032,["part","class"]))),128))]),_:1},8,["aria-invalid","aria-describedby"]),E.value?(m(),x("button",{key:0,type:"button","data-action":"clear","aria-label":u($)("backend::lang.datepicker.clear"),class:ge(cl),onClick:Y},[N(u(Ht),{size:16,"aria-hidden":"true"})],8,F8)):ee("",!0),N(u(zE),{"data-action":"open-calendar","aria-label":u($)("backend::lang.datepicker.open_calendar"),class:ge(cl)},{default:F(()=>[N(u(Vm),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label"])],42,B8),N(u(gE),{"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(()=>[N(u(aE),null,{default:F(({weekDays:pe,grid:Ae})=>[N(u(OE),{class:"flex h-9 items-center justify-between"},{default:F(()=>[N(u(NE),{"aria-label":u($)("backend::lang.datepicker.prev_month"),class:ge(cl)},{default:F(()=>[N(u(qs),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label"]),N(u(TE),{class:"font-semibold"},{default:F(({headingValue:J})=>[we(M(xe(J)),1)]),_:1}),N(u(BE),{"aria-label":u($)("backend::lang.datepicker.next_month"),class:ge(cl)},{default:F(()=>[N(u(no),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label"])]),_:1}),(m(!0),x(me,null,Oe(Ae,J=>(m(),j(u(kE),{key:J.value.toString(),class:"mt-2 w-full border-collapse select-none"},{default:F(()=>[N(u(SE),null,{default:F(()=>[N(u(Dp),{class:"flex"},{default:F(()=>[(m(!0),x(me,null,Oe(pe,K=>(m(),j(u(DE),{key:K,class:"flex h-9 w-9 items-center justify-center text-[13px] font-normal text-muted"},{default:F(()=>[we(M(K),1)]),_:2},1024))),128))]),_:2},1024)]),_:2},1024),N(u($E),null,{default:F(()=>[(m(!0),x(me,null,Oe(J.rows,(K,te)=>(m(),j(u(Dp),{key:`week-${te}`,class:"flex"},{default:F(()=>[(m(!0),x(me,null,Oe(K,ie=>(m(),j(u(lE),{key:ie.toString(),date:ie,class:"p-0"},{default:F(()=>[N(u(sE),{day:ie,month:J.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"?(m(),x("div",N8,[N(u(Eu),{size:16,class:"shrink-0 text-muted","aria-hidden":"true"}),N(u(Mp),{"model-value":le.value,locale:o.value,"hour-cycle":g.value,granularity:"minute","hide-time-zone":"",class:"flex min-w-0 items-center","onUpdate:modelValue":de},{default:F(({segments:pe})=>[(m(!0),x(me,null,Oe(pe,Ae=>(m(),j(u(Op),{key:Ae.part,part:Ae.part,class:ge(ke(Ae.part))},{default:F(()=>[we(M(Ae.value),1)]),_:2},1032,["part","class"]))),128))]),_:1},8,["model-value","locale","hour-cycle"])])):ee("",!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"]))}}),L8={class:"relative"},j8=["id","name","value","required","aria-required","aria-invalid","aria-describedby"],z8=["value"],So="empty",Eo="placeholder",U8=Z({__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=_(()=>n.field.options??[]);function l(c,d){return c==null||d===null||d===void 0?c===d||c==null&&d==null:String(c)===String(d)}const o=_(()=>{const c=r.value.findIndex(d=>l(d.value,n.modelValue));return c>=0?String(c):n.field.emptyOption!==void 0&&(n.modelValue===null||n.modelValue===void 0||n.modelValue==="")?So:Eo}),s=_(()=>o.value===So||o.value===Eo);function i(c){const d=c.target.value;if(d===So){a("update:modelValue",null);return}const f=r.value[Number(d)];f&&a("update:modelValue",f.value)}return(c,d)=>(m(),x("div",L8,[S("select",{id:e.controlId,name:e.field.name,value:o.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:ge([[u(Tt)(e.invalid),s.value?"text-muted":""],"h-input appearance-none pr-10"]),onChange:i},[e.field.emptyOption!==void 0?(m(),x("option",{key:0,value:So,class:"text-muted"},M(e.field.emptyOption),1)):ee("",!0),o.value===Eo?(m(),x("option",{key:1,value:Eo,disabled:""},M(u($)("backend::lang.form.select_placeholder")),1)):ee("",!0),(m(!0),x(me,null,Oe(r.value,(f,p)=>(m(),x("option",{key:p,value:String(p),class:"text-text"},M(f.label),9,z8))),128))],42,j8),N(u(to),{size:16,class:"pointer-events-none absolute top-1/2 right-3.5 -translate-y-1/2 text-muted","aria-hidden":"true"})]))}}),ud=Symbol("summer.form.values"),cd=Symbol("summer.form.patch"),dd=Symbol("summer.form.locale"),is=Symbol("summer.form.enabledLocales"),tg=Symbol("summer.form.assets");function fd(){const e=q(0);return{activeUploads:e,beginUpload(){e.value++;let t=!1;return()=>{t||(t=!0,e.value>0&&e.value--)}}}}const el=Symbol("summer.form.session"),Bp="summer-action",H8="summer-result",Fp="summer-change",Np="summer-upload",K8="summer-upload-result",ng=5e3,W8={class:"flex items-start gap-3"},G8={class:"flex min-w-0 flex-1 flex-col gap-1"},Y8={key:0,class:"flex items-center gap-4"},J8=["src"],Z8={key:1,class:"flex size-16 shrink-0 items-center justify-center rounded-inner bg-subtle","aria-hidden":"true"},Q8=["title"],X8={class:"flex flex-col gap-1.5"},eD=["for"],tD=["id","disabled","aria-invalid","aria-describedby"],nD=["id"],aD={class:"flex flex-col gap-1.5"},rD=["for"],lD=["id","disabled","aria-invalid","aria-describedby"],oD=["id"],sD={class:"flex gap-2.5"},iD=["disabled"],uD=["disabled"],cD=Z({__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=q(""),l=q(""),o=q({}),s=q(!1),i=Ta();function c(g){const y={};for(const[k,E]of Object.entries(g??{})){const D=(Array.isArray(E)?E:[E]).filter(A=>typeof A=="string"&&A!=="");D.length>0&&(y[k]=D)}return y}const d=_(()=>`${n.idPrefix}-caption-title`),f=_(()=>`${n.idPrefix}-caption-description`),p=_(()=>!!n.file&&(r.value!==n.file.title||l.value!==n.file.description));Ie(()=>n.open,g=>{g&&n.file&&(r.value=n.file.title??"",l.value=n.file.description??"",o.value={},s.value=!1)},{immediate:!0});async function v(g){if(g){a("update:open",!0);return}s.value||p.value&&!await i.ask({message:$("backend::lang.form.unsaved_confirm"),confirmLabel:$("backend::lang.form.discard"),danger:!0})||a("update:open",!1)}async function h(){if(!(s.value||!n.file||!n.routes)){s.value=!0;try{const g=await n.routes.update(n.file.id,{title:r.value,description:l.value});if(g.data){o.value={},a("saved",g.data),a("update:open",!1),Me($("backend::lang.fileupload.details_saved"));return}if(g.status===422){o.value=c(g.error?.details),Object.keys(o.value).length===0&&(o.value={title:[sd(g.error)||$("backend::lang.form.error_generic")]});return}Me(g.error?.message||$("backend::lang.form.error_generic"),"danger")}finally{s.value=!1}}}function b(g){g.preventDefault(),a("closed")}return(g,y)=>(m(),x(me,null,[N(u(Kr),{open:e.open,"onUpdate:open":v},{default:F(()=>[N(u(oo),null,{default:F(()=>[N(u(Gr),{"data-dialog-overlay":"",class:"fixed inset-0 z-40 bg-overlay"}),N(u(Wr),{"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:b},{default:F(()=>[S("div",W8,[S("div",G8,[N(u(Yr),{class:"text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[we(M(u($)("backend::lang.fileupload.attachment")),1)]),_:1}),N(u(Qa),{class:"text-muted"},{default:F(()=>[we(M(u($)("backend::lang.fileupload.help")),1)]),_:1})]),N(u(Lr),{"data-action":"close","aria-label":u($)("backend::lang.form.close"),disabled:s.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(()=>[N(u(Ht),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label","disabled"])]),e.file?(m(),x("div",Y8,[e.preview?(m(),x("img",{key:0,src:e.preview,alt:"",class:"size-16 shrink-0 rounded-inner object-cover"},null,8,J8)):(m(),x("span",Z8,[N(u(_r),{size:16,class:"text-muted"})])),S("span",{class:"min-w-0 truncate text-[13px] text-muted",title:e.file.file_name},M(e.file.file_name),9,Q8)])):ee("",!0),S("form",{class:"flex flex-col gap-4",novalidate:"",onSubmit:it(h,["prevent"])},[S("div",X8,[S("label",{for:d.value,class:"font-semibold"},M(u($)("backend::lang.fileupload.title_label")),9,eD),ha(S("input",{id:d.value,"onUpdate:modelValue":y[0]||(y[0]=k=>r.value=k),type:"text","data-caption-title":"",disabled:s.value,"aria-invalid":o.value.title?"true":void 0,"aria-describedby":o.value.title?`${d.value}-error`:void 0,class:ge([u(Tt)(!!o.value.title),"h-input"])},null,10,tD),[[Fl,r.value]]),o.value.title?(m(),x("p",{key:0,id:`${d.value}-error`,class:"flex items-center gap-1.5 text-[13px] text-danger"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(o.value.title.join(" ")),1)],8,nD)):ee("",!0)]),S("div",aD,[S("label",{for:f.value,class:"font-semibold"},M(u($)("backend::lang.fileupload.description_label")),9,rD),ha(S("textarea",{id:f.value,"onUpdate:modelValue":y[1]||(y[1]=k=>l.value=k),rows:"3","data-caption-description":"",disabled:s.value,"aria-invalid":o.value.description?"true":void 0,"aria-describedby":o.value.description?`${f.value}-error`:void 0,class:ge([u(Tt)(!!o.value.description),"min-h-input resize-y py-2.5"])},null,10,lD),[[Fl,l.value]]),o.value.description?(m(),x("p",{key:0,id:`${f.value}-error`,class:"flex items-center gap-1.5 text-[13px] text-danger"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(o.value.description.join(" ")),1)],8,oD)):ee("",!0)]),S("div",sD,[S("button",{type:"button","data-action":"cancel",disabled:s.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:y[2]||(y[2]=k=>v(!1))},M(u($)("backend::lang.form.cancel")),9,iD),S("button",{type:"submit","data-action":"save-caption",disabled:s.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"},M(s.value?u($)("backend::lang.form.saving"):u($)("backend::lang.fileupload.details_submit")),9,uD)])],32)]),_:1})]),_:1})]),_:1},8,["open"]),N(Pa,{open:u(i).request.value!==null,message:u(i).request.value?.message??"","confirm-label":u(i).request.value?.confirmLabel,danger:u(i).request.value?.danger,onConfirm:u(i).confirm,onCancel:u(i).cancel},null,8,["open","message","confirm-label","danger","onConfirm","onCancel"])],64))}}),dD=["id","data-field-name","aria-labelledby","aria-describedby","aria-busy"],fD={key:0,"data-fileupload-loading":"",class:"h-[112px] rounded-control bg-skel","aria-hidden":"true"},pD={key:1,role:"alert","data-fileupload-failed":"",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},vD={key:0,"data-fileupload-empty":"",class:"flex min-h-input items-center rounded-control border border-border bg-subtle px-3.5 text-muted"},mD={key:1,"data-fileupload-grid":"",class:"grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4"},hD=["data-file-item","data-state","onDragover","onDrop"],yD={class:"relative flex aspect-square items-center justify-center bg-subtle"},gD=["href","aria-label"],bD=["src","alt","onError"],_D=["aria-label","onClick"],xD=["src","alt"],kD={key:2,"data-preview-unavailable":"",class:"flex flex-col items-center gap-2 text-[13px] text-muted"},wD=["data-handle","aria-label","onKeydown","onDragstart"],$D={key:5,class:"absolute top-2 right-2 flex gap-1"},CD=["data-caption","aria-label","onClick"],SD=["aria-label","onClick"],ED=["aria-label","onClick"],AD={class:"flex flex-col gap-1 p-2"},DD=["title"],MD={class:"flex items-center gap-2 text-[13px] text-muted tabular-nums"},OD={key:0},PD={key:1},TD={key:2},qD={key:3,"data-unsaved-chip":"",class:"inline-flex h-6 items-center rounded-pill bg-sel px-2 text-[13px] font-semibold text-text"},RD={key:1,"data-file-error":"",class:"text-[13px] text-danger"},ID={class:"sr-only"},BD={key:2,"data-fileupload-single":"",class:"flex flex-col gap-2"},FD=["data-file-item","data-state"],ND=["src","alt","onError"],VD={key:3,"data-preview-unavailable":"",class:"flex flex-col items-center gap-2 text-[13px] text-muted"},LD={class:"flex min-w-0 flex-1 flex-col gap-1"},jD=["title"],zD={class:"flex items-center gap-2 text-[13px] text-muted tabular-nums"},UD={key:0},HD={key:1},KD={key:2},WD={key:3,"data-unsaved-chip":"",class:"inline-flex h-6 items-center rounded-pill bg-sel px-2 text-[13px] font-semibold text-text"},GD={key:1,"data-file-error":"",class:"text-[13px] text-danger"},YD={class:"sr-only"},JD={key:2,class:"mt-1 flex flex-wrap gap-2"},ZD={key:3,"data-fileupload-rows":"",class:"flex flex-col gap-2"},QD=["data-file-item","data-state","onDragover","onDrop"],XD={class:"flex items-center gap-3"},eM=["data-handle","aria-label","onKeydown","onDragstart"],tM={class:"flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-pager bg-subtle"},nM=["src","onError"],aM={class:"flex min-w-0 flex-1 flex-col leading-tight"},rM=["title"],lM=["title"],oM=["title"],sM={class:"flex shrink-0 items-center gap-2 text-[13px] text-muted tabular-nums"},iM={key:0},uM={key:1},cM={key:2},dM={key:3,"data-unsaved-chip":"",class:"inline-flex h-6 items-center rounded-pill bg-sel px-2 text-[13px] font-semibold text-text"},fM={class:"flex shrink-0 items-center gap-1"},pM=["href","aria-label"],vM=["aria-label","onClick"],mM=["data-caption","aria-label","onClick"],hM=["aria-label","onClick"],yM=["aria-label","onClick"],gM={key:1,"data-file-error":"",class:"text-[13px] text-danger"},bM={class:"sr-only"},_M=["aria-describedby"],xM={class:"flex size-10 items-center justify-center rounded-full bg-surface","aria-hidden":"true"},kM={class:"text-text"},wM={key:0,"data-fileupload-limits":"",class:"text-[13px] text-muted tabular-nums"},$M={key:5,"data-fileupload-limits":"",class:"text-[13px] text-muted tabular-nums"},CM={key:6,role:"alert","data-fileupload-too-many":"",class:"flex items-center gap-1.5 text-[13px] text-danger"},SM=["accept","multiple"],EM={class:"sr-only","aria-live":"polite","data-fileupload-live":""},AM=1<<20,DM=400,ru="inline-flex size-8 items-center justify-center rounded-pager border border-border bg-surface text-muted hover:text-text",MM="inline-flex size-8 items-center justify-center rounded-pager border border-border bg-surface text-muted hover:bg-danger-soft hover:text-danger",pr="inline-flex size-8 shrink-0 items-center justify-center rounded-pager text-muted hover:bg-hover hover:text-text",OM=Z({__name:"FileuploadField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},setup(e){const t=e,n=rt(el,null),a=["jpg","jpeg","png","gif","webp"],r=["image/jpeg","image/png","image/gif","image/webp"];let l=1;const o=q([]),s=q("loading"),i=q(!1),c=q(0),d=q(""),f=q(null),p=q(null),v=q(null),h=q(null),b=q(null),g=q(!1),y=q({}),k=q(new Set),E=new Set,D=[],A=n?n.routes(t.field.name):null;let B=null,V=null,U=!1,C=null,R=0,W=!1;const T=_(()=>{const z=t.field.attributes?.readonly;return!!t.field.readOnly||z!=null&&z!==!1}),L=_(()=>t.field.multiple===!0),Y=_(()=>t.field.mode==="image"),I=_(()=>L.value?t.field.maxFiles:1),le=_(()=>(n?.recordId??0)!==0),X=_(()=>o.value.filter(z=>z.state!=="failed")),de=_(()=>{if(L.value)return o.value;const z=X.value,Ce=z[z.length-1];return o.value.filter(H=>H.state==="failed"||H===Ce)}),xe=_(()=>de.value.filter(z=>z.state!=="failed").length),_e=_(()=>T.value||s.value!=="ready"?!1:L.value?I.value===void 0||I.value===null||X.value.lengthL.value&&!T.value&&typeof I.value=="number"&&X.value.length>=I.value),fe=_(()=>t.field.fileTypes?.length?t.field.fileTypes.map(z=>z.toLowerCase()):Y.value&&!t.field.mimeTypes?.length?a:null),Se=_(()=>(t.field.fileTypes?.length?t.field.fileTypes:t.field.mimeTypes??[]).join(", ")),pe=_(()=>{const z=[];for(const Ce of t.field.fileTypes??[])z.push(`.${Ce.toLowerCase()}`);for(const Ce of t.field.mimeTypes??[])z.push(Ce.includes("/")?Ce:`.${Ce.toLowerCase()}`);return z.length===0&&Y.value&&z.push(...r),z.length>0?z.join(","):void 0}),Ae=_(()=>t.field.prompt||$(L.value?"backend::lang.fileupload.default_prompt_many":"backend::lang.fileupload.default_prompt"));function J(z,Ce){return new Intl.NumberFormat(Br.value,{minimumFractionDigits:Ce,maximumFractionDigits:Ce}).format(z)}function K(z){const Ce=["B","kB","MB","GB"];let H=z,De=0;for(;H>=1e3&&De{const z=t.field.maxFilesize;return typeof z=="number"?`${new Intl.NumberFormat(Br.value).format(z)} MB`:""}),ie=_(()=>{const z=[];return Se.value!==""&&z.push($("backend::lang.fileupload.limits_types",{types:Se.value})),te.value!==""&&z.push($("backend::lang.fileupload.limits_size",{size:te.value})),L.value&&typeof I.value=="number"&&z.push($("backend::lang.fileupload.limits_count",{current:X.value.length,max:I.value})),z.join(" · ")});function ce(z){const Ce=z.lastIndexOf(".");return Ce<0?"":z.slice(Ce+1).toLowerCase()}function he(z){const Ce=t.field.mimeTypes??[];if(Ce.length===0||z.type==="")return!0;const H=z.type.toLowerCase(),De=ce(z.name);return Ce.some(ze=>{const Et=ze.toLowerCase();return Et.includes("/")?Et.endsWith("/*")?H.startsWith(Et.slice(0,-1)):H===Et:Et===De})}function w(z){const Ce=fe.value;if(Ce&&!Ce.includes(ce(z.name)))return $("backend::lang.fileupload.wrong_type",{name:z.name,types:Ce.join(", ")});if(!he(z))return $("backend::lang.fileupload.wrong_type",{name:z.name,types:Se.value});const H=t.field.maxFilesize;return typeof H=="number"&&z.size>Math.ceil(H*AM)?$("backend::lang.fileupload.too_large",{name:z.name,size:te.value}):""}function O(z){return nn({uid:l++,name:z.file_name,size:z.file_size,state:"done",progress:100,error:"",retryable:!1,file:z,source:null,handle:null,uploadId:""})}function P(){return globalThis.crypto?.randomUUID?.()??`u${Date.now().toString(36)}${Math.random().toString(36).slice(2,10)}`}function Q(z,Ce){return nn({uid:l++,name:z.name,size:z.size,state:Ce===""?"queued":"failed",progress:0,error:Ce,retryable:!1,file:null,source:Bo(z),handle:null,uploadId:P()})}function G(z){return o.value.find(Ce=>Ce.uid===z)}async function ne(z){if(!A){s.value="failed";return}z&&(s.value="loading");const Ce=await A.list();if(W)return;if(!Ce.data){z&&(s.value="failed");return}const H=o.value.filter(De=>De.state!=="done");for(const De of o.value)De.state==="done"&&oi(De.uid);o.value=[...Ce.data.map(O),...H],s.value="ready"}function $e(){T.value||f.value?.click()}function ae(z){if(z.length===0||T.value)return;if(c.value=0,!L.value)for(const ze of[...o.value])ze.state!=="failed"&&(ze.state!=="done"||ze.file?.pending)&&Le(ze);let Ce=L.value?typeof I.value=="number"?Math.max(I.value-X.value.length,0):Number.POSITIVE_INFINITY:1,H=0;const De=[];for(const ze of z.slice(0,L.value?z.length:1)){const Et=w(ze);if(Et===""&&Ce<=0){H++;continue}Et===""&&Ce--,De.push(Q(ze,Et))}o.value=[...o.value,...De],c.value=H,be()}function ue(z){const Ce=z.target;ae(Array.from(Ce.files??[])),Ce.value=""}function re(z){return v.value===null&&Array.from(z.dataTransfer?.types??[]).includes("Files")}function se(z){re(z)&&(z.preventDefault(),i.value=!0)}function oe(z){re(z)&&(z.preventDefault(),i.value=!1,ae(Array.from(z.dataTransfer?.files??[])))}function be(){if(!A||o.value.some(Ce=>Ce.state==="uploading"))return;const z=o.value.find(Ce=>Ce.state==="queued");z&&Ee(z)}async function Ee(z){if(!A||!z.source)return;z.state="uploading",z.progress=0,z.error="",z.retryable=!1;const Ce=new Set(o.value.filter(De=>De.file).map(De=>De.file.id)),H=n?.beginUpload();try{const De=A.upload(z.source,(ta,lr)=>{z.progress=lr>0?Math.min(100,Math.round(ta/lr*100)):0},z.uploadId||void 0);z.handle=Bo(De);const ze=await De.promise;z.handle=null;const Et=!!G(z.uid);if(ze.ok)!Et||W?A.remove(ze.item.id):(z.state="done",z.progress=100,z.file=ze.item,z.name=ze.item.file_name,z.size=ze.item.file_size,n?.markDirty());else if(ze.reason==="aborted"||ze.reason==="network"){const ta=await Fe(Ce);if(ze.reason==="aborted"){for(const lr of ta)A.remove(lr.id);o.value=o.value.filter(lr=>lr.uid!==z.uid),oi(z.uid)}else Et&&ta[0]&&ta.length===1?(z.state="done",z.progress=100,z.file=ta[0],z.name=ta[0].file_name,z.size=ta[0].file_size,n?.markDirty()):(z.state="failed",z.error=$("backend::lang.fileupload.upload_failed"),z.retryable=!0)}else if(Et)switch(z.state="failed",ze.reason){case"too_large":z.error=te.value?$("backend::lang.fileupload.too_large",{name:z.name,size:te.value}):ze.message||$("backend::lang.fileupload.upload_failed");break;case"invalid":z.error=ze.message||$("backend::lang.fileupload.upload_failed");break;default:z.error=ze.message||$("backend::lang.fileupload.upload_failed"),z.retryable=ze.status>=500}}finally{H?.(),W||be()}}async function Fe(z){if(!A)return[];const Ce=await A.list();return Ce.data?Ce.data.filter(H=>H.pending&&!z.has(H.id)):[]}function He(z){z.state!=="failed"||!z.source||(z.state="queued",z.error="",z.retryable=!1,be())}async function Le(z){const Ce=o.value.findIndex(De=>De.uid===z.uid);if(Ce<0)return;switch(o.value=o.value.filter(De=>De.uid!==z.uid),oi(z.uid),z.state){case"uploading":z.handle?.abort(),n?.markDirty(),be();return;case"queued":case"failed":return}if(!A||!z.file)return;n?.markDirty();const H=await A.remove(z.file.id);if(!H.data&&!W){const De=[...o.value];De.splice(Math.min(Ce,De.length),0,z),o.value=De,Me(H.error?.message||$("backend::lang.form.error_generic"),"danger")}}function ot(){return o.value.map(z=>z.uid)}function ut(z){const Ce=new Map(o.value.map(ze=>[ze.uid,ze])),H=z.map(ze=>Ce.get(ze)).filter(ze=>!!ze),De=o.value.filter(ze=>!z.includes(ze.uid));o.value=[...H,...De]}function Ct(){B!==null&&clearTimeout(B),B=setTimeout(()=>{B=null,cn()},DM)}function Rt(){return o.value.filter(z=>z.state==="done"&&z.file).map(z=>z.file.id)}async function cn(){if(!A)return;const z=Rt();if(U){C=z;return}const Ce=V;V=null;const H=++R;U=!0;try{const De=await A.reorder(z);if(C)return;!De.data&&!W&&H===R&&(Ce&&ut(Ce),Me($("backend::lang.fileupload.reorder_failed"),"danger"))}finally{U=!1,C&&(C=null,cn())}}function qe(z,Ce){const H=o.value.findIndex(Et=>Et.uid===z);if(H<0||Ce<0||Ce>=o.value.length||Ce===H)return!1;V===null&&(V=ot());const De=[...o.value],[ze]=De.splice(H,1);return De.splice(Ce,0,ze),o.value=De,d.value=$("backend::lang.fileupload.moved",{name:ze.name,position:Ce+1,total:De.length}),Ct(),!0}async function Te(z,Ce){const H=o.value.findIndex(ze=>ze.uid===Ce.uid);let De;switch(z.key){case"ArrowUp":case"ArrowLeft":De=H-1;break;case"ArrowDown":case"ArrowRight":De=H+1;break;default:return}z.preventDefault(),qe(Ce.uid,De)&&(await Ue(),p.value?.querySelector(`[data-handle="${Ce.uid}"]`)?.focus())}function Ne(z,Ce){v.value=Ce.uid,z.dataTransfer&&(z.dataTransfer.effectAllowed="move",z.dataTransfer.setData("text/plain",Ce.name))}function St(z,Ce){v.value!==null&&(z.preventDefault(),h.value=Ce.uid)}function tl(z,Ce){v.value!==null&&(z.preventDefault(),qe(v.value,o.value.findIndex(H=>H.uid===Ce.uid)),li())}function li(){v.value=null,h.value=null}function md(z){const Ce=z.file?.content_type??z.source?.type??"";return r.includes(Ce.toLowerCase())}function Mn(z){return!z.file||!md(z)||k.value.has(z.uid)?null:t.field.protected?y.value[z.uid]??null:z.file.thumb_url||z.file.url||null}function hd(){return typeof URL.revokeObjectURL=="function"}function oi(z){const Ce=y.value[z];if(Ce!==void 0){hd()&&URL.revokeObjectURL(Ce);const H={...y.value};delete H[z],y.value=H}E.delete(z)}async function vg(z){if(!A||!z.file||E.has(z.uid)||typeof URL.createObjectURL!="function")return;E.add(z.uid);const Ce=await A.thumb(z.file.id);if(!(W||!G(z.uid)||!E.has(z.uid))){if(!Ce){k.value=new Set([...k.value,z.uid]);return}y.value={...y.value,[z.uid]:URL.createObjectURL(Ce)}}}Ie(()=>o.value.map(z=>`${z.uid}:${z.state}`).join(","),()=>{if(t.field.protected)for(const z of o.value)z.state==="done"&&md(z)&&vg(z)});function si(z){k.value=new Set([...k.value,z.uid])}async function yd(z,Ce){if(!A||!z.file||typeof URL.createObjectURL!="function")return;const H=await A.download(z.file.id);if(!H){Me($("backend::lang.form.error_generic"),"danger");return}const De=URL.createObjectURL(H);D.push(De);const ze=document.createElement("a");ze.href=De,ze.rel="noopener",Ce?ze.download=z.file.file_name:ze.target="_blank",ze.click()}function qa(z){return t.field.useCaption&&z.file?.title?z.file.title:z.name}function ii(z){return le.value&&!!z.file?.pending}const uo=_(()=>b.value===null?void 0:G(b.value));function ui(z){b.value=z.uid,g.value=!0}function mg(z){const Ce=uo.value;Ce&&(Ce.file=z)}function hg(){const z=b.value;b.value=null,z!==null&&p.value?.querySelector(`[data-caption="${z}"]`)?.focus()}const ci=_(()=>{const z=t.field.thumbOptions?.mode;return z==="fit"||z==="auto"?"object-contain":"object-cover"});return ft(()=>{ne(!0)}),n&&Ie(n.revision,()=>{ne(!1)}),xt(()=>{W=!0,B!==null&&(clearTimeout(B),B=null);for(const z of o.value)z.handle?.abort();if(hd()){for(const z of Object.values(y.value))URL.revokeObjectURL(z);for(const z of D)URL.revokeObjectURL(z)}}),(z,Ce)=>(m(),x("div",{id:e.controlId,ref_key:"root",ref:p,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":s.value==="loading"?"true":void 0,class:"flex min-w-0 flex-col gap-4"},[s.value==="loading"?(m(),x("span",fD)):s.value==="failed"?(m(),x("p",pD,M(u($)("backend::lang.fileupload.load_failed")),1)):(m(),x(me,{key:2},[T.value&&de.value.length===0?(m(),x("p",vD,M(u($)("backend::lang.fileupload.empty")),1)):Y.value&&L.value&&de.value.length>0?(m(),x("ul",mD,[(m(!0),x(me,null,Oe(de.value,H=>(m(),x("li",{key:H.uid,"data-file-item":H.uid,"data-state":H.state,class:ge([[H.state==="failed"?"border-danger":"border-border",v.value===H.uid?"opacity-50":"",h.value===H.uid&&v.value!==H.uid?"border-2 border-dashed border-primary bg-sel":""],"relative overflow-hidden rounded-inner border bg-surface"]),onDragover:De=>St(De,H),onDrop:De=>tl(De,H)},[S("div",yD,[H.state==="uploading"?(m(),j(u(Cl),{key:0,size:20,class:"animate-spin text-muted","aria-hidden":"true"})):H.state==="failed"?(m(),j(u(ct),{key:1,size:16,class:"text-danger","aria-hidden":"true"})):H.state==="done"?(m(),x(me,{key:2},[Mn(H)&&!e.field.protected&&H.file?.url?(m(),x("a",{key:0,href:H.file.url,target:"_blank",rel:"noopener",class:"block size-full","aria-label":u($)("backend::lang.fileupload.open_preview",{name:H.name})},[S("img",{src:Mn(H)??void 0,alt:qa(H),class:ge([ci.value,"size-full"]),onError:De=>si(H)},null,42,bD)],8,gD)):Mn(H)?(m(),x("button",{key:1,type:"button",class:"block size-full","aria-label":u($)("backend::lang.fileupload.open_preview",{name:H.name}),onClick:De=>yd(H,!1)},[S("img",{src:Mn(H)??void 0,alt:qa(H),class:ge([ci.value,"size-full"])},null,10,xD)],8,_D)):k.value.has(H.uid)?(m(),x("span",kD,[N(u(qf),{size:20,"aria-hidden":"true"}),we(" "+M(u($)("backend::lang.fileupload.preview_unavailable")),1)])):(m(),j(u(_r),{key:3,size:20,class:"text-muted","aria-hidden":"true"}))],64)):(m(),j(u(_r),{key:3,size:20,class:"text-muted","aria-hidden":"true"})),!T.value&&H.state==="done"?(m(),x("button",{key:4,type:"button",draggable:"true","data-handle":H.uid,"aria-label":u($)("backend::lang.fileupload.move",{name:H.name}),class:ge([ru,"absolute top-2 left-2 cursor-grab"]),onKeydown:De=>Te(De,H),onDragstart:De=>Ne(De,H),onDragend:li},[N(u(Tf),{size:16,"aria-hidden":"true"})],40,wD)):ee("",!0),T.value?ee("",!0):(m(),x("div",$D,[e.field.useCaption&&H.state==="done"?(m(),x("button",{key:0,type:"button","data-caption":H.uid,"aria-label":u($)("backend::lang.fileupload.edit_details",{name:H.name}),class:ge(ru),onClick:De=>ui(H)},[N(u(Sl),{size:16,"aria-hidden":"true"})],8,CD)):ee("",!0),H.state==="failed"&&H.retryable?(m(),x("button",{key:1,type:"button","data-action":"retry","aria-label":u($)("backend::lang.fileupload.retry"),class:ge(ru),onClick:De=>He(H)},[N(u(Si),{size:16,"aria-hidden":"true"})],8,SD)):ee("",!0),S("button",{type:"button","data-action":"remove-file","aria-label":H.state==="uploading"||H.state==="queued"?u($)("backend::lang.fileupload.cancel_upload",{name:H.name}):u($)("backend::lang.form.remove_item",{name:H.name}),class:ge(MM),onClick:De=>Le(H)},[N(u(Ht),{size:16,"aria-hidden":"true"})],8,ED)]))]),S("div",AD,[S("span",{class:"truncate text-[13px]",title:qa(H)},M(qa(H)),9,DD),S("span",MD,[H.state==="queued"?(m(),x("span",OD,M(u($)("backend::lang.fileupload.queued")),1)):H.state==="uploading"?(m(),x("span",PD,M(u($)("backend::lang.fileupload.uploading",{percent:H.progress})),1)):(m(),x("span",TD,M(K(H.size)),1)),ii(H)?(m(),x("span",qD,M(u($)("backend::lang.fileupload.unsaved")),1)):ee("",!0)]),H.state==="uploading"?(m(),j(u(Ji),{key:0,"model-value":H.progress,max:100,"aria-label":u($)("backend::lang.fileupload.uploading",{percent:H.progress}),class:"h-1 w-full overflow-hidden rounded-pill bg-subtle"},{default:F(()=>[N(u(Zi),{class:"h-full bg-primary",style:jn({width:`${H.progress}%`})},null,8,["style"])]),_:2},1032,["model-value","aria-label"])):ee("",!0),H.state==="failed"?(m(),x("p",RD,[S("span",ID,M(u($)("backend::lang.fileupload.upload_error"))+": ",1),we(M(H.error),1)])):ee("",!0)])],42,hD))),128))])):Y.value&&!L.value&&de.value.length>0?(m(),x("div",BD,[(m(!0),x(me,null,Oe(de.value,H=>(m(),x("div",{key:H.uid,"data-file-item":H.uid,"data-state":H.state,class:"flex items-start gap-4"},[S("div",{class:ge([H.state==="failed"?"border-danger":"border-border","flex size-40 shrink-0 items-center justify-center overflow-hidden rounded-inner border bg-subtle"])},[H.state==="uploading"?(m(),j(u(Cl),{key:0,size:20,class:"animate-spin text-muted","aria-hidden":"true"})):H.state==="failed"?(m(),j(u(ct),{key:1,size:16,class:"text-danger","aria-hidden":"true"})):Mn(H)?(m(),x("img",{key:2,src:Mn(H)??void 0,alt:qa(H),class:ge([ci.value,"size-full"]),onError:De=>si(H)},null,42,ND)):k.value.has(H.uid)?(m(),x("span",VD,[N(u(qf),{size:20,"aria-hidden":"true"}),we(" "+M(u($)("backend::lang.fileupload.preview_unavailable")),1)])):(m(),j(u(_r),{key:4,size:20,class:"text-muted","aria-hidden":"true"}))],2),S("div",LD,[S("span",{class:"truncate font-semibold",title:qa(H)},M(qa(H)),9,jD),S("span",zD,[H.state==="queued"?(m(),x("span",UD,M(u($)("backend::lang.fileupload.queued")),1)):H.state==="uploading"?(m(),x("span",HD,M(u($)("backend::lang.fileupload.uploading",{percent:H.progress})),1)):(m(),x("span",KD,M(K(H.size)),1)),ii(H)?(m(),x("span",WD,M(u($)("backend::lang.fileupload.unsaved")),1)):ee("",!0)]),H.state==="uploading"?(m(),j(u(Ji),{key:0,"model-value":H.progress,max:100,"aria-label":u($)("backend::lang.fileupload.uploading",{percent:H.progress}),class:"h-1 w-full overflow-hidden rounded-pill bg-subtle"},{default:F(()=>[N(u(Zi),{class:"h-full bg-primary",style:jn({width:`${H.progress}%`})},null,8,["style"])]),_:2},1032,["model-value","aria-label"])):ee("",!0),H.state==="failed"?(m(),x("p",GD,[S("span",YD,M(u($)("backend::lang.fileupload.upload_error"))+": ",1),we(M(H.error),1)])):ee("",!0),T.value?ee("",!0):(m(),x("div",JD,[H.state!=="failed"?(m(),j(Ke,{key:0,size:"sm",variant:"outline","data-action":"replace-file",icon:u(Po),onClick:$e},{default:F(()=>[we(M(u($)("backend::lang.fileupload.replace_file")),1)]),_:1},8,["icon"])):ee("",!0),H.state==="failed"&&H.retryable?(m(),j(Ke,{key:1,size:"sm",variant:"outline","data-action":"retry",icon:u(Si),onClick:De=>He(H)},{default:F(()=>[we(M(u($)("backend::lang.fileupload.retry")),1)]),_:1},8,["icon","onClick"])):ee("",!0),e.field.useCaption&&H.state==="done"?(m(),j(Ke,{key:2,size:"sm",variant:"outline","data-caption":H.uid,icon:u(Sl),onClick:De=>ui(H)},{default:F(()=>[we(M(u($)("backend::lang.fileupload.details_submit")),1)]),_:1},8,["data-caption","icon","onClick"])):ee("",!0),N(Ke,{size:"sm",variant:"danger","data-action":"remove-file",icon:u(Ht),onClick:De=>Le(H)},{default:F(()=>[we(M(u($)("backend::lang.fileupload.remove_file")),1)]),_:1},8,["icon","onClick"])]))])],8,FD))),128))])):de.value.length>0?(m(),x("ul",ZD,[(m(!0),x(me,null,Oe(de.value,H=>(m(),x("li",{key:H.uid,"data-file-item":H.uid,"data-state":H.state,class:ge([[H.state==="failed"?"border-danger":"border-border",v.value===H.uid?"opacity-50":"",h.value===H.uid&&v.value!==H.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:De=>St(De,H),onDrop:De=>tl(De,H)},[S("div",XD,[L.value&&!T.value&&H.state==="done"?(m(),x("button",{key:0,type:"button",draggable:"true","data-handle":H.uid,"aria-label":u($)("backend::lang.fileupload.move",{name:H.name}),class:ge([pr,"cursor-grab"]),onKeydown:De=>Te(De,H),onDragstart:De=>Ne(De,H),onDragend:li},[N(u(Tf),{size:16,"aria-hidden":"true"})],40,eM)):ee("",!0),S("span",tM,[H.state==="uploading"?(m(),j(u(Cl),{key:0,size:16,class:"animate-spin text-muted","aria-hidden":"true"})):H.state==="failed"?(m(),j(u(ct),{key:1,size:16,class:"text-danger","aria-hidden":"true"})):Mn(H)?(m(),x("img",{key:2,src:Mn(H)??void 0,alt:"",class:"size-8 object-cover",onError:De=>si(H)},null,40,nM)):(m(),j(u(_r),{key:3,size:16,class:"text-muted","aria-hidden":"true"}))]),S("span",aM,[e.field.useCaption&&H.file?.title?(m(),x(me,{key:0},[S("span",{class:"truncate font-semibold",title:H.file.title},M(H.file.title),9,rM),S("span",{class:"truncate text-[13px] text-muted",title:H.name},M(H.name),9,lM)],64)):(m(),x("span",{key:1,class:"truncate",title:H.name},M(H.name),9,oM))]),S("span",sM,[H.state==="queued"?(m(),x("span",iM,M(u($)("backend::lang.fileupload.queued")),1)):H.state==="uploading"?(m(),x("span",uM,M(u($)("backend::lang.fileupload.uploading",{percent:H.progress})),1)):(m(),x("span",cM,M(K(H.size)),1)),ii(H)?(m(),x("span",dM,M(u($)("backend::lang.fileupload.unsaved")),1)):ee("",!0)]),!L.value&&!T.value&&H.state!=="failed"?(m(),j(Ke,{key:1,size:"sm",variant:"outline","data-action":"replace-file",icon:u(Po),onClick:$e},{default:F(()=>[we(M(u($)("backend::lang.fileupload.replace_file")),1)]),_:1},8,["icon"])):ee("",!0),S("span",fM,[H.state==="done"&&H.file?(m(),x(me,{key:0},[!e.field.protected&&H.file.url?(m(),x("a",{key:0,href:H.file.url,download:"",target:"_blank",rel:"noopener","aria-label":u($)("backend::lang.fileupload.download",{name:H.name}),class:ge(pr)},[N(u(Au),{size:16,"aria-hidden":"true"})],8,pM)):e.field.protected?(m(),x("button",{key:1,type:"button","data-action":"download","aria-label":u($)("backend::lang.fileupload.download",{name:H.name}),class:ge(pr),onClick:De=>yd(H,!0)},[N(u(Au),{size:16,"aria-hidden":"true"})],8,vM)):ee("",!0),e.field.useCaption&&!T.value?(m(),x("button",{key:2,type:"button","data-caption":H.uid,"aria-label":u($)("backend::lang.fileupload.edit_details",{name:H.name}),class:ge(pr),onClick:De=>ui(H)},[N(u(Sl),{size:16,"aria-hidden":"true"})],8,mM)):ee("",!0)],64)):ee("",!0),H.state==="failed"&&H.retryable?(m(),x("button",{key:1,type:"button","data-action":"retry","aria-label":u($)("backend::lang.fileupload.retry"),class:ge(pr),onClick:De=>He(H)},[N(u(Si),{size:16,"aria-hidden":"true"})],8,hM)):ee("",!0),T.value?ee("",!0):(m(),x("button",{key:2,type:"button","data-action":"remove-file","aria-label":H.state==="uploading"||H.state==="queued"?u($)("backend::lang.fileupload.cancel_upload",{name:H.name}):u($)("backend::lang.form.remove_item",{name:H.name}),class:ge([pr,"hover:bg-danger-soft hover:text-danger"]),onClick:De=>Le(H)},[N(u(Ht),{size:16,"aria-hidden":"true"})],8,yM))])]),H.state==="uploading"?(m(),j(u(Ji),{key:0,"model-value":H.progress,max:100,"aria-label":u($)("backend::lang.fileupload.uploading",{percent:H.progress}),class:"h-1 w-full overflow-hidden rounded-pill bg-subtle"},{default:F(()=>[N(u(Zi),{class:"h-full bg-primary",style:jn({width:`${H.progress}%`})},null,8,["style"])]),_:2},1032,["model-value","aria-label"])):ee("",!0),H.state==="failed"?(m(),x("p",gM,[S("span",bM,M(u($)("backend::lang.fileupload.upload_error"))+": ",1),we(M(H.error),1)])):ee("",!0)],42,QD))),128))])):ee("",!0),_e.value?(m(),x("button",{key:4,type:"button","data-fileupload-dropzone":"","aria-describedby":e.describedBy||void 0,class:ge([[i.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:$e,onDragover:se,onDragleave:Ce[0]||(Ce[0]=H=>i.value=!1),onDrop:oe},[S("span",xM,[N(u(Po),{size:20,class:"text-muted"})]),S("span",kM,M(Ae.value),1),ie.value!==""?(m(),x("span",wM,M(ie.value),1)):ee("",!0)],42,_M)):ke.value&&ie.value!==""?(m(),x("p",$M,M(ie.value),1)):ee("",!0),c.value>0?(m(),x("p",CM,[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(u(Fr)("backend::lang.fileupload.too_many",c.value,{max:I.value??0})),1)])):ee("",!0)],64)),S("input",{ref_key:"input",ref:f,type:"file",hidden:"",tabindex:"-1","data-fileupload-input":"",accept:pe.value,multiple:L.value||void 0,onChange:ue},null,40,SM),S("p",EM,M(d.value),1),e.field.useCaption?(m(),j(cD,{key:3,open:g.value,"onUpdate:open":Ce[1]||(Ce[1]=H=>g.value=H),file:uo.value?.file??null,routes:u(A),preview:uo.value?Mn(uo.value):null,"id-prefix":e.controlId,onSaved:mg,onClosed:hg},null,8,["open","file","routes","preview","id-prefix"])):ee("",!0)],8,dD))}}),PM=["id","name","value","required","aria-required","aria-invalid","aria-describedby"],TM=Z({__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=_(()=>n.modelValue===null||n.modelValue===void 0?"":String(n.modelValue)),l=_(()=>Xr(n.field));function o(s){const i=s.target.value.trim();if(i===""){a("update:modelValue",null);return}const c=Number(i);a("update:modelValue",Number.isFinite(c)?c:null)}return(s,i)=>(m(),x("input",Re({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:[u(Tt)(e.invalid),"h-input tabular-nums"],onInput:o}),null,16,PM))}}),qM=["id","aria-labelledby","aria-describedby"],RM=Z({__name:"PartialField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},setup(e){const t=e;return(n,a)=>(m(),x("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?(m(),j(od,{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"])):(m(),j(ei,{key:1,"data-partial-failed":"",text:u($)("backend::lang.extension.partial_failed")},null,8,["text"]))],8,qM))}}),IM={class:"relative"},BM=["id","name","type","value","required","aria-required","aria-invalid","aria-describedby"],FM=["aria-pressed","aria-label"],NM=Z({__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=q(!1),l=_(()=>typeof n.modelValue=="string"?n.modelValue:""),o=_(()=>Xr(n.field)),s=rt(el,null);return s&&Ie(s.revision,()=>{r.value=!1}),(i,c)=>(m(),x("div",IM,[S("input",Re({id:e.controlId,autocomplete:"new-password",spellcheck:"false"},o.value,{name:e.field.name,type:r.value?"text":"password",value:l.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:[u(Tt)(e.invalid),"h-input pr-12"],onInput:c[0]||(c[0]=d=>a("update:modelValue",d.target.value))}),null,16,BM),S("button",{type:"button","data-password-toggle":"","aria-pressed":r.value?"true":"false","aria-label":u($)(r.value?"backend::lang.form.hide_password":"backend::lang.form.show_password"),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",onClick:c[1]||(c[1]=d=>r.value=!r.value)},[(m(),j(Vt(r.value?u(qx):u(Ix)),{size:16,"aria-hidden":"true"}))],8,FM)]))}}),VM=new Set(["mltext","mltextarea","mlmarkdown"]);function LM(e){return e!==void 0&&VM.has(e)}function Ca(e){return e?LM(e.type)||!!e.element&&e.translatable===!0:!1}const Gl="summer:ml-locale";function jM(e){typeof window>"u"||e===""||window.dispatchEvent(new CustomEvent(Gl,{detail:e}))}function xn(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 zM=["aria-labelledby","data-ml-field"],UM={class:"flex flex-wrap items-center gap-2"},HM=["value","aria-label"],KM=["value"],ti=Z({__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=_(()=>xn(n.modelValue)),l=rt(is,null),o=_(()=>{const y=l?.value;return y&&y.length>0?[...y]:[]}),s=q(o.value[0]??"en"),i=_(()=>`${n.controlId}-label`),c=_(()=>`${n.controlId}-editor`),d=_(()=>r.value[s.value]??""),f=_(()=>({...n.field,type:n.innerType})),p=_(()=>n.contentLocale?{contentLocale:s.value}:{});function v(y){y&&(s.value=y)}function h(y){const k=y.target.value;v(k),jM(k)}function b(y){a("update:modelValue",{...r.value,[s.value]:y})}function g(y){const k=y.detail;typeof k=="string"&&k!==""&&v(k)}return ft(()=>{window.addEventListener(Gl,g)}),Aa(()=>{window.removeEventListener(Gl,g)}),(y,k)=>(m(),x("div",{class:"flex flex-col gap-1.5",role:"group","aria-labelledby":i.value,"data-ml-field":e.mlType},[S("div",UM,[S("select",{"data-ml-locale":"",class:"rounded-control border border-border-strong bg-surface px-2 py-1 text-[13px]",value:s.value,"aria-label":`Locale for ${e.field.label||e.field.name}`,onChange:h},[(m(!0),x(me,null,Oe(o.value,E=>(m(),x("option",{key:E,value:E},M(E),9,KM))),128))],40,HM)]),(m(),j(Vt(e.inner),Re({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},p.value,{"onUpdate:modelValue":b}),null,16,["field","model-value","control-id","invalid","described-by","source","record-id"]))],8,zM))}}),WM=["id","aria-labelledby","aria-describedby","aria-busy"],GM={key:0,"data-plugin-field-skeleton":"",class:"h-[42px] w-full rounded-control bg-skel","aria-hidden":"true"},ag=Z({__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=rt(dd,null),l=q("loading"),o=q(null);let s=null,i=!1;const c=_(()=>r?.value||Br.value),d=_(()=>JSON.stringify(n.field.typeOptions??{})),f=_(()=>n.field.readOnly===!0);function p(A,B){if(Object.is(A,B))return!0;if(A===null||B===null||typeof A!="object"||typeof B!="object")return!1;try{return JSON.stringify(A)===JSON.stringify(B)}catch{return!1}}function v(A,B){p(A.value,B)||(A.value=B)}function h(A,B,V){V?A.setAttribute(B,""):A.removeAttribute(B)}function b(A){A.setAttribute("field-name",n.field.name),A.setAttribute("record-id",n.recordId==null?"":String(n.recordId)),A.setAttribute("locale",n.contentLocale??""),A.setAttribute("ui-locale",c.value),A.setAttribute("options",d.value),h(A,"disabled",f.value),h(A,"invalid",n.invalid===!0)}function g(A){let B;return{promise:new Promise((U,C)=>{B=setTimeout(()=>C(new Error("field type element was not defined in time")),A)}),cancel:()=>clearTimeout(B)}}async function y(A){const B=await e5(A);if(customElements.get(A))return;if(B.length>0)throw new Error(`plugin script failed: ${B.join(", ")}`);const V=g(ng);try{await Promise.race([customElements.whenDefined(A),V.promise])}finally{V.cancel()}}async function k(A){const B=s,V=A.detail;if(!B||V===null||typeof V!="object")return;const{id:U,file:C}=V,R=Y=>{!i&&s===B&&B.dispatchEvent(new CustomEvent(K8,{detail:{id:U,...Y}}))},W=()=>$("backend::lang.fileupload.upload_failed"),T=n.source;if(!(C instanceof Blob)||!T){R({error:W()});return}const L=C instanceof File&&C.name!==""?C.name:"upload";try{const Y=await Pe.POST("/{vendor}/{plugin}/{controller}/{id}/fields/{field}/upload",{params:{path:{...T,id:n.recordId??0,field:n.field.name}},body:{file:""},bodySerializer:()=>{const le=new FormData;return le.append("file",C,L),le}});if(Y.data){R({url:Y.data.data.url});return}const I=Y.response.status===422?sd(Y.error?.error):"";R({error:I||W()})}catch{R({error:W()})}}function E(A){k(A)}function D(A){const B=A.detail;B!==null&&typeof B=="object"&&Object.hasOwn(B,"value")&&a("update:modelValue",B.value)}return ft(async()=>{const A=n.field.element??"";try{if(A==="")throw new Error("plugin field without an element");if(await y(A),i||!o.value)return;const B=document.createElement(A);b(B),v(B,n.modelValue),B.addEventListener(Fp,D),B.addEventListener(Np,E),o.value.append(B),s=B,l.value="ready"}catch{i||(l.value="failed")}}),Ie(()=>[n.recordId,n.invalid,n.contentLocale,f.value,c.value,d.value],()=>{s&&b(s)}),Ie(()=>n.modelValue,A=>{s&&v(s,A)},{deep:!0}),xt(()=>{i=!0,s?.removeEventListener(Fp,D),s?.removeEventListener(Np,E),s=null}),(A,B)=>l.value==="failed"?(m(),j(ei,{key:0,id:e.controlId,"data-plugin-field-failed":"","aria-describedby":e.describedBy||void 0,text:u($)("backend::lang.extension.widget_failed")},null,8,["id","aria-describedby","text"])):(m(),x("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"?(m(),x("span",GM)):ee("",!0),S("div",{ref_key:"mountPoint",ref:o,class:"contents"},null,512)],8,WM))}}),YM=Z({__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)=>(m(),j(ti,Re(n,{inner:ag,"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"]))}}),JM=["id"],ZM=["id","aria-labelledby","aria-label","aria-describedby","data-mode"],QM=["aria-labelledby"],XM=["id"],eO={class:"min-w-0 [overflow-wrap:anywhere]"},tO={key:0,class:"shrink-0 text-[12px] font-semibold text-muted","aria-hidden":"true"},nO=["data-permission","data-locked"],aO={class:"flex min-w-0 flex-col"},rO=["id"],lO=["id"],oO=Z({__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=_(()=>n.field.permissionOptions??[]),l=_(()=>n.field.mode==="radio"),o=_(()=>!!n.field.readOnly||!!Xr(n.field).readonly),s=_(()=>eg(n.field,n.modelValue)),i=_(()=>{const g=[],y=[];for(const k of r.value){if(!k.tab){y.push(k);continue}let E=g.find(D=>D.label===k.tab);E||(E={key:`tab:${k.tab}`,label:k.tab,options:[]},g.push(E)),E.options.push(k)}return y.length>0&&g.push({key:"other",label:$("backend::lang.permissioneditor.other"),options:y}),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=_(()=>`${n.controlId}-label`);function f(g,y){return`${n.controlId}-${g}-${y}`}function p(g){return o.value||!!g.locked}function v(g){return!!g.locked&&!o.value}function h(g){return s.value[g.code]??0}function b(g,y){if(p(g))return;const k={...s.value};y===1||l.value&&y===-1?k[g.code]=y:delete k[g.code],a("update:modelValue",k)}return(g,y)=>r.value.length===0?(m(),x("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"},M(u($)("backend::lang.permissioneditor.empty")),9,JM)):(m(),x("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:ge([e.invalid?"border-danger":"border-border","overflow-hidden rounded-inner border"]),"data-permission-editor":"","data-mode":l.value?"radio":"checkbox"},[(m(!0),x(me,null,Oe(i.value,(k,E)=>(m(),x("div",{key:k.key,role:"group","aria-labelledby":`${e.controlId}-section-${E}`,"data-permission-section":""},[S("h3",{id:`${e.controlId}-section-${E}`,class:ge([E>0?"border-t border-border":"","flex h-row-head items-center justify-between gap-4 bg-subtle px-4 font-semibold"])},[S("span",eO,M(k.label),1),l.value?ee("",!0):(m(),x("span",tO,M(u($)("backend::lang.permissioneditor.allow")),1))],10,XM),(m(!0),x(me,null,Oe(k.options,(D,A)=>(m(),x("div",{key:D.code,"data-permission":D.code,"data-locked":v(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",aO,[(m(),j(Vt(l.value?"span":"label"),{id:`${f(E,A)}-label`,for:l.value?void 0:f(E,A),class:"[overflow-wrap:anywhere]"},{default:F(()=>[we(M(D.label||D.code)+" ",1),v(D)?(m(),j(u(za),{key:0,size:14,class:"ml-1 inline-block align-[-2px] text-muted","aria-hidden":"true"})):ee("",!0)]),_:2},1032,["id","for"])),v(D)?(m(),x("p",{key:0,id:`${f(E,A)}-note`,class:"text-[13px] text-muted [overflow-wrap:anywhere]","data-permission-locked":""},M(u($)("backend::lang.permissioneditor.locked")),9,rO)):D.comment?(m(),x("p",{key:1,id:`${f(E,A)}-note`,class:"text-[13px] text-muted [overflow-wrap:anywhere]"},M(D.comment),9,lO)):ee("",!0)]),l.value?(m(),j(u($y),{key:0,orientation:"horizontal","model-value":String(h(D)),disabled:p(D),"aria-disabled":p(D)?"true":void 0,"aria-labelledby":`${f(E,A)}-label`,"aria-describedby":v(D)||D.comment?`${f(E,A)}-note`:void 0,class:"inline-flex shrink-0 gap-1 rounded-inner border border-border bg-subtle p-1","onUpdate:modelValue":B=>b(D,Number(B))},{default:F(()=>[(m(),x(me,null,Oe(c,B=>N(u(Cy),{key:B.value,value:B.value,"data-segment":B.value,class:ge([B.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(()=>[we(M(u($)(B.label)),1)]),_:2},1032,["value","data-segment","class"])),64))]),_:1},8,["model-value","disabled","aria-disabled","aria-labelledby","aria-describedby","onUpdate:modelValue"])):(m(),j(u(y4),{key:1,id:f(E,A),"model-value":h(D)===1,disabled:p(D),"aria-disabled":p(D)?"true":void 0,"aria-labelledby":`${f(E,A)}-label`,"aria-describedby":v(D)||D.comment?`${f(E,A)}-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":B=>b(D,B===!0?1:0)},{default:F(()=>[N(u(b4),null,{default:F(()=>[N(u(ba),{size:14,"aria-hidden":"true"})]),_:1})]),_:1},8,["id","model-value","disabled","aria-disabled","aria-labelledby","aria-describedby","onUpdate:modelValue"]))],8,nO))),128))],8,QM))),128))],10,ZM))}}),Ot="default";function kn(e){return e.tab?`tab:${e.tab}`:Ot}function Yl(e,t){return`${e}-tab-${t}`}function ni(e,t){return`${e}-panel-${t}`}function ai(e,t){const n=e.context;if(n==null)return!0;const a=Array.isArray(n)?n:[n];return a.length===0||a.includes(t)}function Jt(e,t,n="create"){const a={};for(const r of e){if(r.readOnly||!xT(r))continue;const l=t[r.name];if(!(r.type==="password"&&n==="update"&&(l===""||l===null))){if(r.type==="permissioneditor"){a[r.name]=eg(r,l);continue}if(Ca(r)){a[r.name]=xn(l);continue}l!==void 0&&(a[r.name]=l)}}return a}function lu(e,t){const n=typeof t=="string"||typeof t=="number"?String(t):"";return e!=="slug"?n:n.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function rg(e,t){const n=xn(e),a=xn(t),r=[];for(const l of new Set([...Object.keys(n),...Object.keys(a)]))(n[l]??"")!==(a[l]??"")&&r.push(l);return r}function sO(e,t,n,a,r,l,o){const s={},i=Ca(e.find(c=>c.name===t));for(const c of e){const d=c.preset;if(!d||d.field!==t||c.type!=="text"&&c.type!=="mltext")continue;if(c.type==="text"){if(o(c.name))continue;s[c.name]=lu(d.type,i?xn(a)[l]??"":a);continue}if(!i){if(o(c.name,l))continue;s[c.name]={...xn(r[c.name]),[l]:lu(d.type,a)};continue}const f=xn(a),p={...xn(r[c.name])};let v=!1;for(const h of rg(n,a))o(c.name,h)||(p[h]=lu(d.type,f[h]??""),v=!0);v&&(s[c.name]=p)}return s}function pd(e,t=[]){const n={};for(const a of e)if(a.default!==void 0)n[a.name]=a.default;else if(a.type==="switch"||a.type==="checkbox")n[a.name]=!1;else if(a.type==="relation"&&a.multiple)n[a.name]=[];else if(Ca(a)){const r={};for(const l of t)r[l]="";n[a.name]=r}return n}function br(e){return e?.enabledLocales??[]}function lg(e,t){const n={};for(const a of t)n[a]="";if(typeof e=="string"){const a=t[0];return a&&(n[a]=e),n}return{...n,...xn(e)}}function og(e,t,n){const a=e?.find(s=>s.type==="text"||Ca(s)),r=a?t[a.name]:void 0;if(typeof r=="string"||typeof r=="number")return String(r).trim();if(!a||!Ca(a))return"";const l=xn(r),o=n[0]!==void 0?(l[n[0]]??"").trim():"";if(o!=="")return o;for(const s of Object.values(l))if(s.trim()!=="")return s.trim();return""}function iO(e){const t={};for(const n of e??[]){if(!n||typeof n.message!="string"||n.message===""||typeof n.field!="string")continue;const a=n.locale?`${n.locale.toUpperCase()}: ${n.message}`:n.message;(t[n.field]??=[]).push(a)}return t}function Sa(e){const t={};for(const[n,a]of Object.entries(e??{})){const r=Array.isArray(a)?a.filter(l=>typeof l=="string"&&l!==""):typeof a=="string"&&a!==""?[a]:[];r.length>0&&(t[n]=r)}return t}function va(e){return JSON.stringify(Object.keys(e).sort().map(t=>[t,e[t]]))}function ar(e,t){const n=document.getElementById(`${e}-${t}`);return n?(n.matches("input, select, textarea, button, [tabindex]")||n.setAttribute("tabindex","-1"),n.focus(),!0):!1}const uO={role:"tablist",class:"inline-flex gap-1 rounded-inner border border-border bg-subtle p-1"},cO=["id","data-tab","aria-selected","aria-controls","tabindex","onClick","onKeydown"],dO=["aria-label"],vd=Z({__name:"FormTabs",props:{tabs:{},modelValue:{},idPrefix:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t;function r(l,o){const s=l.key==="ArrowRight"?1:l.key==="ArrowLeft"?-1:0;if(s===0)return;l.preventDefault();const i=(o+s+n.tabs.length)%n.tabs.length,c=n.tabs[i];c&&(a("update:modelValue",c.key),document.getElementById(Yl(n.idPrefix,i))?.focus())}return(l,o)=>(m(),x("div",uO,[(m(!0),x(me,null,Oe(e.tabs,(s,i)=>(m(),x("button",{id:u(Yl)(e.idPrefix,i),key:s.key,type:"button",role:"tab","data-tab":s.key,"aria-selected":s.key===e.modelValue?"true":"false","aria-controls":u(ni)(e.idPrefix,i),tabindex:s.key===e.modelValue?0:-1,class:ge([s.key===e.modelValue?"bg-surface text-text shadow-tab":"text-muted hover:text-text","inline-flex h-[34px] items-center gap-2 rounded-tab px-4 font-semibold transition-colors duration-150 ease-out"]),onClick:c=>a("update:modelValue",s.key),onKeydown:c=>r(c,i)},[we(M(s.label)+" ",1),s.errors>0?(m(),x("span",{key:0,"data-tab-errors":"","aria-label":u(Fr)("backend::lang.form.tab_errors",s.errors),class:"inline-flex h-5 min-w-5 items-center justify-center rounded-pill bg-danger px-1.5 text-[11px] font-bold text-white"},M(s.errors),9,dO)):ee("",!0)],42,cO))),128))]))}}),fO={class:"flex items-start gap-3 p-6 pb-4"},pO={key:0,"data-child-loading":"","aria-hidden":"true",class:"grid grid-cols-1 gap-x-6 gap-y-[22px] min-[600px]:grid-cols-2"},vO={key:1,role:"alert","data-child-load-failed":"",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},mO=["id","role","aria-labelledby"],hO=["disabled"],yO={class:"flex items-center gap-2.5 border-t border-border px-6 py-4"},gO={class:"ml-auto flex gap-2.5"},bO=Z({__name:"RelationChildModal",props:{open:{type:Boolean},source:{},ownerId:{},relation:{},schema:{},mode:{},childId:{},sessionKey:{},canDelete:{type:Boolean}},emits:["update:open","changed","gone","closed"],setup(e,{emit:t}){const n=e,a=t,r=q({}),l=q({}),o=q({}),s=q(!1),i=q(!1),c=q(!1),d=q(""),f=q(Ot),p=q(Wl()),v=q(0),h=q(0),{activeUploads:b,beginUpload:g}=fd(),y=q(null),k=Ta();let E=0;const D=_(()=>`child-${n.relation}`),A=_(()=>n.mode==="preview"),B=_(()=>n.mode==="create"?"create":"update"),V=_(()=>{const he=((A.value?n.schema.viewForm:n.schema.manageForm)??[]).filter(w=>ai(w,B.value));return A.value?he.map(w=>({...w,readOnly:!0,attributes:{...w.attributes??{},readonly:!0}})):he}),U=_(()=>V.value.map(ce=>ce.name)),C=_(()=>{if(!V.value.some(he=>he.tab))return[];const ce=[];for(const he of V.value){const w=kn(he);let O=ce.find(P=>P.key===w);O||(O={key:w,label:he.tab||$("backend::lang.form.tab_default"),errors:0},w===Ot?ce.unshift(O):ce.push(O)),o.value[he.name]&&(O.errors+=1)}return ce}),R=_(()=>Math.max(C.value.findIndex(ce=>ce.key===f.value),0)),W=_(()=>{if(C.value.length===0)return V.value;const ce=C.value[R.value]?.key??Ot;return V.value.filter(he=>kn(he)===ce)}),T=_(()=>{const ce=n.schema.messages;return n.mode==="create"?Ve(ce.createTitle):Ve(A.value?ce.previewTitle:ce.updateTitle)}),L=_(()=>Ve(n.mode==="create"?n.schema.messages.createSubmit:n.schema.messages.updateSubmit)),Y=_(()=>!A.value&&!s.value&&!i.value&&(v.value>0||b.value>0||va(Jt(V.value,r.value))!==d.value));function I(){return{[$a]:n.sessionKey,[Yy]:p.value}}function le(){return{...n.source,id:n.ownerId,name:n.relation}}gt(el,{get key(){return n.sessionKey},get childKey(){return p.value},get recordId(){return n.childId??0},routes:ce=>i8(n.source,n.ownerId,n.relation,n.childId??0,ce,n.sessionKey,p.value),markDirty:()=>{v.value++},pendingChanges:mt(v),revision:mt(h),beginUpload:g,activeUploads:mt(b)}),gt(ud,_(()=>r.value)),gt(cd,xe);const de=rt(is,_(()=>[]));gt(is,de);function xe(ce,he){if(r.value={...r.value,[ce]:he},o.value[ce]){const w={...o.value};delete w[ce],o.value=w}}function _e(ce,he){const w=de.value,O={...ce};for(const P of V.value)P.type==="password"?O[P.name]="":Ca(P)&&(O[P.name]=lg(ce[P.name],w));r.value=O,l.value=he?.labels??{},d.value=va(Jt(V.value,r.value))}async function ke(){await Ue(),y.value?.querySelector('input:not([type="hidden"]):not([tabindex="-1"]), select, textarea, button, [contenteditable="true"], [tabindex="0"]')?.focus()}function fe(){a("update:open",!1),Me($("backend::lang.relation.child_gone"),"danger"),a("gone")}async function Se(){const ce=++E;if(o.value={},i.value=!1,c.value=!1,v.value=0,p.value=Wl(),f.value=Ot,n.mode==="create"||n.childId===null){s.value=!1,_e(pd(V.value,de.value)),f.value=C.value[0]?.key??Ot,await ke();return}s.value=!0;try{const he=await Pe.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}",{params:{path:{...le(),child:n.childId},header:I()}});if(ce!==E)return;if(he.data)_e(he.data.data,he.data.meta),f.value=C.value[0]?.key??Ot;else if(he.response.status===404){fe();return}else i.value=!0}catch{ce===E&&(i.value=!0)}finally{ce===E&&(s.value=!1)}ce===E&&await ke()}Ie(()=>n.open,ce=>{ce?Se():E++},{immediate:!0});async function pe(ce){if(ce){a("update:open",!0);return}c.value||Y.value&&!await k.ask({message:$("backend::lang.form.unsaved_confirm"),confirmLabel:$("backend::lang.form.discard"),danger:!0})||a("update:open",!1)}async function Ae(ce){o.value=Sa(ce);const he=V.value.filter(O=>o.value[O.name]),w=he.find(O=>kn(O)===f.value)??he[0];w&&(C.value.length>0&&(f.value=kn(w)),await Ue(),ar(D.value,w.name))}async function J(){if(!(c.value||A.value||s.value||i.value||b.value>0)){c.value=!0;try{const ce=Jt(V.value,r.value),he=n.mode==="create"||n.childId===null?await Pe.POST("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records",{params:{path:le(),header:I()},body:ce}):await Pe.PUT("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/records/{child}",{params:{path:{...le(),child:n.childId},header:I()},body:ce});if(he.data){const O=n.mode==="create"?"created":"updated";o.value={},v.value=0,a("update:open",!1),Me(Ve(O==="created"?n.schema.messages.created:n.schema.messages.updated)),a("changed",O);return}const w=he.response.status;w===422?await Ae(he.error?.error.details):w===404?fe():Me(he.error?.error.message||$("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{c.value=!1}}}async function K(){if(c.value||n.childId===null)return;const ce=n.childId;if(await k.ask({message:Ve(n.schema.messages.deleteOneConfirm),confirmLabel:$("backend::lang.form.delete"),danger:!0})){c.value=!0;try{const w=await Pe.POST("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/delete",{params:{path:le(),header:{[$a]:n.sessionKey}},body:{ids:[ce]}});if(w.data){v.value=0,a("update:open",!1),Me(Ve(n.schema.messages.deleted,w.data.data.deleted||1)),a("changed","deleted");return}if(w.response.status===404){fe();return}Me(w.error?.error.message||$("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{c.value=!1}}}function te(ce){ce.preventDefault()}function ie(ce){ce.preventDefault(),a("closed")}return(ce,he)=>(m(),x(me,null,[N(u(Kr),{open:e.open,"onUpdate:open":pe},{default:F(()=>[N(u(oo),null,{default:F(()=>[N(u(Gr),{"data-dialog-overlay":"",class:"fixed inset-0 z-40 bg-overlay"}),N(u(Wr),{"data-relation-child-modal":"","data-dialog-content":"","data-mode":e.mode,"aria-modal":"true","aria-describedby":void 0,class:"fixed top-1/2 left-1/2 z-50 flex max-h-[calc(100vh-32px)] w-[calc(100%-32px)] max-w-[720px] -translate-x-1/2 -translate-y-1/2 flex-col rounded-modal bg-surface text-text shadow-pop",onOpenAutoFocus:te,onCloseAutoFocus:ie},{default:F(()=>[S("div",fO,[N(u(Yr),{class:"min-w-0 flex-1 text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[we(M(T.value),1)]),_:1}),N(u(Lr),{"data-action":"close","aria-label":u($)("backend::lang.form.close"),disabled:c.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(()=>[N(u(Ht),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label","disabled"])]),S("div",{ref_key:"body",ref:y,"data-child-body":"",class:"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-6 pb-6"},[s.value?(m(),x("div",pO,[(m(),x(me,null,Oe(6,w=>S("div",{key:w,class:"flex flex-col gap-1.5"},[...he[3]||(he[3]=[S("span",{class:"block h-3 w-24 rounded-[6px] bg-skel"},null,-1),S("span",{class:"block h-input rounded-control bg-skel"},null,-1)])])),64))])):i.value?(m(),x("p",vO,M(u($)("backend::lang.relation.child_load_failed")),1)):(m(),x(me,{key:2},[N(Qr,{errors:o.value,"field-names":U.value},null,8,["errors","field-names"]),C.value.length>0?(m(),j(vd,{key:0,modelValue:f.value,"onUpdate:modelValue":he[0]||(he[0]=w=>f.value=w),tabs:C.value,"id-prefix":D.value,class:"self-start"},null,8,["modelValue","tabs","id-prefix"])):ee("",!0),S("form",{id:C.value.length>0?u(ni)(D.value,R.value):void 0,role:C.value.length>0?"tabpanel":void 0,"aria-labelledby":C.value.length>0?u(Yl)(D.value,R.value):void 0,novalidate:"",onSubmit:it(J,["prevent"])},[S("fieldset",{disabled:c.value||A.value,class:"m-0 min-w-0 border-0 p-0"},[N(io,{fields:W.value,values:r.value,errors:o.value,labels:l.value,source:e.source,"record-id":e.childId,"id-prefix":D.value,onUpdate:xe},null,8,["fields","values","errors","labels","source","record-id","id-prefix"])],8,hO)],40,mO)],64))],512),S("div",yO,[e.mode==="update"&&e.canDelete&&!s.value&&!i.value?(m(),j(Ke,{key:0,variant:"danger","data-action":"delete-child",icon:u(zr),disabled:c.value,onClick:K},{default:F(()=>[we(M(u($)("backend::lang.form.delete")),1)]),_:1},8,["icon","disabled"])):ee("",!0),S("div",gO,[A.value?(m(),j(Ke,{key:0,variant:"outline","data-action":"cancel",onClick:he[1]||(he[1]=w=>pe(!1))},{default:F(()=>[we(M(u($)("backend::lang.form.close")),1)]),_:1})):(m(),x(me,{key:1},[N(Ke,{variant:"ghost","data-action":"cancel",disabled:c.value,onClick:he[2]||(he[2]=w=>pe(!1))},{default:F(()=>[we(M(u($)("backend::lang.form.cancel")),1)]),_:1},8,["disabled"]),i.value?ee("",!0):(m(),j(Ke,{key:0,variant:"primary","data-action":"save-child",disabled:c.value||s.value||u(b)>0,onClick:J},{default:F(()=>[we(M(c.value?u($)("backend::lang.form.saving"):L.value),1)]),_:1},8,["disabled"]))],64))])])]),_:1},8,["data-mode"])]),_:1})]),_:1},8,["open"]),N(Pa,{open:u(k).request.value!==null,message:u(k).request.value?.message??"","confirm-label":u(k).request.value?.confirmLabel,danger:u(k).request.value?.danger,onConfirm:u(k).confirm,onCancel:u(k).cancel},null,8,["open","message","confirm-label","danger","onConfirm","onCancel"])],64))}}),_O={class:"flex items-start gap-3"},xO={class:"flex min-w-0 flex-1 flex-col gap-1"},kO=["title"],wO={key:0,class:"truncate text-[13px] text-muted"},$O=["disabled"],CO={class:"relative block"},SO={class:"sr-only"},EO=["value","placeholder"],AO=["aria-multiselectable","aria-label","aria-busy"],DO=["data-candidate","aria-selected","onClick","onKeydown"],MO={class:"flex size-8 shrink-0 items-center justify-center rounded-full bg-subtle text-[12px] font-bold","aria-hidden":"true"},OO={class:"flex min-w-0 flex-1 flex-col leading-tight"},PO={class:"truncate font-semibold"},TO={key:0,class:"truncate text-[13px] text-muted"},qO={key:0,class:"block size-2.5 rounded-full bg-primary"},RO={key:0,role:"presentation",class:"px-1 py-3 text-[13px] text-muted"},IO={key:1,role:"presentation","data-candidates-empty":"",class:"px-1 py-3 text-[13px] text-muted"},BO=["aria-label"],FO={"data-candidates-range":"",class:"flex-1"},NO=["aria-label","disabled"],VO=["aria-label","disabled"],LO={class:"flex gap-2.5"},jO=["disabled"],zO=["disabled"],UO=["disabled","aria-busy"],HO=5,KO=300,Vp="inline-flex size-[34px] items-center justify-center rounded-tab border border-border text-text hover:bg-hover disabled:cursor-not-allowed disabled:opacity-60",WO=Z({__name:"RelationPickerModal",props:{open:{type:Boolean},source:{},recordId:{},relation:{},schema:{},sessionKey:{}},emits:["update:open","linked","closed"],setup(e,{emit:t}){const n=e,a=t,r=q(""),l=q(1),o=q([]),s=q(null),i=q(!1),c=q(!1),d=q(new Set),f=q(null),p=q(1),v=q(null),h=q({}),b=q({}),g=q(null);let y=0,k=null;const E=_(()=>n.schema.manage.list.columns),D=_(()=>E.value[0]?.key??""),A=_(()=>E.value[1]?.key??""),B=_(()=>d.value.size),V=`relation-${n.relation}-candidates`,U=_(()=>n.schema.pivotForm??[]),C=_(()=>U.value.map(w=>w.name)),R=_(()=>U.value.length>0),W=_(()=>`link-${n.relation}`);function T(){return n.sessionKey?{[$a]:n.sessionKey}:void 0}const L=_(()=>{const w=s.value;if(!w||w.total===0)return"";const O=(w.page-1)*w.per_page+1,P=Math.min(w.page*w.per_page,w.total);return $("backend::lang.relation.candidates_range",{from:O,to:P,total:w.total})}),Y=_(()=>Math.max(s.value?.last_page??1,1));function I(w){const O=w.id;return typeof O=="number"&&Number.isInteger(O)?O:typeof O=="string"&&/^\d+$/.test(O)?Number(O):null}function le(w,O){const P=O===""?void 0:w[O];return typeof P=="string"||typeof P=="number"?String(P):""}function X(w){return w.split(/[\s@._-]+/).filter(Boolean).slice(0,2).map(O=>O.charAt(0).toUpperCase()).join("")}async function de(){const w=++y;i.value=!0;try{const O=r.value.trim(),{data:P}=await Pe.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/candidates",{params:{path:{...n.source,id:n.recordId,name:n.relation},query:{search:O===""?void 0:O,page:l.value,per_page:HO},header:T()}});if(w!==y)return;o.value=P?.data??[],s.value=P?.meta??null}catch{w===y&&(o.value=[],s.value=null)}finally{w===y&&(i.value=!1)}}function xe(){k!==null&&(clearTimeout(k),k=null),y++,r.value="",l.value=1,o.value=[],s.value=null,i.value=!1,d.value=new Set,p.value=1,v.value=null,h.value={},b.value={}}Ie(()=>n.open,w=>{w?(xe(),de()):xe()},{immediate:!0});function _e(w){r.value=w.target.value,k!==null&&clearTimeout(k),k=setTimeout(()=>{k=null,l.value=1,de()},KO)}function ke(w){w<1||w>Y.value||w===l.value||(l.value=w,de())}function fe(w){const O=I(w);return O!==null&&d.value.has(O)}function Se(w){const O=I(w);if(O===null)return;if(R.value){d.value=new Set([O]),v.value=w;return}const P=new Set(d.value);P.has(O)?P.delete(O):P.add(O),d.value=P}async function pe(){!R.value||d.value.size===0||!v.value||(p.value=2,h.value=pd(U.value,[]),b.value={},await Ue(),g.value?.querySelector('input, select, textarea, button, [contenteditable="true"]')?.focus())}async function Ae(){if(c.value)return;p.value=1,b.value={},await Ue(),(document.querySelector(`#${V} [aria-selected="true"]`)??f.value)?.focus()}function J(w,O){if(h.value={...h.value,[w]:O},b.value[w]){const P={...b.value};delete P[w],b.value=P}}function K(w,O,P){switch(w.key){case" ":w.preventDefault(),Se(O);break;case"Enter":w.preventDefault(),Se(O),R.value&&pe();break;case"ArrowDown":case"ArrowUp":{w.preventDefault();const Q=w.currentTarget.parentElement?.querySelectorAll('[role="option"]'),G=w.key==="ArrowDown"?1:-1;Q?.[Math.min(Math.max(P+G,0),Q.length-1)]?.focus();break}}}function te(w){a("update:open",w)}async function ie(){const w=[...d.value];if(c.value||w.length===0)return;const O=R.value;c.value=!0;try{const P=await Pe.POST("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/link",{params:{path:{...n.source,id:n.recordId,name:n.relation},header:T()},body:O?{ids:w.slice(0,1),pivot:Jt(U.value,h.value)}:{ids:w}});if(P.data){te(!1),a("linked",P.data.data.linked??w.length);return}const Q=P.response.status;if(O&&Q===422){b.value=Sa(P.error?.error.details);const G=U.value.find(ne=>b.value[ne.name]);G&&(await Ue(),ar(W.value,G.name));return}if(O&&Q===404){Me($("backend::lang.relation.child_gone"),"danger"),d.value=new Set,v.value=null,p.value=1,de();return}if(O){Me($("backend::lang.form.error_generic"),"danger");return}Me(P.error?.error.message||$("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{c.value=!1}}function ce(w){w.preventDefault(),f.value?.focus()}function he(w){w.preventDefault(),a("closed")}return xt(()=>{k!==null&&clearTimeout(k)}),(w,O)=>(m(),j(u(Kr),{open:e.open,"onUpdate:open":te},{default:F(()=>[N(u(oo),null,{default:F(()=>[N(u(Gr),{"data-dialog-overlay":"",class:"fixed inset-0 z-40 bg-overlay"}),N(u(Wr),{"data-relation-picker":"","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 rounded-modal bg-surface p-6 text-text shadow-pop",onOpenAutoFocus:ce,onCloseAutoFocus:he},{default:F(()=>[S("div",_O,[S("div",xO,[N(u(Yr),{class:"text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[we(M(p.value===2?u(Ve)(e.schema.messages.pivotTitle):u(Ve)(e.schema.messages.link)),1)]),_:1}),p.value===1?(m(),j(u(Qa),{key:0,class:"text-muted"},{default:F(()=>[we(M(u(Ve)(e.schema.messages.linkHint)),1)]),_:1})):(m(),j(u(Qa),{key:1,class:"flex min-w-0 flex-col","data-chosen-record":""},{default:F(()=>[S("span",{class:"truncate font-semibold text-text",title:le(v.value??{},D.value)},M(le(v.value??{},D.value)),9,kO),A.value?(m(),x("span",wO,M(le(v.value??{},A.value)),1)):ee("",!0)]),_:1}))]),N(u(Lr),{"data-action":"close","aria-label":u($)("backend::lang.form.close"),class:"flex size-[34px] shrink-0 items-center justify-center rounded-tab bg-subtle text-muted hover:bg-hover hover:text-text"},{default:F(()=>[N(u(Ht),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label"])]),p.value===2?(m(),x("div",{key:0,ref_key:"stepTwo",ref:g,"data-pivot-step":"",class:"flex min-h-0 flex-col gap-4 overflow-y-auto"},[N(Qr,{errors:b.value,"field-names":C.value},null,8,["errors","field-names"]),S("form",{novalidate:"",onSubmit:it(ie,["prevent"])},[S("fieldset",{disabled:c.value,class:"m-0 min-w-0 border-0 p-0"},[N(io,{fields:U.value,values:h.value,errors:b.value,source:e.source,"record-id":null,"id-prefix":W.value,onUpdate:J},null,8,["fields","values","errors","source","id-prefix"])],8,$O)],32)],512)):ee("",!0),ha(S("label",CO,[S("span",SO,M(u($)("backend::lang.list.search")),1),N(u(Is),{size:18,class:"pointer-events-none absolute top-1/2 left-3.5 -translate-y-1/2 text-muted","aria-hidden":"true"}),S("input",{ref_key:"searchInput",ref:f,type:"search","data-candidate-search":"",value:r.value,placeholder:u(Ve)(e.schema.messages.candidateSearch),"aria-controls":V,class:"h-input w-full rounded-control border border-border-strong bg-surface pr-3.5 pl-10",onInput:_e},null,40,EO)],512),[[xu,p.value===1]]),ha(S("ul",{id:V,role:"listbox","aria-multiselectable":R.value?"false":"true","aria-label":u(Ve)(e.schema.messages.link),"aria-busy":i.value?"true":void 0,class:"flex min-h-0 flex-col gap-2 overflow-y-auto"},[(m(!0),x(me,null,Oe(o.value,(P,Q)=>(m(),x("li",{key:I(P)??`row-${Q}`,role:"option",tabindex:"0","data-candidate":I(P)??void 0,"aria-selected":fe(P)?"true":"false",class:ge([fe(P)?"border-[#e0b020] bg-sel":"border-border hover:bg-hover","flex h-[54px] cursor-pointer items-center gap-3 rounded-inner border px-3 transition-colors duration-150 ease-out"]),onClick:G=>Se(P),onKeydown:G=>K(G,P,Q)},[S("span",MO,M(X(le(P,D.value))),1),S("span",OO,[S("span",PO,M(le(P,D.value)),1),A.value?(m(),x("span",TO,M(le(P,A.value)),1)):ee("",!0)]),R.value?(m(),x("span",{key:0,"data-radio":"",class:ge([fe(P)?"border-primary":"border-border-strong bg-surface","flex size-[18px] shrink-0 items-center justify-center rounded-full border"]),"aria-hidden":"true"},[fe(P)?(m(),x("span",qO)):ee("",!0)],2)):(m(),x("span",{key:1,class:ge([fe(P)?"border-primary bg-primary text-on-primary":"border-border-strong bg-surface","flex size-[18px] shrink-0 items-center justify-center rounded-checkbox border"]),"aria-hidden":"true"},[fe(P)?(m(),j(u(ba),{key:0,size:14})):ee("",!0)],2))],42,DO))),128)),i.value&&o.value.length===0?(m(),x("li",RO,M(u($)("backend::lang.list.loading")),1)):!i.value&&o.value.length===0?(m(),x("li",IO,M(u($)("backend::lang.relation.no_candidates")),1)):ee("",!0)],8,AO),[[xu,p.value===1]]),p.value===1&&s.value&&s.value.total>0?(m(),x("nav",{key:1,"aria-label":u($)("backend::lang.list.pagination"),class:"flex items-center gap-2 text-[13px] text-muted"},[S("span",FO,M(L.value),1),S("button",{type:"button","data-page":"prev","aria-label":u($)("backend::lang.list.prev_page"),class:ge(Vp),disabled:i.value||l.value<=1,onClick:O[0]||(O[0]=P=>ke(l.value-1))},[N(u(qs),{size:16,"aria-hidden":"true"})],8,NO),S("button",{type:"button","data-page":"next","aria-label":u($)("backend::lang.list.next_page"),class:ge(Vp),disabled:i.value||l.value>=Y.value,onClick:O[1]||(O[1]=P=>ke(l.value+1))},[N(u(no),{size:16,"aria-hidden":"true"})],8,VO)],8,BO)):ee("",!0),S("div",LO,[p.value===2?(m(),x("button",{key:0,type:"button","data-action":"back",disabled:c.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:Ae},M(u($)("backend::lang.relation.back")),9,jO)):(m(),j(u(Lr),{key:1,"data-action":"cancel",class:"inline-flex h-button flex-1 items-center justify-center rounded-control border border-border-strong bg-surface font-semibold hover:bg-hover"},{default:F(()=>[we(M(u($)("backend::lang.form.cancel")),1)]),_:1})),R.value&&p.value===1?(m(),x("button",{key:2,type:"button","data-action":"next",disabled:B.value===0,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",onClick:pe},M(u($)("backend::lang.relation.next")),9,zO)):(m(),x("button",{key:3,type:"button","data-action":"confirm-link",disabled:c.value||B.value===0,"aria-busy":c.value?"true":void 0,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",onClick:ie},[R.value?(m(),x(me,{key:0},[we(M(c.value?u($)("backend::lang.form.saving"):u(Ve)(e.schema.messages.linkSubmit)),1)],64)):(m(),x(me,{key:1},[we(M(u($)("backend::lang.relation.add_count",{count:B.value})),1)],64))],8,UO))])]),_:1})]),_:1})]),_:1},8,["open"]))}}),GO={class:"flex items-start gap-3"},YO={class:"flex min-w-0 flex-1 flex-col gap-1"},JO={key:0,"data-pivot-loading":"","aria-hidden":"true",class:"flex flex-col gap-1.5"},ZO={key:1,role:"alert",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},QO=["disabled"],XO={class:"flex gap-2.5"},eP=["disabled"],tP=["disabled"],nP=Z({__name:"RelationPivotModal",props:{open:{type:Boolean},source:{},ownerId:{},relation:{},schema:{},childId:{},childName:{},sessionKey:{}},emits:["update:open","saved","gone","closed"],setup(e,{emit:t}){const n=e,a=t,r=q({}),l=q({}),o=q(!1),s=q(!1),i=q(!1),c=q(""),d=Ta();let f=0;const p=_(()=>`pivot-${n.relation}`),v=_(()=>n.schema.pivotForm??[]),h=_(()=>v.value.map(U=>U.name)),b=_(()=>!o.value&&!s.value&&va(Jt(v.value,r.value))!==c.value);function g(){return{[$a]:n.sessionKey}}function y(U){return{...n.source,id:n.ownerId,name:n.relation,child:U}}function k(U,C){if(r.value={...r.value,[U]:C},l.value[U]){const R={...l.value};delete R[U],l.value=R}}function E(){a("update:open",!1),Me($("backend::lang.relation.child_gone"),"danger"),a("gone")}async function D(){const U=++f;if(l.value={},s.value=!1,i.value=!1,r.value={},c.value=va({}),n.childId!==null){o.value=!0;try{const C=await Pe.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/pivot/{child}",{params:{path:y(n.childId),header:g()}});if(U!==f)return;C.data?(r.value={...C.data.data},c.value=va(Jt(v.value,r.value))):C.response.status===404?E():s.value=!0}catch{U===f&&(s.value=!0)}finally{U===f&&(o.value=!1)}}}Ie(()=>n.open,U=>{U?D():f++},{immediate:!0});async function A(U){if(U){a("update:open",!0);return}i.value||b.value&&!await d.ask({message:$("backend::lang.form.unsaved_confirm"),confirmLabel:$("backend::lang.form.discard"),danger:!0})||a("update:open",!1)}async function B(){if(!(i.value||o.value||s.value||n.childId===null)){i.value=!0;try{const U=await Pe.PUT("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/pivot/{child}",{params:{path:y(n.childId),header:g()},body:Jt(v.value,r.value)});if(U.data){l.value={},c.value=va(Jt(v.value,r.value)),a("update:open",!1),Me(Ve(n.schema.messages.pivotSaved)),a("saved");return}const C=U.response.status;if(C===422){l.value=Sa(U.error?.error.details);const R=v.value.find(W=>l.value[W.name]);R&&(await Ue(),ar(p.value,R.name))}else C===404?E():Me($("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{i.value=!1}}}function V(U){U.preventDefault(),a("closed")}return(U,C)=>(m(),x(me,null,[N(u(Kr),{open:e.open,"onUpdate:open":A},{default:F(()=>[N(u(oo),null,{default:F(()=>[N(u(Gr),{"data-dialog-overlay":"",class:"fixed inset-0 z-40 bg-overlay"}),N(u(Wr),{"data-relation-pivot-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:V},{default:F(()=>[S("div",GO,[S("div",YO,[N(u(Yr),{class:"text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[we(M(u(Ve)(e.schema.messages.pivotTitle)),1)]),_:1}),N(u(Qa),{class:"truncate text-muted",title:e.childName},{default:F(()=>[we(M(e.childName),1)]),_:1},8,["title"])]),N(u(Lr),{"data-action":"close","aria-label":u($)("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(()=>[N(u(Ht),{size:16,"aria-hidden":"true"})]),_:1},8,["aria-label","disabled"])]),o.value?(m(),x("div",JO,[...C[1]||(C[1]=[S("span",{class:"block h-3 w-24 rounded-[6px] bg-skel"},null,-1),S("span",{class:"block h-input rounded-control bg-skel"},null,-1)])])):s.value?(m(),x("p",ZO,M(u($)("backend::lang.relation.child_load_failed")),1)):(m(),x("form",{key:2,class:"flex flex-col gap-4",novalidate:"",onSubmit:it(B,["prevent"])},[N(Qr,{errors:l.value,"field-names":h.value},null,8,["errors","field-names"]),S("fieldset",{disabled:i.value,class:"m-0 min-w-0 border-0 p-0"},[N(io,{fields:v.value,values:r.value,errors:l.value,source:e.source,"record-id":null,"id-prefix":p.value,onUpdate:k},null,8,["fields","values","errors","source","id-prefix"])],8,QO)],32)),S("div",XO,[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:C[0]||(C[0]=R=>A(!1))},M(u($)("backend::lang.form.cancel")),9,eP),S("button",{type:"button","data-action":"save-pivot",disabled:i.value||o.value||s.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",onClick:B},M(i.value?u($)("backend::lang.form.saving"):u(Ve)(e.schema.messages.pivotSubmit)),9,tP)])]),_:1})]),_:1})]),_:1},8,["open"]),N(Pa,{open:u(d).request.value!==null,message:u(d).request.value?.message??"","confirm-label":u(d).request.value?.confirmLabel,danger:u(d).request.value?.danger,onConfirm:u(d).confirm,onCancel:u(d).cancel},null,8,["open","message","confirm-label","danger","onConfirm","onCancel"])],64))}}),aP=["id","data-relation-name","data-deferred","aria-labelledby","aria-describedby"],rP={class:"flex flex-col gap-2"},lP={class:"flex flex-wrap items-center gap-3"},oP={class:"flex min-w-0 flex-1 flex-col"},sP=["id"],iP=["id"],uP={key:0,class:"relative block w-[220px] max-w-full"},cP={class:"sr-only"},dP=["value","placeholder"],fP={key:0,"data-relation-pending":"",class:"flex items-center gap-2 text-[13px] text-muted"},pP={key:0,role:"alert",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},vP={key:1,class:"overflow-hidden rounded-inner border border-border"},mP={"data-relation-empty":"",class:"text-muted"},hP=["aria-label","onClick"],yP=300,gP=Z({__name:"RelationManager",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},setup(e){const t=e,n=rt(el,null),a=_(()=>t.field.relation||t.field.name),r=_(()=>typeof t.recordId=="number"?t.recordId:n&&n.recordId===0&&t.field.deferrable?0:null),l=_(()=>r.value===0),o=_(()=>t.source!=null&&r.value!==null),s=n?.key??Wl(),i=q(null),c=q([]),d=q(null),f=q(!0),p=q(!1),v=q(""),h=q(1),b=q(null),g=q([]),y=q(!1),k=q(!1),E=q(!1),D=q("create"),A=q(null),B=q(!1),V=q(null),U=q("");let C=null,R=null,W=null;const T=Ta();let L=0,Y=null;const I=_(()=>i.value?.view.list.columns??[]),le=_(()=>i.value?.view.toolbarButtons??[]),X=_(()=>i.value?.messages),de=_(()=>`${t.controlId}-heading`),xe=_(()=>`${t.controlId}-comment`),_e=_(()=>le.value.includes("create")&&(i.value?.manageForm?.length??0)>0),ke=_(()=>le.value.includes("update")&&(i.value?.manageForm?.length??0)>0),fe=_(()=>i.value?.kind==="belongsToMany"&&(i.value?.pivotForm?.length??0)>0&&(le.value.includes("link")||le.value.includes("update"))),Se=_(()=>(i.value?.viewForm?.length??0)>0),pe=_(()=>ke.value?"update":fe.value?"pivot":Se.value?"preview":null),Ae=_(()=>ke.value&&fe.value),J=_(()=>le.value.includes("unlink")||le.value.includes("delete"));function K(){return l.value?{[$a]:s}:void 0}function te(){return{...t.source,id:r.value,name:a.value}}function ie(){l.value&&n?.markDirty()}async function ce(){const{data:qe}=await Pe.GET("/{vendor}/{plugin}/{controller}/schema/relation/{name}",{params:{path:{...t.source,name:a.value}}});i.value=qe?.data??null}async function he(){const qe=++L;f.value=!0,p.value=!1;try{const Te=v.value.trim(),Ne={page:h.value};Te!==""&&(Ne.search=Te),b.value&&(Ne.sort=b.value.column,Ne.dir=b.value.dir);const{data:St}=await Pe.GET("/{vendor}/{plugin}/{controller}/{id}/relations/{name}",{params:{path:te(),query:Ne,header:K()}});if(qe!==L)return;c.value=St?.data??[],d.value=St?.meta??null,p.value=!St}catch{qe===L&&(c.value=[],d.value=null,p.value=!0)}finally{qe===L&&(f.value=!1)}}async function w(){if(o.value){try{await ce()}catch{i.value=null}if(!i.value){f.value=!1,p.value=!0;return}await he()}}function O(qe){v.value=qe.target.value,Y!==null&&clearTimeout(Y),Y=setTimeout(()=>{Y=null,h.value=1,g.value=[],he()},yP)}function P(qe){h.value=qe,g.value=[],he()}function Q(qe){const Te=b.value;Te?.column!==qe?b.value={column:qe,dir:"asc"}:Te.dir==="asc"?b.value={column:qe,dir:"desc"}:b.value=null,h.value=1,g.value=[],he()}function G(){return g.value.map(Number).filter(qe=>Number.isInteger(qe)&&qe>0)}function ne(qe){const Te=qe.id;return typeof Te=="number"&&Number.isInteger(Te)?Te:typeof Te=="string"&&/^\d+$/.test(Te)?Number(Te):null}function $e(qe){const Te=I.value[0]?.key,Ne=Te?qe[Te]:void 0;return typeof Ne=="string"||typeof Ne=="number"?String(Ne):""}async function ae(){const qe=G();if(!(y.value||qe.length===0||!i.value||!await T.ask({message:Ve(X.value?.unlinkConfirm,qe.length),confirmLabel:Ve(X.value?.unlinkSelected),danger:!0}))){y.value=!0;try{const Ne=await Pe.POST("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/unlink",{params:{path:te(),header:K()},body:{ids:qe}});if(Ne.data){g.value=[],ie(),Me(Ve(X.value?.unlinked,Ne.data.data.removed??qe.length)),await he();return}Me(Ne.error?.error.message||$("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{y.value=!1}}}async function ue(qe){y.value=!0;try{const Te=await Pe.POST("/{vendor}/{plugin}/{controller}/{id}/relations/{name}/delete",{params:{path:te(),header:K()},body:{ids:qe}});if(Te.data){g.value=[],ie(),Me(Ve(X.value?.deleted,Te.data.data.deleted||qe.length)),await he();return}Me(Te.error?.error.message||$("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{y.value=!1}}async function re(){const qe=G();y.value||qe.length===0||!i.value||await T.ask({message:Ve(X.value?.deleteConfirm,qe.length),confirmLabel:Ve(X.value?.deleteSelected),danger:!0},()=>ue(qe))}async function se(qe){ie(),Me(Ve(X.value?.linked,qe)),g.value=[],await he()}function oe(qe){C=qe.currentTarget??W,D.value="create",A.value=null,E.value=!0}function be(qe,Te){const Ne=ne(qe);Ne!==null&&(C=Te,V.value=Ne,U.value=$e(qe),B.value=!0)}function Ee(qe,Te){const Ne=pe.value,St=ne(qe);if(!(Ne===null||St===null)){if(Ne==="pivot"){be(qe,Te);return}C=Te,D.value=Ne,A.value=St,E.value=!0}}async function Fe(){ie(),g.value=[],await he()}async function He(){ie(),await he()}async function Le(){g.value=[],await he()}function ot(){const qe=C&&C.isConnected?C:null;C=null,qe?.focus()}function ut(){R?.focus()}function Ct(qe){const Te=qe?.$el;return Te instanceof HTMLElement?Te:null}function Rt(qe){R=Ct(qe)}function cn(qe){W=Ct(qe)}return xt(()=>{Y!==null&&clearTimeout(Y)}),w(),(qe,Te)=>o.value?(m(),x("section",{key:0,id:e.controlId,"data-relation-manager":"","data-relation-name":a.value,"data-deferred":l.value?"true":void 0,"aria-labelledby":de.value,"aria-describedby":e.field.comment?xe.value:void 0,tabindex:"-1",class:"flex flex-col gap-4"},[S("div",rP,[S("header",lP,[S("div",oP,[S("h2",{id:de.value,class:"text-[17px] font-bold tracking-[-0.01em]"},M(i.value?.label||e.field.label||a.value),9,sP),e.field.comment?(m(),x("p",{key:0,id:xe.value,class:"text-[13px] text-muted"},M(e.field.comment),9,iP)):ee("",!0)]),i.value?.view.showSearch?(m(),x("label",uP,[S("span",cP,M(u($)("backend::lang.list.search")),1),N(u(Is),{size:16,class:"pointer-events-none absolute top-1/2 left-3 -translate-y-1/2 text-muted","aria-hidden":"true"}),S("input",{type:"search","data-relation-search":"",value:v.value,placeholder:u($)("backend::lang.list.search_prompt"),class:"h-[38px] w-full rounded-control border border-transparent bg-subtle pr-3 pl-9",onInput:O,onKeydown:Te[0]||(Te[0]=ga(it(()=>{},["prevent"]),["enter"]))},null,40,dP)])):ee("",!0),(m(!0),x(me,null,Oe(le.value,Ne=>(m(),x(me,{key:Ne},[Ne==="create"&&_e.value?(m(),j(Ke,{key:0,ref_for:!0,ref:cn,"data-action":"create",size:"sm",variant:"primary",icon:u(Rs),disabled:y.value||!i.value,"aria-haspopup":"dialog",onClick:oe},{default:F(()=>[we(M(u(Ve)(X.value?.create)),1)]),_:1},8,["icon","disabled"])):Ne==="link"?(m(),j(Ke,{key:1,ref_for:!0,ref:Rt,"data-action":"link",size:"sm",variant:_e.value?"outline":"primary",icon:u(Qm),disabled:y.value||!i.value,"aria-haspopup":"dialog",onClick:Te[1]||(Te[1]=St=>k.value=!0)},{default:F(()=>[we(M(u(Ve)(X.value?.link)),1)]),_:1},8,["variant","icon","disabled"])):Ne==="delete"?(m(),j(Ke,{key:2,"data-action":"delete",size:"sm",variant:"danger",icon:u(zr),disabled:y.value||g.value.length===0,onClick:re},{default:F(()=>[we(M(u(Ve)(X.value?.deleteSelected)),1)]),_:1},8,["icon","disabled"])):Ne==="unlink"?(m(),j(Ke,{key:3,"data-action":"unlink",size:"sm",variant:"danger",icon:u(Zm),disabled:y.value||g.value.length===0,onClick:ae},{default:F(()=>[we(M(u(Ve)(X.value?.unlinkSelected)),1)]),_:1},8,["icon","disabled"])):ee("",!0)],64))),128))]),l.value?(m(),x("p",fP,[N(u(xc),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.relation.pending_note")),1)])):ee("",!0)]),p.value&&!f.value?(m(),x("p",pP,M(u($)("backend::lang.relation.load_failed")),1)):(m(),x("div",vP,[N(Wy,{selected:g.value,"onUpdate:selected":Te[2]||(Te[2]=Ne=>g.value=Ne),variant:"relation",columns:I.value,rows:c.value,loading:f.value,selectable:J.value,sortable:!0,sort:b.value,openable:pe.value!==null,trailing:Ae.value,onSort:Q,onOpen:Ee},{empty:F(()=>[S("span",mP,M(u(Ve)(X.value?.empty)),1)]),trailing:F(({row:Ne})=>[S("button",{type:"button","data-action":"edit-pivot","aria-label":u(Ve)(X.value?.editPivot,void 0,{name:$e(Ne)}),class:"flex size-8 items-center justify-center rounded-pager text-muted transition-colors duration-150 ease-out hover:bg-hover hover:text-text",onClick:St=>be(Ne,St.currentTarget)},[N(u(bw),{size:16,"aria-hidden":"true"})],8,hP)]),_:1},8,["selected","columns","rows","loading","selectable","sort","openable","trailing"]),d.value&&d.value.last_page>1?(m(),j(Gy,{key:0,meta:d.value,loading:f.value,"per-page-options":[],"per-page":d.value.per_page,onPage:P},null,8,["meta","loading","per-page"])):ee("",!0)])),i.value&&le.value.includes("link")?(m(),j(WO,{key:2,open:k.value,"onUpdate:open":Te[3]||(Te[3]=Ne=>k.value=Ne),source:e.source,"record-id":r.value,relation:a.value,schema:i.value,"session-key":l.value?u(s):null,onLinked:se,onClosed:ut},null,8,["open","source","record-id","relation","schema","session-key"])):ee("",!0),i.value&&(_e.value||pe.value==="update"||pe.value==="preview")?(m(),j(bO,{key:3,open:E.value,"onUpdate:open":Te[4]||(Te[4]=Ne=>E.value=Ne),source:e.source,"owner-id":r.value,relation:a.value,schema:i.value,mode:D.value,"child-id":A.value,"session-key":u(s),"can-delete":le.value.includes("delete"),onChanged:Fe,onGone:Le,onClosed:ot},null,8,["open","source","owner-id","relation","schema","mode","child-id","session-key","can-delete"])):ee("",!0),i.value&&fe.value?(m(),j(nP,{key:4,open:B.value,"onUpdate:open":Te[5]||(Te[5]=Ne=>B.value=Ne),source:e.source,"owner-id":r.value,relation:a.value,schema:i.value,"child-id":V.value,"child-name":U.value,"session-key":u(s),onSaved:He,onGone:Le,onClosed:ot},null,8,["open","source","owner-id","relation","schema","child-id","child-name","session-key"])):ee("",!0),N(Pa,{open:u(T).request.value!==null,message:u(T).request.value?.message??"","confirm-label":u(T).request.value?.confirmLabel,danger:u(T).request.value?.danger,busy:u(T).busy.value,onConfirm:u(T).confirm,onCancel:u(T).cancel},null,8,["open","message","confirm-label","danger","busy","onConfirm","onCancel"])],8,aP)):ee("",!0)}}),bP=["id","aria-describedby"],_P=["id","aria-describedby"],xP={class:"min-w-0 [overflow-wrap:anywhere]"},kP=["id"],wP=["data-relation"],$P={class:"flex size-[22px] items-center justify-center rounded-full bg-primary text-[10px] font-bold text-on-primary","aria-hidden":"true"},CP={class:"font-semibold"},SP={key:0,"data-chip-locked":"",class:"flex size-6 items-center justify-center text-muted"},EP={class:"sr-only"},AP=["aria-label","onClick"],DP=["id","aria-expanded","aria-controls","aria-activedescendant","aria-required","aria-invalid","aria-describedby","value","placeholder"],MP={key:1,class:"relative"},OP=["id","aria-expanded","aria-controls","aria-activedescendant","aria-required","aria-invalid","aria-describedby","value","placeholder"],PP=["id"],TP=["id","data-value","aria-selected","aria-disabled","onMousedown"],qP={class:"min-w-0 truncate"},RP={key:0,role:"presentation",class:"px-3 py-2 text-[13px] text-muted"},IP={key:1,role:"presentation",class:"px-3 py-2 text-[13px] text-muted"},BP={key:2,role:"presentation",class:"p-1"},FP=["id"],NP=20,VP=300,LP=Z({__name:"RelationField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=_(()=>n.field.readOnly?"readonly":n.field.multiple?"multiple":"single"),l=_(()=>`${n.controlId}-listbox`),o=q({}),s=q(new Set);function i(J){const K={...o.value};let te=null;for(const ie of J)K[ie.value]=ie.label,ie.locked&&!s.value.has(ie.value)&&(te??=new Set(s.value),te.add(ie.value));o.value=K,te&&(s.value=te)}Ie(()=>n.labels,J=>i(J??[]),{immediate:!0});function c(J){return J!==null&&s.value.has(J)}const d=_(()=>`${n.controlId}-locked-note`),f=_(()=>s.value.size>0),p=_(()=>[n.describedBy,f.value?d.value:""].filter(Boolean).join(" "));function v(J){return typeof J=="number"&&Number.isInteger(J)?J:typeof J=="string"&&/^\d+$/.test(J)?Number(J):null}const h=_(()=>v(n.modelValue)),b=_(()=>Array.isArray(n.modelValue)?n.modelValue.map(v).filter(J=>J!==null):[]);function g(J){return o.value[J]??String(J)}function y(J){return J.split(/[\s@._-]+/).filter(Boolean).slice(0,2).map(K=>K.charAt(0).toUpperCase()).join("")}const k=_(()=>{const J=n.labels?.[0]?.label;return J||(n.field.emptyOption??"—")}),E=q(!1),D=q(""),A=q([]),B=q(0),V=q(0),U=q(!1),C=q(-1);let R=0,W=null;const T=_(()=>B.value{const J=[];r.value==="single"&&n.field.emptyOption!==void 0&&J.push({key:"empty",label:n.field.emptyOption,value:null,muted:!0,locked:!1});const K=new Set(b.value);for(const te of A.value)r.value==="multiple"&&K.has(te.value)||J.push({key:`option-${te.value}`,label:te.label,value:te.value,muted:!1,locked:!!te.locked||c(te.value)});return J});function I(J){return`${l.value}-${J}`}function le(){E.value||(E.value=!0,C.value=-1,L(1,!1))}function X(){E.value=!1,D.value="",C.value=-1,W!==null&&(clearTimeout(W),W=null)}function de(J){D.value=J.target.value,E.value=!0,C.value=-1,W!==null&&clearTimeout(W),W=setTimeout(()=>{W=null,L(1,!1)},VP)}function xe(){T.value&&!U.value&&L(B.value+1,!0)}function _e(J){const K=J.target;K.scrollTop+K.clientHeight>=K.scrollHeight-24&&xe()}function ke(J){J.locked||(r.value==="multiple"?J.value!==null&&!b.value.includes(J.value)&&a("update:modelValue",[...b.value,J.value]):a("update:modelValue",J.value),X())}function fe(J){c(J)||a("update:modelValue",b.value.filter(K=>K!==J))}function Se(J,K){for(let te=J+K;te>=0&&te!c(te));K!==void 0&&fe(K)}break}}const Ae=_(()=>h.value!==null?g(h.value):n.field.emptyOption??"");return xt(()=>{W!==null&&clearTimeout(W)}),(J,K)=>r.value==="readonly"?(m(),x("div",{key:0,id:e.controlId,"data-relation-readonly":"","aria-describedby":e.describedBy||void 0,class:ge([e.labels?.[0]?.label?"text-text":"text-muted","flex min-h-input items-center rounded-control border border-border bg-subtle px-3.5"])},M(k.value),11,bP)):r.value==="single"&&c(h.value)?(m(),x(me,{key:1},[S("div",{id:e.controlId,"data-relation-locked":"","aria-describedby":p.value||void 0,class:"flex min-h-input items-center justify-between gap-2 rounded-control border border-border bg-subtle px-3.5"},[S("span",xP,M(Ae.value),1),N(u(za),{size:14,class:"shrink-0 text-muted","aria-hidden":"true"})],8,_P),S("p",{id:d.value,"data-locked-note":"",class:"mt-1.5 flex items-center gap-2 text-[13px] text-muted"},[N(u(za),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.form.locked_note")),1)],8,kP)],64)):(m(),x("div",{key:2,class:"relative","data-relation":r.value},[r.value==="multiple"?(m(),x("div",{key:0,class:ge([e.invalid?"border-danger":"border-border-strong","flex min-h-input flex-wrap items-center gap-1.5 rounded-control border bg-surface p-1.5"])},[(m(!0),x(me,null,Oe(b.value,te=>(m(),x("span",{key:te,"data-chip":"",class:"inline-flex h-[30px] items-center gap-1.5 rounded-pill bg-subtle pr-1 pl-1"},[S("span",$P,M(y(g(te))),1),S("span",CP,M(g(te)),1),c(te)?(m(),x("span",SP,[N(u(za),{size:14,"aria-hidden":"true"}),S("span",EP,M(u($)("backend::lang.form.locked_item",{name:g(te)})),1)])):(m(),x("button",{key:1,type:"button","aria-label":u($)("backend::lang.form.remove_item",{name:g(te)}),class:"flex size-6 items-center justify-center rounded-full text-muted hover:bg-hover hover:text-text",onClick:ie=>fe(te)},[N(u(Ht),{size:14,"aria-hidden":"true"})],8,AP))]))),128)),S("input",{id:e.controlId,type:"text",role:"combobox",autocomplete:"off","aria-expanded":E.value?"true":"false","aria-controls":l.value,"aria-autocomplete":"list","aria-activedescendant":E.value&&C.value>=0?I(C.value):void 0,"aria-required":e.field.required?"true":void 0,"aria-invalid":e.invalid?"true":void 0,"aria-describedby":p.value||void 0,value:D.value,placeholder:u($)("backend::lang.form.add_item"),class:"h-[30px] min-w-[120px] flex-1 border-0 bg-transparent px-2 focus-visible:shadow-none",onClick:le,onInput:de,onKeydown:pe,onBlur:X},null,40,DP)],2)):(m(),x("div",MP,[S("input",{id:e.controlId,type:"text",role:"combobox",autocomplete:"off","aria-expanded":E.value?"true":"false","aria-controls":l.value,"aria-autocomplete":"list","aria-activedescendant":E.value&&C.value>=0?I(C.value):void 0,"aria-required":e.field.required?"true":void 0,"aria-invalid":e.invalid?"true":void 0,"aria-describedby":p.value||void 0,value:E.value?D.value:Ae.value,placeholder:E.value&&Ae.value||u($)("backend::lang.form.select_placeholder"),class:ge([[e.invalid?"border-danger":"border-border-strong",!E.value&&h.value===null?"text-muted":"text-text"],"h-input w-full rounded-control border bg-surface pr-10 pl-3.5"]),onClick:le,onInput:de,onKeydown:pe,onBlur:X},null,42,OP),N(u(to),{size:16,class:"pointer-events-none absolute top-1/2 right-3.5 -translate-y-1/2 text-muted","aria-hidden":"true"})])),ha(S("ul",{id:l.value,role:"listbox",class:"absolute inset-x-0 top-full z-20 mt-1 max-h-64 overflow-y-auto rounded-inner border border-border bg-surface p-1 shadow-menu",onScroll:_e},[(m(!0),x(me,null,Oe(Y.value,(te,ie)=>(m(),x("li",{id:I(ie),key:te.key,role:"option","data-value":te.value??"empty","aria-selected":r.value==="single"&&te.value===h.value?"true":"false","aria-disabled":te.locked?"true":void 0,class:ge([[te.muted||te.locked?"text-muted":"text-text",te.locked?"cursor-not-allowed":"cursor-pointer hover:bg-hover",ie===C.value&&!te.locked?"bg-hover":""],"flex h-10 items-center justify-between gap-2 rounded-control px-3"]),onMousedown:it(ce=>ke(te),["prevent"])},[S("span",qP,M(te.label),1),te.locked?(m(),j(u(za),{key:0,size:14,class:"shrink-0","aria-hidden":"true"})):ee("",!0)],42,TP))),128)),U.value?(m(),x("li",RP,M(u($)("backend::lang.form.loading_options")),1)):Y.value.filter(te=>te.value!==null).length===0?(m(),x("li",IP,M(u($)("backend::lang.form.no_options")),1)):ee("",!0),T.value&&!U.value?(m(),x("li",BP,[S("button",{type:"button","data-action":"more-options",class:"h-8 w-full rounded-control text-[13px] font-semibold text-muted hover:bg-hover hover:text-text",onMousedown:it(xe,["prevent"])},M(u($)("backend::lang.form.more_options")),33)])):ee("",!0)],40,PP),[[xu,E.value]]),f.value?(m(),x("p",{key:2,id:d.value,"data-locked-note":"",class:"mt-1.5 flex items-center gap-2 text-[13px] text-muted"},[N(u(za),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.form.locked_note")),1)],8,FP)):ee("",!0)],8,wP))}}),jP={class:"flex min-w-0 flex-col"},zP=["for"],UP={key:0,class:"text-danger","aria-hidden":"true"},HP=["id"],KP=["id","aria-checked","aria-invalid","aria-describedby"],WP=Z({__name:"SwitchField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=_(()=>id(n.modelValue));function l(){a("update:modelValue",Xy(n.modelValue,!r.value))}return(o,s)=>(m(),x("div",{class:ge([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",jP,[S("label",{for:e.controlId,class:"font-semibold"},[we(M(e.field.label||e.field.name),1),e.field.required?(m(),x("span",UP," *")):ee("",!0)],8,zP),e.field.comment?(m(),x("p",{key:0,id:`${e.controlId}-comment`,class:"text-[13px] text-muted"},M(e.field.comment),9,HP)):ee("",!0)]),S("button",{id:e.controlId,type:"button",role:"switch","aria-checked":r.value?"true":"false","aria-invalid":e.invalid?"true":void 0,"aria-describedby":e.describedBy||void 0,class:ge([r.value?"bg-primary":"bg-border-strong","relative h-[26px] w-[44px] shrink-0 rounded-pill transition-colors duration-150 ease-out"]),onClick:l},[S("span",{class:ge([r.value?"translate-x-[18px] bg-on-primary":"translate-x-0 bg-white","absolute top-[3px] left-[3px] size-[20px] rounded-full shadow-tab transition-transform duration-150 ease-out"]),"aria-hidden":"true"},null,2)],10,KP)],2))}}),GP=["id","name","value","required","aria-required","aria-invalid","aria-describedby"],sg=Z({__name:"TextField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=_(()=>n.modelValue===null||n.modelValue===void 0?"":String(n.modelValue)),l=_(()=>Xr(n.field));return(o,s)=>(m(),x("input",Re({id:e.controlId},l.value,{name:e.field.name,type:"text",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:[u(Tt)(e.invalid),"h-input"],onInput:s[0]||(s[0]=i=>a("update:modelValue",i.target.value))}),null,16,GP))}}),YP=["id","name","rows","value","required","aria-required","aria-invalid","aria-describedby"],ig=Z({__name:"TextareaField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r={tiny:2,small:4,large:8,huge:12,giant:18},l=_(()=>r[n.field.size??""]??5),o=_(()=>n.modelValue===null||n.modelValue===void 0?"":String(n.modelValue)),s=_(()=>Xr(n.field));return(i,c)=>(m(),x("textarea",Re({id:e.controlId},s.value,{name:e.field.name,rows:l.value,value:o.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:[u(Tt)(e.invalid),"min-h-input resize-y py-2.5"],onInput:c[0]||(c[0]=d=>a("update:modelValue",d.target.value))}),null,16,YP))}}),JP={class:"flex flex-col gap-1.5"},ZP=["aria-pressed"],QP={key:0,class:"flex flex-col gap-1.5"},XP={key:0,"data-markdown-preview-error":"",role:"status",class:"text-[13px] text-danger"},eT=["aria-busy","innerHTML"],tT=["id","name","rows","value","required","aria-required","aria-invalid","aria-describedby"],Lp="Preview unavailable.",nT=300,ug=Z({__name:"MarkdownField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r={tiny:2,small:4,large:8,huge:12,giant:18},l=_(()=>r[n.field.size??""]??8),o=_(()=>n.modelValue===null||n.modelValue===void 0?"":String(n.modelValue)),s=_(()=>Xr(n.field)),i=q(!1),c=q(""),d=q(""),f=q(!1);let p=0,v=null;function h(){v!==null&&(clearTimeout(v),v=null)}function b(k){const D=k?.error?.details?.markdown;return Array.isArray(D)&&typeof D[0]=="string"&&D[0]!==""?D[0]:Lp}async function g(){const k=++p;if(o.value.trim()===""){c.value="",d.value="",f.value=!1;return}f.value=!0;try{const{data:E,error:D}=await Pe.POST("/markdown/preview",{body:{markdown:o.value}});if(k!==p)return;E?(c.value=E.data.html,d.value=""):(c.value="",d.value=b(D))}catch{if(k!==p)return;c.value="",d.value=Lp}finally{k===p&&(f.value=!1)}}function y(){i.value=!i.value,h(),i.value?g():(p++,f.value=!1)}return Ie(o,()=>{i.value&&(h(),v=setTimeout(()=>{v=null,g()},nT))}),xt(()=>{h(),p++}),(k,E)=>(m(),x("div",JP,[S("button",{type:"button","data-markdown-preview":"",class:"self-start rounded-pager px-2 py-1 text-[13px] text-muted hover:bg-hover hover:text-text","aria-pressed":i.value?"true":"false",onClick:y}," Preview ",8,ZP),i.value?(m(),x("div",QP,[d.value?(m(),x("p",XP,M(d.value),1)):ee("",!0),S("div",{"data-markdown-preview-pane":"",class:ge([u(Tt)(e.invalid),"summer-markdown min-h-input overflow-auto px-3.5 py-2.5"]),"aria-busy":f.value?"true":"false",innerHTML:c.value},null,10,eT)])):(m(),x("textarea",Re({key:1,id:e.controlId},s.value,{name:e.field.name,rows:l.value,value:o.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:[u(Tt)(e.invalid),"min-h-input resize-y py-2.5"],onInput:E[0]||(E[0]=D=>a("update:modelValue",D.target.value))}),null,16,tT))]))}}),aT=Z({__name:"MLTextField",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)=>(m(),j(ti,Re(n,{inner:sg,"inner-type":"text","ml-type":"mltext","onUpdate:modelValue":l[0]||(l[0]=o=>a("update:modelValue",o))}),null,16))}}),rT=Z({__name:"MLTextareaField",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)=>(m(),j(ti,Re(n,{inner:ig,"inner-type":"textarea","ml-type":"mltextarea","onUpdate:modelValue":l[0]||(l[0]=o=>a("update:modelValue",o))}),null,16))}}),lT=Z({__name:"MLMarkdownField",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)=>(m(),j(ti,Re(n,{inner:ug,"inner-type":"markdown","ml-type":"mlmarkdown","onUpdate:modelValue":l[0]||(l[0]=o=>a("update:modelValue",o))}),null,16))}}),oT=["id","aria-describedby"],sT={key:0},iT={class:"font-mono text-text"},uT={key:1},cT={class:"font-mono text-text"},Ao="\0",dT=Z({__name:"UnsupportedField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},setup(e){const t=e,n=_(()=>{const[r="",l=""]=$("backend::lang.form.unsupported_field",{type:Ao}).split(Ao);return{before:r,after:l}}),a=_(()=>$("backend::lang.form.unsupported_field",{type:Ao}).includes(Ao));return(r,l)=>(m(),x("div",{id:e.controlId,"data-unsupported-field":"","aria-describedby":e.describedBy||void 0,class:"flex min-h-input items-center gap-2.5 rounded-control border-[1.5px] border-dashed border-border-strong bg-subtle px-3.5 text-[13px] text-muted"},[N(u(Wm),{size:16,"aria-hidden":"true"}),a.value?(m(),x("span",sT,[we(M(n.value.before),1),S("code",iT,M(t.field.type),1),we(M(n.value.after),1)])):(m(),x("span",uT,[we(M(u($)("backend::lang.form.unsupported_field"))+" ",1),S("code",cT,M(t.field.type),1)]))],8,oT))}}),fT=["id","aria-labelledby","aria-describedby","aria-busy"],pT={key:0,"data-widget-skeleton":"",class:"h-[42px] w-[160px] rounded-control bg-skel","aria-hidden":"true"},vT=Z({__name:"WidgetField",props:{field:{},modelValue:{},controlId:{},invalid:{type:Boolean},describedBy:{},labels:{},source:{},recordId:{}},setup(e){const t=e,n=rt(ud,null),a=rt(cd,()=>{}),r=rt(dd,null),l=rt(tg,()=>Promise.resolve([])),o=q("loading"),s=q(null);let i=null,c=!1,d=!1;function f(){const D=n?.value??{},A={};for(const B of t.field.fill??[])D[B]!==void 0&&(A[B]=D[B]);return A}const p=_(()=>JSON.stringify(f())),v=_(()=>r?.value||Br.value);function h(D){let A;return{promise:new Promise((V,U)=>{A=setTimeout(()=>U(new Error("widget element was not defined in time")),D)}),cancel:()=>clearTimeout(A)}}async function b(D){const A=await l();if(customElements.get(D))return;if(A.length>0)throw new Error(`plugin script failed: ${A.join(", ")}`);const B=h(ng);try{await Promise.race([customElements.whenDefined(D),B.promise])}finally{B.cancel()}}function g(D){Me(D||$("backend::lang.extension.action_failed"),"danger"),i?.setAttribute("state","error")}async function y(D){const A=t.source,B=i;if(!(!B||c||!A)){c=!0,B.setAttribute("busy",""),B.removeAttribute("state");try{const V=await Pe.POST("/{vendor}/{plugin}/{controller}/widgets/{field}",{params:{path:{...A,field:t.field.name}},body:{record_id:t.recordId??void 0,values:f(),...D===void 0?{}:{payload:D}}});if(V.data){const U=V.data.data,C=U.fill??{};for(const R of t.field.fill??[])Object.hasOwn(C,R)&&a(R,C[R]);d||(Object.hasOwn(U,"data")?B.setAttribute("data",JSON.stringify(U.data)):B.removeAttribute("data"),B.dispatchEvent(new CustomEvent(H8,{detail:{data:U.data,fill:C,message:U.message}}))),U.message&&Me(U.message)}else g(V.error?.error.message)}catch{g()}finally{c=!1,i?.removeAttribute("busy")}}}function k(D){const A=D.detail;if(A!==null&&typeof A=="object"&&Object.hasOwn(A,"payload"))return A.payload}function E(D){y(k(D))}return ft(async()=>{const D=t.field.widget??"";try{if(D===""||!t.source)throw new Error("widget field without a tag or controller");if(await b(D),d||!s.value)return;const A=document.createElement(D);A.setAttribute("record-id",t.recordId==null?"":String(t.recordId)),A.setAttribute("field-name",t.field.name),A.setAttribute("locale",v.value),A.setAttribute("fill-values",p.value),A.setAttribute("label",t.field.actionLabel||t.field.label||t.field.name),A.setAttribute("busy-label",$("backend::lang.extension.busy")),A.addEventListener(Bp,E),s.value.append(A),i=A,o.value="ready"}catch{d||(o.value="failed")}}),Ie(p,D=>i?.setAttribute("fill-values",D)),Ie(v,D=>i?.setAttribute("locale",D)),xt(()=>{d=!0,i?.removeEventListener(Bp,E),i=null}),(D,A)=>o.value==="failed"?(m(),j(ei,{key:0,id:e.controlId,"data-widget-failed":"","aria-describedby":e.describedBy||void 0,text:u($)("backend::lang.extension.widget_failed")},null,8,["id","aria-describedby","text"])):(m(),x("div",{key:1,id:e.controlId,role:"group","data-widget-host":"","aria-labelledby":e.field.label?`${e.controlId}-label`:void 0,"aria-describedby":e.describedBy||void 0,"aria-busy":o.value==="loading"?"true":void 0,class:"flex min-h-input items-center"},[o.value==="loading"?(m(),x("span",pT)):ee("",!0),S("div",{ref_key:"mountPoint",ref:s,class:"contents"},null,512)],8,fT))}}),rr="relation-manager",cg=new Map([[rr,()=>gP]]),dg=new Map([["text",sg],["textarea",ig],["number",TM],["dropdown",U8],["switch",WP],["checkbox",_8],["relation",LP],["widget",vT],["partial",RM],["fileupload",OM],["datepicker",V8],["password",NM],["permissioneditor",oO],["markdown",ug],["mltext",aT],["mltextarea",rT],["mlmarkdown",lT]]),mT=new Set(["switch","checkbox",rr]),hT=new Set([rr]),yT=new Set([rr,"widget","partial","fileupload"]),gT=new Set(["widget","partial","fileupload","permissioneditor","mltext","mltextarea","mlmarkdown"]);function bT(e){return dg.get(e)??cg.get(e)?.()??dT}function _T(e){return(dg.has(e)||cg.has(e))&&!yT.has(e)}function ri(e){return typeof e.element=="string"&&e.element!==""}function fg(e){return ri(e)?e.translatable?YM:ag:bT(e.type)}function xT(e){return ri(e)||_T(e.type)}function kT(e){return hT.has(e)}function wT(e){return mT.has(e)}function $T(e){return gT.has(e)}const CT=Z({__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=_(()=>fg(n.field));return(l,o)=>(m(),j(Vt(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]=s=>a("update:modelValue",s))},null,8,["field","model-value","control-id","invalid","described-by","labels","source","record-id"]))}}),ST=["data-field"],ET=["id"],AT={key:0,class:"text-danger","aria-hidden":"true"},DT=["for"],MT={key:0,class:"text-danger","aria-hidden":"true"},OT=["id"],PT=["id"],TT=["id"],qT=Z({__name:"FormField",props:{field:{},modelValue:{},errors:{},notices:{},labels:{},source:{},recordId:{},idPrefix:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,a=t,r=_(()=>`${n.idPrefix??"field"}-${n.field.name}`),l=_(()=>r.value),o=_(()=>`${r.value}-comment`),s=_(()=>`${r.value}-error`),i=_(()=>`${r.value}-notice`),c=_(()=>(n.errors?.length??0)>0),d=_(()=>(n.notices?.length??0)>0),f=_(()=>wT(n.field.type)),p=_(()=>$T(n.field.type)||ri(n.field)),v=_(()=>!f.value&&!!n.field.comment),h=_(()=>[v.value||f.value&&n.field.comment?o.value:"",c.value?s.value:"",d.value?i.value:""].filter(Boolean).join(" "));return(b,g)=>(m(),x("div",{class:"flex min-w-0 flex-col gap-1.5","data-field":e.field.name},[p.value&&e.field.label?(m(),x("span",{key:0,id:`${l.value}-label`,class:"font-semibold"},[we(M(e.field.label),1),e.field.required?(m(),x("span",AT," *")):ee("",!0)],8,ET)):!f.value&&!p.value?(m(),x("label",{key:1,for:l.value,class:"font-semibold"},[we(M(e.field.label||e.field.name),1),e.field.required?(m(),x("span",MT," *")):ee("",!0)],8,DT)):ee("",!0),N(CT,{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":g[0]||(g[0]=y=>a("update:modelValue",y))},null,8,["field","model-value","control-id","invalid","described-by","labels","source","record-id"]),v.value?(m(),x("p",{key:2,id:o.value,class:"text-[13px] text-muted"},M(e.field.comment),9,OT)):ee("",!0),d.value?(m(),x("div",{key:3,id:i.value,role:"status","data-field-notice":"",class:"summer-callout summer-callout--warning text-[13px]!"},[(m(!0),x(me,null,Oe(e.notices,(y,k)=>(m(),x("p",{key:k,class:"summer-callout__text"},M(y),1))),128))],8,PT)):ee("",!0),c.value?(m(),x("div",{key:4,id:s.value,class:"flex flex-col gap-0.5 text-[13px] text-danger"},[(m(!0),x(me,null,Oe(e.errors,(y,k)=>(m(),x("p",{key:k,class:"flex items-center gap-1.5"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(y),1)]))),128))],8,TT)):ee("",!0)],8,ST))}}),RT={class:"grid grid-cols-1 gap-x-6 gap-y-[22px] min-[600px]:grid-cols-2"},io=Z({__name:"FormGrid",props:{fields:{},values:{},errors:{},notices:{},labels:{},source:{},recordId:{},idPrefix:{}},emits:["update"],setup(e,{emit:t}){const n=t;function a(r){if(r.type===rr)return"col-span-full";switch(r.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(r,l)=>(m(),x("div",RT,[(m(!0),x(me,null,Oe(e.fields,o=>(m(),j(qT,{key:o.name,class:ge(a(o)),field:o,"model-value":e.values[o.name],errors:e.errors[o.name],notices:e.notices?.[o.name],labels:e.labels?.[o.name],source:e.source,"record-id":e.recordId,"id-prefix":e.idPrefix,"onUpdate:modelValue":s=>n("update",o.name,s)},null,8,["class","field","model-value","errors","notices","labels","source","record-id","id-prefix","onUpdate:modelValue"]))),128))]))}}),IT={class:"flex w-full flex-col gap-5 pb-24"},BT={class:"flex flex-wrap items-center gap-4"},FT={class:"flex min-w-0 flex-1 flex-col"},NT={class:"truncate text-[24px] font-bold tracking-[-0.02em]"},VT={key:0,class:"text-muted"},LT={key:0,role:"alert",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},jT=["id","role","aria-labelledby"],zT={class:"fixed inset-x-0 bottom-0 z-30 flex items-center gap-2.5 border-t border-border bg-surface px-8 py-3.5"},UT={class:"ml-auto flex items-center gap-2.5"},dl="field",jp=Z({__name:"FormView",setup(e){const t=sn(),n=jr(),a={vendor:String(t.params.vendor??""),plugin:String(t.params.plugin??""),controller:String(t.params.controller??"")},r=Ms(a),l=Cn(r)??"/",o=t.name==="create"?"create":"update",s=o==="update"?Number(t.params.id):null,i=q(null),c=q({}),d=q({}),f=q({}),p=q(null),v=q({}),h=q(!0),b=q(!1),g=q(!1),y=q(""),k=q(Ot),E=Ta();let D=!1,A=Promise.resolve([]);const B=Wl(),V={[$a]:B},U=q(0),C=q(0),{activeUploads:R,beginUpload:W}=fd(),T=_(()=>(i.value?.fields??[]).filter(se=>ai(se,o)&&(o==="update"||!kT(se.type)||se.type===rr&&!!se.deferrable))),L=_(()=>T.value.map(se=>se.name)),Y=_(()=>{if(!T.value.some(oe=>oe.tab))return[];const se=[];for(const oe of T.value){const be=kn(oe);let Ee=se.find(Fe=>Fe.key===be);Ee||(Ee={key:be,label:oe.tab||$("backend::lang.form.tab_default"),errors:0},be===Ot?se.unshift(Ee):se.push(Ee)),f.value[oe.name]&&(Ee.errors+=1)}return se}),I=_(()=>Math.max(Y.value.findIndex(se=>se.key===k.value),0)),le=_(()=>{if(Y.value.length===0)return T.value;const se=Y.value[I.value]?.key??Ot;return T.value.filter(oe=>kn(oe)===se)}),X=_(()=>og(i.value?.fields,c.value,br(i.value?.meta))),de=_(()=>{if(o==="update"&&X.value!=="")return X.value;const se=o==="create"?i.value?.messages.create:i.value?.messages.update;return Ve(se,void 0,{name:X.value})}),xe=_(()=>o==="update"?Ve(i.value?.messages.update,void 0,{name:X.value}):""),_e=_(()=>o==="update"&&!!i.value?.preview),ke=_(()=>_e.value?`${l}/${s}/preview`:l),fe=_(()=>!h.value&&(U.value>0||R.value>0||va(Jt(T.value,c.value,o))!==y.value));function Se(se){if(se){const oe=br(i.value?.meta),be={...se.data};for(const Ee of T.value)Ee.type==="password"?be[Ee.name]="":Ca(Ee)&&(be[Ee.name]=lg(se.data[Ee.name],oe));c.value=be,d.value=se.meta.labels??{}}y.value=va(Jt(T.value,c.value,o))}async function pe(){h.value=!0,b.value=!1;const se={path:a},[oe,be]=await Promise.all([Pe.GET("/{vendor}/{plugin}/{controller}/schema/form",{params:se}),s!==null?Pe.GET("/{vendor}/{plugin}/{controller}/{id}",{params:{path:{...a,id:s}}}):Promise.resolve(null)]);i.value=oe.data?.data??null,b.value=!oe.data||be!==null&&!be.data,i.value&&(A=ld(r,i.value.assets)),i.value&&o==="create"&&(c.value=pd(T.value,br(i.value.meta))),Se(be?.data),K.value=te(),k.value=Y.value[0]?.key??Ot,h.value=!1}const Ae=new Set,J=new Map,K=q("en");function te(){return br(i.value?.meta)[0]??"en"}function ie(se){const oe=se.detail;typeof oe=="string"&&oe!==""&&(K.value=oe)}Ie(k,()=>{K.value=te()});function ce(se,oe){return oe===void 0?Ae.has(se):J.get(se)?.has(oe)??!1}function he(se,oe){const be=c.value[se],Ee={...c.value,[se]:oe};if(Ae.add(se),Ca(T.value.find(Fe=>Fe.name===se))){let Fe=J.get(se);Fe||(Fe=new Set,J.set(se,Fe));for(const He of rg(be,oe))Fe.add(He)}if(o==="create"&&Object.assign(Ee,sO(T.value,se,be,oe,c.value,K.value,ce)),c.value=Ee,f.value[se]){const Fe={...f.value};delete Fe[se],f.value=Fe}}gt(ud,_(()=>c.value)),gt(cd,he),gt(dd,_(()=>i.value?.meta.locale||Br.value)),gt(is,_(()=>br(i.value?.meta))),gt(tg,()=>A),gt(el,{key:B,recordId:s??0,routes:se=>Qy(a,s??0,se,B),markDirty:()=>{U.value++},pendingChanges:mt(U),revision:mt(C),beginUpload:W,activeUploads:mt(R)});async function w(se){f.value=Sa(se?.details);const oe=T.value.filter(Ee=>f.value[Ee.name]),be=oe.find(Ee=>kn(Ee)===k.value)??oe[0];be&&(Y.value.length>0&&(k.value=kn(be)),await Ue(),ar(dl,be.name))}function O(se,oe){const be=i.value?.redirects,Ee=(be?.[o]?.[se]||be?.default)??"";return Ky(Ee,r,typeof oe=="number"||typeof oe=="string"?oe:null)}async function P(){if(g.value||!i.value||R.value>0)return null;g.value=!0,p.value=null,v.value={};try{const se=Jt(T.value,c.value,o),oe=s===null?await Pe.POST("/{vendor}/{plugin}/{controller}",{params:{path:a,header:V},body:se}):await Pe.PUT("/{vendor}/{plugin}/{controller}/{id}",{params:{path:{...a,id:s},header:V},body:se});if(oe.data){f.value={},Se(oe.data),v.value=iO(oe.data.meta.notices),U.value=0,C.value++;const be=Ve(i.value.messages.saved,void 0,{name:X.value}),Ee=Object.values(v.value).flat().join(" ");return Me(Ee===""?be:`${be} ${Ee}`),oe.data}return oe.response.status===422?await w(oe.error?.error):oe.response.status===403?(p.value=oe.error?.error.message||$("backend::lang.form.forbidden"),await w(oe.error?.error)):Me(oe.error?.error.message||$("backend::lang.form.error_generic"),"danger"),null}catch{return Me($("backend::lang.form.error_generic"),"danger"),null}finally{g.value=!1}}async function Q(se){D=!0;try{await n.push(se)}finally{D=!1}}async function G(){const se=await P();se&&o==="create"&&await Q(O("redirect",se.data.id))}async function ne(){const se=await P();se&&await Q(O("redirectClose",se.data.id))}async function $e(){if(!(s===null||g.value||!i.value||!await E.ask({message:Ve(i.value.messages.deleteConfirm,void 0,{name:X.value}),confirmLabel:$("backend::lang.form.delete"),danger:!0}))){g.value=!0;try{const oe=await Pe.DELETE("/{vendor}/{plugin}/{controller}/{id}",{params:{path:{...a,id:s}}});if(oe.data){Me(Ve(i.value.messages.deleted,void 0,{name:X.value})),await Q(l);return}const be=oe.response.status===403?"backend::lang.list.action_forbidden":"backend::lang.form.error_generic";Me(oe.error?.error.message||$(be),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{g.value=!1}}}async function ae(){return D||!fe.value?!0:E.ask({message:$("backend::lang.form.unsaved_confirm"),confirmLabel:$("backend::lang.form.discard"),danger:!0})}async function ue(){fe.value&&!await E.ask({message:$("backend::lang.form.unsaved_confirm"),confirmLabel:$("backend::lang.form.discard"),danger:!0})||await Q(ke.value)}E0(ae),A0(ae);function re(se){fe.value&&(se.preventDefault(),se.returnValue="")}return ft(()=>{window.addEventListener("beforeunload",re),window.addEventListener(Gl,ie)}),xt(()=>{window.removeEventListener("beforeunload",re),window.removeEventListener(Gl,ie)}),Xt(()=>Pm(h.value?"":de.value)),xt(Tm),pe(),(se,oe)=>(m(),x("section",IT,[S("header",BT,[N(Ke,{variant:"outline","data-action":"back","aria-label":u($)(_e.value?"backend::lang.form.return_to_preview":"backend::lang.form.return_to_list"),class:"size-10! px-0!",onClick:ue},{default:F(()=>[N(u(Ts),{size:18,"aria-hidden":"true"})]),_:1},8,["aria-label"]),S("div",FT,[S("h1",NT,M(h.value?"":de.value),1),xe.value?(m(),x("p",VT,M(xe.value),1)):ee("",!0)]),Y.value.length>0?(m(),j(vd,{key:0,modelValue:k.value,"onUpdate:modelValue":oe[0]||(oe[0]=be=>k.value=be),tabs:Y.value,"id-prefix":dl},null,8,["modelValue","tabs"])):ee("",!0)]),b.value&&!h.value?(m(),x("p",LT,M(u($)("backend::lang.form.load_failed")),1)):i.value?(m(),x(me,{key:1},[N(Qr,{errors:f.value,"field-names":L.value,forbidden:p.value},null,8,["errors","field-names","forbidden"]),S("form",{id:Y.value.length>0?u(ni)(dl,I.value):void 0,role:Y.value.length>0?"tabpanel":void 0,"aria-labelledby":Y.value.length>0?u(Yl)(dl,I.value):void 0,class:"rounded-card border border-border bg-surface p-7 shadow-card",novalidate:"",onSubmit:it(G,["prevent"])},[N(io,{fields:le.value,values:c.value,errors:f.value,notices:v.value,labels:d.value,source:a,"record-id":u(s),"id-prefix":dl,onUpdate:he},null,8,["fields","values","errors","notices","labels","record-id"])],40,jT)],64)):ee("",!0),S("footer",zT,[u(o)==="update"?(m(),j(Ke,{key:0,variant:"danger","data-action":"delete",icon:u(zr),disabled:g.value||h.value||!i.value,onClick:$e},{default:F(()=>[we(M(u($)("backend::lang.form.delete")),1)]),_:1},8,["icon","disabled"])):ee("",!0),S("div",UT,[N(Ke,{variant:"ghost","data-action":"cancel",onClick:ue},{default:F(()=>[we(M(u($)("backend::lang.form.cancel")),1)]),_:1}),N(Ke,{variant:"outline","data-action":"save-close",disabled:g.value||h.value||!i.value||u(R)>0,onClick:ne},{default:F(()=>[we(M(u($)("backend::lang.form.save_and_close")),1)]),_:1},8,["disabled"]),N(Ke,{variant:"primary","data-action":"save",disabled:g.value||h.value||!i.value||u(R)>0,onClick:G},{default:F(()=>[we(M(g.value?u($)("backend::lang.form.saving"):u($)("backend::lang.form.save")),1)]),_:1},8,["disabled"])])]),N(Pa,{open:u(E).request.value!==null,message:u(E).request.value?.message??"","confirm-label":u(E).request.value?.confirmLabel,danger:u(E).request.value?.danger,onConfirm:u(E).confirm,onCancel:u(E).cancel,"onUpdate:open":oe[1]||(oe[1]=be=>{be||u(E).cancel()})},null,8,["open","message","confirm-label","danger","onConfirm","onCancel"])]))}}),HT=["data-preview-field"],KT=["id"],WT={class:"m-0 min-w-0"},GT={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"},YT={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"},JT={class:"flex size-[22px] shrink-0 items-center justify-center rounded-full bg-primary text-[10px] font-bold text-on-primary","aria-hidden":"true"},ZT={class:"font-semibold"},QT={key:0,class:"px-2 text-muted","data-empty":""},XT={key:0},eq={key:1,class:"text-muted","data-empty":""},tq={key:0},nq={key:1,class:"text-muted","data-empty":""},ou="flex min-h-input items-center rounded-control border border-border bg-subtle px-3.5 [overflow-wrap:anywhere]",aq=Z({__name:"PreviewField",props:{field:{},value:{},labels:{},source:{},recordId:{},idPrefix:{}},setup(e){const t=e,n=new Set(["datepicker","fileupload","partial","permissioneditor"]),a=_(()=>`${t.idPrefix??"preview"}-${t.field.name}`),r=_(()=>`${a.value}-label`),l=_(()=>{const v=t.field.type;return n.has(v)||ri(t.field)?"control":v==="checkbox"||v==="switch"?"toggle":v==="relation"?t.field.multiple?"chips":"relation":v==="textarea"?"textarea":"text"}),o=_(()=>({...t.field,readOnly:!0})),s=_(()=>fg(t.field));function i(v){return v==null||v===""}const c=_(()=>{const v=t.value;if(i(v)||typeof v=="object")return"";if(t.field.type==="dropdown"){const h=(t.field.options??[]).find(b=>String(b.value)===String(v));return h?h.label:String(v)}return String(v)}),d=_(()=>t.labels?.[0]?.label??""),f=_(()=>Array.isArray(t.value)?t.labels??[]:[]);function p(v){return v.trim().split(/\s+/).filter(Boolean).slice(0,2).map(b=>b.charAt(0).toUpperCase()).join("")}return(v,h)=>(m(),x("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"},M(e.field.label||e.field.name),9,KT),S("dd",WT,[l.value==="control"?(m(),j(Vt(s.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"?(m(),x(me,{key:1},[u(id)(e.value)?(m(),x("span",GT,M(u($)("backend::lang.list.column_switch_true")),1)):(m(),x("span",YT,M(u($)("backend::lang.list.column_switch_false")),1))],64)):l.value==="chips"?(m(),x("div",{key:2,"data-preview-value":"",class:ge([ou,"flex-wrap gap-1.5 p-1.5"])},[(m(!0),x(me,null,Oe(f.value,b=>(m(),x("span",{key:String(b.value),"data-chip":"",class:"inline-flex min-h-[30px] items-center gap-1.5 rounded-pill bg-surface pr-3 pl-1"},[S("span",JT,M(p(b.label)),1),S("span",ZT,M(b.label),1)]))),128)),f.value.length===0?(m(),x("span",QT,M(u($)("backend::lang.list.empty_value")),1)):ee("",!0)])):l.value==="relation"?(m(),x("div",{key:3,"data-preview-value":"",class:ge(ou)},[d.value!==""?(m(),x("span",XT,M(d.value),1)):(m(),x("span",eq,M(e.field.emptyOption||u($)("backend::lang.list.empty_value")),1))])):(m(),x("div",{key:4,"data-preview-value":"",class:ge([ou,l.value==="textarea"?"items-start! py-3 whitespace-pre-wrap":""])},[c.value!==""?(m(),x("span",tq,M(c.value),1)):(m(),x("span",nq,M(u($)("backend::lang.list.empty_value")),1))],2))])],8,HT))}}),rq=Z({__name:"RecordActions",props:{source:{},recordId:{},actions:{},disabled:{type:Boolean,default:!1}},emits:["busy","done","stale","gone"],setup(e,{emit:t}){const n=e,a=t,r=Ta(),l=q(!1);async function o(s){if(l.value||n.disabled)return;let i=0,c=!1,d="";if(await r.ask({message:s.confirm||$("backend::lang.form.action_confirm",{action:s.label}),confirmLabel:s.label,danger:!1},async()=>{l.value=!0,a("busy",!0);try{const p=await Pe.POST("/{vendor}/{plugin}/{controller}/{id}/actions/{action}",{params:{path:{...n.source,id:n.recordId,action:s.name}},body:{}});i=p.response.status,c=!!p.data,d=p.data?.data.message??p.error?.error.message??""}catch{i=0}finally{l.value=!1,a("busy",!1)}})){if(c){a("done",d||$("backend::lang.form.action_done"));return}if(i===409){Me($("backend::lang.form.action_stale"),"danger"),a("stale");return}if(i===404){a("gone");return}if(i===403){Me(d||$("backend::lang.list.action_forbidden"),"danger");return}Me(d||$("backend::lang.extension.action_failed"),"danger")}}return(s,i)=>e.actions.length>0?(m(),x(me,{key:0},[(m(!0),x(me,null,Oe(e.actions,c=>(m(),j(Ke,{key:c.name,variant:"outline",size:"md","data-record-action":c.name,disabled:e.disabled||l.value,onClick:d=>o(c)},{default:F(()=>[we(M(c.label),1)]),_:2},1032,["data-record-action","disabled","onClick"]))),128)),N(Pa,{open:u(r).request.value!==null,message:u(r).request.value?.message??"","confirm-label":u(r).request.value?.confirmLabel,danger:u(r).request.value?.danger,busy:u(r).busy.value,onConfirm:u(r).confirm,onCancel:u(r).cancel},null,8,["open","message","confirm-label","danger","busy","onConfirm","onCancel"])],64)):ee("",!0)}}),lq={class:"flex w-full flex-col gap-5 pb-24","data-preview":""},oq={class:"flex flex-wrap items-center gap-4"},sq={class:"flex min-w-0 flex-1 flex-col"},iq={class:"truncate text-[24px] font-bold tracking-[-0.02em]"},uq={key:0,class:"text-muted"},cq={key:0,role:"alert",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},dq=["id","role","aria-labelledby"],fq={class:"m-0 grid grid-cols-1 gap-x-6 gap-y-[22px] min-[600px]:grid-cols-2"},pq={class:"fixed inset-x-0 bottom-0 z-30 flex flex-wrap items-center gap-2.5 border-t border-border bg-surface px-8 py-3.5"},vq={class:"ml-auto flex flex-wrap items-center gap-2.5"},Do="preview",mq=Z({__name:"PreviewView",setup(e){const t=sn(),n=jr(),a={vendor:String(t.params.vendor??""),plugin:String(t.params.plugin??""),controller:String(t.params.controller??"")},r=Ms(a),l=Cn(r)??"/",o=Number(t.params.id),s=`${l}/${o}`,i=q(null),c=q({}),d=q({}),f=q([]),p=q(!0),v=q(!1),h=q(!1),b=q(Ot),g=q(0),y=new Set(["password","widget",rr]),k=_(()=>(i.value?.fields??[]).filter(xe=>ai(xe,"preview")&&!y.has(xe.type))),E=_(()=>{if(!k.value.some(_e=>_e.tab))return[];const xe=[];for(const _e of k.value){const ke=kn(_e);if(xe.some(Se=>Se.key===ke))continue;const fe={key:ke,label:_e.tab||$("backend::lang.form.tab_default"),errors:0};ke===Ot?xe.unshift(fe):xe.push(fe)}return xe}),D=_(()=>Math.max(E.value.findIndex(xe=>xe.key===b.value),0)),A=_(()=>{if(E.value.length===0)return k.value;const xe=E.value[D.value]?.key??Ot;return k.value.filter(_e=>kn(_e)===xe)}),B=_(()=>og(i.value?.fields,c.value,br(i.value?.meta))),V=_(()=>Ve(i.value?.messages.preview,void 0,{name:B.value})),U=_(()=>i.value?.preview?.headerPartial??""),C=_(()=>!p.value&&!v.value&&i.value!==null);function R(xe){switch(xe.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"}}async function W(){try{const xe=await Pe.GET("/{vendor}/{plugin}/{controller}/{id}",{params:{path:{...a,id:o}}});return xe.data?(c.value={...xe.data.data},d.value=xe.data.meta.labels??{},f.value=xe.data.meta.actions??[],!0):!1}catch{return!1}}async function T(){p.value=!0,v.value=!1;const[xe,_e]=await Promise.all([Pe.GET("/{vendor}/{plugin}/{controller}/schema/form",{params:{path:a}}).catch(()=>null),W()]),ke=xe?.data?.data??null;if(ke&&!ke.preview){await n.replace(s);return}i.value=ke,v.value=!ke||!_e,ke&&ld(r,ke.assets),b.value=E.value[0]?.key??Ot,p.value=!1}async function L(){g.value++,await W()||(v.value=!0)}async function Y(xe){Me(xe),await L()}function I(){v.value=!0}const{activeUploads:le,beginUpload:X}=fd(),de=Wl();return gt(el,{key:de,recordId:o,routes:xe=>Qy(a,o,xe,de),markDirty:()=>{},pendingChanges:mt(q(0)),revision:mt(q(0)),beginUpload:X,activeUploads:mt(le)}),Xt(()=>Pm(p.value?"":B.value)),xt(Tm),T(),(xe,_e)=>(m(),x("section",lq,[S("header",oq,[N(Ke,{variant:"outline","data-action":"back",to:u(l),"aria-label":u($)("backend::lang.form.return_to_list"),class:"size-10! px-0!"},{default:F(()=>[N(u(Ts),{size:18,"aria-hidden":"true"})]),_:1},8,["to","aria-label"]),S("div",sq,[S("h1",iq,M(p.value?"":B.value),1),C.value&&V.value?(m(),x("p",uq,M(V.value),1)):ee("",!0)]),C.value&&E.value.length>0?(m(),j(vd,{key:0,modelValue:b.value,"onUpdate:modelValue":_e[0]||(_e[0]=ke=>b.value=ke),tabs:E.value,"id-prefix":Do},null,8,["modelValue","tabs"])):ee("",!0)]),v.value&&!p.value?(m(),x("p",cq,M(u($)("backend::lang.form.load_failed")),1)):C.value?(m(),x(me,{key:1},[U.value!==""?(m(),j(od,{key:0,variant:"header",hint:"",source:a,name:U.value,"record-id":u(o),"reload-key":g.value},null,8,["name","record-id","reload-key"])):ee("",!0),S("div",{id:E.value.length>0?u(ni)(Do,D.value):void 0,role:E.value.length>0?"tabpanel":void 0,"aria-labelledby":E.value.length>0?u(Yl)(Do,D.value):void 0,class:"rounded-card border border-border bg-surface p-7 shadow-card"},[S("dl",fq,[(m(!0),x(me,null,Oe(A.value,ke=>(m(),j(aq,{key:ke.name,class:ge(R(ke)),field:ke,value:c.value[ke.name],labels:d.value?.[ke.name],source:a,"record-id":u(o),"id-prefix":Do},null,8,["class","field","value","labels","record-id"]))),128))])],8,dq)],64)):ee("",!0),S("footer",pq,[S("div",vq,[C.value?(m(),j(rq,{key:0,source:a,"record-id":u(o),actions:f.value,disabled:h.value,onBusy:_e[1]||(_e[1]=ke=>h.value=ke),onDone:Y,onStale:L,onGone:I},null,8,["record-id","actions","disabled"])):ee("",!0),v.value?ee("",!0):(m(),j(Ke,{key:1,variant:"primary","data-action":"edit",icon:u(Sl),disabled:p.value||h.value,onClick:_e[2]||(_e[2]=ke=>u(n).push(s))},{default:F(()=>[we(M(u(Ve)(i.value?.messages.edit)),1)]),_:1},8,["icon","disabled"]))])])]))}}),hq={class:"flex w-full flex-col gap-5 pb-24"},yq={class:"flex items-center gap-4"},gq={class:"flex min-w-0 flex-col"},bq={class:"truncate text-[24px] font-bold tracking-[-0.02em]"},_q={key:0,class:"text-muted"},xq={key:0,role:"alert",class:"rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},kq={class:"fixed inset-x-0 bottom-0 z-30 flex items-center justify-end gap-2.5 border-t border-border bg-surface px-8 py-3.5"},zp="setting",wq=Z({__name:"SettingsFormView",setup(e){const t=sn(),n=String(t.params.code??""),a=q(null),r=q({}),l=q({}),o=q(!0),s=q(!1),i=q(!1),c=_(()=>(a.value?.fields??[]).filter(g=>ai(g,"update"))),d=_(()=>c.value.map(g=>g.name)),f=_(()=>Zo(n)?.label||a.value?.name||n),p=_(()=>Zo(n)?.description??"");async function v(){const g={path:{code:n}},[y,k]=await Promise.all([Pe.GET("/settings/{code}/schema",{params:g}),Pe.GET("/settings/{code}",{params:g})]);a.value=y.data?.data??null,r.value={...k.data?.data.data??{}},s.value=!y.data||!k.data,o.value=!1}function h(g,y){if(r.value={...r.value,[g]:y},l.value[g]){const k={...l.value};delete k[g],l.value=k}}async function b(){if(!(i.value||!a.value)){i.value=!0;try{const g=await Pe.PUT("/settings/{code}",{params:{path:{code:n}},body:Jt(c.value,r.value)});if(g.data){l.value={},r.value={...g.data.data.data},Me($("backend::lang.settings.saved"));return}if(g.response.status===422){l.value=Sa(g.error?.error.details);const y=c.value.find(k=>l.value[k.name]);await Ue(),y&&ar(zp,y.name);return}Me(g.error?.error.message||$("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{i.value=!1}}}return v(),(g,y)=>(m(),x("section",hq,[S("header",yq,[N(Ke,{variant:"outline","data-action":"back",to:"/settings","aria-label":u($)("backend::lang.settings.back"),class:"size-10! px-0!"},{default:F(()=>[N(u(Ts),{size:18,"aria-hidden":"true"})]),_:1},8,["aria-label"]),S("div",gq,[S("h1",bq,M(f.value),1),p.value?(m(),x("p",_q,M(p.value),1)):ee("",!0)])]),s.value&&!o.value?(m(),x("p",xq,M(u($)("backend::lang.form.load_failed")),1)):a.value?(m(),x(me,{key:1},[N(Qr,{errors:l.value,"field-names":d.value},null,8,["errors","field-names"]),S("form",{class:"rounded-card border border-border bg-surface p-7 shadow-card",novalidate:"",onSubmit:it(b,["prevent"])},[N(io,{fields:c.value,values:r.value,errors:l.value,source:null,"id-prefix":zp,onUpdate:h},null,8,["fields","values","errors"])],32)],64)):ee("",!0),S("footer",kq,[N(Ke,{variant:"ghost",to:"/settings"},{default:F(()=>[we(M(u($)("backend::lang.form.cancel")),1)]),_:1}),N(Ke,{variant:"primary","data-action":"save",disabled:i.value||o.value||!a.value,onClick:b},{default:F(()=>[we(M(i.value?u($)("backend::lang.form.saving"):u($)("backend::lang.form.save")),1)]),_:1},8,["disabled"])])]))}}),$q={class:"flex flex-col gap-5"},Cq={class:"text-[26px] font-bold tracking-[-0.02em]"},Sq={key:0,class:"text-muted"},Eq={key:0,class:"text-[13px] font-semibold tracking-[0.02em] text-muted uppercase"},Aq={class:"grid grid-cols-1 gap-3 min-[900px]:grid-cols-2"},Dq={class:"flex size-10 shrink-0 items-center justify-center rounded-inner bg-subtle text-muted"},Mq={class:"flex min-w-0 flex-col"},Oq={class:"font-semibold"},Pq={key:0,class:"text-[13px] text-muted"},Tq=Z({__name:"SettingsIndexView",setup(e){return(t,n)=>(m(),x("section",$q,[S("header",null,[S("h1",Cq,M(u($)("backend::lang.settings.title")),1)]),u(Df).length===0?(m(),x("p",Sq,M(u($)("backend::lang.settings.empty")),1)):ee("",!0),(m(!0),x(me,null,Oe(u(Df),a=>(m(),x("section",{key:a.category,"data-settings-group":"",class:"flex flex-col gap-3"},[a.category?(m(),x("h2",Eq,M(a.category),1)):ee("",!0),S("div",Aq,[(m(!0),x(me,null,Oe(a.entries,r=>(m(),j(u($n),{key:r.code,to:u(Im)(r),"data-settings":r.code,class:"flex items-start gap-3.5 rounded-card border border-border bg-surface p-5 text-text no-underline shadow-card hover:bg-hover"},{default:F(()=>[S("span",Dq,[(m(),j(Vt(u(Fs)(r.icon)),{size:20,"aria-hidden":"true"}))]),S("span",Mq,[S("span",Oq,M(r.label),1),r.description?(m(),x("span",Pq,M(r.description),1)):ee("",!0)])]),_:2},1032,["to","data-settings"]))),128))])]))),128))]))}}),qq={class:"flex items-start gap-3"},Rq={class:"flex min-w-0 flex-1 flex-col gap-1"},Iq=["disabled","aria-label"],Bq=["disabled"],Fq={class:"flex min-w-0 flex-col gap-1.5","data-field":"name"},Nq=["for"],Vq=["id","placeholder","aria-invalid","aria-describedby"],Lq=["id"],jq=["id"],zq={class:"flex min-w-0 flex-col gap-1.5","data-field":"expires"},Uq={id:"api-token-expires-label",class:"font-semibold"},Hq={class:"text-[13px] text-muted tabular-nums"},Kq={class:"flex min-w-0 flex-col gap-1.5","data-field":"scopes"},Wq={id:"api-token-scopes-label",class:"font-semibold"},Gq={key:0,role:"group","aria-labelledby":"api-token-scopes-label","data-scope-picker":"",class:"overflow-hidden rounded-inner border border-border"},Yq={key:1,role:"alert",class:"flex items-start gap-2 rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},Jq=["aria-invalid"],Zq=["data-scope"],Qq=["checked","disabled","onChange"],Xq={class:"flex min-w-0 flex-col"},eR={class:"flex flex-wrap items-center gap-1"},tR={class:"font-semibold"},nR={class:"font-mono text-[13px] text-muted"},aR={key:0,class:"inline-flex h-6 items-center rounded-pill bg-subtle px-2.5 text-[13px] font-semibold whitespace-nowrap text-muted"},rR={class:"text-[13px] text-muted [overflow-wrap:anywhere]"},lR={key:3,class:"flex items-center gap-2 text-[13px] text-muted"},oR=["id"],sR={class:"flex gap-2.5"},iR={key:1,class:"flex min-h-0 flex-col gap-4"},uR={class:"flex min-w-0 flex-col gap-2"},cR=["for"],dR=["id","value"],fR={class:"flex flex-wrap items-center gap-2"},pR={key:0,role:"alert",class:"flex items-center gap-1.5 text-[13px] text-danger"},vR={class:"sr-only","aria-live":"polite"},mR={class:"flex justify-end"},fn="api-token",hR=Z({__name:"ApiTokenCreateDialog",props:{open:{type:Boolean},confirm:{}},emits:["update:open","created","closed"],setup(e,{emit:t}){const n=e,a=t,r=[{value:"30d",label:"backend::lang.api_tokens.expires_30"},{value:"90d",label:"backend::lang.api_tokens.expires_90"},{value:"365d",label:"backend::lang.api_tokens.expires_365"},{value:"never",label:"backend::lang.api_tokens.expires_never"}],l=q(1),o=q(""),s=q("90d"),i=q(new Set),c=q([]),d=q(!1),f=q(!1),p=q(!1),v=q({}),h=q(""),b=q(!1),g=q(!1),y=q(!1),k=q("");let E=null;const D=q(null),A=q(null),B=q(null),V=_(()=>i.value.has("*")),U=_(()=>!d.value&&!f.value&&c.value.length>0&&!p.value);function C(P){return String(P).padStart(2,"0")}function R(P){const Q=new Date;return Q.setDate(Q.getDate()+P),`${Q.getFullYear()}-${C(Q.getMonth()+1)}-${C(Q.getDate())}`}const W=_(()=>{if(s.value==="never")return $("backend::lang.api_tokens.expires_never_note");const P=s.value==="30d"?30:s.value==="365d"?365:90;return $("backend::lang.api_tokens.expires_on",{date:R(P)})});function T(){h.value="",b.value=!1,g.value=!1,y.value=!1,k.value="",E!==null&&(clearTimeout(E),E=null)}function L(){l.value=1,o.value="",s.value="90d",i.value=new Set,v.value={},p.value=!1,f.value=!1,T()}function Y(P){a("update:open",P)}async function I(){d.value=!0,f.value=!1,c.value=[];try{const P=await Pe.GET("/account/tokens/scopes");if(P.data){const Q=P.data.data??[];c.value=Q,f.value=Q.length===0;return}f.value=!0}catch{f.value=!0}finally{d.value=!1}}Ie(()=>n.open,P=>{P?(L(),I()):(T(),l.value=1)});function le(P,Q){const G=new Set(i.value);if(P==="*"?Q?(G.clear(),G.add("*")):G.delete("*"):V.value||(Q?G.add(P):G.delete(P)),i.value=G,v.value.scopes){const ne={...v.value};delete ne.scopes,v.value=ne}}function X(P){return V.value&&P!=="*"}function de(){return V.value?["*"]:c.value.map(P=>P.name).filter(P=>i.value.has(P))}function xe(){const P=[`${fn}-name-comment`,v.value.name?`${fn}-name-error`:""].filter(Boolean);return P.length?P.join(" "):void 0}async function _e(){if(await Ue(),v.value.name){ar(fn,"name");return}if(v.value.scopes){const P=c.value.find(G=>!X(G.name));(P?document.querySelector(`[data-scope="${CSS.escape(P.name)}"] input[type="checkbox"]`):null)?.focus();return}v.value.expires&&document.querySelector("[data-expiry-segment]")?.focus()}async function ke(){if(!(p.value||!U.value||l.value!==1)){p.value=!0,v.value={};try{const P=await Pe.POST("/account/tokens",{body:{name:o.value,expires:s.value,scopes:de()}});if(P.data){h.value=P.data.data.token,l.value=2,a("created"),await Ue(),B.value?.querySelector("button")?.focus()??B.value?.focus();return}if(P.response.status===422){v.value=Sa(P.error?.error.details),await _e();return}Me($("backend::lang.api_tokens.create_failed"),"danger")}catch{Me($("backend::lang.api_tokens.create_failed"),"danger")}finally{p.value=!1}}}function fe(){b.value=!0,g.value=!1,y.value=!0,k.value=$("backend::lang.api_tokens.copied_announce"),E!==null&&clearTimeout(E),E=setTimeout(()=>{y.value=!1,E=null},2e3)}async function Se(){const P=h.value;if(P)try{if(!navigator.clipboard?.writeText)throw new Error("clipboard unavailable");await navigator.clipboard.writeText(P),fe()}catch{g.value=!0,await Ue(),A.value?.focus(),A.value?.select()}}function pe(){fe()}function Ae(P){P.target.select()}async function J(){T(),Y(!1)}async function K(){p.value||l.value===2&&h.value&&!b.value&&!await n.confirm.ask({message:$("backend::lang.api_tokens.close_uncopied_confirm"),confirmLabel:$("backend::lang.api_tokens.close_uncopied_submit"),danger:!0})||await J()}function te(P){if(!P){K();return}Y(!0)}function ie(P){if(P.preventDefault(),l.value===2){B.value?.querySelector("button")?.focus()??B.value?.focus();return}D.value?.focus()}function ce(P){P.preventDefault(),a("closed")}function he(P){(l.value===2||p.value)&&P.preventDefault()}function w(P){if(p.value){P.preventDefault();return}l.value===2&&(P.preventDefault(),K())}function O(){J()}return xt(()=>{T()}),(P,Q)=>(m(),j(u(Kr),{open:e.open,"onUpdate:open":te},{default:F(()=>[N(u(oo),null,{default:F(()=>[N(u(Gr),{"data-dialog-overlay":"",class:"fixed inset-0 z-40 bg-overlay"}),N(u(Wr),{"data-token-dialog":"","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 rounded-modal bg-surface p-6 text-text shadow-pop",onOpenAutoFocus:ie,onCloseAutoFocus:ce,onPointerDownOutside:he,onInteractOutside:he,onEscapeKeyDown:w},{default:F(()=>[S("div",qq,[S("div",Rq,[N(u(Yr),{class:"text-[20px] font-bold tracking-[-0.01em]"},{default:F(()=>[we(M(l.value===1?u($)("backend::lang.api_tokens.create_title"):u($)("backend::lang.api_tokens.created_title")),1)]),_:1}),l.value===1?(m(),j(u(Qa),{key:0,class:"text-muted"},{default:F(()=>[we(M(u($)("backend::lang.api_tokens.create_description")),1)]),_:1})):(m(),j(u(Qa),{key:1,"data-token-notice":"",role:"note",class:"flex items-start gap-2 rounded-inner bg-sel px-4 py-3.5 text-text"},{default:F(()=>[N(u(Jm),{size:16,class:"mt-0.5 shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.api_tokens.created_notice")),1)]),_:1}))]),S("button",{type:"button","data-action":"close",disabled:p.value,"aria-label":u($)("backend::lang.form.close"),class:"flex size-[34px] shrink-0 items-center justify-center rounded-tab bg-subtle text-muted hover:bg-hover hover:text-text disabled:cursor-not-allowed disabled:opacity-60",onClick:K},[N(u(Ht),{size:16,"aria-hidden":"true"})],8,Iq)]),l.value===1?(m(),x("form",{key:0,novalidate:"",class:"flex min-h-0 flex-col gap-4",onSubmit:it(ke,["prevent"])},[S("fieldset",{disabled:p.value,class:"flex min-h-0 flex-col gap-[18px] overflow-y-auto"},[S("div",Fq,[S("label",{for:`${fn}-name`,class:"font-semibold"},M(u($)("backend::lang.api_tokens.name")),9,Nq),ha(S("input",{id:`${fn}-name`,ref_key:"nameInput",ref:D,"onUpdate:modelValue":Q[0]||(Q[0]=G=>o.value=G),name:"name",type:"text",maxlength:"100",autocomplete:"off",placeholder:u($)("backend::lang.api_tokens.name_placeholder"),"aria-invalid":v.value.name?"true":void 0,"aria-describedby":xe(),class:ge([u(Tt)(!!v.value.name),"h-input"])},null,10,Vq),[[Fl,o.value]]),S("p",{id:`${fn}-name-comment`,class:"text-[13px] text-muted"},M(u($)("backend::lang.api_tokens.name_comment")),9,Lq),v.value.name?(m(),x("div",{key:0,id:`${fn}-name-error`,class:"flex flex-col gap-0.5 text-[13px] text-danger"},[(m(!0),x(me,null,Oe(v.value.name,(G,ne)=>(m(),x("p",{key:ne,class:"flex items-center gap-1.5"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(G),1)]))),128))],8,jq)):ee("",!0)]),S("div",zq,[S("span",Uq,M(u($)("backend::lang.api_tokens.expires")),1),N(u($y),{modelValue:s.value,"onUpdate:modelValue":Q[1]||(Q[1]=G=>s.value=G),orientation:"horizontal","aria-labelledby":"api-token-expires-label",class:"inline-flex flex-wrap gap-1 rounded-inner border border-border bg-subtle p-1"},{default:F(()=>[(m(),x(me,null,Oe(r,G=>N(u(Cy),{key:G.value,value:G.value,"data-expiry-segment":"",class:"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 data-[state=checked]:bg-surface data-[state=checked]:text-text data-[state=checked]:shadow-tab data-[state=checked]:text-[14px] data-[state=checked]:font-semibold"},{default:F(()=>[we(M(u($)(G.label)),1)]),_:2},1032,["value"])),64))]),_:1},8,["modelValue"]),S("p",Hq,M(W.value),1)]),S("div",Kq,[S("span",Wq,M(u($)("backend::lang.api_tokens.scopes")),1),d.value?(m(),x("div",Gq,[(m(),x(me,null,Oe(3,G=>S("div",{key:G,class:"flex min-h-[56px] items-center gap-3 border-t border-border px-4 py-3 first:border-t-0","aria-hidden":"true"},[...Q[2]||(Q[2]=[S("span",{class:"size-5 shrink-0 rounded-[6px] bg-skel"},null,-1),S("span",{class:"h-3 w-40 rounded-[6px] bg-skel"},null,-1)])])),64))])):f.value?(m(),x("div",Yq,[N(u(ct),{size:16,class:"mt-0.5 shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.api_tokens.scopes_failed")),1)])):(m(),x("div",{key:2,role:"group","aria-labelledby":"api-token-scopes-label","data-scope-picker":"","aria-invalid":v.value.scopes?"true":void 0,class:ge([v.value.scopes?"border-danger":"border-border","overflow-hidden rounded-inner border"])},[(m(!0),x(me,null,Oe(c.value,G=>(m(),x("label",{key:G.name,"data-scope":G.name,class:ge([X(G.name)?"cursor-not-allowed opacity-60":"cursor-pointer","flex min-h-[56px] items-start gap-3 border-t border-border px-4 py-3 first:border-t-0"])},[S("input",{type:"checkbox",class:"mt-0.5 size-5 shrink-0 rounded-[6px] accent-primary",checked:i.value.has(G.name),disabled:X(G.name),onChange:ne=>le(G.name,ne.target.checked)},null,40,Qq),S("span",Xq,[S("span",eR,[S("span",tR,M(G.label),1),S("span",nR,M(G.name),1),G.read_only?(m(),x("span",aR,M(u($)("backend::lang.api_tokens.read_only")),1)):ee("",!0)]),S("span",rR,M(G.description),1)])],10,Zq))),128))],10,Jq)),V.value?(m(),x("p",lR,[N(u(xc),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.api_tokens.scope_all_includes")),1)])):ee("",!0),v.value.scopes?(m(),x("div",{key:4,id:`${fn}-scopes-error`,class:"flex flex-col gap-0.5 text-[13px] text-danger"},[(m(!0),x(me,null,Oe(v.value.scopes,(G,ne)=>(m(),x("p",{key:ne,class:"flex items-center gap-1.5"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(G),1)]))),128))],8,oR)):ee("",!0)])],8,Bq),S("div",sR,[N(Ke,{variant:"outline",class:"flex-1","data-action":"create-token-cancel",disabled:p.value,onClick:K},{default:F(()=>[we(M(u($)("backend::lang.api_tokens.create_cancel")),1)]),_:1},8,["disabled"]),N(Ke,{variant:"primary",type:"submit",class:"flex-1","data-action":"create-token-submit",disabled:!U.value},{default:F(()=>[p.value?(m(),j(u(Cl),{key:0,size:16,class:"animate-spin","aria-hidden":"true"})):ee("",!0),we(" "+M(p.value?u($)("backend::lang.api_tokens.creating"):u($)("backend::lang.api_tokens.create_submit")),1)]),_:1},8,["disabled"])])],32)):(m(),x("div",iR,[S("div",uR,[S("label",{for:`${fn}-plaintext`,class:"sr-only"},M(u($)("backend::lang.api_tokens.token_label")),9,cR),S("input",{id:`${fn}-plaintext`,ref_key:"plaintextInput",ref:A,value:h.value,type:"text",readonly:"",autocomplete:"off",spellcheck:"false","data-token-plaintext":"",class:ge([u(Tt)(!1),"h-input bg-subtle font-mono text-[14px]"]),onFocus:Ae,onClick:Ae,onCopy:pe},null,42,dR),S("div",fR,[S("span",{ref_key:"copyButton",ref:B},[N(Ke,{variant:"outline",size:"sm",icon:y.value?u(ba):u(Lm),"data-action":"copy-token",onClick:Se},{default:F(()=>[we(M(y.value?u($)("backend::lang.api_tokens.copied"):u($)("backend::lang.api_tokens.copy")),1)]),_:1},8,["icon"])],512),g.value?(m(),x("p",pR,[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.api_tokens.copy_failed")),1)])):ee("",!0),S("span",vR,M(k.value),1)])]),S("div",mR,[N(Ke,{variant:"primary","data-action":"hide-token",onClick:O},{default:F(()=>[we(M(u($)("backend::lang.api_tokens.done")),1)]),_:1})])]))]),_:1})]),_:1})]),_:1},8,["open"]))}}),yR={"data-api-tokens":"",class:"flex flex-col gap-4 rounded-card border border-border bg-surface p-7 shadow-card"},gR={class:"flex flex-wrap items-start justify-between gap-4"},bR={class:"flex min-w-0 flex-col gap-1"},_R={class:"text-[18px] font-bold"},xR={class:"max-w-[640px] text-[13px] text-muted"},kR={key:0,class:"flex items-center gap-2"},wR=["checked"],$R={key:1,role:"list","data-token-list":"","aria-busy":"true",class:"flex flex-col overflow-hidden rounded-inner border border-border"},CR={key:2,role:"alert","data-tokens-error":"",class:"flex items-start gap-2 rounded-inner bg-danger-soft px-[18px] py-3.5 text-danger"},SR={key:3,"data-tokens-empty":"",class:"flex flex-col items-center gap-2 rounded-inner border border-dashed border-border-strong px-6 py-8 text-center"},ER={class:"flex size-10 items-center justify-center rounded-full bg-subtle text-muted"},AR={class:"font-semibold"},DR={class:"max-w-[420px] text-[13px] text-muted"},MR={key:4,role:"list","data-token-list":"",class:"flex flex-col overflow-hidden rounded-inner border border-border"},OR=["data-token-row"],PR={class:"flex min-w-0 flex-1 flex-col gap-2"},TR={class:"flex flex-wrap items-center gap-2"},qR=["aria-label"],RR={key:0,class:"inline-flex h-6 items-center rounded-pill bg-danger-soft px-2.5 text-[13px] font-semibold whitespace-nowrap text-danger"},IR={key:1,class:"inline-flex h-6 items-center rounded-pill border border-border-strong px-2.5 text-[13px] font-semibold whitespace-nowrap text-muted"},BR={"data-token-scopes":"",class:"flex flex-wrap gap-2"},FR=["title"],NR=Z({__name:"ApiTokensPanel",props:{confirm:{}},setup(e){const t=e,n=q([]),a=q(!0),r=q(!0),l=q(!1),o=q(!1),s=q(!1),i=q(null);function c(A){return String(A).padStart(2,"0")}function d(A){return typeof A=="string"&&A!==""}function f(A){const B=new Date(A);return Number.isNaN(B.getTime())?A:`${B.getFullYear()}-${c(B.getMonth()+1)}-${c(B.getDate())}`}function p(A){const B=new Date(A);return Number.isNaN(B.getTime())?A:`${f(A)} ${c(B.getHours())}:${c(B.getMinutes())}`}function v(A){const B=[$("backend::lang.api_tokens.created_at",{date:f(A.created_at)})];return d(A.last_used_at)?B.push($("backend::lang.api_tokens.last_used",{date:p(A.last_used_at)})):B.push($("backend::lang.api_tokens.never_used")),A.expired&&d(A.expires_at)?B.push($("backend::lang.api_tokens.expired_at",{date:f(A.expires_at)})):d(A.expires_at)?B.push($("backend::lang.api_tokens.expires_at",{date:f(A.expires_at)})):B.push($("backend::lang.api_tokens.no_expiry")),d(A.revoked_at)&&B.push($("backend::lang.api_tokens.revoked_at",{date:p(A.revoked_at)})),B.join(" · ")}function h(A){return d(A.revoked_at)}async function b(){a.value=!0,l.value=!1;try{const A=await Pe.GET("/account/tokens",{params:{query:o.value?{revoked:"1"}:{}}});if(A.data){n.value=A.data.data??[];return}l.value=!0,n.value=[]}catch{l.value=!0,n.value=[]}finally{a.value=!1,r.value=!1}}function g(A){o.value=A.target.checked,b()}function y(){s.value=!0}async function k(){await Ue(),i.value?.querySelector("button")?.focus()??i.value?.focus()}async function E(){await b()}async function D(A){await t.confirm.ask({message:$("backend::lang.api_tokens.revoke_confirm",{name:A.name}),confirmLabel:$("backend::lang.api_tokens.revoke_submit"),danger:!0},async()=>{const B=await Pe.DELETE("/account/tokens/{id}",{params:{path:{id:A.id}}});if(B.data){await b(),Me($("backend::lang.api_tokens.revoked")),await Ue(),i.value?.querySelector("button")?.focus()??i.value?.focus();return}if(B.response.status===404){Me($("backend::lang.api_tokens.gone"),"danger"),await b();return}Me($("backend::lang.api_tokens.revoke_failed"),"danger")})}return ft(()=>{b()}),(A,B)=>(m(),x("div",yR,[S("div",gR,[S("div",bR,[S("h2",_R,M(u($)("backend::lang.api_tokens.section")),1),S("p",xR,M(u($)("backend::lang.api_tokens.section_comment")),1)]),S("span",{ref_key:"createButton",ref:i},[N(Ke,{variant:"outline",size:"sm",icon:u(Rs),"data-action":"create-token",disabled:r.value&&a.value,onClick:y},{default:F(()=>[we(M(u($)("backend::lang.api_tokens.create")),1)]),_:1},8,["icon","disabled"])],512)]),!l.value&&!r.value?(m(),x("label",kR,[S("input",{type:"checkbox","data-show-revoked":"",class:"size-5 shrink-0 rounded-[6px] accent-primary",checked:o.value,onChange:g},null,40,wR),S("span",null,M(u($)("backend::lang.api_tokens.show_revoked")),1)])):ee("",!0),a.value?(m(),x("div",$R,[(m(),x(me,null,Oe(3,V=>S("div",{key:V,role:"listitem",class:"flex flex-col gap-2 border-t border-border px-4 py-3.5 first:border-t-0","aria-hidden":"true"},[...B[1]||(B[1]=[S("span",{class:"h-3 w-40 rounded-[6px] bg-skel"},null,-1),S("span",{class:"h-3 w-64 rounded-[6px] bg-skel"},null,-1)])])),64))])):l.value?(m(),x("div",CR,[N(u(ct),{size:16,class:"mt-0.5 shrink-0","aria-hidden":"true"}),S("span",null,M(u($)("backend::lang.api_tokens.load_failed")),1)])):n.value.length===0?(m(),x("div",SR,[S("span",ER,[N(u(vk),{size:20,"aria-hidden":"true"})]),S("p",AR,M(u($)("backend::lang.api_tokens.empty_title")),1),S("p",DR,M(u($)("backend::lang.api_tokens.empty_body")),1)])):(m(),x("div",MR,[(m(!0),x(me,null,Oe(n.value,V=>(m(),x("div",{key:V.id,role:"listitem","data-token-row":V.id,class:"flex items-start justify-between gap-4 border-t border-border px-4 py-3.5 first:border-t-0 max-sm:flex-col"},[S("div",PR,[S("div",TR,[S("span",{class:ge([h(V)?"text-muted":"text-text","font-semibold [overflow-wrap:anywhere]"])},M(V.name),3),S("span",{class:"font-mono text-[13px] text-muted","aria-label":u($)("backend::lang.api_tokens.hint",{last4:V.hint})},"g15_…"+M(V.hint),9,qR),V.expired&&!h(V)?(m(),x("span",RR,M(u($)("backend::lang.api_tokens.state_expired")),1)):ee("",!0),h(V)?(m(),x("span",IR,M(u($)("backend::lang.api_tokens.state_revoked")),1)):ee("",!0)]),S("div",BR,[(m(!0),x(me,null,Oe(V.scopes,U=>(m(),x("span",{key:U.name,title:U.known?U.name:u($)("backend::lang.api_tokens.unknown_scope_hint"),class:ge([U.known?"bg-subtle text-text":"border border-dashed border-border-strong font-mono text-muted","inline-flex h-6 items-center rounded-pill px-2.5 text-[13px] font-semibold whitespace-nowrap"])},M(U.known?U.name==="*"?u($)("backend::lang.api_tokens.scope_all"):U.label:u($)("backend::lang.api_tokens.unknown_scope",{name:U.name})),11,FR))),128))]),S("p",{class:ge([(h(V),"text-muted"),"text-[13px] tabular-nums"])},M(v(V)),3)]),h(V)?ee("",!0):(m(),j(Ke,{key:0,variant:"danger",size:"sm",icon:u(F_),"data-action":"revoke-token",class:"max-sm:self-start","aria-label":u($)("backend::lang.api_tokens.revoke_named",{name:V.name}),onClick:U=>D(V)},{default:F(()=>[we(M(u($)("backend::lang.api_tokens.revoke")),1)]),_:1},8,["icon","aria-label","onClick"]))],8,OR))),128))])),N(hR,{open:s.value,"onUpdate:open":B[0]||(B[0]=V=>s.value=V),confirm:e.confirm,onCreated:E,onClosed:k},null,8,["open","confirm"])]))}}),VR={class:"flex w-full flex-col gap-5 pb-24","data-account":""},LR={class:"flex min-w-0 flex-col"},jR={class:"truncate text-[24px] font-bold tracking-[-0.02em]"},zR={class:"text-muted"},UR={class:"flex flex-col gap-3 rounded-card border border-border bg-surface p-7 shadow-card","data-account-avatar":""},HR={class:"text-[18px] font-bold"},KR={class:"flex flex-wrap items-center gap-5"},WR=["src"],GR={key:1,"aria-hidden":"true","data-account-avatar-initials":"",class:"flex size-20 shrink-0 items-center justify-center rounded-full bg-accent text-[26px] font-bold text-on-accent"},YR={class:"flex flex-col gap-2"},JR={class:"flex flex-wrap gap-2.5"},ZR={class:"text-[13px] text-muted"},QR={key:0,role:"alert","data-avatar-error":"",class:"flex flex-col gap-0.5 text-[13px] text-danger"},XR={class:"flex flex-col gap-[18px]"},eI={class:"mb-[18px] text-[18px] font-bold"},tI={class:"flex min-w-0 flex-col gap-1.5"},nI=["for"],aI=["id","value"],rI={class:"grid grid-cols-1 gap-[18px] md:grid-cols-2"},lI=["data-field"],oI=["for"],sI=["id","name","type","autocomplete","value","aria-invalid","aria-describedby","onInput"],iI=["id"],uI=["id"],cI={class:"flex flex-col gap-[18px]"},dI={class:"mb-1.5 text-[18px] font-bold"},fI={class:"text-[13px] text-muted"},pI={class:"grid grid-cols-1 gap-[18px] md:grid-cols-3"},vI=["data-field"],mI=["for"],hI=["id","name","autocomplete","value","aria-invalid","aria-describedby","onInput"],yI=["id"],gI={class:"fixed inset-x-0 bottom-0 z-30 flex items-center justify-end gap-2.5 border-t border-border bg-surface px-8 py-3.5"},Up="account",bI="image/jpeg,image/png,image/gif,image/webp",_I=Z({__name:"AccountView",setup(e){const t=[{name:"first_name",label:"backend::lang.myaccount.first_name",type:"text",autocomplete:"given-name"},{name:"last_name",label:"backend::lang.myaccount.last_name",type:"text",autocomplete:"family-name"},{name:"email",label:"backend::lang.myaccount.email",type:"email",autocomplete:"email"},{name:"subtitle",label:"backend::lang.myaccount.subtitle",type:"text",autocomplete:"organization-title",comment:"backend::lang.myaccount.subtitle_comment"}],n=[{name:"current_password",label:"backend::lang.myaccount.current_password",type:"password",autocomplete:"current-password"},{name:"password",label:"backend::lang.myaccount.password",type:"password",autocomplete:"new-password"},{name:"password_confirmation",label:"backend::lang.myaccount.password_confirmation",type:"password",autocomplete:"new-password"}],a=[...t,...n].map(R=>R.name);function r(){const R=Bt.value;return{first_name:R?.first_name??"",last_name:R?.last_name??"",email:R?.email??"",subtitle:R?.subtitle??""}}const l=q(r()),o=q({current_password:"",password:"",password_confirmation:""}),s=q({}),i=q(!1),c=_(()=>Bt.value?.login??""),d=q(null),f=q(!1),p=q([]),v=_(()=>Bt.value?.avatar?.thumb_url||Bt.value?.avatar?.url||""),h=_(()=>qy(Bt.value)),b=Ta();function g(){d.value?.click()}async function y(R){const W=R.target,T=W.files?.[0];if(W.value="",!(!T||f.value)){f.value=!0,p.value=[];try{const L=await Pe.POST("/account/avatar",{body:{file_data:""},bodySerializer:()=>{const Y=new FormData;return Y.append("file_data",T,T.name),Y}});if(L.data){Qi(L.data.data),Me($("backend::lang.myaccount.avatar_saved"));return}if(L.response.status===422){const Y=Sa(L.error?.error.details);p.value=Y.avatar??Object.values(Y).flat();return}if(L.response.status===413){p.value=[$("backend::lang.myaccount.avatar_hint")];return}Me($("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{f.value=!1}}}async function k(){if(!(f.value||!await b.ask({message:$("backend::lang.myaccount.avatar_remove_confirm"),confirmLabel:$("backend::lang.myaccount.avatar_remove"),danger:!0}))){f.value=!0,p.value=[];try{const W=await Pe.DELETE("/account/avatar");if(W.data){Qi(W.data.data),Me($("backend::lang.myaccount.avatar_removed"));return}Me($("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{f.value=!1}}}function E(R){return`${Up}-${R}`}function D(R){const T=[R.comment?`${E(R.name)}-comment`:"",s.value[R.name]?`${E(R.name)}-error`:""].filter(Boolean).join(" ");return T===""?void 0:T}function A(R){if(s.value[R]){const W={...s.value};delete W[R],s.value=W}}function B(R,W){l.value={...l.value,[R]:W},A(R)}function V(R,W){o.value={...o.value,[R]:W},A(R)}function U(){const R={first_name:l.value.first_name,last_name:l.value.last_name,email:l.value.email,subtitle:l.value.subtitle};return o.value.password!==""&&(R.current_password=o.value.current_password,R.password=o.value.password,R.password_confirmation=o.value.password_confirmation),R}async function C(){if(!i.value){i.value=!0;try{const R=await Pe.PUT("/account",{body:U()});if(R.data){s.value={},Qi(R.data.data),l.value=r(),o.value={current_password:"",password:"",password_confirmation:""},Me($("backend::lang.myaccount.saved"));return}if(R.response.status===422){s.value=Sa(R.error?.error.details);const W=a.find(T=>s.value[T]);await Ue(),W&&ar(Up,W);return}Me($("backend::lang.form.error_generic"),"danger")}catch{Me($("backend::lang.form.error_generic"),"danger")}finally{i.value=!1}}}return(R,W)=>(m(),x("section",VR,[S("header",LR,[S("h1",jR,M(u($)("backend::lang.myaccount.menu_label")),1),S("p",zR,M(u($)("backend::lang.myaccount.menu_description")),1)]),N(Qr,{errors:s.value,"field-names":u(a)},null,8,["errors","field-names"]),S("div",UR,[S("h2",HR,M(u($)("backend::lang.myaccount.avatar")),1),S("div",KR,[v.value?(m(),x("img",{key:0,src:v.value,alt:"","data-account-avatar-image":"",class:"size-20 shrink-0 rounded-full object-cover"},null,8,WR)):(m(),x("span",GR,M(h.value),1)),S("div",YR,[S("div",JR,[N(Ke,{variant:"outline",size:"sm",icon:u(sk),"data-action":"avatar-upload",disabled:f.value,onClick:g},{default:F(()=>[we(M(u($)("backend::lang.myaccount.avatar_upload")),1)]),_:1},8,["icon","disabled"]),u(Bt)?.avatar?(m(),j(Ke,{key:0,variant:"danger",size:"sm",icon:u(zr),"data-action":"avatar-remove",disabled:f.value,onClick:k},{default:F(()=>[we(M(u($)("backend::lang.myaccount.avatar_remove")),1)]),_:1},8,["icon","disabled"])):ee("",!0)]),S("p",ZR,M(u($)("backend::lang.myaccount.avatar_hint")),1)]),S("input",{ref_key:"avatarInput",ref:d,type:"file",name:"file_data",accept:bI,class:"hidden","data-account-avatar-input":"",onChange:y},null,544)]),p.value.length>0?(m(),x("div",QR,[(m(!0),x(me,null,Oe(p.value,(T,L)=>(m(),x("p",{key:L,class:"flex items-center gap-1.5"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(T),1)]))),128))])):ee("",!0)]),S("form",{class:"flex flex-col gap-7 rounded-card border border-border bg-surface p-7 shadow-card",novalidate:"",onSubmit:it(C,["prevent"])},[S("fieldset",XR,[S("legend",eI,M(u($)("backend::lang.myaccount.profile")),1),S("div",tI,[S("label",{for:E("login"),class:"font-semibold"},M(u($)("backend::lang.myaccount.login")),9,nI),S("input",{id:E("login"),name:"login",type:"text",value:c.value,readonly:"","data-account-login":"",class:ge([u(Tt)(!1),"h-input bg-hover text-muted"])},null,10,aI)]),S("div",rI,[(m(),x(me,null,Oe(t,T=>S("div",{key:T.name,class:"flex min-w-0 flex-col gap-1.5","data-field":T.name},[S("label",{for:E(T.name),class:"font-semibold"},M(u($)(T.label)),9,oI),S("input",{id:E(T.name),name:T.name,type:T.type,autocomplete:T.autocomplete,value:l.value[T.name],"aria-invalid":s.value[T.name]?"true":void 0,"aria-describedby":D(T),class:ge([u(Tt)(!!s.value[T.name]),"h-input"]),onInput:L=>B(T.name,L.target.value)},null,42,sI),T.comment?(m(),x("p",{key:0,id:`${E(T.name)}-comment`,class:"text-[13px] text-muted"},M(u($)(T.comment)),9,iI)):ee("",!0),s.value[T.name]?(m(),x("div",{key:1,id:`${E(T.name)}-error`,class:"flex flex-col gap-0.5 text-[13px] text-danger"},[(m(!0),x(me,null,Oe(s.value[T.name],(L,Y)=>(m(),x("p",{key:Y,class:"flex items-center gap-1.5"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(L),1)]))),128))],8,uI)):ee("",!0)],8,lI)),64))])]),S("fieldset",cI,[S("legend",dI,M(u($)("backend::lang.myaccount.password_section")),1),S("p",fI,M(u($)("backend::lang.myaccount.password_comment")),1),S("div",pI,[(m(),x(me,null,Oe(n,T=>S("div",{key:T.name,class:"flex min-w-0 flex-col gap-1.5","data-field":T.name},[S("label",{for:E(T.name),class:"font-semibold"},M(u($)(T.label)),9,mI),S("input",{id:E(T.name),name:T.name,type:"password",autocomplete:T.autocomplete,value:o.value[T.name],"aria-invalid":s.value[T.name]?"true":void 0,"aria-describedby":D(T),class:ge([u(Tt)(!!s.value[T.name]),"h-input"]),onInput:L=>V(T.name,L.target.value)},null,42,hI),s.value[T.name]?(m(),x("div",{key:0,id:`${E(T.name)}-error`,class:"flex flex-col gap-0.5 text-[13px] text-danger"},[(m(!0),x(me,null,Oe(s.value[T.name],(L,Y)=>(m(),x("p",{key:Y,class:"flex items-center gap-1.5"},[N(u(ct),{size:14,class:"shrink-0","aria-hidden":"true"}),S("span",null,M(L),1)]))),128))],8,yI)):ee("",!0)],8,vI)),64))])])],32),N(NR,{confirm:u(b)},null,8,["confirm"]),N(Pa,{open:u(b).request.value!==null,message:u(b).request.value?.message??"","confirm-label":u(b).request.value?.confirmLabel,danger:u(b).request.value?.danger,busy:u(b).busy.value,onConfirm:u(b).confirm,onCancel:u(b).cancel},null,8,["open","message","confirm-label","danger","busy","onConfirm","onCancel"]),S("footer",gI,[N(Ke,{variant:"primary","data-action":"save",disabled:i.value,onClick:C},{default:F(()=>[we(M(i.value?u($)("backend::lang.form.saving"):u($)("backend::lang.form.save")),1)]),_:1},8,["disabled"])])]))}}),xI={class:"flex flex-col items-center gap-2 py-20 text-center"},kI={class:"text-[17px] font-bold"},Hp=Z({__name:"NotFoundView",props:{home:{type:Boolean}},setup(e){return(t,n)=>(m(),x("section",xI,[S("h1",kI,M(e.home?u($)("backend::lang.nav.empty"):u($)("backend::lang.page.not_found")),1)]))}});function pg(e){return typeof e!="string"||e.length===0||!e.startsWith("/")||e.startsWith("//")||e.startsWith("/\\")?null:e}const wI=new Set(["list","create","record","preview"]);function $I(e){if(typeof e.name!="string"||!wI.has(e.name))return"";const{vendor:t,plugin:n,controller:a}=e.params;return typeof t!="string"||typeof n!="string"||typeof a!="string"?"":Ms({vendor:t,plugin:n,controller:a})}function CI(e=T0(Ps.base)){const t=Q0({history:e,routes:[{path:"/login",name:"login",component:p5,meta:{public:!0}},{path:"/",name:"home",component:Hp,props:{home:!0},meta:{shell:!0},beforeEnter:()=>g_()??!0},{path:"/settings",name:"settings",component:Tq,meta:{shell:!0}},{path:"/settings/:code",name:"settings-form",component:wq,meta:{shell:!0}},{path:"/account",name:"account",component:_I,meta:{shell:!0}},{path:"/:vendor/:plugin/:controller",name:"list",component:a8,meta:{shell:!0}},{path:"/:vendor/:plugin/:controller/create",name:"create",component:jp,meta:{shell:!0}},{path:"/:vendor/:plugin/:controller/:id(\\d+)",name:"record",component:jp,meta:{shell:!0}},{path:"/:vendor/:plugin/:controller/:id(\\d+)/preview",name:"preview",component:mq,meta:{shell:!0}},{path:"/:pathMatch(.*)*",name:"not-found",component:Hp,meta:{shell:!0}}]});return t.beforeEach(n=>{const a=Bt.value!==null;return n.meta.public?a&&n.name==="login"?pg(n.query.redirect)??"/":!0:a?!0:{name:"login",query:{redirect:n.fullPath}}}),t.afterEach((n,a,r)=>{r||QA($I(n))}),t}const SI="(prefers-color-scheme: dark)";function EI(e=window){const t=e.document.documentElement;if(typeof e.matchMedia!="function")return t.classList.remove("dark"),()=>{};const n=e.matchMedia(SI),a=l=>{t.classList.toggle("dark",l)};a(n.matches);const r=l=>a(l.matches);return n.addEventListener("change",r),()=>n.removeEventListener("change",r)}async function AI(){EI(),await m_().catch(()=>{}),await Ty().catch(()=>null)&&await Promise.all([qm().catch(()=>[]),Rm().catch(()=>[]),Hy()]);const t=CI();u_(()=>kA(t));const n=G1(JA);n.use(t),await t.isReady(),n.mount("#app")}AI(); diff --git a/modules/boardwalk/dist/index.html b/modules/boardwalk/dist/index.html index c37f224..2adfe4b 100644 --- a/modules/boardwalk/dist/index.html +++ b/modules/boardwalk/dist/index.html @@ -7,7 +7,7 @@ SummerCMS - +